Upgrade to 3.1.4
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "getkirby/cms",
|
"name": "getkirby/cms",
|
||||||
"description": "The Kirby 3 core",
|
"description": "The Kirby 3 core",
|
||||||
"version": "3.1.3",
|
"version": "3.1.4",
|
||||||
"license": "proprietary",
|
"license": "proprietary",
|
||||||
"keywords": ["kirby", "cms", "core"],
|
"keywords": ["kirby", "cms", "core"],
|
||||||
"homepage": "https://getkirby.com",
|
"homepage": "https://getkirby.com",
|
||||||
|
2
kirby/composer.lock
generated
2
kirby/composer.lock
generated
@@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "7c03372aae9d6bcfc8fdb6399a1e9e38",
|
"content-hash": "ed043f76d01c39662efae54a2c917b0a",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "claviska/simpleimage",
|
"name": "claviska/simpleimage",
|
||||||
|
@@ -21,7 +21,7 @@ return [
|
|||||||
return $columns;
|
return $columns;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Default value for the field, which will be used when a Page/File/User is created
|
* Default value for the field, which will be used when a page/file/user is created
|
||||||
*/
|
*/
|
||||||
'default' => function ($default = null) {
|
'default' => function ($default = null) {
|
||||||
return Str::split($default, ',');
|
return Str::split($default, ',');
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
return [
|
return [
|
||||||
'props' => [
|
'props' => [
|
||||||
/**
|
/**
|
||||||
* Default date when a new Page/File/User gets created
|
* Default date when a new page/file/user gets created
|
||||||
*/
|
*/
|
||||||
'default' => function ($default = null) {
|
'default' => function ($default = null) {
|
||||||
return $default;
|
return $default;
|
||||||
@@ -39,7 +39,7 @@ return [
|
|||||||
*/
|
*/
|
||||||
'placeholder' => null,
|
'placeholder' => null,
|
||||||
/**
|
/**
|
||||||
* Pass true or an array of time field options to show the time selector.
|
* Pass `true` or an array of time field options to show the time selector.
|
||||||
*/
|
*/
|
||||||
'time' => function ($time = false) {
|
'time' => function ($time = false) {
|
||||||
return $time;
|
return $time;
|
||||||
|
@@ -43,7 +43,7 @@ return [
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Changes the layout of the selected files. Available layouts: list, cards
|
* Changes the layout of the selected files. Available layouts: `list`, `cards`
|
||||||
*/
|
*/
|
||||||
'layout' => function (string $layout = 'list') {
|
'layout' => function (string $layout = 'list') {
|
||||||
return $layout;
|
return $layout;
|
||||||
@@ -78,7 +78,7 @@ return [
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Layout size for cards
|
* Layout size for cards: `tiny`, `small`, `medium`, `large` or `huge`
|
||||||
*/
|
*/
|
||||||
'size' => function (string $size = null) {
|
'size' => function (string $size = null) {
|
||||||
return $size;
|
return $size;
|
||||||
|
@@ -18,7 +18,7 @@ return [
|
|||||||
'translate' => null,
|
'translate' => null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If false, the prepended number will be hidden
|
* If `false`, the prepended number will be hidden
|
||||||
*/
|
*/
|
||||||
'numbered' => function (bool $numbered = true) {
|
'numbered' => function (bool $numbered = true) {
|
||||||
return $numbered;
|
return $numbered;
|
||||||
|
@@ -4,6 +4,9 @@ use Kirby\Toolkit\I18n;
|
|||||||
|
|
||||||
return [
|
return [
|
||||||
'props' => [
|
'props' => [
|
||||||
|
/**
|
||||||
|
* Text to be displayed
|
||||||
|
*/
|
||||||
'text' => function ($value = null) {
|
'text' => function ($value = null) {
|
||||||
return I18n::translate($value, $value);
|
return I18n::translate($value, $value);
|
||||||
},
|
},
|
||||||
|
@@ -5,7 +5,7 @@ use Kirby\Form\Options;
|
|||||||
return [
|
return [
|
||||||
'props' => [
|
'props' => [
|
||||||
/**
|
/**
|
||||||
* API settings for options requests. This will only take affect when <code>options</code> is set to <code>api</code>.
|
* API settings for options requests. This will only take affect when `options` is set to `api`.
|
||||||
*/
|
*/
|
||||||
'api' => function ($api = null) {
|
'api' => function ($api = null) {
|
||||||
return $api;
|
return $api;
|
||||||
@@ -17,7 +17,7 @@ return [
|
|||||||
return $options;
|
return $options;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Query settings for options queries. This will only take affect when <code>options</code> is set to <code>query</code>.
|
* Query settings for options queries. This will only take affect when `options` is set to `query`.
|
||||||
*/
|
*/
|
||||||
'query' => function ($query = null) {
|
'query' => function ($query = null) {
|
||||||
return $query;
|
return $query;
|
||||||
|
@@ -22,7 +22,7 @@ return [
|
|||||||
return $search;
|
return $search;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* If true, selected entries will be sorted
|
* If `true`, selected entries will be sorted
|
||||||
* according to their position in the dropdown
|
* according to their position in the dropdown
|
||||||
*/
|
*/
|
||||||
'sort' => function (bool $sort = false) {
|
'sort' => function (bool $sort = false) {
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
return [
|
return [
|
||||||
'props' => [
|
'props' => [
|
||||||
/**
|
/**
|
||||||
* Default number that will be saved when a new Page/User/File is created
|
* Default number that will be saved when a new page/user/file is created
|
||||||
*/
|
*/
|
||||||
'default' => function ($default = null) {
|
'default' => function ($default = null) {
|
||||||
return $this->toNumber($default);
|
return $this->toNumber($default);
|
||||||
@@ -21,7 +21,7 @@ return [
|
|||||||
return $max;
|
return $max;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Allowed incremental steps between numbers (i.e 0.5)
|
* Allowed incremental steps between numbers (i.e `0.5`)
|
||||||
*/
|
*/
|
||||||
'step' => function ($step = 1) {
|
'step' => function ($step = 1) {
|
||||||
return $this->toNumber($step);
|
return $this->toNumber($step);
|
||||||
|
@@ -16,7 +16,7 @@ return [
|
|||||||
'placeholder' => null,
|
'placeholder' => null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default selected page(s) when a new Page/File/User is created
|
* Default selected page(s) when a new page/file/user is created
|
||||||
*/
|
*/
|
||||||
'default' => function ($default = null) {
|
'default' => function ($default = null) {
|
||||||
return $this->toPages($default);
|
return $this->toPages($default);
|
||||||
@@ -44,7 +44,7 @@ return [
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Changes the layout of the selected files. Available layouts: list, cards
|
* Changes the layout of the selected files. Available layouts: `list`, `cards`
|
||||||
*/
|
*/
|
||||||
'layout' => function (string $layout = 'list') {
|
'layout' => function (string $layout = 'list') {
|
||||||
return $layout;
|
return $layout;
|
||||||
@@ -65,7 +65,7 @@ return [
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If false, only a single page can be selected
|
* If `false`, only a single page can be selected
|
||||||
*/
|
*/
|
||||||
'multiple' => function (bool $multiple = true) {
|
'multiple' => function (bool $multiple = true) {
|
||||||
return $multiple;
|
return $multiple;
|
||||||
@@ -79,7 +79,7 @@ return [
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Layout size for cards
|
* Layout size for cards: `tiny`, `small`, `medium`, `large` or `huge`
|
||||||
*/
|
*/
|
||||||
'size' => function (string $size = null) {
|
'size' => function (string $size = null) {
|
||||||
return $size;
|
return $size;
|
||||||
|
@@ -68,7 +68,7 @@ return [
|
|||||||
return $sortable;
|
return $sortable;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Sorts the entries by the given field and order (i.e. title desc)
|
* Sorts the entries by the given field and order (i.e. `title desc`)
|
||||||
* Drag & drop is disabled in this case
|
* Drag & drop is disabled in this case
|
||||||
*/
|
*/
|
||||||
'sortBy' => function (string $sort = null) {
|
'sortBy' => function (string $sort = null) {
|
||||||
|
@@ -12,7 +12,7 @@ return [
|
|||||||
'placeholder' => null,
|
'placeholder' => null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If set to <code>all</code>, any type of input is accepted. If set to <code>options</code> only the predefined options are accepted as input.
|
* If set to `all`, any type of input is accepted. If set to `options` only the predefined options are accepted as input.
|
||||||
*/
|
*/
|
||||||
'accept' => function ($value = 'all') {
|
'accept' => function ($value = 'all') {
|
||||||
return V::in($value, ['all', 'options']) ? $value : 'all';
|
return V::in($value, ['all', 'options']) ? $value : 'all';
|
||||||
@@ -75,7 +75,7 @@ return [
|
|||||||
'value' => $option,
|
'value' => $option,
|
||||||
'text' => $option,
|
'text' => $option,
|
||||||
];
|
];
|
||||||
}, Str::split($value));
|
}, Str::split($value, $this->separator()));
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
'save' => function (array $value = null): string {
|
'save' => function (array $value = null): string {
|
||||||
|
@@ -8,7 +8,7 @@ return [
|
|||||||
'props' => [
|
'props' => [
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The field value will be converted with the selected converter before the value gets saved. Available converters: lower, upper, ucfirst, slug
|
* The field value will be converted with the selected converter before the value gets saved. Available converters: `lower`, `upper`, `ucfirst`, `slug`
|
||||||
*/
|
*/
|
||||||
'converter' => function ($value = null) {
|
'converter' => function ($value = null) {
|
||||||
if ($value !== null && in_array($value, array_keys($this->converters())) === false) {
|
if ($value !== null && in_array($value, array_keys($this->converters())) === false) {
|
||||||
@@ -50,7 +50,7 @@ return [
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If false, spellcheck will be switched off
|
* If `false`, spellcheck will be switched off
|
||||||
*/
|
*/
|
||||||
'spellcheck' => function (bool $spellcheck = false) {
|
'spellcheck' => function (bool $spellcheck = false) {
|
||||||
return $spellcheck;
|
return $spellcheck;
|
||||||
|
@@ -9,7 +9,7 @@ return [
|
|||||||
'before' => null,
|
'before' => null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enables/disables the format buttons. Can either be true/false or a list of allowed buttons. Available buttons: headlines, italic, bold, link, email, file, list, code, ul, ol
|
* Enables/disables the format buttons. Can either be `true`/`false` or a list of allowed buttons. Available buttons: `headlines`, `italic`, `bold`, `link`, `email`, `file`, `list`, `code`, `ul`, `ol` (as well as `|` for a divider)
|
||||||
*/
|
*/
|
||||||
'buttons' => function ($buttons = true) {
|
'buttons' => function ($buttons = true) {
|
||||||
return $buttons;
|
return $buttons;
|
||||||
@@ -23,7 +23,7 @@ return [
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the default text when a new Page/File/User is created
|
* Sets the default text when a new page/file/user is created
|
||||||
*/
|
*/
|
||||||
'default' => function (string $default = null) {
|
'default' => function (string $default = null) {
|
||||||
return trim($default);
|
return trim($default);
|
||||||
@@ -59,7 +59,7 @@ return [
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Changes the size of the textarea. Available sizes: small, medium, large, huge
|
* Changes the size of the textarea. Available sizes: `small`, `medium`, `large`, `huge`
|
||||||
*/
|
*/
|
||||||
'size' => function (string $size = null) {
|
'size' => function (string $size = null) {
|
||||||
return $size;
|
return $size;
|
||||||
|
@@ -8,7 +8,7 @@ return [
|
|||||||
'placeholder' => null,
|
'placeholder' => null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the default time when a new Page/File/User is created
|
* Sets the default time when a new page/file/user is created
|
||||||
*/
|
*/
|
||||||
'default' => function ($default = null) {
|
'default' => function ($default = null) {
|
||||||
return $default;
|
return $default;
|
||||||
@@ -20,7 +20,7 @@ return [
|
|||||||
return $icon;
|
return $icon;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* 12 or 24 hour notation. If 12, an AM/PM selector will be shown.
|
* `12` or `24` hour notation. If `12`, an AM/PM selector will be shown.
|
||||||
*/
|
*/
|
||||||
'notation' => function (int $value = 24) {
|
'notation' => function (int $value = 24) {
|
||||||
return $value === 24 ? 24 : 12;
|
return $value === 24 ? 24 : 12;
|
||||||
|
@@ -10,7 +10,7 @@ return [
|
|||||||
'placeholder' => null,
|
'placeholder' => null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default value which will be saved when a new Page/User/File is created
|
* Default value which will be saved when a new page/user/file is created
|
||||||
*/
|
*/
|
||||||
'default' => function ($value = null) {
|
'default' => function ($value = null) {
|
||||||
return $this->toBool($value);
|
return $this->toBool($value);
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'mixins' => ['min'],
|
'mixins' => ['min', 'selector'],
|
||||||
'props' => [
|
'props' => [
|
||||||
/**
|
/**
|
||||||
* Unset inherited props
|
* Unset inherited props
|
||||||
@@ -13,7 +13,7 @@ return [
|
|||||||
'placeholder' => null,
|
'placeholder' => null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default selected user(s) when a new Page/File/User is created
|
* Default selected user(s) when a new page/file/user is created
|
||||||
*/
|
*/
|
||||||
'default' => function ($default = null) {
|
'default' => function ($default = null) {
|
||||||
if ($default === false) {
|
if ($default === false) {
|
||||||
@@ -28,30 +28,35 @@ return [
|
|||||||
|
|
||||||
return $this->toUsers($default);
|
return $this->toUsers($default);
|
||||||
},
|
},
|
||||||
/**
|
|
||||||
* The placeholder text if no users have been selected yet
|
/**
|
||||||
|
* The placeholder text if none have been selected yet
|
||||||
*/
|
*/
|
||||||
'empty' => function ($empty = null) {
|
'empty' => function ($empty = null) {
|
||||||
return I18n::translate($empty, $empty);
|
return I18n::translate($empty, $empty);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The minimum number of required selected users
|
* The minimum number of required selected
|
||||||
*/
|
*/
|
||||||
'min' => function (int $min = null) {
|
'min' => function (int $min = null) {
|
||||||
return $min;
|
return $min;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The maximum number of allowed selected users
|
* The maximum number of allowed selected
|
||||||
*/
|
*/
|
||||||
'max' => function (int $max = null) {
|
'max' => function (int $max = null) {
|
||||||
return $max;
|
return $max;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If false, only a single user can be selected
|
* If `false`, only a single one can be selected
|
||||||
*/
|
*/
|
||||||
'multiple' => function (bool $multiple = true) {
|
'multiple' => function (bool $multiple = true) {
|
||||||
return $multiple;
|
return $multiple;
|
||||||
},
|
},
|
||||||
|
|
||||||
'value' => function ($value = null) {
|
'value' => function ($value = null) {
|
||||||
return $this->toUsers($value);
|
return $this->toUsers($value);
|
||||||
},
|
},
|
||||||
|
@@ -29,7 +29,7 @@ return [
|
|||||||
return $info;
|
return $info;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* The size option controls the size of cards. By default cards are auto-sized and the cards grid will always fill the full width. With a size you can disable auto-sizing. Available sizes: tiny, small, medium, large
|
* The size option controls the size of cards. By default cards are auto-sized and the cards grid will always fill the full width. With a size you can disable auto-sizing. Available sizes: `tiny`, `small`, `medium`, `large`, `huge`
|
||||||
*/
|
*/
|
||||||
'size' => function (string $size = 'auto') {
|
'size' => function (string $size = 'auto') {
|
||||||
return $size;
|
return $size;
|
||||||
@@ -41,7 +41,7 @@ return [
|
|||||||
return $sortable;
|
return $sortable;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Overwrites manual sorting and sorts by the given field and sorting direction (i.e. filename desc)
|
* Overwrites manual sorting and sorts by the given field and sorting direction (i.e. `filename desc`)
|
||||||
*/
|
*/
|
||||||
'sortBy' => function (string $sortBy = null) {
|
'sortBy' => function (string $sortBy = null) {
|
||||||
return $sortBy;
|
return $sortBy;
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
return [
|
return [
|
||||||
'props' => [
|
'props' => [
|
||||||
/**
|
/**
|
||||||
* Section layout. Available layout methods: list, cards.
|
* Section layout. Available layout methods: `list`, `cards`.
|
||||||
*/
|
*/
|
||||||
'layout' => function (string $layout = 'list') {
|
'layout' => function (string $layout = 'list') {
|
||||||
return $layout === 'cards' ? 'cards' : 'list';
|
return $layout === 'cards' ? 'cards' : 'list';
|
||||||
|
@@ -37,7 +37,7 @@ return [
|
|||||||
return $info;
|
return $info;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* The size option controls the size of cards. By default cards are auto-sized and the cards grid will always fill the full width. With a size you can disable auto-sizing. Available sizes: tiny, small, medium, large
|
* The size option controls the size of cards. By default cards are auto-sized and the cards grid will always fill the full width. With a size you can disable auto-sizing. Available sizes: `tiny`, `small`, `medium`, `large`, `huge`
|
||||||
*/
|
*/
|
||||||
'size' => function (string $size = 'auto') {
|
'size' => function (string $size = 'auto') {
|
||||||
return $size;
|
return $size;
|
||||||
@@ -49,13 +49,13 @@ return [
|
|||||||
return $sortable;
|
return $sortable;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Overwrites manual sorting and sorts by the given field and sorting direction (i.e. date desc)
|
* Overwrites manual sorting and sorts by the given field and sorting direction (i.e. `date desc`)
|
||||||
*/
|
*/
|
||||||
'sortBy' => function (string $sortBy = null) {
|
'sortBy' => function (string $sortBy = null) {
|
||||||
return $sortBy;
|
return $sortBy;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Filters pages by their status. Available status settings: draft, unlisted, listed, published, all.
|
* Filters pages by their status. Available status settings: `draft`, `unlisted`, `listed`, `published`, `all`.
|
||||||
*/
|
*/
|
||||||
'status' => function (string $status = '') {
|
'status' => function (string $status = '') {
|
||||||
if ($status === 'drafts') {
|
if ($status === 'drafts') {
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Kirby\Cms\App;
|
|
||||||
use Kirby\Cms\Html;
|
use Kirby\Cms\Html;
|
||||||
use Kirby\Cms\Url;
|
use Kirby\Cms\Url;
|
||||||
|
|
||||||
@@ -126,6 +125,11 @@ return [
|
|||||||
return $link($image);
|
return $link($image);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// render KirbyText in caption
|
||||||
|
if ($tag->caption) {
|
||||||
|
$tag->caption = [$tag->kirby()->kirbytext($tag->caption, [], true)];
|
||||||
|
}
|
||||||
|
|
||||||
return Html::figure([ $link($image) ], $tag->caption, [
|
return Html::figure([ $link($image) ], $tag->caption, [
|
||||||
'class' => $tag->class
|
'class' => $tag->class
|
||||||
]);
|
]);
|
||||||
|
2
kirby/panel/dist/js/app.js
vendored
2
kirby/panel/dist/js/app.js
vendored
File diff suppressed because one or more lines are too long
@@ -650,6 +650,11 @@ class App
|
|||||||
$text = $this->apply('kirbytext:before', $text);
|
$text = $this->apply('kirbytext:before', $text);
|
||||||
$text = $this->kirbytags($text, $data);
|
$text = $this->kirbytags($text, $data);
|
||||||
$text = $this->markdown($text, $inline);
|
$text = $this->markdown($text, $inline);
|
||||||
|
|
||||||
|
if ($this->option('smartypants', false) !== false) {
|
||||||
|
$text = $this->smartypants($text);
|
||||||
|
}
|
||||||
|
|
||||||
$text = $this->apply('kirbytext:after', $text);
|
$text = $this->apply('kirbytext:after', $text);
|
||||||
|
|
||||||
return $text;
|
return $text;
|
||||||
@@ -700,7 +705,11 @@ class App
|
|||||||
*/
|
*/
|
||||||
public function languages(): Languages
|
public function languages(): Languages
|
||||||
{
|
{
|
||||||
return $this->languages = $this->languages ?? Languages::load();
|
if ($this->languages !== null) {
|
||||||
|
return clone $this->languages;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->languages = Languages::load();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1122,7 +1131,13 @@ class App
|
|||||||
*/
|
*/
|
||||||
public function smartypants(string $text = null): string
|
public function smartypants(string $text = null): string
|
||||||
{
|
{
|
||||||
return $this->component('smartypants')($this, $text, $this->options['smartypants'] ?? []);
|
$options = $this->option('smartypants', []);
|
||||||
|
|
||||||
|
if ($options === true) {
|
||||||
|
$options = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->component('smartypants')($this, $text, $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
namespace Kirby\Cms;
|
namespace Kirby\Cms;
|
||||||
|
|
||||||
use Closure;
|
use Closure;
|
||||||
|
use Exception;
|
||||||
use Kirby\Exception\InvalidArgumentException;
|
use Kirby\Exception\InvalidArgumentException;
|
||||||
use Kirby\Toolkit\Collection as BaseCollection;
|
use Kirby\Toolkit\Collection as BaseCollection;
|
||||||
use Kirby\Toolkit\Str;
|
use Kirby\Toolkit\Str;
|
||||||
@@ -125,8 +126,12 @@ class Collection extends BaseCollection
|
|||||||
* @param bool $i (ignore upper/lowercase for group names)
|
* @param bool $i (ignore upper/lowercase for group names)
|
||||||
* @return Collection A collection with an item for each group and a Collection for each group
|
* @return Collection A collection with an item for each group and a Collection for each group
|
||||||
*/
|
*/
|
||||||
public function groupBy(string $field, bool $i = true)
|
public function groupBy($field, bool $i = true)
|
||||||
{
|
{
|
||||||
|
if (is_string($field) === false) {
|
||||||
|
throw new Exception('Cannot group by non-string values. Did you mean to call group()?');
|
||||||
|
}
|
||||||
|
|
||||||
$groups = new Collection([], $this->parent());
|
$groups = new Collection([], $this->parent());
|
||||||
|
|
||||||
foreach ($this->data as $key => $item) {
|
foreach ($this->data as $key => $item) {
|
||||||
|
@@ -67,17 +67,23 @@ class Collections
|
|||||||
}
|
}
|
||||||
|
|
||||||
// if not yet cached
|
// if not yet cached
|
||||||
if (isset($this->cache[$name]) === false) {
|
if (
|
||||||
|
isset($this->cache[$name]) === false ||
|
||||||
|
$this->cache[$name]['data'] !== $data
|
||||||
|
) {
|
||||||
$controller = new Controller($this->collections[$name]);
|
$controller = new Controller($this->collections[$name]);
|
||||||
$this->cache[$name] = $controller->call(null, $data);
|
$this->cache[$name] = [
|
||||||
|
'result' => $controller->call(null, $data),
|
||||||
|
'data' => $data
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
// return cloned object
|
// return cloned object
|
||||||
if (is_object($this->cache[$name]) === true) {
|
if (is_object($this->cache[$name]['result']) === true) {
|
||||||
return clone $this->cache[$name];
|
return clone $this->cache[$name]['result'];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->cache[$name];
|
return $this->cache[$name]['result'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -132,6 +132,11 @@ class Language extends Model
|
|||||||
$kirby = App::instance();
|
$kirby = App::instance();
|
||||||
$site = $kirby->site();
|
$site = $kirby->site();
|
||||||
|
|
||||||
|
// convert site
|
||||||
|
foreach ($site->files() as $file) {
|
||||||
|
F::move($file->contentFile($from, true), $file->contentFile($to, true));
|
||||||
|
}
|
||||||
|
|
||||||
F::move($site->contentFile($from, true), $site->contentFile($to, true));
|
F::move($site->contentFile($from, true), $site->contentFile($to, true));
|
||||||
|
|
||||||
// convert all pages
|
// convert all pages
|
||||||
@@ -489,7 +494,7 @@ class Language extends Model
|
|||||||
*/
|
*/
|
||||||
public function url(): string
|
public function url(): string
|
||||||
{
|
{
|
||||||
return Url::to($this->pattern());
|
return Url::makeAbsolute($this->pattern(), $this->kirby()->url());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -25,7 +25,7 @@ class Nest
|
|||||||
foreach ($data as $key => $value) {
|
foreach ($data as $key => $value) {
|
||||||
if (is_array($value) === true) {
|
if (is_array($value) === true) {
|
||||||
$result[$key] = static::create($value, $parent);
|
$result[$key] = static::create($value, $parent);
|
||||||
} elseif (is_string($value) === true) {
|
} elseif (is_scalar($value) === true) {
|
||||||
$result[$key] = new Field($parent, $key, $value);
|
$result[$key] = new Field($parent, $key, $value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -247,9 +247,13 @@ class Page extends ModelWithContent
|
|||||||
}
|
}
|
||||||
|
|
||||||
$blueprints = [];
|
$blueprints = [];
|
||||||
$templates = $this->blueprint()->options()['changeTemplate'] ?? false;
|
$templates = $this->blueprint()->options()['changeTemplate'] ?? [];
|
||||||
$currentTemplate = $this->intendedTemplate()->name();
|
$currentTemplate = $this->intendedTemplate()->name();
|
||||||
|
|
||||||
|
if (is_array($templates) === false) {
|
||||||
|
$templates = [];
|
||||||
|
}
|
||||||
|
|
||||||
// add the current template to the array
|
// add the current template to the array
|
||||||
$templates[] = $currentTemplate;
|
$templates[] = $currentTemplate;
|
||||||
|
|
||||||
|
@@ -133,7 +133,7 @@ class PanelPlugins
|
|||||||
*/
|
*/
|
||||||
public function id(): string
|
public function id(): string
|
||||||
{
|
{
|
||||||
return crc32(implode(array_values($this->files())));
|
return hash('crc32', implode(array_values($this->files())));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -101,6 +101,21 @@ class StructureObject extends Model
|
|||||||
return $this->id;
|
return $this->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compares the current object with the given structure object
|
||||||
|
*
|
||||||
|
* @param mixed $structure
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function is($structure): bool
|
||||||
|
{
|
||||||
|
if (is_a($structure, StructureObject::class) === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this === $structure;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the parent Model object
|
* Returns the parent Model object
|
||||||
*
|
*
|
||||||
|
@@ -372,6 +372,8 @@ class User extends ModelWithContent
|
|||||||
* @param string $password
|
* @param string $password
|
||||||
* @param Session|array $session Session options or session object to set the user in
|
* @param Session|array $session Session options or session object to set the user in
|
||||||
* @return bool
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws PermissionException If the password is not valid
|
||||||
*/
|
*/
|
||||||
public function login(string $password, $session = null): bool
|
public function login(string $password, $session = null): bool
|
||||||
{
|
{
|
||||||
@@ -783,6 +785,10 @@ class User extends ModelWithContent
|
|||||||
*
|
*
|
||||||
* @param string $password
|
* @param string $password
|
||||||
* @return boolean
|
* @return boolean
|
||||||
|
*
|
||||||
|
* @throws NotFoundException If the user has no password
|
||||||
|
* @throws InvalidArgumentException If the entered password is not valid
|
||||||
|
* @throws InvalidArgumentException If the entered password does not match the user password
|
||||||
*/
|
*/
|
||||||
public function validatePassword(string $password = null): bool
|
public function validatePassword(string $password = null): bool
|
||||||
{
|
{
|
||||||
|
@@ -132,7 +132,7 @@ class Collection extends Iterator implements Countable
|
|||||||
* @return Collection A new collection with an element for each chunk and
|
* @return Collection A new collection with an element for each chunk and
|
||||||
* a sub collection in each chunk
|
* a sub collection in each chunk
|
||||||
*/
|
*/
|
||||||
public function chunk(int $size): self
|
public function chunk(int $size)
|
||||||
{
|
{
|
||||||
// create a multidimensional array that is chunked with the given
|
// create a multidimensional array that is chunked with the given
|
||||||
// chunk size keep keys of the elements
|
// chunk size keep keys of the elements
|
||||||
@@ -219,7 +219,7 @@ class Collection extends Iterator implements Countable
|
|||||||
* @param Closure $filter
|
* @param Closure $filter
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public function filter($filter): self
|
public function filter($filter)
|
||||||
{
|
{
|
||||||
if (is_callable($filter) === true) {
|
if (is_callable($filter) === true) {
|
||||||
$collection = clone $this;
|
$collection = clone $this;
|
||||||
@@ -246,7 +246,7 @@ class Collection extends Iterator implements Countable
|
|||||||
* @param string $field
|
* @param string $field
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public function filterBy(string $field, ...$args): self
|
public function filterBy(string $field, ...$args)
|
||||||
{
|
{
|
||||||
$operator = '==';
|
$operator = '==';
|
||||||
$test = $args[0] ?? null;
|
$test = $args[0] ?? null;
|
||||||
@@ -405,7 +405,7 @@ class Collection extends Iterator implements Countable
|
|||||||
*
|
*
|
||||||
* @return Collection
|
* @return Collection
|
||||||
*/
|
*/
|
||||||
public function flip(): self
|
public function flip()
|
||||||
{
|
{
|
||||||
$collection = clone $this;
|
$collection = clone $this;
|
||||||
$collection->data = array_reverse($this->data, true);
|
$collection->data = array_reverse($this->data, true);
|
||||||
@@ -433,14 +433,19 @@ class Collection extends Iterator implements Countable
|
|||||||
* @param array|object $item
|
* @param array|object $item
|
||||||
* @param string $attribute
|
* @param string $attribute
|
||||||
* @param boolean $split
|
* @param boolean $split
|
||||||
|
* @param mixed $related
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function getAttribute($item, string $attribute, $split = false)
|
public function getAttribute($item, string $attribute, $split = false, $related = null)
|
||||||
{
|
{
|
||||||
$value = $this->{'getAttributeFrom' . gettype($item)}($item, $attribute);
|
$value = $this->{'getAttributeFrom' . gettype($item)}($item, $attribute);
|
||||||
|
|
||||||
if ($split !== false) {
|
if ($split !== false) {
|
||||||
$value = Str::split($value, $split === true ? ',' : $split);
|
return Str::split($value, $split === true ? ',' : $split);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($related !== null) {
|
||||||
|
return Str::toType((string)$value, $related);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $value;
|
return $value;
|
||||||
@@ -516,7 +521,7 @@ class Collection extends Iterator implements Countable
|
|||||||
* @param bool $i
|
* @param bool $i
|
||||||
* @return Collection A new collection with an element for each group and a subcollection in each group
|
* @return Collection A new collection with an element for each group and a subcollection in each group
|
||||||
*/
|
*/
|
||||||
public function groupBy(string $field, bool $i = true)
|
public function groupBy($field, bool $i = true)
|
||||||
{
|
{
|
||||||
if (is_string($field) === false) {
|
if (is_string($field) === false) {
|
||||||
throw new Exception('Cannot group by non-string values. Did you mean to call group()?');
|
throw new Exception('Cannot group by non-string values. Did you mean to call group()?');
|
||||||
@@ -587,7 +592,7 @@ class Collection extends Iterator implements Countable
|
|||||||
* @param int $limit The number of elements to return
|
* @param int $limit The number of elements to return
|
||||||
* @return Collection
|
* @return Collection
|
||||||
*/
|
*/
|
||||||
public function limit(int $limit): self
|
public function limit(int $limit)
|
||||||
{
|
{
|
||||||
return $this->slice(0, $limit);
|
return $this->slice(0, $limit);
|
||||||
}
|
}
|
||||||
@@ -598,7 +603,7 @@ class Collection extends Iterator implements Countable
|
|||||||
* @param callable $callback
|
* @param callable $callback
|
||||||
* @return Collection
|
* @return Collection
|
||||||
*/
|
*/
|
||||||
public function map(callable $callback): self
|
public function map(callable $callback)
|
||||||
{
|
{
|
||||||
$this->data = array_map($callback, $this->data);
|
$this->data = array_map($callback, $this->data);
|
||||||
return $this;
|
return $this;
|
||||||
@@ -625,7 +630,7 @@ class Collection extends Iterator implements Countable
|
|||||||
{
|
{
|
||||||
$collection = clone $this;
|
$collection = clone $this;
|
||||||
foreach ($keys as $key) {
|
foreach ($keys as $key) {
|
||||||
unset($collection->$key);
|
unset($collection->data[$key]);
|
||||||
}
|
}
|
||||||
return $collection;
|
return $collection;
|
||||||
}
|
}
|
||||||
@@ -636,7 +641,7 @@ class Collection extends Iterator implements Countable
|
|||||||
* @param int $offset The index to start from
|
* @param int $offset The index to start from
|
||||||
* @return Collection
|
* @return Collection
|
||||||
*/
|
*/
|
||||||
public function offset(int $offset): self
|
public function offset(int $offset)
|
||||||
{
|
{
|
||||||
return $this->slice($offset);
|
return $this->slice($offset);
|
||||||
}
|
}
|
||||||
@@ -798,7 +803,7 @@ class Collection extends Iterator implements Countable
|
|||||||
*
|
*
|
||||||
* @return Collection
|
* @return Collection
|
||||||
*/
|
*/
|
||||||
public function shuffle(): self
|
public function shuffle()
|
||||||
{
|
{
|
||||||
$data = $this->data;
|
$data = $this->data;
|
||||||
$keys = $this->keys();
|
$keys = $this->keys();
|
||||||
@@ -821,7 +826,7 @@ class Collection extends Iterator implements Countable
|
|||||||
* @param int $limit The optional number of elements to return
|
* @param int $limit The optional number of elements to return
|
||||||
* @return Collection
|
* @return Collection
|
||||||
*/
|
*/
|
||||||
public function slice(int $offset = 0, int $limit = null): self
|
public function slice(int $offset = 0, int $limit = null)
|
||||||
{
|
{
|
||||||
if ($offset === 0 && $limit === null) {
|
if ($offset === 0 && $limit === null) {
|
||||||
return $this;
|
return $this;
|
||||||
@@ -840,7 +845,7 @@ class Collection extends Iterator implements Countable
|
|||||||
* @param $method int The sort flag, SORT_REGULAR, SORT_NUMERIC etc.
|
* @param $method int The sort flag, SORT_REGULAR, SORT_NUMERIC etc.
|
||||||
* @return Collection
|
* @return Collection
|
||||||
*/
|
*/
|
||||||
public function sortBy(): self
|
public function sortBy()
|
||||||
{
|
{
|
||||||
// there is no need to sort empty collections
|
// there is no need to sort empty collections
|
||||||
if (empty($this->data) === true) {
|
if (empty($this->data) === true) {
|
||||||
@@ -983,13 +988,13 @@ class Collection extends Iterator implements Countable
|
|||||||
*/
|
*/
|
||||||
Collection::$filters['=='] = function ($collection, $field, $test, $split = false) {
|
Collection::$filters['=='] = function ($collection, $field, $test, $split = false) {
|
||||||
foreach ($collection->data as $key => $item) {
|
foreach ($collection->data as $key => $item) {
|
||||||
$value = $collection->getAttribute($item, $field, $split);
|
$value = $collection->getAttribute($item, $field, $split, $test);
|
||||||
|
|
||||||
if ($split !== false) {
|
if ($split !== false) {
|
||||||
if (in_array($test, $value) === false) {
|
if (in_array($test, $value) === false) {
|
||||||
unset($collection->data[$key]);
|
unset($collection->data[$key]);
|
||||||
}
|
}
|
||||||
} elseif ($value != $test) {
|
} elseif ($value !== $test) {
|
||||||
unset($collection->data[$key]);
|
unset($collection->data[$key]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1002,13 +1007,13 @@ Collection::$filters['=='] = function ($collection, $field, $test, $split = fals
|
|||||||
*/
|
*/
|
||||||
Collection::$filters['!='] = function ($collection, $field, $test, $split = false) {
|
Collection::$filters['!='] = function ($collection, $field, $test, $split = false) {
|
||||||
foreach ($collection->data as $key => $item) {
|
foreach ($collection->data as $key => $item) {
|
||||||
$value = $collection->getAttribute($item, $field, $split);
|
$value = $collection->getAttribute($item, $field, $split, $test);
|
||||||
|
|
||||||
if ($split !== false) {
|
if ($split !== false) {
|
||||||
if (in_array($test, $value) === true) {
|
if (in_array($test, $value) === true) {
|
||||||
unset($collection->data[$key]);
|
unset($collection->data[$key]);
|
||||||
}
|
}
|
||||||
} elseif ($value == $test) {
|
} elseif ((string)$value == $test) {
|
||||||
unset($collection->data[$key]);
|
unset($collection->data[$key]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -54,8 +54,8 @@ class Html
|
|||||||
/**
|
/**
|
||||||
* Generates an a tag
|
* Generates an a tag
|
||||||
*
|
*
|
||||||
* @param string $href The url for the a tag
|
* @param string $href The url for the `a` tag
|
||||||
* @param mixed $text The optional text. If null, the url will be used as text
|
* @param mixed $text The optional text. If `null`, the url will be used as text
|
||||||
* @param array $attr Additional attributes for the tag
|
* @param array $attr Additional attributes for the tag
|
||||||
* @return string the generated html
|
* @return string the generated html
|
||||||
*/
|
*/
|
||||||
@@ -64,7 +64,7 @@ class Html
|
|||||||
$attr = array_merge(['href' => $href], $attr);
|
$attr = array_merge(['href' => $href], $attr);
|
||||||
|
|
||||||
if (empty($text) === true) {
|
if (empty($text) === true) {
|
||||||
$text = $href;
|
$text = $attr['href'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_string($text) === true && Str::isUrl($text) === true) {
|
if (is_string($text) === true && Str::isUrl($text) === true) {
|
||||||
@@ -160,7 +160,7 @@ class Html
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates an "a mailto" tag
|
* Generates an `a` tag with `mailto:`
|
||||||
*
|
*
|
||||||
* @param string $email The url for the a tag
|
* @param string $email The url for the a tag
|
||||||
* @param mixed $text The optional text. If null, the url will be used as text
|
* @param mixed $text The optional text. If null, the url will be used as text
|
||||||
@@ -328,7 +328,7 @@ class Html
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add noopeener noreferrer to rels when target is _blank
|
* Add noopeener noreferrer to rels when target is `_blank`
|
||||||
*
|
*
|
||||||
* @param string $rel
|
* @param string $rel
|
||||||
* @param string $target
|
* @param string $target
|
||||||
@@ -352,8 +352,8 @@ class Html
|
|||||||
/**
|
/**
|
||||||
* Generates an Html tag with optional content and attributes
|
* Generates an Html tag with optional content and attributes
|
||||||
*
|
*
|
||||||
* @param string $name The name of the tag, i.e. "a"
|
* @param string $name The name of the tag, i.e. `a`
|
||||||
* @param mixed $content The content if availble. Pass null to generate a self-closing tag, Pass an empty string to generate empty content
|
* @param mixed $content The content if availble. Pass `null` to generate a self-closing tag, Pass an empty string to generate empty content
|
||||||
* @param array $attr An associative array with additional attributes for the tag
|
* @param array $attr An associative array with additional attributes for the tag
|
||||||
* @return string The generated Html
|
* @return string The generated Html
|
||||||
*/
|
*/
|
||||||
@@ -383,10 +383,10 @@ class Html
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates an a tag for a phone number
|
* Generates an `a` tag for a phone number
|
||||||
*
|
*
|
||||||
* @param string $tel The phone number
|
* @param string $tel The phone number
|
||||||
* @param mixed $text The optional text. If null, the number will be used as text
|
* @param mixed $text The optional text. If `null`, the number will be used as text
|
||||||
* @param array $attr Additional attributes for the tag
|
* @param array $attr Additional attributes for the tag
|
||||||
* @return string the generated html
|
* @return string the generated html
|
||||||
*/
|
*/
|
||||||
@@ -404,7 +404,7 @@ class Html
|
|||||||
/**
|
/**
|
||||||
* Creates a video embed via iframe for Youtube or Vimeo
|
* Creates a video embed via iframe for Youtube or Vimeo
|
||||||
* videos. The embed Urls are automatically detected from
|
* videos. The embed Urls are automatically detected from
|
||||||
* the given Url.
|
* the given URL.
|
||||||
*
|
*
|
||||||
* @param string $url
|
* @param string $url
|
||||||
* @param array $options
|
* @param array $options
|
||||||
|
@@ -124,8 +124,9 @@ class Mime
|
|||||||
'svg' => [Mime::class, 'fromSvg'],
|
'svg' => [Mime::class, 'fromSvg'],
|
||||||
],
|
],
|
||||||
'text/plain' => [
|
'text/plain' => [
|
||||||
'css' => 'text/css',
|
'css' => 'text/css',
|
||||||
'svg' => [Mime::class, 'fromSvg'],
|
'json' => 'application/json',
|
||||||
|
'svg' => [Mime::class, 'fromSvg'],
|
||||||
],
|
],
|
||||||
'text/x-asm' => [
|
'text/x-asm' => [
|
||||||
'css' => 'text/css'
|
'css' => 'text/css'
|
||||||
|
@@ -870,6 +870,36 @@ class Str
|
|||||||
}, $string);
|
}, $string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert the string to the given type
|
||||||
|
*
|
||||||
|
* @param string $string
|
||||||
|
* @param mixed $type
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function toType($string = null, $type)
|
||||||
|
{
|
||||||
|
if (is_string($type) === false) {
|
||||||
|
$type = gettype($type);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($type) {
|
||||||
|
case 'array':
|
||||||
|
return (array)$string;
|
||||||
|
case 'bool':
|
||||||
|
case 'boolean':
|
||||||
|
return filter_var($string, FILTER_VALIDATE_BOOLEAN);
|
||||||
|
case 'double':
|
||||||
|
case 'float':
|
||||||
|
return floatval($string);
|
||||||
|
case 'int':
|
||||||
|
case 'integer':
|
||||||
|
return intval($string);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (string)$string;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Safe trim alternative
|
* Safe trim alternative
|
||||||
*
|
*
|
||||||
|
@@ -104,18 +104,18 @@
|
|||||||
"error.section.files.max.singular":
|
"error.section.files.max.singular":
|
||||||
"Sekce \"{section}\" může obsahovat nejvýše jeden soubor",
|
"Sekce \"{section}\" může obsahovat nejvýše jeden soubor",
|
||||||
"error.section.files.min.plural":
|
"error.section.files.min.plural":
|
||||||
"The \"{section}\" section requires at least {min} files",
|
"Sekce \"{section}\" vyžaduje nejméně {min} souborů",
|
||||||
"error.section.files.min.singular":
|
"error.section.files.min.singular":
|
||||||
"The \"{section}\" section requires at least one file",
|
"Sekce \"{section}\" vyžaduje alespoň jeden soubor",
|
||||||
|
|
||||||
"error.section.pages.max.plural":
|
"error.section.pages.max.plural":
|
||||||
"Sekce \"{section}\" nesmí obsahovat více jak {max} stránek",
|
"Sekce \"{section}\" nesmí obsahovat více jak {max} stránek",
|
||||||
"error.section.pages.max.singular":
|
"error.section.pages.max.singular":
|
||||||
"Sekce \"{section}\" může obsahovat nejvýše jednu stránku",
|
"Sekce \"{section}\" může obsahovat nejvýše jednu stránku",
|
||||||
"error.section.pages.min.plural":
|
"error.section.pages.min.plural":
|
||||||
"The \"{section}\" section requires at least {min} pages",
|
"Sekce \"{section}\" vyžaduje alespoň {min} stránek",
|
||||||
"error.section.pages.min.singular":
|
"error.section.pages.min.singular":
|
||||||
"The \"{section}\" section requires at least one page",
|
"Sekce \"{section}\" vyžaduje alespoň jednu stránku",
|
||||||
|
|
||||||
"error.section.notLoaded": "Nelze načíst sekci \"{name}\"",
|
"error.section.notLoaded": "Nelze načíst sekci \"{name}\"",
|
||||||
"error.section.type.invalid": "Typ sekce \"{type}\" není platný",
|
"error.section.type.invalid": "Typ sekce \"{type}\" není platný",
|
||||||
@@ -324,7 +324,7 @@
|
|||||||
"page.status.listed": "Veřejná",
|
"page.status.listed": "Veřejná",
|
||||||
"page.status.listed.description": "Stránka je zveřejněná pro všechny",
|
"page.status.listed.description": "Stránka je zveřejněná pro všechny",
|
||||||
"page.status.unlisted": "Neveřejná",
|
"page.status.unlisted": "Neveřejná",
|
||||||
"page.status.unlisted.description": "Tato stránka je dostupná pouze přes adresu URL",
|
"page.status.unlisted.description": "Tato stránka je dostupná pouze přes URL.",
|
||||||
|
|
||||||
"pages": "Stránky",
|
"pages": "Stránky",
|
||||||
"pages.empty": "Zatím žádné stránky",
|
"pages.empty": "Zatím žádné stránky",
|
||||||
@@ -366,8 +366,8 @@
|
|||||||
"toolbar.button.heading.3": "Nadpis 3",
|
"toolbar.button.heading.3": "Nadpis 3",
|
||||||
"toolbar.button.italic": "Kurz\u00edva",
|
"toolbar.button.italic": "Kurz\u00edva",
|
||||||
"toolbar.button.file": "Soubor",
|
"toolbar.button.file": "Soubor",
|
||||||
"toolbar.button.file.select": "Select a file",
|
"toolbar.button.file.select": "Vyberte soubor",
|
||||||
"toolbar.button.file.upload": "Upload a file",
|
"toolbar.button.file.upload": "Nahrajte soubor",
|
||||||
"toolbar.button.link": "Odkaz",
|
"toolbar.button.link": "Odkaz",
|
||||||
"toolbar.button.ol": "Řazený seznam",
|
"toolbar.button.ol": "Řazený seznam",
|
||||||
"toolbar.button.ul": "Odrážkový seznam",
|
"toolbar.button.ul": "Odrážkový seznam",
|
||||||
|
@@ -35,9 +35,9 @@
|
|||||||
"error.avatar.create.fail": "Das Profilbild konnte nicht hochgeladen werden",
|
"error.avatar.create.fail": "Das Profilbild konnte nicht hochgeladen werden",
|
||||||
"error.avatar.delete.fail": "Das Profilbild konnte nicht gel\u00f6scht werden",
|
"error.avatar.delete.fail": "Das Profilbild konnte nicht gel\u00f6scht werden",
|
||||||
"error.avatar.dimensions.invalid":
|
"error.avatar.dimensions.invalid":
|
||||||
"Bitte lade ein Profilbild hoch, das nicht größer als 3000 Pixel in der Breite und Höhe ist.",
|
"Bitte lade ein Profilbild hoch, das nicht breiter oder höher als 3000 Pixel ist.",
|
||||||
"error.avatar.mime.forbidden":
|
"error.avatar.mime.forbidden":
|
||||||
"Verbotener Medientyp",
|
"Das Profilbild muss vom Format JPEG oder PNG sein",
|
||||||
|
|
||||||
"error.blueprint.notFound": "Das Blueprint \"{name}\" konnte nicht geladen werden.",
|
"error.blueprint.notFound": "Das Blueprint \"{name}\" konnte nicht geladen werden.",
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
"error.field.converter.invalid": "Ungültiger Konverter: \"{converter}\"",
|
"error.field.converter.invalid": "Ungültiger Konverter: \"{converter}\"",
|
||||||
|
|
||||||
"error.file.changeName.permission":
|
"error.file.changeName.permission":
|
||||||
"Du kannst den Dateinamen von \"{filename}\" nicht ändern",
|
"Du darfst den Dateinamen von \"{filename}\" nicht ändern",
|
||||||
"error.file.duplicate": "Eine Datei mit dem Dateinamen \"{filename}\" besteht bereits",
|
"error.file.duplicate": "Eine Datei mit dem Dateinamen \"{filename}\" besteht bereits",
|
||||||
"error.file.extension.forbidden":
|
"error.file.extension.forbidden":
|
||||||
"Verbotene Dateiendung \"{extension}\"",
|
"Verbotene Dateiendung \"{extension}\"",
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
"error.form.notSaved": "Das Formular konnte nicht gespeichert werden",
|
"error.form.notSaved": "Das Formular konnte nicht gespeichert werden",
|
||||||
|
|
||||||
"error.page.changeSlug.permission":
|
"error.page.changeSlug.permission":
|
||||||
"Du kannst die URL der Seite \"{slug}\" nicht ändern",
|
"Du darfst die URL der Seite \"{slug}\" nicht ändern",
|
||||||
"error.page.changeStatus.incomplete":
|
"error.page.changeStatus.incomplete":
|
||||||
"Die Seite ist nicht vollständig und kann daher nicht veröffentlicht werden",
|
"Die Seite ist nicht vollständig und kann daher nicht veröffentlicht werden",
|
||||||
"error.page.changeStatus.permission":
|
"error.page.changeStatus.permission":
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
|
|
||||||
"error.site.changeTitle.permission":
|
"error.site.changeTitle.permission":
|
||||||
"Du kannst den Titel der Seite nicht ändern",
|
"Du kannst den Titel der Seite nicht ändern",
|
||||||
"error.site.update.permission": "Du kannst die Seite nicht editieren",
|
"error.site.update.permission": "Du darfst die Seite nicht editieren",
|
||||||
|
|
||||||
"error.template.default.notFound": "Die \"Default\"-Vorlage existiert nicht",
|
"error.template.default.notFound": "Die \"Default\"-Vorlage existiert nicht",
|
||||||
|
|
||||||
@@ -156,7 +156,7 @@
|
|||||||
"error.user.role.invalid": "Bitte gib eine gültige Rolle an",
|
"error.user.role.invalid": "Bitte gib eine gültige Rolle an",
|
||||||
"error.user.undefined": "Der Benutzer wurde nicht gefunden",
|
"error.user.undefined": "Der Benutzer wurde nicht gefunden",
|
||||||
"error.user.update.permission":
|
"error.user.update.permission":
|
||||||
"Du kannst den den Benutzer \"{name}\" nicht editieren",
|
"Du darfst den den Benutzer \"{name}\" nicht editieren",
|
||||||
|
|
||||||
"error.validation.accepted": "Bitte bestätige",
|
"error.validation.accepted": "Bitte bestätige",
|
||||||
"error.validation.alpha": "Bitte gib nur Zeichen zwischen A und Z ein",
|
"error.validation.alpha": "Bitte gib nur Zeichen zwischen A und Z ein",
|
||||||
@@ -218,11 +218,11 @@
|
|||||||
|
|
||||||
"installation": "Installation",
|
"installation": "Installation",
|
||||||
"installation.completed": "Das Panel wurde installiert",
|
"installation.completed": "Das Panel wurde installiert",
|
||||||
"installation.disabled": "Die Panel Installation ist auf öffentlichen Servern automatisch deaktiviert. Bitte installiere das Panel auf einem lokalen Server oder aktiviere die Installation gezielt mit der <code>panel.install</code> Option. ",
|
"installation.disabled": "Die Panel-Installation ist auf öffentlichen Servern automatisch deaktiviert. Bitte installiere das Panel auf einem lokalen Server oder aktiviere die Installation gezielt mit der <code>panel.install</code> Option. ",
|
||||||
"installation.issues.accounts":
|
"installation.issues.accounts":
|
||||||
"<code>/site/accounts</code> ist nicht beschreibbar",
|
"<code>/site/accounts</code> ist nicht beschreibbar",
|
||||||
"installation.issues.content":
|
"installation.issues.content":
|
||||||
"<code>/content</code> und alle Inhalte müssen beschreibbar sein",
|
"<code>/content</code> existiert nicht oder ist nicht beschreibbar",
|
||||||
"installation.issues.curl": "Die <code>CURL</code> Erweiterung wird benötigt",
|
"installation.issues.curl": "Die <code>CURL</code> Erweiterung wird benötigt",
|
||||||
"installation.issues.headline": "Das Panel kann nicht installiert werden",
|
"installation.issues.headline": "Das Panel kann nicht installiert werden",
|
||||||
"installation.issues.mbstring":
|
"installation.issues.mbstring":
|
||||||
@@ -232,7 +232,7 @@
|
|||||||
"installation.issues.php": "Bitte verwende <code>PHP 7+</code>",
|
"installation.issues.php": "Bitte verwende <code>PHP 7+</code>",
|
||||||
"installation.issues.server":
|
"installation.issues.server":
|
||||||
"Kirby benötigt <code>Apache</code>, <code>Nginx</code> or <code>Caddy</code>",
|
"Kirby benötigt <code>Apache</code>, <code>Nginx</code> or <code>Caddy</code>",
|
||||||
"installation.issues.sessions": "Der <code>/site/sessions</code> Ordner ist nicht beschreibbar",
|
"installation.issues.sessions": "<code>/site/sessions</code> ist nicht beschreibbar",
|
||||||
|
|
||||||
"language": "Sprache",
|
"language": "Sprache",
|
||||||
"language.code": "Code",
|
"language.code": "Code",
|
||||||
@@ -260,7 +260,7 @@
|
|||||||
"license.buy": "Kaufe eine Lizenz",
|
"license.buy": "Kaufe eine Lizenz",
|
||||||
"license.register": "Registrieren",
|
"license.register": "Registrieren",
|
||||||
"license.register.help":
|
"license.register.help":
|
||||||
"Der Lizenzcode steht in deiner Kaufbestätigungsmail. Bitte kopiere ihn und füge ihn ein, um Kirby zu registrieren.",
|
"Den Lizenzcode findest du in der Bestätigungsmai zu deinem Kauf. Bitte kopiere und füge ihn ein, um Kirby zu registrieren.",
|
||||||
"license.register.label": "Bitte gib deinen Lizenzcode ein",
|
"license.register.label": "Bitte gib deinen Lizenzcode ein",
|
||||||
"license.register.success": "Vielen Dank für deine Unterstützung",
|
"license.register.success": "Vielen Dank für deine Unterstützung",
|
||||||
"license.unregistered": "Dies ist eine unregistrierte Kirby-Demo",
|
"license.unregistered": "Dies ist eine unregistrierte Kirby-Demo",
|
||||||
|
@@ -373,7 +373,7 @@
|
|||||||
"toolbar.button.ul": "لیست معمولی",
|
"toolbar.button.ul": "لیست معمولی",
|
||||||
|
|
||||||
"translation.author": "تیم کربی",
|
"translation.author": "تیم کربی",
|
||||||
"translation.direction": "ltr",
|
"translation.direction": "rtl",
|
||||||
"translation.name": "انگلیسی",
|
"translation.name": "انگلیسی",
|
||||||
|
|
||||||
"upload": "بارگذاری",
|
"upload": "بارگذاری",
|
||||||
|
@@ -104,18 +104,18 @@
|
|||||||
"error.section.files.max.singular":
|
"error.section.files.max.singular":
|
||||||
"Non puoi aggiungere più di un file alla sezione \"{section}\"",
|
"Non puoi aggiungere più di un file alla sezione \"{section}\"",
|
||||||
"error.section.files.min.plural":
|
"error.section.files.min.plural":
|
||||||
"The \"{section}\" section requires at least {min} files",
|
"La sezione \"{section}\" richiede almeno {min} file",
|
||||||
"error.section.files.min.singular":
|
"error.section.files.min.singular":
|
||||||
"The \"{section}\" section requires at least one file",
|
"La sezione \"{section}\" richiede almeno un file",
|
||||||
|
|
||||||
"error.section.pages.max.plural":
|
"error.section.pages.max.plural":
|
||||||
"Non puoi aggiungere più di {max} pagine alla sezione \"{section}\"",
|
"Non puoi aggiungere più di {max} pagine alla sezione \"{section}\"",
|
||||||
"error.section.pages.max.singular":
|
"error.section.pages.max.singular":
|
||||||
"Non puoi aggiungere più di una pagina alla sezione \"{section}\"",
|
"Non puoi aggiungere più di una pagina alla sezione \"{section}\"",
|
||||||
"error.section.pages.min.plural":
|
"error.section.pages.min.plural":
|
||||||
"The \"{section}\" section requires at least {min} pages",
|
"La sezione \"{section}\" richiede almeno {min} pagine",
|
||||||
"error.section.pages.min.singular":
|
"error.section.pages.min.singular":
|
||||||
"The \"{section}\" section requires at least one page",
|
"La sezione \"{section}\" richiede almeno una pagina",
|
||||||
|
|
||||||
"error.section.notLoaded": "Non è stato possibile caricare la sezione \"{name}\"",
|
"error.section.notLoaded": "Non è stato possibile caricare la sezione \"{name}\"",
|
||||||
"error.section.type.invalid": "Il tipo di sezione \"{type}\" non è valido",
|
"error.section.type.invalid": "Il tipo di sezione \"{type}\" non è valido",
|
||||||
@@ -366,8 +366,8 @@
|
|||||||
"toolbar.button.heading.3": "Titolo 3",
|
"toolbar.button.heading.3": "Titolo 3",
|
||||||
"toolbar.button.italic": "Corsivo",
|
"toolbar.button.italic": "Corsivo",
|
||||||
"toolbar.button.file": "File",
|
"toolbar.button.file": "File",
|
||||||
"toolbar.button.file.select": "Select a file",
|
"toolbar.button.file.select": "Seleziona un file",
|
||||||
"toolbar.button.file.upload": "Upload a file",
|
"toolbar.button.file.upload": "Carica un file",
|
||||||
"toolbar.button.link": "Link",
|
"toolbar.button.link": "Link",
|
||||||
"toolbar.button.ol": "Elenco numerato",
|
"toolbar.button.ol": "Elenco numerato",
|
||||||
"toolbar.button.ul": "Elenco puntato",
|
"toolbar.button.ul": "Elenco puntato",
|
||||||
|
1
kirby/vendor/composer/autoload_classmap.php
vendored
1
kirby/vendor/composer/autoload_classmap.php
vendored
@@ -68,6 +68,7 @@ return array(
|
|||||||
'Kirby\\Cms\\Pages' => $baseDir . '/src/Cms/Pages.php',
|
'Kirby\\Cms\\Pages' => $baseDir . '/src/Cms/Pages.php',
|
||||||
'Kirby\\Cms\\Pagination' => $baseDir . '/src/Cms/Pagination.php',
|
'Kirby\\Cms\\Pagination' => $baseDir . '/src/Cms/Pagination.php',
|
||||||
'Kirby\\Cms\\Panel' => $baseDir . '/src/Cms/Panel.php',
|
'Kirby\\Cms\\Panel' => $baseDir . '/src/Cms/Panel.php',
|
||||||
|
'Kirby\\Cms\\PanelPlugins' => $baseDir . '/src/Cms/PanelPlugins.php',
|
||||||
'Kirby\\Cms\\Permissions' => $baseDir . '/src/Cms/Permissions.php',
|
'Kirby\\Cms\\Permissions' => $baseDir . '/src/Cms/Permissions.php',
|
||||||
'Kirby\\Cms\\Plugin' => $baseDir . '/src/Cms/Plugin.php',
|
'Kirby\\Cms\\Plugin' => $baseDir . '/src/Cms/Plugin.php',
|
||||||
'Kirby\\Cms\\PluginAssets' => $baseDir . '/src/Cms/PluginAssets.php',
|
'Kirby\\Cms\\PluginAssets' => $baseDir . '/src/Cms/PluginAssets.php',
|
||||||
|
1
kirby/vendor/composer/autoload_static.php
vendored
1
kirby/vendor/composer/autoload_static.php
vendored
@@ -158,6 +158,7 @@ class ComposerStaticInit12091bebabd81c9aba88b2aeec22c8d7
|
|||||||
'Kirby\\Cms\\Pages' => __DIR__ . '/../..' . '/src/Cms/Pages.php',
|
'Kirby\\Cms\\Pages' => __DIR__ . '/../..' . '/src/Cms/Pages.php',
|
||||||
'Kirby\\Cms\\Pagination' => __DIR__ . '/../..' . '/src/Cms/Pagination.php',
|
'Kirby\\Cms\\Pagination' => __DIR__ . '/../..' . '/src/Cms/Pagination.php',
|
||||||
'Kirby\\Cms\\Panel' => __DIR__ . '/../..' . '/src/Cms/Panel.php',
|
'Kirby\\Cms\\Panel' => __DIR__ . '/../..' . '/src/Cms/Panel.php',
|
||||||
|
'Kirby\\Cms\\PanelPlugins' => __DIR__ . '/../..' . '/src/Cms/PanelPlugins.php',
|
||||||
'Kirby\\Cms\\Permissions' => __DIR__ . '/../..' . '/src/Cms/Permissions.php',
|
'Kirby\\Cms\\Permissions' => __DIR__ . '/../..' . '/src/Cms/Permissions.php',
|
||||||
'Kirby\\Cms\\Plugin' => __DIR__ . '/../..' . '/src/Cms/Plugin.php',
|
'Kirby\\Cms\\Plugin' => __DIR__ . '/../..' . '/src/Cms/Plugin.php',
|
||||||
'Kirby\\Cms\\PluginAssets' => __DIR__ . '/../..' . '/src/Cms/PluginAssets.php',
|
'Kirby\\Cms\\PluginAssets' => __DIR__ . '/../..' . '/src/Cms/PluginAssets.php',
|
||||||
|
Reference in New Issue
Block a user