mikuli.cz

:)
git clone https://git.sr.ht/~ashymad/mikuli.cz
Log | Files | Refs

commit eed73903c07e7298f1f6eccf15e622e5902662cc
parent 632fc74008e7b38d4ae238d0dd8a6b6d62217610
Author: Szymon Mikulicz <szymon.mikulicz@posteo.net>
Date:   Tue, 23 Jun 2020 23:20:51 +0200

First steps: logo

Diffstat:
Asystem/extensions/english-language.txt | 200+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asystem/extensions/english.php | 26++++++++++++++++++++++++++
Asystem/extensions/french-language.txt | 200+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asystem/extensions/french.php | 26++++++++++++++++++++++++++
Asystem/extensions/german-language.txt | 200+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asystem/extensions/german.php | 26++++++++++++++++++++++++++
Dsystem/extensions/install-blog.zip | 0
Dsystem/extensions/install-languages.zip | 0
Dsystem/extensions/install-wiki.zip | 0
Dsystem/extensions/install.php | 372-------------------------------------------------------------------------------
Asystem/extensions/yellow.log | 5+++++
Msystem/layouts/header.html | 2+-
Asystem/resources/bundle-4ae45fbba2.min.js | 56++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asystem/resources/bundle-9a7343d74c.min.css | 3+++
Asystem/resources/bundle-d4840ca010.min.css | 6++++++
Msystem/resources/stockholm.css | 21+++++++++++++++++++++
Msystem/settings/system.ini | 8++++----
Msystem/settings/text.ini | 3+++
Msystem/settings/user.ini | 11+++++++++++
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="&nbsp;"} +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\">&nbsp;</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\">&nbsp;</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?"&nbsp;&nbsp;"+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,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},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