Newer
Older
smart-home-server / webclient / dist / js / main.js
(()=>{var q=Object.defineProperty;var L=Object.getOwnPropertySymbols;var A=Object.prototype.hasOwnProperty,D=Object.prototype.propertyIsEnumerable;var R=(s,e,t)=>e in s?q(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,v=(s,e)=>{for(var t in e||(e={}))A.call(e,t)&&R(s,t,e[t]);if(L)for(var t of L(e))D.call(e,t)&&R(s,t,e[t]);return s};var k=(s,e,t)=>new Promise((i,n)=>{var r=o=>{try{u(t.next(o))}catch(c){n(c)}},l=o=>{try{u(t.throw(o))}catch(c){n(c)}},u=o=>o.done?i(o.value):Promise.resolve(o.value).then(r,l);u((t=t.apply(s,e)).next())});function j(s,e,t,i){return`
		<div class="toast toast-${s}" role="alert">
	    <div class="toast-content">
	      <h4 class="toast-title">${e} ${t}</h4>
	      <p class="toast-text">${i}</p>
	    </div>
	    <button class="btn-icon toast-close" type="button" aria-label="Close">\u2715</button>
	  </div>
	`}function M(s){return s.close=function(){this.classList.add("a-hide"),setTimeout(()=>{this.remove()},300)},s.querySelector(".toast-close").addEventListener("click",e=>{s.close()}),s.show=function(){document.querySelector("body").append(s),setTimeout(()=>{s.classList.add("a-show")},10)},s}function _(s,e,t,i){let n=document.createElement("div");return n.innerHTML=j(s,e,t,i),M(n.childNodes[1])}function N(s,e){return _("success",'<i class="ph ph-check-circle"></i>',s,e)}function O(s,e){return _("info",'<i class="ph ph-info"></i>',s,e)}function z(s,e){return _("warning",'<i class="ph ph-warning"></i>',s,e)}function x(s,e){return _("danger",'<i class="ph ph-warning-octagon"></i>',s,e)}var p={create:_,createInfo:O,createSuccess:N,createWarning:z,createError:x,createDanger:x};function H(s,e,t){return`
		<div class="modal" aria-hidden="true" id="${s}">
      <div class="modal-backdrop"></div>

      <div class="modal-panel" role="dialog" aria-modal="true" aria-labelledby="modal-title-basic">
        <header class="modal-header">
          <h4 class="modal-title" id="modal-title-basic">${e}</h4>
          <button class="btn-icon modal-close" type="button" aria-label="Close">\u2715</button>
        </header>

        <div class="modal-body"></div>
        <footer class="modal-footer">${t}</footer>
      </div>
    </div>
	`}function F(s){return s.show=function(){document.querySelector("body").append(s),setTimeout(()=>{this.classList.add("a-show")},10)},s.close=function(){this.classList.add("a-hide"),setTimeout(()=>{this.remove()},300)},s.querySelector(".modal-close").addEventListener("click",e=>{s.close()}),s}function P(s,e){let t=e.title||"",i=e.footer||"",n=document.createElement("div");n.innerHTML=H(s,t,i);let r=n.childNodes[1],l=r.querySelector(".modal-body"),u=r.querySelector(".modal-footer");if(typeof e.actions=="function"){let o=e.actions(r);if(typeof o[0]=="object"){let c=document.createElement("div");c.classList.add("actions");for(let f of o)c.append(f);u.append(c)}}if(typeof e.body=="function"){let o=e.body(r);typeof o=="object"?l.append(o):typeof o=="string"&&(l.innerHTML=o)}return F(r)}var U={create:P};var b=class{constructor(e){this.core=e}actions_list(e){return this.core.api_get("/api/v1/scripts/actions/list",e)}scopes_list(e){return this.core.api_get("/api/v1/scripts/scopes/list",e)}regular_list(e){return this.core.api_get("/api/v1/scripts/regular/list",e)}scope_get_by_filename(e,t){let i=encodeURIComponent(String(e||""));return this.core.api_get(`/api/v1/scripts/scopes/name/${i}`,t,{})}scope_create(e,t){return this.core.api_post("/api/v1/scripts/scopes/new",e,t)}scope_update(e,t){return this.core.api_post("/api/v1/scripts/scopes/update",e,t)}action_enable(e,t){let i=encodeURIComponent(String(e||""));return this.core.api_get(`/api/v1/scripts/actions/alias/${i}/enable`,t)}action_disable(e,t){let i=encodeURIComponent(String(e||""));return this.core.api_get(`/api/v1/scripts/actions/alias/${i}/disable`,t)}regular_enable(e,t){let i=encodeURIComponent(String(e||""));return this.core.api_get(`/api/v1/scripts/actions/regular/${i}/enable`,t)}regular_disable(e,t){let i=encodeURIComponent(String(e||""));return this.core.api_get(`/api/v1/scripts/actions/regular/${i}/disable`,t)}scope_enable(e,t){let i=encodeURIComponent(String(e||""));return this.core.api_get(`/api/v1/scripts/actions/scope/${i}/enable`,t)}scope_disable(e,t){let i=encodeURIComponent(String(e||""));return this.core.api_get(`/api/v1/scripts/actions/scope/${i}/disable`,t)}scope_remove(e,t){let i=encodeURIComponent(String(e||""));return this.core.api_get(`/api/v1/scripts/scopes/name/${i}/remove`,t)}run(e,t){return this.core.api_post("/api/v1/scripts/actions/run",e,t)}};var y=class{constructor(e){this.core=e}list(e){return this.core.api_get("/api/v1/devices/list",e)}scanning_setup(e){return this.core.api_get("/api/v1/devices/scanning/setup",e)}scanning_all(e){return this.core.api_get("/api/v1/devices/scanning/all",e)}setup_new_device(e,t){return this.core.api_post("/api/v1/devices/setup/new-device",e,t)}info(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/devices/id/${i}/info`,t)}get(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/devices/id/${i}`,t)}status(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/devices/id/${i}/status`,t)}action(e,t){return this.core.api_post("/api/v1/devices/action",e,t)}remove(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/devices/id/${i}/remove`,t)}reboot(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/devices/id/${i}/reboot`,t)}};var w=class{constructor(e){this.core=e}list(e){return this.core.api_get("/api/v1/areas/list",e)}inner_list(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/areas/id/${i}/list`,t)}new_area(e,t){return this.core.api_post("/api/v1/areas/new-area",e,t)}remove(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/areas/id/${i}/remove`,t)}place_in_area(e,t){return this.core.api_post("/api/v1/areas/place-in-area",e,t)}update_display_name(e,t){return this.core.api_post("/api/v1/areas/update-display-name",e,t)}update_alias(e,t){return this.core.api_post("/api/v1/areas/update-alias",e,t)}devices(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/areas/id/${i}/devices`,t)}unassign_from_area(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/areas/id/${i}/unassign-from-area`,t)}types_list(e){return this.core.api_get("/api/v1/areas/types/list",e)}reboot_devices(e,t){if(e==null)return this.core.api_get("/api/v1/areas/reboot_devices",t);let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/areas/id/${i}/reboot_devices`,t)}};function E(s){if(!s||typeof s!="object")return"";let e=new URLSearchParams;Object.entries(s).forEach(([i,n])=>{n!=null&&e.append(i,String(n))});let t=e.toString();return t?`?${t}`:""}function W(s,e){let t=String(s||"").replace(/\/+$/,""),i=String(e||"").replace(/^\/+/,"");return`${t}/${i}`}function B(s){try{return{ok:!0,data:JSON.parse(s)}}catch(e){return{ok:!1,error:e}}}var S=class{constructor(e){this.base_url=(e==null?void 0:e.base_url)||"",this.token=(e==null?void 0:e.token)||"",this.timeout_ms=Number.isFinite(e==null?void 0:e.timeout_ms)?e.timeout_ms:15e3,this.default_headers=(e==null?void 0:e.default_headers)||{},this.on_unauthorized=typeof(e==null?void 0:e.on_unauthorized)=="function"?e.on_unauthorized:null,this.proxy_path=(e==null?void 0:e.proxy_path)||"",this.scripts=new b(this),this.devices=new y(this),this.areas=new w(this)}set_base_url(e){this.base_url=e||""}set_token(e){this.token=e||""}set_proxy_path(e){this.proxy_path=e||""}_wrap_path(e,t){if(!this.proxy_path)return t?`${e}${E(t)}`:e;let i=v({path:e},t||{});return`${this.proxy_path}${E(i)}`}request(e,t,i,n,r){let l=typeof n=="function"?n:()=>{},u=W(this.base_url,t),o=new AbortController,c=Number.isFinite(r==null?void 0:r.timeout_ms)?r.timeout_ms:this.timeout_ms,f=setTimeout(()=>o.abort(),c),$=v(v({},this.default_headers),(r==null?void 0:r.headers)||{});this.token&&($.Authorization=`Bearer ${this.token}`);let C;i!=null&&($["Content-Type"]="application/json",C=JSON.stringify(i)),fetch(u,{method:e,headers:$,body:C,signal:o.signal}).then(a=>k(this,null,function*(){clearTimeout(f);let h={url:u,method:e,status_code:a.status,headers:a.headers},g=yield a.text(),T=B(g),d=T.ok?T.data:g;if(!a.ok){let m={type:"http_error",message:`HTTP ${a.status}`,status_code:a.status,raw:d};if((a.status===401||a.status===403)&&this.on_unauthorized)try{this.on_unauthorized({error:m,meta:h})}catch(I){}return l(m,null,h)}if(T.ok&&d&&typeof d=="object"){let m=d.status;if(m===!1||m==="error"){let I={type:"api_error",message:d.message||"API error",status_code:a.status,raw:d,field:d.field};return l(I,null,h)}}return l(null,d,h)})).catch(a=>{clearTimeout(f);let g=a&&(a.name==="AbortError"||String(a).includes("AbortError"))?{type:"timeout",message:`Timeout after ${c}ms`}:{type:"network_error",message:(a==null?void 0:a.message)||"Network error",details:a};return l(g,null,{url:u,method:e,status_code:0,headers:null})})}get(e,t,i){return this.request("GET",e,null,t,i)}post(e,t,i,n){return this.request("POST",e,t,i,n)}api_get(e,t,i,n){return this.get(this._wrap_path(e,i),t,n)}api_post(e,t,i,n,r){return this.post(this._wrap_path(e,n),t,i,r)}};window.demoToastInfo=function(){p.createInfo("Title","\u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043E\u0448\u0438\u0431\u043A\u0430. \u041F\u043E\u0432\u0442\u043E\u0440\u0438 \u043F\u043E\u0437\u0436\u0435.").show()};window.demoToastSuccess=function(){p.createSuccess("Success","\u0412\u0441\u0451 \u043E\u0442\u043B\u0438\u0447\u043D\u043E, \u0432\u0441\u0451 \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442, \u044D\u0442\u043E \u0443\u0441\u043F\u0435\u0445 \u0442\u043E\u0441\u0442\u0435\u0440\u0430").show()};window.demoToastWarning=function(){p.createWarning("Warning","\u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043E\u0448\u0438\u0431\u043A\u0430. \u041F\u043E\u0432\u0442\u043E\u0440\u0438 \u043F\u043E\u0437\u0436\u0435.").show()};window.demoToastDanger=function(){p.createDanger("Danger","\u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043E\u0448\u0438\u0431\u043A\u0430. \u041F\u043E\u0432\u0442\u043E\u0440\u0438 \u043F\u043E\u0437\u0436\u0435.").show()};window.demoModal=function(){U.create("demo-modals",{title:"Demo modal window",footer:"<p>Footer text</p>",actions:s=>{let e=document.createElement("button");e.classList.add("btn"),e.classList.add("btn-primary"),e.innerHTML="Cancel",e.addEventListener("click",i=>{s.close()});let t=document.createElement("button");return t.classList.add("btn"),t.classList.add("btn-success"),t.innerHTML="Apply",t.addEventListener("click",i=>{s.close(),setTimeout(()=>{p.createSuccess("Success","\u0412\u0441\u0451 \u043E\u0442\u043B\u0438\u0447\u043D\u043E, \u0432\u0441\u0451 \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442, \u044D\u0442\u043E \u0443\u0441\u043F\u0435\u0445").show()},300)}),[e,t]},body:s=>`
				<p class="text">\u041B\u044E\u0431\u043E\u0439 \u043A\u043E\u043D\u0442\u0435\u043D\u0442: \u0442\u0435\u043A\u0441\u0442, \u0444\u043E\u0440\u043C\u044B, \u0441\u043F\u0438\u0441\u043A\u0438.</p>

        <div class="form-group">
          <label class="label" for="modal-device-name">
            Device name
            <input class="input" id="modal-device-name" type="text" placeholder="Kitchen Light">
          </label>
        </div>

        <div class="form-group">
          <label class="label" for="modal-device-desc">
            Description
            <textarea class="input" id="modal-device-desc" rows="3" placeholder="Optional"></textarea>
          </label>
        </div>
			`}).show()};function J(){let s=new S({base_url:"http://shswebclient.local",token:"YOUR_TOKEN",timeout_ms:3e3,on_unauthorized:({error:e})=>console.log("auth problem:",e),proxy_path:"/proxy.php"});s.scripts.actions_list((e,t,i)=>console.log(t)),s.scripts.scopes_list((e,t,i)=>console.log(t)),s.devices.info(4,(e,t,i)=>console.log(t))}document.addEventListener("DOMContentLoaded",s=>{console.log("App init"),J()});})();
//# sourceMappingURL=main.js.map