!function(){"use strict";const e=document.querySelector(".tool-workspace");if(!e||"java"===e.dataset.toolGroup)return;const t=e.dataset.tool,n=t=>e.querySelector(t),a=n("[data-input]"),o=n("[data-output]"),r=n("[data-results]"),s=n("[data-empty]"),c=n("[data-status]"),i=n("[data-metrics]");let l="";const d=(e,t,n)=>{const a=document.createElement(e);return t&&(a.className=t),void 0!==n&&(a.textContent=n),a},u=(e,t)=>{const a=n('[data-action="'+e+'"]');a&&a.addEventListener("click",t)},m=(e,t,n)=>{l=e,o.textContent=e,c.textContent=t||"",c.classList.remove("is-error"),n&&n.length?(i.replaceChildren(...n.map((e=>{const t=d("div","tool-metric");return t.append(d("span","",e[0]),d("strong","",String(e[1]))),t}))),i.hidden=!1):i.hidden=!0,r.hidden=!1,s.hidden=!0},p=e=>{l="",o.textContent="",c.textContent=e,c.classList.add("is-error"),i.hidden=!0,r.hidden=!1,s.hidden=!0},f=()=>""!==a.value||(p("请先输入需要处理的内容。"),!1);function h(e){const t="url-codec"===e?"https://nicksxs.me/search?q=Java 性能优化&from=工具箱":"浏览器本地处理 · Java & LLM";u("sample",(()=>{a.value=t})),u("encode",(()=>{if(f())try{if("url-codec"===e)m(encodeURIComponent(a.value),"已按 UTF-8 对 URL 组件编码。");else{const e=(new TextEncoder).encode(a.value);let t="";for(let n=0;n<e.length;n+=32768)t+=String.fromCharCode.apply(null,e.subarray(n,n+32768));m(btoa(t),"已将 UTF-8 文本编码为 Base64。")}}catch(e){p("编码失败:"+e.message)}})),u("decode",(()=>{if(f())try{if("url-codec"===e)m(decodeURIComponent(a.value.replace(/\+/g," ")),"已解码 URL 组件,+ 按空格处理。");else{const e=a.value.replace(/\s/g,"").replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),n=Uint8Array.from(t,(e=>e.charCodeAt(0)));m(new TextDecoder("utf-8",{fatal:!0}).decode(n),"已将 Base64 解码为 UTF-8 文本。")}}catch(e){p("无法解码,请检查输入是否完整且格式正确。")}}))}u("clear",(()=>{a.value="",l="",r.hidden=!0,s.hidden=!1})),u("copy",(e=>(async e=>{if(!l)return;try{await navigator.clipboard.writeText(l)}catch(e){const t=d("textarea");t.value=l,t.style.cssText="position:fixed;opacity:0",document.body.appendChild(t),t.select(),document.execCommand("copy"),t.remove()}const t=e.textContent;e.textContent="已复制",setTimeout((()=>{e.textContent=t}),1200)})(e.currentTarget)));const g={"url-codec":h,base64:h,json:function(){u("sample",(()=>{a.value='{"site":"nicksxs.me","topics":["Java","LLM"],"local":true}'}));const e=e=>{if(f())try{const t=JSON.parse(a.value),o=e?0:"tab"===n("[data-indent]").value?"\t":Number(n("[data-indent]").value),r=JSON.stringify(t,null,o);m(r,e?"JSON 合法,已压缩为单行。":"JSON 合法,已完成格式化。",[["字符",r.length],["顶层类型",Array.isArray(t)?"Array":null===t?"null":typeof t]])}catch(e){const t=Number((e.message.match(/position\s+(\d+)/)||[])[1]);let n="";if(Number.isFinite(t)){const e=a.value.slice(0,t);n=",约在第 "+e.split("\n").length+" 行、第 "+(t-e.lastIndexOf("\n"))+" 列"}p("JSON 语法错误"+n+":"+e.message)}};u("format",(()=>e(!1))),u("minify",(()=>e(!0)))},timestamp:function(){const e=()=>{if(!f())return;const e=function(e){const t=e.trim();if(/^-?\d{10}$/.test(t))return new Date(1e3*Number(t));if(/^-?\d{13}$/.test(t))return new Date(Number(t));const n=/^\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}/.test(t)?t.replace(/\s+/,"T"):t;return new Date(n)}(a.value);if(Number.isNaN(e.getTime()))return p("无法识别该时间。建议使用 10 位秒、13 位毫秒或 ISO 8601。");const t=["本地时间:"+e.toLocaleString("zh-CN",{hour12:!1}),"UTC 时间:"+e.toUTCString(),"ISO 8601:"+e.toISOString(),"Unix 秒:"+Math.floor(e.getTime()/1e3),"Unix 毫秒:"+e.getTime(),"时区偏移:UTC"+(e.getTimezoneOffset()<=0?"+":"-")+String(Math.floor(Math.abs(e.getTimezoneOffset())/60)).padStart(2,"0")+":"+String(Math.abs(e.getTimezoneOffset())%60).padStart(2,"0")].join("\n");m(t,"已自动识别输入格式。")};u("sample",(()=>{a.value="2026-09-05 21:30:00"})),u("now",(()=>{a.value=String(Date.now()),e()})),u("convert",e)},hash:function(){u("sample",(()=>{a.value="nicksxs.me"})),u("hash",(async()=>{if(!f())return;const e=n("[data-algorithm]").value;try{const t=await crypto.subtle.digest(e,(new TextEncoder).encode(a.value)),n=Array.from(new Uint8Array(t),(e=>e.toString(16).padStart(2,"0"))).join("");m(n,e+" · "+8*t.byteLength+" bit",[["原文字符",a.value.length],["摘要长度",n.length]])}catch(t){p("当前浏览器无法使用 "+e+":"+t.message)}}))},text:function(){u("sample",(()=>{a.value="java\nllm\nJava\n\nperformance\nllm"})),["dedupe","sort","trim","upper","lower"].forEach((e=>u(e,(()=>(e=>{if(!f())return;const t=a.value.split(/\r?\n/);let n=a.value;"dedupe"===e&&(n=Array.from(new Set(t)).join("\n")),"sort"===e&&(n=t.slice().sort(((e,t)=>e.localeCompare(t,"zh-CN",{numeric:!0}))).join("\n")),"trim"===e&&(n=t.filter((e=>e.trim())).join("\n")),"upper"===e&&(n=a.value.toLocaleUpperCase()),"lower"===e&&(n=a.value.toLocaleLowerCase());const o=(n.match(/[A-Za-z0-9_]+|[\u3400-\u9fff]/g)||[]).length;m(n,"处理完成,原始输入保持不变。",[["字符",n.length],["非空字符",n.replace(/\s/g,"").length],["词/汉字",o],["行数",n.split(/\r?\n/).length]])})(e)))))}};g[t]&&g[t](t)}();
|