Changeset 6999
- Timestamp:
- 06/11/07 07:58:40 (1 year ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
spinoffs/prototype/branches/event/src/event.js
r6629 r6999 26 26 var element; 27 27 switch(event.type) { 28 case 'mouseover': element = event.fromElement; 29 case 'mouseout': element = event.toElement; 28 case 'mouseover': element = event.fromElement; break; 29 case 'mouseout': element = event.toElement; break; 30 30 default: return null; 31 31 } … … 52 52 // find the first node with the given tagName, starting from the 53 53 // node the event was triggered on; traverses the DOM upwards 54 findElement: function(event, tagName) {54 findElement: function(event, expression) { 55 55 var element = Event.element(event); 56 return element.tagName.toUpperCase() == tagName.toUpperCase() ? 57 element : element.up(tagName); 56 return element.match(expression) ? element : element.up(expression); 58 57 } 59 58 }; … … 66 65 initialize: function(element, type, observer, useCapture) { 67 66 this.element = $(element); 68 if (type == 'keypress' && (B.IE || B.WebKit)) type = 'keydown'; 67 switch(type) { 68 case 'keypress': 69 if (B.IE || B.WebKit) type = 'keydown'; 70 break; 71 case 'mouseenter': 72 case 'mouseleave': 73 if (B.IE) break; 74 type = type == 'mouseenter' ? 'mouseover' : 'mouseout' 75 var originalObserver = this.originalObserver = observer; 76 observer = function(event) { 77 var rel = event.relatedTarget, cur = event.currentTarget; 78 if (rel && rel !== cur && !rel.descendantOf(cur)) 79 return originalObserver(event); 80 }; 81 } 69 82 this.type = type; 70 83 this.observer = observer; … … 224 237 stopObserving: function(element, type, observer, useCapture) { 225 238 if (applyToCollection(arguments)) return; 239 if (!Prototype.Browser.IE && (type == 'mouseenter' || type == 'mouseleave')) { 240 type = type == 'mouseenter' ? 'mouseover' : 'mouseout'; 241 var cachedObserver = $H(element._observers[type]).find(function(obs) { 242 return obs.value.originalObserver === observer; 243 }); 244 if(cachedObserver) observer = cachedObserver.observer; 245 } 226 246 new Observer(element, type, observer, useCapture).remove(); 227 247 }, spinoffs/prototype/branches/event/test/functional/event.html
r6629 r6999 5 5 <title>Prototype functional test file</title> 6 6 <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 7 8 <!-- I hate doing "rake dist" while testing --> 9 <script type="text/javascript"> 10 var Prototype = { 11 Version: 'inline', 12 13 Browser: { 14 IE: !!(window.attachEvent && !window.opera), 15 Opera: !!window.opera, 16 WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1, 17 Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1 18 }, 19 BrowserFeatures: { 20 XPath: !!document.evaluate, 21 ElementExtensions: !!window.HTMLElement, 22 SpecificElementExtensions: 23 (document.createElement('div').__proto__ !== 24 document.createElement('form').__proto__) 25 }, 26 27 ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)', 28 emptyFunction: function() {}, 29 K: function(x) { return x } 30 } 31 </script> 32 <script src="../../src/base.js" type="text/javascript"></script> 33 <script src="../../src/string.js" type="text/javascript"></script> 34 <script src="../../src/enumerable.js" type="text/javascript"></script> 35 <script src="../../src/array.js" type="text/javascript"></script> 36 <script src="../../src/hash.js" type="text/javascript"></script> 37 <script src="../../src/range.js" type="text/javascript"></script> 38 <script src="../../src/ajax.js" type="text/javascript"></script> 39 <script src="../../src/dom.js" type="text/javascript"></script> 40 <script src="../../src/selector.js" type="text/javascript"></script> 41 <script src="../../src/form.js" type="text/javascript"></script> 42 <script src="../../src/event.js" type="text/javascript"></script> 43 <script src="../../src/position.js" type="text/javascript"></script> 44 <script type="text/javascript"> Element.addMethods(); </script> 7 <script src="../../dist/prototype.js" type="text/javascript"></script> 45 8 46 9 <style type="text/css" media="screen"> … … 90 53 <body> 91 54 <h1>Prototype functional tests for the Event module</h1> 92 <h2><em>Killer feat:</em> with this page <a href="#"93 onclick='alert("It's true! Don't you hate doing that too?\n\nJust edit src files and fire away!"); return false'>94 you don't have to "rake dist"</a></h2>95 55 96 56 <div id="log">log empty</div>