WIP: Note editing, markdown to html
[oweals/karmaworld.git] / karmaworld / apps / wysihtml5 / static / wysihtml5 / wysihtml-0.4.17 / src / dom / observe.js
1 /**
2  * Method to set dom events
3  *
4  * @example
5  *    wysihtml5.dom.observe(iframe.contentWindow.document.body, ["focus", "blur"], function() { ... });
6  */
7 wysihtml5.dom.observe = function(element, eventNames, handler) {
8   eventNames = typeof(eventNames) === "string" ? [eventNames] : eventNames;
9
10   var handlerWrapper,
11       eventName,
12       i       = 0,
13       length  = eventNames.length;
14
15   for (; i<length; i++) {
16     eventName = eventNames[i];
17     if (element.addEventListener) {
18       element.addEventListener(eventName, handler, false);
19     } else {
20       handlerWrapper = function(event) {
21         if (!("target" in event)) {
22           event.target = event.srcElement;
23         }
24         event.preventDefault = event.preventDefault || function() {
25           this.returnValue = false;
26         };
27         event.stopPropagation = event.stopPropagation || function() {
28           this.cancelBubble = true;
29         };
30         handler.call(element, event);
31       };
32       element.attachEvent("on" + eventName, handlerWrapper);
33     }
34   }
35
36   return {
37     stop: function() {
38       var eventName,
39           i       = 0,
40           length  = eventNames.length;
41       for (; i<length; i++) {
42         eventName = eventNames[i];
43         if (element.removeEventListener) {
44           element.removeEventListener(eventName, handler, false);
45         } else {
46           element.detachEvent("on" + eventName, handlerWrapper);
47         }
48       }
49     }
50   };
51 };