3 <TITLE>Topic Feed
</TITLE>
5 html{ Color: #E3E3E3; Background: #
700020; Font-Family: UI-Rounded, 'Hiragino Maru Gothic ProN', Quicksand, Comfortaa, Manjari, 'Arial Rounded MT', 'Arial Rounded MT Bold', Calibri, Sans-Serif; Line-Height:
1.5; Text-Shadow: Calc(
1EM /
12) Calc(
1EM /
12) #
000000 }
6 body{ Display: Grid; Box-Sizing: Border-Box; Margin: Auto; Padding-Inline:
1CH; Min-Block-Size:
100VH; Inline-Size:
100%; Max-Inline-Size:
48REM; Align-Content: Center; Justify-Content: Stretch }
7 :Any-Link{ Color: #
87E6DD }
8 footer{ Border-Block-Start: Thin Solid; Padding-Block:
1REM; Font-Size: Smaller; Text-Align: End }
9 dd :Any-Link{ Display: Block; Border: Thin Solid; Padding-Inline:
.5REM; Border-Radius:
.5REM; Min-Inline-Size: Max-Content; Inline-Size:
28CH; Color: #D6B7BF; Background: #
1A1A1A; Text-Shadow: None }
12 <NAV><P><A HRef=
/>Home
</A></P><DL></DL></NAV>
14 <A HRef=https://www.ladys.computer
/><IMG Width=
88 Height=
31 Style=
"Display: Block; Margin: Auto; Image-Rendering: Pixelated" Src=
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfCAMAAABUFvrSAAAAAXNSR0IArs4c6QAAADBQTFRF////AAAAGhoaPj4+aGhok5OTvr6+cAAgmSJEs4qW897jH31jLLONOua1UwB0j2YApwkwfQAAAalJREFUSIm1lgGzgiAQhHM1o3sx/f9/++SOg+OAbJpxx0gxP9blxG7LRbot+xW6JzBmCvtjf/yiZwbPzidweE6Vxh6foVPwXsAVUvZAVME8ig51Di6OAao8KCXv8fkQII0D31ttHkyFwrzDK3cQkfSFZQnSwIHbWd1cFA2lgrk3dYVUYdJ04M1od471rvMXWTAKeJmAa3GvHZgJxHlwS1C7EvFHMPB6yWf1USikoFMshEI+cfyX1TmGcUgmEOSIZfIyd+D4lYUOnBlE1HpXMJdbwg7KLWWcDS8+Cp06WN8aO/QBCclu94BwxuwZGDjWSLXojOqzF/RgUBXJb18V02WqYddBesdZLgogRoeKpieiGboDr0aN43Qpb1EaOTo+0iawjsTtN4+0gGM2JrBYkAXcjvT1WnEC5nuI0g7A29rq1HG1qo71wK/H9/f7WC5X3pr1eASO9f5tFIOMD3BdlAvYRpEnr0TxtDMJM6cevLkgvOOm2mDKW9mQ0Trw9NWkNdW8Ru2B3P8PL9PBpVaAP/n1y7S/9LMy+DH9QQLTLxLwVX+xtkt0gC/SP0CwO6Ncy8sUAAAAAElFTkSuQmCC" Alt=
"Lady’s Computer"></A>
17 const nav = document.body.querySelector(
"nav")
18 const dl = nav.querySelector(
"dl")
19 const parser = new DOMParser
20 fetch(`${location}.jsonld`)
23 const topic = meta.subject || meta[
"@id"].split(
"/").pop()
24 document.title = topic
25 document.body.querySelector(
"h1").textContent =
"subject" in meta
28 if (
"subject" in meta) {
30 .insertBefore(document.createElement(
"p"), dl)
31 .appendChild(document.createElement(
"a"))
33 a.textContent =
"Topics" }
34 const { first, prev, next, current, items } = meta
35 if (first && first != location && first != prev) {
37 .insertBefore(document.createElement(
"p"), dl)
38 .appendChild(document.createElement(
"a"))
40 a.textContent =
"First Page" }
43 .insertBefore(document.createElement(
"p"), dl)
44 .appendChild(document.createElement(
"a"))
46 a.textContent =
"Previous Page" }
47 let prevDate = undefined
48 for (const status of items) {
49 if (status.created != prevDate) dl.appendChild(document.createElement(
"dt")).textContent = status.created
51 .appendChild(document.createElement(
"dd"))
52 .appendChild(document.createElement(
"a"))
53 a.href = status[
"@id"]
54 const { title } = status
55 if (title) a.textContent = title.length
> 28
56 ?
"".concat(...title.slice(
0,
27),
"…")
59 const summaryText = (() =
> {
61 const d = parser.parseFromString(status.content,
"application/xhtml+xml")
62 const div = document.createElement(
"div")
63 div.appendChild(document.importNode(d.documentElement, true))
64 Object.assign(div.style,
65 { position:
"absolute"
69 , overflow:
"hidden" })
70 document.body.appendChild(div)
71 const text = div.innerText
72 document.body.removeChild(div)
75 const chars = Array.from(summaryText.trim().replaceAll(/\s+/gu,
" "))
76 a.textContent = chars.length
> 28
77 ?
"".concat(...chars.slice(
0,
27),
"…")
78 : summaryText || status.identifier } }
81 .appendChild(document.createElement(
"p"))
82 .appendChild(document.createElement(
"a"))
84 a.textContent =
"Next Page" }
85 if (current && current != location && current != next) {
87 .appendChild(document.createElement(
"p"))
88 .appendChild(document.createElement(
"a"))
90 a.textContent =
"Latest Page" } })