@base-framework/base 2.6.1 → 2.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/base.js +1 -0
- package/package.json +9 -4
- package/.jshintrc +0 -3
- package/base.js +0 -41
- package/base.min.js +0 -1
- package/core.js +0 -1
- package/data-tracker.js +0 -351
- package/es5/base.js +0 -2968
- package/es5/modules/ajax.js +0 -663
- package/es5/modules/animation.js +0 -188
- package/es5/modules/animations.js +0 -1080
- package/es5/modules/atom.js +0 -65
- package/es5/modules/component.js +0 -1310
- package/es5/modules/data-binder.js +0 -1131
- package/es5/modules/data.js +0 -1808
- package/es5/modules/date.js +0 -525
- package/es5/modules/form-validator.js +0 -324
- package/es5/modules/history.js +0 -126
- package/es5/modules/html-builder.js +0 -461
- package/es5/modules/layout.js +0 -1679
- package/es5/modules/mouse.js +0 -124
- package/es5/modules/nav-link.js +0 -123
- package/es5/modules/olderversions/animations-ease.js +0 -1095
- package/es5/modules/olderversions/animations-update.js +0 -1048
- package/es5/modules/olderversions/base-animations.js +0 -636
- package/es5/modules/olderversions/base-component-class.js +0 -100
- package/es5/modules/olderversions/base-data-binder-1.js +0 -407
- package/es5/modules/olderversions/base-data-binder-class.js +0 -358
- package/es5/modules/olderversions/base-layout-parser-class.js +0 -172
- package/es5/modules/olderversions/base-mode-1.js +0 -777
- package/es5/modules/olderversions/base-model-class.js +0 -585
- package/es5/modules/olderversions/data-binder/element-binding/base-data-binder-class.js +0 -358
- package/es5/modules/olderversions/data-binder/element-binding/base-model-class.js +0 -585
- package/es5/modules/olderversions/data-binder/model-binding/base-data-binder-class.js +0 -353
- package/es5/modules/olderversions/data-binder/model-binding/base-model-class.js +0 -604
- package/es5/modules/olderversions/data-binder-update-watcher.js +0 -640
- package/es5/modules/olderversions/data-tracker.js +0 -187
- package/es5/modules/olderversions/event-update.js +0 -666
- package/es5/modules/olderversions/nav-link.js +0 -119
- package/es5/modules/olderversions/router-with-templates-1.js +0 -785
- package/es5/modules/olderversions/router-with-templates.js +0 -701
- package/es5/modules/prototypes/ajax.js +0 -657
- package/es5/modules/prototypes/atom.js +0 -65
- package/es5/modules/prototypes/component.js +0 -972
- package/es5/modules/prototypes/data-binder.js +0 -1089
- package/es5/modules/prototypes/data.js +0 -1290
- package/es5/modules/prototypes/html-builder.js +0 -414
- package/es5/modules/prototypes/layout.js +0 -879
- package/es5/modules/router.js +0 -1680
- package/es5/modules/state.js +0 -274
- package/es6/.jshintrc +0 -3
- package/es6/base.js +0 -41
- package/es6/core.js +0 -1
- package/es6/data-tracker.js +0 -351
- package/es6/events.js +0 -602
- package/es6/legacy/es5/base.js +0 -2968
- package/es6/legacy/es5/modules/ajax.js +0 -663
- package/es6/legacy/es5/modules/animation.js +0 -188
- package/es6/legacy/es5/modules/animations.js +0 -1080
- package/es6/legacy/es5/modules/atom.js +0 -65
- package/es6/legacy/es5/modules/component.js +0 -1310
- package/es6/legacy/es5/modules/data-binder.js +0 -1131
- package/es6/legacy/es5/modules/data.js +0 -1808
- package/es6/legacy/es5/modules/date.js +0 -525
- package/es6/legacy/es5/modules/form-validator.js +0 -324
- package/es6/legacy/es5/modules/history.js +0 -126
- package/es6/legacy/es5/modules/html-builder.js +0 -461
- package/es6/legacy/es5/modules/layout.js +0 -1679
- package/es6/legacy/es5/modules/mouse.js +0 -124
- package/es6/legacy/es5/modules/nav-link.js +0 -123
- package/es6/legacy/es5/modules/olderversions/animations-ease.js +0 -1095
- package/es6/legacy/es5/modules/olderversions/animations-update.js +0 -1048
- package/es6/legacy/es5/modules/olderversions/base-animations.js +0 -636
- package/es6/legacy/es5/modules/olderversions/base-component-class.js +0 -100
- package/es6/legacy/es5/modules/olderversions/base-data-binder-1.js +0 -407
- package/es6/legacy/es5/modules/olderversions/base-data-binder-class.js +0 -358
- package/es6/legacy/es5/modules/olderversions/base-layout-parser-class.js +0 -172
- package/es6/legacy/es5/modules/olderversions/base-mode-1.js +0 -777
- package/es6/legacy/es5/modules/olderversions/base-model-class.js +0 -585
- package/es6/legacy/es5/modules/olderversions/data-binder/element-binding/base-data-binder-class.js +0 -358
- package/es6/legacy/es5/modules/olderversions/data-binder/element-binding/base-model-class.js +0 -585
- package/es6/legacy/es5/modules/olderversions/data-binder/model-binding/base-data-binder-class.js +0 -353
- package/es6/legacy/es5/modules/olderversions/data-binder/model-binding/base-model-class.js +0 -604
- package/es6/legacy/es5/modules/olderversions/data-binder-update-watcher.js +0 -640
- package/es6/legacy/es5/modules/olderversions/data-tracker.js +0 -187
- package/es6/legacy/es5/modules/olderversions/event-update.js +0 -666
- package/es6/legacy/es5/modules/olderversions/nav-link.js +0 -119
- package/es6/legacy/es5/modules/olderversions/router-with-templates-1.js +0 -785
- package/es6/legacy/es5/modules/olderversions/router-with-templates.js +0 -701
- package/es6/legacy/es5/modules/prototypes/ajax.js +0 -657
- package/es6/legacy/es5/modules/prototypes/atom.js +0 -65
- package/es6/legacy/es5/modules/prototypes/component.js +0 -972
- package/es6/legacy/es5/modules/prototypes/data-binder.js +0 -1089
- package/es6/legacy/es5/modules/prototypes/data.js +0 -1290
- package/es6/legacy/es5/modules/prototypes/html-builder.js +0 -414
- package/es6/legacy/es5/modules/prototypes/layout.js +0 -879
- package/es6/legacy/es5/modules/router.js +0 -1680
- package/es6/legacy/es5/modules/state.js +0 -274
- package/es6/main.js +0 -1331
- package/es6/modules/ajax/ajax.js +0 -514
- package/es6/modules/animation/animation.js +0 -236
- package/es6/modules/animations/animation-controller.js +0 -231
- package/es6/modules/animations/animation.js +0 -64
- package/es6/modules/animations/attr-movement.js +0 -66
- package/es6/modules/animations/css-movement.js +0 -170
- package/es6/modules/animations/movement.js +0 -131
- package/es6/modules/animations/value.js +0 -187
- package/es6/modules/atom/atom.js +0 -54
- package/es6/modules/component/component.js +0 -230
- package/es6/modules/component/event-helper.js +0 -119
- package/es6/modules/component/jot.js +0 -144
- package/es6/modules/component/state-helper.js +0 -262
- package/es6/modules/component/unit.js +0 -551
- package/es6/modules/data/attrs.js +0 -40
- package/es6/modules/data/basic-data.js +0 -500
- package/es6/modules/data/data-utils.js +0 -29
- package/es6/modules/data/data.js +0 -3
- package/es6/modules/data/deep-data.js +0 -541
- package/es6/modules/data/model-service.js +0 -528
- package/es6/modules/data/model.js +0 -133
- package/es6/modules/data/simple-data.js +0 -33
- package/es6/modules/data-binder/connection-tracker.js +0 -113
- package/es6/modules/data-binder/connection.js +0 -16
- package/es6/modules/data-binder/data-binder.js +0 -352
- package/es6/modules/data-binder/data-pub-sub.js +0 -141
- package/es6/modules/data-binder/data-source.js +0 -56
- package/es6/modules/data-binder/element-source.js +0 -219
- package/es6/modules/data-binder/one-way-connection.js +0 -46
- package/es6/modules/data-binder/one-way-source.js +0 -43
- package/es6/modules/data-binder/source.js +0 -36
- package/es6/modules/data-binder/two-way-connection.js +0 -75
- package/es6/modules/data-binder/two-way-source.js +0 -41
- package/es6/modules/date/date.js +0 -544
- package/es6/modules/history/history.js +0 -89
- package/es6/modules/html-builder/html-builder.js +0 -434
- package/es6/modules/import/import.js +0 -390
- package/es6/modules/layout/layout-builder.js +0 -1269
- package/es6/modules/layout/layout-parser.js +0 -134
- package/es6/modules/layout/watcher-helper.js +0 -282
- package/es6/modules/mouse/mouse.js +0 -114
- package/es6/modules/router/component-helper.js +0 -163
- package/es6/modules/router/history-controller.js +0 -216
- package/es6/modules/router/nav-link.js +0 -124
- package/es6/modules/router/route.js +0 -401
- package/es6/modules/router/router.js +0 -789
- package/es6/modules/router/utils.js +0 -31
- package/es6/modules/state/state-target.js +0 -91
- package/es6/modules/state/state.js +0 -171
- package/es6/package-lock.json +0 -13
- package/es6/package.json +0 -28
- package/es6/shared/objects.js +0 -99
- package/events.js +0 -602
- package/legacy/es5/base.js +0 -2968
- package/legacy/es5/modules/ajax.js +0 -663
- package/legacy/es5/modules/animation.js +0 -188
- package/legacy/es5/modules/animations.js +0 -1080
- package/legacy/es5/modules/atom.js +0 -65
- package/legacy/es5/modules/component.js +0 -1310
- package/legacy/es5/modules/data-binder.js +0 -1131
- package/legacy/es5/modules/data.js +0 -1808
- package/legacy/es5/modules/date.js +0 -525
- package/legacy/es5/modules/form-validator.js +0 -324
- package/legacy/es5/modules/history.js +0 -126
- package/legacy/es5/modules/html-builder.js +0 -461
- package/legacy/es5/modules/layout.js +0 -1679
- package/legacy/es5/modules/mouse.js +0 -124
- package/legacy/es5/modules/nav-link.js +0 -123
- package/legacy/es5/modules/olderversions/animations-ease.js +0 -1095
- package/legacy/es5/modules/olderversions/animations-update.js +0 -1048
- package/legacy/es5/modules/olderversions/base-animations.js +0 -636
- package/legacy/es5/modules/olderversions/base-component-class.js +0 -100
- package/legacy/es5/modules/olderversions/base-data-binder-1.js +0 -407
- package/legacy/es5/modules/olderversions/base-data-binder-class.js +0 -358
- package/legacy/es5/modules/olderversions/base-layout-parser-class.js +0 -172
- package/legacy/es5/modules/olderversions/base-mode-1.js +0 -777
- package/legacy/es5/modules/olderversions/base-model-class.js +0 -585
- package/legacy/es5/modules/olderversions/data-binder/element-binding/base-data-binder-class.js +0 -358
- package/legacy/es5/modules/olderversions/data-binder/element-binding/base-model-class.js +0 -585
- package/legacy/es5/modules/olderversions/data-binder/model-binding/base-data-binder-class.js +0 -353
- package/legacy/es5/modules/olderversions/data-binder/model-binding/base-model-class.js +0 -604
- package/legacy/es5/modules/olderversions/data-binder-update-watcher.js +0 -640
- package/legacy/es5/modules/olderversions/data-tracker.js +0 -187
- package/legacy/es5/modules/olderversions/event-update.js +0 -666
- package/legacy/es5/modules/olderversions/nav-link.js +0 -119
- package/legacy/es5/modules/olderversions/router-with-templates-1.js +0 -785
- package/legacy/es5/modules/olderversions/router-with-templates.js +0 -701
- package/legacy/es5/modules/prototypes/ajax.js +0 -657
- package/legacy/es5/modules/prototypes/atom.js +0 -65
- package/legacy/es5/modules/prototypes/component.js +0 -972
- package/legacy/es5/modules/prototypes/data-binder.js +0 -1089
- package/legacy/es5/modules/prototypes/data.js +0 -1290
- package/legacy/es5/modules/prototypes/html-builder.js +0 -414
- package/legacy/es5/modules/prototypes/layout.js +0 -879
- package/legacy/es5/modules/router.js +0 -1680
- package/legacy/es5/modules/state.js +0 -274
- package/main.js +0 -1331
- package/modules/ajax/ajax.js +0 -514
- package/modules/animation/animation.js +0 -236
- package/modules/animations/animation-controller.js +0 -231
- package/modules/animations/animation.js +0 -64
- package/modules/animations/attr-movement.js +0 -66
- package/modules/animations/css-movement.js +0 -170
- package/modules/animations/movement.js +0 -131
- package/modules/animations/value.js +0 -187
- package/modules/atom/atom.js +0 -54
- package/modules/component/component.js +0 -230
- package/modules/component/event-helper.js +0 -119
- package/modules/component/jot.js +0 -144
- package/modules/component/state-helper.js +0 -262
- package/modules/component/unit.js +0 -551
- package/modules/data/attrs.js +0 -40
- package/modules/data/basic-data.js +0 -500
- package/modules/data/data-utils.js +0 -29
- package/modules/data/data.js +0 -3
- package/modules/data/deep-data.js +0 -541
- package/modules/data/model-service.js +0 -528
- package/modules/data/model.js +0 -133
- package/modules/data/simple-data.js +0 -33
- package/modules/data-binder/connection-tracker.js +0 -113
- package/modules/data-binder/connection.js +0 -16
- package/modules/data-binder/data-binder.js +0 -352
- package/modules/data-binder/data-pub-sub.js +0 -141
- package/modules/data-binder/data-source.js +0 -56
- package/modules/data-binder/element-source.js +0 -219
- package/modules/data-binder/one-way-connection.js +0 -46
- package/modules/data-binder/one-way-source.js +0 -43
- package/modules/data-binder/source.js +0 -36
- package/modules/data-binder/two-way-connection.js +0 -75
- package/modules/data-binder/two-way-source.js +0 -41
- package/modules/date/date.js +0 -544
- package/modules/history/history.js +0 -89
- package/modules/html-builder/html-builder.js +0 -434
- package/modules/import/import.js +0 -390
- package/modules/layout/layout-builder.js +0 -1269
- package/modules/layout/layout-parser.js +0 -134
- package/modules/layout/watcher-helper.js +0 -282
- package/modules/mouse/mouse.js +0 -114
- package/modules/router/component-helper.js +0 -163
- package/modules/router/history-controller.js +0 -216
- package/modules/router/nav-link.js +0 -124
- package/modules/router/route.js +0 -401
- package/modules/router/router.js +0 -789
- package/modules/router/utils.js +0 -31
- package/modules/state/state-target.js +0 -91
- package/modules/state/state.js +0 -171
- package/shared/objects.js +0 -99
- package/update +0 -16
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# base
|
package/dist/base.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("base",[],e):"object"==typeof exports?exports.base=e():t.base=e()}(this,(()=>(()=>{var t={877:t=>{function e(t){return Promise.resolve().then((()=>{var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}))}e.keys=()=>[],e.resolve=e,e.id=877,t.exports=e}},e={};function s(r){var i=e[r];if(void 0!==i)return i.exports;var n=e[r]={exports:{}};return t[r](n,n.exports,s),n.exports}s.d=(t,e)=>{for(var r in e)s.o(e,r)&&!s.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";s.r(r),s.d(r,{Atom:()=>jt,Component:()=>ht,Data:()=>M,Jot:()=>tt,Model:()=>F,NavLink:()=>lt,SimpleData:()=>U,Unit:()=>nt,Watch:()=>et,ajax:()=>f,base:()=>h,builder:()=>rt,dataBinder:()=>R,router:()=>xt,state:()=>q});const t={createObject:t=>Object.create(t),extendObject(t,e){if(void 0===t||void 0===e)return!1;for(var s in t)t.hasOwnProperty(s)&&void 0===e[s]&&(e[s]=t[s]);return e},cloneObject:t=>t?JSON.parse(JSON.stringify(t)):{},_getClassObject:t=>"function"==typeof t?t.prototype:t,extendClass(t,e){let s=this._getClassObject(t),r=this._getClassObject(e);if("object"!=typeof s||"object"!=typeof r)return!1;let i=Object.create(s);for(var n in r)i[n]=r[n];return i}},e={types:{},add(t,e){this.types[t]=e},get(t){return this.types[t]||!1},remove(t){delete this.types[t]}};class i{constructor(){this.types={}}add(t,e){(this.types[t]||(this.types[t]=[])).push(e)}get(t){return this.types[t]||!1}removeByCallBack(t,e){"function"==typeof t&&t(e)}removeType(t){let s=this.types;if(s){let n=s[t];if(n.length){let a,o=e.get(t);for(var r=0,i=n.length;r<i;r++)a=n[r],a&&(n[r]=null,this.removeByCallBack(o,a));delete s[n]}}}remove(t){if(t)this.removeType(t);else{let s=this.types;for(var e in s)if(s.hasOwnProperty(e)){if(!(t=s[e]))continue;this.removeType(e)}delete this.types}}}class n{constructor(){this.trackers={},this.trackingCount=0}addType(t,s){e.add(t,s)}removeType(t){e.remove(t)}getTrackingId(t){return t.trackingId||(t.trackingId="dt"+this.trackingCount++)}add(t,e,s){const r=this.getTrackingId(t);this.find(r).add(e,s)}get(t,e){const s=t.trackingId;let r=this.trackers[s];return!!r&&(e?r.get(e):r)}find(t){let e=this.trackers;return e[t]||(e[t]=new i)}isEmpty(t){if(!t||"object"!=typeof t)return!0;for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}remove(t,e){const s=t.trackingId;if(!s)return!0;let r=this.trackers[s];if(!r)return!1;e?(r.remove(e),this.isEmpty(r.types)&&delete this.trackers[s]):(r.remove(),delete this.trackers[s])}}const a=window;class o{constructor(){this.version="2.6.0",this.errors=[],this.dataTracker=new n}augment(t){if(!t||"object"!=typeof t)return this;const e=this.constructor.prototype;for(var s in t)t.hasOwnProperty(s)&&(e[s]=t[s]);return this}listToArray(t){return Array.prototype.slice.call(t)}override(t,e,s,r){return(t[e]=s).apply(t,this.listToArray(r))}getLastError(){const t=this.errors;return!!t.length&&t.pop()}addError(t){this.errors.push(t)}parseQueryString(t,e){"string"!=typeof t&&(t=a.location.search);let s={};return t.replace(/([^?=&]+)(=([^&]*))?/g,(function(t,r,i,n){s[r]=!1!==e?decodeURIComponent(n):n})),s}isEmpty(t){if(!1===this.isObject(t))return!0;for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}getById(t){return"string"==typeof t&&(document.getElementById(t)||!1)}getByName(t){if("string"!=typeof t)return!1;let e=document.getElementsByName(t);return!!e&&this.listToArray(e)}getBySelector(t,e){if("string"!=typeof t)return!1;if(!0===(e=e||!1))return document.querySelector(t)||!1;let s=document.querySelectorAll(t);return!!s&&(1===s.length?s[0]:this.listToArray(s))}html(t,e){return!1!==this.isObject(t)&&(!1===this.isUndefined(e)?(t.innerHTML=e,this):t.innerHTML)}setCss(t,e,s){return!1===this.isObject(t)||this.isUndefined(e)||(e=this.uncamelCase(e),t.style[e]=s),this}getCss(t,e){if(!t||void 0===e)return!1;e=this.uncamelCase(e);var s=t.style[e];if(""!==s)return s;var r=null,i=t.currentStyle;if(i&&(r=i[e]))s=r;else{var n=window.getComputedStyle(t,null);n&&(s=n[e])}return s}css(t,e,s){return void 0!==s?(this.setCss(t,e,s),this):this.getCss(t,e)}removeAttr(t,e){return this.isObject(t)&&t.removeAttribute(e),this}setAttr(t,e,s){t.setAttribute(e,s)}getAttr(t,e){return t.getAttribute(e)}attr(t,e,s){return!1!==this.isObject(t)&&(void 0!==s?(this.setAttr(t,e,s),this):this.getAttr(t,e))}_checkDataPrefix(t){return"string"!=typeof t||"data-"!==(t=h.uncamelCase(t)).substring(0,5)&&(t="data-"+t),t}_removeDataPrefix(t){return"string"==typeof t&&"data-"===t.substring(0,5)&&(t=t.substring(5)),t}setData(t,e,s){e=this._removeDataPrefix(e),e=h.camelCase(e),t.dataset[e]=s}getData(t,e){return e=h.camelCase(this._removeDataPrefix(e)),t.dataset[e]}data(t,e,s){return!1!==this.isObject(t)&&(void 0!==s?(this.setData(t,e,s),this):this.getData(t,e))}find(t,e){return!(!t||"string"!=typeof e)&&t.querySelectorAll(e)}show(t){if(!1===this.isObject(t))return this;let e=this.data(t,"style-display"),s="string"==typeof e?e:"";return this.css(t,"display",s),this}hide(t){if(!1===this.isObject(t))return this;let e=this.css(t,"display");return"none"!==e&&e&&this.data(t,"style-display",e),this.css(t,"display","none"),this}toggle(t){return!1===this.isObject(t)||("none"!==this.css(t,"display")?this.hide(t):this.show(t)),this}camelCase(t){return"string"==typeof t&&t.replace(/(-|\s|\_)+\w{1}/g,(function(t){return t[1].toUpperCase()}))}uncamelCase(t,e){return"string"==typeof t&&(e=e||"-",t.replace(/([A-Z]{1,})/g,(function(t){return e+t.toLowerCase()})).toLowerCase())}getSize(t){return!1!==this.isObject(t)&&{width:this.getWidth(t),height:this.getHeight(t)}}getWidth(t){return!!this.isObject(t)&&t.offsetWidth}getHeight(t){return!!this.isObject(t)&&t.offsetHeight}getScrollPosition(t){let e=0,s=0;switch(typeof t){case"undefined":t=document.documentElement,e=window.pageXOffset||t.scrollLeft,s=window.pageYOffset||t.scrollTop;break;case"object":e=t.scrollLeft,s=t.scrollTop}return!1!==this.isObject(t)&&{left:e-(t.clientLeft||0),top:s-(t.clientTop||0)}}getScrollTop(t){return this.getScrollPosition(t).top}getScrollLeft(t){return this.getScrollPosition(t).left}getWindowSize(){let t=window,e=document,s=e.documentElement,r=e.getElementsByTagName("body")[0];return{width:t.innerWidth||s.clientWidth||r.clientWidth,height:t.innerHeight||s.clientHeight||r.clientHeight}}getDocumentSize(){let t=document,e=t.body,s=t.documentElement,r=Math.max(e.scrollHeight,e.offsetHeight,s.clientHeight,s.scrollHeight,s.offsetHeight);return{width:Math.max(e.scrollWidth,e.offsetWidth,s.clientWidth,s.scrollWidth,s.offsetWidth),height:r}}getDocumentHeight(){return this.getDocumentSize().height}getProperty(t,e,s){if(!1===this.isObject(t))return"";let r=t[e];return void 0!==r?r:void 0!==s?s:""}position(t,e=1){let s={x:0,y:0};if(!1===this.isObject(t))return s;let r=0;for(;t&&(0===e||r<e);)r++,s.x+=t.offsetLeft+t.clientLeft,s.y+=t.offsetTop+t.clientTop,t=t.offsetParent;return s}addClass(t,e){if(!1===this.isObject(t)||""===e)return this;if("string"==typeof e)for(var s=0,r=e.split(" ").length;s<r;s++)t.classList.add(e);return this}removeClass(t,e){return!1===this.isObject(t)||""===e||(void 0===e?t.className="":t.classList.remove(e)),this}hasClass(t,e){return!1!==this.isObject(t)&&""!==e&&t.classList.contains(e)}toggleClass(t,e){return!1===this.isObject(t)||t.classList.toggle(e),this}getType(t){const e=typeof t;return"object"!==e?e:this.isArray(t)?"array":e}isUndefined(t){return void 0===t}isObject(t){return!(!t||"object"!=typeof t)}isArray(t){return Array.isArray(t)}inArray(t,e,s){return t&&"object"==typeof t?t.indexOf(e,s):-1}createCallBack(t,e,s,r){return"function"==typeof e&&(s=s||[],function(...i){return!0===r&&(s=s.concat(i)),e.apply(t,s)})}bind(t,e){return e.bind(t)}prepareJsonUrl(t,e=!1){var s=t=>{let r,i=typeof t;if("undefined"===i)return t;if("object"!==i)return"string"!=typeof(n=t)?n:(n=(t=>{if("string"!=typeof t&&(t=String(t)),e){let e=/\n/g;t=t.replace(e,"\\n")}return t.replace(/\t/g,"\\t")})(n),(n=encodeURIComponent(n)).replace(/\%22/g,'"'));var n;for(var a in t)if(t.hasOwnProperty(a)){if(r=t[a],null===r)continue;t[a]=s(r)}return t};let r="object"==typeof t?this.cloneObject(t):t,i=s(r);return this.jsonEncode(i)}jsonDecode(t){return void 0!==t&&t.length>0&&JSON.parse(t)}jsonEncode(t){return void 0!==t&&JSON.stringify(t)}xmlParse(t){return void 0!==t&&(new DOMParser).parseFromString(t,"text/xml")}}o.prototype.extend=o.prototype;const h=new o;h.augment(t);let l=t=>{let e=0;for(var s in t)t.hasOwnProperty(s)&&(e++,"object"==typeof t[s]&&(e+=l(t[s])));return e},u=(t,e)=>{let s=!1;if("object"!=typeof t||"object"!=typeof e)return s;for(var r in t){if(!t.hasOwnProperty(r)||!e.hasOwnProperty(r))break;let i=t[r],n=e[r];if(typeof i!=typeof n)break;if("object"==typeof i){if(s=u(i,n),!0!==s)break}else{if(i!==n)break;s=!0}}return s};h.augment({equals(t,e){let s=typeof t;return s===typeof e&&("object"===s?(i=e,l(r=t)===l(i)&&u(r,i)):t===e);var r,i}});const c=h.dataTracker,d={getEvents:t=>!1!==h.isObject(t)&&c.get(t,"events"),create:(t,e,s,r=!1,i=!1,n=null)=>({event:t,obj:e,fn:s,capture:r,swapped:i=!0===i,originalFn:n}),add(t,e,s,r=!1,i=!1,n=null){if(!1===h.isObject(e))return this;let a=this.create(t,e,s,r,i,n);return c.add(e,"events",a),e.addEventListener(t,s,r),this},remove(t,e,s,r=!1){let i=this.getEvent(t,e,s,r);return!1===i||"object"==typeof i&&this.removeEvent(i),this},removeEvent(t){return"object"==typeof t&&t.obj.removeEventListener(t.event,t.fn,t.capture),this},getEvent(t,e,s,r){if("object"!=typeof e)return!1;let i=this.getEvents(e);if(!i||i.length<1)return!1;let n=this.create(t,e,s,r);return this.search(n,i)},search(t,e){let s,r=this.isSwappable(t.event);for(var i=0,n=e.length;i<n;i++)if(s=e[i],s.event===t.event&&s.obj===t.obj&&(s.fn===t.fn||!0===r&&s.originalFn===t.fn))return s;return!1},removeEvents(t){return!1===h.isObject(t)||c.remove(t,"events"),this},swap:["DOMMouseScroll","wheel","mousewheel","mousemove","popstate"],addSwapped(t){this.swap.push(t)},isSwappable(t){return h.inArray(this.swap,t)>-1}};c.addType("events",(t=>{d.removeEvent(t)})),h.augment({events:d,addListener(t,e,s,r){return this.events.add(t,e,s,r),this},on(t,e,s,r){let i=this.events;if(this.isArray(t)){let o;for(var n=0,a=t.length;n<a;n++)o=t[n],i.add(o,e,s,r)}else i.add(t,e,s,r);return this},off(t,e,s,r){let i=this.events;if(this.isArray(t))for(var n,a=0,o=t.length;a<o;a++)n=t[a],i.remove(n,e,s,r);else i.remove(t,e,s,r);return this},removeListener(t,e,s,r){return this.events.remove(t,e,s,r),this},_createEvent(t,e,s,r){let i;return i="HTMLEvents"===e?new Event(t):"MouseEvents"===e?new MouseEvent(t,s):new CustomEvent(t,r),i},createEvent(t,e,s,r){if(!1===this.isObject(e))return!1;let i={pointerX:0,pointerY:0,button:0,view:window,detail:1,screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,bubbles:!0,cancelable:!0,relatedTarget:null};h.isObject(s)&&(i=Object.assign(i,s));let n=this._getEventType(t);return this._createEvent(t,n,i,r)},_getEventType(t){let e,s={HTMLEvents:/^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,MouseEvents:/^(?:click|dblclick|mouse(?:down|up|over|move|out))$/},r="CustomEvent";for(var i in s)if(s.hasOwnProperty(i)&&(e=s[i],t.match(e))){r=i;break}return r},trigger(t,e,s){if(!1===this.isObject(e))return this;let r="string"==typeof t?this.createEvent(t,e,null,s):t;return e.dispatchEvent(r),this},mouseWheelEventType:null,getWheelEventType(){return this.mouseWheelEventType||(this.mouseWheelEventType=(()=>{let t="wheel";return"onmousewheel"in self?t="mousewheel":"DOMMouseScroll"in self&&(t="DOMMouseScroll"),t})())},onMouseWheel(t,e,s,r){void 0===e&&(e=window);let i=this.getWheelEventType();return this.events.add(i,e,(e=>{e=e||window.event;let r=Math.max(-1,Math.min(1,-e.deltaY||e.wheelDelta||-e.detail));"function"==typeof t&&t(r,e),!0===s&&e.preventDefault()}),r,!0,t),this},offMouseWheel(t,e,s){void 0===e&&(e=window);let r=this.getWheelEventType();return this.off(r,e,t,s),this},preventDefault(t){return"function"==typeof(t=t||window.event).preventDefault?t.preventDefault():t.returnValue=!1,this},stopPropagation(t){return"function"==typeof(t=t||window.event).stopPropagation?t.stopPropagation():t.cancelBubble=!0,this}});let p={url:"",responseType:"json",method:"POST",fixedParams:"",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},beforeSend:[],async:!0,crossDomain:!1,withCredentials:!1,completed:null,failed:null,aborted:null,progress:null};h.augment({xhrSettings:p,addFixedParams(t){this.xhrSettings.fixedParams=t},beforeSend(t){this.xhrSettings.beforeSend.push(t)},ajaxSettings(t){"object"==typeof t&&(this.xhrSettings=this.extendClass(h.xhrSettings,t))},resetAjaxSettings(){this.xhrSettings=p}});const f=(...t)=>new g(t).xhr;class g{constructor(t){this.settings=null,this.xhr=null,this.setup(t)}setup(t){this.getXhrSettings(t);let e=this.xhr=this.createXHR();if(!1===e)return!1;const{method:s,url:r,async:i}=this.settings;e.open(s,r,i),this.setupHeaders(),this.addXhrEvents(),this.beforeSend(),e.send(this.getParams())}beforeSend(){let t=h.xhrSettings.beforeSend;if(t.length<1)return;let e=this.xhr,s=this.settings;for(var r=0,i=t.length;r<i;r++){var n=t[r];n&&n(e,s)}}objectToString(t){let e=[];for(var s in t)t.hasOwnProperty(s)&&e.push(s+"="+t[s]);return e.join("&")}setupParams(t,e){let s=typeof t;if(e){let i=typeof e;if("string"===s)"string"!==i&&(e=this.objectToString(e)),t+=(""===t?"?":"&")+e;else if("string"===i&&(e=h.parseQueryString(e,!1)),t instanceof FormData)for(var r in e)e.hasOwnProperty(r)&&t.append(r,e[r]);else"object"===s&&(t=h.cloneObject(t),t=Object.assign(e,t),t=this.objectToString(t))}else t instanceof FormData==0&&"object"===s&&(t=this.objectToString(t));return t}getParams(){let t=this.settings,e=t.params,s=t.fixedParams;return e?e=this.setupParams(e,s):s&&(e=this.setupParams(s)),e}getXhrSettings(t){let e=this.settings=Object.create(h.xhrSettings);if(t.length>=2&&"object"!=typeof t[0])for(var s=0,r=t.length;s<r;s++){var i=t[s];switch(s){case 0:e.url=i;break;case 1:e.params=i;break;case 2:e.completed=i,e.failed=i;break;case 3:e.responseType=i||"json";break;case 4:e.method=i?i.toUpperCase():"POST";break;case 5:e.async=void 0===i||i}}else e=this.settings=h.extendClass(this.settings,t[0]),"function"==typeof e.completed&&("function"!=typeof e.failed&&(e.failed=e.completed),"function"!=typeof e.aborted&&(e.aborted=e.failed))}createXHR(){let t=this.settings,e=new XMLHttpRequest;return e.responseType=t.responseType,!0===t.withCredentials&&(e.withCredentials=!0),e}setupHeaders(){let t=this.settings;if(t&&"object"==typeof t.headers){let s=t.headers;for(var e in s)s.hasOwnProperty(e)&&this.xhr.setRequestHeader(e,s[e])}}update(t,e){let s=this.xhr,r=()=>{let t=h.events;t.removeEvents(s.upload),t.removeEvents(s)},i=this.settings;if(!i)return!1;switch(e||t.type){case"load":if("function"==typeof i.completed){let t=this.getResponseData();i.completed(t,this.xhr)}r();break;case"error":"function"==typeof i.failed&&i.failed(!1,this.xhr),r();break;case"progress":"function"==typeof i.progress&&i.progress(t);break;case"abort":"function"==typeof i.aborted&&i.aborted(!1,this.xhr),r()}}getResponseData(){let t=this.xhr,e=t.response;const s=t.responseType;return s&&"text"!==s?e:t.responseText}addXhrEvents(){if(!this.settings)return;let t=this.xhr,e=h.bind(this,this.update);h.on(["load","error","abort"],t,e),h.on("progress",t.upload,e)}}let v=-1;class m{constructor(){this.callBacks={},this.lastToken=-1}get(t){let e=this.callBacks;return e[t]||(e[t]=[])}reset(){this.callBacks={},this.lastToken=-1,v=-1}on(t,e){let s=++v;return this.get(t).push({token:s,callBack:e}),s}off(t,e){let s=this.callBacks[t]||!1;if(!1===s)return!1;let r=s.length;for(var i=0;i<r;i++)if(s[i].token===e){s.splice(i,1);break}}remove(t){let e=this.callBacks;e[t]&&delete e[t]}publish(t){let e,s,r=this.callBacks[t]||!1;if(!1===r)return!1;let i=Array.prototype.slice.call(arguments,1);for(s=r.length,e=0;e<s;e++){var n=r[e];n&&n.callBack.apply(this,i)}}}const y=new m;class b{constructor(){this.msg=null,this.token=null}setToken(t){this.token=t}}class w extends b{constructor(t){super(),this.data=t}subscribe(t,e){this.msg=t,this.token=this.data.on(t,e)}unsubscribe(){this.data.off(this.msg,this.token)}}class k{unsubscribe(){}}class S extends k{constructor(){super(),this.source=null}addSource(t){return this.source=new w(t)}unsubscribe(){this.source.unsubscribe(),this.source=null}}class x extends b{subscribe(t){this.msg=t;let e=this.callBack.bind(this);this.token=y.on(t,e)}unsubscribe(){y.off(this.msg,this.token)}callBack(){}}class j extends x{constructor(t,e){super(),this.data=t,this.prop=e}set(t){this.data.set(this.prop,t)}get(){return this.data.get(this.prop)}callBack(t,e){this.data!==e&&this.data.set(this.prop,t,e)}}const C=(t,e,s)=>{h.setAttr(t,e,s)},P=(t,e,s)=>{t.checked=t.value===s},O=(t,e,s)=>{A(t,e,s=1==s)},A=(t,e,s)=>{t[e]=s},T=(t,e)=>h.getAttr(t,e),E=(t,e)=>t[e];class D extends x{constructor(t,e,s){super(),this.element=t,this.attr=this.getAttrBind(e),this.addSetMethod(t,this.attr),this.filter="string"==typeof s?this.setupFilter(s):s}addSetMethod(t,e){if("-"===e.substring(4,1))this.setValue=C,this.getValue=T;else{this.getValue=E;var s=t.type;if(s)switch(s){case"checkbox":return void(this.setValue=O);case"radio":return void(this.setValue=P)}this.setValue=A}}getAttrBind(t){if(t)return t;let e="textContent",s=this.element;if(!s||"object"!=typeof s)return e;let r=s.tagName.toLowerCase();if("input"===r||"textarea"===r||"select"===r){let t=s.type;if(t)switch(t){case"checkbox":e="checked";break;case"file":e="files";break;default:e="value"}else e="value"}return e}setupFilter(t){let e=/(\[\[[^\]]+\]\])/;return s=>t.replace(e,s)}set(t){let e=this.element;if(!e||"object"!=typeof e)return!1;this.filter&&(t=this.filter(t)),this.setValue(e,this.attr,t)}get(){let t=this.element;return t&&"object"==typeof t?this.getValue(t,this.attr):""}callBack(t,e){e!==this.element&&this.set(t)}}class _ extends k{constructor(){super(),this.element=null,this.data=null}addElement(t,e,s){return this.element=new D(t,e,s)}addData(t,e){return this.data=new j(t,e)}unsubscribeSource(t){t&&t.unsubscribe()}unsubscribe(){this.unsubscribeSource(this.element),this.unsubscribeSource(this.data),this.element=null,this.data=null}}class B{constructor(){this.connections={}}add(t,e,s){return this.find(t)[e]=s}get(t,e){let s=this.connections[t];return s&&s[e]||!1}find(t){let e=this.connections;return e[t]||(e[t]={})}remove(t,e){let s,r=this.connections[t];if(!r)return!1;if(e)s=r[e],s&&(s.unsubscribe(),delete r[e]),h.isEmpty(r)&&delete this.connections[t];else{for(var i in r)r.hasOwnProperty(i)&&(s=r[i],s&&s.unsubscribe());delete this.connections[t]}}}const R=new class{constructor(){this.version="1.0.1",this.attr="bindId",this.blockedKeys=[20,37,38,39,40],this.connections=new B,this.idCount=0,this.setup()}setup(){this.setupEvents()}bind(t,e,s,r){let i=s,n=null;if(-1!==s.indexOf(":")){let t=s.split(":");t.length>1&&(i=t[1],n=t[0])}let a=this.setupConnection(t,e,i,n,r),o=a.element,h=e.get(i);return void 0!==h?o.set(h):(h=o.get(),""!==h&&a.data.set(h)),this}setupConnection(t,e,s,r,i){let n=this.getBindId(t),a=new _;a.addData(e,s).subscribe(n);let o=e.getDataId()+":"+s;return a.addElement(t,r,i).subscribe(o),this.addConnection(n,"bind",a),a}addConnection(t,e,s){this.connections.add(t,e,s)}setBindId(t){let e="db-"+this.idCount++;return t.dataset[this.attr]=e,t[this.attr]=e,e}getBindId(t){return t[this.attr]||this.setBindId(t)}unbind(t){let e=t[this.attr];return e&&this.connections.remove(e),this}watch(t,e,s,r){if(!t||"object"!=typeof t)return!1;let i=new S;i.addSource(e).subscribe(s,r);const n=this.getBindId(t),a=e.getDataId()+":"+s;this.addConnection(n,a,i);let o=e.get(s);void 0!==o&&r(o)}unwatch(t,e,s){if(!t||"object"!=typeof t)return!1;let r=t[this.attr];if(r){let t=e.getDataId()+":"+s;this.connections.remove(r,t)}}publish(t,e,s){return y.publish(t,e,s),this}isDataBound(t){if(t){let e=t[this.attr];if(e)return e}return!1}isBlocked(t){return"keyup"===t.type&&-1!==this.blockedKeys.indexOf(t.keyCode)}bindHandler(t){if(this.isBlocked(t))return!0;let e=t.target||t.srcElement,s=this.isDataBound(e);if(s){let t=this.connections.get(s,"bind");if(t){let r=t.element.get();y.publish(s,r,e)}}t.stopPropagation()}setupEvents(){this.changeHandler=this.bindHandler.bind(this),this.addEvents()}addEvents(){h.on(["change","keyup"],document,this.changeHandler,!1)}removeEvents(){h.off(["change","keyup"],document,this.changeHandler,!1)}},L=t=>JSON.parse(JSON.stringify(t)),I=t=>{let e={};if(!t&&"object"!=typeof t)return e;for(var s in t=L(t))if(t.hasOwnProperty(s)){var r=t[s];"function"!=typeof r&&(e[s]=r,delete t[s])}return e};class N{constructor(t){this.dirty=!1,this.links={},this._init(),this.setup(),this.dataTypeId="bd",this.eventSub=new m;let e=I(t);this.set(e)}setup(){this.stage={}}_init(){const t=this.constructor;this._dataNumber=void 0===t._dataNumber?t._dataNumber=0:++t._dataNumber,this._id="dt-"+this._dataNumber,this._dataId=this._id+":"}getDataId(){return this._id}remove(){}on(t,e){let s=t+":change";return this.eventSub.on(s,e)}off(t,e){let s=t+":change";this.eventSub.off(s,e)}_setAttr(t,e,s){let r=this.stage[t];if(e===r)return!1;this.stage[t]=e,s=s||this,this._publish(t,e,s,r)}set(...t){if("object"==typeof t[0]){let[r,i,n]=t;for(var e in r)if(r.hasOwnProperty(e)){var s=r[e];if("function"==typeof s)continue;this._setAttr(e,s,i,n)}}else this._setAttr(...t);return this}getModelData(){return this.stage}_deleteAttr(t,e){delete t[e]}toggle(t){if(void 0!==t)return this.set(t,!this.get(t)),this}increment(t){if(void 0===t)return;let e=this.get(t);return this.set(t,++e),this}decrement(t){if(void 0===t)return;let e=this.get(t);return this.set(t,--e),this}ifNull(t,e){return null===this.get(t)&&this.set(t,e),this}setKey(t){this.key=t}resume(t){let e,s=this.key;if(!s)return!1;let r=localStorage.getItem(s);null===r?t&&(e=t):e=JSON.parse(r),this.set(e)}store(){let t=this.key;if(!t)return!1;let e=this.get();if(!e)return!1;let s=JSON.stringify(e);localStorage.setItem(t,s)}delete(t){void 0===t?this.setup():this._deleteAttr(this.stage,t)}_getAttr(t,e){return t[e]}get(t){return void 0!==t?this._getAttr(this.stage,t):this.getModelData()}link(t,e,s){if(1===arguments.length&&!0===t.isData&&(e=t.get()),"object"!=typeof e)return this.remoteLink(t,e,s);let r=[];for(var i in e)!1!==e.hasOwnProperty(i)&&r.push(this.remoteLink(t,i));return r}remoteLink(t,e,s){let r=s||e,i=t.get(e);void 0!==i&&this.get(e)!==i&&this.set(e,i);let n=t.on(e,((e,s)=>{if(s===this)return!1;this.set(r,e,t)}));this.addLink(n,t);let a=this.on(r,((s,r)=>{if(r===t)return!1;t.set(e,s,this)}));return t.addLink(a,this),n}addLink(t,e){this.links[t]=e}unlink(t){if(t)return void this.removeLink(t);let e=this.links;if(e.length){for(var s=0,r=e.length;s<r;s++)this.removeLink(e[s],!1);this.links=[]}}removeLink(t,e){let s=this.links[t];s&&s.off(t),!1!==e&&delete this.links[t]}}N.prototype.isData=!0;const H={deepDataPattern:/(\w+)|(?:\[(\d)\))/g,hasDeepData:t=>-1!==t.indexOf(".")||-1!==t.indexOf("["),getSegments(t){var e=this.deepDataPattern;return t.match(e)}};class M extends N{setup(){this.attributes={},this.stage={}}_updateAttr(t,e,s){if(H.hasDeepData(e)){let i,n=H.getSegments(e),a=n.length,o=a-1;for(var r=0;r<a;r++){if(i=n[r],r===o){t[i]=s;break}void 0===t[i]&&(t[i]=isNaN(i)?{}:[]),t=t[i]}}else t[e]=s}_setAttr(t,e,s,r){"object"!=typeof e&&e===this.get(t)||(s||!0===r?!1===this.dirty&&(this.dirty=!0):this._updateAttr(this.attributes,t,e),this._updateAttr(this.stage,t,e),s=s||this,this._publish(t,e,s))}linkAttr(t,e){let s=t.get(e);if(s)for(var r in s)s.hasOwnProperty(r)&&this.link(t,e+"."+r,r)}scope(t,e){let s=this.get(t);if(!s)return!1;let r=new(e=e||this.constructor)(s);return r.linkAttr(this,t),r}splice(t,e){return this.delete(t+"["+e+"]"),this.refresh(t),this}push(t,e){let s=this.get(t);return!1===Array.isArray(s)&&(s=[]),s.push(e),this.set(t,s),this}unshift(t,e){let s=this.get(t);return!1===Array.isArray(s)&&(s=[]),s.unshift(e),this.set(t,s),this}shift(t){let e=this.get(t);if(!1===Array.isArray(e))return null;let s=e.shift();return this.set(t,e),s}pop(t){let e=this.get(t);if(!1===Array.isArray(e))return null;let s=e.pop();return this.set(t,e),s}refresh(t){return this.set(t,this.get(t)),this}_publish(t,e,s){this.publish(t,e,s)}publishDeep(t,e,s){if(H.hasDeepData(t)){let o,h=H.getSegments(t),l=h.length,u=l-1,c="",d=this.stage;for(var r=0;r<l;r++){var i;if(o=h[r],d=d[o],r>0?isNaN(o)&&(c+="."+o):c=o,r===u)i=e;else{var n=h[r+1];if(!1===isNaN(n)){c+="["+n+"]";continue}var a={};a[n]=d[n],i=a}this.publish(c,i,s)}}else this.publish(t,e,s)}publish(t,e,s){if(t=t||"",this._publishAttr(t,e,s),e&&"object"==typeof e){let n,a;if(Array.isArray(e)){let i=e.length;for(var r=0;r<i;r++)a=e[r],n=t+"["+r+"]",this._checkPublish(n,a,s)}else for(var i in e)e.hasOwnProperty(i)&&(a=e[i],n=t+"."+i,this._checkPublish(n,a,s))}}_checkPublish(t,e,s){e&&"object"==typeof e?this.publish(t,e,s):this._publishAttr(t,e,s)}_publishAttr(t,e,s){R.publish(this._dataId+t,e,s);let r=t+":change";this.eventSub.publish(r,e,s)}mergeStage(){this.attributes=L(this.stage),this.dirty=!1}getModelData(){return this.mergeStage(),this.attributes}revert(){this.set(this.attributes),this.dirty=!1}_deleteAttr(t,e){if(H.hasDeepData(e)){let n=H.getSegments(e),a=n.length,o=a-1;for(var s=0;s<a;s++){var r=n[s],i=t[r];if(void 0===i)break;if(s===o){if(Array.isArray(t)){t.splice(r,1);break}delete t[r];break}t=i}}else delete t[e]}_getAttr(t,e){if(!H.hasDeepData(e))return t[e];{let i=H.getSegments(e),n=i.length,a=n-1;for(var s=0;s<n;s++){var r=t[i[s]];if(void 0===r)break;if(t=r,s===a)return t}}}}class U extends N{_publish(t,e,s,r){let i=t+":change";this.eventSub.publish(i,e,s),s=s||this,R.publish(this._dataId+t,e,s)}}let W=0;class F extends M{constructor(t){super(t),this.initialize()}initialize(){}static extend(t={}){const e=this,s=(t=>{if(!t||"object"!=typeof t.xhr)return{};let e=t.xhr,s=Object.assign({},e);return delete t.xhr,s})(t),r=this.prototype.service.extend(s);let i=(t=>{let e={};if(!t||"object"!=typeof t)return e;let s=t.defaults;if(!s)return e;for(var r in s)if(s.hasOwnProperty(r)){var i=s[r];"function"!=typeof i&&(e[r]=i)}return delete t.defaults,e})(t);class n extends e{constructor(t){let e=I(t);e=Object.assign({},i,e),super(e),this.xhr=new r(this)}dataTypeId="bm"+W++}return Object.assign(n.prototype,t),n.prototype.service=r,n}}F.prototype.service=class{constructor(t){this.model=t,this.objectType=this.objectType||"item",this.url="",this.validateCallBack=null,this.init()}init(){let t=this.model;t&&t.url&&(this.url=t.url)}isValid(){let t=this.validate();if(!1!==t){let e=this.validateCallBack;"function"==typeof e&&e(t)}return t}validate(){return!0}getDefaultParams(){return""}setupParams(t){let e=this.getDefaultParams();return this.addParams(t,e)}objectToString(t){const e=[];for(var s in t)t.hasOwnProperty(s)&&e.push(s+"="+t[s]);return e.join("&")}addParams(t,e){if("string"==typeof(t=t||{})&&(t=h.parseQueryString(t,!1)),!e)return this._isFormData(t)?t:this.objectToString(t);if("string"==typeof e&&(e=h.parseQueryString(e,!1)),this._isFormData(t))for(var s in e)e.hasOwnProperty(s)&&t.append(s,e[s]);else t=Object.assign(t,e),t=this.objectToString(t);return t}get(t,e){let s="op=get&id="+this.model.get("id"),r=this.model;return this._get("",s,t,e,(t=>{if(t){let e=this.getObject(t);e&&r.set(e)}}))}getObject(t){return t[this.objectType]||t||!1}setupObjectData(){let t=this.model.get();return this.objectType+"="+h.prepareJsonUrl(t)}setup(t,e){if(!this.isValid())return!1;let s="op=setup&"+this.setupObjectData();return s=this.addParams(s,t,t),this._put("",s,e)}add(t,e){if(!this.isValid())return!1;let s="op=add&"+this.setupObjectData();return this._post("",s,t,e)}update(t,e){if(!this.isValid())return!1;let s="op=update&"+this.setupObjectData();return this._patch("",s,t,e)}delete(t,e){let s="op=delete&id="+this.model.get("id");return this._delete("",s,t,e)}all(t,e,s,r,i){let n="op=all&option="+(i=i||"")+"&start="+(s=isNaN(s)?0:s)+"&stop="+(r=isNaN(r)?50:r);return this._get("",n,t,e)}getUrl(t){let e=this.url;return t?"?"===t[0]?e+t:e+"/"+t:e}setupRequest(t,e,s,r,i){let n={url:this.getUrl(t),method:e,params:s,completed:(t,e)=>{"function"==typeof i&&i(t),this.getResponse(t,r,e)}};return this._isFormData(s)&&(n.headers={}),f(n)}_isFormData(t){return t instanceof FormData}request(t,e,s,r){return this._request("","POST",t,e,s,r)}_get(t,e,s,r,i){return e=this.setupParams(e),t=t||"",(e=this.addParams(e,s))&&(t+="?"+e),this.setupRequest(t,"GET","",r,i)}_post(t,e,s,r,i){return this._request(t,"POST",e,s,r,i)}_put(t,e,s,r,i){return this._request(t,"PUT",e,s,r,i)}_patch(t,e,s,r,i){return this._request(t,"PATCH",e,s,r,i)}_delete(t,e,s,r,i){return this._request(t,"DELETE",e,s,r,i)}_request(t,e,s,r,i,n){return s=this.setupParams(s),s=this.addParams(s,r),this.setupRequest(t,e,s,i,n)}getResponse(t,e,s){"function"==typeof e&&e(t,s)}static extend(t){if(!t)return!1;var e=this;class s extends e{constructor(t){super(t)}}return Object.assign(s.prototype,t),s}};class V extends U{constructor(t){super(),this.id=t}restore(){q.restore(this.id,this)}remove(){q.remove(this.id)}addAction(t,e){void 0!==e&&this.set(t,e)}getState(t){return this.get(t)}removeAction(t,e){if(e)this.off(t,e);else{let e=this.stage;void 0!==e[t]&&delete e[t]}}}const q=new class{constructor(){this.targets={}}restore(t,e){this.targets[t]=e}getTarget(t){let e=this.targets;return e[t]||(e[t]=new V(t))}getActionState(t,e){return this.getTarget(t).get(e)}add(t,e,s){const r=this.getTarget(t);return e&&r.addAction(e,s),r}addAction(t,e,s){return this.add(t,e,s)}removeAction(t,e,s){this.off(t,e,s)}on(t,e,s){let r=this.getTarget(t);return!!e&&r.on(e,s)}off(t,e,s){this.remove(t,e,s)}remove(t,e,s){let r=this.targets,i=r[t];if(!i)return!1;e?i.off(e,s):delete r[t]}set(t,e,s){this.getTarget(t).set(e,s)}},J=h.dataTracker,z={class:"className",text:"textContent",for:"htmlFor",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",celpadding:"cellPadding",useMap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},X=t=>z[t]||t,K=t=>"string"==typeof t&&"on"===t.substring(0,2)?t.substring(2):t,G=/(\[\[(.*?)\]\])/g,$={_getWatcherProps(t){let e=/\[\[(.*?)\]\]/g,s=t.match(e);if(s){e=/(\[\[|\]\])/g;for(var r=0,i=s.length;r<i;r++)s[r]=s[r].replace(e,"")}return s},updateAttr(t,e,s){"text"===e||"textContent"===e?t.textContent=s:"innerHTML"===e?t.innerHTML=s:"-"===e.substring(4,1)?h.setAttr(t,e,s):t[e]=s},_getWatcherCallBack(t,e,s,r,i){return()=>{let n=0,a=s.replace(G,(function(){let t=i?e[n]:e;n++;let s=t.get(arguments[2]);return void 0!==s?s:""}));this.updateAttr(t,r,a)}},getParentData:t=>t.data?t.data:t.context&&t.context.data?t.context.data:t.state?t.state:null,getValue(t,e){"string"==typeof t&&(t={value:t});let s=t.value;return!1===Array.isArray(s)?s=[s,this.getParentData(e)]:s.length<2&&s.push(this.getParentData(e)),s},getPropValues(t,e,s){let r=[];for(var i=0,n=e.length;i<n;i++){var a=(s?t[i]:t).get(e[i]);a=void 0!==a?a:"",r.push(a)}return r},getCallBack(t,e,s,r,i){let n,a=t.callBack;if("function"==typeof a){let t=r.match(G),o=t&&t.length>1;n=(r,n)=>{r=!0!==o?r:this.getPropValues(s,t,i),a(e,r,n)}}else{let a=t.attr||"textContent";n=this._getWatcherCallBack(e,s,r,a,i)}return n},addDataWatcher(t,e,s){let r=this.getValue(e,s),i=r[1];if(!i)return;let n=r[0],a=Array.isArray(i),o=this.getCallBack(e,t,i,n,a),h=this._getWatcherProps(n);for(var l=0,u=h.length;l<u;l++){var c=a?i[l]:i;this.addWatcher(t,c,h[l],o)}},setup(t,e,s){e&&(Array.isArray(e)&&(e={attr:e[2],value:[e[0],e[1]]}),this.addDataWatcher(t,e,s))},addWatcher(t,e,s,r){R.watch(t,e,s,r)}},Q={created:"onCreated",state:"setupStates",events:"setupEevents",before:"beforeSetup",render:"render",after:"afterSetup",destroy:"beforeDestroy"},Y=t=>"function"==typeof t?t:function(){return t},Z=t=>{class e extends nt{}return Object.assign(e.prototype,t),e},tt=function(t){if(!t)return null;let e;switch(typeof t){case"object":return t.render?(e=(t=>{const e={};if(!t)return e;for(var s in t){if(!1===t.hasOwnProperty(s))continue;let r=t[s],i=Q[s];i?e[i]=Y(r):e[s]=r}return e})(t),(t=>{class e extends ht{}return Object.assign(e.prototype,t),e})(e)):(e={render:function(){return t}},Z(e));case"function":return e={render:t},Z(e)}},et=function(t,e){return function(s){return{onSet:[t,e,(t,e)=>s(e)]}}};h.dataTracker.addType("context",(function(t){if(!t)return!1;t.parent.removeContextBranch(t.branch)}));const st=new class{constructor(){this._reserved=["tag","bind","onCreated","route","switch","useParent","useState","useData","addState","map","for","html","onSet","onState","watch","context","useContext","addContext","role","aria","cache"]}getElementTag(t){let e="div",s=t.tag||t.t;return void 0!==s&&(e=t.tag=s),e}setupChildren(t){t.nest&&(t.children=t.nest,t.nest=null)}parseElement(t){let e={},s=[],r=this.getElementTag(t);"button"===r&&(e.type=e.type||"button"),this.setupChildren(t);const i=this._reserved;for(var n in t)if(t.hasOwnProperty(n)){var a=t[n];if(null==a)continue;if(-1!==i.indexOf(n))continue;"object"!=typeof a?e[n]=a:"children"===n?s=s.concat(a):s.push(a)}return{tag:r,attr:e,children:s}}},rt=new class extends class{create(t,e,s,r){let i=document.createElement(t);return this._addElementAttrs(i,e),!0===r?this.prepend(s,i):this.append(s,i),i}_addElementAttrs(t,e){if(!e||"object"!=typeof e)return!1;let s=e.type;for(var r in void 0!==s&&h.setAttr(t,"type",s),e)if(!1!==e.hasOwnProperty(r)&&"type"!==r){var i=e[r];"innerHTML"===r?t.innerHTML=i:"-"===r.substring(4,1)?h.setAttr(t,r,i):this.addAttr(t,r,i)}}addHtml(t,e){void 0!==e&&""!==e&&(/(?:<[a-z][\s\S]*>)/i.test(e)?t.innerHTML=e:t.textContent=e)}addAttr(t,e,s){if(""===s||!e)return!1;"function"==typeof s?(e=K(e),h.addListener(e,t,s)):t[X(e)]=s}createDocFragment(){return document.createDocumentFragment()}createTextNode(t,e){let s=document.createTextNode(t);return e&&this.append(e,s),s}createCommentNode(t,e){let s=document.createComment(t);return e&&this.append(e,s),s}setupSelectOptions(t,e,s){if(!t||"object"!=typeof t)return!1;if(!e||!e.length)return!1;for(var r=0,i=e.length;r<i;r++){var n=e[r],a=t.options[r]=new Option(n.label,n.value);null!==s&&a.value==s&&(a.selected=!0)}}removeElementData(t){let e=t.childNodes;if(e)for(var s=e.length-1;s>=0;s--){var r=e[s];r&&this.removeElementData(r)}J.remove(t),t.bindId&&R.unbind(t)}removeElement(t){let e;return t&&(e=t.parentNode)?(this.removeElementData(t),e.removeChild(t),this):this}removeChild(t){this.removeElement(t)}removeAll(t){if("object"==typeof t){let s=t.childNodes;for(var e in s)s.hasOwnProperty(e)&&this.removeElementData(s[e]);t.innerHTML=""}}changeParent(t,e){e.appendChild(t)}append(t,e){switch(typeof t){case"object":break;case"undefined":t=document.body}t.appendChild(e)}prepend(t,e,s){switch(typeof t){case"object":break;case"undefined":t=document.body}var r=s||t.firstChild;t.insertBefore(e,r)}clone(t,e){return!(!t||"object"!=typeof t)&&(e=e||!1,t.cloneNode(e))}}{create(t,e,s,r){let i=document.createElement(t);return this._addElementAttrs(i,e,r),this.append(s,i),i}_addElementAttrs(t,e,s){if(!e||"object"!=typeof e)return!1;let r=e.type;for(var i in void 0!==r&&h.setAttr(t,"type",r),e)if(!1!==e.hasOwnProperty(i)&&"type"!==i){var n=e[i];"innerHTML"===i?t.innerHTML=n:-1!==i.indexOf("-")?h.setAttr(t,i,n):this.addAttr(t,i,n,s)}}addAttr(t,e,s,r){if(""===s||!e)return!1;"function"==typeof s?(e=K(e),h.addListener(e,t,(function(t){s.call(this,t,r)}))):t[X(e)]=s}render(t,e,s){if(t){if("object"==typeof t&&!0===t.isUnit)return this.createComponent(t,e,s),t;{let r=new(tt(t));return this.createComponent(r,e,s),r}}}build(t,e,s){let r=this.createDocFragment();if(Array.isArray(t)){let e;for(var i=0,n=t.length;i<n;i++)e=t[i],this.buildElement(e,r,s)}else this.buildElement(t,r,s);return e&&"object"==typeof e&&e.appendChild(r),r}buildElement(t,e,s){t&&(t.component||!0===t.isUnit?this.createComponent(t,e,s):this.createElement(t,e,s))}append(t,e){t.appendChild(e)}createElement(t,e,s){let r=st.parseElement(t),i=this.createNode(r,e,s);const n=t.cache;s&&n&&(s[n]=i);let a=r.children;if(a.length>0){let t;for(var o=0,h=a.length;o<h;o++)t=a[o],null!==t&&this.buildElement(t,i,s)}this.addElementDirectives(i,t,s)}addElementDirectives(t,e,s){"function"==typeof e.onCreated&&e.onCreated(t,s);let r=e.bind;if(r&&this.bindElement(t,r,s),e.route&&this.addRoute(t,e.route,s),e.switch&&this.addSwitch(t,e.switch,s),e.html&&this.addHtml(t,e.html),e.useContext&&this.useContext(t,e.useContext,s),e.addContext&&this.addContext(t,e.addContext,s),e.context&&this.context(t,e.context,s),e.role&&this.addRole(t,e.role,s),e.aria&&this.addAria(t,e.aria,s),s){let r=e.onState;r&&r.length&&this.onState(t,r,s);let i=e.onSet;i&&i.length&&this.onSet(t,i,s);let n=e.map;n&&n.length&&this.map(t,n,s);let a=e.for;a&&a.length&&this.for(t,a,s);let o=e.useParent;o&&this.useParent(t,o,s);let h=e.useData;h&&this.useData(t,h,s);let l=e.useState;l&&this.useState(t,l,s);let u=e.addState;u&&this.addState(t,u,s)}e.watch&&this.watch(t,e.watch,s)}_getDataSource(t){return!!t&&(t.data?t.data:t.context&&t.context.data?t.context.data:!!t.state&&t.state)}bindElement(t,e,s){let r,i,n;if("string"==typeof e){if(r=this._getDataSource(s),!r)return!1;i=e}else if(Array.isArray(e)){if("object"!=typeof e[0]){let t=this._getDataSource(s);if(!t)return!1;e.unshift(t)}[r,i,n]=e}R.bind(t,r,i,n)}addRoute(t,e,s){if(!e)return!1;if(h.isArray(e))for(var r=0,i=e.length;r<i;r++)this.setupRoute(t,e[r],s);else this.setupRoute(t,e,s)}setupRoute(t,e,s){e.container=t,e.parent=s;let r=h.router.add(e);this.trackRoute(t,r)}checkResume(t){return t&&t.component&&t.component.route}resumeRoute(t,e){h.router.resume(e,t),this.trackRoute(t,e)}trackRoute(t,e){h.dataTracker.add(t,"routes",{route:e})}addSwitch(t,e,s){let r=e[0];for(var i=0,n=e.length;i<n;i++)r=e[i],r.container=t,r.parent=s;let a=h.router.addSwitch(e);this.trackSwitch(t,a)}resumeSwitch(t,e){let s=h.router.resumeSwitch(e,t);this.trackSwitch(t,s)}trackSwitch(t,e){h.dataTracker.add(t,"switch",{id:e})}addRole(t,e,s){e&&e&&h.setAttr(t,"role",e)}addAria(t,e,s){if(!e)return;let r=e.role;r&&(h.setAttr(t,"role",r),e.role=null);const i=t=>(e,s)=>{var r=s?"true":"false";h.setAttr(e,t,r)};for(var n in e)if(!1!==e.hasOwnProperty(n)&&null!==e[n]){var a=e[n],o="aria-"+n;Array.isArray(a)?(a.push(i(o)),this.onSet(t,a,s)):h.setAttr(t,o,a)}}getParentContext(t){return t?t.getContext():null}context(t,e,s){if("function"!=typeof e)return;let r=e(this.getParentContext(s));r&&(this._addElementAttrs(t,r,s),this.addElementDirectives(t,r,s))}useContext(t,e,s){"function"==typeof e&&e(this.getParentContext(s))}addContext(t,e,s){if("function"!=typeof e||!s)return;let r=e(this.getParentContext(s));r&&s.addContextBranch(r[0],r[1])}trackContext(t,e,s){h.dataTracker.add(t,"context",{branch:e,parent:s})}watch(t,e,s){if(!e)return!1;if(Array.isArray(e)&&"string"!=typeof e[0])for(var r=0,i=e.length;r<i;r++)$.setup(t,e[r],s);else $.setup(t,e,s)}useParent(t,e,s){if(!e||!s)return!1;e(s,t)}useData(t,e,s){if(!e||!s)return!1;e(s.data,t)}useState(t,e,s){if(!e||!s)return!1;e(s.state,t)}addState(t,e,s){if(!e||!s)return!1;if(s.stateHelper){let t=e(s.state);s.stateHelper.addStates(t)}}map(t,e,s){let r=e[0];if(!r||r.length<1)return;let i=e[1],n=[];for(var a=0,o=r.length;a<o;a++){var h=r[a];if(h){var l=i(h,a);null!==l&&n.push(l)}}return this.build(n,t,s)}for(t,e,s){let r,i,n,a;if(e.length<3){const t=this.getParentSetData(s);if(!t)return;r=t,i=e[0],n=e[1],a=e[2]}else r=e[0],i=e[1],n=e[2],a=e[3];let o=!1!==a;R.watch(t,r,i,(e=>{if(this.removeAll(t),!e||e.length<1)return;let a=[];for(var h=0,l=e.length;h<l;h++){var u=o?r.scope(i+"["+h+"]"):null,c=n(e[h],h,u);null!==c&&a.push(c)}return this.build(a,t,s)}))}onState(t,e,s){this.onUpdate(t,s.state,e,s)}getParentSetData(t){return t.data?t.data:t.context&&t.context.data?t.context.data:null}onSet(t,e,s){const r=this.getParentSetData(s);this.onUpdate(t,r,e,s)}onUpdate(t,e,s,r){let i,n,a;if(h.isArray(s[0]))for(var o=0,l=s.length;o<l;o++){var u=s[o];u&&this.onUpdate(t,e,u,r)}else{if(s.length<3?[i,n]=s:[e,i,n]=s,!e||!i)return!1;switch(typeof n){case"object":a=e=>{this.addClass(t,n,e)};break;case"function":a=e=>{this.updateElement(t,n,i,e,r)}}R.watch(t,e,i,a)}}updateElement(t,e,s,r,i){let n=e(t,r,i);switch(typeof n){case"object":if(i&&n&&!0===n.isUnit&&!0===i.persist&&i.state){let t=s+":"+r,e=i.state,a=e.get(t);void 0!==a&&(n=a),e.set(t,n)}this.rebuild(t,n,i);break;case"string":this.addHtml(t,n)}}addClass(t,e,s){for(var r in e)e.hasOwnProperty(r)&&r&&(e[r]===s?h.addClass(t,r):h.removeClass(t,r))}rebuild(t,e,s){this.removeAll(t),this.build(e,t,s)}createComponent(t,e,s){const r=t.component||t;r.parent=s,s&&!0===s.persist&&!1!==r.persist&&(r.persist=!0),r.cacheable&&s&&(s[r.cacheable]=r),r.setup(e),t.component&&"function"==typeof t.onCreated&&t.onCreated(r)}createNode(t,e,s){let r=t.tag;if("text"===r){let s=t.attr,r=s.textContent||s.text;return this.createTextNode(r,e)}if("comment"===r){let s=t.attr.text;return this.createCommentNode(s,e)}return this.create(r,t.attr,e,s)}};h.augment({buildLayout(t,e,s){rt.build(t,e,s)}}),h.dataTracker.addType("components",(t=>{if(!t)return;let e=t.component;e&&!0===e.rendered&&e.prepareDestroy()}));let it=0;class nt{constructor(t){this.isUnit=!0,this.init(),this.setupProps(t),this.onCreated(),this.rendered=!1,this.container=null}init(){this.id="cp-"+it++}setupProps(t){if(!t||"object"!=typeof t)return!1;for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e])}getParentContext(){return this.parent?this.parent.getContext():null}setupContext(){let t=this.getParentContext(),e=this.setContext(t);e?this.context=e:(this.context=t,this.setupAddingContext())}setupAddingContext(){let t=this.context,e=this.addContext(t);if(!e)return;let s=e[0];s&&(this.addingContext=!0,this.contextBranchName=s,this.addContextBranch(s,e[1]))}addContextBranch(t,e){this.context=this.context||{},this.context[t]=e}setContext(t){return null}addContext(t){return null}removeContext(){this.addingContext&&this.removeContextBranch(this.contextBranchName)}removeContextBranch(t){t&&delete this.context[t]}getContext(){return this.context}onCreated(){}render(){return{}}_cacheRoot(t){return t?(t.id||(t.id=this.getId()),t.cache="panel",t):t}_createLayout(){return this.persist?this._layout||(this._layout=this.render()):this.render()}prepareLayout(){let t=this._createLayout();return this._cacheRoot(t)}buildLayout(){let t=this.prepareLayout();this.build(t,this.container),h.dataTracker.add(this.panel,"components",{component:this}),this.rendered=!0}build(t,e){return rt.build(t,e,this)}prepend(t,e,s){var r=this.build(t,null);rt.prepend(e,r,s)}rebuild(t,e){return rt.rebuild(e,t,this)}if(t,e){return t?e||t:null}map(t,e){let s=[];if(!t||t.length<1)return s;for(var r=0,i=t.length;r<i;r++){var n=e(t[r],r);s.push(n)}return s}removeAll(t){return rt.removeAll(t)}cache(t,e,s){return!(!e||"object"!=typeof e)&&(!0===e.isUnit&&(e={component:e}),e.onCreated=e=>{this[t]=e,"function"==typeof s&&s(e)},e)}getId(t){let e=this.id;return"string"==typeof t&&(e+="-"+t),e}initialize(){this.setupContext(),this.beforeSetup(),this.buildLayout(),this.afterSetup()}beforeSetup(){}afterSetup(){}setup(t){this.container=t,this.initialize()}remove(){this.prepareDestroy(),this.removeContext();let t=this.panel||this.id;rt.removeElement(t)}prepareDestroy(){this.rendered=!1,this.beforeDestroy()}beforeDestroy(){}destroy(){this.remove()}bindElement(t,e,s,r){t&&R.bind(t,e,s,r)}}class at{constructor(){this.events=[]}addEvents(t){let e,s=t.length;if(s<1)return!1;for(var r=0;r<s;r++)e=t[r],this.on(...e)}on(t,e,s,r){h.on(t,e,s,r),this.events.push({event:t,obj:e,callBack:s,capture:r})}off(t,e,s,r){h.off(t,e,s,r);let i,n=this.events;for(var a=0,o=n.length;a<o;a++)if(i=n[a],i.event===t&&i.obj===e){n.splice(a,1);break}}set(){let t,e=this.events;for(var s=0,r=e.length;s<r;s++)t=e[s],h.on(t.event,t.obj,t.callBack,t.capture)}unset(){let t,e=this.events;for(var s=0,r=e.length;s<r;s++)t=e[s],h.off(t.event,t.obj,t.callBack,t.capture)}reset(){this.unset(),this.events=[]}}class ot{constructor(t,e){this.remoteStates=[];let s=this.convertStates(e);this.addStatesToTarget(t,s)}addStates(t,e){let s=this.convertStates(e);this.addStatesToTarget(t,s)}createState(t,e,s,r){return{action:t,state:e,callBack:s,targetId:r,token:null}}convertStates(t){let e=[];for(var s in t)if(!1!==t.hasOwnProperty(s))if("remotes"!==s){var r=null,i=null,n=t[s];n&&"object"==typeof n&&(i=n.callBack,r=n.id||n.targetId,n=n.state),e.push(this.createState(s,n,i,r))}else this.setupRemoteStates(t[s],e);return e}setupRemoteStates(t,e){let s;for(var r=0,i=t.length;r<i;r++)if(s=t[r],s)for(var n in s)if(!1!==s.hasOwnProperty(n)&&"id"!==n){var a=null,o=s[n],h=null!==o?o:void 0;h&&"object"==typeof h&&(a=h.callBack,h=h.state),e.push(this.createState(n,h,a,s.id))}}removeRemoteStates(){let t=this.remoteStates;t&&this.removeActions(t)}removeActions(t){if(!(t.length<1))for(var e=0,s=t.length;e<s;e++){var r=t[e];q.remove(r.targetId,r.action,r.token)}}restore(t){t.restore();let e=this.remoteStates;if(e)for(var s=0,r=e.length;s<r;s++){var i=e[s];i.token=this.bindRemoteState(t,i.action,i.targetId)}}bindRemoteState(t,e,s){const r=q.getTarget(s);return t.link(r,e)}addStatesToTarget(t,e){let s=this.remoteStates;for(var r=0,i=e.length;r<i;r++){var n=e[r],a=this.addAction(t,n);n.targetId&&(n.token=a,s.push(n))}s.length<1&&(this.remoteStates=null)}addAction(t,e){let s,r=e.action,i=e.targetId;i&&(s=this.bindRemoteState(t,r,i)),void 0!==e.state&&t.addAction(r,e.state);let n=e.callBack;return"function"==typeof n&&t.on(r,n),s}}class ht extends nt{constructor(t){super(t),this.isComponent=!0,this.stateTargetId=null}initialize(){this.setupContext(),this.beforeSetup(),this.addStates(),this.buildLayout(),this.addEvents(),this.afterSetup()}setupStateTarget(t){let e=t||this.stateTargetId||this.id;this.state=q.getTarget(e)}setupStates(){return{}}addStates(){let t=this.state;if(t)return void this.stateHelper.restore(t);let e=this.setupStates();h.isEmpty(e)||(this.setupStateTarget(),this.stateHelper=new ot(this.state,e))}removeStates(){let t=this.state;if(!t)return!1;this.stateHelper.removeRemoteStates(),t.remove()}setupEventHelper(){this.events||(this.events=new at)}setupEvents(){return[]}addEvents(){let t=this.setupEvents();if(t.length<1)return!1;this.setupEventHelper(),this.events.addEvents(t)}removeEvents(){let t=this.events;t&&t.reset()}prepareDestroy(){this.rendered=!1,this.beforeDestroy(),this.removeEvents(),this.removeStates(),this.removeContext(),this.data&&!1===this.persist&&this.data.unlink()}}class lt extends ht{beforeSetup(){this.selectedClass=this.activeClass||"active"}render(){let t=this.href,e=this.text,s=this.setupWatchers(t,e);return{tag:"a",className:this.className||null,onState:["selected",{[this.selectedClass]:!0}],href:this.getString(t),text:this.getString(e),children:this.children,watch:s}}getString(t){let e=typeof t;return"object"!==e&&"undefined"!==e?t:null}setupWatchers(t,e){let s=!1!==this.exact,r=xt.data,i=[];return t&&"object"==typeof t&&i.push({attr:"href",value:t}),e&&"object"==typeof e&&i.push({attr:"text",value:e}),i.push({value:["[[path]]",r],callBack:(t,e)=>{let r=t.pathname+t.hash,i=s?e===r:new RegExp("^"+t.pathname+"($|#|/|\\.).*").test(e);this.update(t,i)}}),i}setupStates(){return{selected:!1}}update(t,e){this.state.set("selected",e)}}const ut=t=>("string"==typeof t&&("/"===t.substring(0,1)&&(t=t.substring(1)),"/"===t.substring(-1)&&(t=t.substring(0,t.length-1))),t);class ct{constructor(t,e){this.route=t,this.template=e.component,this.component=null,this.hasTemplate=!1,this.setup=!1,this.container=e.container,this.persist=e.persist,this.parent=e.parent,this.setupTemplate()}focus(t){!1===this.setup&&this.create(),this.update(t)}setupTemplate(){let t=this.template;if("string"==typeof t&&(t=this.template=window[t],!t))return;let e=typeof t;if("function"===e)this.component=new this.template({route:this.route,persist:this.persist,parent:this.parent});else if("object"===e){this.template.isUnit||(this.template=Jot(this.template));let t=this.component=this.template,e=!1!==t.persist;t.route=this.route,t.persist=e,t.parent=this.parent,this.persist=e}this.hasTemplate=!0}create(){if(!this.hasTemplate)return!1;this.setup=!0;let t=this.component;this.persist&&t||(t=this.component=this.template),rt.render(t,this.container,this.parent)}remove(){if(!0!==this.setup)return!1;this.setup=!1;let t=this.component;if(!t)return!1;"function"==typeof t.destroy&&t.destroy(),!1===this.persist&&(this.component=null)}update(t){let e=this.component;if(!e)return!1;"function"==typeof e.update&&e.update(t)}}const dt=[],pt=t=>-1!==dt.indexOf(t);class ft{constructor(t){this.percent=0,this.loaded=0,this.total=0,this.callBack=t||null}add(t){let e;this.total++;const s=this.update.bind(this);var r;e=-1!==t.indexOf(".css")?{tag:"link",rel:"stylesheet",type:"text/css",href:(r={load:s,src:t}).src,load(t){dt.push(r.src);const e=r.load;e&&e()}}:(t=>({tag:"script",src:t.src,async:!1,load(e){dt.push(t.src);const s=t.load;s&&s()}}))({load:s,src:t}),rt.build(e,document.head)}addFiles(t){if(t)for(var e=0,s=t.length;e<s;e++){var r=t[e];pt(r)||this.add(r)}}update(){if(this.updateProgress()>=100){var t=this.callBack;t&&t()}}updateProgress(){return++this.loaded,this.percent=Math.floor(this.loaded/this.total*100)}}const gt=tt({render(){return{tag:"comment",text:"import placeholder",onCreated:{onCreated:t=>{this.src&&(this.depends?new ft((()=>{this.loadAndRender(t)})).addFiles(this.depends):this.loadAndRender(t))}}.onCreated}},getLayout(t){let e=t.default;if(!e)return null;const s=this.callBack;var r;return s?e=s(e):(r=e)&&"function"==typeof r?.prototype?.constructor?(e=new e,e.route=this.route,this.persist&&(e.persist=!0)):e=e(),this.layout=e},loadAndRender(t){var e,r;e=this.src,r=e=>{this.loaded=!0;const s=this.layout||this.getLayout(e);this.layoutRoot=((t,e,s)=>{const r=rt.build(t,null,s),i=r.firstChild;return e.after(r),i})(s,t,this.parent)},s(877)(e).then((t=>{r&&r(t)}))},shouldUpdate(t){return!0===this.updateLayout||(this.updateLayout=t&&t.isUnit&&"function"==typeof t.update)},updateModuleLayout(t){const e=this.layout;this.shouldUpdate(e)&&e.update(t)},update(t){!0===this.loaded&&this.updateModuleLayout(t)},beforeDestroy(){this.layoutRoot&&rt.removeElement(this.layoutRoot)}});let vt=0;class mt extends U{constructor(t){let e=t.baseUri;const s=(t=>{let e=[];if(!t)return e;let s=(t=t.replace(/[\*?]/g,"")).match(/:(.[^.\/?&($]+)\?*/g);if(null===s)return e;for(var r=0,i=s.length;r<i;r++){var n=s[r];n&&(n=n.replace(":",""),e.push(n))}return e})(e);super((t=>{if(t.length){let r={};for(var e=0,s=t.length;e<s;e++)r[t[e]]=null;return r}return null})(s)),this.uri=e,this.paramKeys=s,this.setupRoute(t),this.set("active",!1)}setupRoute(t){this.id=t.id||"bs-rte-"+vt++,this.path=null,this.referralPath=null;let e=(t=>{let e="";if(t){let s=/\//g;e=t.replace(s,"/");let r=/(\/):[^\/(]*?\?/g;e=e.replace(r,(t=>t.replace(/\//g,"(?:$|/)")));let i=/(:[^\/?&($]+)/g,n=/(\?\/+\*?)/g;e=e.replace(n,"?/*"),e=e.replace(i,(t=>t.indexOf(".")<0?"([^/|?]+)":"([^/|?]+.*)"));let a=/(\*)/g;e=e.replace(a,".*")}return e+="*"===t[t.length-1]?"":"$",e})(this.uri);this.uriQuery=new RegExp("^"+e),this.params=null,this.setupComponentHelper(t),this.callBack=t.callBack,this.title=t.title}setTitle(t){base.router.updateTitle({title:t,stage:this.stage})}deactivate(){this.set("active",!1);let t=this.controller;t&&t.remove()}getLayout(t){if(t.component)return t.component;let e=t.import;return e?("string"==typeof e&&(e={src:e}),new gt(e)):null}setupComponentHelper(t){const e=this.getLayout(t);if(e){let{container:s,persist:r=!1,parent:i}=t;const n={component:e,container:s,persist:r,parent:i};this.controller=new ct(this,n)}}resume(t){let e=this.controller;e&&(e.container=t)}setPath(t,e){this.path=t,this.referralPath=e}select(){this.set("active",!0);let t=this.stage,e=this.callBack;"function"==typeof e&&e(t);let s=this.controller;s&&s.focus(t);let r=this.path;if(!r)return;let i=r.split("#")[1];i&&this.scrollToId(i)}scrollToId(t){if(!t)return;let e=document.getElementById(t);e&&e.scrollIntoView(!0)}match(t){let e=!1,s=t.match(this.uriQuery);return null===s?(this.resetParams(),e):(s&&"object"==typeof s&&(s.shift(),e=s,this.setParams(s)),e)}resetParams(){this.stage={}}setParams(t){if(t&&"object"==typeof t){let i=this.paramKeys;if(i){let n={};for(var e=0,s=i.length;e<s;e++){var r=i[e];void 0!==r&&(n[r]=t[e])}this.set(n)}}}getParams(){return this.stage}}class yt{static browserIsSupported(){return"history"in window&&"pushState"in window.history}static setup(t){return yt.browserIsSupported()?new kt(t).setup():new St(t).setup()}}let bt=0;class wt{constructor(t){this.router=t,this.locationId="base-app-router-"+bt++,this.callBack=this.check.bind(this)}setup(){return this.addEvent(),this}}class kt extends wt{addEvent(){return h.on("popstate",window,this.callBack),this}removeEvent(){return h.off("popstate",window,this.callBack),this}check(t){let e=t.state;if(!e||e.location!==this.locationId)return!1;t.preventDefault(),t.stopPropagation(),this.router.checkActiveRoutes(e.uri)}createState(t,e){let s={location:this.locationId,uri:t};return e&&"object"==typeof e&&(s=Object.assign(s,e)),s}addState(t,e,s){let r=window.history,i=r.state;if(i&&i.uri===t)return this;let n=this.createState(t,e);return r[!1==(s=!0===s)?"pushState":"replaceState"](n,null,t),this}}class St extends wt{addEvent(){return h.on("hashchange",window,this.callBack),this}removeEvent(){return h.off("hashchange",window,this.callBack),this}check(t){this.router.checkActiveRoutes(t.newURL)}addState(t,e,s){return window.location.hash=t,this}}h.dataTracker.addType("routes",(t=>{if(!t)return!1;const e=t.route;e&&xt.removeRoute(e)})),h.dataTracker.addType("switch",(t=>{if(!t)return!1;let e=t.id;xt.removeSwitch(e)}));const xt=new class{constructor(){this.version="1.0.2",this.baseURI="/",this.title="",this.lastPath=null,this.path=null,this.history=null,this.callBackLink=null,this.location=window.location,this.routes=[],this.switches={},this.switchCount=0,this.data=new M({path:""})}setupHistory(){this.history=yt.setup(this)}createRoute(t){let e=t.uri||"*";return t.baseUri=this.createURI(e),new mt(t)}add(t){if("object"!=typeof t){let e=arguments;t={uri:e[0],component:e[1],callBack:e[2],title:e[3],id:e[4],container:e[5]}}const e=this.createRoute(t);return this.addRoute(e),e}addRoute(t){this.routes.push(t),this.checkRoute(t,this.getPath())}resume(t,e){t.resume(e),this.addRoute(t)}getBasePath(){if(!this.basePath){let t=this.baseURI||"";"/"!==t[t.length-1]&&(t+="/"),this.basePath=t}return this.basePath}createURI(t){return this.getBasePath()+ut(t)}getRoute(t){let e=this.routes,s=e.length;if(s>0)for(var r=0;r<s;r++){var i=e[r];if(i.uri===t)return i}return!1}getRouteById(t){let e=this.routes,s=e.length;if(s>0)for(var r=0;r<s;r++){var i=e[r];if(i.id===t)return i}return!1}removeRoute(t){let e=this.routes,s=e.indexOf(t);s>-1&&e.splice(s,1)}addSwitch(t){let e=this.switchCount++,s=this.getSwitchGroup(e);for(var r=0,i=t.length;r<i;r++){var n=this.createRoute(t[r]);s.push(n)}return this.checkGroup(s,this.getPath()),e}resumeSwitch(t,e){let s=this.switchCount++,r=this.getSwitchGroup(s);for(var i=0,n=t.length;i<n;i++){var a=t[i].component.route;a.resume(e),r.push(a)}return this.checkGroup(r,this.getPath()),s}getSwitchGroup(t){return this.switches[t]=[]}removeSwitch(t){let e=this.switches;e[t]&&delete e[t]}remove(t){t=this.createURI(t);let e=this.getRoute(t);return!1!==e&&this.removeRoute(e),this}setup(t,e){this.baseURI=t||"/",this.updateBaseTag(this.baseURI),this.title=void 0!==e?e:"",this.setupHistory(),this.data.set("path",this.getPath()),this.callBackLink=this.checkLink.bind(this),h.on("click",document,this.callBackLink);let s=this.getEndPoint();return this.navigate(s,null,!0),this}updateBaseTag(t){let e=document.getElementsByTagName("base");e.length&&(e[0].href=t)}getParentLink(t){let e=t.parentNode;for(;null!==e;){if("a"===e.nodeName.toLowerCase())return e;e=e.parentNode}return!1}checkLink(t){if(!0===t.ctrlKey)return!0;let e=t.target||t.srcElement;if("a"!==e.nodeName.toLowerCase()&&(e=this.getParentLink(e),!1===e))return!0;if("_blank"===e.target||h.data(e,"cancel-route"))return!0;let s=e.getAttribute("href");if(void 0!==s){let e=this.baseURI,r="/"!==e?s.replace(e,""):s;return this.navigate(r),t.preventDefault(),t.stopPropagation(),!1}}reset(){return this.routes=[],this.switches=[],this.switchCount=0,this}activate(){return this.checkActiveRoutes(),this}navigate(t,e,s){return t=this.createURI(t),this.history.addState(t,e,s),this.activate(),this}updatePath(){let t=this.getPath();this.data.set("path",t)}updateTitle(t){if(!t||!t.title)return this;let e=t.title;document.title=(e=>(e&&("function"==typeof e&&(e=e(t.stage)),e=(e=(e=>{if(e.indexOf(":")>-1){let n=t.stage;for(var s in n)if(n.hasOwnProperty(s)){var r=n[s],i=new RegExp(":"+s,"gi");e=e.replace(i,r)}}return e})(e)).replace(/\w\S*/,(t=>t.charAt(0).toUpperCase()+t.substring(1).toLowerCase())),""!==this.title&&(e+=" - "+this.title)),e))(e)}checkActiveRoutes(t){this.lastPath=t,t=t||this.getPath(),this.path=t;let e,s=this.routes,r=s.length;for(var i=0;i<r;i++)e=s[i],void 0!==e&&this.checkRoute(e,t);this.checkSwitches(t),this.updatePath()}checkSwitches(t){let e=this.switches;for(var s in e)if(!1!==e.hasOwnProperty(s)){var r=e[s];this.checkGroup(r,t)}}checkGroup(t,e){let s,r,i,n,a=!1,o=!1;for(var h=0,l=t.length;h<l;h++)s=t[h],void 0!==s&&(0===h&&(r=s),!i&&s.get("active")&&(i=s),!1===a?(a=s.match(e),!1!==a&&(n=s,s.controller&&(this.select(s),o=!0))):o&&s.deactivate());void 0===n?(this.select(r),i&&r!==i&&i.deactivate()):i?o&&n!==i&&i.deactivate():r&&!1===o&&this.select(r)}checkRoute(t,e){let s=this.check(t,e);return!1!==s?this.select(t):t.deactivate(),s}check(t,e){return!!t&&(e=e||this.getPath(),!1!==t.match(e))}select(t){if(!t)return!1;t.setPath(this.path,this.lastPath),t.select(),this.updateTitle(t)}getEndPoint(){return this.getPath().replace(this.baseURI,"")||"/"}destroy(){h.off("click",document,this.callBackLink)}getPath(){let t=this.location,e=this.path=t.pathname;return"hash"===this.history.type?t.hash.replace("#",""):e+t.search+t.hash}},jt=function(){};jt.extend=function e(s){let r=this;if("object"==typeof s){let e=s;s=s=>t.cloneObject(e)}const i=(e={})=>{let i=s(e=e||{}),n=r(e);return"object"==typeof n&&(i=t.extendObject(n,i)),i};return i.extend=e,i},h.augment({ajax:f,dataBinder:R,Data:M,SimpleData:U,Model:F,state:q,builder:rt,router:xt,Component:ht})})(),r})()));
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@base-framework/base",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.2",
|
|
4
4
|
"description": "This is a javascript framework.",
|
|
5
|
-
"main": "base.
|
|
5
|
+
"main": "/dist/base.js",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"prepublishOnly"
|
|
7
|
+
"prepublishOnly": "webpack --mode=production"
|
|
8
8
|
},
|
|
9
9
|
"keywords": [
|
|
10
10
|
"JavaScript",
|
|
@@ -22,7 +22,12 @@
|
|
|
22
22
|
"url": "https://github.com/chrisdurfee/base/issues"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"uglify-js": "^3.17.0"
|
|
25
|
+
"uglify-js": "^3.17.0",
|
|
26
|
+
"webpack": "^5.74.0",
|
|
27
|
+
"webpack-cli": "^4.10.0"
|
|
26
28
|
},
|
|
29
|
+
"files": [
|
|
30
|
+
"dist"
|
|
31
|
+
],
|
|
27
32
|
"homepage": "https://github.com/chrisdurfee/base#readme"
|
|
28
33
|
}
|
package/.jshintrc
DELETED
package/base.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import {base} from './core.js';
|
|
2
|
-
import {ajax} from './modules/ajax/ajax.js';
|
|
3
|
-
import {dataBinder} from './modules/data-binder/data-binder.js';
|
|
4
|
-
import {Data, SimpleData, Model} from './modules/data/data.js';
|
|
5
|
-
import {state} from './modules/state/state.js';
|
|
6
|
-
import {router, NavLink} from './modules/router/router.js';
|
|
7
|
-
import {builder} from './modules/layout/layout-builder.js';
|
|
8
|
-
import {Unit, Component, Jot, Watch} from './modules/component/component.js';
|
|
9
|
-
import {Atom} from './modules/atom/atom.js';
|
|
10
|
-
|
|
11
|
-
base.augment(
|
|
12
|
-
{
|
|
13
|
-
ajax,
|
|
14
|
-
dataBinder,
|
|
15
|
-
Data,
|
|
16
|
-
SimpleData,
|
|
17
|
-
Model,
|
|
18
|
-
state,
|
|
19
|
-
builder,
|
|
20
|
-
router,
|
|
21
|
-
Component
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
export {
|
|
25
|
-
base,
|
|
26
|
-
ajax,
|
|
27
|
-
dataBinder,
|
|
28
|
-
Data,
|
|
29
|
-
SimpleData,
|
|
30
|
-
Model,
|
|
31
|
-
state,
|
|
32
|
-
builder,
|
|
33
|
-
router,
|
|
34
|
-
Unit,
|
|
35
|
-
Component,
|
|
36
|
-
Jot,
|
|
37
|
-
Watch,
|
|
38
|
-
NavLink,
|
|
39
|
-
Atom
|
|
40
|
-
};
|
|
41
|
-
|
package/base.min.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{base}from"./core.js";import{ajax}from"./modules/ajax/ajax.js";import{dataBinder}from"./modules/data-binder/data-binder.js";import{Data,SimpleData,Model}from"./modules/data/data.js";import{state}from"./modules/state/state.js";import{router,NavLink}from"./modules/router/router.js";import{builder}from"./modules/layout/layout-builder.js";import{Unit,Component,Jot,Watch}from"./modules/component/component.js";import{Atom}from"./modules/atom/atom.js";base.augment({ajax:ajax,dataBinder:dataBinder,Data:Data,SimpleData:SimpleData,Model:Model,state:state,builder:builder,router:router,Component:Component});export{base,ajax,dataBinder,Data,SimpleData,Model,state,builder,router,Unit,Component,Jot,Watch,NavLink,Atom};
|
package/core.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {base} from './events.js';
|
package/data-tracker.js
DELETED
|
@@ -1,351 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TrackerTypes
|
|
3
|
-
*
|
|
4
|
-
* This will add and remove tracker types to the data tracker.
|
|
5
|
-
*
|
|
6
|
-
*/
|
|
7
|
-
const TrackerTypes =
|
|
8
|
-
{
|
|
9
|
-
/**
|
|
10
|
-
* @member {object} The Type and callBack that is called
|
|
11
|
-
* when the type is removed from the object.
|
|
12
|
-
*/
|
|
13
|
-
types: {},
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* This will add a type.
|
|
17
|
-
* @param {string} type
|
|
18
|
-
* @param {function} callBack The function to call when an object
|
|
19
|
-
* is having the type removed.
|
|
20
|
-
*/
|
|
21
|
-
add(type, callBack)
|
|
22
|
-
{
|
|
23
|
-
this.types[type] = callBack;
|
|
24
|
-
},
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* This will get a type or return false.
|
|
28
|
-
* @param {string} type
|
|
29
|
-
* @return {(function|boolean)} The callBack or false.
|
|
30
|
-
*/
|
|
31
|
-
get(type)
|
|
32
|
-
{
|
|
33
|
-
return this.types[type] || false;
|
|
34
|
-
},
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* This will remove a type.
|
|
38
|
-
* @param {string} type
|
|
39
|
-
*/
|
|
40
|
-
remove(type)
|
|
41
|
-
{
|
|
42
|
-
delete this.types[type];
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Tracker
|
|
48
|
-
*
|
|
49
|
-
* This will create a tracker for an object that will
|
|
50
|
-
* store each type added and the data stored to
|
|
51
|
-
* each type.
|
|
52
|
-
*
|
|
53
|
-
* @class
|
|
54
|
-
*/
|
|
55
|
-
class Tracker
|
|
56
|
-
{
|
|
57
|
-
/**
|
|
58
|
-
* @constructor
|
|
59
|
-
*/
|
|
60
|
-
constructor()
|
|
61
|
-
{
|
|
62
|
-
/**
|
|
63
|
-
* @member {object} types
|
|
64
|
-
*/
|
|
65
|
-
this.types = {};
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* This will add data to a type.
|
|
70
|
-
*
|
|
71
|
-
* @public
|
|
72
|
-
* @param {string} addingType The type of data.
|
|
73
|
-
* @param {*} data The data to store
|
|
74
|
-
*/
|
|
75
|
-
add(addingType, data)
|
|
76
|
-
{
|
|
77
|
-
let type = this.types[addingType] || (this.types[addingType] = []);
|
|
78
|
-
type.push(data);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* This will get all the data stored to a data type.
|
|
83
|
-
* @param {string} type
|
|
84
|
-
* @return {*|boolean} the data or false.
|
|
85
|
-
*/
|
|
86
|
-
get(type)
|
|
87
|
-
{
|
|
88
|
-
return this.types[type] || false;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* This will call the callBack with the data.
|
|
93
|
-
*
|
|
94
|
-
* @private
|
|
95
|
-
* @param {function} callBack
|
|
96
|
-
* @param {*} data
|
|
97
|
-
*/
|
|
98
|
-
removeByCallBack(callBack, data)
|
|
99
|
-
{
|
|
100
|
-
if(typeof callBack === 'function')
|
|
101
|
-
{
|
|
102
|
-
callBack(data);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* This will remove the data by type.
|
|
108
|
-
*
|
|
109
|
-
* @private
|
|
110
|
-
* @param {string} removingType
|
|
111
|
-
*/
|
|
112
|
-
removeType(removingType)
|
|
113
|
-
{
|
|
114
|
-
let types = this.types;
|
|
115
|
-
if(types)
|
|
116
|
-
{
|
|
117
|
-
let type = types[removingType];
|
|
118
|
-
if(type.length)
|
|
119
|
-
{
|
|
120
|
-
let data,
|
|
121
|
-
callBack = TrackerTypes.get(removingType);
|
|
122
|
-
for(var i = 0, length = type.length; i < length; i++)
|
|
123
|
-
{
|
|
124
|
-
data = type[i];
|
|
125
|
-
if(data)
|
|
126
|
-
{
|
|
127
|
-
// this will stop any circular referrences
|
|
128
|
-
type[i] = null;
|
|
129
|
-
|
|
130
|
-
this.removeByCallBack(callBack, data);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
delete types[type];
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* This will remove the data by type or all if no type is
|
|
140
|
-
* set.
|
|
141
|
-
*
|
|
142
|
-
* @public
|
|
143
|
-
* @param {string} [type]
|
|
144
|
-
*/
|
|
145
|
-
remove(type)
|
|
146
|
-
{
|
|
147
|
-
if(type)
|
|
148
|
-
{
|
|
149
|
-
this.removeType(type);
|
|
150
|
-
}
|
|
151
|
-
else
|
|
152
|
-
{
|
|
153
|
-
let types = this.types;
|
|
154
|
-
for(var prop in types)
|
|
155
|
-
{
|
|
156
|
-
if(types.hasOwnProperty(prop))
|
|
157
|
-
{
|
|
158
|
-
type = types[prop];
|
|
159
|
-
if(!type)
|
|
160
|
-
{
|
|
161
|
-
continue;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
this.removeType(prop);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
delete this.types;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* DataTracker
|
|
175
|
-
*
|
|
176
|
-
* This will add data tracking for objects. The DataTracker is
|
|
177
|
-
* a single point where any data can be tracked to an object
|
|
178
|
-
* or element. Modules can register types to store their own
|
|
179
|
-
* data that can allow the data to be removed when the element
|
|
180
|
-
* is removed.
|
|
181
|
-
*
|
|
182
|
-
* @class
|
|
183
|
-
*/
|
|
184
|
-
export class DataTracker
|
|
185
|
-
{
|
|
186
|
-
/**
|
|
187
|
-
* @constructor
|
|
188
|
-
*/
|
|
189
|
-
constructor()
|
|
190
|
-
{
|
|
191
|
-
/**
|
|
192
|
-
* @private
|
|
193
|
-
* @member trackers This is an object that stores all tracker
|
|
194
|
-
* objects by tracking id.
|
|
195
|
-
*/
|
|
196
|
-
this.trackers = {};
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* @private
|
|
200
|
-
* @member {int} trackingCount
|
|
201
|
-
*/
|
|
202
|
-
this.trackingCount = 0;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* This will add a new type to the data tracker.
|
|
207
|
-
*
|
|
208
|
-
* @public
|
|
209
|
-
* @param {string} type The new type.
|
|
210
|
-
* @param {function} callBack The callBack to help clean
|
|
211
|
-
* up data when removed.
|
|
212
|
-
*/
|
|
213
|
-
addType(type, callBack)
|
|
214
|
-
{
|
|
215
|
-
TrackerTypes.add(type, callBack);
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/**
|
|
219
|
-
* This will remove a type from the data tracker.
|
|
220
|
-
* @param {string} type
|
|
221
|
-
*/
|
|
222
|
-
removeType(type)
|
|
223
|
-
{
|
|
224
|
-
TrackerTypes.remove(type);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
/**
|
|
228
|
-
* This will get the object tracking id or set it if
|
|
229
|
-
* not set.
|
|
230
|
-
*
|
|
231
|
-
* @param {object} obj
|
|
232
|
-
* @return {string}
|
|
233
|
-
*/
|
|
234
|
-
getTrackingId(obj)
|
|
235
|
-
{
|
|
236
|
-
return obj.trackingId || (obj.trackingId = 'dt' + this.trackingCount++);
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
/**
|
|
240
|
-
* This will add data to an object.
|
|
241
|
-
*
|
|
242
|
-
* @param {object} obj
|
|
243
|
-
* @param {string} type The type name.
|
|
244
|
-
* @param {*} data The data to track.
|
|
245
|
-
*/
|
|
246
|
-
add(obj, type, data)
|
|
247
|
-
{
|
|
248
|
-
const id = this.getTrackingId(obj),
|
|
249
|
-
tracker = this.find(id);
|
|
250
|
-
|
|
251
|
-
tracker.add(type, data);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* This will get the data from a type or the tracker object
|
|
256
|
-
* if type is not set.
|
|
257
|
-
*
|
|
258
|
-
* @param {object} obj
|
|
259
|
-
* @param {string} [type]
|
|
260
|
-
* @return {*}
|
|
261
|
-
*/
|
|
262
|
-
get(obj, type)
|
|
263
|
-
{
|
|
264
|
-
const id = obj.trackingId;
|
|
265
|
-
let tracker = this.trackers[id];
|
|
266
|
-
if(!tracker)
|
|
267
|
-
{
|
|
268
|
-
return false;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
return (type)? tracker.get(type) : tracker;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* This will get the tracker or create a new tracker
|
|
276
|
-
* if no tracker is set.
|
|
277
|
-
*
|
|
278
|
-
* @param {string} id
|
|
279
|
-
* @return {object} The tracker.
|
|
280
|
-
*/
|
|
281
|
-
find(id)
|
|
282
|
-
{
|
|
283
|
-
let trackers = this.trackers;
|
|
284
|
-
return (trackers[id] || (trackers[id] = new Tracker()));
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
/**
|
|
288
|
-
* This will check if an object is empty.
|
|
289
|
-
*
|
|
290
|
-
* @param {object} obj
|
|
291
|
-
* @return {boolean}
|
|
292
|
-
*/
|
|
293
|
-
isEmpty(obj)
|
|
294
|
-
{
|
|
295
|
-
if(!obj || typeof obj !== 'object')
|
|
296
|
-
{
|
|
297
|
-
return true;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
/* we want to loop through each property and
|
|
301
|
-
check if it belongs to the object directly */
|
|
302
|
-
for(var key in obj)
|
|
303
|
-
{
|
|
304
|
-
if(obj.hasOwnProperty(key))
|
|
305
|
-
{
|
|
306
|
-
return false;
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
return true;
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
/**
|
|
313
|
-
* This will remove a type or all data for an object if
|
|
314
|
-
* no type is set.
|
|
315
|
-
*
|
|
316
|
-
* @param {object} obj
|
|
317
|
-
* @param {stirng} [type]
|
|
318
|
-
*/
|
|
319
|
-
remove(obj, type)
|
|
320
|
-
{
|
|
321
|
-
const id = obj.trackingId;
|
|
322
|
-
if(!id)
|
|
323
|
-
{
|
|
324
|
-
return true;
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
let tracker = this.trackers[id];
|
|
328
|
-
if(!tracker)
|
|
329
|
-
{
|
|
330
|
-
return false;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
if(type)
|
|
334
|
-
{
|
|
335
|
-
tracker.remove(type);
|
|
336
|
-
|
|
337
|
-
/* this will remove the msg from the elements
|
|
338
|
-
if no elements are listed under the msg */
|
|
339
|
-
if(this.isEmpty(tracker.types))
|
|
340
|
-
{
|
|
341
|
-
delete this.trackers[id];
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
else
|
|
345
|
-
{
|
|
346
|
-
tracker.remove();
|
|
347
|
-
|
|
348
|
-
delete this.trackers[id];
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
}
|