${t}
`;const o=document.createElement("div");o.className="modal-actions";const c=document.createElement("button");c.className="ghost",c.textContent="Cancel";const i=document.createElement("button");i.className="danger",i.textContent="Confirm",c.onclick=()=>{s.remove(),n(!1)},i.onclick=()=>{s.remove(),n(!0)},o.append(c,i),a.append(o),s.append(a),f.append(s)})}async function L(e){const t=await fetch(e);if(!t.ok){const e=await x(t);throw new Error(e)}return t.json()}async function x(e){try{const t=await e.json();return t?.message?t.message:`${e.status} ${e.statusText}`}catch{return`${e.status} ${e.statusText}`}}c("refresh").addEventListener("click",async function(){try{await g(),b("Refreshed")}catch(e){const t=e?.message||String(e);alert(`Refresh failed: ${t}`)}}),c("addKey").addEventListener("click",async function(){const t=prompt("New translation key");if(!t)return;const n=await fetch("/api/strings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:t,translations:{[e]:""}})});if(!n.ok){const e=await x(n);return void alert(`Add failed: ${e}`)}await g(),h(t)}),c("beautify").addEventListener("click",async function(){if(!await N("Beautify strings.json?","This will rewrite strings.json with formatting."))return;const e=await fetch("/api/strings/format",{method:"POST"});if(!e.ok){const t=await x(e);return void alert(`Beautify failed: ${t}`)}await g(),b("Formatted")}),p.addEventListener("click",async function(){try{const e=await fetch("/api/strings");if(!e.ok)throw new Error(await x(e));const t=await e.json(),n=new Blob([JSON.stringify(t,null,2)],{type:"application/json"}),s=URL.createObjectURL(n),a=document.createElement("a");a.href=s,a.download="strings.json",a.click(),URL.revokeObjectURL(s),b("Downloaded strings.json")}catch(e){alert(`Download failed: ${e}`)}}),d.addEventListener("change",()=>{s=d.value,localStorage.setItem("vscodeScheme",s),h(o.selected)}),d.value=s,u.addEventListener("input",y),m.addEventListener("change",y),g()})(); +//# sourceMappingURL=app.js.map \ No newline at end of file diff --git a/DisCatSharp.Extensions.Translations.Manager/wwwroot/app.js.map b/DisCatSharp.Extensions.Translations.Manager/wwwroot/app.js.map new file mode 100644 index 0000000..d916ab9 --- /dev/null +++ b/DisCatSharp.Extensions.Translations.Manager/wwwroot/app.js.map @@ -0,0 +1 @@ +{"version":3,"names":["PRIMARY_LOCALE","FALLBACK_LOCALES","storedScheme","localStorage","getItem","vscodeScheme","navigator","userAgent","includes","REPO_BLOB_BASE","state","report","strings","locales","selected","realKeys","Set","el","id","document","getElementById","keyList","details","summary","scheme","search","filter","downloadBtn","modalHost","async","loadAll","Promise","all","fetchJson","Object","keys","missingKeys","forEach","key","prototype","hasOwnProperty","call","length","textContent","usedKeysCount","definedKeysCount","unusedKeys","dynamicKeyUsages","renderKeyList","renderDetails","query","value","toLowerCase","filterValue","expectedLocales","set","add","values","map","loc","collectExpectedLocales","translationKeys","dynamicKeys","d","keyFromDynamic","k","Array","from","sort","a","b","localeCompare","innerHTML","template","translations","valuesText","join","isReportedMissing","isDynamic","some","isMissingKey","has","isUnused","primaryMissing","trim","isMissingLocale","expected","text","hasMissingLocale","isDynamicBadge","node","content","firstElementChild","cloneNode","querySelector","badges","style","flexWrap","append","makeBadge","addEventListener","classList","className","existsInStrings","isDynamicKey","dynamicCandidates","dynamicKeyCandidates","orderLocales","wrapper","createElement","title","hint","dynNote","transWrap","locale","makeLocaleRow","addLocaleRow","addSelect","availableLocales","existing","options","l","addButton","onclick","insertBefore","actions","saveBtn","confirmModal","querySelectorAll","row","dataset","res","fetch","encodeURIComponent","method","headers","body","JSON","stringify","ok","msg","readError","alert","showToast","saveKey","deleteBtn","deleteKey","usageSection","usageList","usages","keyUsages","dynUsages","usageTemplate","repoRoot","replace","u","file","line","fullPath","ensureUsageOpen","codeUrl","encodeURI","window","open","gitBtn","gitUrl","copyText","reason","none","candidateSection","candidateList","cand","cursor","input","disabled","textarea","autosizeText","remove","height","scrollHeight","tone","span","dyn","raw","expression","expr","s","startsWith","slice","brace","indexOf","normalizeDynamicKey","btn","prepend","toastMessage","clipboard","writeText","then","message","toast","setTimeout","resolve","backdrop","modal","cancel","url","Error","json","data","status","statusText","err","String","prompt","blob","Blob","type","URL","createObjectURL","href","download","click","revokeObjectURL","setItem"],"sources":["https://translate-scwg.admin.aitsys.dev/app.ts"],"sourcesContent":["(() => {\r\n\ttype Locale = string;\r\n\ttype TranslationMap = Record${message}
`;\r\n\t\t\tconst actions = document.createElement(\"div\");\r\n\t\t\tactions.className = \"modal-actions\";\r\n\t\t\tconst cancel = document.createElement(\"button\");\r\n\t\t\tcancel.className = \"ghost\";\r\n\t\t\tcancel.textContent = \"Cancel\";\r\n\t\t\tconst ok = document.createElement(\"button\");\r\n\t\t\tok.className = \"danger\";\r\n\t\t\tok.textContent = \"Confirm\";\r\n\t\t\tcancel.onclick = () => {\r\n\t\t\t\tbackdrop.remove();\r\n\t\t\t\tresolve(false);\r\n\t\t\t};\r\n\t\t\tok.onclick = () => {\r\n\t\t\t\tbackdrop.remove();\r\n\t\t\t\tresolve(true);\r\n\t\t\t};\r\n\t\t\tactions.append(cancel, ok);\r\n\t\t\tmodal.append(actions);\r\n\t\t\tbackdrop.append(modal);\r\n\t\t\tmodalHost.append(backdrop);\r\n\t\t});\r\n\t}\r\n\r\n\tasync function fetchJson${message}
`; + const actions = document.createElement("div"); + actions.className = "modal-actions"; + const cancel = document.createElement("button"); + cancel.className = "ghost"; + cancel.textContent = "Cancel"; + const ok = document.createElement("button"); + ok.className = "danger"; + ok.textContent = "Confirm"; + cancel.onclick = () => { + backdrop.remove(); + resolve(false); + }; + ok.onclick = () => { + backdrop.remove(); + resolve(true); + }; + actions.append(cancel, ok); + modal.append(actions); + backdrop.append(modal); + modalHost.append(backdrop); + }); + } + + async function fetchJson