homebridge-config-ui-x 4.78.2-beta.1 → 4.78.2-beta.10
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/CHANGELOG.md +25 -4
- package/dist/core/config/config.service.js +1 -1
- package/dist/core/config/config.service.js.map +1 -1
- package/dist/main.js +1 -0
- package/dist/main.js.map +1 -1
- package/dist/modules/backup/backup.controller.d.ts +1 -0
- package/dist/modules/backup/backup.controller.js +11 -0
- package/dist/modules/backup/backup.controller.js.map +1 -1
- package/dist/modules/backup/backup.service.d.ts +1 -0
- package/dist/modules/backup/backup.service.js +20 -7
- package/dist/modules/backup/backup.service.js.map +1 -1
- package/dist/modules/plugins/plugins.service.js +2 -1
- package/dist/modules/plugins/plugins.service.js.map +1 -1
- package/dist/modules/status/status.service.js +9 -0
- package/dist/modules/status/status.service.js.map +1 -1
- package/package.json +1 -1
- package/public/3rdpartylicenses.txt +132 -132
- package/public/assets/hap-icons/{airpurifier.svg → air-purifier.svg} +11 -11
- package/public/assets/hap-icons/{filtermaintenance.svg → filter-maintenance.svg} +1 -1
- package/public/assets/hap-icons/{smokesensor.svg → smoke-sensor.svg} +15 -2
- package/public/chunk-22QTGFTJ.js +1 -0
- package/public/chunk-3JARG26K.js +3 -0
- package/public/chunk-3LKZCKCF.js +1 -0
- package/public/chunk-45AWUQUI.js +1 -0
- package/public/chunk-4T2GN6EO.js +1 -0
- package/public/chunk-4YRWQX3W.js +1 -0
- package/public/chunk-5SZ5GQYS.js +2 -0
- package/public/{chunk-NTDOMYKH.js → chunk-63UHV4TV.js} +1 -1
- package/public/chunk-7ATQ5EBC.js +1 -0
- package/public/{chunk-J764EFYE.js → chunk-7EQ4BJZB.js} +1 -1
- package/public/{chunk-QRZ34GEE.js → chunk-ASKYLUSK.js} +1 -1
- package/public/{chunk-SNQSDIPZ.js → chunk-BU6UAZVK.js} +1 -1
- package/public/chunk-C5RHCAUK.js +1 -0
- package/public/{chunk-2NQ5FYSH.js → chunk-CF2ZN7LY.js} +1 -1
- package/public/{chunk-SCRWY2OT.js → chunk-EGCUYKRH.js} +1 -1
- package/public/chunk-EITS7TXC.js +1 -0
- package/public/chunk-EV45AMNT.js +1 -0
- package/public/chunk-F3ERQJVG.js +1 -0
- package/public/chunk-FHY3NHWQ.js +1 -0
- package/public/chunk-FR5YDBCN.js +1 -0
- package/public/{chunk-WTTWP6KF.js → chunk-GDFV4BMO.js} +1 -1
- package/public/chunk-GW2DVJRQ.js +1 -0
- package/public/chunk-HELQ6C4L.js +1 -0
- package/public/chunk-HSWLFIAJ.js +1 -0
- package/public/chunk-HYGTZ767.js +1 -0
- package/public/chunk-HZUGXGIE.js +1 -0
- package/public/{chunk-RQA6LYL5.js → chunk-IDT6WBAB.js} +16 -16
- package/public/chunk-IN7NZAFJ.js +1 -0
- package/public/chunk-J6YDFLQQ.js +1 -0
- package/public/chunk-JFXQKHPO.js +1 -0
- package/public/chunk-KBSONIC6.js +23 -0
- package/public/chunk-KC3UX7RJ.js +1 -0
- package/public/chunk-KUQKJUX5.js +1 -0
- package/public/chunk-LVSOME36.js +1 -0
- package/public/{chunk-555LSHXI.js → chunk-LXXELGX4.js} +1 -1
- package/public/chunk-LZTR2JMZ.js +1 -0
- package/public/chunk-N4XOTXZL.js +12 -0
- package/public/{chunk-S6UXXPGF.js → chunk-NGNQPAAK.js} +1 -1
- package/public/chunk-O3KBZXCW.js +1 -0
- package/public/chunk-OWY3J4XU.js +1 -0
- package/public/chunk-P2OFHVSW.js +1 -0
- package/public/chunk-PSCHGWYB.js +1 -0
- package/public/chunk-PVP6IVZQ.js +5 -0
- package/public/chunk-PY6XYKE2.js +1 -0
- package/public/chunk-Q3UFAHWJ.js +1 -0
- package/public/{chunk-QJQSHTGR.js → chunk-QDCKP2LU.js} +1 -1
- package/public/chunk-QH4OYVQX.js +4 -0
- package/public/chunk-QTPIIYXJ.js +4 -0
- package/public/chunk-RN7GNGXO.js +1 -0
- package/public/{chunk-SPWUOR22.js → chunk-ROYACDP2.js} +1 -1
- package/public/chunk-SKZUTSHE.js +7 -0
- package/public/chunk-SNKJBIOP.js +1 -0
- package/public/{chunk-EM4PY2IW.js → chunk-SRP6QX5M.js} +1 -1
- package/public/{chunk-5NG7YGKN.js → chunk-T252YJXA.js} +1 -1
- package/public/chunk-TKQG3CQ6.js +1 -0
- package/public/chunk-TQNKRJOX.js +1 -0
- package/public/{chunk-AJTG3DAQ.js → chunk-UD6SVFW2.js} +1 -1
- package/public/chunk-UJZFMBAF.js +1 -0
- package/public/{chunk-6XANA56B.js → chunk-UQYCFN3T.js} +2 -2
- package/public/chunk-V7XUKJMZ.js +1 -0
- package/public/chunk-VV5VPBPJ.js +1 -0
- package/public/{chunk-TJJCM4OW.js → chunk-X2SHRXXY.js} +1 -1
- package/public/{chunk-JBQX4JBH.js → chunk-X7PVYZAE.js} +1 -1
- package/public/chunk-Z565CB6Q.js +1 -0
- package/public/chunk-Z73Q5KI4.js +20 -0
- package/public/index.html +2 -2
- package/public/main-PSKITXQI.js +1 -0
- package/public/{styles-SK4HZ2RX.css → styles-YDIK2EDN.css} +1 -1
- package/public/chunk-2X7NZUGC.js +0 -1
- package/public/chunk-2YSKA2YY.js +0 -1
- package/public/chunk-3G3DH2ZR.js +0 -1
- package/public/chunk-6I6MSSFF.js +0 -1
- package/public/chunk-6KGDEIMR.js +0 -1
- package/public/chunk-763FOQIC.js +0 -1
- package/public/chunk-7HRB4VHI.js +0 -6
- package/public/chunk-7P77FVT7.js +0 -1
- package/public/chunk-A7K4APCG.js +0 -1
- package/public/chunk-AEYL6MCG.js +0 -1
- package/public/chunk-B2DW2RGE.js +0 -1
- package/public/chunk-B3ZR7P3D.js +0 -1
- package/public/chunk-BJOMWTHJ.js +0 -1
- package/public/chunk-BY2CUGGW.js +0 -1
- package/public/chunk-CECSQ6NC.js +0 -1
- package/public/chunk-D35WUZO6.js +0 -1
- package/public/chunk-DBZQJUDF.js +0 -1
- package/public/chunk-DBZXYE5W.js +0 -20
- package/public/chunk-DF7GJSLD.js +0 -1
- package/public/chunk-DRIQP77O.js +0 -5
- package/public/chunk-EU2SZZED.js +0 -23
- package/public/chunk-GC3HB3U2.js +0 -8
- package/public/chunk-GSCOER2R.js +0 -1
- package/public/chunk-H7FGMEPN.js +0 -1
- package/public/chunk-I3L663XH.js +0 -1
- package/public/chunk-IMPGSXGE.js +0 -1
- package/public/chunk-JURCOTQD.js +0 -1
- package/public/chunk-KFUUWA7X.js +0 -1
- package/public/chunk-KG7VL34O.js +0 -1
- package/public/chunk-LEV55DLW.js +0 -1
- package/public/chunk-LHKN5R2J.js +0 -1
- package/public/chunk-LMAXVRH5.js +0 -1
- package/public/chunk-N2OF6TOK.js +0 -1
- package/public/chunk-N76XL5HP.js +0 -1
- package/public/chunk-N7NKCND5.js +0 -1
- package/public/chunk-ND6A4KD4.js +0 -1
- package/public/chunk-NL6W4OUH.js +0 -1
- package/public/chunk-NXJ4ZOCO.js +0 -1
- package/public/chunk-OWK2D2Q6.js +0 -2
- package/public/chunk-PF7AJ2LV.js +0 -1
- package/public/chunk-QII4X7WC.js +0 -1
- package/public/chunk-R2RFTINJ.js +0 -4
- package/public/chunk-R7WONE73.js +0 -1
- package/public/chunk-S55FQIG6.js +0 -1
- package/public/chunk-T3D3G6D5.js +0 -1
- package/public/chunk-UIWXTQJB.js +0 -1
- package/public/chunk-V35TNLRY.js +0 -1
- package/public/chunk-W6X46MTW.js +0 -7
- package/public/chunk-WUXDJZ6X.js +0 -1
- package/public/chunk-WVSOPPG5.js +0 -1
- package/public/chunk-X3LF2E3T.js +0 -1
- package/public/chunk-XNLPMM4J.js +0 -1
- package/public/chunk-Y7M57KD2.js +0 -1
- package/public/chunk-YH3WTVQJ.js +0 -1
- package/public/chunk-Z7NIAJEB.js +0 -1
- package/public/chunk-ZARXJE2H.js +0 -1
- package/public/chunk-ZBVPVGRD.js +0 -1
- package/public/chunk-ZCNMJWEF.js +0 -1
- package/public/chunk-ZROZEDTZ.js +0 -1
- package/public/chunk-ZXAM5WIE.js +0 -1
- package/public/main-BJCJOIBF.js +0 -1
- /package/public/assets/hap-icons/{airquality.svg → air-quality-sensor.svg} +0 -0
- /package/public/assets/hap-icons/{co2-sensor.svg → carbon-dioxide-sensor.svg} +0 -0
- /package/public/assets/hap-icons/{co-sensor.svg → carbon-monoxide-sensor.svg} +0 -0
- /package/public/assets/hap-icons/{contactsensor-closed.svg → contact-sensor-closed.svg} +0 -0
- /package/public/assets/hap-icons/{contactsensor-open.svg → contact-sensor-open.svg} +0 -0
- /package/public/assets/hap-icons/{garagedoor.svg → garage-door.svg} +0 -0
- /package/public/assets/hap-icons/{humidity.svg → humidity-sensor.svg} +0 -0
- /package/public/assets/hap-icons/{leaksensor.svg → leak-sensor.svg} +0 -0
- /package/public/assets/hap-icons/{lightbulb.svg → light-bulb.svg} +0 -0
- /package/public/assets/hap-icons/{light.svg → light-sensor.svg} +0 -0
- /package/public/assets/hap-icons/{motionsensor.svg → motion-sensor.svg} +0 -0
- /package/public/assets/hap-icons/{occupancysensor.svg → occupancy-sensor.svg} +0 -0
- /package/public/assets/hap-icons/{securitysystem-active.svg → security-system-active.svg} +0 -0
- /package/public/assets/hap-icons/{securitysystem-off.svg → security-system-off.svg} +0 -0
- /package/public/assets/hap-icons/{securitysystem-triggered.svg → security-system-triggered.svg} +0 -0
- /package/public/assets/hap-icons/{statelessprogrammableswitch.svg → stateless-programmable-switch.svg} +0 -0
- /package/public/assets/hap-icons/{valve-waterfaucet.svg → valve-faucet.svg} +0 -0
- /package/public/assets/hap-icons/{valve-showerhead.svg → valve-shower-head.svg} +0 -0
- /package/public/assets/hap-icons/{windowcovering-closed.svg → window-covering-closed.svg} +0 -0
- /package/public/assets/hap-icons/{windowcovering-open.svg → window-covering-open.svg} +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import{a as ee}from"./chunk-X2SHRXXY.js";import{a as Z,b as ne}from"./chunk-UQYCFN3T.js";import{a as W,b as Y}from"./chunk-GDFV4BMO.js";import{a as X}from"./chunk-NGNQPAAK.js";import{m as J,n as K,t as U}from"./chunk-CF2ZN7LY.js";import{c as N,e as F,l as q,z}from"./chunk-T252YJXA.js";import{b as G}from"./chunk-X7PVYZAE.js";import{b as Q}from"./chunk-BU6UAZVK.js";import{k as M,n as V}from"./chunk-HZUGXGIE.js";import{a as $,b as T}from"./chunk-LXXELGX4.js";import"./chunk-SRP6QX5M.js";import{Bc as s,Cc as d,Dc as O,Hb as C,Ib as m,Jb as p,Lb as I,Mb as j,Nb as H,Ob as v,Pb as r,Qb as a,Rb as w,Vb as b,Yb as _,Zb as l,ab as n,fb as D,g as oe,h as S,jd as L,kc as y,la as h,lc as x,mb as k,mc as E,ra as g,rc as R,sa as u,sc as P,tc as B,w as A}from"./chunk-SKZUTSHE.js";var ie=oe(ne(),1);function ae(o,f){o&1&&(r(0,"div",5),w(1,"i",12),a())}function se(o,f){if(o&1){let e=b();r(0,"li",17),y(1),s(2,"date"),r(3,"button",18),s(4,"translate"),_("click",function(){let t=g(e).$implicit,c=l(3);return u(c.restore(t.id))}),w(5,"i",19),a()()}if(o&2){let e=f.$implicit;n(),E(" ",O(2,2,e.timestamp,"medium")," "),n(2),C("aria-label",d(4,5,"config.restore.copy_to_editor"))}}function le(o,f){if(o&1&&(r(0,"ul",15),j(1,se,6,7,"li",17,I),a()),o&2){let e=l(2);n(),H(e.backupList)}}function de(o,f){o&1&&(r(0,"p",16),y(1),s(2,"translate"),a()),o&2&&(n(),x(d(2,1,"config.restore.no_backups")))}function ce(o,f){if(o&1&&(r(0,"div",13),w(1,"i",14),a(),r(2,"p",13),y(3),s(4,"translate"),a(),m(5,le,3,0,"ul",15),m(6,de,3,3,"p",16)),o&2){let e=l();n(3),x(d(4,3,"config.restore.title_restore_homebridge_backup")),n(2),p(e.backupList&&e.backupList.length?5:-1),n(),p(!e.backupList||!e.backupList.length?6:-1)}}function me(o,f){if(o&1){let e=b();r(0,"button",20),s(1,"translate"),_("click",function(){g(e);let t=l();return u(t.dismissModal())}),y(2),s(3,"translate"),a()}o&2&&(C("aria-label",d(1,2,"form.button_close")),n(2),E(" ",d(3,4,"form.button_close")," "))}function pe(o,f){if(o&1){let e=b();r(0,"button",20),s(1,"translate"),_("click",function(){g(e);let t=l();return u(t.dismissModal())}),y(2),s(3,"translate"),a()}o&2&&(C("aria-label",d(1,2,"form.button_close")),n(2),E(" ",d(3,4,"form.button_close")," "))}function fe(o,f){if(o&1){let e=b();r(0,"button",21),s(1,"translate"),_("click",function(){g(e);let t=l();return u(t.deleteAllBackups())}),y(2),s(3,"translate"),a()}o&2&&(C("aria-label",d(1,2,"form.button_remove")),n(2),E(" ",d(3,4,"form.button_remove")," "))}var te=(()=>{class o{$activeModal=h(J);$api=h(V);$toastr=h(M);$translate=h($);loading=!0;backupList=[];ngOnInit(){this.$api.get("/config-editor/backups").subscribe({next:e=>{this.loading=!1,this.backupList=e},error:e=>{this.loading=!1,console.error(e),this.$toastr.error(e.error.message||e.message,this.$translate.instant("toast.title_error"))}})}restore(e){return this.$activeModal.close(e)}deleteAllBackups(){return this.$api.delete("/config-editor/backups").subscribe({next:()=>{this.$activeModal.dismiss(),this.$toastr.success(this.$translate.instant("config.restore.toast_backups_deleted"),this.$translate.instant("toast.title_success"))},error:e=>{console.error(e),this.$toastr.error(e.error.message||e.message,this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(i){return new(i||o)};static \u0275cmp=k({type:o,selectors:[["ng-component"]],decls:17,vars:11,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"text-center","primary-text"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["type","button",1,"btn","btn-danger","me-auto"],[1,"fa","fa-fw","fa-cog","fa-spin",2,"font-size","75px"],[1,"text-center","mb-3"],[1,"fas","fa-fw","fa-history","primary-text",2,"font-size","75px"],[1,"list-group","list-group-box"],[1,"text-center","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"btn","btn-primary","m-0","ms-3",3,"click"],[1,"fas","fa-fw","fa-arrow-right"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button",1,"btn","btn-danger","me-auto",3,"click"]],template:function(i,t){i&1&&(r(0,"div",0)(1,"div",1)(2,"h5",2),y(3),s(4,"translate"),a(),r(5,"button",3),s(6,"translate"),_("click",function(){return t.dismissModal()}),a()(),r(7,"div",4),m(8,ae,2,0,"div",5),m(9,ce,7,5),a(),r(10,"div",6)(11,"div",7),m(12,me,4,6,"button",8),a(),r(13,"div",9),m(14,pe,4,6,"button",8),a(),r(15,"div",10),m(16,fe,4,6,"button",11),a()()()),i&2&&(n(3),x(d(4,7,"form.button_restore")),n(2),C("aria-label",d(6,9,"form.button_close")),n(3),p(t.loading?8:-1),n(),p(t.loading?-1:9),n(3),p(!t.loading&&t.backupList.length?12:-1),n(2),p(t.loading||!t.loading&&!t.backupList.length?14:-1),n(2),p(!t.loading&&t.backupList.length?16:-1))},dependencies:[L,T],encapsulation:2})}return o})();function ge(o,f){if(o&1){let e=b();r(0,"button",13),s(1,"translate"),s(2,"translate"),_("click",function(){g(e);let t=l();return u(t.onExportConfig())}),w(3,"i",14),a()}o&2&&(v("ngbTooltip",d(1,2,"form.button_download")),C("aria-label",d(2,4,"form.button_download")))}function ue(o,f){if(o&1){let e=b();r(0,"button",15),s(1,"translate"),s(2,"translate"),_("click",function(){g(e);let t=l();return u(t.onCancelRestore())}),w(3,"i",16),a()}if(o&2){let e=l();v("disabled",e.saveInProgress)("ngbTooltip",d(1,3,"form.button_cancel")),C("aria-label",d(2,5,"form.button_cancel"))}}function he(o,f){if(o&1){let e=b();r(0,"button",13),s(1,"translate"),s(2,"translate"),_("click",function(){g(e);let t=l();return u(t.onRestore())}),w(3,"i",17),a()}o&2&&(v("ngbTooltip",d(1,2,"form.button_restore")),C("aria-label",d(2,4,"form.button_restore")))}function _e(o,f){o&1&&w(0,"i",8)}function be(o,f){o&1&&w(0,"i",9)}function Ce(o,f){if(o&1){let e=b();r(0,"ngx-monaco-editor",18),_("onInit",function(t){g(e);let c=l();return u(c.onEditorInit(t))})("keydown.control.s",function(t){g(e);let c=l();return t.preventDefault(),u(c.onSave())})("keydown.meta.s",function(t){g(e);let c=l();return t.preventDefault(),u(c.onSave())}),a()}if(o&2){let e=l();v("options",e.editorOptions)("model",e.monacoEditorModel)}}function ye(o,f){if(o&1){let e=b();r(0,"ngx-monaco-diff-editor",19),_("onInit",function(t){g(e);let c=l();return u(c.onInitDiffEditor(t))})("keydown.control.s",function(t){g(e);let c=l();return t.preventDefault(),u(c.onSave())})("keydown.meta.s",function(t){g(e);let c=l();return t.preventDefault(),u(c.onSave())}),a()}if(o&2){let e=l();v("options",e.editorOptions)("originalModel",e.monacoEditorModel)("modifiedModel",e.monacoEditorModel)}}function we(o,f){if(o&1){let e=b();r(0,"textarea",20),B("ngModelChange",function(t){g(e);let c=l();return P(c.homebridgeConfig,t)||(c.homebridgeConfig=t),u(t)}),y(1," "),a()}if(o&2){let e=l();R("ngModel",e.homebridgeConfig)}}var Ke=(()=>{class o{$api=h(V);$md=h(X);$modal=h(K);$monacoEditor=h(ee);$route=h(G);$renderer=h(D);$settings=h(Q);$toastr=h(M);$translate=h($);editorDecorations=[];lastHeight;visualViewPortEventCallback;homebridgeConfig;originalConfig;saveInProgress;isMobile=!1;monacoEditor;editorOptions;monacoEditorModel;constructor(){this.isMobile=this.$md.detect.mobile()}ngOnInit(){this.editorOptions={language:"json",theme:this.$settings.actualLightingMode==="dark"?"vs-dark":"vs-light",automaticLayout:!0};let e=document.querySelector(".content");this.$renderer.setStyle(e,"height","100%"),this.visualViewPortEventCallback=()=>this.visualViewPortChanged(),this.lastHeight=window.innerHeight,window.visualViewport&&!this.isMobile&&(window.visualViewport.addEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.disableTouchMove()),this.visualViewPortEventCallback=()=>this.visualViewPortChanged(),this.lastHeight=window.innerHeight,window.visualViewport&&!this.isMobile&&(window.visualViewport.addEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.disableTouchMove()),this.$route.data.subscribe(i=>{this.homebridgeConfig=i.config}),this.monacoEditorModel={value:"{}",language:"json",uri:window.monaco?window.monaco.Uri.parse("a://homebridge/config.json"):void 0},window.monaco?this.setMonacoEditorModel():this.$monacoEditor.readyEvent.subscribe({next:()=>{this.setMonacoEditorModel()}})}onEditorInit(e){window.editor=e,this.monacoEditor=e,this.monacoEditor.getModel().setValue(this.homebridgeConfig)}onInitDiffEditor(e){this.monacoEditor=e.modifiedEditor,e.getModel().original.setValue(this.originalConfig),e.getModel().modified.setValue(this.homebridgeConfig),window.editor=e}onSave(){return S(this,null,function*(){if(!this.saveInProgress){this.monacoEditor&&(this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[])),this.saveInProgress=!0;try{if(!this.isMobile){yield this.monacoEditor.getAction("editor.action.formatDocument").run();let i=window.monaco.editor.getModelMarkers({owner:"json"});for(let t of i)if(t.message==="Duplicate object key"){this.saveInProgress=!1,this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"));return}this.homebridgeConfig=this.monacoEditor.getModel().getValue()}let e=this.parseConfigFromEditor();this.homebridgeConfig=JSON.stringify(e,null,4),typeof e.bridge!="object"?this.$toastr.error(this.$translate.instant("config.config_bridge_missing"),this.$translate.instant("toast.title_error")):/^(?:[0-9A-F]{2}:){5}[0-9A-F]{2}$/i.test(e.bridge.username)?e.accessories&&!Array.isArray(e.accessories)?this.$toastr.error(this.$translate.instant("config.config_accessory_must_be_array"),this.$translate.instant("toast.title_error")):e.platforms&&!Array.isArray(e.platforms)?this.$toastr.error(this.$translate.instant("config.config_platform_must_be_array"),this.$translate.instant("toast.title_error")):e.platforms&&Array.isArray(e.platforms)&&!this.validateSection(e.platforms,"platform")||e.accessories&&Array.isArray(e.accessories)&&!this.validateSection(e.accessories,"accessory")||e.plugins&&Array.isArray(e.plugins)&&!this.validatePlugins(e.plugins,"plugins")||e.disabledPlugins&&Array.isArray(e.disabledPlugins)&&!this.validatePlugins(e.disabledPlugins,"disabledPlugins")||(yield this.saveConfig(e),this.originalConfig=""):this.$toastr.error(this.$translate.instant("config.config_username_error"),this.$translate.instant("toast.title_error"))}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"))}this.saveInProgress=!1}})}onRestore(){this.$modal.open(te,{size:"lg",backdrop:"static"}).result.then(e=>{this.originalConfig||(this.originalConfig=this.homebridgeConfig),this.$api.get(`/config-editor/backups/${e}`).subscribe({next:i=>{this.$toastr.info(this.$translate.instant("config.restore.confirm"),this.$translate.instant("config.title_backup_loaded")),this.homebridgeConfig=JSON.stringify(i,null,4),this.monacoEditor&&window.editor.modifiedEditor&&(this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[]),this.monacoEditor.executeEdits("beautifier",[{identifier:"delete",range:new monaco.Range(1,1,this.monacoEditor.getModel().getLineCount()+10,1),text:"",forceMoveMarkers:!0}]),this.monacoEditor.executeEdits("beautifier",[{identifier:"insert",range:new monaco.Range(1,1,1,1),text:this.homebridgeConfig,forceMoveMarkers:!0}]))},error:i=>{console.error(i),this.$toastr.error(i.error.message||this.$translate.instant("backup.load_error"),this.$translate.instant("toast.title_error"))}})}).catch(()=>{})}onExportConfig(){let e=`data:text/json;charset=utf-8,${encodeURIComponent(this.homebridgeConfig)}`,i=document.createElement("a");i.setAttribute("href",e),i.setAttribute("download","config.json"),document.body.appendChild(i),i.click(),i.remove()}onCancelRestore(){this.homebridgeConfig=this.originalConfig,this.originalConfig=""}ngOnDestroy(){let e=document.querySelector(".content");this.$renderer.removeStyle(e,"height"),window.visualViewport&&(window.visualViewport.removeEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.enableTouchMove()),this.monacoEditor&&this.monacoEditor.dispose()}validateSection(e,i){for(let t of e){if(typeof t!="object"||Array.isArray(t))return this.$toastr.error(this.$translate.instant("config.error_blocks_objects",{type:i}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(t),!1;if(!t[i])return this.$toastr.error(this.$translate.instant("config.error_blocks_type",{type:i}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(t),!1;if(typeof t[i]!="string")return this.$toastr.error(this.$translate.instant("config.error_string_type",{type:i}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(t),!1}return!0}validatePlugins(e,i){for(let t of e)if(typeof t!="string")return this.$toastr.error(this.$translate.instant("config.error_string_array",{key:i}),this.$translate.instant("toast.title_error")),!1;return!0}highlightOffendingArrayItem(e){this.monacoEditor&&(e=JSON.stringify(e,null,4).split(`
|
|
2
|
+
`).map(i=>` ${i}`).join(`
|
|
3
|
+
`),setTimeout(()=>{let i=this.monacoEditor.getModel().findMatches(e);if(i.length){let t=i[0].range,c=new monaco.Range(t.startLineNumber,t.startColumn,t.endLineNumber,t.endColumn);this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[{range:c,options:{isWholeLine:!0,linesDecorationsClassName:"hb-monaco-editor-line-error"}}])}},200))}setMonacoEditorModel(){if(window.monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas.some(i=>i.uri==="http://homebridge/config.json"))return;let e=monaco.Uri.parse("a://homebridge/config.json");window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({allowComments:!1,validate:!0,schemas:[{uri:"http://homebridge/config.json",fileMatch:[e.toString()],schema:{type:"object",required:["bridge"],properties:{bridge:{type:"object",required:["name","username","port","pin"],properties:{name:{type:"string",description:`The Homebridge instance name.
|
|
4
|
+
This should be unique if you are running multiple instances of Homebridge.`,default:"Homebridge"},username:{type:"string",description:`Homebridge username must be 6 pairs of colon-separated hexadecimal characters (A-F 0-9).
|
|
5
|
+
You should change this pin if you need to re-pair your instance with HomeKit.
|
|
6
|
+
Example: 0E:89:49:64:91:86`,default:"0E:89:49:64:91:86",pattern:"^([A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}$"},port:{type:"number",description:`The port Homebridge listens on.
|
|
7
|
+
If running more than one instance of Homebridge on the same server make sure each instance is given a unique port.`,default:51173,minimum:1025,maximum:65534},pin:{type:"string",description:`The Homebridge instance pin.
|
|
8
|
+
This is used when pairing Homebridge to HomeKit.
|
|
9
|
+
Example: 630-27-655`,default:"630-27-655",pattern:"^([0-9]{3}-[0-9]{2}-[0-9]{3})$"},manufacturer:{type:"string",description:"The bridge manufacturer to be displayed in HomeKit"},firmwareRevision:{type:"string",description:"The bridge firmware version to be displayed in HomeKit"},model:{type:"string",description:"The bridge model to be displayed in HomeKit"},bind:{description:`A string or an array of strings with the name(s) of the network interface(s) Homebridge should bind to.
|
|
10
|
+
|
|
11
|
+
Requires Homebridge v1.3 or later.`,type:["string","array"],items:{type:"string",description:"Network Interface name that Homebridge should bind to."}}},default:{name:"Homebridge",username:"0E:89:49:64:91:86",port:51173,pin:"6302-7655"}},mdns:{type:"object",properties:{interface:{type:"string",description:`The interface or IP address of the interface you want Homebridge to listen on. This is useful if your server has multiple interfaces.
|
|
12
|
+
|
|
13
|
+
Deprecated as of Homebridge v1.3.0 - use bridge.bind instead.`},legacyAdvertiser:{type:"boolean",description:"Set to `false` to use the new mdns library, ciao."}},default:{legacyAdvertiser:!1}},plugins:{type:"array",description:"An array of plugins that should be selectively enabled. Remove this array to enable all plugins.",items:{type:"string",description:`The full plugin npm package name.
|
|
14
|
+
Example: homebridge-dummy`},default:["homebridge-config-ui-x"]},disabledPlugins:{type:"array",description:`An array of plugins that should be disabled.
|
|
15
|
+
|
|
16
|
+
Requires Homebridge v1.3 or later.`,items:{type:"string",description:`The full plugin npm package name.
|
|
17
|
+
Example: homebridge-dummy`},default:[]},ports:{type:"object",description:"The range of ports that should be used for certain accessories like cameras and TVs",required:["start","end"],properties:{start:{type:"number",default:52100,minimum:1025,maximum:65534},end:{type:"number",default:52150,minimum:1025,maximum:65534}},default:{start:52100,end:52150}},platforms:{type:"array",description:`Any plugin that exposes a platform should have its config entered in this array.
|
|
18
|
+
Separate each plugin config block using a comma.`,items:{type:"object",required:["platform"],anyOf:[{type:"object",required:["platform"],properties:{platform:{type:"string",description:"This is used by Homebridge to identify which plugin this platform belongs to.",not:{enum:["config"]}},name:{type:"string",description:"The name of the platform."}}},{type:"object",properties:{platform:{type:"string",description:`Homebridge UI platform name must be set to "config".
|
|
19
|
+
Do Not Change!`,oneOf:[{enum:"config"}]},name:{type:"string",description:"The name used in the Homebridge log."}}}]}},accessories:{type:"array",description:`Any plugin that exposes an accessory should have its config entered in this array.
|
|
20
|
+
Separate each plugin config block using a comma.`,items:{type:"object",required:["accessory","name"],properties:{accessory:{type:"string",description:"This is used by Homebridge to identify which plugin this accessory belongs to."},name:{type:"string",description:"The name of the accessory."}}}}}}}]}),this.monacoEditorModel.uri=monaco.Uri.parse("a://homebridge/config.json")}visualViewPortChanged(){this.lastHeight<window.visualViewport.height&&document.activeElement.blur(),window.visualViewport.height<window.innerHeight?(this.$md.enableTouchMove(),this.lastHeight=window.visualViewport.height):window.visualViewport.height===window.innerHeight&&(this.$md.disableTouchMove(),this.lastHeight=window.visualViewport.height)}saveConfig(e){return S(this,null,function*(){try{let i=yield A(this.$api.post("/config-editor",e));this.homebridgeConfig=JSON.stringify(i,null,4),this.$modal.open(Z,{size:"lg",backdrop:"static"})}catch(i){console.error(i),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error"))}})}parseConfigFromEditor(){try{return JSON.parse(this.homebridgeConfig)}catch{let i=ie.default.parse(this.homebridgeConfig);return this.homebridgeConfig=JSON.stringify(i,null,4),this.monacoEditor&&this.monacoEditor.getModel().setValue(this.homebridgeConfig),i}}static \u0275fac=function(i){return new(i||o)};static \u0275cmp=k({type:o,selectors:[["ng-component"]],decls:18,vars:18,consts:[[1,"flex-column","d-flex","align-items-stretch","h-100"],[1,"row"],[1,"col-6"],[1,"primary-text","m-0"],[1,"col-6","text-end"],["container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-2",3,"ngbTooltip"],["container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-danger","waves-effect","my-0","me-2",3,"disabled","ngbTooltip"],["container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-0",3,"click","disabled","ngbTooltip"],[1,"fas","fa-fw","fa-floppy-disk"],[1,"fas","fa-fw","fa-spinner","fa-pulse"],[1,"flex-grow-1","h-100","w-100","mt-3","mb-0",3,"options","model"],[1,"flex-grow-1","h-100","w-100","mt-3","mb-0",3,"options","originalModel","modifiedModel"],["wrap","off","autocomplete","off","autocorrect","off","autocapitalize","off","spellcheck","false",1,"hb-plain-text-editor","align-self-end","h-100","w-100","my-3",3,"ngModel"],["container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-2",3,"click","ngbTooltip"],[1,"fas","fa-fw","fa-download"],["container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-danger","waves-effect","my-0","me-2",3,"click","disabled","ngbTooltip"],[1,"fas","fa-fw","fa-times"],[1,"fas","fa-fw","fa-history"],[1,"flex-grow-1","h-100","w-100","mt-3","mb-0",3,"onInit","keydown.control.s","keydown.meta.s","options","model"],[1,"flex-grow-1","h-100","w-100","mt-3","mb-0",3,"onInit","keydown.control.s","keydown.meta.s","options","originalModel","modifiedModel"],["wrap","off","autocomplete","off","autocorrect","off","autocapitalize","off","spellcheck","false",1,"hb-plain-text-editor","align-self-end","h-100","w-100","my-3",3,"ngModelChange","ngModel"]],template:function(i,t){i&1&&(r(0,"div",0)(1,"div",1)(2,"div",2)(3,"h3",3),y(4),s(5,"translate"),a()(),r(6,"div",4),m(7,ge,4,6,"button",5),m(8,ue,4,7,"button",6),m(9,he,4,6,"button",5),r(10,"button",7),s(11,"translate"),s(12,"translate"),_("click",function(){return t.onSave()}),m(13,_e,1,0,"i",8),m(14,be,1,0,"i",9),a()()(),m(15,Ce,1,2,"ngx-monaco-editor",10),m(16,ye,1,3,"ngx-monaco-diff-editor",11),m(17,we,2,1,"textarea",12),a()),i&2&&(n(4),x(d(5,12,"menu.config_json_editor")),n(3),p(t.originalConfig?-1:7),n(),p(t.originalConfig?8:-1),n(),p(t.originalConfig?-1:9),n(),v("disabled",t.saveInProgress)("ngbTooltip",d(11,14,"form.button_save")),C("aria-label",d(12,16,"form.button_save")),n(3),p(t.saveInProgress?-1:13),n(),p(t.saveInProgress?14:-1),n(),p(!t.isMobile&&!t.originalConfig?15:-1),n(),p(!t.isMobile&&t.originalConfig?16:-1),n(),p(t.isMobile?17:-1))},dependencies:[U,W,Y,z,N,F,q,T],encapsulation:2})}return o})();export{Ke as ConfigEditorComponent};
|
package/public/index.html
CHANGED
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
<link rel="manifest" href="/assets/manifest.webmanifest"/>
|
|
17
17
|
<meta name="theme-color" content="#140a33" media="(prefers-color-scheme: light)"/>
|
|
18
18
|
<meta name="theme-color" content="#0f0f0f" media="(prefers-color-scheme: dark)"/>
|
|
19
|
-
<link rel="stylesheet" href="styles-
|
|
19
|
+
<link rel="stylesheet" href="styles-YDIK2EDN.css" crossorigin="use-credentials"></head>
|
|
20
20
|
|
|
21
21
|
<body>
|
|
22
22
|
<app-root></app-root>
|
|
23
|
-
<link rel="modulepreload" href="chunk-
|
|
23
|
+
<link rel="modulepreload" href="chunk-Z565CB6Q.js"><link rel="modulepreload" href="chunk-KBSONIC6.js"><link rel="modulepreload" href="chunk-X2SHRXXY.js"><link rel="modulepreload" href="chunk-4YRWQX3W.js"><link rel="modulepreload" href="chunk-4T2GN6EO.js"><link rel="modulepreload" href="chunk-3JARG26K.js"><link rel="modulepreload" href="chunk-J6YDFLQQ.js"><link rel="modulepreload" href="chunk-45AWUQUI.js"><link rel="modulepreload" href="chunk-HYGTZ767.js"><link rel="modulepreload" href="chunk-IDT6WBAB.js"><script src="polyfills-WE4HA5DL.js" type="module" crossorigin="use-credentials"></script><script src="main-PSKITXQI.js" type="module" crossorigin="use-credentials"></script></body>
|
|
24
24
|
</html>
|