fmsystem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Fmsystem-commits] [12245] convert topmenu to responsive horizontal menu


From: Sigurd Nes
Subject: [Fmsystem-commits] [12245] convert topmenu to responsive horizontal menu
Date: Tue, 28 Oct 2014 12:32:34 +0000

Revision: 12245
          http://svn.sv.gnu.org/viewvc/?view=rev&root=fmsystem&revision=12245
Author:   sigurdne
Date:     2014-10-28 12:32:33 +0000 (Tue, 28 Oct 2014)
Log Message:
-----------
convert topmenu to responsive horizontal menu

Modified Paths:
--------------
    branches/dev-syncromind/phpgwapi/templates/pure/css/demo_mmenu.css
    branches/dev-syncromind/phpgwapi/templates/pure/head.inc.php
    branches/dev-syncromind/phpgwapi/templates/pure/js/mmenu.js
    branches/dev-syncromind/phpgwapi/templates/pure/navbar.inc.php
    branches/dev-syncromind/phpgwapi/templates/pure/navbar.tpl

Added Paths:
-----------
    branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/
    branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/assets/
    
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/assets/gallery-sm-menu-core.css
    
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/assets/skins/
    
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/assets/skins/sam/
    
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/assets/skins/sam/gallery-sm-menu-skin.css
    
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/assets/skins/sam/gallery-sm-menu.css
    
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/gallery-sm-menu-coverage.js
    
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/gallery-sm-menu-debug.js
    
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/gallery-sm-menu-min.js
    
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/gallery-sm-menu.js

Added: 
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/assets/gallery-sm-menu-core.css
===================================================================
--- 
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/assets/gallery-sm-menu-core.css
                            (rev 0)
+++ 
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/assets/gallery-sm-menu-core.css
    2014-10-28 12:32:33 UTC (rev 12245)
@@ -0,0 +1,63 @@
+.yui3-menu,
+.yui3-menu-children {
+    left: -10000px;
+    position: absolute;
+    top: -10000px;
+    visibility: hidden;
+}
+
+.yui3-menu.yui3-menu-open {
+    left: auto;
+    top: auto;
+    visibility: visible;
+    z-index: 2;
+}
+
+.yui3-menu-children {
+    left: -10000px;
+    list-style: none;
+    margin: 0;
+    padding: 0;
+    top: -10000px;
+    z-index: 1;
+}
+
+.yui3-menu > .yui3-menu-children { position: relative; }
+
+.yui3-menu-open > .yui3-menu-children {
+    left: 0;
+    top: 0;
+    visibility: visible;
+}
+
+.yui3-menu-item { position: relative; }
+
+.yui3-menu-label {
+    display: block;
+    color: inherit;
+    line-height: 1.5;
+    padding: 0 20px;
+    text-decoration: none;
+    white-space: nowrap;
+}
+
+a.yui3-menu-label { padding-right: 30px; }
+
+.yui3-menu-can-have-children > .yui3-menu-label:after {
+    content: '\25B8';
+    float: right;
+    font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'DejaVu Sans', 
sans-serif; /* These specific fonts have the Unicode char we need. */
+    margin-right: -20px;
+    margin-top: -1px;
+}
+
+.yui3-menu-separator {
+    background-color: #dfdfdf;
+    display: block;
+    height: 1px;
+    font-size: 0;
+    margin: 7px 2px;
+    overflow: hidden;
+}
+
+.yui3-menu-hidden { display: none; }

Added: 
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/assets/skins/sam/gallery-sm-menu-skin.css
===================================================================
--- 
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/assets/skins/sam/gallery-sm-menu-skin.css
                          (rev 0)
+++ 
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/assets/skins/sam/gallery-sm-menu-skin.css
  2014-10-28 12:32:33 UTC (rev 12245)
@@ -0,0 +1,50 @@
+.yui3-skin-sam .yui3-menu-children {
+    background: #fff;
+    border: 1px solid #b7b7b7;
+    border-radius: 3px;
+    box-shadow: 0 3px 6px #afafaf;
+    padding: 5px 0;
+}
+
+.yui3-skin-sam .yui3-menu-label {
+    border: 1px solid transparent;
+    border-left: none;
+    border-right: none;
+}
+
+.yui3-skin-sam .yui3-menu-label,
+.yui3-skin-sam .yui3-menu-can-have-children > .yui3-menu-label:after {
+    color: #333;
+}
+
+.yui3-skin-sam .yui3-menu-can-have-children > .yui3-menu-label:hover:after {
+    color: #fff;
+}
+
+.yui3-skin-sam a.yui3-menu-label:hover {
+    background: rgb(81, 113, 235);
+    background: -moz-linear-gradient(rgba(81, 113, 235, 1), rgba(26, 67, 244, 
1));
+    background: -ms-linear-gradient(rgba(81, 113, 235, 1), rgba(26, 67, 244, 
1));
+    background: -o-linear-gradient(rgba(81, 113, 235, 1), rgba(26, 67, 244, 
1));
+    background: -webkit-linear-gradient(rgba(81, 113, 235, 1), rgba(26, 67, 
244, 1));
+    background: linear-gradient(rgba(81, 113, 235, 1), rgba(26, 67, 244, 1));
+    border-bottom-color: #0d36e7;
+    border-top-color: #4767ea;
+    color: #fff;
+}
+
+.yui3-skin-sam .yui3-menu-disabled > a.yui3-menu-label {
+    background-image: none;
+    border-color: transparent;
+    cursor: default;
+}
+
+.yui3-skin-sam .yui3-menu-disabled > a.yui3-menu-label,
+.yui3-skin-sam .yui3-menu-can-have-children.yui3-menu-disabled > 
.yui3-menu-label:after {
+    color: #bfbfbf;
+}
+
+.yui3-skin-sam .yui3-menu-heading .yui3-menu-label {
+    color: #888;
+    text-transform: uppercase;
+}

Added: 
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/assets/skins/sam/gallery-sm-menu.css
===================================================================
--- 
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/assets/skins/sam/gallery-sm-menu.css
                               (rev 0)
+++ 
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/assets/skins/sam/gallery-sm-menu.css
       2014-10-28 12:32:33 UTC (rev 12245)
@@ -0,0 +1 @@
+.yui3-menu,.yui3-menu-children{left:-10000px;position:absolute;top:-10000px;visibility:hidden}.yui3-menu.yui3-menu-open{left:auto;top:auto;visibility:visible;z-index:2}.yui3-menu-children{left:-10000px;list-style:none;margin:0;padding:0;top:-10000px;z-index:1}.yui3-menu>.yui3-menu-children{position:relative}.yui3-menu-open>.yui3-menu-children{left:0;top:0;visibility:visible}.yui3-menu-item{position:relative}.yui3-menu-label{display:block;color:inherit;line-height:1.5;padding:0
 
20px;text-decoration:none;white-space:nowrap}a.yui3-menu-label{padding-right:30px}.yui3-menu-can-have-children>.yui3-menu-label:after{content:'\25B8';float:right;font-family:'Lucida
 Grande','Lucida Sans Unicode','DejaVu 
Sans',sans-serif;margin-right:-20px;margin-top:-1px}.yui3-menu-separator{background-color:#dfdfdf;display:block;height:1px;font-size:0;margin:7px
 2px;overflow:hidden}.yui3-menu-hidden{display:none}.yui3-skin-sam 
.yui3-menu-children{background:#fff;border:1px solid 
#b7b7b7;border-radius:3px;box-shadow:0 3px 6px #afafaf;padding:5px 
0}.yui3-skin-sam .yui3-menu-label{border:1px solid 
transparent;border-left:none;border-right:0}.yui3-skin-sam 
.yui3-menu-label,.yui3-skin-sam 
.yui3-menu-can-have-children>.yui3-menu-label:after{color:#333}.yui3-skin-sam 
.yui3-menu-can-have-children>.yui3-menu-label:hover:after{color:#fff}.yui3-skin-sam
 
a.yui3-menu-label:hover{background:#5171eb;background:-moz-linear-gradient(rgba(81,113,235,1),rgba(26,67,244,1));background:-ms-linear-gradient(rgba(81,113,235,1),rgba(26,67,244,1));background:-o-linear-gradient(rgba(81,113,235,1),rgba(26,67,244,1));background:-webkit-linear-gradient(rgba(81,113,235,1),rgba(26,67,244,1));background:linear-gradient(rgba(81,113,235,1),rgba(26,67,244,1));border-bottom-color:#0d36e7;border-top-color:#4767ea;color:#fff}.yui3-skin-sam
 
.yui3-menu-disabled>a.yui3-menu-label{background-image:none;border-color:transparent;cursor:default}.yui3-skin-sam
 .yui3-menu-disabled>a.yui3-menu-label,.yui3-skin-sam 
.yui3-menu-can-have-children.yui3-menu-disabled>.yui3-menu-label:after{color:#bfbfbf}.yui3-skin-sam
 .yui3-menu-heading 
.yui3-menu-label{color:#888;text-transform:uppercase}#yui3-css-stamp.skin-sam-gallery-sm-menu{display:none}

Added: 
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/gallery-sm-menu-coverage.js
===================================================================
--- 
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/gallery-sm-menu-coverage.js
                                (rev 0)
+++ 
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/gallery-sm-menu-coverage.js
        2014-10-28 12:32:33 UTC (rev 12245)
@@ -0,0 +1,6 @@
+if (typeof __coverage__ === 'undefined') { __coverage__ = {}; }
+if (!__coverage__['build/gallery-sm-menu/gallery-sm-menu.js']) {
+   __coverage__['build/gallery-sm-menu/gallery-sm-menu.js'] = 
{"path":"build/gallery-sm-menu/gallery-sm-menu.js","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0},"b":{"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0,0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0],"83":[0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0],"91":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0},"fnMap":{"1":{"name":"(anonymous_1)","line":1,"loc":{"start":{"line":1,"column":27},"end":{"line":1,"column":46}}},"2":{"name":"(anonymous_2)","line":90,"loc":{"start":{"line":90,"column":17},"end":{"line":90,"column":35}}},"3":{"name":"(anonymous_3)","line":105,"loc":{"start":{"line":105,"column":16},"end":{"line":105,"column":28}}},"4":{"name":"(anonymous_4)","line":111,"loc":{"start":{"line":111,"column":38},"end":{"line":111,"column":57}}},"5":{"name":"(anonymous_5)","line":129,"loc":{"start":{"line":129,"column":17},"end":{"line":129,"column":33}}},"6":{"name":"(anonymous_6)","line":143,"loc":{"start":{"line":143,"column":10},"end":{"line":143,"column":22}}},"7":{"name":"(anonymous_7)","line":168,"loc":{"start":{"line":168,"column":15},"end":{"line":168,"column":37}}},"8":{"name":"(anonymous_8)","line":176,"loc":{"start":{"line":176,"column":38},"end":{"line":176,"column":58}}},"9":{"name":"(anonymous_9)","line":240,"loc":{"start":{"line":240,"column":12},"end":{"line":240,"column":24}}},"10":{"name":"(anonymous_10)","line":281,"loc":{"start":{"line":281,"column":20},"end":{"line":281,"column":49}}},"11":{"name":"(anonymous_11)","line":332,"loc":{"start":{"line":332,"column":16},"end":{"line":332,"column":41}}},"12":{"name":"(anonymous_12)","line":417,"loc":{"start":{"line":417,"column":16},"end":{"line":417,"column":39}}},"13":{"name":"(anonymous_13)","line":458,"loc":{"start":{"line":458,"column":10},"end":{"line":458,"column":29}}},"14":{"name":"(anonymous_14)","line":483,"loc":{"start":{"line":483,"column":19},"end":{"line":483,"column":38}}},"15":{"name":"(anonymous_15)","line":495,"loc":{"start":{"line":495,"column":23},"end":{"line":495,"column":35}}},"16":{"name":"(anonymous_16)","line":531,"loc":{"start":{"line":531,"column":23},"end":{"line":531,"column":35}}},"17":{"name":"(anonymous_17)","line":545,"loc":{"start":{"line":545,"column":24},"end":{"line":545,"column":36}}},"18":{"name":"(anonymous_18)","line":548,"loc":{"start":{"line":548,"column":15},"end":{"line":548,"column":31}}},"19":{"name":"(anonymous_19)","line":583,"loc":{"start":{"line":583,"column":22},"end":{"line":583,"column":66}}},"20":{"name":"(anonymous_20)","line":586,"loc":{"start":{"line":586,"column":54},"end":{"line":586,"column":87}}},"21":{"name":"(anonymous_21)","line":606,"loc":{"start":{"line":606,"column":29},"end":{"line":606,"column":90}}},"22":{"name":"(anonymous_22)","line":634,"loc":{"start":{"line":634,"column":21},"end":{"line":634,"column":37}}},"23":{"name":"(anonymous_23)","line":658,"loc":{"start":{"line":658,"column":15},"end":{"line":658,"column":41}}},"24":{"name":"(anonymous_24)","line":681,"loc":{"start":{"line":681,"column":15},"end":{"line":681,"column":39}}},"25":{"name":"(anonymous_25)","line":712,"loc":{"start":{"line":712,"column":19},"end":{"line":712,"column":45}}},"26":{"name":"(anonymous_26)","line":753,"loc":{"start":{"line":753,"column":15},"end":{"line":753,"column":28}}},"27":{"name":"(anonymous_27)","line":793,"loc":{"start":{"line":793,"column":17},"end":{"line":793,"column":29}}},"28":{"name":"(anonymous_28)","line":815,"loc":{"start":{"line":815,"column":24},"end":{"line":815,"column":37}}},"29":{"name":"(anonymous_29)","line":836,"loc":{"start":{"line":836,"column":17},"end":{"line":836,"column":30}}},"30":{"name":"(anonymous_30)","line":861,"loc":{"start":{"line":861,"column":19},"end":{"line":861,"column":32}}},"31":{"name":"(anonymous_31)","line":876,"loc":{"start":{"line":876,"column":18},"end":{"line":876,"column":31}}},"32":{"name":"(anonymous_32)","line":891,"loc":{"start":{"line":891,"column":16},"end":{"line":891,"column":29}}},"33":{"name":"(anonymous_33)","line":907,"loc":{"start":{"line":907,"column":16},"end":{"line":907,"column":29}}},"34":{"name":"(anonymous_34)","line":946,"loc":{"start":{"line":946,"column":29},"end":{"line":946,"column":42}}},"35":{"name":"(anonymous_35)","line":962,"loc":{"start":{"line":962,"column":18},"end":{"line":962,"column":31}}},"36":{"name":"(anonymous_36)","line":984,"loc":{"start":{"line":984,"column":16},"end":{"line":984,"column":29}}},"37":{"name":"(anonymous_37)","line":1000,"loc":{"start":{"line":1000,"column":25},"end":{"line":1000,"column":38}}},"38":{"name":"(anonymous_38)","line":1020,"loc":{"start":{"line":1020,"column":18},"end":{"line":1020,"column":31}}},"39":{"name":"(anonymous_39)","line":1060,"loc":{"start":{"line":1060,"column":23},"end":{"line":1060,"column":36}}},"40":{"name":"(anonymous_40)","line":1069,"loc":{"start":{"line":1069,"column":41},"end":{"line":1069,"column":53}}},"41":{"name":"(anonymous_41)","line":1081,"loc":{"start":{"line":1081,"column":23},"end":{"line":1081,"column":36}}},"42":{"name":"(anonymous_42)","line":1090,"loc":{"start":{"line":1090,"column":41},"end":{"line":1090,"column":53}}},"43":{"name":"(anonymous_43)","line":1102,"loc":{"start":{"line":1102,"column":23},"end":{"line":1102,"column":35}}},"44":{"name":"(anonymous_44)","line":1113,"loc":{"start":{"line":1113,"column":23},"end":{"line":1113,"column":35}}},"45":{"name":"(anonymous_45)","line":1118,"loc":{"start":{"line":1118,"column":41},"end":{"line":1118,"column":53}}},"46":{"name":"(anonymous_46)","line":1136,"loc":{"start":{"line":1136,"column":21},"end":{"line":1136,"column":34}}},"47":{"name":"(anonymous_47)","line":1157,"loc":{"start":{"line":1157,"column":29},"end":{"line":1157,"column":42}}},"48":{"name":"(anonymous_48)","line":1194,"loc":{"start":{"line":1194,"column":21},"end":{"line":1194,"column":33}}},"49":{"name":"(anonymous_49)","line":1250,"loc":{"start":{"line":1250,"column":21},"end":{"line":1250,"column":33}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1282,"column":3}},"2":{"start":{"line":26,"column":0},"end":{"line":27,"column":51}},"3":{"start":{"line":40,"column":0},"end":{"line":40,"column":33}},"4":{"start":{"line":42,"column":0},"end":{"line":1266,"column":3}},"5":{"start":{"line":91,"column":8},"end":{"line":91,"column":29}},"6":{"start":{"line":92,"column":8},"end":{"line":92,"column":29}},"7":{"start":{"line":93,"column":8},"end":{"line":93,"column":29}},"8":{"start":{"line":95,"column":8},"end":{"line":100,"column":9}},"9":{"start":{"line":96,"column":12},"end":{"line":97,"column":51}},"10":{"start":{"line":99,"column":12},"end":{"line":99,"column":50}},"11":{"start":{"line":102,"column":8},"end":{"line":102,"column":33}},"12":{"start":{"line":106,"column":8},"end":{"line":106,"column":33}},"13":{"start":{"line":108,"column":8},"end":{"line":108,"column":31}},"14":{"start":{"line":109,"column":8},"end":{"line":109,"column":31}},"15":{"start":{"line":111,"column":8},"end":{"line":113,"column":17}},"16":{"start":{"line":112,"column":12},"end":{"line":112,"column":34}},"17":{"start":{"line":115,"column":8},"end":{"line":115,"column":30}},"18":{"start":{"line":130,"column":8},"end":{"line":132,"column":9}},"19":{"start":{"line":131,"column":12},"end":{"line":131,"column":70}},"20":{"start":{"line":134,"column":8},"end":{"line":134,"column":30}},"21":{"start":{"line":144,"column":8},"end":{"line":144,"column":35}},"22":{"start":{"line":145,"column":8},"end":{"line":145,"column":20}},"23":{"start":{"line":169,"column":8},"end":{"line":169,"column":39}},"24":{"start":{"line":171,"column":8},"end":{"line":174,"column":30}},"25":{"start":{"line":176,"column":8},"end":{"line":226,"column":11}},"26":{"start":{"line":177,"column":12},"end":{"line":180,"column":56}},"27":{"start":{"line":182,"column":12},"end":{"line":186,"column":13}},"28":{"start":{"line":183,"column":16},"end":{"line":183,"column":38}},"29":{"start":{"line":184,"column":19},"end":{"line":186,"column":13}},"30":{"start":{"line":185,"column":16},"end":{"line":185,"column":40}},"31":{"start":{"line":188,"column":12},"end":{"line":191,"column":13}},"32":{"start":{"line":189,"column":16},"end":{"line":189,"column":48}},"33":{"start":{"line":190,"column":16},"end":{"line":190,"column":43}},"34":{"start":{"line":193,"column":12},"end":{"line":196,"column":13}},"35":{"start":{"line":194,"column":16},"end":{"line":194,"column":48}},"36":{"start":{"line":195,"column":16},"end":{"line":195,"column":41}},"37":{"start":{"line":198,"column":12},"end":{"line":219,"column":13}},"38":{"start":{"line":199,"column":16},"end":{"line":199,"column":58}},"39":{"start":{"line":201,"column":16},"end":{"line":201,"column":49}},"40":{"start":{"line":203,"column":16},"end":{"line":205,"column":17}},"41":{"start":{"line":204,"column":20},"end":{"line":204,"column":36}},"42":{"start":{"line":209,"column":16},"end":{"line":209,"column":28}},"43":{"start":{"line":211,"column":16},"end":{"line":218,"column":17}},"44":{"start":{"line":212,"column":20},"end":{"line":212,"column":51}},"45":{"start":{"line":214,"column":20},"end":{"line":217,"column":21}},"46":{"start":{"line":215,"column":24},"end":{"line":215,"column":70}},"47":{"start":{"line":216,"column":24},"end":{"line":216,"column":30}},"48":{"start":{"line":221,"column":12},"end":{"line":223,"column":13}},"49":{"start":{"line":222,"column":16},"end":{"line":222,"column":60}},"50":{"start":{"line":225,"column":12},"end":{"line":225,"column":29}},"51":{"start":{"line":228,"column":8},"end":{"line":228,"column":21}},"52":{"start":{"line":241,"column":8},"end":{"line":242,"column":47}},"53":{"start":{"line":244,"column":8},"end":{"line":244,"column":44}},"54":{"start":{"line":245,"column":8},"end":{"line":245,"column":64}},"55":{"start":{"line":248,"column":8},"end":{"line":252,"column":9}},"56":{"start":{"line":249,"column":12},"end":{"line":249,"column":49}},"57":{"start":{"line":251,"column":12},"end":{"line":251,"column":51}},"58":{"start":{"line":254,"column":8},"end":{"line":256,"column":11}},"59":{"start":{"line":258,"column":8},"end":{"line":260,"column":9}},"60":{"start":{"line":259,"column":12},"end":{"line":259,"column":44}},"61":{"start":{"line":262,"column":8},"end":{"line":262,"column":29}},"62":{"start":{"line":264,"column":8},"end":{"line":264,"column":20}},"63":{"start":{"line":282,"column":8},"end":{"line":282,"column":34}},"64":{"start":{"line":284,"column":8},"end":{"line":285,"column":86}},"65":{"start":{"line":287,"column":8},"end":{"line":293,"column":9}},"66":{"start":{"line":288,"column":12},"end":{"line":292,"column":16}},"67":{"start":{"line":295,"column":8},"end":{"line":298,"column":9}},"68":{"start":{"line":296,"column":12},"end":{"line":296,"column":44}},"69":{"start":{"line":297,"column":12},"end":{"line":297,"column":45}},"70":{"start":{"line":300,"column":8},"end":{"line":302,"column":9}},"71":{"start":{"line":301,"column":12},"end":{"line":301,"column":65}},"72":{"start":{"line":304,"column":8},"end":{"line":309,"column":9}},"73":{"start":{"line":305,"column":12},"end":{"line":308,"column":15}},"74":{"start":{"line":311,"column":8},"end":{"line":313,"column":9}},"75":{"start":{"line":312,"column":12},"end":{"line":312,"column":43}},"76":{"start":{"line":315,"column":8},"end":{"line":315,"column":28}},"77":{"start":{"line":333,"column":8},"end":{"line":333,"column":34}},"78":{"start":{"line":335,"column":8},"end":{"line":337,"column":41}},"79":{"start":{"line":340,"column":8},"end":{"line":346,"column":9}},"80":{"start":{"line":341,"column":12},"end":{"line":345,"column":16}},"81":{"start":{"line":349,"column":8},"end":{"line":349,"column":46}},"82":{"start":{"line":350,"column":8},"end":{"line":350,"column":58}},"83":{"start":{"line":352,"column":8},"end":{"line":394,"column":9}},"84":{"start":{"line":354,"column":12},"end":{"line":354,"column":46}},"85":{"start":{"line":355,"column":12},"end":{"line":355,"column":18}},"86":{"start":{"line":359,"column":12},"end":{"line":360,"column":48}},"87":{"start":{"line":362,"column":12},"end":{"line":362,"column":42}},"88":{"start":{"line":364,"column":12},"end":{"line":367,"column":13}},"89":{"start":{"line":365,"column":16},"end":{"line":365,"column":35}},"90":{"start":{"line":366,"column":16},"end":{"line":366,"column":45}},"91":{"start":{"line":369,"column":12},"end":{"line":369,"column":53}},"92":{"start":{"line":371,"column":12},"end":{"line":392,"column":13}},"93":{"start":{"line":372,"column":16},"end":{"line":372,"column":48}},"94":{"start":{"line":374,"column":16},"end":{"line":374,"column":49}},"95":{"start":{"line":376,"column":16},"end":{"line":376,"column":77}},"96":{"start":{"line":378,"column":16},"end":{"line":391,"column":17}},"97":{"start":{"line":379,"column":20},"end":{"line":379,"column":66}},"98":{"start":{"line":380,"column":20},"end":{"line":380,"column":73}},"99":{"start":{"line":382,"column":20},"end":{"line":390,"column":21}},"100":{"start":{"line":383,"column":24},"end":{"line":383,"column":66}},"101":{"start":{"line":385,"column":24},"end":{"line":389,"column":25}},"102":{"start":{"line":386,"column":28},"end":{"line":388,"column":31}},"103":{"start":{"line":393,"column":12},"end":{"line":393,"column":18}},"104":{"start":{"line":396,"column":8},"end":{"line":398,"column":9}},"105":{"start":{"line":397,"column":12},"end":{"line":397,"column":47}},"106":{"start":{"line":400,"column":8},"end":{"line":400,"column":24}},"107":{"start":{"line":418,"column":8},"end":{"line":419,"column":37}},"108":{"start":{"line":421,"column":8},"end":{"line":432,"column":9}},"109":{"start":{"line":422,"column":12},"end":{"line":427,"column":14}},"110":{"start":{"line":428,"column":15},"end":{"line":432,"column":9}},"111":{"start":{"line":429,"column":12},"end":{"line":429,"column":53}},"112":{"start":{"line":431,"column":12},"end":{"line":431,"column":39}},"113":{"start":{"line":434,"column":8},"end":{"line":438,"column":20}},"114":{"start":{"line":440,"column":8},"end":{"line":440,"column":59}},"115":{"start":{"line":442,"column":8},"end":{"line":442,"column":20}},"116":{"start":{"line":459,"column":8},"end":{"line":461,"column":9}},"117":{"start":{"line":460,"column":12},"end":{"line":460,"column":26}},"118":{"start":{"line":463,"column":8},"end":{"line":465,"column":9}},"119":{"start":{"line":464,"column":12},"end":{"line":464,"column":49}},"120":{"start":{"line":467,"column":8},"end":{"line":467,"column":34}},"121":{"start":{"line":468,"column":8},"end":{"line":468,"column":20}},"122":{"start":{"line":484,"column":8},"end":{"line":484,"column":68}},"123":{"start":{"line":496,"column":8},"end":{"line":496,"column":52}},"124":{"start":{"line":498,"column":8},"end":{"line":499,"column":47}},"125":{"start":{"line":501,"column":8},"end":{"line":522,"column":10}},"126":{"start":{"line":532,"column":8},"end":{"line":532,"column":55}},"127":{"start":{"line":546,"column":8},"end":{"line":546,"column":46}},"128":{"start":{"line":548,"column":8},"end":{"line":550,"column":10}},"129":{"start":{"line":549,"column":12},"end":{"line":549,"column":38}},"130":{"start":{"line":584,"column":8},"end":{"line":584,"column":24}},"131":{"start":{"line":586,"column":8},"end":{"line":596,"column":11}},"132":{"start":{"line":587,"column":12},"end":{"line":592,"column":18}},"133":{"start":{"line":594,"column":12},"end":{"line":594,"column":58}},"134":{"start":{"line":595,"column":12},"end":{"line":595,"column":58}},"135":{"start":{"line":598,"column":8},"end":{"line":598,"column":79}},"136":{"start":{"line":599,"column":8},"end":{"line":599,"column":78}},"137":{"start":{"line":600,"column":8},"end":{"line":600,"column":78}},"138":{"start":{"line":601,"column":8},"end":{"line":601,"column":79}},"139":{"start":{"line":603,"column":8},"end":{"line":603,"column":22}},"140":{"start":{"line":607,"column":8},"end":{"line":607,"column":70}},"141":{"start":{"line":612,"column":8},"end":{"line":613,"column":34}},"142":{"start":{"line":615,"column":8},"end":{"line":630,"column":9}},"143":{"start":{"line":616,"column":12},"end":{"line":616,"column":30}},"144":{"start":{"line":619,"column":12},"end":{"line":621,"column":13}},"145":{"start":{"line":620,"column":16},"end":{"line":620,"column":36}},"146":{"start":{"line":623,"column":12},"end":{"line":623,"column":76}},"147":{"start":{"line":625,"column":12},"end":{"line":629,"column":15}},"148":{"start":{"line":634,"column":8},"end":{"line":644,"column":11}},"149":{"start":{"line":635,"column":12},"end":{"line":643,"column":13}},"150":{"start":{"line":636,"column":16},"end":{"line":636,"column":25}},"151":{"start":{"line":637,"column":19},"end":{"line":643,"column":13}},"152":{"start":{"line":638,"column":16},"end":{"line":638,"column":26}},"153":{"start":{"line":639,"column":19},"end":{"line":643,"column":13}},"154":{"start":{"line":640,"column":16},"end":{"line":640,"column":25}},"155":{"start":{"line":642,"column":16},"end":{"line":642,"column":41}},"156":{"start":{"line":647,"column":8},"end":{"line":647,"column":23}},"157":{"start":{"line":659,"column":8},"end":{"line":659,"column":56}},"158":{"start":{"line":661,"column":8},"end":{"line":661,"column":72}},"159":{"start":{"line":663,"column":8},"end":{"line":663,"column":45}},"160":{"start":{"line":664,"column":8},"end":{"line":664,"column":36}},"161":{"start":{"line":682,"column":8},"end":{"line":689,"column":9}},"162":{"start":{"line":688,"column":12},"end":{"line":688,"column":24}},"163":{"start":{"line":694,"column":8},"end":{"line":699,"column":10}},"164":{"start":{"line":713,"column":8},"end":{"line":713,"column":56}},"165":{"start":{"line":715,"column":8},"end":{"line":717,"column":32}},"166":{"start":{"line":721,"column":8},"end":{"line":728,"column":9}},"167":{"start":{"line":722,"column":12},"end":{"line":722,"column":48}},"168":{"start":{"line":726,"column":12},"end":{"line":727,"column":46}},"169":{"start":{"line":730,"column":8},"end":{"line":731,"column":64}},"170":{"start":{"line":733,"column":8},"end":{"line":737,"column":9}},"171":{"start":{"line":736,"column":12},"end":{"line":736,"column":44}},"172":{"start":{"line":740,"column":8},"end":{"line":740,"column":45}},"173":{"start":{"line":741,"column":8},"end":{"line":741,"column":66}},"174":{"start":{"line":755,"column":8},"end":{"line":757,"column":9}},"175":{"start":{"line":756,"column":12},"end":{"line":756,"column":19}},"176":{"start":{"line":759,"column":8},"end":{"line":761,"column":21}},"177":{"start":{"line":763,"column":8},"end":{"line":780,"column":9}},"178":{"start":{"line":764,"column":12},"end":{"line":764,"column":50}},"179":{"start":{"line":766,"column":12},"end":{"line":766,"column":48}},"180":{"start":{"line":767,"column":12},"end":{"line":767,"column":88}},"181":{"start":{"line":769,"column":12},"end":{"line":779,"column":13}},"182":{"start":{"line":772,"column":16},"end":{"line":772,"column":65}},"183":{"start":{"line":774,"column":16},"end":{"line":776,"column":19}},"184":{"start":{"line":778,"column":16},"end":{"line":778,"column":23}},"185":{"start":{"line":782,"column":8},"end":{"line":784,"column":21}},"186":{"start":{"line":794,"column":8},"end":{"line":794,"column":29}},"187":{"start":{"line":797,"column":8},"end":{"line":799,"column":9}},"188":{"start":{"line":798,"column":12},"end":{"line":798,"column":19}},"189":{"start":{"line":801,"column":8},"end":{"line":801,"column":34}},"190":{"start":{"line":802,"column":8},"end":{"line":802,"column":30}},"191":{"start":{"line":804,"column":8},"end":{"line":804,"column":38}},"192":{"start":{"line":805,"column":8},"end":{"line":805,"column":22}},"193":{"start":{"line":816,"column":8},"end":{"line":818,"column":9}},"194":{"start":{"line":817,"column":12},"end":{"line":817,"column":19}},"195":{"start":{"line":820,"column":8},"end":{"line":826,"column":9}},"196":{"start":{"line":821,"column":12},"end":{"line":821,"column":33}},"197":{"start":{"line":823,"column":12},"end":{"line":825,"column":13}},"198":{"start":{"line":824,"column":16},"end":{"line":824,"column":28}},"199":{"start":{"line":837,"column":8},"end":{"line":838,"column":46}},"200":{"start":{"line":841,"column":8},"end":{"line":843,"column":9}},"201":{"start":{"line":842,"column":12},"end":{"line":842,"column":37}},"202":{"start":{"line":845,"column":8},"end":{"line":845,"column":21}},"203":{"start":{"line":846,"column":8},"end":{"line":846,"column":40}},"204":{"start":{"line":848,"column":8},"end":{"line":851,"column":9}},"205":{"start":{"line":849,"column":12},"end":{"line":849,"column":43}},"206":{"start":{"line":850,"column":12},"end":{"line":850,"column":55}},"207":{"start":{"line":862,"column":8},"end":{"line":862,"column":48}},"208":{"start":{"line":864,"column":8},"end":{"line":866,"column":9}},"209":{"start":{"line":865,"column":12},"end":{"line":865,"column":56}},"210":{"start":{"line":877,"column":8},"end":{"line":877,"column":48}},"211":{"start":{"line":879,"column":8},"end":{"line":881,"column":9}},"212":{"start":{"line":880,"column":12},"end":{"line":880,"column":59}},"213":{"start":{"line":892,"column":8},"end":{"line":892,"column":48}},"214":{"start":{"line":894,"column":8},"end":{"line":897,"column":9}},"215":{"start":{"line":895,"column":12},"end":{"line":895,"column":54}},"216":{"start":{"line":896,"column":12},"end":{"line":896,"column":46}},"217":{"start":{"line":908,"column":8},"end":{"line":911,"column":18}},"218":{"start":{"line":913,"column":8},"end":{"line":929,"column":9}},"219":{"start":{"line":917,"column":12},"end":{"line":928,"column":13}},"220":{"start":{"line":918,"column":16},"end":{"line":924,"column":17}},"221":{"start":{"line":919,"column":20},"end":{"line":919,"column":47}},"222":{"start":{"line":921,"column":20},"end":{"line":923,"column":21}},"223":{"start":{"line":922,"column":24},"end":{"line":922,"column":38}},"224":{"start":{"line":927,"column":16},"end":{"line":927,"column":30}},"225":{"start":{"line":931,"column":8},"end":{"line":931,"column":40}},"226":{"start":{"line":933,"column":8},"end":{"line":936,"column":9}},"227":{"start":{"line":934,"column":12},"end":{"line":934,"column":47}},"228":{"start":{"line":935,"column":12},"end":{"line":935,"column":52}},"229":{"start":{"line":947,"column":8},"end":{"line":952,"column":9}},"230":{"start":{"line":948,"column":12},"end":{"line":951,"column":53}},"231":{"start":{"line":963,"column":8},"end":{"line":963,"column":42}},"232":{"start":{"line":965,"column":8},"end":{"line":967,"column":9}},"233":{"start":{"line":966,"column":12},"end":{"line":966,"column":19}},"234":{"start":{"line":969,"column":8},"end":{"line":969,"column":48}},"235":{"start":{"line":971,"column":8},"end":{"line":974,"column":9}},"236":{"start":{"line":972,"column":12},"end":{"line":972,"column":34}},"237":{"start":{"line":973,"column":12},"end":{"line":973,"column":36}},"238":{"start":{"line":985,"column":8},"end":{"line":985,"column":48}},"239":{"start":{"line":987,"column":8},"end":{"line":990,"column":9}},"240":{"start":{"line":988,"column":12},"end":{"line":988,"column":57}},"241":{"start":{"line":989,"column":12},"end":{"line":989,"column":47}},"242":{"start":{"line":1001,"column":8},"end":{"line":1001,"column":46}},"243":{"start":{"line":1003,"column":8},"end":{"line":1003,"column":62}},"244":{"start":{"line":1008,"column":8},"end":{"line":1010,"column":9}},"245":{"start":{"line":1009,"column":12},"end":{"line":1009,"column":47}},"246":{"start":{"line":1021,"column":8},"end":{"line":1023,"column":62}},"247":{"start":{"line":1027,"column":8},"end":{"line":1029,"column":9}},"248":{"start":{"line":1028,"column":12},"end":{"line":1028,"column":31}},"249":{"start":{"line":1031,"column":8},"end":{"line":1033,"column":9}},"250":{"start":{"line":1032,"column":12},"end":{"line":1032,"column":19}},"251":{"start":{"line":1035,"column":8},"end":{"line":1039,"column":9}},"252":{"start":{"line":1036,"column":12},"end":{"line":1038,"column":15}},"253":{"start":{"line":1041,"column":8},"end":{"line":1045,"column":9}},"254":{"start":{"line":1042,"column":12},"end":{"line":1044,"column":15}},"255":{"start":{"line":1047,"column":8},"end":{"line":1050,"column":11}},"256":{"start":{"line":1061,"column":8},"end":{"line":1061,"column":63}},"257":{"start":{"line":1063,"column":8},"end":{"line":1063,"column":42}},"258":{"start":{"line":1065,"column":8},"end":{"line":1067,"column":9}},"259":{"start":{"line":1066,"column":12},"end":{"line":1066,"column":19}},"260":{"start":{"line":1069,"column":8},"end":{"line":1071,"column":16}},"261":{"start":{"line":1070,"column":12},"end":{"line":1070,"column":24}},"262":{"start":{"line":1082,"column":8},"end":{"line":1082,"column":63}},"263":{"start":{"line":1084,"column":8},"end":{"line":1084,"column":42}},"264":{"start":{"line":1086,"column":8},"end":{"line":1088,"column":9}},"265":{"start":{"line":1087,"column":12},"end":{"line":1087,"column":19}},"266":{"start":{"line":1090,"column":8},"end":{"line":1092,"column":16}},"267":{"start":{"line":1091,"column":12},"end":{"line":1091,"column":25}},"268":{"start":{"line":1103,"column":8},"end":{"line":1103,"column":42}},"269":{"start":{"line":1114,"column":8},"end":{"line":1114,"column":24}},"270":{"start":{"line":1116,"column":8},"end":{"line":1116,"column":42}},"271":{"start":{"line":1118,"column":8},"end":{"line":1124,"column":16}},"272":{"start":{"line":1119,"column":12},"end":{"line":1119,"column":33}},"273":{"start":{"line":1121,"column":12},"end":{"line":1123,"column":13}},"274":{"start":{"line":1122,"column":16},"end":{"line":1122,"column":28}},"275":{"start":{"line":1137,"column":8},"end":{"line":1137,"column":26}},"276":{"start":{"line":1139,"column":8},"end":{"line":1147,"column":9}},"277":{"start":{"line":1140,"column":12},"end":{"line":1140,"column":46}},"278":{"start":{"line":1141,"column":12},"end":{"line":1141,"column":46}},"279":{"start":{"line":1143,"column":12},"end":{"line":1143,"column":32}},"280":{"start":{"line":1144,"column":15},"end":{"line":1147,"column":9}},"281":{"start":{"line":1145,"column":12},"end":{"line":1145,"column":33}},"282":{"start":{"line":1146,"column":12},"end":{"line":1146,"column":24}},"283":{"start":{"line":1158,"column":8},"end":{"line":1161,"column":11}},"284":{"start":{"line":1195,"column":16},"end":{"line":1195,"column":60}},"285":{"start":{"line":1251,"column":16},"end":{"line":1251,"column":60}},"286":{"start":{"line":1268,"column":0},"end":{"line":1268,"column":29}}},"branchMap":{"1":{"line":95,"type":"if","locations":[{"start":{"line":95,"column":8},"end":{"line":95,"column":8}},{"start":{"line":95,"column":8},"end":{"line":95,"column":8}}]},"2":{"line":95,"type":"binary-expr","locations":[{"start":{"line":95,"column":12},"end":{"line":95,"column":18}},{"start":{"line":95,"column":22},"end":{"line":95,"column":39}}]},"3":{"line":96,"type":"binary-expr","locations":[{"start":{"line":96,"column":28},"end":{"line":96,"column":40}},{"start":{"line":96,"column":44},"end":{"line":96,"column":46}}]},"4":{"line":130,"type":"if","locations":[{"start":{"line":130,"column":8},"end":{"line":130,"column":8}},{"start":{"line":130,"column":8},"end":{"line":130,"column":8}}]},"5":{"line":182,"type":"if","locations":[{"start":{"line":182,"column":12},"end":{"line":182,"column":12}},{"start":{"line":182,"column":12},"end":{"line":182,"column":12}}]},"6":{"line":184,"type":"if","locations":[{"start":{"line":184,"column":19},"end":{"line":184,"column":19}},{"start":{"line":184,"column":19},"end":{"line":184,"column":19}}]},"7":{"line":188,"type":"if","locations":[{"start":{"line":188,"column":12},"end":{"line":188,"column":12}},{"start":{"line":188,"column":12},"end":{"line":188,"column":12}}]},"8":{"line":189,"type":"binary-expr","locations":[{"start":{"line":189,"column":16},"end":{"line":189,"column":26}},{"start":{"line":189,"column":31},"end":{"line":189,"column":46}}]},"9":{"line":193,"type":"if","locations":[{"start":{"line":193,"column":12},"end":{"line":193,"column":12}},{"start":{"line":193,"column":12},"end":{"line":193,"column":12}}]},"10":{"line":194,"type":"binary-expr","locations":[{"start":{"line":194,"column":16},"end":{"line":194,"column":26}},{"start":{"line":194,"column":31},"end":{"line":194,"column":46}}]},"11":{"line":198,"type":"if","locations":[{"start":{"line":198,"column":12},"end":{"line":198,"column":12}},{"start":{"line":198,"column":12},"end":{"line":198,"column":12}}]},"12":{"line":203,"type":"if","locations":[{"start":{"line":203,"column":16},"end":{"line":203,"column":16}},{"start":{"line":203,"column":16},"end":{"line":203,"column":16}}]},"13":{"line":203,"type":"binary-expr","locations":[{"start":{"line":203,"column":20},"end":{"line":203,"column":24}},{"start":{"line":203,"column":28},"end":{"line":203,"column":40}}]},"14":{"line":214,"type":"if","locations":[{"start":{"line":214,"column":20},"end":{"line":214,"column":20}},{"start":{"line":214,"column":20},"end":{"line":214,"column":20}}]},"15":{"line":221,"type":"if","locations":[{"start":{"line":221,"column":12},"end":{"line":221,"column":12}},{"start":{"line":221,"column":12},"end":{"line":221,"column":12}}]},"16":{"line":248,"type":"if","locations":[{"start":{"line":248,"column":8},"end":{"line":248,"column":8}},{"start":{"line":248,"column":8},"end":{"line":248,"column":8}}]},"17":{"line":258,"type":"if","locations":[{"start":{"line":258,"column":8},"end":{"line":258,"column":8}},{"start":{"line":258,"column":8},"end":{"line":258,"column":8}}]},"18":{"line":282,"type":"binary-expr","locations":[{"start":{"line":282,"column":8},"end":{"line":282,"column":15}},{"start":{"line":282,"column":20},"end":{"line":282,"column":32}}]},"19":{"line":285,"type":"binary-expr","locations":[{"start":{"line":285,"column":27},"end":{"line":285,"column":36}},{"start":{"line":285,"column":40},"end":{"line":285,"column":85}}]},"20":{"line":287,"type":"if","locations":[{"start":{"line":287,"column":8},"end":{"line":287,"column":8}},{"start":{"line":287,"column":8},"end":{"line":287,"column":8}}]},"21":{"line":295,"type":"if","locations":[{"start":{"line":295,"column":8},"end":{"line":295,"column":8}},{"start":{"line":295,"column":8},"end":{"line":295,"column":8}}]},"22":{"line":300,"type":"if","locations":[{"start":{"line":300,"column":8},"end":{"line":300,"column":8}},{"start":{"line":300,"column":8},"end":{"line":300,"column":8}}]},"23":{"line":311,"type":"if","locations":[{"start":{"line":311,"column":8},"end":{"line":311,"column":8}},{"start":{"line":311,"column":8},"end":{"line":311,"column":8}}]},"24":{"line":333,"type":"binary-expr","locations":[{"start":{"line":333,"column":8},"end":{"line":333,"column":15}},{"start":{"line":333,"column":20},"end":{"line":333,"column":32}}]},"25":{"line":340,"type":"if","locations":[{"start":{"line":340,"column":8},"end":{"line":340,"column":8}},{"start":{"line":340,"column":8},"end":{"line":340,"column":8}}]},"26":{"line":352,"type":"switch","locations":[{"start":{"line":353,"column":8},"end":{"line":355,"column":18}},{"start":{"line":357,"column":8},"end":{"line":357,"column":20}},{"start":{"line":358,"column":8},"end":{"line":393,"column":18}}]},"27":{"line":364,"type":"if","locations":[{"start":{"line":364,"column":12},"end":{"line":364,"column":12}},{"start":{"line":364,"column":12},"end":{"line":364,"column":12}}]},"28":{"line":371,"type":"if","locations":[{"start":{"line":371,"column":12},"end":{"line":371,"column":12}},{"start":{"line":371,"column":12},"end":{"line":371,"column":12}}]},"29":{"line":378,"type":"if","locations":[{"start":{"line":378,"column":16},"end":{"line":378,"column":16}},{"start":{"line":378,"column":16},"end":{"line":378,"column":16}}]},"30":{"line":382,"type":"if","locations":[{"start":{"line":382,"column":20},"end":{"line":382,"column":20}},{"start":{"line":382,"column":20},"end":{"line":382,"column":20}}]},"31":{"line":385,"type":"if","locations":[{"start":{"line":385,"column":24},"end":{"line":385,"column":24}},{"start":{"line":385,"column":24},"end":{"line":385,"column":24}}]},"32":{"line":396,"type":"if","locations":[{"start":{"line":396,"column":8},"end":{"line":396,"column":8}},{"start":{"line":396,"column":8},"end":{"line":396,"column":8}}]},"33":{"line":421,"type":"if","locations":[{"start":{"line":421,"column":8},"end":{"line":421,"column":8}},{"start":{"line":421,"column":8},"end":{"line":421,"column":8}}]},"34":{"line":428,"type":"if","locations":[{"start":{"line":428,"column":15},"end":{"line":428,"column":15}},{"start":{"line":428,"column":15},"end":{"line":428,"column":15}}]},"35":{"line":459,"type":"if","locations":[{"start":{"line":459,"column":8},"end":{"line":459,"column":8}},{"start":{"line":459,"column":8},"end":{"line":459,"column":8}}]},"36":{"line":463,"type":"if","locations":[{"start":{"line":463,"column":8},"end":{"line":463,"column":8}},{"start":{"line":463,"column":8},"end":{"line":463,"column":8}}]},"37":{"line":463,"type":"binary-expr","locations":[{"start":{"line":463,"column":12},"end":{"line":463,"column":19}},{"start":{"line":463,"column":23},"end":{"line":463,"column":42}}]},"38":{"line":484,"type":"cond-expr","locations":[{"start":{"line":484,"column":42},"end":{"line":484,"column":48}},{"start":{"line":484,"column":51},"end":{"line":484,"column":57}}]},"39":{"line":496,"type":"binary-expr","locations":[{"start":{"line":496,"column":8},"end":{"line":496,"column":24}},{"start":{"line":496,"column":29},"end":{"line":496,"column":50}}]},"40":{"line":598,"type":"binary-expr","locations":[{"start":{"line":598,"column":8},"end":{"line":598,"column":26}},{"start":{"line":598,"column":31},"end":{"line":598,"column":77}}]},"41":{"line":599,"type":"binary-expr","locations":[{"start":{"line":599,"column":8},"end":{"line":599,"column":24}},{"start":{"line":599,"column":31},"end":{"line":599,"column":76}}]},"42":{"line":600,"type":"binary-expr","locations":[{"start":{"line":600,"column":8},"end":{"line":600,"column":25}},{"start":{"line":600,"column":31},"end":{"line":600,"column":76}}]},"43":{"line":601,"type":"binary-expr","locations":[{"start":{"line":601,"column":8},"end":{"line":601,"column":23}},{"start":{"line":601,"column":31},"end":{"line":601,"column":77}}]},"44":{"line":607,"type":"binary-expr","locations":[{"start":{"line":607,"column":8},"end":{"line":607,"column":23}},{"start":{"line":607,"column":28},"end":{"line":607,"column":68}}]},"45":{"line":619,"type":"if","locations":[{"start":{"line":619,"column":12},"end":{"line":619,"column":12}},{"start":{"line":619,"column":12},"end":{"line":619,"column":12}}]},"46":{"line":635,"type":"if","locations":[{"start":{"line":635,"column":12},"end":{"line":635,"column":12}},{"start":{"line":635,"column":12},"end":{"line":635,"column":12}}]},"47":{"line":637,"type":"if","locations":[{"start":{"line":637,"column":19},"end":{"line":637,"column":19}},{"start":{"line":637,"column":19},"end":{"line":637,"column":19}}]},"48":{"line":639,"type":"if","locations":[{"start":{"line":639,"column":19},"end":{"line":639,"column":19}},{"start":{"line":639,"column":19},"end":{"line":639,"column":19}}]},"49":{"line":659,"type":"binary-expr","locations":[{"start":{"line":659,"column":8},"end":{"line":659,"column":16}},{"start":{"line":659,"column":21},"end":{"line":659,"column":54}}]},"50":{"line":682,"type":"if","locations":[{"start":{"line":682,"column":8},"end":{"line":682,"column":8}},{"start":{"line":682,"column":8},"end":{"line":682,"column":8}}]},"51":{"line":682,"type":"binary-expr","locations":[{"start":{"line":682,"column":12},"end":{"line":682,"column":40}},{"start":{"line":683,"column":19},"end":{"line":683,"column":43}},{"start":{"line":684,"column":19},"end":{"line":684,"column":45}},{"start":{"line":685,"column":19},"end":{"line":685,"column":41}}]},"52":{"line":713,"type":"binary-expr","locations":[{"start":{"line":713,"column":8},"end":{"line":713,"column":16}},{"start":{"line":713,"column":21},"end":{"line":713,"column":54}}]},"53":{"line":721,"type":"if","locations":[{"start":{"line":721,"column":8},"end":{"line":721,"column":8}},{"start":{"line":721,"column":8},"end":{"line":721,"column":8}}]},"54":{"line":721,"type":"binary-expr","locations":[{"start":{"line":721,"column":12},"end":{"line":721,"column":32}},{"start":{"line":721,"column":36},"end":{"line":721,"column":64}}]},"55":{"line":726,"type":"binary-expr","locations":[{"start":{"line":726,"column":26},"end":{"line":726,"column":37}},{"start":{"line":726,"column":41},"end":{"line":726,"column":69}},{"start":{"line":727,"column":16},"end":{"line":727,"column":45}}]},"56":{"line":733,"type":"if","locations":[{"start":{"line":733,"column":8},"end":{"line":733,"column":8}},{"start":{"line":733,"column":8},"end":{"line":733,"column":8}}]},"57":{"line":733,"type":"binary-expr","locations":[{"start":{"line":733,"column":12},"end":{"line":733,"column":38}},{"start":{"line":733,"column":42},"end":{"line":733,"column":63}}]},"58":{"line":755,"type":"if","locations":[{"start":{"line":755,"column":8},"end":{"line":755,"column":8}},{"start":{"line":755,"column":8},"end":{"line":755,"column":8}}]},"59":{"line":763,"type":"if","locations":[{"start":{"line":763,"column":8},"end":{"line":763,"column":8}},{"start":{"line":763,"column":8},"end":{"line":763,"column":8}}]},"60":{"line":767,"type":"binary-expr","locations":[{"start":{"line":767,"column":31},"end":{"line":767,"column":39}},{"start":{"line":767,"column":43},"end":{"line":767,"column":87}}]},"61":{"line":769,"type":"if","locations":[{"start":{"line":769,"column":12},"end":{"line":769,"column":12}},{"start":{"line":769,"column":12},"end":{"line":769,"column":12}}]},"62":{"line":772,"type":"binary-expr","locations":[{"start":{"line":772,"column":16},"end":{"line":772,"column":24}},{"start":{"line":772,"column":29},"end":{"line":772,"column":63}}]},"63":{"line":797,"type":"if","locations":[{"start":{"line":797,"column":8},"end":{"line":797,"column":8}},{"start":{"line":797,"column":8},"end":{"line":797,"column":8}}]},"64":{"line":816,"type":"if","locations":[{"start":{"line":816,"column":8},"end":{"line":816,"column":8}},{"start":{"line":816,"column":8},"end":{"line":816,"column":8}}]},"65":{"line":820,"type":"if","locations":[{"start":{"line":820,"column":8},"end":{"line":820,"column":8}},{"start":{"line":820,"column":8},"end":{"line":820,"column":8}}]},"66":{"line":823,"type":"if","locations":[{"start":{"line":823,"column":12},"end":{"line":823,"column":12}},{"start":{"line":823,"column":12},"end":{"line":823,"column":12}}]},"67":{"line":848,"type":"if","locations":[{"start":{"line":848,"column":8},"end":{"line":848,"column":8}},{"start":{"line":848,"column":8},"end":{"line":848,"column":8}}]},"68":{"line":864,"type":"if","locations":[{"start":{"line":864,"column":8},"end":{"line":864,"column":8}},{"start":{"line":864,"column":8},"end":{"line":864,"column":8}}]},"69":{"line":879,"type":"if","locations":[{"start":{"line":879,"column":8},"end":{"line":879,"column":8}},{"start":{"line":879,"column":8},"end":{"line":879,"column":8}}]},"70":{"line":894,"type":"if","locations":[{"start":{"line":894,"column":8},"end":{"line":894,"column":8}},{"start":{"line":894,"column":8},"end":{"line":894,"column":8}}]},"71":{"line":913,"type":"if","locations":[{"start":{"line":913,"column":8},"end":{"line":913,"column":8}},{"start":{"line":913,"column":8},"end":{"line":913,"column":8}}]},"72":{"line":917,"type":"if","locations":[{"start":{"line":917,"column":12},"end":{"line":917,"column":12}},{"start":{"line":917,"column":12},"end":{"line":917,"column":12}}]},"73":{"line":921,"type":"if","locations":[{"start":{"line":921,"column":20},"end":{"line":921,"column":20}},{"start":{"line":921,"column":20},"end":{"line":921,"column":20}}]},"74":{"line":933,"type":"if","locations":[{"start":{"line":933,"column":8},"end":{"line":933,"column":8}},{"start":{"line":933,"column":8},"end":{"line":933,"column":8}}]},"75":{"line":947,"type":"if","locations":[{"start":{"line":947,"column":8},"end":{"line":947,"column":8}},{"start":{"line":947,"column":8},"end":{"line":947,"column":8}}]},"76":{"line":965,"type":"if","locations":[{"start":{"line":965,"column":8},"end":{"line":965,"column":8}},{"start":{"line":965,"column":8},"end":{"line":965,"column":8}}]},"77":{"line":971,"type":"if","locations":[{"start":{"line":971,"column":8},"end":{"line":971,"column":8}},{"start":{"line":971,"column":8},"end":{"line":971,"column":8}}]},"78":{"line":987,"type":"if","locations":[{"start":{"line":987,"column":8},"end":{"line":987,"column":8}},{"start":{"line":987,"column":8},"end":{"line":987,"column":8}}]},"79":{"line":1008,"type":"if","locations":[{"start":{"line":1008,"column":8},"end":{"line":1008,"column":8}},{"start":{"line":1008,"column":8},"end":{"line":1008,"column":8}}]},"80":{"line":1023,"type":"binary-expr","locations":[{"start":{"line":1023,"column":25},"end":{"line":1023,"column":42}},{"start":{"line":1023,"column":46},"end":{"line":1023,"column":61}}]},"81":{"line":1027,"type":"if","locations":[{"start":{"line":1027,"column":8},"end":{"line":1027,"column":8}},{"start":{"line":1027,"column":8},"end":{"line":1027,"column":8}}]},"82":{"line":1027,"type":"binary-expr","locations":[{"start":{"line":1027,"column":12},"end":{"line":1027,"column":22}},{"start":{"line":1027,"column":26},"end":{"line":1027,"column":42}}]},"83":{"line":1031,"type":"if","locations":[{"start":{"line":1031,"column":8},"end":{"line":1031,"column":8}},{"start":{"line":1031,"column":8},"end":{"line":1031,"column":8}}]},"84":{"line":1035,"type":"if","locations":[{"start":{"line":1035,"column":8},"end":{"line":1035,"column":8}},{"start":{"line":1035,"column":8},"end":{"line":1035,"column":8}}]},"85":{"line":1041,"type":"if","locations":[{"start":{"line":1041,"column":8},"end":{"line":1041,"column":8}},{"start":{"line":1041,"column":8},"end":{"line":1041,"column":8}}]},"86":{"line":1065,"type":"if","locations":[{"start":{"line":1065,"column":8},"end":{"line":1065,"column":8}},{"start":{"line":1065,"column":8},"end":{"line":1065,"column":8}}]},"87":{"line":1065,"type":"binary-expr","locations":[{"start":{"line":1065,"column":12},"end":{"line":1065,"column":25}},{"start":{"line":1065,"column":29},"end":{"line":1065,"column":46}}]},"88":{"line":1086,"type":"if","locations":[{"start":{"line":1086,"column":8},"end":{"line":1086,"column":8}},{"start":{"line":1086,"column":8},"end":{"line":1086,"column":8}}]},"89":{"line":1121,"type":"if","locations":[{"start":{"line":1121,"column":12},"end":{"line":1121,"column":12}},{"start":{"line":1121,"column":12},"end":{"line":1121,"column":12}}]},"90":{"line":1139,"type":"if","locations":[{"start":{"line":1139,"column":8},"end":{"line":1139,"column":8}},{"start":{"line":1139,"column":8},"end":{"line":1139,"column":8}}]},"91":{"line":1144,"type":"if","locations":[{"start":{"line":1144,"column":15},"end":{"line":1144,"column":15}},{"start":{"line":1144,"column":15},"end":{"line":1144,"column":15}}]}},"code":["(function
 () { YUI.add('gallery-sm-menu', function (Y, NAME) {","","/*jshint expr:true, 
onevar:false */","","/**","Provides the `Y.Menu` widget.","","@module 
gallery-sm-menu","@main gallery-sm-menu","**/","","/**","Menu 
widget.","","@class Menu","@constructor","@param {Object} [config] Config 
options.","@param {HTMLElement|Node|String} [config.sourceNode] Node instance, 
HTML","    element, or selector string for a node (usually a `<ul>` or `<ol>`) 
whose","    structure should be parsed and used to generate this menu's 
contents. This","    node will be removed from the DOM after being 
parsed.","@extends Menu.Base","@uses View","**/","","var doc          = 
Y.config.doc,","    getClassName = 
Y.ClassNameManager.getClassName;","","/**","Fired when any clickable menu item 
is clicked.","","You can subscribe to clicks on a specific menu item by 
subscribing to","\"itemClick#id\", where \"id\" is the item id of the item you 
want to subscribe to.","","@event itemClick","@param {Menu.Item} item Menu item 
that was clicked.","@param {EventFacade} originEvent Original click 
event.","@preventable _defItemClickFn","**/","var EVT_ITEM_CLICK = 
'itemClick';","","var Menu = Y.Base.create('menu', Y.Menu.Base, [Y.View], 
{","","    /**","    CSS class names used by this menu.","","    @property 
{Object} classNames","    **/","    classNames: {","        canHaveChildren: 
getClassName('menu-can-have-children'),","        children       : 
getClassName('menu-children'),","        disabled       : 
getClassName('menu-disabled'),","        hasChildren    : 
getClassName('menu-has-children'),","        heading        : 
getClassName('menu-heading'),","        hidden         : 
getClassName('menu-hidden'),","        horizontal     : 
getClassName('menu-horizontal'),","        item           : 
getClassName('menu-item'),","        label          : 
getClassName('menu-label'),","        menu           : getClassName('menu'),"," 
       noTouch        : getClassName('menu-notouch'),","        open           
: getClassName('menu-open'),","        selected       : 
getClassName('menu-selected'),","        separator      : 
getClassName('menu-separator'),","        touch          : 
getClassName('menu-touch'),","        vertical       : 
getClassName('menu-vertical')","    },","","    /**","    Whether or not this 
menu has been rendered.","","    @property {Boolean} rendered","    @default 
false","    **/","    rendered: false,","","    /**","    Selectors to use when 
parsing a menu structure from a DOM structure via","    `parseHTML()`.","","    
@property {Object} sourceSelectors","    **/","    sourceSelectors: {","        
item   : '> li',","        label  : '> a, > span',","        subtree: '> ul, > 
ol'","    },","","    // -- Lifecycle Methods 
----------------------------------------------------","","    initializer: 
function (config) {","        this._openMenus = {};","        this._published = 
{};","        this._timeouts  = {};","","        if (config && 
config.sourceNode) {","            config.nodes = (config.nodes || 
[]).concat(","                this.parseHTML(config.sourceNode));","","         
   Y.one(config.sourceNode).remove(true);","        }","","        
this._attachMenuEvents();","    },","","    destructor: function () {","        
this._detachMenuEvents();","","        delete this._openMenus;","        delete 
this._published;","","        Y.Object.each(this._timeouts, function (timeout) 
{","            clearTimeout(timeout);","        }, this);","","        delete 
this._timeouts;","    },","","    // -- Public Methods 
-------------------------------------------------------","","    /**","    
Returns the HTML node (as a `Y.Node` instance) associated with the specified"," 
   menu item, if any.","","    @method getHTMLNode","    @param {Menu.Item} 
item Menu item.","    @return {Node} `Y.Node` instance associated with the 
given tree node, or","        `undefined` if one was not found.","    **/","    
getHTMLNode: function (item) {","        if (!item._htmlNode) {","            
item._htmlNode = this.get('container').one('#' + item.id);","        }","","    
    return item._htmlNode;","    },","","    /**","    Hides this menu.","","   
 @method hide","    @chainable","    **/","    hide: function () {","        
this.set('visible', false);","        return this;","    },","","    /**","    
Parses the specified HTML _sourceNode_ as a menu structure and returns an","    
array of menu item objects that can be used to generate a menu with that","    
structure.","","    By default, _sourceNode_ is expected to contain one `<li>` 
element per","    menu item, and submenus are expected to be represented by 
`<ul>` or `<ol>`","    elements.","","    The selector queries used to parse 
the menu structure are contained in the","    `sourceSelectors` property, and 
may be customized. Class names specified in","    the `classNames` property are 
used to determine whether a menu item should","    be disabled, hidden, or 
treated as a heading or separator.","","    @method parseHTML","    @param 
{HTMLElement|Node|String} sourceNode Node instance, HTML element, or","        
selector string for the node (usually a `<ul> or `<ol>` element) to","        
parse.","    @return {Object[]} Array of menu item objects.","    **/","    
parseHTML: function (sourceNode) {","        sourceNode = 
Y.one(sourceNode);","","        var classNames = this.classNames,","            
items      = [],","            sel        = this.sourceSelectors,","            
self       = this;","","        sourceNode.all(sel.item).each(function 
(itemNode) {","            var item        = {},","                itemEl      
= itemNode._node,","                labelNode   = itemNode.one(sel.label),","   
             subTreeNode = itemNode.one(sel.subtree);","","            if 
(itemNode.hasClass(classNames.heading)) {","                item.type = 
'heading';","            } else if (itemNode.hasClass(classNames.separator)) 
{","                item.type = 'separator';","            }","","            
if (itemNode.hasClass(classNames.disabled)) {","                item.state || 
(item.state = {});","                item.state.disabled = true;","            
}","","            if (itemNode.hasClass(classNames.hidden)) {","               
 item.state || (item.state = {});","                item.state.hidden = 
true;","            }","","            if (labelNode) {","                var 
href = labelNode.getAttribute('href');","","                item.label = 
labelNode.getHTML();","","                if (href && href !== '#') {","        
            item.url = href;","                }","            } else {","      
          // The selector didn't find a label node, so look for the first","    
            // text child of the item element.","                var 
childEl;","","                for (var i = 0, len = itemEl.childNodes.length; i 
< len; i++) {","                    childEl = itemEl.childNodes[i];","","       
             if (childEl.nodeType === doc.TEXT_NODE) {","                       
 item.label = Y.Escape.html(childEl.nodeValue);","                        
break;","                    }","                }","            }","","        
    if (subTreeNode) {","                item.children = 
self.parseHTML(subTreeNode);","            }","","            
items.push(item);","        });","","        return items;","    },","","    
/**","    Renders this menu into its container.","","    If the container 
hasn't already been added to the current document, it will","    be appended to 
the `<body>` element.","","    @method render","    @chainable","    **/","    
render: function () {","        var classNames = this.classNames,","            
container  = this.get('container');","","        
container.addClass(classNames.menu);","        
container.addClass(classNames[this.get('orientation')]);","","        // Detect 
touchscreen devices.","        if ('ontouchstart' in Y.config.win) {","         
   container.addClass(classNames.touch);","        } else {","            
container.addClass(classNames.noTouch);","        }","","        
this._childrenNode = this.renderChildren(this.rootNode, {","            
container: container","        });","","        if (!container.inDoc()) {","    
        Y.one('body').append(container);","        }","","        this.rendered 
= true;","","        return this;","    },","","    /**","    Renders the 
children of the specified menu item.","","    If a container is specified, it 
will be assumed to be an existing rendered","    menu item, and the children 
will be rendered (or re-rendered) inside it.","","    @method renderChildren"," 
   @param {Menu.Item} menuItem Menu item whose children should be rendered.","  
  @param {Object} [options] Options.","        @param {Node} 
[options.container] `Y.Node` instance of a container into","            which 
the children should be rendered. If the container already","            
contains rendered children, they will be re-rendered in place.","    @return 
{Node} `Y.Node` instance containing the rendered children.","    **/","    
renderChildren: function (treeNode, options) {","        options || (options = 
{});","","        var container    = options.container,","            
childrenNode = container && container.one('.' + 
this.classNames.children);","","        if (!childrenNode) {","            
childrenNode = Y.Node.create(Menu.Templates.children({","                
classNames: this.classNames,","                menu      : this,","             
   item      : treeNode","            }));","        }","","        if 
(treeNode.isRoot()) {","            childrenNode.set('tabIndex', 0); // Add the 
root list to the tab order.","            childrenNode.set('role', 'menu');","  
      }","","        if (treeNode.hasChildren()) {","            
childrenNode.set('aria-expanded', treeNode.isOpen());","        }","","        
for (var i = 0, len = treeNode.children.length; i < len; i++) {","            
this.renderNode(treeNode.children[i], {","                container     : 
childrenNode,","                renderChildren: true","            });","       
 }","","        if (container) {","            
container.append(childrenNode);","        }","","        return 
childrenNode;","    },","","    /**","    Renders the specified menu item and 
its children (if any).","","    If a container is specified, the rendered node 
will be appended to it.","","    @method renderNode","    @param {Menu.Item} 
menuItem Tree node to render.","    @param {Object} [options] Options.","       
 @param {Node} [options.container] `Y.Node` instance of a container to","       
     which the rendered tree node should be appended.","        @param 
{Boolean} [options.renderChildren=false] Whether or not to render","            
this node's children.","    @return {Node} `Y.Node` instance of the rendered 
menu item.","    **/","    renderNode: function (item, options) {","        
options || (options = {});","","        var classNames = this.classNames,","    
        htmlNode   = item._htmlNode,","            isHidden   = 
item.isHidden();","","        // Create an HTML node for this menu item if one 
doesn't already exist.","        if (!htmlNode) {","            htmlNode = 
item._htmlNode = Y.Node.create(Menu.Templates.item({","                
classNames: classNames,","                item      : item,","                
menu      : this","            }));","        }","","        // Mark the HTML 
node as hidden if the item is hidden.","        htmlNode.set('aria-hidden', 
isHidden);","        htmlNode.toggleClass(classNames.hidden, isHidden);","","   
     switch (item.type) {","        case 'separator':","            
htmlNode.set('role', 'separator');","            break;","","        case 
'item':","        case 'heading':","            var labelNode = 
htmlNode.one('.' + classNames.label),","                labelId   = 
labelNode.get('id');","","            labelNode.setHTML(item.label);","","      
      if (!labelId) {","                labelId = Y.guid();","                
labelNode.set('id', labelId);","            }","","            
htmlNode.set('aria-labelledby', labelId);","","            if (item.type === 
'heading') {","                htmlNode.set('role', 'heading');","            } 
else {","                htmlNode.set('role', 'menuitem');","","                
htmlNode.toggleClass(classNames.disabled, item.isDisabled());","","             
   if (item.canHaveChildren) {","                    
htmlNode.addClass(classNames.canHaveChildren);","                    
htmlNode.toggleClass(classNames.open, item.isOpen());","","                    
if (item.hasChildren()) {","                        
htmlNode.addClass(classNames.hasChildren);","","                        if 
(options.renderChildren) {","                            
this.renderChildren(item, {","                                container: 
htmlNode","                            });","                        }","       
             }","                }","            }","            break;","      
  }","","        if (options.container) {","            
options.container.append(htmlNode);","        }","","        return 
htmlNode;","    },","","    /**","    Repositions this menu so that it is 
anchored to a specified node, region, or","    set of pixel coordinates.","","  
  The menu will be displayed at the most advantageous position relative to 
the","    anchor point to ensure that as much of the menu as possible is 
visible","    within the viewport.","","    @method reposition","    @param 
{Node|Number[]|Object} anchorPoint Anchor point at which this menu","        
should be positioned. The point may be specified as a `Y.Node`","        
reference, a region object, or an array of X and Y pixel coordinates.","    
@chainable","    **/","    reposition: function (anchorPoint) {","        var 
container = this.get('container'),","            anchorRegion, 
menuRegion;","","        if (Y.Lang.isArray(anchorPoint)) {","            
anchorRegion = {","                bottom: anchorPoint[1],","                
left  : anchorPoint[0],","                right : anchorPoint[0],","            
    top   : anchorPoint[1]","            };","        } else if 
(anchorPoint._node) {","            anchorRegion = 
anchorPoint.get('region');","        } else {","            anchorRegion = 
anchorPoint;","        }","","        menuRegion = 
this._getSortedAnchorRegions(","            this.get('alignments'),","          
  container.get('region'),","            anchorRegion","        
)[0].region;","","        container.setXY([menuRegion.left, 
menuRegion.top]);","","        return this;","    },","","    /**","    Shows 
this menu.","","    The menu will be rendered if it hasn't been rendered 
already.","","    @method show","    @param {Object} [options] Options.","      
  @param {Node|Number[]|Object} [options.anchorPoint] Anchor point at","        
    which this menu should be positioned when shown. The point may be","        
    specified as a `Y.Node` reference, a region object, or an array of X","     
       and Y pixel coordinates.","    @chainable","    **/","    show: function 
(options) {","        if (!this.rendered) {","            this.render();","     
   }","","        if (options && options.anchorPoint) {","            
this.reposition(options.anchorPoint);","        }","","        
this.set('visible', true);","        return this;","    },","","    /**","    
Toggles the visibility of this menu, showing it if it's currently hidden or","  
  hiding it if it's currently visible.","","    @method toggleVisible","    
@param {Object} [options] Options.","        @param {Node|Number[]|Object} 
[options.anchorPoint] Anchor point at","            which this menu should be 
positioned when shown. The point may be","            specified as a `Y.Node` 
reference, a region object, or an array of X","            and Y pixel 
coordinates.","    @chainable","    **/","    toggleVisible: function (options) 
{","        return this[this.get('visible') ? 'hide' : 'show'](options);","    
},","","    // -- Protected Methods 
----------------------------------------------------","","    /**","    
Attaches menu events.","","    @method _attachMenuEvents","    @protected","    
**/","    _attachMenuEvents: function () {","        this._menuEvents || 
(this._menuEvents = []);","","        var classNames = this.classNames,","      
      container  = this.get('container');","","        
this._menuEvents.push(","            this.after({","                add         
     : this._afterAdd,","                clear            : 
this._afterClear,","                close            : this._afterClose,","     
           disable          : this._afterDisable,","                enable      
     : this._afterEnable,","                hide             : 
this._afterHide,","                open             : this._afterOpen,","       
         orientationChange: this._afterOrientationChange,","                
remove           : this._afterRemove,","                show             : 
this._afterShow,","                visibleChange    : 
this._afterVisibleChange","            }),","","            
container.on('hover', this._onMenuMouseEnter, this._onMenuMouseLeave, 
this),","","            container.delegate('click', this._onItemClick, '.' + 
classNames.item + '>.' + classNames.label, this),","            
container.delegate('hover', this._onItemMouseEnter, this._onItemMouseLeave, '.' 
+ classNames.canHaveChildren, this),","","            
Y.one('doc').after('mousedown', this._afterDocMouseDown, this)","        );","  
  },","","    /**","    Detaches menu events.","","    @method 
_detachMenuEvents","    @protected","    **/","    _detachMenuEvents: function 
() {","        (new Y.EventHandle(this._menuEvents)).detach();","    },","","   
 /**","    Returns an efficient test function that can be passed to 
`Y.Node#ancestor()`","    to test whether a node is this menu's 
container.","","    This is broken out to make overriding easier in 
subclasses.","","    @method _getAncestorTestFn","    @return {Function} Test 
function.","    @protected","    **/","    _getAncestorTestFn: function () {"," 
       var container = this.get('container');","","        return function 
(node) {","            return node === container;","        };","    },","","   
 /**","    Given an anchor point and the regions currently occupied by a child 
node","    (the node being anchored) and a parent node (the node being anchored 
to),","    returns a region object representing the coordinates the anchored 
node will","    occupy when anchored to the given point on the parent.","","    
An anchor point is a string like \"tl-bl\", which means \"anchor the top 
left","    point of _nodeRegion_ to the bottom left point of 
_parentRegion_\".","","    Any combination of top/bottom/left/right anchor 
points may be used as long","    as they follow this format. Here are a few 
examples:","","      * `'bl-br'`: Anchor the bottom left of _nodeRegion_ to the 
bottom right of","        _parentRegion_.","      * `'br-bl'`: Anchor the 
bottom right of _nodeRegion_ to the bottom left of","        _parentRegion_."," 
     * `'tl-tr'`: Anchor the top left of _nodeRegion_ to the top right of","    
    _parentRegion_.","      * `'tr-tl'`: Anchor the top right of _nodeRegion_ 
to the top left of","        _parentRegion_.","","    @method 
_getAnchorRegion","    @param {String} anchor Anchor point. See above for 
details.","    @param {Object} nodeRegion Region object for the node to be 
anchored (that","        is, the node that will be repositioned).","    @param 
{Object} parentRegion Region object for the node that will be","        
anchored to (that is, the node that will not move).","    @return {Object} 
Region that will be occupied by the anchored node.","    @protected","    
**/","    _getAnchorRegion: function (anchor, nodeRegion, parentRegion) {","    
    var region = {};","","        anchor.replace(/^([bt])([lr])-([bt])([lr])/i, 
function (match, p1, p2, p3, p4) {","            var lookup = {","              
      b: 'bottom',","                    l: 'left',","                    r: 
'right',","                    t: 'top'","                };","","            
region[lookup[p1]] = parentRegion[lookup[p3]];","            region[lookup[p2]] 
= parentRegion[lookup[p4]];","        });","","        'bottom' in region || 
(region.bottom = region.top + nodeRegion.height);","        'left' in region   
|| (region.left = region.right - nodeRegion.width);","        'right' in region 
 || (region.right = region.left + nodeRegion.width);","        'top' in region  
  || (region.top = region.bottom - nodeRegion.height);","","        return 
region;","    },","","    _getSortedAnchorRegions: function (points, 
nodeRegion, parentRegion, containerRegion) {","        containerRegion || 
(containerRegion = Y.DOM.viewportRegion());","","        // Run through each 
possible anchor point and test whether it would","        // allow the submenu 
to be displayed fully within the viewport. Stop at","        // the first 
anchor point that works.","        var anchors = [],","            i, len, 
point, region;","","        for (i = 0, len = points.length; i < len; i++) {"," 
           point = points[i];","","            // Allow arrays of strings or 
arrays of objects like {point: '...'}.","            if (point.point) {","      
          point = point.point;","            }","","            region = 
this._getAnchorRegion(point, nodeRegion, parentRegion);","","            
anchors.push({","                point : point,","                region: 
region,","                score : this._inRegion(region, containerRegion)","    
        });","        }","","        // Sort the anchors in descending order by 
score (higher score is","        // better).","        anchors.sort(function 
(a, b) {","            if (a.score === b.score) {","                return 
0;","            } else if (a.score === true) {","                return -1;"," 
           } else if (b.score === true) {","                return 1;","        
    } else {","                return b.score - a.score;","            }","     
   });","","        // Return the sorted anchors.","        return anchors;","  
  },","","    /**","    Hides the specified menu container by moving its 
htmlNode offscreen.","","    @method _hideMenu","    @param {Menu.Item} item 
Menu item.","    @param {Node} [htmlNode] HTML node for the menu item.","    
@protected","    **/","    _hideMenu: function (item, htmlNode) {","        
htmlNode || (htmlNode = this.getHTMLNode(item));","","        var childrenNode 
= htmlNode.one('.' + this.classNames.children);","","        
childrenNode.setXY([-10000, -10000]);","        delete item.data.menuAnchor;"," 
   },","","    /**","    Returns `true` if the given _inner_ region is 
contained entirely within the","    given _outer_ region. If it's not a perfect 
fit, returns a numerical score","    indicating how much of the _inner_ region 
fits within the _outer_ region.","    A higher score indicates a better 
fit.","","    @method _inRegion","    @param {Object} inner Inner region.","    
@param {Object} outer Outer region.","    @return {Boolean|Number} `true` if 
the _inner_ region fits entirely within","        the _outer_ region or, if 
not, a numerical score indicating how much of","        the inner region 
fits.","    @protected","    **/","    _inRegion: function (inner, outer) {","  
      if (inner.bottom <= outer.bottom","                && inner.left >= 
outer.left","                && inner.right <= outer.right","                && 
inner.top >= outer.top) {","","            // Perfect fit!","            return 
true;","        }","","        // Not a perfect fit, so return the overall 
score of this region so we","        // can compare it with the scores of other 
regions to determine the best","        // possible fit.","        return (","  
          Math.min(outer.bottom - inner.bottom, 0) +","            
Math.min(inner.left - outer.left, 0) +","            Math.min(outer.right - 
inner.right, 0) +","            Math.min(inner.top - outer.top, 0)","        
);","    },","","    /**","    Intelligently positions the _htmlNode_ of the 
given submenu _item_ relative","    to its parent so that as much as possible 
of the submenu will be visible","    within the viewport.","","    @method 
_positionMenu","    @param {Menu.Item} item Menu item to position.","    @param 
{Node} [htmlNode] HTML node for the menu item.","    @protected","    **/","    
_positionMenu: function (item, htmlNode) {","        htmlNode || (htmlNode = 
this.getHTMLNode(item));","","        var childrenNode = htmlNode.one('.' + 
this.classNames.children),","            orientation  = 
this.get('orientation'),","            alignments, anchors;","","        // If 
this is a top-level submenu and this menu is horizontally","        // aligned, 
use `alignments`.","        if (item.parent.isRoot() && orientation === 
'horizontal') {","            alignments = this.get('alignments');","        } 
else {","            // If this menu has a parent and the parent has stored 
alignment","            // anchors, use those. Otherwise, use 
`subMenuAlignments`.","            alignments = (item.parent && 
item.parent.data.menuAnchors) ||","                
this.get('subMenuAlignments');","        }","","        anchors = 
this._getSortedAnchorRegions(alignments,","            
childrenNode.get('region'), htmlNode.get('region'));","","        if 
(orientation === 'vertical' || !item.parent.isRoot()) {","            // 
Remember which anchors we used for this item so that we can","            // 
default that anchor for submenus of this item if necessary.","            
item.data.menuAnchors = anchors;","        }","","        // Position the 
submenu.","        var anchorRegion = anchors[0].region;","        
childrenNode.setXY([anchorRegion.left, anchorRegion.top]);","    },","","    // 
-- Protected Event Handlers ---------------------------------------------",""," 
   /**","    Handles `add` events for this menu.","","    @method _afterAdd","  
  @param {EventFacade} e","    @protected","    **/","    _afterAdd: function 
(e) {","        // Nothing to do if the menu hasn't been rendered yet.","       
 if (!this.rendered) {","            return;","        }","","        var 
parent = e.parent,","            htmlChildrenNode,","            
htmlNode;","","        if (parent === this.rootNode) {","            
htmlChildrenNode = this._childrenNode;","        } else {","            
htmlNode = this.getHTMLNode(parent);","            htmlChildrenNode = htmlNode 
&& htmlNode.one('.' + this.classNames.children);","","            if 
(!htmlChildrenNode) {","                // Parent node hasn't been rendered 
yet, or hasn't yet been","                // rendered with children. Render 
it.","                htmlNode || (htmlNode = this.renderNode(parent));","","   
             this.renderChildren(parent, {","                    container: 
htmlNode","                });","","                return;","            }","  
      }","","        htmlChildrenNode.insert(this.renderNode(e.node, {","       
     renderChildren: true","        }), e.index);","    },","","    /**","    
Handles `clear` events for this menu.","","    @method _afterClear","    
@protected","    **/","    _afterClear: function () {","        this._openMenus 
= {};","","        // Nothing to do if the menu hasn't been rendered yet.","    
    if (!this.rendered) {","            return;","        }","","        delete 
this._childrenNode;","        this.rendered = false;","","        
this.get('container').empty();","        this.render();","    },","","    
/**","    Handles `mousedown` events on the document.","","    @method 
_afterDocMouseDown","    @param {EventFacade} e","    @protected","    **/","   
 _afterDocMouseDown: function (e) {","        if (!this.get('visible')) {","    
        return;","        }","","        if 
(!e.target.ancestor(this._getAncestorTestFn(), true)) {","            
this.closeSubMenus();","","            if (this.get('hideOnOutsideClick')) {"," 
               this.hide();","            }","        }","    },","","    
/**","    Handles `close` events for this menu.","","    @method _afterClose"," 
   @param {EventFacade} e","    @protected","    **/","    _afterClose: 
function (e) {","        var item     = e.node,","            htmlNode = 
this.getHTMLNode(item);","","        // Ensure that all this item's children 
are closed first.","        for (var i = 0, len = item.children.length; i < 
len; i++) {","            item.children[i].close();","        }","","        
item.close();","        delete this._openMenus[item.id];","","        if 
(htmlNode) {","            this._hideMenu(item, htmlNode);","            
htmlNode.removeClass(this.classNames.open);","        }","    },","","    
/**","    Handles `disable` events for this menu.","","    @method 
_afterDisable","    @param {EventFacade} e","    @protected","    **/","    
_afterDisable: function (e) {","        var htmlNode = 
this.getHTMLNode(e.item);","","        if (htmlNode) {","            
htmlNode.addClass(this.classNames.disabled);","        }","    },","","    
/**","    Handles `enable` events for this menu.","","    @method 
_afterEnable","    @param {EventFacade} e","    @protected","    **/","    
_afterEnable: function (e) {","        var htmlNode = 
this.getHTMLNode(e.item);","","        if (htmlNode) {","            
htmlNode.removeClass(this.classNames.disabled);","        }","    },","","    
/**","    Handles `hide` events for this menu.","","    @method _afterHide","   
 @param {EventFacade} e","    @protected","    **/","    _afterHide: function 
(e) {","        var htmlNode = this.getHTMLNode(e.item);","","        if 
(htmlNode) {","            htmlNode.addClass(this.classNames.hidden);","        
    htmlNode.set('aria-hidden', true);","        }","    },","","    /**","    
Handles `open` events for this menu.","","    @method _afterOpen","    @param 
{EventFacade} e","    @protected","    **/","    _afterOpen: function (e) {","  
      var item     = e.node,","            htmlNode = 
this.getHTMLNode(item),","            parent   = item.parent,","            
child;","","        if (parent) {","            // Close all the parent's 
children except this one. This is","            // necessary when mouse events 
don't fire to indicate that a submenu","            // should be closed, such 
as on touch devices.","            if (parent.isOpen()) {","                for 
(var i = 0, len = parent.children.length; i < len; i++) {","                    
child = parent.children[i];","","                    if (child !== item) {","   
                     child.close();","                    }","                
}","            } else {","                // Ensure that the parent is open 
before we open the submenu.","                parent.open();","            }"," 
       }","","        this._openMenus[item.id] = item;","","        if 
(htmlNode) {","            this._positionMenu(item, htmlNode);","            
htmlNode.addClass(this.classNames.open);","        }","    },","","    /**","   
 Handles `orientationChange` events for this menu.","","    @method 
_afterOrientationChange","    @param {EventFacade} e","    @protected","    
**/","    _afterOrientationChange: function (e) {","        if (this.rendered) 
{","            this.get('container')","                
.removeClass(this.classNames.horizontal)","                
.removeClass(this.classNames.vertical)","                
.addClass(this.classNames[e.newVal]);","        }","    },","","    /**","    
Handles `remove` events for this menu.","","    @method _afterRemove","    
@param {EventFacade} e","    @protected","    **/","    _afterRemove: function 
(e) {","        delete this._openMenus[e.node.id];","","        if 
(!this.rendered) {","            return;","        }","","        var htmlNode 
= this.getHTMLNode(e.node);","","        if (htmlNode) {","            
htmlNode.remove(true);","            delete e.node._htmlNode;","        }","    
},","","    /**","    Handles `show` events for this menu.","","    @method 
_afterShow","    @param {EventFacade} e","    @protected","    **/","    
_afterShow: function (e) {","        var htmlNode = 
this.getHTMLNode(e.item);","","        if (htmlNode) {","            
htmlNode.removeClass(this.classNames.hidden);","            
htmlNode.set('aria-hidden', false);","        }","    },","","    /**","    
Handles `visibleChange` events for this menu.","","    @method 
_afterVisibleChange","    @param {EventFacade} e","    @protected","    **/","  
  _afterVisibleChange: function (e) {","        var container = 
this.get('container');","","        container.toggleClass(this.classNames.open, 
e.newVal);","","        // Ensure that the container doesn't take up space when 
it's not","        // visible. We have to manually remove the style attribute 
because it's","        // set when the menu is positioned, and it overrides 
CSS.","        if (!e.newVal) {","            
container.removeAttribute('style');","        }","    },","","    /**","    
Handles click events on menu items.","","    @method _onItemClick","    @param 
{EventFacade} e","    @protected","    **/","    _onItemClick: function (e) 
{","        var item       = 
this.getNodeById(e.currentTarget.getData('item-id')),","            eventName  
= EVT_ITEM_CLICK + '#' + item.id,","            isDisabled = item.isDisabled() 
|| item.isHidden();","","        // Avoid navigating to '#' if this item is 
disabled or doesn't have a","        // custom URL.","        if (isDisabled || 
item.url === '#') {","            e.preventDefault();","        }","","        
if (isDisabled) {","            return;","        }","","        if 
(!this._published[eventName]) {","            this._published[eventName] = 
this.publish(eventName, {","                defaultFn: 
this._defSpecificItemClickFn","            });","        }","","        if 
(!this._published[EVT_ITEM_CLICK]) {","            
this._published[EVT_ITEM_CLICK] = this.publish(EVT_ITEM_CLICK, {","             
   defaultFn: this._defItemClickFn","            });","        }","","        
this.fire(eventName, {","            originEvent: e,","            item       : 
item","        });","    },","","    /**","    Handles delegated `mouseenter` 
events on menu items.","","    @method _onItemMouseEnter","    @param 
{EventFacade} e","    @protected","    **/","    _onItemMouseEnter: function 
(e) {","        var item = this.getNodeById(e.currentTarget.get('id'));","","   
     clearTimeout(this._timeouts.item);","","        if (item.isOpen() || 
item.isDisabled()) {","            return;","        }","","        
this._timeouts.item = setTimeout(function () {","            item.open();","    
    }, 200); // TODO: make timeouts configurable","    },","","    /**","    
Handles delegated `mouseleave` events on menu items.","","    @method 
_onItemMouseLeave","    @param {EventFacade} e","    @protected","    **/","    
_onItemMouseLeave: function (e) {","        var item = 
this.getNodeById(e.currentTarget.get('id'));","","        
clearTimeout(this._timeouts.item);","","        if (!item.isOpen()) {","        
    return;","        }","","        this._timeouts.item = setTimeout(function 
() {","            item.close();","        }, 300);","    },","","    /**","    
Handles `mouseenter` events on this menu.","","    @method _onMenuMouseEnter"," 
   @param {EventFacade} e","    @protected","    **/","    _onMenuMouseEnter: 
function () {","        clearTimeout(this._timeouts.menu);","    },","","    
/**","    Handles `mouseleave` events on this menu.","","    @method 
_onMenuMouseLeave","    @param {EventFacade} e","    @protected","    **/","    
_onMenuMouseLeave: function () {","        var self = this;","","        
clearTimeout(this._timeouts.menu);","","        this._timeouts.menu = 
setTimeout(function () {","            self.closeSubMenus();","","            
if (self.get('hideOnMouseLeave')) {","                self.hide();","           
 }","        }, 500);","    },","","    // -- Default Event Handlers 
-----------------------------------------------","","    /**","    Default 
handler for the generic `itemClick` event.","","    @method _defItemClickFn","  
  @param {EventFacade} e","    @protected","    **/","    _defItemClickFn: 
function (e) {","        var item = e.item;","","        if 
(item.canHaveChildren) {","            clearTimeout(this._timeouts.item);","    
        clearTimeout(this._timeouts.menu);","","            
e.item.toggleOpen();","        } else if (this.get('hideOnClick')) {","         
   this.closeSubMenus();","            this.hide();","        }","    },","","  
  /**","    Default handler for item-specific `itemClick#<id>` events.","","    
@method _defSpecificItemClickFn","    @param {EventFacade} e","    
@protected","    **/","    _defSpecificItemClickFn: function (e) {","        
this.fire(EVT_ITEM_CLICK, {","            originEvent: e.originEvent,","        
    item       : e.item","        });","    }","}, {","    ATTRS: {","        
/**","        Preferred alignment positions at which this menu should be 
displayed","        relative to the anchor point when one is provided to the 
`show()`,","        `toggle()`, or `reposition()` methods.","","        The 
most optimal alignment position will be chosen automatically based","        on 
which one allows the most of this menu to be visible within the","        
browser's viewport. If multiple positions are equally visible, then the","      
  optimal position will be chosen based on its order in this array.","","       
 An alignment position is a string like \"tl-bl\", which means \"align the","   
     top left of this menu to the bottom left of its anchor point\".","","      
  Any combination of top/bottom/left/right alignment positions may be used","   
     as long as they follow this format. Here are a few examples:","","         
 * `'bl-br'`: Align the bottom left of this menu with the bottom right","       
     of the anchor point.","          * `'br-bl'`: Align the bottom right of 
this menu with the bottom left","            of the anchor point.","          * 
`'tl-tr'`: Align the top left of this menu with the top right of","            
the anchor point.","          * `'tr-tl'`: Align the top right of this menu to 
the top left of this","            anchor point.","","        @attribute 
{String[]} alignments","        @default ['tl-bl', 'tr-br', 'bl-tl', 
'br-tr']","        **/","        alignments: {","            valueFn: function 
() {","                return ['tl-bl', 'tr-br', 'bl-tl', 'br-tr'];","          
  }","        },","","        /**","        If `true`, this menu will be hidden 
when the user clicks on a menu item","        that doesn't contain a 
submenu.","","        @attribute {Boolean} hideOnClick","        @default 
true","        **/","        hideOnClick: {","            value: true","        
},","","        /**","        If `true`, this menu will be hidden when the user 
moves the mouse","        outside the menu.","","        @attribute {Boolean} 
hideOnMouseLeave","        @default false","        **/","        
hideOnMouseLeave: {","            value: false","        },","","        /**"," 
       If `true`, this menu will be hidden when the user clicks somewhere","    
    outside the menu.","","        @attribute {Boolean} hideOnOutsideClick","   
     @default true","        **/","        hideOnOutsideClick: {","            
value: true","        },","","        /**","        Orientation of this menu. 
May be either `'vertical'` or `'horizontal'`.","","        @attribute {String} 
orientation","        @default 'vertical'","        **/","        orientation: 
{","            value: 'vertical'","        },","","        /**","        Just 
like `alignments`, but for submenus of this menu. See the","        
`alignments` attribute for details on how alignment positions work.","","       
 @attribute {String[]} subMenuAlignments","        @default ['tl-tr', 'bl-br', 
'tr-tl', 'br-bl']","        **/","        subMenuAlignments: {","            
valueFn: function () {","                return ['tl-tr', 'bl-br', 'tr-tl', 
'br-bl'];","            }","        },","","        /**","        Whether or 
not this menu is visible. Changing this attribute's value","        will also 
change the visibility of this menu.","","        @attribute {Boolean} 
visible","        @default false","        **/","        visible: {","          
  value: false","        }","    }","});","","Y.Menu = Y.mix(Menu, 
Y.Menu);","","","}, '@VERSION@', {","    \"requires\": [","        
\"classnamemanager\",","        \"escape\",","        \"event-hover\",","       
 \"gallery-sm-menu-base\",","        \"gallery-sm-menu-templates\",","        
\"node-screen\",","        \"view\"","    ],","    \"skinnable\": 
true","});","","}());"]};
+}
+var __cov_6zVls6d4bdMh5AQnWiir0g = 
__coverage__['build/gallery-sm-menu/gallery-sm-menu.js'];
+__cov_6zVls6d4bdMh5AQnWiir0g.s['1']++;YUI.add('gallery-sm-menu',function(Y,NAME){__cov_6zVls6d4bdMh5AQnWiir0g.f['1']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['2']++;var
 
doc=Y.config.doc,getClassName=Y.ClassNameManager.getClassName;__cov_6zVls6d4bdMh5AQnWiir0g.s['3']++;var
 EVT_ITEM_CLICK='itemClick';__cov_6zVls6d4bdMh5AQnWiir0g.s['4']++;var 
Menu=Y.Base.create('menu',Y.Menu.Base,[Y.View],{classNames:{canHaveChildren:getClassName('menu-can-have-children'),children:getClassName('menu-children'),disabled:getClassName('menu-disabled'),hasChildren:getClassName('menu-has-children'),heading:getClassName('menu-heading'),hidden:getClassName('menu-hidden'),horizontal:getClassName('menu-horizontal'),item:getClassName('menu-item'),label:getClassName('menu-label'),menu:getClassName('menu'),noTouch:getClassName('menu-notouch'),open:getClassName('menu-open'),selected:getClassName('menu-selected'),separator:getClassName('menu-separator'),touch:getClassName('menu-touch'),vertical:getClassName('menu-vertical')},rendered:false,sourceSelectors:{item:'>
 li',label:'> a, > span',subtree:'> ul, > 
ol'},initializer:function(config){__cov_6zVls6d4bdMh5AQnWiir0g.f['2']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['5']++;this._openMenus={};__cov_6zVls6d4bdMh5AQnWiir0g.s['6']++;this._published={};__cov_6zVls6d4bdMh5AQnWiir0g.s['7']++;this._timeouts={};__cov_6zVls6d4bdMh5AQnWiir0g.s['8']++;if((__cov_6zVls6d4bdMh5AQnWiir0g.b['2'][0]++,config)&&(__cov_6zVls6d4bdMh5AQnWiir0g.b['2'][1]++,config.sourceNode)){__cov_6zVls6d4bdMh5AQnWiir0g.b['1'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['9']++;config.nodes=((__cov_6zVls6d4bdMh5AQnWiir0g.b['3'][0]++,config.nodes)||(__cov_6zVls6d4bdMh5AQnWiir0g.b['3'][1]++,[])).concat(this.parseHTML(config.sourceNode));__cov_6zVls6d4bdMh5AQnWiir0g.s['10']++;Y.one(config.sourceNode).remove(true);}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['1'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['11']++;this._attachMenuEvents();},destructor:function(){__cov_6zVls6d4bdMh5AQnWiir0g.f['3']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['12']++;this._detachMenuEvents();__cov_6zVls6d4bdMh5AQnWiir0g.s['13']++;delete
 this._openMenus;__cov_6zVls6d4bdMh5AQnWiir0g.s['14']++;delete 
this._published;__cov_6zVls6d4bdMh5AQnWiir0g.s['15']++;Y.Object.each(this._timeouts,function(timeout){__cov_6zVls6d4bdMh5AQnWiir0g.f['4']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['16']++;clearTimeout(timeout);},this);__cov_6zVls6d4bdMh5AQnWiir0g.s['17']++;delete
 
this._timeouts;},getHTMLNode:function(item){__cov_6zVls6d4bdMh5AQnWiir0g.f['5']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['18']++;if(!item._htmlNode){__cov_6zVls6d4bdMh5AQnWiir0g.b['4'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['19']++;item._htmlNode=this.get('container').one('#'+item.id);}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['4'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['20']++;return
 
item._htmlNode;},hide:function(){__cov_6zVls6d4bdMh5AQnWiir0g.f['6']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['21']++;this.set('visible',false);__cov_6zVls6d4bdMh5AQnWiir0g.s['22']++;return
 
this;},parseHTML:function(sourceNode){__cov_6zVls6d4bdMh5AQnWiir0g.f['7']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['23']++;sourceNode=Y.one(sourceNode);__cov_6zVls6d4bdMh5AQnWiir0g.s['24']++;var
 
classNames=this.classNames,items=[],sel=this.sourceSelectors,self=this;__cov_6zVls6d4bdMh5AQnWiir0g.s['25']++;sourceNode.all(sel.item).each(function(itemNode){__cov_6zVls6d4bdMh5AQnWiir0g.f['8']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['26']++;var
 
item={},itemEl=itemNode._node,labelNode=itemNode.one(sel.label),subTreeNode=itemNode.one(sel.subtree);__cov_6zVls6d4bdMh5AQnWiir0g.s['27']++;if(itemNode.hasClass(classNames.heading)){__cov_6zVls6d4bdMh5AQnWiir0g.b['5'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['28']++;item.type='heading';}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['5'][1]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['29']++;if(itemNode.hasClass(classNames.separator)){__cov_6zVls6d4bdMh5AQnWiir0g.b['6'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['30']++;item.type='separator';}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['6'][1]++;}}__cov_6zVls6d4bdMh5AQnWiir0g.s['31']++;if(itemNode.hasClass(classNames.disabled)){__cov_6zVls6d4bdMh5AQnWiir0g.b['7'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['32']++;(__cov_6zVls6d4bdMh5AQnWiir0g.b['8'][0]++,item.state)||(__cov_6zVls6d4bdMh5AQnWiir0g.b['8'][1]++,item.state={});__cov_6zVls6d4bdMh5AQnWiir0g.s['33']++;item.state.disabled=true;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['7'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['34']++;if(itemNode.hasClass(classNames.hidden)){__cov_6zVls6d4bdMh5AQnWiir0g.b['9'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['35']++;(__cov_6zVls6d4bdMh5AQnWiir0g.b['10'][0]++,item.state)||(__cov_6zVls6d4bdMh5AQnWiir0g.b['10'][1]++,item.state={});__cov_6zVls6d4bdMh5AQnWiir0g.s['36']++;item.state.hidden=true;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['9'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['37']++;if(labelNode){__cov_6zVls6d4bdMh5AQnWiir0g.b['11'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['38']++;var
 
href=labelNode.getAttribute('href');__cov_6zVls6d4bdMh5AQnWiir0g.s['39']++;item.label=labelNode.getHTML();__cov_6zVls6d4bdMh5AQnWiir0g.s['40']++;if((__cov_6zVls6d4bdMh5AQnWiir0g.b['13'][0]++,href)&&(__cov_6zVls6d4bdMh5AQnWiir0g.b['13'][1]++,href!=='#')){__cov_6zVls6d4bdMh5AQnWiir0g.b['12'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['41']++;item.url=href;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['12'][1]++;}}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['11'][1]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['42']++;var
 childEl;__cov_6zVls6d4bdMh5AQnWiir0g.s['43']++;for(var 
i=0,len=itemEl.childNodes.length;i<len;i++){__cov_6zVls6d4bdMh5AQnWiir0g.s['44']++;childEl=itemEl.childNodes[i];__cov_6zVls6d4bdMh5AQnWiir0g.s['45']++;if(childEl.nodeType===doc.TEXT_NODE){__cov_6zVls6d4bdMh5AQnWiir0g.b['14'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['46']++;item.label=Y.Escape.html(childEl.nodeValue);__cov_6zVls6d4bdMh5AQnWiir0g.s['47']++;break;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['14'][1]++;}}}__cov_6zVls6d4bdMh5AQnWiir0g.s['48']++;if(subTreeNode){__cov_6zVls6d4bdMh5AQnWiir0g.b['15'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['49']++;item.children=self.parseHTML(subTreeNode);}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['15'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['50']++;items.push(item);});__cov_6zVls6d4bdMh5AQnWiir0g.s['51']++;return
 
items;},render:function(){__cov_6zVls6d4bdMh5AQnWiir0g.f['9']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['52']++;var
 
classNames=this.classNames,container=this.get('container');__cov_6zVls6d4bdMh5AQnWiir0g.s['53']++;container.addClass(classNames.menu);__cov_6zVls6d4bdMh5AQnWiir0g.s['54']++;container.addClass(classNames[this.get('orientation')]);__cov_6zVls6d4bdMh5AQnWiir0g.s['55']++;if('ontouchstart'in
 
Y.config.win){__cov_6zVls6d4bdMh5AQnWiir0g.b['16'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['56']++;container.addClass(classNames.touch);}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['16'][1]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['57']++;container.addClass(classNames.noTouch);}__cov_6zVls6d4bdMh5AQnWiir0g.s['58']++;this._childrenNode=this.renderChildren(this.rootNode,{container:container});__cov_6zVls6d4bdMh5AQnWiir0g.s['59']++;if(!container.inDoc()){__cov_6zVls6d4bdMh5AQnWiir0g.b['17'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['60']++;Y.one('body').append(container);}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['17'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['61']++;this.rendered=true;__cov_6zVls6d4bdMh5AQnWiir0g.s['62']++;return
 
this;},renderChildren:function(treeNode,options){__cov_6zVls6d4bdMh5AQnWiir0g.f['10']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['63']++;(__cov_6zVls6d4bdMh5AQnWiir0g.b['18'][0]++,options)||(__cov_6zVls6d4bdMh5AQnWiir0g.b['18'][1]++,options={});__cov_6zVls6d4bdMh5AQnWiir0g.s['64']++;var
 
container=options.container,childrenNode=(__cov_6zVls6d4bdMh5AQnWiir0g.b['19'][0]++,container)&&(__cov_6zVls6d4bdMh5AQnWiir0g.b['19'][1]++,container.one('.'+this.classNames.children));__cov_6zVls6d4bdMh5AQnWiir0g.s['65']++;if(!childrenNode){__cov_6zVls6d4bdMh5AQnWiir0g.b['20'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['66']++;childrenNode=Y.Node.create(Menu.Templates.children({classNames:this.classNames,menu:this,item:treeNode}));}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['20'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['67']++;if(treeNode.isRoot()){__cov_6zVls6d4bdMh5AQnWiir0g.b['21'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['68']++;childrenNode.set('tabIndex',0);__cov_6zVls6d4bdMh5AQnWiir0g.s['69']++;childrenNode.set('role','menu');}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['21'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['70']++;if(treeNode.hasChildren()){__cov_6zVls6d4bdMh5AQnWiir0g.b['22'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['71']++;childrenNode.set('aria-expanded',treeNode.isOpen());}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['22'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['72']++;for(var
 
i=0,len=treeNode.children.length;i<len;i++){__cov_6zVls6d4bdMh5AQnWiir0g.s['73']++;this.renderNode(treeNode.children[i],{container:childrenNode,renderChildren:true});}__cov_6zVls6d4bdMh5AQnWiir0g.s['74']++;if(container){__cov_6zVls6d4bdMh5AQnWiir0g.b['23'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['75']++;container.append(childrenNode);}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['23'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['76']++;return
 
childrenNode;},renderNode:function(item,options){__cov_6zVls6d4bdMh5AQnWiir0g.f['11']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['77']++;(__cov_6zVls6d4bdMh5AQnWiir0g.b['24'][0]++,options)||(__cov_6zVls6d4bdMh5AQnWiir0g.b['24'][1]++,options={});__cov_6zVls6d4bdMh5AQnWiir0g.s['78']++;var
 
classNames=this.classNames,htmlNode=item._htmlNode,isHidden=item.isHidden();__cov_6zVls6d4bdMh5AQnWiir0g.s['79']++;if(!htmlNode){__cov_6zVls6d4bdMh5AQnWiir0g.b['25'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['80']++;htmlNode=item._htmlNode=Y.Node.create(Menu.Templates.item({classNames:classNames,item:item,menu:this}));}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['25'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['81']++;htmlNode.set('aria-hidden',isHidden);__cov_6zVls6d4bdMh5AQnWiir0g.s['82']++;htmlNode.toggleClass(classNames.hidden,isHidden);__cov_6zVls6d4bdMh5AQnWiir0g.s['83']++;switch(item.type){case'separator':__cov_6zVls6d4bdMh5AQnWiir0g.b['26'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['84']++;htmlNode.set('role','separator');__cov_6zVls6d4bdMh5AQnWiir0g.s['85']++;break;case'item':__cov_6zVls6d4bdMh5AQnWiir0g.b['26'][1]++;case'heading':__cov_6zVls6d4bdMh5AQnWiir0g.b['26'][2]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['86']++;var
 
labelNode=htmlNode.one('.'+classNames.label),labelId=labelNode.get('id');__cov_6zVls6d4bdMh5AQnWiir0g.s['87']++;labelNode.setHTML(item.label);__cov_6zVls6d4bdMh5AQnWiir0g.s['88']++;if(!labelId){__cov_6zVls6d4bdMh5AQnWiir0g.b['27'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['89']++;labelId=Y.guid();__cov_6zVls6d4bdMh5AQnWiir0g.s['90']++;labelNode.set('id',labelId);}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['27'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['91']++;htmlNode.set('aria-labelledby',labelId);__cov_6zVls6d4bdMh5AQnWiir0g.s['92']++;if(item.type==='heading'){__cov_6zVls6d4bdMh5AQnWiir0g.b['28'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['93']++;htmlNode.set('role','heading');}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['28'][1]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['94']++;htmlNode.set('role','menuitem');__cov_6zVls6d4bdMh5AQnWiir0g.s['95']++;htmlNode.toggleClass(classNames.disabled,item.isDisabled());__cov_6zVls6d4bdMh5AQnWiir0g.s['96']++;if(item.canHaveChildren){__cov_6zVls6d4bdMh5AQnWiir0g.b['29'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['97']++;htmlNode.addClass(classNames.canHaveChildren);__cov_6zVls6d4bdMh5AQnWiir0g.s['98']++;htmlNode.toggleClass(classNames.open,item.isOpen());__cov_6zVls6d4bdMh5AQnWiir0g.s['99']++;if(item.hasChildren()){__cov_6zVls6d4bdMh5AQnWiir0g.b['30'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['100']++;htmlNode.addClass(classNames.hasChildren);__cov_6zVls6d4bdMh5AQnWiir0g.s['101']++;if(options.renderChildren){__cov_6zVls6d4bdMh5AQnWiir0g.b['31'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['102']++;this.renderChildren(item,{container:htmlNode});}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['31'][1]++;}}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['30'][1]++;}}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['29'][1]++;}}__cov_6zVls6d4bdMh5AQnWiir0g.s['103']++;break;}__cov_6zVls6d4bdMh5AQnWiir0g.s['104']++;if(options.container){__cov_6zVls6d4bdMh5AQnWiir0g.b['32'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['105']++;options.container.append(htmlNode);}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['32'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['106']++;return
 
htmlNode;},reposition:function(anchorPoint){__cov_6zVls6d4bdMh5AQnWiir0g.f['12']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['107']++;var
 
container=this.get('container'),anchorRegion,menuRegion;__cov_6zVls6d4bdMh5AQnWiir0g.s['108']++;if(Y.Lang.isArray(anchorPoint)){__cov_6zVls6d4bdMh5AQnWiir0g.b['33'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['109']++;anchorRegion={bottom:anchorPoint[1],left:anchorPoint[0],right:anchorPoint[0],top:anchorPoint[1]};}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['33'][1]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['110']++;if(anchorPoint._node){__cov_6zVls6d4bdMh5AQnWiir0g.b['34'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['111']++;anchorRegion=anchorPoint.get('region');}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['34'][1]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['112']++;anchorRegion=anchorPoint;}}__cov_6zVls6d4bdMh5AQnWiir0g.s['113']++;menuRegion=this._getSortedAnchorRegions(this.get('alignments'),container.get('region'),anchorRegion)[0].region;__cov_6zVls6d4bdMh5AQnWiir0g.s['114']++;container.setXY([menuRegion.left,menuRegion.top]);__cov_6zVls6d4bdMh5AQnWiir0g.s['115']++;return
 
this;},show:function(options){__cov_6zVls6d4bdMh5AQnWiir0g.f['13']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['116']++;if(!this.rendered){__cov_6zVls6d4bdMh5AQnWiir0g.b['35'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['117']++;this.render();}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['35'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['118']++;if((__cov_6zVls6d4bdMh5AQnWiir0g.b['37'][0]++,options)&&(__cov_6zVls6d4bdMh5AQnWiir0g.b['37'][1]++,options.anchorPoint)){__cov_6zVls6d4bdMh5AQnWiir0g.b['36'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['119']++;this.reposition(options.anchorPoint);}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['36'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['120']++;this.set('visible',true);__cov_6zVls6d4bdMh5AQnWiir0g.s['121']++;return
 
this;},toggleVisible:function(options){__cov_6zVls6d4bdMh5AQnWiir0g.f['14']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['122']++;return
 
this[this.get('visible')?(__cov_6zVls6d4bdMh5AQnWiir0g.b['38'][0]++,'hide'):(__cov_6zVls6d4bdMh5AQnWiir0g.b['38'][1]++,'show')](options);},_attachMenuEvents:function(){__cov_6zVls6d4bdMh5AQnWiir0g.f['15']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['123']++;(__cov_6zVls6d4bdMh5AQnWiir0g.b['39'][0]++,this._menuEvents)||(__cov_6zVls6d4bdMh5AQnWiir0g.b['39'][1]++,this._menuEvents=[]);__cov_6zVls6d4bdMh5AQnWiir0g.s['124']++;var
 
classNames=this.classNames,container=this.get('container');__cov_6zVls6d4bdMh5AQnWiir0g.s['125']++;this._menuEvents.push(this.after({add:this._afterAdd,clear:this._afterClear,close:this._afterClose,disable:this._afterDisable,enable:this._afterEnable,hide:this._afterHide,open:this._afterOpen,orientationChange:this._afterOrientationChange,remove:this._afterRemove,show:this._afterShow,visibleChange:this._afterVisibleChange}),container.on('hover',this._onMenuMouseEnter,this._onMenuMouseLeave,this),container.delegate('click',this._onItemClick,'.'+classNames.item+'>.'+classNames.label,this),container.delegate('hover',this._onItemMouseEnter,this._onItemMouseLeave,'.'+classNames.canHaveChildren,this),Y.one('doc').after('mousedown',this._afterDocMouseDown,this));},_detachMenuEvents:function(){__cov_6zVls6d4bdMh5AQnWiir0g.f['16']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['126']++;new
 
Y.EventHandle(this._menuEvents).detach();},_getAncestorTestFn:function(){__cov_6zVls6d4bdMh5AQnWiir0g.f['17']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['127']++;var
 container=this.get('container');__cov_6zVls6d4bdMh5AQnWiir0g.s['128']++;return 
function(node){__cov_6zVls6d4bdMh5AQnWiir0g.f['18']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['129']++;return
 
node===container;};},_getAnchorRegion:function(anchor,nodeRegion,parentRegion){__cov_6zVls6d4bdMh5AQnWiir0g.f['19']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['130']++;var
 
region={};__cov_6zVls6d4bdMh5AQnWiir0g.s['131']++;anchor.replace(/^([bt])([lr])-([bt])([lr])/i,function(match,p1,p2,p3,p4){__cov_6zVls6d4bdMh5AQnWiir0g.f['20']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['132']++;var
 
lookup={b:'bottom',l:'left',r:'right',t:'top'};__cov_6zVls6d4bdMh5AQnWiir0g.s['133']++;region[lookup[p1]]=parentRegion[lookup[p3]];__cov_6zVls6d4bdMh5AQnWiir0g.s['134']++;region[lookup[p2]]=parentRegion[lookup[p4]];});__cov_6zVls6d4bdMh5AQnWiir0g.s['135']++;(__cov_6zVls6d4bdMh5AQnWiir0g.b['40'][0]++,'bottom'in
 
region)||(__cov_6zVls6d4bdMh5AQnWiir0g.b['40'][1]++,region.bottom=region.top+nodeRegion.height);__cov_6zVls6d4bdMh5AQnWiir0g.s['136']++;(__cov_6zVls6d4bdMh5AQnWiir0g.b['41'][0]++,'left'in
 
region)||(__cov_6zVls6d4bdMh5AQnWiir0g.b['41'][1]++,region.left=region.right-nodeRegion.width);__cov_6zVls6d4bdMh5AQnWiir0g.s['137']++;(__cov_6zVls6d4bdMh5AQnWiir0g.b['42'][0]++,'right'in
 
region)||(__cov_6zVls6d4bdMh5AQnWiir0g.b['42'][1]++,region.right=region.left+nodeRegion.width);__cov_6zVls6d4bdMh5AQnWiir0g.s['138']++;(__cov_6zVls6d4bdMh5AQnWiir0g.b['43'][0]++,'top'in
 
region)||(__cov_6zVls6d4bdMh5AQnWiir0g.b['43'][1]++,region.top=region.bottom-nodeRegion.height);__cov_6zVls6d4bdMh5AQnWiir0g.s['139']++;return
 
region;},_getSortedAnchorRegions:function(points,nodeRegion,parentRegion,containerRegion){__cov_6zVls6d4bdMh5AQnWiir0g.f['21']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['140']++;(__cov_6zVls6d4bdMh5AQnWiir0g.b['44'][0]++,containerRegion)||(__cov_6zVls6d4bdMh5AQnWiir0g.b['44'][1]++,containerRegion=Y.DOM.viewportRegion());__cov_6zVls6d4bdMh5AQnWiir0g.s['141']++;var
 
anchors=[],i,len,point,region;__cov_6zVls6d4bdMh5AQnWiir0g.s['142']++;for(i=0,len=points.length;i<len;i++){__cov_6zVls6d4bdMh5AQnWiir0g.s['143']++;point=points[i];__cov_6zVls6d4bdMh5AQnWiir0g.s['144']++;if(point.point){__cov_6zVls6d4bdMh5AQnWiir0g.b['45'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['145']++;point=point.point;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['45'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['146']++;region=this._getAnchorRegion(point,nodeRegion,parentRegion);__cov_6zVls6d4bdMh5AQnWiir0g.s['147']++;anchors.push({point:point,region:region,score:this._inRegion(region,containerRegion)});}__cov_6zVls6d4bdMh5AQnWiir0g.s['148']++;anchors.sort(function(a,b){__cov_6zVls6d4bdMh5AQnWiir0g.f['22']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['149']++;if(a.score===b.score){__cov_6zVls6d4bdMh5AQnWiir0g.b['46'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['150']++;return
 
0;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['46'][1]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['151']++;if(a.score===true){__cov_6zVls6d4bdMh5AQnWiir0g.b['47'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['152']++;return-1;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['47'][1]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['153']++;if(b.score===true){__cov_6zVls6d4bdMh5AQnWiir0g.b['48'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['154']++;return
 
1;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['48'][1]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['155']++;return
 b.score-a.score;}}}});__cov_6zVls6d4bdMh5AQnWiir0g.s['156']++;return 
anchors;},_hideMenu:function(item,htmlNode){__cov_6zVls6d4bdMh5AQnWiir0g.f['23']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['157']++;(__cov_6zVls6d4bdMh5AQnWiir0g.b['49'][0]++,htmlNode)||(__cov_6zVls6d4bdMh5AQnWiir0g.b['49'][1]++,htmlNode=this.getHTMLNode(item));__cov_6zVls6d4bdMh5AQnWiir0g.s['158']++;var
 
childrenNode=htmlNode.one('.'+this.classNames.children);__cov_6zVls6d4bdMh5AQnWiir0g.s['159']++;childrenNode.setXY([-10000,-10000]);__cov_6zVls6d4bdMh5AQnWiir0g.s['160']++;delete
 
item.data.menuAnchor;},_inRegion:function(inner,outer){__cov_6zVls6d4bdMh5AQnWiir0g.f['24']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['161']++;if((__cov_6zVls6d4bdMh5AQnWiir0g.b['51'][0]++,inner.bottom<=outer.bottom)&&(__cov_6zVls6d4bdMh5AQnWiir0g.b['51'][1]++,inner.left>=outer.left)&&(__cov_6zVls6d4bdMh5AQnWiir0g.b['51'][2]++,inner.right<=outer.right)&&(__cov_6zVls6d4bdMh5AQnWiir0g.b['51'][3]++,inner.top>=outer.top)){__cov_6zVls6d4bdMh5AQnWiir0g.b['50'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['162']++;return
 
true;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['50'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['163']++;return
 
Math.min(outer.bottom-inner.bottom,0)+Math.min(inner.left-outer.left,0)+Math.min(outer.right-inner.right,0)+Math.min(inner.top-outer.top,0);},_positionMenu:function(item,htmlNode){__cov_6zVls6d4bdMh5AQnWiir0g.f['25']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['164']++;(__cov_6zVls6d4bdMh5AQnWiir0g.b['52'][0]++,htmlNode)||(__cov_6zVls6d4bdMh5AQnWiir0g.b['52'][1]++,htmlNode=this.getHTMLNode(item));__cov_6zVls6d4bdMh5AQnWiir0g.s['165']++;var
 
childrenNode=htmlNode.one('.'+this.classNames.children),orientation=this.get('orientation'),alignments,anchors;__cov_6zVls6d4bdMh5AQnWiir0g.s['166']++;if((__cov_6zVls6d4bdMh5AQnWiir0g.b['54'][0]++,item.parent.isRoot())&&(__cov_6zVls6d4bdMh5AQnWiir0g.b['54'][1]++,orientation==='horizontal')){__cov_6zVls6d4bdMh5AQnWiir0g.b['53'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['167']++;alignments=this.get('alignments');}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['53'][1]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['168']++;alignments=(__cov_6zVls6d4bdMh5AQnWiir0g.b['55'][0]++,item.parent)&&(__cov_6zVls6d4bdMh5AQnWiir0g.b['55'][1]++,item.parent.data.menuAnchors)||(__cov_6zVls6d4bdMh5AQnWiir0g.b['55'][2]++,this.get('subMenuAlignments'));}__cov_6zVls6d4bdMh5AQnWiir0g.s['169']++;anchors=this._getSortedAnchorRegions(alignments,childrenNode.get('region'),htmlNode.get('region'));__cov_6zVls6d4bdMh5AQnWiir0g.s['170']++;if((__cov_6zVls6d4bdMh5AQnWiir0g.b['57'][0]++,orientation==='vertical')||(__cov_6zVls6d4bdMh5AQnWiir0g.b['57'][1]++,!item.parent.isRoot())){__cov_6zVls6d4bdMh5AQnWiir0g.b['56'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['171']++;item.data.menuAnchors=anchors;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['56'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['172']++;var
 
anchorRegion=anchors[0].region;__cov_6zVls6d4bdMh5AQnWiir0g.s['173']++;childrenNode.setXY([anchorRegion.left,anchorRegion.top]);},_afterAdd:function(e){__cov_6zVls6d4bdMh5AQnWiir0g.f['26']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['174']++;if(!this.rendered){__cov_6zVls6d4bdMh5AQnWiir0g.b['58'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['175']++;return;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['58'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['176']++;var
 
parent=e.parent,htmlChildrenNode,htmlNode;__cov_6zVls6d4bdMh5AQnWiir0g.s['177']++;if(parent===this.rootNode){__cov_6zVls6d4bdMh5AQnWiir0g.b['59'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['178']++;htmlChildrenNode=this._childrenNode;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['59'][1]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['179']++;htmlNode=this.getHTMLNode(parent);__cov_6zVls6d4bdMh5AQnWiir0g.s['180']++;htmlChildrenNode=(__cov_6zVls6d4bdMh5AQnWiir0g.b['60'][0]++,htmlNode)&&(__cov_6zVls6d4bdMh5AQnWiir0g.b['60'][1]++,htmlNode.one('.'+this.classNames.children));__cov_6zVls6d4bdMh5AQnWiir0g.s['181']++;if(!htmlChildrenNode){__cov_6zVls6d4bdMh5AQnWiir0g.b['61'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['182']++;(__cov_6zVls6d4bdMh5AQnWiir0g.b['62'][0]++,htmlNode)||(__cov_6zVls6d4bdMh5AQnWiir0g.b['62'][1]++,htmlNode=this.renderNode(parent));__cov_6zVls6d4bdMh5AQnWiir0g.s['183']++;this.renderChildren(parent,{container:htmlNode});__cov_6zVls6d4bdMh5AQnWiir0g.s['184']++;return;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['61'][1]++;}}__cov_6zVls6d4bdMh5AQnWiir0g.s['185']++;htmlChildrenNode.insert(this.renderNode(e.node,{renderChildren:true}),e.index);},_afterClear:function(){__cov_6zVls6d4bdMh5AQnWiir0g.f['27']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['186']++;this._openMenus={};__cov_6zVls6d4bdMh5AQnWiir0g.s['187']++;if(!this.rendered){__cov_6zVls6d4bdMh5AQnWiir0g.b['63'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['188']++;return;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['63'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['189']++;delete
 
this._childrenNode;__cov_6zVls6d4bdMh5AQnWiir0g.s['190']++;this.rendered=false;__cov_6zVls6d4bdMh5AQnWiir0g.s['191']++;this.get('container').empty();__cov_6zVls6d4bdMh5AQnWiir0g.s['192']++;this.render();},_afterDocMouseDown:function(e){__cov_6zVls6d4bdMh5AQnWiir0g.f['28']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['193']++;if(!this.get('visible')){__cov_6zVls6d4bdMh5AQnWiir0g.b['64'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['194']++;return;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['64'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['195']++;if(!e.target.ancestor(this._getAncestorTestFn(),true)){__cov_6zVls6d4bdMh5AQnWiir0g.b['65'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['196']++;this.closeSubMenus();__cov_6zVls6d4bdMh5AQnWiir0g.s['197']++;if(this.get('hideOnOutsideClick')){__cov_6zVls6d4bdMh5AQnWiir0g.b['66'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['198']++;this.hide();}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['66'][1]++;}}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['65'][1]++;}},_afterClose:function(e){__cov_6zVls6d4bdMh5AQnWiir0g.f['29']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['199']++;var
 
item=e.node,htmlNode=this.getHTMLNode(item);__cov_6zVls6d4bdMh5AQnWiir0g.s['200']++;for(var
 
i=0,len=item.children.length;i<len;i++){__cov_6zVls6d4bdMh5AQnWiir0g.s['201']++;item.children[i].close();}__cov_6zVls6d4bdMh5AQnWiir0g.s['202']++;item.close();__cov_6zVls6d4bdMh5AQnWiir0g.s['203']++;delete
 
this._openMenus[item.id];__cov_6zVls6d4bdMh5AQnWiir0g.s['204']++;if(htmlNode){__cov_6zVls6d4bdMh5AQnWiir0g.b['67'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['205']++;this._hideMenu(item,htmlNode);__cov_6zVls6d4bdMh5AQnWiir0g.s['206']++;htmlNode.removeClass(this.classNames.open);}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['67'][1]++;}},_afterDisable:function(e){__cov_6zVls6d4bdMh5AQnWiir0g.f['30']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['207']++;var
 
htmlNode=this.getHTMLNode(e.item);__cov_6zVls6d4bdMh5AQnWiir0g.s['208']++;if(htmlNode){__cov_6zVls6d4bdMh5AQnWiir0g.b['68'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['209']++;htmlNode.addClass(this.classNames.disabled);}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['68'][1]++;}},_afterEnable:function(e){__cov_6zVls6d4bdMh5AQnWiir0g.f['31']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['210']++;var
 
htmlNode=this.getHTMLNode(e.item);__cov_6zVls6d4bdMh5AQnWiir0g.s['211']++;if(htmlNode){__cov_6zVls6d4bdMh5AQnWiir0g.b['69'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['212']++;htmlNode.removeClass(this.classNames.disabled);}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['69'][1]++;}},_afterHide:function(e){__cov_6zVls6d4bdMh5AQnWiir0g.f['32']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['213']++;var
 
htmlNode=this.getHTMLNode(e.item);__cov_6zVls6d4bdMh5AQnWiir0g.s['214']++;if(htmlNode){__cov_6zVls6d4bdMh5AQnWiir0g.b['70'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['215']++;htmlNode.addClass(this.classNames.hidden);__cov_6zVls6d4bdMh5AQnWiir0g.s['216']++;htmlNode.set('aria-hidden',true);}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['70'][1]++;}},_afterOpen:function(e){__cov_6zVls6d4bdMh5AQnWiir0g.f['33']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['217']++;var
 
item=e.node,htmlNode=this.getHTMLNode(item),parent=item.parent,child;__cov_6zVls6d4bdMh5AQnWiir0g.s['218']++;if(parent){__cov_6zVls6d4bdMh5AQnWiir0g.b['71'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['219']++;if(parent.isOpen()){__cov_6zVls6d4bdMh5AQnWiir0g.b['72'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['220']++;for(var
 
i=0,len=parent.children.length;i<len;i++){__cov_6zVls6d4bdMh5AQnWiir0g.s['221']++;child=parent.children[i];__cov_6zVls6d4bdMh5AQnWiir0g.s['222']++;if(child!==item){__cov_6zVls6d4bdMh5AQnWiir0g.b['73'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['223']++;child.close();}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['73'][1]++;}}}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['72'][1]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['224']++;parent.open();}}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['71'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['225']++;this._openMenus[item.id]=item;__cov_6zVls6d4bdMh5AQnWiir0g.s['226']++;if(htmlNode){__cov_6zVls6d4bdMh5AQnWiir0g.b['74'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['227']++;this._positionMenu(item,htmlNode);__cov_6zVls6d4bdMh5AQnWiir0g.s['228']++;htmlNode.addClass(this.classNames.open);}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['74'][1]++;}},_afterOrientationChange:function(e){__cov_6zVls6d4bdMh5AQnWiir0g.f['34']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['229']++;if(this.rendered){__cov_6zVls6d4bdMh5AQnWiir0g.b['75'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['230']++;this.get('container').removeClass(this.classNames.horizontal).removeClass(this.classNames.vertical).addClass(this.classNames[e.newVal]);}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['75'][1]++;}},_afterRemove:function(e){__cov_6zVls6d4bdMh5AQnWiir0g.f['35']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['231']++;delete
 
this._openMenus[e.node.id];__cov_6zVls6d4bdMh5AQnWiir0g.s['232']++;if(!this.rendered){__cov_6zVls6d4bdMh5AQnWiir0g.b['76'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['233']++;return;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['76'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['234']++;var
 
htmlNode=this.getHTMLNode(e.node);__cov_6zVls6d4bdMh5AQnWiir0g.s['235']++;if(htmlNode){__cov_6zVls6d4bdMh5AQnWiir0g.b['77'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['236']++;htmlNode.remove(true);__cov_6zVls6d4bdMh5AQnWiir0g.s['237']++;delete
 
e.node._htmlNode;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['77'][1]++;}},_afterShow:function(e){__cov_6zVls6d4bdMh5AQnWiir0g.f['36']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['238']++;var
 
htmlNode=this.getHTMLNode(e.item);__cov_6zVls6d4bdMh5AQnWiir0g.s['239']++;if(htmlNode){__cov_6zVls6d4bdMh5AQnWiir0g.b['78'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['240']++;htmlNode.removeClass(this.classNames.hidden);__cov_6zVls6d4bdMh5AQnWiir0g.s['241']++;htmlNode.set('aria-hidden',false);}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['78'][1]++;}},_afterVisibleChange:function(e){__cov_6zVls6d4bdMh5AQnWiir0g.f['37']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['242']++;var
 
container=this.get('container');__cov_6zVls6d4bdMh5AQnWiir0g.s['243']++;container.toggleClass(this.classNames.open,e.newVal);__cov_6zVls6d4bdMh5AQnWiir0g.s['244']++;if(!e.newVal){__cov_6zVls6d4bdMh5AQnWiir0g.b['79'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['245']++;container.removeAttribute('style');}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['79'][1]++;}},_onItemClick:function(e){__cov_6zVls6d4bdMh5AQnWiir0g.f['38']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['246']++;var
 
item=this.getNodeById(e.currentTarget.getData('item-id')),eventName=EVT_ITEM_CLICK+'#'+item.id,isDisabled=(__cov_6zVls6d4bdMh5AQnWiir0g.b['80'][0]++,item.isDisabled())||(__cov_6zVls6d4bdMh5AQnWiir0g.b['80'][1]++,item.isHidden());__cov_6zVls6d4bdMh5AQnWiir0g.s['247']++;if((__cov_6zVls6d4bdMh5AQnWiir0g.b['82'][0]++,isDisabled)||(__cov_6zVls6d4bdMh5AQnWiir0g.b['82'][1]++,item.url==='#')){__cov_6zVls6d4bdMh5AQnWiir0g.b['81'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['248']++;e.preventDefault();}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['81'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['249']++;if(isDisabled){__cov_6zVls6d4bdMh5AQnWiir0g.b['83'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['250']++;return;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['83'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['251']++;if(!this._published[eventName]){__cov_6zVls6d4bdMh5AQnWiir0g.b['84'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['252']++;this._published[eventName]=this.publish(eventName,{defaultFn:this._defSpecificItemClickFn});}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['84'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['253']++;if(!this._published[EVT_ITEM_CLICK]){__cov_6zVls6d4bdMh5AQnWiir0g.b['85'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['254']++;this._published[EVT_ITEM_CLICK]=this.publish(EVT_ITEM_CLICK,{defaultFn:this._defItemClickFn});}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['85'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['255']++;this.fire(eventName,{originEvent:e,item:item});},_onItemMouseEnter:function(e){__cov_6zVls6d4bdMh5AQnWiir0g.f['39']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['256']++;var
 
item=this.getNodeById(e.currentTarget.get('id'));__cov_6zVls6d4bdMh5AQnWiir0g.s['257']++;clearTimeout(this._timeouts.item);__cov_6zVls6d4bdMh5AQnWiir0g.s['258']++;if((__cov_6zVls6d4bdMh5AQnWiir0g.b['87'][0]++,item.isOpen())||(__cov_6zVls6d4bdMh5AQnWiir0g.b['87'][1]++,item.isDisabled())){__cov_6zVls6d4bdMh5AQnWiir0g.b['86'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['259']++;return;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['86'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['260']++;this._timeouts.item=setTimeout(function(){__cov_6zVls6d4bdMh5AQnWiir0g.f['40']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['261']++;item.open();},200);},_onItemMouseLeave:function(e){__cov_6zVls6d4bdMh5AQnWiir0g.f['41']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['262']++;var
 
item=this.getNodeById(e.currentTarget.get('id'));__cov_6zVls6d4bdMh5AQnWiir0g.s['263']++;clearTimeout(this._timeouts.item);__cov_6zVls6d4bdMh5AQnWiir0g.s['264']++;if(!item.isOpen()){__cov_6zVls6d4bdMh5AQnWiir0g.b['88'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['265']++;return;}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['88'][1]++;}__cov_6zVls6d4bdMh5AQnWiir0g.s['266']++;this._timeouts.item=setTimeout(function(){__cov_6zVls6d4bdMh5AQnWiir0g.f['42']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['267']++;item.close();},300);},_onMenuMouseEnter:function(){__cov_6zVls6d4bdMh5AQnWiir0g.f['43']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['268']++;clearTimeout(this._timeouts.menu);},_onMenuMouseLeave:function(){__cov_6zVls6d4bdMh5AQnWiir0g.f['44']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['269']++;var
 
self=this;__cov_6zVls6d4bdMh5AQnWiir0g.s['270']++;clearTimeout(this._timeouts.menu);__cov_6zVls6d4bdMh5AQnWiir0g.s['271']++;this._timeouts.menu=setTimeout(function(){__cov_6zVls6d4bdMh5AQnWiir0g.f['45']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['272']++;self.closeSubMenus();__cov_6zVls6d4bdMh5AQnWiir0g.s['273']++;if(self.get('hideOnMouseLeave')){__cov_6zVls6d4bdMh5AQnWiir0g.b['89'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['274']++;self.hide();}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['89'][1]++;}},500);},_defItemClickFn:function(e){__cov_6zVls6d4bdMh5AQnWiir0g.f['46']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['275']++;var
 
item=e.item;__cov_6zVls6d4bdMh5AQnWiir0g.s['276']++;if(item.canHaveChildren){__cov_6zVls6d4bdMh5AQnWiir0g.b['90'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['277']++;clearTimeout(this._timeouts.item);__cov_6zVls6d4bdMh5AQnWiir0g.s['278']++;clearTimeout(this._timeouts.menu);__cov_6zVls6d4bdMh5AQnWiir0g.s['279']++;e.item.toggleOpen();}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['90'][1]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['280']++;if(this.get('hideOnClick')){__cov_6zVls6d4bdMh5AQnWiir0g.b['91'][0]++;__cov_6zVls6d4bdMh5AQnWiir0g.s['281']++;this.closeSubMenus();__cov_6zVls6d4bdMh5AQnWiir0g.s['282']++;this.hide();}else{__cov_6zVls6d4bdMh5AQnWiir0g.b['91'][1]++;}}},_defSpecificItemClickFn:function(e){__cov_6zVls6d4bdMh5AQnWiir0g.f['47']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['283']++;this.fire(EVT_ITEM_CLICK,{originEvent:e.originEvent,item:e.item});}},{ATTRS:{alignments:{valueFn:function(){__cov_6zVls6d4bdMh5AQnWiir0g.f['48']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['284']++;return['tl-bl','tr-br','bl-tl','br-tr'];}},hideOnClick:{value:true},hideOnMouseLeave:{value:false},hideOnOutsideClick:{value:true},orientation:{value:'vertical'},subMenuAlignments:{valueFn:function(){__cov_6zVls6d4bdMh5AQnWiir0g.f['49']++;__cov_6zVls6d4bdMh5AQnWiir0g.s['285']++;return['tl-tr','bl-br','tr-tl','br-bl'];}},visible:{value:false}}});__cov_6zVls6d4bdMh5AQnWiir0g.s['286']++;Y.Menu=Y.mix(Menu,Y.Menu);},'@VERSION@',{'requires':['classnamemanager','escape','event-hover','gallery-sm-menu-base','gallery-sm-menu-templates','node-screen','view'],'skinnable':true});

Added: 
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/gallery-sm-menu-debug.js
===================================================================
--- 
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/gallery-sm-menu-debug.js
                           (rev 0)
+++ 
branches/dev-syncromind/phpgwapi/js/yui3-gallery/gallery-sm-menu/gallery-sm-menu-debug.js
   2014-10-28 12:32:33 UTC (rev 12245)
@@ -0,0 +1,1282 @@
+YUI.add('gallery-sm-menu', function (Y, NAME) {
+
+/*jshint expr:true, onevar:false */
+
+/**
+Provides the `Y.Menu` widget.
+
address@hidden gallery-sm-menu
address@hidden gallery-sm-menu
+**/
+
+/**
+Menu widget.
+
address@hidden Menu
address@hidden
address@hidden {Object} [config] Config options.
address@hidden {HTMLElement|Node|String} [config.sourceNode] Node instance, HTML
+    element, or selector string for a node (usually a `<ul>` or `<ol>`) whose
+    structure should be parsed and used to generate this menu's contents. This
+    node will be removed from the DOM after being parsed.
address@hidden Menu.Base
address@hidden View
+**/
+
+var doc          = Y.config.doc,
+    getClassName = Y.ClassNameManager.getClassName;
+
+/**
+Fired when any clickable menu item is clicked.
+
+You can subscribe to clicks on a specific menu item by subscribing to
+"itemClick#id", where "id" is the item id of the item you want to subscribe to.
+
address@hidden itemClick
address@hidden {Menu.Item} item Menu item that was clicked.
address@hidden {EventFacade} originEvent Original click event.
address@hidden _defItemClickFn
+**/
+var EVT_ITEM_CLICK = 'itemClick';
+
+var Menu = Y.Base.create('menu', Y.Menu.Base, [Y.View], {
+
+    /**
+    CSS class names used by this menu.
+
+    @property {Object} classNames
+    **/
+    classNames: {
+        canHaveChildren: getClassName('menu-can-have-children'),
+        children       : getClassName('menu-children'),
+        disabled       : getClassName('menu-disabled'),
+        hasChildren    : getClassName('menu-has-children'),
+        heading        : getClassName('menu-heading'),
+        hidden         : getClassName('menu-hidden'),
+        horizontal     : getClassName('menu-horizontal'),
+        item           : getClassName('menu-item'),
+        label          : getClassName('menu-label'),
+        menu           : getClassName('menu'),
+        noTouch        : getClassName('menu-notouch'),
+        open           : getClassName('menu-open'),
+        selected       : getClassName('menu-selected'),
+        separator      : getClassName('menu-separator'),
+        touch          : getClassName('menu-touch'),
+        vertical       : getClassName('menu-vertical')
+    },
+
+    /**
+    Whether or not this menu has been rendered.
+
+    @property {Boolean} rendered
+    @default false
+    **/
+    rendered: false,
+
+    /**
+    Selectors to use when parsing a menu structure from a DOM structure via
+    `parseHTML()`.
+
+    @property {Object} sourceSelectors
+    **/
+    sourceSelectors: {
+        item   : '> li',
+        label  : '> a, > span',
+        subtree: '> ul, > ol'
+    },
+
+    // -- Lifecycle Methods 
----------------------------------------------------
+
+    initializer: function (config) {
+        this._openMenus = {};
+        this._published = {};
+        this._timeouts  = {};
+
+        if (config && config.sourceNode) {
+            config.nodes = (config.nodes || []).concat(
+                this.parseHTML(config.sourceNode));
+
+            Y.one(config.sourceNode).remove(true);
+        }
+
+        this._attachMenuEvents();
+    },
+
+    destructor: function () {
+        this._detachMenuEvents();
+
+        delete this._openMenus;
+        delete this._published;
+
+        Y.Object.each(this._timeouts, function (timeout) {
+            clearTimeout(timeout);
+        }, this);
+
+        delete this._timeouts;
+    },
+
+    // -- Public Methods 
-------------------------------------------------------
+
+    /**
+    Returns the HTML node (as a `Y.Node` instance) associated with the 
specified
+    menu item, if any.
+
+    @method getHTMLNode
+    @param {Menu.Item} item Menu item.
+    @return {Node} `Y.Node` instance associated with the given tree node, or
+        `undefined` if one was not found.
+    **/
+    getHTMLNode: function (item) {
+        if (!item._htmlNode) {
+            item._htmlNode = this.get('container').one('#' + item.id);
+        }
+
+        return item._htmlNode;
+    },
+
+    /**
+    Hides this menu.
+
+    @method hide
+    @chainable
+    **/
+    hide: function () {
+        this.set('visible', false);
+        return this;
+    },
+
+    /**
+    Parses the specified HTML _sourceNode_ as a menu structure and returns an
+    array of menu item objects that can be used to generate a menu with that
+    structure.
+
+    By default, _sourceNode_ is expected to contain one `<li>` element per
+    menu item, and submenus are expected to be represented by `<ul>` or `<ol>`
+    elements.
+
+    The selector queries used to parse the menu structure are contained in the
+    `sourceSelectors` property, and may be customized. Class names specified in
+    the `classNames` property are used to determine whether a menu item should
+    be disabled, hidden, or treated as a heading or separator.
+
+    @method parseHTML
+    @param {HTMLElement|Node|String} sourceNode Node instance, HTML element, or
+        selector string for the node (usually a `<ul> or `<ol>` element) to
+        parse.
+    @return {Object[]} Array of menu item objects.
+    **/
+    parseHTML: function (sourceNode) {
+        sourceNode = Y.one(sourceNode);
+
+        var classNames = this.classNames,
+            items      = [],
+            sel        = this.sourceSelectors,
+            self       = this;
+
+        sourceNode.all(sel.item).each(function (itemNode) {
+            var item        = {},
+                itemEl      = itemNode._node,
+                labelNode   = itemNode.one(sel.label),
+                subTreeNode = itemNode.one(sel.subtree);
+
+            if (itemNode.hasClass(classNames.heading)) {
+                item.type = 'heading';
+            } else if (itemNode.hasClass(classNames.separator)) {
+                item.type = 'separator';
+            }
+
+            if (itemNode.hasClass(classNames.disabled)) {
+                item.state || (item.state = {});
+                item.state.disabled = true;
+            }
+
+            if (itemNode.hasClass(classNames.hidden)) {
+                item.state || (item.state = {});
+                item.state.hidden = true;
+            }
+
+            if (labelNode) {
+                var href = labelNode.getAttribute('href');
+
+                item.label = labelNode.getHTML();
+
+                if (href && href !== '#') {
+                    item.url = href;
+                }
+            } else {
+                // The selector didn't find a label node, so look for the first
+                // text child of the item element.
+                var childEl;
+
+                for (var i = 0, len = itemEl.childNodes.length; i < len; i++) {
+                    childEl = itemEl.childNodes[i];
+
+                    if (childEl.nodeType === doc.TEXT_NODE) {
+                        item.label = Y.Escape.html(childEl.nodeValue);
+                        break;
+                    }
+                }
+            }
+
+            if (subTreeNode) {
+                item.children = self.parseHTML(subTreeNode);
+            }
+
+            items.push(item);
+        });
+
+        return items;
+    },
+
+    /**
+    Renders this menu into its container.
+
+    If the container hasn't already been added to the current document, it will
+    be appended to the `<body>` element.
+
+    @method render
+    @chainable
+    **/
+    render: function () {
+        var classNames = this.classNames,
+            container  = this.get('container');
+
+        container.addClass(classNames.menu);
+        container.addClass(classNames[this.get('orientation')]);
+
+        // Detect touchscreen devices.
+        if ('ontouchstart' in Y.config.win) {
+            container.addClass(classNames.touch);
+        } else {
+            container.addClass(classNames.noTouch);
+        }
+
+        this._childrenNode = this.renderChildren(this.rootNode, {
+            container: container
+        });
+
+        if (!container.inDoc()) {
+            Y.one('body').append(container);
+        }
+
+        this.rendered = true;
+
+        return this;
+    },
+
+    /**
+    Renders the children of the specified menu item.
+
+    If a container is specified, it will be assumed to be an existing rendered
+    menu item, and the children will be rendered (or re-rendered) inside it.
+
+    @method renderChildren
+    @param {Menu.Item} menuItem Menu item whose children should be rendered.
+    @param {Object} [options] Options.
+        @param {Node} [options.container] `Y.Node` instance of a container into
+            which the children should be rendered. If the container already
+            contains rendered children, they will be re-rendered in place.
+    @return {Node} `Y.Node` instance containing the rendered children.
+    **/
+    renderChildren: function (treeNode, options) {
+        options || (options = {});
+
+        var container    = options.container,
+            childrenNode = container && container.one('.' + 
this.classNames.children);
+
+        if (!childrenNode) {
+            childrenNode = Y.Node.create(Menu.Templates.children({
+                classNames: this.classNames,
+                menu      : this,
+                item      : treeNode
+            }));
+        }
+
+        if (treeNode.isRoot()) {
+            childrenNode.set('tabIndex', 0); // Add the root list to the tab 
order.
+            childrenNode.set('role', 'menu');
+        }
+
+        if (treeNode.hasChildren()) {
+            childrenNode.set('aria-expanded', treeNode.isOpen());
+        }
+
+        for (var i = 0, len = treeNode.children.length; i < len; i++) {
+            this.renderNode(treeNode.children[i], {
+                container     : childrenNode,
+                renderChildren: true
+            });
+        }
+
+        if (container) {
+            container.append(childrenNode);
+        }
+
+        return childrenNode;
+    },
+
+    /**
+    Renders the specified menu item and its children (if any).
+
+    If a container is specified, the rendered node will be appended to it.
+
+    @method renderNode
+    @param {Menu.Item} menuItem Tree node to render.
+    @param {Object} [options] Options.
+        @param {Node} [options.container] `Y.Node` instance of a container to
+            which the rendered tree node should be appended.
+        @param {Boolean} [options.renderChildren=false] Whether or not to 
render
+            this node's children.
+    @return {Node} `Y.Node` instance of the rendered menu item.
+    **/
+    renderNode: function (item, options) {
+        options || (options = {});
+
+        var classNames = this.classNames,
+            htmlNode   = item._htmlNode,
+            isHidden   = item.isHidden();
+
+        // Create an HTML node for this menu item if one doesn't already exist.
+        if (!htmlNode) {
+            htmlNode = item._htmlNode = Y.Node.create(Menu.Templates.item({
+                classNames: classNames,
+                item      : item,
+                menu      : this
+            }));
+        }
+
+        // Mark the HTML node as hidden if the item is hidden.
+        htmlNode.set('aria-hidden', isHidden);
+        htmlNode.toggleClass(classNames.hidden, isHidden);
+
+        switch (item.type) {
+        case 'separator':
+            htmlNode.set('role', 'separator');
+            break;
+
+        case 'item':
+        case 'heading':
+            var labelNode = htmlNode.one('.' + classNames.label),
+                labelId   = labelNode.get('id');
+
+            labelNode.setHTML(item.label);
+
+            if (!labelId) {
+                labelId = Y.guid();
+                labelNode.set('id', labelId);
+            }
+
+            htmlNode.set('aria-labelledby', labelId);
+
+            if (item.type === 'heading') {
+                htmlNode.set('role', 'heading');
+            } else {
+                htmlNode.set('role', 'menuitem');
+
+                htmlNode.toggleClass(classNames.disabled, item.isDisabled());
+
+                if (item.canHaveChildren) {
+                    htmlNode.addClass(classNames.canHaveChildren);
+                    htmlNode.toggleClass(classNames.open, item.isOpen());
+
+                    if (item.hasChildren()) {
+                        htmlNode.addClass(classNames.hasChildren);
+
+                        if (options.renderChildren) {
+                            this.renderChildren(item, {
+                                container: htmlNode
+                            });
+                        }
+                    }
+                }
+            }
+            break;
+        }
+
+        if (options.container) {
+            options.container.append(htmlNode);
+        }
+
+        return htmlNode;
+    },
+
+    /**
+    Repositions this menu so that it is anchored to a specified node, region, 
or
+    set of pixel coordinates.
+
+    The menu will be displayed at the most advantageous position relative to 
the
+    anchor point to ensure that as much of the menu as possible is visible
+    within the viewport.
+
+    @method reposition
+    @param {Node|Number[]|Object} anchorPoint Anchor point at which this menu
+        should be positioned. The point may be specified as a `Y.Node`
+        reference, a region object, or an array of X and Y pixel coordinates.
+    @chainable
+    **/
+    reposition: function (anchorPoint) {
+        var container = this.get('container'),
+            anchorRegion, menuRegion;
+
+        if (Y.Lang.isArray(anchorPoint)) {
+            anchorRegion = {
+                bottom: anchorPoint[1],
+                left  : anchorPoint[0],
+                right : anchorPoint[0],
+                top   : anchorPoint[1]
+            };
+        } else if (anchorPoint._node) {
+            anchorRegion = anchorPoint.get('region');
+        } else {
+            anchorRegion = anchorPoint;
+        }
+
+        menuRegion = this._getSortedAnchorRegions(
+            this.get('alignments'),
+            container.get('region'),
+            anchorRegion
+        )[0].region;
+
+        container.setXY([menuRegion.left, menuRegion.top]);
+
+        return this;
+    },
+
+    /**
+    Shows this menu.
+
+    The menu will be rendered if it hasn't been rendered already.
+
+    @method show
+    @param {Object} [options] Options.
+        @param {Node|Number[]|Object} [options.anchorPoint] Anchor point at
+            which this menu should be positioned when shown. The point may be
+            specified as a `Y.Node` reference, a region object, or an array of 
X
+            and Y pixel coordinates.
+    @chainable
+    **/
+    show: function (options) {
+        if (!this.rendered) {
+            this.render();
+        }
+
+        if (options && options.anchorPoint) {
+            this.reposition(options.anchorPoint);
+        }
+
+        this.set('visible', true);
+        return this;
+    },
+
+    /**
+    Toggles the visibility of this menu, showing it if it's currently hidden or
+    hiding it if it's currently visible.
+
+    @method toggleVisible
+    @param {Object} [options] Options.
+        @param {Node|Number[]|Object} [options.anchorPoint] Anchor point at
+            which this menu should be positioned when shown. The point may be
+            specified as a `Y.Node` reference, a region object, or an array of 
X
+            and Y pixel coordinates.
+    @chainable
+    **/
+    toggleVisible: function (options) {
+        return this[this.get('visible') ? 'hide' : 'show'](options);
+    },
+
+    // -- Protected Methods 
----------------------------------------------------
+
+    /**
+    Attaches menu events.
+
+    @method _attachMenuEvents
+    @protected
+    **/
+    _attachMenuEvents: function () {
+        this._menuEvents || (this._menuEvents = []);
+
+        var classNames = this.classNames,
+            container  = this.get('container');
+
+        this._menuEvents.push(
+            this.after({
+                add              : this._afterAdd,
+                clear            : this._afterClear,
+                close            : this._afterClose,
+                disable          : this._afterDisable,
+                enable           : this._afterEnable,
+                hide             : this._afterHide,
+                open             : this._afterOpen,
+                orientationChange: this._afterOrientationChange,
+                remove           : this._afterRemove,
+                show             : this._afterShow,
+                visibleChange    : this._afterVisibleChange
+            }),
+
+            container.on('hover', this._onMenuMouseEnter, 
this._onMenuMouseLeave, this),
+
+            container.delegate('click', this._onItemClick, '.' + 
classNames.item + '>.' + classNames.label, this),
+            container.delegate('hover', this._onItemMouseEnter, 
this._onItemMouseLeave, '.' + classNames.canHaveChildren, this),
+
+            Y.one('doc').after('mousedown', this._afterDocMouseDown, this)
+        );
+    },
+
+    /**
+    Detaches menu events.
+
+    @method _detachMenuEvents
+    @protected
+    **/
+    _detachMenuEvents: function () {
+        (new Y.EventHandle(this._menuEvents)).detach();
+    },
+
+    /**
+    Returns an efficient test function that can be passed to 
`Y.Node#ancestor()`
+    to test whether a node is this menu's container.
+
+    This is broken out to make overriding easier in subclasses.
+
+    @method _getAncestorTestFn
+    @return {Function} Test function.
+    @protected
+    **/
+    _getAncestorTestFn: function () {
+        var container = this.get('container');
+
+        return function (node) {
+            return node === container;
+        };
+    },
+
+    /**
+    Given an anchor point and the regions currently occupied by a child node
+    (the node being anchored) and a parent node (the node being anchored to),
+    returns a region object representing the coordinates the anchored node will
+    occupy when anchored to the given point on the parent.
+
+    An anchor point is a string like "tl-bl", which means "anchor the top left
+    point of _nodeRegion_ to the bottom left point of _parentRegion_".
+
+    Any combination of top/bottom/left/right anchor points may be used as long
+    as they follow this format. Here are a few examples:
+
+      * `'bl-br'`: Anchor the bottom left of _nodeRegion_ to the bottom right 
of
+        _parentRegion_.
+      * `'br-bl'`: Anchor the bottom right of _nodeRegion_ to the bottom left 
of
+        _parentRegion_.
+      * `'tl-tr'`: Anchor the top left of _nodeRegion_ to the top right of
+        _parentRegion_.
+      * `'tr-tl'`: Anchor the top right of _nodeRegion_ to the top left of
+        _parentRegion_.
+
+    @method _getAnchorRegion
+    @param {String} anchor Anchor point. See above for details.
+    @param {Object} nodeRegion Region object for the node to be anchored (that
+        is, the node that will be repositioned).
+    @param {Object} parentRegion Region object for the node that will be
+        anchored to (that is, the node that will not move).
+    @return {Object} Region that will be occupied by the anchored node.
+    @protected
+    **/
+    _getAnchorRegion: function (anchor, nodeRegion, parentRegion) {
+        var region = {};
+
+        anchor.replace(/^([bt])([lr])-([bt])([lr])/i, function (match, p1, p2, 
p3, p4) {
+            var lookup = {
+                    b: 'bottom',
+                    l: 'left',
+                    r: 'right',
+                    t: 'top'
+                };
+
+            region[lookup[p1]] = parentRegion[lookup[p3]];
+            region[lookup[p2]] = parentRegion[lookup[p4]];
+        });
+
+        'bottom' in region || (region.bottom = region.top + nodeRegion.height);
+        'left' in region   || (region.left = region.right - nodeRegion.width);
+        'right' in region  || (region.right = region.left + nodeRegion.width);
+        'top' in region    || (region.top = region.bottom - nodeRegion.height);
+
+        return region;
+    },
+
+    _getSortedAnchorRegions: function (points, nodeRegion, parentRegion, 
containerRegion) {
+        containerRegion || (containerRegion = Y.DOM.viewportRegion());
+
+        // Run through each possible anchor point and test whether it would
+        // allow the submenu to be displayed fully within the viewport. Stop at
+        // the first anchor point that works.
+        var anchors = [],
+            i, len, point, region;
+
+        for (i = 0, len = points.length; i < len; i++) {
+            point = points[i];
+
+            // Allow arrays of strings or arrays of objects like {point: 
'...'}.
+            if (point.point) {
+                point = point.point;
+            }
+
+            region = this._getAnchorRegion(point, nodeRegion, parentRegion);
+
+            anchors.push({
+                point : point,
+                region: region,
+                score : this._inRegion(region, containerRegion)
+            });
+        }
+
+        // Sort the anchors in descending order by score (higher score is
+        // better).
+        anchors.sort(function (a, b) {
+            if (a.score === b.score) {
+                return 0;
+            } else if (a.score === true) {
+                return -1;
+            } else if (b.score === true) {
+                return 1;
+            } else {
+                return b.score - a.score;
+            }
+        });
+
+        // Return the sorted anchors.
+        return anchors;
+    },
+
+    /**
+    Hides the specified menu container by moving its htmlNode offscreen.
+
+    @method _hideMenu
+    @param {Menu.Item} item Menu item.
+    @param {Node} [htmlNode] HTML node for the menu item.
+    @protected
+    **/
+    _hideMenu: function (item, htmlNode) {
+        htmlNode || (htmlNode = this.getHTMLNode(item));
+
+        var childrenNode = htmlNode.one('.' + this.classNames.children);
+
+        childrenNode.setXY([-10000, -10000]);
+        delete item.data.menuAnchor;
+    },
+
+    /**
+    Returns `true` if the given _inner_ region is contained entirely within the
+    given _outer_ region. If it's not a perfect fit, returns a numerical score
+    indicating how much of the _inner_ region fits within the _outer_ region.
+    A higher score indicates a better fit.
+
+    @method _inRegion
+    @param {Object} inner Inner region.
+    @param {Object} outer Outer region.
+    @return {Boolean|Number} `true` if the _inner_ region fits entirely within
+        the _outer_ region or, if not, a numerical score indicating how much of
+        the inner region fits.
+    @protected
+    **/
+    _inRegion: function (inner, outer) {
+        if (inner.bottom <= outer.bottom
+                && inner.left >= outer.left
+                && inner.right <= outer.right
+                && inner.top >= outer.top) {
+
+            // Perfect fit!
+            return true;
+        }
+
+        // Not a perfect fit, so return the overall score of this region so we
+        // can compare it with the scores of other regions to determine the 
best
+        // possible fit.
+        return (
+            Math.min(outer.bottom - inner.bottom, 0) +
+            Math.min(inner.left - outer.left, 0) +
+            Math.min(outer.right - inner.right, 0) +
+            Math.min(inner.top - outer.top, 0)
+        );
+    },
+
+    /**
+    Intelligently positions the _htmlNode_ of the given submenu _item_ relative
+    to its parent so that as much as possible of the submenu will be visible
+    within the viewport.
+
+    @method _positionMenu
+    @param {Menu.Item} item Menu item to position.
+    @param {Node} [htmlNode] HTML node for the menu item.
+    @protected
+    **/
+    _positionMenu: function (item, htmlNode) {
+        htmlNode || (htmlNode = this.getHTMLNode(item));
+
+        var childrenNode = htmlNode.one('.' + this.classNames.children),
+            orientation  = this.get('orientation'),
+            alignments, anchors;
+
+        // If this is a top-level submenu and this menu is horizontally
+        // aligned, use `alignments`.
+        if (item.parent.isRoot() && orientation === 'horizontal') {
+            alignments = this.get('alignments');
+        } else {
+            // If this menu has a parent and the parent has stored alignment
+            // anchors, use those. Otherwise, use `subMenuAlignments`.
+            alignments = (item.parent && item.parent.data.menuAnchors) ||
+                this.get('subMenuAlignments');
+        }
+
+        anchors = this._getSortedAnchorRegions(alignments,
+            childrenNode.get('region'), htmlNode.get('region'));
+
+        if (orientation === 'vertical' || !item.parent.isRoot()) {
+            // Remember which anchors we used for this item so that we can
+            // default that anchor for submenus of this item if necessary.
+            item.data.menuAnchors = anchors;
+        }
+
+        // Position the submenu.
+        var anchorRegion = anchors[0].region;

@@ Diff output truncated at 153600 characters. @@



reply via email to

[Prev in Thread] Current Thread [Next in Thread]