-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsimpla-element-behavior.html
1 lines (1 loc) · 2.82 KB
/
simpla-element-behavior.html
1
<script>"use strict";function _defineProperty(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var _extends=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},DEFAULT_CONFIG={getCallback:"_updateFromSimpla",setCallback:"_updateSimplaBuffer"},ERRORS={NO_SIMPLA:"Cannot find Simpla, ensure it is included before this component"};window.SimplaBehaviors=window.SimplaBehaviors||{},SimplaBehaviors.Element=function(e){var t=_extends({},DEFAULT_CONFIG,e),a=t.type,i=t.getCallback,r=t.setCallback,n=t.dataProperties,o=function(e){return"_syncedPropertiesObserver("+e+".*)"};return{properties:{path:{type:String,observer:"_initPathIfReady"},editable:{type:Boolean,observer:"_disableEditableIfReadonly",notify:!0},readonly:{type:Boolean,observer:"_updateReadonly"},loaded:{type:Boolean,readOnly:!0,notify:!0,value:!1},__simplaObservers:{type:Object,value:function(){return{}}}},observers:n.map(o),created:function(){if(!window.Simpla)throw new Error(ERRORS.NO_SIMPLA)},attached:function(){this._attached=!0,this.editable=!this.readonly&&(this.editable||Simpla.getState("editable")),this._observeSimplaEditable(),this._initPathIfReady(this.path)},detached:function(){var e=this;Object.keys(this.__simplaObservers).forEach(function(t){e.__simplaObservers[t].unobserve()}),this.__simplaObservers={}},_initPathIfReady:function(e){this._attached&&void 0!==e&&this._initSimplaPath(e)},_updateReadonly:function(e){this.editable=!e&&Simpla.getState("editable")},_disableEditableIfReadonly:function(e){this.readonly&&e&&(this.editable=!1)},_initSimplaPath:function(e){var t=this;this._setLoaded(!1),Simpla.get(e).then(function(a){var i=!(a&&a.data),r=t.path!==e,n=Simpla.getState("buffer"),o=n&&n[e]&&!n[e].modified;r||(i&&o?t._protectedSetCallback():t._protectedGetCallback(a),t._setLoaded(!0))}),this._observeSimplaBuffer(e)},_observeSimplaBuffer:function(e){var t=this,a=this.__simplaObservers;e&&(a.buffer&&a.buffer.unobserve(),a.buffer=Simpla.observe(e,function(e){e&&e.data&&t._protectedGetCallback(e)}))},_updateSimplaBuffer:function(){var e=this;return n.reduce(function(t,a){return _extends(t,_defineProperty({},a,e[a]))},{})},_updateFromSimpla:function(e){_extends(this,e.data)},_protectedGetCallback:function(e){this.__loadingFromSimpla=!0,this[i](e),this.__loadingFromSimpla=!1},_protectedSetCallback:function(){if(!this.__loadingFromSimpla&&this._attached&&this.path){var e=this[r]();void 0===e&&null!==e||Simpla.set(this.path,{type:a,data:e})}},_syncedPropertiesObserver:function(){this.loaded&&this._protectedSetCallback()},_observeSimplaEditable:function(){var e=this,t=this.__simplaObservers;t.editable&&t.editable.unobserve(),t.editable=Simpla.observeState("editable",function(t){e.readonly||(e.editable=t)})}}}</script>