Skip to content

Instantly share code, notes, and snippets.

@anvaka
Created March 14, 2014 20:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save anvaka/9555946 to your computer and use it in GitHub Desktop.
Save anvaka/9555946 to your computer and use it in GitHub Desktop.
requirebin sketch
var graph = require('ngraph.generators').noLinks(142);
graph.forEachNode(assignNiceColor);
var svg = require('ngraph.vivasvg')(graph);
svg.nodeTemplate("<circle r='5' fill='{{node.color}}'></circle>");
svg.linkTemplate("<arrow></arrow>'");
svg.run();
function assignNiceColor(node) {
var niceColors = ['#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a', '#d62728', '#ff9896', '#9467bd', '#c5b0d5', '#8c564b', '#c49c94', '#e377c2', '#f7b6d2', '#7f7f7f', '#c7c7c7', '#bcbd22', '#dbdb8d', '#17becf', '#9edae5'];
node.color = niceColors[(Math.random() * niceColors.length)|0];
}
function assignNiceColor(t){var e=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"];t.color=e[0|Math.random()*e.length]}require=function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var f="function"==typeof require&&require;if(!s&&f)return f(a,!0);if(i)return i(a,!0);throw Error("Cannot find module '"+a+"'")}var u=n[a]={exports:{}};t[a][0].call(u.exports,function(e){var n=t[a][1][e];return o(n?n:e)},u,u.exports,e,t,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;r.length>a;a++)o(r[a]);return o}({PGEl8d:[function(t,e){function n(t){if(!t||0>t)throw Error("Invalid number of nodes");var e,n=d();for(e=0;t-1>e;++e)n.addLink(e,e+1),n.addLink(t+e,t+e+1),n.addLink(e,t+e);return n.addLink(t-1,2*t-1),n}function r(t){if(!t||0>t)throw Error("Invalid number of nodes");var e=n(t);return e.addLink(0,t-1),e.addLink(t,2*t-1),e}function o(t){if(!t||1>t)throw Error("At least two nodes are expected for complete graph");var e,n,r=d();for(e=0;t>e;++e)for(n=e+1;t>n;++n)e!==n&&(r.addLink(e,n),r.addLink(n,e));return r}function i(t,e){if(!t||!e||0>t||0>e)throw Error("Graph dimensions are invalid. Number of nodes in each partition should be greate than 0");var n,r,o=d();for(n=0;t>n;++n)for(r=t;t+e>r;++r)o.addLink(n,r);return o}function a(t){if(!t||0>t)throw Error("Invalid number of nodes");var e,n=d();for(n.addNode(0),e=1;t>e;++e)n.addLink(e-1,e);return n}function s(t,e){if(1>t||1>e)throw Error("Invalid number of nodes in grid graph");var n,r,o=d();if(1===t&&1===e)return o.addNode(0),o;for(n=0;t>n;++n)for(r=0;e>r;++r){var i=n+r*t;n>0&&o.addLink(i,n-1+r*t),r>0&&o.addLink(i,n+(r-1)*t)}return o}function f(t,e,n){if(1>t||1>e||1>n)throw Error("Invalid number of nodes in grid3 graph");var r,o,i,a=d();if(1===t&&1===e&&1===n)return a.addNode(0),a;for(i=0;n>i;++i)for(r=0;t>r;++r)for(o=0;e>o;++o){var s=i*t*e,f=r+o*t+s;r>0&&a.addLink(f,r-1+o*t+s),o>0&&a.addLink(f,r+(o-1)*t+s),i>0&&a.addLink(f,r+o*t+(i-1)*t*e)}return a}function u(t){if(0>t)throw Error("Invalid number of nodes in balanced tree");var e,n=d(),r=Math.pow(2,t);for(0===t&&n.addNode(1),e=1;r>e;++e){var o=e,i=2*o,a=2*o+1;n.addLink(o,i),n.addLink(o,a)}return n}function c(t){if(0>t)throw Error("Number of nodes shoul be >= 0");var e,n=d();for(e=0;t>e;++e)n.addNode(e);return n}e.exports={ladder:n,complete:o,completeBipartite:i,balancedBinTree:u,path:a,circularLadder:r,grid:s,grid3:f,noLinks:c};var d=t("ngraph.graph")},{"ngraph.graph":3}],"ngraph.generators":[function(t,e){e.exports=t("PGEl8d")},{}],3:[function(t,e){function n(t,e){if(e.indexOf)return e.indexOf(t);var n,r=e.length;for(n=0;r>n;n+=1)if(e[n]===t)return n;return-1}function r(t){this.id=t,this.links=[],this.data=null}function o(t,e,n,r){this.fromId=t,this.toId=e,this.data=n,this.id=r}e.exports=function(){var e={},i=[],a={},s=0,f=0,u=[],c=function(t){t.fire("changed",u)},d=function(){f+=1},p=function(t){f-=1,0===f&&u.length>0&&(c(t),u.length=0)},l=function(t,e){u.push({node:t,changeType:e})},h=function(t,e){u.push({link:t,changeType:e})},v="👉 ",m={addNode:function(t,n){if(t===void 0)throw Error("Invalid node identifier");d();var o=this.getNode(t);return o?l(o,"update"):(o=new r(t),s++,l(o,"add")),o.data=n,e[t]=o,p(this),o},addLink:function(t,e,n){d();var r=this.getNode(t)||this.addNode(t),s=this.getNode(e)||this.addNode(e),f=""+t+v+(""+e),u=a.hasOwnProperty(f);(u||this.hasLink(t,e))&&(u||(a[f]=0),f+="@"+ ++a[f]);var c=new o(t,e,n,f);return i.push(c),r.links.push(c),s.links.push(c),h(c,"add"),p(this),c},removeLink:function(t){if(!t)return!1;var e=n(t,i);if(0>e)return!1;d(),i.splice(e,1);var r=this.getNode(t.fromId),o=this.getNode(t.toId);return r&&(e=n(t,r.links),e>=0&&r.links.splice(e,1)),o&&(e=n(t,o.links),e>=0&&o.links.splice(e,1)),h(t,"remove"),p(this),!0},removeNode:function(t){var n=this.getNode(t);if(!n)return!1;for(d();n.links.length;){var r=n.links[0];this.removeLink(r)}return delete e[t],s--,l(n,"remove"),p(this),!0},getNode:function(t){return e[t]},getNodesCount:function(){return s},getLinksCount:function(){return i.length},getLinks:function(t){var e=this.getNode(t);return e?e.links:null},forEachNode:function(t){if("function"==typeof t){var n;for(n in e)if(e.hasOwnProperty(n)&&t(e[n]))return}},forEachLinkedNode:function(t,n,r){var o,i,a,s=this.getNode(t);if(s&&s.links&&"function"==typeof n)if(r)for(o=0;s.links.length>o;++o)i=s.links[o],i.fromId===t&&n(e[i.toId],i);else for(o=0;s.links.length>o;++o)i=s.links[o],a=i.fromId===t?i.toId:i.fromId,n(e[a],i)},forEachLink:function(t){var e,n;if("function"==typeof t)for(e=0,n=i.length;n>e;++e)t(i[e])},beginUpdate:function(){d()},endUpdate:function(){p(this)},clear:function(){var t=this;t.beginUpdate(),t.forEachNode(function(e){t.removeNode(e.id)}),t.endUpdate()},hasLink:function(t,e){var n,r=this.getNode(t);if(!r)return null;for(n=0;r.links.length>n;++n){var o=r.links[n];if(o.fromId===t&&o.toId===e)return o}return null}},g=t("ngraph.events");return g(m),m}},{"ngraph.events":4}],4:[function(t,e){function n(t){var e={};return{on:function(n,r,o){if("function"!=typeof r)throw Error("callback is expected to be a function");return e.hasOwnProperty(n)||(e[n]=[]),e[n].push({callback:r,ctx:o}),t},off:function(n,r){var o=n===void 0;if(o)return e={},t;if(e.hasOwnProperty(n)){var i="function"!=typeof r;if(i)delete e[n];else for(var a=e[n],s=0;a.length>s;++s)a[s].callback===r&&a.splice(s,1)}return t},fire:function(n){var r=!e.hasOwnProperty(n);if(r)return t;for(var o=e[n],i=Array.prototype.splice.call(arguments,1),a=0;o.length>a;++a){var s=o[a];s.callback.apply(s.ctx,i)}return t}}}function r(t){if(!t)throw Error("Eventify cannot use falsy object as events subject");for(var e=["on","fire","off"],n=0;e.length>n;++n)if(t.hasOwnProperty(e[n]))throw Error("Subject cannot be eventified, since it already has property '"+e[n]+"'")}e.exports=function(t){r(t);var e=n(t);return t.on=e.on,t.off=e.off,t.fire=e.fire,t}},{}]},{},[]),require=function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var f="function"==typeof require&&require;if(!s&&f)return f(a,!0);if(i)return i(a,!0);throw Error("Cannot find module '"+a+"'")}var u=n[a]={exports:{}};t[a][0].call(u.exports,function(e){var n=t[a][1][e];return o(n?n:e)},u,u.exports,e,t,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;r.length>a;a++)o(r[a]);return o}({"/8huRy":[function(t,e){t("./lib/arrow");var n=t("ngraph.merge"),r=t("vivasvg");e.exports=function(e,o){function i(){M||(requestAnimationFrame(i),q||(nowStable=D.step(),a()))}function a(){M||(A||c(),T.forEach(s),S.forEach(f))}function s(t){t.fire("pos")}function f(t){t.fire("from")}function u(){if(o.layout)return o.layout;var n=t("ngraph.forcelayout"),r=t("ngraph.physics.simulator");return n(e,r(o.physics))}function c(){A=!0,e.forEachNode(d),e.forEachLink(m);var n=t("./lib/zoomer");_=new n,_.moveTo(C.clientWidth/2,C.clientHeight/2),L.appendChild(_);var o=new r.ItemsControl;o.setItemTemplate(E),o.setItemSource(S),_.appendChild(o);var i=new r.ItemsControl;i.setItemTemplate('<g transform="translate({{pos.x}}, {{pos.y}})" onmousedown="{{mousedown}}">'+k+"</g>"),i.setItemSource(T),_.appendChild(i),y(!0),x(!0)}function d(t){T.push(r.model({pos:D.getNodePosition(t.id),id:t.id,node:t,mousedown:l}))}function p(){if(N){var t=N.node;D.pinNode(t,N.wasPinned)}N=null}function l(t,e){N=e,N.wasPinned=D.isNodePinned(e.node),D.pinNode(e.node,!0);var n=_.getModelPosition(t.clientX,t.clientY);P=n.x-e.pos.x,I=n.y-e.pos.y,t.stopPropagation(),B.fire("nodeSelected",e.node)}function h(t){if(N){w();var e=_.getModelPosition(t.clientX,t.clientY);D.setNodePosition(N.id,e.x-P,e.y-I),s(N),t.stopPropagation(),t.preventDefault()}}function v(){}function m(t){S.push(r.model({pos:D.getLinkPosition(t.id),link:t}))}function g(){}function y(t){e[t?"on":"off"]("changed",b)}function x(t){var e=L.getVisual(),n=t?"addEventListener":"removeEventListener";e[n]("mousemove",h),e[n]("mouseup",p)}function b(t){w();for(var e=0;t.length>e;++e){var n=t[e];"add"===n.changeType?(n.node&&d(n.node),n.link&&m(n.link)):"remove"===n.changeType&&(n.node&&v(n.node),n.link&&g(n.link))}}function w(){q=!1}o=n(o,{physics:{springLength:30,springCoeff:8e-4,dragCoeff:.01,gravity:-1.2,theta:1}});var _,k,E,N,P,I,C=o.container||document.body,L=new r.Document(C),T=r.collection(),S=r.collection(),D=u(),q=!1,M=!1,A=!1,B={run:i,renderOneFrame:a,layout:D,dispose:function(){D.dispose(),L.dispose(),B.off(),M=!0,y(!1),x(!1)},nodeTemplate:function(t){k=t},linkTemplate:function(t){E=t}};return t("ngraph.events")(B),B}},{"./lib/arrow":3,"./lib/zoomer":6,"ngraph.events":7,"ngraph.forcelayout":8,"ngraph.merge":10,"ngraph.physics.simulator":11,vivasvg:25}],"ngraph.vivasvg":[function(t,e){e.exports=t("/8huRy")},{}],3:[function(t){function e(t,e,o){function i(){a(h.provide(),v.provide())}function a(t,e){var n=0,r=0;if(y){n=t.x-e.x,r=t.y-e.y;var o=Math.sqrt(n*n+r*r);n=y*n/o,r=y*r/o}d.x=t.x-n,d.y=t.y-r,p.x=e.x+n,p.y=e.y+r}var s=o.createElement("path"),f=r.bindingParser(e),u=t.getAttributeNS(null,"stroke"),c=f.parse(u);c?s.setAttributeNS(null,"stroke",c.provide()):u&&s.setAttributeNS(null,"stroke",u);var d,p,l=n(o,u),h=f.parse(t.getAttributeNS(null,"from")),v=f.parse(t.getAttributeNS(null,"to"));if(h&&v){var m=h.provide(),g=v.provide();h.on("from",i),v.on("to",i),d=s.createSVGPathSegMovetoAbs(m.x,m.y),p=s.createSVGPathSegLinetoAbs(g.x,g.y),s.pathSegList.appendItem(d),s.pathSegList.appendItem(p)}s.setAttributeNS(null,"marker-end","url(#"+l+")");var y=parseFloat(t.getAttributeNS(null,"offset"))||0;return s}function n(t,e){var n=t.getOwnerDocument(t),r="ArrowAugmented"+e;return n&&!n[r]&&(n.addDef('<marker id="'+r+'" viewBox="0 0 10 10" refX="8" refY="5" markerUnits="strokeWidth" markerWidth="10" markerHeight="5" orient="auto" style="fill: '+e+'"><path d="M 0 0 L 10 5 L 0 10 z"></path></marker>'),n[r]=!0),r}var r=t("vivasvg");r.createTag("arrow",{_appendToDom:function(t){this._dom=e(this._markup,this._dataContext,this),t.appendChild(this._dom)}})},{vivasvg:25}],4:[function(t,e){e.exports=function(e){function n(t){i[t]=function(e){emitter.fire(t,e)},e[s](u+t,i[t])}function r(t){emitter.fire("wheel",t)}var o=t("ngraph.events"),i={};if(emitter=o({}),!e)return emitter;var a=t("wheel");a(e,r);var s,f,u="";window.addEventListener?(s="addEventListener",f="removeEventListener"):(s="attachEvent",f="detachEvent",u="on");var c=["mousedown","mousemove","mouseup"];return c.forEach(n),emitter.dispose=function(){emitter.off();for(var t in i)i.hasOwnProperty(t)&&e[f](u+t,i[t]);e[f]("wheel",r)},emitter}},{"ngraph.events":7,wheel:41}],5:[function(t,e){function n(t,e){function n(t){var e=0>t.deltaY,n=e?1:-1,r=1+.1*n;s(t.clientX,t.clientY,r)}function o(t){p=!0,u=t.clientX,c=t.clientY}function i(t){if(p){var n=t.clientX-u,r=t.clientY-c;f(e.e+n,e.f+r),u=t.clientX,c=t.clientY,t.preventDefault()}}function a(){p=!1}function s(t,n,r){e.e=t-r*(t-e.e),e.f=n-r*(n-e.f);var o=e.a*r;e.a=e.d=o}function f(t,n){e.e=t,e.f=n}var u,c,d=r(t),p=!1;return d.on("wheel",n),d.on("mousemove",i),d.on("mousedown",o),d.on("mouseup",a),{zoom:s,pan:f,dispose:function(){d.dispose()}}}e.exports=n;var r=t("./domEvents")},{"./domEvents":4}],6:[function(t,e){var n=t("vivasvg"),r=t("./input/zoomPan");e.exports=n.createTag("zoomer",{_appendToDom:function(t){var e=this.createElement("g"),n=this.getOwnerDocument()._dom,o=n.createSVGTransform();if(this._initialTransform){o.setTranslate(this._initialTransform.x,this._initialTransform.y);var i=this._initialTransform.scale;o.a=o.d=i}e.transform.baseVal.appendItem(o),this._dom=e,t.appendChild(this._dom),this._transform=o.matrix,this._zoomPan=r(n,o.matrix)},_dispose:function(){this._zoomPan&&this._zoomPan.dispose(),this._children&&this._children.forEach(function(t){t._dispose()})},moveTo:function(t,e){this._zoomPan?this._zoomPan.pan(t,e):this._initialTransform?(this._initialTransform.x=t,this._initialTransform.y=e):this._initialTransform={x:t,y:e,scale:1}},scale:function(t,e,n){this._zoomPan?this._zoomPan.zoom(t,e,n):this._initialTransform?(this._initialTransform.x=t,this._initialTransform.y=e,this._initialTransform.scale=scale):this._initialTransform={x:t,y:e,scale:scale}},getModelPosition:function(t,e){if(this._transform){var n=this._transform,r=n.a;return{x:(t-n.e)/r,y:(e-n.f)/r}}}})},{"./input/zoomPan":5,vivasvg:25}],7:[function(t,e){function n(t){var e={};return{on:function(n,r,o){if("function"!=typeof r)throw Error("callback is expected to be a function");return e.hasOwnProperty(n)||(e[n]=[]),e[n].push({callback:r,ctx:o}),t},off:function(n,r){var o=n===void 0;if(o)return e={},t;if(e.hasOwnProperty(n)){var i="function"!=typeof r;if(i)delete e[n];else for(var a=e[n],s=0;a.length>s;++s)a[s].callback===r&&a.splice(s,1)}return t},fire:function(n){var r=!e.hasOwnProperty(n);if(r)return t;var o,i=e[n];arguments.length>1&&(o=Array.prototype.splice.call(arguments,1));for(var a=0;i.length>a;++a){var s=i[a];s.callback.apply(s.ctx,o)}return t}}}function r(t){if(!t)throw Error("Eventify cannot use falsy object as events subject");for(var e=["on","fire","off"],n=0;e.length>n;++n)if(t.hasOwnProperty(e[n]))throw Error("Subject cannot be eventified, since it already has property '"+e[n]+"'")}e.exports=function(t){r(t);var e=n(t);return t.on=e.on,t.off=e.off,t.fire=e.fire,t}},{}],8:[function(t,e){function n(e,n){function o(){e.on("changed",i)}function i(t){for(var e=0;t.length>e;++e){var n=t[e];"add"===n.changeType?(n.node&&s(n.node.id),n.link&&u(n.link)):"remove"===n.changeType&&(n.node&&f(n.node),n.link&&c(n.link))}}function a(){e.forEachNode(function(t){s(t.id)}),e.forEachLink(u)}function s(t){var r=g[t];if(!r){var o=e.getNode(t);if(!o)throw Error("initBody() was called with unknown node id");var i=o.position;if(!i){var a=d(o);i=n.getBestNewBodyPosition(a)}r=n.addBodyAt(i),g[t]=r,p(t),l(o)&&(r.isPinned=!0)}}function f(t){var e=t.id,r=g[e];r&&(g[e]=null,delete g[e],n.removeBody(r))}function u(t){p(t.fromId),p(t.toId);var e=g[t.fromId],r=g[t.toId],o=n.addSpring(e,r,t.length);y[t.id]=o}function c(t){var r=y[t.id];if(r){var o=e.getNode(t.fromId),i=e.getNode(t.toId);o&&p(o.id),i&&p(i.id),delete y[t.id],n.removeSpring(r)}}function d(t){var e=[];if(!t.links)return e;for(var n=Math.min(t.links.length,2),r=0;n>r;++r){var o=t.links[r],i=o.fromId!==t.id?g[o.fromId]:g[o.toId];i&&i.pos&&e.push(i)}return e}function p(t){var e=g[t];e.mass=v(t)}function l(t){return t&&(t.isPinned||t.data&&t.data.isPinned)}function h(t){var e=g[t];return e||(s(t),e=g[t]),e}function v(t){return 1+e.getLinks(t).length/3}if(!e)throw Error("Graph structure cannot be undefined");var m=t("ngraph.physics.simulator");t("ngraph.physics.primitives"),n=n||m();var g={},y={};return a(),o(),{step:function(){var t=n.step();return r>t},getNodePosition:function(t){return h(t).pos},setNodePosition:function(t,e,n){var r=h(t);r.prevPos.x=r.pos.x=e,r.prevPos.y=r.pos.y=n},getLinkPosition:function(t){var e=y[t];return e?{from:e.from.pos,to:e.to.pos}:void 0},getGraphRect:function(){return n.getBBox()},pinNode:function(t,e){var n=h(t.id);n.isPinned=!!e},isNodePinned:function(t){return h(t.id).isPinned},dispose:function(){e.off("changed",i)},simulator:n}}e.exports=n;var r=.001},{"ngraph.physics.primitives":9,"ngraph.physics.simulator":11}],9:[function(t,e){function n(t,e){this.pos=new r(t,e),this.prevPos=new r(t,e),this.force=new r,this.velocity=new r,this.mass=1}function r(t,e){t&&"number"!=typeof t?(this.x="number"==typeof t.x?t.x:0,this.y="number"==typeof t.y?t.y:0):(this.x="number"==typeof t?t:0,this.y="number"==typeof e?e:0)}function o(t,e,n){this.pos=new i(t,e,n),this.prevPos=new i(t,e,n),this.force=new i,this.velocity=new i,this.mass=1}function i(t,e,n){t&&"number"!=typeof t?(this.x="number"==typeof t.x?t.x:0,this.y="number"==typeof t.y?t.y:0,this.z="number"==typeof t.z?t.z:0):(this.x="number"==typeof t?t:0,this.y="number"==typeof e?e:0,this.z="number"==typeof n?n:0)}e.exports={Body:n,Vector2d:r,Body3d:o,Vector3d:i},r.prototype.reset=function(){this.x=this.y=0},i.prototype.reset=function(){this.x=this.y=this.z=0}},{}],10:[function(t,e){function n(t,e){var r;if(t||(t={}),e)for(r in e)if(e.hasOwnProperty(r)){var o=t.hasOwnProperty(r),i=typeof e[r],a=!o||typeof t[r]!==i;a?t[r]=e[r]:"object"===i&&(t[r]=n(t[r],e[r]))}return t}e.exports=n},{}],11:[function(t,e){function n(e){function n(){var t,e=p.length;if(e)for(h.insertBodies(p);e--;)t=p[e],t.force.reset(),h.updateBodyForce(t),g.update(t);for(e=l.length;e--;)m.update(l[e])}var r=t("./lib/spring"),o=t("ngraph.expose"),i=t("ngraph.merge");e=i(e,{springLength:30,springCoeff:8e-4,gravity:-1.2,theta:.8,dragCoeff:.02,timeStep:20});var a=e.createQuadTree||t("ngraph.quadtreebh"),s=e.createBounds||t("./lib/bounds"),f=e.createDragForce||t("./lib/dragForce"),u=e.createSpringForce||t("./lib/springForce"),c=e.integrator||t("./lib/eulerIntegrator"),d=e.createBody||t("./lib/createBody"),p=[],l=[],h=a(e),v=s(p,e),m=u(e),g=f(e),y={bodies:p,step:function(){n();var t=c(p,e.timeStep);return v.update(),t},addBody:function(t){if(!t)throw Error("Body is required");return p.push(t),t},addBodyAt:function(t){if(!t)throw Error("Body position is required");var e=d(t);return p.push(e),e},removeBody:function(t){if(t){var e=p.indexOf(t);if(!(0>e))return p.splice(e,1),0===p.length&&v.reset(),!0}},addSpring:function(t,e,n,o,i){if(!t||!e)throw Error("Cannot add null spring to force simulator");"number"!=typeof n&&(n=-1);var a=new r(t,e,n,i>=0?i:-1,o);return l.push(a),a},removeSpring:function(t){if(t){var e=l.indexOf(t);return e>-1?(l.splice(e,1),!0):void 0}},getBestNewBodyPosition:function(t){return v.getBestNewPosition(t)},getBBox:function(){return v.box},gravity:function(t){return void 0!==t?(e.gravity=t,h.options({gravity:t}),this):e.gravity},theta:function(t){return void 0!==t?(e.theta=t,h.options({theta:t}),this):e.theta}};return o(e,y),y}e.exports=n},{"./lib/bounds":12,"./lib/createBody":13,"./lib/dragForce":14,"./lib/eulerIntegrator":15,"./lib/spring":16,"./lib/springForce":17,"ngraph.expose":18,"ngraph.merge":10,"ngraph.quadtreebh":20}],12:[function(t,e){e.exports=function(e,n){function r(){var t=e.length;if(0!==t){for(var n=Number.MAX_VALUE,r=Number.MAX_VALUE,o=Number.MIN_VALUE,a=Number.MIN_VALUE;t--;){var s=e[t];s.isPinned?(s.pos.x=s.prevPos.x,s.pos.y=s.prevPos.y):(s.prevPos.x=s.pos.x,s.prevPos.y=s.pos.y),n>s.pos.x&&(n=s.pos.x),s.pos.x>o&&(o=s.pos.x),r>s.pos.y&&(r=s.pos.y),s.pos.y>a&&(a=s.pos.y)}i.x1=n,i.x2=o,i.y1=r,i.y2=a}}var o=t("ngraph.random").random(42),i={x1:0,y1:0,x2:0,y2:0};return{box:i,update:r,reset:function(){i.x1=i.y1=0,i.x2=i.y2=0},getBestNewPosition:function(t){var e=i,r=0,a=0;if(t.length){for(var s=0;t.length>s;++s)r+=t[s].pos.x,a+=t[s].pos.y;r/=t.length,a/=t.length}else r=(e.x1+e.x2)/2,a=(e.y1+e.y2)/2;var f=n.springLength;return{x:r+o.next(f)-f/2,y:a+o.next(f)-f/2}}}}},{"ngraph.random":24}],13:[function(t,e){var n=t("ngraph.physics.primitives");e.exports=function(t){return new n.Body(t)}},{"ngraph.physics.primitives":19}],14:[function(t,e){e.exports=function(e){var n=t("ngraph.merge"),r=t("ngraph.expose");e=n(e,{dragCoeff:.02});var o={update:function(t){t.force.x-=e.dragCoeff*t.velocity.x,t.force.y-=e.dragCoeff*t.velocity.y}};return r(e,o,["dragCoeff"]),o}},{"ngraph.expose":18,"ngraph.merge":10}],15:[function(t,e){function n(t,e){var n,r=0,o=0,i=0,a=0,s=t.length;for(n=0;s>n;++n){var f=t[n],u=e/f.mass;f.velocity.x+=u*f.force.x,f.velocity.y+=u*f.force.y;var c=f.velocity.x,d=f.velocity.y,p=Math.sqrt(c*c+d*d);p>1&&(f.velocity.x=c/p,f.velocity.y=d/p),r=e*f.velocity.x,i=e*f.velocity.y,f.pos.x+=r,f.pos.y+=i,o+=r,a+=i}return(o*o+a*a)/t.length}e.exports=n},{}],16:[function(t,e){function n(t,e,n,r,o){this.from=t,this.to=e,this.length=n,this.coeff=r,this.weight="number"==typeof o?o:1}e.exports=n},{}],17:[function(t,e){e.exports=function(e){var n=t("ngraph.merge"),r=t("ngraph.random").random(42),o=t("ngraph.expose");e=n(e,{springCoeff:2e-4,springLength:80});var i={update:function(t){var n=t.from,o=t.to,i=0>t.length?e.springLength:t.length,a=o.pos.x-n.pos.x,s=o.pos.y-n.pos.y,f=Math.sqrt(a*a+s*s);0===f&&(a=(r.nextDouble()-.5)/50,s=(r.nextDouble()-.5)/50,f=Math.sqrt(a*a+s*s));var u=f-i,c=(!t.coeff||0>t.coeff?e.springCoeff:t.coeff)*u/f*t.weight;n.force.x+=c*a,n.force.y+=c*s,o.force.x-=c*a,o.force.y-=c*s}};return o(e,i,["springCoeff","springLength"]),i}},{"ngraph.expose":18,"ngraph.merge":10,"ngraph.random":24}],18:[function(t,e){function n(t,e,n){var o="[object Array]"===Object.prototype.toString.call(n);if(o)for(var i=0;n.length>i;++i)r(t,e,n[i]);else for(var a in t)r(t,e,a)}function r(t,e,n){if(t.hasOwnProperty(n)){if("function"==typeof e[n])return;e[n]=function(r){return void 0!==r?(t[n]=r,e):t[n]}}}e.exports=n},{}],19:[function(t,e){e.exports=t(9)},{}],20:[function(t,e){e.exports=function(e){e=e||{},e.gravity="number"==typeof e.gravity?e.gravity:-1,e.theta="number"==typeof e.theta?e.theta:.8;var n=t("ngraph.random").random(1984),r=t("./node"),o=t("./insertStack"),i=t("./isSamePosition"),a=e.gravity,s=[],f=new o,u=e.theta,c=[],d=0,p=function(){var t=c[d];return t?(t.quads[0]=null,t.quads[1]=null,t.quads[2]=null,t.quads[3]=null,t.body=null,t.mass=t.massX=t.massY=0,t.left=t.right=t.top=t.bottom=0):(t=new r,c[d]=t),++d,t},l=p(),h=function(t){for(f.reset(),f.push(l,t);!f.isEmpty();){var e=f.pop(),r=e.node,o=e.body;if(r.body){var a=r.body;if(r.body=null,i(a.pos,o.pos)){if(1e-8>r.right-r.left)return;do{var s=n.nextDouble(),u=(r.right-r.left)*s,c=(r.bottom-r.top)*s;a.pos.x=r.left+u,a.pos.y=r.top+c}while(i(a.pos,o.pos))}f.push(r,a),f.push(r,o)}else{var d=o.pos.x,h=o.pos.y;r.mass=r.mass+o.mass,r.massX=r.massX+o.mass*d,r.massY=r.massY+o.mass*h;var v=0,m=r.left,g=(r.right+m)/2,y=r.top,x=(r.bottom+y)/2;if(d>g){v+=1;var b=m;m=g,g+=g-b}if(h>x){v+=2;var w=y;y=x,x+=x-w}var _=r.quads[v];_?f.push(_,o):(_=p(),_.left=m,_.top=y,_.right=g,_.bottom=x,_.body=o,r.quads[v]=_)}}},v=function(t){var e,r,o,i,f=s,c=1,d=0,p=1;for(f[0]=l;c;){var h=f[d],v=h.body;c-=1,d+=1,v&&v!==t?(r=v.pos.x-t.pos.x,o=v.pos.y-t.pos.y,i=Math.sqrt(r*r+o*o),0===i&&(r=(n.nextDouble()-.5)/50,o=(n.nextDouble()-.5)/50,i=Math.sqrt(r*r+o*o)),e=a*v.mass*t.mass/(i*i*i),t.force.x+=e*r,t.force.y+=e*o):(r=h.massX/h.mass-t.pos.x,o=h.massY/h.mass-t.pos.y,i=Math.sqrt(r*r+o*o),0===i&&(r=(n.nextDouble()-.5)/50,o=(n.nextDouble()-.5)/50,i=Math.sqrt(r*r+o*o)),u>(h.right-h.left)/i?(e=a*h.mass*t.mass/(i*i*i),t.force.x+=e*r,t.force.y+=e*o):(h.quads[0]&&(f[p]=h.quads[0],c+=1,p+=1),h.quads[1]&&(f[p]=h.quads[1],c+=1,p+=1),h.quads[2]&&(f[p]=h.quads[2],c+=1,p+=1),h.quads[3]&&(f[p]=h.quads[3],c+=1,p+=1)))}},m=function(t){var e,n=Number.MAX_VALUE,r=Number.MAX_VALUE,o=Number.MIN_VALUE,i=Number.MIN_VALUE,a=t.length;for(e=a;e--;){var s=t[e].pos.x,f=t[e].pos.y;n>s&&(n=s),s>o&&(o=s),r>f&&(r=f),f>i&&(i=f)}var u=o-n,c=i-r;for(u>c?i=r+u:o=n+c,d=0,l=p(),l.left=n,l.right=o,l.top=r,l.bottom=i,e=a-1,e>0&&(l.body=t[e]);e--;)h(t[e],l)};return{insertBodies:m,updateBodyForce:v,options:function(t){return t?("number"==typeof t.gravity&&(a=t.gravity),"number"==typeof t.theta&&(u=t.theta),this):{gravity:a,theta:u}}}}},{"./insertStack":21,"./isSamePosition":22,"./node":23,"ngraph.random":24}],21:[function(t,e){function n(){this.stack=[],this.popIdx=0}function r(t,e){this.node=t,this.body=e}e.exports=n,n.prototype={isEmpty:function(){return 0===this.popIdx},push:function(t,e){var n=this.stack[this.popIdx];n?(n.node=t,n.body=e):this.stack[this.popIdx]=new r(t,e),++this.popIdx},pop:function(){return this.popIdx>0?this.stack[--this.popIdx]:void 0},reset:function(){this.popIdx=0}}},{}],22:[function(t,e){e.exports=function(t,e){var n=Math.abs(t.x-e.x),r=Math.abs(t.y-e.y);return 1e-8>n&&1e-8>r}},{}],23:[function(t,e){e.exports=function(){this.body=null,this.quads=[],this.mass=0,this.massX=0,this.massY=0,this.left=0,this.top=0,this.bottom=0,this.right=0,this.isInternal=!1}},{}],24:[function(t,e){function n(t){var e="number"==typeof t?t:+new Date,n=function(){return e=4294967295&e+2127912214+(e<<12),e=4294967295&(3345072700^e^e>>>19),e=4294967295&e+374761393+(e<<5),e=4294967295&(e+3550635116^e<<9),e=4294967295&e+4251993797+(e<<3),e=4294967295&(3042594569^e^e>>>16),(268435455&e)/268435456};return{next:function(t){return Math.floor(n()*t)},nextDouble:function(){return n()}}}function r(t,e){var r=e||n();if("function"!=typeof r.next)throw Error("customRandom does not match expected API: next() function is missing");return{forEach:function(e){var n,o,i;for(n=t.length-1;n>0;--n)o=r.next(n+1),i=t[o],t[o]=t[n],t[n]=i,e(i);t.length&&e(t[0])},shuffle:function(){var e,n,o;for(e=t.length-1;e>0;--e)n=r.next(e+1),o=t[n],t[n]=t[e],t[e]=o;return t}}}e.exports={random:n,randomIterator:r}},{}],25:[function(t,e){function n(t){e.exports[t]=r[t]}e.exports={collection:t("./lib/binding/collection"),model:t("./lib/binding/model"),bindingParser:t("./lib/binding/parser"),bootstrap:t("./lib/bootstrap"),createTag:t("./lib/utils/createTag"),svg:t("./lib/utils/svg")};var r=t("./lib/controls");Object.keys(r).forEach(n)},{"./lib/binding/collection":26,"./lib/binding/model":28,"./lib/binding/parser":29,"./lib/bootstrap":30,"./lib/controls":33,"./lib/utils/createTag":37,"./lib/utils/svg":40}],26:[function(t,e){function n(){var t=[],e={length:0,push:function(n){t.push(n),this.length+=1,e.fire("changed",{added:[n]})},splice:function(n,r){var o=t.splice(n,r);this.length=t.length,e.fire("changed",{removed:o,removeIdx:n})},get:function(e){return t[e]},forEach:function(e,n){t.forEach(e,n)}};return r(e),e}e.exports=n;var r=t("ngraph.events")},{"ngraph.events":7}],27:[function(t,e){function n(t,e,n,r){return prevOff=t.off,function(){prevOff(),a.off(e,n,r)}}function r(t,e,n){return function(){t.setAttributeNS(e.namespaceURI,e.localName,n.provide())}}function o(t){var e=t.provide(),n=t.model;return function(t){e(t,n)}}function i(t){return t.length>2&&"o"===t[0]&&"n"===t[1]}var a=t("../utils/domEvents");e.exports=function(t,e){var s,f=t.attributes;if(f)for(var u=0;f.length>u;++u){var c=f[u];if(s=e.parse(c.nodeValue))if(i(c.localName)){var d=c.localName.substr(2),p=o(s);a.on(t,d,p),s.off=n(s,t,d,p),t.removeAttributeNode(c),u-=1}else{t.setAttributeNS(c.namespaceURI,c.localName,s.provide());var l=s.activeProperties,h=l.length;if(1===h)s.on(l[0],r(t,c,s));else if(h>1)for(var v=r(t,c,s),m=0;h>m;++m)s.on(l[m],v)}}return 3===t.nodeType&&(s=e.parse(t.nodeValue),s&&(t.nodeValue=s.provide())),s}},{"../utils/domEvents":38}],28:[function(t,e){var n=t("ngraph.events");e.exports=function(t){return n(t)}},{"ngraph.events":7}],29:[function(t,e){var n=/{{(.+?)}}/g;t("ngraph.events"),e.exports=function(t){var e,r,o="function"==typeof t.on;return o?(e=t.on,r=t.off):e=r=function(){},{parse:function(o){var i=n.exec(o);if(i){var a,s,f=n.exec(o);if(f){var u={};a=[],o.replace(n,function(t,e){var n=e.split(".")[0];u[n]||a.push(n),u[n]=1}),s=function(){return o.replace(n,function(e,n){for(var r=n.split("."),o=t,i=0;r.length>i;++i)if(o=o[r[i]],!o)return void 0;return o})}}else{var c=i[1].split(".");a=[c[0]],s=1===c.length?function(){return t[c[0]]}:function(){for(var e=t,n=0;c.length>n;++n)if(e=e[c[n]],!e)return void 0;return e}}var d={provide:s,model:t,activeProperties:a,on:e,off:r};return d}}}}},{"ngraph.events":7}],30:[function(t,e){e.exports=function(e,n){for(var r=e.innerHTML;e.firstChild;)e.removeChild(e.firstChild);var o=t("./controls/document")(e);o.dataContext(n);var i=t("./controls/contentControl")();return i.markup(r),o.appendChild(i),o}},{"./controls/contentControl":31,"./controls/document":32}],31:[function(t,e){function n(e,n){function r(t,e){for(var n=0;t.length>n;++n)i(t[n],e)}function i(t,n){var i=o.getTag(t.localName);if(i){var a=new i;return a.markup(t),e.appendChild(a,n),a._dom}var s=t.cloneNode(!1),c=u(s,f);c&&e._registerBinding(c),n.appendChild(s);var d=t.childNodes;return d&&d.length>0&&r(d,s),s}var a=e._markup,s=e._dataContext;"string"==typeof a&&(a=t("../utils/domParser")(a));var f=t("../binding/parser")(s),u=t("../binding/element");if(1===a.length)e._dom=i(a[0],n);else{var c=e.createElement("g");r(a,c),n.appendChild(c),e._dom=c}}var r=t("../utils/createTag"),o=t("../extensions");e.exports=r("content",{_appendToDom:function(t){n(this,t)}})},{"../binding/element":27,"../binding/parser":29,"../extensions":36,"../utils/createTag":37,"../utils/domParser":39}],32:[function(t,e){function n(e){return this instanceof n?(o.call(this),this._ownerDocument=this,e&&"svg"===e.localName?this._dom=e:(this._dom=t("../utils/svg")("svg"),e.appendChild(this._dom)),void 0):new n(e)}function r(e){for(var n=e.childNodes,r=0;n.length>r;++r)if("defs"===n[r].localName)return n[r];var o=t("../utils/svg")("defs");return e.appendChild(o),o}e.exports=n;var o=t("./uiElement");n.prototype=Object.create(o.prototype),n.prototype.constructor=n,n.prototype.dispose=function(){this._dispose(),this._dom&&this._dom.parentNode&&this._dom.parentNode.removeChild(this._dom)},n.prototype.addDef=function(e){if(!e)throw Error("DefsMarkup is required argument for Document.addDef() method");for(var n=r(this._dom),o=t("../utils/domParser")(e),i=0;o.length>i;++i)n.appendChild(o[i])}},{"../utils/domParser":39,"../utils/svg":40,"./uiElement":35}],33:[function(t,e){e.exports={Document:t("./document"),ItemsControl:t("./itemsControl"),ContentControl:t("./contentControl"),UIElement:t("./uiElement")}},{"./contentControl":31,"./document":32,"./itemsControl":34,"./uiElement":35}],34:[function(t,e){function n(t){r(t);var e=t._itemSource;e.forEach(t._addItem,t)}function r(e){if(e._markup&&!e._itemSource){var n=e._markup,r=n.getAttributeNS(null,"source"),o=t("../binding/parser")(e._dataContext),i=o.parse(r);i&&e.setItemSource(i.provide()),e.setItemTemplate(n.innerHTML)}if(!e._itemSource||!e._itemTemplate)throw Error("Can not use items control without itemsSource and itemTemplate")}function o(t){var e,n=t.added;if(n)for(e=0;n.length>e;++e)this._addItem(n[e]);var r=t.removed;if(r){var o=t.removeIdx||0;this._removeItems(o,r.length)}}var i=t("../utils/createTag"),a=t("./contentControl");e.exports=i("items",{setItemTemplate:function(e){this._itemTemplate=e,this._nodePrototype=t("../utils/domParser")(e)},setItemSource:function(t){this._itemSource=t,t&&"function"==typeof t.on&&t.on("changed",o.bind(this))},_appendToDom:function(t){this._dom=this.createElement("g"),n(this),t.appendChild(this._dom)},_addItem:function(t){var e=new a;e.dataContext(t),e.markup(this._nodePrototype),this.appendChild(e)},_removeItems:function(t,e){var n=this._children.splice(t,e),r=this._dom;if(r)for(var o=0;n.length>o;++o)r.removeChild(n[o]._dom),n[o]._dispose()}})},{"../binding/parser":29,"../utils/createTag":37,"../utils/domParser":39,"./contentControl":31}],35:[function(t,e){function n(){return this instanceof n?(this._children=null,this._parent=null,void 0):new n}function r(t){t.render()}function o(t){t._dispose()}function i(t){t.off()}e.exports=n,n.prototype.render=function(){this._children&&this._children.forEach(r)},n.prototype.appendChild=function(t,e){(this._children||(this._children=[])).push(t),t._setParent(this),t._appendToDom(e||this._dom)},n.prototype.removeChild=function(t){if(this._children){var e=this._children.indexOf(t);e>=0&&this._children.splice(e,1)}t._dispose(),t._dom&&this._dom&&this._dom.removeChild(t._dom)},n.prototype.dataContext=function(t){this._dataContext=t},n.prototype.getOwnerDocument=function(){return this._ownerDocument},n.prototype.getVisual=function(){return this._dom},n.prototype.markup=function(t){this._markup=t},n.prototype.createElement=function(t){return document.createElementNS("http://www.w3.org/2000/svg",t)},n.prototype._setParent=function(t){this._parent=t,this._ownerDocument=t._ownerDocument,this._inheritDataContext()},n.prototype._appendToDom=function(t){this._dom&&t.appendChild(this._dom)},n.prototype._dispose=function(){this._bindings&&this._bindings.forEach(i),this._children&&this._children.forEach(o)},n.prototype._registerBinding=function(t){(this._bindings||(this._bindings=[])).push(t)},n.prototype._inheritDataContext=function(){!this._dataContext&&this._parent&&(this._dataContext=this._parent._dataContext)}},{}],36:[function(t,e){var n={};
e.exports.register=function(t,e){n[t]=e},e.exports.getTag=function(t){return n[t]}},{}],37:[function(t,e){function n(t){return["return function "+t+" () {","if (!(this instanceof "+t+")){"," return new "+t+"();","}","base.call(this);","}"].join("\n")}var r=t("../controls/uiElement"),o=t("../extensions"),i=/^\w+$/;e.exports=function(t,e){if(!i.test(t))throw Error("tagName is expected to contain only word characters, but found: "+t);var a=n(t),s=Function("base",a)(r);return s.prototype=Object.create(r.prototype),s.prototype.constructor=s,Object.keys(e).forEach(function(t){s.prototype[t]=e[t]}),t&&o.register(t,s),s}},{"../controls/uiElement":35,"../extensions":36}],38:[function(t,e){var n,r,o="";"undefined"!=typeof window&&window.addEventListener?(n="addEventListener",r="removeEventListener"):(n="attachEvent",r="detachEvent",o="on"),e.exports.on=function(t,e,r){t[n](o+e,r)},e.exports.off=function(t,e,n){t[r](o+e,n)}},{}],39:[function(t,e){var n=new DOMParser;e.exports=function(t){return n.parseFromString('<g xmlns="http://www.w3.org/2000/svg">'+t+"</g>","text/xml").children[0].children}},{}],40:[function(t,e){var n="http://www.w3.org/2000/svg";e.exports=function(t){return document.createElementNS(n,t)}},{}],41:[function(t,e){function n(t,e,n){r(t,i,e,n),"DOMMouseScroll"==i&&r(t,"MozMousePixelScroll",e,n)}function r(t,e,n,r){t[o](a+e,"wheel"==i?n:function(t){!t&&(t=window.event);var e={originalEvent:t,target:t.target||t.srcElement,type:"wheel",deltaMode:"MozMousePixelScroll"==t.type?0:1,deltaX:0,delatZ:0,preventDefault:function(){t.preventDefault?t.preventDefault():t.returnValue=!1}};return"mousewheel"==i?(e.deltaY=-1/40*t.wheelDelta,t.wheelDeltaX&&(e.deltaX=-1/40*t.wheelDeltaX)):e.deltaY=t.detail,n(e)},r||!1)}e.exports=n;var o,i,a="";window.addEventListener?o="addEventListener":(o="attachEvent",a="on"),i="onwheel"in document.createElement("div")?"wheel":void 0!==document.onmousewheel?"mousewheel":"DOMMouseScroll"},{}]},{},[]);var graph=require("ngraph.generators").noLinks(142);graph.forEachNode(assignNiceColor);var svg=require("ngraph.vivasvg")(graph);svg.nodeTemplate("<circle r='5' fill='{{node.color}}'></circle>"),svg.linkTemplate("<arrow></arrow>'"),svg.run();
{
"name": "requirebin-sketch",
"version": "1.0.0",
"dependencies": {
"ngraph.generators": "0.0.3",
"ngraph.vivasvg": "0.0.2"
}
}
<style type='text/css'>html, body { margin: 0; padding: 0; border: 0; }
body, html { height: 100%; width: 100%; }</style>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment