import { createTextVNode, computed, defineComponent, h, inject, onServerPrefetch, ref, type VNode, watchEffect } from "vue"; import { RouterLink } from "vue-router"; import useAsyncState from "@/useAsyncState.ts"; import useHead from "@/useHead.ts"; import DJEmail from "@/DJEmail.tsx"; import getDJAPI from "@/api.ts"; export default defineComponent({ name: "ge-deutsch-article", props: { articleName: { type: String, required: true, }, }, async setup(props) { const currentLang = ref<"en" | "de">("de"); function clickBtn() { currentLang.value = currentLang.value === "en" ? "de" : "en"; } const parseDom = inject( "dom-parse", (innerHTML: string) => Object.assign(document.createElement("div"), { innerHTML }), ); const { result: articleContent, stateIsReady } = useAsyncState( "ge-deutsch-article-data", async ({ hostUrl }) => { const articleResponse = await fetch(`${hostUrl}/generative-energy/content/${props.articleName}.html`); const result = await articleResponse.text(); return result; }, ); const { result: articleData, stateIsReady: articleDataReady, } = useAsyncState('article-data', ({hostUrl}) => getDJAPI(hostUrl, '/rp-articles')); const articleMetadata = computed(() => articleData.value?.find(_ => _.slug === props.articleName)); useHead({ title: () => articleMetadata.value?.title ?? '', metatags: () => articleMetadata.value ? [ { name: 'title', content: articleMetadata.value.title }, { name: 'author', content: articleMetadata.value.author }, ] : [], }); function transformArticleNode(node: Node): VNode | string { if (node.nodeType === node.ELEMENT_NODE) { const el = node as Element; const attrs: Record = {}; const children = [...node.childNodes].map((_) => transformArticleNode(_)); if (el.attributes.getNamedItem('lang')?.value === 'en') { el.ariaHidden = 'true'; } if (el.tagName === "P") { (el as HTMLParagraphElement).dataset.tunit = ''; } if ('dataset' in el && 'tunit' in (el as HTMLElement).dataset) { if (el.tagName !== 'H1') { el.classList.add("text-slab"); } else { el.classList.add("title"); } if (!('notranslate' in (el as HTMLElement).dataset)) { children.unshift(h("button", { class: "swap", onClick: (e) => { (e.target as HTMLButtonElement).parentElement?.classList.toggle("swap"); }, }, "↻")); } } for (let i = 0; i < el.attributes.length; i++) { const item = el.attributes.item(i); if (item) { attrs[item.name] = item.value; } } return h((node as Element).tagName, attrs, children); } else { return createTextVNode(node.textContent ?? ""); } } function ArticleContentTransformed() { if (articleContent.value) { const dom = parseDom(articleContent.value); return h("div", {}, [...dom.children].map((_) => transformArticleNode(_))); } return
Artikel lädt...
; } await Promise.all([stateIsReady, articleDataReady]); return () => (
Zur Artikelübersicht

Bei dem untenstehenden Artikel handelt es sich um eine hobbymäßige, amateurhafte Übersetzung des Artikels „{ articleMetadata.value?.titleEn }“ von Ray Peat. Bei Ungenauigkeiten oder Fehlübersetzungen freue ich mich über eine Mail!

{ articleMetadata.value?.tags?.includes('in-arbeit') &&
🚧 Bitte beachte, dass diese Übersetzung noch in Arbeit ist! 🚧
}
); }, });