Alle Frontend-Assets lokal ausliefern statt über CDNs
Inter, Font Awesome, Chart.js, qrcodejs und TinyMCE liegen jetzt unter assets/vendor/ und werden vom eigenen Server ausgeliefert. Warum: - Datenschutz: bisher ging bei jedem Seitenaufruf die IP der Nutzer an Google Fonts, cdnjs, jsDelivr und Tiny Cloud - Funktion: UniFi-Installationen stehen oft in abgeschotteten Netzen – dort fehlten bisher Schrift, Icons, Diagramme und Editor Neu: includes/Ui.php - Ui::head()/Ui::script() binden die Assets ein und hängen einen Versionsstempel an (?v=filemtime), damit Browser nach einem Update nicht das alte CSS aus dem Cache nehmen - Ui::themeScript() setzt das Theme aus der gespeicherten Auswahl oder – wenn keine vorliegt – aus prefers-color-scheme; global.js folgt Systemwechseln live, solange nichts manuell gewählt wurde - <meta name="color-scheme"> ergänzt, damit Formularelemente passen Der TinyMCE-API-Key entfällt: der Editor läuft immer lokal (GPL-Variante), inklusive deutscher Oberfläche, wenn die App auf Deutsch steht. Neu: tools/demo/build.py – baut aus dem Projekt eine Demo-Instanz ohne Datenbank (Stubs für Database/Auth, feste Beispieldaten). Damit lassen sich Screenshots reproduzierbar erzeugen und alle Seiten einmal rendern (Smoke-Test), ohne eine MySQL-Instanz aufzusetzen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
ba90ffef03
commit
6da46f040a
57 changed files with 1479 additions and 267 deletions
|
|
@ -1,7 +1,18 @@
|
|||
/* === DARK MODE === */
|
||||
/* === DARK MODE ===
|
||||
Reihenfolge: ausdrueckliche Auswahl des Nutzers > Systemeinstellung. */
|
||||
(function() {
|
||||
const saved = localStorage.getItem('theme') || 'light';
|
||||
document.documentElement.setAttribute('data-theme', saved);
|
||||
const saved = localStorage.getItem('theme');
|
||||
const system = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
||||
document.documentElement.setAttribute('data-theme', saved || system);
|
||||
|
||||
// Solange nichts ausgewaehlt wurde, folgt die Oberflaeche dem System.
|
||||
if (!saved && window.matchMedia) {
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
|
||||
if (localStorage.getItem('theme')) return;
|
||||
document.documentElement.setAttribute('data-theme', e.matches ? 'dark' : 'light');
|
||||
if (typeof updateDarkModeBtn === 'function') updateDarkModeBtn();
|
||||
});
|
||||
}
|
||||
})();
|
||||
|
||||
function toggleDarkMode() {
|
||||
|
|
|
|||
30
assets/vendor/README.md
vendored
Normal file
30
assets/vendor/README.md
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Lokale Drittanbieter-Assets
|
||||
|
||||
Alle Frontend-Bibliotheken werden aus diesem Ordner ausgeliefert. Damit gibt es
|
||||
im Betrieb **keine Verbindungen zu externen CDNs** – wichtig für den Datenschutz
|
||||
(keine IP-Übertragung an Dritte) und für abgeschottete Netze ohne Internetzugang.
|
||||
|
||||
| Ordner | Inhalt | Version | Lizenz |
|
||||
|---|---|---|---|
|
||||
| `inter/` | Schriftschnitte 400/500/600/700 als woff2 | Inter 4.0 | SIL OFL 1.1 |
|
||||
| `fontawesome/` | Solid- und Brands-Icons, gekürzte CSS (nur woff2) | Font Awesome Free 6.4.0 | Icons CC BY 4.0, Fonts SIL OFL 1.1, Code MIT |
|
||||
| `chartjs/` | Diagramme für Dashboard und Reporting | Chart.js 4.4.0 | MIT |
|
||||
| `qrcodejs/` | QR-Code-Erzeugung im Browser | qrcodejs 1.0.0 | MIT |
|
||||
| `tinymce/` | WYSIWYG-Editor (GPL-Variante), auf die genutzten Plugins gekürzt | TinyMCE 6.8.3 | GPL-2.0-or-later |
|
||||
|
||||
Eingebunden werden sie über `Ui::head()` bzw. `Ui::script()` aus
|
||||
`includes/Ui.php` – inklusive Versionsstempel (`?v=<filemtime>`), damit Browser
|
||||
nach einem Update nicht die alten Dateien aus dem Cache verwenden.
|
||||
|
||||
## Aktualisieren
|
||||
|
||||
```bash
|
||||
# Beispiel Chart.js
|
||||
curl -L -o assets/vendor/chartjs/chart.umd.min.js \
|
||||
https://cdn.jsdelivr.net/npm/chart.js@<version>/dist/chart.umd.min.js
|
||||
```
|
||||
|
||||
Bei TinyMCE werden nur `tinymce.min.js`, `themes/silver`, `models/dom`,
|
||||
`icons/default`, die Skins `oxide`/`oxide-dark`, die deutsche Sprachdatei und
|
||||
die tatsächlich genutzten Plugins übernommen (siehe `initTinyMCE()` in
|
||||
`admin/settings.php`).
|
||||
20
assets/vendor/chartjs/chart.umd.min.js
vendored
Normal file
20
assets/vendor/chartjs/chart.umd.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11
assets/vendor/fontawesome/fontawesome.css
vendored
Normal file
11
assets/vendor/fontawesome/fontawesome.css
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
assets/vendor/fontawesome/webfonts/fa-brands-400.woff2
vendored
Normal file
BIN
assets/vendor/fontawesome/webfonts/fa-brands-400.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/vendor/fontawesome/webfonts/fa-solid-900.woff2
vendored
Normal file
BIN
assets/vendor/fontawesome/webfonts/fa-solid-900.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/vendor/inter/Inter-Bold.woff2
vendored
Normal file
BIN
assets/vendor/inter/Inter-Bold.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/vendor/inter/Inter-Medium.woff2
vendored
Normal file
BIN
assets/vendor/inter/Inter-Medium.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/vendor/inter/Inter-Regular.woff2
vendored
Normal file
BIN
assets/vendor/inter/Inter-Regular.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/vendor/inter/Inter-SemiBold.woff2
vendored
Normal file
BIN
assets/vendor/inter/Inter-SemiBold.woff2
vendored
Normal file
Binary file not shown.
30
assets/vendor/inter/inter.css
vendored
Normal file
30
assets/vendor/inter/inter.css
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
/* Inter v4 – lokal ausgeliefert (SIL Open Font License 1.1).
|
||||
Quelle: https://github.com/rsms/inter/releases – nur die vier genutzten Schnitte. */
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url('Inter-Regular.woff2') format('woff2');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-display: swap;
|
||||
src: url('Inter-Medium.woff2') format('woff2');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
font-display: swap;
|
||||
src: url('Inter-SemiBold.woff2') format('woff2');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: swap;
|
||||
src: url('Inter-Bold.woff2') format('woff2');
|
||||
}
|
||||
1
assets/vendor/qrcodejs/qrcode.min.js
vendored
Normal file
1
assets/vendor/qrcodejs/qrcode.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
assets/vendor/tinymce/icons/default/icons.min.js
vendored
Normal file
1
assets/vendor/tinymce/icons/default/icons.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
406
assets/vendor/tinymce/langs/de.js
vendored
Normal file
406
assets/vendor/tinymce/langs/de.js
vendored
Normal file
|
|
@ -0,0 +1,406 @@
|
|||
tinymce.addI18n("de", {
|
||||
"Redo": "Wiederholen",
|
||||
"Undo": "R\xfcckg\xe4ngig machen",
|
||||
"Cut": "Ausschneiden",
|
||||
"Copy": "Kopieren",
|
||||
"Paste": "Einf\xfcgen",
|
||||
"Select all": "Alles ausw\xe4hlen",
|
||||
"New document": "Neues Dokument",
|
||||
"Ok": "Ok",
|
||||
"Cancel": "Abbrechen",
|
||||
"Visual aids": "Visuelle Hilfen",
|
||||
"Bold": "Fett",
|
||||
"Italic": "Kursiv",
|
||||
"Underline": "Unterstrichen",
|
||||
"Strikethrough": "Durchgestrichen",
|
||||
"Superscript": "Hochgestellt",
|
||||
"Subscript": "Tiefgestellt",
|
||||
"Clear formatting": "Formatierung entfernen",
|
||||
"Remove": "Entfernen",
|
||||
"Align left": "Linksb\xfcndig ausrichten",
|
||||
"Align center": "Zentrieren",
|
||||
"Align right": "Rechtsb\xfcndig ausrichten",
|
||||
"No alignment": "Keine Ausrichtung",
|
||||
"Justify": "Blocksatz",
|
||||
"Bullet list": "Aufz\xe4hlung",
|
||||
"Numbered list": "Nummerierte Liste",
|
||||
"Decrease indent": "Einzug verkleinern",
|
||||
"Increase indent": "Einzug vergr\xf6\xdfern",
|
||||
"Close": "Schlie\xdfen",
|
||||
"Formats": "Formate",
|
||||
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.": "Ihr Browser unterst\xfctzt leider keinen direkten Zugriff auf die Zwischenablage. Bitte benutzen Sie die Tastenkombinationen Strg+X/C/V.",
|
||||
"Headings": "\xdcberschriften",
|
||||
"Heading 1": "\xdcberschrift 1",
|
||||
"Heading 2": "\xdcberschrift 2",
|
||||
"Heading 3": "\xdcberschrift 3",
|
||||
"Heading 4": "\xdcberschrift 4",
|
||||
"Heading 5": "\xdcberschrift 5",
|
||||
"Heading 6": "\xdcberschrift 6",
|
||||
"Preformatted": "Vorformatiert",
|
||||
"Div": "Div",
|
||||
"Pre": "Pre",
|
||||
"Code": "Code",
|
||||
"Paragraph": "Absatz",
|
||||
"Blockquote": "Blockzitat",
|
||||
"Inline": "Zeichenformate",
|
||||
"Blocks": "Bl\xf6cke",
|
||||
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Einf\xfcgen ist nun im unformatierten Textmodus. Inhalte werden ab jetzt als unformatierter Text eingef\xfcgt, bis Sie diese Einstellung wieder deaktivieren.",
|
||||
"Fonts": "Schriftarten",
|
||||
"Font sizes": "Schriftgr\xf6\xdfen",
|
||||
"Class": "Klasse",
|
||||
"Browse for an image": "Bild...",
|
||||
"OR": "ODER",
|
||||
"Drop an image here": "Bild hier ablegen",
|
||||
"Upload": "Hochladen",
|
||||
"Uploading image": "Bild wird hochgeladen",
|
||||
"Block": "Blocksatz",
|
||||
"Align": "Ausrichtung",
|
||||
"Default": "Standard",
|
||||
"Circle": "Kreis",
|
||||
"Disc": "Scheibe",
|
||||
"Square": "Rechteck",
|
||||
"Lower Alpha": "Lateinisches Alphabet in Kleinbuchstaben",
|
||||
"Lower Greek": "Griechische Kleinbuchstaben",
|
||||
"Lower Roman": "Kleiner r\xf6mischer Buchstabe",
|
||||
"Upper Alpha": "Lateinisches Alphabet in Gro\xdfbuchstaben",
|
||||
"Upper Roman": "Gro\xdfer r\xf6mischer Buchstabe",
|
||||
"Anchor...": "Textmarke",
|
||||
"Anchor": "Anker",
|
||||
"Name": "Name",
|
||||
"ID": "ID",
|
||||
"ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Die ID muss mit einem Buchstaben beginnen gefolgt von Buchstaben, Zahlen, Bindestrichen, Punkten, Doppelpunkten oder Unterstrichen.",
|
||||
"You have unsaved changes are you sure you want to navigate away?": "Die \xc4nderungen wurden noch nicht gespeichert. Sind Sie sicher, dass Sie diese Seite verlassen wollen?",
|
||||
"Restore last draft": "Letzten Entwurf wiederherstellen",
|
||||
"Special character...": "Sonderzeichen...",
|
||||
"Special Character": "Sonderzeichen",
|
||||
"Source code": "Quellcode",
|
||||
"Insert/Edit code sample": "Codebeispiel einf\xfcgen/bearbeiten",
|
||||
"Language": "Sprache",
|
||||
"Code sample...": "Codebeispiel...",
|
||||
"Left to right": "Von links nach rechts",
|
||||
"Right to left": "Von rechts nach links",
|
||||
"Title": "Titel",
|
||||
"Fullscreen": "Vollbild",
|
||||
"Action": "Aktion",
|
||||
"Shortcut": "Tastenkombination",
|
||||
"Help": "Hilfe",
|
||||
"Address": "Adresse",
|
||||
"Focus to menubar": "Fokus auf Men\xfcleiste",
|
||||
"Focus to toolbar": "Fokus auf Symbolleiste",
|
||||
"Focus to element path": "Fokus auf Elementpfad",
|
||||
"Focus to contextual toolbar": "Fokus auf kontextbezogene Symbolleiste",
|
||||
"Insert link (if link plugin activated)": "Link einf\xfcgen (wenn Link-Plugin aktiviert ist)",
|
||||
"Save (if save plugin activated)": "Speichern (wenn Save-Plugin aktiviert ist)",
|
||||
"Find (if searchreplace plugin activated)": "Suchen (wenn Suchen/Ersetzen-Plugin aktiviert ist)",
|
||||
"Plugins installed ({0}):": "Installierte Plugins ({0}):",
|
||||
"Premium plugins:": "Premium-Plugins:",
|
||||
"Learn more...": "Erfahren Sie mehr dazu...",
|
||||
"You are using {0}": "Sie verwenden {0}",
|
||||
"Plugins": "Plugins",
|
||||
"Handy Shortcuts": "Praktische Tastenkombinationen",
|
||||
"Horizontal line": "Horizontale Linie",
|
||||
"Insert/edit image": "Bild einf\xfcgen/bearbeiten",
|
||||
"Alternative description": "Alternative Beschreibung",
|
||||
"Accessibility": "Barrierefreiheit",
|
||||
"Image is decorative": "Bild ist dekorativ",
|
||||
"Source": "Quelle",
|
||||
"Dimensions": "Abmessungen",
|
||||
"Constrain proportions": "Seitenverh\xe4ltnis beibehalten",
|
||||
"General": "Allgemein",
|
||||
"Advanced": "Erweitert",
|
||||
"Style": "Formatvorlage",
|
||||
"Vertical space": "Vertikaler Raum",
|
||||
"Horizontal space": "Horizontaler Raum",
|
||||
"Border": "Rahmen",
|
||||
"Insert image": "Bild einf\xfcgen",
|
||||
"Image...": "Bild...",
|
||||
"Image list": "Bildliste",
|
||||
"Resize": "Skalieren",
|
||||
"Insert date/time": "Datum/Uhrzeit einf\xfcgen",
|
||||
"Date/time": "Datum/Uhrzeit",
|
||||
"Insert/edit link": "Link einf\xfcgen/bearbeiten",
|
||||
"Text to display": "Anzuzeigender Text",
|
||||
"Url": "URL",
|
||||
"Open link in...": "Link \xf6ffnen in...",
|
||||
"Current window": "Aktuelles Fenster",
|
||||
"None": "Keine",
|
||||
"New window": "Neues Fenster",
|
||||
"Open link": "Link \xf6ffnen",
|
||||
"Remove link": "Link entfernen",
|
||||
"Anchors": "Anker",
|
||||
"Link...": "Link...",
|
||||
"Paste or type a link": "Link einf\xfcgen oder eingeben",
|
||||
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Diese URL scheint eine E-Mail-Adresse zu sein. M\xf6chten Sie das dazu ben\xf6tigte mailto: voranstellen?",
|
||||
"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "Diese URL scheint ein externer Link zu sein. M\xf6chten Sie das dazu ben\xf6tigte http:// voranstellen?",
|
||||
"The URL you entered seems to be an external link. Do you want to add the required https:// prefix?": "Die eingegebene URL scheint ein externer Link zu sein. Soll das fehlende https:// davor erg\xe4nzt werden?",
|
||||
"Link list": "Linkliste",
|
||||
"Insert video": "Video einf\xfcgen",
|
||||
"Insert/edit video": "Video einf\xfcgen/bearbeiten",
|
||||
"Insert/edit media": "Medien einf\xfcgen/bearbeiten",
|
||||
"Alternative source": "Alternative Quelle",
|
||||
"Alternative source URL": "URL der alternativen Quelle",
|
||||
"Media poster (Image URL)": "Medienposter (Bild-URL)",
|
||||
"Paste your embed code below:": "F\xfcgen Sie Ihren Einbettungscode unten ein:",
|
||||
"Embed": "Einbettung",
|
||||
"Media...": "Medien...",
|
||||
"Nonbreaking space": "Gesch\xfctztes Leerzeichen",
|
||||
"Page break": "Seitenumbruch",
|
||||
"Paste as text": "Als Text einf\xfcgen",
|
||||
"Preview": "Vorschau",
|
||||
"Print": "Drucken",
|
||||
"Print...": "Drucken...",
|
||||
"Save": "Speichern",
|
||||
"Find": "Suchen",
|
||||
"Replace with": "Ersetzen durch",
|
||||
"Replace": "Ersetzen",
|
||||
"Replace all": "Alle ersetzen",
|
||||
"Previous": "Vorherige",
|
||||
"Next": "N\xe4chste",
|
||||
"Find and Replace": "Suchen und Ersetzen",
|
||||
"Find and replace...": "Suchen und ersetzen...",
|
||||
"Could not find the specified string.": "Die angegebene Zeichenfolge wurde nicht gefunden.",
|
||||
"Match case": "Gro\xdf-/Kleinschreibung beachten",
|
||||
"Find whole words only": "Nur ganze W\xf6rter suchen",
|
||||
"Find in selection": "In Auswahl suchen",
|
||||
"Insert table": "Tabelle einf\xfcgen",
|
||||
"Table properties": "Tabelleneigenschaften",
|
||||
"Delete table": "Tabelle l\xf6schen",
|
||||
"Cell": "Zelle",
|
||||
"Row": "Zeile",
|
||||
"Column": "Spalte",
|
||||
"Cell properties": "Zelleigenschaften",
|
||||
"Merge cells": "Zellen verbinden",
|
||||
"Split cell": "Zelle aufteilen",
|
||||
"Insert row before": "Neue Zeile davor einf\xfcgen",
|
||||
"Insert row after": "Neue Zeile danach einf\xfcgen",
|
||||
"Delete row": "Zeile l\xf6schen",
|
||||
"Row properties": "Zeileneigenschaften",
|
||||
"Cut row": "Zeile ausschneiden",
|
||||
"Cut column": "Spalte ausschneiden",
|
||||
"Copy row": "Zeile kopieren",
|
||||
"Copy column": "Spalte kopieren",
|
||||
"Paste row before": "Zeile davor einf\xfcgen",
|
||||
"Paste column before": "Spalte davor einf\xfcgen",
|
||||
"Paste row after": "Zeile danach einf\xfcgen",
|
||||
"Paste column after": "Spalte danach einf\xfcgen",
|
||||
"Insert column before": "Neue Spalte davor einf\xfcgen",
|
||||
"Insert column after": "Neue Spalte danach einf\xfcgen",
|
||||
"Delete column": "Spalte l\xf6schen",
|
||||
"Cols": "Spalten",
|
||||
"Rows": "Zeilen",
|
||||
"Width": "Breite",
|
||||
"Height": "H\xf6he",
|
||||
"Cell spacing": "Zellenabstand",
|
||||
"Cell padding": "Zelleninnenabstand",
|
||||
"Row clipboard actions": "Zeilen-Zwischenablage-Aktionen",
|
||||
"Column clipboard actions": "Spalten-Zwischenablage-Aktionen",
|
||||
"Table styles": "Tabellenstil",
|
||||
"Cell styles": "Zellstil",
|
||||
"Column header": "Spaltenkopf",
|
||||
"Row header": "Zeilenkopf",
|
||||
"Table caption": "Tabellenbeschriftung",
|
||||
"Caption": "Beschriftung",
|
||||
"Show caption": "Beschriftung anzeigen",
|
||||
"Left": "Links",
|
||||
"Center": "Zentriert",
|
||||
"Right": "Rechts",
|
||||
"Cell type": "Zelltyp",
|
||||
"Scope": "Bereich",
|
||||
"Alignment": "Ausrichtung",
|
||||
"Horizontal align": "Horizontal ausrichten",
|
||||
"Vertical align": "Vertikal ausrichten",
|
||||
"Top": "Oben",
|
||||
"Middle": "Mitte",
|
||||
"Bottom": "Unten",
|
||||
"Header cell": "Kopfzelle",
|
||||
"Row group": "Zeilengruppe",
|
||||
"Column group": "Spaltengruppe",
|
||||
"Row type": "Zeilentyp",
|
||||
"Header": "Kopfzeile",
|
||||
"Body": "Inhalt",
|
||||
"Footer": "Fu\xdfzeile",
|
||||
"Border color": "Rahmenfarbe",
|
||||
"Solid": "Durchgezogen",
|
||||
"Dotted": "Gepunktet",
|
||||
"Dashed": "Gestrichelt",
|
||||
"Double": "Doppelt",
|
||||
"Groove": "Gekantet",
|
||||
"Ridge": "Eingeritzt",
|
||||
"Inset": "Eingelassen",
|
||||
"Outset": "Hervorstehend",
|
||||
"Hidden": "Unsichtbar",
|
||||
"Insert template...": "Vorlage einf\xfcgen...",
|
||||
"Templates": "Vorlagen",
|
||||
"Template": "Vorlage",
|
||||
"Insert Template": "Vorlage einf\xfcgen",
|
||||
"Text color": "Textfarbe",
|
||||
"Background color": "Hintergrundfarbe",
|
||||
"Custom...": "Benutzerdefiniert...",
|
||||
"Custom color": "Benutzerdefinierte Farbe",
|
||||
"No color": "Keine Farbe",
|
||||
"Remove color": "Farbauswahl aufheben",
|
||||
"Show blocks": "Bl\xf6cke anzeigen",
|
||||
"Show invisible characters": "Unsichtbare Zeichen anzeigen",
|
||||
"Word count": "Anzahl der W\xf6rter",
|
||||
"Count": "Anzahl",
|
||||
"Document": "Dokument",
|
||||
"Selection": "Auswahl",
|
||||
"Words": "W\xf6rter",
|
||||
"Words: {0}": "Wortzahl: {0}",
|
||||
"{0} words": "{0} W\xf6rter",
|
||||
"File": "Datei",
|
||||
"Edit": "Bearbeiten",
|
||||
"Insert": "Einf\xfcgen",
|
||||
"View": "Ansicht",
|
||||
"Format": "Format",
|
||||
"Table": "Tabelle",
|
||||
"Tools": "Werkzeuge",
|
||||
"Powered by {0}": "Betrieben von {0}",
|
||||
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich-Text-Bereich. Dr\xfccken Sie Alt+F9 f\xfcr das Men\xfc. Dr\xfccken Sie Alt+F10 f\xfcr die Symbolleiste. Dr\xfccken Sie Alt+0 f\xfcr Hilfe.",
|
||||
"Image title": "Bildtitel",
|
||||
"Border width": "Rahmenbreite",
|
||||
"Border style": "Rahmenstil",
|
||||
"Error": "Fehler",
|
||||
"Warn": "Warnung",
|
||||
"Valid": "G\xfcltig",
|
||||
"To open the popup, press Shift+Enter": "Dr\xfccken Sie Umschalt+Eingabe, um das Popup-Fenster zu \xf6ffnen.",
|
||||
"Rich Text Area": "Rich-Text-Area",
|
||||
"Rich Text Area. Press ALT-0 for help.": "Rich-Text-Bereich. Dr\xfccken Sie Alt+0 f\xfcr Hilfe.",
|
||||
"System Font": "Betriebssystemschriftart",
|
||||
"Failed to upload image: {0}": "Bild konnte nicht hochgeladen werden: {0}",
|
||||
"Failed to load plugin: {0} from url {1}": "Plugin konnte nicht geladen werden: {0} von URL {1}",
|
||||
"Failed to load plugin url: {0}": "Plugin-URL konnte nicht geladen werden: {0}",
|
||||
"Failed to initialize plugin: {0}": "Plugin konnte nicht initialisiert werden: {0}",
|
||||
"example": "Beispiel",
|
||||
"Search": "Suchen",
|
||||
"All": "Alle",
|
||||
"Currency": "W\xe4hrung",
|
||||
"Text": "Text",
|
||||
"Quotations": "Anf\xfchrungszeichen",
|
||||
"Mathematical": "Mathematisch",
|
||||
"Extended Latin": "Erweitertes Latein",
|
||||
"Symbols": "Symbole",
|
||||
"Arrows": "Pfeile",
|
||||
"User Defined": "Benutzerdefiniert",
|
||||
"dollar sign": "Dollarzeichen",
|
||||
"currency sign": "W\xe4hrungssymbol",
|
||||
"euro-currency sign": "Eurozeichen",
|
||||
"colon sign": "Doppelpunkt",
|
||||
"cruzeiro sign": "Cruzeirozeichen",
|
||||
"french franc sign": "Franczeichen",
|
||||
"lira sign": "Lirezeichen",
|
||||
"mill sign": "Millzeichen",
|
||||
"naira sign": "Nairazeichen",
|
||||
"peseta sign": "Pesetazeichen",
|
||||
"rupee sign": "Rupiezeichen",
|
||||
"won sign": "Wonzeichen",
|
||||
"new sheqel sign": "Schekelzeichen",
|
||||
"dong sign": "Dongzeichen",
|
||||
"kip sign": "Kipzeichen",
|
||||
"tugrik sign": "Tugrikzeichen",
|
||||
"drachma sign": "Drachmezeichen",
|
||||
"german penny symbol": "Pfennigzeichen",
|
||||
"peso sign": "Pesozeichen",
|
||||
"guarani sign": "Guaranizeichen",
|
||||
"austral sign": "Australzeichen",
|
||||
"hryvnia sign": "Hrywnjazeichen",
|
||||
"cedi sign": "Cedizeichen",
|
||||
"livre tournois sign": "Livrezeichen",
|
||||
"spesmilo sign": "Spesmilozeichen",
|
||||
"tenge sign": "Tengezeichen",
|
||||
"indian rupee sign": "Indisches Rupiezeichen",
|
||||
"turkish lira sign": "T\xfcrkisches Lirazeichen",
|
||||
"nordic mark sign": "Zeichen nordische Mark",
|
||||
"manat sign": "Manatzeichen",
|
||||
"ruble sign": "Rubelzeichen",
|
||||
"yen character": "Yenzeichen",
|
||||
"yuan character": "Yuanzeichen",
|
||||
"yuan character, in hong kong and taiwan": "Yuanzeichen in Hongkong und Taiwan",
|
||||
"yen/yuan character variant one": "Yen-/Yuanzeichen Variante 1",
|
||||
"Emojis": "Emojis",
|
||||
"Emojis...": "Emojis...",
|
||||
"Loading emojis...": "Lade Emojis...",
|
||||
"Could not load emojis": "Emojis konnten nicht geladen werden",
|
||||
"People": "Menschen",
|
||||
"Animals and Nature": "Tiere und Natur",
|
||||
"Food and Drink": "Essen und Trinken",
|
||||
"Activity": "Aktivit\xe4t",
|
||||
"Travel and Places": "Reisen und Orte",
|
||||
"Objects": "Objekte",
|
||||
"Flags": "Flaggen",
|
||||
"Characters": "Zeichen",
|
||||
"Characters (no spaces)": "Zeichen (ohne Leerzeichen)",
|
||||
"{0} characters": "{0}\xa0Zeichen",
|
||||
"Error: Form submit field collision.": "Fehler: Kollision der Formularbest\xe4tigungsfelder.",
|
||||
"Error: No form element found.": "Fehler: Kein Formularelement gefunden.",
|
||||
"Color swatch": "Farbpalette",
|
||||
"Color Picker": "Farbwahl",
|
||||
"Invalid hex color code: {0}": "Ung\xfcltiger Hexadezimal-Farbwert: {0}",
|
||||
"Invalid input": "Ung\xfcltige Eingabe",
|
||||
"R": "R",
|
||||
"Red component": "Rotanteil",
|
||||
"G": "G",
|
||||
"Green component": "Gr\xfcnanteil",
|
||||
"B": "B",
|
||||
"Blue component": "Blauanteil",
|
||||
"#": "#",
|
||||
"Hex color code": "Hexadezimal-Farbwert",
|
||||
"Range 0 to 255": "Spanne 0 bis 255",
|
||||
"Turquoise": "T\xfcrkis",
|
||||
"Green": "Gr\xfcn",
|
||||
"Blue": "Blau",
|
||||
"Purple": "Violett",
|
||||
"Navy Blue": "Marineblau",
|
||||
"Dark Turquoise": "Dunkelt\xfcrkis",
|
||||
"Dark Green": "Dunkelgr\xfcn",
|
||||
"Medium Blue": "Mittleres Blau",
|
||||
"Medium Purple": "Mittelviolett",
|
||||
"Midnight Blue": "Mitternachtsblau",
|
||||
"Yellow": "Gelb",
|
||||
"Orange": "Orange",
|
||||
"Red": "Rot",
|
||||
"Light Gray": "Hellgrau",
|
||||
"Gray": "Grau",
|
||||
"Dark Yellow": "Dunkelgelb",
|
||||
"Dark Orange": "Dunkelorange",
|
||||
"Dark Red": "Dunkelrot",
|
||||
"Medium Gray": "Mittelgrau",
|
||||
"Dark Gray": "Dunkelgrau",
|
||||
"Light Green": "Hellgr\xfcn",
|
||||
"Light Yellow": "Hellgelb",
|
||||
"Light Red": "Hellrot",
|
||||
"Light Purple": "Helllila",
|
||||
"Light Blue": "Hellblau",
|
||||
"Dark Purple": "Dunkellila",
|
||||
"Dark Blue": "Dunkelblau",
|
||||
"Black": "Schwarz",
|
||||
"White": "Wei\xdf",
|
||||
"Switch to or from fullscreen mode": "Vollbildmodus umschalten",
|
||||
"Open help dialog": "Hilfe-Dialog \xf6ffnen",
|
||||
"history": "Historie",
|
||||
"styles": "Stile",
|
||||
"formatting": "Formatierung",
|
||||
"alignment": "Ausrichtung",
|
||||
"indentation": "Einr\xfcckungen",
|
||||
"Font": "Schriftart",
|
||||
"Size": "Schriftgr\xf6\xdfe",
|
||||
"More...": "Mehr...",
|
||||
"Select...": "Auswahl...",
|
||||
"Preferences": "Einstellungen",
|
||||
"Yes": "Ja",
|
||||
"No": "Nein",
|
||||
"Keyboard Navigation": "Tastaturnavigation",
|
||||
"Version": "Version",
|
||||
"Code view": "Code Ansicht",
|
||||
"Open popup menu for split buttons": "\xd6ffne Popup Menge um Buttons zu trennen",
|
||||
"List Properties": "Liste Eigenschaften",
|
||||
"List properties...": "Liste Eigenschaften",
|
||||
"Start list at number": "Beginne Liste mit Nummer",
|
||||
"Line height": "Liniendicke",
|
||||
"Dropped file type is not supported": "Hereingezogener Dateityp wird nicht unterst\xfctzt",
|
||||
"Loading...": "Wird geladen...",
|
||||
"ImageProxy HTTP error: Rejected request": "Image Proxy HTTP Fehler: Abgewiesene Anfrage",
|
||||
"ImageProxy HTTP error: Could not find Image Proxy": "Image Proxy HTTP Fehler: Kann Image Proxy nicht finden",
|
||||
"ImageProxy HTTP error: Incorrect Image Proxy URL": "Image Proxy HTTP Fehler: Falsche Image Proxy URL",
|
||||
"ImageProxy HTTP error: Unknown ImageProxy error": "Image Proxy HTTP Fehler: Unbekannter Image Proxy Fehler"
|
||||
});
|
||||
21
assets/vendor/tinymce/license.txt
vendored
Normal file
21
assets/vendor/tinymce/license.txt
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2022 Ephox Corporation DBA Tiny Technologies, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
4
assets/vendor/tinymce/models/dom/model.min.js
vendored
Normal file
4
assets/vendor/tinymce/models/dom/model.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
4
assets/vendor/tinymce/plugins/advlist/plugin.min.js
vendored
Normal file
4
assets/vendor/tinymce/plugins/advlist/plugin.min.js
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
/**
|
||||
* TinyMCE version 6.8.3 (2024-02-08)
|
||||
*/
|
||||
!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=(t,e,s)=>{const r="UL"===e?"InsertUnorderedList":"InsertOrderedList";t.execCommand(r,!1,!1===s?null:{"list-style-type":s})},s=t=>e=>e.options.get(t),r=s("advlist_number_styles"),n=s("advlist_bullet_styles"),i=t=>null==t,l=t=>!i(t);var o=tinymce.util.Tools.resolve("tinymce.util.Tools");class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return l(t)?a.some(t):a.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const u=t=>e=>l(e)&&t.test(e.nodeName),d=u(/^(OL|UL|DL)$/),g=u(/^(TH|TD)$/),c=t=>i(t)||"default"===t?"":t,h=(t,e)=>s=>((t,e)=>{const s=t.selection.getNode();return e({parents:t.dom.getParents(s),element:s}),t.on("NodeChange",e),()=>t.off("NodeChange",e)})(t,(r=>((t,r)=>{const n=t.selection.getStart(!0);s.setActive(((t,e,s)=>((t,e,s)=>{for(let e=0,n=t.length;e<n;e++){const n=t[e];if(d(r=n)&&!/\btox\-/.test(r.className))return a.some(n);if(s(n,e))break}var r;return a.none()})(e,0,g).exists((e=>e.nodeName===s&&((t,e)=>t.dom.isChildOf(e,t.getBody()))(t,e))))(t,r,e)),s.setEnabled(!((t,e)=>{const s=t.dom.getParent(e,"ol,ul,dl");return((t,e)=>null!==e&&!t.dom.isEditable(e))(t,s)&&t.selection.isEditable()})(t,n)&&t.selection.isEditable())})(t,r.parents))),m=(t,s,r,n,i,l)=>{l.length>1?((t,s,r,n,i,l)=>{t.ui.registry.addSplitButton(s,{tooltip:r,icon:"OL"===i?"ordered-list":"unordered-list",presets:"listpreview",columns:3,fetch:t=>{t(o.map(l,(t=>{const e="OL"===i?"num":"bull",s="disc"===t||"decimal"===t?"default":t,r=c(t),n=(t=>t.replace(/\-/g," ").replace(/\b\w/g,(t=>t.toUpperCase())))(t);return{type:"choiceitem",value:r,icon:"list-"+e+"-"+s,text:n}})))},onAction:()=>t.execCommand(n),onItemAction:(s,r)=>{e(t,i,r)},select:e=>{const s=(t=>{const e=t.dom.getParent(t.selection.getNode(),"ol,ul"),s=t.dom.getStyle(e,"listStyleType");return a.from(s)})(t);return s.map((t=>e===t)).getOr(!1)},onSetup:h(t,i)})})(t,s,r,n,i,l):((t,s,r,n,i,l)=>{t.ui.registry.addToggleButton(s,{active:!1,tooltip:r,icon:"OL"===i?"ordered-list":"unordered-list",onSetup:h(t,i),onAction:()=>t.queryCommandState(n)||""===l?t.execCommand(n):e(t,i,l)})})(t,s,r,n,i,c(l[0]))};t.add("advlist",(t=>{t.hasPlugin("lists")?((t=>{const e=t.options.register;e("advlist_number_styles",{processor:"string[]",default:"default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman".split(",")}),e("advlist_bullet_styles",{processor:"string[]",default:"default,circle,square".split(",")})})(t),(t=>{m(t,"numlist","Numbered list","InsertOrderedList","OL",r(t)),m(t,"bullist","Bullet list","InsertUnorderedList","UL",n(t))})(t),(t=>{t.addCommand("ApplyUnorderedListStyle",((s,r)=>{e(t,"UL",r["list-style-type"])})),t.addCommand("ApplyOrderedListStyle",((s,r)=>{e(t,"OL",r["list-style-type"])}))})(t)):console.error("Please use the Lists plugin together with the Advanced List plugin.")}))}();
|
||||
4
assets/vendor/tinymce/plugins/autolink/plugin.min.js
vendored
Normal file
4
assets/vendor/tinymce/plugins/autolink/plugin.min.js
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
/**
|
||||
* TinyMCE version 6.8.3 (2024-02-08)
|
||||
*/
|
||||
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>t.options.get(e),n=t("autolink_pattern"),o=t("link_default_target"),r=t("link_default_protocol"),a=t("allow_unsafe_link_target"),s=("string",e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(r=String).prototype.isPrototypeOf(n)||(null===(a=o.constructor)||void 0===a?void 0:a.name)===r.name)?"string":t;var n,o,r,a})(e));const l=(void 0,e=>undefined===e);const i=e=>!(e=>null==e)(e),c=Object.hasOwnProperty,d=e=>"\ufeff"===e;var u=tinymce.util.Tools.resolve("tinymce.dom.TextSeeker");const f=e=>/^[(\[{ \u00a0]$/.test(e),g=(e,t,n)=>{for(let o=t-1;o>=0;o--){const t=e.charAt(o);if(!d(t)&&n(t))return o}return-1},m=(e,t)=>{var o;const a=e.schema.getVoidElements(),s=n(e),{dom:i,selection:d}=e;if(null!==i.getParent(d.getNode(),"a[href]"))return null;const m=d.getRng(),k=u(i,(e=>{return i.isBlock(e)||(t=a,n=e.nodeName.toLowerCase(),c.call(t,n))||"false"===i.getContentEditable(e);var t,n})),{container:p,offset:y}=((e,t)=>{let n=e,o=t;for(;1===n.nodeType&&n.childNodes[o];)n=n.childNodes[o],o=3===n.nodeType?n.data.length:n.childNodes.length;return{container:n,offset:o}})(m.endContainer,m.endOffset),w=null!==(o=i.getParent(p,i.isBlock))&&void 0!==o?o:i.getRoot(),h=k.backwards(p,y+t,((e,t)=>{const n=e.data,o=g(n,t,(r=f,e=>!r(e)));var r,a;return-1===o||(a=n[o],/[?!,.;:]/.test(a))?o:o+1}),w);if(!h)return null;let v=h.container;const _=k.backwards(h.container,h.offset,((e,t)=>{v=e;const n=g(e.data,t,f);return-1===n?n:n+1}),w),A=i.createRng();_?A.setStart(_.container,_.offset):A.setStart(v,0),A.setEnd(h.container,h.offset);const C=A.toString().replace(/\uFEFF/g,"").match(s);if(C){let t=C[0];return $="www.",(b=t).length>=4&&b.substr(0,4)===$?t=r(e)+"://"+t:((e,t,n=0,o)=>{const r=e.indexOf(t,n);return-1!==r&&(!!l(o)||r+t.length<=o)})(t,"@")&&!(e=>/^([A-Za-z][A-Za-z\d.+-]*:\/\/)|mailto:/.test(e))(t)&&(t="mailto:"+t),{rng:A,url:t}}var b,$;return null},k=(e,t)=>{const{dom:n,selection:r}=e,{rng:l,url:i}=t,c=r.getBookmark();r.setRng(l);const d="createlink",u={command:d,ui:!1,value:i};if(!e.dispatch("BeforeExecCommand",u).isDefaultPrevented()){e.getDoc().execCommand(d,!1,i),e.dispatch("ExecCommand",u);const t=o(e);if(s(t)){const o=r.getNode();n.setAttrib(o,"target",t),"_blank"!==t||a(e)||n.setAttrib(o,"rel","noopener")}}r.moveToBookmark(c),e.nodeChanged()},p=e=>{const t=m(e,-1);i(t)&&k(e,t)},y=p;e.add("autolink",(e=>{(e=>{const t=e.options.register;t("autolink_pattern",{processor:"regexp",default:new RegExp("^"+/(?:[A-Za-z][A-Za-z\d.+-]{0,14}:\/\/(?:[-.~*+=!&;:'%@?^${}(),\w]+@)?|www\.|[-;:&=+$,.\w]+@)[A-Za-z\d-]+(?:\.[A-Za-z\d-]+)*(?::\d+)?(?:\/(?:[-.~*+=!;:'%@$(),\/\w]*[-~*+=%@$()\/\w])?)?(?:\?(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?(?:#(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?/g.source+"$","i")}),t("link_default_target",{processor:"string"}),t("link_default_protocol",{processor:"string",default:"https"})})(e),(e=>{e.on("keydown",(t=>{13!==t.keyCode||t.isDefaultPrevented()||(e=>{const t=m(e,0);i(t)&&k(e,t)})(e)})),e.on("keyup",(t=>{32===t.keyCode?p(e):(48===t.keyCode&&t.shiftKey||221===t.keyCode)&&y(e)}))})(e)}))}();
|
||||
4
assets/vendor/tinymce/plugins/code/plugin.min.js
vendored
Normal file
4
assets/vendor/tinymce/plugins/code/plugin.min.js
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
/**
|
||||
* TinyMCE version 6.8.3 (2024-02-08)
|
||||
*/
|
||||
!function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("code",(e=>((e=>{e.addCommand("mceCodeEditor",(()=>{(e=>{const o=(e=>e.getContent({source_view:!0}))(e);e.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:o},onSubmit:o=>{((e,o)=>{e.focus(),e.undoManager.transact((()=>{e.setContent(o)})),e.selection.setCursorLocation(),e.nodeChanged()})(e,o.getData().code),o.close()}})})(e)}))})(e),(e=>{const o=()=>e.execCommand("mceCodeEditor");e.ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:o}),e.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:o})})(e),{})))}();
|
||||
4
assets/vendor/tinymce/plugins/fullscreen/plugin.min.js
vendored
Normal file
4
assets/vendor/tinymce/plugins/fullscreen/plugin.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
90
assets/vendor/tinymce/plugins/help/js/i18n/keynav/de.js
vendored
Normal file
90
assets/vendor/tinymce/plugins/help/js/i18n/keynav/de.js
vendored
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
tinymce.Resource.add('tinymce.html-i18n.help-keynav.de',
|
||||
'<h1>Grundlagen der Tastaturnavigation</h1>\n' +
|
||||
'\n' +
|
||||
'<dl>\n' +
|
||||
' <dt>Fokus auf Menüleiste</dt>\n' +
|
||||
' <dd>Windows oder Linux: ALT+F9</dd>\n' +
|
||||
' <dd>macOS: ⌥F9</dd>\n' +
|
||||
' <dt>Fokus auf Symbolleiste</dt>\n' +
|
||||
' <dd>Windows oder Linux: ALT+F10</dd>\n' +
|
||||
' <dd>macOS: ⌥F10</dd>\n' +
|
||||
' <dt>Fokus auf Fußzeile</dt>\n' +
|
||||
' <dd>Windows oder Linux: ALT+F11</dd>\n' +
|
||||
' <dd>macOS: ⌥F11</dd>\n' +
|
||||
' <dt>Fokus auf kontextbezogene Symbolleiste</dt>\n' +
|
||||
' <dd>Windows, Linux oder macOS: STRG+F9\n' +
|
||||
'</dl>\n' +
|
||||
'\n' +
|
||||
'<p>Die Navigation beginnt beim ersten Benutzeroberflächenelement, welches hervorgehoben ist. Falls sich das erste Element im Pfad der Fußzeile befindet,\n' +
|
||||
' ist es unterstrichen.</p>\n' +
|
||||
'\n' +
|
||||
'<h1>Zwischen Abschnitten der Benutzeroberfläche navigieren</h1>\n' +
|
||||
'\n' +
|
||||
'<p>Um von einem Abschnitt der Benutzeroberfläche zum nächsten zu wechseln, drücken Sie <strong>TAB</strong>.</p>\n' +
|
||||
'\n' +
|
||||
'<p>Um von einem Abschnitt der Benutzeroberfläche zum vorherigen zu wechseln, drücken Sie <strong>UMSCHALT+TAB</strong>.</p>\n' +
|
||||
'\n' +
|
||||
'<p>Die Abschnitte der Benutzeroberfläche haben folgende <strong>TAB</strong>-Reihenfolge:</p>\n' +
|
||||
'\n' +
|
||||
'<ol>\n' +
|
||||
' <li>Menüleiste</li>\n' +
|
||||
' <li>Einzelne Gruppen der Symbolleiste</li>\n' +
|
||||
' <li>Randleiste</li>\n' +
|
||||
' <li>Elementpfad in der Fußzeile</li>\n' +
|
||||
' <li>Umschaltfläche „Wörter zählen“ in der Fußzeile</li>\n' +
|
||||
' <li>Branding-Link in der Fußzeile</li>\n' +
|
||||
' <li>Editor-Ziehpunkt zur Größenänderung in der Fußzeile</li>\n' +
|
||||
'</ol>\n' +
|
||||
'\n' +
|
||||
'<p>Falls ein Abschnitt der Benutzeroberflächen nicht vorhanden ist, wird er übersprungen.</p>\n' +
|
||||
'\n' +
|
||||
'<p>Wenn in der Fußzeile die Tastaturnavigation fokussiert ist und keine Randleiste angezeigt wird, wechselt der Fokus durch Drücken von <strong>UMSCHALT+TAB</strong>\n' +
|
||||
' zur ersten Gruppe der Symbolleiste, nicht zur letzten.</p>\n' +
|
||||
'\n' +
|
||||
'<h1>Innerhalb von Abschnitten der Benutzeroberfläche navigieren</h1>\n' +
|
||||
'\n' +
|
||||
'<p>Um von einem Element der Benutzeroberfläche zum nächsten zu wechseln, drücken Sie die entsprechende <strong>Pfeiltaste</strong>.</p>\n' +
|
||||
'\n' +
|
||||
'<p>Die Pfeiltasten <strong>Links</strong> und <strong>Rechts</strong></p>\n' +
|
||||
'\n' +
|
||||
'<ul>\n' +
|
||||
' <li>wechseln zwischen Menüs in der Menüleiste.</li>\n' +
|
||||
' <li>öffnen das Untermenü eines Menüs.</li>\n' +
|
||||
' <li>wechseln zwischen Schaltflächen in einer Gruppe der Symbolleiste.</li>\n' +
|
||||
' <li>wechseln zwischen Elementen im Elementpfad der Fußzeile.</li>\n' +
|
||||
'</ul>\n' +
|
||||
'\n' +
|
||||
'<p>Die Pfeiltasten <strong>Abwärts</strong> und <strong>Aufwärts</strong></p>\n' +
|
||||
'\n' +
|
||||
'<ul>\n' +
|
||||
' <li>wechseln zwischen Menüelementen in einem Menü.</li>\n' +
|
||||
' <li>wechseln zwischen Elementen in einem Popupmenü der Symbolleiste.</li>\n' +
|
||||
'</ul>\n' +
|
||||
'\n' +
|
||||
'<p>Die <strong>Pfeiltasten</strong> rotieren innerhalb des fokussierten Abschnitts der Benutzeroberfläche.</p>\n' +
|
||||
'\n' +
|
||||
'<p>Um ein geöffnetes Menü, ein geöffnetes Untermenü oder ein geöffnetes Popupmenü zu schließen, drücken Sie die <strong>ESC</strong>-Taste.</p>\n' +
|
||||
'\n' +
|
||||
'<p>Wenn sich der aktuelle Fokus ganz oben in einem bestimmten Abschnitt der Benutzeroberfläche befindet, wird durch Drücken der <strong>ESC</strong>-Taste auch\n' +
|
||||
' die Tastaturnavigation beendet.</p>\n' +
|
||||
'\n' +
|
||||
'<h1>Ein Menüelement oder eine Symbolleistenschaltfläche ausführen</h1>\n' +
|
||||
'\n' +
|
||||
'<p>Wenn das gewünschte Menüelement oder die gewünschte Symbolleistenschaltfläche hervorgehoben ist, drücken Sie <strong>Zurück</strong>, <strong>Eingabe</strong>\n' +
|
||||
' oder die <strong>Leertaste</strong>, um das Element auszuführen.</p>\n' +
|
||||
'\n' +
|
||||
'<h1>In Dialogfeldern ohne Registerkarten navigieren</h1>\n' +
|
||||
'\n' +
|
||||
'<p>In Dialogfeldern ohne Registerkarten ist beim Öffnen eines Dialogfelds die erste interaktive Komponente fokussiert.</p>\n' +
|
||||
'\n' +
|
||||
'<p>Navigieren Sie zwischen den interaktiven Komponenten eines Dialogfelds, indem Sie <strong>TAB</strong> oder <strong>UMSCHALT+TAB</strong> drücken.</p>\n' +
|
||||
'\n' +
|
||||
'<h1>In Dialogfeldern mit Registerkarten navigieren</h1>\n' +
|
||||
'\n' +
|
||||
'<p>In Dialogfeldern mit Registerkarten ist beim Öffnen eines Dialogfelds die erste Schaltfläche eines Registerkartenmenüs fokussiert.</p>\n' +
|
||||
'\n' +
|
||||
'<p>Navigieren Sie zwischen den interaktiven Komponenten auf dieser Registerkarte des Dialogfelds, indem Sie <strong>TAB</strong> oder\n' +
|
||||
' <strong>UMSCHALT+TAB</strong> drücken.</p>\n' +
|
||||
'\n' +
|
||||
'<p>Wechseln Sie zu einer anderen Registerkarte des Dialogfelds, indem Sie den Fokus auf das Registerkartenmenü legen und dann die entsprechende <strong>Pfeiltaste</strong>\n' +
|
||||
' drücken, um durch die verfügbaren Registerkarten zu rotieren.</p>\n');
|
||||
90
assets/vendor/tinymce/plugins/help/js/i18n/keynav/en.js
vendored
Normal file
90
assets/vendor/tinymce/plugins/help/js/i18n/keynav/en.js
vendored
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
tinymce.Resource.add('tinymce.html-i18n.help-keynav.en',
|
||||
'<h1>Begin keyboard navigation</h1>\n' +
|
||||
'\n' +
|
||||
'<dl>\n' +
|
||||
' <dt>Focus the Menu bar</dt>\n' +
|
||||
' <dd>Windows or Linux: Alt+F9</dd>\n' +
|
||||
' <dd>macOS: ⌥F9</dd>\n' +
|
||||
' <dt>Focus the Toolbar</dt>\n' +
|
||||
' <dd>Windows or Linux: Alt+F10</dd>\n' +
|
||||
' <dd>macOS: ⌥F10</dd>\n' +
|
||||
' <dt>Focus the footer</dt>\n' +
|
||||
' <dd>Windows or Linux: Alt+F11</dd>\n' +
|
||||
' <dd>macOS: ⌥F11</dd>\n' +
|
||||
' <dt>Focus a contextual toolbar</dt>\n' +
|
||||
' <dd>Windows, Linux or macOS: Ctrl+F9\n' +
|
||||
'</dl>\n' +
|
||||
'\n' +
|
||||
'<p>Navigation will start at the first UI item, which will be highlighted, or underlined in the case of the first item in\n' +
|
||||
' the Footer element path.</p>\n' +
|
||||
'\n' +
|
||||
'<h1>Navigate between UI sections</h1>\n' +
|
||||
'\n' +
|
||||
'<p>To move from one UI section to the next, press <strong>Tab</strong>.</p>\n' +
|
||||
'\n' +
|
||||
'<p>To move from one UI section to the previous, press <strong>Shift+Tab</strong>.</p>\n' +
|
||||
'\n' +
|
||||
'<p>The <strong>Tab</strong> order of these UI sections is:</p>\n' +
|
||||
'\n' +
|
||||
'<ol>\n' +
|
||||
' <li>Menu bar</li>\n' +
|
||||
' <li>Each toolbar group</li>\n' +
|
||||
' <li>Sidebar</li>\n' +
|
||||
' <li>Element path in the footer</li>\n' +
|
||||
' <li>Word count toggle button in the footer</li>\n' +
|
||||
' <li>Branding link in the footer</li>\n' +
|
||||
' <li>Editor resize handle in the footer</li>\n' +
|
||||
'</ol>\n' +
|
||||
'\n' +
|
||||
'<p>If a UI section is not present, it is skipped.</p>\n' +
|
||||
'\n' +
|
||||
'<p>If the footer has keyboard navigation focus, and there is no visible sidebar, pressing <strong>Shift+Tab</strong>\n' +
|
||||
' moves focus to the first toolbar group, not the last.</p>\n' +
|
||||
'\n' +
|
||||
'<h1>Navigate within UI sections</h1>\n' +
|
||||
'\n' +
|
||||
'<p>To move from one UI element to the next, press the appropriate <strong>Arrow</strong> key.</p>\n' +
|
||||
'\n' +
|
||||
'<p>The <strong>Left</strong> and <strong>Right</strong> arrow keys</p>\n' +
|
||||
'\n' +
|
||||
'<ul>\n' +
|
||||
' <li>move between menus in the menu bar.</li>\n' +
|
||||
' <li>open a sub-menu in a menu.</li>\n' +
|
||||
' <li>move between buttons in a toolbar group.</li>\n' +
|
||||
' <li>move between items in the footer’s element path.</li>\n' +
|
||||
'</ul>\n' +
|
||||
'\n' +
|
||||
'<p>The <strong>Down</strong> and <strong>Up</strong> arrow keys</p>\n' +
|
||||
'\n' +
|
||||
'<ul>\n' +
|
||||
' <li>move between menu items in a menu.</li>\n' +
|
||||
' <li>move between items in a toolbar pop-up menu.</li>\n' +
|
||||
'</ul>\n' +
|
||||
'\n' +
|
||||
'<p><strong>Arrow</strong> keys cycle within the focused UI section.</p>\n' +
|
||||
'\n' +
|
||||
'<p>To close an open menu, an open sub-menu, or an open pop-up menu, press the <strong>Esc</strong> key.</p>\n' +
|
||||
'\n' +
|
||||
'<p>If the current focus is at the ‘top’ of a particular UI section, pressing the <strong>Esc</strong> key also exits\n' +
|
||||
' keyboard navigation entirely.</p>\n' +
|
||||
'\n' +
|
||||
'<h1>Execute a menu item or toolbar button</h1>\n' +
|
||||
'\n' +
|
||||
'<p>When the desired menu item or toolbar button is highlighted, press <strong>Return</strong>, <strong>Enter</strong>,\n' +
|
||||
' or the <strong>Space bar</strong> to execute the item.</p>\n' +
|
||||
'\n' +
|
||||
'<h1>Navigate non-tabbed dialogs</h1>\n' +
|
||||
'\n' +
|
||||
'<p>In non-tabbed dialogs, the first interactive component takes focus when the dialog opens.</p>\n' +
|
||||
'\n' +
|
||||
'<p>Navigate between interactive dialog components by pressing <strong>Tab</strong> or <strong>Shift+Tab</strong>.</p>\n' +
|
||||
'\n' +
|
||||
'<h1>Navigate tabbed dialogs</h1>\n' +
|
||||
'\n' +
|
||||
'<p>In tabbed dialogs, the first button in the tab menu takes focus when the dialog opens.</p>\n' +
|
||||
'\n' +
|
||||
'<p>Navigate between interactive components of this dialog tab by pressing <strong>Tab</strong> or\n' +
|
||||
' <strong>Shift+Tab</strong>.</p>\n' +
|
||||
'\n' +
|
||||
'<p>Switch to another dialog tab by giving the tab menu focus and then pressing the appropriate <strong>Arrow</strong>\n' +
|
||||
' key to cycle through the available tabs.</p>\n');
|
||||
4
assets/vendor/tinymce/plugins/help/plugin.min.js
vendored
Normal file
4
assets/vendor/tinymce/plugins/help/plugin.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
4
assets/vendor/tinymce/plugins/link/plugin.min.js
vendored
Normal file
4
assets/vendor/tinymce/plugins/link/plugin.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
4
assets/vendor/tinymce/plugins/lists/plugin.min.js
vendored
Normal file
4
assets/vendor/tinymce/plugins/lists/plugin.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
4
assets/vendor/tinymce/plugins/searchreplace/plugin.min.js
vendored
Normal file
4
assets/vendor/tinymce/plugins/searchreplace/plugin.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
4
assets/vendor/tinymce/plugins/table/plugin.min.js
vendored
Normal file
4
assets/vendor/tinymce/plugins/table/plugin.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
4
assets/vendor/tinymce/plugins/visualblocks/plugin.min.js
vendored
Normal file
4
assets/vendor/tinymce/plugins/visualblocks/plugin.min.js
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
/**
|
||||
* TinyMCE version 6.8.3 (2024-02-08)
|
||||
*/
|
||||
!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const s=(t,s,o)=>{t.dom.toggleClass(t.getBody(),"mce-visualblocks"),o.set(!o.get()),((t,s)=>{t.dispatch("VisualBlocks",{state:s})})(t,o.get())},o=("visualblocks_default_state",t=>t.options.get("visualblocks_default_state"));const e=(t,s)=>o=>{o.setActive(s.get());const e=t=>o.setActive(t.state);return t.on("VisualBlocks",e),()=>t.off("VisualBlocks",e)};t.add("visualblocks",((t,l)=>{(t=>{(0,t.options.register)("visualblocks_default_state",{processor:"boolean",default:!1})})(t);const a=(t=>{let s=!1;return{get:()=>s,set:t=>{s=t}}})();((t,o,e)=>{t.addCommand("mceVisualBlocks",(()=>{s(t,0,e)}))})(t,0,a),((t,s)=>{const o=()=>t.execCommand("mceVisualBlocks");t.ui.registry.addToggleButton("visualblocks",{icon:"visualblocks",tooltip:"Show blocks",onAction:o,onSetup:e(t,s)}),t.ui.registry.addToggleMenuItem("visualblocks",{text:"Show blocks",icon:"visualblocks",onAction:o,onSetup:e(t,s)})})(t,a),((t,e,l)=>{t.on("PreviewFormats AfterPreviewFormats",(s=>{l.get()&&t.dom.toggleClass(t.getBody(),"mce-visualblocks","afterpreviewformats"===s.type)})),t.on("init",(()=>{o(t)&&s(t,0,l)}))})(t,0,a)}))}();
|
||||
4
assets/vendor/tinymce/plugins/wordcount/plugin.min.js
vendored
Normal file
4
assets/vendor/tinymce/plugins/wordcount/plugin.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
assets/vendor/tinymce/skins/content/dark/content.min.css
vendored
Normal file
1
assets/vendor/tinymce/skins/content/dark/content.min.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
body{background-color:#222f3e;color:#fff;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}
|
||||
1
assets/vendor/tinymce/skins/content/default/content.min.css
vendored
Normal file
1
assets/vendor/tinymce/skins/content/default/content.min.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
|
||||
1
assets/vendor/tinymce/skins/ui/oxide-dark/content.min.css
vendored
Normal file
1
assets/vendor/tinymce/skins/ui/oxide-dark/content.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
assets/vendor/tinymce/skins/ui/oxide-dark/skin.min.css
vendored
Normal file
1
assets/vendor/tinymce/skins/ui/oxide-dark/skin.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
assets/vendor/tinymce/skins/ui/oxide/content.min.css
vendored
Normal file
1
assets/vendor/tinymce/skins/ui/oxide/content.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
assets/vendor/tinymce/skins/ui/oxide/skin.min.css
vendored
Normal file
1
assets/vendor/tinymce/skins/ui/oxide/skin.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
assets/vendor/tinymce/themes/silver/theme.min.js
vendored
Normal file
4
assets/vendor/tinymce/themes/silver/theme.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
4
assets/vendor/tinymce/tinymce.min.js
vendored
Normal file
4
assets/vendor/tinymce/tinymce.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue