commit eed73903c07e7298f1f6eccf15e622e5902662cc
parent 632fc74008e7b38d4ae238d0dd8a6b6d62217610
Author: Szymon Mikulicz <szymon.mikulicz@posteo.net>
Date: Tue, 23 Jun 2020 23:20:51 +0200
First steps: logo
Diffstat:
19 files changed, 788 insertions(+), 377 deletions(-)
diff --git a/system/extensions/english-language.txt b/system/extensions/english-language.txt
@@ -0,0 +1,200 @@
+# Datenstrom Yellow language file
+
+Language: en
+LanguageLocale: en_GB
+LanguageDescription: English
+LanguageTranslator: Mark Seuffert
+
+BlogBy: by
+BlogTag: Tags:
+BlogMore: Read more…
+ContactName: Name:
+ContactEmail: Email:
+ContactMessage: Message:
+ContactConsent: I consent that this website stores my message.
+ContactButton: Send message
+ContactMailSpam: [Spam]
+ContactMailFooter: This email was sent via @sitename - @title
+ContactStatusNone: Say hello. Your feedback is very welcome.
+ContactStatusIncomplete: Please fill out all fields.
+ContactStatusInvalid: Please enter a valid email.
+ContactStatusReview: Please remove links from the message.
+ContactStatusDone: You have sent an email. Thank you!
+ContactStatusError: Email could not be sent, please try again later!
+CoreDatePast: today, yesterday, @x days ago, 1 month ago, @x months ago, 1 year ago, @x years ago, on @x
+CoreDateFuture: soon, tomorrow, in @x days, in 1 month, in @x months, in 1 year, in @x years, on @x
+CoreDateMonths: January, February, March, April, May, June, July, August, September, October, November, December
+CoreDateWeekdays: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
+CoreDateWeekstart: Monday
+CoreDateFormatShort: F Y
+CoreDateFormatMedium: Y-m-d
+CoreDateFormatLong: Y-m-d H:i
+CoreTimeFormatShort: H:i
+CoreTimeFormatMedium: H:i:s
+CoreTimeFormatLong: H:i:s T
+CorePaginationPrevious: ← Previous
+CorePaginationNext: Next →
+CoreError404Title: File not found
+CoreError404Text: The requested file was not found. Oh no...
+CoreError430Title: Login failed
+CoreError430Text: The email or password is incorrect. [Please try again](#data-action-login).
+CoreError434Title: File not found
+CoreError434Text: The requested file was not found. [You can create this page](#data-action-edit).
+CoreError500Title: Server error
+CoreError500Text: Something went wrong. [yellow error]
+DraftStatusEmpty: No drafts found.
+EditLoginTitle: Welcome
+EditLoginEmail: Email:
+EditLoginPassword: Password:
+EditLoginForgot: Forgot your password?
+EditLoginSignup: Create user account?
+EditLoginButton: Log in
+EditSignupTitle: Create user account
+EditSignupName: Name:
+EditSignupEmail: Email:
+EditSignupPassword: Password:
+EditSignupConsent: I consent that this website stores my personal data.
+EditSignupButton: Create
+EditSignupStatusNone: Here you can create a new user account.
+EditSignupStatusIncomplete: Please fill out all fields.
+EditSignupStatusInvalid: Please enter a valid email.
+EditSignupStatusWeak: Please enter a different password.
+EditSignupStatusShort: Please enter a longer password.
+EditSignupStatusNext: User account will be created, please check your emails.
+EditForgotTitle: Forgot your password
+EditForgotEmail: Email:
+EditForgotStatusNone: No problem, you can create a new password.
+EditForgotStatusInvalid: Please enter a valid email.
+EditForgotStatusNext: User account will be recovered, please check your emails.
+EditRecoverTitle: Forgot your password
+EditRecoverPassword: Password:
+EditRecoverStatusPassword: Please enter a new password.
+EditRecoverStatusWeak: Please enter a different password.
+EditRecoverStatusShort: Please enter a longer password.
+EditRecoverStatusDone: User account recovered. Thank you!
+EditQuitTitle: Delete user account
+EditQuitStatusNone: Please enter your name to confirm.
+EditQuitStatusMismatch: Please enter a different name.
+EditQuitStatusNext: User account will be deleted, please check your emails.
+EditConfirmSubject: Confirm user account
+EditConfirmMessage: Hi @usershort,\n\nplease confirm your user account. Click the following link.
+EditConfirmTitle: User account
+EditConfirmStatusDone: User account confirmed and waiting for approval. Thank you!
+EditApproveSubject: Approve user account
+EditApproveMessage: Hi @usershort,\n\nplease approve a new user account for @useraccount. Click the following link.
+EditApproveTitle: User account
+EditApproveStatusDone: User account approved. Thank you!
+EditReactivateSubject: Reactivate user account
+EditReactivateMessage: Hi @usershort,\n\nplease reactivate your user account. There were too many failed login attempts. Click the following link.
+EditReactivateTitle: User account
+EditReactivateStatusDone: User account reactivated. Thank you!
+EditVerifySubject: Confirm user account
+EditVerifyMessage: Hi @usershort,\n\nplease confirm a new email for your user account. Click the following link.
+EditVerifyTitle: User account
+EditVerifyStatusDone: User account confirmed. Thank you!
+EditChangeSubject: Change user account
+EditChangeMessage: Hi @usershort,\n\nplease confirm that you want to change your user account. Click the following link.
+EditChangeTitle: User account
+EditChangeStatusDone: User account changed. Thank you!
+EditRemoveSubject: Delete user account
+EditRemoveMessage: Hi @usershort,\n\nplease confirm that you want to delete your user account. Click the following link.
+EditRemoveTitle: User account
+EditRemoveStatusDone: User account deleted. Thank you!
+EditRecoverSubject: Recover user account
+EditRecoverMessage: Hi @usershort,\n\nplease confirm that you forgot your password. Click the following link.
+EditWelcomeSubject: Welcome
+EditWelcomeMessage: Hi @usershort,\n\nyour user account has been created. Have fun editing the website.
+EditGoodbyeSubject: Goodbye
+EditGoodbyeMessage: Hi @usershort,\n\nyour user account has been deleted. Take care.
+EditAccountTitle: User settings
+EditAccountInformation: You can delete your user account anytime.
+EditAccountMore: Read more…
+EditAccountStatusNone: Here you can change your user account.
+EditAccountStatusInvalid: Please enter a valid email.
+EditAccountStatusTaken: Please enter a different email.
+EditAccountStatusWeak: Please enter a different password.
+EditAccountStatusShort: Please enter a longer password.
+EditAccountStatusNext: User account will be changed, please check your emails.
+EditSystemTitle: System settings
+EditSystemSitename: Name of the website:
+EditSystemAuthor: Name of the webmaster:
+EditSystemEmail: Email of the webmaster:
+EditSystemInformation: The webmaster is the contact person and can approve new user accounts.
+EditSystemStatusNone: Here you can change system settings.
+EditSystemStatusInvalid: Please enter a valid email.
+EditUpdateTitle: Updates
+EditUpdateStatusNone: Datenstrom Yellow is for people who make small websites.
+EditUpdateStatusCheck: Checking for updates…
+EditUpdateStatusUpdates: Updates available, update now.
+EditUpdateStatusOk: Your website is up to date.
+EditUpdateModified: @extension has been modified
+EditUpdateForce: Force update
+EditOkButton: Ok
+EditCancelButton: Cancel
+EditChangeButton: Change
+EditCreateButton: Create
+EditEditButton: Save
+EditDeleteButton: Delete
+EditEdit: Edit page
+EditCreate: +
+EditDelete: -
+EditKeyboardLabels: Ctrl+, Alt+, Shift+, ⌘, ⌥, ⇧
+EditToolbarFormat: Format
+EditToolbarHeading: Heading
+EditToolbarH1: Heading 1
+EditToolbarH2: Heading 2
+EditToolbarH3: Heading 3
+EditToolbarParagraph: Normal text
+EditToolbarPre: Source code
+EditToolbarNotice: Notice
+EditToolbarQuote: Quote
+EditToolbarBold: Bold
+EditToolbarItalic: Italic
+EditToolbarStrikethrough: Strikethrough
+EditToolbarCode: Code
+EditToolbarList: List
+EditToolbarUl: • Unordered list
+EditToolbarOl: 1. Ordered list
+EditToolbarTl: ✓ Task list
+EditToolbarLink: Link
+EditToolbarFile: File
+EditToolbarEmojiawesome: Emoji
+EditToolbarFontawesome: Icon
+EditToolbarStatus: Status
+EditToolbarUndo: Undo
+EditToolbarRedo: Redo
+EditToolbarPreview: Preview
+EditToolbarMarkdown: Markdown
+EditToolbarHelp: Help
+EditMailFooter: @sitename
+EditDataGenerated: This page is generated automatically.
+EditUploadProgress: [Uploading file…]
+EditMenuSettings: Settings
+EditMenuHelp: Help
+EditMenuLogout: Logout
+EditYellowUrl: https://datenstrom.se/yellow/
+EditYellowHelpUrl: https://datenstrom.se/yellow/help/
+InstallTitle: Hello
+InstallExtension: What do you want to make?
+InstallExtensionWebsite: Website
+InstallExtensionBlog: Blog
+InstallExtensionWiki: Wiki
+InstallHomeTitle: Home
+InstallHomeText: Your website works!\n\n[edit - You can edit this page] or use your text editor.\n\nYou can install more features and themes.\n[Learn more](https://datenstrom.se/yellow/help/).
+InstallDefaultTitle: Page
+InstallDefaultText: This is a new page.
+InstallBlogTitle: Blog page
+InstallBlogText: This is a new blog page.
+InstallWikiTitle: Wiki page
+InstallWikiText: This is a new wiki page.
+InstallExampleImage: This is an example image
+PreviousnextPagePrevious: ← Previous: @title
+PreviousnextPageNext: Next: @title →
+SearchResultsNone: Enter a search term.
+SearchResultsEmpty: No results found.
+SearchSpecialChanges: Recent changes
+SearchButton: Search
+WikiModified: Last updated on
+WikiTag: Tags:
+WikiSpecialPages: All pages
+WikiSpecialChanges: Recent changes
diff --git a/system/extensions/english.php b/system/extensions/english.php
@@ -0,0 +1,26 @@
+<?php
+// English extension, https://github.com/datenstrom/yellow-extensions/tree/master/languages/english
+// Copyright (c) 2013-2020 Datenstrom, https://datenstrom.se
+// This file may be used and distributed under the terms of the public license.
+
+class YellowEnglish {
+ const VERSION = "0.8.19";
+ const TYPE = "language";
+ public $yellow; //access to API
+
+ // Handle initialisation
+ public function onLoad($yellow) {
+ $this->yellow = $yellow;
+ }
+
+ // Handle update
+ public function onUpdate($action) {
+ $fileName = $this->yellow->system->get("coreSettingDir").$this->yellow->system->get("coreSystemFile");
+ if ($action=="install") {
+ $this->yellow->system->save($fileName, array("language" => "en"));
+ } elseif ($action=="uninstall" && $this->yellow->system->get("language")=="en") {
+ $language = reset(array_diff($this->yellow->text->getLanguages(), array("en")));
+ $this->yellow->system->save($fileName, array("language" => $language));
+ }
+ }
+}
diff --git a/system/extensions/french-language.txt b/system/extensions/french-language.txt
@@ -0,0 +1,200 @@
+# Datenstrom Yellow language file
+
+Language: fr
+LanguageLocale: fr_FR
+LanguageDescription: Français
+LanguageTranslator: Juh Nibreh
+
+BlogBy: par
+BlogTag: Tags:
+BlogMore: Lire la suite…
+ContactName: Nom:
+ContactEmail: Email:
+ContactMessage: Message:
+ContactConsent: Je consens à ce que ce site stocke mon message.
+ContactButton: Envoyer le message
+ContactMailSpam: [Spam]
+ContactMailFooter: Cet email a été envoyé via @sitename - @title
+ContactStatusNone: Dites bonjour ! Vos commentaires sont les bienvenus.
+ContactStatusIncomplete: S'il vous plaît, veuillez remplir tous les champs.
+ContactStatusInvalid: S'il vous plaît, veuillez entrer une adresse email valide.
+ContactStatusReview: S'il vous plaît, veuillez supprimer les liens du message.
+ContactStatusDone: Votre message a bien été envoyé. Merci !
+ContactStatusError: Votre message n'a pas pu être envoyé, réessayez plus tard s'il vous plaît !
+CoreDatePast: aujourd'hui, hier, il y a @x jours, il ya 1 mois, il y a @x mois, il y a 1 an, il y a @x ans, le @x
+CoreDateFuture: bientôt, demain, dans @x jours, en 1 mois, dans @x mois, en 1 an, dans @x ans, le @x
+CoreDateMonths: janvier, février, mars, avril, mai, juin, juillet, août, septembre, octobre, novembre, décembre
+CoreDateWeekdays: lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche
+CoreDateWeekstart: lundi
+CoreDateFormatShort: F Y
+CoreDateFormatMedium: d/m/Y
+CoreDateFormatLong: d/m/Y H:i
+CoreTimeFormatShort: H:i
+CoreTimeFormatMedium: H:i:s
+CoreTimeFormatLong: H:i:s T
+CorePaginationPrevious: ← Précédent
+CorePaginationNext: Suivant →
+CoreError404Title: Fichier non trouvé
+CoreError404Text: Le fichier demandé n'a pas été trouvé. Oh non...
+CoreError430Title: La connexion a échoué
+CoreError430Text: L'email ou le mot de passe est incorrect. [Veuillez réessayer](#data-action-login).
+CoreError434Title: Fichier non trouvé
+CoreError434Text: Le fichier demandé n'a pas été trouvé. [Vous pouvez créer cette page](#data-action-edit).
+CoreError500Title: Erreur du serveur
+CoreError500Text: Une erreur s'est produite. [yellow error]
+DraftStatusEmpty: Aucun brouillon trouvé.
+EditLoginTitle: Bienvenue
+EditLoginEmail: Email:
+EditLoginPassword: Mot de passe:
+EditLoginForgot: Mot de passe oublié ?
+EditLoginSignup: Créer un compte utilisateur ?
+EditLoginButton: Se connecter
+EditSignupTitle: Créer un compte utilisateur
+EditSignupName: Nom:
+EditSignupEmail: Email:
+EditSignupPassword: Mot de passe:
+EditSignupConsent: Je consens à ce que ce site web stocke mes données personnelles.
+EditSignupButton: Créer
+EditSignupStatusNone: Ici, vous pouvez créer un nouveau compte utilisateur.
+EditSignupStatusIncomplete: Veuillez remplir tous les champs.
+EditSignupStatusInvalid: S'il vous plaît, veuillez entrer une adresse email valide.
+EditSignupStatusWeak: S'il vous plaît, choisissez un mot de passe différent.
+EditSignupStatusShort: S'il vous plaît, choisissez un mot de passe plus long.
+EditSignupStatusNext: Votre compte a été créé, vérifiez vos emails.
+EditForgotTitle: Mot de passe oublié
+EditForgotEmail: Email:
+EditForgotStatusNone: Pas de problème, vous pouvez créer un nouveau mot de passe.
+EditForgotStatusInvalid: S'il vous plaît, veuillez entrer une adresse email valide.
+EditForgotStatusNext: Votre compte est à nouveau disponible, vérifiez vos emails.
+EditRecoverTitle: Mot de passe oublié
+EditRecoverPassword: Mot de passe:
+EditRecoverStatusPassword: S'il vous plaît, choisissez un nouveau mot de passe.
+EditRecoverStatusWeak: S'il vous plaît, choisissez un mot de passe différent.
+EditRecoverStatusShort: S'il vous plaît, choisissez un mot de passe plus long.
+EditRecoverStatusDone: Compte utilisateur restauré. Merci !
+EditQuitTitle: Supprimer le compte d'utilisateur
+EditQuitStatusNone: S'il vous plaît entrez votre nom pour confirmer.
+EditQuitStatusMismatch: S'il vous plaît entrer un nom différent.
+EditQuitStatusNext: Votre compte sera supprimé, vérifier vos emails.
+EditConfirmSubject: Confirmation d'un compte utilisateur
+EditConfirmMessage: Bonjour @usershort,\n\nveuillez confirmer votre compte utilisateur. Cliquez sur le lien suivant.
+EditConfirmTitle: Compte d'utilisateur
+EditConfirmStatusDone: Votre compte utilisateur est confirmé et en attente d'approbation. Merci !
+EditApproveSubject: Approuver un nouvel utilisateur
+EditApproveMessage: Bonjour @usershort,\n\nveuillez approuver la création d'un nouveau compte utilisateur pour @useraccount. Cliquez sur le lien suivant.
+EditApproveTitle: Compte d'utilisateur
+EditApproveStatusDone: Compte utilisateur approuvé. Merci !
+EditReactivateSubject: Réactivation d'un compte utilisateur
+EditReactivateMessage: Bonjour @usershort,\n\nveuillez réactivér votre compte utilisateur. Il y a eu trop de tentatives de connexion échouées. Cliquez sur le lien suivant.
+EditReactivateTitle: Compte d'utilisateur
+EditReactivateStatusDone: Compte d'utilisateur réactivé. Merci !
+EditVerifySubject: Confirmation d'un compte utilisateur
+EditVerifyMessage: Bonjour @usershort,\n\nveuillez confirmer une nouvelle adresse email pour votre compte utilisateur. Cliquez sur le lien suivant.
+EditVerifyTitle: Compte d'utilisateur
+EditVerifyStatusDone: Votre compte utilisateur est confirmé. Merci !
+EditChangeSubject: Changement d'un compte utilisateur
+EditChangeMessage: Bonjour @usershort,\n\nveuillez confirmer que vous souhaitez modifier votre compte utilisateur. Cliquez sur le lien suivant.
+EditChangeTitle: Compte d'utilisateur
+EditChangeStatusDone: Compte utilisateur changé. Merci !
+EditRemoveSubject: Supprimer le compte d'utilisateur
+EditRemoveMessage: Bonjour @usershort,\n\nveuillez confirmer que vous souhaitez supprimer votre compte d'utilisateur. Cliquez sur le lien suivant.
+EditRemoveTitle: Compte d'utilisateur
+EditRemoveStatusDone: Compte d'utilisateur supprimé. Merci !
+EditRecoverSubject: Restauration d'un compte utilisateur
+EditRecoverMessage: Bonjour @usershort,\n\nveuillez confirmer que vous avez oublié votre mot de passe. Cliquez sur le lien suivant.
+EditWelcomeSubject: Bienvenue
+EditWelcomeMessage: Bonjour @usershort,\n\nvotre compte utilisateur a bien été créé. Amusez-vous bien en éditant le site web.
+EditGoodbyeSubject: Au revoir
+EditGoodbyeMessage: Bonjour @usershort,\n\nvotre compte utilisateur a bien été supprimé. Prends soin.
+EditAccountTitle: Paramètres utilisateur
+EditAccountInformation: Vous pouvez supprimer votre compte d'utilisateur.
+EditAccountMore: Lire la suite…
+EditAccountStatusNone: Ici, vous pouvez changer votre compte utilisateur.
+EditAccountStatusInvalid: S'il vous plaît, veuillez entrer une adresse email valide.
+EditAccountStatusTaken: S'il vous plaît, veuillez entrer une adresse email différent.
+EditAccountStatusWeak: S'il vous plaît, choisissez un mot de passe différent.
+EditAccountStatusShort: S'il vous plaît, choisissez un mot de passe plus long.
+EditAccountStatusNext: Votre compte a été changé, vérifiez vos emails.
+EditSystemTitle: Paramètres du système
+EditSystemSitename: Nom du site:
+EditSystemAuthor: Nom du webmaster:
+EditSystemEmail: Email du webmaster:
+EditSystemInformation: Le webmaster est la personne de contact et peut approuver les nouveaux comptes d'utilisateurs.
+EditSystemStatusNone: Ici, vous pouvez changer les paramètres du système.
+EditSystemStatusInvalid: S'il vous plaît, veuillez entrer une adresse email valide.
+EditUpdateTitle: Mises à jour
+EditUpdateStatusNone: Datenstrom Yellow est fait pour les gens qui font de petits sites web.
+EditUpdateStatusCheck: Vérification des mises à jour…
+EditUpdateStatusUpdates: Mises à jour disponibles, mettre à jour maintenant.
+EditUpdateStatusOk: Votre site web est à jour.
+EditUpdateModified: @extension a été modifié
+EditUpdateForce: Forcer mise à jour
+EditOkButton: Ok
+EditCancelButton: Annuler
+EditChangeButton: Modifier
+EditCreateButton: Créer
+EditEditButton: Sauvegarder
+EditDeleteButton: Supprimer
+EditEdit: Éditer page
+EditCreate: +
+EditDelete: -
+EditKeyboardLabels: Ctrl+, Alt+, Maj+, ⌘, ⌥, ⇧
+EditToolbarFormat: Format
+EditToolbarHeading: Titre
+EditToolbarH1: Titre 1
+EditToolbarH2: Titre 2
+EditToolbarH3: Titre 3
+EditToolbarParagraph: Texte normal
+EditToolbarPre: Code source
+EditToolbarNotice: Avis
+EditToolbarQuote: Citation
+EditToolbarBold: Gras
+EditToolbarItalic: Italique
+EditToolbarStrikethrough: Barré
+EditToolbarCode: Code
+EditToolbarList: Liste
+EditToolbarUl: • Liste à puces
+EditToolbarOl: 1. Liste numérotée
+EditToolbarTl: ✓ Liste des tâches
+EditToolbarLink: Lien
+EditToolbarFile: Fichier
+EditToolbarEmojiawesome: Emoji
+EditToolbarFontawesome: Icone
+EditToolbarStatus: Statut
+EditToolbarUndo: Annuler
+EditToolbarRedo: Refaire
+EditToolbarPreview: Aperçu
+EditToolbarMarkdown: Markdown
+EditToolbarHelp: Aide
+EditMailFooter: @sitename
+EditDataGenerated: Cette page est créée automatiquement.
+EditUploadProgress: [Téléchargement du fichier…]
+EditMenuSettings: Paramètres
+EditMenuHelp: Aide
+EditMenuLogout: Déconnexion
+EditYellowUrl: https://datenstrom.se/yellow/
+EditYellowHelpUrl: https://datenstrom.se/yellow/help/
+InstallTitle: Bonjour
+InstallExtension: Que voulez-vous faire ?
+InstallExtensionWebsite: Site web
+InstallExtensionBlog: Blog
+InstallExtensionWiki: Wiki
+InstallHomeTitle: Accueil
+InstallHomeText: Votre site web fonctionne !\n\n[edit - Vous pouvez modifier cette page] ou utiliser un éditeur de texte.\n\nVous pouvez installer plus de fonctionnalités et de thèmes.\n[Apprenez-en plus](https://datenstrom.se/yellow/help/).
+InstallDefaultTitle: Page
+InstallDefaultText: Ceci est une nouvelle page.
+InstallBlogTitle: Page de blog
+InstallBlogText: Ceci est une nouvelle page de blog.
+InstallWikiTitle: Page de wiki
+InstallWikiText: Ceci est une nouvelle page de wiki.
+InstallExampleImage: Ceci est un exemple d'image
+PreviousnextPagePrevious: ← Précédent: @title
+PreviousnextPageNext: Suivant: @title →
+SearchResultsNone: Entrez un mot dans le champ de recherche.
+SearchResultsEmpty: Pas de résultats.
+SearchSpecialChanges: Changements récents
+SearchButton: Rechercher
+WikiModified: Dernière mise à jour le
+WikiTag: Tags:
+WikiSpecialPages: Toutes les pages
+WikiSpecialChanges: Changements récents
diff --git a/system/extensions/french.php b/system/extensions/french.php
@@ -0,0 +1,26 @@
+<?php
+// French extension, https://github.com/datenstrom/yellow-extensions/tree/master/languages/french
+// Copyright (c) 2013-2020 Datenstrom, https://datenstrom.se
+// This file may be used and distributed under the terms of the public license.
+
+class YellowFrench {
+ const VERSION = "0.8.19";
+ const TYPE = "language";
+ public $yellow; //access to API
+
+ // Handle initialisation
+ public function onLoad($yellow) {
+ $this->yellow = $yellow;
+ }
+
+ // Handle update
+ public function onUpdate($action) {
+ $fileName = $this->yellow->system->get("coreSettingDir").$this->yellow->system->get("coreSystemFile");
+ if ($action=="install") {
+ $this->yellow->system->save($fileName, array("language" => "fr"));
+ } elseif ($action=="uninstall" && $this->yellow->system->get("language")=="fr") {
+ $language = reset(array_diff($this->yellow->text->getLanguages(), array("fr")));
+ $this->yellow->system->save($fileName, array("language" => $language));
+ }
+ }
+}
diff --git a/system/extensions/german-language.txt b/system/extensions/german-language.txt
@@ -0,0 +1,200 @@
+# Datenstrom Yellow language file
+
+Language: de
+LanguageLocale: de_DE
+LanguageDescription: Deutsch
+LanguageTranslator: David Fehrmann
+
+BlogBy: von
+BlogTag: Tags:
+BlogMore: Lies mehr…
+ContactName: Name:
+ContactEmail: E-Mail:
+ContactMessage: Nachricht:
+ContactConsent: Ich stimme zu, dass diese Webseite meine Nachricht speichert.
+ContactButton: Nachricht absenden
+ContactMailSpam: [Spam]
+ContactMailFooter: Diese E-Mail wurde über @sitename verschickt - @title
+ContactStatusNone: Sag Hallo! Dein Feedback ist sehr willkommen.
+ContactStatusIncomplete: Bitte alle Felder ausfüllen.
+ContactStatusInvalid: Bitte eine gültige E-Mail angeben.
+ContactStatusReview: Bitte entferne Links aus der Nachricht.
+ContactStatusDone: Nachricht wurde versandt. Vielen Dank!
+ContactStatusError: Nachricht konnte nicht versandt werden, versuche es später erneut!
+CoreDatePast: heute, gestern, vor @x Tagen, vor 1 Monat, vor @x Monaten, vor 1 Jahr, vor @x Jahren, am @x
+CoreDateFuture: bald, morgen, in @x Tagen, in 1 Monat, in @x Monaten, in 1 Jahr, in @x Jahren, am @x
+CoreDateMonths: Januar, Februar, März, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember
+CoreDateWeekdays: Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag
+CoreDateWeekstart: Montag
+CoreDateFormatShort: F Y
+CoreDateFormatMedium: d.m.Y
+CoreDateFormatLong: d.m.Y H:i
+CoreTimeFormatShort: H:i
+CoreTimeFormatMedium: H:i:s
+CoreTimeFormatLong: H:i:s T
+CorePaginationPrevious: ← Zurück
+CorePaginationNext: Weiter →
+CoreError404Title: Datei nicht gefunden
+CoreError404Text: Die angeforderte Datei wurde nicht gefunden. Oh nein...
+CoreError430Title: Anmeldung fehlgeschlagen
+CoreError430Text: E-Mail oder Kennwort ist falsch. [Bitte erneut versuchen](#data-action-login).
+CoreError434Title: Datei nicht gefunden
+CoreError434Text: Die angeforderte Datei wurde nicht gefunden. [Du kannst diese Seite erstellen](#data-action-edit).
+CoreError500Title: Serverfehler
+CoreError500Text: Etwas ist schief gelaufen. [yellow error]
+DraftStatusEmpty: Keine Entwürfe gefunden.
+EditLoginTitle: Willkommen
+EditLoginEmail: E-Mail:
+EditLoginPassword: Kennwort:
+EditLoginForgot: Kennwort vergessen?
+EditLoginSignup: Benutzerkonto erstellen?
+EditLoginButton: Anmelden
+EditSignupTitle: Benutzerkonto erstellen
+EditSignupName: Name:
+EditSignupEmail: E-Mail:
+EditSignupPassword: Kennwort:
+EditSignupConsent: Ich stimme zu, dass diese Webseite meine persönlichen Daten speichert.
+EditSignupButton: Erstellen
+EditSignupStatusNone: Hier kannst du ein neues Benutzerkonto erstellen.
+EditSignupStatusIncomplete: Bitte alle Felder ausfüllen.
+EditSignupStatusInvalid: Bitte eine gültige E-Mail angeben.
+EditSignupStatusWeak: Bitte ein anderes Kennwort angeben.
+EditSignupStatusShort: Bitte ein längeres Kennwort angeben.
+EditSignupStatusNext: Benutzerkonto wird erstellt, bitte überprüfe deine E-Mails.
+EditForgotTitle: Kennwort vergessen
+EditForgotEmail: E-Mail:
+EditForgotStatusNone: Kein Problem, du kannst ein neues Kennwort erstellen.
+EditForgotStatusInvalid: Bitte eine gültige E-Mail angeben.
+EditForgotStatusNext: Benutzerkonto wird wiederhergestellt, bitte überprüfe deine E-Mails.
+EditRecoverTitle: Kennwort vergessen
+EditRecoverPassword: Kennwort:
+EditRecoverStatusPassword: Bitte ein neues Kennwort angeben.
+EditRecoverStatusWeak: Bitte ein anderes Kennwort angeben.
+EditRecoverStatusShort: Bitte ein längeres Kennwort angeben.
+EditRecoverStatusDone: Benutzerkonto wurde wiederhergestellt. Vielen Dank!
+EditQuitTitle: Benutzerkonto löschen
+EditQuitStatusNone: Bitte gib deinen Namen zur Bestätigung ein.
+EditQuitStatusMismatch: Bitte gib einen anderen Namen ein.
+EditQuitStatusNext: Benutzerkonto wird gelöscht, bitte überprüfe deine E-Mails.
+EditConfirmSubject: Benutzerkonto bestätigen
+EditConfirmMessage: Hallo @usershort,\n\nbitte bestätige dein Benutzerkonto. Klicke auf den folgenden Link.
+EditConfirmTitle: Benutzerkonto
+EditConfirmStatusDone: Benutzerkonto wurde bestätigt und wartet auf Genehmigung. Vielen Dank!
+EditApproveSubject: Benutzerkonto genehmigen
+EditApproveMessage: Hallo @usershort,\n\nbitte genehmige ein neues Benutzerkonto für @useraccount. Klicke auf den folgenden Link.
+EditApproveTitle: Benutzerkonto
+EditApproveStatusDone: Benutzerkonto wurde genehmigt. Vielen Dank!
+EditReactivateSubject: Benutzerkonto reaktivieren
+EditReactivateMessage: Hallo @usershort,\n\nbitte reaktiviere dein Benutzerkonto. Es gab zu viele fehlgeschlagene Anmeldeversuche. Klicke auf den folgenden Link.
+EditReactivateTitle: Benutzerkonto
+EditReactivateStatusDone: Benutzerkonto wurde reaktiviert. Vielen Dank!
+EditVerifySubject: Benutzerkonto bestätigen
+EditVerifyMessage: Hallo @usershort,\n\nbitte bestätige eine neue E-Mail für dein Benutzerkonto. Klicke auf den folgenden Link.
+EditVerifyTitle: Benutzerkonto
+EditVerifyStatusDone: Benutzerkonto wurde bestätigt. Vielen Dank!
+EditChangeSubject: Benutzerkonto ändern
+EditChangeMessage: Hallo @usershort,\n\nbitte bestätige, dass du dein Benutzerkonto ändern möchtest. Klicke auf den folgenden Link.
+EditChangeTitle: Benutzerkonto
+EditChangeStatusDone: Benutzerkonto wurde geändert. Vielen Dank!
+EditRemoveSubject: Benutzerkonto löschen
+EditRemoveMessage: Hallo @usershort,\n\nbitte bestätige, dass du dein Benutzerkonto löschen möchtest. Klicke auf den folgenden Link.
+EditRemoveTitle: Benutzerkonto
+EditRemoveStatusDone: Benutzerkonto wurde gelöscht. Vielen Dank!
+EditRecoverSubject: Benutzerkonto wiederherstellen
+EditRecoverMessage: Hallo @usershort,\n\nbitte bestätige, dass du dein Kennwort vergessen hast. Klicke auf den folgenden Link.
+EditWelcomeSubject: Willkommen
+EditWelcomeMessage: Hallo @usershort,\n\ndein Benutzerkonto wurde erstellt. Viel Spass beim Bearbeiten der Webseite.
+EditGoodbyeSubject: Auf Wiedersehen
+EditGoodbyeMessage: Hallo @usershort,\n\ndein Benutzerkonto wurde gelöscht. Mach's gut.
+EditAccountTitle: Benutzereinstellungen
+EditAccountInformation: Du kannst dein Benutzerkonto jederzeit löschen.
+EditAccountMore: Lies mehr…
+EditAccountStatusNone: Hier kannst du dein Benutzerkonto ändern.
+EditAccountStatusInvalid: Bitte eine gültige E-Mail angeben.
+EditAccountStatusTaken: Bitte eine andere E-Mail angeben.
+EditAccountStatusWeak: Bitte ein anderes Kennwort angeben.
+EditAccountStatusShort: Bitte ein längeres Kennwort angeben.
+EditAccountStatusNext: Benutzerkonto wird geändert, bitte überprüfe deine E-Mails.
+EditSystemTitle: Systemeinstellungen
+EditSystemSitename: Name der Webseite:
+EditSystemAuthor: Name des Webmasters:
+EditSystemEmail: E-Mail des Webmasters:
+EditSystemInformation: Der Webmaster ist die Kontaktperson und kann neue Benutzerkonten genehmigen.
+EditSystemStatusNone: Hier kannst du Systemeinstellungen ändern.
+EditSystemStatusInvalid: Bitte eine gültige E-Mail angeben.
+EditUpdateTitle: Aktualisierungen
+EditUpdateStatusNone: Datenstrom Yellow ist für Menschen die kleine Webseiten machen.
+EditUpdateStatusCheck: Nach Aktualisierung suchen…
+EditUpdateStatusUpdates: Aktualisierung verfügbar, jetzt aktualisieren.
+EditUpdateStatusOk: Deine Webseite ist auf dem neusten Stand.
+EditUpdateModified: @extension wurde modifiziert
+EditUpdateForce: Aktualisierung erzwingen
+EditOkButton: Ok
+EditCancelButton: Abbruch
+EditChangeButton: Ändern
+EditCreateButton: Erzeugen
+EditEditButton: Speichern
+EditDeleteButton: Löschen
+EditEdit: Seite bearbeiten
+EditCreate: +
+EditDelete: -
+EditKeyboardLabels: Strg+, Alt+, Umschalt+, ⌘, ⌥, ⇧
+EditToolbarFormat: Format
+EditToolbarHeading: Überschrift
+EditToolbarH1: Überschrift 1
+EditToolbarH2: Überschrift 2
+EditToolbarH3: Überschrift 3
+EditToolbarParagraph: Normaler Text
+EditToolbarPre: Quellcode
+EditToolbarNotice: Hinweis
+EditToolbarQuote: Zitat
+EditToolbarBold: Fettschrift
+EditToolbarItalic: Kursiv
+EditToolbarStrikethrough: Durchgestrichen
+EditToolbarCode: Code
+EditToolbarList: Liste
+EditToolbarUl: • Unsortierte Liste
+EditToolbarOl: 1. Sortierte Liste
+EditToolbarTl: ✓ Aufgabenliste
+EditToolbarLink: Link
+EditToolbarFile: Datei
+EditToolbarEmojiawesome: Emoji
+EditToolbarFontawesome: Symbol
+EditToolbarStatus: Status
+EditToolbarUndo: Rückgängig
+EditToolbarRedo: Wiederholen
+EditToolbarPreview: Vorschau
+EditToolbarMarkdown: Markdown
+EditToolbarHelp: Hilfe
+EditMailFooter: @sitename
+EditDataGenerated: Diese Seite ist automatisch erstellt.
+EditUploadProgress: [Datei hochladen…]
+EditMenuSettings: Einstellungen
+EditMenuHelp: Hilfe
+EditMenuLogout: Abmelden
+EditYellowUrl: https://datenstrom.se/de/yellow/
+EditYellowHelpUrl: https://datenstrom.se/de/yellow/help/
+InstallTitle: Hallo
+InstallExtension: Was willst du machen?
+InstallExtensionWebsite: Webseite
+InstallExtensionBlog: Blog
+InstallExtensionWiki: Wiki
+InstallHomeTitle: Startseite
+InstallHomeText: Deine Webseite funktioniert!\n\n[edit - Du kannst diese Seite bearbeiten] oder einen Texteditor benutzen.\n\nDu kannst weitere Funktionen und Themen installieren.\n[Mehr erfahren](https://datenstrom.se/de/yellow/help/).
+InstallDefaultTitle: Seite
+InstallDefaultText: Dies ist eine neue Seite.
+InstallBlogTitle: Blogseite
+InstallBlogText: Dies ist eine neue Blogseite.
+InstallWikiTitle: Wikiseite
+InstallWikiText: Dies ist eine neue Wikiseite.
+InstallExampleImage: Das ist ein Beispielbild
+PreviousnextPagePrevious: ← Zurück: @title
+PreviousnextPageNext: Weiter: @title →
+SearchResultsNone: Bitte einen Suchbegriff eingeben.
+SearchResultsEmpty: Keine Treffer für diese Suchanfrage.
+SearchSpecialChanges: Letzte Änderungen
+SearchButton: Suchen
+WikiModified: Zuletzt aktualisiert am
+WikiTag: Tags:
+WikiSpecialPages: Alle Seiten
+WikiSpecialChanges: Letzte Änderungen
diff --git a/system/extensions/german.php b/system/extensions/german.php
@@ -0,0 +1,26 @@
+<?php
+// German extension, https://github.com/datenstrom/yellow-extensions/tree/master/languages/german
+// Copyright (c) 2013-2020 Datenstrom, https://datenstrom.se
+// This file may be used and distributed under the terms of the public license.
+
+class YellowGerman {
+ const VERSION = "0.8.19";
+ const TYPE = "language";
+ public $yellow; //access to API
+
+ // Handle initialisation
+ public function onLoad($yellow) {
+ $this->yellow = $yellow;
+ }
+
+ // Handle update
+ public function onUpdate($action) {
+ $fileName = $this->yellow->system->get("coreSettingDir").$this->yellow->system->get("coreSystemFile");
+ if ($action=="install") {
+ $this->yellow->system->save($fileName, array("language" => "de"));
+ } elseif ($action=="uninstall" && $this->yellow->system->get("language")=="de") {
+ $language = reset(array_diff($this->yellow->text->getLanguages(), array("de")));
+ $this->yellow->system->save($fileName, array("language" => $language));
+ }
+ }
+}
diff --git a/system/extensions/install-blog.zip b/system/extensions/install-blog.zip
Binary files differ.
diff --git a/system/extensions/install-languages.zip b/system/extensions/install-languages.zip
Binary files differ.
diff --git a/system/extensions/install-wiki.zip b/system/extensions/install-wiki.zip
Binary files differ.
diff --git a/system/extensions/install.php b/system/extensions/install.php
@@ -1,372 +0,0 @@
-<?php
-// Install extension, https://github.com/datenstrom/yellow
-// Copyright (c) 2013-2020 Datenstrom, https://datenstrom.se
-// This file may be used and distributed under the terms of the public license.
-
-class YellowInstall {
- const VERSION = "0.8.24";
- const TYPE = "feature";
- const PRIORITY = "1";
- public $yellow; //access to API
-
- // Handle initialisation
- public function onLoad($yellow) {
- $this->yellow = $yellow;
- }
-
- // Handle request
- public function onRequest($scheme, $address, $base, $location, $fileName) {
- $statusCode = 0;
- if ($this->yellow->lookup->isContentFile($fileName) || empty($fileName)) {
- $statusCode = $this->processRequestInstall($scheme, $address, $base, $location, $fileName);
- }
- return $statusCode;
- }
-
- // Handle command
- public function onCommand($args) {
- return $this->processCommandInstall();
- }
-
- // Process request to install website
- public function processRequestInstall($scheme, $address, $base, $location, $fileName) {
- $this->checkServerRequirements();
- $author = trim(preg_replace("/[^\pL\d\-\. ]/u", "-", $this->yellow->page->getRequest("author")));
- $email = trim($this->yellow->page->getRequest("email"));
- $password = trim($this->yellow->page->getRequest("password"));
- $language = trim($this->yellow->page->getRequest("language"));
- $extension = trim($this->yellow->page->getRequest("extension"));
- $status = trim($this->yellow->page->getRequest("status"));
- $statusCode = $this->updateLog();
- $statusCode = max($statusCode, $this->updateLanguage());
- $this->yellow->content->pages["root/"] = array();
- $this->yellow->page = new YellowPage($this->yellow);
- $this->yellow->page->setRequestInformation($scheme, $address, $base, $location, $fileName);
- $this->yellow->page->parseData($this->getRawDataInstall(), false, $statusCode, $this->yellow->page->get("pageError"));
- $this->yellow->page->safeMode = false;
- if ($status=="install") $status = $this->updateExtension($extension)==200 ? "ok" : "error";
- if ($status=="ok") $status = $this->updateUser($email, $password, $author, $language)==200 ? "ok" : "error";
- if ($status=="ok") $status = $this->updateContent($language, "installHome", "/")==200 ? "ok" : "error";
- if ($status=="ok") $status = $this->updateContent($language, "installDefault", "/shared/page-new-default")==200 ? "ok" : "error";
- if ($status=="ok") $status = $this->updateContent($language, "installBlog", "/shared/page-new-blog")==200 ? "ok" : "error";
- if ($status=="ok") $status = $this->updateContent($language, "installWiki", "/shared/page-new-wiki")==200 ? "ok" : "error";
- if ($status=="ok") $status = $this->updateContent($language, "coreError404", "/shared/page-error-404")==200 ? "ok" : "error";
- if ($status=="ok") $status = $this->updateText($language)==200 ? "ok" : "error";
- if ($status=="ok") $status = $this->updateSystem($this->getSystemData())==200 ? "ok" : "error";
- if ($status=="ok") $status = $this->removeInstall()==200 ? "done" : "error";
- if ($status=="done") {
- $location = $this->yellow->lookup->normaliseUrl($scheme, $address, $base, $location);
- $statusCode = $this->yellow->sendStatus(303, $location);
- } else {
- $statusCode = $this->yellow->sendPage();
- }
- return $statusCode;
- }
-
- // Process command to install website
- public function processCommandInstall() {
- $statusCode = $this->updateLog();
- if ($statusCode==200) $statusCode = $this->updateLanguage();
- if ($statusCode==200) $statusCode = $this->updateText("en");
- if ($statusCode==200) $statusCode = $this->updateSystem($this->getSystemData());
- if ($statusCode==200) $statusCode = $this->removeInstall();
- if ($statusCode==200) {
- $statusCode = 0;
- } else {
- echo "ERROR updating files: ".$this->yellow->page->get("pageError")."\n";
- echo "Your website has ".($statusCode!=200 ? "not " : "")."been updated: Please run command again\n";
- }
- return $statusCode;
- }
-
- // Update log
- public function updateLog() {
- $statusCode = 200;
- $fileName = $this->yellow->system->get("coreExtensionDir").$this->yellow->system->get("coreLogFile");
- if (!is_file($fileName)) {
- list($name, $version) = $this->yellow->toolbox->detectServerInformation();
- $this->yellow->log("info", "Datenstrom Yellow ".YellowCore::VERSION.", PHP ".PHP_VERSION.", $name $version, ".PHP_OS);
- if (!is_file($fileName)) {
- $statusCode = 500;
- $this->yellow->page->error(500, "Can't write file '$fileName'!");
- }
- }
- return $statusCode;
- }
-
- // Update language
- public function updateLanguage() {
- $statusCode = 200;
- $path = $this->yellow->system->get("coreExtensionDir")."install-languages.zip";
- if (is_file($path) && $this->yellow->extensions->isExisting("update")) {
- $zip = new ZipArchive();
- if ($zip->open($path)===true) {
- $languages = $this->detectBrowserLanguages("en, de, fr");
- $languagesFound = array();
- foreach ($languages as $language) $languagesFound[$language] = "";
- if (preg_match("#^(.*\/).*?$#", $zip->getNameIndex(0), $matches)) $pathBase = $matches[1];
- $fileData = $zip->getFromName($pathBase.$this->yellow->system->get("updateExtensionFile"));
- foreach ($this->yellow->toolbox->getTextLines($fileData) as $line) {
- preg_match("/^\s*(.*?)\s*:\s*(.*?)\s*$/", $line, $matches);
- if (!empty($matches[1]) && !empty($matches[2]) && strposu($matches[1], "/")) {
- list($dummy, $entry) = explode(",", $matches[2], 3);
- $flags = explode(",", $matches[2]);
- $language = array_pop($flags);
- if (preg_match("/^(.*)\.php$/", basename($entry), $tokens) && in_array($language, $languages)) {
- $languagesFound[$language] = $tokens[1];
- }
- }
- }
- $languagesFound = array_slice(array_filter($languagesFound, "strlen"), 0, 3);
- $extension = $version = "";
- $modified = 0;
- foreach ($this->yellow->toolbox->getTextLines($fileData) as $line) {
- preg_match("/^\s*(.*?)\s*:\s*(.*?)\s*$/", $line, $matches);
- if (lcfirst($matches[1])=="extension") $extension = lcfirst($matches[2]);
- if (lcfirst($matches[1])=="version") $version = lcfirst($matches[2]);
- if (lcfirst($matches[1])=="published") $modified = strtotime($matches[2]);
- if (!empty($matches[1]) && !empty($matches[2]) && strposu($matches[1], "/")) {
- $fileName = $matches[1];
- list($dummy, $entry) = explode(",", $matches[2], 3);
- $fileData = $zip->getFromName($pathBase.basename($entry));
- if (preg_match("/^(.*).php$/", basename($entry), $tokens) && in_array($tokens[1], $languagesFound) && !is_file($fileName)) {
- $statusCode = $this->yellow->extensions->get("update")->updateExtensionFile($fileName, $fileData, $modified, 0, 0, "create", false, $extension);
- }
- if (preg_match("/^(.*)-language\.txt$/", basename($entry), $tokens) && in_array($tokens[1], $languagesFound) && !is_file($fileName)) {
- $statusCode = $this->yellow->extensions->get("update")->updateExtensionFile($fileName, $fileData, $modified, 0, 0, "create", false, $extension);
- $this->yellow->log($statusCode==200 ? "info" : "error", "Install extension '".ucfirst($tokens[1])." $version'");
- }
- if ($statusCode!=200) break;
- }
- }
- $zip->close();
- if ($statusCode==200) {
- $this->yellow->text->load($this->yellow->system->get("coreExtensionDir").$this->yellow->system->get("coreLanguageFile"), "");
- }
- } else {
- $statusCode = 500;
- $this->yellow->page->error(500, "Can't open file '$path'!");
- }
- }
- return $statusCode;
- }
-
- // Update extension
- public function updateExtension($extension) {
- $statusCode = 200;
- $path = $this->yellow->system->get("coreExtensionDir");
- if (!empty($extension) && $this->yellow->extensions->isExisting("update")) {
- foreach ($this->yellow->toolbox->getDirectoryEntries($path, "/^.*\.zip$/", true, false) as $entry) {
- if (preg_match("/^install-(.*?)\./", basename($entry), $matches)) {
- if (strtoloweru($matches[1])==strtoloweru($extension)) {
- $statusCode = $this->yellow->extensions->get("update")->updateExtensionArchive($entry, "install");
- break;
- }
- }
- }
- }
- return $statusCode;
- }
-
- // Update user
- public function updateUser($email, $password, $name, $language) {
- $statusCode = 200;
- if (!empty($email) && !empty($password) && $this->yellow->extensions->isExisting("edit")) {
- if (empty($name)) $name = $this->yellow->system->get("sitename");
- $fileNameUser = $this->yellow->system->get("coreSettingDir").$this->yellow->system->get("editUserFile");
- $settings = array(
- "name" => $name,
- "language" => $language,
- "home" => "/",
- "access" => "create, edit, delete, upload, system, update",
- "hash" => $this->yellow->extensions->get("edit")->users->createHash($password),
- "stamp" => $this->yellow->extensions->get("edit")->users->createStamp(),
- "pending" => "none",
- "failed" => "0",
- "modified" => time(),
- "status" => "active");
- if (!$this->yellow->extensions->get("edit")->users->save($fileNameUser, $email, $settings)) {
- $statusCode = 500;
- $this->yellow->page->error(500, "Can't write file '$fileNameUser'!");
- }
- $this->yellow->log($statusCode==200 ? "info" : "error", "Add user '".strtok($name, " ")."'");
- }
- return $statusCode;
- }
-
- // Update content
- public function updateContent($language, $name, $location) {
- $statusCode = 200;
- $fileName = $this->yellow->lookup->findFileFromLocation($location);
- $fileData = strreplaceu("\r\n", "\n", $this->yellow->toolbox->readFile($fileName));
- if (!empty($fileData) && $language!="en") {
- $titleOld = "Title: ".$this->yellow->text->getText("{$name}Title", "en");
- $titleNew = "Title: ".$this->yellow->text->getText("{$name}Title", $language);
- $textOld = strreplaceu("\\n", "\n", $this->yellow->text->getText("{$name}Text", "en"));
- $textNew = strreplaceu("\\n", "\n", $this->yellow->text->getText("{$name}Text", $language));
- $fileData = strreplaceu($titleOld, $titleNew, $fileData);
- $fileData = strreplaceu($textOld, $textNew, $fileData);
- if (!$this->yellow->toolbox->createFile($fileName, $fileData)) {
- $statusCode = 500;
- $this->yellow->page->error($statusCode, "Can't write file '$fileName'!");
- }
- }
- return $statusCode;
- }
-
- // Update text settings
- public function updateText($language) {
- $statusCode = 200;
- $fileName = $this->yellow->system->get("coreSettingDir").$this->yellow->system->get("coreTextFile");
- $fileData = $this->yellow->toolbox->readFile($fileName);
- if (count($this->yellow->toolbox->getTextLines($fileData))<4) {
- $fileData .= "Language: $language\n";
- $fileData .= "CoreDateFormatMedium: ".$this->yellow->text->getText("coreDateFormatMedium", $language)."\n";
- $fileData .= "picture.jpg: ".$this->yellow->text->getText("installExampleImage", $language)."\n";
- if (!$this->yellow->toolbox->createFile($fileName, $fileData)) {
- $statusCode = 500;
- $this->yellow->page->error($statusCode, "Can't write file '$fileName'!");
- }
- }
- return $statusCode;
- }
-
- // Update system settings
- public function updateSystem($settings) {
- $statusCode = 200;
- $fileName = $this->yellow->system->get("coreSettingDir").$this->yellow->system->get("coreSystemFile");
- if (!$this->yellow->system->save($fileName, $settings)) {
- $statusCode = 500;
- $this->yellow->page->error($statusCode, "Can't write file '$fileName'!");
- }
- return $statusCode;
- }
-
- // Remove files used by installation
- public function removeInstall() {
- $statusCode = 200;
- if (function_exists("opcache_reset")) opcache_reset();
- $path = $this->yellow->system->get("coreExtensionDir");
- foreach ($this->yellow->toolbox->getDirectoryEntries($path, "/^.*\.zip$/", true, false) as $entry) {
- if (preg_match("/^install-(.*?)\./", basename($entry), $matches)) {
- if (!$this->yellow->toolbox->deleteFile($entry)) {
- $statusCode = 500;
- $this->yellow->page->error($statusCode, "Can't delete file '$entry'!");
- }
- }
- }
- $path = $this->yellow->system->get("coreExtensionDir")."install.php";
- if ($statusCode==200 && !$this->yellow->toolbox->deleteFile($path)) {
- $statusCode = 500;
- $this->yellow->page->error($statusCode, "Can't delete file '$path'!");
- }
- if ($statusCode==200) unset($this->yellow->extensions->extensions["install"]);
- return $statusCode;
- }
-
- // Check web server requirements
- public function checkServerRequirements() {
- list($name) = $this->yellow->toolbox->detectServerInformation();
- $troubleshooting = "<a href=\"https://datenstrom.se/yellow/help/troubleshooting\">See troubleshooting</a>.";
- $this->checkServerConfiguration() || die("Datenstrom Yellow requires configuration file for $name! $troubleshooting\n");
- $this->checkServerRewrite() || die("Datenstrom Yellow requires rewrite support for $name! $troubleshooting\n");
- $this->checkServerWrite() || die("Datenstrom Yellow requires write access for $name! $troubleshooting\n");
- return true;
- }
-
- // Check web server configuration file
- public function checkServerConfiguration() {
- list($name) = $this->yellow->toolbox->detectServerInformation();
- return strtoloweru($name)!="apache" || is_file(".htaccess");
- }
-
- // Check web server rewrite support
- public function checkServerRewrite() {
- $curlHandle = curl_init();
- list($scheme, $address, $base) = $this->yellow->getRequestInformation();
- $location = $this->yellow->system->get("coreResourceLocation").$this->yellow->lookup->normaliseName($this->yellow->system->get("theme")).".css";
- $url = $this->yellow->lookup->normaliseUrl($scheme, $address, $base, $location);
- curl_setopt($curlHandle, CURLOPT_URL, $url);
- curl_setopt($curlHandle, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; YellowCore/".YellowCore::VERSION).")";
- curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($curlHandle, CURLOPT_CONNECTTIMEOUT, 30);
- $rawData = curl_exec($curlHandle);
- $statusCode = curl_getinfo($curlHandle, CURLINFO_HTTP_CODE);
- curl_close($curlHandle);
- return $statusCode==200;
- }
-
- // Check web server write access
- public function checkServerWrite() {
- $fileName = $this->yellow->system->get("coreSettingDir").$this->yellow->system->get("coreSystemFile");
- return $this->yellow->system->save($fileName, array());
- }
-
- // Detect browser languages
- public function detectBrowserLanguages($languagesDefault) {
- $languages = array();
- foreach (preg_split("/\s*,\s*/", $this->yellow->toolbox->getServer("HTTP_ACCEPT_LANGUAGE")) as $string) {
- list($language) = explode(";", $string);
- if (!empty($language)) array_push($languages, $language);
- }
- foreach (preg_split("/\s*,\s*/", $languagesDefault) as $language) {
- if (!empty($language)) array_push($languages, $language);
- }
- return array_unique($languages);
- }
-
- // Return system data including static information
- public function getSystemData() {
- $data = array();
- foreach ($_REQUEST as $key=>$value) {
- if (!$this->yellow->system->isExisting($key)) continue;
- if ($key=="password" || $key=="status") continue;
- $data[$key] = trim($value);
- }
- $data["coreStaticUrl"] = $this->yellow->toolbox->detectServerUrl();
- $data["coreServerTimezone"] = $this->yellow->toolbox->detectServerTimezone();
- if ($this->yellow->isCommandLine()) $data["coreStaticUrl"] = getenv("URL");
- return $data;
- }
-
- // Return raw data for install page
- public function getRawDataInstall() {
- $language = $this->yellow->toolbox->detectBrowserLanguage($this->yellow->text->getLanguages(), $this->yellow->system->get("language"));
- $this->yellow->text->setLanguage($language);
- $rawData = "---\nTitle:".$this->yellow->text->get("installTitle")."\nLanguage:$language\nNavigation:navigation\nHeader:none\nFooter:none\nSidebar:none\n---\n";
- $rawData .= "<form class=\"install-form\" action=\"".$this->yellow->page->getLocation(true)."\" method=\"post\">\n";
- $rawData .= "<p><label for=\"author\">".$this->yellow->text->get("editSignupName")."</label><br /><input class=\"form-control\" type=\"text\" maxlength=\"64\" name=\"author\" id=\"author\" value=\"\"></p>\n";
- $rawData .= "<p><label for=\"email\">".$this->yellow->text->get("editSignupEmail")."</label><br /><input class=\"form-control\" type=\"text\" maxlength=\"64\" name=\"email\" id=\"email\" value=\"\"></p>\n";
- $rawData .= "<p><label for=\"password\">".$this->yellow->text->get("editSignupPassword")."</label><br /><input class=\"form-control\" type=\"password\" maxlength=\"64\" name=\"password\" id=\"password\" value=\"\"></p>\n";
- if (count($this->yellow->text->getLanguages())>1) {
- $rawData .= "<p>";
- foreach ($this->yellow->text->getLanguages() as $language) {
- $checked = $language==$this->yellow->text->language ? " checked=\"checked\"" : "";
- $rawData .= "<label for=\"$language\"><input type=\"radio\" name=\"language\" id=\"$language\" value=\"$language\"$checked> ".$this->yellow->text->getTextHtml("languageDescription", $language)."</label><br />";
- }
- $rawData .= "</p>\n";
- }
- if (count($this->getExtensionsInstall())>1) {
- $rawData .= "<p>".$this->yellow->text->get("installExtension")."<p>";
- foreach ($this->getExtensionsInstall() as $extension) {
- $checked = $extension=="website" ? " checked=\"checked\"" : "";
- $rawData .= "<label for=\"$extension\"><input type=\"radio\" name=\"extension\" id=\"$extension\" value=\"$extension\"$checked> ".$this->yellow->text->getHtml("installExtension".ucfirst($extension))."</label><br />";
- }
- $rawData .= "</p>\n";
- }
- $rawData .= "<input class=\"btn\" type=\"submit\" value=\"".$this->yellow->text->get("editOkButton")."\" />\n";
- $rawData .= "<input type=\"hidden\" name=\"status\" value=\"install\" />\n";
- $rawData .= "</form>\n";
- return $rawData;
- }
-
- // Return extensions for install page
- public function getExtensionsInstall() {
- $extensions = array("website");
- $path = $this->yellow->system->get("coreExtensionDir");
- foreach ($this->yellow->toolbox->getDirectoryEntries($path, "/^.*\.zip$/", true, false, false) as $entry) {
- if (preg_match("/^install-(.*?)\./", $entry, $matches) && $matches[1]!="languages") array_push($extensions, $matches[1]);
- }
- return $extensions;
- }
-}
diff --git a/system/extensions/yellow.log b/system/extensions/yellow.log
@@ -0,0 +1,5 @@
+2020-06-23 20:58:29 info Datenstrom Yellow 0.8.12, PHP 7.4.6, nginx 1.18.0, Linux
+2020-06-23 20:58:29 info Install extension 'English 0.8.19'
+2020-06-23 20:58:29 info Install extension 'French 0.8.19'
+2020-06-23 20:58:29 info Install extension 'German 0.8.19'
+2020-06-23 21:00:06 info Add user 'Ashymad'
diff --git a/system/layouts/header.html b/system/layouts/header.html
@@ -15,7 +15,7 @@
<div class="<?php echo "page layout-".$this->yellow->page->getHtml("layout") ?>">
<div class="header" role="banner">
<div class="sitename">
-<h1><a href="<?php echo $this->yellow->page->getBase(true)."/" ?>"><i class="sitename-logo"></i><?php echo $this->yellow->page->getHtml("sitename") ?></a></h1>
+<h1><a href="<?php echo $this->yellow->page->getBase(true)."/" ?>"><i class="sitename-logo"></i><span class="latex">M<sub>I</sub>K<sup>U</sup>L<sup>I</sup>.C<sub>Z</sub></span></a></h1>
<?php if ($page = $this->yellow->content->shared("header")) $this->yellow->page->setPage("header", $page) ?>
<?php if ($this->yellow->page->isPage("header")) echo $this->yellow->page->getPage("header")->getContent() ?>
</div>
diff --git a/system/resources/bundle-4ae45fbba2.min.js b/system/resources/bundle-4ae45fbba2.min.js
@@ -0,0 +1,55 @@
+/* edit.js */
+var yellow={onLoad:function(e){yellow.edit.load(e)},onKeydown:function(e){yellow.edit.keydown(e)},onDrag:function(e){yellow.edit.drag(e)},onDrop:function(e){yellow.edit.drop(e)},onClick:function(e){yellow.edit.click(e)},onClickAction:function(e){yellow.edit.clickAction(e)},onPageShow:function(e){yellow.edit.pageShow(e)},onUpdatePane:function(){yellow.edit.updatePane(yellow.edit.paneId,yellow.edit.paneAction,yellow.edit.paneStatus)},onResizePane:function(){yellow.edit.resizePane(yellow.edit.paneId,yellow.edit.paneAction,yellow.edit.paneStatus)},action:function(action,status,args){yellow.edit.processAction(action,status,args)}};yellow.edit={paneId:0,paneAction:0,paneStatus:0,popupId:0,intervalId:0,load:function(e){var body=document.getElementsByTagName("body")[0];if(body&&body.firstChild&&!document.getElementById("yellow-bar")){this.createBar("yellow-bar");this.processAction(yellow.page.action,yellow.page.status);clearInterval(this.intervalId)}
+if(e.type=="DOMContentLoaded"){var page=document.getElementsByClassName("page")[0];if(page)this.bindActions(page)}},keydown:function(e){if(this.paneId=="yellow-pane-create"||this.paneId=="yellow-pane-edit"||this.paneId=="yellow-pane-delete")this.processShortcut(e);if(this.paneId&&e.keyCode==27)this.hidePane(this.paneId)},drag:function(e){e.stopPropagation();e.preventDefault()},drop:function(e){e.stopPropagation();e.preventDefault();var elementText=document.getElementById(this.paneId+"-text");var files=e.dataTransfer?e.dataTransfer.files:e.target.files;for(var i=0;i<files.length;i++)this.uploadFile(elementText,files[i]);},click:function(e){if(this.popupId&&!document.getElementById(this.popupId).contains(e.target))this.hidePopup(this.popupId,!0);if(this.paneId&&!document.getElementById(this.paneId).contains(e.target))this.hidePane(this.paneId,!0)},clickAction:function(e){e.stopPropagation();e.preventDefault();var element=e.target;for(;element;element=element.parentNode){if(element.tagName=="A")break}
+this.processAction(element.getAttribute("data-action"),element.getAttribute("data-status"),element.getAttribute("data-args"))},pageShow:function(e){if(e.persisted&&yellow.system.userEmail&&!this.getCookie("csrftoken")){window.location.reload()}},createBar:function(barId){var elementBar=document.createElement("div");elementBar.className="yellow-bar";elementBar.setAttribute("id",barId);if(barId=="yellow-bar"){yellow.toolbox.addEvent(document,"click",yellow.onClick);yellow.toolbox.addEvent(document,"keydown",yellow.onKeydown);yellow.toolbox.addEvent(window,"pageshow",yellow.onPageShow);yellow.toolbox.addEvent(window,"resize",yellow.onResizePane)}
+var elementDiv=document.createElement("div");elementDiv.setAttribute("id",barId+"-content");if(yellow.system.userName){elementDiv.innerHTML="<div class=\"yellow-bar-left\">"+this.getRawDataPaneAction("edit")+"</div>"+"<div class=\"yellow-bar-right\">"+this.getRawDataPaneAction("create")+this.getRawDataPaneAction("delete")+this.getRawDataPaneAction("menu",yellow.system.userName,!0)+"</div>"+"<div class=\"yellow-bar-banner\"></div>"}else{elementDiv.innerHTML=" "}
+elementBar.appendChild(elementDiv);yellow.toolbox.insertBefore(elementBar,document.getElementsByTagName("body")[0].firstChild);this.bindActions(elementBar)},updateBar:function(paneId,name){if(paneId){var element=document.getElementById(paneId+"-bar");if(element){if(name.indexOf("selected")!=-1)element.setAttribute("aria-expanded","true");yellow.toolbox.addClass(element,name)}}else{var elements=document.getElementsByClassName(name);for(var i=0,l=elements.length;i<l;i++){if(name.indexOf("selected")!=-1)elements[i].setAttribute("aria-expanded","false");yellow.toolbox.removeClass(elements[i],name)}}},createPane:function(paneId,paneAction,paneStatus){if(yellow.system.debug)console.log("yellow.edit.createPane id:"+paneId);var elementPane=document.createElement("div");elementPane.className="yellow-pane";elementPane.setAttribute("id",paneId);elementPane.style.display="none";if(paneId=="yellow-pane-create"||paneId=="yellow-pane-edit"){yellow.toolbox.addEvent(elementPane,"input",yellow.onUpdatePane);yellow.toolbox.addEvent(elementPane,"dragenter",yellow.onDrag);yellow.toolbox.addEvent(elementPane,"dragover",yellow.onDrag);yellow.toolbox.addEvent(elementPane,"drop",yellow.onDrop)}
+if(paneId=="yellow-pane-create"||paneId=="yellow-pane-edit"||paneId=="yellow-pane-delete"||paneId=="yellow-pane-menu"){var elementArrow=document.createElement("span");elementArrow.className="yellow-arrow";elementArrow.setAttribute("id",paneId+"-arrow");elementPane.appendChild(elementArrow)}
+var elementDiv=document.createElement("div");elementDiv.className="yellow-content";elementDiv.setAttribute("id",paneId+"-content");switch(paneId){case "yellow-pane-login":elementDiv.innerHTML="<form method=\"post\">"+"<a href=\"#\" class=\"yellow-close\" data-action=\"close\"><i class=\"yellow-icon yellow-icon-close\"></i></a>"+"<div class=\"yellow-title\"><h1>"+this.getText("LoginTitle")+"</h1></div>"+"<div class=\"yellow-fields\">"+"<input type=\"hidden\" name=\"action\" value=\"login\" />"+"<p><label for=\"yellow-pane-login-email\">"+this.getText("LoginEmail")+"</label><br /><input class=\"yellow-form-control\" name=\"email\" id=\"yellow-pane-login-email\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(yellow.system.editLoginEmail)+"\" /></p>"+"<p><label for=\"yellow-pane-login-password\">"+this.getText("LoginPassword")+"</label><br /><input class=\"yellow-form-control\" type=\"password\" name=\"password\" id=\"yellow-pane-login-password\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(yellow.system.editLoginPassword)+"\" /></p>"+"<p><input class=\"yellow-btn\" type=\"submit\" value=\""+this.getText("LoginButton")+"\" /></p>"+"<p><a href=\"#\" id=\"yellow-pane-login-forgot\" class=\"yellow-center\" data-action=\"forgot\">"+this.getText("LoginForgot")+"</a><br /><a href=\"#\" id=\"yellow-pane-login-signup\" class=\"yellow-center\" data-action=\"signup\">"+this.getText("LoginSignup")+"</a></p>"+"</div>"+"</form>";break;case "yellow-pane-signup":elementDiv.innerHTML="<form method=\"post\">"+"<a href=\"#\" class=\"yellow-close\" data-action=\"close\"><i class=\"yellow-icon yellow-icon-close\"></i></a>"+"<div class=\"yellow-title\"><h1>"+this.getText("SignupTitle")+"</h1></div>"+"<div class=\"yellow-status\"><p id=\"yellow-pane-signup-status\" class=\""+paneStatus+"\">"+this.getText("SignupStatus","",paneStatus)+"</p></div>"+"<div class=\"yellow-fields\">"+"<input type=\"hidden\" name=\"action\" value=\"signup\" />"+"<p><label for=\"yellow-pane-signup-name\">"+this.getText("SignupName")+"</label><br /><input class=\"yellow-form-control\" name=\"name\" id=\"yellow-pane-signup-name\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("name"))+"\" /></p>"+"<p><label for=\"yellow-pane-signup-email\">"+this.getText("SignupEmail")+"</label><br /><input class=\"yellow-form-control\" name=\"email\" id=\"yellow-pane-signup-email\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("email"))+"\" /></p>"+"<p><label for=\"yellow-pane-signup-password\">"+this.getText("SignupPassword")+"</label><br /><input class=\"yellow-form-control\" type=\"password\" name=\"password\" id=\"yellow-pane-signup-password\" maxlength=\"64\" value=\"\" /></p>"+"<p><input type=\"checkbox\" name=\"consent\" value=\"consent\" id=\"yellow-pane-signup-consent\""+(this.getRequest("consent")?" checked=\"checked\"":"")+"> <label for=\"yellow-pane-signup-consent\">"+this.getText("SignupConsent")+"</label></p>"+"<p><input class=\"yellow-btn\" type=\"submit\" value=\""+this.getText("SignupButton")+"\" /></p>"+"</div>"+"</form>";break;case "yellow-pane-forgot":elementDiv.innerHTML="<form method=\"post\">"+"<a href=\"#\" class=\"yellow-close\" data-action=\"close\"><i class=\"yellow-icon yellow-icon-close\"></i></a>"+"<div class=\"yellow-title\"><h1>"+this.getText("ForgotTitle")+"</h1></div>"+"<div class=\"yellow-status\"><p id=\"yellow-pane-forgot-status\" class=\""+paneStatus+"\">"+this.getText("ForgotStatus","",paneStatus)+"</p></div>"+"<div class=\"yellow-fields\">"+"<input type=\"hidden\" name=\"action\" value=\"forgot\" />"+"<p><label for=\"yellow-pane-forgot-email\">"+this.getText("ForgotEmail")+"</label><br /><input class=\"yellow-form-control\" name=\"email\" id=\"yellow-pane-forgot-email\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("email"))+"\" /></p>"+"<p><input class=\"yellow-btn\" type=\"submit\" value=\""+this.getText("OkButton")+"\" /></p>"+"</div>"+"</form>";break;case "yellow-pane-recover":elementDiv.innerHTML="<form method=\"post\">"+"<a href=\"#\" class=\"yellow-close\" data-action=\"close\"><i class=\"yellow-icon yellow-icon-close\"></i></a>"+"<div class=\"yellow-title\"><h1>"+this.getText("RecoverTitle")+"</h1></div>"+"<div class=\"yellow-status\"><p id=\"yellow-pane-recover-status\" class=\""+paneStatus+"\">"+this.getText("RecoverStatus","",paneStatus)+"</p></div>"+"<div class=\"yellow-fields\">"+"<p><label for=\"yellow-pane-recover-password\">"+this.getText("RecoverPassword")+"</label><br /><input class=\"yellow-form-control\" type=\"password\" name=\"password\" id=\"yellow-pane-recover-password\" maxlength=\"64\" value=\"\" /></p>"+"<p><input class=\"yellow-btn\" type=\"submit\" value=\""+this.getText("OkButton")+"\" /></p>"+"</div>"+"</form>";break;case "yellow-pane-quit":elementDiv.innerHTML="<form method=\"post\">"+"<a href=\"#\" class=\"yellow-close\" data-action=\"close\"><i class=\"yellow-icon yellow-icon-close\"></i></a>"+"<div class=\"yellow-title\"><h1>"+this.getText("QuitTitle")+"</h1></div>"+"<div class=\"yellow-status\"><p id=\"yellow-pane-quit-status\" class=\""+paneStatus+"\">"+this.getText("QuitStatus","",paneStatus)+"</p></div>"+"<div class=\"yellow-fields\">"+"<input type=\"hidden\" name=\"action\" value=\"quit\" />"+"<input type=\"hidden\" name=\"csrftoken\" value=\""+yellow.toolbox.encodeHtml(this.getCookie("csrftoken"))+"\" />"+"<p><label for=\"yellow-pane-quit-name\">"+this.getText("SignupName")+"</label><br /><input class=\"yellow-form-control\" name=\"name\" id=\"yellow-pane-quit-name\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("name"))+"\" /></p>"+"<p><input class=\"yellow-btn\" type=\"submit\" value=\""+this.getText("DeleteButton")+"\" /></p>"+"</div>"+"</form>";break;case "yellow-pane-account":elementDiv.innerHTML="<form method=\"post\">"+"<a href=\"#\" class=\"yellow-close\" data-action=\"close\"><i class=\"yellow-icon yellow-icon-close\"></i></a>"+"<div class=\"yellow-title\"><h1 id=\"yellow-pane-account-title\">"+this.getText("AccountTitle")+"</h1></div>"+"<div class=\"yellow-status\"><p id=\"yellow-pane-account-status\" class=\""+paneStatus+"\">"+this.getText("AccountStatus","",paneStatus)+"</p></div>"+"<div class=\"yellow-settings\">"+"<div id=\"yellow-pane-account-settings-actions\" class=\"yellow-settings-left\"><p>"+this.getRawDataSettingsActions(paneAction)+"</p></div>"+"<div id=\"yellow-pane-account-settings-separator\" class=\"yellow-settings-left yellow-settings-separator\"> </div>"+"<div id=\"yellow-pane-account-settings-fields\" class=\"yellow-settings-right yellow-fields\">"+"<input type=\"hidden\" name=\"action\" value=\"account\" />"+"<input type=\"hidden\" name=\"csrftoken\" value=\""+yellow.toolbox.encodeHtml(this.getCookie("csrftoken"))+"\" />"+"<p><label for=\"yellow-pane-account-name\">"+this.getText("SignupName")+"</label><br /><input class=\"yellow-form-control\" name=\"name\" id=\"yellow-pane-account-name\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("name"))+"\" /></p>"+"<p><label for=\"yellow-pane-account-email\">"+this.getText("SignupEmail")+"</label><br /><input class=\"yellow-form-control\" name=\"email\" id=\"yellow-pane-account-email\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("email"))+"\" /></p>"+"<p><label for=\"yellow-pane-account-password\">"+this.getText("SignupPassword")+"</label><br /><input class=\"yellow-form-control\" type=\"password\" name=\"password\" id=\"yellow-pane-account-password\" maxlength=\"64\" value=\"\" /></p>"+"<p>"+this.getRawDataLanguages(paneId)+"</p>"+"<p>"+this.getText("AccountInformation")+" <a href=\"#\" data-action=\"quit\">"+this.getText("AccountMore")+"</a></p>"+"<p><input class=\"yellow-btn\" type=\"submit\" value=\""+this.getText("ChangeButton")+"\" /></p>"+"</div>"+"<div class=\"yellow-settings yellow-settings-banner\"></div>"+"</div>"+"</form>";break;case "yellow-pane-system":elementDiv.innerHTML="<form method=\"post\">"+"<a href=\"#\" class=\"yellow-close\" data-action=\"close\"><i class=\"yellow-icon yellow-icon-close\"></i></a>"+"<div class=\"yellow-title\"><h1 id=\"yellow-pane-system-title\">"+this.getText("SystemTitle")+"</h1></div>"+"<div class=\"yellow-status\"><p id=\"yellow-pane-system-status\" class=\""+paneStatus+"\">"+this.getText("SystemStatus","",paneStatus)+"</p></div>"+"<div class=\"yellow-settings\">"+"<div id=\"yellow-pane-system-settings-actions\" class=\"yellow-settings-left\"><p>"+this.getRawDataSettingsActions(paneAction)+"</p></div>"+"<div id=\"yellow-pane-system-settings-separator\" class=\"yellow-settings-left yellow-settings-separator\"> </div>"+"<div id=\"yellow-pane-system-settings-fields\" class=\"yellow-settings-right yellow-fields\">"+"<input type=\"hidden\" name=\"action\" value=\"system\" />"+"<input type=\"hidden\" name=\"csrftoken\" value=\""+yellow.toolbox.encodeHtml(this.getCookie("csrftoken"))+"\" />"+"<p><label for=\"yellow-pane-system-sitename\">"+this.getText("SystemSitename")+"</label><br /><input class=\"yellow-form-control\" name=\"sitename\" id=\"yellow-pane-system-sitename\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("sitename"))+"\" /></p>"+"<p><label for=\"yellow-pane-system-author\">"+this.getText("SystemAuthor")+"</label><br /><input class=\"yellow-form-control\" name=\"author\" id=\"yellow-pane-system-author\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("author"))+"\" /></p>"+"<p><label for=\"yellow-pane-system-email\">"+this.getText("SystemEmail")+"</label><br /><input class=\"yellow-form-control\" name=\"email\" id=\"yellow-pane-system-email\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("email"))+"\" /></p>"+"<p>"+this.getText("SystemInformation")+"</p>"+"<p><input class=\"yellow-btn\" type=\"submit\" value=\""+this.getText("ChangeButton")+"\" /></p>"+"</div>"+"<div class=\"yellow-settings yellow-settings-banner\"></div>"+"</div>"+"</form>";break;case "yellow-pane-update":elementDiv.innerHTML="<form method=\"post\">"+"<a href=\"#\" class=\"yellow-close\" data-action=\"close\"><i class=\"yellow-icon yellow-icon-close\"></i></a>"+"<div class=\"yellow-title\"><h1 id=\"yellow-pane-update-title\">"+yellow.toolbox.encodeHtml(yellow.system.coreVersion)+"</h1></div>"+"<div class=\"yellow-status\"><p id=\"yellow-pane-update-status\" class=\""+paneStatus+"\">"+this.getText("UpdateStatus","",paneStatus)+"</p></div>"+"<div class=\"yellow-output\" id=\"yellow-pane-update-output\">"+yellow.page.rawDataOutput+"</div>"+"<div class=\"yellow-buttons\" id=\"yellow-pane-update-buttons\">"+"<p><a href=\"#\" class=\"yellow-btn\" data-action=\"close\">"+this.getText("OkButton")+"</a></p>"+"</div>"+"</form>";break;case "yellow-pane-create":elementDiv.innerHTML="<form method=\"post\">"+"<div id=\"yellow-pane-create-toolbar\">"+"<div class=\"yellow-toolbar yellow-toolbar-left\"><h1 id=\"yellow-pane-create-toolbar-title\">"+this.getText("Create")+"</h1></div>"+"<ul id=\"yellow-pane-create-toolbar-buttons\" class=\"yellow-toolbar yellow-toolbar-left\">"+this.getRawDataButtons(paneId)+"</ul>"+"<ul id=\"yellow-pane-create-toolbar-main\" class=\"yellow-toolbar yellow-toolbar-right\">"+"<li><a href=\"#\" id=\"yellow-pane-create-cancel\" class=\"yellow-toolbar-btn\" data-action=\"close\">"+this.getText("CancelButton")+"</a></li>"+"<li><a href=\"#\" id=\"yellow-pane-create-submit\" class=\"yellow-toolbar-btn\" data-action=\"submit\">"+this.getText("CreateButton")+"</a></li>"+"</ul>"+"<ul class=\"yellow-toolbar yellow-toolbar-banner\"></ul>"+"</div>"+"<textarea id=\"yellow-pane-create-text\" class=\"yellow-edit-text\"></textarea>"+"<div id=\"yellow-pane-create-preview\" class=\"yellow-edit-preview\"></div>"+"</form>";break;case "yellow-pane-edit":elementDiv.innerHTML="<form method=\"post\">"+"<div id=\"yellow-pane-edit-toolbar\">"+"<div class=\"yellow-toolbar yellow-toolbar-left\"><h1 id=\"yellow-pane-edit-toolbar-title\">"+this.getText("Edit")+"</h1></div>"+"<ul id=\"yellow-pane-edit-toolbar-buttons\" class=\"yellow-toolbar yellow-toolbar-left\">"+this.getRawDataButtons(paneId)+"</ul>"+"<ul id=\"yellow-pane-edit-toolbar-main\" class=\"yellow-toolbar yellow-toolbar-right\">"+"<li><a href=\"#\" id=\"yellow-pane-edit-cancel\" class=\"yellow-toolbar-btn\" data-action=\"close\">"+this.getText("CancelButton")+"</a></li>"+"<li><a href=\"#\" id=\"yellow-pane-edit-submit\" class=\"yellow-toolbar-btn\" data-action=\"submit\">"+this.getText("EditButton")+"</a></li>"+"</ul>"+"<ul class=\"yellow-toolbar yellow-toolbar-banner\"></ul>"+"</div>"+"<textarea id=\"yellow-pane-edit-text\" class=\"yellow-edit-text\"></textarea>"+"<div id=\"yellow-pane-edit-preview\" class=\"yellow-edit-preview\"></div>"+"</form>";break;case "yellow-pane-delete":elementDiv.innerHTML="<form method=\"post\">"+"<div id=\"yellow-pane-delete-toolbar\">"+"<div class=\"yellow-toolbar yellow-toolbar-left\"><h1 id=\"yellow-pane-delete-toolbar-title\">"+this.getText("Delete")+"</h1></div>"+"<ul id=\"yellow-pane-delete-toolbar-buttons\" class=\"yellow-toolbar yellow-toolbar-left\">"+this.getRawDataButtons(paneId)+"</ul>"+"<ul id=\"yellow-pane-delete-toolbar-main\" class=\"yellow-toolbar yellow-toolbar-right\">"+"<li><a href=\"#\" id=\"yellow-pane-delete-cancel\" class=\"yellow-toolbar-btn\" data-action=\"close\">"+this.getText("CancelButton")+"</a></li>"+"<li><a href=\"#\" id=\"yellow-pane-delete-submit\" class=\"yellow-toolbar-btn\" data-action=\"submit\">"+this.getText("DeleteButton")+"</a></li>"+"</ul>"+"<ul class=\"yellow-toolbar yellow-toolbar-banner\"></ul>"+"</div>"+"<textarea id=\"yellow-pane-delete-text\" class=\"yellow-edit-text\"></textarea>"+"<div id=\"yellow-pane-delete-preview\" class=\"yellow-edit-preview\"></div>"+"</form>";break;case "yellow-pane-menu":elementDiv.innerHTML="<ul class=\"yellow-dropdown\">"+"<li><span>"+yellow.toolbox.encodeHtml(yellow.system.userEmail)+"</span></li>"+"<li><a href=\"#\" data-action=\"settings\">"+this.getText("MenuSettings")+"</a></li>"+"<li><a href=\"#\" data-action=\"help\">"+this.getText("MenuHelp")+"</a></li>"+"<li><a href=\"#\" data-action=\"submit\" data-args=\"action:logout\">"+this.getText("MenuLogout")+"</a></li>"+"</ul>";break;case "yellow-pane-information":elementDiv.innerHTML="<form method=\"post\">"+"<a href=\"#\" class=\"yellow-close\" data-action=\"close\"><i class=\"yellow-icon yellow-icon-close\"></i></a>"+"<div class=\"yellow-title\"><h1 id=\"yellow-pane-information-title\">"+this.getText(paneAction+"Title")+"</h1></div>"+"<div class=\"yellow-status\"><p id=\"yellow-pane-information-status\" class=\""+paneStatus+"\">"+this.getText(paneAction+"Status","",paneStatus)+"</p></div>"+"<div class=\"yellow-buttons\" id=\"yellow-pane-information-buttons\">"+"<p><a href=\"#\" class=\"yellow-btn\" data-action=\"close\">"+this.getText("OkButton")+"</a></p>"+"</div>"+"</form>";break;default:elementDiv.innerHTML="<a href=\"#\" class=\"yellow-close\" data-action=\"close\"><i class=\"yellow-icon yellow-icon-close\"></i></a>"+"<div class=\"yellow-error\">Pane '"+paneId+"' was not found. Oh no...</div>"}
+elementPane.appendChild(elementDiv);yellow.toolbox.insertAfter(elementPane,document.getElementsByTagName("body")[0].firstChild);this.bindActions(elementPane)},updatePane:function(paneId,paneAction,paneStatus,paneInit){switch(paneId){case "yellow-pane-login":if(paneInit&&yellow.system.editLoginRestriction){yellow.toolbox.setVisible(document.getElementById("yellow-pane-login-signup"),!1)}
+break;case "yellow-pane-quit":if(paneStatus=="none"){document.getElementById("yellow-pane-quit-status").innerHTML=this.getText("QuitStatusNone");document.getElementById("yellow-pane-quit-name").value=""}
+break;case "yellow-pane-account":if(paneInit&&yellow.system.editSettingsActions=="none"){document.getElementById("yellow-pane-account-title").innerHTML=this.getText("MenuSettings")}
+if(paneStatus=="none"){document.getElementById("yellow-pane-account-status").innerHTML=this.getText("AccountStatusNone");document.getElementById("yellow-pane-account-name").value=yellow.system.userName;document.getElementById("yellow-pane-account-email").value=yellow.system.userEmail;document.getElementById("yellow-pane-account-password").value="";document.getElementById("yellow-pane-account-"+yellow.system.userLanguage).checked=!0}
+break;case "yellow-pane-system":if(paneStatus=="none"){document.getElementById("yellow-pane-system-status").innerHTML=this.getText("SystemStatusNone");document.getElementById("yellow-pane-system-sitename").value=yellow.system.sitename;document.getElementById("yellow-pane-system-author").value=yellow.system.author;document.getElementById("yellow-pane-system-email").value=yellow.system.email}
+break;case "yellow-pane-update":if(paneStatus=="none"){document.getElementById("yellow-pane-update-status").innerHTML=this.getText("UpdateStatusCheck");document.getElementById("yellow-pane-update-output").innerHTML="";setTimeout("yellow.action('submit', '', 'action:update/option:check/');",500)}
+if(paneStatus=="updates"){document.getElementById("yellow-pane-update-status").innerHTML="<a href=\"#\" data-action=\"submit\" data-args=\"action:update\">"+this.getText("UpdateStatusUpdates")+"</a>"}
+break;case "yellow-pane-create":case "yellow-pane-edit":case "yellow-pane-delete":document.getElementById(paneId+"-text").focus();if(paneInit){yellow.toolbox.setVisible(document.getElementById(paneId+"-text"),!0);yellow.toolbox.setVisible(document.getElementById(paneId+"-preview"),!1);document.getElementById(paneId+"-toolbar-title").innerHTML=yellow.toolbox.encodeHtml(yellow.page.title);document.getElementById(paneId+"-text").value=paneId=="yellow-pane-create"?yellow.page.rawDataNew:yellow.page.rawDataEdit;var matches=document.getElementById(paneId+"-text").value.match(/^(\xEF\xBB\xBF)?\-\-\-[\r\n]+/);var position=document.getElementById(paneId+"-text").value.indexOf("\n",matches?matches[0].length:0);document.getElementById(paneId+"-text").setSelectionRange(position,position);if(yellow.system.editToolbarButtons!="none"){yellow.toolbox.setVisible(document.getElementById(paneId+"-toolbar-title"),!1);this.updateToolbar(0,"yellow-toolbar-checked")}
+if(!this.isUserAccess(paneAction,yellow.page.location)||(yellow.page.rawDataReadonly&&paneId!="yellow-pane-create")){yellow.toolbox.setVisible(document.getElementById(paneId+"-submit"),!1);document.getElementById(paneId+"-text").readOnly=!0}}
+if(!document.getElementById(paneId+"-text").readOnly){paneAction=this.paneAction=this.getPaneAction(paneId);var className="yellow-toolbar-btn yellow-toolbar-btn-"+paneAction;if(document.getElementById(paneId+"-submit").className!=className){document.getElementById(paneId+"-submit").className=className;document.getElementById(paneId+"-submit").innerHTML=this.getText(paneAction+"Button");document.getElementById(paneId+"-submit").setAttribute("data-args","action:"+paneAction);this.resizePane(paneId,paneAction,paneStatus)}}
+break}
+this.bindActions(document.getElementById(paneId))},resizePane:function(paneId,paneAction,paneStatus){var elementBar=document.getElementById("yellow-bar-content");var paneLeft=yellow.toolbox.getOuterLeft(elementBar);var paneTop=yellow.toolbox.getOuterTop(elementBar)+yellow.toolbox.getOuterHeight(elementBar)+10;var paneWidth=yellow.toolbox.getOuterWidth(elementBar);var paneHeight=yellow.toolbox.getWindowHeight()-paneTop-Math.min(yellow.toolbox.getOuterHeight(elementBar)+10,(yellow.toolbox.getWindowWidth()-yellow.toolbox.getOuterWidth(elementBar))/2);switch(paneId){case "yellow-pane-account":case "yellow-pane-system":yellow.toolbox.setOuterLeft(document.getElementById(paneId),paneLeft);yellow.toolbox.setOuterTop(document.getElementById(paneId),paneTop);yellow.toolbox.setOuterWidth(document.getElementById(paneId),paneWidth);var elementWidth=yellow.toolbox.getWidth(document.getElementById(paneId));var actionsWidth=yellow.toolbox.getOuterWidth(document.getElementById(paneId+"-settings-actions"));var fieldsWidth=yellow.toolbox.getOuterWidth(document.getElementById(paneId+"-settings-fields"));var separatorWidth=Math.max(10,((elementWidth-fieldsWidth)/2)-actionsWidth);yellow.toolbox.setOuterWidth(document.getElementById(paneId+"-settings-separator"),separatorWidth);break;case "yellow-pane-create":case "yellow-pane-edit":case "yellow-pane-delete":yellow.toolbox.setOuterLeft(document.getElementById(paneId),paneLeft);yellow.toolbox.setOuterTop(document.getElementById(paneId),paneTop);yellow.toolbox.setOuterHeight(document.getElementById(paneId),paneHeight);yellow.toolbox.setOuterWidth(document.getElementById(paneId),paneWidth);var elementWidth=yellow.toolbox.getWidth(document.getElementById(paneId));yellow.toolbox.setOuterWidth(document.getElementById(paneId+"-text"),elementWidth);yellow.toolbox.setOuterWidth(document.getElementById(paneId+"-preview"),elementWidth);var buttonsWidth=0;var buttonsWidthMax=yellow.toolbox.getOuterWidth(document.getElementById(paneId+"-toolbar"))-yellow.toolbox.getOuterWidth(document.getElementById(paneId+"-toolbar-main"))-1;var element=document.getElementById(paneId+"-toolbar-buttons").firstChild;for(;element;element=element.nextSibling){element.removeAttribute("style");buttonsWidth+=yellow.toolbox.getOuterWidth(element);if(buttonsWidth>buttonsWidthMax)yellow.toolbox.setVisible(element,!1)}
+yellow.toolbox.setOuterWidth(document.getElementById(paneId+"-toolbar-title"),buttonsWidthMax);var height1=yellow.toolbox.getHeight(document.getElementById(paneId));var height2=yellow.toolbox.getOuterHeight(document.getElementById(paneId+"-toolbar"));yellow.toolbox.setOuterHeight(document.getElementById(paneId+"-text"),height1-height2);yellow.toolbox.setOuterHeight(document.getElementById(paneId+"-preview"),height1-height2);var elementLink=document.getElementById(paneId+"-bar");var position=yellow.toolbox.getOuterLeft(elementLink)+yellow.toolbox.getOuterWidth(elementLink)/2;position-=yellow.toolbox.getOuterLeft(document.getElementById(paneId))+1;yellow.toolbox.setOuterLeft(document.getElementById(paneId+"-arrow"),position);break;case "yellow-pane-menu":yellow.toolbox.setOuterLeft(document.getElementById("yellow-pane-menu"),paneLeft+paneWidth-yellow.toolbox.getOuterWidth(document.getElementById("yellow-pane-menu")));yellow.toolbox.setOuterTop(document.getElementById("yellow-pane-menu"),paneTop);var elementLink=document.getElementById("yellow-pane-menu-bar");var position=yellow.toolbox.getOuterLeft(elementLink)+yellow.toolbox.getOuterWidth(elementLink)/2;position-=yellow.toolbox.getOuterLeft(document.getElementById("yellow-pane-menu"));yellow.toolbox.setOuterLeft(document.getElementById("yellow-pane-menu-arrow"),position);break;default:yellow.toolbox.setOuterLeft(document.getElementById(paneId),paneLeft);yellow.toolbox.setOuterTop(document.getElementById(paneId),paneTop);yellow.toolbox.setOuterWidth(document.getElementById(paneId),paneWidth);break}},showPane:function(paneId,paneAction,paneStatus,paneModal){if(this.paneId!=paneId||this.paneAction!=paneAction){this.hidePane(this.paneId);var paneInit=!document.getElementById(paneId);if(!document.getElementById(paneId))this.createPane(paneId,paneAction,paneStatus);var element=document.getElementById(paneId);if(!yellow.toolbox.isVisible(element)){if(yellow.system.debug)console.log("yellow.edit.showPane id:"+paneId);yellow.toolbox.setVisible(element,!0);if(paneModal){yellow.toolbox.addClass(document.body,"yellow-body-modal-open");yellow.toolbox.addValue("meta[name=viewport]","content",", maximum-scale=1, user-scalable=0")}
+this.paneId=paneId;this.paneAction=paneAction;this.paneStatus=paneStatus;this.updatePane(paneId,paneAction,paneStatus,paneInit);this.resizePane(paneId,paneAction,paneStatus);this.updateBar(paneId,"yellow-bar-selected")}}else{this.hidePane(this.paneId,!0)}},hidePane:function(paneId,fadeout){var element=document.getElementById(paneId);if(yellow.toolbox.isVisible(element)){if(yellow.system.debug)console.log("yellow.edit.hidePane id:"+paneId);yellow.toolbox.removeClass(document.body,"yellow-body-modal-open");yellow.toolbox.removeValue("meta[name=viewport]","content",", maximum-scale=1, user-scalable=0");yellow.toolbox.setVisible(element,!1,fadeout);this.paneId=0;this.paneAction=0;this.paneStatus=0;this.updateBar(0,"yellow-bar-selected")}
+this.hidePopup(this.popupId)},processAction:function(action,status,args){action=action?action:"none";status=status?status:"none";args=args?args:"none";if(action!="none"){if(yellow.system.debug)console.log("yellow.edit.processAction action:"+action+" status:"+status);var paneId=(status!="next"&&status!="done")?"yellow-pane-"+action:"yellow-pane-information";switch(action){case "login":this.showPane(paneId,action,status);break;case "signup":this.showPane(paneId,action,status);break;case "confirm":this.showPane(paneId,action,status);break;case "approve":this.showPane(paneId,action,status);break;case "forgot":this.showPane(paneId,action,status);break;case "recover":this.showPane(paneId,action,status);break;case "reactivate":this.showPane(paneId,action,status);break;case "verify":this.showPane(paneId,action,status);break;case "change":this.showPane(paneId,action,status);break;case "quit":this.showPane(paneId,action,status);break;case "remove":this.showPane(paneId,action,status);break;case "account":this.showPane(paneId,action,status);break;case "system":this.showPane(paneId,action,status);break;case "update":this.showPane(paneId,action,status);break;case "create":this.showPane(paneId,action,status,!0);break;case "edit":this.showPane(paneId,action,status,!0);break;case "delete":this.showPane(paneId,action,status,!0);break;case "menu":this.showPane(paneId,action,status);break;case "close":this.hidePane(this.paneId);break;case "toolbar":this.processToolbar(status,args);break;case "settings":this.processSettings(args);break;case "submit":this.processSubmit(args);break;case "help":this.processHelp();break}}},processToolbar:function(status,args){if(yellow.system.debug)console.log("yellow.edit.processToolbar status:"+status);var elementText=document.getElementById(this.paneId+"-text");var elementPreview=document.getElementById(this.paneId+"-preview");if(!yellow.toolbox.isVisible(elementPreview)&&!elementText.readOnly){switch(status){case "h1":yellow.editor.setMarkdown(elementText,"# ","insert-multiline-block",!0);break;case "h2":yellow.editor.setMarkdown(elementText,"## ","insert-multiline-block",!0);break;case "h3":yellow.editor.setMarkdown(elementText,"### ","insert-multiline-block",!0);break;case "paragraph":yellow.editor.setMarkdown(elementText,"","remove-multiline-block");yellow.editor.setMarkdown(elementText,"","remove-fenced-block");break;case "notice":yellow.editor.setMarkdown(elementText,"! ","insert-multiline-block",!0);break;case "quote":yellow.editor.setMarkdown(elementText,"> ","insert-multiline-block",!0);break;case "pre":yellow.editor.setMarkdown(elementText,"```\n","insert-fenced-block",!0);break;case "bold":yellow.editor.setMarkdown(elementText,"**","insert-inline",!0);break;case "italic":yellow.editor.setMarkdown(elementText,"*","insert-inline",!0);break;case "strikethrough":yellow.editor.setMarkdown(elementText,"~~","insert-inline",!0);break;case "code":yellow.editor.setMarkdown(elementText,"`","insert-autodetect",!0);break;case "ul":yellow.editor.setMarkdown(elementText,"* ","insert-multiline-block",!0);break;case "ol":yellow.editor.setMarkdown(elementText,"1. ","insert-multiline-block",!0);break;case "tl":yellow.editor.setMarkdown(elementText,"- [ ] ","insert-multiline-block",!0);break;case "link":yellow.editor.setMarkdown(elementText,"[link](url)","insert",!1,yellow.editor.getMarkdownLink);break;case "text":yellow.editor.setMarkdown(elementText,args,"insert");break;case "status":yellow.editor.setMetaData(elementText,"status",!0);break;case "file":this.showFileDialog();break;case "undo":yellow.editor.undo();break;case "redo":yellow.editor.redo();break}}
+if(status=="preview"&&!elementText.readOnly)this.showPreview(elementText,elementPreview);if(status=="save"&&!elementText.readOnly&&this.paneAction!="delete")this.processSubmit("action:"+this.paneAction);if(status=="help")window.open(this.getText("YellowHelpUrl"),"_blank");if(this.isExpandable(status)){this.showPopup("yellow-popup-"+status,status)}else{this.hidePopup(this.popupId)}},updateToolbar:function(status,name){if(status){var element=document.getElementById(this.paneId+"-toolbar-"+status);if(element){if(name.indexOf("selected")!=-1)element.setAttribute("aria-expanded","true");yellow.toolbox.addClass(element,name)}}else{var elements=document.getElementsByClassName(name);for(var i=0,l=elements.length;i<l;i++){if(name.indexOf("selected")!=-1)elements[i].setAttribute("aria-expanded","false");yellow.toolbox.removeClass(elements[i],name)}}},processShortcut:function(e){var shortcut=yellow.toolbox.getEventShortcut(e);if(shortcut){var tokens=yellow.system.editKeyboardShortcuts.split(/\s*,\s*/);for(var i=0;i<tokens.length;i++){var pair=tokens[i].split(" ");if(shortcut==pair[0]||shortcut.replace("meta+","ctrl+")==pair[0]){if(yellow.system.debug)console.log("yellow.edit.processShortcut shortcut:"+shortcut);e.stopPropagation();e.preventDefault();this.processToolbar(pair[1])}}}},processSettings:function(args){var action=args!="none"?args:"account";if(action!=this.paneAction&&action!="settings")this.processAction(action)},processSubmit:function(args){var settings={"action":"none","csrftoken":this.getCookie("csrftoken")};var tokens=args.split("/");for(var i=0;i<tokens.length;i++){var pair=tokens[i].split(/[:=]/);if(!pair[0]||!pair[1])continue;settings[pair[0]]=pair[1]}
+if(settings.action=="create"||settings.action=="edit"||settings.action=="delete"){settings.rawdatasource=yellow.page.rawDataSource;settings.rawdataedit=document.getElementById(this.paneId+"-text").value;settings.rawdataendofline=yellow.page.rawDataEndOfLine}
+if(settings.action!="none")yellow.toolbox.submitForm(settings)},processHelp:function(){this.hidePane(this.paneId);window.open(this.getText("YellowHelpUrl"),"_self")},createPopup:function(popupId){if(yellow.system.debug)console.log("yellow.edit.createPopup id:"+popupId);var elementPopup=document.createElement("div");elementPopup.className="yellow-popup";elementPopup.setAttribute("id",popupId);elementPopup.style.display="none";var elementDiv=document.createElement("div");elementDiv.setAttribute("id",popupId+"-content");switch(popupId){case "yellow-popup-format":elementDiv.innerHTML="<ul class=\"yellow-dropdown yellow-dropdown-menu\">"+"<li><a href=\"#\" id=\"yellow-popup-format-h1\" data-action=\"toolbar\" data-status=\"h1\">"+this.getText("ToolbarH1")+"</a></li>"+"<li><a href=\"#\" id=\"yellow-popup-format-h2\" data-action=\"toolbar\" data-status=\"h2\">"+this.getText("ToolbarH2")+"</a></li>"+"<li><a href=\"#\" id=\"yellow-popup-format-h3\" data-action=\"toolbar\" data-status=\"h3\">"+this.getText("ToolbarH3")+"</a></li>"+"<li><a href=\"#\" id=\"yellow-popup-format-paragraph\" data-action=\"toolbar\" data-status=\"paragraph\">"+this.getText("ToolbarParagraph")+"</a></li>"+"<li><a href=\"#\" id=\"yellow-popup-format-pre\" data-action=\"toolbar\" data-status=\"pre\">"+this.getText("ToolbarPre")+"</a></li>"+"<li><a href=\"#\" id=\"yellow-popup-format-notice\" data-action=\"toolbar\" data-status=\"notice\">"+this.getText("ToolbarNotice")+"</a></li>"+"<li><a href=\"#\" id=\"yellow-popup-format-quote\" data-action=\"toolbar\" data-status=\"quote\">"+this.getText("ToolbarQuote")+"</a></li>"+"</ul>";break;case "yellow-popup-heading":elementDiv.innerHTML="<ul class=\"yellow-dropdown yellow-dropdown-menu\">"+"<li><a href=\"#\" id=\"yellow-popup-heading-h1\" data-action=\"toolbar\" data-status=\"h1\">"+this.getText("ToolbarH1")+"</a></li>"+"<li><a href=\"#\" id=\"yellow-popup-heading-h2\" data-action=\"toolbar\" data-status=\"h2\">"+this.getText("ToolbarH2")+"</a></li>"+"<li><a href=\"#\" id=\"yellow-popup-heading-h3\" data-action=\"toolbar\" data-status=\"h3\">"+this.getText("ToolbarH3")+"</a></li>"+"</ul>";break;case "yellow-popup-list":elementDiv.innerHTML="<ul class=\"yellow-dropdown yellow-dropdown-menu\">"+"<li><a href=\"#\" id=\"yellow-popup-list-ul\" data-action=\"toolbar\" data-status=\"ul\">"+this.getText("ToolbarUl")+"</a></li>"+"<li><a href=\"#\" id=\"yellow-popup-list-ol\" data-action=\"toolbar\" data-status=\"ol\">"+this.getText("ToolbarOl")+"</a></li>"+"<li><a href=\"#\" id=\"yellow-popup-list-tl\" data-action=\"toolbar\" data-status=\"tl\">"+this.getText("ToolbarTl")+"</a></li>"+"</ul>";break;case "yellow-popup-emojiawesome":var rawDataEmojis="";if(yellow.system.emojiawesomeToolbarButtons&&yellow.system.emojiawesomeToolbarButtons!="none"){var tokens=yellow.system.emojiawesomeToolbarButtons.split(" ");for(var i=0;i<tokens.length;i++){var token=tokens[i].replace(/[\:]/g,"");var className=token.replace("+1","plus1").replace("-1","minus1").replace(/_/g,"-");rawDataEmojis+="<li><a href=\"#\" id=\"yellow-popup-list-"+yellow.toolbox.encodeHtml(token)+"\" data-action=\"toolbar\" data-status=\"text\" data-args=\":"+yellow.toolbox.encodeHtml(token)+":\"><i class=\"ea ea-"+yellow.toolbox.encodeHtml(className)+"\"></i></a></li>"}}
+elementDiv.innerHTML="<ul class=\"yellow-dropdown yellow-dropdown-menu\">"+rawDataEmojis+"</ul>";break;case "yellow-popup-fontawesome":var rawDataIcons="";if(yellow.system.fontawesomeToolbarButtons&&yellow.system.fontawesomeToolbarButtons!="none"){var tokens=yellow.system.fontawesomeToolbarButtons.split(" ");for(var i=0;i<tokens.length;i++){var token=tokens[i].replace(/[\:]/g,"");rawDataIcons+="<li><a href=\"#\" id=\"yellow-popup-list-"+yellow.toolbox.encodeHtml(token)+"\" data-action=\"toolbar\" data-status=\"text\" data-args=\":"+yellow.toolbox.encodeHtml(token)+":\"><i class=\"fa "+yellow.toolbox.encodeHtml(token)+"\"></i></a></li>"}}
+elementDiv.innerHTML="<ul class=\"yellow-dropdown yellow-dropdown-menu\">"+rawDataIcons+"</ul>";break}
+elementPopup.appendChild(elementDiv);yellow.toolbox.insertAfter(elementPopup,document.getElementsByTagName("body")[0].firstChild);this.bindActions(elementPopup)},showPopup:function(popupId,status){if(this.popupId!=popupId){this.hidePopup(this.popupId);if(!document.getElementById(popupId))this.createPopup(popupId);var element=document.getElementById(popupId);if(yellow.system.debug)console.log("yellow.edit.showPopup id:"+popupId);yellow.toolbox.setVisible(element,!0);this.popupId=popupId;this.updateToolbar(status,"yellow-toolbar-selected");var elementParent=document.getElementById(this.paneId+"-toolbar-"+status);var popupLeft=yellow.toolbox.getOuterLeft(elementParent);var popupTop=yellow.toolbox.getOuterTop(elementParent)+yellow.toolbox.getOuterHeight(elementParent)-1;yellow.toolbox.setOuterLeft(document.getElementById(popupId),popupLeft);yellow.toolbox.setOuterTop(document.getElementById(popupId),popupTop)}else{this.hidePopup(this.popupId,!0)}},hidePopup:function(popupId,fadeout){var element=document.getElementById(popupId);if(yellow.toolbox.isVisible(element)){if(yellow.system.debug)console.log("yellow.edit.hidePopup id:"+popupId);yellow.toolbox.setVisible(element,!1,fadeout);this.popupId=0;this.updateToolbar(0,"yellow-toolbar-selected")}},showPreview:function(elementText,elementPreview){if(!yellow.toolbox.isVisible(elementPreview)){var thisObject=this;var formData=new FormData();formData.append("action","preview");formData.append("csrftoken",this.getCookie("csrftoken"));formData.append("rawdataedit",elementText.value);formData.append("rawdataendofline",yellow.page.rawDataEndOfLine);var request=new XMLHttpRequest();request.open("POST",window.location.pathname,!0);request.onload=function(){if(this.status==200)thisObject.showPreviewDone.call(thisObject,elementText,elementPreview,this.responseText)};request.send(formData)}else{this.showPreviewDone(elementText,elementPreview,"")}},showPreviewDone:function(elementText,elementPreview,responseText){var showPreview=responseText.length!=0;yellow.toolbox.setVisible(elementText,!showPreview);yellow.toolbox.setVisible(elementPreview,showPreview);if(showPreview){this.updateToolbar("preview","yellow-toolbar-checked");elementPreview.innerHTML=responseText;dispatchEvent(new Event("load"))}else{this.updateToolbar(0,"yellow-toolbar-checked");elementText.focus()}},showFileDialog:function(){var element=document.createElement("input");element.setAttribute("id","yellow-file-dialog");element.setAttribute("type","file");element.setAttribute("accept",yellow.system.editUploadExtensions);element.setAttribute("multiple","multiple");yellow.toolbox.addEvent(element,"change",yellow.onDrop);element.click()},uploadFile:function(elementText,file){if(this.isUserAccess("upload",yellow.page.location)){var extension=(file.name.lastIndexOf(".")!=-1?file.name.substring(file.name.lastIndexOf("."),file.name.length):"").toLowerCase();var extensions=yellow.system.editUploadExtensions.split(/\s*,\s*/);if(file.size<=yellow.system.coreFileSizeMax&&extensions.indexOf(extension)!=-1){var text=this.getText("UploadProgress")+"\u200b";yellow.editor.setMarkdown(elementText,text,"insert");var thisObject=this;var formData=new FormData();formData.append("action","upload");formData.append("csrftoken",this.getCookie("csrftoken"));formData.append("file",file);var request=new XMLHttpRequest();request.open("POST",window.location.pathname,!0);request.onload=function(){if(this.status==200){thisObject.uploadFileDone.call(thisObject,elementText,this.responseText)}else{thisObject.uploadFileError.call(thisObject,elementText,this.responseText)}};request.send(formData)}else{var textError=extensions.indexOf(extension)!=-1?"file too big!":"file format not supported!";var textNew="[Can't upload file '"+file.name+"', "+textError+"]";yellow.editor.setMarkdown(elementText,textNew,"insert")}}else{var textNew="[Can't upload file '"+file.name+"', access is restricted!]";yellow.editor.setMarkdown(elementText,textNew,"insert")}},uploadFileDone:function(elementText,responseText){var result=JSON.parse(responseText);if(result){var textOld=this.getText("UploadProgress")+"\u200b";var textNew;if(result.location.substring(0,yellow.system.coreImageLocation.length)==yellow.system.coreImageLocation){textNew="[image "+result.location.substring(yellow.system.coreImageLocation.length)+"]"}else{textNew="[link]("+result.location+")"}
+yellow.editor.replace(elementText,textOld,textNew)}},uploadFileError:function(elementText,responseText){var result=JSON.parse(responseText);if(result){var textOld=this.getText("UploadProgress")+"\u200b";var textNew="["+result.error+"]";yellow.editor.replace(elementText,textOld,textNew)}},bindActions:function(element){var elements=element.getElementsByTagName("a");for(var i=0,l=elements.length;i<l;i++){if(elements[i].getAttribute("href")&&elements[i].getAttribute("href").substring(0,13)=="#data-action-"){elements[i].setAttribute("data-action",elements[i].getAttribute("href").substring(13))}
+if(elements[i].getAttribute("data-action"))elements[i].onclick=yellow.onClickAction;if(elements[i].getAttribute("data-action")=="toolbar")elements[i].onmousedown=function(e){e.preventDefault()}}},getPaneAction:function(paneId){var panePrefix="yellow-pane-";var paneAction=paneId.substring(panePrefix.length);if(paneAction=="edit"){if(document.getElementById("yellow-pane-edit-text").value.length==0)paneAction="delete";if(yellow.page.statusCode==434)paneAction="create"}
+return paneAction},getRawDataPaneAction:function(paneAction,text,important){var rawDataAction="";if(this.isUserAccess(paneAction)||important){if(!text)text=this.getText(paneAction);rawDataAction="<a href=\"#\" id=\"yellow-pane-"+paneAction+"-bar\" data-action=\""+paneAction+"\" aria-expanded=\"false\">"+yellow.toolbox.encodeHtml(text)+"</a>"}
+return rawDataAction},getRawDataSettingsActions:function(paneAction){var rawDataActions="";if(yellow.system.editSettingsActions&&yellow.system.editSettingsActions!="none"){var tokens=yellow.system.editSettingsActions.split(/\s*,\s*/);for(var i=0;i<tokens.length;i++){var token=tokens[i];rawDataActions+="<a href=\"#\""+(token==paneAction?"class=\"active\"":"")+" data-action=\"settings\" data-args=\""+yellow.toolbox.encodeHtml(token)+"\">"+this.getText(token+"Title")+"</a><br />"}}
+return rawDataActions},getRawDataLanguages:function(paneId){var rawDataLanguages="";if(yellow.system.coreLanguages&&Object.keys(yellow.system.coreLanguages).length>1){for(var language in yellow.system.coreLanguages){var checked=language==this.getRequest("language")?" checked=\"checked\"":"";rawDataLanguages+="<label for=\""+paneId+"-"+language+"\"><input type=\"radio\" name=\"language\" id=\""+paneId+"-"+language+"\" value=\""+language+"\""+checked+"> "+yellow.toolbox.encodeHtml(yellow.system.coreLanguages[language])+"</label><br />"}}
+return rawDataLanguages},getRawDataButtons:function(paneId){var rawDataButtons="";if(yellow.system.editToolbarButtons&&yellow.system.editToolbarButtons!="none"){var tokens=yellow.system.editToolbarButtons.split(/\s*,\s*/);for(var i=0;i<tokens.length;i++){var token=tokens[i];if(token!="separator"){var shortcut=this.getShortcut(token);var rawDataShortcut=shortcut?" "+yellow.toolbox.encodeHtml(shortcut):"";var rawDataExpandable=this.isExpandable(token)?" aria-expanded=\"false\"":"";rawDataButtons+="<li><a href=\"#\" id=\""+paneId+"-toolbar-"+yellow.toolbox.encodeHtml(token)+"\" class=\"yellow-toolbar-btn-icon yellow-toolbar-tooltip\" data-action=\"toolbar\" data-status=\""+yellow.toolbox.encodeHtml(token)+"\" aria-label=\""+this.getText("Toolbar","",token)+rawDataShortcut+"\""+rawDataExpandable+"><i class=\"yellow-icon yellow-icon-"+yellow.toolbox.encodeHtml(token)+"\"></i></a></li>"}else{rawDataButtons+="<li><a href=\"#\" class=\"yellow-toolbar-btn-separator\"></a></li>"}}}
+return rawDataButtons},getRequest:function(key,prefix){if(!prefix)prefix="request";key=prefix+yellow.toolbox.toUpperFirst(key);return(key in yellow.page)?yellow.page[key]:""},getShortcut:function(key){var shortcut="";var tokens=yellow.system.editKeyboardShortcuts.split(/\s*,\s*/);for(var i=0;i<tokens.length;i++){var pair=tokens[i].split(" ");if(key==pair[1]){shortcut=pair[0];break}}
+var labels=yellow.text.editKeyboardLabels.split(/\s*,\s*/);if(navigator.platform.indexOf("Mac")==-1){shortcut=shortcut.toUpperCase().replace("CTRL+",labels[0]).replace("ALT+",labels[1]).replace("SHIFT+",labels[2])}else{shortcut=shortcut.toUpperCase().replace("CTRL+ALT+","ALT+CTRL+").replace("CTRL+SHIFT+","SHIFT+CTRL+");shortcut=shortcut.replace("CTRL+",labels[3]).replace("ALT+",labels[4]).replace("SHIFT+",labels[5])}
+return shortcut},getText:function(key,prefix,postfix){if(!prefix)prefix="edit";if(!postfix)postfix="";key=prefix+yellow.toolbox.toUpperFirst(key)+yellow.toolbox.toUpperFirst(postfix);return(key in yellow.text)?yellow.text[key]:"["+key+"]"},getCookie:function(name){return yellow.toolbox.getCookie(name)},isUserAccess:function(action,location){var tokens=yellow.system.userAccess.split(/\s*,\s*/);return tokens.indexOf(action)!=-1&&(!location||location.substring(0,yellow.system.userHome.length)==yellow.system.userHome)},isExpandable:function(name){return(name=="format"||name=="heading"||name=="list"||name=="emojiawesome"||name=="fontawesome")},isExtension:function(name){return name in yellow.system.coreExtensions}};yellow.editor={setMarkdown:function(element,prefix,type,toggle,callback){var information=this.getMarkdownInformation(element,prefix,type);var selectionStart=(information.type.indexOf("block")!=-1)?information.top:information.start;var selectionEnd=(information.type.indexOf("block")!=-1)?information.bottom:information.end;if(information.found&&toggle)information.type=information.type.replace("insert","remove");if(information.type=="remove-fenced-block"||information.type=="remove-inline"){selectionStart-=information.prefix.length;selectionEnd+=information.prefix.length}
+var text=information.text;var textSelectionBefore=text.substring(0,selectionStart);var textSelection=text.substring(selectionStart,selectionEnd);var textSelectionAfter=text.substring(selectionEnd,text.length);var textSelectionNew,selectionStartNew,selectionEndNew;switch(information.type){case "insert-multiline-block":textSelectionNew=this.getMarkdownMultilineBlock(textSelection,information);selectionStartNew=information.start+this.getMarkdownDifference(textSelection,textSelectionNew,!0);selectionEndNew=information.end+this.getMarkdownDifference(textSelection,textSelectionNew);if(information.start==information.top&&information.start!=information.end)selectionStartNew=information.top;if(information.end==information.top&&information.start!=information.end)selectionEndNew=information.top;break;case "remove-multiline-block":textSelectionNew=this.getMarkdownMultilineBlock(textSelection,information);selectionStartNew=information.start+this.getMarkdownDifference(textSelection,textSelectionNew,!0);selectionEndNew=information.end+this.getMarkdownDifference(textSelection,textSelectionNew);if(selectionStartNew<=information.top)selectionStartNew=information.top;if(selectionEndNew<=information.top)selectionEndNew=information.top;break;case "insert-fenced-block":textSelectionNew=this.getMarkdownFencedBlock(textSelection,information);selectionStartNew=information.start+information.prefix.length;selectionEndNew=information.end+this.getMarkdownDifference(textSelection,textSelectionNew)-information.prefix.length;break;case "remove-fenced-block":textSelectionNew=this.getMarkdownFencedBlock(textSelection,information);selectionStartNew=information.start-information.prefix.length;selectionEndNew=information.end+this.getMarkdownDifference(textSelection,textSelectionNew)+information.prefix.length;break;case "insert-inline":textSelectionNew=information.prefix+textSelection+information.prefix;selectionStartNew=information.start+information.prefix.length;selectionEndNew=information.end+information.prefix.length;break;case "remove-inline":textSelectionNew=text.substring(information.start,information.end);selectionStartNew=information.start-information.prefix.length;selectionEndNew=information.end-information.prefix.length;break;case "insert":textSelectionNew=callback?callback(textSelection,information):information.prefix;selectionStartNew=information.start+textSelectionNew.length;selectionEndNew=selectionStartNew}
+if(textSelection!=textSelectionNew||selectionStart!=selectionStartNew||selectionEnd!=selectionEndNew){element.focus();element.setSelectionRange(selectionStart,selectionEnd);document.execCommand("insertText",!1,textSelectionNew);element.value=textSelectionBefore+textSelectionNew+textSelectionAfter;element.setSelectionRange(selectionStartNew,selectionEndNew)}
+if(yellow.system.debug)console.log("yellow.editor.setMarkdown type:"+information.type)},getMarkdownInformation:function(element,prefix,type){var text=element.value;var start=element.selectionStart;var end=element.selectionEnd;var top=start,bottom=end;while(text.charAt(top-1)!="\n"&&top>0)top--;if(bottom==top&&bottom<text.length)bottom++;while(text.charAt(bottom-1)!="\n"&&bottom<text.length)bottom++;if(type=="insert-autodetect"){if(text.substring(start,end).indexOf("\n")!=-1){type="insert-fenced-block";prefix="```\n"}else{type="insert-inline";prefix="`"}}
+var found=!1;if(type.indexOf("multiline-block")!=-1){if(text.substring(top,top+prefix.length)==prefix)found=!0}else if(type.indexOf("fenced-block")!=-1){if(text.substring(top-prefix.length,top)==prefix&&text.substring(bottom,bottom+prefix.length)==prefix){found=!0}}else{if(text.substring(start-prefix.length,start)==prefix&&text.substring(end,end+prefix.length)==prefix){if(prefix=="*"){var lettersBefore=0,lettersAfter=0;for(var index=start-1;text.charAt(index)=="*";index--)lettersBefore++;for(var index=end;text.charAt(index)=="*";index++)lettersAfter++;found=lettersBefore!=2&&lettersAfter!=2}else{found=!0}}}
+return{"text":text,"prefix":prefix,"type":type,"start":start,"end":end,"top":top,"bottom":bottom,"found":found}},getMarkdownDifference:function(textSelection,textSelectionNew,firstTextLine){var textSelectionLength,textSelectionLengthNew;if(firstTextLine){var position=textSelection.indexOf("\n");var positionNew=textSelectionNew.indexOf("\n");textSelectionLength=position!=-1?position+1:textSelection.length+1;textSelectionLengthNew=positionNew!=-1?positionNew+1:textSelectionNew.length+1}else{var position=textSelection.indexOf("\n");var positionNew=textSelectionNew.indexOf("\n");textSelectionLength=position!=-1?textSelection.length:textSelection.length+1;textSelectionLengthNew=positionNew!=-1?textSelectionNew.length:textSelectionNew.length+1}
+return textSelectionLengthNew-textSelectionLength},getMarkdownMultilineBlock:function(textSelection,information){var textSelectionNew="";var lines=yellow.toolbox.getTextLines(textSelection);for(var i=0;i<lines.length;i++){var matches=lines[i].match(/^(\s*[\#\*\-\!\>\s]+)?(\s+\[.\]|\s*\d+\.)?[ \t]+/);if(matches){textSelectionNew+=lines[i].substring(matches[0].length)}else{textSelectionNew+=lines[i]}}
+textSelection=textSelectionNew;if(information.type.indexOf("remove")==-1){textSelectionNew="";var linePrefix=information.prefix;lines=yellow.toolbox.getTextLines(textSelection.length!=0?textSelection:"\n");for(var i=0;i<lines.length;i++){textSelectionNew+=linePrefix+lines[i];if(information.prefix=="1. "){var matches=linePrefix.match(/^(\d+)\.\s/);if(matches)linePrefix=(parseInt(matches[1])+1)+". "}}
+textSelection=textSelectionNew}
+return textSelection},getMarkdownFencedBlock:function(textSelection,information){var textSelectionNew="";var lines=yellow.toolbox.getTextLines(textSelection);for(var i=0;i<lines.length;i++){var matches=lines[i].match(/^```/);if(!matches)textSelectionNew+=lines[i]}
+textSelection=textSelectionNew;if(information.type.indexOf("remove")==-1){if(textSelection.length==0)textSelection="\n";textSelection=information.prefix+textSelection+information.prefix}
+return textSelection},getMarkdownLink:function(textSelection,information){return textSelection.length!=0?information.prefix.replace("link",textSelection):information.prefix},setMetaData:function(element,key,toggle){var information=this.getMetaDataInformation(element,key);if(information.bottom!=0){var value="";if(key=="status"){var tokens=yellow.system.editStatusValues.split(/\s*,\s*/);var index=tokens.indexOf(information.value);value=tokens[index+1<tokens.length?index+1:index]}
+var selectionStart=information.found?information.start:information.bottom;var selectionEnd=information.found?information.end:information.bottom;var text=information.text;var textSelectionBefore=text.substring(0,selectionStart);var textSelection=text.substring(selectionStart,selectionEnd);var textSelectionAfter=text.substring(selectionEnd,text.length);var textSelectionNew=yellow.toolbox.toUpperFirst(key)+": "+value+"\n";if(information.found&&information.value==value&&toggle)textSelectionNew="";var selectionStartNew=selectionStart;var selectionEndNew=selectionStart+textSelectionNew.trim().length;element.focus();element.setSelectionRange(selectionStart,selectionEnd);document.execCommand("insertText",!1,textSelectionNew);element.value=textSelectionBefore+textSelectionNew+textSelectionAfter;element.setSelectionRange(selectionStartNew,selectionEndNew);element.scrollTop=0;if(yellow.system.debug)console.log("yellow.editor.setMetaData key:"+key)}},getMetaDataInformation:function(element,key){var text=element.value;var value="";var start=0,end=0,top=0,bottom=0;var found=!1;var parts=text.match(/^(\xEF\xBB\xBF)?(\-\-\-[\r\n]+)([\s\S]+?)\-\-\-[\r\n]+/);if(parts){key=yellow.toolbox.toLowerFirst(key);start=end=top=((parts[1]?parts[1]:"")+parts[2]).length;bottom=((parts[1]?parts[1]:"")+parts[2]+parts[3]).length;var lines=yellow.toolbox.getTextLines(parts[3]);for(var i=0;i<lines.length;i++){var matches=lines[i].match(/^\s*(.*?)\s*:\s*(.*?)\s*$/);if(matches&&yellow.toolbox.toLowerFirst(matches[1])==key&&matches[2].length!=0){value=matches[2];end=start+lines[i].length;found=!0;break}
+start=end=start+lines[i].length}}
+return{"text":text,"value":value,"start":start,"end":end,"top":top,"bottom":bottom,"found":found}},replace:function(element,textOld,textNew){var text=element.value;var selectionStart=element.selectionStart;var selectionEnd=element.selectionEnd;var selectionStartFound=text.indexOf(textOld);var selectionEndFound=selectionStartFound+textOld.length;if(selectionStartFound!=-1){var selectionStartNew=selectionStart<selectionStartFound?selectionStart:selectionStart+textNew.length-textOld.length;var selectionEndNew=selectionEnd<selectionEndFound?selectionEnd:selectionEnd+textNew.length-textOld.length;var textBefore=text.substring(0,selectionStartFound);var textAfter=text.substring(selectionEndFound,text.length);if(textOld!=textNew){element.focus();element.setSelectionRange(selectionStartFound,selectionEndFound);document.execCommand("insertText",!1,textNew);element.value=textBefore+textNew+textAfter;element.setSelectionRange(selectionStartNew,selectionEndNew)}}},undo:function(){document.execCommand("undo")},redo:function(){document.execCommand("redo")}};yellow.toolbox={insertBefore:function(element,elementReference){elementReference.parentNode.insertBefore(element,elementReference)},insertAfter:function(element,elementReference){elementReference.parentNode.insertBefore(element,elementReference.nextSibling)},addClass:function(element,name){element.classList.add(name)},removeClass:function(element,name){element.classList.remove(name)},addValue:function(selector,name,value){var element=document.querySelector(selector);element.setAttribute(name,element.getAttribute(name)+value)},removeValue:function(selector,name,value){var element=document.querySelector(selector);element.setAttribute(name,element.getAttribute(name).replace(value,""))},addEvent:function(element,type,handler){element.addEventListener(type,handler,!1)},removeEvent:function(element,type,handler){element.removeEventListener(type,handler,!1)},getEventShortcut:function(e){var shortcut="";if(e.keyCode>=48&&e.keyCode<=90){shortcut+=(e.ctrlKey?"ctrl+":"")+(e.metaKey?"meta+":"")+(e.altKey?"alt+":"")+(e.shiftKey?"shift+":"");shortcut+=String.fromCharCode(e.keyCode).toLowerCase()}
+return shortcut},getWidth:function(element){return element.offsetWidth-this.getBoxSize(element).width},getHeight:function(element){return element.offsetHeight-this.getBoxSize(element).height},setOuterWidth:function(element,width){element.style.width=Math.max(0,width-this.getBoxSize(element).width)+"px"},setOuterHeight:function(element,height){element.style.height=Math.max(0,height-this.getBoxSize(element).height)+"px"},getOuterWidth:function(element,includeMargin){var width=element.offsetWidth;if(includeMargin)width+=this.getMarginSize(element).width;return width},getOuterHeight:function(element,includeMargin){var height=element.offsetHeight;if(includeMargin)height+=this.getMarginSize(element).height;return height},setOuterLeft:function(element,left){element.style.left=Math.max(0,left)+"px"},setOuterTop:function(element,top){element.style.top=Math.max(0,top)+"px"},getOuterLeft:function(element){return element.getBoundingClientRect().left+window.pageXOffset},getOuterTop:function(element){return element.getBoundingClientRect().top+window.pageYOffset},getWindowWidth:function(){return window.innerWidth},getWindowHeight:function(){return window.innerHeight},getStyle:function(element,property){return window.getComputedStyle(element).getPropertyValue(property)},getBoxSize:function(element){var paddingLeft=parseFloat(this.getStyle(element,"padding-left"))||0;var paddingRight=parseFloat(this.getStyle(element,"padding-right"))||0;var borderLeft=parseFloat(this.getStyle(element,"border-left-width"))||0;var borderRight=parseFloat(this.getStyle(element,"border-right-width"))||0;var width=paddingLeft+paddingRight+borderLeft+borderRight;var paddingTop=parseFloat(this.getStyle(element,"padding-top"))||0;var paddingBottom=parseFloat(this.getStyle(element,"padding-bottom"))||0;var borderTop=parseFloat(this.getStyle(element,"border-top-width"))||0;var borderBottom=parseFloat(this.getStyle(element,"border-bottom-width"))||0;var height=paddingTop+paddingBottom+borderTop+borderBottom;return{"width":width,"height":height}},getMarginSize:function(element){var marginLeft=parseFloat(this.getStyle(element,"margin-left"))||0;var marginRight=parseFloat(this.getStyle(element,"margin-right"))||0;var width=marginLeft+marginRight;var marginTop=parseFloat(this.getStyle(element,"margin-top"))||0;var marginBottom=parseFloat(this.getStyle(element,"margin-bottom"))||0;var height=marginTop+marginBottom;return{"width":width,"height":height}},setVisible:function(element,show,fadeout){if(fadeout&&!show){var opacity=1;function renderFrame(){opacity-=.1;if(opacity<=0){element.style.opacity="initial";element.style.display="none"}else{element.style.opacity=opacity;requestAnimationFrame(renderFrame)}}
+renderFrame()}else{element.style.display=show?"block":"none"}},isVisible:function(element){return element&&element.style.display!="none"},toLowerFirst:function(string){return string.charAt(0).toLowerCase()+string.slice(1)},toUpperFirst:function(string){return string.charAt(0).toUpperCase()+string.slice(1)},getTextLines:function(string){var lines=string.split("\n");for(var i=0;i<lines.length;i++)lines[i]=lines[i]+"\n";if(string.length==0||string.charAt(string.length-1)=="\n")lines.pop();return lines},getCookie:function(name){var matches=document.cookie.match("(^|; )"+name+"=([^;]+)");return matches?unescape(matches[2]):""},encodeHtml:function(string){return string.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")},submitForm:function(args){var elementForm=document.createElement("form");elementForm.setAttribute("method","post");for(var key in args){if(!args.hasOwnProperty(key))continue;var elementInput=document.createElement("input");elementInput.setAttribute("type","hidden");elementInput.setAttribute("name",key);elementInput.setAttribute("value",args[key]);elementForm.appendChild(elementInput)}
+document.body.appendChild(elementForm);elementForm.submit()}};yellow.edit.intervalId=setInterval("yellow.onLoad(new Event('DOMContentLoading'))",1);window.addEventListener("DOMContentLoaded",yellow.onLoad,!1)
+\ No newline at end of file
diff --git a/system/resources/bundle-9a7343d74c.min.css b/system/resources/bundle-9a7343d74c.min.css
@@ -0,0 +1,2 @@
+/* stockholm.css */
+html,body,div,form,pre,span,tr,th,td,img{margin:0;padding:0;border:0;vertical-align:baseline}@font-face{font-family:"Open Sans";font-style:normal;font-weight:300;src:url(/media/resources/stockholm-opensans-light.woff) format("woff")}@font-face{font-family:"Open Sans";font-style:normal;font-weight:400;src:url(/media/resources/stockholm-opensans-regular.woff) format("woff")}@font-face{font-family:"Open Sans";font-style:normal;font-weight:700;src:url(/media/resources/stockholm-opensans-bold.woff) format("woff")}body{margin:1em;background-color:#fff;color:#666;font-family:"Open Sans",Helvetica,sans-serif;font-size:1em;font-weight:300;line-height:1.5}h1,h2,h3,h4,h5,h6{color:#111;font-weight:400}h1{font-size:2em}hr{height:1px;background:#ddd;border:0}strong{font-weight:700}code{font-size:1.1em}a{color:#07d;text-decoration:none}a:hover{color:#07d;text-decoration:underline}.content h1{margin:1em 0}.content h1 a{color:#111}.content h1 a:hover{color:#111;text-decoration:none}.content img{max-width:100%;height:auto}.content form{margin:1em 0}.content table{border-spacing:0;border-collapse:collapse}.content th{text-align:left;padding:.3em}.content td{text-align:left;padding:.3em;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.content code,.content pre{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:90%}.content code{padding:.15em .4em;margin:0;background-color:#f7f7f7;border-radius:3px}.content pre>code{padding:0;margin:0;white-space:pre;background:transparent;border:0;font-size:inherit}.content pre{padding:1em;overflow:auto;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.content blockquote{margin-left:0;padding-left:1em;border-left:1px solid #ddd}.content .notice1{margin:1em 0;padding:10px 1em;background-color:#fffbf0;border-left:10px solid #fb0}.content .notice2{margin:1em 0;padding:10px 1em;background-color:#fdf0f0;border-left:10px solid #d00}.content .notice3,.content .notice4,.content .notice5,.content .notice6{margin:1em 0;padding:10px 1em;background-color:#f0f8fe;border-left:10px solid #08e}.content .flexible{position:relative;padding-top:0;padding-bottom:56.25%}.content .flexible iframe{position:absolute;top:0;left:0;width:100%;height:100%}.content .task-list-item{list-style-type:none}.content .task-list-item input{margin:0 .2em .25em -1.75em;vertical-align:middle}.content .toc{margin:0;padding:0;list-style:none}.content .wikipages ul,.content .wikitags ul,.content .wikilinks ul{padding:0;list-style:none;column-width:19em}.content .entry-links .previous{margin-right:1em}.content .pagination .previous{margin-right:1em}.content .pagination{margin:1em 0}.content .left{float:left;margin:0 1em 0 0}.content .center{display:block;margin:0 auto}.content .right{float:right;margin:0 0 0 1em}.content .rounded{border-radius:4px}.header{margin:2em 0}.header .sitename{display:block;float:left}.header .sitename h1{margin:0;font-size:1em;font-weight:300}.header .sitename h1 a{color:#666;border-bottom:solid 3px #fff;text-decoration:none;padding:.5em 0}.header .sitename h1 a:hover{color:#07d;border-bottom:solid 3px #29f}.header .sitename p{margin-top:0;color:#666}.navigation{display:block;float:right;margin-top:.5em;font-size:1em}.navigation a{color:#666;border-bottom:solid 3px #fff;text-decoration:none;padding:.5em 0;margin:0 .5em}.navigation a:hover{color:#07d;border-bottom:solid 3px #29f}.navigation ul{margin:0 -.5em;padding:0;list-style:none}.navigation li{display:inline}.navigation li a.active{border-bottom:solid 3px #29f}.navigation-banner{clear:both}.footer{margin:2em 0}.footer .siteinfo a{color:#07d}.footer .siteinfo a:hover{color:#07d;text-decoration:underline}.form-control{margin:0;padding:2px 4px;display:inline-block;min-width:7em;background-color:#fff;color:#666;background-image:linear-gradient(to bottom,#fff,#fff);border:1px solid #bbb;border-radius:4px;font-size:.9em;font-family:inherit;font-weight:400;line-height:normal}.btn{margin:0;padding:4px 22px;display:inline-block;min-width:7em;background-color:#eaeaea;color:#333;background-image:linear-gradient(to bottom,#f8f8f8,#e1e1e1);border:1px solid #bbb;border-color:#c1c1c1 #c1c1c1 #aaa;border-radius:4px;outline-offset:-2px;font-size:.9em;font-family:inherit;font-weight:400;line-height:1;text-align:center;text-decoration:none;box-sizing:border-box}.btn:hover,.btn:focus,.btn:active{color:#333;background-image:none;text-decoration:none}.btn:active{box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.page{margin:0 auto;max-width:1000px}@media screen and (min-width:62em){body{width:60em;margin:1em auto}.page{margin:0;max-width:none}}@media screen and (max-width:32em){body{margin:.5em;font-size:.9em}.content h1,.content h2{font-size:1.5em}}@media print{.page{border:none!important}}.latex sub{vertical-align:-.6ex;margin-left:-.15em;margin-right:-.125em;font-size:1em}.latex{font-family:serif;font-size:1.5em}.latex sup{font-size:.7em;vertical-align:.3em;margin-left:-.25em;margin-right:-.2em}
+\ No newline at end of file
diff --git a/system/resources/bundle-d4840ca010.min.css b/system/resources/bundle-d4840ca010.min.css
@@ -0,0 +1,5 @@
+/* edit.css */
+.yellow-bar{position:relative}.yellow-bar-left{display:block;float:left}.yellow-bar-right{display:block;float:right}.yellow-bar-right a{margin-left:1em}.yellow-bar-banner{clear:both}.yellow-body-modal-open{overflow:hidden}.yellow-pane{position:absolute;display:none;z-index:100;padding:10px;background-color:#fff;color:#000;border:1px solid #bbb;border-radius:4px;box-shadow:2px 4px 10px rgba(0,0,0,.2);text-align:center}.yellow-pane h1{color:#000;font-size:2em;margin:0 1em;overflow:hidden;text-overflow:ellipsis}.yellow-pane p{margin:.5em 0}.yellow-pane .yellow-status{margin-bottom:1em}.yellow-pane .yellow-fields{width:14em;margin:0 auto;text-align:left}.yellow-pane .yellow-fields .yellow-center{width:14em;display:inline-block;text-align:center}.yellow-pane .yellow-fields .yellow-form-control{width:15em;box-sizing:border-box}.yellow-pane .yellow-fields .yellow-btn{width:15em;margin:1em 0 .5em 0}.yellow-pane .yellow-buttons .yellow-btn{width:15em;margin:.5em 0}.yellow-close{position:absolute;top:.8em;right:1em;cursor:pointer;font-size:.9em;color:#bbb;text-decoration:none}.yellow-close:hover{color:#000;text-decoration:none}.yellow-arrow{position:absolute;top:0;left:0}.yellow-arrow:after,.yellow-arrow:before{position:absolute;pointer-events:none;bottom:100%;height:0;width:0;border:solid transparent;content:""}.yellow-arrow:after{border-color:rgba(255,255,255,0);border-bottom-color:#fff;border-width:10px;margin-left:-10px}.yellow-arrow:before{border-color:rgba(187,187,187,0);border-bottom-color:#bbb;border-width:11px;margin-left:-11px}.yellow-settings{text-align:left}.yellow-settings-left{float:left;padding:0 .5em}.yellow-settings-right{float:left}.yellow-settings-separator{visibility:hidden;padding:20px}.yellow-settings-banner{clear:both}.yellow-popup{position:absolute;display:none;z-index:200;padding:10px 0;background-color:#fff;color:#000;border:1px solid #bbb;border-radius:4px;box-shadow:2px 4px 10px rgba(0,0,0,.2)}.yellow-dropdown{list-style:none;margin:0;padding:0}.yellow-dropdown span{display:block;margin:0;padding:.25em 1em}.yellow-dropdown a{display:block;padding:.2em 1em;text-decoration:none}.yellow-dropdown a:hover{color:#fff;background-color:#18e;text-decoration:none}.yellow-dropdown-menu a{color:#000}.yellow-toolbar{list-style:none;margin:0;padding:0}.yellow-toolbar-left{display:inline-block;float:left}.yellow-toolbar-right{display:inline-block;float:right}.yellow-toolbar-banner{clear:both}.yellow-toolbar h1{margin:-5px 0 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.yellow-toolbar li{display:inline-block;vertical-align:top}.yellow-toolbar a{display:inline-block;padding:6px 16px;text-decoration:none;background-color:#fff;color:#000;font-size:.9em;font-weight:400;border:1px solid #bbb;border-radius:4px}.yellow-toolbar a:hover{background-color:#18e;background-image:none;border-color:#18e;color:#fff;text-decoration:none}.yellow-toolbar-left a{margin-right:4px;margin-bottom:10px}.yellow-toolbar-right a{margin-left:4px;margin-bottom:10px}.yellow-toolbar .yellow-icon{font-size:.9em;min-width:1em;text-align:center}.yellow-toolbar .yellow-toolbar-btn{padding:6px 10px;min-width:4em;text-align:center}.yellow-toolbar .yellow-toolbar-btn-edit{background-color:#29f;border-color:#29f;color:#fff}.yellow-toolbar .yellow-toolbar-btn-create{background-color:#29f;border-color:#29f;color:#fff}.yellow-toolbar .yellow-toolbar-btn-delete{background-color:#e55;border-color:#e55;color:#fff}.yellow-toolbar .yellow-toolbar-btn-delete:hover{background-color:#d44;border-color:#d44}.yellow-toolbar .yellow-toolbar-btn-separator{visibility:hidden;padding:6px}.yellow-toolbar .yellow-toolbar-checked{background-color:#666;border-color:#666;color:#fff}.yellow-toolbar-tooltip{position:relative}.yellow-toolbar-tooltip::after,.yellow-toolbar-tooltip::before{position:absolute;z-index:300;display:none;pointer-events:none}.yellow-toolbar-tooltip::after{padding:2px 9px;font-weight:400;font-size:.9em;text-align:center;white-space:nowrap;content:attr(aria-label);background-color:#111;color:#ddd;border-radius:3px;top:100%;right:50%;margin-top:6px;transform:translateX(50%)}.yellow-toolbar-tooltip::before{width:0;height:0;content:"";border:4px solid transparent;top:auto;right:50%;bottom:-6px;margin-right:-4px;border-bottom-color:#111}.yellow-toolbar-tooltip:hover::before,.yellow-toolbar-tooltip:hover::after{display:inline-block}.yellow-toolbar-selected.yellow-toolbar-tooltip::before,.yellow-toolbar-selected.yellow-toolbar-tooltip::after{display:none}.yellow-edit-text{margin:0;padding:0 2px;outline:none;resize:none;border:none;font-size:.9em;font-family:inherit;font-weight:400;line-height:normal}.yellow-edit-preview{padding:0;overflow:auto}.yellow-edit-preview h1{margin:.67em 0}.yellow-edit-preview p{margin:1em 0}.yellow-edit-preview .content{margin:0;padding:0}.yellow-form-control{margin:0;padding:2px 4px;display:inline-block;background-color:#fff;color:#000;background-image:linear-gradient(to bottom,#fff,#fff);border:1px solid #bbb;border-radius:4px;font-size:.9em;font-family:inherit;font-weight:400;line-height:normal}.yellow-btn{margin:0;padding:4px 22px;display:inline-block;min-width:8em;background-color:#eaeaea;color:#333;background-image:linear-gradient(to bottom,#f8f8f8,#e1e1e1);border:1px solid #bbb;border-color:#c1c1c1 #c1c1c1 #aaa;border-radius:4px;outline-offset:-2px;font-size:.9em;font-family:inherit;font-weight:400;line-height:1;text-align:center;text-decoration:none;box-sizing:border-box}.yellow-btn:hover,.yellow-btn:focus,.yellow-btn:active{color:#333;background-image:none;text-decoration:none}.yellow-btn:active{box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}#yellow-pane-create-bar{padding:0 .5em}#yellow-pane-delete-bar{padding:0 .5em}#yellow-pane-create,#yellow-pane-edit,#yellow-pane-delete{text-align:left}#yellow-pane-menu{padding:10px 0;text-align:left}#yellow-popup-format,#yellow-popup-heading,#yellow-popup-list{width:16em}#yellow-popup-format a,#yellow-popup-heading a{padding:.25em 16px}#yellow-popup-format #yellow-popup-format-h1,#yellow-popup-heading #yellow-popup-heading-h1{font-size:2em;font-weight:700}#yellow-popup-format #yellow-popup-format-h2,#yellow-popup-heading #yellow-popup-heading-h2{font-size:1.6em;font-weight:700}#yellow-popup-format #yellow-popup-format-h3,#yellow-popup-heading #yellow-popup-heading-h3{font-size:1.3em;font-weight:700}#yellow-popup-format #yellow-popup-format-notice{font-weight:700}#yellow-popup-format #yellow-popup-format-quote{font-style:italic}#yellow-popup-format #yellow-popup-format-pre{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:.9em;line-height:1.8}#yellow-popup-emojiawesome{padding:10px;width:14em}#yellow-popup-emojiawesome a{padding:.2em}#yellow-popup-emojiawesome .yellow-dropdown li{display:inline-block}#yellow-popup-fontawesome{padding:10px;width:13em}#yellow-popup-fontawesome a{padding:.18em .3em;min-width:1em;text-align:center}#yellow-popup-fontawesome .yellow-dropdown li{display:inline-block}@font-face{font-family:"Edit";font-weight:400;font-style:normal;src:url(/media/extensions/edit.woff) format("woff")}.yellow-icon{display:inline-block;font-family:Edit;font-style:normal;font-weight:400;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.yellow-spin{-webkit-animation:yellow-spin 1s infinite steps(16);animation:yellow-spin 1s infinite steps(16)}@-webkit-keyframes yellow-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes yellow-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.yellow-icon-preview:before{content:"\f100"}.yellow-icon-format:before{content:"\f101"}.yellow-icon-paragraph:before{content:"\f101"}.yellow-icon-heading:before{content:"\f102"}.yellow-icon-h1:before{content:"\f103"}.yellow-icon-h2:before{content:"\f104"}.yellow-icon-h3:before{content:"\f105"}.yellow-icon-bold:before{content:"\f106"}.yellow-icon-italic:before{content:"\f0f7"}.yellow-icon-strikethrough:before{content:"\f108"}.yellow-icon-quote:before{content:"\f109"}.yellow-icon-code:before{content:"\f10a"}.yellow-icon-pre:before{content:"\f10a"}.yellow-icon-link:before{content:"\f10b"}.yellow-icon-file:before{content:"\f10c"}.yellow-icon-list:before{content:"\f10d"}.yellow-icon-ul:before{content:"\f10d"}.yellow-icon-ol:before{content:"\f10e"}.yellow-icon-tl:before{content:"\f10f"}.yellow-icon-hr:before{content:"\f110"}.yellow-icon-table:before{content:"\f111"}.yellow-icon-emojiawesome:before{content:"\f112"}.yellow-icon-fontawesome:before{content:"\f113"}.yellow-icon-status:before{content:"\f114"}.yellow-icon-undo:before{content:"\f115"}.yellow-icon-redo:before{content:"\f116"}.yellow-icon-spinner:before{content:"\f200"}.yellow-icon-search:before{content:"\f201"}.yellow-icon-close:before{content:"\f202"}.yellow-icon-help:before{content:"\f203"}.yellow-icon-markdown:before{content:"\f203"}.yellow-icon-logo:before{content:"\f8ff"}
+
+/* stockholm.css */
+html,body,div,form,pre,span,tr,th,td,img{margin:0;padding:0;border:0;vertical-align:baseline}@font-face{font-family:"Open Sans";font-style:normal;font-weight:300;src:url(/media/resources/stockholm-opensans-light.woff) format("woff")}@font-face{font-family:"Open Sans";font-style:normal;font-weight:400;src:url(/media/resources/stockholm-opensans-regular.woff) format("woff")}@font-face{font-family:"Open Sans";font-style:normal;font-weight:700;src:url(/media/resources/stockholm-opensans-bold.woff) format("woff")}body{margin:1em;background-color:#fff;color:#666;font-family:"Open Sans",Helvetica,sans-serif;font-size:1em;font-weight:300;line-height:1.5}h1,h2,h3,h4,h5,h6{color:#111;font-weight:400}h1{font-size:2em}hr{height:1px;background:#ddd;border:0}strong{font-weight:700}code{font-size:1.1em}a{color:#07d;text-decoration:none}a:hover{color:#07d;text-decoration:underline}.content h1{margin:1em 0}.content h1 a{color:#111}.content h1 a:hover{color:#111;text-decoration:none}.content img{max-width:100%;height:auto}.content form{margin:1em 0}.content table{border-spacing:0;border-collapse:collapse}.content th{text-align:left;padding:.3em}.content td{text-align:left;padding:.3em;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.content code,.content pre{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:90%}.content code{padding:.15em .4em;margin:0;background-color:#f7f7f7;border-radius:3px}.content pre>code{padding:0;margin:0;white-space:pre;background:transparent;border:0;font-size:inherit}.content pre{padding:1em;overflow:auto;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.content blockquote{margin-left:0;padding-left:1em;border-left:1px solid #ddd}.content .notice1{margin:1em 0;padding:10px 1em;background-color:#fffbf0;border-left:10px solid #fb0}.content .notice2{margin:1em 0;padding:10px 1em;background-color:#fdf0f0;border-left:10px solid #d00}.content .notice3,.content .notice4,.content .notice5,.content .notice6{margin:1em 0;padding:10px 1em;background-color:#f0f8fe;border-left:10px solid #08e}.content .flexible{position:relative;padding-top:0;padding-bottom:56.25%}.content .flexible iframe{position:absolute;top:0;left:0;width:100%;height:100%}.content .task-list-item{list-style-type:none}.content .task-list-item input{margin:0 .2em .25em -1.75em;vertical-align:middle}.content .toc{margin:0;padding:0;list-style:none}.content .wikipages ul,.content .wikitags ul,.content .wikilinks ul{padding:0;list-style:none;column-width:19em}.content .entry-links .previous{margin-right:1em}.content .pagination .previous{margin-right:1em}.content .pagination{margin:1em 0}.content .left{float:left;margin:0 1em 0 0}.content .center{display:block;margin:0 auto}.content .right{float:right;margin:0 0 0 1em}.content .rounded{border-radius:4px}.header{margin:2em 0}.header .sitename{display:block;float:left}.header .sitename h1{margin:0;font-size:1em;font-weight:300}.header .sitename h1 a{color:#666;border-bottom:solid 3px #fff;text-decoration:none;padding:.5em 0}.header .sitename h1 a:hover{color:#07d;border-bottom:solid 3px #29f}.header .sitename p{margin-top:0;color:#666}.navigation{display:block;float:right}.navigation a{color:#666;border-bottom:solid 3px #fff;text-decoration:none;padding:.5em 0;margin:0 .5em}.navigation a:hover{color:#07d;border-bottom:solid 3px #29f}.navigation ul{margin:0 -.5em;padding:0;list-style:none}.navigation li{display:inline}.navigation li a.active{border-bottom:solid 3px #29f}.navigation-banner{clear:both}.footer{margin:2em 0}.footer .siteinfo a{color:#07d}.footer .siteinfo a:hover{color:#07d;text-decoration:underline}.form-control{margin:0;padding:2px 4px;display:inline-block;min-width:7em;background-color:#fff;color:#666;background-image:linear-gradient(to bottom,#fff,#fff);border:1px solid #bbb;border-radius:4px;font-size:.9em;font-family:inherit;font-weight:400;line-height:normal}.btn{margin:0;padding:4px 22px;display:inline-block;min-width:7em;background-color:#eaeaea;color:#333;background-image:linear-gradient(to bottom,#f8f8f8,#e1e1e1);border:1px solid #bbb;border-color:#c1c1c1 #c1c1c1 #aaa;border-radius:4px;outline-offset:-2px;font-size:.9em;font-family:inherit;font-weight:400;line-height:1;text-align:center;text-decoration:none;box-sizing:border-box}.btn:hover,.btn:focus,.btn:active{color:#333;background-image:none;text-decoration:none}.btn:active{box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.page{margin:0 auto;max-width:1000px}@media screen and (min-width:62em){body{width:60em;margin:1em auto}.page{margin:0;max-width:none}}@media screen and (max-width:32em){body{margin:.5em;font-size:.9em}.content h1,.content h2{font-size:1.5em}}@media print{.page{border:none!important}}
+\ No newline at end of file
diff --git a/system/resources/stockholm.css b/system/resources/stockholm.css
@@ -242,6 +242,8 @@ a:hover {
.navigation {
display: block;
float: right;
+ margin-top: 0.5em;
+ font-size: 1em;
}
.navigation a {
color: #666;
@@ -362,3 +364,22 @@ a:hover {
border: none !important;
}
}
+.latex sub {
+ vertical-align: -0.6ex;
+ margin-left: -0.15em;
+ margin-right: -0.125em;
+ font-size: 1em;
+}
+
+.latex {
+ font-family: serif;
+ font-size: 1.5em;
+}
+
+.latex sup {
+ font-size: 0.7em;
+ vertical-align: 0.3em;
+ margin-left: -0.25em;
+ margin-right: -0.2em;
+}
+
diff --git a/system/settings/system.ini b/system/settings/system.ini
@@ -1,15 +1,15 @@
# Datenstrom Yellow system settings
-Sitename: Datenstrom Yellow
-Author: Datenstrom
-Email: webmaster
+Sitename: MiKuLi.Cz
+Author: Ashymad
+Email: szymon.mikulicz@posteo.net
Language: en
Layout: default
Theme: stockholm
Parser: markdown
Status: public
-CoreStaticUrl:
+CoreStaticUrl: https://mikuli.cz/
CoreStaticDefaultFile: index.html
CoreStaticErrorFile: 404.html
CoreStaticDir: public/
diff --git a/system/settings/text.ini b/system/settings/text.ini
@@ -1,2 +1,5 @@
# Datenstrom Yellow text settings
+Language: en
+CoreDateFormatMedium: Y-m-d
+picture.jpg: This is an example image
diff --git a/system/settings/user.ini b/system/settings/user.ini
@@ -1,2 +1,13 @@
# Datenstrom Yellow user accounts
+Email: szymon.mikulicz@posteo.net
+Name: Ashymad
+Language: en
+Home: /
+Access: create, edit, delete, upload, system, update
+Hash: $2y$10$lAJnXGMN5dlSilg6UlSwXefF1DhmsomUPU4jJgg/7FYUDyrQ9SwIG
+Stamp: c158fa06b6730cf87d0f
+Pending: none
+Failed: 0
+Modified: 1592946006
+Status: active