[FIX] Add prototype watch in js object. That will allow to listen change on some...
authorKersten Jeremy <jke@openerp.com>
Mon, 14 Apr 2014 14:58:02 +0000 (16:58 +0200)
committerKersten Jeremy <jke@openerp.com>
Mon, 14 Apr 2014 14:58:02 +0000 (16:58 +0200)
bzr revid: jke@openerp.com-20140414145802-osjcjj01f8ehwsqc

addons/web/static/src/js/watch.js [new file with mode: 0644]

diff --git a/addons/web/static/src/js/watch.js b/addons/web/static/src/js/watch.js
new file mode 100644 (file)
index 0000000..efa80a1
--- /dev/null
@@ -0,0 +1,58 @@
+(function() {
+/*
+ * object.watch polyfill
+ *
+ * 2012-04-03
+ *
+ * By Eli Grey, http://eligrey.com
+ * Public Domain.
+ * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+ */
+// object.watch
+if (!Object.prototype.watch) {
+    Object.defineProperty(Object.prototype, "watch", {
+          enumerable: false
+        , configurable: true
+        , writable: false
+        , value: function (prop, handler) {
+            var
+              oldval = this[prop]
+            , newval = oldval
+            , getter = function () {
+                return newval;
+            }
+            , setter = function (val) {
+                oldval = newval;
+                return newval = handler.call(this, prop, oldval, val);
+            }
+            ;
+            
+            if (delete this[prop]) { // can't watch constants
+                Object.defineProperty(this, prop, {
+                      get: getter
+                    , set: setter
+                    , enumerable: true
+                    , configurable: true
+                });
+            }
+        }
+    });
+}
+// object.unwatch
+if (!Object.prototype.unwatch) {
+    Object.defineProperty(Object.prototype, "unwatch", {
+          enumerable: false
+        , configurable: true
+        , writable: false
+        , value: function (prop) {
+            var val = this[prop];
+            delete this[prop]; // remove accessors
+            this[prop] = val;
+        }
+    });
+}
+
+})();
+