update 2026-07-28 01:38:11

This commit is contained in:
action committed 2026-07-28 01:38:11 +08:00
1 parent 20b786ab77
commit 25d570431d
6243 files changed
+2850542

No files matched your search

+24
View File
@@ -0,0 +1,24 @@
## API
这里列出的接口都是 lua 实现的,对于 POST 请求都是提交表单( `multipart/form-data` 或者 `application/x-www-form-urlencoded` ),而不是 JSON,并且 POST 请求必须提供 `token` 参数用于防止 CSRF,`token` 的值可以从全局变量 `window.token` 取得。
1. 自动安装配置软件包
```
POST /cgi-bin/luci/admin/nas/quickstart/auto_setup
token=xxx&packages=aria2&packages=qbittorrent
{"success":0}
{"success":1, "scope":"taskd", "error":"task already running"}
```
这是个异步接口,除非任务已经在运行,否则都会成功(success=0)。`packages` 是需要安装配置的软件包列表,与元数据的id对应
2. 获取安装配置结果
```
GET /cgi-bin/luci/admin/nas/quickstart/setup_result
{"success":0, "result": {"ongoing": true, "packages": ["aria2", "qbittorrent"], "success":["aria2"], "failed":[]} }
{"success":404, "scope":"taskd", "error":"task not found"}
```
用于在安装过程中或者安装完成时获取当前状态。
安装过程中或者安装完成时,`success` 都是 0,`result.ongoing` 表示是否在安装过程中,`result.packages` 是提交的任务列表,`result.success` 是已成功的任务列表,`result.failed` 是已失败的任务列表
+22
View File
@@ -0,0 +1,22 @@
# Copyright (C) 2016 Openwrt.org
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for quickstart
LUCI_DEPENDS:=+quickstart +luci-app-ttyd
LUCI_PKGARCH:=all
PKG_VERSION:=0.12.8-r1
# PKG_RELEASE MUST be empty for luci.mk
PKG_RELEASE:=
LUCI_MINIFY_CSS:=0
LUCI_MINIFY_JS:=0
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature
@@ -0,0 +1 @@
{"en":{"- -自定义- -":"- -Custom- -","(请先获取IPv4上游信息)":"(Please obtain IPv4 upstream information first)","(未格式化)":"(Not formatted)","(未挂载)":"(Not mounted)","(无DNS服务器,请之后自行填写公共DNS服务器,例如 223.5.5.5)":"(No DNS server, please fill in the public DNS server later, such as 223.5.5.5)","(系统分区)":"(System partition)","(系统盘)":"(System disk)","* 表示每天":"* Means daily","* 表示每小时":"* Means hourly","* 表示每月":"* Means monthly","%{ countdown }s后 跳转新地址":"%{ countdown }s before redirecting to new address","%{ days }天":["%{ days } d ","%{ days } d "],"%{ hours }小时":["%{ hours } h","%{ hours } h"],"%{ minutes }分":[" %{ minutes } min"," %{ minutes } min"],"%{ seconds }秒":[" %{ seconds } sec"," %{ seconds } sec"],"%{status}下载服务配置向导":"%{status} download service configuration wizard","1、点击“提交”可将变更合并到非沙箱环境":"1. Click 'Submit' to merge changes into non-sandbox environment","1. 满足上述条件以后,点击“当前 IPv4 上游信息”以刷新当前连接信息,成功以后,“自动填写”按钮将被激活。(失败可再次点击)":"1. After the above conditions are met, click 'Current IPv4 Upstream Information' to refresh the current connection information. After success, the 'Auto Fill' button will be activated. (Click again if failed)","2、点击“重置”可将沙箱恢复到初始状态":"2. Click 'Reset' to restore the sandbox to its initial state","2. 点击“自动填写”,将切换到参数页并自动填写。此时依然可以自行调整参数。":"2. Click 'Auto-fill' to switch to the parameter page and auto-fill. Parameters can still be adjusted manually.","223.5.5.5":"223.5.5.5","3、点击“退出”可退出沙箱环境,并放弃沙箱中的数据":"3. Click 'Exit' to exit the sandbox environment and abandon the data in the sandbox","阿里云":"Aliyun","安装失败":"Installation Failed","安装失败,":"Installation Failed,","安装失败或超时,请检查软件源或稍候重试":"Installation Failed or Timed Out, Please Check Software Source or Retry Later","安装中...":"Installing...","半双工":"Half Duplex","保持DHCP服务设置":"Keep DHCP Service Settings","保存":"Save","保存并应用":"Save and Apply","保存成功":"Saved Successfully","保存配置":"Save Configuration","保存中...":"Saving...","备份升级":"Backup/Flash","备用DNS地址":"Backup DNS Address","备用DNS服务器":"Backup DNS Server","备用DNS服务器地址":"Backup DNS Server Address","本向导支持自动或手动配置:":"This wizard supports automatic or manual configuration:","编辑":"Edit","编辑LAN":"Edit LAN","编辑WAN":"Edit WAN","并挂载到":"And Mount to","访客":"visitor","拨号上网":"PPPoE","不格式化,使用原文件系统":"Do Not Format, Use Original File System","不支持挂载":"Not Supported for Mounting","操作":"Operation","测试时磁盘会转动,请选择合适的模式来控制磁盘转动。":"Disk will spin during testing, please choose the appropriate mode to control disk spinning.","测速":"Speedtest","插件备份":"APP Backup","查看磁盘管理信息":"Disk Actions","查看存储服务信息":"Actions","查看高级配置":"Acrions","查看更多详情":" to check details","查看教程":"View tutorial","查看日志":"View log","查看设备信息":"Check Clients","查看网络接口信息":"NIC Info","查看系统信息":"System Utils","查看详情":"View details","常规设置":"General Settings","成员":"Member","初始化成功":"Initialized Successfully","初始化中...":"Initializing...","处理中...":"Processing...","传输时自检":"Self-Test During Transfer","窗口 %{ item }":"Window %{ item }","创建":"Create","创建成功":"Created Successfully","创建计划任务":"Create Scheduled Task","创建中...":"Creating...","创建RAID":"Create RAID","磁盘":"Disk","磁盘管理":"Disk Manager","磁盘信息":"Disk Info","磁盘阵列成员:":"RAID array members:","此操作会将会删除该分区全部数据":"This operation will delete all data on this partition","此操作会将会删除该分区全部数据,并格式化成EXT4,随后自动重启进入沙箱模式,是否继续?":"This operation will delete all data on the partition and format it to EXT4, then automatically reboot into sandbox mode. Do you want to continue?","此分区为只读状态,可能无法写入数据":"This partition is read-only, data may not be writable","此文件系统不支持Docker等应用数据,建议格式化成EXT4文件系统":"This file system does not support Docker and other application data, it is recommended to format as EXT4 file system","存储服务":"Share","错误":"Error","带宽监控":"Bandwidth Monitor","待机":"Standby","待机-处于待机和睡眠模式下不检查设备。此模式下磁盘一般不旋Line truncated
@@ -0,0 +1 @@
{"zh-cn":{}}
@@ -0,0 +1,3 @@
var go=Object.defineProperty,vo=Object.defineProperties;var bo=Object.getOwnPropertyDescriptors;var xa=Object.getOwnPropertySymbols;var ho=Object.prototype.hasOwnProperty,_o=Object.prototype.propertyIsEnumerable;var We=(o,n,a)=>n in o?go(o,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):o[n]=a,st=(o,n)=>{for(var a in n||(n={}))ho.call(n,a)&&We(o,a,n[a]);if(xa)for(var a of xa(n))_o.call(n,a)&&We(o,a,n[a]);return o},vt=(o,n)=>vo(o,bo(n));var xo=(o,n)=>()=>(n||o((n={exports:{}}).exports,n),n.exports);var ve=(o,n,a)=>(We(o,typeof n!="symbol"?n+"":n,a),a);var L=(o,n,a)=>new Promise((l,u)=>{var d=g=>{try{k(a.next(g))}catch(p){u(p)}},c=g=>{try{k(a.throw(g))}catch(p){u(p)}},k=g=>g.done?l(g.value):Promise.resolve(g.value).then(d,c);k((a=a.apply(o,n)).next())});import{a as wo,c as ko,d as we,b as I,e as Q,u as e,o as r,f as s,g as t,t as i,n as ht,h as D,i as Y,r as _t,j as Yt,w as O,v as Rt,k as Ia,l as Z,m as V,p as E,q as $t,s as Pt,x as pt,F as U,y as tt,z as at,A as jt,B as ut,C as ct,D as ke,E as ee,T as St,G as Nt,H as lt,I as ft,J as xt,K as dt,L as gt,M as Bt,N as Xe,O as Ma,P as La,Q as Oa,R as ta,S as ea,U as Na,V as aa,W as Pe,X as yo,Y as oa,Z as ye,_ as Fo,$ as Eo,a0 as na,a1 as $o,a2 as Te,a3 as Co,a4 as Ie,a5 as Do,a6 as Bo,a7 as Yo,a8 as Ao,a9 as So,aa as zo,ab as Po,ac as To}from"./vendor.js?v=91daea62";var sT=xo(ae=>{const Io=function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const u of document.querySelectorAll('link[rel="modulepreload"]'))l(u);new MutationObserver(u=>{for(const d of u)if(d.type==="childList")for(const c of d.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&l(c)}).observe(document,{childList:!0,subtree:!0});function a(u){const d={};return u.integrity&&(d.integrity=u.integrity),u.referrerpolicy&&(d.referrerPolicy=u.referrerpolicy),u.crossorigin==="use-credentials"?d.credentials="include":u.crossorigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function l(u){if(u.ep)return;u.ep=!0;const d=a(u);fetch(u.href,d)}};Io();const Gt={language:void 0,numberFormat:new Intl.NumberFormat("en",{notation:"compact"})},Mo=o=>L(ae,null,function*(){const n=window.vue_lang;new Date().getTime();let a={};try{const d=yield wo({url:window.vue_lang_data,method:"GET"});d.data&&(a=d.data)}catch(d){console.log(d)}const l=ko({defaultLanguage:n,mutedLanguages:["zh-cn"],translations:a,setGlobalProperties:!1,provideDirective:!1,provideComponent:!1});o.use(l),Gt.language=l;const{$gettext:u}=l;window.$i18n=u;try{Gt.numberFormat=new Intl.NumberFormat(n,{notation:"compact"})}catch(d){console.error("Intl.NumberFormat unsupported lang",n,d)}}),J=()=>{if(Gt.language)return Gt.language;throw new Error("I18N Uninitialized!")},Me=()=>({$gettext:(o,n,a)=>{if(Gt.language)return Gt.language.$gettext(o,n,a);throw new Error("I18N Uninitialized!")},$ngettext:(o,n,a,l,u)=>{if(Gt.language)return Gt.language.$ngettext(o,n,a,l,u);throw new Error("I18N Uninitialized!")}}),De=o=>typeof o=="number"?Gt.numberFormat.format(o):"?",{$gettext:Lo,$ngettext:uT}=Me(),Va=(o,n)=>L(ae,null,function*(){return new Promise((a,l)=>L(ae,null,function*(){try{const u=yield fetch(o,n);if(Math.floor(u.status/100)!=2)throw u.status+" "+u.statusText;const d=st({},u);d.data=yield u.json(),a(d)}catch(u){const d=u;l(Lo("\u7F51\u7EDC\u5F02\u5E38\uFF1A")+((d==null?void 0:d.message)||u))}}))});class ia{constructor(n){ve(this,"config",{baseURL:"",headers:{}});ve(this,"useRequest",n=>n);ve(this,"useResponse",n=>n);ve(this,"useError",n=>n);n.baseURL&&(this.config.baseURL=n.baseURL),n.headers&&(this.config.headers=n.headers)}static create(n){return new ia(n)}Do(n,a){return L(this,null,function*(){return new Promise((l,u)=>L(this,null,function*(){try{const d=this.useRequest({baseURL:this.config.baseURL,headers:this.config.headers});n=`${d.baseURL||""}${n}`,a.headers==null&&(a.headers={}),d.headers&&(a.headers=st({},d.headers));const k=yield fetch(n,a),g=st({},k);g.data=yield k.json(),l(this.useResponse(g))}catch(d){this.useError(d),u(d)}}))})}TEXT(n,a){return L(this,null,function*(){return new Promise((l,u)=>L(this,null,function*(){try{const d=this.useRequest({baseURL:this.config.baseURL,headers:this.config.headers});n=`${d.baseURL||""}${n}`,a.headers==null&&(a.headers={}),d.headers&&(a.headers=st({},d.headers));const k=yield fetch(n,a),g=st({},k);g.data=yield k.text(),l(g)}catch(d){this.useError(d),u(d)}}))})}interceptors(){const n=this;return{requset:{use(a){n.useRequest=a}},response:{use(a,l){n.useResponse=a,l&&(n.useError=l)}}}}}const Ga=ia.create({});Ga.interceptors().requset.use(o=>o);Ga.interceptors().response.use(o=>(o.data&&o.data.success==null&&o.data.success==0,o));const{$gettext:ja,$ngettext:cT}=Me(),Oo="/cgi-bin/luci/istore",No="/cgi-bin/luci/admin";let Ae=!1;const W=(o,n)=>(o.indexOf("//")==-1&&(o=`${Oo}${o}`),Va(o,n).then(a=>(a!=null&&a.data&&a.data.success==-1001&&a.data.error=="Forbidden"&&(Ae||(Ae=!0,alert(ja("\u767B\u5F55\u8FC7\u671F\uFF0C\u8BF7\u91CLine truncated
`+k.value+`
`+d.value,disabled:""},null,8,RF)]),t("div",WF,[t("div",{class:"close",onClick:m,disabled:u.value},i(e(a)("\u5173\u95ED")),9,HF),u.value?D("",!0):(r(),s("div",{key:0,class:"next",onClick:v,disabled:u.value},i(e(a)("\u8FD0\u884C")),9,JF))])])]),_:1}))}});var KF=N(ZF,[["__scopeId","data-v-70c3aae0"]]);const QF={class:"actioner-container"},XF={class:"actioner-container_header"},tE={class:"tabs"},eE={class:"actioner-container_body"},aE={key:0,class:"table"},oE={class:"tr"},nE={class:"td left"},iE={class:"td left"},rE={class:"tr"},sE={class:"td left"},dE={class:"td left"},lE={class:"tr"},uE={class:"td left"},cE={class:"td left"},pE=["value"],fE=["value"],mE=["value"],gE={class:"actioner-container_footer"},vE=["disabled"],bE=I({props:{close:{type:Function,required:!0},disk:{type:Object,required:!0}},setup(o){const n=o,{$gettext:a,$ngettext:l}=J(),u=E(!1),d=E("info"),c=b=>{switch(d.value=b,b){case"info":break;case"attribute":m();break;case"log":p();break;case"extend":v();break}},k=()=>{u.value=!0,n.close()},g=gt({log:"",attribute:"",extend:""}),p=()=>L(this,null,function*(){try{const b=yield G.Smart.Test.Result.POST({type:"selftest",devicePath:n.disk.path||""});if(b.data){const{result:y,error:f}=b.data;y&&y.result&&(g.log=y.result),f&&(g.log=f)}}catch(b){g.log=b}}),m=()=>L(this,null,function*(){try{const b=yield G.Smart.Attribute.Result.POST({devicePath:n.disk.path||""});if(b.data){const{result:y,error:f}=b.data;y&&y.result&&(g.attribute=y.result),f&&(g.attribute=f)}}catch(b){g.attribute=b}}),v=()=>L(this,null,function*(){try{const b=yield G.Smart.Extend.Result.POST({devicePath:n.disk.path||""});if(b.data){const{result:y,error:f}=b.data;y&&y.result&&(g.extend=y.result),f&&(g.extend=f)}}catch(b){g.extend=b}});return(b,y)=>(r(),Z(je,null,{default:V(()=>[t("div",QF,[t("div",XF,[t("ul",tE,[t("li",{class:lt({"active cbi-tab":d.value=="info"}),onClick:y[0]||(y[0]=f=>c("info"))},[t("a",null,i(e(a)("\u8BBE\u5907\u4FE1\u606F")),1)],2),t("li",{class:lt({"active cbi-tab":d.value=="attribute"}),onClick:y[1]||(y[1]=f=>c("attribute"))},[t("a",null,i(e(a)("\u5C5E\u6027")),1)],2),t("li",{class:lt({"active cbi-tab":d.value=="log"}),onClick:y[2]||(y[2]=f=>c("log"))},[t("a",null,i(e(a)("\u81EA\u68C0\u65E5\u5FD7")),1)],2),t("li",{class:lt({"active cbi-tab":d.value=="extend"}),onClick:y[3]||(y[3]=f=>c("extend"))},[t("a",null,i(e(a)("\u6269\u5C55\u4FE1\u606F")),1)],2)])]),t("div",eE,[d.value=="info"?(r(),s("table",aE,[t("tr",oE,[t("td",nE,i(e(a)("\u8BBE\u5907")),1),t("td",iE,i(o.disk.path),1)]),t("tr",rE,[t("td",sE,i(e(a)("\u578B\u53F7")),1),t("td",dE,i(o.disk.model),1)]),t("tr",lE,[t("td",uE,i(e(a)("\u5E8F\u53F7")),1),t("td",cE,i(o.disk.serial),1)])])):d.value=="attribute"?(r(),s("textarea",{key:1,disabled:"",value:e(g).attribute},null,8,pE)):d.value=="log"?(r(),s("textarea",{key:2,disabled:"",value:e(g).log},null,8,fE)):d.value=="extend"?(r(),s("textarea",{key:3,disabled:"",value:e(g).extend},null,8,mE)):D("",!0)]),t("div",gE,[t("div",{class:"close",onClick:k,disabled:u.value},i(e(a)("\u5173\u95ED")),9,vE)])])]),_:1}))}});var hE=N(bE,[["__scopeId","data-v-313197ee"]]);const _E=o=>{const n=document.createElement("div");document.body.appendChild(n);const a=Y(tF,vt(st({},o),{close:()=>{l()}})),l=()=>{n.remove()};Ie(a,n)},xE=o=>{const n=document.createElement("div");document.body.appendChild(n);const a=Y(GF,vt(st({},o),{close:()=>{l()}})),l=()=>{n.remove()};Ie(a,n)},wE=o=>{const n=document.createElement("div");document.body.appendChild(n);const a=Y(KF,vt(st({},o),{close:()=>{l()}})),l=()=>{n.remove()};Ie(a,n)},kE=o=>{const n=document.createElement("div");document.body.appendChild(n);const a=Y(hE,vt(st({},o),{close:()=>{l()}})),l=()=>{n.remove()};Ie(a,n)},yE={class:"cbi-section"},FE={class:"cbi-value"},EE={class:"cbi-value-title"},$E={class:"cbi-value-field"},CE={class:"cbi-checkbox"},DE=["value"],BE={class:"cbi-value"},YE={class:"cbi-value-title"},AE={class:"cbi-value-field"},SE={class:"cbi-checkbox"},zE={value:"never"},PE={value:"sleep"},TE={value:"standby"},IE={value:"idle"},ME={class:"cbi-value-description"},LE=t("br",null,null,-1),OE=t("br",null,null,-1),NE=t("br",null,null,-1),VE=t("br",null,null,-1),GE={class:"cbi-value"},jE={class:"cbi-value-title"},UE={class:"cbi-value-field"},qE={class:"cbi-checkbox"},RE={value:0},WE=["value"],HE={class:"cbi-value-description"},JE={class:"cbi-value"},ZE={class:"cbi-value-title"},KE={class:"cbi-value-field"},QE={class:"cbi-checkbox"},XE={value:0},t$=["value"],e$={class:"cbi-value-description"},a$={class:"cbi-section cbi-tblsection",id:"cbi-nfs-mount"},o$={class:"table cbi-section-table"},n$={class:"tr cbi-section-table-titles anonymous"},i$={class:"th cbi-section-table-cell","data-widget":"value"},r$={class:"th cbi-section-table-cell","data-widget":"value"},s$={class:"th cbi-section-table-cell","data-widget":"value"},d$={class:"th cbi-section-table-cell","data-widget":"value"},l$={class:"th cbi-section-table-cell","data-widget":"value"},u$={class:"th cbi-section-table-cell","data-widget":"value" Line truncated
@@ -0,0 +1 @@
@keyframes bganimation-0698ba82{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}@keyframes rotateEnter-0698ba82{0%{transform:rotateY(180deg)}10%{transform:rotateY(198deg)}20%{transform:rotateY(216deg)}30%{transform:rotateY(234deg)}40%{transform:rotateY(252deg)}50%{transform:rotateY(270deg)}60%{transform:rotateY(288deg)}70%{transform:rotateY(306deg)}80%{transform:rotateY(324deg)}90%{transform:rotateY(342deg)}to{transform:rotateY(360deg)}}@keyframes turns-0698ba82{0%{-webkit-transform:rotate(0deg)}25%{-webkit-transform:rotate(90deg)}50%{-webkit-transform:rotate(180deg)}75%{-webkit-transform:rotate(270deg)}to{-webkit-transform:rotate(360deg)}}.rotate-enter-active[data-v-0698ba82]{animation:rotateEnter-0698ba82 .7s;position:relative}.rotate-leave-active[data-v-0698ba82]{opacity:0;display:none;position:relative;z-index:-999}.app-container[data-v-0698ba82]{width:100%;background-color:var(--card-bg-color);box-shadow:var(--card-box-shadow);padding:10px 30px;border-radius:6px;position:relative}.disk-item-tooltip[data-v-0698ba82]{position:fixed;background:rgba(0,0,0,.7);z-index:10111;color:#fff;padding:.5rem 1rem;font-size:1em;min-width:200px;line-height:24px}.disk-item-tooltip[data-v-0698ba82]:after{content:"";position:absolute;bottom:-6px;border-color:#4c4c4c rgba(0,0,0,0) rgba(0,0,0,0);left:0;right:0;text-align:center;width:0;margin:0 auto;border-width:6px 8px 0;border-style:solid}#main .app-btn,#actioner .app-btn{min-height:36px}@keyframes bganimation-9bc295c2{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}@keyframes rotateEnter-9bc295c2{0%{transform:rotateY(180deg)}10%{transform:rotateY(198deg)}20%{transform:rotateY(216deg)}30%{transform:rotateY(234deg)}40%{transform:rotateY(252deg)}50%{transform:rotateY(270deg)}60%{transform:rotateY(288deg)}70%{transform:rotateY(306deg)}80%{transform:rotateY(324deg)}90%{transform:rotateY(342deg)}to{transform:rotateY(360deg)}}@keyframes turns-9bc295c2{0%{-webkit-transform:rotate(0deg)}25%{-webkit-transform:rotate(90deg)}50%{-webkit-transform:rotate(180deg)}75%{-webkit-transform:rotate(270deg)}to{-webkit-transform:rotate(360deg)}}.rotate-enter-active[data-v-9bc295c2]{animation:rotateEnter-9bc295c2 .7s;position:relative}.rotate-leave-active[data-v-9bc295c2]{opacity:0;display:none;position:relative;z-index:-999}.app-container[data-v-9bc295c2]{width:100%;background-color:var(--card-bg-color);box-shadow:var(--card-box-shadow);padding:10px 30px;border-radius:6px;position:relative}#main[data-v-9bc295c2]{width:100%}#main[data-v-9bc295c2],#main[data-v-9bc295c2] *{-webkit-box-sizing:border-box;-webkit-tap-highlight-color:transparent;box-sizing:border-box;word-wrap:break-word;outline:none}@keyframes bganimation{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}@keyframes rotateEnter{0%{transform:rotateY(180deg)}10%{transform:rotateY(198deg)}20%{transform:rotateY(216deg)}30%{transform:rotateY(234deg)}40%{transform:rotateY(252deg)}50%{transform:rotateY(270deg)}60%{transform:rotateY(288deg)}70%{transform:rotateY(306deg)}80%{transform:rotateY(324deg)}90%{transform:rotateY(342deg)}to{transform:rotateY(360deg)}}@keyframes turns{0%{-webkit-transform:rotate(0deg)}25%{-webkit-transform:rotate(90deg)}50%{-webkit-transform:rotate(180deg)}75%{-webkit-transform:rotate(270deg)}to{-webkit-transform:rotate(360deg)}}.rotate-enter-active{animation:rotateEnter .7s;position:relative}.rotate-leave-active{opacity:0;display:none;position:relative;z-index:-999}.app-container{width:100%;background-color:var(--card-bg-color);box-shadow:var(--card-box-shadow);padding:10px 30px;border-radius:6px;position:relative}:root{--flow-bg-color: #fff;--flow-span-color: rgba(0, 0, 0, .6);--card-bg-color: #fff;--card-box-shadow: 0 0 10px 1px #bfbfbf24;--app-container_title-color: #1e1e1e;--app-container_status-label_block: black;--item-label_key-span-color: #333;--item-label_value-span-color: #333;--app-container_status-label_bg: #f3f3f3;--item_btn-border: 1px solid #553afb;--item_btn-color: #553afb;--tit-color: #1e1e1e;--popup-bg-color: #fff;--tag-bg-color: #f5f5f5;--gradient-bg-color:linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,.8) 62%, rgba(255,255,255,1) 100%);--breadcrumbs-tit-color:#d6dbf8;--breadcrumbs-tit-color1:#f1f2f9;--border-color: #e5e5e5;--SystemUpdateBanner-bg-color: #eff6ff;--SystemUpdateBanner-border-color: #bedbff;--btn-border-color: #e5e5e5;--card-txt-color: #32325d;--SystemInfo-bg-color:#f9fafd}@media (prefers-color-scheme: light){:root{--flow-bg-color: #fff;--flow-span-color: rgba(0, 0, 0, .6);--card-bg-color: #fff;--card-box-shadow: 0 0 10px 1px #bfbfbf24;--app-container_title-color: #1e1e1e;--app-container_status-label_block: black;--item-label_key-span-color: #333;--item-label_value-span-color: #333;--app-container_status-label_bg: #f3f3f3;--item_btn-border: 1px solid #553afb;--item_btn-color: #553afb;--tit-color: #1e1e1e;--popup-bg-color: #fff;--tag-Line truncated
@@ -0,0 +1,48 @@
function wv(e,t){const r=Object.create(null),n=e.split(",");for(let i=0;i<n.length;i++)r[n[i]]=!0;return t?i=>!!r[i.toLowerCase()]:i=>!!r[i]}const zx="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Hx=wv(zx);function Q0(e){return!!e||e===""}function bv(e){if(at(e)){const t={};for(let r=0;r<e.length;r++){const n=e[r],i=Zt(n)?Gx(n):bv(n);if(i)for(const a in i)t[a]=i[a]}return t}else{if(Zt(e))return e;if(Yt(e))return e}}const $x=/;(?![^(]*\))/g,Vx=/:(.+)/;function Gx(e){const t={};return e.split($x).forEach(r=>{if(r){const n=r.split(Vx);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function Sv(e){let t="";if(Zt(e))t=e;else if(at(e))for(let r=0;r<e.length;r++){const n=Sv(e[r]);n&&(t+=n+" ")}else if(Yt(e))for(const r in e)e[r]&&(t+=r+" ");return t.trim()}function Ux(e,t){if(e.length!==t.length)return!1;let r=!0;for(let n=0;r&&n<e.length;n++)r=wi(e[n],t[n]);return r}function wi(e,t){if(e===t)return!0;let r=cp(e),n=cp(t);if(r||n)return r&&n?e.getTime()===t.getTime():!1;if(r=at(e),n=at(t),r||n)return r&&n?Ux(e,t):!1;if(r=Yt(e),n=Yt(t),r||n){if(!r||!n)return!1;const i=Object.keys(e).length,a=Object.keys(t).length;if(i!==a)return!1;for(const o in e){const s=e.hasOwnProperty(o),l=t.hasOwnProperty(o);if(s&&!l||!s&&l||!wi(e[o],t[o]))return!1}}return String(e)===String(t)}function xv(e,t){return e.findIndex(r=>wi(r,t))}const Iz=e=>Zt(e)?e:e==null?"":at(e)||Yt(e)&&(e.toString===t_||!gt(e.toString))?JSON.stringify(e,J0,2):String(e),J0=(e,t)=>t&&t.__v_isRef?J0(e,t.value):fa(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((r,[n,i])=>(r[`${n} =>`]=i,r),{})}:Ea(t)?{[`Set(${t.size})`]:[...t.values()]}:Yt(t)&&!at(t)&&!e_(t)?String(t):t,Rt={},ua=[],fr=()=>{},Wx=()=>!1,Yx=/^on[^a-z]/,_u=e=>Yx.test(e),Tv=e=>e.startsWith("onUpdate:"),ie=Object.assign,Cv=(e,t)=>{const r=e.indexOf(t);r>-1&&e.splice(r,1)},qx=Object.prototype.hasOwnProperty,Tt=(e,t)=>qx.call(e,t),at=Array.isArray,fa=e=>wu(e)==="[object Map]",Ea=e=>wu(e)==="[object Set]",cp=e=>e instanceof Date,gt=e=>typeof e=="function",Zt=e=>typeof e=="string",Mv=e=>typeof e=="symbol",Yt=e=>e!==null&&typeof e=="object",Av=e=>Yt(e)&&gt(e.then)&&gt(e.catch),t_=Object.prototype.toString,wu=e=>t_.call(e),Xx=e=>wu(e).slice(8,-1),e_=e=>wu(e)==="[object Object]",Dv=e=>Zt(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ml=wv(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),bu=e=>{const t=Object.create(null);return r=>t[r]||(t[r]=e(r))},jx=/-(\w)/g,Ar=bu(e=>e.replace(jx,(t,r)=>r?r.toUpperCase():"")),Kx=/\B([A-Z])/g,Mi=bu(e=>e.replace(Kx,"-$1").toLowerCase()),Su=bu(e=>e.charAt(0).toUpperCase()+e.slice(1)),hf=bu(e=>e?`on${Su(e)}`:""),$o=(e,t)=>!Object.is(e,t),yl=(e,t)=>{for(let r=0;r<e.length;r++)e[r](t)},Bl=(e,t,r)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:r})},ya=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let hp;const Zx=()=>hp||(hp=typeof globalThis!="undefined"?globalThis:typeof self!="undefined"?self:typeof window!="undefined"?window:typeof global!="undefined"?global:{});let Or;class r_{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&Or&&(this.parent=Or,this.index=(Or.scopes||(Or.scopes=[])).push(this)-1)}run(t){if(this.active)try{return Or=this,t()}finally{Or=this.parent}}on(){Or=this}off(){Or=this.parent}stop(t){if(this.active){let r,n;for(r=0,n=this.effects.length;r<n;r++)this.effects[r].stop();for(r=0,n=this.cleanups.length;r<n;r++)this.cleanups[r]();if(this.scopes)for(r=0,n=this.scopes.length;r<n;r++)this.scopes[r].stop(!0);if(this.parent&&!t){const i=this.parent.scopes.pop();i&&i!==this&&(this.parent.scopes[this.index]=i,i.index=this.index)}this.active=!1}}}function n_(e){return new r_(e)}function Qx(e,t=Or){t&&t.active&&t.effects.push(e)}const Pv=e=>{const t=new Set(e);return t.w=0,t.n=0,t},i_=e=>(e.w&Pn)>0,a_=e=>(e.n&Pn)>0,Jx=({deps:e})=>{if(e.length)for(let t=0;t<e.length;t++)e[t].w|=Pn},tT=e=>{const{deps:t}=e;if(t.length){let r=0;for(let n=0;n<t.length;n++){const i=t[n];i_(i)&&!a_(i)?i.delete(e):t[r++]=i,i.w&=~Pn,i.n&=~Pn}t.length=r}},$c=new WeakMap;let fo=0,Pn=1;const Vc=30;let xr;const pi=Symbol(""),Gc=Symbol("");class Iv{constructor(t,r=null,n){this.fn=t,this.scheduler=r,this.active=!0,this.deps=[],this.parent=void 0,Qx(this,n)}run(){if(!this.active)return this.fn();let t=xr,r=wn;for(;t;){if(t===this)return;t=t.parent}try{return this.parent=xr,xr=this,wn=!0,Pn=1<<++fo,fo<=Vc?Jx(this):vp(this),this.fn()}finally{fo<=Vc&&tT(this),Pn=1<<--fo,xr=this.parent,wn=r,this.parent=void 0}}stop(){this.active&&(vp(this),this.onStop&&this.onStop(),this.active=!1)}}function vp(e){const{deps:t}=e;if(t.length){for(let r=0;r<t.length;r++)t[r].delete(e);t.length=0}}let wn=!0;const o_=[];function La(){o_.push(wn),wn=!1}function Ra(){const e=o_.pop();wn=e===void 0?!0:e}function ke(e,t,r){if(wn&&xr){let n=$c.get(e);n||$c.set(e,n=new Map);let i=n.get(r);i||n.set(r,i=Pv()),s_(i)}}function s_(e,t){let r=!1;fo<=Vc?a_(e)||(e.n|=Pn,r=!i_(e)):r=Line truncated
`),function(s){if(a=s.indexOf(":"),n=mf.trim(s.substr(0,a)).toLowerCase(),i=mf.trim(s.substr(a+1)),n){if(r[n]&&jM.indexOf(n)>=0)return;n==="set-cookie"?r[n]=(r[n]?r[n]:[]).concat([i]):r[n]=r[n]?r[n]+", "+i:i}}),r},Kp=Fe,ZM=Kp.isStandardBrowserEnv()?function(){var t=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement("a"),n;function i(a){var o=a;return t&&(r.setAttribute("href",o),o=r.href),r.setAttribute("href",o),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:r.pathname.charAt(0)==="/"?r.pathname:"/"+r.pathname}}return n=i(window.location.href),function(o){var s=Kp.isString(o)?i(o):o;return s.protocol===n.protocol&&s.host===n.host}}():function(){return function(){return!0}}(),Is=Fe,QM=VM,JM=GM,tA=l1,eA=XM,rA=KM,nA=ZM,yf=f1,Zp=function(t){return new Promise(function(n,i){var a=t.data,o=t.headers,s=t.responseType;Is.isFormData(a)&&delete o["Content-Type"];var l=new XMLHttpRequest;if(t.auth){var u=t.auth.username||"",f=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";o.Authorization="Basic "+btoa(u+":"+f)}var c=eA(t.baseURL,t.url);l.open(t.method.toUpperCase(),tA(c,t.params,t.paramsSerializer),!0),l.timeout=t.timeout;function v(){if(!!l){var d="getAllResponseHeaders"in l?rA(l.getAllResponseHeaders()):null,p=!s||s==="text"||s==="json"?l.responseText:l.response,g={data:p,status:l.status,statusText:l.statusText,headers:d,config:t,request:l};QM(n,i,g),l=null}}if("onloadend"in l?l.onloadend=v:l.onreadystatechange=function(){!l||l.readyState!==4||l.status===0&&!(l.responseURL&&l.responseURL.indexOf("file:")===0)||setTimeout(v)},l.onabort=function(){!l||(i(yf("Request aborted",t,"ECONNABORTED",l)),l=null)},l.onerror=function(){i(yf("Network Error",t,null,l)),l=null},l.ontimeout=function(){var p="timeout of "+t.timeout+"ms exceeded";t.timeoutErrorMessage&&(p=t.timeoutErrorMessage),i(yf(p,t,t.transitional&&t.transitional.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",l)),l=null},Is.isStandardBrowserEnv()){var h=(t.withCredentials||nA(c))&&t.xsrfCookieName?JM.read(t.xsrfCookieName):void 0;h&&(o[t.xsrfHeaderName]=h)}"setRequestHeader"in l&&Is.forEach(o,function(p,g){typeof a=="undefined"&&g.toLowerCase()==="content-type"?delete o[g]:l.setRequestHeader(g,p)}),Is.isUndefined(t.withCredentials)||(l.withCredentials=!!t.withCredentials),s&&s!=="json"&&(l.responseType=t.responseType),typeof t.onDownloadProgress=="function"&&l.addEventListener("progress",t.onDownloadProgress),typeof t.onUploadProgress=="function"&&l.upload&&l.upload.addEventListener("progress",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then(function(p){!l||(l.abort(),i(p),l=null)}),a||(a=null),l.send(a)})},ee=Fe,Qp=zM,iA=u1,aA={"Content-Type":"application/x-www-form-urlencoded"};function Jp(e,t){!ee.isUndefined(e)&&ee.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}function oA(){var e;return(typeof XMLHttpRequest!="undefined"||typeof process!="undefined"&&Object.prototype.toString.call(process)==="[object process]")&&(e=Zp),e}function sA(e,t,r){if(ee.isString(e))try{return(t||JSON.parse)(e),ee.trim(e)}catch(n){if(n.name!=="SyntaxError")throw n}return(r||JSON.stringify)(e)}var Eu={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:oA(),transformRequest:[function(t,r){return Qp(r,"Accept"),Qp(r,"Content-Type"),ee.isFormData(t)||ee.isArrayBuffer(t)||ee.isBuffer(t)||ee.isStream(t)||ee.isFile(t)||ee.isBlob(t)?t:ee.isArrayBufferView(t)?t.buffer:ee.isURLSearchParams(t)?(Jp(r,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):ee.isObject(t)||r&&r["Content-Type"]==="application/json"?(Jp(r,"application/json"),sA(t)):t}],transformResponse:[function(t){var r=this.transitional,n=r&&r.silentJSONParsing,i=r&&r.forcedJSONParsing,a=!n&&this.responseType==="json";if(a||i&&ee.isString(t)&&t.length)try{return JSON.parse(t)}catch(o){if(a)throw o.name==="SyntaxError"?iA(o,this,"E_JSON_PARSE"):o}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300}};Eu.headers={common:{Accept:"application/json, text/plain, */*"}};ee.forEach(["delete","get","head"],function(t){Eu.headers[t]={}});ee.forEach(["post","put","patch"],function(t){Eu.headers[t]=ee.merge(aA)});var Jv=Eu,lA=Fe,uA=Jv,fA=function(t,r,n){var i=this||uA;return lA.forEach(n,function(o){t=o.call(i,t,r)}),t},c1=function(t){return!!(t&&t.__CANCEL__)},tg=Fe,_f=fA,cA=c1,hA=Jv;function wf(e){e.cancelToken&&e.cancelToken.throwIfRequested()}var vA=function(t){wf(t),t.headers=t.headers||{},t.data=_f.call(t,t.data,t.headers,t.transformRequest),t.headers=tg.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),tg.forEach(["delete","get","head","post","put","patch","common"],function(i){delete t.headers[i]});var r=t.adapter||hA.adapter;return r(t).then(function(i){retur Line truncated
* pinia v2.0.12
* (c) 2022 Eduardo San Martin Morote
* @license MIT
*/let w1;const Ru=e=>w1=e,b1=Symbol();function lh(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var Co;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(Co||(Co={}));function Jz(){const e=n_(!0),t=e.run(()=>wa({}));let r=[],n=[];const i=_a({install(a){Ru(i),i._a=a,a.provide(b1,i),a.config.globalProperties.$pinia=i,n.forEach(o=>r.push(o)),n=[]},use(a){return!this._a&&!KA?n.push(a):r.push(a),this},_p:r,_a:null,_e:e,_s:new Map,state:t});return i}const S1=()=>{};function fg(e,t,r,n=S1){e.push(t);const i=()=>{const a=e.indexOf(t);a>-1&&(e.splice(a,1),n())};return!r&&Oa()&&Du(i),i}function Bi(e,...t){e.slice().forEach(r=>{r(...t)})}function uh(e,t){for(const r in t){const n=t[r],i=e[r];lh(i)&&lh(n)&&!Wt(n)&&!bn(n)?e[r]=uh(i,n):e[r]=n}return e}const ZA=Symbol();function QA(e){return!lh(e)||!e.hasOwnProperty(ZA)}const{assign:kr}=Object;function JA(e){return!!(Wt(e)&&e.effect)}function tD(e,t,r,n){const{state:i,actions:a,getters:o}=t,s=r.state.value[e];let l;function u(){s||(r.state.value[e]=i?i():{});const f=DT(r.state.value[e]);return kr(f,a,Object.keys(o||{}).reduce((c,v)=>(c[v]=_a(Ee(()=>{Ru(r);const h=r._s.get(e);return o[v].call(h,h)})),c),{}))}return l=x1(e,u,t,r),l.$reset=function(){const c=i?i():{};this.$patch(v=>{kr(v,c)})},l}function x1(e,t,r={},n,i){let a;const o=r.state,s=kr({actions:{}},r),l={deep:!0};let u,f,c=_a([]),v=_a([]),h;const d=n.state.value[e];!o&&!d&&(n.state.value[e]={}),wa({});function p(b){let x;u=f=!1,typeof b=="function"?(b(n.state.value[e]),x={type:Co.patchFunction,storeId:e,events:h}):(uh(n.state.value[e],b),x={type:Co.patchObject,payload:b,storeId:e,events:h}),Bv().then(()=>{u=!0}),f=!0,Bi(c,x,n.state.value[e])}const g=S1;function m(){a.stop(),c=[],v=[],n._s.delete(e)}function y(b,x){return function(){Ru(n);const T=Array.from(arguments),C=[],D=[];function P(O){C.push(O)}function A(O){D.push(O)}Bi(v,{args:T,name:b,store:w,after:P,onError:A});let L;try{L=x.apply(this&&this.$id===e?this:w,T)}catch(O){throw Bi(D,O),O}return L instanceof Promise?L.then(O=>(Bi(C,O),O)).catch(O=>(Bi(D,O),Promise.reject(O))):(Bi(C,L),L)}}const _={_p:n,$id:e,$onAction:fg.bind(null,v),$patch:p,$reset:g,$subscribe(b,x={}){const T=fg(c,b,x.detached,()=>C()),C=a.run(()=>ha(()=>n.state.value[e],D=>{(x.flush==="sync"?f:u)&&b({storeId:e,type:Co.direct,events:h},D)},kr({},l,x)));return T},$dispose:m},w=Ai(kr({},_));n._s.set(e,w);const S=n._e.run(()=>(a=n_(),a.run(()=>t())));for(const b in S){const x=S[b];if(Wt(x)&&!JA(x)||bn(x))o||(d&&QA(x)&&(Wt(x)?x.value=d[b]:uh(x,d[b])),n.state.value[e][b]=x);else if(typeof x=="function"){const T=y(b,x);S[b]=T,s.actions[b]=x}}return kr(w,S),kr(Ct(w),S),Object.defineProperty(w,"$state",{get:()=>n.state.value[e],set:b=>{p(x=>{kr(x,b)})}}),n._p.forEach(b=>{kr(w,a.run(()=>b({store:w,app:n._a,pinia:n,options:s})))}),d&&o&&r.hydrate&&r.hydrate(w.$state,d),u=!0,f=!0,w}function tH(e,t,r){let n,i;const a=typeof t=="function";typeof e=="string"?(n=e,i=a?r:t):(i=e,n=e.id);function o(s,l){const u=Oa();return s=s||u&&Je(b1),s&&Ru(s),s=w1,s._s.has(n)||(a?x1(n,t,i,s):tD(n,i,s)),s._s.get(n)}return o.$id=n,o}/*!
* vue-router v4.0.14
* (c) 2022 Eduardo San Martin Morote
* @license MIT
*/const T1=typeof Symbol=="function"&&typeof Symbol.toStringTag=="symbol",ka=e=>T1?Symbol(e):"_vr_"+e,eD=ka("rvlm"),cg=ka("rvd"),Ou=ka("r"),nd=ka("rl"),fh=ka("rvl"),ea=typeof window!="undefined";function rD(e){return e.__esModule||T1&&e[Symbol.toStringTag]==="Module"}const Lt=Object.assign;function bf(e,t){const r={};for(const n in t){const i=t[n];r[n]=Array.isArray(i)?i.map(e):e(i)}return r}const Mo=()=>{},nD=/\/$/,iD=e=>e.replace(nD,"");function Sf(e,t,r="/"){let n,i={},a="",o="";const s=t.indexOf("?"),l=t.indexOf("#",s>-1?s:0);return s>-1&&(n=t.slice(0,s),a=t.slice(s+1,l>-1?l:t.length),i=e(a)),l>-1&&(n=n||t.slice(0,l),o=t.slice(l,t.length)),n=lD(n!=null?n:t,r),{fullPath:n+(a&&"?")+a+o,path:n,query:i,hash:o}}function aD(e,t){const r=t.query?e(t.query):"";return t.path+(r&&"?")+r+(t.hash||"")}function hg(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function oD(e,t,r){const n=t.matched.length-1,i=r.matched.length-1;return n>-1&&n===i&&xa(t.matched[n],r.matched[i])&&C1(t.params,r.params)&&e(t.query)===e(r.query)&&t.hash===r.hash}function xa(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function C1(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const r in e)if(!sD(e[r],t[r]))return!1;return!0}function sD(e,t){return Array.isArray(e)?vg(e,t):Array.isArray(t)?vg(t,e):e===t}function vg(e,t){return Array.isArray(t)?e.length===t.length&&e.every((r,n)=>r===t[n]):e.length===1&&e[0]===t}function lD(e,t){if(e.startsWith("/"))return e;if(!e)return t;const r=t.split("/"),n=e.split("/");let i=r.length-1,a,o;for(a=0;a<n.length;a++)if(o=n[a],!(i===1||o==="."))if(o==="..")i--;else break;return r.slice(0,i).join("/")+"/"+n.slice(a-(a===n.length?1:0)).join("/")}var Ko;(function(e){e.pop="pop",e.push="push"})(Ko||(Ko={}));var Ao;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Ao||(Ao={}));function uD(e){if(!e)if(ea){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),iD(e)}const fD=/^[^#]+#/;function cD(e,t){return e.replace(fD,"#")+t}function hD(e,t){const r=document.documentElement.getBoundingClientRect(),n=e.getBoundingClientRect();return{behavior:t.behavior,left:n.left-r.left-(t.left||0),top:n.top-r.top-(t.top||0)}}const ku=()=>({left:window.pageXOffset,top:window.pageYOffset});function vD(e){let t;if("el"in e){const r=e.el,n=typeof r=="string"&&r.startsWith("#"),i=typeof r=="string"?n?document.getElementById(r.slice(1)):document.querySelector(r):r;if(!i)return;t=hD(i,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function dg(e,t){return(history.state?history.state.position-t:-1)+e}const ch=new Map;function dD(e,t){ch.set(e,t)}function pD(e){const t=ch.get(e);return ch.delete(e),t}let gD=()=>location.protocol+"//"+location.host;function M1(e,t){const{pathname:r,search:n,hash:i}=t,a=e.indexOf("#");if(a>-1){let s=i.includes(e.slice(a))?e.slice(a).length:1,l=i.slice(s);return l[0]!=="/"&&(l="/"+l),hg(l,"")}return hg(r,e)+n+i}function mD(e,t,r,n){let i=[],a=[],o=null;const s=({state:v})=>{const h=M1(e,location),d=r.value,p=t.value;let g=0;if(v){if(r.value=h,t.value=v,o&&o===d){o=null;return}g=p?v.position-p.position:0}else n(h);i.forEach(m=>{m(r.value,d,{delta:g,type:Ko.pop,direction:g?g>0?Ao.forward:Ao.back:Ao.unknown})})};function l(){o=r.value}function u(v){i.push(v);const h=()=>{const d=i.indexOf(v);d>-1&&i.splice(d,1)};return a.push(h),h}function f(){const{history:v}=window;!v.state||v.replaceState(Lt({},v.state,{scroll:ku()}),"")}function c(){for(const v of a)v();a=[],window.removeEventListener("popstate",s),window.removeEventListener("beforeunload",f)}return window.addEventListener("popstate",s),window.addEventListener("beforeunload",f),{pauseListeners:l,listen:u,destroy:c}}function pg(e,t,r,n=!1,i=!1){return{back:e,current:t,forward:r,replaced:n,position:window.history.length,scroll:i?ku():null}}function yD(e){const{history:t,location:r}=window,n={value:M1(e,r)},i={value:t.state};i.value||a(n.value,{back:null,current:n.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(l,u,f){const c=e.indexOf("#"),v=c>-1?(r.host&&document.querySelector("base")?e:e.slice(c))+l:gD()+e+l;try{t[f?"replaceState":"pushState"](u,"",v),i.value=u}catch(h){console.error(h),r[f?"replace":"assign"](v)}}function o(l,u){const f=Lt({},t.state,pg(i.value.back,l,i.value.forward,!0),u,{position:i.value.position});a(l,f,!0),n.value=l}function s(l,u){const f=Lt({},i.value,t.state,{forward:l,scroll:ku()});a(f.current,f,!0);const c=Lt({},pg(n.value,l,null),{position:f.position+1},u);a(l,c,!1),n.value=l}return{location:n,state:i,push:s,replace:o}}function eH(e){e=uD(e);const t=yD(e),r=mD(e,t.state,t.location,t.replace);function n(a,o=!0){o||r.pauseListeners(),history.go(a)}const i=Lt({location:"",base:e,go:n,createHref:cD.bind(nLine truncated
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */var vh=function(e,t){return vh=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[i]=n[i])},vh(e,t)};function J(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");vh(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}var nP=function(){function e(){this.firefox=!1,this.ie=!1,this.edge=!1,this.newEdge=!1,this.weChat=!1}return e}(),iP=function(){function e(){this.browser=new nP,this.node=!1,this.wxa=!1,this.worker=!1,this.svgSupported=!1,this.touchEventsSupported=!1,this.pointerEventsSupported=!1,this.domSupported=!1,this.transformSupported=!1,this.transform3dSupported=!1,this.hasGlobalWindow=typeof window!="undefined"}return e}(),ui=new iP;typeof wx=="object"&&typeof wx.getSystemInfoSync=="function"?(ui.wxa=!0,ui.touchEventsSupported=!0):typeof document=="undefined"&&typeof self!="undefined"?ui.worker=!0:typeof navigator=="undefined"?(ui.node=!0,ui.svgSupported=!0):aP(navigator.userAgent,ui);function aP(e,t){var r=t.browser,n=e.match(/Firefox\/([\d.]+)/),i=e.match(/MSIE\s([\d.]+)/)||e.match(/Trident\/.+?rv:(([\d.]+))/),a=e.match(/Edge?\/([\d.]+)/),o=/micromessenger/i.test(e);n&&(r.firefox=!0,r.version=n[1]),i&&(r.ie=!0,r.version=i[1]),a&&(r.edge=!0,r.version=a[1],r.newEdge=+a[1].split(".")[0]>18),o&&(r.weChat=!0),t.svgSupported=typeof SVGRect!="undefined",t.touchEventsSupported="ontouchstart"in window&&!r.ie&&!r.edge,t.pointerEventsSupported="onpointerdown"in window&&(r.edge||r.ie&&+r.version>=11),t.domSupported=typeof document!="undefined";var s=document.documentElement.style;t.transform3dSupported=(r.ie&&"transition"in s||r.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),t.transformSupported=t.transform3dSupported||r.ie&&+r.version>=9}var wt=ui,ad=12,oP="sans-serif",bi=ad+"px "+oP,sP=20,lP=100,uP="007LLmW'55;N0500LLLLLLLLLL00NNNLzWW\\\\WQb\\0FWLg\\bWb\\WQ\\WrWWQ000CL5LLFLL0LL**F*gLLLL5F0LF\\FFF5.5N";function fP(e){var t={};if(typeof JSON=="undefined")return t;for(var r=0;r<e.length;r++){var n=String.fromCharCode(r+32),i=(e.charCodeAt(r)-sP)/lP;t[n]=i}return t}var cP=fP(uP),Pi={createCanvas:function(){return typeof document!="undefined"&&document.createElement("canvas")},measureText:function(){var e,t;return function(r,n){if(!e){var i=Pi.createCanvas();e=i&&i.getContext("2d")}if(e)return t!==n&&(t=e.font=n||bi),e.measureText(r);r=r||"",n=n||bi;var a=/^([0-9]*?)px$/.exec(n),o=+(a&&a[1])||ad,s=0;if(n.indexOf("mono")>=0)s=o*r.length;else for(var l=0;l<r.length;l++){var u=cP[r[l]];s+=u==null?o:u*o}return{width:s}}}(),loadImage:function(e,t,r){var n=new Image;return n.onload=t,n.onerror=r,n.src=e,n}},k1=Ln(["Function","RegExp","Date","Error","CanvasGradient","CanvasPattern","Image","Canvas"],function(e,t){return e["[object "+t+"]"]=!0,e},{}),N1=Ln(["Int8","Uint8","Uint8Clamped","Int16","Uint16","Int32","Uint32","Float32","Float64"],function(e,t){return e["[object "+t+"Array]"]=!0,e},{}),ps=Object.prototype.toString,Nu=Array.prototype,hP=Nu.forEach,vP=Nu.filter,od=Nu.slice,dP=Nu.map,Cg=function(){}.constructor,Es=Cg?Cg.prototype:null,sd="__proto__",pP=2311;function B1(){return pP++}function ld(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];typeof console!="undefined"&&console.error.apply(console,e)}function xt(e){if(e==null||typeof e!="object")return e;var t=e,r=ps.call(e);if(r==="[object Array]"){if(!Po(e)){t=[];for(var n=0,i=e.length;n<i;n++)t[n]=xt(e[n])}}else if(N1[r]){if(!Po(e)){var a=e.constructor;if(a.from)t=a.from(e);else{t=new a(e.length);for(var n=0,i=e.length;n<i;n++)t[n]=e[n]}}}else if(!k1[r]&&!Po(e)&&!Yl(e)){t={};for(var o in e)e.hasOwnProperty(o)&&o!==sd&&(t[o]=xt(e[o]))}return t}function Dt(e,t,r){if(!st(t)||!st(e))return r?xt(t):e;for(var n in t)if(t.hasOwnProperty(n)&&n!==sd){var i=e[n],a=t[n];st(a)&&st(i)&&!et(a)&&!et(i)&&!Yl(a)&&!Yl(i)&&!Mg(a)&&!Mg(i)&&!Po(a)&&!Po(i)?Dt(i,a,r):(r||!(n in e))&&(e[n]=xt(t[n]))}return e}function Y(e,t){if(Object.assign)Object.assign(e,t);else for(var r in t)t.hasOwnProperty(r)&&r!==sd&&(e[r]=t[r]);return e}function Pt(e,t,r){for(var n=Gt(t),i=0;i<n.length;i++){var a=n[i];(r?t[a]!=null:e[a]==null)&&(e[a]=t[a])}return e}Pi.createCanvas;function It(e,t){if(e){if(e.indexOf)return e.indexOf(t);for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r}return-1}function gP(e,t){var r=e.prototype;function n(){}n.prototype=t.prototype,e.prototype=new n;for(var i in r)r.hasOwnProperty(i)&&(e.prototype[i]=r[i]);e.prototype.constructor=e,e.superClass=t}function Pr(e,t,r){if(e="prototype"in e?e.prototype:e,t="prototype"in t?t.prototype:t,Object.getOwnPropertyNames)for(var n=Object.getOwnPropertyNames(t),i=0;i<n.length;i++){var a=n[i];a!=="constructor"&&(r?t[a]!=null:e[a]==null)&&(e[a]=t[a])}else Pt(Line truncated
`),a=i.length;if(a===1)return Zg(i[0],t,r,n);for(var o=new Ot(0,0,0,0),s=0;s<i.length;s++){var l=Zg(i[s],t,r,n);s===0?o.copy(l):o.union(l)}return o}function po(e,t,r){return r==="right"?e-=t:r==="center"&&(e-=t/2),e}function na(e,t,r){return r==="middle"?e-=t/2:r==="bottom"&&(e-=t),e}function md(e){return Oe("\u56FD",e)}function Rn(e,t){return typeof e=="string"?e.lastIndexOf("%")>=0?parseFloat(e)/100*t:parseFloat(e):e}function aw(e,t,r){var n=t.position||"inside",i=t.distance!=null?t.distance:5,a=r.height,o=r.width,s=a/2,l=r.x,u=r.y,f="left",c="top";if(n instanceof Array)l+=Rn(n[0],r.width),u+=Rn(n[1],r.height),f=null,c=null;else switch(n){case"left":l-=i,u+=s,f="right",c="middle";break;case"right":l+=i+o,u+=s,c="middle";break;case"top":l+=o/2,u-=i,f="center",c="bottom";break;case"bottom":l+=o/2,u+=a+i,f="center";break;case"inside":l+=o/2,u+=s,f="center",c="middle";break;case"insideLeft":l+=i,u+=s,c="middle";break;case"insideRight":l+=o-i,u+=s,f="right",c="middle";break;case"insideTop":l+=o/2,u+=i,f="center";break;case"insideBottom":l+=o/2,u+=a-i,f="center",c="bottom";break;case"insideTopLeft":l+=i,u+=i;break;case"insideTopRight":l+=o-i,u+=i,f="right";break;case"insideBottomLeft":l+=i,u+=a-i,c="bottom";break;case"insideBottomRight":l+=o-i,u+=a-i,f="right",c="bottom";break}return e=e||{},e.x=l,e.y=u,e.align=f,e.verticalAlign=c,e}var $f="__zr_normal__",Vf=Jo.concat(["ignore"]),OI=Ln(Jo,function(e,t){return e[t]=!0,e},{ignore:!1}),Vi={},kI=new Ot(0,0,0,0),yd=function(){function e(t){this.id=B1(),this.animators=[],this.currentStates=[],this.states={},this._init(t)}return e.prototype._init=function(t){this.attr(t)},e.prototype.drift=function(t,r,n){switch(this.draggable){case"horizontal":r=0;break;case"vertical":t=0;break}var i=this.transform;i||(i=this.transform=[1,0,0,1,0,0]),i[4]+=t,i[5]+=r,this.decomposeTransform(),this.markRedraw()},e.prototype.beforeUpdate=function(){},e.prototype.afterUpdate=function(){},e.prototype.update=function(){this.updateTransform(),this.__dirty&&this.updateInnerText()},e.prototype.updateInnerText=function(t){var r=this._textContent;if(r&&(!r.ignore||t)){this.textConfig||(this.textConfig={});var n=this.textConfig,i=n.local,a=r.innerTransformable,o=void 0,s=void 0,l=!1;a.parent=i?this:null;var u=!1;if(a.copyTransform(r),n.position!=null){var f=kI;n.layoutRect?f.copy(n.layoutRect):f.copy(this.getBoundingRect()),i||f.applyTransform(this.transform),this.calculateTextPosition?this.calculateTextPosition(Vi,n,f):aw(Vi,n,f),a.x=Vi.x,a.y=Vi.y,o=Vi.align,s=Vi.verticalAlign;var c=n.origin;if(c&&n.rotation!=null){var v=void 0,h=void 0;c==="center"?(v=f.width*.5,h=f.height*.5):(v=Rn(c[0],f.width),h=Rn(c[1],f.height)),u=!0,a.originX=-a.x+v+(i?0:f.x),a.originY=-a.y+h+(i?0:f.y)}}n.rotation!=null&&(a.rotation=n.rotation);var d=n.offset;d&&(a.x+=d[0],a.y+=d[1],u||(a.originX=-d[0],a.originY=-d[1]));var p=n.inside==null?typeof n.position=="string"&&n.position.indexOf("inside")>=0:n.inside,g=this._innerTextDefaultStyle||(this._innerTextDefaultStyle={}),m=void 0,y=void 0,_=void 0;p&&this.canBeInsideText()?(m=n.insideFill,y=n.insideStroke,(m==null||m==="auto")&&(m=this.getInsideTextFill()),(y==null||y==="auto")&&(y=this.getInsideTextStroke(m),_=!0)):(m=n.outsideFill,y=n.outsideStroke,(m==null||m==="auto")&&(m=this.getOutsideFill()),(y==null||y==="auto")&&(y=this.getOutsideStroke(m),_=!0)),m=m||"#000",(m!==g.fill||y!==g.stroke||_!==g.autoStroke||o!==g.align||s!==g.verticalAlign)&&(l=!0,g.fill=m,g.stroke=y,g.autoStroke=_,g.align=o,g.verticalAlign=s,r.setDefaultTextStyle(g)),r.__dirty|=Le,l&&r.dirtyStyle(!0)}},e.prototype.canBeInsideText=function(){return!0},e.prototype.getInsideTextFill=function(){return"#fff"},e.prototype.getInsideTextStroke=function(t){return"#000"},e.prototype.getOutsideFill=function(){return this.__zr&&this.__zr.isDarkMode()?Eh:Ih},e.prototype.getOutsideStroke=function(t){var r=this.__zr&&this.__zr.getBackgroundColor(),n=typeof r=="string"&&$r(r);n||(n=[255,255,255,1]);for(var i=n[3],a=this.__zr.isDarkMode(),o=0;o<3;o++)n[o]=n[o]*i+(a?0:255)*(1-i);return n[3]=1,zu(n,"rgba")},e.prototype.traverse=function(t,r){},e.prototype.attrKV=function(t,r){t==="textConfig"?this.setTextConfig(r):t==="textContent"?this.setTextContent(r):t==="clipPath"?this.setClipPath(r):t==="extra"?(this.extra=this.extra||{},Y(this.extra,r)):this[t]=r},e.prototype.hide=function(){this.ignore=!0,this.markRedraw()},e.prototype.show=function(){this.ignore=!1,this.markRedraw()},e.prototype.attr=function(t,r){if(typeof t=="string")this.attrKV(t,r);else if(st(t))for(var n=t,i=Gt(n),a=0;a<i.length;a++){var o=i[a];this.attrKV(o,t[o])}return this.markRedraw(),this},e.prototype.saveCurrentToNormalState=function(t){this._innerSaveToNormal(t);for(var r=this._normalState,n=0;n<this.animators.length;n++){var i=this.animators[n],a=i.__fromStateTransition;if(!(i.getLoop()||a&&a!==$f)){var o=i.targetName,s=o?r[o]:r;i.saveTo(s)}}},e.prototype._innerSaveToNormal=function(t){var r=this._normalState;r||(r=this._normalState={}),t.textC Line truncated
* ZRender, a high performance 2d drawing library.
*
* Copyright (c) 2013, Baidu Inc.
* All rights reserved.
*
* LICENSE
* https://github.com/ecomfe/zrender/blob/master/LICENSE.txt
*/var Pl={},uw={};function HI(e){delete uw[e]}function $I(e){if(!e)return!1;if(typeof e=="string")return Jl(e,1)<Ph;if(e.colorStops){for(var t=e.colorStops,r=0,n=t.length,i=0;i<n;i++)r+=Jl(t[i].color,1);return r/=n,r<Ph}return!1}var VI=function(){function e(t,r,n){var i=this;this._sleepAfterStill=10,this._stillFrameAccum=0,this._needsRefresh=!0,this._needsRefreshHover=!0,this._darkMode=!1,n=n||{},this.dom=r,this.id=t;var a=new QP,o=n.renderer||"canvas";Pl[o]||(o=Gt(Pl)[0]),n.useDirtyRect=n.useDirtyRect==null?!1:n.useDirtyRect;var s=new Pl[o](r,a,n,t),l=n.ssr||s.ssrOnly;this.storage=a,this.painter=s;var u=!wt.node&&!wt.worker&&!l?new AI(s.getViewportRoot(),s.root):null;this.handler=new qP(a,s,u,s.root),this.animation=new _I({stage:{update:l?null:function(){return i._flush(!0)}}}),l||this.animation.start()}return e.prototype.add=function(t){!t||(this.storage.addRoot(t),t.addSelfToZr(this),this.refresh())},e.prototype.remove=function(t){!t||(this.storage.delRoot(t),t.removeSelfFromZr(this),this.refresh())},e.prototype.configLayer=function(t,r){this.painter.configLayer&&this.painter.configLayer(t,r),this.refresh()},e.prototype.setBackgroundColor=function(t){this.painter.setBackgroundColor&&this.painter.setBackgroundColor(t),this.refresh(),this._backgroundColor=t,this._darkMode=$I(t)},e.prototype.getBackgroundColor=function(){return this._backgroundColor},e.prototype.setDarkMode=function(t){this._darkMode=t},e.prototype.isDarkMode=function(){return this._darkMode},e.prototype.refreshImmediately=function(t){t||this.animation.update(!0),this._needsRefresh=!1,this.painter.refresh(),this._needsRefresh=!1},e.prototype.refresh=function(){this._needsRefresh=!0,this.animation.start()},e.prototype.flush=function(){this._flush(!1)},e.prototype._flush=function(t){var r,n=oa();this._needsRefresh&&(r=!0,this.refreshImmediately(t)),this._needsRefreshHover&&(r=!0,this.refreshHoverImmediately());var i=oa();r?(this._stillFrameAccum=0,this.trigger("rendered",{elapsedTime:i-n})):this._sleepAfterStill>0&&(this._stillFrameAccum++,this._stillFrameAccum>this._sleepAfterStill&&this.animation.stop())},e.prototype.setSleepAfterStill=function(t){this._sleepAfterStill=t},e.prototype.wakeUp=function(){this.animation.start(),this._stillFrameAccum=0},e.prototype.refreshHover=function(){this._needsRefreshHover=!0},e.prototype.refreshHoverImmediately=function(){this._needsRefreshHover=!1,this.painter.refreshHover&&this.painter.getType()==="canvas"&&this.painter.refreshHover()},e.prototype.resize=function(t){t=t||{},this.painter.resize(t.width,t.height),this.handler.resize()},e.prototype.clearAnimation=function(){this.animation.clear()},e.prototype.getWidth=function(){return this.painter.getWidth()},e.prototype.getHeight=function(){return this.painter.getHeight()},e.prototype.setCursorStyle=function(t){this.handler.setCursorStyle(t)},e.prototype.findHover=function(t,r){return this.handler.findHover(t,r)},e.prototype.on=function(t,r,n){return this.handler.on(t,r,n),this},e.prototype.off=function(t,r){this.handler.off(t,r)},e.prototype.trigger=function(t,r){this.handler.trigger(t,r)},e.prototype.clear=function(){for(var t=this.storage.getRoots(),r=0;r<t.length;r++)t[r]instanceof ye&&t[r].removeSelfFromZr(this);this.storage.delAllRoots(),this.painter.clear()},e.prototype.dispose=function(){this.animation.stop(),this.clear(),this.storage.dispose(),this.painter.dispose(),this.handler.dispose(),this.animation=this.storage=this.painter=this.handler=null,HI(this.id)},e}();function Qg(e,t){var r=new VI(B1(),e,t);return uw[r.id]=r,r}function GI(e,t){Pl[e]=t}var Jg=1e-4,fw=20;function UI(e){return e.replace(/^\s+|\s+$/g,"")}function Rh(e,t,r,n){var i=t[0],a=t[1],o=r[0],s=r[1],l=a-i,u=s-o;if(l===0)return u===0?o:(o+s)/2;if(n)if(l>0){if(e<=i)return o;if(e>=a)return s}else{if(e>=i)return o;if(e<=a)return s}else{if(e===i)return o;if(e===a)return s}return(e-i)/l*u+o}function Vt(e,t){switch(e){case"center":case"middle":e="50%";break;case"left":case"top":e="0%";break;case"right":case"bottom":e="100%";break}return it(e)?UI(e).match(/%$/)?parseFloat(e)/100*t:parseFloat(e):e==null?NaN:+e}function jt(e,t,r){return t==null&&(t=10),t=Math.min(Math.max(0,t),fw),e=(+e).toFixed(t),r?e:+e}function zr(e){if(e=+e,isNaN(e))return 0;if(e>1e-14){for(var t=1,r=0;r<15;r++,t*=10)if(Math.round(e*t)/t===e)return r}return WI(e)}function WI(e){var t=e.toString().toLowerCase(),r=t.indexOf("e"),n=r>0?+t.slice(r+1):0,i=r>0?r:t.length,a=t.indexOf("."),o=a<0?0:i-1-a;return Math.max(0,o-n)}function YI(e,t){var r=Math.log,n=Math.LN10,i=Math.floor(r(e[1]-e[0])/n),a=Math.round(r(Math.abs(t[1]-t[0]))/n),o=Math.min(Math.max(-i+a,0),20);return isFinite(o)?o:20}function qI(e,t,r){if(!e[t])return 0;var n=Ln(e,function(d,p){return d+(isNaN(p)?0:p)},0);if(n===0)return 0;for(var i=Math.pow(10,r),a=ct(e,function(d){return(isNaN(d)?0:d)/n*i*100}),o=i*100,s=ct(a,function(d){return Math.floor(d)}),l=Ln(s,function(d,p){return d+p},0),u=ct(a,function(d,p){return d-s[p]});l<o;){for(var f=Number.NEGATIVE_INFLine truncated
`);i=bw(t,r,n,i);for(var o=0,s=a.length;o<s;o++)a[o]=Sw(a[o],i);return a.join(`
`)}function bw(e,t,r,n){n=n||{};var i=Y({},n);i.font=t,r=Mt(r,"..."),i.maxIterations=Mt(n.maxIterations,2);var a=i.minChar=Mt(n.minChar,0);i.cnCharWidth=Oe("\u56FD",t);var o=i.ascCharWidth=Oe("a",t);i.placeholder=Mt(n.placeholder,"");for(var s=e=Math.max(0,e-1),l=0;l<a&&s>=o;l++)s-=o;var u=Oe(r,t);return u>s&&(r="",u=0),s=e-u,i.ellipsis=r,i.ellipsisWidth=u,i.contentWidth=s,i.containerWidth=e,i}function Sw(e,t){var r=t.containerWidth,n=t.font,i=t.contentWidth;if(!r)return"";var a=Oe(e,n);if(a<=r)return e;for(var o=0;;o++){if(a<=i||o>=t.maxIterations){e+=t.ellipsis;break}var s=o===0?ME(e,i,t.ascCharWidth,t.cnCharWidth):a>0?Math.floor(e.length*i/a):0;e=e.substr(0,s),a=Oe(e,n)}return e===""&&(e=t.placeholder),e}function ME(e,t,r,n){for(var i=0,a=0,o=e.length;a<o&&i<t;a++){var s=e.charCodeAt(a);i+=0<=s&&s<=127?r:n}return a}function AE(e,t){e!=null&&(e+="");var r=t.overflow,n=t.padding,i=t.font,a=r==="truncate",o=md(i),s=Mt(t.lineHeight,o),l=!!t.backgroundColor,u=t.lineOverflow==="truncate",f=t.width,c;f!=null&&(r==="break"||r==="breakAll")?c=e?xw(e,t.font,f,r==="breakAll",0).lines:[]:c=e?e.split(`
`):[];var v=c.length*s,h=Mt(t.height,v);if(v>h&&u){var d=Math.floor(h/s);c=c.slice(0,d)}if(e&&a&&f!=null)for(var p=bw(f,i,t.ellipsis,{minChar:t.truncateMinChar,placeholder:t.placeholder}),g=0;g<c.length;g++)c[g]=Sw(c[g],p);for(var m=h,y=0,g=0;g<c.length;g++)y=Math.max(Oe(c[g],i),y);f==null&&(f=y);var _=y;return n&&(m+=n[0]+n[2],_+=n[1]+n[3],f+=n[1]+n[3]),l&&(_=f),{lines:c,height:h,outerWidth:_,outerHeight:m,lineHeight:s,calculatedLineHeight:o,contentWidth:y,contentHeight:v,width:f}}var DE=function(){function e(){}return e}(),im=function(){function e(t){this.tokens=[],t&&(this.tokens=t)}return e}(),PE=function(){function e(){this.width=0,this.height=0,this.contentWidth=0,this.contentHeight=0,this.outerWidth=0,this.outerHeight=0,this.lines=[]}return e}();function IE(e,t){var r=new PE;if(e!=null&&(e+=""),!e)return r;for(var n=t.width,i=t.height,a=t.overflow,o=(a==="break"||a==="breakAll")&&n!=null?{width:n,accumWidth:0,breakAll:a==="breakAll"}:null,s=Yf.lastIndex=0,l;(l=Yf.exec(e))!=null;){var u=l.index;u>s&&qf(r,e.substring(s,u),t,o),qf(r,l[2],t,o,l[1]),s=Yf.lastIndex}s<e.length&&qf(r,e.substring(s,e.length),t,o);var f=[],c=0,v=0,h=t.padding,d=a==="truncate",p=t.lineOverflow==="truncate";function g(V,K,lt){V.width=K,V.lineHeight=lt,c+=lt,v=Math.max(v,K)}t:for(var m=0;m<r.lines.length;m++){for(var y=r.lines[m],_=0,w=0,S=0;S<y.tokens.length;S++){var b=y.tokens[S],x=b.styleName&&t.rich[b.styleName]||{},T=b.textPadding=x.padding,C=T?T[1]+T[3]:0,D=b.font=x.font||t.font;b.contentHeight=md(D);var P=Mt(x.height,b.contentHeight);if(b.innerHeight=P,T&&(P+=T[0]+T[2]),b.height=P,b.lineHeight=Do(x.lineHeight,t.lineHeight,P),b.align=x&&x.align||t.align,b.verticalAlign=x&&x.verticalAlign||"middle",p&&i!=null&&c+b.lineHeight>i){S>0?(y.tokens=y.tokens.slice(0,S),g(y,w,_),r.lines=r.lines.slice(0,m+1)):r.lines=r.lines.slice(0,m);break t}var A=x.width,L=A==null||A==="auto";if(typeof A=="string"&&A.charAt(A.length-1)==="%")b.percentWidth=A,f.push(b),b.contentWidth=Oe(b.text,D);else{if(L){var O=x.backgroundColor,z=O&&O.image;z&&(z=TE(z),$u(z)&&(b.width=Math.max(b.width,z.width*P/z.height)))}var N=d&&n!=null?n-w:null;N!=null&&N<b.width?!L||N<C?(b.text="",b.width=b.contentWidth=0):(b.text=CE(b.text,N-C,D,t.ellipsis,{minChar:t.truncateMinChar}),b.width=b.contentWidth=Oe(b.text,D)):b.contentWidth=Oe(b.text,D)}b.width+=C,w+=b.width,x&&(_=Math.max(_,b.lineHeight))}g(y,w,_)}r.outerWidth=r.width=Mt(n,v),r.outerHeight=r.height=Mt(i,c),r.contentHeight=c,r.contentWidth=v,h&&(r.outerWidth+=h[1]+h[3],r.outerHeight+=h[0]+h[2]);for(var m=0;m<f.length;m++){var b=f[m],tt=b.percentWidth;b.width=parseInt(tt,10)/100*r.width}return r}function qf(e,t,r,n,i){var a=t==="",o=i&&r.rich[i]||{},s=e.lines,l=o.font||r.font,u=!1,f,c;if(n){var v=o.padding,h=v?v[1]+v[3]:0;if(o.width!=null&&o.width!=="auto"){var d=Rn(o.width,n.width)+h;s.length>0&&d+n.accumWidth>n.width&&(f=t.split(`
`),u=!0),n.accumWidth=d}else{var p=xw(t,l,n.width,n.breakAll,n.accumWidth);n.accumWidth=p.accumWidth+h,c=p.linesWidths,f=p.lines}}else f=t.split(`
`);for(var g=0;g<f.length;g++){var m=f[g],y=new DE;if(y.styleName=i,y.text=m,y.isLineHolder=!m&&!a,typeof o.width=="number"?y.width=o.width:y.width=c?c[g]:Oe(m,l),!g&&!u){var _=(s[s.length-1]||(s[0]=new im)).tokens,w=_.length;w===1&&_[0].isLineHolder?_[0]=y:(m||!w||a)&&_.push(y)}else s.push(new im([y]))}}function EE(e){var t=e.charCodeAt(0);return t>=33&&t<=383}var LE=Ln(",&?/;] ".split(""),function(e,t){return e[t]=!0,e},{});function RE(e){return EE(e)?!!LE[e]:!0}function xw(e,t,r,n,i){for(var a=[],o=[],s="",l="",u=0,f=0,c=0;c<e.length;c++){var v=e.charAt(c);if(v===`
`){l&&(s+=l,f+=u),a.push(s),o.push(f),s="",l="",u=0,f=0;continue}var h=Oe(v,t),d=n?!1:!RE(v);if(a.length?f+h>r:i+f+h>r){f?(s||l)&&(d?(s||(s=l,l="",u=0,f=u),a.push(s),o.push(f-u),l+=v,u+=h,s="",f=u):(l&&(s+=l,l="",u=0),a.push(s),o.push(f),s=v,f=h)):d?(a.push(l),o.push(u),l=v,u=h):(a.push(v),o.push(h));continue}f+=h,d?(l+=v,u+=h):(l&&(s+=l,l="",u=0),s+=v)}return!a.length&&!s&&(s=e,l="",u=0),l&&(s+=l),s&&(a.push(s),o.push(f)),a.length===1&&(f+=i),{accumWidth:f,lines:a,linesWidths:o}}var Nh="__zr_style_"+Math.round(Math.random()*10),gi={shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"#000",opacity:1,blend:"source-over"},Vu={style:{shadowBlur:!0,shadowOffsetX:!0,shadowOffsetY:!0,shadowColor:!0,opacity:!0}};gi[Nh]=!0;var am=["z","z2","invisible"],OE=["invisible"],kE=function(e){J(t,e);function t(r){return e.call(this,r)||this}return t.prototype._init=function(r){for(var n=Gt(r),i=0;i<n.length;i++){var a=n[i];a==="style"?this.useStyle(r[a]):e.prototype.attrKV.call(this,a,r[a])}this.style||this.useStyle({})},t.prototype.beforeBrush=function(){},t.prototype.afterBrush=function(){},t.prototype.innerBeforeBrush=function(){},t.prototype.innerAfterBrush=function(){},t.prototype.shouldBePainted=function(r,n,i,a){var o=this.transform;if(this.ignore||this.invisible||this.style.opacity===0||this.culling&&NE(this,r,n)||o&&!o[0]&&!o[3])return!1;if(i&&this.__clipPaths){for(var s=0;s<this.__clipPaths.length;++s)if(this.__clipPaths[s].isZeroArea())return!1}if(a&&this.parent)for(var l=this.parent;l;){if(l.ignore)return!1;l=l.parent}return!0},t.prototype.contain=function(r,n){return this.rectContain(r,n)},t.prototype.traverse=function(r,n){r.call(n,this)},t.prototype.rectContain=function(r,n){var i=this.transformCoordToLocal(r,n),a=this.getBoundingRect();return a.contain(i[0],i[1])},t.prototype.getPaintRect=function(){var r=this._paintRect;if(!this._paintRect||this.__dirty){var n=this.transform,i=this.getBoundingRect(),a=this.style,o=a.shadowBlur||0,s=a.shadowOffsetX||0,l=a.shadowOffsetY||0;r=this._paintRect||(this._paintRect=new Ot(0,0,0,0)),n?Ot.applyTransform(r,i,n):r.copy(i),(o||s||l)&&(r.width+=o*2+Math.abs(s),r.height+=o*2+Math.abs(l),r.x=Math.min(r.x,r.x+s-o),r.y=Math.min(r.y,r.y+l-o));var u=this.dirtyRectTolerance;r.isZero()||(r.x=Math.floor(r.x-u),r.y=Math.floor(r.y-u),r.width=Math.ceil(r.width+1+u*2),r.height=Math.ceil(r.height+1+u*2))}return r},t.prototype.setPrevPaintRect=function(r){r?(this._prevPaintRect=this._prevPaintRect||new Ot(0,0,0,0),this._prevPaintRect.copy(r)):this._prevPaintRect=null},t.prototype.getPrevPaintRect=function(){return this._prevPaintRect},t.prototype.animateStyle=function(r){return this.animate("style",r)},t.prototype.updateDuringAnimation=function(r){r==="style"?this.dirtyStyle():this.markRedraw()},t.prototype.attrKV=function(r,n){r!=="style"?e.prototype.attrKV.call(this,r,n):this.style?this.setStyle(n):this.useStyle(n)},t.prototype.setStyle=function(r,n){return typeof r=="string"?this.style[r]=n:Y(this.style,r),this.dirtyStyle(),this},t.prototype.dirtyStyle=function(r){r||this.markRedraw(),this.__dirty|=ho,this._rect&&(this._rect=null)},t.prototype.dirty=function(){this.dirtyStyle()},t.prototype.styleChanged=function(){return!!(this.__dirty&ho)},t.prototype.styleUpdated=function(){this.__dirty&=~ho},t.prototype.createStyle=function(r){return Fu(gi,r)},t.prototype.useStyle=function(r){r[Nh]||(r=this.createStyle(r)),this.__inHover?this.__hoverStyle=r:this.style=r,this.dirtyStyle()},t.prototype.isStyleObject=function(r){return r[Nh]},t.prototype._innerSaveToNormal=function(r){e.prototype._innerSaveToNormal.call(this,r);var n=this._normalState;r.style&&!n.style&&(n.style=this._mergeStyle(this.createStyle(),this.style)),this._savePrimaryToNormal(r,n,am)},t.prototype._applyStateObj=function(r,n,i,a,o,s){e.prototype._applyStateObj.call(this,r,n,i,a,o,s);var l=!(n&&a),u;if(n&&n.style?o?a?u=n.style:(u=this._mergeStyle(this.createStyle(),i.style),this._mergeStyle(u,n.style)):(u=this._mergeStyle(this.createStyle(),a?this.style:i.style),this._mergeStyle(u,n.style)):l&&(u=i.style),u)if(o){var f=this.style;if(this.style=this.createStyle(l?{}:f),l)for(var c=Gt(f),v=0;v<c.length;v++){var h=c[v];h in u&&(u[h]=u[h],this.style[h]=f[h])}for(var d=Gt(u),v=0;v<d.length;v++){var h=d[v];this.style[h]=this.style[h]}this._transitionState(r,{style:u},s,this.getAnimationStyleProps())}else this.useStyle(u);for(var p=this.__inHover?OE:am,v=0;v<p.length;v++){var h=p[v];n&&n[h]!=null?this[h]=n[h]:l&&i[h]!=null&&(this[h]=i[h])}},t.prototype._mergeStates=function(r){for(var n=e.prototype._mergeStates.call(this,r),i,a=0;a<r.length;a++){var o=r[a];o.style&&(i=i||{},this._mergeStyle(i,o.style))}return i&&(n.style=i),n},t.prototype._mergeStyle=function(r,n){return Y(r,n),r},t.prototype.getAnimationStyleProps=function(){return Vu},t.initDefaultProps=function(){var r=t.prototype;r.type="displayable",r.invisible=!1,r.z=0,r.z2=0,r.zlevel=0,r.culling=!1,r.cursor="pointer",r.rectHover=!1,r.incremental=!1,r._rect=null,r.dirty Line truncated
`,`
`,`
`];function os(e,t){return t.type=e,t}function Kh(e){return e.type==="section"}function Jb(e){return Kh(e)?vO:dO}function tS(e){if(Kh(e)){var t=0,r=e.blocks.length,n=r>1||r>0&&!e.noHeader;return I(e.blocks,function(i){var a=tS(i);a>=t&&(t=a+ +(n&&(!a||Kh(i)&&!i.noHeader)))}),t}return 0}function vO(e,t,r,n){var i=t.noHeader,a=pO(tS(t)),o=[],s=t.blocks||[];Wr(!s||et(s)),s=s||[];var l=e.orderMode;if(t.sortBlocks&&l){s=s.slice();var u={valueAsc:"asc",valueDesc:"desc"};if(Ca(u,l)){var f=new ZR(u[l],null);s.sort(function(d,p){return f.evaluate(d.sortParam,p.sortParam)})}else l==="seriesDesc"&&s.reverse()}I(s,function(d,p){var g=t.valueFormatter,m=Jb(d)(g?Y(Y({},e),{valueFormatter:g}):e,d,p>0?a.html:0,n);m!=null&&o.push(m)});var c=e.renderMode==="richText"?o.join(a.richText):Zh(o.join(""),i?r:a.html);if(i)return c;var v=qh(t.header,"ordinal",e.useUTC),h=Qb(n,e.renderMode).nameStyle;return e.renderMode==="richText"?eS(e,v,h)+a.richText+c:Zh('<div style="'+h+";"+Zb+';">'+Ke(v)+"</div>"+c,r)}function dO(e,t,r,n){var i=e.renderMode,a=t.noName,o=t.noValue,s=!t.markerType,l=t.name,u=e.useUTC,f=t.valueFormatter||e.valueFormatter||function(w){return w=et(w)?w:[w],ct(w,function(S,b){return qh(S,et(h)?h[b]:h,u)})};if(!(a&&o)){var c=s?"":e.markupStyleCreator.makeTooltipMarker(t.markerType,t.markerColor||"#333",i),v=a?"":qh(l,"ordinal",u),h=t.valueType,d=o?[]:f(t.value),p=!s||!a,g=!s&&a,m=Qb(n,i),y=m.nameStyle,_=m.valueStyle;return i==="richText"?(s?"":c)+(a?"":eS(e,v,y))+(o?"":yO(e,d,p,g,_)):Zh((s?"":c)+(a?"":gO(v,!s,y))+(o?"":mO(d,p,g,_)),r)}}function yy(e,t,r,n,i,a){if(!!e){var o=Jb(e),s={useUTC:i,renderMode:r,orderMode:n,markupStyleCreator:t,valueFormatter:e.valueFormatter};return o(s,e,0,a)}}function pO(e){return{html:cO[e],richText:hO[e]}}function Zh(e,t){var r='<div style="clear:both"></div>',n="margin: "+t+"px 0 0";return'<div style="'+n+";"+Zb+';">'+e+r+"</div>"}function gO(e,t,r){var n=t?"margin-left:2px":"";return'<span style="'+r+";"+n+'">'+Ke(e)+"</span>"}function mO(e,t,r,n){var i=r?"10px":"20px",a=t?"float:right;margin-left:"+i:"";return e=et(e)?e:[e],'<span style="'+a+";"+n+'">'+ct(e,function(o){return Ke(o)}).join("&nbsp;&nbsp;")+"</span>"}function eS(e,t,r){return e.markupStyleCreator.wrapRichTextStyle(t,r)}function yO(e,t,r,n,i){var a=[i],o=n?10:20;return r&&a.push({padding:[0,0,0,o],align:"right"}),e.markupStyleCreator.wrapRichTextStyle(et(t)?t.join(" "):t,a)}function _O(e,t){var r=e.getData().getItemVisual(t,"style"),n=r[e.visualDrawType];return Ti(n)}function rS(e,t){var r=e.get("padding");return r!=null?r:t==="richText"?[8,10]:10}var mc=function(){function e(){this.richTextStyles={},this._nextStyleNameId=vw()}return e.prototype._generateStyleName=function(){return"__EC_aUTo_"+this._nextStyleNameId++},e.prototype.makeTooltipMarker=function(t,r,n){var i=n==="richText"?this._generateStyleName():null,a=aR({color:r,type:t,renderMode:n,markerId:i});return it(a)?a:(this.richTextStyles[i]=a.style,a.content)},e.prototype.wrapRichTextStyle=function(t,r){var n={};et(r)?I(r,function(a){return Y(n,a)}):Y(n,r);var i=this._generateStyleName();return this.richTextStyles[i]=n,"{"+i+"|"+t+"}"},e}();function wO(e){var t=e.series,r=e.dataIndex,n=e.multipleSeries,i=t.getData(),a=i.mapDimensionsAll("defaultedTooltip"),o=a.length,s=t.getRawValue(r),l=et(s),u=_O(t,r),f,c,v,h;if(o>1||l&&!o){var d=bO(s,t,r,a,u);f=d.inlineValues,c=d.inlineValueTypes,v=d.blocks,h=d.inlineValues[0]}else if(o){var p=i.getDimensionInfo(a[0]);h=f=Da(i,r,a[0]),c=p.type}else h=f=l?s[0]:s;var g=wd(t),m=g&&t.name||"",y=i.getName(r),_=n?m:y;return os("section",{header:m,noHeader:n||!g,sortParam:h,blocks:[os("nameValue",{markerType:"item",markerColor:u,name:_,noName:!Tr(_),value:f,valueType:c})].concat(v||[])})}function bO(e,t,r,n,i){var a=t.getData(),o=Ln(e,function(c,v,h){var d=a.getDimensionInfo(h);return c=c||d&&d.tooltip!==!1&&d.displayName!=null},!1),s=[],l=[],u=[];n.length?I(n,function(c){f(Da(a,r,c),c)}):I(e,f);function f(c,v){var h=a.getDimensionInfo(v);!h||h.otherDims.tooltip===!1||(o?u.push(os("nameValue",{markerType:"subItem",markerColor:i,name:h.displayName,value:c,valueType:h.type})):(s.push(c),l.push(h.type)))}return{inlineValues:s,inlineValueTypes:l,blocks:u}}var an=Qt();function tl(e,t){return e.getName(t)||e.getId(t)}var SO="__universalTransitionEnabled",sf=function(e){J(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r._selectedDataIndicesMap={},r}return t.prototype.init=function(r,n,i){this.seriesIndex=this.componentIndex,this.dataTask=Bo({count:TO,reset:CO}),this.dataTask.context={model:this},this.mergeDefaultAndTheme(r,i);var a=an(this).sourceManager=new fO(this);a.prepareSource();var o=this.getInitialData(r,i);wy(o,this),this.dataTask.context.data=o,an(this).dataBeforeProcessed=o,_y(this),this._initSelectedMapFromData(o)},t.prototype.mergeDefaultAndTheme=function(r,n){var i=is(this),a=i?nf(r):{},o=this.subType;$t.hasClass(o)&&(o+="Series"),Dt(r,n.getTheme().get(this.subType)),Dt(r,this.getDefaultOption()),Oh(r Line truncated
`:"<br/>",m=c.join(g);this._showOrMove(s,function(){this._updateContentNotChangedOnAxis(r,u)?this._updatePosition(s,h,o[0],o[1],this._tooltipContent,u):this._showTooltipContent(s,m,u,Math.random()+"",o[0],o[1],h,null,v)})},t.prototype._showSeriesItemTooltip=function(r,n,i){var a=this._ecModel,o=Nt(n),s=o.seriesIndex,l=a.getSeriesByIndex(s),u=o.dataModel||l,f=o.dataIndex,c=o.dataType,v=u.getData(c),h=this._renderMode,d=r.positionDefault,p=lo([v.getItemModel(f),u,l&&(l.coordinateSystem||{}).model],this._tooltipModel,d?{position:d}:null),g=p.get("trigger");if(!(g!=null&&g!=="item")){var m=u.getDataParams(f,c),y=new mc;m.marker=y.makeTooltipMarker("item",Ti(m.color),h);var _=vy(u.formatTooltip(f,!1,c)),w=p.get("order"),S=p.get("valueFormatter"),b=_.frag,x=b?yy(S?Y({valueFormatter:S},b):b,y,h,w,a.get("useUTC"),p.get("textStyle")):_.text,T="item_"+u.name+"_"+f;this._showOrMove(p,function(){this._showTooltipContent(p,x,m,T,r.offsetX,r.offsetY,r.position,r.target,y)}),i({type:"showTip",dataIndexInside:f,dataIndex:v.getRawIndex(f),seriesIndex:s,from:this.uid})}},t.prototype._showComponentItemTooltip=function(r,n,i){var a=Nt(n),o=a.tooltipConfig,s=o.option||{};if(it(s)){var l=s;s={content:l,formatter:l}}var u=[s],f=this._ecModel.getComponent(a.componentMainType,a.componentIndex);f&&u.push(f),u.push({formatter:s.content});var c=r.positionDefault,v=lo(u,this._tooltipModel,c?{position:c}:null),h=v.get("content"),d=Math.random()+"",p=new mc;this._showOrMove(v,function(){var g=xt(v.get("formatterParams")||{});this._showTooltipContent(v,h,g,d,r.offsetX,r.offsetY,r.position,n,p)}),i({type:"showTip",from:this.uid})},t.prototype._showTooltipContent=function(r,n,i,a,o,s,l,u,f){if(this._ticket="",!(!r.get("showContent")||!r.get("show"))){var c=this._tooltipContent;c.setEnterable(r.get("enterable"));var v=r.get("formatter");l=l||r.get("position");var h=n,d=this._getNearestPoint([o,s],i,r.get("trigger"),r.get("borderColor")),p=d.color;if(v)if(it(v)){var g=r.ecModel.get("useUTC"),m=et(i)?i[0]:i,y=m&&m.axisType&&m.axisType.indexOf("time")>=0;h=v,y&&(h=Zu(m.axisValue,h,g)),h=Ib(h,i,!0)}else if(mt(v)){var _=Ft(function(w,S){w===this._ticket&&(c.setContent(S,f,r,p,l),this._updatePosition(r,l,o,s,c,i,u))},this);this._ticket=a,h=v(i,a,_)}else h=v;c.setContent(h,f,r,p,l),c.show(r,p),this._updatePosition(r,l,o,s,c,i,u)}},t.prototype._getNearestPoint=function(r,n,i,a){if(i==="axis"||et(n))return{color:a||(this._renderMode==="html"?"#fff":"none")};if(!et(n))return{color:a||n.color||n.borderColor}},t.prototype._updatePosition=function(r,n,i,a,o,s,l){var u=this._api.getWidth(),f=this._api.getHeight();n=n||r.get("position");var c=o.getSize(),v=r.get("align"),h=r.get("verticalAlign"),d=l&&l.getBoundingRect().clone();if(l&&d.applyTransform(l.transform),mt(n)&&(n=n([i,a],s,o.el,d,{viewSize:[u,f],contentSize:c.slice()})),et(n))i=Vt(n[0],u),a=Vt(n[1],f);else if(st(n)){var p=n;p.width=c[0],p.height=c[1];var g=Ma(p,{width:u,height:f});i=g.x,a=g.y,v=null,h=null}else if(it(n)&&l){var m=p5(n,d,c,r.get("borderWidth"));i=m[0],a=m[1]}else{var m=v5(i,a,o,u,f,v?null:20,h?null:20);i=m[0],a=m[1]}if(v&&(i-=B0(v)?c[0]/2:v==="right"?c[0]:0),h&&(a-=B0(h)?c[1]/2:h==="bottom"?c[1]:0),xx(r)){var m=d5(i,a,o,u,f);i=m[0],a=m[1]}o.moveTo(i,a)},t.prototype._updateContentNotChangedOnAxis=function(r,n){var i=this._lastDataByCoordSys,a=this._cbParamsList,o=!!i&&i.length===r.length;return o&&I(i,function(s,l){var u=s.dataByAxis||[],f=r[l]||{},c=f.dataByAxis||[];o=o&&u.length===c.length,o&&I(u,function(v,h){var d=c[h]||{},p=v.seriesDataIndices||[],g=d.seriesDataIndices||[];o=o&&v.value===d.value&&v.axisType===d.axisType&&v.axisId===d.axisId&&p.length===g.length,o&&I(p,function(m,y){var _=g[y];o=o&&m.seriesIndex===_.seriesIndex&&m.dataIndex===_.dataIndex}),a&&I(v.seriesDataIndices,function(m){var y=m.seriesIndex,_=n[y],w=a[y];_&&w&&w.data!==_.data&&(o=!1)})})}),this._lastDataByCoordSys=r,this._cbParamsList=n,!!o},t.prototype._hide=function(r){this._lastDataByCoordSys=null,r({type:"hideTip",from:this.uid})},t.prototype.dispose=function(r,n){wt.node||!n.getDom()||(Jh(this,"_updatePosition"),this._tooltipContent.dispose(),dv("itemTooltip",n))},t.type="tooltip",t}(qr);function lo(e,t,r){var n=t.ecModel,i;r?(i=new ce(r,n,n),i=new ce(t.option,i,n)):i=t;for(var a=e.length-1;a>=0;a--){var o=e[a];o&&(o instanceof ce&&(o=o.get("tooltip",!0)),it(o)&&(o={formatter:o}),o&&(i=new ce(o,i,n)))}return i}function N0(e,t){return e.dispatchAction||Ft(t.dispatchAction,t)}function v5(e,t,r,n,i,a,o){var s=r.getSize(),l=s[0],u=s[1];return a!=null&&(e+l+a+2>n?e-=l+a:e+=a),o!=null&&(t+u+o>i?t-=u+o:t+=o),[e,t]}function d5(e,t,r,n,i){var a=r.getSize(),o=a[0],s=a[1];return e=Math.min(e+o,n)-o,t=Math.min(t+s,i)-s,e=Math.max(e,0),t=Math.max(t,0),[e,t]}function p5(e,t,r,n){var i=r[0],a=r[1],o=Math.ceil(Math.SQRT2*n)+8,s=0,l=0,u=t.width,f=t.height;switch(e){case"inside":s=t.x+u/2-i/2,l=t.y+f/2-a/2;break;case"top":s=t.x+u/2-i/2,l=t.y-a-o;break;case"bottom":s=t.x+u/2-i/2,l=t.y+f+o;break;case"left":s=t.x-i-o,l=t Line truncated
`)){var g=new vl;g.newline=!0,u.add(g);return}var m=i.getSeriesByName(p)[0];if(!f.get(p))if(m){var y=m.getData(),_=y.getVisual("legendLineStyle")||{},w=y.getVisual("legendIcon"),S=y.getVisual("style"),b=this._createItem(m,p,d,h,n,r,_,S,w,c);b.on("click",Qi(H0,p,null,a,v)).on("mouseover",Qi(mv,m.name,null,a,v)).on("mouseout",Qi(yv,m.name,null,a,v)),f.set(p,!0)}else i.eachRawSeries(function(x){if(!f.get(p)&&x.legendVisualProvider){var T=x.legendVisualProvider;if(!T.containName(p))return;var C=T.indexOfName(p),D=T.getItemVisual(C,"style"),P=T.getItemVisual(C,"legendIcon"),A=$r(D.fill);A&&A[3]===0&&(A[3]=.2,D=Y(Y({},D),{fill:zu(A,"rgba")}));var L=this._createItem(x,p,d,h,n,r,{},D,P,c);L.on("click",Qi(H0,null,p,a,v)).on("mouseover",Qi(mv,null,p,a,v)).on("mouseout",Qi(yv,null,p,a,v)),f.set(p,!0)}},this)},this),o&&this._createSelector(o,n,a,s,l)},t.prototype._createSelector=function(r,n,i,a,o){var s=this.getSelectorGroup();gv(r,function(u){var f=u.type,c=new he({style:{x:0,y:0,align:"center",verticalAlign:"middle"},onclick:function(){i.dispatchAction({type:f==="all"?"legendAllSelect":"legendInverseSelect"})}});s.add(c);var v=n.getModel("selectorLabel"),h=n.getModel(["emphasis","selectorLabel"]);Xu(c,{normal:v,emphasis:h},{defaultText:u.title}),$h(c)})},t.prototype._createItem=function(r,n,i,a,o,s,l,u,f,c){var v=r.visualDrawType,h=o.get("itemWidth"),d=o.get("itemHeight"),p=o.isSelected(n),g=a.get("symbolRotate"),m=a.get("symbolKeepAspect"),y=a.get("icon");f=y||f||"roundRect";var _=P5(f,a,l,u,v,p),w=new vl,S=a.getModel("textStyle");if(mt(r.getLegendIcon)&&(!y||y==="inherit"))w.add(r.getLegendIcon({itemWidth:h,itemHeight:d,icon:f,iconRotate:g,itemStyle:_.itemStyle,lineStyle:_.lineStyle,symbolKeepAspect:m}));else{var b=y==="inherit"&&r.getData().getVisual("symbol")?g==="inherit"?r.getData().getVisual("symbolRotate"):g:0;w.add(I5({itemWidth:h,itemHeight:d,icon:f,iconRotate:b,itemStyle:_.itemStyle,lineStyle:_.lineStyle,symbolKeepAspect:m}))}var x=s==="left"?h+5:-5,T=s,C=o.get("formatter"),D=n;it(C)&&C?D=C.replace("{name}",n!=null?n:""):mt(C)&&(D=C(n));var P=a.get("inactiveColor");w.add(new he({style:kn(S,{text:D,x,y:d/2,fill:p?S.getTextColor():P,align:T,verticalAlign:"middle"})}));var A=new ne({shape:w.getBoundingRect(),invisible:!0}),L=a.getModel("tooltip");return L.get("show")&&Rd({el:A,componentModel:o,itemName:n,itemTooltipOption:L.option}),w.add(A),w.eachChild(function(O){O.silent=!0}),A.silent=!c,this.getContentGroup().add(w),$h(w),w.__legendDataIndex=i,w},t.prototype.layoutInner=function(r,n,i,a,o,s){var l=this.getContentGroup(),u=this.getSelectorGroup();No(r.get("orient"),l,r.get("itemGap"),i.width,i.height);var f=l.getBoundingRect(),c=[-f.x,-f.y];if(u.markRedraw(),l.markRedraw(),o){No("horizontal",u,r.get("selectorItemGap",!0));var v=u.getBoundingRect(),h=[-v.x,-v.y],d=r.get("selectorButtonGap",!0),p=r.getOrient().index,g=p===0?"width":"height",m=p===0?"height":"width",y=p===0?"y":"x";s==="end"?h[p]+=f[g]+d:c[p]+=v[g]+d,h[1-p]+=f[m]/2-v[m]/2,u.x=h[0],u.y=h[1],l.x=c[0],l.y=c[1];var _={x:0,y:0};return _[g]=f[g]+d+v[g],_[m]=Math.max(f[m],v[m]),_[y]=Math.min(0,v[y]+h[1-p]),_}else return l.x=c[0],l.y=c[1],this.group.getBoundingRect()},t.prototype.remove=function(){this.getContentGroup().removeAll(),this._isFirstRender=!0},t.type="legend.plain",t}(qr);function P5(e,t,r,n,i,a){function o(d,p){d.lineWidth==="auto"&&(d.lineWidth=p.lineWidth>0?2:0),gv(d,function(g,m){d[m]==="inherit"&&(d[m]=p[m])})}var s=t.getModel("itemStyle"),l=s.getItemStyle(),u=e.lastIndexOf("empty",0)===0?"fill":"stroke";l.decal=n.decal,l.fill==="inherit"&&(l.fill=n[i]),l.stroke==="inherit"&&(l.stroke=n[u]),l.opacity==="inherit"&&(l.opacity=(i==="fill"?n:r).opacity),o(l,n);var f=t.getModel("lineStyle"),c=f.getLineStyle();if(o(c,r),l.fill==="auto"&&(l.fill=n.fill),l.stroke==="auto"&&(l.stroke=n.fill),c.stroke==="auto"&&(c.stroke=n.fill),!a){var v=t.get("inactiveBorderWidth"),h=l[u];l.lineWidth=v==="auto"?n.lineWidth>0&&h?2:0:l.lineWidth,l.fill=t.get("inactiveColor"),l.stroke=t.get("inactiveBorderColor"),c.stroke=f.get("inactiveColor"),c.lineWidth=f.get("inactiveWidth")}return{itemStyle:l,lineStyle:c}}function I5(e){var t=e.icon||"roundRect",r=Ia(t,0,0,e.itemWidth,e.itemHeight,e.itemStyle.fill,e.symbolKeepAspect);return r.setStyle(e.itemStyle),r.rotation=(e.iconRotate||0)*Math.PI/180,r.setOrigin([e.itemWidth/2,e.itemHeight/2]),t.indexOf("empty")>-1&&(r.style.stroke=r.style.fill,r.style.fill="#fff",r.style.lineWidth=2),r}function H0(e,t,r,n){yv(e,t,r,n),r.dispatchAction({type:"legendToggleSelect",name:e!=null?e:t}),mv(e,t,r,n)}function Dx(e){for(var t=e.getZr().storage.getDisplayList(),r,n=0,i=t.length;n<i&&!(r=t[n].states.emphasis);)n++;return r&&r.hoverLayer}function mv(e,t,r,n){Dx(r)||r.dispatchAction({type:"highlight",seriesName:e,name:t,excludeSeriesId:n})}function yv(e,t,r,n){Dx(r)||r.dispatchAction({type:"downplay",seriesName:e,name:t,excludeSeriesId:n})}var Px=D5;function E5(e){var t=e.findComponents({mainType:"legend"});t&&t.length&&e.filterS Line truncated
`||u==="")){var f=o.isSelected(u);n.hasOwnProperty(u)?n[u]=n[u]&&f:n[u]=f}})}),e==="allSelect"||e==="inverseSelect"?{selected:n}:{name:t.name,selected:n}}function L5(e){e.registerAction("legendToggleSelect","legendselectchanged",Xt(uo,"toggleSelected")),e.registerAction("legendAllSelect","legendselectall",Xt(uo,"allSelect")),e.registerAction("legendInverseSelect","legendinverseselect",Xt(uo,"inverseSelect")),e.registerAction("legendSelect","legendselected",Xt(uo,"select")),e.registerAction("legendUnSelect","legendunselected",Xt(uo,"unSelect"))}function Ix(e){e.registerComponentModel(pv),e.registerComponentView(Px),e.registerProcessor(e.PRIORITY.PROCESSOR.SERIES_FILTER,E5),e.registerSubTypeDefaulter("legend",function(){return"plain"}),L5(e)}var R5=function(e){J(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r}return t.prototype.setScrollDataIndex=function(r){this.option.scrollDataIndex=r},t.prototype.init=function(r,n,i){var a=nf(r);e.prototype.init.call(this,r,n,i),$0(this,r,a)},t.prototype.mergeOption=function(r,n){e.prototype.mergeOption.call(this,r,n),$0(this,this.option,r)},t.type="legend.scroll",t.defaultOption=q2(pv.defaultOption,{scrollDataIndex:0,pageButtonItemGap:5,pageButtonGap:null,pageButtonPosition:"end",pageFormatter:"{current}/{total}",pageIcons:{horizontal:["M0,0L12,-10L12,10z","M0,0L-12,-10L-12,10z"],vertical:["M0,0L20,0L10,-20z","M0,0L20,0L10,20z"]},pageIconColor:"#2f4554",pageIconInactiveColor:"#aaa",pageIconSize:15,pageTextStyle:{color:"#333"},animationDurationUpdate:800}),t}(pv);function $0(e,t,r){var n=e.getOrient(),i=[1,1];i[n.index]=0,Aa(t,r,{type:"box",ignoreSize:!!i})}var O5=R5,V0=ye,Nc=["width","height"],Bc=["x","y"],k5=function(e){J(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r.newlineDisabled=!0,r._currentIndex=0,r}return t.prototype.init=function(){e.prototype.init.call(this),this.group.add(this._containerGroup=new V0),this._containerGroup.add(this.getContentGroup()),this.group.add(this._controllerGroup=new V0)},t.prototype.resetInner=function(){e.prototype.resetInner.call(this),this._controllerGroup.removeAll(),this._containerGroup.removeClipPath(),this._containerGroup.__rectSize=null},t.prototype.renderInner=function(r,n,i,a,o,s,l){var u=this;e.prototype.renderInner.call(this,r,n,i,a,o,s,l);var f=this._controllerGroup,c=n.get("pageIconSize",!0),v=et(c)?c:[c,c];d("pagePrev",0);var h=n.getModel("pageTextStyle");f.add(new he({name:"pageText",style:{text:"xx/xx",fill:h.getTextColor(),font:h.getFont(),verticalAlign:"middle",align:"center"},silent:!0})),d("pageNext",1);function d(p,g){var m=p+"DataIndex",y=Ld(n.get("pageIcons",!0)[n.getOrient().name][g],{onclick:Ft(u._pageGo,u,m,n,a)},{x:-v[0]/2,y:-v[1]/2,width:v[0],height:v[1]});y.name=p,f.add(y)}},t.prototype.layoutInner=function(r,n,i,a,o,s){var l=this.getSelectorGroup(),u=r.getOrient().index,f=Nc[u],c=Bc[u],v=Nc[1-u],h=Bc[1-u];o&&No("horizontal",l,r.get("selectorItemGap",!0));var d=r.get("selectorButtonGap",!0),p=l.getBoundingRect(),g=[-p.x,-p.y],m=xt(i);o&&(m[f]=i[f]-p[f]-d);var y=this._layoutContentAndController(r,a,m,u,f,v,h,c);if(o){if(s==="end")g[u]+=y[f]+d;else{var _=p[f]+d;g[u]-=_,y[c]-=_}y[f]+=p[f]+d,g[1-u]+=y[h]+y[v]/2-p[v]/2,y[v]=Math.max(y[v],p[v]),y[h]=Math.min(y[h],p[h]+g[1-u]),l.x=g[0],l.y=g[1],l.markRedraw()}return y},t.prototype._layoutContentAndController=function(r,n,i,a,o,s,l,u){var f=this.getContentGroup(),c=this._containerGroup,v=this._controllerGroup;No(r.get("orient"),f,r.get("itemGap"),a?i.width:null,a?null:i.height),No("horizontal",v,r.get("pageButtonItemGap",!0));var h=f.getBoundingRect(),d=v.getBoundingRect(),p=this._showController=h[o]>i[o],g=[-h.x,-h.y];n||(g[a]=f[u]);var m=[0,0],y=[-d.x,-d.y],_=Mt(r.get("pageButtonGap",!0),r.get("itemGap",!0));if(p){var w=r.get("pageButtonPosition",!0);w==="end"?y[a]+=i[o]-d[o]:m[a]+=d[o]+_}y[1-a]+=h[s]/2-d[s]/2,f.setPosition(g),c.setPosition(m),v.setPosition(y);var S={x:0,y:0};if(S[o]=p?i[o]:h[o],S[s]=Math.max(h[s],d[s]),S[l]=Math.min(0,d[l]+y[1-a]),c.__rectSize=i[o],p){var b={x:0,y:0};b[o]=Math.max(i[o]-d[o]-_,0),b[s]=S[s],c.setClipPath(new ne({shape:b})),c.__rectSize=b[o]}else v.eachChild(function(T){T.attr({invisible:!0,silent:!0})});var x=this._getPageInfo(r);return x.pageIndex!=null&&Dr(f,{x:x.contentPosition[0],y:x.contentPosition[1]},p?r:null),this._updatePageInfoView(r,x),S},t.prototype._pageGo=function(r,n,i){var a=this._getPageInfo(n)[r];a!=null&&i.dispatchAction({type:"legendScroll",scrollDataIndex:a,legendId:n.id})},t.prototype._updatePageInfoView=function(r,n){var i=this._controllerGroup;I(["pagePrev","pageNext"],function(f){var c=f+"DataIndex",v=n[c]!=null,h=i.childOfName(f);h&&(h.setStyle("fill",v?r.get("pageIconColor",!0):r.get("pageIconInactiveColor",!0)),h.cursor=v?"pointer":"default")});var a=i.childOfName("pageText"),o=r.get("pageFormatter"),s=n.pageIndex,l=s!=null?s+1:0,u=n.pageCount;a&&o&&a.setStyle("text",it(o)?o.replace("{current}",l==null?"":l+"").replace("{tot Line truncated
@@ -0,0 +1,189 @@
-- Copyright 2022 xiaobao <xiaobao@linkease.com>
-- Licensed to the public under the MIT License
local http = require "luci.http"
local nixio = require "nixio"
local ltn12 = require "luci.ltn12"
local table = require "table"
local util = require "luci.util"
module("luci.controller.istore_backend", package.seeall)
local BLOCKSIZE = 2048
local ISTOREOS_PORT = 3038
function index()
entry({"istore"}, call("istore_backend")).leaf=true
end
local function sink_socket(sock, io_err)
if sock then
return function(chunk, err)
if not chunk then
return 1
else
return sock:send(chunk)
end
end
else
return ltn12.sink.error(io_err or "unable to send socket")
end
end
local function session_retrieve(sid, allowed_users)
local sdat = util.ubus("session", "get", { ubus_rpc_session = sid })
if type(sdat) == "table" and
type(sdat.values) == "table" and
type(sdat.values.token) == "string" and
(not allowed_users or
util.contains(allowed_users, sdat.values.username))
then
return sid, sdat.values
end
return nil, nil
end
local function get_session()
local sid
local key
local sdat
for _, key in ipairs({"sysauth_https", "sysauth_http", "sysauth"}) do
sid = http.getcookie(key)
if sid then
sid, sdat = session_retrieve(sid, nil)
if sid and sdat then
return sid, sdat
end
end
end
return nil, nil
end
local function chunksource(sock, buffer)
buffer = buffer or ""
return function()
local output
local _, endp, count = buffer:find("^([0-9a-fA-F]+);?.-\r\n")
while not count and #buffer <= 1024 do
local newblock, code = sock:recv(1024 - #buffer)
if not newblock then
return nil, code
end
buffer = buffer .. newblock
_, endp, count = buffer:find("^([0-9a-fA-F]+);?.-\r\n")
end
count = tonumber(count, 16)
if not count then
return nil, -1, "invalid encoding"
elseif count == 0 then
return nil
elseif count + 2 <= #buffer - endp then
output = buffer:sub(endp+1, endp+count)
buffer = buffer:sub(endp+count+3)
return output
else
output = buffer:sub(endp+1, endp+count)
buffer = ""
if count - #output > 0 then
local remain, code = sock:recvall(count-#output)
if not remain then
return nil, code
end
output = output .. remain
count, code = sock:recvall(2)
else
count, code = sock:recvall(count+2-#buffer+endp)
end
if not count then
return nil, code
end
return output
end
end
end
function istore_backend()
local sock = nixio.connect("127.0.0.1", ISTOREOS_PORT)
if not sock then
http.status(500, "connect failed")
return
end
local input = {}
input[#input+1] = http.getenv("REQUEST_METHOD") .. " " .. http.getenv("REQUEST_URI") .. " HTTP/1.1"
local req = http.context.request
local start = "HTTP_"
local start_len = string.len(start)
local ctype = http.getenv("CONTENT_TYPE")
if ctype then
input[#input+1] = "Content-Type: " .. ctype
end
for k, v in pairs(req.message.env) do
if string.sub(k, 1, start_len) == start and not string.find(k, "FORWARDED") then
input[#input+1] = string.sub(k, start_len+1, string.len(k)) .. ": " .. v
end
end
local sid, sdat = get_session()
if sdat ~= nil then
input[#input+1] = "X-Forwarded-Sid: " .. sid
input[#input+1] = "X-Forwarded-Token: " .. sdat.token
end
-- input[#input+1] = "X-Forwarded-For: " .. http.getenv("REMOTE_HOST") ..":".. http.getenv("REMOTE_PORT")
local num = tonumber(http.getenv("CONTENT_LENGTH")) or 0
input[#input+1] = "Content-Length: " .. tostring(num)
input[#input+1] = "\r\n"
local source = ltn12.source.cat(ltn12.source.string(table.concat(input, "\r\n")), http.source())
local ret = ltn12.pump.all(source, sink_socket(sock, "write sock error"))
if ret ~= 1 then
sock:close()
http.status(500, "proxy error")
return
end
local linesrc = sock:linesource()
local line, code, error = linesrc()
if not line then
sock:close()
http.status(500, "response parse failed")
return
end
local protocol, status, msg = line:match("^([%w./]+) ([0-9]+) (.*)")
if not protocol then
sock:close()
http.status(500, "response protocol error")
return
end
num = tonumber(status) or 0
http.status(num, msg)
local chunked = 0
line = linesrc()
while line and line ~= "" do
local key, val = line:match("^([%w-]+)%s?:%s?(.*)")
if key and key ~= "Status" then
if key == "Transfer-Encoding" and val == "chunked" then
chunked = 1
end
if key ~= "Connection" and key ~= "Transfer-Encoding" and key ~= "Content-Length" then
http.header(key, val)
end
end
line = linesrc()
end
if not line then
sock:close()
http.status(500, "parse header failed")
return
end
local body_buffer = linesrc(true)
if chunked == 1 then
ltn12.pump.all(chunksource(sock, body_buffer), http.write)
else
local body_source = ltn12.source.cat(ltn12.source.string(body_buffer), sock:blocksource())
ltn12.pump.all(body_source, http.write)
end
sock:close()
end
@@ -0,0 +1,170 @@
local http = require "luci.http"
module("luci.controller.quickstart", package.seeall)
function index()
if luci.sys.call("pgrep quickstart >/dev/null") == 0 then
local uci = require "luci.model.uci".cursor()
entry({"admin", "quickstart"}, template("quickstart/home"), _("QuickStart"), 1).leaf = true
entry({"admin", "network_guide"}, call("networkguide_index"), _("NetworkGuide"), 2)
entry({"admin", "network_guide", "pages"}, call("quickstart_index", {index={"admin", "network_guide", "pages"}})).leaf = true
if uci:get("quickstart", "main", "wifi_menu") == "1" then
entry({"admin", "quickwifi"}, call("quickwifi_index"), _("Wireless"), 3)
entry({"admin", "quickwifi", "pages"}, call("quickstart_index", {index={"admin", "quickwifi", "pages"}})).leaf = true
end
if nixio.fs.access("/usr/lib/lua/luci/view/quickstart/main_dev.htm") then
entry({"admin", "quickstart_dev"}, call("quickstart_dev", {index={"admin", "quickstart_dev"}})).leaf = true
end
entry({"admin", "nas", "raid"}, call("quickstart_index", {index={"admin", "nas"}}), _("RAID"), 10).leaf = true
entry({"admin", "nas", "smart"}, call("quickstart_index", {index={"admin", "nas"}}), _("S.M.A.R.T."), 11).leaf = true
entry({"admin", "network", "interfaceconfig"}, call("quickstart_index", {index={"admin", "network"}}), _("NetworkPort"), 11).leaf = true
entry({"admin", "nas", "quickstart"}).dependent = false
entry({"admin", "nas", "quickstart", "auto_setup"}, post("auto_setup"))
entry({"admin", "nas", "quickstart", "setup_result"}, call("setup_result"))
else
entry({"admin", "quickstart"}, call("redirect_fallback")).leaf = true
end
end
function networkguide_index()
luci.http.redirect(luci.dispatcher.build_url("admin", "network_guide", "pages", "network"))
end
function quickwifi_index()
luci.http.redirect(luci.dispatcher.build_url("admin", "quickwifi", "pages", "quickwifi"))
end
function redirect_fallback()
luci.http.redirect(luci.dispatcher.build_url("admin", "status"))
end
local function vue_lang()
local i18n = require("luci.i18n")
local lang = i18n.translate("quickstart_vue_lang")
if lang == "quickstart_vue_lang" or lang == "" then
lang = "en"
end
return lang
end
function quickstart_index(param)
luci.template.render("quickstart/main", {prefix=luci.dispatcher.build_url(unpack(param.index)),lang=vue_lang()})
end
function quickstart_dev(param)
luci.template.render("quickstart/main_dev", {prefix=luci.dispatcher.build_url(unpack(param.index)),lang=vue_lang()})
end
function auto_setup()
local os = require "os"
local fs = require "nixio.fs"
local rshift = nixio.bit.rshift
-- json style
-- local jsonc = require "luci.jsonc"
-- local json_parse = jsonc.parse
-- local req = json_parse(luci.http.content())
-- local pkgs = ""
-- for k, v in pairs(req.packages) do
-- pkgs = pkgs .. " " .. luci.util.shellquote(v)
-- end
-- form style
local packages = luci.http.formvalue("packages")
local pkgs = ""
if type(packages) == "table" then
if #packages > 0 then
for k, v in pairs(packages) do
pkgs = pkgs .. " " .. luci.util.shellquote(v)
end
end
else
if packages ~= nil and packages ~= "" then
pkgs = luci.util.shellquote(packages)
end
end
local ret
if pkgs == "" then
ret = {
success = 1,
scope = "params",
error = "Parameter 'packages' undefined!",
}
else
local cmd = "/usr/libexec/quickstart/auto_setup.sh " .. pkgs
cmd = "/etc/init.d/tasks task_add auto_setup " .. luci.util.shellquote(cmd)
local r = os.execute(cmd .. " >/var/log/auto_setup.stdout 2>/var/log/auto_setup.stderr")
local e = fs.readfile("/var/log/auto_setup.stderr")
local o = fs.readfile("/var/log/auto_setup.stdout")
fs.unlink("/var/log/auto_setup.stderr")
fs.unlink("/var/log/auto_setup.stdout")
e = e or ""
if r == 256 and e == "" then
e = "os.execute exit code 1"
end
r = rshift(r,8)
ret = {
success = r,
scope = "taskd",
error = e,
detail = o,
}
end
luci.http.prepare_content("application/json")
luci.http.write_json(ret)
end
function setup_result()
local fs = require "nixio.fs"
local taskd = require "luci.model.tasks"
local packages = nil
local success = nil
local failed = nil
local status = taskd.status("auto_setup")
local ret = {
}
if status.running or status.exit_code ~= 404 then
local item
local po = fs.readfile("/var/log/auto_setup.input") or ""
for item in po:gmatch("[^\n]+") do
if packages then
packages[#packages+1] = item
else
packages = {item}
end
end
local so = fs.readfile("/var/log/auto_setup.success") or ""
for item in so:gmatch("[^\n]+") do
if success then
success[#success+1] = item
else
success = {item}
end
end
local fo = fs.readfile("/var/log/auto_setup.failed") or ""
for item in fo:gmatch("[^\n]+") do
if failed then
failed[#failed+1] = item
else
failed = {item}
end
end
ret.success = 0
ret.result = {
ongoing = status.running,
packages = packages,
success = success,
failed = failed,
}
else
ret.success = 404
ret.scope = "taskd"
ret.error = "task not found"
end
luci.http.prepare_content("application/json")
luci.http.write_json(ret)
end
@@ -0,0 +1,11 @@
--- luci-app-quickstart/luasrc/controller/quickstart.lua
+++ luci-app-quickstart/luasrc/controller/quickstart.lua
@@ -5,7 +5,7 @@ module("luci.controller.quickstart", package.seeall)
function index()
entry({"admin", "nas"}, firstchild(), _("NAS") , 45).dependent = false
if luci.sys.call("pgrep quickstart >/dev/null") == 0 then
- entry({"admin", "quickstart"}, template("quickstart/home"), _("QuickStart"), 1).leaf = true
+ entry({"admin", "quickstart"}, template("quickstart/home")).leaf = true
entry({"admin", "network_guide"}, call("networkguide_index"), _("NetworkGuide"), 2)
entry({"admin", "network_guide", "pages"}, call("quickstart_index", {index={"admin", "network_guide", "pages"}})).leaf = true
if nixio.fs.access("/usr/lib/lua/luci/view/quickstart/main_dev.htm") then
@@ -0,0 +1,11 @@
<%
local function vue_lang()
local i18n = require("luci.i18n")
local lang = i18n.translate("quickstart_vue_lang")
if lang == "quickstart_vue_lang" or lang == "" then
lang = "en"
end
return lang
end
-%>
<% luci.template.render("quickstart/main", {prefix=luci.dispatcher.build_url("admin", "quickstart"),lang=vue_lang()}) %>
@@ -0,0 +1,56 @@
<%+header%>
<%
local jsonc = require "luci.jsonc"
local uci = require "luci.model.uci".cursor()
local features = { "_lua_force_array_" }
local configs = {}
if luci.sys.call("which ota >/dev/null 2>&1 && ota >/dev/null 2>&1") == 0 then
features[#features+1] = "ota"
end
if luci.sys.call("[ -d /ext_overlay ] >/dev/null 2>&1") == 0 then
features[#features+1] = "sandbox"
end
if luci.sys.call("[ -e /etc/init.d/dockerd ] >/dev/null 2>&1") == 0 then
features[#features+1] = "dockerd"
end
if luci.sys.call("[ -e /etc/init.d/unishare ] >/dev/null 2>&1") == 0 then
features[#features+1] = "unishare"
end
if luci.sys.call("/etc/init.d/ttyd running >/dev/null 2>&1") == 0 then
features[#features+1] = "ttyd"
local port = uci:get_first("ttyd", "ttyd", "port") or "7681"
local ssl = uci:get_first("ttyd", "ttyd", "ssl") or "0"
configs["ttyd"] = {
port = tonumber(port),
ssl = ssl == "1"
}
end
if uci:get("quickstart", "main", "disable_update_check") == "1" then
configs["update"] = {
disable = true
}
end
-%>
<script>
(function(){
window.token = "<%=token%>";
var vue_prefix="<%=prefix%>";
window.vue_base = vue_prefix + '/';
window.vue_lang_data = '/luci-static/quickstart/i18n/<%=lang%>.json<%# ?v=PKG_VERSION %>';
window.vue_lang = '<%=lang%>';
window.quickstart_features = <%=jsonc.stringify(features)%>;
window.quickstart_configs = <%=jsonc.stringify(configs)%>;
if (location.pathname != vue_prefix && !location.pathname.startsWith(window.vue_base)) {
if (window.history && window.history.replaceState) {
window.history.replaceState({}, null, vue_prefix);
} else {
location.href = vue_prefix;
}
}
})();
</script>
<div id="app">
</div>
<script type="module" crossorigin src="/luci-static/quickstart/index.js<%# ?v=PKG_VERSION %>"></script>
<link rel="stylesheet" href="/luci-static/quickstart/style.css<%# ?v=PKG_VERSION %>">
<%+footer%>
@@ -0,0 +1,14 @@
msgid "NetworkGuide"
msgstr "网络向导"
msgid "QuickStart"
msgstr "首页"
msgid "RAID"
msgstr "磁盘阵列"
msgid "NetworkPort"
msgstr "网口配置"
msgid "quickstart_vue_lang"
msgstr "zh-cn"
+1
View File
@@ -0,0 +1 @@
zh-cn
@@ -0,0 +1,4 @@
#!/bin/sh
rm -f /tmp/luci-indexcache /tmp/luci-indexcache.*
exit 0
@@ -0,0 +1,61 @@
#!/bin/sh
> /var/log/auto_setup.success
> /var/log/auto_setup.failed
> /var/log/auto_setup.input
save_input() {
local pkg
for pkg in $@; do
echo "$pkg" >> /var/log/auto_setup.input
done
}
save_input "$@"
. /lib/functions.sh
load_quickstart_cfg() {
config_load quickstart || return $?
local main_dir conf_dir pub_dir dl_dir tmp_dir
config_get main_dir "main" main_dir
[ -z "$main_dir" ] && { echo "Home dir not configured!" >&2 ; return 1 ; }
config_get conf_dir "main" conf_dir "$main_dir/Configs"
config_get pub_dir "main" pub_dir "$main_dir/Public"
config_get tmp_dir "main" tmp_dir "$main_dir/Caches"
config_get dl_dir "main" dl_dir "$pub_dir/Downloads"
export ISTORE_CONF_DIR="$conf_dir"
export ISTORE_DL_DIR="$dl_dir"
export ISTORE_CACHE_DIR="$tmp_dir"
export ISTORE_PUBLIC_DIR="$pub_dir"
mkdir -p "$ISTORE_CONF_DIR" "$ISTORE_DL_DIR" "$ISTORE_CACHE_DIR" "$ISTORE_PUBLIC_DIR"
chmod 777 "$ISTORE_DL_DIR"
}
auto_setup_app() {
local pkg=$1
is-opkg install "app-meta-$pkg" || return 1
sh -c ". '/usr/libexec/istorea/$pkg.sh'"
}
auto_setup_apps() {
local pkg
for pkg in $@; do
echo "Setting up $pkg..."
if auto_setup_app $pkg; then
echo "Set up $pkg success"
echo "$pkg" >> /var/log/auto_setup.success
else
echo "Set up $pkg failed"
echo "$pkg" >> /var/log/auto_setup.failed
fi
done
}
load_quickstart_cfg || exit $?
auto_setup_apps "$@"
[ ! -s /var/log/auto_setup.failed ]