├── .gitignore ├── .zuul.yml ├── .travis.yml ├── package.json ├── test.js ├── index.js └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.zuul.yml: -------------------------------------------------------------------------------- 1 | ui: mocha-qunit 2 | browsers: 3 | - name: chrome 4 | version: 27..latest 5 | - name: firefox 6 | version: latest 7 | - name: safari 8 | version: latest 9 | - name: ie 10 | version: 6..latest 11 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - '0.10' 4 | env: 5 | global: 6 | - secure: aKVsc741GqVH3Kx2N6E2xP7VjLlbc01mz29WLH7KH/E1pjDAIEzvs1K37tCg5wry2cH7kANmS87estq97/wwoIO8gqxklHlInqken/C4cZBpOnjKCm2kZqtlAQRsvuW8Eo7F3GxP6xzFHuhVjUOOEsITTyzLbWjo2YKt/Uet4O8= 7 | - secure: Nlrld7ctXbDKNqzTMs3C0CN0pB2puEA9BbX0FSWu819Rw4UhK4YOCwfc7G57TvOtLea5Ph/THE0DZhUPJr6oDDY58TeW/6SJHHP4/t558wxGNrgJV630wORZPCMSkqBMvUXZBQplkJaSH/RJ4xijo1Dk7ql3hez2WdHfcGUNzYo= 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dom-events", 3 | "version": "0.1.1", 4 | "description": "dom event binding and triggering", 5 | "main": "index.js", 6 | "dependencies": { 7 | "synthetic-dom-events": "0.1.1" 8 | }, 9 | "devDependencies": { 10 | "zuul": "~1.0.3" 11 | }, 12 | "scripts": { 13 | "test": "zuul test.js" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "git://github.com/shtylman/dom-events.git" 18 | }, 19 | "keywords": [ 20 | "event", 21 | "dom", 22 | "events" 23 | ], 24 | "author": "Roman Shtylman ", 25 | "license": "MIT" 26 | } 27 | -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | var assert = require('assert'); 2 | var eve = require('./'); 3 | 4 | suite('dom-events'); 5 | 6 | // need to append to body for IE testing 7 | var create = function(what) { 8 | var el = document.createElement(what); 9 | document.body.appendChild(el); 10 | return el; 11 | }; 12 | 13 | test('on', function(done) { 14 | var div = create('div'); 15 | eve.on(div, 'click', function(ev) { 16 | assert.ok(ev); 17 | done(); 18 | }); 19 | 20 | eve.emit(div, 'click'); 21 | }); 22 | 23 | test('off', function(done) { 24 | var div = create('div'); 25 | 26 | var fn = function(ev) { 27 | assert.ok(ev); 28 | 29 | eve.off(div, 'click', fn); 30 | eve.emit(div, 'click'); 31 | done(); 32 | }; 33 | 34 | eve.on(div, 'click', fn); 35 | eve.emit(div, 'click'); 36 | }); 37 | 38 | test('once', function(done) { 39 | var div = create('div'); 40 | eve.once(div, 'click', function(ev) { 41 | assert.ok(ev); 42 | done(); 43 | }); 44 | 45 | eve.emit(div, 'click'); 46 | eve.emit(div, 'click'); 47 | }); 48 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 2 | var synth = require('synthetic-dom-events'); 3 | 4 | var on = function(element, name, fn, capture) { 5 | return element.addEventListener(name, fn, capture || false); 6 | }; 7 | 8 | var off = function(element, name, fn, capture) { 9 | return element.removeEventListener(name, fn, capture || false); 10 | }; 11 | 12 | var once = function (element, name, fn, capture) { 13 | function tmp (ev) { 14 | off(element, name, tmp, capture); 15 | fn(ev); 16 | } 17 | on(element, name, tmp, capture); 18 | }; 19 | 20 | var emit = function(element, name, opt) { 21 | var ev = synth(name, opt); 22 | element.dispatchEvent(ev); 23 | }; 24 | 25 | if (!document.addEventListener) { 26 | on = function(element, name, fn) { 27 | return element.attachEvent('on' + name, fn); 28 | }; 29 | } 30 | 31 | if (!document.removeEventListener) { 32 | off = function(element, name, fn) { 33 | return element.detachEvent('on' + name, fn); 34 | }; 35 | } 36 | 37 | if (!document.dispatchEvent) { 38 | emit = function(element, name, opt) { 39 | var ev = synth(name, opt); 40 | return element.fireEvent('on' + ev.type, ev); 41 | }; 42 | } 43 | 44 | module.exports = { 45 | on: on, 46 | off: off, 47 | once: once, 48 | emit: emit 49 | }; 50 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # dom-events 2 | 3 | [![Build Status](https://travis-ci.org/defunctzombie/dom-events.png?branch=master)](https://travis-ci.org/defunctzombie/dom-events) 4 | 5 | DOM event binding and triggering 6 | 7 | ## api 8 | 9 | ### .on(element, name, fn [, useCapture]) 10 | 11 | Bind `fn` to be called when `name` is triggered on `element`. 12 | 13 | ```js 14 | var eve = require('dom-events'); 15 | 16 | var div = document.createElement('div'); 17 | eve.on(div, 'click', function(ev) { 18 | console.log(ev); 19 | }); 20 | ``` 21 | 22 | ### .off(element, name, fn [, useCapture]) 23 | 24 | Remove `fn` from being called when `name` is triggered on `element` 25 | 26 | ```js 27 | var eve = require('dom-events'); 28 | 29 | var fn = function(ev) { 30 | console.log(ev); 31 | }; 32 | 33 | var div = document.createElement('div'); 34 | eve.on(div, 'click', fn); 35 | 36 | // emit some stuff 37 | 38 | eve.off(div, 'click', fn); 39 | ``` 40 | 41 | ### .once(element, name, fn [, useCapture]) 42 | 43 | Calls `fn` the first time the event happens and unsubcribes immediately. 44 | 45 | ### .emit(element, name [, opts]) 46 | 47 | Force emit `name` on `element`. 48 | 49 | ```js 50 | var eve = require('dom-events'); 51 | 52 | var div = document.createElement('div'); 53 | eve.on(div, 'click', function(ev) { 54 | console.log(ev); 55 | }); 56 | 57 | eve.emit(div, 'click'): 58 | ``` 59 | 60 | ## license 61 | 62 | MIT 63 | 64 | --------------------------------------------------------------------------------