From 1fa68b2b1022053dc7cedeb43c1470b4c40800dc Mon Sep 17 00:00:00 2001 From: Jens Halm Date: Sun, 18 Dec 2011 02:40:04 +0000 Subject: [PATCH] Add HTML, JS and CSS for manual --- html/css/main.css | 549 ++++++++++ html/css/text.css | 32 + html/css/treeview-sprite.gif | Bin 0 -> 3900 bytes html/css/treeview.css | 37 + html/img/parsley-spicelib.jpg | Bin 0 -> 3454 bytes html/index.htm | 10 + html/js/treeview.js | 1776 +++++++++++++++++++++++++++++++++ html/js/utilities.js | 89 ++ html/splash.htm | 16 + 9 files changed, 2509 insertions(+) create mode 100644 html/css/main.css create mode 100644 html/css/text.css create mode 100644 html/css/treeview-sprite.gif create mode 100644 html/css/treeview.css create mode 100644 html/img/parsley-spicelib.jpg create mode 100644 html/index.htm create mode 100644 html/js/treeview.js create mode 100644 html/js/utilities.js create mode 100644 html/splash.htm diff --git a/html/css/main.css b/html/css/main.css new file mode 100644 index 0000000..587e112 --- /dev/null +++ b/html/css/main.css @@ -0,0 +1,549 @@ + +body { + margin: 0; + padding: 0; + font-family: Verdana, Arial, Helvetica, sans-serif; + background-color: #f9ebe8; + font-size: 11px; + color: #8a3942; +} + +/* added for docs */ +pre { + background-color: #ffffff; + border: 1px dashed #a5444d; + font-family: courier new, courier; + font-size: 11px; + color: #8a3942; + width: 650px; + padding-top: 10px; + padding-left: 15px; + padding-right: 15px; + padding-bottom: 10px; + overflow: auto; + margin-top: 10px; + margin-bottom: 8px; +} + +.doc_img { + border: 1px dashed #a5444d; + margin-top: 10px; +} + +h1 { + font-size: 22px; + font-weight: bold; +} + +h2 { + margin-top: 35px; + margin-bottom: 0px; + font-size: 18px; + font-weight: bold; +} + +h3 { + margin-top: 25px; + margin-bottom: 12px; + font-size: 14px; + font-weight: bold; +} + +.subheadline { + font-weight: bold; + margin-top: 17px; +} + +table { + border: 1px dashed #a5444d; + font-size: 11px; + color: #a5444d; + width: 680px; + padding: 2px; + margin-top: 10px; + overflow: auto; +} + +.small_table { + width: 250px; +} + +.medium_table { + width: 380px; +} + +td { + background-color: #ffffff; + margin: 1px; + padding: 5px; +} + +div#rule { + border-top: 2px solid #ebd3d3; + margin: 10px 0 10px 0; +} + +#doc_content { + margin-top: 70px; + margin-left: 40px; + width: 680px; + text-align: left; + line-height: 15px; + font-size: 11px; + color: #8a3942; +} +/* end docs */ + +.link_table { + border: 1px dashed #a5444d; + font-size: 11px; + color: #a5444d; + width: 480px; + padding: 0px; + margin-top: 2px; + overflow: auto; +} + +.link_table_small { + border: 1px dashed #a5444d; + font-size: 11px; + color: #a5444d; + width: 300px; + padding: 0px; + margin-top: 5px; + overflow: auto; +} +.link_table_medium { + border: 1px dashed #a5444d; + font-size: 11px; + color: #a5444d; + width: 360px; + padding: 0px; + margin-top: 5px; + overflow: auto; +} + +.link_cell { + height:42px; + text-align:center; + padding:0px; +} + +.cell_button { + width: 110px; + background-color: #E2EBE2; + padding: 4px; + border: 1px solid #126d40; + color: #126d40; + font-weight:bold; + text-align:center; + margin-left: 14px; + float: left; +} + +.cell_button:hover { + background-color: #C2D3C2; + color: #126d40; +} + +/* currently unused */ +#container { + min-width: 902px; + width: 100%; + text-align: center; +} + +#content { + margin-top: 30px; + margin-left: auto; + margin-right: auto; + width: 902px; +} + +#content_home { + margin-top: 30px; + margin-left: auto; + margin-right: auto; + width: 795px; +} + +#content_home_new { + margin-top: 30px; + margin-left: auto; + margin-right: auto; + width: 864px; +} + +#top { + background: url("../img/banner.jpg") no-repeat center right; + width: 902px; + height: 57px; +} + +#top #logo { + float: right; + display: inline; + margin-right: 25px; + margin-top: 15px; +} + +#navi { + width: 158px; + height: 600px; + float: left; + border-left: 2px solid #ebd3d3; + border-bottom: 2px solid #ebd3d3; + border-right: 2px solid #ebd3d3; +} + +#navi #head_spicefactory { + margin-top: 18px; +} + +#navi #project_name { + margin-top: 35px; +} + +#navi .link { + margin-top: 10px; + margin-left: 0px; +} + +#navi #wheel { + margin-top: 25px; + margin-left: 6px; +} + +#navi #wheel_double { + margin-top: 8px; + margin-left: 6px; +} + +#wheel_main { + margin-left: 6px; + margin-top: 257px; +} + +#wheel_oregano { + margin-left: 6px; + margin-top: 166px; +} + +#main { + float: left; + margin-left: 50px; + margin-top: 50px; + width: 640px; + text-align: left; + line-height: 16px; + font-size: 11px; + color: #8a3942; + /* ?? was #a5444d ?? */ +} + +#middle { + float: left; + margin-left: 50px; + margin-top: 50px; + width: 350px; + text-align: left; + line-height: 16px; + font-size: 11px; + color: #a5444d; +} + +#portrait { + float: left; + margin-left: 56px; + margin-top: 50px; + width: 221px; + height: 465px; + text-align: left; + line-height: 16px; + font-size: 11px; + color: #a5444d; + background: url("../img/portrait.jpg") no-repeat center right; +} + +#portrait_text { + margin-left: 10px; + margin-top: 220px; + margin-right: 5px; +} + +a { + text-decoration: none; + color: #126d40; + font-weight: bold; +} + +a:hover { + color: #a5444d; +} + +.head { + margin-bottom: 12px; +} + +.partner_logo { + margin-top: 12px; + margin-bottom: 12px; +} + +p { + margin-top: 7px; + margin-bottom: 5px; +} + +.paragraph { + margin-top: 10px; + margin-bottom: 0px; +} + +.paragraph2 { + margin-bottom: 15px; +} + +.paragraph2b { + margin-bottom: 12px; +} + +.paragraph3 { + margin-top: 15px; + margin-bottom: 15px; +} + +.address { + margin-top: 15px; + margin-bottom: 25px; +} + +.subhead { + font-weight: bold; + margin-top: 17px; +} + +.subhead2 { + font-weight: bold; + margin-top: 17px; + margin-bottom: 20px; +} + +.subhead4 { + font-weight: bold; + margin-top: 17px; + margin-bottom: 12px; +} + +.subhead3 { + font-weight: bold; + margin-top: 30px; + margin-bottom: 20px; +} + +#pimento_space { + margin-bottom: 154px; +} + +/* home ******************************************************/ + +#home_bottom { + background: url(../img/home/bottom_bg.jpg); + width: 797px; + height: 171px; +} + +#home_bottom_left { + width:314px; + height:171px; + float:left; +} + +#home_bottom_left_new { + width:324px; + height:171px; + float:left; +} + +#home_bottom_right { + width:320px; + height:171px; + float:right; +} + +/* buttons ***************************************************/ + +.home_cell_button { + width: 66px; + height: 14px; + background-color: #E2EBE2; + padding: 1px; + border: 1px solid #126d40; + font-size: 9px; + color: #126d40; + font-weight:normal; + text-align:center; + float: left; +} + +.home_cell_button_big { + width: 83px; + height: 14px; + background-color: #E2EBE2; + padding: 1px; + border: 1px solid #126d40; + font-size: 9px; + color: #126d40; + font-weight:normal; + text-align:center; + float: left; +} + +.home_cell_button_big:hover { + background-color: #C2D3C2; + color: #126d40; +} + +.home_cell_button:hover { + background-color: #C2D3C2; + color: #126d40; +} + +.home_link_area { + border: 2px solid #ebd3d3; + width: 240px; + height: 43px; +} + +.home_text { + font-weight: normal; + font-size: 9px; + color: #a5444d; +} + +.news_entry { + border-bottom: 2px solid #ebd3d3; + width: 314px; + height: 18px; +} + +.news_entry_new { + border-bottom: 2px solid #ebd3d3; + width: 326px; + height: 18px; +} + +.news_first { + margin-top: 28px; +} + +.news_last { + border-bottom: 0px; + text-align: right; +} + +.button { + margin-left: 2px; + padding-left: 4px; + padding-right: 4px; + padding-top: 3px; + width: 304px; + height: 15px; + display: block; + font-weight: normal; + font-size: 9px; + color: #a5444d; +} +.button:hover { + background-color:#f1e2e2; + color: #a5444d; +} + +.button_new { + margin-left: 2px; + padding-left: 4px; + padding-right: 4px; + padding-top: 3px; + width: 316px; + height: 15px; + display: block; + font-weight: normal; + font-size: 9px; + color: #a5444d; +} +.button_new:hover { + background-color:#f1e2e2; + color: #a5444d; +} + +/* lists ***************************************************/ + +ul { + margin-left: 15px; + padding-left: 0px; + margin-top: 0px; +} + +li { + padding-left: 0px; + margin-left: 0px; + margin-top: 7px; +} + +/* forms ***************************************************/ + +.form { + width: 650px; +} + +fieldset { + margin: 0; + padding: 0; + border: 0; +} + +.form_row { + margin-bottom: 8px; +} + +.form_bottom { + margin-top: 16px; + margin-left: 70px; +} + +.form_label { + width: 60px; + margin-left: 0px; + margin-right: 10px; + float: left; + text-align: right; +} + +.form_field { + width: 350px; +} + +.error { + background-color: #ff0000; + color: #ffffff; + font-weight: bold; + padding: 3px; +} + +/* oregano popups ***************************************************/ + +.popup_head { + font-weight: bold; + font-size: 13px; +} + +.popup { + float: left; + margin-left: 30px; + margin-top: 30px; + width: 430px; + text-align: left; + line-height: 15px; + font-size: 11px; + color: #a5444d; +} \ No newline at end of file diff --git a/html/css/text.css b/html/css/text.css new file mode 100644 index 0000000..50a90b7 --- /dev/null +++ b/html/css/text.css @@ -0,0 +1,32 @@ +/* CSS Document */ +body { + margin: 0; + padding: 0; + font-size: 11px; + color: #8a3942; + font-family: Verdana, Arial, Helvetica, sans-serif; + background-color: #f9ebe8; +} + +.ygtvlabel { + padding-top: 3px; + background-color: #f9ebe8; + text-decoration: none; + color: #126d40; + font-weight: bold; + font-size: 10px; +} + +.ygtvlabel:hover { + color: #a5444d; +} + +.labelcell { + padding-top: 4px; +} + +div#rule_horiz { + border-top: 2px solid #ebd3d3; + margin: 10px 0 10px 0; +} + diff --git a/html/css/treeview-sprite.gif b/html/css/treeview-sprite.gif new file mode 100644 index 0000000000000000000000000000000000000000..a04eff6af441680dcc054528539d7a9ca89a79df GIT binary patch literal 3900 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 KHVU#K0029HfgIHU literal 0 HcmV?d00001 diff --git a/html/css/treeview.css b/html/css/treeview.css new file mode 100644 index 0000000..5a8adae --- /dev/null +++ b/html/css/treeview.css @@ -0,0 +1,37 @@ +/* +Copyright (c) 2007, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.3.1 +*/ +.ygtvtn{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -5600px no-repeat;} + +.ygtvtm{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -4000px no-repeat;} + +.ygtvtmh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -4800px no-repeat;} + +.ygtvtp{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -6400px no-repeat;} + +.ygtvtph{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -7200px no-repeat;} + +.ygtvln{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -1600px no-repeat;} + +.ygtvlm{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 0px no-repeat;} + +.ygtvlmh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -800px no-repeat;} + +.ygtvlp{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -2400px no-repeat;} + +.ygtvlph{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -3200px no-repeat;} + +.ygtvloading{width:18px;height:22px;background:url(../../cinnamon/docs/0.1/manual/treeview-loading.gif) 0 0 no-repeat;} + +.ygtvdepthcell{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -8000px no-repeat;} + +.ygtvblankdepthcell{width:18px;height:22px;} + +.ygtvitem{}.ygtvchildren{*zoom:1;} + +.ygtvlabel,.ygtvlabel:link,.ygtvlabel:visited,.ygtvlabel:hover{margin-left:2px;text-decoration:none;padding-top:0px;} + +.ygtvspacer{height:22px;width:18px;} diff --git a/html/img/parsley-spicelib.jpg b/html/img/parsley-spicelib.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43b0b1a5c11b3d12a863e358f4a9708f63c6d10d GIT binary patch literal 3454 zcmYk8cU05Mw#R>=1qeZc2~9w0a_Bul4j_p1A|)XnsvsaOG(jl>2as|oa*==(xrl}m z1VZmcdY39lC`whTN)1Kw@Z5Lqd*4|zYi8{|pV_nb{4vyz)XxB$fsVco00Myky^97= zX8|n$Oh-pYPY0%_2Qz~&ItvpR%)|nPKv*CUC=B|yV9-l!Ft$rjIGlq64(I3NInxA$YF+e+m3&At3N;axwm`|8D=!g!&GEF#?<*I4uYU(7-^n zFc7s1xB>vQ7r}x+z(1m+XP^axXn+f&1{(mPrJ{0%@67C5&?Ndl=PzLEr`fG_?Q6{+j??ATCUDFaSgc z0$m(N|G%gI@`bU}(O(vj(=52gFn91xfeYQTSd46^k^zz4)udX9Y|>`V<6C}Ro`W6c~7X<-j9 zOH4WKr2=}3k0Wds$A2QUr7Mh!C&oiusUJ~&ef?^Ge))CXjL70Fu3_#Z-1QPl${$^h)nhWPzy7o7bG{_X*0O16>)WQu`<##$JpSaPHVo|`TlJNZ#JS&DPDC)$k}LI>ZDLlU>z8#6CdZk_ zeCOyNAu0D<5JRJSiyk}K-MmCI_C)8#+el8a&05_mO<;EN_@X%AuLPXEh2EWi-r8qx znsC+^U!O&EHIq~_RR|sPtHi}B;q*TBNqj-)r^$OO2(PhbHWmCv5;hiFpkN-OpGXm@ z%)38|KRiy970(osR17MqVz^gmD%O){Dh`W`WYU=QDw~&OA~?qNxr!*+i8{O6OAMEe zz1Q)wRRyp_%Fud~|aE8P>I zlI^P&*D3kTjUid7R*>0Vxp5*+Zp%QaZs^*%Fnwg+t`OsDm4QUOp;@t6!ymgY>Ps7& zKD$Zzx0C4ps2%;dex6~jn>EJkT@D-umwes5CYSYEn~2OGV07ltwPioKs?_%2Q{0V$ zv@$vN1)Fe2JLC>!9^y=B-JZ@%OVYQhsdFj{Y2S_#w9VdWV9;wEk6`hwuAV;^(=C%?;Jb&F~!LD=l*cS2#G(q19rLk zCxa12Y$2$&?|IqUpk0-Z+PvCFIOcWWZga!_*Q^JgQwpMƲ(avkj^tEm8&nR9!_67fTyS(PQGP}9Y6UpKU<2&aGdn)@DNjwUZ`svTUfN7;3gYw2k% zI*XmE!&mk4B-$959Z513P^juf<#I*w>lKVg zmmYCX8zTSJWAC!pCQ`$b{nCS5jcj`-)sZ)j(F;;>q;#M$(NvT|p02&tXehMolnE&h zBr=BzshSJM`wsXYH;HIvg~{9bJ~mUcfpGG9s&iSXrT6Mz9$s5q%P^C8`OG02qOcnL zgcWyBJ2c}Wt$s@b8(2!*w#U7wd91Ky$K4~I69O)2HwO=1g8xE(@rPt4PRTK|1f7?Ps=St%8BGeE5hSNs2l>G}@#=!LqqR8Gb zj_g;(A_v+GR1sxbk{ZOG#_GWoxXMy<&u5ZV2!Bq+-I|G9mip%EpC9N_?w+&`F%)Vi z=-Q<#GM0FHK}WjRF#D&ifnEv9y-((BY)3LNPh_Y7XyWFU{b_Nh!t?%8NkZY(~2Zblsn@sjAD!*zbyC89XFw8p$*Dnhdk2Ly`~R~nt3 zw&2CavSuwCpju46)w9LVOI^C|WpAZrH(jk?UMr=jFEjV0u#X>zK?0+N>I^L}SpR9>~i4Q5dRD$ zAAi0I4qj?R83v{_HTUhJxn-n=-rNpq=q}{5?soO1*{Jg%>XPgzk80CxZI-k;D+iHI z;RHmmvsU)%nNslK;lbu!zGW+6{ggkJt#&lZqR9>Mh$uTKpIzb<4twvTAcLyw%lmD$ z_P}F2zxd<;68dFp(J-)7Zo@aRvZ2^WeyD*=5iNdsb`x>BE|yAqv7IkrlI=wWu0FZG z?f=9uX?dcJ(g=~-u8jE>D#p~-=P<2IRDOxFaZ6h_p47ATRJrU@a#y;f>}YzemK4K@ zs2~qQ5jzAbV1WqVleqXZw0&Fj!3HLTX>Rs&Yc10HYz(2r({$Z!Dx(q=32>m?i%G=G z#(z7K>$zmWoiv`f9eIoe9j`8(P@tU%K9XqF%?J`aFiqiil{3j+jP7g z9KHU*wQ7#kA^@8+jCZPi#lh}P$XR`S?8qQ+z5WK_{>Zd*v~H9+Ve0zio2hB8p`hM) zw*K|{$`+L z%d*2QSuKo(`@{Rzb{m9F$pLrE+eV4IQ?52730!)jTGIx7zS7}AIN$kuPJU!{5=J{Z zh#*gqa5E`O{UewTg&@jB!dp=1*Op|C6QShM`8Sa%+OfhOR(q@Fto#hSgW!EO|S-+t;?J@W}%DuBX;+(&Y3D3%5 zl&nLXaI(Y-qfN=|OJwyCTri2y`1aG9tPiHi1`^TpcG{_-j0v6PiJZD00R4pk!ZgpI z8{J*?SMu~a$c?g literal 0 HcmV?d00001 diff --git a/html/index.htm b/html/index.htm new file mode 100644 index 0000000..6775949 --- /dev/null +++ b/html/index.htm @@ -0,0 +1,10 @@ + + + + Parsley + Spicelib Developer Manual + + + + + + \ No newline at end of file diff --git a/html/js/treeview.js b/html/js/treeview.js new file mode 100644 index 0000000..18ddcf3 --- /dev/null +++ b/html/js/treeview.js @@ -0,0 +1,1776 @@ +/* +Software License Agreement (BSD License) + +Copyright (c) 2006, Yahoo! Inc. +All rights reserved. + +Redistribution and use of this software in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of Yahoo! Inc. nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of Yahoo! Inc. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +version: 0.10.0 +*/ + +/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */ + +/** + * Contains the tree view state data and the root node. This is an + * ordered tree; child nodes will be displayed in the order created, and + * there currently is no way to change this. + * + * @constructor + * @todo graft (appendBefore, appendAfter) + * @param {string} id The id of the element that the tree will be inserted + * into. + */ +YAHOO.widget.TreeView = function(id) { + if (id) { this.init(id); } +}; + +/** + * Count of all nodes in all trees + * @type int + */ +YAHOO.widget.TreeView.nodeCount = 0; + +YAHOO.widget.TreeView.prototype = { + + /** + * The id of tree container element + * + * @type String + */ + id: null, + + /** + * Flat collection of all nodes in this tree + * + * @type Node[] + * @private + */ + _nodes: null, + + /** + * We lock the tree control while waiting for the dynamic loader to return + * + * @type boolean + */ + locked: false, + + /** + * The animation to use for expanding children, if any + * + * @type string + * @private + */ + _expandAnim: null, + + /** + * The animation to use for collapsing children, if any + * + * @type string + * @private + */ + _collapseAnim: null, + + /** + * The current number of animations that are executing + * + * @type int + * @private + */ + _animCount: 0, + + /** + * The maximum number of animations to run at one time. + * + * @type int + */ + maxAnim: 2, + + /** + * Sets up the animation for expanding children + * + * @param {string} the type of animation (acceptable constants in YAHOO.widget.TVAnim) + */ + setExpandAnim: function(type) { + if (YAHOO.widget.TVAnim.isValid(type)) { + this._expandAnim = type; + } + }, + + /** + * Sets up the animation for collapsing children + * + * @param {string} the type of animation (acceptable constants in YAHOO.widget.TVAnim) + */ + setCollapseAnim: function(type) { + if (YAHOO.widget.TVAnim.isValid(type)) { + this._collapseAnim = type; + } + }, + + /** + * Perform the expand animation if configured, or just show the + * element if not configured or too many animations are in progress + * + * @param el {HTMLElement} the element to animate + * @return {boolean} true if animation could be invoked, false otherwise + */ + animateExpand: function(el) { + + if (this._expandAnim && this._animCount < this.maxAnim) { + // this.locked = true; + var tree = this; + var a = YAHOO.widget.TVAnim.getAnim(this._expandAnim, el, + function() { tree.expandComplete(); }); + if (a) { + ++this._animCount; + a.animate(); + } + + return true; + } + + return false; + }, + + /** + * Perform the collapse animation if configured, or just show the + * element if not configured or too many animations are in progress + * + * @param el {HTMLElement} the element to animate + * @return {boolean} true if animation could be invoked, false otherwise + */ + animateCollapse: function(el) { + + if (this._collapseAnim && this._animCount < this.maxAnim) { + // this.locked = true; + var tree = this; + var a = YAHOO.widget.TVAnim.getAnim(this._collapseAnim, el, + function() { tree.collapseComplete(); }); + if (a) { + ++this._animCount; + a.animate(); + } + + return true; + } + + return false; + }, + + /** + * Function executed when the expand animation completes + */ + expandComplete: function() { + --this._animCount; + // this.locked = false; + }, + + /** + * Function executed when the collapse animation completes + */ + collapseComplete: function() { + --this._animCount; + // this.locked = false; + }, + + /** + * Initializes the tree + * + * @parm {string} id the id of the element that will hold the tree + * @private + */ + init: function(id) { + + this.id = id; + this._nodes = []; + + // store a global reference + YAHOO.widget.TreeView.trees[id] = this; + + // Set up the root node + this.root = new YAHOO.widget.RootNode(this); + + + }, + + /** + * Renders the tree boilerplate and visible nodes + */ + draw: function() { + var html = this.root.getHtml(); + document.getElementById(this.id).innerHTML = html; + this.firstDraw = false; + }, + + /** + * Nodes register themselves with the tree instance when they are created. + * + * @param node {Node} the node to register + * @private + */ + regNode: function(node) { + this._nodes[node.index] = node; + }, + + /** + * Returns the root node of this tree + * + * @return {Node} the root node + */ + getRoot: function() { + return this.root; + }, + + /** + * Configures this tree to dynamically load all child data + * + * @param {function} fnDataLoader the function that will be called to get the data + * @param iconMode {int} configures the icon that is displayed when a dynamic + * load node is expanded the first time without children. By default, the + * "collapse" icon will be used. If set to 1, the leaf node icon will be + * displayed. + */ + setDynamicLoad: function(fnDataLoader, iconMode) { + this.root.setDynamicLoad(fnDataLoader, iconMode); + }, + + /** + * Expands all child nodes. Note: this conflicts with the "multiExpand" + * node property. If expand all is called in a tree with nodes that + * do not allow multiple siblings to be displayed, only the last sibling + * will be expanded. + */ + expandAll: function() { + if (!this.locked) { + this.root.expandAll(); + } + }, + + /** + * Collapses all expanded child nodes in the entire tree. + */ + collapseAll: function() { + if (!this.locked) { + this.root.collapseAll(); + } + }, + + /** + * Returns a node in the tree that has the specified index (this index + * is created internally, so this function probably will only be used + * in html generated for a given node.) + * + * @param {int} nodeIndex the index of the node wanted + * @return {Node} the node with index=nodeIndex, null if no match + */ + getNodeByIndex: function(nodeIndex) { + var n = this._nodes[nodeIndex]; + return (n) ? n : null; + }, + + /** + * Returns a node that has a matching property and value in the data + * object that was passed into its constructor. Provides a flexible + * way for the implementer to get a particular node. + * + * @param {object} property the property to search (usually a string) + * @param {object} value the value we want to find (usuall an int or string) + * @return {Node} the matching node, null if no match + */ + getNodeByProperty: function(property, value) { + for (var i in this._nodes) { + var n = this._nodes[i]; + if (n.data && value == n.data[property]) { + return n; + } + } + + return null; + }, + + /** + * Removes the node and its children, and optionally refreshes the branch + * of the tree that was affected. + * @param {Node} The node to remove + * @param {boolean} autoRefresh automatically refreshes branch if true + * @return {boolean} False is there was a problem, true otherwise. + */ + removeNode: function(node, autoRefresh) { + + // Don't delete the root node + if (node.isRoot()) { + return false; + } + + // Get the branch that we may need to refresh + var p = node.parent; + if (p.parent) { + p = p.parent; + } + + // Delete the node and its children + this._deleteNode(node); + + // Refresh the parent of the parent + if (autoRefresh && p && p.childrenRendered) { + p.refresh(); + } + + return true; + }, + + /** + * Deletes this nodes child collection, recursively. Also collapses + * the node, and resets the dynamic load flag. The primary use for + * this method is to purge a node and allow it to fetch its data + * dynamically again. + * @param {Node} node the node to purge + */ + removeChildren: function(node) { + for (var i=0, len=node.children.length;i '; + } + + var f = document.createElement("div"); + var s = f.style; + s.position = "absolute"; + s.top = "-1000px"; + s.left = "-1000px"; + f.innerHTML = sb.join(""); + + document.body.appendChild(f); +}; + +YAHOO.widget.TreeView.addHandler(window, + "load", YAHOO.widget.TreeView.preload); + +/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */ + +/** + * The base class for all tree nodes. The node's presentation and behavior in + * response to mouse events is handled in Node subclasses. + * + * @param oData {object} a string or object containing the data that will + * be used to render this node + * @param oParent {Node} this node's parent node + * @param expanded {boolean} the initial expanded/collapsed state + * @constructor + */ +YAHOO.widget.Node = function(oData, oParent, expanded) { + if (oParent) { this.init(oData, oParent, expanded); } +}; + +YAHOO.widget.Node.prototype = { + + /** + * The index for this instance obtained from global counter in YAHOO.widget.TreeView. + * + * @type int + */ + index: 0, + + /** + * This node's child node collection. + * + * @type Node[] + */ + children: null, + + /** + * Tree instance this node is part of + * + * @type TreeView + */ + tree: null, + + /** + * The data linked to this node. This can be any object or primitive + * value, and the data can be used in getNodeHtml(). + * + * @type object + */ + data: null, + + /** + * Parent node + * + * @type Node + */ + parent: null, + + /** + * The depth of this node. We start at -1 for the root node. + * + * @type int + */ + depth: -1, + + /** + * The href for the node's label. If one is not specified, the href will + * be set so that it toggles the node. + * + * @type string + */ + href: null, + + /** + * The label href target, defaults to current window + * + * @type string + */ + target: "_self", + + /** + * The node's expanded/collapsed state + * + * @type boolean + */ + expanded: false, + + /** + * Can multiple children be expanded at once? + * + * @type boolean + */ + multiExpand: true, + + /** + * Should we render children for a collapsed node? It is possible that the + * implementer will want to render the hidden data... @todo verify that we + * need this, and implement it if we do. + * + * @type boolean + */ + renderHidden: false, + + /** + * This flag is set to true when the html is generated for this node's + * children, and set to false when new children are added. + * @type boolean + */ + childrenRendered: false, + + /** + * Dynamically loaded nodes only fetch the data the first time they are + * expanded. This flag is set to true once the data has been fetched. + * @type boolean + */ + dynamicLoadComplete: false, + + /** + * This node's previous sibling + * + * @type Node + */ + previousSibling: null, + + /** + * This node's next sibling + * + * @type Node + */ + nextSibling: null, + + /** + * We can set the node up to call an external method to get the child + * data dynamically. + * + * @type boolean + * @private + */ + _dynLoad: false, + + /** + * Function to execute when we need to get this node's child data. + * + * @type function + */ + dataLoader: null, + + /** + * This is true for dynamically loading nodes while waiting for the + * callback to return. + * + * @type boolean + */ + isLoading: false, + + /** + * The toggle/branch icon will not show if this is set to false. This + * could be useful if the implementer wants to have the child contain + * extra info about the parent, rather than an actual node. + * + * @type boolean + */ + hasIcon: true, + + /** + * Used to configure what happens when a dynamic load node is expanded + * and we discover that it does not have children. By default, it is + * treated as if it still could have children (plus/minus icon). Set + * iconMode to have it display like a leaf node instead. + * @type int + */ + iconMode: 0, + + /** + * The node type + * @private + */ + _type: "Node", + + /* + spacerPath: "http://us.i1.yimg.com/us.yimg.com/i/space.gif", + expandedText: "Expanded", + collapsedText: "Collapsed", + loadingText: "Loading", + */ + + /** + * Initializes this node, gets some of the properties from the parent + * + * @param oData {object} a string or object containing the data that will + * be used to render this node + * @param oParent {Node} this node's parent node + * @param expanded {boolean} the initial expanded/collapsed state + */ + init: function(oData, oParent, expanded) { + this.data = oData; + this.children = []; + this.index = YAHOO.widget.TreeView.nodeCount; + ++YAHOO.widget.TreeView.nodeCount; + this.expanded = expanded; + + // oParent should never be null except when we create the root node. + if (oParent) { + this.tree = oParent.tree; + this.parent = oParent; + this.href = "javascript:" + this.getToggleLink(); + this.depth = oParent.depth + 1; + this.multiExpand = oParent.multiExpand; + + oParent.appendChild(this); + } + }, + + /** + * Appends a node to the child collection. + * + * @param node {Node} the new node + * @return {Node} the child node + * @private + * @TODO insertBefore, insertAfter + */ + appendChild: function(node) { + if (this.hasChildren()) { + var sib = this.children[this.children.length - 1]; + sib.nextSibling = node; + node.previousSibling = sib; + } + + this.tree.regNode(node); + this.children[this.children.length] = node; + this.childrenRendered = false; + return node; + + }, + + /** + * Returns a node array of this node's siblings, null if none. + * + * @return Node[] + */ + getSiblings: function() { + return this.parent.children; + }, + + /** + * Shows this node's children + */ + showChildren: function() { + if (!this.tree.animateExpand(this.getChildrenEl())) { + if (this.hasChildren()) { + this.getChildrenEl().style.display = ""; + } + } + }, + + /** + * Hides this node's children + */ + hideChildren: function() { + + if (!this.tree.animateCollapse(this.getChildrenEl())) { + this.getChildrenEl().style.display = "none"; + } + }, + + /** + * Returns the id for this node's container div + * + * @return {string} the element id + */ + getElId: function() { + return "ygtv" + this.index; + }, + + /** + * Returns the id for this node's children div + * + * @return {string} the element id for this node's children div + */ + getChildrenElId: function() { + return "ygtvc" + this.index; + }, + + /** + * Returns the id for this node's toggle element + * + * @return {string} the toggel element id + */ + getToggleElId: function() { + return "ygtvt" + this.index; + }, + + /** + * Returns the id for this node's spacer image. The spacer is positioned + * over the toggle and provides feedback for screen readers. + * @return {string} the id for the spacer image + */ + /* + getSpacerId: function() { + return "ygtvspacer" + this.index; + }, + */ + + /** + * Returns this node's container html element + * @return {HTMLElement} the container html element + */ + getEl: function() { + return document.getElementById(this.getElId()); + }, + + /** + * Returns the div that was generated for this node's children + * @return {HTMLElement} this node's children div + */ + getChildrenEl: function() { + return document.getElementById(this.getChildrenElId()); + }, + + /** + * Returns the element that is being used for this node's toggle. + * @return {HTMLElement} this node's toggle html element + */ + getToggleEl: function() { + return document.getElementById(this.getToggleElId()); + }, + + /** + * Returns the element that is being used for this node's spacer. + * @return {HTMLElement} this node's spacer html element + */ + /* + getSpacer: function() { + return document.getElementById( this.getSpacerId() ) || {}; + }, + */ + + /* + getStateText: function() { + if (this.isLoading) { + return this.loadingText; + } else if (this.hasChildren(true)) { + if (this.expanded) { + return this.expandedText; + } else { + return this.collapsedText; + } + } else { + return ""; + } + }, + */ + + /** + * Generates the link that will invoke this node's toggle method + * @return {string} the javascript url for toggling this node + */ + getToggleLink: function() { + return "YAHOO.widget.TreeView.getNode(\'" + this.tree.id + "\'," + + this.index + ").toggle()"; + }, + + /** + * Hides this nodes children (creating them if necessary), changes the + * toggle style. + */ + collapse: function() { + // Only collapse if currently expanded + if (!this.expanded) { return; } + + // fire the collapse event handler + var ret = this.tree.onCollapse(this); + + if ("undefined" != typeof ret && !ret) { + return; + } + + if (!this.getEl()) { + this.expanded = false; + return; + } + + // hide the child div + this.hideChildren(); + this.expanded = false; + + if (this.hasIcon) { + this.getToggleEl().className = this.getStyle(); + } + + // this.getSpacer().title = this.getStateText(); + + }, + + /** + * Shows this nodes children (creating them if necessary), changes the + * toggle style, and collapses its siblings if multiExpand is not set. + */ + expand: function() { + // Only expand if currently collapsed. + if (this.expanded || !this.hasChildren()) { return; } + + // fire the expand event handler + var ret = this.tree.onExpand(this); + + if ("undefined" != typeof ret && !ret) { + return; + } + + if (!this.getEl()) { + this.expanded = true; + return; + } + + if (! this.childrenRendered) { + this.getChildrenEl().innerHTML = this.renderChildren(); + } else { + } + + this.expanded = true; + if (this.hasIcon) { + this.getToggleEl().className = this.getStyle(); + } + + // this.getSpacer().title = this.getStateText(); + + // We do an extra check for children here because the lazy + // load feature can expose nodes that have no children. + + // if (!this.hasChildren()) { + if (this.isLoading) { + this.expanded = false; + return; + } + + if (! this.multiExpand) { + var sibs = this.getSiblings(); + for (var i=0; i 0 || + (checkForLazyLoad && this.isDynamic() && !this.dynamicLoadComplete) ); + }, + + /** + * Expands if node is collapsed, collapses otherwise. + */ + toggle: function() { + if (!this.tree.locked && ( this.hasChildren(true) || this.isDynamic()) ) { + if (this.expanded) { this.collapse(); } else { this.expand(); } + } + }, + + /** + * Returns the markup for this node and its children. + * + * @return {string} the markup for this node and its expanded children. + */ + getHtml: function() { + var sb = []; + sb[sb.length] = '
'; + sb[sb.length] = this.getNodeHtml(); + sb[sb.length] = this.getChildrenHtml(); + sb[sb.length] = '
'; + return sb.join(""); + }, + + /** + * Called when first rendering the tree. We always build the div that will + * contain this nodes children, but we don't render the children themselves + * unless this node is expanded. + * + * @return {string} the children container div html and any expanded children + * @private + */ + getChildrenHtml: function() { + + var sb = []; + sb[sb.length] = '
= this.depth || depth < 0) { + return null; + } + + var p = this.parent; + + while (p.depth > depth) { + p = p.parent; + } + + return p; + }, + + /** + * Returns the css class for the spacer at the specified depth for + * this node. If this node's ancestor at the specified depth + * has a next sibling the presentation is different than if it + * does not have a next sibling + * + * @param {int} depth the depth of the ancestor. + * @return {string} the css class for the spacer + */ + getDepthStyle: function(depth) { + return (this.getAncestor(depth).nextSibling) ? + "ygtvdepthcell" : "ygtvblankdepthcell"; + }, + + /** + * Get the markup for the node. This is designed to be overrided so that we can + * support different types of nodes. + * + * @return {string} The HTML that will render this node. + */ + getNodeHtml: function() { + return ""; + }, + + /** + * Regenerates the html for this node and its children. To be used when the + * node is expanded and new children have been added. + */ + refresh: function() { + // this.loadComplete(); + this.getChildrenEl().innerHTML = this.completeRender(); + + if (this.hasIcon) { + var el = this.getToggleEl(); + if (el) { + el.className = this.getStyle(); + } + } + } + +}; + +/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */ + +/** + * A custom YAHOO.widget.Node that handles the unique nature of + * the virtual, presentationless root node. + * + * @extends YAHOO.widget.Node + * @constructor + */ +YAHOO.widget.RootNode = function(oTree) { + // Initialize the node with null params. The root node is a + // special case where the node has no presentation. So we have + // to alter the standard properties a bit. + this.init(null, null, true); + + /** + * For the root node, we get the tree reference from as a param + * to the constructor instead of from the parent element. + * + * @type TreeView + */ + this.tree = oTree; +}; +YAHOO.widget.RootNode.prototype = new YAHOO.widget.Node(); + +// overrides YAHOO.widget.Node +YAHOO.widget.RootNode.prototype.getNodeHtml = function() { + return ""; +}; + +/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */ + +/** + * The default node presentation. The first parameter should be + * either a string that will be used as the node's label, or an object + * that has a string propery called label. By default, the clicking the + * label will toggle the expanded/collapsed state of the node. By + * changing the href property of the instance, this behavior can be + * changed so that the label will go to the specified href. + * + * @extends YAHOO.widget.Node + * @constructor + * @param oData {object} a string or object containing the data that will + * be used to render this node + * @param oParent {YAHOO.widget.Node} this node's parent node + * @param expanded {boolean} the initial expanded/collapsed state + */ +YAHOO.widget.TextNode = function(oData, oParent, expanded) { + this.type = "TextNode"; + + if (oParent) { + this.init(oData, oParent, expanded); + this.setUpLabel(oData); + } +}; + +YAHOO.widget.TextNode.prototype = new YAHOO.widget.Node(); + +/** + * The CSS class for the label href. Defaults to ygtvlabel, but can be + * overridden to provide a custom presentation for a specific node. + * + * @type string + */ +YAHOO.widget.TextNode.prototype.labelStyle = "ygtvlabel"; + +/** + * The derived element id of the label for this node + * + * @type string + */ +YAHOO.widget.TextNode.prototype.labelElId = null; + +/** + * The text for the label. It is assumed that the oData parameter will + * either be a string that will be used as the label, or an object that + * has a property called "label" that we will use. + * + * @type string + */ +YAHOO.widget.TextNode.prototype.label = null; + +/** + * Sets up the node label + * + * @param oData string containing the label, or an object with a label property + */ +YAHOO.widget.TextNode.prototype.setUpLabel = function(oData) { + if (typeof oData == "string") { + oData = { label: oData }; + } + this.label = oData.label; + + // update the link + if (oData.href) { + this.href = oData.href; + } + + // set the target + if (oData.target) { + this.target = oData.target; + } + + if (oData.style) { + this.labelStyle = oData.style; + } + + this.labelElId = "ygtvlabelel" + this.index; +}; + +/** + * Returns the label element + * + * @return {object} the element + */ +YAHOO.widget.TextNode.prototype.getLabelEl = function() { + return document.getElementById(this.labelElId); +}; + +// overrides YAHOO.widget.Node +YAHOO.widget.TextNode.prototype.getNodeHtml = function() { + var sb = []; + + sb[sb.length] = ''; + sb[sb.length] = ''; + + for (i=0;i '; + } + + var getNode = 'YAHOO.widget.TreeView.getNode(\'' + + this.tree.id + '\',' + this.index + ')'; + + sb[sb.length] = ''; + + /* + sb[sb.length] = ' '; + } + + if (this.hasIcon) { + sb[sb.length] = ' + + + Parsley + Spicelib Developer Manual + + + +
+
+ Parsley + Spicelib +
+ +
DEVELOPER MANUAL
+
+ + \ No newline at end of file