Update to FF Webpage V1.3.x
BIN
ff-webpage.pdf
|
@ -4,8 +4,8 @@
|
|||
#show: template.with(
|
||||
logo: "../webpage/logo.png",
|
||||
title: "Anleitung",
|
||||
alttitle: "Anleitung zu FF Webpage bis v1.2.x",
|
||||
subtitle: "bis v1.2.x",
|
||||
alttitle: "Anleitung zu FF Webpage bis v1.3.x",
|
||||
subtitle: "bis v1.3.x",
|
||||
details: (
|
||||
"Open Source Software",
|
||||
"entwickelt durch JK Effects",
|
||||
|
|
|
@ -19,9 +19,9 @@
|
|||
let __glossary_entries = __glossary_entries.final()
|
||||
if key in __glossary_entries {
|
||||
let entry = __glossary_entries.at(key)
|
||||
|
||||
|
||||
let gloss = __query_labels_with_key(key, before: true)
|
||||
|
||||
|
||||
let is_first = gloss == ()
|
||||
let entlong = entry.at("long", default: "")
|
||||
let textLink = if display != none {
|
||||
|
@ -31,7 +31,7 @@
|
|||
} else {
|
||||
[#entry.short#suffix]
|
||||
}
|
||||
|
||||
|
||||
[#link(label(entry.key), textLink)#label(__glossary_label_prefix + entry.key)]
|
||||
} else {
|
||||
text(fill: red, "Glossary entry not found: " + key)
|
||||
|
@ -80,72 +80,70 @@
|
|||
entry,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
x
|
||||
})
|
||||
|
||||
|
||||
let groups = entries.map(x => x.at("group", default: "")).dedup()
|
||||
// move no group to the front
|
||||
groups.insert(0, "")
|
||||
groups.pop()
|
||||
|
||||
|
||||
for group in groups.sorted() {
|
||||
if group != "" [#heading(group, level: 2) ]
|
||||
for entry in entries.sorted(key: x => x.short) {
|
||||
if entry.group == group {
|
||||
[
|
||||
#show figure.where(kind: __glossary_figure): it => it.caption
|
||||
#par(hanging-indent: 1em, first-line-indent: 0em)[
|
||||
#figure(
|
||||
supplement: "",
|
||||
kind: __glossary_figure,
|
||||
numbering: none,
|
||||
caption: {
|
||||
context {
|
||||
set align(left)
|
||||
set par(justify: true)
|
||||
let term_references = __query_labels_with_key(entry.key)
|
||||
if term_references.len() != 0 or show-all {
|
||||
let desc = entry.at("desc", default: "")
|
||||
let long = entry.at("long", default: "")
|
||||
let hasLong = long != "" and long != []
|
||||
let hasDesc = desc != "" and desc != []
|
||||
{
|
||||
set text(weight: 600)
|
||||
if hasLong {
|
||||
emph(entry.short) + [ -- ] + entry.long
|
||||
} else {
|
||||
emph(entry.short)
|
||||
}
|
||||
}
|
||||
if hasDesc [: #desc ] else [ ]
|
||||
if disable-back-references != true {
|
||||
set text(weight: "bold")
|
||||
box(width: 1fr, repeat[.])
|
||||
[ ]
|
||||
term_references.map(x => x.location()).sorted(key: x => x.page()).fold(
|
||||
(values: (), pages: ()),
|
||||
((values, pages), x) => if pages.contains(x.page()) {
|
||||
(values: values, pages: pages)
|
||||
} else {
|
||||
values.push(x)
|
||||
pages.push(x.page())
|
||||
(values: values, pages: pages)
|
||||
},
|
||||
).values.map(x => link(x)[#numbering(x.page-numbering(), ..counter(page).at(x))]).join(", ")
|
||||
#figure(
|
||||
supplement: "",
|
||||
kind: __glossary_figure,
|
||||
numbering: none,
|
||||
caption: {
|
||||
context {
|
||||
set align(left)
|
||||
set par(justify: true)
|
||||
let term_references = __query_labels_with_key(entry.key)
|
||||
if term_references.len() != 0 or show-all {
|
||||
let desc = entry.at("desc", default: "")
|
||||
let long = entry.at("long", default: "")
|
||||
let hasLong = long != "" and long != []
|
||||
let hasDesc = desc != "" and desc != []
|
||||
{
|
||||
set text(weight: 600)
|
||||
if hasLong {
|
||||
emph(entry.short) + [ -- ] + entry.long
|
||||
} else {
|
||||
h(1fr)
|
||||
emph(entry.short)
|
||||
}
|
||||
}
|
||||
if hasDesc [: #desc ] else [ ]
|
||||
if disable-back-references != true {
|
||||
set text(weight: "bold")
|
||||
box(width: 1fr, repeat[.])
|
||||
[ ]
|
||||
term_references.map(x => x.location()).sorted(key: x => x.page()).fold(
|
||||
(values: (), pages: ()),
|
||||
((values, pages), x) => if pages.contains(x.page()) {
|
||||
(values: values, pages: pages)
|
||||
} else {
|
||||
values.push(x)
|
||||
pages.push(x.page())
|
||||
(values: values, pages: pages)
|
||||
},
|
||||
).values.map(x => link(x)[#numbering(x.page-numbering(), ..counter(page).at(x))]).join(", ")
|
||||
} else {
|
||||
h(1fr)
|
||||
}
|
||||
}
|
||||
},
|
||||
)[] #label(entry.key)
|
||||
]
|
||||
}
|
||||
},
|
||||
)[] #label(entry.key)
|
||||
#parbreak()
|
||||
]
|
||||
}
|
||||
}
|
||||
if enable-group-pagebreak {pagebreak(weak: true)}
|
||||
if enable-group-pagebreak {pagebreak(weak: true)}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -8,11 +8,11 @@ ff-cms:
|
|||
- DATABASE_NAME=ffcms
|
||||
- DATABASE_USERNAME=cms
|
||||
- DATABASE_PASSWORD=<dbuserpasswd>
|
||||
- JWT_SECRET=<tobemodified>
|
||||
- ADMIN_JWT_SECRET=<tobemodified>
|
||||
- APP_KEYS=<tobemodified>,<tobemodified>
|
||||
- API_TOKEN_SALT=<tobemodified>
|
||||
- TRANSFER_TOKEN_SALT=<tobemodified>
|
||||
- JWT_SECRET=<random string>
|
||||
- ADMIN_JWT_SECRET=<random string>
|
||||
- APP_KEYS=<random string> # oder<random string>,<random string>,...
|
||||
- API_TOKEN_SALT=<random string>
|
||||
- TRANSFER_TOKEN_SALT=<random string>
|
||||
volumes:
|
||||
- <volume|local path>:/app/public/uploads
|
||||
ports:
|
||||
|
|
|
@ -161,10 +161,10 @@ Folgende Werte können zu einem Container konfiguriert werden:
|
|||
"DB_USERNAME", "Nutzername für Zugang zu Datenbank", "", "💥",
|
||||
"DB_PASSWORD", "Passwort zum Zugang zur Datenbank", "", "💥",
|
||||
"JWT_SECRET", "", "", "💥",
|
||||
"ADMIN_JWT_SECRET", "", "", "✅",
|
||||
"APP_KEYS", "", "", "✅",
|
||||
"API_TOKEN_SALT", "", "", "✅",
|
||||
"TRANSFER_TOKEN_SALT", "", "", "✅",
|
||||
"ADMIN_JWT_SECRET", "", "", "💥",
|
||||
"APP_KEYS", "", "", "💥",
|
||||
"API_TOKEN_SALT", "", "", "💥",
|
||||
"TRANSFER_TOKEN_SALT", "", "", "💥",
|
||||
"", "", "", "",
|
||||
table.cell(colspan: 4)[⬇️ Database-Variablen],
|
||||
"MYSQL_DATABASE", "Name der Datenbank, die bei Erstellung direkt angelegt wird.", "", "💥",
|
||||
|
|
|
@ -117,7 +117,12 @@ Damit eine Liste wie Artikel, Einsätze, Termine oder Fahrzeuge auf den Seiten v
|
|||
#figure(
|
||||
image("../../images/page.png", width: 100%),
|
||||
)
|
||||
Der @collection-type *Seiten* speichert alle Seiten, die erreicht werden können. Derzeit ist jede Seite - ob in der Navigation angegeben oder nicht - über den in der URL definierten @slug erreichbar, sofern nicht eine Navigationseinstellung den @slug überlagert. Standardmäßig ist die Erreichbarkeit auf `<meine Domain>/<slug>` gesetzt.
|
||||
Der @collection-type *Seiten* speichert alle Seiten, die erreicht werden können. Jede Seite ist über den URL-Pfad, welche im @slug definiert ist, erreichbar, sofern `ref_only_access` auf `false` steht und eine Navigationseinstellung den @slug nicht überlagert. Standardmäßig ist die Erreichbarkeit auf `<meine Domain>/<slug>` gesetzt.
|
||||
\
|
||||
\
|
||||
Der @slug kann auch vollständige Pfade beinhalten. Dabei wird ein Pfad wie `einsaetze` zu `<meine Domain>/einsaetze` oder `mach-mit_formular` zu `<meine Domain>/mach-mit/formular`. Ein `_` stellt dabei ein `/` dar.
|
||||
\
|
||||
Ist bei einer Seite `ref_only_access` auf `true` gesetzt, so ist eine Seite nur noch per Verlinkung über die Navigation erreichbar.
|
||||
\
|
||||
\
|
||||
Der Identifier dient nur zur lesbaren Identifizierung der Seite, wenn sie einem Navigationslink zugeordnet ist. Der @slug speichert den Pfad, der in der URL angezeigt wird.
|
||||
|
|
|
@ -73,6 +73,17 @@ Neben dem 1-spaltigen Layout gibt es auch die Möglichkeit 2 Spalten nebeneinena
|
|||
Erweitert kann auch ein Bild in einer Spalte links oder rechts angezeigt werden. Auch hier werden die Inhalte übereinander angezeigt, wenn die Webseite auf kleineren Bildschirmen angezeigt wird.
|
||||
]
|
||||
|
||||
#wrap-content(
|
||||
figure(
|
||||
image("../../images/file-preview.png", width: 6.5cm),
|
||||
),
|
||||
align: right
|
||||
)[
|
||||
*Datei-Anzeige*
|
||||
|
||||
Diese Komponente ermöglicht die Einbettung von Bildern oder PDFs. Wird ein PDF oder ein Bild angegeben, so wird dieses angezeigt. Ist eine Datei nicht darstellbar, wird nur der Download-Button angezeigt, sofern dieser nicht ausgeblendet ist.
|
||||
]
|
||||
|
||||
#wrap-content(
|
||||
figure(
|
||||
image("../../images/file-download.png", width: 6.5cm),
|
||||
|
@ -82,7 +93,7 @@ Erweitert kann auch ein Bild in einer Spalte links oder rechts angezeigt werden.
|
|||
*Datei-Download*
|
||||
|
||||
Es besteht auch die Möglichkeit, Dateien zum Download zur Verfügung zu stellen.
|
||||
Diese Komponente ermöglicht die Einbettung von Bildern oder PDFs mit Downloadmöglichkeit. Wird ein PDF oder ein Bild angegeben, so wird dieses angezeigt. Ist eine Datei nicht darstellbar, wird nur der Download-Button angezeigt, sofern dieser nicht ausgeblendet ist.
|
||||
Diese Komponente ermöglicht den Download einer jeden angegeben Datei.
|
||||
]
|
||||
|
||||
#wrap-content(
|
||||
|
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 8.8 KiB |
BIN
webpage/images/file-preview.png
Normal file
After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 50 KiB |