- commit
- f07e992959844b74872592fb32e8a7e11d134be3
- parent
- 993bb84d2f22418a3c82597486c929d9f42886c8
- Author
- Tobias Bengfort <tobias.bengfort@gmx.net>
- Date
- 2015-08-30 19:44
Fix: allow aliases for events on non-target
Diffstat
| M | src/muu-directive.js | 5 | +++-- |
| M | test/test-directive.js | 20 | ++++++++++++++++++++ |
2 files changed, 23 insertions, 2 deletions
diff --git a/src/muu-directive.js b/src/muu-directive.js
@@ -39,9 +39,10 @@ define('muu-directive', ['muu-dom-helpers', 'muu-js-helpers', 'muu-update-dom'],
39 39 root.innerHTML = '';
40 40
41 41 var eventCallback = function(originalEvent) {
-1 42 var element = originalEvent.currentTarget;
42 43 var attrName = 'data-on' + originalEvent.type;
43 -1 if (originalEvent.target.hasAttribute(attrName)) {
44 -1 var eventName = originalEvent.target.getAttribute(attrName);
-1 44 if (element.hasAttribute(attrName)) {
-1 45 var eventName = element.getAttribute(attrName);
45 46 var event = $.createEvent(
46 47 'muu-' + eventName, undefined, undefined, originalEvent);
47 48 root.dispatchEvent(event);
diff --git a/test/test-directive.js b/test/test-directive.js
@@ -47,6 +47,26 @@ define(['muu-directive', 'muu-js-helpers', 'muu-dom-helpers'], function(Directiv 47 47 button.dispatchEvent($.createEvent('click')); 48 48 expect(spy.callCount).to.equal(3); 49 49 }); -1 50 it('registers event aliases for non-target elements', function() { -1 51 var element = document.createElement('div'); -1 52 var template = '<div data-onclick="test"><a href="#" class="button"></a></div>'; -1 53 var directive = new Directive(element, template, registry); -1 54 directive.update({}); -1 55 -1 56 var button = element.querySelector('.button'); -1 57 var spy = sinon.spy(); -1 58 element.addEventListener('muu-test', spy, false); -1 59 -1 60 document.body.appendChild(element); -1 61 expect(spy.callCount).to.equal(0); -1 62 button.dispatchEvent($.createEvent('click', true)); -1 63 expect(spy.callCount).to.equal(1); -1 64 button.dispatchEvent($.createEvent('click', true)); -1 65 expect(spy.callCount).to.equal(2); -1 66 button.dispatchEvent($.createEvent('click', true)); -1 67 expect(spy.callCount).to.equal(3); -1 68 document.body.removeChild(element); -1 69 }); 50 70 it('initialises new child directives', function() { 51 71 var element = document.createElement('div'); 52 72 var template = '';