diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz
index 7507807..3709ff3 100644
Binary files a/.yarn/install-state.gz and b/.yarn/install-state.gz differ
diff --git a/.yarnrc.yml b/.yarnrc.yml
index 3931d19..ea7d98a 100644
--- a/.yarnrc.yml
+++ b/.yarnrc.yml
@@ -1,7 +1,8 @@
nodeLinker: node-modules
plugins:
- - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
- spec: "@yarnpkg/plugin-interactive-tools"
+ - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
+ spec: "@yarnpkg/plugin-interactive-tools"
yarnPath: .yarn/releases/yarn-3.2.0.cjs
+checksumBehavior: update
diff --git a/api/collections/general.yml b/api/collections/general.yml
index 8373452..0c984ef 100644
--- a/api/collections/general.yml
+++ b/api/collections/general.yml
@@ -22,237 +22,51 @@ meta:
primaryText: firstname
columns:
- public
- - firstname
- - lastname
- - companyName
# Desktop
- type: table
mediaQuery: "(min-width:600px)"
columns:
- public
- - firstname
- - lastname
- - companyName
+ - meta.metaTitle
- tabsSection:
+ tablist:
meta:
- expand: media
+ expand: general
tabs:
- name: general
meta:
label: { de: "Allgemein", en: "General" }
- fields:
- - name: public
- type: boolean
- meta:
- defaultValue: true
- label:
- de: Veröffentlicht
- en: Public
- helperText:
- de: "Alle allgemeinen Informationen werden auf der Seite angezeigt."
- en: "All general information are displayed on the page."
+ subFields:
+ - source: public
+ - source: meta.metaDescription
+
- name: meta
meta:
label: { de: "Meta", en: "Meta" }
- fields:
- - name: meta
- type: object
- subFields:
- - name: metaTitle
- type: string
- meta:
- label: { de: "Titel der Webseite", en: "Page Title" }
- - name: metaDescription
- type: string
- meta:
- label: { de: "Beschreibung der Webseite", en: "Page Description" }
- - name: metaTagRobots
- type: string[]
- meta:
- widget: chipArray
- label:
- de: Robots
- en: Robots
- defaultValue: []
- autocomplete: true
- choices:
- - { id: "noindex", name: "noindex" }
- - { id: "index", name: "index" }
- - { id: "follow", name: "follow" }
- - { id: "nofollow", name: "nofollow" }
- - { id: "noimageindex", name: "noimageindex" }
- - { id: "none", name: "none" }
- - { id: "noarchive", name: "noarchive" }
- - { id: "nocache", name: "nocache" }
- - { id: "nosnippet", name: "nosnippet" }
- - { id: "nnavailable_after", name: "nnavailable_after" }
- helperText:
- de: "Noindex: Weist eine Suchmaschine an, eine Seite nicht zu indizieren.
index: Weist eine Suchmaschine an, eine Seite zu indizieren. Beachten Sie, dass Sie dieses Meta-Tag nicht hinzufügen müssen; es ist die Voreinstellung.
follow: Auch wenn die Seite nicht indexiert ist, sollte der Crawler allen Links auf einer Seite folgen und Eigenkapital an die verlinkten Seiten weitergeben.
nofollow: Weist einen Crawler an, keinen Links auf einer Seite zu folgen oder Link-Equity weiterzugeben.
noimageindex: Weist einen Crawler an, keine Bilder auf einer Seite zu indizieren.
none: Entspricht der gleichzeitigen Verwendung der noindex- und nofollow-Tags.
noarchive: Suchmaschinen sollten keinen zwischengespeicherten Link zu dieser Seite auf einem SERP anzeigen.
nocache: Wie noarchive, aber nur von Internet Explorer und Firefox verwendet.
nosnippet: Weist eine Suchmaschine an, kein Snippet dieser Seite (d. h. Meta-Beschreibung) dieser Seite auf einem SERP anzuzeigen.
nnavailable_after: Suchmaschinen sollen diese Seite nach einem bestimmten Datum nicht mehr indexieren.
"
- en: "Noindex: Tells a search engine not to index a page.
index: Tells a search engine to index a page. Note that you don’t need to add this meta tag; it’s the default.
follow: Even if the page isn’t indexed, the crawler should follow all the links on a page and pass equity to the linked pages.
nofollow: Tells a crawler not to follow any links on a page or pass along any link equity.
noimageindex: Tells a crawler not to index any images on a page.
none: Equivalent to using both the noindex and nofollow tags simultaneously.
noarchive: Search engines should not show a cached link to this page on a SERP.
nocache: Same as noarchive, but only used by Internet Explorer and Firefox.
nosnippet: Tells a search engine not to show a snippet of this page (i.e. meta description) of this page on a SERP.
nnavailable_after: Search engines should no longer index this page after a particular date.
"
- - name: metaKeywords
- type: string
- meta:
- label: { de: "SEO / Schlüsselwörter", en: "SEO / Keywords" }
- helperText:
- de: "Beispiel: Stichwort1, Stichwort2, Stichwort3"
- en: "Example: keyword1, keyword2, keyword3"
+ source: meta
+ subFields:
+ - source: meta
+
- name: person
meta:
label: { de: "Person", en: "Person" }
- fields:
- - name: person
- type: object
- subFields:
- - name: salutation
- type: string
- meta:
- label: { de: "Anrede", en: "Salutation" }
- - name: firstname
- type: string
- meta:
- label: { de: "Vorname", en: "Firstname" }
- - name: lastname
- type: string
- meta:
- label: { de: "Nachname", en: "Lastname" }
- - name: additional
- type: string
- meta:
- label: { de: "Zusatz", en: "Additional" }
- - name: street
- type: string
- meta:
- label: { de: "Straße", en: "Street" }
- - name: postcode
- type: string
- meta:
- label: { de: "Postleitzahl", en: "Postcode" }
- - name: city
- type: string
- meta:
- label: { de: "Ort", en: "City" }
- - name: tel
- type: string
- meta:
- label: { de: "Telefonnummer", en: "Phone number" }
- - name: fax
- type: string
- meta:
- label: { de: "Faxnummer", en: "Fax number" }
- - name: mobile
- type: string
- meta:
- label: { de: "Handynummer", en: "Mobile number" }
- - name: email
- type: string
- meta:
- label: { de: "E-Mail", en: "E-Mail" }
+ subFields:
+ - source: person
- name: company
meta:
label: { de: "Unternehmen", en: "Company" }
- fields:
- - name: person
- type: object
- subFields:
- - name: companyName
- type: string
- meta:
- label: { de: "Name des Unternehmens", en: "Company Name" }
- - name: companyWebUrl
- type: string
- meta:
- label: { de: "URL zur Webseite", en: "Website URL" }
- - name: companyAddresses
- type: object[]
- meta:
- label:
- de: Adresse
- en: Adresse
- css:
- subFields:
- - name: street
- type: string
- meta:
- label: { de: "Straße", en: "Street" }
- - name: houseNr
- type: string
- meta:
- label: { de: "Hausnummer", en: "House number" }
- - name: postcode
- type: string
- meta:
- label: { de: "PLZ", en: "ZIP" }
- - name: city
- type: string
- meta:
- label: { de: "Ort", en: "City" }
- - name: tel
- type: string
- meta:
- label: { de: "Telefon", en: "Phone number" }
- - name: fax
- type: string
- meta:
- label: { de: "Fax", en: "Fax" }
- - name: email
- type: string
- meta:
- label: { de: "E-Mail", en: "E-Mail" }
+ subFields:
+ - source: company
- name: media
meta:
label: { de: "Medien", en: "Media" }
- fields:
- - name: media
- type: object
- subFields:
- - name: favicon
- type: file
- meta:
- label: { de: "Favicon", en: "Favicon" }
- helperText:
- de: "Ein Favicon ist ein kleines Icon, Symbol oder Logo, das von Webbrowsern verwendet wird, um eine Website auf wiedererkennbare Weise zu kennzeichnen."
- en: "A favicon is a small icon, symbol, or logo used by web browsers to identify a website in a recognizable way."
- - name: brand
- type: file
- meta:
- label: { de: "Logo / Brand", en: "Logo / Brand" }
- helperText:
- de: "Logo der Seite"
- en: "Page Logo"
- - name: mediaFiles
- type: object[]
- meta:
- label: { de: "Dateien", en: "Files" }
- subFields:
- - name: title
- type: string
- meta:
- label: { de: "Datei-Titel", en: "File Title" }
- - name: alternateText
- type: string
- meta:
- label: { de: "Alternativer Text", en: "Alternate Text" }
- - name: id
- type: string
- meta:
- editableWhileCreating: true
- label: { de: "Technischer Name / ID", en: "Technical name / ID" }
- helperText:
- de: "Achtung: Eine technische ID ist meist fest im Code der Seite verknüpft und darf, wenn sie einmal gesetzt wurde, nicht verändert werden!"
- en: "Attention: A technical ID is usually permanently linked in the code of the page and, once it has been set, must not be changed!"
- - name: file
- type: file
- meta:
- label: { de: "Datei", en: "File" }
+ subFields:
+ - source: media
- name: copyright
meta:
label: { de: "Copyright", en: "Copyright" }
- fields:
- - name: copyrightText
- type: string
- meta:
- label: { de: "Copyright Text", en: "Copyright Text" }
+ subFields:
+ - source: copyrightText
imageFilter:
xs:
@@ -307,4 +121,210 @@ permissions:
put: false
delete: false
-fields: []
+fields:
+ - name: public
+ type: boolean
+ meta:
+ hideInRoot: true
+ defaultValue: true
+ label:
+ de: Veröffentlicht
+ en: Public
+ helperText:
+ de: "Alle allgemeinen Informationen werden auf der Seite angezeigt."
+ en: "All general information are displayed on the page."
+
+ - name: meta
+ type: object
+ meta:
+ hideInRoot: true
+ subFields:
+ - name: metaTitle
+ type: string
+ meta:
+ label: { de: "Titel der Webseite", en: "Page Title" }
+ - name: metaDescription
+ type: string
+ meta:
+ label: { de: "Beschreibung der Webseite", en: "Page Description" }
+ - name: metaTagRobots
+ type: string[]
+ meta:
+ widget: chipArray
+ label:
+ de: Robots
+ en: Robots
+ defaultValue: []
+ autocomplete: true
+ choices:
+ - { id: "noindex", name: "noindex" }
+ - { id: "index", name: "index" }
+ - { id: "follow", name: "follow" }
+ - { id: "nofollow", name: "nofollow" }
+ - { id: "noimageindex", name: "noimageindex" }
+ - { id: "none", name: "none" }
+ - { id: "noarchive", name: "noarchive" }
+ - { id: "nocache", name: "nocache" }
+ - { id: "nosnippet", name: "nosnippet" }
+ - { id: "nnavailable_after", name: "nnavailable_after" }
+ helperText:
+ de: "Noindex: Weist eine Suchmaschine an, eine Seite nicht zu indizieren.
index: Weist eine Suchmaschine an, eine Seite zu indizieren. Beachten Sie, dass Sie dieses Meta-Tag nicht hinzufügen müssen; es ist die Voreinstellung.
follow: Auch wenn die Seite nicht indexiert ist, sollte der Crawler allen Links auf einer Seite folgen und Eigenkapital an die verlinkten Seiten weitergeben.
nofollow: Weist einen Crawler an, keinen Links auf einer Seite zu folgen oder Link-Equity weiterzugeben.
noimageindex: Weist einen Crawler an, keine Bilder auf einer Seite zu indizieren.
none: Entspricht der gleichzeitigen Verwendung der noindex- und nofollow-Tags.
noarchive: Suchmaschinen sollten keinen zwischengespeicherten Link zu dieser Seite auf einem SERP anzeigen.
nocache: Wie noarchive, aber nur von Internet Explorer und Firefox verwendet.
nosnippet: Weist eine Suchmaschine an, kein Snippet dieser Seite (d. h. Meta-Beschreibung) dieser Seite auf einem SERP anzuzeigen.
nnavailable_after: Suchmaschinen sollen diese Seite nach einem bestimmten Datum nicht mehr indexieren.
"
+ en: "Noindex: Tells a search engine not to index a page.
index: Tells a search engine to index a page. Note that you don’t need to add this meta tag; it’s the default.
follow: Even if the page isn’t indexed, the crawler should follow all the links on a page and pass equity to the linked pages.
nofollow: Tells a crawler not to follow any links on a page or pass along any link equity.
noimageindex: Tells a crawler not to index any images on a page.
none: Equivalent to using both the noindex and nofollow tags simultaneously.
noarchive: Search engines should not show a cached link to this page on a SERP.
nocache: Same as noarchive, but only used by Internet Explorer and Firefox.
nosnippet: Tells a search engine not to show a snippet of this page (i.e. meta description) of this page on a SERP.
nnavailable_after: Search engines should no longer index this page after a particular date.
"
+ - name: metaKeywords
+ type: string
+ meta:
+ label: { de: "SEO / Schlüsselwörter", en: "SEO / Keywords" }
+ helperText:
+ de: "Beispiel: Stichwort1, Stichwort2, Stichwort3"
+ en: "Example: keyword1, keyword2, keyword3"
+
+ - name: person
+ type: object
+ meta:
+ hideInRoot: true
+ subFields:
+ - name: salutation
+ type: string
+ meta:
+ label: { de: "Anrede", en: "Salutation" }
+ - name: firstname
+ type: string
+ meta:
+ label: { de: "Vorname", en: "Firstname" }
+ - name: lastname
+ type: string
+ meta:
+ label: { de: "Nachname", en: "Lastname" }
+ - name: additional
+ type: string
+ meta:
+ label: { de: "Zusatz", en: "Additional" }
+ - name: street
+ type: string
+ meta:
+ label: { de: "Straße", en: "Street" }
+ - name: postcode
+ type: string
+ meta:
+ label: { de: "Postleitzahl", en: "Postcode" }
+ - name: city
+ type: string
+ meta:
+ label: { de: "Ort", en: "City" }
+ - name: tel
+ type: string
+ meta:
+ label: { de: "Telefonnummer", en: "Phone number" }
+ - name: fax
+ type: string
+ meta:
+ label: { de: "Faxnummer", en: "Fax number" }
+ - name: mobile
+ type: string
+ meta:
+ label: { de: "Handynummer", en: "Mobile number" }
+ - name: email
+ type: string
+ meta:
+ label: { de: "E-Mail", en: "E-Mail" }
+
+ - name: company
+ type: object
+ meta:
+ hideInRoot: true
+ subFields:
+ - name: companyName
+ type: string
+ meta:
+ label: { de: "Name des Unternehmens", en: "Company Name" }
+ - name: companyWebUrl
+ type: string
+ meta:
+ label: { de: "URL zur Webseite", en: "Website URL" }
+ - name: companyAddresses
+ type: object[]
+ meta:
+ label:
+ de: Adresse
+ en: Adresse
+ css:
+ subFields:
+ - name: street
+ type: string
+ meta:
+ label: { de: "Straße", en: "Street" }
+ - name: houseNr
+ type: string
+ meta:
+ label: { de: "Hausnummer", en: "House number" }
+ - name: postcode
+ type: string
+ meta:
+ label: { de: "PLZ", en: "ZIP" }
+ - name: city
+ type: string
+ meta:
+ label: { de: "Ort", en: "City" }
+ - name: tel
+ type: string
+ meta:
+ label: { de: "Telefon", en: "Phone number" }
+ - name: fax
+ type: string
+ meta:
+ label: { de: "Fax", en: "Fax" }
+ - name: email
+ type: string
+ meta:
+ label: { de: "E-Mail", en: "E-Mail" }
+
+ - name: media
+ type: object
+ meta:
+ hideInRoot: true
+ subFields:
+ - name: favicon
+ type: file
+ meta:
+ label: { de: "Favicon", en: "Favicon" }
+ helperText:
+ de: "Ein Favicon ist ein kleines Icon, Symbol oder Logo, das von Webbrowsern verwendet wird, um eine Website auf wiedererkennbare Weise zu kennzeichnen."
+ en: "A favicon is a small icon, symbol, or logo used by web browsers to identify a website in a recognizable way."
+ - name: brand
+ type: file
+ meta:
+ label: { de: "Logo / Brand", en: "Logo / Brand" }
+ helperText:
+ de: "Logo der Seite"
+ en: "Page Logo"
+ - name: mediaFiles
+ type: object[]
+ meta:
+ label: { de: "Dateien", en: "Files" }
+ subFields:
+ - name: title
+ type: string
+ meta:
+ label: { de: "Datei-Titel", en: "File Title" }
+ - name: alternateText
+ type: string
+ meta:
+ label: { de: "Alternativer Text", en: "Alternate Text" }
+ - name: id
+ type: string
+ meta:
+ editableWhileCreating: true
+ label: { de: "Technischer Name / ID", en: "Technical name / ID" }
+ helperText:
+ de: "Achtung: Eine technische ID ist meist fest im Code der Seite verknüpft und darf, wenn sie einmal gesetzt wurde, nicht verändert werden!"
+ en: "Attention: A technical ID is usually permanently linked in the code of the page and, once it has been set, must not be changed!"
+ - name: file
+ type: file
+ meta:
+ label: { de: "Datei", en: "File" }
+
+ - name: copyrightText
+ type: string
+ meta:
+ hideInRoot: true
+ label: { de: "Copyright Text", en: "Copyright Text" }