From a4ccfd40b8fef3b3d7e280e9e63dfffbbb71ca13 Mon Sep 17 00:00:00 2001 From: Dennis Hotson Date: Fri, 26 Oct 2012 00:31:34 +1100 Subject: [PATCH] Initial gh-pages commit --- branch.png | Bin 0 -> 31824 bytes cone.png | Bin 0 -> 17241 bytes dome.png | Bin 0 -> 46314 bytes index.html | 208 +++++++++++++++++++ nut.png | Bin 0 -> 27820 bytes pine.png | Bin 0 -> 18093 bytes springy.js | 578 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 786 insertions(+) create mode 100644 branch.png create mode 100644 cone.png create mode 100644 dome.png create mode 100644 index.html create mode 100644 nut.png create mode 100644 pine.png create mode 100644 springy.js diff --git a/branch.png b/branch.png new file mode 100644 index 0000000000000000000000000000000000000000..c46e7daae4a4438fd9c4bce3aceae3465c266666 GIT binary patch literal 31824 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

X={KwF78*35I29L^5EK8}?(g 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 + + + Springy - A force directed graph layout algorithm in JavaScript. + + + + + +

Springy.js

+

A force directed graph layout algorithm for JavaScript.

+ +
+
+

What is Springy?

+

Springy is a force directed graph layout algorithm.

+

So what does this “force directed” stuff mean anyway? Excellent question!

+

It basically means that it uses some real world physics to try and figure out how to show a network graph in a nice way.

+

Here's an example:

+ +

You can imagine it as a bunch of springs connected to each other.

+
+ + +
+ +
+

Basic usage

+

springy.js by itself is quite plain and doesn't include any code to do rendering or drag and drop etc. It's just for calculating the layout.

+

The drawing and interaction stuff is mostly up to you.

+

However, I've written a little helper jQuery plugin called springyui.js to help get you started. It's got a semi-decent default renderer and some half assed drag and drop.

+

Take a look at demo.html and springyui.js for an example of usage.

+
+ +
+ +
+

Advanced usage

+

If you're keen to do your own custom drawing, you'll need to know a few things before you get started.

+

This is the basic graph API, you can create nodes and edges etc.

+
+// make a new graph
+var graph = new Graph();
+
+// make some nodes
+var node1 = graph.newNode({label: 'Norway Spruce'});
+var node2 = graph.newNode({label: 'Sicilian Fir'});
+
+// connect them with an edge
+graph.newEdge(node1, node2);
+
+ +

So now to draw this graph, lets make a layout object:

+
+var layout = new Layout.ForceDirected(
+  graph,
+  400.0, // Spring stiffness
+  400.0, // Node repulsion
+  0.5 // Damping
+);
+
+

I've written a Renderer class, which will handle the rendering loop. You just need to provide some callbacks to do the actual drawing.

+
+var renderer = new Renderer(10, layout,
+  function clear() {
+    // code to clear screen
+  },
+  function drawEdge(edge, p1, p2) {
+    // draw an edge
+  },
+  function drawNode(node, p) {
+    // draw a node
+  }
+);
+
+ +

Now, just start the rendering loop:

+ +
+renderer.start();
+
+ +
+ +
+

Acknowledgements

+
+ +
+ + diff --git a/nut.png b/nut.png new file mode 100644 index 0000000000000000000000000000000000000000..89b389edf75156bbbe6ccb3f58d50e06184cb324 GIT binary patch literal 27820 zcmV)nK%KvdP)4Tx04NoOl21q!Q5?s=vn4{T1!X2u@J_aeT^Y24buipjS5vlST{A_9b>{8v z=<>SN7?O(N!GZ51~efES{cPQdy~l#mq{!3!)xygBoWz+2(QCu z|9xw+C?Oy*Qa0y2z9M+q<3Yjq9Md7qlwc*FQHf3Bu$4~5h+h()&iQ!S$11lK(kzqa zx?)=76G#&emX)0F+#!|?RWm4lk+@s6l>#w&2A+snP>hx{4D?(APJF7zCT(E(EpVZ| z9t*Vs=f{DSu6k@Y<<3WHS+}!Yovxh}i~`5kcXJ&%hU`Qd3C?YUn zp@=Mf|+J|RZf`9}80f`GL0wxqiMNbh#%sGJ^!iRc#>ZvEj(-Sj#>ZxZyJ(c57 z&v=+U6)|B(Q88cw15rdI+LFHKDW=z9nAw24%Pvm+e!Vl(U0q#W{nr2ezoB~bR;*Z& z$d%j(RK^jgRv9~$>r-w79D$s0=H#H#jzCU0EA6Anbu1^GIT@(5Bajo$O8aPX9m@%4 zP6jIN2;_vb(mtA8$8y4%lYvS*0y*KVw2vm&v7B(`WT4WHz`87)d6jn5a~&(u2vk|& zy!hgaN51gF3xhM=VdGorZ5BE3U zd^2e5*scu8Wv(o@Pd@pi-3>R~(26$mO3-fJ!3Q5a_xb0azn}zlSL^3% zuf28+V;=qZ9Td)l?DpLW`5i{P%~*nc!AofFP72C=m9&M1c&cb4SD zV(Qd8>7O~m;o5Dt-4;-%P7(Do_I3RD@uOO{Y#Gg-J^MP( zednEb(Ddg=H{Ep8l_hEGi!Z*|W1DTZnN8jNl=@PF2rXc{qHs<)*CF9lkm_D{-F2UB zvBehAkRd~&kt0Xm$i9riH*MOq%M^f1FTHeBihyJk#tg^XbDgMj=gtaH!_oSin@329t|2aXc1iQC^{sUOTA8m8*jWZAk?f`vo=jTR#*>1=Po$nzG>&@ zA&6fokT1Xd@*7y{p`EY3`fBHF?WFCm{^vjcIXdW|gFa(_pdep={q=C$OA2SrwEBhp z$?ad|8J79DlzD?09$1ZWO=$K=U`GR`euod#r&p-eC9tGms zYp;DHb$@DmAAb1ZAFT86!w*kjfAjbl0)5Oax7-pzC8EFlBl zQ(j))SGV4JYk%tGZMflvPl1>TkSsNlm6JM0EcG zpJ@}^NQs3D7mle@r_Me_oSS|q@3z}+n}J(O-{$*X8?KyyBkzS5VQhNk-0zARfpS&r zgb>d|{VuxeuDj;r-dS+ukw@mg{`%_)ob(C&i;3U;?so~$E`gd3>bOCJ20=g(I$c69 zFa+zR4+98!*?<1?pKaJb6G7~F#T8fFiyE#4ZD?}A1s5a~d{n!>*3y&}+itt94*dkK zrLC4MS(1RqCQ$9OifN=8UWmrU)X5!Q!x1P~OD zy{L8T){Ag4CHTDoMo1f+^{sBc`Q`)$O#=QH1b4xL1qsmXRRpa!_qH^?zvSgYtf=btvwHv z)nUKE|NY>7Ul0w7 zLzbzkH;)98&lDPjt3xplxfU+0nbv*lt+%dC)~){FgAW!?3ihoQZY9)u+6gC|;5nfl z#?!9xbx44oeBglx_KSbVpX8kW&g;1#A<)Tr)W zZ~N`HKMA9%50#dJx{q2Jca$Hi<(Y1@(MF$Z%;BR=Ajo*6$75h6Fvb+hHe@(yEF~U#=pjGy{gYO@=n=rEa$L-KgO{f76h z<|V*GF};5M`iZySetUoF#%?aX49$|~mgu9PpkQO7ZPTYrnbI-a3IF`(KL?Nr7EhRL z)vCn)au-gV;p1_X??`^-=cw+Z8I{%0$dSUm^a-jm(YSHr1S&j%N_Thc=bS}a+g1qN zQ~EL$J|1|YdGqF?Xg&x!z{<(;BdUEae$RvXo$*?6ML*lLX)_X+)nmGk$ZnbtMbTzN zuM+S?569Q{yQMlogtPo2I^S`}9SIUl3fD2|y@Fd7c-#WIi{6g$LW2Vsc#n5NmkXWpJMX;n`50XKL^n_~7!f1Da5%s7&g+^Ys}v^9ax}|ntL&_*KPrltgA^S>zeS9bzRRgxw@v!B|NZZOzlK_h z;F!VKz}=Bq1CT$sdu~@a(@Pu8Y9#;dQX2S1~|PcN_6=zqtMO+wUWZ zc$EZbf&@F5^sF1|-h1zjx^?Rop?3F)+vKycZZ0%IgmAvc?>5Hby$(^U2l#D>R<~E7 zkM;4#AMb?VN5h5h0aT_i^$#)N;5ENVR>23$9@B&n50X3}Fwv4?$ABpNwzPc)VFpANz?g9pq}D@4)yNi63vm=f>bWO^~3H;Jfkt7@4YJ{Xc2e6C5}JM>TH$HQL}h z{ILnnIe-Z@P*snnDCDX5Q9r@u^%S%w7*L`;KGs@r&)Z#`$K-l7zJ4h_S75~T*B>j7 z1wqGiuE-qnXB|JG(AzQ{OyLB8hw_*J#iEh|8?W0@d<&*~Kb5%==|ljQ&KZ+6k*CO~ijA=Rnwr~V}* zQU?kEg59izufU{~6?hiQnDmZCVc{9vf=8q-<1HnsoMkORc|OQ@vk@Rw zGAVMd;n_afm+GjdcZr{elN2!d=7(JI4*I&+8V@g+}M{MXvlc2xUGu(tWe}knV!o~ zt0&0ei1xu1^U++&uLt|hj5v@;R3 zTY%+l{oUe|@B$3ehl;um$f?mI^5HgmoH_wv@fMt~7eG`(m=Yv)ybZc0Foaaids1&% z+@7C3di1y+^_{ryzWYLERg)$H_iFy*r$Dn=2w*VeNF1@wkN$}ZD*te}@WABndPJ~p zf>SPzk7xRXNn!x?jhis!Su|mhoBN;^Z4=iTjR)D^P5wItu z0~iVk438!VY=P&2Bp1f#!*`$NA$^NMl>l85a#oHfFif_>V2k)`L5zKt?M#_6C85WG5_=Bfy36q}3{r@o5(x}5_phS=Id&Law>JCp zNHDohcNvp&Y}^2vU{AEdef0k>D8wm@k*=iX(3F!f%zU|ow4obX;Zan50*ijT_*`hn zt{7zgR6sX=;)y4Aby7k(E{p3_%Fl{~>C|f>cspWH0GzW`EfM*fk%<%xQiQuGBz&;w zEW)?xag%_HQ#aKi_v7#ZhW1>qWLuz!zYA460^HopBh+Ao;SlOr4?bF$J=A<4$m>yFjsos&BK+HdEz`gj%E>*+dp+|AwGcIyx=g zdh4xwB8=Y>^$EG5)H9RFk0bqKK>%ieV!MDQsy^2&h5ZQ47JLbQP0)Ijep%c?AreKM zvpJSk{gH$E4C*u?ML|$)?{c<6L(CnNrJ&u_Tt7klJwd=>ua&!3{somA>Nf@9Zq=w_ z98|f51{1vUUe0fgVRI>U78BDO0IKXDmem6iZ&&9fqGz=vE?3-bx|N(cmoOQ-L$$@&Vd7W)X>5iABkohkF%8W@aabI z;b1Va2+(6a)6Y-&tzl!<)t>O-4~aBI2xv%*L3{Xuinx6>Mm`fcB*|#liLeA3Y=1u{ z)0KEkywB-qluDPf73|QUdWN>PAl$keNWYNr zG6JQGD~u7x3)u2RbyU4PG~8>ucJ1V+4{^_@!KJO+4MhK$x|OPwi*TZ@zel*Hf<(Qu z-7V;N6USYC8?0;`P65{!(vZB zF#;_?d(@(?l%}YnpuWE6o_n@IJ%8@RRgJ6eLGPV8MpyC@#`g8?;O!o>{uSfVjE;{G_veQ9M0{>GDatH6Ow3elK|-8pg9d<10&e3$ov3=2WT z%cTMM0L}PGoOt4iAu=SI>TATE(gkDY6Oe8+{H`5*c8Cks;Ey4b2~~YD*0hFCdie^3 z-k9^|istau;0raegz^(e`k96q{I?N~{Nd>*`x`1SO=_U(M1aFWJzZO%b3S3xi6FBE zN`k(QHL=A)y)Jxo!-5_l>gv};ATGtQX@dXM>o{R7`5|sInRz7L?+&a<3xl5kI8VY>LdkE)#%WGVR)R) zKA>tuNDhS>%ypkpBqKm(#uEyRNPGzBgkLn;Z@>K_jS(X>JdB9-@4=|Bjs_2c9o#{F z_l07tZJ$H?8PSjZ^)VPG>yFakqVFbY$m0g1G6NbiK_ZNo)sj}ImnTBmU#|&|cCAq` zjtGhR3Z9wN(H&L8WB691z4zWbBH<($d!C2zT*&d&&846K$2VtqK^VaCNp26I1kqU*fpc;JU{y(8hH zeTgqGG=W2OW zpVy|G6MtQSLGw0LBc%Kxd z;GK^PDP(iR7c1%$7u+ej;(QN)#->J+n-MYGZ6fB!MV((+j+Lo!B1k_Ff4&X%HWh*U z62kunZnO!4bf{J_2FKm}J}C9(nb990aF^hi4(rts?xzv5KQnW8f*Ra`u`+@Bv)P>a zkHHRsa}Q~8

cwHv~Dsg{QacpT9wn66AD_HHpuu&)tgGvW9xN!Gq=%|{nLU?Y_ zhpKgM(zN-hXnp0f-uz(YLnCLrJ?K78If5_qkyB@2$~C-_+T zBkU>sQ^$THzzSiEFiR1z5h6B%8Uh3eU267yI2nO{UuU`qLI{aLLrSufW5=KAlgb};*ndVaqSu@*RP2~*x0q4Xv38KtMM#Ce7op)W+Fsd zrk;~rXC7zWq@PoOdYkU5Nx7-@L3erZSsAX=HVz-62?}52g_>?JFUGJ5{1?6`AB~;p z;d^{}BdZ=u0xh+Bm&07)cvg7g`~2+%4sJ zHMCMge%DUfmwwM%8hSOrfe~kaQpY;IZl(NPrpTExC6}SD9)B4;XOa$ zeXbEY5vTD29^6|X)hV3Yf<&j}g|pIQ5cQ+XVyGlg>#$;8??Y^cvKQ<;L_a${8c zCm2r&tmlAM^yLyNH%dJL??7|?jfOzsY@f%+2rW*AbAE!5gk2zWEd;f5d_4I%M_;1v zYof%V#}#Ol>&d!0*wv+=c?gS|Sb|$AoR(HU*%X9*$&!7%9+^juo3C`tLqqHj>d)c) znHXMknV^4jf8j~Le3_!}6popI3b}V1IQX7L`D%YTwQ_vRDgb5FJ=4ox#?7(?YW-0j zQb-Io<0f`%!0WamVc}}fY7z)C9zS6MV`vvpU54S9v%4>(B-Do^FZKsx~3EyGJd9|99w~a^dpR#kbBDI=U z8>R6gF$qXYiU53VXh@Sc<|tmDemhKF=__$(Ed$F0t}^h2%}{j$g)r_Yl<6Dj`S*- zelG$*clDuxIHt-OojQaE*gCEZZ|rEORK%gIbRi@U;)nbQL+e4gr^zX7N_eg0VLuk5 zuJvX5Jrjz*1{dFx#AEX>^??R2f);g#`bRK{8o6x6On)5t`|`Vs!mmG6YhV6rY9WZY zpADpyBLRh=rEraDP=#^U#|iHrf#$lC`uS<+RH~o(CY_c?!RgzfUAuPsz%Mrh1%oj7 z<~V1v;W?ec4!q815GYvNx>S4+4!&*{W_V{Fz~Rh%)qHI1#NAziLw+`b60BJr@)#kR zTrqL|_;U`|ti>9koprUiRtO~86rl~47{<#G`0U0SXLu5Za?&b723kMHq#6Kst#7{x zi#|`CuWX#?OHJ>lzTdY!|VU8ws=t)gZU6a)j` zkRl}!eNAeCN_B^0zYD)M25-QlQWXcVyo(Qb3ENM&bQZhu@I*n0mYasdbhg((+P|RM z8)H0d&D!&q803&oNpgls6ps)OeuR4FbH+uE7u-%7B9yQUAwF2d=g%OWMTYuZ#%?Gyj>z!~Q=HL0`J_QQz-QI+0j+5@mh=q!uRJDWL5j_ATXJuh$1E zikWmmapG2k?mVoIRW2&0bn+;a(jgJk@Ay8$Ino*3Q3$XTs|CS@v7qjSOcvK51pzjU zDTT3MwY%cegp<%m4K%dcCh*vAIqU=zL>$9RE;e>oY^ez0EX^JHfZRUAfxb6}(r%=B zO)=_XDj7)A2Q;3I>Q$;j-*w=dog@#WH1S>}_i_l#2SueGK>+c&*T8n?yx^Ob!ZFsoX5Zar}_7elR7}dInY@&szs~6#K1*X0A z?AbHSc-MQA1%5Y49{ORRTU*T4@=sdGyOv@smw`(CMG@lm2~@lZBKK;AyMaEbmU^aU zmt(yTBK~ib>Pjj&sq#mR7!g!35BCr0Cm|GVm}p_lF=)Oqhtr9Xbcgv$@{mTT+Ex&C zJAvRq07XAh(uo6F2X__PBqYJeN#VMI9;mLR08#-13A*nTa_Gb5cm>zcoEATBmor(!c27yKO}#N>9?fEF>H;y6CGt(mH4hZSA1Y*Kl%TcyE-Q=|?9+vLdH> zuBvBa`ktroXjm#ZW;MAQROEBgS`=g>Tb>Il2dBDiD45Ws5aN~kVA;D2In;GhNE;k` zL%<5O9s~_3uD2jGyk>u@!HqY>&EuP@5&}+j972KWT$%lEDm~0zC>8 zd2(@OIp}n$mGD`f#YY_l!bv5%VQl<^eIlx*8p7wN{Lb>ToKZAWXvi78)rlvqQ1yzE z3Z@aDcJ11Q+yG4mN)tT#AB;6vTR<+x5gklCW^&vNpWhkC2 zQQrt5-G{-yh)`lZUxjFt$OT=xp?nY=8x68-M_t=4wt#f6Ak<&-@Y?Hm7g>_A?%Ktk zOa+AKKB&fJ@V-H~o_;iu!v$vw7yR>RjGpma!?%HKsOrTi`8wI|Qt5*lLSaJi+UWb$ zf2n)Tc)Vz4kw+?gCb8&zH(OqfVKGK8g6dyY!-%jVrRv{y{l^OmrOQ@$nL}ZwmH_}M zg>Oa?Jv}d(JQLbQBMhXkC-b8ulQf(Y|Do@DbABh@P2d$D4`10#bNrGhKNph z1h)|b+8?!c2eW$;TxvEbsHIp`-xSt2c<7yoKpjk5zN$M!OW>~wto(tXkleGRE|CvW zfn!AwAF?@?lrH`$L0O6*zT*oZeCXzpGWjNOUPsljJdQNIUTBOC3K8Mf?~-lm>kR^A z-yIKyL*dk@QIMqwhG*@Q2&WJ$n1&-&-yW9=h}2RM)w3!Y-)nH#>+7^nqOdC5HZ7vB zLM&BsA`vbQhLUZ2eV>yPoo96i)k`{tp>6(DVW+RhmJo^b z2G~FL#fH`jRlf#~&U{s}Xy#bCp9vN$Y%Ol@M=q$K>Uejbp$G0^i%QEF?DS!gFJ#d)h$Emz?r z4Eeky-C6CxXi4hEkRv)M4xXQ)hVf`;wx~69=ujVYLoC_55U}q-rKjonE^O!t ze54@M1B5~AX~cNn8bI`~@PX;(5!rNwiM%EiThHVYC$;L9oY){}-loW|k>og;f8eK{ z1-YWf6gE*<3tb+n`$#ozn-;I5;9Jm8!AsydBB_%~!^xs>N-->q-QW2Lc0$;Z@&|st zJ?pA&XIH8mHBK6S_DL$X#wE4UHEtx^iKw*4crf>=Uf`DD9hIss2b`M@r^%~)ldx8~ z`*G(4-<&9-kSVNiz}-p47=vp35sUIkPVCK=8Yv2GF&Gn3fo(y-k@8#BpGXa{KZ&H? zxl9gyj~Z4P3+n7Dtlw{a*q+ZIx6W8GZKncb|3xc=?;{SU@~j5>6OD@}6GGxK_a(St zToeXmz9QO({*g9O)^0xNn#e-cE`!h{!%?W?L-1Z5(Ib45;pKwqf|*`l{X zY>{>(`{9DUu({uf5EsEh%3;Aqs6jg+3nuJH`GXc%$}<|k@q zr(U4j7&JeK;k*wV{V1avz& zoW4Gg=BV@vnSRrkX7WEL8K|o<7ME%~+R?$4nGW_Bo8D0;09=7}qiJ5c1(&`@&Jr<+?wkK0lytp{nKlE?C@yoDB43 zCsNI>6ZMhCWP zJjmA(_HFDRbwt-rY(t0Q$hH1eaK9pB|N;(MJw({q_5A`NyHPy z6gCAz;ZcitKe}|hN4dJ;N$HM32sMfKqR?t(Ye<^$E>c?bjf!}x__#gW*I}=K>ne+j zK;U&PMyk|Iy884A=ppbLEU8v-W33dQ8hEu<9m>7BUJnto=x=$f`y z+<6f*@j?dcS_b-b_|UlusOnoGGO8jGH}l3Dbf6SSXS3>0C$`q8gQf#sr?jpbEl`Ed zS9!~~EY5gS(LCR_R9}M!4-Re>6K|ae3X@hT5BM;w(!+=r%}0Q)KtRT8IEY>Y2M)Xj zRlQdcH@1-$v7yFfmebx$tR3Ks$NRwHu1{dS>vi}U1f0wSX->BPcWMB+s_13^4d)@>GS}#ADUH999%| zd{pTQqs1jO^yxtQ^cm>d87F=(kXWS8RF(ra6PN^D=+lKv^n)~poY-hSC+V*$VL{lh zYT?(NTmy9K2(K9kV!A3ZAg4&65y4=-kGgu62R{)+n~sW>WG`aV;P{zs37e3i-!tA+ z!6KKNMQL4+O^A@#8s6-PFz?$78UpXnz0t9CObm4Y|QmUd*I0@v~3a1%J8e#@0+$Zm|T{Vf8 zy%8*h&PnIFQ!tzqS_NE`RdA&b@=}G{`w>}vHKJO>YiO8RUx&U385g;$lSHA#f9!Y_ zNoC^m;Qi+#_!kHePI|9NP+~0fqNoWSpI+o=MI&c=XO>`Lf53JI2QFf}AB%T)GjNEC z9LY91{e(6A9s3r);`|A0kAN6gf+*6O23Y7_5t6eZ^1CW5R!4;d9WPFkWC5NUOz$%Pd{g--!;Vk%Gynnt0*r=ZCx zMO(v=8Yv2`0wwRXu5`%BZ9VTnbam26H`FSscD0Or(sf$)Q*NroZ(pnlXj^hW{O2M#ve+08ne`}nJ6G~M8d*IAGk=Q5b05%FTT5eHP;pAR)hcTuPW7mQU&Y8 zX7SwN9J`CHP%!y!nQNOGfO2g8igI81p$QzudJk`yz!II&^5@qWWN^HM*SS zo*G07off|cD>t<$XvWoTL*Y}9ZPQ7hfhCvaUPE2EutFUdxacEjuEo%T*WkFKXx0MF z`r79uZIC7@_@Mf0Sx+d%fie|NX5UH=Zz(#ER&_Zl;WVuFr{s^!>{n1-9n^@KizM&Bq1vS0DXQ-=RW5@px@L8%r=C;F?@#ma zFVG;<+EzeO#|r04t0UPMg49l9&SfMD32vh+K&pp|xYl|aDQ(?tik1qdf~X2rAT+Ry$y;1@thF!d%VDjr7l1e81r*j`6O9c}IHBZ<77^8=zttj5 zuz=Pp4}@PC|FpNCv3G=iKbNuAn(WjnEvpSQC}8&K(2lSy`(|m^L=InO+9k{J!v4Uw zwqk}az+Y&a-=UTY|0@RPc4Q#Ke!j2rT9|C@@?iGm!A-*T^B#u510dD;@V@=vdz*5O zuP4m-Iveh5Yuq&vsx?9oc8lBR9!GjFa7|zLQtbVp0#Ad(MyS{bVT-Vy&88~+uO8$R zgn!OuoA@OokkNL-d+`0l=n1b@WL(02_i<0*|7wDG;obS3>jt7n(1h^n9|S)lIu>3t ziRz7rK!q3ZqS8ZM>%&7sn|>!08ZjZlF^n(wXB-#yOHUr~o-hC-P^5@bK-o$OCwgs85w#$TDW@8j;+fKcQDRBL^Fai5^l zbe8|f_G!|!)DS`21dI36)Qe>Lj{13m$kJj4@j;x+a@hkkc;sao4!A>>fHF^`VqasM z$?V)-A@$Rp*8%MO)oSazpFuT-UFuKT)T>ZAlOGHDp`PbuRW~ z2E3o2B`F}%^9<&OJg8k?c;SW7K3Ivod<*wW4Iaw=Se}=YIdumr_c{erw~VUSAc1~Q zkmwy$^9&|WBV8}lxt(jT)PvbO(T#g+s@hg%`_Ogo=zA1tROz~P{BF^T*T|7qDtPum z9;jht9g|F;Ho-TkWgf4;(y~`LP2ZC;D7>m&t#vnzD#NTg%j4p`S`a#M0Xt2lF$a+FYU~{`auAb(2WC&1EEJdohD}H|>UL$mbFs)HU#wCe-VidOd{k zKOnTf7hyLY=EJE=8* znJE_;-N;8e>dj#={|PD{ zgaOl*7~+<#sbFdY z-7X4;JWdx4Mb4SEkeqS{zRGuu?&x@z<62bDF~`*R>Azy)VFpg9po(r<^j=e8l0vB3 zofKNf06}O+9x4rR+*Rj}hgP_6S2meLZmFOu`1(wJCT4b71Q3h4offoO;I*++KDOG! z!C(F~$_ zTPkS!9$SNS2Qo+(FtD{93}$>AKBwU1{WA|^qz{`kF#nJFrqnOWpplG!0Ltu$)!ZEc zeHbKZC~tEz=qkaO*q`>tQ?E=5!v7WOzX#jzNqxIrqeS6Sb&7tbu~F(2bJ69D(cY-* znRp%oU-aQCG@@uM5Vj##cb{t8Xp<PY(`xj9)l5|Po;wo&z zV20{n&aO}^+$J2y#aHj>oOk7b6GX?n(JN!@y3h=FVn8j8>-)(VT;s&_IFs!Rc6}co zryrf62M@t-+q)09*c}8VE{>0v=Ce$YGwp)Tpor~r;NFa$Mhwo@JdCjtc&$!eU~nyb zZnkR4fy5B_FZD~(7uz0(khEsNhO6o%_(oSijgv~)2GvSkyzWRi;;udrAF#%Tsdq_L zSQ520mxnaO$c|`aDwY!`dc-&q!A*myxMb|Fd}slodfao9PYm@0vz6yVm1`# z-X1|{N4HH8Qtq!2r|~8g5oKeQEe}<|r4I_S$m%5V9ZaSHdL5AdMeZT?L{y{R z!@9O~A0>^uvryZwVMKn37U?5U^ytxJG|{!DAn*%m_g|`?6(O9d9h!8r@E6EQ^`;3U$0fQ#X|T@LEQSd|?Cot_YR+13&JM zux}xiaMI{iU}Bt0((|@XIQlY|@4v%^cofwa#pkW*=i1EY6lu0&u%2ZQYileRjuVaK zbjMw9f7M#oXX}49Z))OTGgG_b^7((bSJ;doic3(cwHe?h~lAULuVyC%E-I ze2*<@?dS9sv5>C?z23$^ya!9V3953cNxyPDIjk1D>Rc;apnQ~(Q6S~;c{2UPbBnHb+1dxv6N%#UeaA%f@f-EH%feT4qsj%CYeA982 zCYUEG9ngrABbtq5@m&42qMr2(2#Deq4Lw{;Px19_wrX(CC#l=W_I*yet)vk=*M5w@ zVWpMU9AC<^R0wk72<}RhqdTa!5d*ve1o#0pz5{y2g`&Ehn|U6TovtV>6FThqFi>h8Gr?X3 z(Yol4QF!2lcM-W-8B!v0h46h(7;*`r$2f|W4-Z|Wz$l1DZ8QuOD)*VWt{V0pr8#OA zxub@Zd{dt2d7_sB==r*XL`*e@ZHaCQaJHhgtpi>V<)`1t>pW z?}XuK7u9i}dM1Xlm4`N>*+({RRXsK}_2h&%l3iRP1 ze8DZEN|Td$3@T9vVcL>-d~Yn~BT##TK(dn%hBJtNp9`NlAE7@HLFkGQ_*%j`7zry7 z=%w(gOk{rr5BXj=+KKogYZ32v)#x^$;zPrFiCnrVOk>u zp|4ygpqdD(BiuK1NK@qE3XOuQKyqG48qvVf5Hb*98=`C+8kH_-#p@e&QYv_kkxA3G zr;sbydJNPs3bDtXxw}L ze-ApIB~n-vK&Zl-2*BTYNOB`pjFAinP8XR`s=90q5zJ-?TEP^Sd|VM699M>H98uB9mhlbjP~WbUb7j#zDYdv+9DUO zpv8oBH)4Mi45rU@o29L4Jd6F8D2$@56HC9ZUJD)jTGR@p!miqmi@ebIzMx)14IdhM9Y#WlmGDkEKuQo`lw)J zD{@%5>@<9LAL+kSpcRs2QGjc)DZm@S0Y~Cf?Cb-xh+c9)1;q2D1PU*POLvxIboU`D z9H_mBw(n$;jKraS5dHn1Dj77Yjg>r-K*42lL5&%TIy6R|k3@DYeYJpzCAxf^e7bW~ zw{99M8ZV$$Fb-{79_e@(IyLLvb5!@LbldceA)=t;C7Rlflgr5_GWrG*4In0K@D$iF zjWF-YXcDxkiS8v+39-cA;c!nj$Fo99Wkb$dpxFRs^EC`~tz_sdAPOqzQIP6V2JHhz zs5G3gxB+cXgy&xvBHetbszROIsK2Wa$U6}{p}H;)cBZLx(gW*gHH$R5b`%~FPyvz$ zt1_JgTG1F6Q$U{r1rWs3QyvT@kZn8G&5v`x5gC_Gh>$wny@o1R9<6~Rswqese0nnc zE}hZOsZpeAmlo(glFsOyw`la}aJOG_Og#!Bv1;1lWOKih$L|(hNxH5SYU-&` z<8geOI~H5pj@ev<^;9;)s|&E8JM&PFf)X@WphP;ukqVU#YEfDN(JjOzD~Me$oU1_; zEL`~W68(iDv!O@@OAVpg78zCbs#KR7tHR}tBA|=zL`m}$jGt@G>uS>S*X+b4|kv15^VX!C~yMk25s!^?9kxkU1Y|Iu5XTGXdG*&p7AoFl^*H_rI`nAv%cK^$V zLT+Y}ltaTuq|-7NNu3C)bB!ZWJLZ$ReiVKYRcl`1)UzRip;)n%lU-)qWGW5EP9 z2hq2C?C{zwmBv~}Wlut&-e$0!?sCa&LQ?E_!NJAI#h!b4D(-mj(9U#WF zY+Gvhpql5v^NzqLcnT`~3+j~?C7e9d5t1i(;8)`0ehxm@l|U)3Xt?bAy@EJ@1m>dsNnir!4mz@0zvRZ zS^bxcXRy@e#ikW{9oGh_B?$Efe(M-0ysCfIxNR|U_v3yZv5#xJR2t+g%YooQFP9fW z37QgO3;#-6->8YV7Eo^c<4j(cN**_} z3%65nX4)79(Y*tzEJRq2z=zlz!IW1n7(lQ7=4K^{WJ0KJwdpUqMQQdD;_n9 zRQ1N&%~n#V=yxz?jI)b+I`6gQ;l;r+*KpE`mja{~DTG$M?k3+?DoxP2&i(w3Nm6M9 zGxS;FUD-E6Xs3f1b0GMaW$9}*NPQnHU7v)>9uZNQ2(=jT0K#t!iRqlXUi$e6&z8jL zBO)N2)&w#u(Yb>yYwxXUcg;!Yv~Vj+f(osOo+QS6FWjT1D{Mux6d(5fQD> zHx{0`Hazt?mW=K=o=Aih@c}8E~ChPdkhsGK5Z4v6gXS=0cKeaDw?fY80aA^hu^g9MM7h!cexE<5aWv~y0W4^^h zcmw|UFhu_@5ONIl!V3(rY$Gh$2*Q6a`>Lm%Ux(Otcu4HuJndLf<5LqOD4YkM>z6#w z|I!vF2xjfe7#$JRBAf%a3@|@z>sOf0=vQqr(iqj2pU8n zWCZ#~`dLBSAe7LV!j~b~ZoENb!b=pmM#Kb<&=lbqli7)~d$ONJ-RoL8wpK2>27^%@ zb@mmmr3mX%1gu@cHu9<06RtNmeoz=gZ?UgV>iMX{>oCS5ELo407(G#^SBp|u`wCaR zWSe_q2kwO=Q!%rOdL13v{Go^m&bIC`LPxM^;li{r+7&wu_ z4d;yTO9tV_^H3;^UY`^_-@*ZqkLgLf>$6RULKM~^T4kRP%W}=s>#w!%YvsZS%VsRu zI3EtU2ZPgytt0}`S_D+pVa<-^oYjzqecA4(Hd#Y2`q~({oGN@ObvI0@UkCNPfJ6}= zSc%aSzSfkisPMosJccFPtHre<5d4Fb_U%_~`aK=Tz1N6*g$u5oa4um>_qilFTmRi( z9}ao7)BxTZiG~U(oU~BjL`3pnXX4sAg8B+%++KY+b%dc7>SAPhy&);b<9ex|4bVt? zGFHQQR;LzIH}$+S`(9=Zm9q2sM1e*+!@2PYU*1>5e2=D$`bD*aFdU(J^r1rZhf}vC zLLJ{@KH<1~K$Gx*aQiIc{KEGeq4M{!KOoZh(zFX-e2_^NNewu!E}Jht7;9U67rEo> z``J={iOP?N@kdzak*b(1_Xu}T-?X}^=cRrZ_0Pko3#cpddM$;P{pYi#U()o{OcB@1bslgPSm(2L!vpW25C`CcIx$#P?PAWSc!Ec38hqn&ozN#i17 za7Ked^2$tumk0lRGBy+t&~vl2o$bEz@a+x5_ZiT~fk)U+NM0)s0evs|@D3_zyZ9@c zLp1^-f^&SfHmx6|Pyk5bNUpQ(P9eRZHmk(>8` zp>s;6dMwlZ9l{yv$WN)$GPNF5p#yyOLn2G^`QQn_=Q#$IUYfp?iyW0pqp3GvitqJ# zP}k$ukP`+s5Q!5JE|mqKjOwZln}WI?>OCT=QRqrRh|geuCZx@Je;5Y^#H+s%A#~~Z ziT_U|4X+4<2YyVOHQ2JYk#cN(jHxiOq$%<{9N`MWjwy9g+sR|{JwU&M2ZF?tAUq&f zHuOt9H~!uL2YLkJhI5JaUz_1tdH8oH$x#(xP&!r9)B|}(ks0sg3={)SY@hdGE7e$L zxNh9XU-cO~km>tcFY}0moa!=LTqUE7ikRGhbz6f6e*q5l&p^qAL{NS-lgAV^1R=zp ziEvzw`f(XXos!-KZkQ=Jx!V(mzs58(BQ54o8rm}>2sCR?%A27^my8rw7T{AIV49in zZgV6}OQY{?vYhBYg6)ez<3ElKksPl}((O|e(H%3J zEKIyd`N$^Jp^ksJMgtQ!n3N$T$@RMy9!!2gyIkvnK$r6xx=d#L{{W4;4r&p?p03n1 z#L9h!*N2n&G!27I&fJ2{iCL0yOkS~UKPpRX-AU4rtsN?RO9pH=RM0*kNkj7{U6kc( z`AiWr=|Qv*r4Zf_m$r`KI6m`PTsDjx$6*|wO=RYF1o#=kgP+s(4{Vv1S+F}XgIvzz zP_@q*izfCRu4Oh5ZEXR%%);4y6!jFG056`DR#w27_r~`)nF&+hG&RDNeM#y#C#_!U z&jncQTQM0XBM|u_7g3;m?&Bk_xfc};CuU55p+8@`j6>uzG)qE<8B+Odp?{2H6DD~N zC$($cO^JgdU1A*GW!GjcA+S$CC9d)u`0)U&`s3+;Et0FR$C$g`Bx~dIOrRNfNX}&9 z+)v$#E9J!(O3-dKoZma(x*4TISr>~=={Q=$2t=SyM1n@JNLk}Dmp0!*RgFi@&y>7d zC*Dxc5ed76zvWTzFkkN-xTHQo&|wZ#;X#CaC~Y0b)}QSUP=;HHlVcAp3I>J-neC$H zBUF3%ZZrsY&z$5rjrq*T%MgmD2%G8jk$s|G>Z`)Daj;YM;W`enqg=O7(mgbpHZmF~ zOyZ3g!>qoIu?Iw)Fn2kB|^KXMWua%rzid0pY>Iv2SgD(4jtYZR*c6*@MR?I*T$ z1QBg(5xZ`Ly4r-?#oys(a`|uv)50vaE8jAWOk|bAifCpCi5zC`AOs=#K~-!%rbW(a z8k(qKzNB@1{ftQ!s!8h+yVeEv7*t~n{CE-^at5awiCPSgY|BIa7>;M+$qno~ldY(7 zGzV`-c=GM9?aP17^<>hz_Gkdd@5|HxZvoj83iKEgLBZIJI#by4SfBnq>bkD??3+H+ zGJbNO7qx5GZWwja$CF)!r5ewpDT3dex_O}Hw;Yi&RVWu-Yr^R;5OdxD0cecxEgu7C z0cy}SKfYt9sDbm;qKZ_dDO*?g-yj5VUsKlNhvds< z)rrb)P}(d8TWK z6h4Joep1W|fPwdJhy%`5oWuingMj{Eo@+4B7KT=+iB1 z*|PgZrPtxBbC|4+T(52tFm53Kk5Fw?_@kh8AL^_!anT&DoMaZx=?-6g9%0@VP8wcY zqed`mp1z#`>Q@=T^nTVVa@v71EFw>R9`0uF(|u5Nf8ZfCQaH>47l9Ny->)u;fG}QK zA$GysWVTo>&*!_GaUokQ2(iUllYOq%Y#_HJI@14my}(nMs8xzC9NZBCZc=}?VfCLLQCk9(PFIWK05~$4Huu!Ehs1>w%op5rNS_F#{+}Og_^|yvM9#B1T8r-x_+b z1p=@cNZFiyCR9{oOFhrFJg)^-@&2gVXGsnY*N^*Q$TW`Y>-0DDi25Eyf41YiRia>^ z^ESM-WS$Oo4L=Pt4MW?4YM4_{czslM9gRH=O7ERxwGi&Z?h?PcW?gcmB{JqRy~MQ{t(%2Rih!nn30Wcy!NY~p-Bh~*knR;jR-e^grGWWYBCZ7v5z zY9NT;vwg$9$)MY0mL+_{=XZ>qf>0tsOdIDs+B%i|%`08_X800X5FFK7?_@{?wdV>( zjUD`iVXY4_{~*8$vDUhVh=`bK)g!cj#U*wP*UM)3m>J)Y{_lj!J{fi0OIMd#z_)OS zlD>eE7@+i0sPs(Xa1G&Srzt{1=;$|AIvgT&q8xIIAO&{w&pZy!dzkH#1} zGVR_Af3mt@0tqUeaCiAKhK~t)bSXSo3BFWX;Vj3osfHDP3qm=Ns7!b%Kh|(~dxwUT z3&31*t2@V{HLu&rR}3OdL1-0d&@a59LrYj!4e{!Ls=g2l6+8=}>&@va8wo9C{ZkVo zZc7CG0t~FZbs=fQu`fX&A-uLwK~x}hVd*;+#Y!gc~5 zcV)XW@&5_5(+U3TOBp^ULAp{2XQf%Uo^1e&+fTUdc2r$|P;NddaXR%^vw&0D$j6Gm z57*9-sN&#I*LCDW7P$-q!c)WBGgOf-zlG-p;Z#k+Ed!$I#5b`+p(I)rR!_=D4XfH7 zs^9+#cOsMk;IH#qF@0J_d(-K|gS-vzK!m+1A;qxn903n68grSjf+wv|kbGmYlt9;* zD>I!Kz92#kAmS>h&i%5aKaZCpl&ZE z`@AoLaSkK9IRiZr*G_n|M#@N6=QTG^@F4f{Z5(n%1ScSk29Lg05y`|2zZ`{s)o^tsvxQC-8wi6RBDu5Kjq0>T?Sd}E%IMr4JPwqUZ| z$@MZ8XvtjqFq}HWE1O{2;dMo=Z%A^;{k-+KyEmoq@xW(bB>jm&f0|t@P|0I(DRl!m z!&@&zN(D=`sG(uOH5EdK8a<+vMwc%eFrCfh6CLfURgEK(Cc-%)nVijcTv}gV7$>S& z!T;sszqXN|int1`0xY+rZ=tT)MHVdaz+Vlu8rHRr$ZT;UX$*nJA&{UDn#tsA97TDI zoA6Fg1yiI|y?Z~5!+xCpY-ps4{aIIp(_zm8eLBJ0?!da;)*ZfQ$Vdt3GzSE1go8R{ zGl@9zOI<}Gpmjt)WAa93L?#TD;5fG(g~b#&I9yQYhCh>$pdgf@t?nU1o~m1Yin_NH zMAf`Go1&XBdyOpLp&1wA=F4dN5hln>?9&&d>&q~u2wR)Uvp#)mM*zVW(jG#)EzDz; zhw5JPo_v$D99RR%7bfUMkhb{gM1?MFLR;UkRjINr31>X;`a~}zY582OXc0%D5^)p~ zc_F^X@GyNFvQZ-i)F_OhNCnH+1nRC)g&Rq-o~m8s(#~fZwWSm#I{9F)vx>$ zS`qx38cgng0i()Szr=-vk;hQi=kxnhw!(-{e7uOyx~Tm9G0^Vhn)yx~@6+g%$m;zm ztfILS!hXPA7c(&w(Ah<_Tj>t1Yr<)0aW_!pcGO!FvwKvX3YUh1zm1EFD835DhiVL6 z#1#EZ`W10RJcU#>>&vdp>(mNYcvblxQ>97?JWtD7jwpI5EWWr^KB_Pqz7*x;it<;M z<(^FpUkh4<{5540{H-67?iVJP*YmzeU=D_oMv}38h10jWf!E1Jx_w8fAJ3glhu~g`ObRpLjSs zs!l~bQA_Juw9<*L;i8b49i%%*Arc8S5=1*cH8@vS zhT9O(KB7MEwQxQAt8wHcH8+&8s72jL2xt#JUt_D(rK%uj9>TK)ylpsqZ#xA*wWVch zG(_V??kHC@n@3Kl;E9U5e@t^zaCOsYkm%R+xLi^0C>mmzga_rrRY18`Q17~Od{rT# z$q)@v;PgX!P0>|BwoUzuB9r;c+=jGTlhzh(hk2X<-jlx2}?9}Jhh7q3L< zpIp~T=(;N>kkmuhldpnAXwRU&vHY^`N15GIl@Lz2;WZ%F$*Rv76+yFi@B==H@V$k# z{WXS*4&+uK=*xuU0_T%I>hDv9Ybjf_bQM0^QB{k6t~}ITq@XFx3c7A1t$Bq?YhFP# z?(U@U;c8@Qgb-B;f~dhHuN5g{o+|PhL$?^=(d}bFwYT8o`|zWT|1jwa5KiAU-^BZK z!it>Uo5r02>Z`n+Oj!00arpsk*+Q*l+`G~>S0#iKmFz3}mLZ(q;i~bW>S|fd!bJsl z!Pt01!-w|<1z|E2C~|7_$h$;Kk;DWEd7^G1LzW7m+|Yl)Ct51hqOy)~5l9qti;KpT z>R!4aI%;6~qF2?vG(kSAFndkW%OxnDqrl)WKaNQ-GH$CJKC4521`=Dp45O%_ee^%y z8JAbHE1()`xZUK_U$UfRH~LWN45e!2Ffe7_B$nu#pwM^(^J^M6*<&@qWM3YFcDvkB z-f6P0f~ZBUrLB=9vS}pfeAj3(s^UM;@}c?Z|DROFYr%_jqM=3JDblFEEuyICY+VJ@ zbw~=I@puK(5Fz+);lHU&`;#QfS9NLCt0)m9)l{be9^#$)?ITX~hVW z{XwI&hd+PA*r-~h28Bfw=Eo}g3J+GmmntEgB^d|YC_O-?t>loZYI&swfhtYw+6anj zShUn7q;Tqf(cNO=hebh#76f(f+8~A8wMDv(g*k zhL=Ue)yc0#ZGoG1a(DPq{(olSPd$O_x24Z78L#JErs1kCiqq?0w22A!0G9uMIZ!X| z5}bWw1oVIW4$B7O{T21Ot_WuyX>B7#H%pwzA!6!aHx#H=*c^Vf(Jk$mY>E+&+<@tZEOrF{PI>QhQ}-jYOC<2 z;{MFQO5YQjvKty^zM4X-UYD2ORr6?$xtDu}p5 zph6o31qFe}*>-I4+XpFx$f~iW^IgQY=+?3jSy~C#;a7$I@&AXu4*zTcFaNuF1KzVC zSG9^p9wFa+l8;AV%}+}TX$z=QJq)`q=;am_)>AIDP6#K0dAPzLr;_`LehQO9Dq89a zG7hZ+UKEuNS~Q$=4M_#!(4`0|9S~jRuL`R^N-cklCS6eaGZk1PM;1}jNnpI)_7qsM zq{1;1Oyr^ps>L=f_-1t{t*!Di2H`mveVs{MnWk$@&7wEKG17Q~uQp^I{Rj|$ykS=s z?bTo+kEg?DvE^4p$E$qGoP&g#`VWFrSBqI8(}2-v zn@p4!!;iJ}htTE^+`qogd?w{C_S?y<@#d!)Rao+25}HHcy%5OgNjUaIJST5*-nVS! z<|kbjkh2Z~*iNb>s_q_9P5-8J!0-A-6@sRC(bfy{*7dp@O0z0wbRk9ko;yR1wf3qUw7TDOA_0cOBLK)&|fgs1Vw&FU``LSJ)L&(N{I@LO6?y z)AXlWqy!4Pkt%6|-UHRX=<5Icv4GAi^?UfW_W$4(n@IS!HA_Rrnv<&5P}3MtFz8^G zmdi#AUZ`Ev5`<}+aO@G1tLHN|@|ezSWfl^z5>EJ{9vujI6kO?F&TRRTs#Ii)i;i_e zks2ZjsKTVWibI$pTkP935!nck29H*?brdK$q{RdfIjd-*&})sGY^=b#&~4zrfdRd7 zeg|qHRZxvfA*2PWO|yjbwGu4okJJ8v&~WAYBVb*~Se~N`Zp4TYVG`O!C$AG*zU{;n zT^(QVQJUjEwFDD!6k{h{c%N;Jqfb?ybAn8#ppLp2Q`b$TJ4Xa__B)sgnrNx2M#6ukZ3IOlNg;ONO+z!8Lv*yL?lgKtN3Rq6E#+bgqAMXSz7R}KE1DQ8 zl`cpNJlDeK)bOQp{#gNMK8K{`eQ<@nii3Wc8C#;GW2QB4E`npAHqf8!gf=kY_hK^j(f%Ll%z~mBDwC6|%^owd(X}wDg41N0B2#`gCN`W+LB(1Q>PkZ#}5dr|F z-f0|}5F%naiA+YO4=ck*;fzZ8X9e`d*E_C^;ld>upL!Ud?U?ktqRNjUde+(ZLg@(+ z6y%|XjpgZ5E5Skys+#~F{IjYHalQio<>1b zHwu^;N)Dzf-hsnP4d=P8N42c#)+eg-T!fV)s-|sEHOp_dt!G%s6#0I1y_wZ_e>? zvO1=Wd#N;asVaN1N>*wpET({&ydiojV5(3N%I_L38ZfGA5jKv{NaD3XHE`sFx{Q3s zrGn^y8k1M(Y(sUg1#g^PWKe}!RMGM^{*;ZXl+jlAf1p0$G%R_!=<&1k2N+F zY@?EtpXtXJXsBDEG+W}#_uu2}fOG#MqD(W?Vp{ytA6;}L@7!FPephMXBnq^i!XO$N z5z+wiw>;0^B9^{QjULyMD@+cUDpoXAy_)o(QKK4Ccr}DHuA~FHfvl%cihQo-6iH3& zu&BNiS_NN&!Qv}x6ij3KBCYg6;dJ7}1taS{zL%TxI=;?Y_*5HAz{PesF0;0bTYWT2 zJA`*@@)DYItW;E{N~?7&!5Si?0-!+3CG{_gZ2BSzzXjKZ$mps`IiD&v6sN(a#W*I8VmNtzKOuG<6op^BCHIs zd&0V1{MXylxJ9>8mntosJox1znMoJ=BK5h6j#EMs4T+yv+@hLmxiy3oEY-TgDMvL9 zu92imM8OsHY)h)(dLsoqPBe~%(>EO}^g7`^-(+PieTB|VS`}yDE5x>Eu`d>rM<}jO z&y`|Eph~NC_}pSGL9J^2i^kIBfUzG^!^mPTr^2V|mIErhTF?rzK2Ld(ZXX3nL&nID zzB_rVLMf-U$U}XJmnvGHo`~%Aqyq}1MX!J~K=hPz#>vOwAb)hdP(F`;=RUKKK$S*L z+&=yr>JX`k{f(+?g+qiCRTUCr-=dmt^3c7cdq*d|0&PfBBvo(~EJJfT)fIXLPxp{& zTmPPJCXv*zr|R5xqyYN=;z)_AUZK_#U?#o1)Z+{z!61;t{Cw;Y%#T z;W&B+X=y8fBBKarQGisVqMz;`g-?WYpIlHbX|jk&DCdkF%5p`8OTiyZ*0_RaeT7|= zH4()8NAn?#o`|{{TDGI`D#RkSo7BKJaA+JQlab%YqU}ca)U7L86(0W)iRhY0Nyfv=wM$<07nUedLJ>w!)_K-6aePr{68EBT_vp z@Tz{1T2F!8)8chv1IXXFp^m^YeKJD+A;><%XuxdEAJNj&xl?I?Ll&xNYg*)QB;&M&Xi+#*5Tc`T9lWsXFlebON}pD2^WK z?AMZaLRiS^SxCxR7ZOXp4m)yxN;LviUahCx?e4gBp4P`HGHS%g_Y_u>W;IGQdUUS4 zxh`FGZyg=!z5qcZNwqB+${jU|wBW6ybKm14q;Ysr+IAFp_j!)(#I7Ua^`m(a#31^& zD5a0Nuca7)DzDa4?sW$chqI1fuq`0 zz+%HiK~-QiY_!1jaawdc={nMh?|CAv=quVP$Xe*CbL$W#nuBZVSPZeJIW=eOgb^&8 zKkE|bTxCSyoI7GAKZCEamPU=nk%G#?tl$E2$%ewIYL{=S{^gPyLAr@_MQQY;7&pPC zq@WfMDg~h@;s^aB{Pry_oI}c0M!#%+th2(I9G+T)GEapM{uSY?;XZ}XB3D!}HDEN9 zw9-v7cKNQ>zWY_*CT$oaH@_2ZI)@CXVbuQ*DEdp9QD`yur>sX{T^G)HysF`++yFsq zj~{b0EbGn)=cX7qz7@G4l^UY9>w%I>@k1`=*lZ}lRQ7!Y7yW>J?~?}iDf@i`Y%a1B zk7_x8{#JyuoQE;je0hvOmCi~kj{(WGS$RevC!Ce%S>$?>HUc@}OdF8g&&o3bIpM6} zXMvk)eL|ltEBLZi@^U$Ys7gMz-$ti%$oboN&QdY%Z9L~Hd6zli ztdfuIx6$dGaQ-%)bCtZyoN!jj$M)OkbWS*b8_&5)-epcWtK?(*ZFD*(oWG6dTqW-^ zC!AICvHdnWofFRA#&fQccUe^yxYc5GT|5@A)rqsw4Tx04NoOl21q!Q5?s=vn4{T1!X2u@J_aeT^Y24buipjS5vlST{A_9b>{8v z=<>SN7?O(N!GZ51~efES{cPQdy~l#mq{!3!)xygBoWz+2(QCu z|9xw+C?Oy*Qa0y2z9M+q<3Yjq9Md7qlwc*FQHf3Bu$4~5h+h()&iQ!S$11lK(kzqa zx?)=76G#&emX)0F+#!|?RWm4lk+@s6l>#w&2A+snP>hx{4D?(APJF7zCT(E(EpVZ| z9t*Vs=f{DSu6k@Y<<3WHS+}!Yovxh}i~`5kcXJ&%hU`Qd3C?YUn zp@=M(KKtyw-~GPpU28qR^?QELv)10H zZkncAQtsUm*l)l6I=Q1qHEY(a(b%Bbbkj|HKl#Z|M(%7&>bmacn!Y-=-FDmVH^2GK zI`2!JZC#Fk;~U=?ZQn17=Q{Ua6!k8t^EO6+;WOqpGirM*&kuUlt6uf&IdkTW{_JNz zJL6NI`qYc3Oquek3opFzw?F*h4?nfR1{+j2-gx6vXUv!}ecrrz*9RP@rLKRuRjwV# z>-p_%^M0kgUN(=5bG&hnr#$5;ou!vvx|uzDHsJN!bMJ}gB|y3-M)8j8z!HqzW9&Rn z$=j`-{NyM1&N=6t@8#IYfd?MAQvkB>10VRn)w|tp74Ter)m2wL=xI-TS~YFjwCW%K z_{VjlqoY;7-(MzR0I2GBzx&-^|MHi=ygN*Gr26;SXP*sn?ab7_+QT09uq_7$1|EF* z<(HrPqaXd~gTMI2FHUk!TXIfk=FFL$fa+%K)qZ|wpO*mX&W_lfJim1-F`Ti+49kA- zgC9J8l~q>R&&wu{2-CzIu z*Ms7!hNn)QI+$Yv>UiWMA2}4T)N8N3_P`1&tPpY;7=G}BA3U6Dx>sL)b??e6uk1bc zv5%emxW_$ie_KtLjgiPJUm?e{`bFcmRV+*&gPqM-UM8o`Sa&DVUc>-WtXj@ld6EOdFVqQTK(;B ze=FxlGc|E%)z5$a^XlF2es`Vg`WIYqL3QMjM-Dvv;SZl5_gBYV)mL0`MfHkTyrSxK zI@Nc-``v!DS9AXP=T}2RL)|doKtRRSHeshDzW(*Ezd7x`c0ui**q7UTeYa3}dllc` zKAUKS=RWtjPu*yvjUK=2uDfpW%2&SfyLr9M$jHdnd0uZrn6HKq#S>abT65Ov=6wzt)*ufF>H zd|n4=_3K~%`ewD&R%^JuxWy(~tMi@je5Vs2bw2*_k2hhl!QAV{v}JzSbEn;Q+wC)B z_9|?8S8Uh2D;F)f=B5!ysNMbJAOFbkn7xSTu*ByAlAXf@^QKRq-i@0Xh?|)kAzj6A zb=anR(M1>4(JR7bBD}^hac@<0PK_z%&YfGu&{bSlVI{|Cp6I74`l(7C)%Dk3uMu@L zQx(>$qp9kEtcoiu>=l4i?|8>Ms)+eIOy%18B`r1 zaCG`m1bJT95#rrE`tN(+`)r_vF`qRs`VYP}#7s)9=7@$@Weu_{`pN+eYtiRvoA zidXt%^ItMAe5s{9!J( zN`ezR)p3PQ*s7cR45jXY0BF6mXT4~z?cVjSckPUM5IC_0Lb_xOLp$)4uxEum1X} zPkn0dth3G+hA>y?YF?LNvsn z>~jQjCo{bXn{@MeFZ!b_g?#?=pRehcPk;K;mD~-1jFA|bL1`G`_<7H3Cwf)oni7pM zC=eZc?6Flua4|kG64(jTt1P9Aw>U;EV55_W^$j=Nu(G7W71B!F9Uw|4U^&|A1uu9( zsXNOig%yDvg8`TTz`c@2XcEbFBF;zh8L#zfH;sTF&3UDd1Z%zc#V@X~2iHaO zh}3@bo8J_$Nmz1$tuDiQ?g>y>QTUII2=r$?>seKDTh*_A^{c{G>1)Ybg>~Jl&IEd5 znD&f}&7Z^8Fmo&SwuF(!rcJ;j8XJAfTi){Iu)~=#(0EZ>97iP+MG!g2ZfN3cAnUW~)&13c63Pg@C(MTDDxTF%&N4!4nMK5~M zNg2cyBoVPlqM%-Y)6Gopi=v`8EI-I97b7Q6R3ayd!2qv}HDf6>4`KW2SHHT-3VkK~ zju5Y0Be_WTh^}Tv3tAVl#!~k)p7D(8fCCOF z^VY+gi=dOwGOo(}5 zsRu@f9hz~P0YrJe842C*ft37ESptX=_Kzrja%fyKF=IKcNu<@Ff7Ea0%0#!~l;OA* zZbcL%EN=}=3o#@>02B7WR&>mp-+YsYIOUX6ioO95?4#_v@4h86lM9NWiatt2Sn@&Y z*=w)83WH%3nQtzOD+36OB63qOjCN@=9VH7cYRm#}xqsH;suNB)p=8bV58${?TT_&z zF^Y=|sA>!rH{1*OhSIK0GETG8wnyjQCZEW*l$)WdJ$Qe37UCy&LNw1$=68<>=6wQ~ z;p9+k|EQK*Zn>I4=@dp_D1*&_#~pWES$!vDF%rh2EksTVhQT&wIb##Z-ZK>|Mkz`}E){KOMaEH2jPvfGwW)S0E4 zl6X{y^n?1PA26a+0Jr9PiAXvRJIO~`qM^r3hS^Dka+4+sZ5IGGnLxDRK(gC6WJ0VI zw%b3q*e>VVHhlLsGimJNQeu=+GK>0VP}+@omfC8ot#(i7y;Q(MT=(*50)!es3_867 z6xw?agFWa4^Rlfh1~6;Euq}L{=f%5P?kXGFf0gc z^a?f+vO8BK257>4%%!cgj<%#9r49bjR`xV$gNcHrEVXcx3b$v$nCr6xL7t1N1u!`( znohqnMs*^_h91i~16e#C4hwIah}QCnFCBF57mNf!I&ARra`_l|z0mbO$pft&CYTYU zjKtlb=(7HV;^l3)Aci4Ev4z!mhGSIBfJF%8HVFto3U>flz=I8dk4~bsfQc(4%z=gR zff7prnZg~pAK=hP?#rmyhbv`hAm)ZdgvmS?Hst2CSN+^5X3<8+6>T8)u@NxSY1kBV zNr2K;3K6d!z%p#^jiK|f)3TGubAH-1C2iO@pgu7yHGF>&+qD6T(0%JJyXxsbVQ7V$qo;^*bw!I6 zU~(zkA!d*;WN<*ENdN{rC_n^Ez(rUC0@tNY+z(fYrP_p}#3$y`CSU;|4+WzD6Ahii>rgiGxv1j4b@t`j+%UH)Asr?YLI%R~82E^FRviTAjBi zd7~KXz-WTy6A}+)U(%rO@uHomCP`sv@=qE#c`l8pa5ZTF&DaL5a6O! z6xnI6hJi2xW;^V#!wN9Xc9E7k0Kzqln=KoKZ5W&ulVDUNEx9K^vX{tlOp^YT&;7xC zLibZoJ+-vcJ><2NgAYEqY=*;{K&;)Z_TkPj8#ie}=qL9rH9<4!mveXCdFL`&xNynJ z)K#|lrhiistrlT;p9N9|y5oU%4QLFtw^^UTygp3P`SFi`ToR2L^pYpaN_p86&G3xO zD7I?=0Yi(32yS`~kX4BI{8{9aTg+ zz>26G12XPP6a@(C;hGd~PG+6kN%p7%`cQFqp5=?|oTRamqbUXy>MQEO zK=u)3H)8<~P|;Rc0`mX?@JT*mn0D<=8v&cH({5}jL5k%FZ~Zqm1ix$Lsq}}S=c0`h zM&kN%uDwf5f&r$C^BxhI9o#$Xtbn*s=%;xLUi z0SPvw(F7cTNuOb0bxNE9wzhdh8#ZCsUfO?kT=rr2DImpw-DGop5%ICf)_yfh2XxZh zxT}6TUPtTDLrvU^Z&VZ@85BlsBPf94x+E6~TcDw5u!txQtuq=y%@sJ0TVWW3k5!I1 z;)t@`K|=u`*CTQR7C9gFxRxuzV8BS+y06!^f>`M%f{A%W?#Df{PrNV&J*3b)w$B0& zEoTRUcH4OXyy^lDZXF{zN4|@$qJ6k=Nl2hp2QUK-mNGW_Z-;`m=qDz^NST2BOtgWF z?OA#L!hLG1ZI(THNw|#!B%7u4CuatY(jDkK>`}JA0*b-mB5a`N3d~9d#VlMAmcT@2 zG`D9!zx1Uq6@X+Q3tMm}*u!k*!T^y=VQhr~xe$gEo?{LnJHr8q+>nQJxR|6R%Duhj zX1G$I!wAkNauw@w>1R1+3FMXqz(rU31LUsfvK0)&fgD%1Fj%dR*%{dEW3oDYj#@VWD|kT8HZbA_+EzvCN>z#{da-kSH`e%{oTp z>YVQ!*E@&MG{8hM0m|L%zyJOP06^EWQ>i?E7|UWRBVa1PbAJFcvoVSFHpZSAA&=$M zD-VR#2xRWjzUztGYh9;c3Hl{bX>ot$VE)KanHYiu!2%bDZ4|7kaJ}lmTq0B7GI39C z5J)VwDEiOEVpS8+`M%mjm*p$pC9#?IPnk7q)_rS<#0GW)5N25=OwbKDV$ac{LFgZ0 zFJ@5~S3&W>0}OIOLUhG!GQJpJ|LVE9Yic+ zBy1yc62W0L%&4f(XIzc!vwJcm1G=~38uci253m7+v;ZTwMIsYOt+f&Q3g82U{&IVk zNK80mAff~`>^a6b1#ogyB1PHrd=C!b8*VagyD`a9ewK+h?>@swF~oPcj< zzsQPP!Foh47soBg7-Ku3ybWkHmyjEnq!dJ6T#a@Cwv~5aZ36*qz$gmFv%h5+4U0!l&3h@qLz>P&QW(zF!X|HinFq=MbzX~?az3VV2FmD7s>?dltFkoR! zIUD)}ThR}|Vqk#5v&0)?7);=5XR2^r;R1+HAvF3Y3lUv`?;xM&jPIfopTE`b1LLu`QTWO2OuRz@w`~g>)8Rs0-uiBcO6~ z3Js_LH<#Jwjnu^z10SZso+3z0E2oByu~YiqaMg)o`=mpD=YWs>n>rWU)&F!{#Ayxf zG0_H336so-ft%=wt$-k|OQ*}8A_HbXu@NH~IPAhji0A;yXIvc6Fp7a|GsHjuK)_@6 zxA~UV-2o0GVKW9NgfWgK2=s5}(>`W4@ys~DE93`Y?Ue)aB}hyoQR+UJ(c-O5{B0V5 z(cFW3(spbDJnoH2xJ@9CNw*||#oF^^y=g7|0y?@*-%TL*08qNjz0}dVOXqNR+@OSN zTwNdA=KND)gR9tLu>?}uU4GagGi&<{_@Qw-OEVm%vCNUMcG%#Cj%&{-8Z#L%g-8^R zqiUZ67WQ$D!Nq6{B%@7W0v9l#c{>!n$0BWEe5~VI>tEc&&dD9o6pZNsGzvh{U|d=H zQQVm}aAg1`heH=}LzsrU!*mlPH|+!_c_FVc-JFPd$AC%wfS`UkEm0ZZ0NKRCrOH9M zw>C%zU>pff!rl6wBHNxt=O#eH^1dKBBS5_&TJfX67T4BY>|9%zrhIKEgS29jj)%l> zOQ-WUW|j?Q@CTFh8_eL>(Ft`z+lJvV5`z%ZierEyZvr5e1!xh1nQkG7(L4Y+*Jt)i z3wuRSTqL*A77WAiSZ#LF0@x2&UC%vWqqc~Cu#nmBUfSe*U~aS8*o`K^j6!jHsxees z{D*9COkG!SWr$>TL(Vai0JO$0v> z(V!0i(A;;|z(&@O!T=uGBqbzquvC7bppI5f?V$CKc_L%;d6!_O7$PNFM=7 z(h>ujJkA43=?3h9nP@;jF#!Mx=x8Go#JLz&ngHM<{F{tb9pOHj>!*c@n_U0OeCzk? zx!?FN)Gbzwl&FkLvjp<2u*Y6`_B%wq%;-8Duep|hs4=?~Mnc>4gOJ!vHh>IjkgpOX0?Q&P@hXPuw0~>&kcx@6l@^x!yrHfh`@@GFcju+T;|&KK#A29+N#xT z&Uc>r03Tb~luy_L5b=yD+k$PdAjSX=`-vPAozXbzaJ~Qm^SGYYF-8EST_%u;VnS@5 zg<5$j6G1=#_#)AW{W|sav&�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 M07*qoM6N<$f-{&2aR2}S literal 0 HcmV?d00001 diff --git a/springy.js b/springy.js new file mode 100644 index 0000000..8bf8d34 --- /dev/null +++ b/springy.js @@ -0,0 +1,578 @@ +/** + * Springy v1.0.1 + * + * Copyright (c) 2010 Dennis Hotson + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +//https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach +if ( !Array.prototype.forEach ) { + Array.prototype.forEach = function( callback, thisArg ) { + var T, k; + if ( this == null ) { + throw new TypeError( " this is null or not defined" ); + } + var O = Object(this); + var len = O.length >>> 0; // Hack to convert O.length to a UInt32 + if ( {}.toString.call(callback) != "[object Function]" ) { + throw new TypeError( callback + " is not a function" ); + } + if ( thisArg ) { + T = thisArg; + } + k = 0; + while( k < len ) { + var kValue; + if ( k in O ) { + kValue = O[ k ]; + callback.call( T, kValue, k, O ); + } + k++; + } + }; +} + +var Graph = function() { + this.nodeSet = {}; + this.nodes = []; + this.edges = []; + this.adjacency = {}; + + this.nextNodeId = 0; + this.nextEdgeId = 0; + this.eventListeners = []; +}; + +var Node = function(id, data) { + this.id = id; + this.data = typeof(data) !== 'undefined' ? data : {}; +}; + +var Edge = function(id, source, target, data) { + this.id = id; + this.source = source; + this.target = target; + this.data = typeof(data) !== 'undefined' ? data : {}; +}; + +Graph.prototype.addNode = function(node) { + if (typeof(this.nodeSet[node.id]) === 'undefined') { + this.nodes.push(node); + } + + this.nodeSet[node.id] = node; + + this.notify(); + return node; +}; + +Graph.prototype.addEdge = function(edge) { + var exists = false; + this.edges.forEach(function(e) { + if (edge.id === e.id) { exists = true; } + }); + + if (!exists) { + this.edges.push(edge); + } + + if (typeof(this.adjacency[edge.source.id]) === 'undefined') { + this.adjacency[edge.source.id] = {}; + } + if (typeof(this.adjacency[edge.source.id][edge.target.id]) === 'undefined') { + this.adjacency[edge.source.id][edge.target.id] = []; + } + + exists = false; + this.adjacency[edge.source.id][edge.target.id].forEach(function(e) { + if (edge.id === e.id) { exists = true; } + }); + + if (!exists) { + this.adjacency[edge.source.id][edge.target.id].push(edge); + } + + this.notify(); + return edge; +}; + +Graph.prototype.newNode = function(data) { + var node = new Node(this.nextNodeId++, data); + this.addNode(node); + return node; +}; + +Graph.prototype.newEdge = function(source, target, data) { + var edge = new Edge(this.nextEdgeId++, source, target, data); + this.addEdge(edge); + return edge; +}; + +// find the edges from node1 to node2 +Graph.prototype.getEdges = function(node1, node2) { + if (typeof(this.adjacency[node1.id]) !== 'undefined' + && typeof(this.adjacency[node1.id][node2.id]) !== 'undefined') { + return this.adjacency[node1.id][node2.id]; + } + + return []; +}; + +// remove a node and it's associated edges from the graph +Graph.prototype.removeNode = function(node) { + if (typeof(this.nodeSet[node.id]) !== 'undefined') { + delete this.nodeSet[node.id]; + } + + for (var i = this.nodes.length - 1; i >= 0; i--) { + if (this.nodes[i].id === node.id) { + this.nodes.splice(i, 1); + } + } + + this.detachNode(node); + +}; + +// removes edges associated with a given node +Graph.prototype.detachNode = function(node) { + var tmpEdges = this.edges.slice(); + tmpEdges.forEach(function(e) { + if (e.source.id === node.id || e.target.id === node.id) { + this.removeEdge(e); + } + }, this); + + this.notify(); +}; + +// remove a node and it's associated edges from the graph +Graph.prototype.removeEdge = function(edge) { + for (var i = this.edges.length - 1; i >= 0; i--) { + if (this.edges[i].id === edge.id) { + this.edges.splice(i, 1); + } + } + + for (var x in this.adjacency) { + for (var y in this.adjacency[x]) { + var edges = this.adjacency[x][y]; + + for (var j=edges.length - 1; j>=0; j--) { + if (this.adjacency[x][y][j].id === edge.id) { + this.adjacency[x][y].splice(j, 1); + } + } + } + } + + this.notify(); +}; + +/* Merge a list of nodes and edges into the current graph. eg. +var o = { + nodes: [ + {id: 123, data: {type: 'user', userid: 123, displayname: 'aaa'}}, + {id: 234, data: {type: 'user', userid: 234, displayname: 'bbb'}} + ], + edges: [ + {from: 0, to: 1, type: 'submitted_design', directed: true, data: {weight: }} + ] +} +*/ +Graph.prototype.merge = function(data) { + var nodes = []; + data.nodes.forEach(function(n) { + nodes.push(this.addNode(new Node(n.id, n.data))); + }, this); + + data.edges.forEach(function(e) { + var from = nodes[e.from]; + var to = nodes[e.to]; + + var id = (e.directed) + ? (id = e.type + "-" + from.id + "-" + to.id) + : (from.id < to.id) // normalise id for non-directed edges + ? e.type + "-" + from.id + "-" + to.id + : e.type + "-" + to.id + "-" + from.id; + + var edge = this.addEdge(new Edge(id, from, to, e.data)); + edge.data.type = e.type; + }, this); +}; + +Graph.prototype.filterNodes = function(fn) { + var tmpNodes = this.nodes.slice(); + tmpNodes.forEach(function(n) { + if (!fn(n)) { + this.removeNode(n); + } + }, this); +}; + +Graph.prototype.filterEdges = function(fn) { + var tmpEdges = this.edges.slice(); + tmpEdges.forEach(function(e) { + if (!fn(e)) { + this.removeEdge(e); + } + }, this); +}; + + +Graph.prototype.addGraphListener = function(obj) { + this.eventListeners.push(obj); +}; + +Graph.prototype.notify = function() { + this.eventListeners.forEach(function(obj){ + obj.graphChanged(); + }); +}; + +// ----------- +var Layout = {}; +Layout.ForceDirected = function(graph, stiffness, repulsion, damping) { + this.graph = graph; + this.stiffness = stiffness; // spring stiffness constant + this.repulsion = repulsion; // repulsion constant + this.damping = damping; // velocity damping factor + + this.nodePoints = {}; // keep track of points associated with nodes + this.edgeSprings = {}; // keep track of springs associated with edges +}; + +Layout.ForceDirected.prototype.point = function(node) { + if (typeof(this.nodePoints[node.id]) === 'undefined') { + var mass = typeof(node.data.mass) !== 'undefined' ? node.data.mass : 1.0; + this.nodePoints[node.id] = new Layout.ForceDirected.Point(Vector.random(), mass); + } + + return this.nodePoints[node.id]; +}; + +Layout.ForceDirected.prototype.spring = function(edge) { + if (typeof(this.edgeSprings[edge.id]) === 'undefined') { + var length = typeof(edge.data.length) !== 'undefined' ? edge.data.length : 1.0; + + var existingSpring = false; + + var from = this.graph.getEdges(edge.source, edge.target); + from.forEach(function(e) { + if (existingSpring === false && typeof(this.edgeSprings[e.id]) !== 'undefined') { + existingSpring = this.edgeSprings[e.id]; + } + }, this); + + if (existingSpring !== false) { + return new Layout.ForceDirected.Spring(existingSpring.point1, existingSpring.point2, 0.0, 0.0); + } + + var to = this.graph.getEdges(edge.target, edge.source); + from.forEach(function(e){ + if (existingSpring === false && typeof(this.edgeSprings[e.id]) !== 'undefined') { + existingSpring = this.edgeSprings[e.id]; + } + }, this); + + if (existingSpring !== false) { + return new Layout.ForceDirected.Spring(existingSpring.point2, existingSpring.point1, 0.0, 0.0); + } + + this.edgeSprings[edge.id] = new Layout.ForceDirected.Spring( + this.point(edge.source), this.point(edge.target), length, this.stiffness + ); + } + + return this.edgeSprings[edge.id]; +}; + +// callback should accept two arguments: Node, Point +Layout.ForceDirected.prototype.eachNode = function(callback) { + var t = this; + this.graph.nodes.forEach(function(n){ + callback.call(t, n, t.point(n)); + }); +}; + +// callback should accept two arguments: Edge, Spring +Layout.ForceDirected.prototype.eachEdge = function(callback) { + var t = this; + this.graph.edges.forEach(function(e){ + callback.call(t, e, t.spring(e)); + }); +}; + +// callback should accept one argument: Spring +Layout.ForceDirected.prototype.eachSpring = function(callback) { + var t = this; + this.graph.edges.forEach(function(e){ + callback.call(t, t.spring(e)); + }); +}; + + +// Physics stuff +Layout.ForceDirected.prototype.applyCoulombsLaw = function() { + this.eachNode(function(n1, point1) { + this.eachNode(function(n2, point2) { + if (point1 !== point2) + { + var d = point1.p.subtract(point2.p); + var distance = d.magnitude() + 0.1; // avoid massive forces at small distances (and divide by zero) + var direction = d.normalise(); + + // apply force to each end point + point1.applyForce(direction.multiply(this.repulsion).divide(distance * distance * 0.5)); + point2.applyForce(direction.multiply(this.repulsion).divide(distance * distance * -0.5)); + } + }); + }); +}; + +Layout.ForceDirected.prototype.applyHookesLaw = function() { + this.eachSpring(function(spring){ + var d = spring.point2.p.subtract(spring.point1.p); // the direction of the spring + var displacement = spring.length - d.magnitude(); + var direction = d.normalise(); + + // apply force to each end point + spring.point1.applyForce(direction.multiply(spring.k * displacement * -0.5)); + spring.point2.applyForce(direction.multiply(spring.k * displacement * 0.5)); + }); +}; + +Layout.ForceDirected.prototype.attractToCentre = function() { + this.eachNode(function(node, point) { + var direction = point.p.multiply(-1.0); + point.applyForce(direction.multiply(this.repulsion / 50.0)); + }); +}; + + +Layout.ForceDirected.prototype.updateVelocity = function(timestep) { + this.eachNode(function(node, point) { + // Is this, along with updatePosition below, the only places that your + // integration code exist? + point.v = point.v.add(point.a.multiply(timestep)).multiply(this.damping); + point.a = new Vector(0,0); + }); +}; + +Layout.ForceDirected.prototype.updatePosition = function(timestep) { + this.eachNode(function(node, point) { + // Same question as above; along with updateVelocity, is this all of + // your integration code? + point.p = point.p.add(point.v.multiply(timestep)); + }); +}; + +// Calculate the total kinetic energy of the system +Layout.ForceDirected.prototype.totalEnergy = function(timestep) { + var energy = 0.0; + this.eachNode(function(node, point) { + var speed = point.v.magnitude(); + energy += 0.5 * point.m * speed * speed; + }); + + return energy; +}; + +var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; // stolen from coffeescript, thanks jashkenas! ;-) + +Layout.requestAnimationFrame = __bind(window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + window.msRequestAnimationFrame || + function(callback, element) { + window.setTimeout(callback, 10); + }, window); + + +// start simulation +Layout.ForceDirected.prototype.start = function(interval, render, done) { + var t = this; + + if (this._started) return; + this._started = true; + + Layout.requestAnimationFrame(function step() { + t.applyCoulombsLaw(); + t.applyHookesLaw(); + t.attractToCentre(); + t.updateVelocity(0.03); + t.updatePosition(0.03); + + if (typeof(render) !== 'undefined') + render(); + + // stop simulation when energy of the system goes below a threshold + if (t.totalEnergy() < 0.01) { + t._started = false; + if (typeof(done) !== 'undefined') { done(); } + } else { + Layout.requestAnimationFrame(step); + } + }); +}; + +// Find the nearest point to a particular position +Layout.ForceDirected.prototype.nearest = function(pos) { + var min = {node: null, point: null, distance: null}; + var t = this; + this.graph.nodes.forEach(function(n){ + var point = t.point(n); + var distance = point.p.subtract(pos).magnitude(); + + if (min.distance === null || distance < min.distance) { + min = {node: n, point: point, distance: distance}; + } + }); + + return min; +}; + +// returns [bottomleft, topright] +Layout.ForceDirected.prototype.getBoundingBox = function() { + var bottomleft = new Vector(-2,-2); + var topright = new Vector(2,2); + + this.eachNode(function(n, point) { + if (point.p.x < bottomleft.x) { + bottomleft.x = point.p.x; + } + if (point.p.y < bottomleft.y) { + bottomleft.y = point.p.y; + } + if (point.p.x > topright.x) { + topright.x = point.p.x; + } + if (point.p.y > topright.y) { + topright.y = point.p.y; + } + }); + + var padding = topright.subtract(bottomleft).multiply(0.07); // ~5% padding + + return {bottomleft: bottomleft.subtract(padding), topright: topright.add(padding)}; +}; + + +// Vector +Vector = function(x, y) { + this.x = x; + this.y = y; +}; + +Vector.random = function() { + return new Vector(10.0 * (Math.random() - 0.5), 10.0 * (Math.random() - 0.5)); +}; + +Vector.prototype.add = function(v2) { + return new Vector(this.x + v2.x, this.y + v2.y); +}; + +Vector.prototype.subtract = function(v2) { + return new Vector(this.x - v2.x, this.y - v2.y); +}; + +Vector.prototype.multiply = function(n) { + return new Vector(this.x * n, this.y * n); +}; + +Vector.prototype.divide = function(n) { + return new Vector((this.x / n) || 0, (this.y / n) || 0); // Avoid divide by zero errors.. +}; + +Vector.prototype.magnitude = function() { + return Math.sqrt(this.x*this.x + this.y*this.y); +}; + +Vector.prototype.normal = function() { + return new Vector(-this.y, this.x); +}; + +Vector.prototype.normalise = function() { + return this.divide(this.magnitude()); +}; + +// Point +Layout.ForceDirected.Point = function(position, mass) { + this.p = position; // position + this.m = mass; // mass + this.v = new Vector(0, 0); // velocity + this.a = new Vector(0, 0); // acceleration +}; + +Layout.ForceDirected.Point.prototype.applyForce = function(force) { + this.a = this.a.add(force.divide(this.m)); +}; + +// Spring +Layout.ForceDirected.Spring = function(point1, point2, length, k) { + this.point1 = point1; + this.point2 = point2; + this.length = length; // spring length at rest + this.k = k; // spring constant (See Hooke's law) .. how stiff the spring is +}; + +// Layout.ForceDirected.Spring.prototype.distanceToPoint = function(point) +// { +// // hardcore vector arithmetic.. ohh yeah! +// // .. see http://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment/865080#865080 +// var n = this.point2.p.subtract(this.point1.p).normalise().normal(); +// var ac = point.p.subtract(this.point1.p); +// return Math.abs(ac.x * n.x + ac.y * n.y); +// }; + +// Renderer handles the layout rendering loop +function Renderer(interval, layout, clear, drawEdge, drawNode) { + this.interval = interval; + this.layout = layout; + this.clear = clear; + this.drawEdge = drawEdge; + this.drawNode = drawNode; + + this.layout.graph.addGraphListener(this); +} + +Renderer.prototype.graphChanged = function(e) { + this.start(); +}; + +Renderer.prototype.start = function() { + var t = this; + this.layout.start(50, function render() { + t.clear(); + + t.layout.eachEdge(function(edge, spring) { + t.drawEdge(edge, spring.point1.p, spring.point2.p); + }); + + t.layout.eachNode(function(node, point) { + t.drawNode(node, point.p); + }); + }); +}; +