Skip to content

Commit

Permalink
Traverse event handling
Browse files Browse the repository at this point in the history
  • Loading branch information
carlhannes committed Mar 14, 2017
1 parent 686d706 commit 912126f
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 8 deletions.
4 changes: 2 additions & 2 deletions example/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
<meta charset="UTF-8">
<title>Litequery Example</title>

<!--<script src="../dist/litequery-simple.js"></script>-->
<script src="https://unpkg.com/litequery/dist/litequery-simple.min.js"></script>
<script src="../dist/litequery-simple.js"></script>
<!--<script src="https://unpkg.com/litequery/dist/litequery-simple.min.js"></script>-->

<script src="http://localhost:35729/livereload.js"></script>
</head>
Expand Down
27 changes: 21 additions & 6 deletions src/core/events.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,23 @@ import { select } from "../base";

let globalEventRegistry = {};

/**
* Traverse an event through the DOM, by testing all children of the currentElement
*
* @param {Object} event An event object
* @param {Object} currentElement The current element to check for event
* @param {Object} registeredEvent The cached/registered event by the litequery event handler
* @return {Undefined} Does not return anything
*/
function traverseEventThroughDOM( event, currentElement, registeredEvent ) {
if ( currentElement === event.target || currentElement === event.srcElement ) {
registeredEvent.callback.call( select( event.target ), event );
}
for ( let i = 0, len = currentElement.children.length; i < len; i++ ) {
traverseEventThroughDOM( event, currentElement.children[i], registeredEvent );
}
}

export function events( obj ) {
/**
* Attach an event listener to an item
Expand Down Expand Up @@ -47,13 +64,11 @@ export function events( obj ) {

if ( register ) {
window.addEventListener( trigger, ( event ) => {
globalEventRegistry[trigger].forEach( function ( item ) {
let targets = select( obj.selector );
globalEventRegistry[trigger].forEach( function ( registeredEvent ) {
let targets = select( registeredEvent.selector );

targets.apply( ( currentTarget ) => {
if ( currentTarget === event.target || currentTarget === event.srcElement ) {
item.callback.call( select( event.target ), event );
}
targets.apply( ( currentElement ) => {
traverseEventThroughDOM( event, currentElement, registeredEvent );
} );
} );
} );
Expand Down

0 comments on commit 912126f

Please sign in to comment.