-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodel.min.js
16 lines (16 loc) · 2.35 KB
/
model.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
"use strict"
function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n]
r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),Model=function(){function e(t,n){var r=this
if(_classCallCheck(this,e),this.values=new Map,this.listeners=[],this._initMap(n||{}),"string"==typeof t&&(t=document.querySelector(t)),t instanceof HTMLElement==0)throw Error("Cannot mount to "+t)
var i=Array.prototype.slice.call(t.querySelectorAll("[data-bind]"),0)
i.forEach(function(e){var t=e.dataset.bind,n=r.get(t),i=r.register(e)
n&&i&&i(t,n),"function"==typeof i&&r.subscribe(i)})}return _createClass(e,[{key:"_initMap",value:function(e,t){var n=!0,r=!1,i=void 0
try{for(var o,a=Object.keys(e)[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var u=o.value,s=t?t+"."+u:u
"object"!=_typeof(e[u])?this.values.set(s,e[u]):this._initMap(e[u],s)}}catch(c){r=!0,i=c}finally{try{!n&&a["return"]&&a["return"]()}finally{if(r)throw i}}}},{key:"register",value:function(e){var t=this,n=e.dataset.bind
if(!(e instanceof HTMLInputElement))return function(t,r){t==n&&r!=e.innerText&&(e.innerText=r)}
switch(e.type){case"checkbox":return e.addEventListener("change",function(){t.set(n,e.checked)}),function(t,r){t==n&&r!=e.value&&(e.checked=r)}
case"text":case"email":return e.addEventListener("input",function(){t.set(n,e.value)}),function(t,r){t==n&&r!=e.value&&(e.value=r)}}}},{key:"set",value:function(e,t){this.values.set(e,t),this.listeners.forEach(function(n){return n(e,t)})}},{key:"get",value:function(e){return this.values.get(e)}},{key:"contains",value:function(e){return this.values.contains(e)}},{key:"subscribe",value:function(e){var t=this
return this.listeners.push(e),function(){return t.listeners=t.listeners.filter(function(e){return e!=listerner})}}},{key:"toObject",value:function(){var e={}
return this.values.forEach(function(t,n){for(var r=e,i=n.split("."),o=0;o<i.length-1;o++)r=r[i[0]]||(r[i[0]]={})
r[i[i.length-1]]=t}),e}}]),e}()
window.Model=Model