iobroker.admin 6.2.2 → 6.2.3
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 +3 -3
- package/io-package.json +13 -13
- package/package.json +1 -1
- package/www/asset-manifest.json +7 -7
- package/www/index.html +1 -1
- package/www/js/adapter-settings.js +55 -57
- package/www/lib/js/crypto-js/aes.js +234 -0
- package/www/lib/js/crypto-js/bower.json +39 -0
- package/www/lib/js/crypto-js/cipher-core.js +890 -0
- package/www/lib/js/crypto-js/core.js +807 -0
- package/www/lib/js/crypto-js/crypto-js.js +6191 -0
- package/www/lib/js/crypto-js/enc-base64.js +136 -0
- package/www/lib/js/crypto-js/enc-base64url.js +140 -0
- package/www/lib/js/crypto-js/enc-hex.js +18 -0
- package/www/lib/js/crypto-js/enc-latin1.js +18 -0
- package/www/lib/js/crypto-js/enc-utf16.js +149 -0
- package/www/lib/js/crypto-js/enc-utf8.js +18 -0
- package/www/lib/js/crypto-js/evpkdf.js +134 -0
- package/www/lib/js/crypto-js/format-hex.js +66 -0
- package/www/lib/js/crypto-js/format-openssl.js +18 -0
- package/www/lib/js/crypto-js/hmac-md5.js +18 -0
- package/www/lib/js/crypto-js/hmac-ripemd160.js +18 -0
- package/www/lib/js/crypto-js/hmac-sha1.js +18 -0
- package/www/lib/js/crypto-js/hmac-sha224.js +18 -0
- package/www/lib/js/crypto-js/hmac-sha256.js +18 -0
- package/www/lib/js/crypto-js/hmac-sha3.js +18 -0
- package/www/lib/js/crypto-js/hmac-sha384.js +18 -0
- package/www/lib/js/crypto-js/hmac-sha512.js +18 -0
- package/www/lib/js/crypto-js/hmac.js +143 -0
- package/www/lib/js/crypto-js/index.js +18 -0
- package/www/lib/js/crypto-js/lib-typedarrays.js +76 -0
- package/www/lib/js/crypto-js/md5.js +268 -0
- package/www/lib/js/crypto-js/mode-cfb.js +80 -0
- package/www/lib/js/crypto-js/mode-ctr-gladman.js +116 -0
- package/www/lib/js/crypto-js/mode-ctr.js +58 -0
- package/www/lib/js/crypto-js/mode-ecb.js +40 -0
- package/www/lib/js/crypto-js/mode-ofb.js +54 -0
- package/www/lib/js/crypto-js/package.json +70 -0
- package/www/lib/js/crypto-js/pad-ansix923.js +49 -0
- package/www/lib/js/crypto-js/pad-iso10126.js +44 -0
- package/www/lib/js/crypto-js/pad-iso97971.js +40 -0
- package/www/lib/js/crypto-js/pad-nopadding.js +30 -0
- package/www/lib/js/crypto-js/pad-pkcs7.js +18 -0
- package/www/lib/js/crypto-js/pad-zeropadding.js +47 -0
- package/www/lib/js/crypto-js/pbkdf2.js +145 -0
- package/www/lib/js/crypto-js/rabbit-legacy.js +190 -0
- package/www/lib/js/crypto-js/rabbit.js +192 -0
- package/www/lib/js/crypto-js/rc4.js +139 -0
- package/www/lib/js/crypto-js/ripemd160.js +267 -0
- package/www/lib/js/crypto-js/sha1.js +150 -0
- package/www/lib/js/crypto-js/sha224.js +80 -0
- package/www/lib/js/crypto-js/sha256.js +199 -0
- package/www/lib/js/crypto-js/sha3.js +326 -0
- package/www/lib/js/crypto-js/sha384.js +83 -0
- package/www/lib/js/crypto-js/sha512.js +326 -0
- package/www/lib/js/crypto-js/tripledes.js +779 -0
- package/www/lib/js/crypto-js/x64-core.js +304 -0
- package/www/static/js/{5710.66d0a0cb.chunk.js → 5710.44014f30.chunk.js} +2 -2
- package/www/static/js/{5710.66d0a0cb.chunk.js.map → 5710.44014f30.chunk.js.map} +1 -1
- package/www/static/js/8596.eecce458.chunk.js +3 -0
- package/www/static/js/8596.eecce458.chunk.js.map +1 -0
- package/www/static/js/{main.dec36354.js → main.d3df889c.js} +2 -2
- package/www/static/js/{main.dec36354.js.map → main.d3df889c.js.map} +1 -1
- package/www/static/js/8596.ff72c56e.chunk.js +0 -3
- package/www/static/js/8596.ff72c56e.chunk.js.map +0 -1
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";(self.webpackChunksrc_rx=self.webpackChunksrc_rx||[]).push([[8596],{32761:function(at,M,p){p.d(M,{Z:function(){return N}});var P=p(4819),c=p.n(P),G=p(15854),n=p.n(G),F=p(58503),J=p(66966),A=p(55289),Y=p(13820),I=p(49630),K=p(65890),H=p(33577);const x=u=>({tabs:{height:"100%",width:"100%"},panel:{height:"calc(100% - 48px)",width:"100%",display:"block"}});class T extends K.Z{constructor(a){super(a);let e=(window._localStorage||window.localStorage).getItem((this.props.dialogName||"App")+"."+this.props.adapterName)||Object.keys(this.props.schema.items)[0];Object.keys(this.props.schema.items).includes(e)||(e=Object.keys(this.props.schema.items)[0]),this.state={tab:e}}render(){const a=this.props.schema.items;return c().createElement("div",{className:this.props.classes.tabs},c().createElement(Y.Z,{value:this.state.tab,onChange:(e,i)=>{(window._localStorage||window.localStorage).setItem((this.props.dialogName||"App")+"."+this.props.adapterName,i),this.setState({tab:i})}},Object.keys(a).map(e=>{let i;if(this.props.custom){if(this.executeCustom(a[e].hidden,this.props.data,this.props.customObj,this.props.instanceObj))return null;i=this.executeCustom(a[e].disabled,this.props.data,this.props.customObj,this.props.instanceObj)}else{if(this.execute(a[e].hidden,!1))return null;i=this.execute(a[e].disabled,!1)}return c().createElement(I.Z,{wrapped:!0,disabled:i,key:e,value:e,label:this.getText(a[e].label)})})),c().createElement(H.Z,{isParentTab:!0,key:this.state.tab,index:1001,arrayIndex:this.props.arrayIndex,globalData:this.props.globalData,onCommandRunning:this.props.onCommandRunning,commandRunning:this.props.commandRunning,className:this.props.classes.panel,socket:this.props.socket,adapterName:this.props.adapterName,instance:this.props.instance,common:this.props.common,customs:this.props.customs,alive:this.props.alive,themeType:this.props.themeType,themeName:this.props.themeName,data:this.props.data,originalData:this.props.originalData,systemConfig:this.props.systemConfig,onError:this.props.onError,onChange:this.props.onChange,multiEdit:this.props.multiEdit,dateFormat:this.props.dateFormat,isFloatComma:this.props.isFloatComma,imagePrefix:this.props.imagePrefix,changeLanguage:this.props.changeLanguage,forceUpdate:this.props.forceUpdate,registerOnForceUpdate:this.props.registerOnForceUpdate,customObj:this.props.customObj,instanceObj:this.props.instanceObj,custom:this.props.custom,schema:a[this.state.tab]}))}}T.propTypes={socket:n().object.isRequired,themeType:n().string,themeName:n().string,style:n().object,className:n().string,data:n().object.isRequired,originalData:n().object,schema:n().object,onError:n().func,onChange:n().func,customs:n().object,adapterName:n().string,instance:n().number,commandRunning:n().bool,onCommandRunning:n().func,dateFormat:n().string,isFloatComma:n().bool,multiEdit:n().bool,imagePrefix:n().string,customObj:n().object,instanceObj:n().object,custom:n().bool,registerOnForceUpdate:n().func.isRequired,forceUpdate:n().func.isRequired,changeLanguage:n().func,systemConfig:n().object,alive:n().bool,common:n().object};var Q=(0,F.withStyles)(x)(T),X=Object.defineProperty,q=Object.defineProperties,_=Object.getOwnPropertyDescriptors,j=Object.getOwnPropertySymbols,tt=Object.prototype.hasOwnProperty,W=Object.prototype.propertyIsEnumerable,R=(u,a,e)=>a in u?X(u,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):u[a]=e,w=(u,a)=>{for(var e in a||(a={}))tt.call(a,e)&&R(u,e,a[e]);if(j)for(var e of j(a))W.call(a,e)&&R(u,e,a[e]);return u},D=(u,a)=>q(u,_(a)),S=(u,a,e)=>(R(u,typeof a!="symbol"?a+"":a,e),e);const et=u=>({root:{width:"100%",height:"100%"}});class L extends P.Component{constructor(a){super(a),S(this,"onCommandRunning",e=>this.setState({commandRunning:e})),S(this,"onAlive",(e,i)=>{((i==null?void 0:i.val)||!1)!==this.state.alive&&this.setState({alive:(i==null?void 0:i.val)||!1})}),S(this,"onChange",(e,i,m)=>{if(this.props.onValueChange)this.props.onValueChange(e,i),m&&m();else{const y={data:e},f={};Object.keys(e).forEach(v=>!v.startsWith("_")&&(f[v]=e[v])),y.changed=JSON.stringify(f)!==this.state.originalData,this.setState({state:y},()=>{this.props.onChange(f,y.changed),m&&m()})}}),S(this,"onError",(e,i)=>{const m=JSON.parse(JSON.stringify(this.state.errors));i?m[e]=i:delete m[e],JSON.stringify(m)!==JSON.parse(JSON.stringify(this.state.errors))&&this.setState({errors:m},()=>this.props.onError(!!Object.keys(this.state.errors).length))}),S(this,"changeLanguage",()=>{this.forceUpdate()}),S(this,"forceAttrUpdate",(e,i)=>{Array.isArray(e)?e.forEach(m=>this.forceUpdateHandlers[m]&&this.forceUpdateHandlers[m](i)):this.forceUpdateHandlers[e]&&this.forceUpdateHandlers[e](i)}),S(this,"registerOnForceUpdate",(e,i)=>{i?this.forceUpdateHandlers[e]=i:this.forceUpdateHandlers[e]&&delete this.forceUpdateHandlers[e]}),this.state={originalData:JSON.stringify(this.props.data),changed:!1,errors:{},updateData:this.props.updateData,systemConfig:null,alive:!1,commandRunning:!1,schema:JSON.parse(JSON.stringify(this.props.schema))},this.forceUpdateHandlers={},this.buildDependencies(this.state.schema),this.readData()}static getDerivedStateFromProps(a,e){return a.updateData!==e.updateData?{updateData:a.updateData,originalData:JSON.stringify(a.data),schema:JSON.parse(JSON.stringify(a.schema))}:null}static loadI18n(a,e,i){if(e===!0||e&&typeof e=="string"){const m=A.default.getLanguage(),y=typeof e=="string"?e:"i18n";return a.fileExists(i+".admin",`${y}/${m}.json`).then(f=>f?`${y}/${m}.json`:a.fileExists(i+".admin",`${y}/${m}/translations.json`).then(v=>v?`${y}/${m}/translations.json`:"")).then(f=>f?a.readFile(i+".admin",f).then(v=>{v.file!==void 0&&(v=v.file);try{v=JSON.parse(v),A.default.extendTranslations(v,m)}catch($){console.error(`Cannot parse language file "${i}.admin/${f}: ${$}`)}}):(console.warn(`Cannot find i18n for ${i} / ${f}`),Promise.resolve()))}else return e&&typeof e=="object"&&A.default.extendTranslations(e),Promise.resolve()}readSettings(){return(this.props.custom||this.props.common)&&this.props.data?Promise.resolve():this.props.socket.getObject(`system.adapter.${this.props.adapterName}.${this.props.instance}`).then(a=>this.setState({common:a.common,data:this.props.data||a.native}))}readData(){this.readSettings().then(()=>this.props.socket.getCompactSystemConfig()).then(a=>this.props.socket.getState(`system.adapter.${this.props.adapterName}.${this.props.instance}.alive`).then(e=>{this.props.custom?this.setState({systemConfig:a.common,alive:!!(e&&e.val)}):this.setState({systemConfig:a.common,alive:!!(e&&e.val)},()=>this.props.socket.subscribeState(`system.adapter.${this.props.adapterName}.${this.props.instance}.alive`,this.onAlive))}))}flatten(a,e){return e=e||{},a.items&&Object.keys(a.items).forEach(i=>{e[i]=a.items[i],this.flatten(a.items[i],e)}),e}buildDependencies(a){const e=this.flatten(a);Object.keys(e).forEach(i=>{var m,y,f,v,$,k,B,z,Z,U;(m=e[i].confirm)!=null&&m.alsoDependsOn&&((y=e[i].confirm)==null||y.alsoDependsOn.forEach(l=>{if(!e[l])console.error(`[JsonConfigComponent] Attribute ${l} does not exist!`),l.startsWith("data.")&&console.warn(`[JsonConfigComponent] please use "${l.replace(/^data\./,"")}" instead of "${l}"`);else{e[l].confirmDependsOn=e[l].confirmDependsOn||[];const C=D(w({},e[i]),{attr:i});C.confirm&&(C.confirm.cancel="Undo"),e[l].confirmDependsOn.push(C)}})),(f=e[i].onChange)!=null&&f.alsoDependsOn&&((v=e[i].onChange)==null||v.alsoDependsOn.forEach(l=>{if(!e[l])console.error(`[JsonConfigComponent] Attribute ${l} does not exist!`),l.startsWith("data.")&&console.warn(`[JsonConfigComponent] please use "${l.replace(/^data\./,"")}" instead of "${l}"`);else{e[l].onChangeDependsOn=e[l].onChangeDependsOn||[];const C=D(w({},e[i]),{attr:i});e[l].onChangeDependsOn.push(C)}})),($=e[i].hidden)!=null&&$.alsoDependsOn&&((k=e[i].hidden)==null||k.alsoDependsOn.forEach(l=>{if(!e[l])console.error(`[JsonConfigComponent] Attribute ${l} does not exist!`),l.startsWith("data.")&&console.warn(`[JsonConfigComponent] please use "${l.replace(/^data\./,"")}" instead of "${l}"`);else{e[l].hiddenDependsOn=e[l].hiddenDependsOn||[];const C=D(w({},e[i]),{attr:i});e[l].hiddenDependsOn.push(C)}})),(B=e[i].label)!=null&&B.alsoDependsOn&&((z=e[i].label)==null||z.alsoDependsOn.forEach(l=>{if(!e[l])console.error(`[JsonConfigComponent] Attribute ${l} does not exist!`),l.startsWith("data.")&&console.warn(`[JsonConfigComponent] please use "${l.replace(/^data\./,"")}" instead of "${l}"`);else{e[l].labelDependsOn=e[l].labelDependsOn||[];const C=D(w({},e[i]),{attr:i});e[l].labelDependsOn.push(C)}})),(Z=e[i].help)!=null&&Z.alsoDependsOn&&((U=e[i].help)==null||U.alsoDependsOn.forEach(l=>{if(!e[l])console.error(`[JsonConfigComponent] Attribute ${l} does not exist!`),l.startsWith("data.")&&console.warn(`[JsonConfigComponent] please use "${l.replace(/^data\./,"")}" instead of "${l}"`);else{e[l].helpDependsOn=e[l].helpDependsOn||[];const C=D(w({},e[i]),{attr:i});e[l].helpDependsOn.push(C)}}))})}renderItem(a){if(a.type==="tabs")return c().createElement(Q,{onCommandRunning:this.onCommandRunning,commandRunning:this.state.commandRunning,socket:this.props.socket,adapterName:this.props.adapterName,instance:this.props.instance,common:this.props.common,alive:this.state.alive,themeType:this.props.themeType,themeName:this.props.themeName,data:this.props.data,originalData:JSON.parse(this.state.originalData),schema:a,systemConfig:this.state.systemConfig,customs:this.props.customs,dateFormat:this.props.dateFormat,isFloatComma:this.props.isFloatComma,multiEdit:this.props.multiEdit,imagePrefix:this.props.imagePrefix,custom:this.props.custom,customObj:this.props.customObj,instanceObj:this.props.instanceObj,changeLanguage:this.changeLanguage,forceUpdate:this.forceAttrUpdate,registerOnForceUpdate:this.registerOnForceUpdate,onChange:this.onChange,onError:(e,i)=>this.onError(e,i)});if(a.type==="panel"||!a.type)return c().createElement(H.Z,{index:1e3,isParentTab:!0,onCommandRunning:this.onCommandRunning,commandRunning:this.state.commandRunning,socket:this.props.socket,adapterName:this.props.adapterName,instance:this.props.instance,common:this.props.common,alive:this.state.alive,themeType:this.props.themeType,themeName:this.props.themeName,data:this.props.data,originalData:JSON.parse(this.state.originalData),schema:a,systemConfig:this.state.systemConfig,customs:this.props.customs,dateFormat:this.props.dateFormat,isFloatComma:this.props.isFloatComma,multiEdit:this.props.multiEdit,imagePrefix:this.props.imagePrefix,custom:this.props.custom,customObj:this.props.customObj,instanceObj:this.props.instanceObj,changeLanguage:this.changeLanguage,forceUpdate:this.forceAttrUpdate,registerOnForceUpdate:this.registerOnForceUpdate,onChange:this.onChange,onError:(e,i)=>this.onError(e,i)})}render(){return this.state.systemConfig?c().createElement("div",{className:this.props.classes.root},this.renderItem(this.state.schema)):c().createElement(J.Z,null)}}L.propTypes={socket:n().object.isRequired,adapterName:n().string,instance:n().number,common:n().object,customs:n().object,custom:n().bool,customObj:n().object,multiEdit:n().bool,instanceObj:n().object,dateFormat:n().string,isFloatComma:n().bool,imagePrefix:n().string,themeType:n().string,themeName:n().string,style:n().object,className:n().string,data:n().object.isRequired,updateData:n().number,schema:n().object,onError:n().func,onChange:n().func,onValueChange:n().func};var N=(0,F.withStyles)(et)(L)},28596:function(at,M,p){p.d(M,{Z:function(){return ct}});var P=p(4819),c=p.n(P),G=p(15854),n=p.n(G),F=p(58503),J=p(23060),A=p(36609),Y=p(30464),I=p(67552),K=p(56892),H=p(99296),x=p(88261),T=p(94427),Q=p(11548),X=p(79458),q=p(37538),_=p(22675),j=p(43924),tt=p(94475),W=p(41728),R=p(87951),w=p.n(R),D=p(66966),S=p(43820),et=p(84302),L=p(82890),N=p(55289),u=p(32761),a=p(92636),e=p(61984),i=Object.defineProperty,m=(h,t,s)=>t in h?i(h,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):h[t]=s,y=(h,t,s)=>(m(h,typeof t!="symbol"?t+"":t,s),s),f=(h,t,s)=>new Promise((o,r)=>{var d=g=>{try{O(s.next(g))}catch(E){r(E)}},b=g=>{try{O(s.throw(g))}catch(E){r(E)}},O=g=>g.done?o(g.value):Promise.resolve(g.value).then(d,b);O((s=s.apply(h,t)).next())});const v={root:{width:"100%",height:"100%",overflow:"hidden",position:"relative"},scroll:{height:"calc(100% - 48px - 48px)",overflowY:"auto"},exportImportButtons:{position:"absolute",top:5,right:0,zIndex:3},button:{marginRight:5}};function $(h,t){let s="";for(let o=0;o<t.length;o++)s+=String.fromCharCode(h[o%h.length].charCodeAt(0)^t.charCodeAt(o));return s}function k(h,t){let s="";for(let o=0;o<t.length;o++)s+=String.fromCharCode(h[o%h.length].charCodeAt(0)^t.charCodeAt(o));return s}function B(h,t){if(typeof t!="string")return t;if(!t.startsWith("$/aes-192-cbc:")||!/^[0-9a-f]{48}$/.test(h))return $(h,t);const s=t.split(":",3),o=window.CryptoJS.enc.Hex.parse(h),r=window.CryptoJS.enc.Hex.parse(s[1]),d=window.CryptoJS.lib.CipherParams.create({ciphertext:window.CryptoJS.enc.Hex.parse(s[2])}),b=window.CryptoJS.AES.decrypt(d,o,{iv:r});return window.CryptoJS.enc.Utf8.stringify(b)}function z(h,t,s){if(typeof t!="string")return t;if(!/^[0-9a-f]{48}$/.test(h))return k(h,t);let o;s?o=window.CryptoJS.enc.Hex.parse(s):o=window.CryptoJS.lib.WordArray.random(128/8);const r=window.CryptoJS.enc.Hex.parse(h),d=window.CryptoJS.AES.encrypt(t,r,{iv:o}).ciphertext;return`$/aes-192-cbc:${window.CryptoJS.enc.Hex.stringify(o)}:${d}`}function Z(h,t){return!t||!document.getElementById(t)?new Promise(s=>{const o=document.createElement("script");o.setAttribute("id",t),o.onload=s,o.src=h,document.getElementsByTagName("head")[0].appendChild(o)}):document.getElementById(t).onload}class U extends j.Z{constructor(t){super(t),y(this,"handleFileSelect",s=>{let o=s.target.files[0];if(o){let r=new FileReader;r.onload=d=>f(this,null,function*(){let b=d.target.result;try{let O=JSON.parse(b);this.setState({data:O})}catch(O){window.alert(N.default.t("[JsonConfig] Failed to parse JSON file"))}}),r.readAsText(o)}else window.alert(N.default.t("[JsonConfig] Failed to open JSON File"))}),y(this,"componentDidUpdate",(s,o)=>{o.changed!==this.state.changed&&this.props.configStored(!this.state.changed)}),this.state={schema:null,data:null,updateData:0,common:null,changed:!1,confirmDialog:!1,theme:(0,L.Z)(t.themeName)},this.getInstanceObject().then(s=>this.getConfigFile().then(o=>u.Z.loadI18n(this.props.socket,o==null?void 0:o.i18n,this.props.adapterName).then(()=>{s?this.setState({schema:o,data:s.native,common:s.common}):window.alert(`Instance system.adapter.${this.props.adapterName}.${this.props.instance} not found!`)})))}getExportImportButtons(){return c().createElement("div",{className:this.props.classes.exportImportButtons},c().createElement(x.Z,{title:this.props.t("Import settings from JSON file")},c().createElement(I.Z,{size:"small",classes:{root:this.props.classes.button},onClick:()=>{const t=document.createElement("input");t.setAttribute("type","file"),t.setAttribute("id","files"),t.setAttribute("opacity",0),t.addEventListener("change",s=>this.handleFileSelect(s),!1),t.click()}},c().createElement(S.default,null))),c().createElement(x.Z,{title:this.props.t("Export setting to JSON file")},c().createElement(I.Z,{size:"small",classes:{root:this.props.classes.button},onClick:()=>{e.Z.generateFile(this.props.adapterName+"."+this.props.instance+".json",this.state.data)}},c().createElement(S.default,{style:{transform:"rotate(180deg)"}}))))}getConfigFile(){return this.props.socket.fileExists(this.props.adapterName+".admin","jsonConfig.json5").then(t=>t?this.props.socket.readFile(this.props.adapterName+".admin","jsonConfig.json5"):this.props.socket.readFile(this.props.adapterName+".admin","jsonConfig.json")).then(t=>{t.file!==void 0&&(t=t.file);try{return w().parse(t)}catch(s){window.alert("[JsonConfig] Cannot parse json5 config!")}}).catch(t=>window.alert("[JsonConfig] Cannot read file: "+t))}getInstanceObject(){return this.props.socket.getObject(`system.adapter.${this.props.adapterName}.${this.props.instance}`).then(t=>Array.isArray(t.encryptedNative)?this.props.socket.getSystemConfig().then(s=>f(this,null,function*(){return yield Z("../../lib/js/crypto-js/crypto-js.js","crypto-js"),this.secret=s.native.secret,t.encryptedNative.forEach(o=>{t.native[o]&&(t.native[o]=B(this.secret,t.native[o]))}),t})):t).catch(t=>window.alert("[JsonConfig] Cannot read instance object: "+t))}renderConfirmDialog(){return this.state.confirmDialog?c().createElement(W.default,{title:N.default.t("Please confirm"),text:N.default.t("Some data are not stored. Discard?"),ok:N.default.t("Discard"),cancel:N.default.t("Cancel"),onClose:t=>this.setState({confirmDialog:!1},()=>t&&j.Z.doNavigate(null))}):null}findAttr(t,s){if(s=s||this.state.schema,s.items){if(s.items[t])return s.items[t];{const o=Object.keys(s.items);for(let r=0;r<o.length;r++){const d=this.findAttr(t,s.items[o[r]]);if(d)return d}}}}onSave(t,s){return f(this,null,function*(){if(t){const o=yield this.getInstanceObject();if(!o){console.error("Something went wrong: may be no connection?"),window.alert("Something went wrong: may be no connection?");return}Object.keys(this.state.data).forEach(r=>{const d=this.findAttr(r);!d||!d.doNotSave?a.default.setValue(o.native,r,this.state.data[r]):a.default.setValue(o.native,r,null)});try{const r=JSON.parse(JSON.stringify(o));Array.isArray(r.encryptedNative)&&(yield Z("../../lib/js/crypto-js/crypto-js.js","crypto-js"),r.encryptedNative.forEach(d=>{r.native[d]&&(r.native[d]=z(this.secret,r.native[d]))})),yield this.props.socket.setObject(r._id,r)}catch(r){window.alert(`[JsonConfig] Cannot set object: ${r}`)}this.setState({changed:!1,data:o.native,updateData:this.state.updateData+1,originalData:JSON.parse(JSON.stringify(o.native))},()=>s&&j.Z.doNavigate(null))}else{if(this.state.changed)return this.setState({confirmDialog:!0});j.Z.doNavigate(null)}})}render(){const{classes:t}=this.props;return!this.state.data||!this.state.schema?c().createElement(D.Z,null):c().createElement("div",{className:this.props.classes.root},this.renderConfirmDialog(),this.getExportImportButtons(),c().createElement(u.Z,{className:t.scroll,socket:this.props.socket,theme:this.props.theme,themeName:this.props.themeName,themeType:this.props.themeType,adapterName:this.props.adapterName,instance:this.props.instance,isFloatComma:this.props.isFloatComma,dateFormat:this.props.dateFormat,schema:this.state.schema,common:this.state.common,data:this.state.data,updateData:this.state.updateData,onError:s=>this.setState({error:s}),onChange:(s,o)=>this.setState({data:s,changed:o})}),c().createElement(et.Z,{isIFrame:!1,dense:!0,paddingLeft:0,theme:this.state.theme,noTextOnButtons:this.props.width==="xs"||this.props.width==="sm"||this.props.width==="md",changed:this.state.error||this.state.changed,error:this.state.error,onSave:s=>f(this,null,function*(){return yield this.onSave(!0,s)}),onClose:()=>f(this,null,function*(){return yield this.onSave(!1)})}))}}U.propTypes={menuPadding:n().number,adapterName:n().string,instance:n().number,isFloatComma:n().bool,dateFormat:n().string,secret:n().string,socket:n().object,theme:n().object,themeName:n().string,themeType:n().string};var l=(0,F.withStyles)(v)(U),C=p(13569),nt=p(94466),it=Object.defineProperty,rt=(h,t,s)=>t in h?it(h,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):h[t]=s,st=(h,t,s)=>(rt(h,typeof t!="symbol"?t+"":t,s),s),pt=(h,t,s)=>new Promise((o,r)=>{var d=g=>{try{O(s.next(g))}catch(E){r(E)}},b=g=>{try{O(s.throw(g))}catch(E){r(E)}},O=g=>g.done?o(g.value):Promise.resolve(g.value).then(d,b);O((s=s.apply(h,t)).next())});const lt=h=>({root:{height:"100%",display:"flex",flexDirection:"column",overflow:"hidden"},scroll:{height:"100%",overflowY:"auto"},instanceIcon:{width:42,height:42,marginRight:h.spacing(2),verticalAlign:"middle"},button:{marginRight:5,width:36,height:36},version:{fontSize:12,opacity:.8,marginLeft:20,marginRight:10},versionAliveConnected:{color:h.palette.mode==="dark"?"#23a623":"#60ff60"},versionAliveNotConnected:{color:"#a67223"},buttonControl:{padding:5,transition:"opacity 0.2s",height:34},enabled:{color:C.Z[400],"&:hover":{backgroundColor:C.Z[200]}},disabled:{color:nt.Z[400],"&:hover":{backgroundColor:nt.Z[200]}},hide:{visibility:"hidden"}});class ot extends P.Component{constructor(t){super(t),st(this,"onObjectChange",(s,o)=>{var r,d,b;s==="system.adapter."+this.props.adapter+"."+this.props.instance&&this.setState({running:((r=o==null?void 0:o.common)==null?void 0:r.onlyWWW)||((d=o==null?void 0:o.common)==null?void 0:d.enabled),canStart:!((b=o==null?void 0:o.common)!=null&&b.onlyWWW)})}),st(this,"onStateChange",(s,o)=>{s==="system.adapter."+this.props.adapter+"."+this.props.instance+".alive"?this.setState({alive:o?o.val:!1}):s==="system.adapter."+this.props.adapter+"."+this.props.instance+".connected"?this.setState({connectedToHost:o?o.val:!1}):s===this.props.adapter+"."+this.props.instance+".info.connection"&&this.setState({connected:o?o.val:null})}),st(this,"extendObject",(s,o)=>{this.props.socket.extendObject(s,o).catch(r=>window.alert(r))}),this.state={checkedExist:!1,showStopAdminDialog:!1,running:!1,canStart:!1,alive:!1,connected:!1,connectedToHost:!1},this.refIframe=c().createRef(),this.registered=!1}componentDidUpdate(t,s,o){!this.registered&&this.refIframe.contentWindow&&(this.registered=!0,this.props.onRegisterIframeRef(this.refIframe))}componentDidMount(){const t=window.addEventListener?"addEventListener":"attachEvent",s=window[t],o=t==="attachEvent"?"onmessage":"message";this.props.tab?this.props.socket.fileExists(this.props.adapter+".admin","tab.html").then(r=>{if(r)this.setState({checkedExist:"tab.html"});else return this.props.socket.fileExists(this.props.adapter+".admin","tab_m.html").then(d=>d?this.setState({checkedExist:"tab_m.html"}):window.alert("Cannot find tab(_m).html"))}):(this.props.socket.subscribeObject("system.adapter."+this.props.adapter+"."+this.props.instance,this.onObjectChange),this.props.socket.getObject("system.adapter."+this.props.adapter+"."+this.props.instance).then(r=>pt(this,null,function*(){var d,b,O;const g=yield this.props.socket.getState("system.adapter."+this.props.adapter+"."+this.props.instance+".alive");yield this.props.socket.subscribeState("system.adapter."+this.props.adapter+"."+this.props.instance+".alive",this.onStateChange);const E=yield this.props.socket.getState("system.adapter."+this.props.adapter+"."+this.props.instance+".connected");yield this.props.socket.subscribeState("system.adapter."+this.props.adapter+"."+this.props.instance+".connected",this.onStateChange);let V;try{V=yield this.props.socket.getState(this.props.adapter+"."+this.props.instance+".info.connection"),this.props.socket.subscribeState("system.adapter."+this.props.adapter+"."+this.props.instance+".info.connection",this.onStateChange)}catch(ht){V=null}this.setState({checkedExist:!0,running:((d=r==null?void 0:r.common)==null?void 0:d.onlyWWW)||((b=r==null?void 0:r.common)==null?void 0:b.enabled),canStart:!((O=r==null?void 0:r.common)!=null&&O.onlyWWW),alive:(g==null?void 0:g.val)||!1,connectedToHost:(E==null?void 0:E.val)||!1,connected:V?V.val:null})})).catch(r=>{console.error(r),this.setState({checkedExist:!0,running:!1})})),!this.registered&&this.refIframe.contentWindow&&(this.registered=!0,this.props.onRegisterIframeRef(this.refIframe)),s(o,r=>this.closeConfig(r),!1)}componentWillUnmount(){const t=window.removeEventListener?"removeEventListener":"detachEvent",s=window[t],o=t==="detachEvent"?"onmessage":"message";this.props.socket.unsubscribeObject("system.adapter."+this.props.adapter+"."+this.props.instance,this.onObjectChange),s(o,r=>this.closeConfig(r),!1),this.registered&&this.props.onUnregisterIframeRef(this.refIframe),this.refIframe=null}closeConfig(t){t.data==="close"||t.message==="close"?this.props.easyMode?j.Z.doNavigate("easy"):j.Z.doNavigate("tab-instances"):t.data==="change"||t.message==="change"?this.props.configStored(!1):(t.data==="nochange"||t.message==="nochange")&&this.props.configStored(!0)}renderHelpButton(){return this.props.jsonConfig?c().createElement("div",{style:{display:"inline-block",position:"absolute",right:0,top:5}},c().createElement(x.Z,{size:"small",title:this.props.t("Show help for this adapter")},c().createElement(I.Z,{classes:{root:this.props.classes.button},onClick:()=>{let t=this.props.lang;t!=="en"&&t!=="de"&&t!=="ru"&&t!=="zh-cn"&&(t="en"),window.open(`https://www.iobroker.net/#${t}/adapters/adapterref/iobroker.${this.props.adapter}/README.md`,"help")}},c().createElement(Q.default,null)))):null}getConfigurator(){if(this.props.jsonConfig)return c().createElement(l,{menuPadding:this.props.menuPadding,theme:this.props.theme,width:this.props.width,adapterName:this.props.adapter,instance:this.props.instance,socket:this.props.socket,themeName:this.props.themeName,themeType:this.props.themeType,dateFormat:this.props.dateFormat,isFloatComma:this.props.isFloatComma,configStored:this.props.configStored,t:this.props.t});{const t=`adapter/${this.props.adapter}/${this.props.tab?this.state.checkedExist:this.props.materialize?"index_m.html":"index.html"}?${this.props.instance||0}&newReact=true&${this.props.instance||0}&react=${this.props.themeName}`;return this.state.checkedExist?c().createElement("iframe",{ref:s=>this&&(this.refIframe=s),title:"config",className:this.props.className,src:t}):null}}returnStopAdminDialog(){return this.state.showStopAdminDialog?c().createElement(W.default,{title:this.props.t("Please confirm"),text:this.props.t("stop_admin",this.props.instance),ok:this.props.t("Stop admin"),onClose:t=>{t&&this.extendObject(`system.adapter.${this.props.adapter}.${this.props.instance}`,{common:{enabled:!1}}),this.setState({showStopAdminDialog:!1})}}):null}render(){const{classes:t}=this.props;return c().createElement(Y.Z,{className:t.root},c().createElement(A.Z,{color:"default",position:"static"},c().createElement(K.Z,{variant:"dense"},c().createElement(H.Z,{variant:"h6",color:"inherit"},this.props.jsonConfig?c().createElement(tt.default,{src:this.props.icon,className:this.props.classes.instanceIcon}):null,`${this.props.t("Instance settings")}: ${this.props.adapter}.${this.props.instance}`,this.props.version?c().createElement("span",{className:(0,J.default)(this.props.classes.version,this.state.alive&&this.state.connectedToHost&&this.props.classes.versionAliveConnected,this.state.alive&&!this.state.connectedToHost&&this.props.classes.versionAliveNotConnected)},"v",this.props.version):null,c().createElement(x.Z,{title:this.props.t("Start/stop")},c().createElement("span",null,c().createElement(T.IconButton,{size:"small",onClick:s=>{s.stopPropagation(),s.preventDefault(),this.state.running&&this.props.adapter+"."+this.props.instance===this.props.adminInstance?this.setState({showStopAdminDialog:!0}):this.extendObject(`system.adapter.${this.props.adapter}.${this.props.instance}`,{common:{enabled:!this.state.running}})},onFocus:s=>s.stopPropagation(),className:(0,J.default)(t.buttonControl,this.state.canStart?this.state.running?t.enabled:t.disabled:t.hide)},this.state.running?c().createElement(X.Z,null):c().createElement(q.default,null)))),c().createElement(x.Z,{title:this.props.t("Restart")},c().createElement("span",null,c().createElement(T.IconButton,{size:"small",onClick:s=>{s.stopPropagation(),this.extendObject(`system.adapter.${this.props.adapter}.${this.props.instance}`,{})},onFocus:s=>s.stopPropagation(),className:(0,J.default)(t.buttonControl,!this.state.canStart&&t.hide),disabled:!this.state.running},c().createElement(_.default,null))))),this.renderHelpButton())),this.getConfigurator(),this.returnStopAdminDialog())}}ot.propTypes={menuPadding:n().number,adapter:n().string,instance:n().number,materialize:n().bool,tab:n().bool,jsonConfig:n().bool,socket:n().object,themeName:n().string,themeType:n().string,t:n().func,isFloatComma:n().bool,dateFormat:n().string,className:n().string,icon:n().string,readme:n().string,lang:n().string,easyMode:n().bool,adminInstance:n().string};var ct=(0,F.withStyles)(lt)(ot)}}]);
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=8596.eecce458.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["components/JsonConfigComponent/ConfigTabs.jsx","components/JsonConfigComponent/index.jsx","components/JsonConfig.jsx","tabs/Config.jsx"],"names":[],"mappings":"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","file":"static/js/8596.eecce458.chunk.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport Tabs from '@mui/material/Tabs';\nimport Tab from '@mui/material/Tab';\n\nimport ConfigGeneric from './ConfigGeneric';\nimport ConfigPanel from './ConfigPanel';\n\nconst styles = theme => ({\n tabs: {\n height: '100%',\n width: '100%',\n },\n panel: {\n height: 'calc(100% - 48px)',\n width: '100%',\n display: 'block'\n }\n});\n\nclass ConfigTabs extends ConfigGeneric {\n constructor(props) {\n super(props);\n\n let tab = (window._localStorage || window.localStorage).getItem((this.props.dialogName || 'App') + '.' + this.props.adapterName) || Object.keys(this.props.schema.items)[0];\n if (!Object.keys(this.props.schema.items).includes(tab)) {\n tab = Object.keys(this.props.schema.items)[0];\n }\n this.state = {\n tab,\n };\n }\n\n render() {\n const items = this.props.schema.items;\n\n return <div className={this.props.classes.tabs}>\n <Tabs\n value={this.state.tab}\n onChange={(e, tab) => {\n (window._localStorage || window.localStorage).setItem((this.props.dialogName || 'App') + '.' + this.props.adapterName, tab);\n this.setState({tab});\n }}>\n {Object.keys(items).map(name => {\n let disabled;\n if (this.props.custom) {\n const hidden = this.executeCustom(items[name].hidden, this.props.data, this.props.customObj, this.props.instanceObj);\n if (hidden) {\n return null;\n }\n disabled = this.executeCustom(items[name].disabled, this.props.data, this.props.customObj, this.props.instanceObj);\n } else {\n const hidden = this.execute(items[name].hidden, false);\n if (hidden) {\n return null;\n }\n disabled = this.execute(items[name].disabled, false);\n }\n return <Tab wrapped disabled={disabled} key={name} value={name} label={this.getText(items[name].label)} />\n })}\n </Tabs>\n {<ConfigPanel\n isParentTab={true}\n key={this.state.tab}\n index={1001}\n arrayIndex={this.props.arrayIndex}\n globalData={this.props.globalData}\n onCommandRunning={this.props.onCommandRunning}\n commandRunning={this.props.commandRunning}\n className={this.props.classes.panel}\n socket={this.props.socket}\n adapterName={this.props.adapterName}\n instance={this.props.instance}\n common={this.props.common}\n customs={this.props.customs}\n alive={this.props.alive}\n themeType={this.props.themeType}\n themeName={this.props.themeName}\n data={this.props.data}\n originalData={this.props.originalData}\n systemConfig={this.props.systemConfig}\n onError={this.props.onError}\n onChange={this.props.onChange}\n multiEdit={this.props.multiEdit}\n dateFormat={this.props.dateFormat}\n isFloatComma={this.props.isFloatComma}\n // disabled={disabled}\n imagePrefix={this.props.imagePrefix}\n\n changeLanguage={this.props.changeLanguage}\n forceUpdate={this.props.forceUpdate}\n registerOnForceUpdate={this.props.registerOnForceUpdate}\n\n customObj={this.props.customObj}\n instanceObj={this.props.instanceObj}\n custom={this.props.custom}\n\n schema={items[this.state.tab]}\n />}\n </div>;\n }\n}\n\nConfigTabs.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n originalData: PropTypes.object,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n customs: PropTypes.object,\n adapterName: PropTypes.string,\n instance: PropTypes.number,\n commandRunning: PropTypes.bool,\n onCommandRunning: PropTypes.func,\n dateFormat: PropTypes.string,\n isFloatComma: PropTypes.bool,\n multiEdit: PropTypes.bool,\n imagePrefix: PropTypes.string,\n\n customObj: PropTypes.object,\n instanceObj: PropTypes.object,\n custom: PropTypes.bool,\n\n registerOnForceUpdate: PropTypes.func.isRequired,\n forceUpdate: PropTypes.func.isRequired,\n changeLanguage: PropTypes.func,\n systemConfig: PropTypes.object,\n alive: PropTypes.bool,\n common: PropTypes.object,\n};\n\nexport default withStyles(styles)(ConfigTabs);","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport LinearProgress from '@mui/material/LinearProgress';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ConfigTabs from './ConfigTabs';\nimport ConfigPanel from './ConfigPanel';\n\nconst styles = theme => ({\n root: {\n width: '100%',\n height: '100%'\n }\n});\n\nclass JsonConfigComponent extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n originalData: JSON.stringify(this.props.data),\n changed: false,\n errors: {\n\n },\n updateData: this.props.updateData,\n systemConfig: null,\n alive: false,\n commandRunning: false,\n schema: JSON.parse(JSON.stringify(this.props.schema))\n };\n\n this.forceUpdateHandlers = {};\n\n this.buildDependencies(this.state.schema);\n\n this.readData();\n }\n\n static getDerivedStateFromProps(props, state) {\n if (props.updateData !== state.updateData) {\n return {\n updateData: props.updateData,\n originalData: JSON.stringify(props.data),\n schema: JSON.parse(JSON.stringify(props.schema)),\n };\n } else {\n return null;\n }\n }\n\n static loadI18n(socket, i18n, adapterName) {\n if (i18n === true || (i18n && typeof i18n === 'string')) {\n const lang = I18n.getLanguage();\n const path = typeof i18n === 'string' ? i18n : 'i18n';\n return socket.fileExists(adapterName + '.admin', `${path}/${lang}.json`)\n .then(exists => {\n if (exists) {\n return `${path}/${lang}.json`;\n } else {\n return socket.fileExists(adapterName + '.admin', `${path}/${lang}/translations.json`)\n .then(exists =>\n exists ? `${path}/${lang}/translations.json` : '')\n }\n })\n .then(fileName => {\n if (fileName) {\n return socket.readFile(adapterName + '.admin', fileName)\n .then(json => {\n if (json.file !== undefined) {\n json = json.file;\n }\n try {\n json = JSON.parse(json);\n // apply file to I18n\n I18n.extendTranslations(json, lang);\n } catch (e) {\n console.error(`Cannot parse language file \"${adapterName}.admin/${fileName}: ${e}`);\n }\n })\n } else {\n console.warn(`Cannot find i18n for ${adapterName} / ${fileName}`);\n return Promise.resolve();\n }\n });\n } else if (i18n && typeof i18n === 'object') {\n I18n.extendTranslations(i18n);\n return Promise.resolve();\n } else {\n return Promise.resolve();\n }\n }\n\n onCommandRunning = commandRunning => this.setState( {commandRunning});\n\n readSettings() {\n if ((this.props.custom || this.props.common) && this.props.data) {\n return Promise.resolve();\n } else {\n return this.props.socket.getObject(`system.adapter.${this.props.adapterName}.${this.props.instance}`)\n .then(obj => this.setState({common: obj.common, data: this.props.data || obj.native}));\n }\n }\n\n readData() {\n this.readSettings()\n .then(() => this.props.socket.getCompactSystemConfig())\n .then(systemConfig =>\n this.props.socket.getState(`system.adapter.${this.props.adapterName}.${this.props.instance}.alive`)\n .then(state => {\n if (this.props.custom) {\n this.setState({systemConfig: systemConfig.common, alive: !!(state && state.val)});\n } else {\n this.setState({systemConfig: systemConfig.common, alive: !!(state && state.val)}, () =>\n this.props.socket.subscribeState(`system.adapter.${this.props.adapterName}.${this.props.instance}.alive`, this.onAlive));\n }\n }));\n }\n\n onAlive = (id, state) => {\n if ((state?.val || false) !== this.state.alive) {\n this.setState({alive: state?.val || false});\n }\n }\n\n onChange = (data, value, cb) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(data, value);\n cb && cb();\n } else {\n const state = {data};\n\n const _data = {};\n // remove all attributes starting with \"_\"\n Object.keys(data).forEach(attr => !attr.startsWith('_') && (_data[attr] = data[attr]));\n\n state.changed = JSON.stringify(_data) !== this.state.originalData;\n\n this.setState({state}, () => {\n this.props.onChange(_data, state.changed);\n cb && cb();\n });\n }\n }\n\n onError = (attr, error) => {\n const errors = JSON.parse(JSON.stringify(this.state.errors));\n if (error) {\n errors[attr] = error;\n } else {\n delete errors[attr];\n }\n\n if (JSON.stringify(errors) !== JSON.parse(JSON.stringify(this.state.errors))) {\n this.setState({errors}, () =>\n this.props.onError(!!Object.keys(this.state.errors).length));\n }\n }\n\n flatten(schema, _list) {\n _list = _list || {};\n if (schema.items) {\n Object.keys(schema.items).forEach(attr => {\n _list[attr] = schema.items[attr];\n this.flatten(schema.items[attr], _list);\n });\n }\n\n return _list;\n }\n\n buildDependencies(schema) {\n const attrs = this.flatten(schema);\n Object.keys(attrs).forEach(attr => {\n if (attrs[attr].confirm?.alsoDependsOn) {\n attrs[attr].confirm?.alsoDependsOn.forEach(dep => {\n if (!attrs[dep]) {\n console.error(`[JsonConfigComponent] Attribute ${dep} does not exist!`);\n if (dep.startsWith('data.')) {\n console.warn(`[JsonConfigComponent] please use \"${dep.replace(/^data\\./, '')}\" instead of \"${dep}\"`);\n }\n } else {\n attrs[dep].confirmDependsOn = attrs[dep].confirmDependsOn || [];\n\n const depObj = {...attrs[attr], attr};\n if (depObj.confirm) {\n depObj.confirm.cancel = 'Undo';\n }\n\n attrs[dep].confirmDependsOn.push(depObj);\n }\n });\n }\n\n if (attrs[attr].onChange?.alsoDependsOn) {\n attrs[attr].onChange?.alsoDependsOn.forEach(dep => {\n if (!attrs[dep]) {\n console.error(`[JsonConfigComponent] Attribute ${dep} does not exist!`);\n if (dep.startsWith('data.')) {\n console.warn(`[JsonConfigComponent] please use \"${dep.replace(/^data\\./, '')}\" instead of \"${dep}\"`);\n }\n } else {\n attrs[dep].onChangeDependsOn = attrs[dep].onChangeDependsOn || [];\n\n const depObj = {...attrs[attr], attr};\n\n attrs[dep].onChangeDependsOn.push(depObj);\n }\n });\n }\n\n if (attrs[attr].hidden?.alsoDependsOn) {\n attrs[attr].hidden?.alsoDependsOn.forEach(dep => {\n if (!attrs[dep]) {\n console.error(`[JsonConfigComponent] Attribute ${dep} does not exist!`);\n if (dep.startsWith('data.')) {\n console.warn(`[JsonConfigComponent] please use \"${dep.replace(/^data\\./, '')}\" instead of \"${dep}\"`);\n }\n } else {\n attrs[dep].hiddenDependsOn = attrs[dep].hiddenDependsOn || [];\n\n const depObj = {...attrs[attr], attr};\n\n attrs[dep].hiddenDependsOn.push(depObj);\n }\n });\n }\n\n if (attrs[attr].label?.alsoDependsOn) {\n attrs[attr].label?.alsoDependsOn.forEach(dep => {\n if (!attrs[dep]) {\n console.error(`[JsonConfigComponent] Attribute ${dep} does not exist!`);\n if (dep.startsWith('data.')) {\n console.warn(`[JsonConfigComponent] please use \"${dep.replace(/^data\\./, '')}\" instead of \"${dep}\"`);\n }\n } else {\n attrs[dep].labelDependsOn = attrs[dep].labelDependsOn || [];\n\n const depObj = {...attrs[attr], attr};\n\n attrs[dep].labelDependsOn.push(depObj);\n }\n });\n }\n\n if (attrs[attr].help?.alsoDependsOn) {\n attrs[attr].help?.alsoDependsOn.forEach(dep => {\n if (!attrs[dep]) {\n console.error(`[JsonConfigComponent] Attribute ${dep} does not exist!`);\n if (dep.startsWith('data.')) {\n console.warn(`[JsonConfigComponent] please use \"${dep.replace(/^data\\./, '')}\" instead of \"${dep}\"`);\n }\n } else {\n attrs[dep].helpDependsOn = attrs[dep].helpDependsOn || [];\n\n const depObj = {...attrs[attr], attr};\n\n attrs[dep].helpDependsOn.push(depObj);\n }\n });\n }\n });\n }\n\n renderItem(item) {\n if (item.type === 'tabs') {\n return <ConfigTabs\n onCommandRunning={this.onCommandRunning}\n commandRunning={this.state.commandRunning}\n socket={this.props.socket}\n adapterName={this.props.adapterName}\n instance={this.props.instance}\n common={this.props.common}\n alive={this.state.alive}\n themeType={this.props.themeType}\n themeName={this.props.themeName}\n data={this.props.data}\n originalData={JSON.parse(this.state.originalData)}\n schema={item}\n systemConfig={this.state.systemConfig}\n customs={this.props.customs}\n dateFormat={this.props.dateFormat}\n isFloatComma={this.props.isFloatComma}\n multiEdit={this.props.multiEdit}\n imagePrefix={this.props.imagePrefix}\n\n custom={this.props.custom}\n customObj={this.props.customObj}\n instanceObj={this.props.instanceObj}\n\n changeLanguage={this.changeLanguage}\n forceUpdate={this.forceAttrUpdate}\n registerOnForceUpdate={this.registerOnForceUpdate}\n\n onChange={this.onChange}\n onError={(attr, error) => this.onError(attr, error)}\n />;\n } else if (item.type === 'panel' || !item.type) {\n return <ConfigPanel\n index={1000}\n isParentTab={true}\n onCommandRunning={this.onCommandRunning}\n commandRunning={this.state.commandRunning}\n socket={this.props.socket}\n adapterName={this.props.adapterName}\n instance={this.props.instance}\n common={this.props.common}\n alive={this.state.alive}\n themeType={this.props.themeType}\n themeName={this.props.themeName}\n data={this.props.data}\n originalData={JSON.parse(this.state.originalData)}\n schema={item}\n systemConfig={this.state.systemConfig}\n customs={this.props.customs}\n dateFormat={this.props.dateFormat}\n isFloatComma={this.props.isFloatComma}\n multiEdit={this.props.multiEdit}\n imagePrefix={this.props.imagePrefix}\n\n custom={this.props.custom}\n customObj={this.props.customObj}\n instanceObj={this.props.instanceObj}\n\n changeLanguage={this.changeLanguage}\n forceUpdate={this.forceAttrUpdate}\n registerOnForceUpdate={this.registerOnForceUpdate}\n\n onChange={this.onChange}\n onError={(attr, error) => this.onError(attr, error)}\n />;\n }\n }\n\n changeLanguage = () => {\n this.forceUpdate();\n }\n\n forceAttrUpdate = (attr, data) => {\n if (Array.isArray(attr)) {\n attr.forEach(a =>\n this.forceUpdateHandlers[a] && this.forceUpdateHandlers[a](data));\n } else {\n if (this.forceUpdateHandlers[attr]) {\n this.forceUpdateHandlers[attr](data);\n }\n }\n }\n\n registerOnForceUpdate = (attr, cb) => {\n if (cb) {\n this.forceUpdateHandlers[attr] = cb;\n } else if (this.forceUpdateHandlers[attr]) {\n delete this.forceUpdateHandlers[attr];\n }\n }\n\n render() {\n if (!this.state.systemConfig) {\n return <LinearProgress />;\n }\n\n return <div className={this.props.classes.root}>\n {this.renderItem(this.state.schema)}\n </div>;\n }\n}\n\nJsonConfigComponent.propTypes = {\n socket: PropTypes.object.isRequired,\n\n adapterName: PropTypes.string,\n instance: PropTypes.number,\n common: PropTypes.object,\n customs: PropTypes.object, // custom components\n\n custom: PropTypes.bool, // is the customs settings must be shown\n customObj: PropTypes.object,\n multiEdit: PropTypes.bool, // set if user edits more than one object simultaneously\n instanceObj: PropTypes.object,\n dateFormat: PropTypes.string,\n isFloatComma: PropTypes.bool,\n imagePrefix: PropTypes.string,\n\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n updateData: PropTypes.number,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n onValueChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(JsonConfigComponent);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\nimport JSON5 from 'json5';\n\nimport LinearProgress from '@mui/material/LinearProgress';\nimport Tooltip from '@mui/material/Tooltip';\nimport Fab from '@mui/material/Fab';\nimport PublishIcon from '@mui/icons-material/Publish';\n\nimport SaveCloseButtons from '@iobroker/adapter-react-v5/Components/SaveCloseButtons';\nimport Router from '@iobroker/adapter-react-v5/Components/Router';\nimport theme from '@iobroker/adapter-react-v5/Theme';\nimport ConfirmDialog from '@iobroker/adapter-react-v5/Dialogs/Confirm';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport JsonConfigComponent from './JsonConfigComponent';\nimport ConfigGeneric from '@iobroker/adapter-react-v5/Components/JsonConfigComponent/ConfigGeneric';\nimport Utils from './Utils';\n\nconst styles = {\n root: {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n },\n scroll: {\n height: 'calc(100% - 48px - 48px)',\n overflowY: 'auto'\n },\n exportImportButtons: {\n position: 'absolute',\n top: 5,\n right: 0,\n zIndex: 3,\n },\n button: {\n marginRight: 5\n }\n};\n\n/**\n * Decrypt the password/value with given key\n * @param key - Secret key\n * @param value - value to decrypt\n */\nfunction decryptLegacy(key, value) {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(key[i % key.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return result;\n}\n\n/**\n * Encrypt the password/value with given key\n * @param key - Secret key\n * @param value - value to encrypt\n */\nfunction encryptLegacy(key, value) {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(key[i % key.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return result;\n}\n\n/**\n * Decrypt the password/value with given key\n * Usage:\n * ```\n * function load(settings, onChange) {\n * if (settings.password) {\n * settings.password = decrypt(systemSecret, settings.password);\n * // same as\n * settings.password = decrypt(settings.password);\n * }\n * // ...\n * }\n * ```\n * @param {string} key - Secret key\n * @param {string} value - value to decrypt\n * @returns {string}\n */\nfunction decrypt(key, value) {\n if (typeof value !== 'string') {\n return value;\n }\n\n // if not encrypted as aes-192 or key not a valid 48 digit hex -> fallback\n if (!value.startsWith(`$/aes-192-cbc:`) || !/^[0-9a-f]{48}$/.test(key)) {\n return decryptLegacy(key, value);\n }\n\n // algorithm:iv:encryptedValue\n const textParts = value.split(':', 3);\n\n const _key = window.CryptoJS.enc.Hex.parse(key);\n const iv = window.CryptoJS.enc.Hex.parse(textParts[1]);\n\n const cipherParams = window.CryptoJS.lib.CipherParams.create({ ciphertext: window.CryptoJS.enc.Hex.parse(textParts[2]) });\n\n const decryptedBinary = window.CryptoJS.AES.decrypt(cipherParams, _key, { iv });\n\n return window.CryptoJS.enc.Utf8.stringify(decryptedBinary);\n}\n\n/**\n * Encrypt the password/value with given key\n * Usage:\n * ```\n * function save(callback) {\n * ...\n * if (obj.password) {\n * obj.password = encrypt(systemSecret, obj.password);\n * // same as\n * obj.password = decrypt(obj.password);\n * }\n * ...\n * }\n * ```\n * @param {string} key - Secret key\n * @param {string} value - value to encrypt\n * @param {string} _iv - optional initial vector for tests\n * @returns {string}\n */\nfunction encrypt(key, value, _iv) {\n if (typeof value !== 'string') {\n return value;\n }\n\n if (!/^[0-9a-f]{48}$/.test(key)) {\n // key length is not matching for AES-192-CBC or key is no valid hex - fallback to old encryption\n return encryptLegacy(key, value);\n }\n\n let iv;\n if (_iv) {\n iv = window.CryptoJS.enc.Hex.parse(_iv);\n } else {\n iv = window.CryptoJS.lib.WordArray.random(128 / 8);\n }\n\n const _key = window.CryptoJS.enc.Hex.parse(key);\n const encrypted = window.CryptoJS.AES.encrypt(value, _key, { iv }).ciphertext;\n\n return `$/aes-192-cbc:${window.CryptoJS.enc.Hex.stringify(iv)}:${encrypted}`;\n}\n\nfunction loadScript(src, id) {\n if (!id || !document.getElementById(id)) {\n return new Promise(resolve => {\n const script = document.createElement('script');\n script.setAttribute('id', id);\n script.onload = resolve;\n script.src = src;\n document.getElementsByTagName('head')[0].appendChild(script);\n });\n } else {\n return document.getElementById(id).onload;\n }\n}\n\nclass JsonConfig extends Router {\n constructor(props) {\n super(props);\n\n this.state = {\n schema: null,\n data: null,\n updateData: 0,\n common: null,\n changed: false,\n confirmDialog: false,\n theme: theme(props.themeName), // buttons require special theme\n };\n\n this.getInstanceObject()\n .then(obj => this.getConfigFile()\n .then(schema =>\n // load language\n JsonConfigComponent.loadI18n(this.props.socket, schema?.i18n, this.props.adapterName)\n .then(() => {\n if (obj) {\n this.setState({schema, data: obj.native, common: obj.common});\n } else {\n window.alert(`Instance system.adapter.${this.props.adapterName}.${this.props.instance} not found!`);\n }\n })));\n }\n\n /**\n * @private\n * @param {object} evt\n */\n handleFileSelect = evt => {\n let f = evt.target.files[0];\n if (f) {\n let r = new FileReader();\n r.onload = async e => {\n let contents = e.target.result;\n try {\n let json = JSON.parse(contents);\n this.setState({data: json});\n } catch (err) {\n window.alert(I18n.t('[JsonConfig] Failed to parse JSON file'));\n }\n };\n r.readAsText(f);\n } else {\n window.alert(I18n.t('[JsonConfig] Failed to open JSON File'));\n }\n }\n\n getExportImportButtons() {\n return <div className={this.props.classes.exportImportButtons}>\n <Tooltip title={this.props.t('Import settings from JSON file')}>\n <Fab size=\"small\" classes={{root: this.props.classes.button}} onClick={() => {\n const input = document.createElement('input');\n input.setAttribute('type', 'file');\n input.setAttribute('id', 'files');\n input.setAttribute('opacity', 0);\n input.addEventListener('change', e => this.handleFileSelect(e), false);\n input.click();\n }}>\n <PublishIcon />\n </Fab>\n </Tooltip>\n <Tooltip title={this.props.t('Export setting to JSON file')}>\n <Fab size=\"small\" classes={{root: this.props.classes.button}} onClick={() => {\n Utils.generateFile(this.props.adapterName + '.' + this.props.instance + '.json', this.state.data);\n }}>\n <PublishIcon style={{ transform: 'rotate(180deg)' }} />\n </Fab>\n </Tooltip>\n </div>;\n }\n\n getConfigFile() {\n return this.props.socket.fileExists(this.props.adapterName + '.admin', 'jsonConfig.json5')\n .then(exist => {\n if (exist) {\n return this.props.socket.readFile(this.props.adapterName + '.admin', 'jsonConfig.json5')\n } else {\n return this.props.socket.readFile(this.props.adapterName + '.admin', 'jsonConfig.json')\n }\n })\n .then(data => {\n if (data.file !== undefined) {\n data = data.file;\n }\n try {\n return JSON5.parse(data);\n } catch (e) {\n window.alert('[JsonConfig] Cannot parse json5 config!');\n }\n })\n .catch(e => window.alert('[JsonConfig] Cannot read file: ' + e));\n }\n\n getInstanceObject() {\n return this.props.socket.getObject(`system.adapter.${this.props.adapterName}.${this.props.instance}`)\n .then(obj => {\n // decode all native attributes listed in obj.encryptedNative\n if (Array.isArray(obj.encryptedNative)) {\n return this.props.socket.getSystemConfig()\n .then(async systemConfig => {\n await loadScript('../../lib/js/crypto-js/crypto-js.js', 'crypto-js');\n this.secret = systemConfig.native.secret;\n\n obj.encryptedNative.forEach(attr => {\n if (obj.native[attr]) {\n obj.native[attr] = decrypt(this.secret, obj.native[attr]);\n }\n });\n return obj;\n });\n } else {\n return obj;\n }\n })\n .catch(e => window.alert('[JsonConfig] Cannot read instance object: ' + e));\n }\n\n renderConfirmDialog() {\n if (!this.state.confirmDialog) {\n return null;\n }\n return <ConfirmDialog\n title={ I18n.t('Please confirm') }\n text={ I18n.t('Some data are not stored. Discard?') }\n ok={ I18n.t('Discard') }\n cancel={ I18n.t('Cancel') }\n onClose={isYes =>\n this.setState({ confirmDialog: false}, () => isYes && Router.doNavigate(null))}\n />;\n }\n\n findAttr(attr, schema) {\n schema = schema || this.state.schema;\n if (schema.items) {\n if (schema.items[attr]) {\n return schema.items[attr];\n } else {\n const keys = Object.keys(schema.items);\n for (let k = 0; k < keys.length; k++) {\n const item = this.findAttr(attr, schema.items[keys[k]]);\n if (item) {\n return item;\n }\n }\n }\n }\n }\n\n async onSave(doSave, close) {\n if (doSave) {\n const obj = await this.getInstanceObject();\n\n if (!obj) {\n console.error('Something went wrong: may be no connection?');\n window.alert('Something went wrong: may be no connection?');\n return;\n }\n\n Object.keys(this.state.data).forEach(attr => {\n const item = this.findAttr(attr);\n if (!item || !item.doNotSave) {\n ConfigGeneric.setValue(obj.native, attr, this.state.data[attr]);\n } else {\n ConfigGeneric.setValue(obj.native, attr, null);\n }\n });\n\n try {\n const encryptedObj = JSON.parse(JSON.stringify(obj));\n // encode all native attributes listed in obj.encryptedNative\n if (Array.isArray(encryptedObj.encryptedNative)) {\n await loadScript('../../lib/js/crypto-js/crypto-js.js', 'crypto-js');\n\n encryptedObj.encryptedNative.forEach(attr => {\n if (encryptedObj.native[attr]) {\n encryptedObj.native[attr] = encrypt(this.secret, encryptedObj.native[attr]);\n }\n });\n }\n\n await this.props.socket.setObject(encryptedObj._id, encryptedObj);\n } catch (e) {\n window.alert(`[JsonConfig] Cannot set object: ${e}`);\n }\n\n this.setState({\n changed: false,\n data: obj.native,\n updateData: this.state.updateData + 1,\n originalData: JSON.parse(JSON.stringify(obj.native))\n }, () =>\n close && Router.doNavigate(null));\n } else {\n if (this.state.changed) {\n return this.setState({confirmDialog: true});\n } else {\n Router.doNavigate(null);\n }\n }\n }\n\n componentDidUpdate = (prevProps, prevState) => {\n if (prevState.changed !== this.state.changed){\n this.props.configStored(!this.state.changed);\n }\n }\n\n render() {\n const { classes } = this.props;\n if (!this.state.data || !this.state.schema) {\n return <LinearProgress />;\n }\n\n return <div className={this.props.classes.root}>\n {this.renderConfirmDialog()}\n {this.getExportImportButtons()}\n <JsonConfigComponent\n className={ classes.scroll }\n socket={this.props.socket}\n theme={this.props.theme}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n adapterName={this.props.adapterName}\n instance={this.props.instance}\n isFloatComma={this.props.isFloatComma}\n dateFormat={this.props.dateFormat}\n\n schema={this.state.schema}\n common={this.state.common}\n data={this.state.data}\n updateData={this.state.updateData}\n onError={error => this.setState({ error })}\n onChange={(data, changed) => this.setState({ data, changed })}\n />\n <SaveCloseButtons\n isIFrame={false}\n dense={true}\n paddingLeft={0}\n theme={this.state.theme}\n noTextOnButtons={this.props.width === 'xs' || this.props.width === 'sm' || this.props.width === 'md'}\n changed={this.state.error || this.state.changed}\n error={this.state.error}\n onSave={async close => await this.onSave(true, close)}\n onClose={async () => await this.onSave(false)}\n />\n </div>;\n }\n}\n\nJsonConfig.propTypes = {\n menuPadding: PropTypes.number,\n adapterName: PropTypes.string,\n instance: PropTypes.number,\n isFloatComma: PropTypes.bool,\n dateFormat: PropTypes.string,\n secret: PropTypes.string,\n\n socket: PropTypes.object,\n\n theme: PropTypes.object,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n};\n\nexport default withStyles(styles)(JsonConfig);","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\nimport clsx from 'clsx';\n\nimport AppBar from '@mui/material/AppBar';\nimport Paper from '@mui/material/Paper';\nimport Fab from '@mui/material/Fab';\nimport Toolbar from '@mui/material/Toolbar';\nimport Typography from '@mui/material/Typography';\nimport Tooltip from '@mui/material/Tooltip';\nimport {IconButton} from '@mui/material';\n\nimport HelpIcon from '@mui/icons-material/Help';\nimport PauseIcon from '@mui/icons-material/Pause';\nimport PlayArrowIcon from '@mui/icons-material/PlayArrow';\nimport RefreshIcon from '@mui/icons-material/Refresh';\n\nimport Router from '@iobroker/adapter-react-v5/Components/Router';\nimport Icon from '@iobroker/adapter-react-v5/Components/Icon';\nimport ConfirmDialog from '@iobroker/adapter-react-v5/Dialogs/Confirm';\n\nimport JsonConfig from '../components/JsonConfig';\nimport { green, red } from '@mui/material/colors';\n\nconst styles = theme => ({\n root: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n },\n scroll: {\n height: '100%',\n overflowY: 'auto'\n },\n instanceIcon: {\n width: 42,\n height: 42,\n marginRight: theme.spacing(2),\n verticalAlign: 'middle'\n },\n button: {\n marginRight: 5,\n width: 36,\n height: 36,\n },\n version: {\n fontSize: 12,\n opacity: 0.8,\n marginLeft: 20,\n marginRight: 10,\n },\n versionAliveConnected: {\n color: theme.palette.mode === 'dark' ? '#23a623' : '#60ff60',\n },\n versionAliveNotConnected: {\n color: '#a67223'\n },\n buttonControl: {\n padding: 5,\n transition: 'opacity 0.2s',\n height: 34\n },\n enabled: {\n color: green[400],\n '&:hover': {\n backgroundColor: green[200]\n }\n },\n disabled: {\n color: red[400],\n '&:hover': {\n backgroundColor: red[200]\n }\n },\n hide: {\n visibility: 'hidden'\n },\n});\n\nclass Config extends Component {\n constructor(props) {\n super(props);\n\n this.state ={\n checkedExist: false,\n showStopAdminDialog: false,\n running: false,\n canStart: false,\n alive: false,\n connected: false,\n connectedToHost: false,\n };\n\n this.refIframe = React.createRef();\n this.registered = false;\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n if (!this.registered && this.refIframe.contentWindow) {\n this.registered = true;\n this.props.onRegisterIframeRef(this.refIframe);\n }\n }\n\n componentDidMount() {\n // receive messages from IFRAME\n const eventFunc = window.addEventListener ? 'addEventListener' : 'attachEvent';\n const emit = window[eventFunc];\n const eventName = eventFunc === 'attachEvent' ? 'onmessage' : 'message';\n\n if (this.props.tab) {\n this.props.socket.fileExists(this.props.adapter + '.admin', 'tab.html')\n .then(exist => {\n if (exist) {\n this.setState({checkedExist: 'tab.html'});\n } else {\n return this.props.socket.fileExists(this.props.adapter + '.admin', 'tab_m.html')\n .then(exist =>\n exist ? this.setState({checkedExist: 'tab_m.html'}) : window.alert('Cannot find tab(_m).html'));\n }\n });\n } else {\n // this.props.socket.getState('system.adapter.' + this.props.adapter + '.' + this.props.instance + '.')\n this.props.socket.subscribeObject('system.adapter.' + this.props.adapter + '.' + this.props.instance, this.onObjectChange);\n this.props.socket.getObject('system.adapter.' + this.props.adapter + '.' + this.props.instance)\n .then(async obj => {\n const alive = await this.props.socket.getState('system.adapter.' + this.props.adapter + '.' + this.props.instance + '.alive');\n await this.props.socket.subscribeState('system.adapter.' + this.props.adapter + '.' + this.props.instance + '.alive', this.onStateChange);\n\n const connectedToHost = await this.props.socket.getState('system.adapter.' + this.props.adapter + '.' + this.props.instance + '.connected');\n await this.props.socket.subscribeState('system.adapter.' + this.props.adapter + '.' + this.props.instance + '.connected', this.onStateChange);\n\n let connected;\n try {\n connected = await this.props.socket.getState(this.props.adapter + '.' + this.props.instance + '.info.connection');\n this.props.socket.subscribeState('system.adapter.' + this.props.adapter + '.' + this.props.instance + '.info.connection', this.onStateChange);\n } catch (error) {\n // ignore\n connected = null;\n }\n\n this.setState({\n checkedExist: true,\n running: obj?.common?.onlyWWW || obj?.common?.enabled, canStart: !obj?.common?.onlyWWW,\n alive: alive?.val || false,\n connectedToHost: connectedToHost?.val || false,\n connected: connected ? connected.val : null,\n });\n })\n .catch(error => {\n console.error(error);\n this.setState({ checkedExist: true, running: false });\n });\n }\n\n if (!this.registered && this.refIframe.contentWindow) {\n this.registered = true;\n this.props.onRegisterIframeRef(this.refIframe);\n }\n\n emit(eventName, event => this.closeConfig(event), false);\n }\n\n onObjectChange = (id, obj) => {\n if (id === 'system.adapter.' + this.props.adapter + '.' + this.props.instance) {\n this.setState({ running: obj?.common?.onlyWWW || obj?.common?.enabled, canStart: !obj?.common?.onlyWWW });\n }\n };\n\n onStateChange = (id, state) => {\n if (id === 'system.adapter.' + this.props.adapter + '.' + this.props.instance + '.alive') {\n this.setState({ alive: state ? state.val : false });\n } else if (id === 'system.adapter.' + this.props.adapter + '.' + this.props.instance + '.connected') {\n this.setState({ connectedToHost: state ? state.val : false });\n } else if (id === this.props.adapter + '.' + this.props.instance + '.info.connection') {\n this.setState({ connected: state ? state.val : null });\n }\n };\n\n componentWillUnmount() {\n const eventFunc = window.removeEventListener ? 'removeEventListener' : 'detachEvent';\n const emit = window[eventFunc];\n const eventName = eventFunc === 'detachEvent' ? 'onmessage' : 'message';\n this.props.socket.unsubscribeObject('system.adapter.' + this.props.adapter + '.' + this.props.instance, this.onObjectChange);\n\n emit(eventName, event => this.closeConfig(event), false);\n\n this.registered && this.props.onUnregisterIframeRef(this.refIframe);\n this.refIframe = null;\n }\n\n closeConfig(event) {\n if (event.data === 'close' || event.message === 'close') {\n if (this.props.easyMode){\n Router.doNavigate('easy');\n } else {\n Router.doNavigate('tab-instances');\n }\n } else if (event.data === 'change' || event.message === 'change') {\n this.props.configStored(false);\n } else if (event.data === 'nochange' || event.message === 'nochange') {\n this.props.configStored(true);\n }\n }\n\n renderHelpButton() {\n if (this.props.jsonConfig) {\n return <div style={{ display: 'inline-block', position: 'absolute', right: 0, top: 5 }}>\n <Tooltip size=\"small\" title={this.props.t('Show help for this adapter')}>\n <Fab classes={{ root: this.props.classes.button }} onClick={() => {\n let lang = this.props.lang;\n if (lang !== 'en' && lang !== 'de' && lang !== 'ru' && lang !== 'zh-cn') {\n lang = 'en';\n }\n window.open(`https://www.iobroker.net/#${lang}/adapters/adapterref/iobroker.${this.props.adapter}/README.md`, 'help');\n }}>\n <HelpIcon />\n </Fab>\n </Tooltip>\n </div>;\n } else {\n return null;\n }\n }\n\n getConfigurator() {\n if (this.props.jsonConfig) {\n return <JsonConfig\n menuPadding={this.props.menuPadding}\n theme={this.props.theme}\n width={this.props.width}\n adapterName={this.props.adapter}\n instance={this.props.instance}\n socket={this.props.socket}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n dateFormat={this.props.dateFormat}\n isFloatComma={this.props.isFloatComma}\n configStored={this.props.configStored}\n t={this.props.t}\n />;\n } else {\n const src = `adapter/${this.props.adapter}/` +\n `${this.props.tab ? this.state.checkedExist : (this.props.materialize ? 'index_m.html' : 'index.html')}?` +\n `${this.props.instance || 0}&newReact=true&${this.props.instance || 0}&react=${this.props.themeName}`;\n\n if (this.state.checkedExist) {\n return <iframe\n ref={el => this && (this.refIframe = el)}\n title=\"config\"\n className={this.props.className}\n src={src}>\n </iframe>;\n } else {\n return null;\n }\n }\n }\n\n extendObject = (id, data) => {\n this.props.socket.extendObject(id, data)\n .catch(error => window.alert(error));\n }\n\n returnStopAdminDialog() {\n return this.state.showStopAdminDialog ? <ConfirmDialog\n title={this.props.t('Please confirm')}\n text={this.props.t('stop_admin', this.props.instance)}\n ok={this.props.t('Stop admin')}\n onClose={result => {\n result && this.extendObject(`system.adapter.${this.props.adapter}.${this.props.instance}`, { common: { enabled: false } });\n this.setState({ showStopAdminDialog: false });\n }}\n /> : null;\n }\n\n render() {\n const { classes } = this.props;\n\n return <Paper className={classes.root}>\n <AppBar color=\"default\" position=\"static\">\n <Toolbar variant=\"dense\">\n <Typography variant=\"h6\" color=\"inherit\">\n {this.props.jsonConfig ? <Icon src={this.props.icon} className={this.props.classes.instanceIcon} />\n : null}\n {`${this.props.t('Instance settings')}: ${this.props.adapter}.${this.props.instance}`}\n {this.props.version ? <span className={clsx(\n this.props.classes.version,\n this.state.alive && this.state.connectedToHost && this.props.classes.versionAliveConnected,\n this.state.alive && !this.state.connectedToHost && this.props.classes.versionAliveNotConnected,\n )}>v{this.props.version}</span> : null}\n <Tooltip title={this.props.t('Start/stop')}>\n <span>\n <IconButton\n size=\"small\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n if (this.state.running && this.props.adapter + '.' + this.props.instance === this.props.adminInstance) {\n this.setState({ showStopAdminDialog: true });\n } else {\n this.extendObject(`system.adapter.${this.props.adapter}.${this.props.instance}`, { common: { enabled: !this.state.running } });\n }\n }}\n onFocus={event => event.stopPropagation()}\n className={clsx(classes.buttonControl, this.state.canStart ?\n (this.state.running ? classes.enabled : classes.disabled) : classes.hide)}\n >\n {this.state.running ? <PauseIcon /> : <PlayArrowIcon />}\n </IconButton>\n </span>\n </Tooltip>\n <Tooltip title={this.props.t('Restart')}>\n <span>\n <IconButton\n size=\"small\"\n onClick={event => {\n event.stopPropagation();\n this.extendObject(`system.adapter.${this.props.adapter}.${this.props.instance}`, {});\n }}\n onFocus={event => event.stopPropagation()}\n className={clsx(classes.buttonControl, !this.state.canStart && classes.hide)}\n disabled={!this.state.running}\n >\n <RefreshIcon />\n </IconButton>\n </span>\n </Tooltip>\n {/*<IsVisible config={item} name=\"allowInstanceLink\">\n <Tooltip title={this.props.t('Instance link %s', this.props.instanceItem?.id)}>\n <span>\n <IconButton\n size=\"small\"\n className={clsx(classes.buttonControl, (!this.props.instanceItem?.links || !this.props.instanceItem?.links[0]) && classes.hide)}\n disabled={!this.state.running}\n onClick={event => {\n event.stopPropagation();\n if (this.props.instanceItem?.links.length === 1) {\n // replace IPv6 Address with [ipv6]:port\n let url = this.props.instanceItem?.links[0].link;\n url = url.replace(/\\/\\/([0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*)(:\\d+)?\\//i, '//[$1]$2/');\n window.open(url, this.props.instanceItem?.id);\n } else {\n setShowLinks(true);\n }\n }}\n onFocus={event => event.stopPropagation()}\n >\n <InputIcon />\n </IconButton>\n </div>\n </Tooltip>\n </IsVisible>*/}\n </Typography>\n {this.renderHelpButton()}\n </Toolbar>\n </AppBar>\n {this.getConfigurator()}\n {this.returnStopAdminDialog()}\n </Paper>;\n }\n}\n\nConfig.propTypes = {\n menuPadding: PropTypes.number,\n adapter: PropTypes.string,\n instance: PropTypes.number,\n materialize: PropTypes.bool,\n tab: PropTypes.bool,\n jsonConfig: PropTypes.bool,\n socket: PropTypes.object,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n t: PropTypes.func,\n isFloatComma: PropTypes.bool,\n dateFormat: PropTypes.string,\n className: PropTypes.string,\n icon: PropTypes.string,\n readme: PropTypes.string,\n lang: PropTypes.string,\n easyMode: PropTypes.bool,\n adminInstance: PropTypes.string,\n};\n\nexport default withStyles(styles)(Config);"],"sourceRoot":""}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
(function(){var $={72063:function(f,b,i){Promise.all([i.e(3115),i.e(7230),i.e(8237),i.e(7581),i.e(8877),i.e(4819),i.e(5854),i.e(7440),i.e(6412),i.e(5710)]).then(i.bind(i,52898))}},F={};function n(f){var b=F[f];if(b!==void 0)return b.exports;var i=F[f]={id:f,loaded:!1,exports:{}};return $[f].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}n.m=$,n.c=F,function(){n.amdD=function(){throw new Error("define cannot be used indirect")}}(),function(){n.n=function(f){var b=f&&f.__esModule?function(){return f.default}:function(){return f};return n.d(b,{a:b}),b}}(),function(){var f=Object.getPrototypeOf?function(i){return Object.getPrototypeOf(i)}:function(i){return i.__proto__},b;n.t=function(i,s){if(s&1&&(i=this(i)),s&8||typeof i=="object"&&i&&(s&4&&i.__esModule||s&16&&typeof i.then=="function"))return i;var l=Object.create(null);n.r(l);var v={};b=b||[null,f({}),f([]),f(f)];for(var d=s&2&&i;typeof d=="object"&&!~b.indexOf(d);d=f(d))Object.getOwnPropertyNames(d).forEach(function(p){v[p]=function(){return i[p]}});return v.default=function(){return i},n.d(l,v),l}}(),function(){n.d=function(f,b){for(var i in b)n.o(b,i)&&!n.o(f,i)&&Object.defineProperty(f,i,{enumerable:!0,get:b[i]})}}(),function(){n.f={},n.e=function(f){return Promise.all(Object.keys(n.f).reduce(function(b,i){return n.f[i](f,b),b},[]))}}(),function(){n.u=function(f){return"static/js/"+f+"."+{82:"49b15550",137:"7d0016fc",154:"d88f9877",157:"d9eb4df4",217:"cf6e20e6",267:"9f9fa59c",333:"561630e6",412:"3ffef7fb",486:"7d15b268",625:"582ac42c",633:"96f600a5",686:"ca471284",706:"dfe41604",882:"be7a4d5a",942:"207e42d0",1087:"ef4f84fe",1208:"31db5c6c",1222:"cd2063a8",1320:"f736245b",1366:"a49670de",1391:"2de19a97",1525:"b31c05ad",1538:"dfc7cc6f",1616:"61fe323f",1707:"f7df40a6",1826:"5be93bbc",1933:"41793e90",1977:"c9e4f50e",2024:"8b538951",2137:"777f48b9",2261:"b3563538",2262:"75ab86af",2468:"140b5b84",2477:"6b15d98c",2483:"1095f0b0",2486:"a8ed5e8f",2584:"43527b4c",2652:"9a062c3e",2744:"ef38d907",2747:"4a41e801",2804:"dbcd0064",2916:"95b403b8",2925:"d004b8f5",3015:"be1eddee",3051:"e77311d6",3115:"d5d51289",3144:"36eeb4b7",3225:"179c0883",3362:"418c5cc8",3364:"558e865f",3433:"e552cd29",3444:"19fc19bb",3480:"49dbb899",3484:"b29fdc07",3577:"5e8ef7d1",3639:"1003bbf2",3659:"c4690adc",3700:"20f3fd68",3708:"25c08262",3750:"50d2282f",3752:"68f75662",3779:"c746626c",3960:"89bbf355",3961:"a98ff7ab",4075:"9569c164",4080:"08bbf44a",4102:"c0329b75",4191:"a518a3ff",4315:"1104cb2a",4342:"413d700a",4447:"73a8c44e",4456:"bc3c9316",4484:"110342a9",4552:"9e2ce14e",4602:"dd1c58a8",4617:"8d0361bd",4636:"385ff854",4815:"368861c3",4819:"faf4f7a9",4854:"97baae76",4883:"9285421a",4899:"a6c4272a",5028:"c715f042",5210:"892b55cb",5356:"8b6c5575",5413:"992de72c",5470:"4fc1a604",5498:"d2212d33",5537:"521b5c66",5685:"fc45361b",5710:"66d0a0cb",5756:"97723189",5769:"b0d4a50e",5836:"a2dcbd47",5839:"46e155be",5841:"797bcac7",5854:"cb35337b",5875:"d4ccf8eb",5971:"0e12f083",6090:"d1503f4f",6105:"83a24c55",6228:"8a168a0f",6232:"e044c776",6280:"c7a765f2",6322:"763e2306",6343:"6471a5a9",6402:"f7ac8c4c",6412:"74e5d689",6452:"fea579f0",6454:"0cd3bd8e",6480:"7ae84254",6562:"41b1dc30",6821:"c216c1bf",6870:"f144f6cc",6879:"03a3247f",6972:"dbbd79e9",7015:"3761173d",7081:"f167a70a",7183:"4b2058d3",7209:"9eeaef81",7228:"9cb4bdd1",7230:"2cee7be4",7271:"3edae9d7",7303:"3eac6445",7397:"acb3d9d7",7412:"8d25c7e2",7440:"9ac4214e",7574:"a5efcf50",7578:"f483c48f",7581:"0e74f1d9",7664:"3fa78219",7738:"001030f6",7755:"83c235c2",7951:"abd5510b",7973:"6b50e6b3",7989:"a8efeb06",8112:"589ac3a7",8174:"caa35dc4",8229:"8cd5cf4a",8237:"60b9c326",8310:"5f862fb7",8402:"d27a0ebb",8420:"90e09fe0",8430:"2b31fb61",8433:"a0c455e3",8449:"9a32b58f",8467:"190e056f",8487:"e9b32f83",8551:"065d713b",8574:"7bcc88d2",8576:"9071b899",8588:"e79330e5",8596:"ff72c56e",8645:"3de30e5e",8672:"55636cc9",8711:"fce5fb9f",8792:"df96d9a6",8806:"032ed98a",8842:"fb0ec9e0",8843:"5a9728f2",8877:"5df30a1b",8930:"cbd7e106",8969:"363902cb",8976:"5eb72361",9027:"b14c5a3c",9039:"4c211996",9342:"b3c3a375",9373:"7a7a25e5",9428:"c9ff3bbd",9466:"dcce6914",9526:"113dc042",9533:"8ab1a236",9626:"dbfade82",9641:"91a04c00",9642:"76235e87",9810:"357c0bcf",9851:"aa20ee52",9910:"85dd0d83",9943:"f2a59da0"}[f]+".chunk.js"}}(),function(){n.miniCssF=function(f){return"static/css/"+f+".d6229a1b.chunk.css"}}(),function(){n.g=function(){if(typeof globalThis=="object")return globalThis;try{return this||new Function("return this")()}catch(f){if(typeof window=="object")return window}}()}(),function(){n.hmd=function(f){return f=Object.create(f),f.children||(f.children=[]),Object.defineProperty(f,"exports",{enumerable:!0,set:function(){throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+f.id)}}),f}}(),function(){n.o=function(f,b){return Object.prototype.hasOwnProperty.call(f,b)}}(),function(){var f={},b="src-rx:";n.l=function(i,s,l,v){if(f[i]){f[i].push(s);return}var d,p;if(l!==void 0)for(var c=document.getElementsByTagName("script"),y=0;y<c.length;y++){var h=c[y];if(h.getAttribute("src")==i||h.getAttribute("data-webpack")==b+l){d=h;break}}d||(p=!0,d=document.createElement("script"),d.charset="utf-8",d.timeout=120,n.nc&&d.setAttribute("nonce",n.nc),d.setAttribute("data-webpack",b+l),d.src=i),f[i]=[s];var S=function(x,P){d.onerror=d.onload=null,clearTimeout(w);var C=f[i];if(delete f[i],d.parentNode&&d.parentNode.removeChild(d),C&&C.forEach(function(m){return m(P)}),x)return x(P)},w=setTimeout(S.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=S.bind(null,d.onerror),d.onload=S.bind(null,d.onload),p&&document.head.appendChild(d)}}(),function(){n.r=function(f){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(f,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(f,"__esModule",{value:!0})}}(),function(){n.nmd=function(f){return f.paths=[],f.children||(f.children=[]),f}}(),function(){n.S={};var f={},b={};n.I=function(i,s){s||(s=[]);var l=b[i];if(l||(l=b[i]={}),!(s.indexOf(l)>=0)){if(s.push(l),f[i])return f[i];n.o(n.S,i)||(n.S[i]={});var v=n.S[i],d=function(S){return typeof console!="undefined"&&console.warn&&console.warn(S)},p="src-rx",c=function(S,w,x,P){var C=v[S]=v[S]||{},m=C[w];(!m||!m.loaded&&(!P!=!m.eager?P:p>m.from))&&(C[w]={get:x,from:p,eager:!!P})},y=function(S){var w=function(m){d("Initialization of sharing external failed: "+m)};try{var x=n(S);if(!x)return;var P=function(m){return m&&m.init&&m.init(n.S[i],s)};if(x.then)return h.push(x.then(P,w));var C=P(x);if(C&&C.then)return h.push(C.catch(w))}catch(m){w(m)}},h=[];switch(i){case"default":c("@iobroker/adapter-react-v5","3.1.20",function(){return Promise.all([n.e(3577),n.e(9943),n.e(3115),n.e(7230),n.e(7581),n.e(7228),n.e(4819),n.e(5854),n.e(7440),n.e(6412),n.e(6090)]).then(function(){return function(){return n(37228)}})}),c("@mui/material","5.9.0",function(){return Promise.all([n.e(3115),n.e(8237),n.e(3752),n.e(2024),n.e(4819),n.e(5854),n.e(7440)]).then(function(){return function(){return n(52024)}})}),c("@mui/styles","5.9.0",function(){return Promise.all([n.e(7230),n.e(4819),n.e(5854),n.e(9039)]).then(function(){return function(){return n(78449)}})}),c("prop-types","15.8.1",function(){return n.e(2652).then(function(){return function(){return n(2652)}})}),c("react-ace","10.1.0",function(){return Promise.all([n.e(2262),n.e(4819),n.e(5854)]).then(function(){return function(){return n(92262)}})}),c("react-dom","18.2.0",function(){return Promise.all([n.e(3961),n.e(4819)]).then(function(){return function(){return n(73961)}})}),c("react","18.2.0",function(){return n.e(9526).then(function(){return function(){return n(89526)}})});break}return h.length?f[i]=Promise.all(h).then(function(){return f[i]=1}):f[i]=1}}}(),function(){var f;n.g.importScripts&&(f=n.g.location+"");var b=n.g.document;if(!f&&b&&(b.currentScript&&(f=b.currentScript.src),!f)){var i=b.getElementsByTagName("script");i.length&&(f=i[i.length-1].src)}if(!f)throw new Error("Automatic publicPath is not supported in this browser");f=f.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=f+"../../"}(),function(){var f=function(e){var r=function(u){return u.split(".").map(function(a){return+a==a?+a:a})},t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),o=t[1]?r(t[1]):[];return t[2]&&(o.length++,o.push.apply(o,r(t[2]))),t[3]&&(o.push([]),o.push.apply(o,r(t[3]))),o},b=function(e,r){e=f(e),r=f(r);for(var t=0;;){if(t>=e.length)return t<r.length&&(typeof r[t])[0]!="u";var o=e[t],u=(typeof o)[0];if(t>=r.length)return u=="u";var a=r[t],g=(typeof a)[0];if(u!=g)return u=="o"&&g=="n"||g=="s"||u=="u";if(u!="o"&&u!="u"&&o!=a)return o<a;t++}},i=function(e){var r=e[0],t="";if(e.length===1)return"*";if(r+.5){t+=r==0?">=":r==-1?"<":r==1?"^":r==2?"~":r>0?"=":"!=";for(var o=1,u=1;u<e.length;u++)o--,t+=(typeof(g=e[u]))[0]=="u"?"-":(o>0?".":"")+(o=2,g);return t}var a=[];for(u=1;u<e.length;u++){var g=e[u];a.push(g===0?"not("+E()+")":g===1?"("+E()+" || "+E()+")":g===2?a.pop()+" "+a.pop():i(g))}return E();function E(){return a.pop().replace(/^\((.+)\)$/,"$1")}},s=function(e,r){if(0 in e){r=f(r);var t=e[0],o=t<0;o&&(t=-t-1);for(var u=0,a=1,g=!0;;a++,u++){var E,M,j=a<e.length?(typeof e[a])[0]:"";if(u>=r.length||(M=(typeof(E=r[u]))[0])=="o")return!g||(j=="u"?a>t&&!o:j==""!=o);if(M=="u"){if(!g||j!="u")return!1}else if(g)if(j==M)if(a<=t){if(E!=e[a])return!1}else{if(o?E>e[a]:E<e[a])return!1;E!=e[a]&&(g=!1)}else if(j!="s"&&j!="n"){if(o||a<=t)return!1;g=!1,a--}else{if(a<=t||M<j!=o)return!1;g=!1}else j!="s"&&j!="n"&&(g=!1,a--)}}var L=[],V=L.pop.bind(L);for(u=1;u<e.length;u++){var A=e[u];L.push(A==1?V()|V():A==2?V()&V():A?s(A,r):!V())}return!!V()},l=function(e,r){var t=n.S[e];if(!t||!n.o(t,r))throw new Error("Shared module "+r+" doesn't exist in shared scope "+e);return t},v=function(e,o){var t=e[o],o=Object.keys(t).reduce(function(u,a){return!u||b(u,a)?a:u},0);return o&&t[o]},d=function(e,r){var t=e[r];return Object.keys(t).reduce(function(o,u){return!o||!t[o].loaded&&b(o,u)?u:o},0)},p=function(e,r,t,o){return"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+i(o)+")"},c=function(e,r,t,o){var u=d(e,t);return C(e[t][u])},y=function(e,r,t,o){var u=d(e,t);return s(o,u)||typeof console!="undefined"&&console.warn&&console.warn(p(e,t,u,o)),C(e[t][u])},h=function(e,r,t,o){var u=d(e,t);if(!s(o,u))throw new Error(p(e,t,u,o));return C(e[t][u])},S=function(e,u,t){var o=e[u],u=Object.keys(o).reduce(function(a,g){return s(t,g)&&(!a||b(a,g))?g:a},0);return u&&o[u]},w=function(e,r,t,o){var u=e[t];return"No satisfying version ("+i(o)+") of shared module "+t+" found in shared scope "+r+`.
|
|
1
|
+
(function(){var $={72063:function(f,b,i){Promise.all([i.e(3115),i.e(7230),i.e(8237),i.e(7581),i.e(8877),i.e(4819),i.e(5854),i.e(7440),i.e(6412),i.e(5710)]).then(i.bind(i,52898))}},F={};function n(f){var b=F[f];if(b!==void 0)return b.exports;var i=F[f]={id:f,loaded:!1,exports:{}};return $[f].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}n.m=$,n.c=F,function(){n.amdD=function(){throw new Error("define cannot be used indirect")}}(),function(){n.n=function(f){var b=f&&f.__esModule?function(){return f.default}:function(){return f};return n.d(b,{a:b}),b}}(),function(){var f=Object.getPrototypeOf?function(i){return Object.getPrototypeOf(i)}:function(i){return i.__proto__},b;n.t=function(i,s){if(s&1&&(i=this(i)),s&8||typeof i=="object"&&i&&(s&4&&i.__esModule||s&16&&typeof i.then=="function"))return i;var l=Object.create(null);n.r(l);var v={};b=b||[null,f({}),f([]),f(f)];for(var d=s&2&&i;typeof d=="object"&&!~b.indexOf(d);d=f(d))Object.getOwnPropertyNames(d).forEach(function(p){v[p]=function(){return i[p]}});return v.default=function(){return i},n.d(l,v),l}}(),function(){n.d=function(f,b){for(var i in b)n.o(b,i)&&!n.o(f,i)&&Object.defineProperty(f,i,{enumerable:!0,get:b[i]})}}(),function(){n.f={},n.e=function(f){return Promise.all(Object.keys(n.f).reduce(function(b,i){return n.f[i](f,b),b},[]))}}(),function(){n.u=function(f){return"static/js/"+f+"."+{82:"49b15550",137:"7d0016fc",154:"d88f9877",157:"d9eb4df4",217:"cf6e20e6",267:"9f9fa59c",333:"561630e6",412:"3ffef7fb",486:"7d15b268",625:"582ac42c",633:"96f600a5",686:"ca471284",706:"dfe41604",882:"be7a4d5a",942:"207e42d0",1087:"ef4f84fe",1208:"31db5c6c",1222:"cd2063a8",1320:"f736245b",1366:"a49670de",1391:"2de19a97",1525:"b31c05ad",1538:"dfc7cc6f",1616:"61fe323f",1707:"f7df40a6",1826:"5be93bbc",1933:"41793e90",1977:"c9e4f50e",2024:"8b538951",2137:"777f48b9",2261:"b3563538",2262:"75ab86af",2468:"140b5b84",2477:"6b15d98c",2483:"1095f0b0",2486:"a8ed5e8f",2584:"43527b4c",2652:"9a062c3e",2744:"ef38d907",2747:"4a41e801",2804:"dbcd0064",2916:"95b403b8",2925:"d004b8f5",3015:"be1eddee",3051:"e77311d6",3115:"d5d51289",3144:"36eeb4b7",3225:"179c0883",3362:"418c5cc8",3364:"558e865f",3433:"e552cd29",3444:"19fc19bb",3480:"49dbb899",3484:"b29fdc07",3577:"5e8ef7d1",3639:"1003bbf2",3659:"c4690adc",3700:"20f3fd68",3708:"25c08262",3750:"50d2282f",3752:"68f75662",3779:"c746626c",3960:"89bbf355",3961:"a98ff7ab",4075:"9569c164",4080:"08bbf44a",4102:"c0329b75",4191:"a518a3ff",4315:"1104cb2a",4342:"413d700a",4447:"73a8c44e",4456:"bc3c9316",4484:"110342a9",4552:"9e2ce14e",4602:"dd1c58a8",4617:"8d0361bd",4636:"385ff854",4815:"368861c3",4819:"faf4f7a9",4854:"97baae76",4883:"9285421a",4899:"a6c4272a",5028:"c715f042",5210:"892b55cb",5356:"8b6c5575",5413:"992de72c",5470:"4fc1a604",5498:"d2212d33",5537:"521b5c66",5685:"fc45361b",5710:"44014f30",5756:"97723189",5769:"b0d4a50e",5836:"a2dcbd47",5839:"46e155be",5841:"797bcac7",5854:"cb35337b",5875:"d4ccf8eb",5971:"0e12f083",6090:"d1503f4f",6105:"83a24c55",6228:"8a168a0f",6232:"e044c776",6280:"c7a765f2",6322:"763e2306",6343:"6471a5a9",6402:"f7ac8c4c",6412:"74e5d689",6452:"fea579f0",6454:"0cd3bd8e",6480:"7ae84254",6562:"41b1dc30",6821:"c216c1bf",6870:"f144f6cc",6879:"03a3247f",6972:"dbbd79e9",7015:"3761173d",7081:"f167a70a",7183:"4b2058d3",7209:"9eeaef81",7228:"9cb4bdd1",7230:"2cee7be4",7271:"3edae9d7",7303:"3eac6445",7397:"acb3d9d7",7412:"8d25c7e2",7440:"9ac4214e",7574:"a5efcf50",7578:"f483c48f",7581:"0e74f1d9",7664:"3fa78219",7738:"001030f6",7755:"83c235c2",7951:"abd5510b",7973:"6b50e6b3",7989:"a8efeb06",8112:"589ac3a7",8174:"caa35dc4",8229:"8cd5cf4a",8237:"60b9c326",8310:"5f862fb7",8402:"d27a0ebb",8420:"90e09fe0",8430:"2b31fb61",8433:"a0c455e3",8449:"9a32b58f",8467:"190e056f",8487:"e9b32f83",8551:"065d713b",8574:"7bcc88d2",8576:"9071b899",8588:"e79330e5",8596:"eecce458",8645:"3de30e5e",8672:"55636cc9",8711:"fce5fb9f",8792:"df96d9a6",8806:"032ed98a",8842:"fb0ec9e0",8843:"5a9728f2",8877:"5df30a1b",8930:"cbd7e106",8969:"363902cb",8976:"5eb72361",9027:"b14c5a3c",9039:"4c211996",9342:"b3c3a375",9373:"7a7a25e5",9428:"c9ff3bbd",9466:"dcce6914",9526:"113dc042",9533:"8ab1a236",9626:"dbfade82",9641:"91a04c00",9642:"76235e87",9810:"357c0bcf",9851:"aa20ee52",9910:"85dd0d83",9943:"f2a59da0"}[f]+".chunk.js"}}(),function(){n.miniCssF=function(f){return"static/css/"+f+".d6229a1b.chunk.css"}}(),function(){n.g=function(){if(typeof globalThis=="object")return globalThis;try{return this||new Function("return this")()}catch(f){if(typeof window=="object")return window}}()}(),function(){n.hmd=function(f){return f=Object.create(f),f.children||(f.children=[]),Object.defineProperty(f,"exports",{enumerable:!0,set:function(){throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+f.id)}}),f}}(),function(){n.o=function(f,b){return Object.prototype.hasOwnProperty.call(f,b)}}(),function(){var f={},b="src-rx:";n.l=function(i,s,l,v){if(f[i]){f[i].push(s);return}var d,p;if(l!==void 0)for(var c=document.getElementsByTagName("script"),y=0;y<c.length;y++){var h=c[y];if(h.getAttribute("src")==i||h.getAttribute("data-webpack")==b+l){d=h;break}}d||(p=!0,d=document.createElement("script"),d.charset="utf-8",d.timeout=120,n.nc&&d.setAttribute("nonce",n.nc),d.setAttribute("data-webpack",b+l),d.src=i),f[i]=[s];var S=function(x,P){d.onerror=d.onload=null,clearTimeout(w);var C=f[i];if(delete f[i],d.parentNode&&d.parentNode.removeChild(d),C&&C.forEach(function(m){return m(P)}),x)return x(P)},w=setTimeout(S.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=S.bind(null,d.onerror),d.onload=S.bind(null,d.onload),p&&document.head.appendChild(d)}}(),function(){n.r=function(f){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(f,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(f,"__esModule",{value:!0})}}(),function(){n.nmd=function(f){return f.paths=[],f.children||(f.children=[]),f}}(),function(){n.S={};var f={},b={};n.I=function(i,s){s||(s=[]);var l=b[i];if(l||(l=b[i]={}),!(s.indexOf(l)>=0)){if(s.push(l),f[i])return f[i];n.o(n.S,i)||(n.S[i]={});var v=n.S[i],d=function(S){return typeof console!="undefined"&&console.warn&&console.warn(S)},p="src-rx",c=function(S,w,x,P){var C=v[S]=v[S]||{},m=C[w];(!m||!m.loaded&&(!P!=!m.eager?P:p>m.from))&&(C[w]={get:x,from:p,eager:!!P})},y=function(S){var w=function(m){d("Initialization of sharing external failed: "+m)};try{var x=n(S);if(!x)return;var P=function(m){return m&&m.init&&m.init(n.S[i],s)};if(x.then)return h.push(x.then(P,w));var C=P(x);if(C&&C.then)return h.push(C.catch(w))}catch(m){w(m)}},h=[];switch(i){case"default":c("@iobroker/adapter-react-v5","3.1.20",function(){return Promise.all([n.e(3577),n.e(9943),n.e(3115),n.e(7230),n.e(7581),n.e(7228),n.e(4819),n.e(5854),n.e(7440),n.e(6412),n.e(6090)]).then(function(){return function(){return n(37228)}})}),c("@mui/material","5.9.0",function(){return Promise.all([n.e(3115),n.e(8237),n.e(3752),n.e(2024),n.e(4819),n.e(5854),n.e(7440)]).then(function(){return function(){return n(52024)}})}),c("@mui/styles","5.9.0",function(){return Promise.all([n.e(7230),n.e(4819),n.e(5854),n.e(9039)]).then(function(){return function(){return n(78449)}})}),c("prop-types","15.8.1",function(){return n.e(2652).then(function(){return function(){return n(2652)}})}),c("react-ace","10.1.0",function(){return Promise.all([n.e(2262),n.e(4819),n.e(5854)]).then(function(){return function(){return n(92262)}})}),c("react-dom","18.2.0",function(){return Promise.all([n.e(3961),n.e(4819)]).then(function(){return function(){return n(73961)}})}),c("react","18.2.0",function(){return n.e(9526).then(function(){return function(){return n(89526)}})});break}return h.length?f[i]=Promise.all(h).then(function(){return f[i]=1}):f[i]=1}}}(),function(){var f;n.g.importScripts&&(f=n.g.location+"");var b=n.g.document;if(!f&&b&&(b.currentScript&&(f=b.currentScript.src),!f)){var i=b.getElementsByTagName("script");i.length&&(f=i[i.length-1].src)}if(!f)throw new Error("Automatic publicPath is not supported in this browser");f=f.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=f+"../../"}(),function(){var f=function(e){var r=function(u){return u.split(".").map(function(a){return+a==a?+a:a})},t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),o=t[1]?r(t[1]):[];return t[2]&&(o.length++,o.push.apply(o,r(t[2]))),t[3]&&(o.push([]),o.push.apply(o,r(t[3]))),o},b=function(e,r){e=f(e),r=f(r);for(var t=0;;){if(t>=e.length)return t<r.length&&(typeof r[t])[0]!="u";var o=e[t],u=(typeof o)[0];if(t>=r.length)return u=="u";var a=r[t],g=(typeof a)[0];if(u!=g)return u=="o"&&g=="n"||g=="s"||u=="u";if(u!="o"&&u!="u"&&o!=a)return o<a;t++}},i=function(e){var r=e[0],t="";if(e.length===1)return"*";if(r+.5){t+=r==0?">=":r==-1?"<":r==1?"^":r==2?"~":r>0?"=":"!=";for(var o=1,u=1;u<e.length;u++)o--,t+=(typeof(g=e[u]))[0]=="u"?"-":(o>0?".":"")+(o=2,g);return t}var a=[];for(u=1;u<e.length;u++){var g=e[u];a.push(g===0?"not("+E()+")":g===1?"("+E()+" || "+E()+")":g===2?a.pop()+" "+a.pop():i(g))}return E();function E(){return a.pop().replace(/^\((.+)\)$/,"$1")}},s=function(e,r){if(0 in e){r=f(r);var t=e[0],o=t<0;o&&(t=-t-1);for(var u=0,a=1,g=!0;;a++,u++){var E,M,j=a<e.length?(typeof e[a])[0]:"";if(u>=r.length||(M=(typeof(E=r[u]))[0])=="o")return!g||(j=="u"?a>t&&!o:j==""!=o);if(M=="u"){if(!g||j!="u")return!1}else if(g)if(j==M)if(a<=t){if(E!=e[a])return!1}else{if(o?E>e[a]:E<e[a])return!1;E!=e[a]&&(g=!1)}else if(j!="s"&&j!="n"){if(o||a<=t)return!1;g=!1,a--}else{if(a<=t||M<j!=o)return!1;g=!1}else j!="s"&&j!="n"&&(g=!1,a--)}}var L=[],V=L.pop.bind(L);for(u=1;u<e.length;u++){var A=e[u];L.push(A==1?V()|V():A==2?V()&V():A?s(A,r):!V())}return!!V()},l=function(e,r){var t=n.S[e];if(!t||!n.o(t,r))throw new Error("Shared module "+r+" doesn't exist in shared scope "+e);return t},v=function(e,o){var t=e[o],o=Object.keys(t).reduce(function(u,a){return!u||b(u,a)?a:u},0);return o&&t[o]},d=function(e,r){var t=e[r];return Object.keys(t).reduce(function(o,u){return!o||!t[o].loaded&&b(o,u)?u:o},0)},p=function(e,r,t,o){return"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+i(o)+")"},c=function(e,r,t,o){var u=d(e,t);return C(e[t][u])},y=function(e,r,t,o){var u=d(e,t);return s(o,u)||typeof console!="undefined"&&console.warn&&console.warn(p(e,t,u,o)),C(e[t][u])},h=function(e,r,t,o){var u=d(e,t);if(!s(o,u))throw new Error(p(e,t,u,o));return C(e[t][u])},S=function(e,u,t){var o=e[u],u=Object.keys(o).reduce(function(a,g){return s(t,g)&&(!a||b(a,g))?g:a},0);return u&&o[u]},w=function(e,r,t,o){var u=e[t];return"No satisfying version ("+i(o)+") of shared module "+t+" found in shared scope "+r+`.
|
|
2
2
|
Available versions: `+Object.keys(u).map(function(a){return a+" from "+u[a].from}).join(", ")},x=function(e,r,t,o){var u=S(e,t,o);if(u)return C(u);throw new Error(w(e,r,t,o))},P=function(e,r,t,o){typeof console!="undefined"&&console.warn&&console.warn(w(e,r,t,o))},C=function(e){return e.loaded=1,e.get()},m=function(e){return function(r,t,o,u){var a=n.I(r);return a&&a.then?a.then(e.bind(e,r,n.S[r],t,o,u)):e(r,n.S[r],t,o,u)}},U=m(function(e,r,t){return l(e,t),C(v(r,t))}),K=m(function(e,r,t,o){return r&&n.o(r,t)?C(v(r,t)):o()}),z=m(function(e,r,t,o){return l(e,t),C(S(r,t,o)||P(r,e,t,o)||v(r,t))}),G=m(function(e,r,t){return l(e,t),c(r,e,t)}),H=m(function(e,r,t,o){return l(e,t),y(r,e,t,o)}),J=m(function(e,r,t,o){return l(e,t),x(r,e,t,o)}),W=m(function(e,r,t,o){return l(e,t),h(r,e,t,o)}),Q=m(function(e,r,t,o,u){return!r||!n.o(r,t)?u():C(S(r,t,o)||P(r,e,t,o)||v(r,t))}),X=m(function(e,r,t,o){return!r||!n.o(r,t)?o():c(r,e,t)}),O=m(function(e,r,t,o,u){return!r||!n.o(r,t)?u():y(r,e,t,o)}),Y=m(function(e,r,t,o,u){var a=r&&n.o(r,t)&&S(r,t,o);return a?C(a):u()}),Z=m(function(e,r,t,o,u){return!r||!n.o(r,t)?u():h(r,e,t,o)}),T={},B={4819:function(){return O("default","react",[0],function(){return n.e(9526).then(function(){return function(){return n(89526)}})})},15854:function(){return O("default","prop-types",[0],function(){return n.e(2652).then(function(){return function(){return n(2652)}})})},77440:function(){return O("default","react-dom",[0],function(){return n.e(3961).then(function(){return function(){return n(73961)}})})},58503:function(){return O("default","@mui/styles",[0],function(){return n.e(8449).then(function(){return function(){return n(78449)}})})},94427:function(){return O("default","@mui/material",[0],function(){return Promise.all([n.e(8237),n.e(3752),n.e(2024)]).then(function(){return function(){return n(52024)}})})},75606:function(){return O("default","@iobroker/adapter-react-v5",[0],function(){return Promise.all([n.e(3577),n.e(9943),n.e(7228),n.e(4815)]).then(function(){return function(){return n(37228)}})})},83732:function(){return O("default","react-ace",[0],function(){return n.e(2262).then(function(){return function(){return n(92262)}})})}},N={4819:[4819],5710:[75606,83732],5854:[15854],6412:[58503,94427],7440:[77440]};n.f.consumes=function(e,r){n.o(N,e)&&N[e].forEach(function(t){if(n.o(T,t))return r.push(T[t]);var o=function(g){T[t]=0,n.m[t]=function(E){delete n.c[t],E.exports=g()}},u=function(g){delete T[t],n.m[t]=function(E){throw delete n.c[t],g}};try{var a=B[t]();a.then?r.push(T[t]=a.then(o).catch(u)):o(a)}catch(g){u(g)}})}}(),function(){var f=function(l,v,d,p){var c=document.createElement("link");c.rel="stylesheet",c.type="text/css";var y=function(h){if(c.onerror=c.onload=null,h.type==="load")d();else{var S=h&&(h.type==="load"?"missing":h.type),w=h&&h.target&&h.target.href||v,x=new Error("Loading CSS chunk "+l+` failed.
|
|
3
3
|
(`+w+")");x.code="CSS_CHUNK_LOAD_FAILED",x.type=S,x.request=w,c.parentNode.removeChild(c),p(x)}};return c.onerror=c.onload=y,c.href=v,document.head.appendChild(c),c},b=function(l,v){for(var d=document.getElementsByTagName("link"),p=0;p<d.length;p++){var c=d[p],y=c.getAttribute("data-href")||c.getAttribute("href");if(c.rel==="stylesheet"&&(y===l||y===v))return c}for(var h=document.getElementsByTagName("style"),p=0;p<h.length;p++){var c=h[p],y=c.getAttribute("data-href");if(y===l||y===v)return c}},i=function(l){return new Promise(function(v,d){var p=n.miniCssF(l),c=n.p+p;if(b(p,c))return v();f(l,c,v,d)})},s={179:0};n.f.miniCss=function(l,v){var d={5710:1};s[l]?v.push(s[l]):s[l]!==0&&d[l]&&v.push(s[l]=i(l).then(function(){s[l]=0},function(p){throw delete s[l],p}))}}(),function(){var f={179:0};n.f.j=function(s,l){var v=n.o(f,s)?f[s]:void 0;if(v!==0)if(v)l.push(v[2]);else if(/^(4819|5854|6412|7440)$/.test(s))f[s]=0;else{var d=new Promise(function(h,S){v=f[s]=[h,S]});l.push(v[2]=d);var p=n.p+n.u(s),c=new Error,y=function(h){if(n.o(f,s)&&(v=f[s],v!==0&&(f[s]=void 0),v)){var S=h&&(h.type==="load"?"missing":h.type),w=h&&h.target&&h.target.src;c.message="Loading chunk "+s+` failed.
|
|
4
4
|
(`+S+": "+w+")",c.name="ChunkLoadError",c.type=S,c.request=w,v[1](c)}};n.l(p,y,"chunk-"+s,s)}};var b=function(s,l){var v=l[0],d=l[1],p=l[2],c,y,h=0;if(v.some(function(w){return f[w]!==0})){for(c in d)n.o(d,c)&&(n.m[c]=d[c]);if(p)var S=p(n)}for(s&&s(l);h<v.length;h++)y=v[h],n.o(f,y)&&f[y]&&f[y][0](),f[y]=0},i=self.webpackChunksrc_rx=self.webpackChunksrc_rx||[];i.forEach(b.bind(null,0)),i.push=b.bind(null,i.push.bind(i))}(),function(){n.nc=void 0}();var D=n(72063)})();
|
|
5
5
|
|
|
6
|
-
//# sourceMappingURL=main.
|
|
6
|
+
//# sourceMappingURL=main.d3df889c.js.map
|