3 lines
6.7 KiB
JavaScript
3 lines
6.7 KiB
JavaScript
"use strict";(()=>{var S=Object.defineProperty;var g=(n,t)=>S(n,"name",{value:t,configurable:!0});var h={"D&D5E":{journal:"text.content",item:"system.description.value"},PF2E:{journal:"text.content",item:"system.description.value"}};var p=class n{static{g(this,"Translator")}static async translate(t){return await n.translateWithChatLlama(t)}static async getPromptTemplate(t,e){let a=i.getSetting("translate-all","promptTemplatePath");if(!a)return"";let s="";if(a)try{let r=foundry.utils.getRoute(a);s=await fetch(r).then(o=>o.text())}catch(r){ui?.notifications?.warn(`Could not load prompt template. ${r}`)}return s+`: ${e}`}static async generatePrompt(t,e,a){let s=i.getSetting("translate-all","promptTemplatePath"),r="";return s?r=await n.getPromptTemplate(s,a):r=`Translate the following ${t} description into ${e}: You recieve data formatted in HTML. Don't change format and structure, like HTML tags. Don't add new HTML tags and don't change the nesting of HTML tags. If quotation marks are used, they must be closed. Don't add extra quotation marks. Do not add any additional code encapsulation or formatting. Just return the translated text. ${a}.`,r}static async getModels(){let t,e=i.getSetting("translate-all","apiEndpoint");try{t=await fetch(`${e}/api/tags`,{method:"GET"})}catch(r){ui?.notifications?.error(`Ollama API call failed. ${r}`)}if(!t?.ok){ui?.notifications?.error("Ollama API call failed.");return}return(await t.json()).models.reduce((r,o)=>(r[o.model]=o.model,r),{})}static async translateWithChatLlama(t){let e,a=i.getSetting("translate-all","apiEndpoint"),s=i.getSetting("translate-all","targetSystem"),r=i.getSetting("translate-all","targetLanguage"),o=i.getSetting("translate-all","targetModel"),d=await n.generatePrompt(s,r,t);try{let u=JSON.stringify({model:o,prompt:d,stream:!1});console.log(`Body. ${u}`),e=await fetch(`${a}/generate`,{method:"POST",headers:{"Content-Type":"application/json"},body:u})}catch(u){ui?.notifications?.error(`Ollama API call failed. ${u}`)}if(!e?.ok){ui?.notifications?.error(`Ollama API call failed. ${e?.status}`);return}let l=(await e.json())?.response;return l.startsWith("```html")&&(l=l.substring(8,l.length-4)),console.log(`Response after cut: ${l}`),l??void 0}};var i=class{static{g(this,"TranslateAllSettingHandler")}gameSettings=game.settings;settings={targetSystem:{name:"translate-all.settings.game.system.name",hint:"translate-all.settings.game.system.hint",scope:"world",config:!0,type:String,default:"PF2E",choices:{"D&D5E":"D&D 5e",PF2E:"Pathfinder 2e"}},apiEndpoint:{name:"translate-all.settings.apiEndpoint.name",hint:"translate-all.settings.apiEndpoint.hint",scope:"world",config:!0,type:String,default:"https://api.openai.com/v1"},targetLanguage:{name:"translate-all.settings.language.name",hint:"translate-all.settings.language.hint",scope:"world",config:!0,type:String,default:"Italian",masked:!0},targetModel:{name:"translate-all.settings.model.name",hint:"translate-all.settings.model.hint",scope:"world",config:!0,type:String,default:"gpt-4o-mini",choices:{}},promptModel:{name:"translate-all.settings.promptTemplatePath.name",hint:"translate-all.settings.promptTemplatePath.hint",scope:"world",config:!0,type:String,filePicker:!0,default:""}};constructor(){}async init(){await this._registerSettings()}async _registerSettings(){this._register("translate-all","targetSystem",this.settings.targetSystem),this._register("translate-all","apiEndpoint",this.settings.apiEndpoint),this._register("translate-all","targetLanguage",this.settings.targetLanguage);let t=await p.getModels();t&&(this.settings.targetModel.choices=t),this._register("translate-all","targetModel",this.settings.targetModel),this._register("translate-all","promptTemplatePath",this.settings.promptModel)}_register(t,e,a){this.gameSettings.register(t,e,a)}static getSetting(t,e){return game.settings.get(t,e)}};var m=class n{static{g(this,"DataHandler")}static getDescription(t,e){let a=i.getSetting("translate-all","targetSystem");if(e==="journal")return n.getDescriptionFromJournal(t,a);if(e==="item")return n.getDescriptionFromItem(t,a)}static getDescriptionFromJournal(t,e){switch(e){case"PF2E":return(t?.options).document.text.content||void 0;case"D&D5E":return(t?.options).document.text.content||void 0;default:return}}static getDescriptionFromItem(t,e){switch(e){case"PF2E":return(t?.object?.system).description.value;case"D&D5E":return t?.options?.document.system.description.value||void 0;default:return}}static getPathToUpdate(t){let e=i.getSetting("translate-all","targetSystem");return h[e][t]}static async getTranslatedDescription(t,e,a,s){let r=n.getDescription(t,a);if(!r)return;let o=n.getPathToUpdate(a);s(t,e,r,o)}};var c=class n{static{g(this,"HTMLHandler")}static async translateApp(t,e,a,s){let o=(e instanceof jQuery?e:$(e)).find(".window-header");if(o.find("button.translate-btn").length)return;let d=$('<button class="translate-btn header-control icon fa-solid fa-earth-americas translate-btn" type="button" data-tooltip="\u041F\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435" aria-label="\u041F\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435"/>');d.on("click",async()=>{let l=await p.translate(a);if(!l){ui?.notifications?.error("Translation failed or returned empty.");return}await n.updateDescription(t,l,s)});let y=o.find("h1");if(y){y.after(d);return}o.append(d)}static async updateDescription(t,e,a){let s=i.getSetting("translate-all","targetSystem");s==="D&D5E"?await this.update5eDescription(t,e,a):s==="PF2E"&&await this.updatePF2EDescription(t,e,a)}static async update5eDescription(t,e,a){try{await t.document.update({[a]:e}),t.render(!0),t.close()}catch(s){ui?.notifications?.error(`Error updating item description: ${s}`)}}static async updatePF2EDescription(t,e,a){let s=t.object;try{a.includes("system")?await t.object.update({[a]:e}):await t.options.document.updateSource({[a]:e})}catch(r){ui?.notifications?.error(`Error updating item description: ${r}`)}a.includes("system")&&(t.object.render(!0),await t.object.sheet?.close()),await t.render(!0),await t.close()}};Hooks.once("init",async()=>{if(!game.settings){ui?.notifications?.error("Game settings are not available. This module requires Foundry VTT version 10 or later.");return}await new i().init()});Hooks.on("renderJournalPageSheet",async(n,t)=>{m.getTranslatedDescription(n,t,"journal",c.translateApp)});Hooks.on("renderItemSheet",async(n,t)=>{m.getTranslatedDescription(n,t,"item",c.translateApp)});Hooks.on("renderItemSheet5e",async(n,t)=>{m.getTranslatedDescription(n,t,"item",c.translateApp)});Hooks.on("renderJournalEntryPageSheet",async(n,t)=>{m.getTranslatedDescription(n,t,"journal",c.translateApp)});})();
|
|
//# sourceMappingURL=main.js.map
|