From 54b0dd46f822060deab373cce0265f8696025b07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 23 Jan 2026 18:51:01 +0100 Subject: [PATCH] vitreum headtags (temporary change) --- client/homebrew/pages/editPage/editPage.jsx | 2 +- client/homebrew/pages/homePage/homePage.jsx | 2 +- client/homebrew/pages/newPage/newPage.jsx | 2 +- client/homebrew/pages/sharePage/sharePage.jsx | 2 +- vitreum/headtags.js | 82 +++++++++++++++++++ vitreum/injectTag.js | 8 ++ 6 files changed, 94 insertions(+), 4 deletions(-) create mode 100644 vitreum/headtags.js create mode 100644 vitreum/injectTag.js diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index e1f7dca5f..b4e8d3d32 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -26,7 +26,7 @@ import RecentNavItems from './client/homebrew/navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; // Page specific imports -import { Meta } from 'vitreum/headtags'; +import { Meta } from './vitreum/headtags.js'; import { md5 } from 'hash-wasm'; import { gzipSync, strToU8 } from 'fflate'; import { makePatches, stringifyPatches } from '@sanity/diff-match-patch'; diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index fd5a7261a..9fe28a346 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -27,7 +27,7 @@ const { both: RecentNavItem } = RecentNavItems; // Page specific imports -import { Meta } from 'vitreum/headtags'; +import { Meta } from './vitreum/headtags.js'; const BREWKEY = 'homebrewery-new'; const STYLEKEY = 'homebrewery-new-style'; diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 860fa310c..c1947c326 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -26,7 +26,7 @@ import RecentNavItems from './client/homebrew/navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; // Page specific imports -import { Meta } from 'vitreum/headtags'; +import { Meta } from './vitreum/headtags.js'; const BREWKEY = 'HB_newPage_content'; const STYLEKEY = 'HB_newPage_style'; diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index 8de9642f5..86e6278c0 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -1,6 +1,6 @@ import './sharePage.less'; import React, { useState, useEffect, useCallback } from 'react'; -import { Meta } from 'vitreum/headtags'; +import { Meta } from './vitreum/headtags.js'; import Nav from './client/homebrew/navbar/nav.jsx'; import Navbar from './client/homebrew/navbar/navbar.jsx'; diff --git a/vitreum/headtags.js b/vitreum/headtags.js new file mode 100644 index 000000000..a74ad44f7 --- /dev/null +++ b/vitreum/headtags.js @@ -0,0 +1,82 @@ +import React, { useEffect } from "react"; +import injectTag from "./injectTag.js"; + +const obj2props = (obj) => + Object.entries(obj) + .map(([k, v]) => `${k}="${v}"`) + .join(" "); +const toStr = (chld) => (Array.isArray(chld) ? chld.join("") : chld); +const onServer = typeof window === "undefined"; + +let NamedTags = {}; +let UnnamedTags = []; + +export const HeadComponents = { + Title({ children }) { + if (onServer) NamedTags.title = `${toStr(children)}`; + useEffect(() => { + document.title = toStr(children); + }, [children]); + return null; + }, + Favicon({ type = "image/png", href = "", rel = "icon", id = "favicon" }) { + if (onServer) NamedTags.favicon = ``; + useEffect(() => { + document.getElementById(id).href = href; + }, [id, href]); + return null; + }, + Description({ children }) { + if (onServer) NamedTags.description = ``; + return null; + }, + Noscript({ children }) { + if (onServer) UnnamedTags.push(``); + return null; + }, + Script({ children = [], ...props }) { + if (onServer) { + UnnamedTags.push( + children.length + ? `` + : `