@danielkalen/simplybind
Version:
Magically simple, framework-less one-way/two-way data binding for frontend/backend in ~5kb.
1 lines • 1.41 kB
JavaScript
!function(e){function t(e){var t=e.nodeName.toUpperCase();return"TEXTAREA"===t||"INPUT"===t}function n(e){m={el:e,value:e.value},d=Object.getOwnPropertyDescriptor(e.constructor.prototype,"value"),Object.defineProperty(m.el,"value",p),m.el.attachEvent("onpropertychange",o)}function u(){m.el&&(delete m.el.value,m.el.detachEvent("onpropertychange",o),m={el:null,value:null},d=null)}function c(t){a?t.fireEvent("on"+e,i()):t.dispatchEvent(i())}function o(e){if("value"===e.propertyName){var t=e.srcElement.value;t!==m.value&&(m.value=t,c(m.el))}}function l(){m.el&&m.el.value!==m.value&&(m.value=m.el.value,c(m.el))}var a="undefined"==typeof document.dispatchEvent,r=document.createElement("input"),v="oninput"in r&&(!("documentMode"in document)||document.documentMode>9),i=function(){var t;return a?(t=document.createEventObject(),t.type="change",t.bubbles=!0,t.cancelable=!1):(t=document.createEvent("CustomEvent"),t.initCustomEvent(e,!0,!1,{})),t},d=null,p={get:function(){return d.get.call(this)},set:function(e){m.value=e,d.set.call(this,e)}},m={el:null,value:null};v?"input"!==e&&document.addEventListener("input",function(e){c(e.target)},!1):(document.attachEvent("onfocusin",function(e){t(e.srcElement)&&(u(),n(e.srcElement))}),document.attachEvent("onfocusout",function(){u()}),document.attachEvent("onselectionchange",l),document.attachEvent("onkeyup",l),document.attachEvent("onkeydown",l))}("input");