kekule
Version:
Open source JavaScript toolkit for chemoinformatics
1 lines • 9.89 kB
JavaScript
!function(){"use strict";if("undefined"!=typeof HTMLElement){Kekule.WebComponent={},Kekule.globalOptions.add("webComponent.init",{shadowInitOptions:{mode:"open"}}),Kekule.globalOptions.add("webComponent.widgetWrapper",{exposeWidgetProperties:!0,exposeWidgetMethods:!1,ignoredProperties:["id","draggable","droppable","innerHTML","style","offsetParent","offsetLeft","offsetTop","offsetWidth","offsetHeight"],ignoredMethods:["constructor","initialize","finalize","doFinalize","afterInitialization","initProperties","initPropValues","saved","loaded","invokeEvent"]});Kekule.WebComponent;var e=Kekule.DomUtils;Kekule.WebComponent.WebComponentContextEventRelayer=Class.create(Kekule.Widget.BaseEventsReceiver,{CLASS_NAME:"Kekule.WebComponent.WebComponentContextEventRelayer",initialize:function(t,o,i){this._globalManager=i,this.tryApplySuper("initialize",[t,o]),this._isInShadow=o&&e.isInShadowRoot(o),this._globalManager.setHasWebComponentContext(!0)},isInShadow:function(){return this._isInShadow},reactUiEvent:function(e){var t=this.tryApplySuper("reactUiEvent",[e]);return this.isInShadow()&&(t=this._globalManager.reactUiEvent(e),e.stopPropagation()),t},reactDomNodeInsertEvent:function(e){return this.isInShadow()?(e.stopPropagation(),this._globalManager.reactDomNodeInsertEvent(e)):this.tryApplySuper("reactDomNodeInsertEvent",[e])},reactDomNodeRemoveEvent:function(e){return this.isInShadow()?(e.stopPropagation(),this._globalManager.reactDomNodeRemoveEvent(e)):this.tryApplySuper("reactDomNodeRemoveEvent",[e])},reactDomMutation:function(e){return this.isInShadow()?this._globalManager.reactDomMutation(e):this.tryApplySuper("reactDomMutation")}});class t extends HTMLElement{constructor(){super();var e=this.attachShadow(Kekule.globalOptions.webComponent.init.shadowInitOptions);this._initStyles(e),this._importStyleSheet(e),this._createSubElements(e);new Kekule.WebComponent.WebComponentContextEventRelayer(this.ownerDocument,this.hostElem,Kekule.Widget.globalManager)}_createSubElements(e){var t=this.ownerDocument.createElement("div");e.appendChild(t),this._hostElem=t}_importStyleSheet(e){Kekule.Widget.globalManager.loadTheme(e)}_initStyles(e){var t=e.ownerDocument.createElement("style");t.innerHTML=":host { position: static; width: 0px; height: 0px; left: 0px; top: 0px; }",e.appendChild(t)}ensureToBeLast(){var e=this.ownerDocument.body;e.lastChild!==this&&e.appendChild(this)}get hostElem(){return this._hostElem}}Kekule.WebComponent.WebComponentContextPopupHost=t,"undefined"!=typeof customElements&&customElements.define("kekule-webcomponent-popup-host",t),Kekule.WebComponent.widgetWrapperPopupHost=null,ClassEx.extend(Kekule.Widget.GlobalManager,{getWebComponentContextRootElem:function(){return Kekule.WebComponent.widgetWrapperPopupHost||(Kekule.WebComponent.widgetWrapperPopupHost=new t,document.body.appendChild(Kekule.WebComponent.widgetWrapperPopupHost)),Kekule.WebComponent.widgetWrapperPopupHost.ensureToBeLast(),Kekule.WebComponent.widgetWrapperPopupHost.hostElem},isWidgetEnvironmentSetupIn:function(e){return"webComponent"===e?!!this.getHasWebComponentContext():(this._docContextEnvironmentSetup||this._detectIfThemeLoaded(this.getDocContextRootElem())&&(this._docContextEnvironmentSetup=!0),this._docContextEnvironmentSetup)}}),ClassEx.extendMethod(Kekule.Widget.GlobalManager,"getWidgetContextRootElement",function($origin,e){return e&&e.isWrappedInWebComponent()?this.getWebComponentContextRootElem():$origin(e)}),ClassEx.extendMethod(Kekule.Widget.GlobalManager,"getDefaultContextRootElem",function($origin){return this.isWidgetEnvironmentSetupIn("document")?this.getDocContextRootElem():this.isWidgetEnvironmentSetupIn("webComponent")?this.getWebComponentContextRootElem():$origin()}),ClassEx.defineProp(Kekule.Widget.GlobalManager,"hasWebComponentContext",{dataType:DataType.BOOL,serializable:!1}),ClassEx.extend(Kekule.Widget.BaseWidget,{isWrappedInWebComponent:function(){if("undefined"==typeof ShadowRoot)return!1;var e=this.getElement(),t=e.getRootNode&&e.getRootNode();return!!(t&&t instanceof ShadowRoot)}}),Kekule.WebComponent.BaseWidgetWrapper=class extends HTMLElement{constructor(){super();var e=this.attachShadow(Kekule.globalOptions.webComponent.init.shadowInitOptions);this._shadow=e;var t=this._createWidget(this.constructor.widgetClass,e);this._prepareStyles(e);new Kekule.WebComponent.WebComponentContextEventRelayer(this.ownerDocument,t.getElement(),Kekule.Widget.globalManager);this._reflectingChangedAttributes=[]}connectedCallback(){for(var e=this.getAttributeNames(),t=this.constructor.observedAttributes,o=0,i=(e=Kekule.ArrayUtils.intersect(e,t)).length;o<i;++o){var n=this.getAttribute(e[o]);this._setWidgetPropValueFromAttribute(e[o],n)}}static get observedAttributes(){var e=[];if(this._exposedWidgetProperties)for(var t=0,o=this._exposedWidgetProperties.length;t<o;++t){var i=this._exposedWidgetProperties[t].name;e.push(i.dasherize()),e.push("data-"+i.dasherize())}return e}attributeChangedCallback(e,t,o){if(!this._isChangingPropFromAttribute(e))try{this._reflectingChangedAttributes.push(e),this._setWidgetPropValueFromAttribute(e,o)}finally{Kekule.ArrayUtils.remove(this._reflectingChangedAttributes,e)}}_setWidgetPropValueFromAttribute(e,t){Kekule.Widget.Utils.setWidgetPropFromElemAttrib(this.widget,e,t)}_isChangingPropFromAttribute(e){return this._reflectingChangedAttributes.indexOf(e)>=0}static get widgetClass(){return this._widgetClass}static set widgetClass(e){this._widgetClass=e}static _exposeWidgetProperties(e,t,o){for(var i=o||{},n=this.widgetClass,s=ClassEx.getAllPropList(n),r=[],a=[],l=0,p=s.getLength();l<p;++l){var d=s.getPropInfoAt(l);if(!(d.scope<Class.PropertyScope.PUBLIC)&&(!(e&&e.indexOf(d.name)<0)&&!(t&&t.indexOf(d.name)>=0)&&(!Kekule.ObjUtils.getPropertyDescriptor(this.prototype,d.name,!0)||i.overwriteExisitedProperties))){r.push(d);var g={enumerable:d.enumerable,configurable:!1};if(void 0===g.enumerable&&(g.enumerable=!0),d.getter){d.getter;var u="get"+d.name.upperFirst();!function(e,t){t.get=function(){return this.widget.getPropValue(e)}}(d.name,g),a.push(u)}if(d.setter){d.setter;var h="set"+d.name.upperFirst();!function(e,t){t.set=function(t){var o=this.widget.setPropValue(e,t),i=this.widget.getPropValue(e);return this._exposedPropValueChanged(e,i),o}}(d.name,g),a.push(h)}try{Object.defineProperty(this.prototype,d.name,g)}catch(e){throw e}}}return this._exposedWidgetProperties=r,{exposedPropInfos:r,getterSetterMethodNames:a}}static _exposeWidgetMethods(e,t,o){for(var i=this.widgetClass,n=(ClassEx.getPrototype(i),function e(t,o){var i=function(e){for(var t=ClassEx.getPrototype(e),o=ClassEx.getSuperClass(e),i=(o&&ClassEx.getPrototype(o),Object.getOwnPropertyNames(t)),n=[],s=0,r=i.length;s<r;++s){var a=i[s],l=Object.getOwnPropertyDescriptor(t,a);l&&l.value&&"function"==typeof l.value&&n.push(a)}return n}(t);if(t!==o){var n=ClassEx.getSuperClass(t);n&&(i=e(n,o).concat(i))}return i}(i,Kekule.Widget.BaseWidget)),s=ClassEx.getPrototype(ClassEx.getSuperClass(Kekule.Widget.BaseWidget)),r=[],a=0,l=n.length;a<l;++a){var p=n[a],d=e&&e.indexOf(p)>=0;if(!(t&&t.indexOf(p)>=0)&&(!(e&&e.indexOf(p)<0)&&(d||!(p in s))&&(d||!p.startsWith("_"))&&!Object.getOwnPropertyDescriptor(p))){try{if(p in this)continue}catch(e){}!function(e,t,o){e.prototype[t]=function(){return this.widget[t].apply(this.widget,arguments)},o.push(t)}(this,p,r)}}return r}_createWidget(e,t){this._widget=new e(this.ownerDocument),this._widget.beginUpdate();try{var o=this._widget.getElement().style;o.width="100%",o.height="100%",this._widget.appendToElem(t)}finally{this._widget.endUpdate()}return this._widget}_prepareStyles(e){Kekule.Widget.globalManager.loadTheme(e);var t=e.ownerDocument.createElement("style");t.innerHTML=":host { display: inline-block; position: relative; vertical-align: bottom; }\n:host([hidden]) { display: none }",e.appendChild(t)}_exposedPropValueChanged(e,t){if(this.widget.getPropInfo(e)&&DataType.isSimpleValue(t)){var o=e.dasherize();this.setAttribute(o,t)}}get widgetHost(){return this._shadow}get widget(){return this._widget}},Kekule.WebComponent.Utils={wrapWidget:function(e,t,o){var i,n=Kekule.globalOptions.webComponent.widgetWrapper,s=Object.extend({exposeWidgetProperties:n.exposeWidgetProperties,ignoredProperties:n.ignoredProperties,exposeWidgetMethods:n.exposeWidgetMethods,ignoredMethods:n.ignoredMethods},o||{}),r=class extends Kekule.WebComponent.BaseWidgetWrapper{constructor(){super()}};if(r.widgetClass=e,s.exposeWidgetProperties&&(i=r._exposeWidgetProperties(s.exposedProperties,s.ignoredProperties,{overwriteExisitedProperties:s.overwriteExisitedProperties})),s.exposeWidgetMethods){var a=s.ignoredMethods||[];i&&(a=a.concat(i.getterSetterMethodNames)),r._exposeWidgetMethods(s.exposedMethods,a,{})}return t&&"undefined"!=typeof customElements&&customElements.define(t,r),r}}}}(),function(){"use strict";var e=[{widgetClassName:"Kekule.ChemWidget.PeriodicTable",htmlTagName:"kekule-periodic-table"},{widgetClassName:"Kekule.ChemWidget.Viewer",htmlTagName:"kekule-viewer"},{widgetClassName:"Kekule.ChemWidget.Viewer2D",htmlTagName:"kekule-viewer2d"},{widgetClassName:"Kekule.ChemWidget.Viewer3D",htmlTagName:"kekule-viewer3d"},{widgetClassName:"Kekule.ChemWidget.SpectrumInspector",htmlTagName:"kekule-spectrum-inspector"},{widgetClassName:"Kekule.ChemWidget.ChemObjInserter",htmlTagName:"kekule-chem-obj-inserter"},{widgetClassName:"Kekule.ChemWidget.SpectrumObjInserter",htmlTagName:"kekule-spectrum-obj-inserter"},{widgetClassName:"Kekule.Editor.Composer",htmlTagName:"kekule-composer"}];Kekule._registerAfterLoadSysProc(function(){if(Kekule.WebComponent&&Kekule.WebComponent.Utils)for(var t=Kekule.WebComponent,o=0,i=e.length;o<i;++o){var n=e[o],s=Object.getCascadeFieldValue(n.widgetClassName,Kekule.$jsRoot),r=n.htmlTagName;if(s&&r){var a=Kekule.ClassUtils.getLastClassName(n.widgetClassName),l=Kekule.WebComponent.Utils.wrapWidget(s,r);t[a]=l}}})}();