homebridge-config-ui-x 5.4.2-beta.27 → 5.4.2-beta.29
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 +2 -0
- package/package.json +2 -2
- package/public/{chunk-RJWNA6PS.js → chunk-2D7HQVKR.js} +1 -1
- package/public/{chunk-E5NWV3ZN.js → chunk-3BBGBKFR.js} +1 -1
- package/public/chunk-3OFFDT3E.js +1 -0
- package/public/chunk-3PZPX5LT.js +49 -0
- package/public/{chunk-TM3AK75G.js → chunk-3WOR7HY4.js} +1 -1
- package/public/{chunk-RFVWMZVN.js → chunk-4NGXWZXZ.js} +1 -1
- package/public/{chunk-CTYK4ZDT.js → chunk-4UU3RZEP.js} +1 -1
- package/public/{chunk-HV7JTH7E.js → chunk-4VGD3WI7.js} +1 -1
- package/public/{chunk-RXJQSUP5.js → chunk-53UVZ2PI.js} +1 -1
- package/public/{chunk-Q3OXE4HG.js → chunk-5XL6YEVR.js} +1 -1
- package/public/{chunk-CIVLN3HQ.js → chunk-74ETBIBO.js} +1 -1
- package/public/{chunk-6SQUXR52.js → chunk-74TLD7UE.js} +1 -1
- package/public/{chunk-DCFPKVZV.js → chunk-7CFZRR4O.js} +1 -1
- package/public/{chunk-YFWJDGMU.js → chunk-7KLW5GIG.js} +1 -1
- package/public/{chunk-5WYRGCHF.js → chunk-7XG67XSY.js} +1 -1
- package/public/chunk-A3VTDTFF.js +1 -0
- package/public/chunk-A45G2U3K.js +20 -0
- package/public/{chunk-2BONQIRO.js → chunk-AHD4KF6Z.js} +1 -1
- package/public/{chunk-WZQYKDPU.js → chunk-AP6Z5Y4X.js} +1 -1
- package/public/{chunk-ZCECOKUJ.js → chunk-B5QBG6FX.js} +1 -1
- package/public/{chunk-LJFZCCOI.js → chunk-BD4L4MMU.js} +1 -1
- package/public/{chunk-DLF7L3BS.js → chunk-BOE57LT5.js} +1 -1
- package/public/{chunk-ZYRC2WT2.js → chunk-CUOS2FWX.js} +1 -1
- package/public/{chunk-ZHBYPPAP.js → chunk-CX6JKA5M.js} +1 -1
- package/public/{chunk-ZVJJ54ZO.js → chunk-DCNSZOAX.js} +1 -1
- package/public/{chunk-M7Q6VBJE.js → chunk-ECQJTOVP.js} +1 -1
- package/public/{chunk-AM53KSWA.js → chunk-F7ZV2JBO.js} +1 -1
- package/public/{chunk-VD7BA4ID.js → chunk-FP4B5ZM4.js} +1 -1
- package/public/{chunk-3ACGJUEG.js → chunk-GH4JGNJN.js} +1 -1
- package/public/{chunk-7RO442Z4.js → chunk-GIE4TMN3.js} +1 -1
- package/public/{chunk-AEEAPTXE.js → chunk-GKQKFOED.js} +1 -1
- package/public/{chunk-D3C7MJBA.js → chunk-GP2GNSMH.js} +1 -1
- package/public/{chunk-2G4CUPL6.js → chunk-HO6C3ZNS.js} +1 -1
- package/public/{chunk-OOZKLPGC.js → chunk-HPUVHUIE.js} +1 -1
- package/public/{chunk-KNZTEJFP.js → chunk-I5TETZ3I.js} +1 -1
- package/public/{chunk-MIAB4TWY.js → chunk-JR2FLREK.js} +1 -1
- package/public/{chunk-7SFRCNMY.js → chunk-JY7WBI77.js} +1 -1
- package/public/chunk-KLRMJTX4.js +1 -0
- package/public/{chunk-KXMDG63G.js → chunk-KT4VIVBF.js} +1 -1
- package/public/{chunk-XSWSFV2A.js → chunk-LQZNIDZL.js} +1 -1
- package/public/{chunk-XGTEUUBH.js → chunk-LTBNWBMR.js} +1 -1
- package/public/{chunk-BQMDK4YS.js → chunk-LXFVNKLD.js} +1 -1
- package/public/{chunk-5U3FEZ2G.js → chunk-MCA223NA.js} +1 -1
- package/public/{chunk-M4MLM6H3.js → chunk-MCFOWF4A.js} +1 -1
- package/public/{chunk-MKE67RXR.js → chunk-NPZOV2X7.js} +1 -1
- package/public/{chunk-BVZ3SRS2.js → chunk-NQOKXOSJ.js} +1 -1
- package/public/{chunk-QC5HHLSR.js → chunk-NZX64JHS.js} +1 -1
- package/public/{chunk-LXYEJETB.js → chunk-QDN5XMMB.js} +1 -1
- package/public/{chunk-BGFPAHFB.js → chunk-QFVLYN66.js} +1 -1
- package/public/{chunk-R7IY4GND.js → chunk-R3RKTCAQ.js} +1 -1
- package/public/{chunk-3KIRCXWS.js → chunk-RPAP36X2.js} +1 -1
- package/public/{chunk-VAGPFZ67.js → chunk-SDNFT4EO.js} +1 -1
- package/public/{chunk-CCHRGHTT.js → chunk-SGN6BUCA.js} +1 -1
- package/public/{chunk-ICKVURKU.js → chunk-SHZB7AIZ.js} +1 -1
- package/public/{chunk-XRCCQRNX.js → chunk-TES6RTPW.js} +1 -1
- package/public/{chunk-3LEW5FOJ.js → chunk-V2XN5VIX.js} +2 -2
- package/public/{chunk-XOQCJHAF.js → chunk-VQGEOKAU.js} +1 -1
- package/public/{chunk-F3ULAZ4E.js → chunk-VYQ356YN.js} +1 -1
- package/public/{chunk-UMJLOECB.js → chunk-WDE5OXOY.js} +1 -1
- package/public/{chunk-NCLPMN5F.js → chunk-WZBU3SBS.js} +1 -1
- package/public/chunk-X7HR3QMP.js +1 -0
- package/public/{chunk-C727YE33.js → chunk-YHSF3BIL.js} +1 -1
- package/public/{chunk-MDV2S56W.js → chunk-YMAWYUA6.js} +1 -1
- package/public/{chunk-MVMZJM7B.js → chunk-YOAZTJFX.js} +1 -1
- package/public/{chunk-D3QIDBI6.js → chunk-Z5TUCCAE.js} +1 -1
- package/public/{chunk-DVIX5YT5.js → chunk-ZLL7JTA4.js} +1 -1
- package/public/{chunk-EWO5Q2EI.js → chunk-ZZ3PNQCV.js} +1 -1
- package/public/index.html +1 -1
- package/public/{main-ORZNR5FC.js → main-B7UGKBVJ.js} +1 -1
- package/public/chunk-AXFOAQFE.js +0 -1
- package/public/chunk-BRAUW7R2.js +0 -1
- package/public/chunk-O566QXRW.js +0 -1
- package/public/chunk-OAXX6BH4.js +0 -49
- package/public/chunk-XUU56INO.js +0 -20
- package/public/chunk-ZZNMGCC4.js +0 -1
package/public/chunk-XUU56INO.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import{a as xe}from"./chunk-5WYRGCHF.js";import{b as B,e as Ce,f as ve,g as Pe}from"./chunk-LJFZCCOI.js";import{a as he,b as be}from"./chunk-M7Q6VBJE.js";import{a as we}from"./chunk-KNZTEJFP.js";import{a as je}from"./chunk-KXMDG63G.js";import{m as ge,n as ue,t as D}from"./chunk-BQMDK4YS.js";import{B as fe,C as pe,c as de,e as ce,l as me}from"./chunk-AM53KSWA.js";import{b as _e,d as I}from"./chunk-MDV2S56W.js";import{b as ye}from"./chunk-OOZKLPGC.js";import{k as R,l as j,n as P,q as O}from"./chunk-YFWJDGMU.js";import{Db as S,Gb as b,Ib as m,Jc as ae,La as r,Pa as Z,Qc as le,Tb as oe,Vb as _,Wa as A,Wb as k,Xb as T,a as Y,ac as ne,b as G,bc as re,cc as se,d as Q,g as X,h as C,hc as U,ja as p,kb as w,lb as v,mb as x,mc as s,nc as l,oa as u,ob as ee,oc as z,pa as h,pb as te,qb as ie,rb as g,sb as a,tb as d,ub as f,w as $}from"./chunk-3LEW5FOJ.js";var $e=X(Pe(),1);var Ee=X(je(),1);var Se=(n,y)=>({"fa-trash":n,"fa-cog fa-spin":y});function Oe(n,y){n&1&&(a(0,"div",13),f(1,"i",20),d())}function He(n,y){if(n&1){let e=S();a(0,"li",9)(1,"span"),_(2),s(3,"date"),f(4,"br"),a(5,"span",21),_(6),s(7,"date"),d()(),a(8,"span",22)(9,"button",25),s(10,"translate"),s(11,"translate"),b("click",function(){let i=u(e).$implicit,o=m(2);return h(o.restore(i.id))}),f(12,"i",26),d(),a(13,"button",27),s(14,"translate"),s(15,"translate"),b("click",function(){let i=u(e).$implicit,o=m(2);return h(o.download(i.id))}),f(16,"i",28),d(),a(17,"button",23),s(18,"translate"),s(19,"translate"),b("click",function(){let i=u(e).$implicit,o=m(2);return h(o.delete(i.id))}),f(20,"i",24),d()()()}if(n&2){let e=y.$implicit,t=m(2);r(2),T(" ",z(3,15,e.timestamp,"mediumDate")),r(4),k(z(7,18,e.timestamp,"shortTime")),r(3),g("disabled",t.clicked||t.deleting)("ngbTooltip",l(10,21,"config.restore.copy_to_editor"))("openDelay",150),w("aria-label",l(11,23,"config.restore.copy_to_editor")),r(4),g("disabled",t.clicked||t.deleting)("ngbTooltip",l(14,25,"form.button_download"))("openDelay",150),w("aria-label",l(15,27,"form.button_download")),r(4),g("disabled",t.clicked||t.deleting)("ngbTooltip",l(18,29,"form.button_delete"))("openDelay",150),w("aria-label",l(19,31,"form.button_delete")),r(3),g("ngClass",U(33,Se,e.id!==t.deleting,e.id===t.deleting))}}function Ne(n,y){if(n&1){let e=S();a(0,"ul",14),te(1,He,21,36,"li",9,ee),a(3,"li",9)(4,"span"),_(5),s(6,"translate"),f(7,"br"),a(8,"span",21),_(9),s(10,"translate"),d()(),a(11,"span",22)(12,"button",23),s(13,"translate"),s(14,"translate"),b("click",function(){u(e);let i=m();return h(i.deleteAllBackups())}),f(15,"i",24),d()()()()}if(n&2){let e=m();r(),ie(e.backupList),r(4),T(" ",l(6,7,"form.button_delete_all")),r(4),T(" ",l(10,9,"common.labels.no_confirmation")," "),r(3),g("disabled",e.clicked||e.deleting)("ngbTooltip",l(13,11,"form.button_delete_all"))("openDelay",150),w("aria-label",l(14,13,"form.button_delete")),r(3),g("ngClass",U(15,Se,e.deleting!=="all",e.deleting==="all"))}}var ke=(()=>{class n{$activeModal=p(ge);$api=p(O);$router=p(I);$toastr=p(P);$translate=p(R);currentConfig;fromSettings=!1;loading=!0;backupList=[];clicked=!1;deleting=null;ngOnInit(){this.getConfigBackups()}getConfigBackups(){return C(this,null,function*(){try{let e=yield $(this.$api.get("/config-editor/backups"));this.loading=!1,this.backupList=e}catch(e){this.loading=!1,console.error(e),this.$toastr.error(e.error?.message||e.message,this.$translate.instant("toast.title_error")),this.dismissModal()}})}restore(e){return this.$activeModal.close(e)}download(e){return C(this,null,function*(){this.clicked=!0;try{let t=yield $(this.$api.get(`/config-editor/backups/${e}`)),i=JSON.stringify(t,null,4),o=new Blob([i],{type:"application/json"}),E=`config-backup-${e}.json`;(0,Ee.saveAs)(o,E),this.clicked=!1}catch(t){this.clicked=!1,this.$toastr.error(t.error?.message||t.message,this.$translate.instant("toast.title_error")),console.error(t)}})}downloadCurrentConfig(){let e=`data:text/json;charset=utf-8,${encodeURIComponent(this.currentConfig)}`,t=document.createElement("a");t.setAttribute("href",e),t.setAttribute("download","config.json"),document.body.appendChild(t),t.click(),t.remove()}delete(e){return C(this,null,function*(){this.deleting=e;try{yield $(this.$api.delete(`/config-editor/backups/${e}`)),yield this.getConfigBackups(),this.deleting=null}catch(t){this.deleting=null,this.$toastr.error(t.error?.message||t.message,this.$translate.instant("toast.title_error")),console.error(t)}})}deleteAllBackups(){return C(this,null,function*(){this.deleting="all";try{yield $(this.$api.delete("/config-editor/backups")),this.$toastr.success(this.$translate.instant("config.restore.toast_backups_deleted"),this.$translate.instant("toast.title_success")),this.backupList=[],this.deleting=null}catch(e){this.$toastr.error(e.error?.message||e.message,this.$translate.instant("toast.title_error")),console.error(e),this.deleting=null}})}dismissModal(){this.fromSettings&&this.$router.navigate(["/settings"]),this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=A({type:n,selectors:[["ng-component"]],inputs:{currentConfig:"currentConfig",fromSettings:"fromSettings"},decls:40,vars:31,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"text-center","mb-3"],[1,"fas","fa-fw","fa-history","primary-text",2,"font-size","75px"],[1,"mb-3"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"grey-text"],[1,"btn","btn-primary","m-0","ms-3",3,"click","disabled"],[1,"fas","fa-fw","fa-arrow-right"],[1,"text-center","primary-text"],[1,"list-group","list-group-box","mt-3"],[1,"modal-footer","justify-content-between"],[1,"text-start"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-end"],[1,"fa","fa-fw","fa-cog","fa-spin","mt-3",2,"font-size","75px"],[1,"grey-text","small"],[2,"display","flex","flex-wrap","nowrap"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-danger","m-0","ms-2",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-fw",3,"ngClass"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-3",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-fw","fa-history"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-2",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-fw","fa-download"]],template:function(t,i){t&1&&(a(0,"div",0)(1,"div",1)(2,"h5",2),_(3),s(4,"translate"),d(),a(5,"button",3),s(6,"translate"),b("click",function(){return i.dismissModal()}),d()(),a(7,"div",4)(8,"div",5),f(9,"i",6),d(),a(10,"ul",7)(11,"li"),_(12),s(13,"translate"),d(),a(14,"li"),_(15),s(16,"translate"),d()(),a(17,"ul",8)(18,"li",9)(19,"div")(20,"span"),_(21),s(22,"translate"),d(),f(23,"br"),a(24,"small",10),_(25),s(26,"translate"),d()(),a(27,"button",11),s(28,"translate"),b("click",function(){return i.downloadCurrentConfig()}),f(29,"i",12),d()()(),v(30,Oe,2,0,"div",13)(31,Ne,16,18,"ul",14),d(),a(32,"div",15),f(33,"div",16),a(34,"div",17)(35,"button",18),s(36,"translate"),b("click",function(){return i.dismissModal()}),_(37),s(38,"translate"),d()(),f(39,"div",19),d()()),t&2&&(r(3),k(l(4,13,"config.restore.title")),r(2),g("disabled",i.clicked||i.deleting),w("aria-label",l(6,15,"form.button_close")),r(7),k(l(13,17,"config.restore.help_1")),r(3),k(l(16,19,"config.restore.help_2")),r(6),k(l(22,21,"form.button_download")),r(4),k(l(26,23,"config.restore.download")),r(2),g("disabled",i.clicked||i.deleting),w("aria-label",l(28,25,"backup.backup_now")),r(3),x(i.loading?30:i.backupList.length?31:-1),r(5),g("disabled",i.clicked||i.deleting),w("aria-label",l(36,27,"form.button_close")),r(2),T(" ",l(38,29,"form.button_close")," "))},dependencies:[D,ae,pe,le,j],encapsulation:2})}return n})();function qe(n,y){if(n&1){let e=S();a(0,"button",13),s(1,"translate"),s(2,"translate"),b("click",function(){u(e);let i=m();return h(i.onCancelRestore())}),f(3,"i",14),d()}if(n&2){let e=m();g("disabled",e.saveInProgress)("openDelay",150)("ngbTooltip",l(1,4,"form.button_cancel")),w("aria-label",l(2,6,"form.button_cancel"))}}function Fe(n,y){if(n&1){let e=S();a(0,"button",15),s(1,"translate"),s(2,"translate"),b("click",function(){u(e);let i=m();return h(i.onRestore())}),f(3,"i",16),d()}n&2&&(g("openDelay",150)("ngbTooltip",l(1,3,"form.button_restore")),w("aria-label",l(2,5,"form.button_restore")))}function Je(n,y){if(n&1){let e=S();a(0,"button",15),s(1,"translate"),s(2,"translate"),b("click",function(){u(e);let i=m();return h(i.toggleSideBySide())}),f(3,"i",17),d()}if(n&2){let e=m();g("openDelay",150)("ngbTooltip",l(1,7,e.renderSideBySide?"config.restore.view_inline":"config.restore.view_side_by_side")),w("aria-label",l(2,9,e.renderSideBySide?"config.restore.view_inline":"config.restore.view_side_by_side")),r(3),oe("fa-columns",!e.renderSideBySide)("fa-bars",e.renderSideBySide)}}function Le(n,y){n&1&&f(0,"i",8)}function Ue(n,y){n&1&&f(0,"i",9)}function ze(n,y){if(n&1){let e=S();a(0,"ngx-monaco-editor",18),b("onInit",function(i){u(e);let o=m();return h(o.onEditorInit(i))})("keydown.control.s",function(i){u(e);let o=m();return i.preventDefault(),h(o.onSave())})("keydown.meta.s",function(i){u(e);let o=m();return i.preventDefault(),h(o.onSave())}),d()}if(n&2){let e=m();g("options",e.editorOptions)("model",e.monacoEditorModel)}}function Ke(n,y){if(n&1){let e=S();a(0,"ngx-monaco-diff-editor",19),b("onInit",function(i){u(e);let o=m();return h(o.onInitDiffEditor(i))})("keydown.control.s",function(i){u(e);let o=m();return i.preventDefault(),h(o.onSave())})("keydown.meta.s",function(i){u(e);let o=m();return i.preventDefault(),h(o.onSave())}),d()}if(n&2){let e=m();g("options",e.editorOptions)("originalModel",e.diffOriginalModel)("modifiedModel",e.diffModifiedModel)}}function We(n,y){if(n&1){let e=S();a(0,"textarea",20),se("ngModelChange",function(i){u(e);let o=m();return re(o.homebridgeConfig,i)||(o.homebridgeConfig=i),h(i)}),_(1," "),d()}if(n&2){let e=m();ne("ngModel",e.homebridgeConfig)}}var $t=(()=>{class n{$api=p(O);$md=p(we);$modal=p(ue);$monacoEditor=p(xe);$renderer=p(Z);$route=p(_e);$router=p(I);$settings=p(ye);$toastr=p(P);$translate=p(R);editorDecorations=[];lastHeight;visualViewPortEventCallback;latestSavedConfig;childBridgesToRestart=[];hbPendingRestart=!1;homebridgeConfig;originalConfig;saveInProgress;isMobile=!1;monacoEditor;editorOptions;monacoEditorModel;diffOriginalModel;diffModifiedModel;renderSideBySide=!1;constructor(){this.isMobile=this.$md.detect.mobile()}ngOnInit(){this.editorOptions={language:"json",theme:this.$settings.actualLightingMode==="dark"?"vs-dark":"vs-light",renderSideBySide:this.renderSideBySide,renderIndicators:!0,ignoreTrimWhitespace:!1,glyphMargin:!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.latestSavedConfig=JSON.parse(i.config),this.diffModifiedModel&&this.updateDiffModels()}),this.monacoEditorModel={value:"{}",language:"json",uri:window.monaco?window.monaco.Uri.parse("a://homebridge/config.json"):void 0},this.diffOriginalModel={code:"",language:"json"},this.diffModifiedModel={code:this.homebridgeConfig||"{}",language:"json"},window.monaco?this.setMonacoEditorModel():this.$monacoEditor.readyEvent.subscribe({next:()=>this.setMonacoEditorModel()});let{action:t}=this.$router.parseUrl(this.$router.url).queryParams;if(t){switch(t){case"restore":{this.onRestore(!0);break}}this.$router.navigate([],{queryParams:{},replaceUrl:!0,queryParamsHandling:""})}}onEditorInit(e){window.editor=e,this.monacoEditor=e,this.monacoEditor.getModel().setValue(this.homebridgeConfig)}onInitDiffEditor(e){this.monacoEditor=e.getModifiedEditor(),this.updateDiffModels(),window.editor=e}updateDiffModels(){if(this.diffOriginalModel&&(this.diffOriginalModel.code=this.originalConfig||""),this.diffModifiedModel&&(this.diffModifiedModel.code=this.homebridgeConfig||"{}"),window.editor&&window.editor.getOriginalEditor){let e=window.editor.getOriginalEditor(),t=window.editor.getModifiedEditor();if(e&&t){let i=e.getModel(),o=t.getModel();i&&i.setValue(this.originalConfig||""),o&&o.setValue(this.homebridgeConfig||"{}")}}}onSave(){return C(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 t=window.monaco.editor.getModelMarkers({owner:"json"});for(let i of t)if(i.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(e=!1){let t=this.$modal.open(ke,{size:"lg",backdrop:"static"});t.componentInstance.currentConfig=this.homebridgeConfig,t.componentInstance.fromSettings=e,t.result.then(i=>{this.originalConfig||(this.originalConfig=this.homebridgeConfig,this.updateDiffModels()),this.$api.get(`/config-editor/backups/${i}`).subscribe({next:o=>{this.$toastr.info(this.$translate.instant("config.restore.confirm"),this.$translate.instant("config.title_backup_loaded")),this.homebridgeConfig=JSON.stringify(o,null,4),this.updateDiffModels(),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:o=>{console.error(o),this.$toastr.error(o.error?.message||this.$translate.instant("backup.load_error"),this.$translate.instant("toast.title_error"))}})}).catch(()=>{})}onCancelRestore(){if(window.editor&&window.editor.dispose)try{window.editor.dispose(),window.editor=void 0}catch{}this.homebridgeConfig=this.originalConfig,this.originalConfig="",this.renderSideBySide&&this.toggleSideBySide(),this.updateDiffModels(),this.onRestore()}toggleSideBySide(){this.renderSideBySide=!this.renderSideBySide,this.editorOptions=G(Y({},this.editorOptions),{renderSideBySide:this.renderSideBySide})}ngOnDestroy(){let e=document.querySelector(".content");this.$renderer.removeStyle(e,"height"),window.visualViewport&&(window.visualViewport.removeEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.enableTouchMove());try{if(window.editor&&window.editor.dispose&&(window.editor.dispose(),window.editor=void 0),window.monaco){let t=window.monaco.Uri.parse("file:///original.json"),i=window.monaco.Uri.parse("file:///modified.json"),o=window.monaco.editor.getModel(t);o&&o.dispose();let E=window.monaco.editor.getModel(i);E&&E.dispose()}this.monacoEditor&&this.monacoEditor.dispose()}catch{}}validateSection(e,t){for(let i of e){if(typeof i!="object"||Array.isArray(i))return this.$toastr.error(this.$translate.instant("config.error_blocks_objects",{type:t}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(i),!1;if(!i[t])return this.$toastr.error(this.$translate.instant("config.error_blocks_type",{type:t}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(i),!1;if(typeof i[t]!="string")return this.$toastr.error(this.$translate.instant("config.error_string_type",{type:t}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(i),!1}return!0}validatePlugins(e,t){for(let i of e)if(typeof i!="string")return this.$toastr.error(this.$translate.instant("config.error_string_array",{key:t}),this.$translate.instant("toast.title_error")),!1;return!0}highlightOffendingArrayItem(e){this.monacoEditor&&(e=JSON.stringify(e,null,4).split(`
|
|
2
|
-
`).map(t=>` ${t}`).join(`
|
|
3
|
-
`),setTimeout(()=>{let t=this.monacoEditor.getModel().findMatches(e);if(t.length){let i=t[0].range,o=new monaco.Range(i.startLineNumber,i.startColumn,i.endLineNumber,i.endColumn);this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[{range:o,options:{isWholeLine:!0,linesDecorationsClassName:"hb-monaco-editor-line-error"}}])}},200))}setMonacoEditorModel(){if(window.monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas.some(t=>t.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 C(this,null,function*(){try{let t=yield $(this.$api.post("/config-editor",e));this.homebridgeConfig=JSON.stringify(t,null,4),yield this.detectSavesChangesForRestart()}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error"))}})}validateArraysEqual(e,t){if(e.length!==t.length)return!1;let i=[...e].sort(),o=[...t].sort();return i.every((E,H)=>E===o[H])}removePlatformsAndAccessories(e){let E=e,{accessories:t,platforms:i}=E;return Q(E,["accessories","platforms"])}removeEmptyBridges(e){return e.filter(t=>t._bridge&&Object.keys(t._bridge).length>0).map(t=>t._bridge)}validateBridgesEqual(e,t){return e.length!==t.length?!1:e.every(i=>t.some(o=>B(i,o)))}detectSavesChangesForRestart(){return C(this,null,function*(){let e=yield this.determineRestartType();e==="full"?yield this.performFullRestart():e==="child"&&(yield this.performChildBridgeRestart()),this.latestSavedConfig=JSON.parse(this.homebridgeConfig)})}determineRestartType(){return C(this,null,function*(){if(this.hbPendingRestart)return"full";let e=this.latestSavedConfig,t=JSON.stringify(e,null,4),i=JSON.parse(this.homebridgeConfig),o=this.homebridgeConfig;if(t===o&&!this.childBridgesToRestart.length)return this.$toastr.info(this.$translate.instant("config.no_restart"),this.$translate.instant("config.config_saved")),"none";if(!this.validateArraysEqual(Object.keys(e),Object.keys(i))||[...i.platforms||[],...i.accessories||[]].every(c=>!c._bridge||!Object.keys(c._bridge).length))return"full";let H=this.removePlatformsAndAccessories(e),Me=this.removePlatformsAndAccessories(i);if(!B(H,Me))return"full";let N=e.platforms||[],q=i.platforms||[],Te=N.map(c=>c.platform),Be=q.map(c=>c.platform);if(!this.validateArraysEqual(Te,Be))return"full";let F=e.accessories||[],J=i.accessories||[],Ve=F.map(c=>c.accessory),Ae=J.map(c=>c.accessory);if(!this.validateArraysEqual(Ve,Ae)||!this.validateBridgesEqual(this.removeEmptyBridges(N),this.removeEmptyBridges(q))||!this.validateBridgesEqual(this.removeEmptyBridges(F),this.removeEmptyBridges(J)))return"full";let K=N.filter(c=>!B(c,q.find(M=>M.platform===c.platform))),De=F.filter(c=>!B(c,J.find(M=>M.accessory===c.accessory))),W=[...K,...De];if(K.some(c=>c.platform==="config")||W.some(c=>c.platform==="config"?!1:!c._bridge||Object.keys(c._bridge).length===0))return"full";try{let c=yield $(this.$api.get("/status/homebridge/child-bridges"));return W.forEach(M=>{let Re=M._bridge.username.toUpperCase(),V=c.find(({username:L})=>L===Re);if(V)this.childBridgesToRestart.some(L=>L.username===V.username)||this.childBridgesToRestart.push({name:V.name,username:V.username});else return"full"}),"child"}catch(c){return console.error("Error fetching child bridges:",c),"full"}})}performChildBridgeRestart(){return C(this,null,function*(){let e=this.$modal.open(Ce,{size:"lg",backdrop:"static"});e.componentInstance.bridges=this.childBridgesToRestart;try{yield e.result,this.childBridgesToRestart=[]}catch{}})}performFullRestart(){return C(this,null,function*(){let e=this.$modal.open(ve,{size:"lg",backdrop:"static"});try{yield e.result,this.hbPendingRestart=!1,this.childBridgesToRestart=[]}catch{this.hbPendingRestart=!0}})}parseConfigFromEditor(){try{return JSON.parse(this.homebridgeConfig)}catch{let t=$e.default.parse(this.homebridgeConfig);return this.homebridgeConfig=JSON.stringify(t,null,4),this.monacoEditor&&this.monacoEditor.getModel().setValue(this.homebridgeConfig),t}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=A({type:n,selectors:[["ng-component"]],decls:18,vars:19,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","triggers","hover",1,"btn","btn-danger","waves-effect","my-0","me-2",3,"disabled","openDelay","ngbTooltip"],["container","body","placement","bottom","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-2",3,"openDelay","ngbTooltip"],["container","body","placement","bottom","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-0",3,"click","disabled","openDelay","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","triggers","hover",1,"btn","btn-danger","waves-effect","my-0","me-2",3,"click","disabled","openDelay","ngbTooltip"],[1,"fas","fa-fw","fa-times"],["container","body","placement","bottom","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-2",3,"click","openDelay","ngbTooltip"],[1,"fas","fa-fw","fa-history"],[1,"fas","fa-fw"],[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(t,i){t&1&&(a(0,"div",0)(1,"div",1)(2,"div",2)(3,"h3",3),_(4),s(5,"translate"),d()(),a(6,"div",4),v(7,qe,4,8,"button",5),v(8,Fe,4,7,"button",6),v(9,Je,4,11,"button",6),a(10,"button",7),s(11,"translate"),s(12,"translate"),b("click",function(){return i.onSave()}),v(13,Le,1,0,"i",8),v(14,Ue,1,0,"i",9),d()()(),v(15,ze,1,2,"ngx-monaco-editor",10),v(16,Ke,1,3,"ngx-monaco-diff-editor",11),v(17,We,2,1,"textarea",12),d()),t&2&&(r(4),k(l(5,13,"menu.config_json_editor")),r(3),x(i.originalConfig?7:-1),r(),x(i.originalConfig?-1:8),r(),x(!i.isMobile&&i.originalConfig?9:-1),r(),g("disabled",i.saveInProgress)("openDelay",150)("ngbTooltip",l(11,15,"form.button_save")),w("aria-label",l(12,17,"form.button_save")),r(3),x(i.saveInProgress?-1:13),r(),x(i.saveInProgress?14:-1),r(),x(!i.isMobile&&!i.originalConfig?15:-1),r(),x(!i.isMobile&&i.originalConfig?16:-1),r(),x(i.isMobile?17:-1))},dependencies:[D,he,be,fe,de,ce,me,j],encapsulation:2})}return n})();export{$t as ConfigEditorComponent};
|
package/public/chunk-ZZNMGCC4.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{g as i}from"./chunk-MDV2S56W.js";import{Xa as e,fa as t}from"./chunk-3LEW5FOJ.js";var d=[{path:"",redirectTo:"/",pathMatch:"full"},{path:"docker",loadChildren:()=>import("./chunk-7RO442Z4.js").then(o=>o.DockerModule)},{path:"linux",loadChildren:()=>import("./chunk-3KIRCXWS.js").then(o=>o.LinuxModule)},{path:"terminal",loadChildren:()=>import("./chunk-NCLPMN5F.js").then(o=>o.TerminalModule)}],l=(()=>{class o{static \u0275fac=function(r){return new(r||o)};static \u0275mod=e({type:o});static \u0275inj=t({imports:[i.forChild(d),i]})}return o})();var p=(()=>{class o{static \u0275fac=function(r){return new(r||o)};static \u0275mod=e({type:o});static \u0275inj=t({imports:[l]})}return o})();export{p as PlatformToolsModule};
|