homebridge-config-ui-x 5.4.2-beta.13 → 5.4.2-beta.15
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 +4 -1
- package/package.json +1 -1
- package/public/{chunk-BC5JLQKU.js → chunk-3NHBF4JL.js} +1 -1
- package/public/chunk-3O6XDTC3.js +30 -0
- package/public/{chunk-V2BWLBP4.js → chunk-3V25WJUL.js} +1 -1
- package/public/{chunk-2IWIAU2N.js → chunk-3ZGO7RSM.js} +1 -1
- package/public/{chunk-DMLIDE5T.js → chunk-4A7WNBPR.js} +1 -1
- package/public/{chunk-4LA6OGBW.js → chunk-5Y4EUG3K.js} +1 -1
- package/public/{chunk-PTLIFA7V.js → chunk-5ZWEALV6.js} +1 -1
- package/public/{chunk-TLGTO2YA.js → chunk-6GSWEUQF.js} +1 -1
- package/public/{chunk-QQ23HGQR.js → chunk-6ILBHH7E.js} +1 -1
- package/public/{chunk-DMJJTFEA.js → chunk-A5MFXPGV.js} +1 -1
- package/public/{chunk-VBPDM7HE.js → chunk-AAFIJPAX.js} +1 -1
- package/public/{chunk-B6T4XX7B.js → chunk-BRX7OHZO.js} +1 -1
- package/public/{chunk-RHE662Q6.js → chunk-C5DZS5QN.js} +1 -1
- package/public/{chunk-5VBFQBME.js → chunk-CUPWPLMM.js} +1 -1
- package/public/{chunk-ARGG2BC2.js → chunk-CWLBL3UV.js} +1 -1
- package/public/{chunk-YHZ77E6M.js → chunk-EC7I5U7F.js} +1 -1
- package/public/{chunk-GG6UJRI3.js → chunk-FPRMTAFD.js} +1 -1
- package/public/{chunk-VR6NEEC4.js → chunk-FT2I5WLY.js} +1 -1
- package/public/{chunk-4PWEKTPB.js → chunk-GVYVOWT5.js} +1 -1
- package/public/{chunk-FM4QGFLK.js → chunk-HR5LIZIB.js} +1 -1
- package/public/{chunk-772O3AIU.js → chunk-HSUEB7FB.js} +1 -1
- package/public/{chunk-NSRNEOZ5.js → chunk-JMSBGTUO.js} +1 -1
- package/public/{chunk-4UK45Y6B.js → chunk-KA6TZXH3.js} +1 -1
- package/public/{chunk-Z4QWKXZT.js → chunk-M3Y5VNLK.js} +1 -1
- package/public/{chunk-WNX6NDS7.js → chunk-M7EJKUE2.js} +1 -1
- package/public/{chunk-5QXUZNMR.js → chunk-MVIXSGWJ.js} +1 -1
- package/public/chunk-NEYZLX6Z.js +20 -0
- package/public/{chunk-VGHYKIOX.js → chunk-NYHYC2UU.js} +1 -1
- package/public/{chunk-QO3ZO6NT.js → chunk-O6SZHVD5.js} +1 -1
- package/public/{chunk-NT2IDUZH.js → chunk-OAC6TGAB.js} +1 -1
- package/public/{chunk-BUPLBXR6.js → chunk-P6HM2B6R.js} +1 -1
- package/public/{chunk-Y6EULWU5.js → chunk-PVTYM6QJ.js} +1 -1
- package/public/{chunk-BTBRQOOI.js → chunk-QX2PCH6F.js} +1 -1
- package/public/{chunk-RDBOE7IA.js → chunk-RBPAPCE4.js} +1 -1
- package/public/{chunk-YNGEVP3I.js → chunk-RO6PZL5G.js} +1 -1
- package/public/{chunk-G4WLHM4B.js → chunk-RTZNAIZS.js} +1 -1
- package/public/{chunk-PF7T6CNZ.js → chunk-RWD47KCF.js} +1 -1
- package/public/{chunk-42AMCJPR.js → chunk-SSQTFQ4Y.js} +1 -1
- package/public/{chunk-RSMIPIMV.js → chunk-SXJYQ3AT.js} +1 -1
- package/public/{chunk-QAAVQMQN.js → chunk-TZMQBWY5.js} +1 -1
- package/public/{chunk-EQPGHHJX.js → chunk-W4MKUB53.js} +1 -1
- package/public/{chunk-DJN2ZIUW.js → chunk-XEKJMIMT.js} +1 -1
- package/public/{chunk-6FMI6WEI.js → chunk-Y5TNNXF2.js} +1 -1
- package/public/{chunk-CH67GDTM.js → chunk-YGC2LZTE.js} +1 -1
- package/public/{chunk-IR4BD5UA.js → chunk-YJDUEIZ4.js} +1 -1
- package/public/{chunk-DBPQNHZE.js → chunk-ZARWTCJM.js} +1 -1
- package/public/{chunk-7L2FPZ3V.js → chunk-ZKNDO2YJ.js} +1 -1
- package/public/index.html +1 -1
- package/public/{main-YAEB7GU5.js → main-OJFPURA5.js} +1 -1
- package/public/chunk-6JF3ALTY.js +0 -20
- package/public/chunk-MACP3TMM.js +0 -30
package/public/chunk-6JF3ALTY.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import{a as we}from"./chunk-5TCYRJ6A.js";import{b as A,e as _e,f as ye,g as De}from"./chunk-DJN2ZIUW.js";import{a as pe,b as ge}from"./chunk-YI7M7OR5.js";import{a as be}from"./chunk-77JZBWAC.js";import{a as Be}from"./chunk-V2P2FPJ7.js";import{m as me,n as fe,t as D}from"./chunk-EA3EXGPZ.js";import{A as ce,c as se,e as ae,l as le,z as de}from"./chunk-CNMM42I5.js";import{b as ue,d as I}from"./chunk-UOLP7IQJ.js";import{b as he}from"./chunk-QO3ZO6NT.js";import{k as P,n as O}from"./chunk-2IWIAU2N.js";import{a as R,b as j}from"./chunk-G7FA4DP4.js";import"./chunk-6GMXEQVA.js";import{Ec as U,Hb as C,Ib as E,Jb as x,Jc as a,Kc as d,Lb as X,Lc as z,Mb as Z,Nb as ee,Ob as g,Pb as s,Qb as l,Rb as f,_b as k,ab as r,bc as b,d as Y,dc as m,fb as Q,g as G,h as w,id as ne,ka as p,mb as B,pd as re,qa as u,qc as _,ra as h,rc as $,sc as S,w as M,xc as te,yc as ie,zc as oe}from"./chunk-H36QJYLQ.js";var xe=G(De(),1);var Ce=G(Be(),1);var ve=(n,y)=>({"fa-trash":n,"fa-cog fa-spin":y});function je(n,y){n&1&&(s(0,"div",13),f(1,"i",20),l())}function Pe(n,y){if(n&1){let e=k();s(0,"li",9)(1,"span"),_(2),a(3,"date"),f(4,"br"),s(5,"span",21),_(6),a(7,"date"),l()(),s(8,"span",22)(9,"button",25),a(10,"translate"),a(11,"translate"),b("click",function(){let i=u(e).$implicit,o=m(2);return h(o.restore(i.id))}),f(12,"i",26),l(),s(13,"button",27),a(14,"translate"),a(15,"translate"),b("click",function(){let i=u(e).$implicit,o=m(2);return h(o.download(i.id))}),f(16,"i",28),l(),s(17,"button",23),a(18,"translate"),a(19,"translate"),b("click",function(){let i=u(e).$implicit,o=m(2);return h(o.delete(i.id))}),f(20,"i",24),l()()()}if(n&2){let e=y.$implicit,t=m(2);r(2),S(" ",z(3,15,e.timestamp,"mediumDate")),r(4),$(z(7,18,e.timestamp,"shortTime")),r(3),g("disabled",t.clicked||t.deleting)("ngbTooltip",d(10,21,"config.restore.copy_to_editor"))("openDelay",150),C("aria-label",d(11,23,"config.restore.copy_to_editor")),r(4),g("disabled",t.clicked||t.deleting)("ngbTooltip",d(14,25,"form.button_download"))("openDelay",150),C("aria-label",d(15,27,"form.button_download")),r(4),g("disabled",t.clicked||t.deleting)("ngbTooltip",d(18,29,"form.button_delete"))("openDelay",150),C("aria-label",d(19,31,"form.button_delete")),r(3),g("ngClass",U(33,ve,e.id!==t.deleting,e.id===t.deleting))}}function Ie(n,y){if(n&1){let e=k();s(0,"ul",14),Z(1,Pe,21,36,"li",9,X),s(3,"li",9)(4,"span"),_(5),a(6,"translate"),f(7,"br"),s(8,"span",21),_(9),a(10,"translate"),l()(),s(11,"span",22)(12,"button",23),a(13,"translate"),a(14,"translate"),b("click",function(){u(e);let i=m();return h(i.deleteAllBackups())}),f(15,"i",24),l()()()()}if(n&2){let e=m();r(),ee(e.backupList),r(4),S(" ",d(6,7,"form.button_delete_all")),r(4),S(" ",d(10,9,"common.labels.no_confirmation")," "),r(3),g("disabled",e.clicked||e.deleting)("ngbTooltip",d(13,11,"form.button_delete_all"))("openDelay",150),C("aria-label",d(14,13,"form.button_delete")),r(3),g("ngClass",U(15,ve,e.deleting!=="all",e.deleting==="all"))}}var Ee=(()=>{class n{$activeModal=p(me);$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 w(this,null,function*(){try{let e=yield M(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 w(this,null,function*(){this.clicked=!0;try{let t=yield M(this.$api.get(`/config-editor/backups/${e}`)),i=JSON.stringify(t,null,4),o=new Blob([i],{type:"application/json"}),v=`config-backup-${e}.json`;(0,Ce.saveAs)(o,v),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 w(this,null,function*(){this.deleting=e;try{yield M(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 w(this,null,function*(){this.deleting="all";try{yield M(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=B({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&&(s(0,"div",0)(1,"div",1)(2,"h5",2),_(3),a(4,"translate"),l(),s(5,"button",3),a(6,"translate"),b("click",function(){return i.dismissModal()}),l()(),s(7,"div",4)(8,"div",5),f(9,"i",6),l(),s(10,"ul",7)(11,"li"),_(12),a(13,"translate"),l(),s(14,"li"),_(15),a(16,"translate"),l()(),s(17,"ul",8)(18,"li",9)(19,"div")(20,"span"),_(21),a(22,"translate"),l(),f(23,"br"),s(24,"small",10),_(25),a(26,"translate"),l()(),s(27,"button",11),a(28,"translate"),b("click",function(){return i.downloadCurrentConfig()}),f(29,"i",12),l()()(),E(30,je,2,0,"div",13)(31,Ie,16,18,"ul",14),l(),s(32,"div",15),f(33,"div",16),s(34,"div",17)(35,"button",18),a(36,"translate"),b("click",function(){return i.dismissModal()}),_(37),a(38,"translate"),l()(),f(39,"div",19),l()()),t&2&&(r(3),$(d(4,13,"config.restore.title")),r(2),g("disabled",i.clicked||i.deleting),C("aria-label",d(6,15,"form.button_close")),r(7),$(d(13,17,"config.restore.help_1")),r(3),$(d(16,19,"config.restore.help_2")),r(6),$(d(22,21,"form.button_download")),r(4),$(d(26,23,"config.restore.download")),r(2),g("disabled",i.clicked||i.deleting),C("aria-label",d(28,25,"backup.backup_now")),r(3),x(i.loading?30:i.backupList.length?31:-1),r(5),g("disabled",i.clicked||i.deleting),C("aria-label",d(36,27,"form.button_close")),r(2),S(" ",d(38,29,"form.button_close")," "))},dependencies:[D,ne,ce,re,j],encapsulation:2})}return n})();function Oe(n,y){if(n&1){let e=k();s(0,"button",13),a(1,"translate"),a(2,"translate"),b("click",function(){u(e);let i=m();return h(i.onCancelRestore())}),f(3,"i",14),l()}if(n&2){let e=m();g("disabled",e.saveInProgress)("openDelay",150)("ngbTooltip",d(1,4,"form.button_cancel")),C("aria-label",d(2,6,"form.button_cancel"))}}function He(n,y){if(n&1){let e=k();s(0,"button",15),a(1,"translate"),a(2,"translate"),b("click",function(){u(e);let i=m();return h(i.onRestore())}),f(3,"i",16),l()}n&2&&(g("openDelay",150)("ngbTooltip",d(1,3,"form.button_restore")),C("aria-label",d(2,5,"form.button_restore")))}function Ne(n,y){n&1&&f(0,"i",8)}function qe(n,y){n&1&&f(0,"i",9)}function Fe(n,y){if(n&1){let e=k();s(0,"ngx-monaco-editor",17),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())}),l()}if(n&2){let e=m();g("options",e.editorOptions)("model",e.monacoEditorModel)}}function Je(n,y){if(n&1){let e=k();s(0,"ngx-monaco-diff-editor",18),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())}),l()}if(n&2){let e=m();g("options",e.editorOptions)("originalModel",e.diffOriginalModel)("modifiedModel",e.diffModifiedModel)}}function Le(n,y){if(n&1){let e=k();s(0,"textarea",19),oe("ngModelChange",function(i){u(e);let o=m();return ie(o.homebridgeConfig,i)||(o.homebridgeConfig=i),h(i)}),_(1," "),l()}if(n&2){let e=m();te("ngModel",e.homebridgeConfig)}}var Et=(()=>{class n{$api=p(O);$md=p(be);$modal=p(fe);$monacoEditor=p(we);$route=p(ue);$renderer=p(Q);$router=p(I);$settings=p(he);$toastr=p(P);$translate=p(R);editorDecorations=[];lastHeight;visualViewPortEventCallback;latestSavedConfig;childBridgesToRestart=[];hbPendingRestart=!1;homebridgeConfig;originalConfig;saveInProgress;isMobile=!1;monacoEditor;editorOptions;monacoEditorModel;diffOriginalModel;diffModifiedModel;constructor(){this.isMobile=this.$md.detect.mobile()}ngOnInit(){this.editorOptions={language:"json",theme:this.$settings.actualLightingMode==="dark"?"vs-dark":"vs-light",renderSideBySide:!0,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 w(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(Ee,{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.updateDiffModels(),this.onRestore()}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 v=window.monaco.editor.getModel(i);v&&v.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 w(this,null,function*(){try{let t=yield M(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((v,H)=>v===o[H])}removePlatformsAndAccessories(e){let v=e,{accessories:t,platforms:i}=v;return Y(v,["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=>A(i,o)))}detectSavesChangesForRestart(){return w(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 w(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),ke=this.removePlatformsAndAccessories(i);if(!A(H,ke))return"full";let N=e.platforms||[],q=i.platforms||[],$e=N.map(c=>c.platform),Me=q.map(c=>c.platform);if(!this.validateArraysEqual($e,Me))return"full";let F=e.accessories||[],J=i.accessories||[],Te=F.map(c=>c.accessory),Se=J.map(c=>c.accessory);if(!this.validateArraysEqual(Te,Se)||!this.validateBridgesEqual(this.removeEmptyBridges(N),this.removeEmptyBridges(q))||!this.validateBridgesEqual(this.removeEmptyBridges(F),this.removeEmptyBridges(J)))return"full";let K=N.filter(c=>!A(c,q.find(T=>T.platform===c.platform))),Ae=F.filter(c=>!A(c,J.find(T=>T.accessory===c.accessory))),W=[...K,...Ae];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 M(this.$api.get("/status/homebridge/child-bridges"));return W.forEach(T=>{let Ve=T._bridge.username.toUpperCase(),V=c.find(({username:L})=>L===Ve);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 w(this,null,function*(){let e=this.$modal.open(_e,{size:"lg",backdrop:"static"});e.componentInstance.bridges=this.childBridgesToRestart;try{yield e.result,this.childBridgesToRestart=[]}catch{}})}performFullRestart(){return w(this,null,function*(){let e=this.$modal.open(ye,{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=xe.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=B({type:n,selectors:[["ng-component"]],decls:17,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","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,"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&&(s(0,"div",0)(1,"div",1)(2,"div",2)(3,"h3",3),_(4),a(5,"translate"),l()(),s(6,"div",4),E(7,Oe,4,8,"button",5),E(8,He,4,7,"button",6),s(9,"button",7),a(10,"translate"),a(11,"translate"),b("click",function(){return i.onSave()}),E(12,Ne,1,0,"i",8),E(13,qe,1,0,"i",9),l()()(),E(14,Fe,1,2,"ngx-monaco-editor",10),E(15,Je,1,3,"ngx-monaco-diff-editor",11),E(16,Le,2,1,"textarea",12),l()),t&2&&(r(4),$(d(5,12,"menu.config_json_editor")),r(3),x(i.originalConfig?7:-1),r(),x(i.originalConfig?-1:8),r(),g("disabled",i.saveInProgress)("openDelay",150)("ngbTooltip",d(10,14,"form.button_save")),C("aria-label",d(11,16,"form.button_save")),r(3),x(i.saveInProgress?-1:12),r(),x(i.saveInProgress?13:-1),r(),x(!i.isMobile&&!i.originalConfig?14:-1),r(),x(!i.isMobile&&i.originalConfig?15:-1),r(),x(i.isMobile?16:-1))},dependencies:[D,pe,ge,de,se,ae,le,j],encapsulation:2})}return n})();export{Et as ConfigEditorComponent};
|