Upgrade to 4.3.0
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
"description": "The Kirby core",
|
||||
"license": "proprietary",
|
||||
"type": "kirby-cms",
|
||||
"version": "4.2.0",
|
||||
"version": "4.3.0",
|
||||
"keywords": [
|
||||
"kirby",
|
||||
"cms",
|
||||
@@ -37,7 +37,7 @@
|
||||
"ext-mbstring": "*",
|
||||
"ext-openssl": "*",
|
||||
"christian-riesen/base32": "1.6.0",
|
||||
"claviska/simpleimage": "4.1.0",
|
||||
"claviska/simpleimage": "4.2.0",
|
||||
"composer/semver": "3.4.0",
|
||||
"filp/whoops": "2.15.4",
|
||||
"getkirby/composer-installer": "^1.2.1",
|
||||
@@ -46,7 +46,7 @@
|
||||
"phpmailer/phpmailer": "6.9.1",
|
||||
"symfony/polyfill-intl-idn": "1.29.0",
|
||||
"symfony/polyfill-mbstring": "1.29.0",
|
||||
"symfony/yaml": "6.4.3"
|
||||
"symfony/yaml": "6.4.8"
|
||||
},
|
||||
"replace": {
|
||||
"symfony/polyfill-php72": "*"
|
||||
|
40
kirby/composer.lock
generated
40
kirby/composer.lock
generated
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "43b28f916503f0f7a7fcfaf5ce174692",
|
||||
"content-hash": "c551d482274b5418356af010c4845227",
|
||||
"packages": [
|
||||
{
|
||||
"name": "christian-riesen/base32",
|
||||
@@ -67,16 +67,16 @@
|
||||
},
|
||||
{
|
||||
"name": "claviska/simpleimage",
|
||||
"version": "4.1.0",
|
||||
"version": "4.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/claviska/SimpleImage.git",
|
||||
"reference": "1dcb9c785c44960890970d26e25c437a2a252bbf"
|
||||
"reference": "dfbe53c01dae8467468ef2b817c09b786a7839d2"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/claviska/SimpleImage/zipball/1dcb9c785c44960890970d26e25c437a2a252bbf",
|
||||
"reference": "1dcb9c785c44960890970d26e25c437a2a252bbf",
|
||||
"url": "https://api.github.com/repos/claviska/SimpleImage/zipball/dfbe53c01dae8467468ef2b817c09b786a7839d2",
|
||||
"reference": "dfbe53c01dae8467468ef2b817c09b786a7839d2",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -108,7 +108,7 @@
|
||||
"description": "A PHP class that makes working with images as simple as possible.",
|
||||
"support": {
|
||||
"issues": "https://github.com/claviska/SimpleImage/issues",
|
||||
"source": "https://github.com/claviska/SimpleImage/tree/4.1.0"
|
||||
"source": "https://github.com/claviska/SimpleImage/tree/4.2.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -116,7 +116,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-04T15:41:11+00:00"
|
||||
"time": "2024-04-15T16:07:16+00:00"
|
||||
},
|
||||
{
|
||||
"name": "composer/semver",
|
||||
@@ -627,16 +627,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/deprecation-contracts",
|
||||
"version": "v3.4.0",
|
||||
"version": "v3.5.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/deprecation-contracts.git",
|
||||
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf"
|
||||
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf",
|
||||
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf",
|
||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
|
||||
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -645,7 +645,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "3.4-dev"
|
||||
"dev-main": "3.5-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/contracts",
|
||||
@@ -674,7 +674,7 @@
|
||||
"description": "A generic function and convention to trigger deprecation notices",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0"
|
||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -690,7 +690,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-05-23T14:45:45+00:00"
|
||||
"time": "2024-04-18T09:32:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-ctype",
|
||||
@@ -1018,16 +1018,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/yaml",
|
||||
"version": "v6.4.3",
|
||||
"version": "v6.4.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/yaml.git",
|
||||
"reference": "d75715985f0f94f978e3a8fa42533e10db921b90"
|
||||
"reference": "52903de178d542850f6f341ba92995d3d63e60c9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/yaml/zipball/d75715985f0f94f978e3a8fa42533e10db921b90",
|
||||
"reference": "d75715985f0f94f978e3a8fa42533e10db921b90",
|
||||
"url": "https://api.github.com/repos/symfony/yaml/zipball/52903de178d542850f6f341ba92995d3d63e60c9",
|
||||
"reference": "52903de178d542850f6f341ba92995d3d63e60c9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1070,7 +1070,7 @@
|
||||
"description": "Loads and dumps YAML files",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/yaml/tree/v6.4.3"
|
||||
"source": "https://github.com/symfony/yaml/tree/v6.4.8"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1086,7 +1086,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-01-23T14:51:35+00:00"
|
||||
"time": "2024-05-31T14:49:08+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
|
@@ -22,7 +22,7 @@ return [
|
||||
'text' => Escape::html($page->title()->value()),
|
||||
'link' => $page->panel()->url(true),
|
||||
'info' => Escape::html($page->id()),
|
||||
'uuid' => $page->uuid()->toString(),
|
||||
'uuid' => $page->uuid()?->toString(),
|
||||
]),
|
||||
'pagination' => $pages->pagination()->toArray()
|
||||
];
|
||||
|
@@ -85,6 +85,7 @@ return [
|
||||
'props' => [
|
||||
'environment' => $environment,
|
||||
'exceptions' => $kirby->option('debug') === true ? $exceptions : [],
|
||||
'info' => $system->info(),
|
||||
'plugins' => $plugins,
|
||||
'security' => $security,
|
||||
'urls' => [
|
||||
|
@@ -44,7 +44,7 @@ return function ($props) {
|
||||
}
|
||||
|
||||
if (empty($sidebar) === true) {
|
||||
$props['fields'] = $props['fields'] ?? [];
|
||||
$props['fields'] ??= [];
|
||||
|
||||
unset(
|
||||
$props['files'],
|
||||
|
@@ -26,7 +26,7 @@ return function (array $props) {
|
||||
|
||||
// inject the global templates definition
|
||||
if (empty($templates) === false) {
|
||||
$props['templates'] = $props['templates'] ?? $templates;
|
||||
$props['templates'] ??= $templates;
|
||||
}
|
||||
|
||||
return array_replace_recursive($defaults, $props);
|
||||
|
@@ -232,11 +232,39 @@ return [
|
||||
return false;
|
||||
}
|
||||
|
||||
if (in_array($this->status, ['draft', 'all']) === false) {
|
||||
if ($this->isFull() === true) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($this->isFull() === true) {
|
||||
// form here on, we need to check with which status
|
||||
// the pages are created and if the section can show
|
||||
// these newly created pages
|
||||
|
||||
// if the section shows pages no matter what status they have,
|
||||
// we can always show the add button
|
||||
if ($this->status === 'all') {
|
||||
return true;
|
||||
}
|
||||
|
||||
// collect all statuses of the blueprints
|
||||
// that are allowed to be created
|
||||
$statuses = [];
|
||||
|
||||
foreach ($this->blueprintNames() as $blueprint) {
|
||||
try {
|
||||
$props = Blueprint::load('pages/' . $blueprint);
|
||||
$statuses[] = $props['create']['status'] ?? 'draft';
|
||||
} catch (Throwable) {
|
||||
$statuses[] = 'draft'; // @codeCoverageIgnore
|
||||
}
|
||||
}
|
||||
|
||||
$statuses = array_unique($statuses);
|
||||
|
||||
// if there are multiple statuses or if the section is showing
|
||||
// a different status than new pages would be created with,
|
||||
// we cannot show the add button
|
||||
if (count($statuses) > 1 || $this->status !== $statuses[0]) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -249,22 +277,12 @@ return [
|
||||
'methods' => [
|
||||
'blueprints' => function () {
|
||||
$blueprints = [];
|
||||
$templates = empty($this->create) === false ? A::wrap($this->create) : $this->templates;
|
||||
|
||||
if (empty($templates) === true) {
|
||||
$templates = $this->kirby()->blueprints();
|
||||
}
|
||||
|
||||
// excludes ignored templates
|
||||
if ($templatesIgnore = $this->templatesIgnore) {
|
||||
$templates = array_diff($templates, $templatesIgnore);
|
||||
}
|
||||
|
||||
// convert every template to a usable option array
|
||||
// for the template select box
|
||||
foreach ($templates as $template) {
|
||||
foreach ($this->blueprintNames() as $blueprint) {
|
||||
try {
|
||||
$props = Blueprint::load('pages/' . $template);
|
||||
$props = Blueprint::load('pages/' . $blueprint);
|
||||
|
||||
$blueprints[] = [
|
||||
'name' => basename($props['name']),
|
||||
@@ -272,14 +290,28 @@ return [
|
||||
];
|
||||
} catch (Throwable) {
|
||||
$blueprints[] = [
|
||||
'name' => basename($template),
|
||||
'title' => ucfirst($template),
|
||||
'name' => basename($blueprint),
|
||||
'title' => ucfirst($blueprint),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return $blueprints;
|
||||
}
|
||||
},
|
||||
'blueprintNames' => function () {
|
||||
$blueprints = empty($this->create) === false ? A::wrap($this->create) : $this->templates;
|
||||
|
||||
if (empty($blueprints) === true) {
|
||||
$blueprints = $this->kirby()->blueprints();
|
||||
}
|
||||
|
||||
// excludes ignored templates
|
||||
if ($templatesIgnore = $this->templatesIgnore) {
|
||||
$blueprints = array_diff($blueprints, $templatesIgnore);
|
||||
}
|
||||
|
||||
return $blueprints;
|
||||
},
|
||||
],
|
||||
'toArray' => function () {
|
||||
return [
|
||||
|
@@ -252,6 +252,7 @@ return [
|
||||
'caption',
|
||||
'controls',
|
||||
'class',
|
||||
'disablepictureinpicture',
|
||||
'height',
|
||||
'loop',
|
||||
'muted',
|
||||
@@ -294,12 +295,15 @@ return [
|
||||
|
||||
// don't use attributes that iframe doesn't support
|
||||
if ($isProviderVideo === false) {
|
||||
// converts tag attributes to supported formats (listed below) to output correct html
|
||||
// booleans: autoplay, controls, loop, muted
|
||||
// strings : poster, preload
|
||||
// for ex : `autoplay` will not work if `false` is a `string` instead of a `boolean`
|
||||
// convert tag attributes to supported formats (bool, string)
|
||||
// to output correct html attributes
|
||||
//
|
||||
// for ex:
|
||||
// `autoplay` will not work if `false` is a string
|
||||
// instead of a boolean
|
||||
$attrs['autoplay'] = $autoplay = Str::toType($tag->autoplay, 'bool');
|
||||
$attrs['controls'] = Str::toType($tag->controls ?? true, 'bool');
|
||||
$attrs['disablepictureinpicture'] = Str::toType($tag->disablepictureinpicture ?? false, 'bool');
|
||||
$attrs['loop'] = Str::toType($tag->loop, 'bool');
|
||||
$attrs['muted'] = Str::toType($tag->muted ?? $autoplay, 'bool');
|
||||
$attrs['playsinline'] = Str::toType($tag->playsinline ?? $autoplay, 'bool');
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "Изисква се разширението <code>MB String</code>",
|
||||
"installation.issues.media": "Папката <code>/media</code> не съществува или няма права за запис",
|
||||
"installation.issues.php": "Бъдете сигурни, че използвате <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby изисква <code>Apache</code>, <code>Nginx</code> или <code>Caddy</code>",
|
||||
"installation.issues.sessions": "The <code>/site/sessions</code> folder does not exist or is not writable",
|
||||
|
||||
"language": "\u0415\u0437\u0438\u043a",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "No reports",
|
||||
"status": "Status",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "The content folder seems to be exposed",
|
||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "Es requereix l'extensió de <code>MB String</code>",
|
||||
"installation.issues.media": "La carpeta <code>/media</code> no existeix o no es pot escriure",
|
||||
"installation.issues.php": "Assegureu-vos d'utilitzar <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby requereix <code>Apache</code>, <code>Nginx</code> o <code>Caddy</code>",
|
||||
"installation.issues.sessions": "La carpeta <code>/site/sessions</code> no existeix o no es pot escriure",
|
||||
|
||||
"language": "Idioma",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "No reports",
|
||||
"status": "Estat",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "The content folder seems to be exposed",
|
||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "Je vyžadováno rozšíření<code>MB String</code>",
|
||||
"installation.issues.media": "Složka<code>/media</code> neexistuje, nebo nemá povolený zápis",
|
||||
"installation.issues.php": "Ujistěte se, že používáte<code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby vyžaduje<code>Apache</code>, <code>Nginx</code> nebo<code>Caddy</code>",
|
||||
"installation.issues.sessions": "Složka<code>/site/sessions</code> neexistuje, nebo nemá povolený zápis",
|
||||
|
||||
"language": "Jazyk",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Žádná hlášení",
|
||||
"status": "Stav",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "Složka content je zřejmě přístupná zvenčí",
|
||||
"system.issues.eol.kirby": "Instalovaná verze Kirby dosáhla konce životnosti a nebude již dále dostávat bezpečnostní aktualizace",
|
||||
"system.issues.eol.plugin": "Instalovaná verze doplňku { plugin } dosáhla konce životnosti a nebude již dále dostávat bezpečnostní aktualizace",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "<code>MB String</code> extension er påkrævet",
|
||||
"installation.issues.media": "<code>/media</code> mappen eksisterer ikke eller er ikke skrivbar",
|
||||
"installation.issues.php": "Sikre dig at der benyttes <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby kræver <code>Apache</code>, <code>Nginx</code> eller <code>Caddy</code>",
|
||||
"installation.issues.sessions": "/site/sessions mappen eksisterer ikke eller er ikke skrivbar",
|
||||
|
||||
"language": "Sprog",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "No reports",
|
||||
"status": "Status",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "The content folder seems to be exposed",
|
||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "Die <code>MB String</code> Erweiterung wird benötigt",
|
||||
"installation.issues.media": "Der <code>/media</code> Ordner ist nicht beschreibbar",
|
||||
"installation.issues.php": "Bitte verwende <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby benötigt <code>Apache</code>, <code>Nginx</code> or <code>Caddy</code>",
|
||||
"installation.issues.sessions": "<code>/site/sessions</code> ist nicht beschreibbar",
|
||||
|
||||
"language": "Sprache",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Keine Daten",
|
||||
"status": "Status",
|
||||
|
||||
"system.info.copy": "Info kopieren",
|
||||
"system.info.copied": "System Info wurde kopiert",
|
||||
"system.issues.content": "Der content Ordner scheint öffentlich zugänglich zu sein",
|
||||
"system.issues.eol.kirby": "Deine Kirby Installation ist veraltet und erhält keine weiteren Sicherheitsupdates",
|
||||
"system.issues.eol.plugin": "Deine Version des { plugin } Plugins ist veraltet und erhält keine weiteren Sicherheitsupdates",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "Απαιτείται η επέκταση <code>MB String</code> ",
|
||||
"installation.issues.media": "Ο φάκελος <code>/media</code> δεν υπάρχει ή δεν είναι εγγράψιμος",
|
||||
"installation.issues.php": "Βεβαιωθείτε ότι χρησιμοποιήτε <code>PHP 8+</code>",
|
||||
"installation.issues.server": "To Kirby απαιτεί <code>Apache</code>, <code>Nginx</code> ή <code>Caddy</code>",
|
||||
"installation.issues.sessions": "Ο φάκελος <code>/site/sessions</code> δεν υπάρχει ή δεν είναι εγγράψιμος",
|
||||
|
||||
"language": "\u0393\u03bb\u03ce\u03c3\u03c3\u03b1",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "No reports",
|
||||
"status": "Kατάσταση",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "The content folder seems to be exposed",
|
||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "The <code>MB String</code> extension is required",
|
||||
"installation.issues.media": "The <code>/media</code> folder does not exist or is not writable",
|
||||
"installation.issues.php": "Make sure to use <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby requires <code>Apache</code>, <code>Nginx</code> or <code>Caddy</code>",
|
||||
"installation.issues.sessions": "The <code>/site/sessions</code> folder does not exist or is not writable",
|
||||
|
||||
"language": "Language",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "No reports",
|
||||
"status": "Status",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "The content folder seems to be exposed",
|
||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "La kromprogramo <code>MB String</code> estas deviga",
|
||||
"installation.issues.media": "La dosierujo <code>/media</code> ne ekzistas, aũ ne estas skribebla",
|
||||
"installation.issues.php": "Nepre uzu <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby bezonas <code>Apache</code>, <code>Nginx</code> aŭ <code>Caddy</code>",
|
||||
"installation.issues.sessions": "La dosierujo <code>/site/sessions</code> ne ekzistas, aŭ ne estas skribebla",
|
||||
|
||||
"language": "Lingvo",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "No reports",
|
||||
"status": "Stato",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "The content folder seems to be exposed",
|
||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "Se requiere la extensión <code>MB String</code>.",
|
||||
"installation.issues.media": "La carpeta <code>/media</code> no existe o no posee permisos de escritura.",
|
||||
"installation.issues.php": "Asegurese de estar usando <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby requiere <code>Apache</code>, <code>Nginx</code>, <code>Caddy</code>",
|
||||
"installation.issues.sessions": "La carpeta <code>/site/sessions</code> no existe o no posee permisos de escritura.",
|
||||
|
||||
"language": "Idioma",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Sin informes",
|
||||
"status": "Estado",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "La carpeta content parece estar expuesta",
|
||||
"system.issues.eol.kirby": "La versión de Kirby que tienes instalada ha llegado al final de su vida útil y no recibirá más actualizaciones de seguridad.",
|
||||
"system.issues.eol.plugin": "Tu versión instalada del plugin { plugin } ha llegado al final de su vida útil y no recibirá más actualizaciones de seguridad.",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "La extension <code>MB String</code> es requerida",
|
||||
"installation.issues.media": "La carpeta <code>/media</code> no existe o no se puede escribir",
|
||||
"installation.issues.php": "Asegurese de estar usando <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby requiere <code>Apache</code>, <code>Nginx</code> o <code>Caddy</code>",
|
||||
"installation.issues.sessions": "La carpeta <code>/site/sessions</code> no existe o no se puede escribir",
|
||||
|
||||
"language": "Idioma",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Sin informes",
|
||||
"status": "Estado",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "La carpeta content parece estar expuesta",
|
||||
"system.issues.eol.kirby": "La versión de Kirby que tienes instalada ha llegado al final de su vida útil y no recibirá más actualizaciones de seguridad.",
|
||||
"system.issues.eol.plugin": "La versión del plugin { plugin } que tienes instalada ha llegado al final de su vida útil y no recibirá más actualizaciones de seguridad.",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "افزونه <code>MB String</code> مورد نیاز است",
|
||||
"installation.issues.media": "پوشه <code>/media</code> موجود نیست یا قابل نوشتن نیست",
|
||||
"installation.issues.php": "لطفا از پیاچپی 8 یا بالاتر استفاده کنید",
|
||||
"installation.issues.server": "کربی نیاز به <code>Apache</code>، <code>Nginx</code> یا <code>Caddy</code> دارد",
|
||||
"installation.issues.sessions": "پوشه <code>/site/sessions</code> وجود ندارد یا قابل نوشتن نیست",
|
||||
|
||||
"language": "\u0632\u0628\u0627\u0646",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "No reports",
|
||||
"status": "وضعیت",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "The content folder seems to be exposed",
|
||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "<code>MB String</code>-laajennos on pakollinen",
|
||||
"installation.issues.media": "<code>/media</code> -kansio ei ole olemassa tai siihen ei voi kirjoittaa",
|
||||
"installation.issues.php": "Varmista että <code>PHP 8+</code> on käytössä",
|
||||
"installation.issues.server": "Kirby tarvitsee jonkun seuraavista: <code>Apache</code>, <code>Nginx</code> tai <code>Caddy</code>",
|
||||
"installation.issues.sessions": "<code>/site/sessions</code> -kansio ei ole olemassa tai siihen ei voi kirjoittaa",
|
||||
|
||||
"language": "Kieli",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Ei raportteja",
|
||||
"status": "Tila",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "Content-kansio näyttäisi olevan julkinen",
|
||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "L’extension <code>MB String</code> est requise",
|
||||
"installation.issues.media": "Le dossier <code>/media</code> n’existe pas ou n’est pas accessible en écriture",
|
||||
"installation.issues.php": "Veuillez utiliser <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby requiert <code>Apache</code>, <code>Nginx</code> ou <code>Caddy</code>",
|
||||
"installation.issues.sessions": "Le dossier <code>/site/sessions</code> n’existe pas ou n’est pas accessible en écriture",
|
||||
|
||||
"language": "Langue",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Aucun rapport",
|
||||
"status": "Statut",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "Le dossier content semble exposé",
|
||||
"system.issues.eol.kirby": "La version de Kirby installée a atteint la fin de son cycle de vie et ne recevra plus de mises à jour de sécurité",
|
||||
"system.issues.eol.plugin": "La version du plugin { plugin } installée a atteint la fin de son cycle de vie et ne recevra plus de mises à jour de sécurité",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "Az <code>MB String</code> bővítmény engedélyezése szükséges",
|
||||
"installation.issues.media": "A <code>/media</code> mappa nem létezik vagy nem írható",
|
||||
"installation.issues.php": "Bizonyosodj meg róla, hogy az általad használt PHP-verzió <code>PHP 8+</code>",
|
||||
"installation.issues.server": "A Kirby az alábbi szervereken futtatható: <code>Apache</code>, <code>Nginx</code> vagy <code>Caddy</code>",
|
||||
"installation.issues.sessions": "A <code>/site/sessions</code> könyvtár nem létezik vagy nem írható",
|
||||
|
||||
"language": "Nyelv",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "No reports",
|
||||
"status": "Állapot",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "The content folder seems to be exposed",
|
||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "Ekstensi <code>MB String</code> diperlukan",
|
||||
"installation.issues.media": "Folder <code>/media</code> tidak ada atau tidak dapat ditulis",
|
||||
"installation.issues.php": "Pastikan Anda menggunakan <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby memerlukan <code>Apache</code>, <code>Nginx</code>, atau <code>Caddy</code>",
|
||||
"installation.issues.sessions": "Folder <code>/site/sessions</code> tidak ada atau tidak dapat ditulis",
|
||||
|
||||
"language": "Bahasa",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Tidak ada laporan",
|
||||
"status": "Status",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "Folder konten nampaknya terekspos",
|
||||
"system.issues.eol.kirby": "Versi instalasi Kirby Anda sudah mencapai akhir dan tidak akan lagi mendapat pembaruan keamanan",
|
||||
"system.issues.eol.plugin": "Versi instalasi plugin { plugin } Anda sudah mencapai akhir dan tidak akan lagi mendapatkan pembaruan keamanan",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "<code>MB String</code> er hér bráðnauðsynleg",
|
||||
"installation.issues.media": "<code>/media</code> mappan er annaðhvort ekki til eða er ekki skrifanleg",
|
||||
"installation.issues.php": "Notaðu <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby krefst <code>Apache</code>, <code>Nginx</code> eða <code>Caddy</code>",
|
||||
"installation.issues.sessions": "<code>/site/sessions</code> mappan er annaðhvort ekki til eða er ekki skrifanleg",
|
||||
|
||||
"language": "Tungumál",
|
||||
@@ -556,14 +555,14 @@
|
||||
"page.status.draft.description": "Þessi síða er uppkast og er aðeins sýnileg vefstjórum eða gegnum laumu tengil.",
|
||||
"page.status.listed": "Útgefin og listuð",
|
||||
"page.status.listed.description": "Síðan er útgefin og listuð.",
|
||||
"page.status.unlisted": "Útgefin",
|
||||
"page.status.unlisted": "Útgefin en ólistuð",
|
||||
"page.status.unlisted.description": "Síðan er útgefin en þó ólistuð.",
|
||||
|
||||
"pages": "Síður",
|
||||
"pages.empty": "Engar síður enn",
|
||||
"pages.status.draft": "Uppköst",
|
||||
"pages.status.listed": "Útgefnar og listaðar",
|
||||
"pages.status.unlisted": "Útgefnar",
|
||||
"pages.status.unlisted": "Útgefnar en ólistaðar",
|
||||
|
||||
"pagination.page": "Síða",
|
||||
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Engar skýrslur",
|
||||
"status": "Staða",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "Efnismappan virðist vera berskjölduð",
|
||||
"system.issues.eol.kirby": "Uppsett Kirby eintak þitt hefur runnið sitt skeið á enda og mun ekki verða uppfært framar",
|
||||
"system.issues.eol.plugin": "Uppsett eintak þitt af viðbótinni { plugin } hefur runnið sitt skeið á enda og mun ekki verða uppfærð framar",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "È necessaria l'estensione <code>MB String</code>",
|
||||
"installation.issues.media": "La cartella <code>/media</code> non esiste o non dispone dei permessi di scrittura",
|
||||
"installation.issues.php": "Assicurati di utilizzare <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby necessita di <code>Apache</code>, <code>Nginx</code> o <code>Caddy</code>",
|
||||
"installation.issues.sessions": "La cartella <code>/site/sessions</code>non esiste o non dispone dei permessi di scrittura",
|
||||
|
||||
"language": "Lingua",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Nessuna segnalazione",
|
||||
"status": "Stato",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "La cartella content sembra essere esposta",
|
||||
"system.issues.eol.kirby": "La versione di Kirby installata è giunta alla fine del suo ciclo di vita e non riceverà ulteriori aggiornamenti di sicurezza ",
|
||||
"system.issues.eol.plugin": "La versione installata del plugin { plugin } è giunta alla fine del suo ciclo di vita e non riceverà ulteriori aggiornamenti di sicurezza",
|
||||
|
@@ -317,16 +317,16 @@
|
||||
"field.blocks.quote.citation.placeholder": "출처",
|
||||
"field.blocks.text.name": "텍스트",
|
||||
"field.blocks.text.placeholder": "텍스트",
|
||||
"field.blocks.video.autoplay": "Autoplay",
|
||||
"field.blocks.video.autoplay": "자동 재생",
|
||||
"field.blocks.video.caption": "캡션",
|
||||
"field.blocks.video.controls": "Controls",
|
||||
"field.blocks.video.controls": "제어 도구",
|
||||
"field.blocks.video.location": "위치",
|
||||
"field.blocks.video.loop": "Loop",
|
||||
"field.blocks.video.muted": "Muted",
|
||||
"field.blocks.video.loop": "반복",
|
||||
"field.blocks.video.muted": "음소거",
|
||||
"field.blocks.video.name": "영상",
|
||||
"field.blocks.video.placeholder": "영상 URL 입력",
|
||||
"field.blocks.video.poster": "Poster",
|
||||
"field.blocks.video.preload": "Preload",
|
||||
"field.blocks.video.poster": "대표 이미지",
|
||||
"field.blocks.video.preload": "미리 로드",
|
||||
"field.blocks.video.url.label": "영상 URL",
|
||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||
|
||||
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "<code>MB String</code> 확장 모듈이 필요합니다.",
|
||||
"installation.issues.media": "<code>/media</code> 폴더의 쓰기 권한을 확인하세요.",
|
||||
"installation.issues.php": "<code>PHP</code> 버전이 8 이상인지 확인하세요.",
|
||||
"installation.issues.server": "Kirby를 실행하려면 <code>Apache</code>, <code>Nginx</code>, 또는 <code>Caddy</code>가 필요합니다.",
|
||||
"installation.issues.sessions": "<code>/site/sessions</code> 폴더의 쓰기 권한을 확인하세요.",
|
||||
|
||||
"language": "\uc5b8\uc5b4",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "관련 기록이 없습니다.",
|
||||
"status": "상태",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "<code>/content</code> 폴더의 권한을 확인하세요.",
|
||||
"system.issues.eol.kirby": "설치된 Kirby 버전이 만료되었습니다. 더 이상 보안 업데이트를 받을 수 없습니다.",
|
||||
"system.issues.eol.plugin": "설치된 플러그인({plugin}의 지원이 종료되었습니다. 더 이상 보안 업데이트를 받을 수 없습니다.",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "Plėtinys <code>MB String</code> yra privalomas",
|
||||
"installation.issues.media": "Katalogas <code>/media</code> neegzistuoja arba neturi įrašymo teisių",
|
||||
"installation.issues.php": "Įsitikinkite, kad naudojama <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby reikalauja <code>Apache</code>, <code>Nginx</code> arba <code>Caddy</code>",
|
||||
"installation.issues.sessions": "Katalogas <code>/site/sessions</code> neegzistuoja arba neturi įrašymo teisių",
|
||||
|
||||
"language": "Kalba",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Nėra pranešimų",
|
||||
"status": "Statusas",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "The content folder seems to be exposed",
|
||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "Utvidelsen <code>MB String</code> er nødvendig",
|
||||
"installation.issues.media": "Mappen <code>/media</code> eksisterer ikke eller er ikke skrivbar",
|
||||
"installation.issues.php": "Pass på at du bruker <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby krever <code>Apache</code>, <code>Nginx</code> eller <code>Caddy</code>",
|
||||
"installation.issues.sessions": "Mappen <code>/site/sessions</code> eksisterer ikke eller er ikke skrivbar",
|
||||
|
||||
"language": "Spr\u00e5k",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Ingen rapporter",
|
||||
"status": "Status",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "content-mappen ser ut til å være eksponert",
|
||||
"system.issues.eol.kirby": "Din installerte Kirby versjon har nådd sitt end-of-life, og vil ikke lenger motta sikkerhetsoppdateringer",
|
||||
"system.issues.eol.plugin": "Din installerte plugin { plugin } har nådd sitt end-of-life og vil ikke lenger motta sikkerhetsoppdateringer",
|
||||
|
@@ -114,7 +114,7 @@
|
||||
"error.file.minheight": "De hoogte van de afbeelding moet minimaal {height} pixels zijn",
|
||||
"error.file.minsize": "Het bestand is te klein",
|
||||
"error.file.minwidth": "De breedte van de afbeelding moet minimaal {width} pixels zijn",
|
||||
"error.file.name.unique": "The filename must be unique",
|
||||
"error.file.name.unique": "De bestandsnaam moet uniek zijn",
|
||||
"error.file.name.missing": "De bestandsnaam mag niet leeg zijn",
|
||||
"error.file.notFound": "Het bestand kan niet worden gevonden",
|
||||
"error.file.orientation": "De oriëntatie van de afbeelding moet \"{orientation}\" zijn",
|
||||
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "De <code>MB String</code> extensie is verplicht",
|
||||
"installation.issues.media": "De map <code>/media</code>bestaat niet of heeft geen schrijfrechten",
|
||||
"installation.issues.php": "Gebruik <code>PHP8+</code>",
|
||||
"installation.issues.server": "Kirby vereist <code>Apache</code>, <code>Nginx</code> of <code>Caddy</code>",
|
||||
"installation.issues.sessions": "De map <code>/site/sessions</code> bestaat niet of heeft geen schrijfrechten",
|
||||
|
||||
"language": "Taal",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Geen rapporten",
|
||||
"status": "Status",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "De content map lijkt zichtbaar te zijn",
|
||||
"system.issues.eol.kirby": "De geïnstalleerde Kirby versie is niet meer actueel en zal geen verdere beveiligingsupdates meer ontvangen.",
|
||||
"system.issues.eol.plugin": "De geïnstalleerde versie van plugin { plugin } is niet meer actueel en zal geen verdere beveiligingsupdates meer ontvangen.",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "Wymagane jest rozszerzenie <code>MB String</code>",
|
||||
"installation.issues.media": "Folder <code>/media</code> nie istnieje lub nie ma uprawnień do zapisu",
|
||||
"installation.issues.php": "Upewnij się, że używasz <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby wymaga <code>Apache</code>, <code>Nginx</code> lub <code>Caddy</code>",
|
||||
"installation.issues.sessions": "Folder <code>/site/sessions</code> nie istnieje lub nie ma uprawnień do zapisu",
|
||||
|
||||
"language": "J\u0119zyk",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Brak raportów",
|
||||
"status": "Status",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "Zdaje się, że folder „content” jest wystawiony na publiczny dostęp",
|
||||
"system.issues.eol.kirby": "Twoja zainstalowana wersja Kirby osiągnęła koniec okresu wsparcia i nie będzie otrzymywać dalszych aktualizacji zabezpieczeń",
|
||||
"system.issues.eol.plugin": "Twoja zainstalowana wersja wtyczki { plugin } osiągnęła koniec okresu wsparcia i nie będzie otrzymywać dalszych aktualizacji zabezpieczeń",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "A extensão <code>MB String</code> é necessária",
|
||||
"installation.issues.media": "A pasta <code>/media</code> não existe ou não possui permissão de escrita",
|
||||
"installation.issues.php": "Certifique-se que você está usando o <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby necessita do <code>Apache</code>, <code>Nginx</code> ou <code>Caddy</code>",
|
||||
"installation.issues.sessions": "A pasta <code>/site/sessions</code> não existe ou não possui permissão de escrita",
|
||||
|
||||
"language": "Idioma",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Nenhum relatório",
|
||||
"status": "Estado",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "A pasta \"content\" parece não estar protegida",
|
||||
"system.issues.eol.kirby": "A versão instalada do Kirby chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
|
||||
"system.issues.eol.plugin": "A versão instalada do plugin {plugin} chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "A extensão <code>MB String</code> é necessária",
|
||||
"installation.issues.media": "A pasta <code>/media</code> não existe ou não tem permissão de escrita",
|
||||
"installation.issues.php": "Certifique-se que está a usar o <code>PHP 8+</code>",
|
||||
"installation.issues.server": "O Kirby necessita do <code>Apache</code>, <code>Nginx</code> ou <code>Caddy</code>",
|
||||
"installation.issues.sessions": "A pasta <code>/site/sessions</code> não existe ou não tem permissão de escrita",
|
||||
|
||||
"language": "Idioma",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Sem relatórios",
|
||||
"status": "Estado",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "A pasta content parece não estar protegida",
|
||||
"system.issues.eol.kirby": "A versão instalada do Kirby chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
|
||||
"system.issues.eol.plugin": "A versão instalada do plugin { plugin } chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
|
||||
|
@@ -3,7 +3,7 @@
|
||||
"account.delete": "Șterge-ți contul",
|
||||
"account.delete.confirm": "Chiar vrei să îți ștergi contul? Vei fi deconectat imediat. Contul nu poate fi recuperat.",
|
||||
|
||||
"activate": "Activați",
|
||||
"activate": "Activează",
|
||||
"add": "Adaug\u0103",
|
||||
"alpha": "Alfa",
|
||||
"author": "Autor",
|
||||
@@ -20,7 +20,7 @@
|
||||
"coordinates": "Coordonate",
|
||||
"copy": "Copiază",
|
||||
"copy.all": "Copiază toate",
|
||||
"copy.success": "copiat {count}!",
|
||||
"copy.success": "Copiat {count}!",
|
||||
"create": "Creează",
|
||||
"custom": "Personalizat",
|
||||
|
||||
@@ -63,17 +63,17 @@
|
||||
"email": "E-mail",
|
||||
"email.placeholder": "email@exemplu.com",
|
||||
|
||||
"enter": "Enter",
|
||||
"enter": "Introdu",
|
||||
"entries": "Întregistrări",
|
||||
"entry": "Înregistrare",
|
||||
|
||||
"environment": "Mediu",
|
||||
|
||||
"error": "Eroare",
|
||||
"error.access.code": "Cod invalid",
|
||||
"error.access.login": "Conectare invalidă",
|
||||
"error.access.panel": "Nu aveți voie să accesați panoul",
|
||||
"error.access.view": "Nu vi se permite să accesați această parte a panoului",
|
||||
"error.access.code": "Cod nevalid",
|
||||
"error.access.login": "Conectare nevalidă",
|
||||
"error.access.panel": "Nu ai voie să accesezi panoul",
|
||||
"error.access.view": "Nu ai voie să accesezi această parte a panoului",
|
||||
|
||||
"error.avatar.create.fail": "Imaginea de profil nu a putut fi încărcată",
|
||||
"error.avatar.delete.fail": "Imaginea de profil nu a putut fi ștearsă",
|
||||
@@ -88,11 +88,11 @@
|
||||
"error.blocks.min.singular": "Trebuie să adaugi cel puțin un bloc",
|
||||
"error.blocks.validation": "Există o eroare la câmpul \"{field}\" în blocul {index} care folosește tipul de bloc \"{fieldset}\"",
|
||||
|
||||
"error.cache.type.invalid": "Tipul de cache \"{type}\" este invalid",
|
||||
"error.cache.type.invalid": "Tipul de cache \"{type}\" este nevalid",
|
||||
|
||||
"error.email.preset.notFound": "Preset-ul de e-mail \"{name}\" nu a fost găsit",
|
||||
|
||||
"error.field.converter.invalid": "Convertorul \"{converter}\" invalid",
|
||||
"error.field.converter.invalid": "Convertorul \"{converter}\" nu este valid",
|
||||
"error.field.type.missing": "Câmpul \"{ name }\": Tipul de câmp \"{ type }\" nu există",
|
||||
|
||||
"error.file.changeName.empty": "Numele nu trebuie să fie gol",
|
||||
@@ -102,14 +102,14 @@
|
||||
|
||||
"error.file.duplicate": "Există deja un fișier cu numele \"{filename}\"",
|
||||
"error.file.extension.forbidden": "Extensia de fișier \"{extension}\" nu este permisă",
|
||||
"error.file.extension.invalid": "Extensie de fișier invalidă: {extension}",
|
||||
"error.file.extension.invalid": "Extensie de fișier nevalidă: {extension}",
|
||||
"error.file.extension.missing": "Extensia de fișier pentru \"{filename}\" lipsește",
|
||||
"error.file.maxheight": "Înălțimea imaginii nu poate depăși {height} pixeli",
|
||||
"error.file.maxsize": "Fișierul este prea mare",
|
||||
"error.file.maxwidth": "Lățimea imaginii nu poate depăși {width} pixeli",
|
||||
"error.file.mime.differs": "Fișierul încărcat trebuie să aibă același tip mime \"{mime}\"",
|
||||
"error.file.mime.forbidden": "Tipul media \"{mime}\" nu este permis",
|
||||
"error.file.mime.invalid": "Tip mime invalid: {mime}",
|
||||
"error.file.mime.invalid": "Tip mime nevalid: {mime}",
|
||||
"error.file.mime.missing": "Tipul media pentru \"{filename}\" nu poate fi detectat",
|
||||
"error.file.minheight": "Imaginea trebuie să aibă înălțimea de minim {height} pixeli",
|
||||
"error.file.minsize": "Fișierul este prea mic",
|
||||
@@ -118,8 +118,8 @@
|
||||
"error.file.name.missing": "Numele fișierului nu poate fi gol",
|
||||
"error.file.notFound": "Fișierul \"{filename}\" nu a fost găsit",
|
||||
"error.file.orientation": "Orientarea imaginii trebuie să fie \"{orientation}\"",
|
||||
"error.file.type.forbidden": "Nu ai permisiunea să încarci fișiere {type}",
|
||||
"error.file.type.invalid": "Tip invalid de fișier: {type}",
|
||||
"error.file.type.forbidden": "Nu ai voie să încarci fișiere {type}",
|
||||
"error.file.type.invalid": "Tip nevalid de fișier: {type}",
|
||||
"error.file.undefined": "Fișierul nu a fost găsit",
|
||||
|
||||
"error.form.incomplete": "Te rog repară toate erorile din formular…",
|
||||
@@ -138,7 +138,7 @@
|
||||
"error.license.format": "Te rog introdu un cod de licență valid",
|
||||
"error.license.verification": "Licența nu a putut fi verificată",
|
||||
|
||||
"error.login.totp.confirm.invalid": "Cod invalid",
|
||||
"error.login.totp.confirm.invalid": "Cod nevalid",
|
||||
"error.login.totp.confirm.missing": "Vă rugăm să introduceți codul curent",
|
||||
|
||||
"error.object.validation": "Există o eroare la câmpul \"{label}\":\n{message}",
|
||||
@@ -148,7 +148,7 @@
|
||||
"error.page.changeSlug.permission": "Nu ai voie să schimbi apendicele URL pentru \"{slug}\"",
|
||||
"error.page.changeSlug.reserved": "Calea paginilor de la primul nivel nu poate să înceapă cu \"{path}\"",
|
||||
"error.page.changeStatus.incomplete": "Pagina are erori și nu poate fi publicată",
|
||||
"error.page.changeStatus.permission": "Statusul acestei pagini nu poate fi schimbat",
|
||||
"error.page.changeStatus.permission": "Starea acestei pagini nu poate fi schimbată",
|
||||
"error.page.changeStatus.toDraft.invalid": "Pagina \"{slug}\" nu poate fi schimbată în ciornă",
|
||||
"error.page.changeTemplate.invalid": "Șablonul paginii \"{slug}\" nu poate fi schimbat",
|
||||
"error.page.changeTemplate.permission": "Nu ai voie să schimbi șablonul pentru \"{slug}\"",
|
||||
@@ -162,7 +162,7 @@
|
||||
"error.page.draft.duplicate": "Există deja o ciornă cu apendicele URL \"{slug}\"",
|
||||
"error.page.duplicate": "Există deja o pagină cu apendicele URL \"{slug}\"",
|
||||
"error.page.duplicate.permission": "Nu ai voie să duplici \"{slug}\"",
|
||||
"error.page.move.ancestor": "Pagina nu poate fi mutată în ea însăși.",
|
||||
"error.page.move.ancestor": "Pagina nu poate fi mutată în ea însăși",
|
||||
"error.page.move.directory": "Directorul de pagini nu poate fi mutat",
|
||||
"error.page.move.duplicate": "Există deja o sub-pagină cu apendicele URL \"{slug}\"",
|
||||
"error.page.move.notFound": "Pagina mutată nu a fost găsită",
|
||||
@@ -173,7 +173,7 @@
|
||||
"error.page.slug.invalid": "Te rog introdu un apendice URL valid",
|
||||
"error.page.slug.maxlength": "Lungimea slug-ului nu poate depăși \"{length}\"",
|
||||
"error.page.sort.permission": "Pagina \"{slug}\" nu poate fi sortată",
|
||||
"error.page.status.invalid": "Te rog stabilește un status valid pentru pagină",
|
||||
"error.page.status.invalid": "Te rog stabilește o stare validă pentru pagină",
|
||||
"error.page.undefined": "Pagina nu a fost găsită",
|
||||
"error.page.update.permission": "Nu ai voie să actualizezi \"{slug}\"",
|
||||
|
||||
@@ -274,7 +274,7 @@
|
||||
"expand": "Extinde",
|
||||
"expand.all": "Extinde toate",
|
||||
|
||||
"field.invalid": "Câmpul este invalid",
|
||||
"field.invalid": "Câmpul este nevalid",
|
||||
"field.required": "Acest câmp este necesar",
|
||||
"field.blocks.changeType": "Schimbă tipul",
|
||||
"field.blocks.code.name": "Cod",
|
||||
@@ -317,16 +317,16 @@
|
||||
"field.blocks.quote.citation.placeholder": "de …",
|
||||
"field.blocks.text.name": "Text",
|
||||
"field.blocks.text.placeholder": "Text …",
|
||||
"field.blocks.video.autoplay": "Autoplay",
|
||||
"field.blocks.video.autoplay": "Autoredare",
|
||||
"field.blocks.video.caption": "Etichetă",
|
||||
"field.blocks.video.controls": "Controls",
|
||||
"field.blocks.video.controls": "Controale",
|
||||
"field.blocks.video.location": "Localizare",
|
||||
"field.blocks.video.loop": "Loop",
|
||||
"field.blocks.video.muted": "Muted",
|
||||
"field.blocks.video.loop": "În buclă",
|
||||
"field.blocks.video.muted": "Fără sonor",
|
||||
"field.blocks.video.name": "Video",
|
||||
"field.blocks.video.placeholder": "Introdu URL-ul video-ului",
|
||||
"field.blocks.video.poster": "Poster",
|
||||
"field.blocks.video.preload": "Preload",
|
||||
"field.blocks.video.preload": "Preîncarcă",
|
||||
"field.blocks.video.url.label": "URL-ul video-ului",
|
||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||
|
||||
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "Extensia <code>MB String</code> este necesară",
|
||||
"installation.issues.media": "Directorul <code>/media</code> nu există sau nu are permisiuni de scriere",
|
||||
"installation.issues.php": "Asigură-te că folosești <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby are nevoie de <code>Apache</code>, <code>Nginx</code> sau <code>Caddy</code>",
|
||||
"installation.issues.sessions": "Directorul <code>/site/sessions</code> folder nu există sau nu are permisiuni de scriere",
|
||||
|
||||
"language": "Limba",
|
||||
@@ -537,9 +536,9 @@
|
||||
"page.blueprint": "Această pagină nu are încă un Blueprint. Poți să-l definești în <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
|
||||
"page.changeSlug": "Schimbă URL-ul",
|
||||
"page.changeSlug.fromTitle": "Creează din titlu",
|
||||
"page.changeStatus": "Schimbă statusul",
|
||||
"page.changeStatus": "Schimbă starea",
|
||||
"page.changeStatus.position": "Te rog alege o poziție",
|
||||
"page.changeStatus.select": "Alege un status nou",
|
||||
"page.changeStatus.select": "Alege o stare nouă",
|
||||
"page.changeTemplate": "Schimbă șablonul",
|
||||
"page.changeTemplate.notice": "Schimbarea șablonului paginii va înlătura conținutul câmpurilor care nu se potrivesc ca tip. Folosește cu prudență.",
|
||||
"page.create": "Creează ca {status}",
|
||||
@@ -551,7 +550,7 @@
|
||||
"page.duplicate.pages": "Copiază paginile",
|
||||
"page.move": "Mută pagina",
|
||||
"page.sort": "Schimbă poziția",
|
||||
"page.status": "Status",
|
||||
"page.status": "Stare",
|
||||
"page.status.draft": "Ciornă",
|
||||
"page.status.draft.description": "Pagina este în modul ciornă și va fi vizibilă doar editorilor conectați sau printr-un link secret",
|
||||
"page.status.listed": "Publică",
|
||||
@@ -600,7 +599,7 @@
|
||||
"search.all": "Afișați toate {count} rezultatele",
|
||||
"search.results.none": "Niciun rezultat",
|
||||
|
||||
"section.invalid": "Secțiunea este invalidă",
|
||||
"section.invalid": "Secțiunea este nevalidă",
|
||||
"section.required": "Această secțiune este necesară",
|
||||
|
||||
"security": "Securitate",
|
||||
@@ -616,8 +615,10 @@
|
||||
"split": "Împarte",
|
||||
|
||||
"stats.empty": "Niciun raport",
|
||||
"status": "Status",
|
||||
"status": "Stare",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "Directorul de conținut pare să fie expus",
|
||||
"system.issues.eol.kirby": "Versiunea instalată de Kirby a ajuns la sfârșitul vieții utile și nu va mai primi actualizări de securitate.",
|
||||
"system.issues.eol.plugin": "Versiunea instalată a plugin-ului { plugin } a ajuns la sfârșitul vieții utile și nu va mai primi actualizări de securitate.",
|
||||
@@ -629,7 +630,7 @@
|
||||
"system.issues.site": "Directorul site pare să fie expus",
|
||||
"system.issues.vulnerability.kirby": "Instalarea ta ar putea fi afectată de următoarea vulnerabilitate ({ severity } severity): { description }",
|
||||
"system.issues.vulnerability.plugin": "Instalarea ta ar putea fi afectată de următoarea vulnerabilitate în plugin-ul { plugin } ({ severity } severity): { description }",
|
||||
"system.updateStatus": "Status actualizare",
|
||||
"system.updateStatus": "Starea actualizării",
|
||||
"system.updateStatus.error": "Nu am putut căuta actualizări",
|
||||
"system.updateStatus.not-vulnerable": "Nicio vulnerabilitate cunoscută",
|
||||
"system.updateStatus.security-update": "Actualizare gratuită de securitate { version } disponibilă",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "Расширение <code>MB String</code> необходимо",
|
||||
"installation.issues.media": "Каталог <code>/media</code> не существует или нет прав записи",
|
||||
"installation.issues.php": "Убедитесь, что используется <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby требует <code>Apache</code>, <code>Nginx</code> или <code>Caddy</code> ",
|
||||
"installation.issues.sessions": "Каталог <code>/site/sessions</code> не существует или нет прав записи",
|
||||
|
||||
"language": "\u042f\u0437\u044b\u043a",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Статистики нет",
|
||||
"status": "Статус",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "Похоже, к папке content есть несанкционированный доступ",
|
||||
"system.issues.eol.kirby": "Срок службы установленной вами версии Kirby истек, и она больше не будет получать обновления для системы безопасности",
|
||||
"system.issues.eol.plugin": "Срок службы установленной вами версии плагина { plugin } истек, и он не будет получать дальнейших обновлений для системы безопасности",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "<code>MB String</code> rozšírenie je povinné",
|
||||
"installation.issues.media": "Priečinok <code>/media</code> neexistuje alebo nie je nastavený ako zapisovateľný",
|
||||
"installation.issues.php": "Uistite sa, že používate <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby vyžaduje <code>Apache</code>, <code>Nginx</code> alebo <code>Caddy</code>",
|
||||
"installation.issues.sessions": "Priečinok <code>/site/sessions</code> neexistuje alebo nie je nastavený ako zapisovateľný",
|
||||
|
||||
"language": "Jazyk",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "No reports",
|
||||
"status": "Status",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "The content folder seems to be exposed",
|
||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||
|
@@ -135,7 +135,7 @@
|
||||
|
||||
"error.license.domain": "Domänen för licensen saknas",
|
||||
"error.license.email": "Ange en giltig e-postadress",
|
||||
"error.license.format": "Please enter a valid license code",
|
||||
"error.license.format": "Ange en giltig licenskod",
|
||||
"error.license.verification": "Licensen kunde inte verifieras",
|
||||
|
||||
"error.login.totp.confirm.invalid": "Ogiltig kod",
|
||||
@@ -317,16 +317,16 @@
|
||||
"field.blocks.quote.citation.placeholder": "av …",
|
||||
"field.blocks.text.name": "Text",
|
||||
"field.blocks.text.placeholder": "Text …",
|
||||
"field.blocks.video.autoplay": "Autoplay",
|
||||
"field.blocks.video.autoplay": "Autospela",
|
||||
"field.blocks.video.caption": "Rubrik",
|
||||
"field.blocks.video.controls": "Controls",
|
||||
"field.blocks.video.controls": "Kontroller",
|
||||
"field.blocks.video.location": "Plats",
|
||||
"field.blocks.video.loop": "Loop",
|
||||
"field.blocks.video.muted": "Muted",
|
||||
"field.blocks.video.loop": "Loopa",
|
||||
"field.blocks.video.muted": "Ljud av",
|
||||
"field.blocks.video.name": "Video",
|
||||
"field.blocks.video.placeholder": "Ange en URL till en video",
|
||||
"field.blocks.video.poster": "Poster",
|
||||
"field.blocks.video.preload": "Preload",
|
||||
"field.blocks.video.poster": "Stillbild",
|
||||
"field.blocks.video.preload": "Förladda",
|
||||
"field.blocks.video.url.label": "Video-URL",
|
||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||
|
||||
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "Tillägget <code>MB String</code> krävs",
|
||||
"installation.issues.media": "Mappen <code>/media</code> finns inte eller är inte skrivbar",
|
||||
"installation.issues.php": "Se till att du använder <code>PHP 8+</code>",
|
||||
"installation.issues.server": "Kirby kräver <code>Apache</code>, <code>Nginx</code> eller <code>Caddy</code>",
|
||||
"installation.issues.sessions": "Mappen <code>/site/sessions</code> finns inte eller är inte skrivbar",
|
||||
|
||||
"language": "Spr\u00e5k",
|
||||
@@ -432,7 +431,7 @@
|
||||
"license.code.label": "Ange din licenskod",
|
||||
"license.status.active.info": "Inkluderar nya större versioner fram till {date}",
|
||||
"license.status.active.label": "Giltig licens",
|
||||
"license.status.demo.info": "This is a demo installation",
|
||||
"license.status.demo.info": "Detta är en demoinstallation",
|
||||
"license.status.demo.label": "Demo",
|
||||
"license.status.inactive.info": "Förnya licensen för att uppdatera till nyare större versioner",
|
||||
"license.status.inactive.label": "Inga nya större versioner",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Inga rapporter",
|
||||
"status": "Status",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "Mappen content verkar vara exponerad",
|
||||
"system.issues.eol.kirby": "Din installerade Kirby-version har nått slutet av sin livscykel och kommer inte att få fler säkerhetsuppdateringar",
|
||||
"system.issues.eol.plugin": "Den installerade versionen av tillägget { plugin } har nått slutet på sin livscykel och kommer inte att få fler säkerhetsuppdateringar.",
|
||||
|
@@ -386,7 +386,6 @@
|
||||
"installation.issues.mbstring": "<code>MB String</code> eklentisi gerekli",
|
||||
"installation.issues.media": "<code>/media</code> klasörü yok yada yazılamaz",
|
||||
"installation.issues.php": "<code>PHP 8+</code> kullandığınızdan emin olun. ",
|
||||
"installation.issues.server": "Kirby <code>Apache</code>, <code>Nginx</code> veya <code>Caddy</code> gerektirir",
|
||||
"installation.issues.sessions": "<code>/site/sessions</code> klasörü mevcut değil veya yazılabilir değil",
|
||||
|
||||
"language": "Dil",
|
||||
@@ -618,6 +617,8 @@
|
||||
"stats.empty": "Rapor yok",
|
||||
"status": "Durum",
|
||||
|
||||
"system.info.copy": "Copy info",
|
||||
"system.info.copied": "System info copied",
|
||||
"system.issues.content": "İçerik klasörü açığa çıkmış görünüyor",
|
||||
"system.issues.eol.kirby": "Yüklü Kirby sürümünüz kullanım ömrünün sonuna ulaştı ve daha fazla güvenlik güncellemesi almayacak",
|
||||
"system.issues.eol.plugin": "{ plugin } eklentisinin yüklü sürümü kullanım ömrünün sonuna ulaştı ve daha fazla güvenlik güncellemesi almayacak",
|
||||
|
2
kirby/panel/dist/css/style.min.css
vendored
2
kirby/panel/dist/css/style.min.css
vendored
File diff suppressed because one or more lines are too long
25
kirby/panel/dist/img/icons.svg
vendored
25
kirby/panel/dist/img/icons.svg
vendored
@@ -406,24 +406,16 @@
|
||||
<path d="M10 6V8H5V19H16V14H18V20C18 20.5523 17.5523 21 17 21H4C3.44772 21 3 20.5523 3 20V7C3 6.44772 3.44772 6 4 6H10ZM21 3V11H19L18.9999 6.413L11.2071 14.2071L9.79289 12.7929L17.5849 5H13V3H21Z"/>
|
||||
</symbol>
|
||||
<symbol id="icon-order-alpha-asc" viewBox="0 0 24 24">
|
||||
<path d="M 9.336546 1 L 12.936545 10 L 11.173365 10 L 10.190728 7.545454 L 6.844365 7.545454 L 5.863364 10 L 4.101 10 L 7.700182 1 Z M 8.518364 3.360619 L 7.498092 5.90909 L 9.537002 5.90909 Z"/>
|
||||
<path d="M 12 13 L 12 14.75 L 7.338525 20 L 12 20 L 12 21.75 L 5 21.75 L 5 20 L 9.6599 14.75 L 5 14.75 L 5 13 Z"/>
|
||||
<path d="M 20 4 L 20 16 L 23 16 L 19 21 L 15 16 L 18 16 L 18 4 Z"/>
|
||||
<path d="M4.86885 11H2.6665L6 3H8L11.3334 11H9.13113L8.7213 10H5.27869L4.86885 11ZM6.09836 8H7.90163L7 5.8L6.09836 8ZM18.9999 16V3H16.9999V16H13.9999L17.9999 21L21.9999 16H18.9999ZM10.9999 13H2.99992V15H7.85414L2.99992 19V21H10.9999V19H6.14605L10.9999 15V13Z" />
|
||||
</symbol>
|
||||
<symbol id="icon-order-alpha-desc" viewBox="0 0 24 24">
|
||||
<path d="M 9.336546 1 L 12.936545 10 L 11.173365 10 L 10.190728 7.545454 L 6.844365 7.545454 L 5.863364 10 L 4.101 10 L 7.700182 1 Z M 8.518364 3.360619 L 7.498092 5.90909 L 9.537002 5.90909 Z"/>
|
||||
<path d="M 12 13 L 12 14.75 L 7.338525 20 L 12 20 L 12 21.75 L 5 21.75 L 5 20 L 9.6599 14.75 L 5 14.75 L 5 13 Z"/>
|
||||
<path d="M 19 3 L 23 8 L 20 8 L 20 20 L 18 20 L 18 8 L 15 8 Z"/>
|
||||
<path d="M4.86885 11H2.6665L6 3H8L11.3334 11H9.13113L8.7213 10H5.27869L4.86885 11ZM6.09836 8H7.90163L7 5.8L6.09836 8ZM21.9999 8L17.9999 3L13.9999 8H16.9999V21H18.9999V8H21.9999ZM10.9999 13H2.99992V15H7.85414L2.99992 19V21H10.9999V19H6.14605L10.9999 15V13Z" />
|
||||
</symbol>
|
||||
<symbol id="icon-order-num-asc" viewBox="0 0 24 24">
|
||||
<path d="M 6.6224 22 L 8.7008 18.4 C 6.932719 18.4 5.5 16.967279 5.5 15.2 C 5.5 13.432719 6.932719 12 8.7 12 C 10.46728 12 11.9 13.432719 11.9 15.2 C 11.9 15.78912 11.7408 16.34104 11.46312 16.815121 L 8.4696 22 Z M 8.7 16.799999 C 9.583681 16.799999 10.3 16.083679 10.3 15.2 C 10.3 14.316319 9.583681 13.6 8.7 13.6 C 7.816319 13.6 7.1 14.316319 7.1 15.2 C 7.1 16.083679 7.816319 16.799999 8.7 16.799999 Z"/>
|
||||
<path d="M 10 1 L 10 9.998876 L 8.500187 9.998876 L 8.499813 2.652794 L 7 3.054743 L 7 1.502438 L 8.87514 1 Z"/>
|
||||
<path d="M 20 4 L 20 16 L 23 16 L 19 21 L 15 16 L 18 16 L 18 4 Z"/>
|
||||
<path d="M9.00054 3L9 11H7V5.41L5 5.9485V3.61978L7.31304 3H9.00054ZM19 3V16H22L18 21L14 16H17V3H19ZM11 15.5C11 16.0645 10.8441 16.5926 10.5729 17.0436L8.28871 21H5.97931L7.45156 18.45C6.05661 18.1923 5 16.9695 5 15.5C5 13.8431 6.34315 12.5 8 12.5C9.65685 12.5 11 13.8431 11 15.5ZM8 16.5C8.55228 16.5 9 16.0523 9 15.5C9 14.9477 8.55228 14.5 8 14.5C7.44772 14.5 7 14.9477 7 15.5C7 16.0523 7.44772 16.5 8 16.5Z" />
|
||||
</symbol>
|
||||
<symbol id="icon-order-num-desc" viewBox="0 0 24 24">
|
||||
<path d="M 6.6224 22 L 8.7008 18.4 C 6.932719 18.4 5.5 16.967279 5.5 15.2 C 5.5 13.432719 6.932719 12 8.7 12 C 10.46728 12 11.9 13.432719 11.9 15.2 C 11.9 15.78912 11.7408 16.34104 11.46312 16.815121 L 8.4696 22 Z M 8.7 16.799999 C 9.583681 16.799999 10.3 16.083679 10.3 15.2 C 10.3 14.316319 9.583681 13.6 8.7 13.6 C 7.816319 13.6 7.1 14.316319 7.1 15.2 C 7.1 16.083679 7.816319 16.799999 8.7 16.799999 Z"/>
|
||||
<path d="M 10 1 L 10 9.998876 L 8.500187 9.998876 L 8.499813 2.652794 L 7 3.054743 L 7 1.502438 L 8.87514 1 Z"/>
|
||||
<path d="M 19 3 L 23 8 L 20 8 L 20 20 L 18 20 L 18 8 L 15 8 Z"/>
|
||||
<path d="M9 11L9.00054 3H7.31304L5 3.61978V5.9485L7 5.41V11H9ZM22 8L18 3L14 8H17V21H19V8H22ZM8 16.5C7.44772 16.5 7 16.0523 7 15.5C7 14.9477 7.44772 14.5 8 14.5C8.55228 14.5 9 14.9477 9 15.5C9 16.0523 8.55228 16.5 8 16.5ZM10.5729 17.0436C10.8441 16.5926 11 16.0645 11 15.5C11 13.8431 9.65685 12.5 8 12.5C6.34315 12.5 5 13.8431 5 15.5C5 16.9695 6.05661 18.1923 7.45156 18.45L5.97931 21H8.28871L10.5729 17.0436Z" />
|
||||
</symbol>
|
||||
<symbol id="icon-page" viewBox="0 0 24 24">
|
||||
<use href="#icon-document" />
|
||||
@@ -578,6 +570,15 @@
|
||||
</symbol>
|
||||
<symbol id="icon-text-right" viewBox="0 0 24 24">
|
||||
<path d="M3 4H21V6H3V4ZM7 19H21V21H7V19ZM3 14H21V16H3V14ZM7 9H21V11H7V9Z"/>
|
||||
</symbol>
|
||||
<symbol id="icon-text-top" viewBox="0 0 24 24">
|
||||
<path d="M3 3H21V5H3V3ZM8 11V21H6V11H3L7 7L11 11H8ZM18 11V21H16V11H13L17 7L21 11H18Z"/>
|
||||
</symbol>
|
||||
<symbol id="icon-text-middle" viewBox="0 0 24 24">
|
||||
<path d="M3 11H21V13H3V11ZM18 18V21H16V18H13L17 14L21 18H18ZM8 18V21H6V18H3L7 14L11 18H8ZM18 6H21L17 10L13 6H16V3H18V6ZM8 6H11L7 10L3 6H6V3H8V6Z" />
|
||||
</symbol>
|
||||
<symbol id="icon-text-bottom" viewBox="0 0 24 24">
|
||||
<path d="M3 19H21V21H3V19ZM8 13H11L7 17L3 13H6V3H8V13ZM18 13H21L17 17L13 13H16V3H18V13Z" />
|
||||
</symbol>
|
||||
<symbol id="icon-ticket" viewBox="0 0 24 24">
|
||||
<path d="M2.00488 9.5V4C2.00488 3.44772 2.4526 3 3.00488 3H21.0049C21.5572 3 22.0049 3.44772 22.0049 4V9.5C20.6242 9.5 19.5049 10.6193 19.5049 12C19.5049 13.3807 20.6242 14.5 22.0049 14.5V20C22.0049 20.5523 21.5572 21 21.0049 21H3.00488C2.4526 21 2.00488 20.5523 2.00488 20V14.5C3.38559 14.5 4.50488 13.3807 4.50488 12C4.50488 10.6193 3.38559 9.5 2.00488 9.5ZM4.00488 7.96776C5.4866 8.70411 6.50488 10.2331 6.50488 12C6.50488 13.7669 5.4866 15.2959 4.00488 16.0322V19H20.0049V16.0322C18.5232 15.2959 17.5049 13.7669 17.5049 12C17.5049 10.2331 18.5232 8.70411 20.0049 7.96776V5H4.00488V7.96776ZM9.00488 9H15.0049V11H9.00488V9ZM9.00488 13H15.0049V15H9.00488V13Z"/>
|
||||
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 98 KiB |
8
kirby/panel/dist/js/PlaygroundView.min.js
vendored
8
kirby/panel/dist/js/PlaygroundView.min.js
vendored
@@ -1,7 +1 @@
|
||||
function __vite__mapDeps(indexes) {
|
||||
if (!__vite__mapDeps.viteFileDeps) {
|
||||
__vite__mapDeps.viteFileDeps = []
|
||||
}
|
||||
return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
|
||||
}
|
||||
import{n as t,_ as e}from"./index.min.js";import{D as n}from"./Docs.min.js";import"./vendor.min.js";const l=t({props:{docs:Object},emits:["cancel"],computed:{options(){const t=[{icon:"expand",link:"lab/docs/"+this.docs.component}];return this.docs.github&&t.unshift({icon:"github",link:this.docs.github,target:"_blank"}),t}}},(function(){var t=this,e=t._self._c;return e("k-drawer",t._b({ref:"drawer",staticClass:"k-form-drawer",attrs:{options:t.options},on:{submit:function(e){return t.$emit("cancel")}}},"k-drawer",t.$attrs,!1),[e("k-lab-docs",t._b({},"k-lab-docs",t.docs,!1))],1)}),[],!1,null,null,null,null).exports;const a=t({props:{code:{type:Boolean,default:!0},label:String,flex:Boolean},data:()=>({mode:"preview"}),computed:{component(){return window.UiExamples[this.label]}}},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-lab-example",attrs:{"data-flex":t.flex,tabindex:"0"}},[e("header",{staticClass:"k-lab-example-header"},[e("h3",{staticClass:"k-lab-example-label"},[t._v(t._s(t.label))]),t.code?e("k-button-group",{staticClass:"k-lab-example-inspector",attrs:{layout:"collapsed"}},[e("k-button",{attrs:{theme:"preview"===t.mode?"info":null,icon:"preview",size:"xs",title:"Preview"},on:{click:function(e){t.mode="preview"}}}),e("k-button",{attrs:{theme:"inspect"===t.mode?"info":null,icon:"code",size:"xs",title:"Vue code"},on:{click:function(e){t.mode="inspect"}}})],1):t._e()],1),"preview"===t.mode?e("div",{staticClass:"k-lab-example-canvas"},[t._t("default")],2):t._e(),"inspect"===t.mode?e("div",{staticClass:"k-lab-example-code"},[e("k-code",{attrs:{language:"html"}},[t._v(t._s(t.component))])],1):t._e()])}),[],!1,null,null,null,null).exports;const o=t({},(function(){return(0,this._self._c)("div",{staticClass:"k-lab-examples"},[this._t("default")],2)}),[],!1,null,null,null,null).exports;const s=t({methods:{submit(t){const e=Object.fromEntries(new FormData(t));this.$panel.dialog.open({component:"k-lab-output-dialog",props:{code:JSON.stringify(e,null,2)}})}}},(function(){var t=this,e=t._self._c;return e("form",{staticClass:"k-lab-form",on:{submit:function(e){return e.preventDefault(),t.submit(e.target)}}},[t._t("default"),e("footer",[e("k-button",{attrs:{type:"submit",icon:"check",theme:"positive",variant:"filled"}},[t._v(" Submit ")])],1)],2)}),[],!1,null,null,null,null).exports;const i=t({props:{code:String,language:{default:"js",type:String}},emits:["cancel"]},(function(){var t=this,e=t._self._c;return e("k-dialog",t._b({attrs:{size:"large","cancel-button":!1,"submit-button":!1},on:{cancel:function(e){return t.$emit("cancel")}}},"k-dialog",t.$attrs,!1),[e("k-code",{attrs:{language:t.language}},[t._v(t._s(t.code))])],1)}),[],!1,null,null,null,null).exports;const r=t({},(function(){var t=this._self._c;return t("div",{staticClass:"k-table"},[t("table",[t("tbody",[t("tr",[t("td",{staticClass:"k-table-cell",attrs:{"data-mobile":"true"}},[this._t("default")],2)])])])])}),[],!1,null,null,null,null).exports;Vue.component("k-lab-docs",n),Vue.component("k-lab-docs-drawer",l),Vue.component("k-lab-example",a),Vue.component("k-lab-examples",o),Vue.component("k-lab-form",s),Vue.component("k-lab-output-dialog",i),Vue.component("k-lab-table-cell",r);const c=t({props:{docs:String,examples:[Object,Array],file:String,github:String,props:[Object,Array],styles:String,tab:String,tabs:{type:Array,default:()=>[]},template:String,title:String},data:()=>({component:null}),watch:{tab:{handler(){this.createComponent()},immediate:!0}},mounted(){this.$panel.view.path.replace(/lab\//,"")},methods:{async createComponent(){if(!this.file)return;const{default:t}=await e((()=>import(this.$panel.url(this.file)+"?cache="+Date.now())),__vite__mapDeps([]),import.meta.url);t.template=this.template,this.component={...t},window.UiExamples=this.examples},openDocs(){this.$panel.drawer.open(`lab/docs/${this.docs}`)},async reloadComponent(){await this.$panel.view.refresh(),this.createComponent()},reloadDocs(){this.$panel.drawer.isOpen&&this.$panel.drawer.refresh()}}},(function(){var t=this,e=t._self._c;return e("k-panel-inside",{staticClass:"k-lab-playground-view",attrs:{"data-has-tabs":t.tabs.length>1}},[e("k-header",{scopedSlots:t._u([{key:"buttons",fn:function(){return[t.docs||t.github?e("k-button-group",[t.docs?e("k-button",{attrs:{text:t.docs,icon:"book",size:"sm",variant:"filled"},on:{click:t.openDocs}}):t._e(),t.github?e("k-button",{attrs:{link:t.github,icon:"github",size:"sm",target:"_blank",variant:"filled"}}):t._e()],1):t._e()]},proxy:!0}])},[t._v(" "+t._s(t.title)+" ")]),e("k-tabs",{attrs:{tab:t.tab,tabs:t.tabs}}),t.component?e(t.component,t._b({tag:"component"},"component",t.props,!1)):t._e(),t.styles?e("style",{tag:"component",domProps:{innerHTML:t._s(t.styles)}}):t._e()],1)}),[],!1,null,null,null,null).exports;export{c as default};
|
||||
import{D as t}from"./Docs.min.js";import{n as e}from"./index.min.js";import"./vendor.min.js";const n=e({props:{docs:Object},emits:["cancel"],computed:{options(){const t=[{icon:"expand",link:"lab/docs/"+this.docs.component}];return this.docs.github&&t.unshift({icon:"github",link:this.docs.github,target:"_blank"}),t}}},(function(){var t=this,e=t._self._c;return e("k-drawer",t._b({ref:"drawer",staticClass:"k-form-drawer",attrs:{options:t.options},on:{submit:function(e){return t.$emit("cancel")}}},"k-drawer",t.$attrs,!1),[e("k-lab-docs",t._b({},"k-lab-docs",t.docs,!1))],1)}),[],!1,null,null,null,null).exports;const l=e({props:{code:{type:Boolean,default:!0},label:String,flex:Boolean},data:()=>({mode:"preview"}),computed:{component(){return window.UiExamples[this.label]}}},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-lab-example",attrs:{"data-flex":t.flex,tabindex:"0"}},[e("header",{staticClass:"k-lab-example-header"},[e("h3",{staticClass:"k-lab-example-label"},[t._v(t._s(t.label))]),t.code?e("k-button-group",{staticClass:"k-lab-example-inspector",attrs:{layout:"collapsed"}},[e("k-button",{attrs:{theme:"preview"===t.mode?"info":null,icon:"preview",size:"xs",title:"Preview"},on:{click:function(e){t.mode="preview"}}}),e("k-button",{attrs:{theme:"inspect"===t.mode?"info":null,icon:"code",size:"xs",title:"Vue code"},on:{click:function(e){t.mode="inspect"}}})],1):t._e()],1),"preview"===t.mode?e("div",{staticClass:"k-lab-example-canvas"},[t._t("default")],2):t._e(),"inspect"===t.mode?e("div",{staticClass:"k-lab-example-code"},[e("k-code",{attrs:{language:"html"}},[t._v(t._s(t.component))])],1):t._e()])}),[],!1,null,null,null,null).exports;const a=e({},(function(){return(0,this._self._c)("div",{staticClass:"k-lab-examples"},[this._t("default")],2)}),[],!1,null,null,null,null).exports;const o=e({methods:{submit(t){const e=Object.fromEntries(new FormData(t));this.$panel.dialog.open({component:"k-lab-output-dialog",props:{code:JSON.stringify(e,null,2)}})}}},(function(){var t=this,e=t._self._c;return e("form",{staticClass:"k-lab-form",on:{submit:function(e){return e.preventDefault(),t.submit(e.target)}}},[t._t("default"),e("footer",[e("k-button",{attrs:{type:"submit",icon:"check",theme:"positive",variant:"filled"}},[t._v(" Submit ")])],1)],2)}),[],!1,null,null,null,null).exports;const s=e({props:{code:String,language:{default:"js",type:String}},emits:["cancel"]},(function(){var t=this,e=t._self._c;return e("k-dialog",t._b({attrs:{size:"large","cancel-button":!1,"submit-button":!1},on:{cancel:function(e){return t.$emit("cancel")}}},"k-dialog",t.$attrs,!1),[e("k-code",{attrs:{language:t.language}},[t._v(t._s(t.code))])],1)}),[],!1,null,null,null,null).exports;const i=e({},(function(){var t=this._self._c;return t("div",{staticClass:"k-table"},[t("table",[t("tbody",[t("tr",[t("td",{staticClass:"k-table-cell",attrs:{"data-mobile":"true"}},[this._t("default")],2)])])])])}),[],!1,null,null,null,null).exports;Vue.component("k-lab-docs",t),Vue.component("k-lab-docs-drawer",n),Vue.component("k-lab-example",l),Vue.component("k-lab-examples",a),Vue.component("k-lab-form",o),Vue.component("k-lab-output-dialog",s),Vue.component("k-lab-table-cell",i);const r=e({props:{docs:String,examples:[Object,Array],file:String,github:String,props:[Object,Array],styles:String,tab:String,tabs:{type:Array,default:()=>[]},template:String,title:String},data:()=>({component:null}),watch:{tab:{handler(){this.createComponent()},immediate:!0}},mounted(){this.$panel.view.path.replace(/lab\//,"")},methods:{async createComponent(){if(!this.file)return;const{default:t}=await import(this.$panel.url(this.file)+"?cache="+Date.now());t.template=this.template,this.component={...t},window.UiExamples=this.examples},openDocs(){this.$panel.drawer.open(`lab/docs/${this.docs}`)},async reloadComponent(){await this.$panel.view.refresh(),this.createComponent()},reloadDocs(){this.$panel.drawer.isOpen&&this.$panel.drawer.refresh()}}},(function(){var t=this,e=t._self._c;return e("k-panel-inside",{staticClass:"k-lab-playground-view",attrs:{"data-has-tabs":t.tabs.length>1}},[e("k-header",{scopedSlots:t._u([{key:"buttons",fn:function(){return[t.docs||t.github?e("k-button-group",[t.docs?e("k-button",{attrs:{text:t.docs,icon:"book",size:"sm",variant:"filled"},on:{click:t.openDocs}}):t._e(),t.github?e("k-button",{attrs:{link:t.github,icon:"github",size:"sm",target:"_blank",variant:"filled"}}):t._e()],1):t._e()]},proxy:!0}])},[t._v(" "+t._s(t.title)+" ")]),e("k-tabs",{attrs:{tab:t.tab,tabs:t.tabs}}),t.component?e(t.component,t._b({tag:"component"},"component",t.props,!1)):t._e(),t.styles?e("style",{tag:"component",domProps:{innerHTML:t._s(t.styles)}}):t._e()],1)}),[],!1,null,null,null,null).exports;export{r as default};
|
||||
|
9
kirby/panel/dist/js/index.min.js
vendored
9
kirby/panel/dist/js/index.min.js
vendored
File diff suppressed because one or more lines are too long
6
kirby/panel/dist/js/vendor.min.js
vendored
6
kirby/panel/dist/js/vendor.min.js
vendored
File diff suppressed because one or more lines are too long
28
kirby/panel/eslint.config.mjs
Normal file
28
kirby/panel/eslint.config.mjs
Normal file
@@ -0,0 +1,28 @@
|
||||
import js from "@eslint/js";
|
||||
import prettier from "eslint-config-prettier";
|
||||
import vue from "eslint-plugin-vue";
|
||||
|
||||
export default [
|
||||
js.configs.recommended,
|
||||
...vue.configs["flat/vue2-recommended"],
|
||||
prettier,
|
||||
{
|
||||
rules: {
|
||||
"vue/attributes-order": "error",
|
||||
"vue/component-definition-name-casing": "off",
|
||||
"vue/html-closing-bracket-newline": [
|
||||
"error",
|
||||
{
|
||||
singleline: "never",
|
||||
multiline: "always"
|
||||
}
|
||||
],
|
||||
"vue/multi-word-component-names": "off",
|
||||
"vue/require-default-prop": "off",
|
||||
"vue/require-prop-types": "error"
|
||||
},
|
||||
languageOptions: {
|
||||
ecmaVersion: 2022
|
||||
}
|
||||
}
|
||||
];
|
@@ -1,11 +1,12 @@
|
||||
<?php
|
||||
|
||||
$uri = urldecode(
|
||||
parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
|
||||
);
|
||||
// prepend a fake host to ensure that PHP can parse the path even if it contains weird stuff;
|
||||
// afterwards just take the plain path back out from the parsed result
|
||||
$uri = parse_url('https://getkirby.com/' . ltrim($_SERVER['REQUEST_URI'], '/'), PHP_URL_PATH) ?? '/';
|
||||
$uri = urldecode($uri);
|
||||
|
||||
// Emulate Apache's `mod_rewrite` functionality
|
||||
if ($uri !== '/' && file_exists($_SERVER['DOCUMENT_ROOT'] . '/' . $uri)) {
|
||||
if ($uri !== '/' && file_exists($_SERVER['DOCUMENT_ROOT'] . '/' . ltrim($uri, '/'))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@@ -59,7 +59,11 @@ class Model
|
||||
isset($schema['type']) === true &&
|
||||
$this->data instanceof $schema['type'] === false
|
||||
) {
|
||||
throw new Exception(sprintf('Invalid model type "%s" expected: "%s"', get_class($this->data), $schema['type']));
|
||||
$class = match ($this->data) {
|
||||
null => 'null',
|
||||
default => get_class($this->data),
|
||||
};
|
||||
throw new Exception(sprintf('Invalid model type "%s" expected: "%s"', $class, $schema['type']));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -30,6 +30,7 @@ use Kirby\Toolkit\A;
|
||||
use Kirby\Toolkit\Config;
|
||||
use Kirby\Toolkit\Controller;
|
||||
use Kirby\Toolkit\LazyValue;
|
||||
use Kirby\Toolkit\Locale;
|
||||
use Kirby\Toolkit\Str;
|
||||
use Kirby\Uuid\Uuid;
|
||||
use Throwable;
|
||||
@@ -170,7 +171,7 @@ class App
|
||||
'roots' => $this->roots(),
|
||||
'site' => $this->site(),
|
||||
'urls' => $this->urls(),
|
||||
'version' => $this->version(),
|
||||
'version' => static::version(),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -255,7 +256,7 @@ class App
|
||||
foreach ($this->options as $key => $value) {
|
||||
// detect option keys with the `vendor.plugin.option` format
|
||||
if (preg_match('/^([a-z0-9-]+\.[a-z0-9-]+)\.(.*)$/i', $key, $matches) === 1) {
|
||||
list(, $plugin, $option) = $matches;
|
||||
[, $plugin, $option] = $matches;
|
||||
|
||||
// verify that it's really a plugin option
|
||||
if (isset(static::$plugins[str_replace('.', '/', $plugin)]) !== true) {
|
||||
@@ -538,6 +539,14 @@ class App
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current language, if set by `static::setCurrentLanguage`
|
||||
*/
|
||||
public function currentLanguage(): Language|null
|
||||
{
|
||||
return $this->language ??= $this->defaultLanguage();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the default language object
|
||||
*/
|
||||
@@ -623,7 +632,7 @@ class App
|
||||
return Uuid::for($path, $parent?->files())->model();
|
||||
}
|
||||
|
||||
$parent = $parent ?? $this->site();
|
||||
$parent ??= $this->site();
|
||||
$id = dirname($path);
|
||||
$filename = basename($path);
|
||||
|
||||
@@ -879,7 +888,8 @@ class App
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current language
|
||||
* Returns the language by code or shortcut (`default`, `current`).
|
||||
* Passing `null` is an alias for passing `current`
|
||||
*/
|
||||
public function language(string $code = null): Language|null
|
||||
{
|
||||
@@ -887,19 +897,11 @@ class App
|
||||
return null;
|
||||
}
|
||||
|
||||
if ($code === 'default') {
|
||||
return $this->defaultLanguage();
|
||||
}
|
||||
|
||||
// if requesting a non-default language,
|
||||
// find it but don't cache it
|
||||
if ($code !== null) {
|
||||
return $this->languages()->find($code);
|
||||
}
|
||||
|
||||
// otherwise return language set by `AppTranslation::setCurrentLanguage`
|
||||
// or default language
|
||||
return $this->language ??= $this->defaultLanguage();
|
||||
return match ($code ?? 'current') {
|
||||
'default' => $this->defaultLanguage(),
|
||||
'current' => $this->currentLanguage(),
|
||||
default => $this->languages()->find($code)
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1141,7 +1143,7 @@ class App
|
||||
return null;
|
||||
}
|
||||
|
||||
$parent = $parent ?? $this->site();
|
||||
$parent ??= $this->site();
|
||||
|
||||
if ($page = $parent->find($id)) {
|
||||
/**
|
||||
@@ -1212,7 +1214,7 @@ class App
|
||||
* @internal
|
||||
* @throws \Kirby\Exception\NotFoundException if the home page cannot be found
|
||||
*/
|
||||
public function resolve(string $path = null, string $language = null): mixed
|
||||
public function resolve(string|null $path = null, string|null $language = null): mixed
|
||||
{
|
||||
// set the current translation
|
||||
$this->setCurrentTranslation($language);
|
||||
@@ -1410,6 +1412,30 @@ class App
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load and set the current language if it exists
|
||||
* Otherwise fall back to the default language
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
public function setCurrentLanguage(
|
||||
string|null $languageCode = null
|
||||
): Language|null {
|
||||
if ($this->multilang() === false) {
|
||||
Locale::set($this->option('locale', 'en_US.utf-8'));
|
||||
return $this->language = null;
|
||||
}
|
||||
|
||||
$this->language = $this->language($languageCode) ?? $this->defaultLanguage();
|
||||
|
||||
Locale::set($this->language->locale());
|
||||
|
||||
// add language slug rules to Str class
|
||||
Str::$language = $this->language->rules();
|
||||
|
||||
return $this->language;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create your own set of languages
|
||||
*
|
||||
|
@@ -713,17 +713,25 @@ trait AppPlugins
|
||||
*/
|
||||
public static function plugin(
|
||||
string $name,
|
||||
array $extends = null
|
||||
array $extends = null,
|
||||
array $info = [],
|
||||
string|null $root = null,
|
||||
string|null $version = null
|
||||
): PLugin|null {
|
||||
if ($extends === null) {
|
||||
return static::$plugins[$name] ?? null;
|
||||
}
|
||||
|
||||
// get the correct root for the plugin
|
||||
$extends['root'] = $extends['root'] ?? dirname(debug_backtrace()[0]['file']);
|
||||
$plugin = new Plugin(
|
||||
name: $name,
|
||||
extends: $extends,
|
||||
info: $info,
|
||||
// TODO: Remove fallback to $extends in v7
|
||||
root: $root ?? $extends['root'] ?? dirname(debug_backtrace()[0]['file']),
|
||||
version: $version
|
||||
);
|
||||
|
||||
$plugin = new Plugin($name, $extends);
|
||||
$name = $plugin->name();
|
||||
$name = $plugin->name();
|
||||
|
||||
if (isset(static::$plugins[$name]) === true) {
|
||||
throw new DuplicateException('The plugin "' . $name . '" has already been registered');
|
||||
@@ -792,7 +800,11 @@ trait AppPlugins
|
||||
// register as anonymous plugin (without actual extensions)
|
||||
// to be picked up by the Panel\Document class when
|
||||
// rendering the Panel view
|
||||
static::plugin('plugins/' . $dirname, ['root' => $dir]);
|
||||
static::plugin(
|
||||
name: 'plugins/' . $dirname,
|
||||
extends: [],
|
||||
root: $dir
|
||||
);
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
|
@@ -3,7 +3,6 @@
|
||||
namespace Kirby\Cms;
|
||||
|
||||
use Kirby\Toolkit\I18n;
|
||||
use Kirby\Toolkit\Locale;
|
||||
use Kirby\Toolkit\Str;
|
||||
|
||||
/**
|
||||
@@ -104,33 +103,6 @@ trait AppTranslations
|
||||
return $this->option('panel.language', $defaultCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load and set the current language if it exists
|
||||
* Otherwise fall back to the default language
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
public function setCurrentLanguage(
|
||||
string $languageCode = null
|
||||
): Language|null {
|
||||
if ($this->multilang() === false) {
|
||||
Locale::set($this->option('locale', 'en_US.utf-8'));
|
||||
return $this->language = null;
|
||||
}
|
||||
|
||||
$this->language = $this->language($languageCode);
|
||||
$this->language ??= $this->defaultLanguage();
|
||||
|
||||
if ($this->language) {
|
||||
Locale::set($this->language->locale());
|
||||
}
|
||||
|
||||
// add language slug rules to Str class
|
||||
Str::$language = $this->language->rules();
|
||||
|
||||
return $this->language;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the current translation
|
||||
*
|
||||
@@ -148,7 +120,7 @@ trait AppTranslations
|
||||
*/
|
||||
public function translation(string|null $locale = null): Translation
|
||||
{
|
||||
$locale = $locale ?? I18n::locale();
|
||||
$locale ??= I18n::locale();
|
||||
$locale = basename($locale);
|
||||
|
||||
// prefer loading them from the translations collection
|
||||
|
@@ -575,8 +575,8 @@ class Auth
|
||||
}
|
||||
|
||||
// ensure that the category arrays are defined
|
||||
$log['by-ip'] = $log['by-ip'] ?? [];
|
||||
$log['by-email'] = $log['by-email'] ?? [];
|
||||
$log['by-ip'] ??= [];
|
||||
$log['by-email'] ??= [];
|
||||
|
||||
// remove all elements on the top level with different keys (old structure)
|
||||
$log = array_intersect_key($log, array_flip(['by-ip', 'by-email']));
|
||||
|
@@ -65,7 +65,7 @@ class Blueprint
|
||||
unset($props['model']);
|
||||
|
||||
// extend the blueprint in general
|
||||
$props = $this->extend($props);
|
||||
$props = static::extend($props);
|
||||
|
||||
// apply any blueprint preset
|
||||
$props = $this->preset($props);
|
||||
@@ -652,7 +652,7 @@ class Blueprint
|
||||
}
|
||||
|
||||
// extend options if possible
|
||||
$options = $this->extend($options);
|
||||
$options = static::extend($options);
|
||||
|
||||
foreach ($options as $key => $value) {
|
||||
$alias = $aliases[$key] ?? null;
|
||||
@@ -686,7 +686,7 @@ class Blueprint
|
||||
}
|
||||
|
||||
// inject all section extensions
|
||||
$sectionProps = $this->extend($sectionProps);
|
||||
$sectionProps = static::extend($sectionProps);
|
||||
|
||||
$sections[$sectionName] = $sectionProps = [
|
||||
...$sectionProps,
|
||||
@@ -699,14 +699,14 @@ class Blueprint
|
||||
'name' => $sectionName,
|
||||
'label' => 'Invalid section type for section "' . $sectionName . '"',
|
||||
'type' => 'info',
|
||||
'text' => 'The following section types are available: ' . $this->helpList(array_keys(Section::$types))
|
||||
'text' => 'The following section types are available: ' . static::helpList(array_keys(Section::$types))
|
||||
];
|
||||
} elseif (isset(Section::$types[$type]) === false) {
|
||||
$sections[$sectionName] = [
|
||||
'name' => $sectionName,
|
||||
'label' => 'Invalid section type ("' . $type . '")',
|
||||
'type' => 'info',
|
||||
'text' => 'The following section types are available: ' . $this->helpList(array_keys(Section::$types))
|
||||
'text' => 'The following section types are available: ' . static::helpList(array_keys(Section::$types))
|
||||
];
|
||||
}
|
||||
|
||||
@@ -764,7 +764,7 @@ class Blueprint
|
||||
}
|
||||
|
||||
// inject all tab extensions
|
||||
$tabProps = $this->extend($tabProps);
|
||||
$tabProps = static::extend($tabProps);
|
||||
|
||||
// inject a preset if available
|
||||
$tabProps = $this->preset($tabProps);
|
||||
|
@@ -47,7 +47,9 @@ trait FileActions
|
||||
string|null $extension = null
|
||||
): static {
|
||||
if ($sanitize === true) {
|
||||
$name = F::safeName($name);
|
||||
// sanitize the basename part only
|
||||
// as the extension isn't included in $name
|
||||
$name = F::safeBasename($name, false);
|
||||
}
|
||||
|
||||
// if no extension is passed, make sure to maintain current one
|
||||
@@ -139,8 +141,8 @@ trait FileActions
|
||||
|
||||
// rename and/or resize the file if configured by new blueprint
|
||||
$create = $file->blueprint()->create();
|
||||
$file = $file->manipulate($create);
|
||||
$file = $file->changeExtension($file, $create['format'] ?? null);
|
||||
$file->manipulate($create);
|
||||
|
||||
return $file;
|
||||
});
|
||||
@@ -266,7 +268,6 @@ trait FileActions
|
||||
// we need to already rename it so that the correct file rules
|
||||
// are applied
|
||||
$create = $file->blueprint()->create();
|
||||
$file = $file->changeExtension($file, $create['format'] ?? null);
|
||||
|
||||
// run the hook
|
||||
$arguments = compact('file', 'upload');
|
||||
@@ -284,6 +285,7 @@ trait FileActions
|
||||
|
||||
// resize the file on upload if configured
|
||||
$file = $file->manipulate($create);
|
||||
$file = $file->changeExtension($file, $create['format'] ?? null);
|
||||
|
||||
// store the content if necessary
|
||||
// (always create files in the default language)
|
||||
@@ -384,8 +386,8 @@ trait FileActions
|
||||
|
||||
// apply the resizing/crop options from the blueprint
|
||||
$create = $file->blueprint()->create();
|
||||
$file = $file->changeExtension($file, $create['format'] ?? null);
|
||||
$file = $file->manipulate($create);
|
||||
$file = $file->changeExtension($file, $create['format'] ?? null);
|
||||
|
||||
// return a fresh clone
|
||||
return $file->clone();
|
||||
|
@@ -50,7 +50,7 @@ class FileVersion
|
||||
|
||||
// content fields
|
||||
if ($this->original() instanceof File) {
|
||||
return $this->original()->content()->get($method, $arguments);
|
||||
return $this->original()->content()->get($method);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -29,14 +29,20 @@ class Helpers
|
||||
* ```
|
||||
*/
|
||||
public static $deprecations = [
|
||||
// The internal `$model->contentFile*()` methods have been deprecated
|
||||
'model-content-file' => true,
|
||||
|
||||
// Passing an `info` array inside the `extends` array
|
||||
// has been deprecated. Pass the individual entries (e.g. root, version)
|
||||
// directly as named arguments.
|
||||
// TODO: switch to true in v6
|
||||
'plugin-extends-root' => false,
|
||||
|
||||
// Passing a single space as value to `Xml::attr()` has been
|
||||
// deprecated. In a future version, passing a single space won't
|
||||
// render an empty value anymore but a single space.
|
||||
// To render an empty value, please pass an empty string.
|
||||
'xml-attr-single-space' => true,
|
||||
|
||||
// The internal `$model->contentFile*()` methods have been deprecated
|
||||
'model-content-file' => true,
|
||||
];
|
||||
|
||||
/**
|
||||
|
@@ -42,7 +42,7 @@ class LanguageRules
|
||||
/**
|
||||
* Validates if the language can be updated
|
||||
*/
|
||||
public static function update(Language $language)
|
||||
public static function update(Language $language): void
|
||||
{
|
||||
static::validLanguageCode($language);
|
||||
static::validLanguageName($language);
|
||||
|
@@ -57,7 +57,12 @@ class Media
|
||||
}
|
||||
|
||||
// try to generate a thumb for the file
|
||||
return static::thumb($model, $hash, $filename);
|
||||
try {
|
||||
return static::thumb($model, $hash, $filename);
|
||||
} catch (NotFoundException) {
|
||||
// render the error page if there is no job for this filename
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -46,7 +46,7 @@ abstract class ModelWithContent implements Identifiable
|
||||
public static App $kirby;
|
||||
protected Site|null $site;
|
||||
protected ContentStorage $storage;
|
||||
public Collection|null $translations;
|
||||
public Collection|null $translations = null;
|
||||
|
||||
/**
|
||||
* Store values used to initilaize object
|
||||
|
@@ -22,7 +22,7 @@ class PagePicker extends Picker
|
||||
// remove once our implementation is better
|
||||
protected Pages|null $items = null;
|
||||
protected Pages|null $itemsForQuery = null;
|
||||
protected Page|Site|null $parent;
|
||||
protected Page|Site|null $parent = null;
|
||||
|
||||
/**
|
||||
* Extends the basic defaults
|
||||
|
@@ -26,12 +26,6 @@ use Throwable;
|
||||
class Plugin
|
||||
{
|
||||
protected PluginAssets $assets;
|
||||
protected array $extends;
|
||||
protected string $name;
|
||||
protected string $root;
|
||||
|
||||
// caches
|
||||
protected array|null $info = null;
|
||||
protected UpdateStatus|null $updateStatus = null;
|
||||
|
||||
/**
|
||||
@@ -40,16 +34,44 @@ class Plugin
|
||||
*
|
||||
* @throws \Kirby\Exception\InvalidArgumentException If the plugin name has an invalid format
|
||||
*/
|
||||
public function __construct(string $name, array $extends = [])
|
||||
{
|
||||
public function __construct(
|
||||
protected string $name,
|
||||
protected array $extends = [],
|
||||
protected array $info = [],
|
||||
protected string|null $root = null,
|
||||
protected string|null $version = null,
|
||||
) {
|
||||
static::validateName($name);
|
||||
|
||||
$this->name = $name;
|
||||
$this->extends = $extends;
|
||||
$this->root = $extends['root'] ?? dirname(debug_backtrace()[0]['file']);
|
||||
$this->info = empty($extends['info']) === false && is_array($extends['info']) ? $extends['info'] : null;
|
||||
// TODO: Remove in v7
|
||||
if ($root = $extends['root'] ?? null) {
|
||||
Helpers::deprecated('Plugin "' . $name . '": Passing the `root` inside the `extends` array has been deprecated. Pass it directly as named argument `root`.', 'plugin-extends-root');
|
||||
$this->root ??= $root;
|
||||
unset($this->extends['root']);
|
||||
}
|
||||
|
||||
unset($this->extends['root'], $this->extends['info']);
|
||||
$this->root ??= dirname(debug_backtrace()[0]['file']);
|
||||
|
||||
// TODO: Remove in v7
|
||||
if ($info = $extends['info'] ?? null) {
|
||||
Helpers::deprecated('Plugin "' . $name . '": Passing an `info` array inside the `extends` array has been deprecated. Pass the individual entries directly as named `info` argument.', 'plugin-extends-root');
|
||||
|
||||
if (empty($info) === false && is_array($info) === true) {
|
||||
$this->info = [...$info, ...$this->info];
|
||||
}
|
||||
|
||||
unset($this->extends['info']);
|
||||
}
|
||||
|
||||
// read composer.json and use as info fallback
|
||||
try {
|
||||
$info = Data::read($this->manifest());
|
||||
} catch (Exception) {
|
||||
// there is no manifest file or it is invalid
|
||||
$info = [];
|
||||
}
|
||||
|
||||
$this->info = [...$info, ...$this->info];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -117,22 +139,11 @@ class Plugin
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the raw data from composer.json
|
||||
* Returns the info data (from composer.json)
|
||||
*/
|
||||
public function info(): array
|
||||
{
|
||||
if (is_array($this->info) === true) {
|
||||
return $this->info;
|
||||
}
|
||||
|
||||
try {
|
||||
$info = Data::read($this->manifest());
|
||||
} catch (Exception) {
|
||||
// there is no manifest file or it is invalid
|
||||
$info = [];
|
||||
}
|
||||
|
||||
return $this->info = $info;
|
||||
return $this->info;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -295,17 +306,20 @@ class Plugin
|
||||
*/
|
||||
public function version(): string|null
|
||||
{
|
||||
$composerName = $this->info()['name'] ?? null;
|
||||
$version = $this->info()['version'] ?? null;
|
||||
$name = $this->info()['name'] ?? null;
|
||||
|
||||
try {
|
||||
// if plugin doesn't have version key in composer.json file
|
||||
// try to get version from "vendor/composer/installed.php"
|
||||
$version ??= InstalledVersions::getPrettyVersion($composerName);
|
||||
// try to get version from "vendor/composer/installed.php",
|
||||
// this is the most reliable source for the version
|
||||
$version = InstalledVersions::getPrettyVersion($name);
|
||||
} catch (Throwable) {
|
||||
return null;
|
||||
$version = null;
|
||||
}
|
||||
|
||||
// fallback to the version provided in the plugin's index.php: as named
|
||||
// argument, entry in the info array or from the composer.json file
|
||||
$version ??= $this->version ?? $this->info()['version'] ?? null;
|
||||
|
||||
if (
|
||||
is_string($version) !== true ||
|
||||
$version === '' ||
|
||||
|
@@ -162,6 +162,24 @@ class System
|
||||
->toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array with relevant system information
|
||||
* used for debugging
|
||||
* @since 4.3.0
|
||||
*/
|
||||
public function info(): array
|
||||
{
|
||||
return [
|
||||
'kirby' => $this->app->version(),
|
||||
'php' => phpversion(),
|
||||
'server' => $this->serverSoftware(),
|
||||
'license' => $this->license()->label(),
|
||||
'languages' => $this->app->languages()->values(
|
||||
fn ($lang) => $lang->code()
|
||||
)
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the most important folders
|
||||
* if they don't exist yet
|
||||
@@ -379,32 +397,12 @@ class System
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for a valid server environment
|
||||
*/
|
||||
public function server(): bool
|
||||
{
|
||||
return $this->serverSoftware() !== null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the detected server software
|
||||
*/
|
||||
public function serverSoftware(): string|null
|
||||
public function serverSoftware(): string
|
||||
{
|
||||
$servers = $this->app->option('servers', [
|
||||
'apache',
|
||||
'caddy',
|
||||
'litespeed',
|
||||
'nginx',
|
||||
'php'
|
||||
]);
|
||||
|
||||
$software = $this->app->environment()->get('SERVER_SOFTWARE', '');
|
||||
|
||||
preg_match('!(' . implode('|', A::wrap($servers)) . ')!i', $software, $matches);
|
||||
|
||||
return $matches[0] ?? null;
|
||||
return $this->app->environment()->get('SERVER_SOFTWARE', '–');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -421,14 +419,13 @@ class System
|
||||
public function status(): array
|
||||
{
|
||||
return [
|
||||
'accounts' => $this->accounts(),
|
||||
'content' => $this->content(),
|
||||
'curl' => $this->curl(),
|
||||
'sessions' => $this->sessions(),
|
||||
'mbstring' => $this->mbstring(),
|
||||
'media' => $this->media(),
|
||||
'php' => $this->php(),
|
||||
'server' => $this->server(),
|
||||
'accounts' => $this->accounts(),
|
||||
'content' => $this->content(),
|
||||
'curl' => $this->curl(),
|
||||
'sessions' => $this->sessions(),
|
||||
'mbstring' => $this->mbstring(),
|
||||
'media' => $this->media(),
|
||||
'php' => $this->php()
|
||||
];
|
||||
}
|
||||
|
||||
|
@@ -392,6 +392,46 @@ class UpdateStatus
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the maximum possible major update
|
||||
* that is included with the current license
|
||||
*
|
||||
* @return string|null Version number of the update or
|
||||
* `null` if no free update is possible
|
||||
*/
|
||||
protected function findMaximumFreeUpdate(): string|null
|
||||
{
|
||||
// get the timestamp of included updates
|
||||
$renewal = $this->app->system()->license()->renewal();
|
||||
|
||||
if ($renewal === null || $this->data === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
foreach ($this->data['versions'] ?? [] as $entry) {
|
||||
$initialRelease = $entry['initialRelease'] ?? null;
|
||||
$latest = $entry['latest'] ?? '';
|
||||
|
||||
// skip entries of irrelevant releases
|
||||
if (
|
||||
is_string($initialRelease) !== true ||
|
||||
version_compare($latest, $this->currentVersion, '<=') === true
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$timestamp = strtotime($initialRelease);
|
||||
|
||||
// update is free if the initial release was before the
|
||||
// license renewal date
|
||||
if (is_int($timestamp) === true && $timestamp < $renewal) {
|
||||
return $latest;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the minimum possible security update
|
||||
* to fix all known vulnerabilities
|
||||
@@ -655,7 +695,7 @@ class UpdateStatus
|
||||
];
|
||||
}
|
||||
|
||||
// check if free updates are possible from the current version
|
||||
// check if updates within the same major version are possible
|
||||
$latest = $versionEntry['latest'] ?? null;
|
||||
if (is_string($latest) === true && $latest !== $this->currentVersion) {
|
||||
return $this->targetData = [
|
||||
@@ -665,6 +705,19 @@ class UpdateStatus
|
||||
];
|
||||
}
|
||||
|
||||
// check if the license includes updates to a newer major version
|
||||
if ($version = $this->findMaximumFreeUpdate()) {
|
||||
// extract the part before the first dot
|
||||
// to find the major release page URL
|
||||
preg_match('/^(\w+)\./', $version, $matches);
|
||||
|
||||
return $this->targetData = [
|
||||
'status' => 'update',
|
||||
'url' => $this->urlFor($matches[1] . '.0', 'changes'),
|
||||
'version' => $version
|
||||
];
|
||||
}
|
||||
|
||||
// no free update is possible, but we are not on the latest version,
|
||||
// so the overall latest version must be an upgrade
|
||||
return $this->targetData = [
|
||||
|
@@ -112,7 +112,7 @@ abstract class Sql
|
||||
public function columnName(string $table, string $column, bool $enforceQualified = false): string|null
|
||||
{
|
||||
// ensure we have clean $table and $column values without qualified identifiers
|
||||
list($table, $column) = $this->splitIdentifier($table, $column);
|
||||
[$table, $column] = $this->splitIdentifier($table, $column);
|
||||
|
||||
// combine the identifiers again
|
||||
if ($this->database->validateColumn($table, $column) === true) {
|
||||
@@ -624,7 +624,7 @@ abstract class Sql
|
||||
$result = [];
|
||||
|
||||
foreach ($columns as $column) {
|
||||
list($table, $columnPart) = $this->splitIdentifier($table, $column);
|
||||
[$table, $columnPart] = $this->splitIdentifier($table, $column);
|
||||
|
||||
if ($this->validateColumn($table, $columnPart) === true) {
|
||||
$result[] = $this->combineIdentifier($table, $columnPart);
|
||||
|
@@ -580,7 +580,7 @@ class F
|
||||
}
|
||||
|
||||
// the math magic
|
||||
$size = round($size / pow(1024, ($unit = floor(log($size, 1024)))), 2);
|
||||
$size = round($size / 1024 ** ($unit = floor(log($size, 1024))), 2);
|
||||
|
||||
// format the number if requested
|
||||
if ($locale !== false) {
|
||||
@@ -756,20 +756,32 @@ class F
|
||||
* Sanitize a file's name (without extension)
|
||||
* @since 4.0.0
|
||||
*/
|
||||
public static function safeBasename(string $string): string
|
||||
{
|
||||
$name = static::name($string);
|
||||
return Str::slug($name, '-', 'a-z0-9@._-');
|
||||
public static function safeBasename(
|
||||
string $string,
|
||||
bool $extract = true
|
||||
): string {
|
||||
// extract only the name part from whole filename string
|
||||
if ($extract === true) {
|
||||
$string = static::name($string);
|
||||
}
|
||||
|
||||
return Str::slug($string, '-', 'a-z0-9@._-');
|
||||
}
|
||||
|
||||
/**
|
||||
* Sanitize a file's extension
|
||||
* @since 4.0.0
|
||||
*/
|
||||
public static function safeExtension(string $string): string
|
||||
{
|
||||
$extension = static::extension($string);
|
||||
return Str::slug($extension);
|
||||
public static function safeExtension(
|
||||
string $string,
|
||||
bool $extract = true
|
||||
): string {
|
||||
// extract only the extension part from whole filename string
|
||||
if ($extract === true) {
|
||||
$string = static::extension($string);
|
||||
}
|
||||
|
||||
return Str::slug($string);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -20,7 +20,7 @@ class Query
|
||||
/**
|
||||
* The Query data array
|
||||
*/
|
||||
protected array|null $data;
|
||||
protected array|null $data = null;
|
||||
|
||||
/**
|
||||
* Creates a new Query object.
|
||||
|
@@ -59,13 +59,15 @@ class QrCode
|
||||
* @param int|null $size Image width/height in pixels, defaults to a size per module of 4x4
|
||||
* @param string $color Foreground color in hex format
|
||||
* @param string $back Background color in hex format
|
||||
* @param int $border Border size in number of modules
|
||||
*/
|
||||
public function toDataUri(
|
||||
int|null $size = null,
|
||||
string $color = '#000000',
|
||||
string $back = '#ffffff'
|
||||
string $back = '#ffffff',
|
||||
int $border = 4
|
||||
): string {
|
||||
$image = $this->toImage($size, $color, $back);
|
||||
$image = $this->toImage($size, $color, $back, $border);
|
||||
|
||||
ob_start();
|
||||
imagepng($image);
|
||||
@@ -82,14 +84,16 @@ class QrCode
|
||||
* @param int|null $size Image width/height in pixels, defaults to a size per module of 4x4
|
||||
* @param string $color Foreground color in hex format
|
||||
* @param string $back Background color in hex format
|
||||
* @param int $border Border size in number of modules
|
||||
*/
|
||||
public function toImage(
|
||||
int|null $size = null,
|
||||
string $color = '#000000',
|
||||
string $back = '#ffffff'
|
||||
string $back = '#ffffff',
|
||||
int $border = 4
|
||||
): GdImage {
|
||||
// get code and size measurements
|
||||
$code = $this->encode();
|
||||
$code = $this->encode($border);
|
||||
[$width, $height] = $this->measure($code);
|
||||
$size ??= ceil($width * 4);
|
||||
$ws = $size / $width;
|
||||
@@ -132,13 +136,15 @@ class QrCode
|
||||
* @param int|string|null $size Optional CSS width of the `<svg>` element
|
||||
* @param string $color Foreground color in hex format
|
||||
* @param string $back Background color in hex format
|
||||
* @param int $border Border size in number of modules
|
||||
*/
|
||||
public function toSvg(
|
||||
int|string|null $size = null,
|
||||
string $color = '#000000',
|
||||
string $back = '#ffffff'
|
||||
string $back = '#ffffff',
|
||||
int $border = 4
|
||||
): string {
|
||||
$code = $this->encode();
|
||||
$code = $this->encode($border);
|
||||
[$vbw, $vbh] = $this->measure($code);
|
||||
|
||||
$modules = $this->eachModuleGroup(
|
||||
@@ -167,15 +173,17 @@ class QrCode
|
||||
* @param int|string|null $size Optional image width/height in pixels (defaults to a size per module of 4x4) or CSS width of the `<svg>` element
|
||||
* @param string $color Foreground color in hex format
|
||||
* @param string $back Background color in hex format
|
||||
* @param int $border Border size in number of modules
|
||||
*/
|
||||
public function write(
|
||||
string $file,
|
||||
int|string|null $size = null,
|
||||
string $color = '#000000',
|
||||
string $back = '#ffffff'
|
||||
string $back = '#ffffff',
|
||||
int $border = 4
|
||||
): void {
|
||||
$format = F::extension($file);
|
||||
$args = [$size, $color, $back];
|
||||
$args = [$size, $color, $back, $border];
|
||||
|
||||
match ($format) {
|
||||
'gif' => imagegif($this->toImage(...$args), $file),
|
||||
@@ -395,7 +403,7 @@ class QrCode
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function encode(): array
|
||||
protected function encode(int $q = 4): array
|
||||
{
|
||||
[$data, $version, $ecl, $ec] = $this->encodeData();
|
||||
$data = $this->encodeErrorCorrection($data, $ec, $version);
|
||||
@@ -404,7 +412,7 @@ class QrCode
|
||||
$mtx = $this->finalizeMatrix($mtx, $size, $ecl, $mask, $version);
|
||||
|
||||
return [
|
||||
'q' => [4, 4, 4, 4],
|
||||
'q' => [$q, $q, $q, $q],
|
||||
'size' => [$size, $size],
|
||||
'bits' => $mtx
|
||||
];
|
||||
|
@@ -56,13 +56,11 @@ class Assets
|
||||
*/
|
||||
public function css(): array
|
||||
{
|
||||
$css = A::merge(
|
||||
[
|
||||
'index' => $this->url . '/css/style.min.css',
|
||||
'plugins' => $this->plugins->url('css')
|
||||
],
|
||||
$this->custom('panel.css')
|
||||
);
|
||||
$css = [
|
||||
'index' => $this->url . '/css/style.min.css',
|
||||
'plugins' => $this->plugins->url('css'),
|
||||
...$this->custom('panel.css')
|
||||
];
|
||||
|
||||
// during dev mode we do not need to load
|
||||
// the general stylesheet (as styling will be inlined)
|
||||
@@ -201,8 +199,8 @@ class Assets
|
||||
*/
|
||||
public function icons(): string
|
||||
{
|
||||
$dir = $this->kirby->root('panel') . '/';
|
||||
$dir .= $this->dev ? 'public' : 'dist';
|
||||
$dir = $this->kirby->root('panel') . '/';
|
||||
$dir .= $this->dev ? 'public' : 'dist';
|
||||
$icons = F::read($dir . '/img/icons.svg');
|
||||
$icons = preg_replace('/<!--(.|\s)*?-->/', '', $icons);
|
||||
return $icons;
|
||||
@@ -213,64 +211,55 @@ class Assets
|
||||
*/
|
||||
public function js(): array
|
||||
{
|
||||
$js = A::merge(
|
||||
[
|
||||
'vue' => [
|
||||
'nonce' => $this->nonce,
|
||||
'src' => $this->url . '/js/vue.min.js'
|
||||
],
|
||||
'vendor' => [
|
||||
'nonce' => $this->nonce,
|
||||
'src' => $this->url . '/js/vendor.min.js',
|
||||
'type' => 'module'
|
||||
],
|
||||
'pluginloader' => [
|
||||
'nonce' => $this->nonce,
|
||||
'src' => $this->url . '/js/plugins.js',
|
||||
'type' => 'module'
|
||||
],
|
||||
'plugins' => [
|
||||
'nonce' => $this->nonce,
|
||||
'src' => $this->plugins->url('js'),
|
||||
'defer' => true
|
||||
]
|
||||
$js = [
|
||||
'vue' => [
|
||||
'nonce' => $this->nonce,
|
||||
'src' => $this->url . '/js/vue.min.js'
|
||||
],
|
||||
A::map($this->custom('panel.js'), fn ($src) => [
|
||||
'vendor' => [
|
||||
'nonce' => $this->nonce,
|
||||
'src' => $this->url . '/js/vendor.min.js',
|
||||
'type' => 'module'
|
||||
],
|
||||
'pluginloader' => [
|
||||
'nonce' => $this->nonce,
|
||||
'src' => $this->url . '/js/plugins.js',
|
||||
'type' => 'module'
|
||||
],
|
||||
'plugins' => [
|
||||
'nonce' => $this->nonce,
|
||||
'src' => $this->plugins->url('js'),
|
||||
'defer' => true
|
||||
],
|
||||
...A::map($this->custom('panel.js'), fn ($src) => [
|
||||
'nonce' => $this->nonce,
|
||||
'src' => $src,
|
||||
'type' => 'module'
|
||||
]),
|
||||
[
|
||||
'index' => [
|
||||
'nonce' => $this->nonce,
|
||||
'src' => $this->url . '/js/index.min.js',
|
||||
'type' => 'module'
|
||||
],
|
||||
]
|
||||
);
|
||||
'index' => [
|
||||
'nonce' => $this->nonce,
|
||||
'src' => $this->url . '/js/index.min.js',
|
||||
'type' => 'module'
|
||||
],
|
||||
];
|
||||
|
||||
|
||||
// during dev mode, add vite client and adapt
|
||||
// path to `index.js` - vendor does not need
|
||||
// to be loaded in dev mode
|
||||
if ($this->dev === true) {
|
||||
// load the non-minified index.js, remove vendor script and
|
||||
// development version of Vue
|
||||
$js['vendor']['src'] = null;
|
||||
$js['index']['src'] = $this->url . '/src/index.js';
|
||||
$js['vue']['src'] = $this->url . '/node_modules/vue/dist/vue.js';
|
||||
|
||||
// add vite dev client
|
||||
$js['vite'] = [
|
||||
'nonce' => $this->nonce,
|
||||
'src' => $this->url . '/@vite/client',
|
||||
'type' => 'module'
|
||||
];
|
||||
|
||||
$js['index'] = [
|
||||
'nonce' => $this->nonce,
|
||||
'src' => $this->url . '/src/index.js',
|
||||
'type' => 'module'
|
||||
];
|
||||
|
||||
// load the development version of Vue
|
||||
$js['vue']['src'] = $this->url . '/node_modules/vue/dist/vue.js';
|
||||
|
||||
// remove the vendor script
|
||||
$js['vendor']['src'] = null;
|
||||
}
|
||||
|
||||
return array_filter($js, fn ($js) => empty($js['src']) === false);
|
||||
|
@@ -219,9 +219,11 @@ class Example
|
||||
$tail = $matches[2][$key];
|
||||
$code = $matches[3][$key];
|
||||
|
||||
$scriptId = trim(preg_replace_callback('!script="(.*?)"!', function ($match) {
|
||||
return trim($match[1]);
|
||||
}, $tail));
|
||||
$scriptId = trim(preg_replace_callback(
|
||||
'!script="(.*?)"!',
|
||||
fn ($match) => trim($match[1]),
|
||||
$tail
|
||||
));
|
||||
|
||||
$scriptBlock = $scripts[$scriptId] ?? null;
|
||||
|
||||
|
@@ -218,7 +218,7 @@ class Sessions
|
||||
* @internal
|
||||
* @param \Kirby\Session\Session $session Session instance to push to the cache
|
||||
*/
|
||||
public function updateCache(Session $session)
|
||||
public function updateCache(Session $session): void
|
||||
{
|
||||
$this->cache[$session->token()] = $session;
|
||||
}
|
||||
|
@@ -177,7 +177,7 @@ class KirbyTag
|
||||
}
|
||||
|
||||
$pos = strpos($tag, ':');
|
||||
$type = trim(substr($tag, 0, $pos ? $pos : null));
|
||||
$type = trim(substr($tag, 0, $pos ?: null));
|
||||
$type = strtolower($type);
|
||||
$attr = static::$types[$type]['attr'] ?? [];
|
||||
|
||||
|
@@ -76,7 +76,7 @@ class Component
|
||||
}
|
||||
|
||||
$this->attrs = $attrs;
|
||||
$this->options = $options = $this->setup($type);
|
||||
$this->options = $options = static::setup($type);
|
||||
$this->methods = $methods = $options['methods'] ?? [];
|
||||
|
||||
foreach ($attrs as $attrName => $attrValue) {
|
||||
|
@@ -464,7 +464,7 @@ class Dom
|
||||
$namespaceUri = null;
|
||||
$itemLocal = $item;
|
||||
if (Str::contains($item, ':') === true) {
|
||||
list($namespaceName, $itemLocal) = explode(':', $item);
|
||||
[$namespaceName, $itemLocal] = explode(':', $item);
|
||||
$namespaceUri = $allowedNamespaces[$namespaceName] ?? null;
|
||||
} else {
|
||||
// list items without namespace are from the default namespace
|
||||
|
@@ -26,7 +26,7 @@ class Escape
|
||||
/**
|
||||
* The internal singleton escaper instance
|
||||
*/
|
||||
protected static Escaper|null $escaper;
|
||||
protected static Escaper|null $escaper = null;
|
||||
|
||||
/**
|
||||
* Escape common HTML attributes data
|
||||
|
@@ -20,7 +20,7 @@ class Html extends Xml
|
||||
/**
|
||||
* An internal store for an HTML entities translation table
|
||||
*/
|
||||
public static array|null $entities;
|
||||
public static array|null $entities = null;
|
||||
|
||||
/**
|
||||
* List of HTML tags that can be used inline
|
||||
|
@@ -386,10 +386,13 @@ class Str
|
||||
$encoded = '';
|
||||
|
||||
for ($i = 0; $i < static::length($string); $i++) {
|
||||
$char = static::substr($string, $i, 1);
|
||||
$char = mb_convert_encoding($char, 'UCS-4BE', 'UTF-8');
|
||||
list(, $code) = unpack('N', $char);
|
||||
$encoded .= rand(1, 2) === 1 ? '&#' . $code . ';' : '&#x' . dechex($code) . ';';
|
||||
$char = static::substr($string, $i, 1);
|
||||
$char = mb_convert_encoding($char, 'UCS-4BE', 'UTF-8');
|
||||
[, $code] = unpack('N', $char);
|
||||
$encoded .= match (random_int(1, 2)) {
|
||||
1 => '&#' . $code . ';',
|
||||
2 => '&#x' . dechex($code) . ';'
|
||||
};
|
||||
}
|
||||
|
||||
return $encoded;
|
||||
|
@@ -26,7 +26,7 @@ class BlockUuid extends FieldUuid
|
||||
/**
|
||||
* @var \Kirby\Cms\Block|null
|
||||
*/
|
||||
public Identifiable|null $model;
|
||||
public Identifiable|null $model = null;
|
||||
|
||||
/**
|
||||
* Converts content field to a Blocks collection
|
||||
|
@@ -47,7 +47,7 @@ abstract class FieldUuid extends Uuid
|
||||
$parent = Uuid::for($value['parent'])->model();
|
||||
|
||||
if ($field = $parent?->content()->get($value['field'])) {
|
||||
return $this->fieldToCollection($field)->get($value['id']);
|
||||
return static::fieldToCollection($field)->get($value['id']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -22,7 +22,7 @@ class FileUuid extends ModelUuid
|
||||
/**
|
||||
* @var \Kirby\Cms\File|null
|
||||
*/
|
||||
public Identifiable|null $model;
|
||||
public Identifiable|null $model = null;
|
||||
|
||||
/**
|
||||
* Looks up UUID in cache and resolves to file object;
|
||||
|
@@ -20,7 +20,7 @@ abstract class ModelUuid extends Uuid
|
||||
/**
|
||||
* @var \Kirby\Cms\ModelWithContent|null
|
||||
*/
|
||||
public Identifiable|null $model;
|
||||
public Identifiable|null $model = null;
|
||||
|
||||
/**
|
||||
* Looks up UUID in local and global index
|
||||
|
@@ -23,7 +23,7 @@ class PageUuid extends ModelUuid
|
||||
/**
|
||||
* @var \Kirby\Cms\Page|null
|
||||
*/
|
||||
public Identifiable|null $model;
|
||||
public Identifiable|null $model = null;
|
||||
|
||||
/**
|
||||
* Looks up UUID in cache and resolves
|
||||
|
@@ -23,7 +23,7 @@ class SiteUuid extends Uuid
|
||||
/**
|
||||
* @var \Kirby\Cms\Site|null
|
||||
*/
|
||||
public Identifiable|null $model;
|
||||
public Identifiable|null $model = null;
|
||||
|
||||
/*
|
||||
* Returns empty string since
|
||||
|
@@ -26,7 +26,7 @@ class StructureUuid extends FieldUuid
|
||||
/**
|
||||
* @var \Kirby\Cms\StructureObject|null
|
||||
*/
|
||||
public Identifiable|null $model;
|
||||
public Identifiable|null $model = null;
|
||||
|
||||
/**
|
||||
* Converts content field to a Structure collection
|
||||
|
@@ -23,7 +23,7 @@ class UserUuid extends Uuid
|
||||
/**
|
||||
* @var \Kirby\Cms\User|null
|
||||
*/
|
||||
public Identifiable|null $model;
|
||||
public Identifiable|null $model = null;
|
||||
|
||||
/*
|
||||
* Returns the user ID
|
||||
|
5
kirby/vendor/bin/yaml-lint.bat
vendored
Normal file
5
kirby/vendor/bin/yaml-lint.bat
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
@ECHO OFF
|
||||
setlocal DISABLEDELAYEDEXPANSION
|
||||
SET BIN_TARGET=%~dp0/yaml-lint
|
||||
SET COMPOSER_RUNTIME_BIN_DIR=%~dp0
|
||||
php "%BIN_TARGET%" %*
|
@@ -116,15 +116,33 @@ class SimpleImage
|
||||
*/
|
||||
public function __destruct()
|
||||
{
|
||||
if ($this->image instanceof GdImage) {
|
||||
imagedestroy($this->image);
|
||||
}
|
||||
$this->reset();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Helper functions
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Checks if the SimpleImage object has loaded an image.
|
||||
*/
|
||||
public function hasImage(): bool
|
||||
{
|
||||
return $this->image instanceof GdImage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroys the image resource.
|
||||
*/
|
||||
public function reset(): static
|
||||
{
|
||||
if ($this->hasImage()) {
|
||||
imagedestroy($this->image);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set flag value.
|
||||
*
|
||||
@@ -313,7 +331,7 @@ class SimpleImage
|
||||
*
|
||||
* @throws Exception Thrown when WEBP support is not enabled or unsupported format.
|
||||
*/
|
||||
protected function generate(string $mimeType = null, array|int $options = []): array
|
||||
public function generate(string $mimeType = null, array|int $options = 100): array
|
||||
{
|
||||
// Format defaults to the original mime type
|
||||
$mimeType = $mimeType ?: $this->mimeType;
|
||||
|
44
kirby/vendor/composer/installed.json
vendored
44
kirby/vendor/composer/installed.json
vendored
@@ -64,17 +64,17 @@
|
||||
},
|
||||
{
|
||||
"name": "claviska/simpleimage",
|
||||
"version": "4.1.0",
|
||||
"version_normalized": "4.1.0.0",
|
||||
"version": "4.2.0",
|
||||
"version_normalized": "4.2.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/claviska/SimpleImage.git",
|
||||
"reference": "1dcb9c785c44960890970d26e25c437a2a252bbf"
|
||||
"reference": "dfbe53c01dae8467468ef2b817c09b786a7839d2"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/claviska/SimpleImage/zipball/1dcb9c785c44960890970d26e25c437a2a252bbf",
|
||||
"reference": "1dcb9c785c44960890970d26e25c437a2a252bbf",
|
||||
"url": "https://api.github.com/repos/claviska/SimpleImage/zipball/dfbe53c01dae8467468ef2b817c09b786a7839d2",
|
||||
"reference": "dfbe53c01dae8467468ef2b817c09b786a7839d2",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -86,7 +86,7 @@
|
||||
"laravel/pint": "^1.5",
|
||||
"phpstan/phpstan": "^1.10"
|
||||
},
|
||||
"time": "2024-03-04T15:41:11+00:00",
|
||||
"time": "2024-04-15T16:07:16+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@@ -108,7 +108,7 @@
|
||||
"description": "A PHP class that makes working with images as simple as possible.",
|
||||
"support": {
|
||||
"issues": "https://github.com/claviska/SimpleImage/issues",
|
||||
"source": "https://github.com/claviska/SimpleImage/tree/4.1.0"
|
||||
"source": "https://github.com/claviska/SimpleImage/tree/4.2.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -651,27 +651,27 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/deprecation-contracts",
|
||||
"version": "v3.4.0",
|
||||
"version_normalized": "3.4.0.0",
|
||||
"version": "v3.5.0",
|
||||
"version_normalized": "3.5.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/deprecation-contracts.git",
|
||||
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf"
|
||||
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf",
|
||||
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf",
|
||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
|
||||
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.1"
|
||||
},
|
||||
"time": "2023-05-23T14:45:45+00:00",
|
||||
"time": "2024-04-18T09:32:20+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "3.4-dev"
|
||||
"dev-main": "3.5-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/contracts",
|
||||
@@ -701,7 +701,7 @@
|
||||
"description": "A generic function and convention to trigger deprecation notices",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0"
|
||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1057,17 +1057,17 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/yaml",
|
||||
"version": "v6.4.3",
|
||||
"version_normalized": "6.4.3.0",
|
||||
"version": "v6.4.8",
|
||||
"version_normalized": "6.4.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/yaml.git",
|
||||
"reference": "d75715985f0f94f978e3a8fa42533e10db921b90"
|
||||
"reference": "52903de178d542850f6f341ba92995d3d63e60c9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/yaml/zipball/d75715985f0f94f978e3a8fa42533e10db921b90",
|
||||
"reference": "d75715985f0f94f978e3a8fa42533e10db921b90",
|
||||
"url": "https://api.github.com/repos/symfony/yaml/zipball/52903de178d542850f6f341ba92995d3d63e60c9",
|
||||
"reference": "52903de178d542850f6f341ba92995d3d63e60c9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1081,7 +1081,7 @@
|
||||
"require-dev": {
|
||||
"symfony/console": "^5.4|^6.0|^7.0"
|
||||
},
|
||||
"time": "2024-01-23T14:51:35+00:00",
|
||||
"time": "2024-05-31T14:49:08+00:00",
|
||||
"bin": [
|
||||
"Resources/bin/yaml-lint"
|
||||
],
|
||||
@@ -1112,7 +1112,7 @@
|
||||
"description": "Loads and dumps YAML files",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/yaml/tree/v6.4.3"
|
||||
"source": "https://github.com/symfony/yaml/tree/v6.4.8"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
26
kirby/vendor/composer/installed.php
vendored
26
kirby/vendor/composer/installed.php
vendored
@@ -1,8 +1,8 @@
|
||||
<?php return array(
|
||||
'root' => array(
|
||||
'name' => 'getkirby/cms',
|
||||
'pretty_version' => '4.2.0',
|
||||
'version' => '4.2.0.0',
|
||||
'pretty_version' => '4.3.0',
|
||||
'version' => '4.3.0.0',
|
||||
'reference' => null,
|
||||
'type' => 'kirby-cms',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
@@ -20,9 +20,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'claviska/simpleimage' => array(
|
||||
'pretty_version' => '4.1.0',
|
||||
'version' => '4.1.0.0',
|
||||
'reference' => '1dcb9c785c44960890970d26e25c437a2a252bbf',
|
||||
'pretty_version' => '4.2.0',
|
||||
'version' => '4.2.0.0',
|
||||
'reference' => 'dfbe53c01dae8467468ef2b817c09b786a7839d2',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../claviska/simpleimage',
|
||||
'aliases' => array(),
|
||||
@@ -47,8 +47,8 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'getkirby/cms' => array(
|
||||
'pretty_version' => '4.2.0',
|
||||
'version' => '4.2.0.0',
|
||||
'pretty_version' => '4.3.0',
|
||||
'version' => '4.3.0.0',
|
||||
'reference' => null,
|
||||
'type' => 'kirby-cms',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
@@ -116,9 +116,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/deprecation-contracts' => array(
|
||||
'pretty_version' => 'v3.4.0',
|
||||
'version' => '3.4.0.0',
|
||||
'reference' => '7c3aff79d10325257a001fcf92d991f24fc967cf',
|
||||
'pretty_version' => 'v3.5.0',
|
||||
'version' => '3.5.0.0',
|
||||
'reference' => '0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
|
||||
'aliases' => array(),
|
||||
@@ -167,9 +167,9 @@
|
||||
),
|
||||
),
|
||||
'symfony/yaml' => array(
|
||||
'pretty_version' => 'v6.4.3',
|
||||
'version' => '6.4.3.0',
|
||||
'reference' => 'd75715985f0f94f978e3a8fa42533e10db921b90',
|
||||
'pretty_version' => 'v6.4.8',
|
||||
'version' => '6.4.8.0',
|
||||
'reference' => '52903de178d542850f6f341ba92995d3d63e60c9',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/yaml',
|
||||
'aliases' => array(),
|
||||
|
@@ -25,7 +25,7 @@
|
||||
"minimum-stability": "dev",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "3.4-dev"
|
||||
"dev-main": "3.5-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/contracts",
|
||||
|
4
kirby/vendor/symfony/yaml/Parser.php
vendored
4
kirby/vendor/symfony/yaml/Parser.php
vendored
@@ -638,12 +638,12 @@ class Parser
|
||||
}
|
||||
|
||||
if ($this->isCurrentLineBlank()) {
|
||||
$data[] = substr($this->currentLine, $newIndent);
|
||||
$data[] = substr($this->currentLine, $newIndent ?? 0);
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($indent >= $newIndent) {
|
||||
$data[] = substr($this->currentLine, $newIndent);
|
||||
$data[] = substr($this->currentLine, $newIndent ?? 0);
|
||||
} elseif ($this->isCurrentLineComment()) {
|
||||
$data[] = $this->currentLine;
|
||||
} elseif (0 == $indent) {
|
||||
|
Reference in New Issue
Block a user