Changeset 1080

Show
Ignore:
Timestamp:
08/18/06 14:50:10 (2 years ago)
Author:
paul@nafpik.com
Message:

Add synthesis for onmouseenter/onmouseleave signals on browsers that
don't support them, and the MochiKit.DOM.isChildNode function

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • mochikit/trunk/MochiKit/DOM.js

    r1079 r1080  
    4949    "createDOM", 
    5050    "createDOMFunc", 
     51    "isChildNode", 
    5152    "getNodeAttribute", 
    5253    "setNodeAttribute", 
     
    328329    }, 
    329330         
     331    /** @id MochiKit.DOM.isChildNode */ 
     332    isChildNode: function (node, maybeparent) { 
     333        var self = MochiKit.DOM; 
     334        if (typeof(node) == "string") { 
     335            node = self.getElement(node); 
     336        } 
     337        if (typeof(maybeparent) == "string") { 
     338            maybeparent = self.getElement(maybeparent); 
     339        } 
     340        while (node && node.nodeName && node.nodeName != "BODY") { 
     341            node = node.parentNode; 
     342            if (node == maybeparent) { 
     343                return true; 
     344            } 
     345        } 
     346        return false; 
     347    }, 
     348 
    330349    /** @id MochiKit.DOM.setNodeAttribute */ 
    331350    setNodeAttribute: function (node, attr, value) { 
  • mochikit/trunk/MochiKit/Signal.js

    r1064 r1080  
    538538    }, 
    539539     
     540    _browserAlreadyHasMouseEnterAndLeave: function () { 
     541        /* Until isIE() gets out of New */ 
     542        return /MSIE/.test(navigator.userAgent); 
     543    }, 
     544 
     545    _mouseEnterListener: function (src, sig, func, obj) { 
     546        var E = MochiKit.Signal.Event; 
     547        return function (nativeEvent) { 
     548            var e = new E(src, nativeEvent); 
     549            if (e.target() != src || MochiKit.DOM.isChildNode(e.relatedTarget(), this)) { 
     550                return e.stop(); 
     551            } 
     552            e.type = function () { return sig; }; 
     553            if (typeof(func) == "string") { 
     554                return obj[func].apply(obj, [e]); 
     555            } else { 
     556                return func.apply(obj, [e]); 
     557            } 
     558        }; 
     559    }, 
     560 
    540561    /** @id MochiKit.Signal.connect */ 
    541562    connect: function (src, sig, objOrFunc/* optional */, funcOrStr) { 
     
    569590         
    570591        var isDOM = !!(src.addEventListener || src.attachEvent); 
    571         var listener = self._listener(src, func, obj, isDOM); 
     592        if (isDOM && (sig === "onmouseenter" || sig === "onmouseleave") 
     593                  && !self._browserAlreadyHasMouseEnterAndLeave()) { 
     594            var listener = self._mouseEnterListener(src, sig, func, obj); 
     595            if (sig === "onmouseenter") { 
     596                sig = "onmouseover"; 
     597            } else { 
     598                sig = "onmouseout"; 
     599            } 
     600        } else { 
     601            var listener = self._listener(src, func, obj, isDOM); 
     602        } 
    572603         
    573604        if (src.addEventListener) { 
  • mochikit/trunk/doc/html/MochiKit/DOM.html

    r1059 r1080  
    55<head> 
    66<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    7 <meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" /> 
     7<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> 
    88<title>MochiKit.DOM - painless DOM manipulation API</title> 
    99 
     
    537537</blockquote> 
    538538<p> 
     539<a name="fn-ischildnode"></a> 
     540<a class="mochidef reference" href="#fn-ischildnode">isChildNode(node, maybeParent)</a>:</p> 
     541<blockquote> 
     542<p>Determine whether <tt class="docutils literal"><span class="pre">node</span></tt> is a child node of <tt class="docutils literal"><span class="pre">maybeParent</span></tt>. 
     543Returns <tt class="docutils literal"><span class="pre">true</span></tt> if so, and <tt class="docutils literal"><span class="pre">false</span></tt> if not. A node is considered 
     544a child node of itself for the purposes of this function.</p> 
     545<p>If either <tt class="docutils literal"><span class="pre">node</span></tt> or <tt class="docutils literal"><span class="pre">maybeParent</span></tt> are strings, the related 
     546nodes will be looked up with <a class="mochiref reference" href="#fn-getelement">getElement</a>.</p> 
     547<dl class="docutils"> 
     548<dt><em>Availability</em>:</dt> 
     549<dd>Available in MochiKit 1.4+</dd> 
     550</dl> 
     551</blockquote> 
     552<p> 
    539553<a name="fn-registerdomconverter"></a> 
    540554<a class="mochidef reference" href="#fn-registerdomconverter">registerDOMConverter(name, check, wrap[, override])</a>:</p> 
  • mochikit/trunk/doc/html/MochiKit/Signal.html

    r1075 r1080  
    55<head> 
    66<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    7 <meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" /> 
     7<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> 
    88<title>MochiKit.Signal - Simple universal event handling</title> 
    99 
     
    124124</div> 
    125125<div class="section"> 
     126<h2><a id="synthesized-events" name="synthesized-events">Synthesized Events</a></h2> 
     127<p>Certain events supported by MochiKit are not generated natively by all 
     128browsers. MochiKit can synthesize these events even for non-supporting 
     129browsers, however, by watching for related events and triggering the 
     130appropriate signals at the right times.</p> 
     131<p>These events include:</p> 
     132<p><tt class="docutils literal"><span class="pre">onmouseenter</span></tt></p> 
     133<blockquote> 
     134<p>Similar to <tt class="docutils literal"><span class="pre">'onmouseover'</span></tt>, but does not &quot;bubble&quot; up to parent 
     135nodes. Such bubbling is often a cause of confusion. On an 
     136<tt class="docutils literal"><span class="pre">'onmouseenter'</span></tt> event, you can be certain that the mouse has 
     137left the node attached to the event.</p> 
     138<dl class="docutils"> 
     139<dt><em>Availability:</em></dt> 
     140<dd>Available in MochiKit 1.4+</dd> 
     141</dl> 
     142</blockquote> 
     143<p><tt class="docutils literal"><span class="pre">onmouseleave</span></tt></p> 
     144<blockquote> 
     145<p>Similar to <tt class="docutils literal"><span class="pre">'onmouseout'</span></tt>, but does not &quot;bubble&quot; up to parent 
     146nodes. This is the analog to <tt class="docutils literal"><span class="pre">'onmouseenter'</span></tt>.</p> 
     147<dl class="docutils"> 
     148<dt><em>Availability:</em></dt> 
     149<dd>Available in MochiKit 1.4+</dd> 
     150</dl> 
     151</blockquote> 
     152</div> 
     153<div class="section"> 
    126154<h2><a id="using-signal-for-non-dom-objects" name="using-signal-for-non-dom-objects">Using Signal for non-DOM objects</a></h2> 
    127155<p>Signals are triggered with the <a class="mochiref reference" href="#fn-signal">signal(src, 'signal', ...)</a> 
  • mochikit/trunk/doc/html/MochiKit/VersionHistory.html

    r1079 r1080  
    55<head> 
    66<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    7 <meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" /> 
     7<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> 
    88<title></title> 
    99 
     
    4040<li>MochiKit.DOM's MochiKit.Iter dependency is now optional</li> 
    4141<li>Added expand all link to the documentation index</li> 
     42<li>Added MochiKit.DOM.isChildNode</li> 
     43<li>Added synthesizing for onmouseenter/onmouseleave</li> 
    4244</ul> 
    4345<p>2006-04-29      v1.3.1 (bug fix release)</p> 
  • mochikit/trunk/doc/html/MochiKit/index.html

    r1079 r1080  
    55<head> 
    66<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    7 <meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" /> 
     7<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> 
    88<title>MochiKit Documentation Index</title> 
    99 
     
    9393<li>MochiKit.DOM's MochiKit.Iter dependency is now optional</li> 
    9494<li>Added expand all link to the documentation index</li> 
     95<li>Added MochiKit.DOM.isChildNode</li> 
     96<li>Added synthesizing for onmouseenter/onmouseleave</li> 
    9597</ul> 
    9698<p>2006-04-29      v1.3.1 (bug fix release)</p> 
  • mochikit/trunk/doc/rst/MochiKit/DOM.rst

    r1059 r1080  
    517517 
    518518 
     519:mochidef:`isChildNode(node, maybeParent)`: 
     520 
     521    Determine whether ``node`` is a child node of ``maybeParent``. 
     522    Returns ``true`` if so, and ``false`` if not. A node is considered 
     523    a child node of itself for the purposes of this function. 
     524 
     525    If either ``node`` or ``maybeParent`` are strings, the related 
     526    nodes will be looked up with :mochiref:`getElement`. 
     527 
     528    *Availability*: 
     529        Available in MochiKit 1.4+ 
     530 
     531 
    519532:mochidef:`registerDOMConverter(name, check, wrap[, override])`: 
    520533 
  • mochikit/trunk/doc/rst/MochiKit/Signal.rst

    r1075 r1080  
    138138 
    139139 
     140Synthesized Events 
     141------------------ 
     142 
     143Certain events supported by MochiKit are not generated natively by all 
     144browsers. MochiKit can synthesize these events even for non-supporting 
     145browsers, however, by watching for related events and triggering the 
     146appropriate signals at the right times. 
     147 
     148These events include: 
     149 
     150``onmouseenter`` 
     151 
     152    Similar to ``'onmouseover'``, but does not "bubble" up to parent 
     153    nodes. Such bubbling is often a cause of confusion. On an 
     154    ``'onmouseenter'`` event, you can be certain that the mouse has 
     155    left the node attached to the event. 
     156 
     157    *Availability:* 
     158        Available in MochiKit 1.4+ 
     159 
     160``onmouseleave`` 
     161 
     162    Similar to ``'onmouseout'``, but does not "bubble" up to parent 
     163    nodes. This is the analog to ``'onmouseenter'``. 
     164 
     165    *Availability:* 
     166        Available in MochiKit 1.4+ 
     167 
     168 
    140169Using Signal for non-DOM objects 
    141170-------------------------------- 
  • mochikit/trunk/doc/rst/MochiKit/VersionHistory.rst

    r1079 r1080  
    2525- MochiKit.DOM's MochiKit.Iter dependency is now optional 
    2626- Added expand all link to the documentation index 
     27- Added MochiKit.DOM.isChildNode 
     28- Added synthesizing for onmouseenter/onmouseleave 
    2729 
    28302006-04-29      v1.3.1 (bug fix release) 
  • mochikit/trunk/packed/MochiKit/MochiKit.js

    r1079 r1080  
    26092609return this.__repr__(); 
    26102610}; 
    2611 MochiKit.DOM.EXPORT=["removeEmptyTextNodes","formContents","currentWindow","currentDocument","withWindow","withDocument","registerDOMConverter","coerceToDOM","createDOM","createDOMFunc","getNodeAttribute","setNodeAttribute","updateNodeAttributes","appendChildNodes","replaceChildNodes","removeElement","swapDOM","BUTTON","TT","PRE","H1","H2","H3","BR","CANVAS","HR","LABEL","TEXTAREA","FORM","STRONG","SELECT","OPTION","OPTGROUP","LEGEND","FIELDSET","P","UL","OL","LI","TD","TR","THEAD","TBODY","TFOOT","TABLE","TH","INPUT","SPAN","A","DIV","IMG","getElement","$","getElementsByTagAndClassName","addToCallStack","addLoadEvent","focusOnLoad","setElementClass","toggleElementClass","addElementClass","removeElementClass","swapElementClass","hasElementClass","escapeHTML","toHTML","emitHTML","scrapeText"]; 
     2611MochiKit.DOM.EXPORT=["removeEmptyTextNodes","formContents","currentWindow","currentDocument","withWindow","withDocument","registerDOMConverter","coerceToDOM","createDOM","createDOMFunc","isChildNode","getNodeAttribute","setNodeAttribute","updateNodeAttributes","appendChildNodes","replaceChildNodes","removeElement","swapDOM","BUTTON","TT","PRE","H1","H2","H3","BR","CANVAS","HR","LABEL","TEXTAREA","FORM","STRONG","SELECT","OPTION","OPTGROUP","LEGEND","FIELDSET","P","UL","OL","LI","TD","TR","THEAD","TBODY","TFOOT","TABLE","TH","INPUT","SPAN","A","DIV","IMG","getElement","$","getElementsByTagAndClassName","addToCallStack","addLoadEvent","focusOnLoad","setElementClass","toggleElementClass","addElementClass","removeElementClass","swapElementClass","hasElementClass","escapeHTML","toHTML","emitHTML","scrapeText"]; 
    26122612MochiKit.DOM.EXPORT_OK=["domConverters"]; 
    26132613MochiKit.DOM.DEPRECATED=[["computedStyle","MochiKit.Style.computedStyle","1.4"],["elementDimensions","MochiKit.Style.getElementDimensions","1.4"],["elementPosition","MochiKit.Style.getElementPosition","1.4"],["hideElement","MochiKit.Style.hideElement","1.4"],["setElementDimensions","MochiKit.Style.setElementDimensions","1.4"],["setElementPosition","MochiKit.Style.setElementPosition","1.4"],["setDisplayForElement","MochiKit.Style.setDisplayForElement","1.4"],["setOpacity","MochiKit.Style.setOpacity","1.4"],["showElement","MochiKit.Style.showElement","1.4"],["Coordinates","MochiKit.Style.Coordinates","1.4"],["Dimensions","MochiKit.Style.Dimensions","1.4"]]; 
     
    27672767} 
    27682768return undefined; 
    2769 },setNodeAttribute:function(node,attr,_350){ 
     2769},isChildNode:function(node,_349){ 
     2770var self=MochiKit.DOM; 
     2771if(typeof (node)=="string"){ 
     2772node=self.getElement(node); 
     2773
     2774if(typeof (_349)=="string"){ 
     2775_349=self.getElement(_349); 
     2776
     2777while(node&&node.nodeName&&node.nodeName!="BODY"){ 
     2778node=node.parentNode; 
     2779if(node==_349){ 
     2780return true; 
     2781
     2782
     2783return false; 
     2784},setNodeAttribute:function(node,attr,_351){ 
    27702785var o={}; 
    2771 o[attr]=_350
     2786o[attr]=_351
    27722787try{ 
    27732788return MochiKit.DOM.updateNodeAttributes(node,o); 
     
    27782793},getNodeAttribute:function(node,attr){ 
    27792794var self=MochiKit.DOM; 
    2780 var _351=self.attributeArray.renames[attr]; 
     2795var _352=self.attributeArray.renames[attr]; 
    27812796node=self.getElement(node); 
    27822797try{ 
    2783 if(_351){ 
    2784 return node[_351]; 
     2798if(_352){ 
     2799return node[_352]; 
    27852800} 
    27862801return node.getAttribute(attr); 
     
    27892804} 
    27902805return null; 
    2791 },updateNodeAttributes:function(node,_352){ 
     2806},updateNodeAttributes:function(node,_353){ 
    27922807var elem=node; 
    27932808var self=MochiKit.DOM; 
     
    27952810elem=self.getElement(node); 
    27962811} 
    2797 if(_352){ 
    2798 var _353=MochiKit.Base.updatetree; 
     2812if(_353){ 
     2813var _354=MochiKit.Base.updatetree; 
    27992814if(self.attributeArray.compliant){ 
    2800 for(var k in _352){ 
    2801 var v=_352[k]; 
     2815for(var k in _353){ 
     2816var v=_353[k]; 
    28022817if(typeof (v)=="object"&&typeof (elem[k])=="object"){ 
    2803 _353(elem[k],v); 
     2818_354(elem[k],v); 
    28042819}else{ 
    28052820if(k.substring(0,2)=="on"){ 
     
    28142829} 
    28152830}else{ 
    2816 var _354=self.attributeArray.renames; 
    2817 for(k in _352){ 
    2818 v=_352[k]; 
    2819 var _355=_354[k]; 
     2831var _355=self.attributeArray.renames; 
     2832for(k in _353){ 
     2833v=_353[k]; 
     2834var _356=_355[k]; 
    28202835if(k=="style"&&typeof (v)=="string"){ 
    28212836elem.style.cssText=v; 
    28222837}else{ 
    2823 if(typeof (_355)=="string"){ 
    2824 elem[_355]=v; 
     2838if(typeof (_356)=="string"){ 
     2839elem[_356]=v; 
    28252840}else{ 
    28262841if(typeof (elem[k])=="object"&&typeof (v)=="object"){ 
    2827 _353(elem[k],v); 
     2842_354(elem[k],v); 
    28282843}else{ 
    28292844if(k.substring(0,2)=="on"){ 
     
    28482863elem=self.getElement(node); 
    28492864} 
    2850 var _356=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)]; 
    2851 var _357=MochiKit.Base.concat; 
    2852 while(_356.length){ 
    2853 var n=_356.shift(); 
     2865var _357=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)]; 
     2866var _358=MochiKit.Base.concat; 
     2867while(_357.length){ 
     2868var n=_357.shift(); 
    28542869if(typeof (n)=="undefined"||n===null){ 
    28552870}else{ 
     
    28572872elem.appendChild(n); 
    28582873}else{ 
    2859 _356=_357(n,_356); 
     2874_357=_358(n,_357); 
    28602875} 
    28612876} 
     
    28692884arguments[0]=elem; 
    28702885} 
    2871 var _358
    2872 while((_358=elem.firstChild)){ 
    2873 elem.removeChild(_358); 
     2886var _359
     2887while((_359=elem.firstChild)){ 
     2888elem.removeChild(_359); 
    28742889} 
    28752890if(arguments.length<2){ 
     
    28782893return self.appendChildNodes.apply(this,arguments); 
    28792894} 
    2880 },createDOM:function(name,_359){ 
     2895},createDOM:function(name,_360){ 
    28812896var elem; 
    28822897var self=MochiKit.DOM; 
    28832898var m=MochiKit.Base; 
    2884 if(typeof (_359)=="string"||typeof (_359)=="number"){ 
     2899if(typeof (_360)=="string"||typeof (_360)=="number"){ 
    28852900var args=m.extend([name,null],arguments,1); 
    28862901return arguments.callee.apply(this,args); 
    28872902} 
    28882903if(typeof (name)=="string"){ 
    2889 if(_359&&!self.attributeArray.compliant){ 
    2890 var _360=""; 
    2891 if("name" in _359){ 
    2892 _360+=" name=\""+self.escapeHTML(_359.name)+"\""; 
    2893 
    2894 if(name=="input"&&"type" in _359){ 
    2895 _360+=" type=\""+self.escapeHTML(_359.type)+"\""; 
     2904if(_360&&!self.attributeArray.compliant){ 
     2905var _361=""; 
     2906if("name" in _360){ 
     2907_361+=" name=\""+self.escapeHTML(_360.name)+"\""; 
     2908
     2909if(name=="input"&&"type" in _360){ 
     2910_361+=" type=\""+self.escapeHTML(_360.type)+"\""; 
     2911
     2912if(_361){ 
     2913name="<"+name+_361+">"; 
     2914
     2915
     2916elem=self._document.createElement(name); 
     2917}else{ 
     2918elem=name; 
    28962919} 
    28972920if(_360){ 
    2898 name="<"+name+_360+">"; 
    2899 
    2900 
    2901 elem=self._document.createElement(name); 
    2902 }else{ 
    2903 elem=name; 
    2904 
    2905 if(_359){ 
    2906 self.updateNodeAttributes(elem,_359); 
     2921self.updateNodeAttributes(elem,_360); 
    29072922} 
    29082923if(arguments.length<=2){ 
     
    29222937var self=MochiKit.DOM; 
    29232938dest=self.getElement(dest); 
    2924 var _363=dest.parentNode; 
     2939var _364=dest.parentNode; 
    29252940if(src){ 
    29262941src=self.getElement(src); 
    2927 _363.replaceChild(src,dest); 
    2928 }else{ 
    2929 _363.removeChild(dest); 
     2942_364.replaceChild(src,dest); 
     2943}else{ 
     2944_364.removeChild(dest); 
    29302945} 
    29312946return src; 
     
    29372952return MochiKit.Base.map(self.getElement,arguments); 
    29382953} 
    2939 },getElementsByTagAndClassName:function(_365,_366,_367){ 
     2954},getElementsByTagAndClassName:function(_366,_367,_368){ 
    29402955var self=MochiKit.DOM; 
    2941 if(typeof (_365)=="undefined"||_365===null){ 
    2942 _365="*"; 
    2943 
     2956if(typeof (_366)=="undefined"||_366===null){ 
     2957_366="*"; 
     2958
     2959if(typeof (_368)=="undefined"||_368===null){ 
     2960_368=self._document; 
     2961
     2962_368=self.getElement(_368); 
     2963var _369=(_368.getElementsByTagName(_366)||self._document.all); 
    29442964if(typeof (_367)=="undefined"||_367===null){ 
    2945 _367=self._document; 
    2946 
    2947 _367=self.getElement(_367); 
    2948 var _368=(_367.getElementsByTagName(_365)||self._document.all); 
    2949 if(typeof (_366)=="undefined"||_366===null){ 
    2950 return MochiKit.Base.extend(null,_368); 
    2951 
    2952 var _369=[]; 
    2953 for(var i=0;i<_368.length;i++){ 
    2954 var _370=_368[i]; 
    2955 var cls=_370.className; 
     2965return MochiKit.Base.extend(null,_369); 
     2966
     2967var _370=[]; 
     2968for(var i=0;i<_369.length;i++){ 
     2969var _371=_369[i]; 
     2970var cls=_371.className; 
    29562971if(!cls){ 
    29572972continue; 
    29582973} 
    2959 var _372=cls.split(" "); 
    2960 for(var j=0;j<_372.length;j++){ 
    2961 if(_372[j]==_366){ 
    2962 _369.push(_370); 
     2974var _373=cls.split(" "); 
     2975for(var j=0;j<_373.length;j++){ 
     2976if(_373[j]==_367){ 
     2977_370.push(_371); 
    29632978break; 
    29642979} 
    29652980} 
    29662981} 
    2967 return _369
     2982return _370
    29682983},_newCallStack:function(path,once){ 
    29692984var rval=function(){ 
    2970 var _375=arguments.callee.callStack; 
    2971 for(var i=0;i<_375.length;i++){ 
    2972 if(_375[i].apply(this,arguments)===false){ 
     2985var _376=arguments.callee.callStack; 
     2986for(var i=0;i<_376.length;i++){ 
     2987if(_376[i].apply(this,arguments)===false){ 
    29732988break; 
    29742989} 
     
    29842999rval.callStack=[]; 
    29853000return rval; 
    2986 },addToCallStack:function(_376,path,func,once){ 
     3001},addToCallStack:function(_377,path,func,once){ 
    29873002var self=MochiKit.DOM; 
    2988 var _377=_376[path]; 
    2989 var _378=_377
    2990 if(!(typeof (_377)=="function"&&typeof (_377.callStack)=="object"&&_377.callStack!==null)){ 
    2991 _378=self._newCallStack(path,once); 
    2992 if(typeof (_377)=="function"){ 
    2993 _378.callStack.push(_377); 
    2994 } 
    2995 _376[path]=_378
    2996 } 
    2997 _378.callStack.push(func); 
     3003var _378=_377[path]; 
     3004var _379=_378
     3005if(!(typeof (_378)=="function"&&typeof (_378.callStack)=="object"&&_378.callStack!==null)){ 
     3006_379=self._newCallStack(path,once); 
     3007if(typeof (_378)=="function"){ 
     3008_379.callStack.push(_378); 
     3009} 
     3010_377[path]=_379
     3011} 
     3012_379.callStack.push(func); 
    29983013},addLoadEvent:function(func){ 
    29993014var self=MochiKit.DOM; 
    30003015self.addToCallStack(self._window,"onload",func,true); 
    3001 },focusOnLoad:function(_379){ 
     3016},focusOnLoad:function(_380){ 
    30023017var self=MochiKit.DOM; 
    30033018self.addLoadEvent(function(){ 
    3004 _379=self.getElement(_379); 
    3005 if(_379){ 
    3006 _379.focus(); 
     3019_380=self.getElement(_380); 
     3020if(_380){ 
     3021_380.focus(); 
    30073022} 
    30083023}); 
    3009 },setElementClass:function(_380,_381){ 
     3024},setElementClass:function(_381,_382){ 
    30103025var self=MochiKit.DOM; 
    3011 var obj=self.getElement(_380); 
     3026var obj=self.getElement(_381); 
    30123027if(self.attributeArray.compliant){ 
    3013 obj.setAttribute("class",_381); 
    3014 }else{ 
    3015 obj.setAttribute("className",_381); 
    3016 } 
    3017 },toggleElementClass:function(_382){ 
     3028obj.setAttribute("class",_382); 
     3029}else{ 
     3030obj.setAttribute("className",_382); 
     3031} 
     3032},toggleElementClass:function(_383){ 
    30183033var self=MochiKit.DOM; 
    30193034for(var i=1;i<arguments.length;i++){ 
    30203035var obj=self.getElement(arguments[i]); 
    3021 if(!self.addElementClass(obj,_382)){ 
    3022 self.removeElementClass(obj,_382); 
    3023 } 
    3024 } 
    3025 },addElementClass:function(_383,_384){ 
     3036if(!self.addElementClass(obj,_383)){ 
     3037self.removeElementClass(obj,_383); 
     3038} 
     3039} 
     3040},addElementClass:function(_384,_385){ 
    30263041var self=MochiKit.DOM; 
    3027 var obj=self.getElement(_383); 
     3042var obj=self.getElement(_384); 
    30283043var cls=obj.className; 
    30293044if(cls==undefined||cls.length===0){ 
    3030 self.setElementClass(obj,_384); 
     3045self.setElementClass(obj,_385); 
    30313046return true; 
    30323047} 
    3033 if(cls==_384){ 
     3048if(cls==_385){ 
    30343049return false; 
    30353050} 
    3036 var _385=cls.split(" "); 
    3037 for(var i=0;i<_385.length;i++){ 
    3038 if(_385[i]==_384){ 
     3051var _386=cls.split(" "); 
     3052for(var i=0;i<_386.length;i++){ 
     3053if(_386[i]==_385){ 
    30393054return false; 
    30403055} 
    30413056} 
    3042 self.setElementClass(obj,cls+" "+_384); 
     3057self.setElementClass(obj,cls+" "+_385); 
    30433058return true; 
    3044 },removeElementClass:function(_386,_387){ 
     3059},removeElementClass:function(_387,_388){ 
    30453060var self=MochiKit.DOM; 
    3046 var obj=self.getElement(_386); 
     3061var obj=self.getElement(_387); 
    30473062var cls=obj.className; 
    30483063if(cls==undefined||cls.length===0){ 
    30493064return false; 
    30503065} 
    3051 if(cls==_387){ 
     3066if(cls==_388){ 
    30523067self.setElementClass(obj,""); 
    30533068return true; 
    30543069} 
    3055 var _388=cls.split(" "); 
    3056 for(var i=0;i<_388.length;i++){ 
    3057 if(_388[i]==_387){ 
    3058 _388.splice(i,1); 
    3059 self.setElementClass(obj,_388.join(" ")); 
     3070var _389=cls.split(" "); 
     3071for(var i=0;i<_389.length;i++){ 
     3072if(_389[i]==_388){ 
     3073_389.splice(i,1); 
     3074self.setElementClass(obj,_389.join(" ")); 
    30603075return true; 
    30613076} 
    30623077} 
    30633078return false; 
    3064 },swapElementClass:function(_389,_390,_391){ 
    3065 var obj=MochiKit.DOM.getElement(_389); 
    3066 var res=MochiKit.DOM.removeElementClass(obj,_390); 
     3079},swapElementClass:function(_390,_391,_392){ 
     3080var obj=MochiKit.DOM.getElement(_390); 
     3081var res=MochiKit.DOM.removeElementClass(obj,_391); 
    30673082if(res){ 
    3068 MochiKit.DOM.addElementClass(obj,_391); 
     3083MochiKit.DOM.addElementClass(obj,_392); 
    30693084} 
    30703085return res; 
    3071 },hasElementClass:function(_392,_393){ 
    3072 var obj=MochiKit.DOM.getElement(_392); 
     3086},hasElementClass:function(_393,_394){ 
     3087var obj=MochiKit.DOM.getElement(_393); 
    30733088var cls=obj.className; 
    30743089if(!cls){ 
    30753090return false; 
    30763091} 
    3077 var _394=cls.split(" "); 
     3092var _395=cls.split(" "); 
    30783093for(var i=1;i<arguments.length;i++){ 
    30793094var good=false; 
    3080 for(var j=0;j<_394.length;j++){ 
    3081 if(_394[j]==arguments[i]){ 
     3095for(var j=0;j<_395.length;j++){ 
     3096if(_395[j]==arguments[i]){ 
    30823097good=true; 
    30833098break; 
     
    30973112lst=[]; 
    30983113} 
    3099 var _397=[dom]; 
     3114var _398=[dom]; 
    31003115var self=MochiKit.DOM; 
    3101 var _398=self.escapeHTML; 
    3102 var _399=self.attributeArray; 
    3103 while(_397.length){ 
    3104 dom=_397.pop(); 
     3116var _399=self.escapeHTML; 
     3117var _400=self.attributeArray; 
     3118while(_398.length){ 
     3119dom=_398.pop(); 
    31053120if(typeof (dom)=="string"){ 
    31063121lst.push(dom); 
     
    31083123if(dom.nodeType==1){ 
    31093124lst.push("<"+dom.nodeName.toLowerCase()); 
    3110 var _400=[]; 
    3111 var _401=_399(dom); 
    3112 for(var i=0;i<_401.length;i++){ 
    3113 var a=_401[i]; 
    3114 _400.push([" ",a.name,"=\"",_398(a.value),"\""]); 
    3115 } 
    3116 _400.sort(); 
    3117 for(i=0;i<_400.length;i++){ 
    3118 var _402=_400[i]; 
    3119 for(var j=0;j<_402.length;j++){ 
    3120 lst.push(_402[j]); 
     3125var _401=[]; 
     3126var _402=_400(dom); 
     3127for(var i=0;i<_402.length;i++){ 
     3128var a=_402[i]; 
     3129_401.push([" ",a.name,"=\"",_399(a.value),"\""]); 
     3130} 
     3131_401.sort(); 
     3132for(i=0;i<_401.length;i++){ 
     3133var _403=_401[i]; 
     3134for(var j=0;j<_403.length;j++){ 
     3135lst.push(_403[j]); 
    31213136} 
    31223137} 
    31233138if(dom.hasChildNodes()){ 
    31243139lst.push(">"); 
    3125 _397.push("</"+dom.nodeName.toLowerCase()+">"); 
    3126 var _403=dom.childNodes; 
    3127 for(i=_403.length-1;i>=0;i--){ 
    3128 _397.push(_403[i]); 
     3140_398.push("</"+dom.nodeName.toLowerCase()+">"); 
     3141var _404=dom.childNodes; 
     3142for(i=_404.length-1;i>=0;i--){ 
     3143_398.push(_404[i]); 
    31293144} 
    31303145}else{ 
     
    31333148}else{ 
    31343149if(dom.nodeType==3){ 
    3135 lst.push(_398(dom.nodeValue)); 
     3150lst.push(_399(dom.nodeValue)); 
    31363151} 
    31373152} 
     
    31393154} 
    31403155return lst; 
    3141 },scrapeText:function(node,_404){ 
     3156},scrapeText:function(node,_405){ 
    31423157var rval=[]; 
    31433158(function(node){ 
     
    31483163} 
    31493164} 
    3150 var _406=node.nodeValue; 
    3151 if(typeof (_406)=="string"){ 
    3152 rval.push(_406); 
     3165var _407=node.nodeValue; 
     3166if(typeof (_407)=="string"){ 
     3167rval.push(_407); 
    31533168} 
    31543169})(MochiKit.DOM.getElement(node)); 
    3155 if(_404){ 
     3170if(_405){ 
    31563171return rval; 
    31573172}else{ 
    31583173return rval.join(""); 
    31593174} 
    3160 },removeEmptyTextNodes:function(_407){ 
    3161 _407=MochiKit.DOM.getElement(_407); 
    3162 for(var i=0;i<_407.childNodes.length;i++){ 
    3163 var node=_407.childNodes[i]; 
     3175},removeEmptyTextNodes:function(_408){ 
     3176_408=MochiKit.DOM.getElement(_408); 
     3177for(var i=0;i<_408.childNodes.length;i++){ 
     3178var node=_408.childNodes[i]; 
    31643179if(node.nodeType==3&&!/\S/.test(node.nodeValue)){ 
    31653180node.parentNode.removeChild(node); 
     
    31773192this._window=win; 
    31783193this.domConverters=new m.AdapterRegistry(); 
    3179 var _408=this._document.createElement("span"); 
    3180 var _409
    3181 if(_408&&_408.attributes&&_408.attributes.length>0){ 
    3182 var _410=m.filter; 
    3183 _409=function(node){ 
    3184 return _410(_409.ignoreAttrFilter,node.attributes); 
    3185 }; 
    3186 _409.ignoreAttr={}; 
    3187 var _411=_408.attributes; 
    3188 var _412=_409.ignoreAttr; 
    3189 for(var i=0;i<_411.length;i++){ 
    3190 var a=_411[i]; 
    3191 _412[a.name]=a.value; 
    3192 } 
    3193 _409.ignoreAttrFilter=function(a){ 
    3194 return (_409.ignoreAttr[a.name]!=a.value); 
    3195 }; 
    3196 _409.compliant=false; 
    3197 _409.renames={"class":"className","checked":"defaultChecked","usemap":"useMap","for":"htmlFor","readonly":"readOnly"}; 
    3198 }else{ 
    3199 _409=function(node){ 
     3194var _409=this._document.createElement("span"); 
     3195var _410
     3196if(_409&&_409.attributes&&_409.attributes.length>0){ 
     3197var _411=m.filter; 
     3198_410=function(node){ 
     3199return _411(_410.ignoreAttrFilter,node.attributes); 
     3200}; 
     3201_410.ignoreAttr={}; 
     3202var _412=_409.attributes; 
     3203var _413=_410.ignoreAttr; 
     3204for(var i=0;i<_412.length;i++){ 
     3205var a=_412[i]; 
     3206_413[a.name]=a.value; 
     3207} 
     3208_410.ignoreAttrFilter=function(a){ 
     3209return (_410.ignoreAttr[a.name]!=a.value); 
     3210}; 
     3211_410.compliant=false; 
     3212_410.renames={"class":"className","checked":"defaultChecked","usemap":"useMap","for":"htmlFor","readonly":"readOnly"}; 
     3213}else{ 
     3214_410=function(node){ 
    32003215return node.attributes; 
    32013216}; 
    3202 _409.compliant=true; 
    3203 _409.renames={}; 
    3204 } 
    3205 this.attributeArray=_409
    3206 var _413=function(_414,arr){ 
    3207 var _415=arr[1].split("."); 
     3217_410.compliant=true; 
     3218_410.renames={}; 
     3219} 
     3220this.attributeArray=_410
     3221var _414=function(_415,arr){ 
     3222var _416=arr[1].split("."); 
    32083223var str=""; 
    32093224var obj={}; 
    3210 str+="if (!MochiKit."+_415[1]+") { throw new Error(\""; 
     3225str+="if (!MochiKit."+_416[1]+") { throw new Error(\""; 
    32113226str+="This function has been deprecated and depends on MochiKit."; 
    3212 str+=_415[1]+".\");}"; 
    3213 str+="return MochiKit."+_415[1]+"."+arr[0]; 
     3227str+=_416[1]+".\");}"; 
     3228str+="return MochiKit."+_416[1]+"."+arr[0]; 
    32143229str+=".apply(this, arguments);"; 
    3215 obj[_415[2]]=new Function(str); 
    3216 MochiKit.Base.update(MochiKit[_414],obj); 
     3230obj[_416[2]]=new Function(str); 
     3231MochiKit.Base.update(MochiKit[_415],obj); 
    32173232}; 
    32183233for(var i;i<MochiKit.DOM.DEPRECATED.length;i++){ 
    3219 _413("DOM",MochiKit.DOM.DEPRECATED[i]); 
    3220 } 
    3221 var _416=this.createDOMFunc; 
    3222 this.UL=_416("ul"); 
    3223 this.OL=_416("ol"); 
    3224 this.LI=_416("li"); 
    3225 this.TD=_416("td"); 
    3226 this.TR=_416("tr"); 
    3227 this.TBODY=_416("tbody"); 
    3228 this.THEAD=_416("thead"); 
    3229 this.TFOOT=_416("tfoot"); 
    3230 this.TABLE=_416("table"); 
    3231 this.TH=_416("th"); 
    3232 this.INPUT=_416("input"); 
    3233 this.SPAN=_416("span"); 
    3234 this.A=_416("a"); 
    3235 this.DIV=_416("div"); 
    3236 this.IMG=_416("img"); 
    3237 this.BUTTON=_416("button"); 
    3238 this.TT=_416("tt"); 
    3239 this.PRE=_416("pre"); 
    3240 this.H1=_416("h1"); 
    3241 this.H2=_416("h2"); 
    3242 this.H3=_416("h3"); 
    3243 this.BR=_416("br"); 
    3244 this.HR=_416("hr"); 
    3245 this.LABEL=_416("label"); 
    3246 this.TEXTAREA=_416("textarea"); 
    3247 this.FORM=_416("form"); 
    3248 this.P=_416("p"); 
    3249 this.SELECT=_416("select"); 
    3250 this.OPTION=_416("option"); 
    3251 this.OPTGROUP=_416("optgroup"); 
    3252 this.LEGEND=_416("legend"); 
    3253 this.FIELDSET=_416("fieldset"); 
    3254 this.STRONG=_416("strong"); 
    3255 this.CANVAS=_416("canvas"); 
     3234_414("DOM",MochiKit.DOM.DEPRECATED[i]); 
     3235} 
     3236var _417=this.createDOMFunc; 
     3237this.UL=_417("ul"); 
     3238this.OL=_417("ol"); 
     3239this.LI=_417("li"); 
     3240this.TD=_417("td"); 
     3241this.TR=_417("tr"); 
     3242this.TBODY=_417("tbody"); 
     3243this.THEAD=_417("thead"); 
     3244this.TFOOT=_417("tfoot"); 
     3245this.TABLE=_417("table"); 
     3246this.TH=_417("th"); 
     3247this.INPUT=_417("input"); 
     3248this.SPAN=_417("span"); 
     3249this.A=_417("a"); 
     3250this.DIV=_417("div"); 
     3251this.IMG=_417("img"); 
     3252this.BUTTON=_417("button"); 
     3253this.TT=_417("tt"); 
     3254this.PRE=_417("pre"); 
     3255this.H1=_417("h1"); 
     3256this.H2=_417("h2"); 
     3257this.H3=_417("h3"); 
     3258this.BR=_417("br"); 
     3259this.HR=_417("hr"); 
     3260this.LABEL=_417("label"); 
     3261this.TEXTAREA=_417("textarea"); 
     3262this.FORM=_417("form"); 
     3263this.P=_417("p"); 
     3264this.SELECT=_417("select"); 
     3265this.OPTION=_417("option"); 
     3266this.OPTGROUP=_417("optgroup"); 
     3267this.LEGEND=_417("legend"); 
     3268this.FIELDSET=_417("fieldset"); 
     3269this.STRONG=_417("strong"); 
     3270this.CANVAS=_417("canvas"); 
    32563271this.$=this.getElement; 
    32573272this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; 
     
    33233338return this.__repr__(); 
    33243339}; 
    3325 MochiKit.Base.update(MochiKit.Style,{computedStyle:function(elem,_421){ 
     3340MochiKit.Base.update(MochiKit.Style,{computedStyle:function(elem,_422){ 
    33263341var dom=MochiKit.DOM; 
    33273342var d=dom._document; 
    33283343elem=dom.getElement(elem); 
    3329 _421=MochiKit.Base.camelize(_421); 
     3344_422=MochiKit.Base.camelize(_422); 
    33303345if(!elem||elem==d){ 
    33313346return undefined; 
    33323347} 
    3333 if(_421=="opacity"&&elem.filters){ 
     3348if(_422=="opacity"&&elem.filters){ 
    33343349try{ 
    33353350return elem.filters.item("DXImageTransform.Microsoft.Alpha").opacity/100; 
     
    33443359} 
    33453360if(elem.currentStyle){ 
    3346 return elem.currentStyle[_421]; 
     3361return elem.currentStyle[_422]; 
    33473362} 
    33483363if(typeof (d.defaultView)=="undefined"){ 
     
    33523367return undefined; 
    33533368} 
    3354 var _422=d.defaultView.getComputedStyle(elem,null); 
    3355 if(typeof (_422)=="undefined"||_422===null){ 
     3369var _423=d.defaultView.getComputedStyle(elem,null); 
     3370if(typeof (_423)=="undefined"||_423===null){ 
    33563371return undefined; 
    33573372} 
    3358 var _423=_421.replace(/([A-Z])/g,"-$1").toLowerCase(); 
    3359 return _422.getPropertyValue(_423); 
     3373var _424=_422.replace(/([A-Z])/g,"-$1").toLowerCase(); 
     3374return _423.getPropertyValue(_424); 
    33603375},setOpacity:function(elem,o){ 
    33613376elem=MochiKit.DOM.getElement(elem); 
    33623377MochiKit.DOM.updateNodeAttributes(elem,{"style":{"opacity":o,"-moz-opacity":o,"-khtml-opacity":o,"filter":" alpha(opacity="+(o*100)+")"}}); 
    3363 },getElementPosition:function(elem,_424){ 
     3378},getElementPosition:function(elem,_425){ 
    33643379var self=MochiKit.Style; 
    33653380var dom=MochiKit.DOM; 
     
    33703385var c=new self.Coordinates(0,0); 
    33713386var box=null; 
    3372 var _427=null; 
     3387var _428=null; 
    33733388var d=MochiKit.DOM._document; 
    33743389var de=d.documentElement; 
     
    33863401c.x+=elem.offsetLeft; 
    33873402c.y+=elem.offsetTop; 
    3388 _427=elem.offsetParent; 
    3389 if(_427!=elem){ 
    3390 while(_427){ 
    3391 c.x+=_427.offsetLeft; 
    3392 c.y+=_427.offsetTop; 
    3393 _427=_427.offsetParent; 
     3403_428=elem.offsetParent; 
     3404if(_428!=elem){ 
     3405while(_428){ 
     3406c.x+=_428.offsetLeft; 
     3407c.y+=_428.offsetTop; 
     3408_428=_428.offsetParent; 
    33943409} 
    33953410} 
     
    34023417} 
    34033418} 
    3404 if(typeof (_424)!="undefined"){ 
    3405 _424=arguments.callee(_424); 
    3406 if(_424){ 
    3407 c.x-=(_424.x||0); 
    3408 c.y-=(_424.y||0); 
     3419if(typeof (_425)!="undefined"){ 
     3420_425=arguments.callee(_425); 
     3421if(_425){ 
     3422c.x-=(_425.x||0); 
     3423c.y-=(_425.y||0); 
    34093424} 
    34103425} 
    34113426if(elem.parentNode){ 
    3412 _427=elem.parentNode; 
    3413 }else{ 
    3414 _427=null; 
    3415 } 
    3416 while(_427&&_427.tagName!="BODY"&&_427.tagName!="HTML"){ 
    3417 c.x-=_427.scrollLeft; 
    3418 c.y-=_427.scrollTop; 
    3419 if(_427.parentNode){ 
    3420 _427=_427.parentNode; 
    3421 }else{ 
    3422 _427=null; 
     3427_428=elem.parentNode; 
     3428}else{ 
     3429_428=null; 
     3430} 
     3431while(_428&&_428.tagName!="BODY"&&_428.tagName!="HTML"){ 
     3432c.x-=_428.scrollLeft; 
     3433c.y-=_428.scrollTop; 
     3434if(_428.parentNode){ 
     3435_428=_428.parentNode; 
     3436}else{ 
     3437_428=null; 
    34233438} 
    34243439} 
    34253440return c; 
    3426 },setElementPosition:function(elem,_430,_431){ 
     3441},setElementPosition:function(elem,_431,_432){ 
    34273442elem=MochiKit.DOM.getElement(elem); 
    3428 if(typeof (_431)=="undefined"){ 
    3429 _431="px"; 
    3430 } 
    3431 MochiKit.DOM.updateNodeAttributes(elem,{"style":{"left":_430.x+_431,"top":_430.y+_431}}); 
     3443if(typeof (_432)=="undefined"){ 
     3444_432="px"; 
     3445} 
     3446MochiKit.DOM.updateNodeAttributes(elem,{"style":{"left":_431.x+_432,"top":_431.y+_432}}); 
    34323447},getElementDimensions:function(elem){ 
    34333448var self=MochiKit.Style; 
     
    34443459} 
    34453460var s=elem.style; 
    3446 var _432=s.visibility; 
    3447 var _433=s.position; 
     3461var _433=s.visibility; 
     3462var _434=s.position; 
    34483463s.visibility="hidden"; 
    34493464s.position="absolute"; 
    34503465s.display=""; 
    3451 var _434=elem.offsetWidth; 
    3452 var _435=elem.offsetHeight; 
     3466var _435=elem.offsetWidth; 
     3467var _436=elem.offsetHeight; 
    34533468s.display="none"; 
    3454 s.position=_433
    3455 s.visibility=_432
    3456 return new self.Dimensions(_434,_435); 
    3457 },setElementDimensions:function(elem,_436,_437){ 
     3469s.position=_434
     3470s.visibility=_433
     3471return new self.Dimensions(_435,_436); 
     3472},setElementDimensions:function(elem,_437,_438){ 
    34583473elem=MochiKit.DOM.getElement(elem); 
    3459 if(typeof (_437)=="undefined"){ 
    3460 _437="px"; 
    3461 } 
    3462 MochiKit.DOM.updateNodeAttributes(elem,{"style":{"width":_436.w+_437,"height":_436.h+_437}}); 
    3463 },setDisplayForElement:function(_438,_439){ 
    3464 var _440=MochiKit.Base.extend(null,arguments,1); 
    3465 var _441=MochiKit.DOM.getElement; 
    3466 for(var i=0;i<_440.length;i++){ 
    3467 var _439=_441(_440[i]); 
    3468 if(_439){ 
    3469 _439.style.display=_438
     3474if(typeof (_438)=="undefined"){ 
     3475_438="px"; 
     3476} 
     3477MochiKit.DOM.updateNodeAttributes(elem,{"style":{"width":_437.w+_438,"height":_437.h+_438}}); 
     3478},setDisplayForElement:function(_439,_440){ 
     3479var _441=MochiKit.Base.extend(null,arguments,1); 
     3480var _442=MochiKit.DOM.getElement; 
     3481for(var i=0;i<_441.length;i++){ 
     3482var _440=_442(_441[i]); 
     3483if(_440){ 
     3484_440.style.display=_439
    34703485} 
    34713486