world-game/site/plugins/kirby-seo/index.js

6 lines
31 KiB
JavaScript
Raw Normal View History

(function(){"use strict";const i=window.Vue;function y(){return window.panel}function A(){return y().api}function N(){return y().app}function V(){return N().$library}function I(){const o=A();return{load:({parent:t,name:s})=>o.get(`${t}/sections/${s}`)}}const v=i.computed;i.customRef,i.defineAsyncComponent,i.defineComponent,i.effectScope,i.getCurrentInstance,i.getCurrentScope,i.h,i.inject,i.isProxy,i.isReactive,i.isReadonly,i.isRef,i.isShallow,i.markRaw;const P=i.nextTick;i.onActivated,i.onBeforeMount;const H=i.onBeforeUnmount;i.onBeforeUpdate,i.onDeactivated,i.onErrorCaptured;const T=i.onMounted;i.onRenderTracked,i.onRenderTriggered,i.onScopeDispose,i.onServerPrefetch;const L=i.onUnmounted;i.onUpdated,i.provide,i.proxyRefs,i.reactive,i.readonly;const g=i.ref;i.shallowReactive,i.shallowReadonly,i.shallowRef,i.toRaw,i.toRef,i.toRefs,i.triggerRef,i.unref,i.useAttrs,i.useCssModule,i.useCssVars,i.useListeners,i.useSlots;const E=i.watch;i.watchEffect,i.watchPostEffect,i.watchSyncEffect;async function q(o,e){const t=new TextDecoder;let s="";try{for(;;){const{value:a,done:n}=await o.read();if(n)break;a&&(s+=t.decode(a,{stream:!0}),s=O(s,e))}s+=t.decode(),O(s,e)}finally{o&&typeof o.releaseLock=="function"&&o.releaseLock()}}function O(o,e){let t=o;for(;;){const s=t.indexOf(`
`);if(s===-1)return t;const a=t.slice(0,s);if(t=t.slice(s+2),a.trim()==="")continue;const n=a.split(`
`).filter(r=>r.trim().startsWith("data:")).map(r=>r.trim().slice(5)).join(`
`).trim();if(n==="")continue;let l;try{l=JSON.parse(n)}catch(r){console.error("Failed to parse SSE event",r,n);continue}e(l)}}async function U({url:o,body:e,signal:t,onEvent:s}){var l;const a=y(),n=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream","X-CSRF":(l=a.system)==null?void 0:l.csrf,"X-Language":a.language.code},body:JSON.stringify(e),credentials:"same-origin",signal:t});if(!n.ok){let r=a.t("seo.ai.error.request");try{const c=await n.json();r=(c==null?void 0:c.message)||r}catch{}throw new Error(r)}if(!n.body)throw new Error(a.t("seo.ai.error.request"));await q(n.body.getReader(),r=>{var c;if(r.type==="error")throw new Error(((c=r.payload)==null?void 0:c.message)||a.t("seo.ai.error.request"));s(r)})}function B(o){const e=y();e.dialog.open({component:"k-form-dialog",props:{fields:{instructions:{label:e.t("seo.ai.dialog.custom.label"),type:"textarea",buttons:!1,placeholder:e.t("seo.ai.dialog.custom.placeholder"),required:!0}},submitButton:e.t("seo.ai.dialog.custom.submit")},on:{submit:t=>{e.dialog.close(),o(t)}}})}function F(o){var a;const t=(a=y().urls)==null?void 0:a.api,s=o==null?void 0:o.field;return!t||!s?null:`${t}/${s}/ai/stream`.replace(/([^:]\/)\/+/g,"$1")}function w(o,e,t,s,a,n,l,r){var c=typeof o=="function"?o.options:o;return e&&(c.render=e,c.staticRenderFns=t,c._compiled=!0),{exports:o,options:c}}const Z={__name:"alt-text",props:{ai:Boolean,autogenerate:Boolean,disabled:Boolean,endpoints:Object,id:String,label:String,help:String,name:String,placeholder:String,required:Boolean,value:{type:Object,default:()=>({text:"",decorative:!1,source:"manual"})}},emits:["input"],setup(o,{emit:e}){const t=o,s=y(),a=V(),n=g(null),l=g(!1);let r=null,c="";const m=v(()=>{var p;return((p=t.value)==null?void 0:p.text)??""}),u=v(()=>{var p;return((p=t.value)==null?void 0:p.decorative)??!1}),d=v(()=>{var p;return((p=t.value)==null?void 0:p.source)??"manual"}),b=v(()=>F(t.endpoints));async function _(p={}){const h=b.value;if(!(!h||t.disabled||l.value)){c="",k({text:"",source:"reviewed"}),r=new AbortController,l.value=!0;try{await U({url:h,body:p,signal:r.signal,onEvent:f=>{f.type==="text-delta"&&(c+=f.text||"",k({text:c,source:"reviewed"}))}})}catch(f){if((f==null?void 0:f.name)==="AbortError")return;console.error(f),s.notification.error((f==null?void 0:f.message)||s.t("seo.ai.error.request"))}finally{r=null,l.value=!1}}}function x(){r&&(r.abort(),r=null),l.value=!1}const M=v(()=>{if(l.value)return[{icon:"loader",text:s.t("seo.ai.action.stop"),theme:"red",click:()=>x()}];const p=[{icon:m.value===""?"seo-ai":"refresh",text:m.value===""?s.t("seo.ai.action.generate"):s.t("seo.ai.action.regenerate"),disabled:t.disabled||u.value||!b.value,click:()=>_()}];return m.value!==""&&p.push({icon:"cog",title:s.t("seo.ai.action.customize"),disabled:t.disabled||u.value||!b.value,click:()=>B(h=>{_({instructions:h.instructions})})}),p});function k(p){e("input",{text:m.value,decorative:u.value,source:d.value,...p})}function C(p){const h=d.value==="ai"||d.value==="reviewed"?"reviewed":"manual";k({text:p,source:h})}function S(p){var f;if(p.inputType==="insertLineBreak"||p.inputType==="insertParagraph"){p.preventDefault();return}const h=p.data??((f=p.dataTransfer)==null?void 0:f.getData("text/plain"));if(h&&/\n/.test(h)){p.preventDefault();const $=p.target,R=h.replace(/[\r\n]+/g," "),je=$.selectionStart,We=$.selectionEnd;$.setRangeText(R,je,We,"end"),$.dispatchEvent(new Event("input",{bubbles:!0}))}}return E(m,()=>{l.value||P(()=>a.autosize.update(n.value))}),T(()=>{P(()=>a.autosize(n.value))}),H(()=>{a.autosize.destroy(n.value),x()}),{__sfc:!0,props:t,$emit:e,panel:s,library:a,input:n,streaming:l,controller:r,streamedText:c,text:m,isDecorative:u,source:d,aiEndpointUrl:b,startAiStream:_,abortAiStream:x,buttons:M,emit:k,onTextInput:C,onBeforeInput:S}}};var j=function(){var e=this,t=e._self._c,s=e._self._setupProxy;return t("k-field",e._b({class:["k-alt-text-field",{"is-decorative":s.isDecorative}],attrs:{input:e.id},scopedSlots:e._u([e.ai&&!e.disabled?{key:"options",fn:function(){return[t("k-button-gro