7 lines
9.4 KiB
JavaScript
7 lines
9.4 KiB
JavaScript
|
|
"use strict";var D=Object.defineProperty;var S=(c,e,t)=>e in c?D(c,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):c[e]=t;var u=(c,e,t)=>S(c,typeof e!="symbol"?e+"":e,t);const g=require("siyuan"),V=c=>{let e;switch(c){case"checkbox":e=t=>t.checked;break;case"select":case"slider":case"textinput":case"textarea":e=t=>t.value;break;case"number":e=t=>parseInt(t.value);break;default:e=()=>null;break}return e},N=c=>{let e;switch(c){case"checkbox":e=(t,n)=>{t.checked=n};break;case"select":case"slider":case"textinput":case"textarea":case"number":e=(t,n)=>{t.value=n};break;default:e=()=>{};break}return e};class A{constructor(e){u(this,"plugin");u(this,"name");u(this,"file");u(this,"settings",new Map);u(this,"elements",new Map);this.name=e.name??"settings",this.plugin=e.plugin,this.file=this.name.endsWith(".json")?this.name:`${this.name}.json`,this.plugin.setting=new g.Setting({width:e.width,height:e.height,confirmCallback:()=>{for(let n of this.settings.keys())this.updateValueFromElement(n);let t=this.dump();e.callback!==void 0&&e.callback(t),this.plugin.data[this.name]=t,this.save(t)},destroyCallback:()=>{for(let t of this.settings.keys())this.updateElementFromValue(t)}})}async load(){let e=await this.plugin.loadData(this.file);if(console.debug("Load config:",e),e)for(let[t,n]of this.settings)n.value=(e==null?void 0:e[t])??n.value;return this.plugin.data[this.name]=this.dump(),e}async save(e){return e=e??this.dump(),await this.plugin.saveData(this.file,this.dump()),console.debug("Save config:",e),e}get(e){var t;return(t=this.settings.get(e))==null?void 0:t.value}set(e,t){let n=this.settings.get(e);n&&(n.value=t,this.updateElementFromValue(e))}async setAndSave(e,t){let n=this.settings.get(e);n&&(n.value=t,this.updateElementFromValue(e),await this.save())}take(e,t=!1){let n=this.settings.get(e),l=this.elements.get(e);if(l)return t&&this.updateValueFromElement(e),n.getEleVal(l)}async takeAndSave(e){let t=this.take(e,!0);return await this.save(),t}disable(e){let t=this.elements.get(e);t&&(t.disabled=!0)}enable(e){let t=this.elements.get(e);t&&(t.disabled=!1)}dump(){let e={};for(let[t,n]of this.settings)n.type!=="button"&&(e[t]=n.value);return e}addItem(e){if(this.settings.set(e.key,e),e.type==="custom"&&(e.createElement===void 0||e.getEleVal===void 0||e.setEleVal===void 0)){console.error("The custom setting item must have createElement, getEleVal and setEleVal methods");return}if(e.getEleVal===void 0&&(e.getEleVal=V(e.type)),e.setEleVal===void 0&&(e.setEleVal=N(e.type)),e.createElement===void 0){let l=this.createDefaultElement(e);this.elements.set(e.key,l),this.plugin.setting.addItem({title:e.title,description:e==null?void 0:e.description,direction:e==null?void 0:e.direction,createActionElement:()=>(this.updateElementFromValue(e.key),this.getElement(e.key))})}else this.plugin.setting.addItem({title:e.title,description:e==null?void 0:e.description,direction:e==null?void 0:e.direction,createActionElement:()=>{let l=this.get(e.key),h=e.createElement(l);return this.elements.set(e.key,h),h}})}createDefaultElement(e){var l,h,k,v,y,p,_,r,s;let t;const n=a=>{a.key==="Enter"&&(a.preventDefault(),a.stopImmediatePropagation())};switch(e.type){case"checkbox":let a=document.createElement("input");a.type="checkbox",a.checked=e.value,a.className="b3-switch fn__flex-center",t=a,a.onchange=((l=e.action)==null?void 0:l.callback)??(()=>{});break;case"select":let d=document.createElement("select");d.className="b3-select fn__flex-center fn__size200";let b=(e==null?void 0:e.options)??{};for(let m in b){let I=document.createElement("option"),w=b[m];I.value=m,I.text=w,d.appendChild(I)}d.value=e.value,d.onchange=((h=e.action)==null?void 0:h.callback)??(()=>{}),t=d;break;case"slider":let i=document.createElement("input");i.type="range",i.className="b3-slider fn__size200 b3-tooltips b3-tooltips__n",i.ariaLabel=e.value,i.min=((k=e.slider)==null?void 0:k.min.toString())??"0",i.max=((v=e.slider)==null?void 0:v.max.toString())??"100",i.step=((y=e.slider)==null?void 0:y.step.toString())??"1",i.value=e.value,i.onchange=()=>{var m;i.ariaLabel=i.value,(m=e.act
|
|||
|
|
`+this.settingUtils.get("stayOpen")+`
|
|||
|
|
`+this.settingUtils.get("exception")+`
|
|||
|
|
`+this.settingUtils.get("Check")+`
|
|||
|
|
`+this.settingUtils.get("Check_DN")+`
|
|||
|
|
`)}async onunload(){console.log(this.i18n.byePlugin),g.showMessage("Goodbye Plugin"),console.log("onunload,卸载"),this.checkInterval&&clearInterval(this.checkInterval)}uninstall(){console.log("插件已卸载")}eventBusLog({detail:t}){console.log(t)}initAutoClose(){console.log("初始化自动关闭功能"),this.checkInterval=window.setInterval(()=>{if(console.log("执行定时检查..."),!this.settingUtils.get("Check")){console.log("自动关闭功能已禁用");return}this.checkToClose()},5*1e3),console.log("定时器已设置,ID:",this.checkInterval)}async checkToClose(){const t=parseInt(this.settingUtils.get("stayOpen"))||20;console.log("保持打开时间:",t);const n=document.querySelectorAll('li[data-type="tab-header"]');console.log("当前打开的标签页数量:",n.length),n.forEach(r=>{const s=r.getAttribute("data-id");if(r.classList.contains("item--pin")||r.classList.contains("item--focus")){console.log("标签页被固定或聚焦,不计入 tabInfo:",r);return}if(s){const a=this.tabInfo.find(d=>d.dataId===s);a?(a.count+=5,console.log(`标签 ${s} 重复出现,当前计数: ${a.count}`)):(console.log("不存在,添加新记录,初始计数为1"),this.tabInfo.push({dataId:s,count:1}),console.log("添加标签信息:",{"data-id":s,计数:1}))}}),console.log("所有标签信息数组:",this.tabInfo);let l=this.settingUtils.get("exception").split("|").map(r=>r.trim());const h=new Date,k=h.getFullYear(),v=String(h.getMonth()+1).padStart(2,"0"),y=String(h.getDate()).padStart(2,"0"),p=`${k}-${v}-${y}`;this.settingUtils.get("Check_DN")&&l.push(p),console.log("不关闭的标签页字符串:",l),console.log("今日日期:",p),n.forEach(r=>{var i;const s=r,a=s.getAttribute("data-id"),d=this.tabInfo.find(o=>o.dataId===a);if(s.classList.contains("item--pin")||s.classList.contains("item--focus")){console.log("标签页被固定或聚焦,不关闭:",s);return}const b=((i=s.querySelector(".item__text"))==null?void 0:i.textContent)||"";if(l&&l.length>0&&l.some(o=>o&&b.includes(o))){console.log("标签页包含在不关闭列表中:",b);return}if(d&&d.count>=t){const o=s.querySelector(".item__close");o&&(console.log("执行点击"),o.click())}})}}module.exports=F;
|