@gjsify/site 0.64.11 → 0.64.12-next.279
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +85 -19
- package/lib/cli.js +4 -14
- package/lib/client/site.css +283 -3
- package/lib/index.d.ts +5 -0
- package/lib/index.js +5 -0
- package/lib/render/blog.d.ts +62 -0
- package/lib/render/blog.js +240 -0
- package/lib/render/developer.d.ts +30 -0
- package/lib/render/developer.js +285 -0
- package/lib/render/feed.d.ts +25 -0
- package/lib/render/feed.js +97 -0
- package/lib/render/i18n.d.ts +2 -2
- package/lib/render/i18n.js +2 -0
- package/lib/render/icons.d.ts +1 -1
- package/lib/render/icons.js +3 -0
- package/lib/render/image-backend.d.ts +2 -1
- package/lib/render/image-backend.js +2 -2
- package/lib/render/images.d.ts +2 -0
- package/lib/render/images.js +3 -2
- package/lib/render/layout.d.ts +94 -0
- package/lib/render/layout.js +216 -0
- package/lib/render/markdown.d.ts +15 -1
- package/lib/render/markdown.js +245 -20
- package/lib/render/pages.d.ts +21 -8
- package/lib/render/pages.js +99 -263
- package/lib/render/seo.d.ts +34 -1
- package/lib/render/seo.js +50 -4
- package/lib/site-data/blog.d.ts +30 -0
- package/lib/site-data/blog.js +226 -0
- package/lib/site-data/config.d.ts +7 -2
- package/lib/site-data/config.js +118 -23
- package/lib/site-data/developer.d.ts +16 -0
- package/lib/site-data/developer.js +12 -0
- package/lib/site-data/frontmatter.d.ts +7 -0
- package/lib/site-data/frontmatter.js +242 -0
- package/lib/site-data/index.d.ts +4 -0
- package/lib/site-data/index.js +4 -0
- package/lib/site-data/related.d.ts +4 -2
- package/lib/site-data/related.js +8 -3
- package/lib/site-data/resume.d.ts +64 -0
- package/lib/site-data/resume.js +277 -0
- package/lib/site-data/types.d.ts +57 -15
- package/lib/site.d.ts +2 -26
- package/lib/site.js +211 -78
- package/package.json +13 -12
- package/po/de.po +88 -25
- package/po/site.pot +86 -23
- package/lib/render/overview.d.ts +0 -19
- package/lib/render/overview.js +0 -53
package/po/de.po
CHANGED
|
@@ -6,15 +6,99 @@ msgstr ""
|
|
|
6
6
|
"Content-Type: text/plain; charset=UTF-8\n"
|
|
7
7
|
"Content-Transfer-Encoding: 8bit\n"
|
|
8
8
|
|
|
9
|
+
msgid "Updated {date}"
|
|
10
|
+
msgstr "Aktualisiert am {date}"
|
|
11
|
+
|
|
12
|
+
msgid "Draft"
|
|
13
|
+
msgstr "Entwurf"
|
|
14
|
+
|
|
15
|
+
msgid "Subscribe to the feed"
|
|
16
|
+
msgstr "Feed abonnieren"
|
|
17
|
+
|
|
18
|
+
msgid "Posts tagged “{tag}”"
|
|
19
|
+
msgstr "Beiträge zum Thema „{tag}“"
|
|
20
|
+
|
|
21
|
+
msgid "Blog"
|
|
22
|
+
msgstr "Blog"
|
|
23
|
+
|
|
24
|
+
msgid "Posts by {name}"
|
|
25
|
+
msgstr "Beiträge von {name}"
|
|
26
|
+
|
|
27
|
+
msgid "No posts in this language yet."
|
|
28
|
+
msgstr "In dieser Sprache gibt es noch keine Beiträge."
|
|
29
|
+
|
|
30
|
+
msgid "All posts"
|
|
31
|
+
msgstr "Alle Beiträge"
|
|
32
|
+
|
|
33
|
+
msgid "From the blog"
|
|
34
|
+
msgstr "Aus dem Blog"
|
|
35
|
+
|
|
36
|
+
msgid "CV"
|
|
37
|
+
msgstr "Lebenslauf"
|
|
38
|
+
|
|
39
|
+
msgid "Apps"
|
|
40
|
+
msgstr "Apps"
|
|
41
|
+
|
|
42
|
+
msgid "Support my work"
|
|
43
|
+
msgstr "Meine Arbeit unterstützen"
|
|
44
|
+
|
|
45
|
+
msgid "Read my CV"
|
|
46
|
+
msgstr "Zum Lebenslauf"
|
|
47
|
+
|
|
48
|
+
msgid "Elsewhere"
|
|
49
|
+
msgstr "Anderswo"
|
|
50
|
+
|
|
51
|
+
msgid "today"
|
|
52
|
+
msgstr "heute"
|
|
53
|
+
|
|
54
|
+
msgid "Experience, projects and skills of {name}."
|
|
55
|
+
msgstr "Berufserfahrung, Projekte und Kenntnisse von {name}."
|
|
56
|
+
|
|
57
|
+
msgid "Experience"
|
|
58
|
+
msgstr "Berufserfahrung"
|
|
59
|
+
|
|
60
|
+
msgid "Projects"
|
|
61
|
+
msgstr "Projekte"
|
|
62
|
+
|
|
63
|
+
msgid "Education"
|
|
64
|
+
msgstr "Ausbildung"
|
|
65
|
+
|
|
66
|
+
msgid "Skills"
|
|
67
|
+
msgstr "Kenntnisse"
|
|
68
|
+
|
|
69
|
+
msgid "Languages"
|
|
70
|
+
msgstr "Sprachen"
|
|
71
|
+
|
|
72
|
+
msgid "Back to {app}"
|
|
73
|
+
msgstr "Zurück zu {app}"
|
|
74
|
+
|
|
75
|
+
msgid "{name} writes free software. Support the work with a transfer or a service."
|
|
76
|
+
msgstr "{name} schreibt freie Software. Unterstütze die Arbeit per Überweisung oder über einen Dienst."
|
|
77
|
+
|
|
9
78
|
msgid "Support"
|
|
10
79
|
msgstr "Unterstützen"
|
|
11
80
|
|
|
12
|
-
msgid "
|
|
13
|
-
msgstr "
|
|
81
|
+
msgid "Privacy"
|
|
82
|
+
msgstr "Datenschutz"
|
|
83
|
+
|
|
84
|
+
msgid "What {app} does with data."
|
|
85
|
+
msgstr "Was {app} mit Daten tut."
|
|
86
|
+
|
|
87
|
+
msgid "Legal Notice"
|
|
88
|
+
msgstr "Impressum"
|
|
89
|
+
|
|
90
|
+
msgid "Who publishes {app}, and how to reach them."
|
|
91
|
+
msgstr "Wer {app} veröffentlicht, und wie man diese Person erreicht."
|
|
14
92
|
|
|
15
93
|
msgid "Language"
|
|
16
94
|
msgstr "Sprache"
|
|
17
95
|
|
|
96
|
+
msgid "Source code"
|
|
97
|
+
msgstr "Quellcode"
|
|
98
|
+
|
|
99
|
+
msgid "Made with {project}"
|
|
100
|
+
msgstr "Gemacht mit {project}"
|
|
101
|
+
|
|
18
102
|
msgid "Website"
|
|
19
103
|
msgstr "Webseite"
|
|
20
104
|
|
|
@@ -24,9 +108,6 @@ msgstr "Hilfe"
|
|
|
24
108
|
msgid "FAQ"
|
|
25
109
|
msgstr "FAQ"
|
|
26
110
|
|
|
27
|
-
msgid "Source code"
|
|
28
|
-
msgstr "Quellcode"
|
|
29
|
-
|
|
30
111
|
msgid "Report an issue"
|
|
31
112
|
msgstr "Fehler melden"
|
|
32
113
|
|
|
@@ -210,11 +291,8 @@ msgstr "Architekturen"
|
|
|
210
291
|
msgid "by {developer}"
|
|
211
292
|
msgstr "von {developer}"
|
|
212
293
|
|
|
213
|
-
msgid "
|
|
214
|
-
msgstr "
|
|
215
|
-
|
|
216
|
-
msgid "Privacy"
|
|
217
|
-
msgstr "Datenschutz"
|
|
294
|
+
msgid "{app} is free software. Support its development with a transfer or a service."
|
|
295
|
+
msgstr "{app} ist freie Software. Unterstütze die Entwicklung per Überweisung oder über einen Dienst."
|
|
218
296
|
|
|
219
297
|
msgid "{app} is licensed under {license}."
|
|
220
298
|
msgstr "{app} steht unter der Lizenz {license}."
|
|
@@ -222,21 +300,6 @@ msgstr "{app} steht unter der Lizenz {license}."
|
|
|
222
300
|
msgid "This page reproduces text licensed under {license}."
|
|
223
301
|
msgstr "Diese Seite gibt Texte unter der Lizenz {license} wieder."
|
|
224
302
|
|
|
225
|
-
msgid "Made with {project}"
|
|
226
|
-
msgstr "Gemacht mit {project}"
|
|
227
|
-
|
|
228
|
-
msgid "{app} is free software. Support its development with a transfer or a service."
|
|
229
|
-
msgstr "{app} ist freie Software. Unterstütze die Entwicklung per Überweisung oder über einen Dienst."
|
|
230
|
-
|
|
231
|
-
msgid "What {app} does with data."
|
|
232
|
-
msgstr "Was {app} mit Daten tut."
|
|
233
|
-
|
|
234
|
-
msgid "Who publishes {app}, and how to reach them."
|
|
235
|
-
msgstr "Wer {app} veröffentlicht, und wie man diese Person erreicht."
|
|
236
|
-
|
|
237
|
-
msgid "Back to {app}"
|
|
238
|
-
msgstr "Zurück zu {app}"
|
|
239
|
-
|
|
240
303
|
msgid "This page is a static file: no cookie, no analytics, nothing from a third party."
|
|
241
304
|
msgstr "Diese Seite ist eine statische Datei: keine Cookies, keine Analysewerkzeuge, nichts von Drittanbietern."
|
|
242
305
|
|
package/po/site.pot
CHANGED
|
@@ -5,15 +5,99 @@ msgstr ""
|
|
|
5
5
|
"Content-Type: text/plain; charset=UTF-8\n"
|
|
6
6
|
"Content-Transfer-Encoding: 8bit\n"
|
|
7
7
|
|
|
8
|
+
msgid "Updated {date}"
|
|
9
|
+
msgstr ""
|
|
10
|
+
|
|
11
|
+
msgid "Draft"
|
|
12
|
+
msgstr ""
|
|
13
|
+
|
|
14
|
+
msgid "Subscribe to the feed"
|
|
15
|
+
msgstr ""
|
|
16
|
+
|
|
17
|
+
msgid "Posts tagged “{tag}”"
|
|
18
|
+
msgstr ""
|
|
19
|
+
|
|
20
|
+
msgid "Blog"
|
|
21
|
+
msgstr ""
|
|
22
|
+
|
|
23
|
+
msgid "Posts by {name}"
|
|
24
|
+
msgstr ""
|
|
25
|
+
|
|
26
|
+
msgid "No posts in this language yet."
|
|
27
|
+
msgstr ""
|
|
28
|
+
|
|
29
|
+
msgid "All posts"
|
|
30
|
+
msgstr ""
|
|
31
|
+
|
|
32
|
+
msgid "From the blog"
|
|
33
|
+
msgstr ""
|
|
34
|
+
|
|
35
|
+
msgid "CV"
|
|
36
|
+
msgstr ""
|
|
37
|
+
|
|
38
|
+
msgid "Apps"
|
|
39
|
+
msgstr ""
|
|
40
|
+
|
|
41
|
+
msgid "Support my work"
|
|
42
|
+
msgstr ""
|
|
43
|
+
|
|
44
|
+
msgid "Read my CV"
|
|
45
|
+
msgstr ""
|
|
46
|
+
|
|
47
|
+
msgid "Elsewhere"
|
|
48
|
+
msgstr ""
|
|
49
|
+
|
|
50
|
+
msgid "today"
|
|
51
|
+
msgstr ""
|
|
52
|
+
|
|
53
|
+
msgid "Experience, projects and skills of {name}."
|
|
54
|
+
msgstr ""
|
|
55
|
+
|
|
56
|
+
msgid "Experience"
|
|
57
|
+
msgstr ""
|
|
58
|
+
|
|
59
|
+
msgid "Projects"
|
|
60
|
+
msgstr ""
|
|
61
|
+
|
|
62
|
+
msgid "Education"
|
|
63
|
+
msgstr ""
|
|
64
|
+
|
|
65
|
+
msgid "Skills"
|
|
66
|
+
msgstr ""
|
|
67
|
+
|
|
68
|
+
msgid "Languages"
|
|
69
|
+
msgstr ""
|
|
70
|
+
|
|
71
|
+
msgid "Back to {app}"
|
|
72
|
+
msgstr ""
|
|
73
|
+
|
|
74
|
+
msgid "{name} writes free software. Support the work with a transfer or a service."
|
|
75
|
+
msgstr ""
|
|
76
|
+
|
|
8
77
|
msgid "Support"
|
|
9
78
|
msgstr ""
|
|
10
79
|
|
|
11
|
-
msgid "
|
|
80
|
+
msgid "Privacy"
|
|
81
|
+
msgstr ""
|
|
82
|
+
|
|
83
|
+
msgid "What {app} does with data."
|
|
84
|
+
msgstr ""
|
|
85
|
+
|
|
86
|
+
msgid "Legal Notice"
|
|
87
|
+
msgstr ""
|
|
88
|
+
|
|
89
|
+
msgid "Who publishes {app}, and how to reach them."
|
|
12
90
|
msgstr ""
|
|
13
91
|
|
|
14
92
|
msgid "Language"
|
|
15
93
|
msgstr ""
|
|
16
94
|
|
|
95
|
+
msgid "Source code"
|
|
96
|
+
msgstr ""
|
|
97
|
+
|
|
98
|
+
msgid "Made with {project}"
|
|
99
|
+
msgstr ""
|
|
100
|
+
|
|
17
101
|
msgid "Website"
|
|
18
102
|
msgstr ""
|
|
19
103
|
|
|
@@ -23,9 +107,6 @@ msgstr ""
|
|
|
23
107
|
msgid "FAQ"
|
|
24
108
|
msgstr ""
|
|
25
109
|
|
|
26
|
-
msgid "Source code"
|
|
27
|
-
msgstr ""
|
|
28
|
-
|
|
29
110
|
msgid "Report an issue"
|
|
30
111
|
msgstr ""
|
|
31
112
|
|
|
@@ -209,10 +290,7 @@ msgstr ""
|
|
|
209
290
|
msgid "by {developer}"
|
|
210
291
|
msgstr ""
|
|
211
292
|
|
|
212
|
-
msgid "
|
|
213
|
-
msgstr ""
|
|
214
|
-
|
|
215
|
-
msgid "Privacy"
|
|
293
|
+
msgid "{app} is free software. Support its development with a transfer or a service."
|
|
216
294
|
msgstr ""
|
|
217
295
|
|
|
218
296
|
msgid "{app} is licensed under {license}."
|
|
@@ -221,21 +299,6 @@ msgstr ""
|
|
|
221
299
|
msgid "This page reproduces text licensed under {license}."
|
|
222
300
|
msgstr ""
|
|
223
301
|
|
|
224
|
-
msgid "Made with {project}"
|
|
225
|
-
msgstr ""
|
|
226
|
-
|
|
227
|
-
msgid "{app} is free software. Support its development with a transfer or a service."
|
|
228
|
-
msgstr ""
|
|
229
|
-
|
|
230
|
-
msgid "What {app} does with data."
|
|
231
|
-
msgstr ""
|
|
232
|
-
|
|
233
|
-
msgid "Who publishes {app}, and how to reach them."
|
|
234
|
-
msgstr ""
|
|
235
|
-
|
|
236
|
-
msgid "Back to {app}"
|
|
237
|
-
msgstr ""
|
|
238
|
-
|
|
239
302
|
msgid "This page is a static file: no cookie, no analytics, nothing from a third party."
|
|
240
303
|
msgstr ""
|
|
241
304
|
|
package/lib/render/overview.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { ClientAssets } from './pages.js';
|
|
2
|
-
export interface OverviewApp {
|
|
3
|
-
name: string;
|
|
4
|
-
/** Absolute address of this app's support page in the rendered language. */
|
|
5
|
-
url: string;
|
|
6
|
-
}
|
|
7
|
-
export interface OverviewPage {
|
|
8
|
-
lang: string;
|
|
9
|
-
languages: readonly string[];
|
|
10
|
-
defaultLanguage: string;
|
|
11
|
-
/** Absolute address of the overview per language. */
|
|
12
|
-
urls: Readonly<Record<string, string>>;
|
|
13
|
-
/** Root-relative address per language, for the language switch. */
|
|
14
|
-
paths: Readonly<Record<string, string>>;
|
|
15
|
-
apps: readonly OverviewApp[];
|
|
16
|
-
assets: ClientAssets;
|
|
17
|
-
t: (msgid: string) => string;
|
|
18
|
-
}
|
|
19
|
-
export declare function renderOverview(page: OverviewPage): string;
|
package/lib/render/overview.js
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
// The page that lists several apps, each linking to its own support page. It reads no app's data
|
|
2
|
-
// beyond a name and an icon, so it needs none of the per-app page machinery.
|
|
3
|
-
import { esc } from './html.js';
|
|
4
|
-
import { languageName, linkCard } from './pages.js';
|
|
5
|
-
import { ogLocale } from './seo.js';
|
|
6
|
-
export function renderOverview(page) {
|
|
7
|
-
const { lang, t } = page;
|
|
8
|
-
const title = t('Support');
|
|
9
|
-
const intro = t('These apps are free software. Pick one to see how to support its development.');
|
|
10
|
-
const alternates = page.languages.map((code) => `<link rel="alternate" hreflang="${esc(code)}" href="${esc(page.urls[code])}">`);
|
|
11
|
-
const switcher = page.languages
|
|
12
|
-
.map((code) => code === lang
|
|
13
|
-
? `<li><span aria-current="true">${esc(languageName(code))}</span></li>`
|
|
14
|
-
: `<li><a href="${esc(page.paths[code])}" hreflang="${esc(code)}" lang="${esc(code)}">${esc(languageName(code))}</a></li>`)
|
|
15
|
-
.join('');
|
|
16
|
-
return `<!doctype html>
|
|
17
|
-
<html lang="${esc(lang)}">
|
|
18
|
-
<head>
|
|
19
|
-
<meta charset="utf-8">
|
|
20
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
21
|
-
<title>${esc(title)}</title>
|
|
22
|
-
<meta name="description" content="${esc(intro)}">
|
|
23
|
-
<link rel="canonical" href="${esc(page.urls[lang])}">
|
|
24
|
-
${alternates.join('\n')}
|
|
25
|
-
<link rel="alternate" hreflang="x-default" href="${esc(page.urls[page.defaultLanguage])}">
|
|
26
|
-
<meta property="og:type" content="website">
|
|
27
|
-
<meta property="og:title" content="${esc(title)}">
|
|
28
|
-
<meta property="og:description" content="${esc(intro)}">
|
|
29
|
-
<meta property="og:url" content="${esc(page.urls[lang])}">
|
|
30
|
-
<meta property="og:locale" content="${esc(ogLocale(lang))}">
|
|
31
|
-
${page.assets.css.map((href) => `<link rel="stylesheet" href="${esc(href)}">`).join('\n')}
|
|
32
|
-
</head>
|
|
33
|
-
<body>
|
|
34
|
-
<header class="masthead">
|
|
35
|
-
<div class="hero-inner">
|
|
36
|
-
<div class="hero-text">
|
|
37
|
-
<h1>${esc(title)}</h1>
|
|
38
|
-
</div>
|
|
39
|
-
</div>
|
|
40
|
-
</header>
|
|
41
|
-
<main>
|
|
42
|
-
<div class="column">
|
|
43
|
-
<p class="support-intro">${esc(intro)}</p>
|
|
44
|
-
<ul class="card-list">
|
|
45
|
-
${page.apps.map((app) => linkCard(app.url, app.name, 'heart')).join('\n')}
|
|
46
|
-
</ul>
|
|
47
|
-
</div>
|
|
48
|
-
</main>
|
|
49
|
-
<footer class="footer"><div class="footer-inner"><nav class="footer-languages" aria-label="${esc(t('Language'))}"><ul>${switcher}</ul></nav></div></footer>
|
|
50
|
-
</body>
|
|
51
|
-
</html>
|
|
52
|
-
`;
|
|
53
|
-
}
|