homebridge-config-ui-x 5.4.2-beta.11 → 5.4.2-beta.13
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 +3 -1
- package/package.json +2 -2
- package/public/assets/monaco-0.52.2/ThirdPartyNotices.txt +448 -0
- package/public/assets/monaco-0.52.2/min/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- package/public/assets/monaco-0.52.2/min/vs/base/worker/workerMain.js +31 -0
- package/public/assets/monaco-0.52.2/min/vs/basic-languages/shell/shell.js +10 -0
- package/public/assets/monaco-0.52.2/min/vs/editor/editor.main.css +8 -0
- package/public/assets/monaco-0.52.2/min/vs/editor/editor.main.js +798 -0
- package/public/assets/monaco-0.52.2/min/vs/language/json/jsonMode.js +19 -0
- package/public/assets/monaco-0.52.2/min/vs/language/json/jsonWorker.js +42 -0
- package/public/assets/monaco-0.52.2/min/vs/loader.js +11 -0
- package/public/assets/monaco-0.52.2/package.json +82 -0
- package/public/{chunk-H7QK4UWE.js → chunk-2IWIAU2N.js} +1 -1
- package/public/{chunk-EJR2QDKK.js → chunk-42AMCJPR.js} +1 -1
- package/public/{chunk-6ZC7ILBV.js → chunk-4LA6OGBW.js} +1 -1
- package/public/{chunk-3RRXEZSG.js → chunk-4PWEKTPB.js} +1 -1
- package/public/{chunk-KPNFVGDI.js → chunk-4UK45Y6B.js} +1 -1
- package/public/{chunk-A5BSXWNZ.js → chunk-5QXUZNMR.js} +1 -1
- package/public/{chunk-JTET2LBG.js → chunk-5VBFQBME.js} +1 -1
- package/public/{chunk-OATKJLCB.js → chunk-6FMI6WEI.js} +1 -1
- package/public/chunk-6JF3ALTY.js +20 -0
- package/public/{chunk-OFEHE5GZ.js → chunk-772O3AIU.js} +1 -1
- package/public/{chunk-FBCBMGIP.js → chunk-7L2FPZ3V.js} +1 -1
- package/public/{chunk-XTY2KYXP.js → chunk-ARGG2BC2.js} +1 -1
- package/public/{chunk-PZZT4VNR.js → chunk-B6T4XX7B.js} +1 -1
- package/public/{chunk-4XBQJO35.js → chunk-BC5JLQKU.js} +1 -1
- package/public/{chunk-NZ2CALQB.js → chunk-BTBRQOOI.js} +1 -1
- package/public/{chunk-PTSC5F2P.js → chunk-BUPLBXR6.js} +1 -1
- package/public/{chunk-JDVD7LQD.js → chunk-CH67GDTM.js} +1 -1
- package/public/{chunk-FYS5ASTT.js → chunk-DBPQNHZE.js} +1 -1
- package/public/{chunk-7P7IHFIJ.js → chunk-DJN2ZIUW.js} +1 -1
- package/public/{chunk-FVUBTHUM.js → chunk-DMJJTFEA.js} +1 -1
- package/public/{chunk-5KJGTF6Y.js → chunk-DMLIDE5T.js} +1 -1
- package/public/{chunk-2CTE2QUX.js → chunk-EQPGHHJX.js} +1 -1
- package/public/{chunk-JPXYPBKN.js → chunk-FM4QGFLK.js} +1 -1
- package/public/{chunk-6DCCDZIS.js → chunk-G4WLHM4B.js} +1 -1
- package/public/{chunk-DZTCWCZ7.js → chunk-GG6UJRI3.js} +1 -1
- package/public/{chunk-KRAJTHAJ.js → chunk-IR4BD5UA.js} +1 -1
- package/public/{chunk-LVK4VN3L.js → chunk-MACP3TMM.js} +2 -2
- package/public/{chunk-LL7LPAW3.js → chunk-NSRNEOZ5.js} +1 -1
- package/public/{chunk-YEWNNM3W.js → chunk-NT2IDUZH.js} +1 -1
- package/public/{chunk-ESJMERYC.js → chunk-PF7T6CNZ.js} +1 -1
- package/public/{chunk-QJLUKA7K.js → chunk-PTLIFA7V.js} +1 -1
- package/public/{chunk-J2FFNLDN.js → chunk-QAAVQMQN.js} +1 -1
- package/public/{chunk-KPXKASBA.js → chunk-QO3ZO6NT.js} +1 -1
- package/public/{chunk-5ZP3WPE2.js → chunk-QQ23HGQR.js} +1 -1
- package/public/{chunk-5SEBIESV.js → chunk-RDBOE7IA.js} +1 -1
- package/public/{chunk-L4NPE5FG.js → chunk-RHE662Q6.js} +1 -1
- package/public/{chunk-24NX5AEG.js → chunk-RSMIPIMV.js} +2 -2
- package/public/{chunk-XUA7L6VK.js → chunk-TLGTO2YA.js} +1 -1
- package/public/{chunk-LKXRCA6I.js → chunk-V2BWLBP4.js} +1 -1
- package/public/chunk-VBPDM7HE.js +1 -0
- package/public/{chunk-JDT4PK65.js → chunk-VGHYKIOX.js} +1 -1
- package/public/{chunk-G3CEW6AU.js → chunk-VR6NEEC4.js} +1 -1
- package/public/{chunk-RXKJ7QT6.js → chunk-WNX6NDS7.js} +1 -1
- package/public/{chunk-KVIPVTHB.js → chunk-Y6EULWU5.js} +1 -1
- package/public/{chunk-SMILXORO.js → chunk-YHZ77E6M.js} +1 -1
- package/public/{chunk-NFWGYMP7.js → chunk-YI7M7OR5.js} +1 -1
- package/public/{chunk-7MHWW2YA.js → chunk-YNGEVP3I.js} +1 -1
- package/public/{chunk-JRB66HAQ.js → chunk-Z4QWKXZT.js} +1 -1
- package/public/index.html +1 -1
- package/public/{main-L2HWNI6F.js → main-YAEB7GU5.js} +1 -1
- package/public/assets/monaco-0.21.3/README.md +0 -96
- package/public/assets/monaco-0.21.3/ThirdPartyNotices.txt +0 -283
- package/public/assets/monaco-0.21.3/min/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- package/public/assets/monaco-0.21.3/min/vs/base/worker/workerMain.js +0 -160
- package/public/assets/monaco-0.21.3/min/vs/basic-languages/shell/shell.js +0 -7
- package/public/assets/monaco-0.21.3/min/vs/editor/editor.main.css +0 -6
- package/public/assets/monaco-0.21.3/min/vs/editor/editor.main.js +0 -2368
- package/public/assets/monaco-0.21.3/min/vs/editor/editor.main.nls.js +0 -39
- package/public/assets/monaco-0.21.3/min/vs/language/json/jsonMode.js +0 -7
- package/public/assets/monaco-0.21.3/min/vs/language/json/jsonWorker.js +0 -7
- package/public/assets/monaco-0.21.3/min/vs/loader.js +0 -38
- package/public/assets/monaco-0.21.3/package.json +0 -38
- package/public/chunk-FPGELCHY.js +0 -20
- package/public/chunk-NLXPU33I.js +0 -1
- /package/public/assets/{monaco-0.21.3 → monaco-0.52.2}/LICENSE +0 -0
package/public/chunk-FPGELCHY.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import{a as we}from"./chunk-5TCYRJ6A.js";import{b as A,e as ye,f as Ce,g as Re}from"./chunk-7P7IHFIJ.js";import{a as fe,b as he}from"./chunk-NFWGYMP7.js";import{a as _e}from"./chunk-77JZBWAC.js";import{a as De}from"./chunk-V2P2FPJ7.js";import{m as pe,n as ge,t as D}from"./chunk-EA3EXGPZ.js";import{A as me,c as se,e as le,l as de,z as ce}from"./chunk-CNMM42I5.js";import{b as ue,d as j}from"./chunk-UOLP7IQJ.js";import{b as be}from"./chunk-KPXKASBA.js";import{k as I,n as H}from"./chunk-H7QK4UWE.js";import{a as R,b as P}from"./chunk-G7FA4DP4.js";import"./chunk-6GMXEQVA.js";import{Ec as z,Hb as C,Ib as w,Jb as v,Jc as s,Kc as d,Lb as Z,Lc as K,Mb as ee,Nb as te,Ob as f,Pb as a,Qb as l,Rb as p,_b as x,ab as r,bc as b,d as G,dc as m,fb as X,g as Q,h as E,id as re,ka as g,mb as B,pd as ae,qa as h,qc as _,ra as u,rc as k,sc as M,w as $,xc as ie,yc as oe,zc as ne}from"./chunk-H36QJYLQ.js";var ke=Q(Re(),1);var ve=Q(De(),1);var Ee=(n,y)=>({"fa-trash":n,"fa-cog fa-spin":y});function Ie(n,y){n&1&&(a(0,"div",13),p(1,"i",20),l())}function je(n,y){if(n&1){let e=x();a(0,"li",9)(1,"span"),_(2),s(3,"date"),p(4,"br"),a(5,"span",21),_(6),s(7,"date"),l()(),a(8,"span",22)(9,"button",25),s(10,"translate"),s(11,"translate"),b("click",function(){let i=h(e).$implicit,o=m(2);return u(o.restore(i.id))}),p(12,"i",26),l(),a(13,"button",27),s(14,"translate"),s(15,"translate"),b("click",function(){let i=h(e).$implicit,o=m(2);return u(o.download(i.id))}),p(16,"i",28),l(),a(17,"button",23),s(18,"translate"),s(19,"translate"),b("click",function(){let i=h(e).$implicit,o=m(2);return u(o.delete(i.id))}),p(20,"i",24),l()()()}if(n&2){let e=y.$implicit,t=m(2);r(2),M(" ",K(3,15,e.timestamp,"mediumDate")),r(4),k(K(7,18,e.timestamp,"shortTime")),r(3),f("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),f("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),f("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),f("ngClass",z(33,Ee,e.id!==t.deleting,e.id===t.deleting))}}function He(n,y){if(n&1){let e=x();a(0,"ul",14),ee(1,je,21,36,"li",9,Z),a(3,"li",9)(4,"span"),_(5),s(6,"translate"),p(7,"br"),a(8,"span",21),_(9),s(10,"translate"),l()(),a(11,"span",22)(12,"button",23),s(13,"translate"),s(14,"translate"),b("click",function(){h(e);let i=m();return u(i.deleteAllBackups())}),p(15,"i",24),l()()()()}if(n&2){let e=m();r(),te(e.backupList),r(4),M(" ",d(6,7,"form.button_delete_all")),r(4),M(" ",d(10,9,"common.labels.no_confirmation")," "),r(3),f("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),f("ngClass",z(15,Ee,e.deleting!=="all",e.deleting==="all"))}}var xe=(()=>{class n{$activeModal=g(pe);$api=g(H);$router=g(j);$toastr=g(I);$translate=g(R);currentConfig;fromSettings=!1;loading=!0;backupList=[];clicked=!1;deleting=null;ngOnInit(){this.getConfigBackups()}getConfigBackups(){return E(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 E(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"}),T=`config-backup-${e}.json`;(0,ve.saveAs)(o,T),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 E(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 E(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=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&&(a(0,"div",0)(1,"div",1)(2,"h5",2),_(3),s(4,"translate"),l(),a(5,"button",3),s(6,"translate"),b("click",function(){return i.dismissModal()}),l()(),a(7,"div",4)(8,"div",5),p(9,"i",6),l(),a(10,"ul",7)(11,"li"),_(12),s(13,"translate"),l(),a(14,"li"),_(15),s(16,"translate"),l()(),a(17,"ul",8)(18,"li",9)(19,"div")(20,"span"),_(21),s(22,"translate"),l(),p(23,"br"),a(24,"small",10),_(25),s(26,"translate"),l()(),a(27,"button",11),s(28,"translate"),b("click",function(){return i.downloadCurrentConfig()}),p(29,"i",12),l()()(),w(30,Ie,2,0,"div",13)(31,He,16,18,"ul",14),l(),a(32,"div",15),p(33,"div",16),a(34,"div",17)(35,"button",18),s(36,"translate"),b("click",function(){return i.dismissModal()}),_(37),s(38,"translate"),l()(),p(39,"div",19),l()()),t&2&&(r(3),k(d(4,13,"config.restore.title")),r(2),f("disabled",i.clicked||i.deleting),C("aria-label",d(6,15,"form.button_close")),r(7),k(d(13,17,"config.restore.help_1")),r(3),k(d(16,19,"config.restore.help_2")),r(6),k(d(22,21,"form.button_download")),r(4),k(d(26,23,"config.restore.download")),r(2),f("disabled",i.clicked||i.deleting),C("aria-label",d(28,25,"backup.backup_now")),r(3),v(i.loading?30:i.backupList.length?31:-1),r(5),f("disabled",i.clicked||i.deleting),C("aria-label",d(36,27,"form.button_close")),r(2),M(" ",d(38,29,"form.button_close")," "))},dependencies:[D,re,me,ae,P],encapsulation:2})}return n})();function Oe(n,y){if(n&1){let e=x();a(0,"button",13),s(1,"translate"),s(2,"translate"),b("click",function(){h(e);let i=m();return u(i.onCancelRestore())}),p(3,"i",14),l()}if(n&2){let e=m();f("disabled",e.saveInProgress)("openDelay",150)("ngbTooltip",d(1,4,"form.button_cancel")),C("aria-label",d(2,6,"form.button_cancel"))}}function Ne(n,y){if(n&1){let e=x();a(0,"button",15),s(1,"translate"),s(2,"translate"),b("click",function(){h(e);let i=m();return u(i.onRestore())}),p(3,"i",16),l()}n&2&&(f("openDelay",150)("ngbTooltip",d(1,3,"form.button_restore")),C("aria-label",d(2,5,"form.button_restore")))}function qe(n,y){n&1&&p(0,"i",8)}function Fe(n,y){n&1&&p(0,"i",9)}function Le(n,y){if(n&1){let e=x();a(0,"ngx-monaco-editor",17),b("onInit",function(i){h(e);let o=m();return u(o.onEditorInit(i))})("keydown.control.s",function(i){h(e);let o=m();return i.preventDefault(),u(o.onSave())})("keydown.meta.s",function(i){h(e);let o=m();return i.preventDefault(),u(o.onSave())}),l()}if(n&2){let e=m();f("options",e.editorOptions)("model",e.monacoEditorModel)}}function Je(n,y){if(n&1){let e=x();a(0,"ngx-monaco-diff-editor",18),b("onInit",function(i){h(e);let o=m();return u(o.onInitDiffEditor(i))})("keydown.control.s",function(i){h(e);let o=m();return i.preventDefault(),u(o.onSave())})("keydown.meta.s",function(i){h(e);let o=m();return i.preventDefault(),u(o.onSave())}),l()}if(n&2){let e=m();f("options",e.editorOptions)("originalModel",e.monacoEditorModel)("modifiedModel",e.monacoEditorModel)}}function ze(n,y){if(n&1){let e=x();a(0,"textarea",19),ne("ngModelChange",function(i){h(e);let o=m();return oe(o.homebridgeConfig,i)||(o.homebridgeConfig=i),u(i)}),_(1," "),l()}if(n&2){let e=m();ie("ngModel",e.homebridgeConfig)}}var xt=(()=>{class n{$api=g(H);$md=g(_e);$modal=g(ge);$monacoEditor=g(we);$route=g(ue);$renderer=g(X);$router=g(j);$settings=g(be);$toastr=g(I);$translate=g(R);editorDecorations=[];lastHeight;visualViewPortEventCallback;latestSavedConfig;childBridgesToRestart=[];hbPendingRestart=!1;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.latestSavedConfig=JSON.parse(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()}});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.modifiedEditor,e.getModel().original.setValue(this.originalConfig),e.getModel().modified.setValue(this.homebridgeConfig),window.editor=e}onSave(){return E(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(xe,{size:"lg",backdrop:"static"});t.componentInstance.currentConfig=this.homebridgeConfig,t.componentInstance.fromSettings=e,t.result.then(i=>{this.originalConfig||(this.originalConfig=this.homebridgeConfig),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.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(){this.homebridgeConfig=this.originalConfig,this.originalConfig="",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()),this.monacoEditor&&this.monacoEditor.dispose()}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 E(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((T,O)=>T===o[O])}removePlatformsAndAccessories(e){let T=e,{accessories:t,platforms:i}=T;return G(T,["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 E(this,null,function*(){try{if(this.hbPendingRestart)throw new Error("homebridge already pending a restart");let e=this.latestSavedConfig,t=JSON.stringify(e,null,4),i=JSON.parse(this.homebridgeConfig),o=this.homebridgeConfig;if(t===o&&!this.childBridgesToRestart.length)this.$toastr.info(this.$translate.instant("config.no_restart"),this.$translate.instant("config.config_saved"));else{if(!this.validateArraysEqual(Object.keys(e),Object.keys(i)))throw new Error("top level keys have changed");if([...i.platforms||[],...i.accessories||[]].every(c=>!c._bridge||!Object.keys(c._bridge).length))throw new Error("All platforms and accessories are missing a valid _bridge property.");let O=this.removePlatformsAndAccessories(e),$e=this.removePlatformsAndAccessories(i);if(!A(O,$e))throw new Error("top level properties have changed (except accessories and platforms)");let N=e.platforms||[],q=i.platforms||[],Te=N.map(c=>c.platform),Se=q.map(c=>c.platform);if(!this.validateArraysEqual(Te,Se))throw new Error("platform keys have changed");let F=e.accessories||[],L=i.accessories||[],Me=F.map(c=>c.accessory),Ae=L.map(c=>c.accessory);if(!this.validateArraysEqual(Me,Ae))throw new Error("accessory keys have changed");if(!this.validateBridgesEqual(this.removeEmptyBridges(N),this.removeEmptyBridges(q)))throw new Error("platform bridges have changed");if(!this.validateBridgesEqual(this.removeEmptyBridges(F),this.removeEmptyBridges(L)))throw new Error("accessory bridges have changed");let U=N.filter(c=>!A(c,q.find(S=>S.platform===c.platform))),Ve=F.filter(c=>!A(c,L.find(S=>S.accessory===c.accessory))),W=[...U,...Ve];if(U.some(c=>c.platform==="config"))throw new Error("homebridge ui config has changed");if(W.some(c=>c.platform==="config"?!1:!c._bridge||Object.keys(c._bridge).length===0))throw new Error("some changed entry does not have a _bridge key");let Be=yield $(this.$api.get("/status/homebridge/child-bridges"));W.forEach(c=>{let S=c._bridge.username.toUpperCase(),V=Be.find(({username:J})=>J===S);if(V)this.childBridgesToRestart.some(J=>J.username===V.username)||this.childBridgesToRestart.push({name:V.name,username:V.username});else throw new Error(`no child bridge found for username: ${S}`)});let Y=this.$modal.open(ye,{size:"lg",backdrop:"static"});Y.componentInstance.bridges=this.childBridgesToRestart;try{yield Y.result,this.childBridgesToRestart=[]}catch{}}}catch(e){console.error(e);let t=this.$modal.open(Ce,{size:"lg",backdrop:"static"});try{yield t.result,this.hbPendingRestart=!1,this.childBridgesToRestart=[]}catch{this.hbPendingRestart=!0}}finally{this.latestSavedConfig=JSON.parse(this.homebridgeConfig)}})}parseConfigFromEditor(){try{return JSON.parse(this.homebridgeConfig)}catch{let t=ke.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&&(a(0,"div",0)(1,"div",1)(2,"div",2)(3,"h3",3),_(4),s(5,"translate"),l()(),a(6,"div",4),w(7,Oe,4,8,"button",5),w(8,Ne,4,7,"button",6),a(9,"button",7),s(10,"translate"),s(11,"translate"),b("click",function(){return i.onSave()}),w(12,qe,1,0,"i",8),w(13,Fe,1,0,"i",9),l()()(),w(14,Le,1,2,"ngx-monaco-editor",10),w(15,Je,1,3,"ngx-monaco-diff-editor",11),w(16,ze,2,1,"textarea",12),l()),t&2&&(r(4),k(d(5,12,"menu.config_json_editor")),r(3),v(i.originalConfig?7:-1),r(),v(i.originalConfig?-1:8),r(),f("disabled",i.saveInProgress)("openDelay",150)("ngbTooltip",d(10,14,"form.button_save")),C("aria-label",d(11,16,"form.button_save")),r(3),v(i.saveInProgress?-1:12),r(),v(i.saveInProgress?13:-1),r(),v(!i.isMobile&&!i.originalConfig?14:-1),r(),v(!i.isMobile&&i.originalConfig?15:-1),r(),v(i.isMobile?16:-1))},dependencies:[D,fe,he,ce,se,le,de,P],encapsulation:2})}return n})();export{xt as ConfigEditorComponent};
|
package/public/chunk-NLXPU33I.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as n}from"./chunk-OATKJLCB.js";import"./chunk-LVK4VN3L.js";import"./chunk-7MHWW2YA.js";import"./chunk-7P7IHFIJ.js";import"./chunk-NFWGYMP7.js";import"./chunk-77JZBWAC.js";import"./chunk-RXKJ7QT6.js";import"./chunk-AE7VAWOU.js";import"./chunk-V2P2FPJ7.js";import"./chunk-BU65ZOCD.js";import"./chunk-YATJTZML.js";import"./chunk-ZHPB347D.js";import"./chunk-4WAU3AJS.js";import"./chunk-EA3EXGPZ.js";import"./chunk-CNMM42I5.js";import"./chunk-XTY2KYXP.js";import"./chunk-JDT4PK65.js";import{g as r}from"./chunk-UOLP7IQJ.js";import"./chunk-KPXKASBA.js";import"./chunk-H7QK4UWE.js";import"./chunk-G7FA4DP4.js";import"./chunk-6GMXEQVA.js";import{ga as t,nb as i}from"./chunk-H36QJYLQ.js";var l=[{path:"",loadComponent:()=>import("./chunk-JTET2LBG.js").then(o=>o.PluginsComponent)}],u=(()=>{class o{static \u0275fac=function(e){return new(e||o)};static \u0275mod=i({type:o});static \u0275inj=t({imports:[r.forChild(l),r]})}return o})();var f=(()=>{class o{static \u0275fac=function(e){return new(e||o)};static \u0275mod=i({type:o});static \u0275inj=t({imports:[n,u]})}return o})();export{f as PluginsModule};
|
|
File without changes
|