Upgrade to 3.2.5

This commit is contained in:
Bastian Allgeier
2019-09-24 11:00:59 +02:00
parent ff9b5b1861
commit 447a9dd266
234 changed files with 1990 additions and 1224 deletions

58
kirby/.php_cs Executable file
View File

@@ -0,0 +1,58 @@
<?php
$finder = PhpCsFixer\Finder::create()
->exclude('dependencies')
->in(__DIR__);
return PhpCsFixer\Config::create()
->setRules([
'@PSR1' => true,
'@PSR2' => true,
'align_multiline_comment' => ['comment_type' => 'phpdocs_like'],
'array_indentation' => true,
'array_syntax' => ['syntax' => 'short'],
'cast_spaces' => ['space' => 'none'],
// 'class_keyword_remove' => true, // replaces static::class with 'static' (won't work)
'combine_consecutive_issets' => true,
'combine_consecutive_unsets' => true,
'combine_nested_dirname' => true,
'concat_space' => ['spacing' => 'one'],
'declare_equal_normalize' => ['space' => 'single'],
'dir_constant' => true,
'function_typehint_space' => true,
'include' => true,
'logical_operators' => true,
'lowercase_cast' => true,
'lowercase_static_reference' => true,
'magic_constant_casing' => true,
'magic_method_casing' => true,
'method_chaining_indentation' => true,
'modernize_types_casting' => true,
'multiline_comment_opening_closing' => true,
'native_function_casing' => true,
'native_function_type_declaration_casing' => true,
'new_with_braces' => true,
'no_blank_lines_after_class_opening' => true,
'no_blank_lines_after_phpdoc' => true,
'no_empty_comment' => true,
'no_empty_phpdoc' => true,
'no_empty_statement' => true,
'no_leading_namespace_whitespace' => true,
'no_mixed_echo_print' => ['use' => 'echo'],
'no_unneeded_control_parentheses' => true,
'no_unused_imports' => true,
'no_useless_return' => true,
'ordered_imports' => ['sort_algorithm' => 'alpha'],
// 'phpdoc_add_missing_param_annotation' => ['only_untyped' => false], // adds params in the wrong order
// 'phpdoc_align' => ['align' => 'vertical'], // added in a second step
'phpdoc_indent' => true,
// 'phpdoc_scalar' => true, // added in a second step
'phpdoc_trim' => true,
'short_scalar_cast' => true,
'single_line_comment_style' => true,
'single_quote' => true,
'ternary_to_null_coalescing' => true,
'whitespace_after_comma_in_array' => true
])
->setRiskyAllowed(true)
->setFinder($finder);

View File

@@ -1,7 +1,7 @@
{
"name": "getkirby/cms",
"description": "The Kirby 3 core",
"version": "3.2.4",
"version": "3.2.5",
"license": "proprietary",
"keywords": ["kirby", "cms", "core"],
"homepage": "https://getkirby.com",
@@ -44,7 +44,7 @@
"test": "phpunit --stderr --coverage-html=tests/coverage",
"zip": "composer archive --format=zip --file=dist",
"build": "./scripts/build",
"fix": "php-cs-fixer fix ."
"fix": "php-cs-fixer fix --config .php_cs"
},
"config": {
"optimize-autoloader": true

View File

@@ -1,8 +1,6 @@
<?php
use Kirby\Cms\Auth;
use Kirby\Exception\PermissionException;
use Kirby\Toolkit\Str;
return function () {
$auth = $this->kirby()->auth();

View File

@@ -1,12 +1,5 @@
<?php
use Kirby\Cms\Files;
use Kirby\Cms\Languages;
use Kirby\Cms\Pages;
use Kirby\Cms\Roles;
use Kirby\Cms\Translations;
use Kirby\Cms\Users;
/**
* Api Collection Definitions
*/
@@ -17,7 +10,7 @@ return [
*/
'children' => [
'model' => 'page',
'type' => Pages::class,
'type' => 'Kirby\Cms\Pages',
'view' => 'compact'
],
@@ -26,7 +19,7 @@ return [
*/
'files' => [
'model' => 'file',
'type' => Files::class
'type' => 'Kirby\Cms\Files'
],
/**
@@ -34,7 +27,7 @@ return [
*/
'languages' => [
'model' => 'language',
'type' => Languages::class,
'type' => 'Kirby\Cms\Languages',
'view' => 'compact'
],
@@ -43,7 +36,7 @@ return [
*/
'pages' => [
'model' => 'page',
'type' => Pages::class,
'type' => 'Kirby\Cms\Pages',
'view' => 'compact'
],
@@ -52,7 +45,7 @@ return [
*/
'roles' => [
'model' => 'role',
'type' => Roles::class,
'type' => 'Kirby\Cms\Roles',
'view' => 'compact'
],
@@ -61,7 +54,7 @@ return [
*/
'translations' => [
'model' => 'translation',
'type' => Translations::class,
'type' => 'Kirby\Cms\Translations',
'view' => 'compact'
],
@@ -73,7 +66,7 @@ return [
return $this->users();
},
'model' => 'user',
'type' => Users::class,
'type' => 'Kirby\Cms\Users',
'view' => 'compact'
]

View File

@@ -1,9 +1,5 @@
<?php
use Kirby\Cms\File;
use Kirby\Cms\Page;
use Kirby\Cms\Site;
/**
* Api Model Definitions
*/

View File

@@ -115,7 +115,7 @@ return [
return $file->url(true);
},
],
'type' => File::class,
'type' => 'Kirby\Cms\File',
'views' => [
'default' => [
'content',

View File

@@ -20,7 +20,7 @@ return [
return $blueprint->title();
},
],
'type' => FileBlueprint::class,
'type' => 'Kirby\Cms\FileBlueprint',
'views' => [
],
];

View File

@@ -44,7 +44,7 @@ return [
return $file->url(true);
},
],
'type' => FileVersion::class,
'type' => 'Kirby\Cms\FileVersion',
'views' => [
'default' => [
'dimensions',

View File

@@ -29,7 +29,7 @@ return [
return $language->url();
},
],
'type' => Language::class,
'type' => 'Kirby\Cms\Language',
'views' => [
'compact' => [
'code',

View File

@@ -104,7 +104,7 @@ return [
return $page->url();
},
],
'type' => Page::class,
'type' => 'Kirby\Cms\Page',
'views' => [
'compact' => [
'id',

View File

@@ -29,7 +29,7 @@ return [
return $blueprint->title();
},
],
'type' => PageBlueprint::class,
'type' => 'Kirby\Cms\PageBlueprint',
'views' => [
],
];

View File

@@ -20,7 +20,7 @@ return [
return $role->title();
},
],
'type' => Role::class,
'type' => 'Kirby\Cms\Role',
'views' => [
'compact' => [
'description',

View File

@@ -39,7 +39,7 @@ return [
return $site->url();
},
],
'type' => Site::class,
'type' => 'Kirby\Cms\Site',
'views' => [
'compact' => [
'title',

View File

@@ -20,7 +20,7 @@ return [
return $blueprint->title();
},
],
'type' => SiteBlueprint::class,
'type' => 'Kirby\Cms\SiteBlueprint',
'views' => [
],
];

View File

@@ -11,6 +11,9 @@ return [
'ascii' => function () {
return Str::$ascii;
},
'defaultLanguage' => function () {
return $this->kirby()->option('panel.language', 'en');
},
'isOk' => function (System $system) {
return $system->isOk();
},
@@ -62,7 +65,7 @@ return [
}
},
'kirbytext' => function () {
return $this->kirby()->option('panel')['kirbytext'] ?? true;
return $this->kirby()->option('panel.kirbytext') ?? true;
},
'user' => function () {
return $this->user();
@@ -71,7 +74,7 @@ return [
return $this->kirby()->version();
}
],
'type' => System::class,
'type' => 'Kirby\Cms\System',
'views' => [
'login' => [
'isOk',
@@ -90,6 +93,7 @@ return [
],
'panel' => [
'ascii',
'defaultLanguage',
'isOk',
'isInstalled',
'isLocal',

View File

@@ -23,7 +23,7 @@ return [
return $translation->name();
},
],
'type' => Translation::class,
'type' => 'Kirby\Cms\Translation',
'views' => [
'compact' => [
'direction',

View File

@@ -54,7 +54,7 @@ return [
return $user->username();
}
],
'type' => User::class,
'type' => 'Kirby\Cms\User',
'views' => [
'default' => [
'avatar',

View File

@@ -20,7 +20,7 @@ return [
return $blueprint->title();
},
],
'type' => UserBlueprint::class,
'type' => 'Kirby\Cms\UserBlueprint',
'views' => [
],
];

View File

@@ -1,8 +1,7 @@
<?php
use Kirby\Exception\NotFoundException;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Exception\PermissionException;
use Kirby\Exception\NotFoundException;
/**
* Authentication

View File

@@ -1,7 +1,5 @@
<?php
use Kirby\Exception\InvalidArgumentException;
/**
* Files Routes
*/

View File

@@ -1,7 +1,5 @@
<?php
use Kirby\Exception\InvalidArgumentException;
/**
* Page Routes
*/

View File

@@ -8,8 +8,15 @@ return [
'pattern' => 'roles',
'method' => 'GET',
'action' => function () {
switch (get('canBe')) {
case 'changed':
return $this->kirby()->roles()->canBeChanged();
case 'created':
return $this->kirby()->roles()->canBeCreated();
default:
return $this->kirby()->roles();
}
}
],
[
'pattern' => 'roles/(:any)',

View File

@@ -1,5 +1,8 @@
<?php
use Kirby\Exception\Exception;
use Kirby\Exception\InvalidArgumentException;
/**
* System Routes
*/
@@ -54,11 +57,11 @@ return [
}
if ($system->isInstallable() === false) {
throw new Exception('The panel cannot be installed');
throw new Exception('The Panel cannot be installed');
}
if ($system->isInstalled() === true) {
throw new Exception('The panel is already installed');
throw new Exception('The Panel is already installed');
}
// create the first user

View File

@@ -4,12 +4,8 @@ use Kirby\Cms\App;
use Kirby\Cms\File;
use Kirby\Cms\Filename;
use Kirby\Cms\FileVersion;
use Kirby\Cms\FileModifications;
use Kirby\Cms\Model;
use Kirby\Cms\Response;
use Kirby\Cms\Template;
use Kirby\Data\Data;
use Kirby\Exception\NotFoundException;
use Kirby\Image\Darkroom;
use Kirby\Text\Markdown;
use Kirby\Text\SmartyPants;
@@ -22,7 +18,7 @@ return [
/**
* Used by the `css()` helper
*
* @param Kirby\Cms\App $kirby Kirby instance
* @param \Kirby\Cms\App $kirby Kirby instance
* @param string $url Relative or absolute URL
* @param string|array $options An array of attributes for the link tag or a media attribute string
*/
@@ -33,8 +29,8 @@ return [
/**
* Modify URLs for file objects
*
* @param Kirby\Cms\App $kirby Kirby instance
* @param Kirby\Cms\File $file The original file object
* @param \Kirby\Cms\App $kirby Kirby instance
* @param \Kirby\Cms\File $file The original file object
* @return string
*/
'file::url' => function (App $kirby, File $file): string {
@@ -44,10 +40,10 @@ return [
/**
* Adapt file characteristics
*
* @param Kirby\Cms\App $kirby Kirby instance
* @param Kirby\Cms\File|Kirby\Cms\FileModifications $file The file object
* @param \Kirby\Cms\App $kirby Kirby instance
* @param \Kirby\Cms\File|\Kirby\Cms\FileModifications $file The file object
* @param array $options All thumb options (width, height, crop, blur, grayscale)
* @return Kirby\Cms\File|Kirby\Cms\FileVersion
* @return \Kirby\Cms\File|\Kirby\Cms\FileVersion
*/
'file::version' => function (App $kirby, $file, array $options = []) {
if ($file->isResizable() === false) {
@@ -82,7 +78,7 @@ return [
/**
* Used by the `js()` helper
*
* @param Kirby\Cms\App $kirby Kirby instance
* @param \Kirby\Cms\App $kirby Kirby instance
* @param string $url Relative or absolute URL
* @param string|array $options An array of attributes for the link tag or a media attribute string
*/
@@ -93,7 +89,7 @@ return [
/**
* Add your own Markdown parser
*
* @param Kirby\Cms\App $kirby Kirby instance
* @param \Kirby\Cms\App $kirby Kirby instance
* @param string $text Text to parse
* @param array $options Markdown options
* @param bool $inline Whether to wrap the text in `<p>` tags
@@ -116,7 +112,7 @@ return [
/**
* Add your own SmartyPants parser
*
* @param Kirby\Cms\App $kirby Kirby instance
* @param \Kirby\Cms\App $kirby Kirby instance
* @param string $text Text to parse
* @param array $options SmartyPants options
* @return string
@@ -138,7 +134,7 @@ return [
/**
* Add your own snippet loader
*
* @param Kirby\Cms\App $kirby Kirby instance
* @param \Kirby\Cms\App $kirby Kirby instance
* @param string|array $name Snippet name
* @param array $data Data array for the snippet
* @return string|null
@@ -165,11 +161,11 @@ return [
/**
* Add your own template engine
*
* @param Kirby\Cms\App $kirby Kirby instance
* @param \Kirby\Cms\App $kirby Kirby instance
* @param string $name Template name
* @param string $type Extension type
* @param string $defaultType Default extension type
* @return Kirby\Cms\Template
* @return \Kirby\Cms\Template
*/
'template' => function (App $kirby, string $name, string $type = 'html', string $defaultType = 'html') {
return new Template($name, $type, $defaultType);
@@ -178,7 +174,7 @@ return [
/**
* Add your own thumb generator
*
* @param Kirby\Cms\App $kirby Kirby instance
* @param \Kirby\Cms\App $kirby Kirby instance
* @param string $src The root of the original file
* @param string $dst The root to the desired destination
* @param array $options All thumb options that should be applied: `width`, `height`, `crop`, `blur`, `grayscale`
@@ -198,7 +194,7 @@ return [
/**
* Modify all URLs
*
* @param Kirby\Cms\App $kirby Kirby instance
* @param \Kirby\Cms\App $kirby Kirby instance
* @param string $path URL path
* @param array|null $options Array of options for the Uri class
* @param Closure $originalHandler Callback function to the original URL handler with `$path` and `$options` as parameters

View File

@@ -21,7 +21,7 @@ return [
/**
* Changes the calendar icon to something custom
*/
'icon' => function (string $icon = "calendar") {
'icon' => function (string $icon = 'calendar') {
return $icon;
},
/**

View File

@@ -1,5 +1,7 @@
<?php
use Kirby\Toolkit\I18n;
return [
'extends' => 'text',
'props' => [

View File

@@ -1,5 +1,6 @@
<?php
use Kirby\Data\Yaml;
use Kirby\Toolkit\A;
return [
@@ -112,7 +113,7 @@ return [
$field = $this->field();
$uploads = $field->uploads();
return $field->upload($this, $uploads, function ($file) use ($field) {
return $field->upload($this, $uploads, function ($file, $parent) use ($field) {
return $file->panelPickerData([
'image' => $field->image(),
'info' => $field->info(),

View File

@@ -13,14 +13,11 @@ return [
],
'computed' => [
'text' => function () {
$text = $this->text;
if ($model = $this->model()) {
if ($text = $this->text) {
$text = $this->model()->toString($text);
}
return kirbytext($text);
}
}
],
'save' => false,
];

View File

@@ -19,7 +19,7 @@ return [
$self = [
'id' => $parent->id() == '' ? null : $parent->id(),
'title' => $parent->title()->value(),
'parent' => is_a($parent->parent(), Page::class) === true ? $parent->parent()->id() : null,
'parent' => is_a($parent->parent(), 'Kirby\Cms\Page') === true ? $parent->parent()->id() : null,
];
}

View File

@@ -1,5 +1,6 @@
<?php
use Kirby\Toolkit\I18n;
return [
'props' => [

View File

@@ -2,6 +2,7 @@
use Kirby\Cms\Api;
use Kirby\Cms\File;
use Kirby\Exception\Exception;
return [
'props' => [
@@ -64,7 +65,7 @@ return [
throw new Exception('The file could not be uploaded');
}
return $map($file);
return $map($file, $parent);
});
}
]

View File

@@ -1,5 +1,7 @@
<?php
use Kirby\Toolkit\Str;
return [
'props' => [
/**

View File

@@ -1,7 +1,7 @@
<?php
use Kirby\Data\Yaml;
use Kirby\Toolkit\A;
use Kirby\Toolkit\I18n;
return [
'mixins' => ['min', 'pagepicker', 'picker'],
@@ -47,6 +47,12 @@ return [
return $this->toPages($value);
},
],
'computed' => [
/**
* Unset inherited computed
*/
'default' => null
],
'methods' => [
'pageResponse' => function ($page) {
return $page->panelPickerData([

View File

@@ -1,7 +1,8 @@
<?php
use Kirby\Cms\Form;
use Kirby\Cms\Blueprint;
use Kirby\Data\Yaml;
use Kirby\Toolkit\I18n;
return [
'mixins' => ['min'],
@@ -162,7 +163,7 @@ return [
$data = [];
foreach ($value as $row) {
$data[] = $this->form($row)->data(true);
$data[] = $this->form($row)->data();
}
return $data;

View File

@@ -1,5 +1,9 @@
<?php
use Kirby\Toolkit\A;
use Kirby\Toolkit\Str;
use Kirby\Toolkit\V;
return [
'mixins' => ['min', 'options'],
'props' => [

View File

@@ -1,7 +1,6 @@
<?php
use Kirby\Exception\InvalidArgumentException;
use Kirby\Toolkit\I18n;
use Kirby\Toolkit\Str;
return [
@@ -98,6 +97,7 @@ return [
],
'validations' => [
'minlength',
'maxlength'
'maxlength',
'pattern'
]
];

View File

@@ -76,7 +76,7 @@ return [
/**
* If `false`, spellcheck will be switched off
*/
'spellcheck' => function (bool $spellcheck = false) {
'spellcheck' => function (bool $spellcheck = true) {
return $spellcheck;
},
@@ -95,10 +95,15 @@ return [
[
'pattern' => 'upload',
'action' => function () {
return $this->field()->upload($this, $this->field()->uploads(), function ($file) {
$field = $this->field();
$uploads = $field->uploads();
return $this->field()->upload($this, $uploads, function ($file, $parent) use ($field) {
$absolute = $field->model()->is($parent) === false;
return [
'filename' => $file->filename(),
'dragText' => $file->dragText(),
'dragText' => $file->dragText('auto', $absolute),
];
});
}

View File

@@ -1,6 +1,7 @@
<?php
use Kirby\Exception\InvalidArgumentException;
use Kirby\Toolkit\I18n;
return [
'props' => [
@@ -12,8 +13,8 @@ return [
/**
* Default value which will be saved when a new page/user/file is created
*/
'default' => function ($value = null) {
return $this->toBool($value);
'default' => function ($default = null) {
return $this->default = $default;
},
/**
* Sets the text next to the toggle. The text can be a string or an array of two options. The first one is the negative text and the second one the positive. The text will automatically switch when the toggle is triggered.
@@ -35,6 +36,9 @@ return [
},
],
'computed' => [
'default' => function () {
return $this->toBool($this->default);
},
'value' => function () {
if ($this->props['value'] === null) {
return $this->default();

View File

@@ -1,5 +1,7 @@
<?php
use Kirby\Toolkit\I18n;
return [
'extends' => 'text',
'props' => [

View File

@@ -1,5 +1,8 @@
<?php
use Kirby\Data\Yaml;
use Kirby\Toolkit\A;
return [
'mixins' => ['min', 'picker', 'userpicker'],
'props' => [
@@ -33,6 +36,12 @@ return [
return $this->toUsers($value);
},
],
'computed' => [
/**
* Unset inherited computed
*/
'default' => null
],
'methods' => [
'userResponse' => function ($user) {
return $user->panelPickerData([

View File

@@ -5,18 +5,18 @@ use Kirby\Cms\Asset;
use Kirby\Cms\Html;
use Kirby\Cms\Response;
use Kirby\Cms\Url;
use Kirby\Exception\Exception;
use Kirby\Http\Server;
use Kirby\Toolkit\Escape;
use Kirby\Toolkit\F;
use Kirby\Toolkit\I18n;
use Kirby\Toolkit\View;
use Kirby\Toolkit\Str;
use Kirby\Toolkit\V;
/**
* Helper to create an asset object
*
* @param string $path
* @return Kirby\Cms\Asset
* @return \Kirby\Cms\Asset
*/
function asset(string $path)
{
@@ -44,7 +44,7 @@ function attr(array $attr = null, $before = null, $after = null)
* Returns the result of a collection by name
*
* @param string $name
* @return Kirby\Cms\Collection|null
* @return \Kirby\Cms\Collection|null
*/
function collection(string $name)
{
@@ -217,7 +217,7 @@ function go(string $url = null, int $code = 302)
/**
* Shortcut for html()
*
* @param string $text unencoded text
* @param string $string unencoded text
* @param bool $keepTags
* @return string
*/
@@ -229,7 +229,7 @@ function h(string $string = null, bool $keepTags = false)
/**
* Creates safe html by encoding special characters
*
* @param string $text unencoded text
* @param string $string unencoded text
* @param bool $keepTags
* @return string
*/
@@ -246,7 +246,7 @@ function html(string $string = null, bool $keepTags = false)
* <?= image('some/page/myimage.jpg') ?>
*
* @param string $path
* @return Kirby\Cms\File|null
* @return \Kirby\Cms\File|null
*/
function image(string $path = null)
{
@@ -346,7 +346,7 @@ function invalid(array $data = [], array $rules = [], array $messages = [])
/**
* Creates a script tag to load a javascript file
*
* @param string|array $src
* @param string|array $url
* @param string|array $options
* @return void
*/
@@ -382,7 +382,7 @@ function js($url, $options = null)
/**
* Returns the Kirby object in any situation
*
* @return Kirby\Cms\App
* @return \Kirby\Cms\App
*/
function kirby()
{
@@ -527,7 +527,7 @@ function option(string $key, $default = null)
* id or the current page when no id is specified
*
* @param string|array ...$id
* @return Kirby\Cms\Page|null
* @return \Kirby\Cms\Page|null
*/
function page(...$id)
{
@@ -542,7 +542,7 @@ function page(...$id)
* Helper to build page collections
*
* @param string|array ...$id
* @return Kirby\Cms\Pages
* @return \Kirby\Cms\Pages
*/
function pages(...$id)
{
@@ -616,7 +616,7 @@ function timestamp(string $date = null, int $step = null): ?string
/**
* Returns the currrent site object
*
* @return Kirby\Cms\Site
* @return \Kirby\Cms\Site
*/
function site()
{

View File

@@ -5,11 +5,13 @@ use Kirby\Cms\Field;
use Kirby\Cms\File;
use Kirby\Cms\Files;
use Kirby\Cms\Html;
use Kirby\Cms\Structure;
use Kirby\Cms\Page;
use Kirby\Cms\Structure;
use Kirby\Cms\Url;
use Kirby\Data\Json;
use Kirby\Data\Yaml;
use Kirby\Exception\Exception;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Toolkit\Str;
use Kirby\Toolkit\V;
use Kirby\Toolkit\Xml;
@@ -25,7 +27,7 @@ return function (App $app) {
/**
* Converts the field value into a proper boolean and inverts it
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @return boolean
*/
'isFalse' => function (Field $field): bool {
@@ -35,7 +37,7 @@ return function (App $app) {
/**
* Converts the field value into a proper boolean
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @return boolean
*/
'isTrue' => function (Field $field): bool {
@@ -46,7 +48,7 @@ return function (App $app) {
* Validates the field content with the given validator and parameters
*
* @param string $validator
* @param mixed[] ...$arguments A list of optional validator arguments
* @param mixed ...$arguments A list of optional validator arguments
* @return boolean
*/
'isValid' => function (Field $field, string $validator, ...$arguments): bool {
@@ -58,7 +60,7 @@ return function (App $app) {
/**
* Parses the field value with the given method
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @param string $method [',', 'yaml', 'json']
* @return array
*/
@@ -76,7 +78,7 @@ return function (App $app) {
/**
* Converts the field value into a proper boolean
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @param bool $default Default value if the field is empty
* @return bool
*/
@@ -88,7 +90,7 @@ return function (App $app) {
/**
* Converts the field value to a timestamp or a formatted date
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @param string|null $format PHP date formatting string
* @param string|null $fallback Fallback string for `strtotime` (since 3.2)
* @return string|int
@@ -110,8 +112,8 @@ return function (App $app) {
/**
* Returns a file object from a filename in the field
*
* @param Kirby\Cms\Field $field
* @return Kirby\Cms\File|null
* @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\File|null
*/
'toFile' => function (Field $field) {
return $field->toFiles()->first();
@@ -120,9 +122,9 @@ return function (App $app) {
/**
* Returns a file collection from a yaml list of filenames in the field
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @param string $separator
* @return Kirby\Cms\Files
* @return \Kirby\Cms\Files
*/
'toFiles' => function (Field $field, string $separator = 'yaml') {
$parent = $field->parent();
@@ -140,31 +142,31 @@ return function (App $app) {
/**
* Converts the field value into a proper float
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @param float $default Default value if the field is empty
* @return float
*/
'toFloat' => function (Field $field, float $default = 0) {
$value = $field->isEmpty() ? $default : $field->value;
return floatval($value);
return (float)$value;
},
/**
* Converts the field value into a proper integer
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @param int $default Default value if the field is empty
* @return int
*/
'toInt' => function (Field $field, int $default = 0) {
$value = $field->isEmpty() ? $default : $field->value;
return intval($value);
return (int)$value;
},
/**
* Wraps a link tag around the field value. The field value is used as the link text
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @param mixed $attr1 Can be an optional Url. If no Url is set, the Url of the Page, File or Site will be used. Can also be an array of link attributes
* @param mixed $attr2 If `$attr1` is used to set the Url, you can use `$attr2` to pass an array of additional attributes.
* @return string
@@ -188,8 +190,8 @@ return function (App $app) {
/**
* Returns a page object from a page id in the field
*
* @param Kirby\Cms\Field $field
* @return Kirby\Cms\Page|null
* @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\Page|null
*/
'toPage' => function (Field $field) use ($app) {
return $field->toPages()->first();
@@ -198,9 +200,9 @@ return function (App $app) {
/**
* Returns a pages collection from a yaml list of page ids in the field
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @param string $separator Can be any other separator to split the field value by
* @return Kirby\Cms\Pages
* @return \Kirby\Cms\Pages
*/
'toPages' => function (Field $field, string $separator = 'yaml') use ($app) {
return $app->site()->find(false, false, ...$field->toData($separator));
@@ -209,17 +211,27 @@ return function (App $app) {
/**
* Converts a yaml field to a Structure object
*
* @param Kirby\Cms\Field $field
* @return Kirby\Cms\Structure
* @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\Structure
*/
'toStructure' => function (Field $field) {
try {
return new Structure(Yaml::decode($field->value), $field->parent());
} catch (Exception $e) {
if ($field->parent() === null) {
$message = 'Invalid structure data for "' . $field->key() . '" field';
} else {
$message = 'Invalid structure data for "' . $field->key() . '" field on parent "' . $field->parent()->title() . '"';
}
throw new InvalidArgumentException($message);
}
},
/**
* Converts the field value to a Unix timestamp
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @return int
*/
'toTimestamp' => function (Field $field): int {
@@ -229,7 +241,7 @@ return function (App $app) {
/**
* Turns the field value into an absolute Url
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @return string
*/
'toUrl' => function (Field $field): string {
@@ -239,8 +251,8 @@ return function (App $app) {
/**
* Converts a user email address to a user object
*
* @param Kirby\Cms\Field $field
* @return Kirby\Cms\User|null
* @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\User|null
*/
'toUser' => function (Field $field) use ($app) {
return $field->toUsers()->first();
@@ -249,9 +261,9 @@ return function (App $app) {
/**
* Returns a users collection from a yaml list of user email addresses in the field
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @param string $separator
* @return Kirby\Cms\Users
* @return \Kirby\Cms\Users
*/
'toUsers' => function (Field $field, string $separator = 'yaml') use ($app) {
return $app->users()->find(false, false, ...$field->toData($separator));
@@ -279,7 +291,7 @@ return function (App $app) {
* Escapes the field value to be safely used in HTML
* templates without the risk of XSS attacks
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @param string $context html, attr, js or css
*/
'escape' => function (Field $field, string $context = 'html') {
@@ -291,11 +303,11 @@ return function (App $app) {
* Creates an excerpt of the field value without html
* or any other formatting.
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @param int $cahrs
* @param boolean $strip
* @param string $rep
* @return Kirby\Cms\Field
* @return \Kirby\Cms\Field
*/
'excerpt' => function (Field $field, int $chars = 0, bool $strip = true, string $rep = '…') {
$field->value = Str::excerpt($field->kirbytext()->value(), $chars, $strip, $rep);
@@ -305,8 +317,8 @@ return function (App $app) {
/**
* Converts the field content to valid HTML
*
* @param Kirby\Cms\Field $field
* @return Kirby\Cms\Field
* @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\Field
*/
'html' => function (Field $field) {
$field->value = htmlentities($field->value, ENT_COMPAT, 'utf-8');
@@ -316,8 +328,8 @@ return function (App $app) {
/**
* Converts the field content from Markdown/Kirbytext to valid HTML
*
* @param Kirby\Cms\Field $field
* @return Kirby\Cms\Field
* @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\Field
*/
'kirbytext' => function (Field $field) use ($app) {
$field->value = $app->kirbytext($field->value, [
@@ -333,8 +345,8 @@ return function (App $app) {
* to valid HTML
* @since 3.1.0
*
* @param Kirby\Cms\Field $field
* @return Kirby\Cms\Field
* @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\Field
*/
'kirbytextinline' => function (Field $field) use ($app) {
$field->value = $app->kirbytext($field->value, [
@@ -348,8 +360,8 @@ return function (App $app) {
/**
* Parses all KirbyTags without also parsing Markdown
*
* @param Kirby\Cms\Field $field
* @return Kirby\Cms\Field
* @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\Field
*/
'kirbytags' => function (Field $field) use ($app) {
$field->value = $app->kirbytags($field->value, [
@@ -363,8 +375,8 @@ return function (App $app) {
/**
* Converts the field content to lowercase
*
* @param Kirby\Cms\Field $field
* @return Kirby\Cms\Field
* @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\Field
*/
'lower' => function (Field $field) {
$field->value = Str::lower($field->value);
@@ -374,8 +386,8 @@ return function (App $app) {
/**
* Converts markdown to valid HTML
*
* @param Kirby\Cms\Field $field
* @return Kirby\Cms\Field
* @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\Field
*/
'markdown' => function (Field $field) use ($app) {
$field->value = $app->markdown($field->value);
@@ -385,8 +397,8 @@ return function (App $app) {
/**
* Converts the field content to valid XML
*
* @param Kirby\Cms\Field $field
* @return Kirby\Cms\Field
* @param \Kirby\Cms\Field $field
* @return \Kirby\Cms\Field
*/
'xml' => function (Field $field) {
$field->value = Xml::encode($field->value);
@@ -397,10 +409,10 @@ return function (App $app) {
* Cuts the string after the given length and
* adds "…" if it is longer
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @param int $length The number of characters in the string
* @param string $appendix An optional replacement for the missing rest
* @return Kirby\Cms\Field
* @return \Kirby\Cms\Field
*/
'short' => function (Field $field, int $length, string $appendix = '…') {
$field->value = Str::short($field->value, $length, $appendix);
@@ -410,8 +422,8 @@ return function (App $app) {
/**
* Converts the field content to a slug
*
* @param Kirby\Cms\Field $field
* @return Kirby\cms\Field
* @param \Kirby\Cms\Field $field
* @return \Kirby\cms\Field
*/
'slug' => function (Field $field) {
$field->value = Str::slug($field->value);
@@ -421,8 +433,8 @@ return function (App $app) {
/**
* Applies SmartyPants to the field
*
* @param Kirby\Cms\Field $field
* @return Kirby\cms\Field
* @param \Kirby\Cms\Field $field
* @return \Kirby\cms\Field
*/
'smartypants' => function (Field $field) use ($app) {
$field->value = $app->smartypants($field->value);
@@ -432,8 +444,8 @@ return function (App $app) {
/**
* Splits the field content into an array
*
* @param Kirby\Cms\Field $field
* @return Kirby\cms\Field
* @param \Kirby\Cms\Field $field
* @return \Kirby\cms\Field
*/
'split' => function (Field $field, $separator = ',') {
return Str::split((string)$field->value, $separator);
@@ -442,8 +454,8 @@ return function (App $app) {
/**
* Converts the field content to uppercase
*
* @param Kirby\Cms\Field $field
* @return Kirby\cms\Field
* @param \Kirby\Cms\Field $field
* @return \Kirby\cms\Field
*/
'upper' => function (Field $field) {
$field->value = Str::upper($field->value);
@@ -454,8 +466,8 @@ return function (App $app) {
* Avoids typographical widows in strings by replacing
* the last space with `&nbsp;`
*
* @param Kirby\Cms\Field $field
* @return Kirby\cms\Field
* @param \Kirby\Cms\Field $field
* @return \Kirby\cms\Field
*/
'widont' => function (Field $field) {
$field->value = Str::widont($field->value);
@@ -467,7 +479,7 @@ return function (App $app) {
/**
* Parses yaml in the field content and returns an array
*
* @param Kirby\Cms\Field $field
* @param \Kirby\Cms\Field $field
* @return array
*/
'yaml' => function (Field $field): array {

View File

@@ -1,19 +1,13 @@
<?php
use Kirby\Api\Api;
use Kirby\Cms\App;
use Kirby\Cms\Media;
use Kirby\Cms\Panel;
use Kirby\Cms\PanelPlugins;
use Kirby\Cms\PluginAssets;
use Kirby\Cms\Response;
use Kirby\Exception\NotFoundException;
use Kirby\Http\Response\Redirect;
use Kirby\Http\Router;
use Kirby\Http\Router\Route;
use Kirby\Toolkit\F;
use Kirby\Toolkit\Str;
use Kirby\Toolkit\View;
return function ($kirby) {
$api = $kirby->option('api.slug', 'api');

View File

@@ -1,8 +1,7 @@
<?php
use Kirby\Cms\File;
use Kirby\Toolkit\A;
use Kirby\Toolkit\Str;
use Kirby\Toolkit\I18n;
return [
'mixins' => [
@@ -72,9 +71,6 @@ return [
return null;
},
'dragTextType' => function () {
return (option('panel')['kirbytext'] ?? true) ? 'kirbytext' : 'markdown';
},
'parent' => function () {
return $this->parentModel();
},
@@ -84,7 +80,7 @@ return [
if ($this->sortBy) {
$files = $files->sortBy(...$files::sortArgs($this->sortBy));
} elseif ($this->sortable === true) {
$files = $files->sortBy('sort', 'asc');
$files = $files->sortBy('sort', 'asc', 'filename', 'asc');
}
// apply the default pagination
@@ -106,7 +102,7 @@ return [
$image = $file->panelImage($this->image);
$data[] = [
'dragText' => $file->dragText($this->dragTextType, $dragTextAbsolute),
'dragText' => $file->dragText('auto', $dragTextAbsolute),
'filename' => $file->filename(),
'id' => $file->id(),
'text' => $file->toString($this->text),

View File

@@ -1,5 +1,7 @@
<?php
use Kirby\Toolkit\I18n;
return [
'props' => [
/**
@@ -8,5 +10,12 @@ return [
'empty' => function ($empty = null) {
return I18n::translate($empty, $empty);
}
],
'computed' => [
'empty' => function () {
if ($this->empty) {
return $this->model()->toString($this->empty);
}
}
]
];

View File

@@ -13,7 +13,11 @@ return [
],
'computed' => [
'headline' => function () {
return $this->headline ?? ucfirst($this->name);
if ($this->headline) {
return $this->model()->toString($this->headline);
}
return ucfirst($this->name);
}
]
];

View File

@@ -10,5 +10,12 @@ return [
'help' => function ($help = null) {
return I18n::translate($help, $help);
}
],
'computed' => [
'help' => function () {
if ($this->help) {
return $this->model()->toString($this->help);
}
}
]
];

View File

@@ -1,6 +1,6 @@
<?php
use Kirby\Toolkit\Str;
use Kirby\Exception\Exception;
return [
'props' => [
@@ -22,6 +22,15 @@ return [
if (!$parent) {
throw new Exception('The parent for the query "' . $query . '" cannot be found in the section "' . $this->name() . '"');
}
if (
is_a($parent, 'Kirby\Cms\Page') === false &&
is_a($parent, 'Kirby\Cms\Site') === false &&
is_a($parent, 'Kirby\Cms\File') === false &&
is_a($parent, 'Kirby\Cms\User') === false
) {
throw new Exception('The parent for the section "' . $this->name() . '" has to be a page, site or user object');
}
}
if ($parent === null) {

View File

@@ -2,7 +2,7 @@
use Kirby\Cms\Blueprint;
use Kirby\Toolkit\A;
use Kirby\Toolkit\Str;
use Kirby\Toolkit\I18n;
return [
'mixins' => [
@@ -80,9 +80,6 @@ return [
}
],
'computed' => [
'dragTextType' => function () {
return option('panel.kirbytext', true) ? 'kirbytext' : 'markdown';
},
'parent' => function () {
return $this->parentModel();
},
@@ -145,7 +142,7 @@ return [
$data[] = [
'id' => $item->id(),
'dragText' => $item->dragText($this->dragTextType),
'dragText' => $item->dragText(),
'text' => $item->toString($this->text),
'info' => $item->toString($this->info ?? false),
'parent' => $item->parentId(),

View File

@@ -8,7 +8,9 @@ use Kirby\Cms\Url;
*/
return [
/* Date */
/**
* Date
*/
'date' => [
'attr' => [],
'html' => function ($tag) {
@@ -16,7 +18,9 @@ return [
}
],
/* Email */
/**
* Email
*/
'email' => [
'attr' => [
'class',
@@ -35,7 +39,9 @@ return [
}
],
/* File */
/**
* File
*/
'file' => [
'attr' => [
'class',
@@ -66,7 +72,9 @@ return [
}
],
/* Gist */
/**
* Gist
*/
'gist' => [
'attr' => [
'file'
@@ -76,7 +84,9 @@ return [
}
],
/* Image */
/**
* Image
*/
'image' => [
'attr' => [
'alt',
@@ -143,7 +153,9 @@ return [
}
],
/* Link */
/**
* Link
*/
'link' => [
'attr' => [
'class',
@@ -169,7 +181,9 @@ return [
}
],
/* Tel */
/**
* Tel
*/
'tel' => [
'attr' => [
'class',
@@ -186,7 +200,9 @@ return [
}
],
/* Twitter */
/**
* Twitter
*/
'twitter' => [
'attr' => [
'class',
@@ -216,7 +232,9 @@ return [
}
],
/* Video */
/**
* Video
*/
'video' => [
'attr' => [
'class',

View File

@@ -37,6 +37,7 @@
"error.access.login": "Invalid login",
"error.access.panel": "Нямате права за достъп до панела",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "Профилната снимка не може да се качи",
"error.avatar.delete.fail": "Профилната снимка не може да бъде изтрита",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Невалиден конвертор \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Не можете да смените името на \"{filename}\"",
"error.file.duplicate": "Файл с име \"{filename}\" вече съществува",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "\u041c\u043e\u043b\u044f, \u043f\u043e\u0442\u0432\u044a\u0440\u0434\u0435\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u0430\u0442\u0430",
"error.user.password.undefined": "Потребителят няма парола",
"error.user.role.invalid": "Моля въведете валидна роля",
"error.user.undefined": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d.",
"error.user.update.permission":
"Нямате права да обновите този потребител \"{name}\"",
@@ -412,6 +413,17 @@
"translation.name": "Български",
"upload": "Прикачи",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Грешка",
"upload.progress": "Uploading…",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Inici de sessió no vàlid",
"error.access.panel": "No tens permís per accedir al panell",
"error.access.view": "No tens accés a aquesta part del tauler",
"error.avatar.create.fail": "No s'ha pogut carregar la imatge del perfil",
"error.avatar.delete.fail": "La imatge del perfil no s'ha pogut eliminar",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Convertidor no vàlid \"{converter}\"",
"error.file.changeName.empty": "El nom no pot estar buit",
"error.file.changeName.permission":
"No tens permís per canviar el nom de \"{filename}\"",
"error.file.duplicate": "Ja existeix un fitxer amb el nom \"{filename}\"",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "Les contrasenyes no coincideixen",
"error.user.password.undefined": "L'usuari no té una contrasenya",
"error.user.role.invalid": "Si us plau, introdueix un rol vàlid",
"error.user.undefined": "L'usuari no s'ha trobat",
"error.user.update.permission":
"No tens permís per actualitzar l'usuari \"{name}\"",
@@ -265,7 +266,7 @@
"language.direction.ltr": "Esquerra a dreta",
"language.direction.rtl": "De dreta a esquerra",
"language.locale": "Cadena local de PHP",
"language.locale.warning": "You are using a custom locale set up. Please modify it in the language file in /site/languages",
"language.locale.warning": "S'està fent servir una configuració regional personalitzada. Modifica el fitxer d'idioma a /site/languages",
"language.name": "Nom",
"language.updated": "S'ha actualitzat l'idioma",
@@ -412,6 +413,17 @@
"translation.name": "Catalan",
"upload": "Carregar",
"upload.error.cantMove": "El fitxer carregat no s'ha pogut moure",
"upload.error.cantWrite": "No s'ha pogut escriure el fitxer al disc",
"upload.error.default": "No s'ha pogut carregar el fitxer",
"upload.error.extension": "La càrrega del fitxer s'ha aturat per l'extensió",
"upload.error.formSize": "El fitxer carregat supera la directiva MAX_FILE_SIZE especificada en el formulari",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "El fitxer carregat supera la directiva upload_max_filesize especifiada al php.ini",
"upload.error.noFile": "No s'ha carregat cap fitxer",
"upload.error.noFiles": "No s'ha penjat cap fitxer",
"upload.error.partial": "El fitxer carregat només s'ha carregat parcialment",
"upload.error.tmpDir": "Falta una carpeta temporal",
"upload.errors": "Error",
"upload.progress": "Carregant...",

View File

@@ -24,19 +24,20 @@
"delete": "Smazat",
"dimensions": "Rozměry",
"discard": "Zahodit",
"download": "Download",
"duplicate": "Duplicate",
"download": "Stáhnout",
"duplicate": "Duplikovat",
"edit": "Upravit",
"dialog.files.empty": "No files to select",
"dialog.pages.empty": "No pages to select",
"dialog.users.empty": "No users to select",
"dialog.files.empty": "Žádné soubory k výběru",
"dialog.pages.empty": "Žádné stránky k výběru",
"dialog.users.empty": "Žádní uživatelé k výběru",
"email": "Email",
"email.placeholder": "mail@example.com",
"error.access.login": "Neplatné přihlášení",
"error.access.panel": "Nemáte povoleno vstoupit do panelu",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "Nebylo možné nahrát profilový obrázek",
"error.avatar.delete.fail": "Nebylo mo\u017en\u00e9 smazat profilov\u00fd obr\u00e1zek",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Neplatný konvertor \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Nemáte povoleno změnit jméno souboru \"{filename}\"",
"error.file.duplicate": "Soubor s názvem \"{filename}\" již existuje",
@@ -71,13 +73,13 @@
"error.form.incomplete": "Prosím opravte všechny chyby ve formuláři",
"error.form.notSaved": "Formulář nemohl být uložen",
"error.language.code": "Please enter a valid code for the language",
"error.language.duplicate": "The language already exists",
"error.language.name": "Please enter a valid name for the language",
"error.language.code": "Zadejte prosím platný kód jazyka",
"error.language.duplicate": "Jazyk již existuje",
"error.language.name": "Zadejte prosím platné jméno jazyka",
"error.license.format": "Please enter a valid license key",
"error.license.format": "Zadejte prosím platné licenční číslo",
"error.license.email": "Zadejte prosím platnou emailovou adresu",
"error.license.verification": "The license could not be verified",
"error.license.verification": "Licenci nelze ověřit",
"error.page.changeSlug.permission":
"Nem\u016f\u017eete zm\u011bnit URL t\u00e9to str\u00e1nky",
@@ -104,7 +106,7 @@
"Koncept stránky, který obsahuje v adrese URL \"{slug}\" již existuje ",
"error.page.duplicate":
"Stránka, která v adrese URL obsahuje \"{slug}\" již existuje",
"error.page.duplicate.permission": "You are not allowed to duplicate \"{slug}\"",
"error.page.duplicate.permission": "Nemáte dovoleno duplikovat \"{slug}\"",
"error.page.notFound": "Str\u00e1nku se nepoda\u0159ilo nal\u00e9zt.",
"error.page.num.invalid":
"Zadejte prosím platné pořadové číslo. Čísla nesmí být záporná.",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "Pros\u00edm potvr\u010fte heslo",
"error.user.password.undefined": "Uživatel nemá nastavené heslo.",
"error.user.role.invalid": "Zadejte prosím platnou roli",
"error.user.undefined": "U\u017eivatele se nepoda\u0159ilo nal\u00e9zt",
"error.user.update.permission":
"Nemáte dovoleno upravit uživatele \"{name}\"",
@@ -183,9 +184,9 @@
"error.validation.contains":
"Zadejte prosím hodnotu, která obsahuje \"{needle}\"",
"error.validation.date": "Zadejte prosím platné datum",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.date.after": "Zadejte prosím datum po {date}",
"error.validation.date.before": "Zadejte prosím datum před {date}",
"error.validation.date.between": "Zadejte prosím datum mezi {min} a {max}",
"error.validation.denied": "Prosím, odmítněte",
"error.validation.different": "Hodnota nesmí být \"{other}\"",
"error.validation.email": "Zadejte prosím platnou emailovou adresu",
@@ -265,7 +266,7 @@
"language.direction.ltr": "Zleva doprava",
"language.direction.rtl": "Zprava doleva",
"language.locale": "Řetězec lokalizace PHP",
"language.locale.warning": "You are using a custom locale set up. Please modify it in the language file in /site/languages",
"language.locale.warning": "Používáte vlastní jazykové nastavení. Upravte prosím soubor s nastavením v /site/languages",
"language.name": "Jméno",
"language.updated": "Jazyk byl aktualizován",
@@ -289,12 +290,12 @@
"loading": "Načítám",
"lock.unsaved": "Unsaved changes",
"lock.isLocked": "Unsaved changes by <strong>{email}</strong>",
"lock.file.isLocked": "The file is currently being edited by {email} and cannot be changed.",
"lock.page.isLocked": "The page is currently being edited by {email} and cannot be changed.",
"lock.unlock": "Unlock",
"lock.isUnlocked": "Your unsaved changes have been overwritten by another user. You can download your changes to merge them manually.",
"lock.unsaved": "Neuložené změny",
"lock.isLocked": "Neuložené změny provedené <strong>{email}</strong>",
"lock.file.isLocked": "Soubor nelze změnit, právě jej upravuje {email}.",
"lock.page.isLocked": "Stránku nelze změnit, právě jí upravuje {email} .",
"lock.unlock": "Odemknout",
"lock.isUnlocked": "Vaše neuložené změny byly přepsány jiným uživatelem. Můžeze si své úpravy stáhnout a zapracovat je ručně.",
"login": "P\u0159ihl\u00e1sit se",
"login.remember": "Zůstat přihlášen",
@@ -323,8 +324,8 @@
"more": "Více",
"name": "Jméno",
"next": "Další",
"off": "off",
"on": "on",
"off": "vypnuto",
"on": "zapnuto",
"open": "Otevřít",
"options": "Možnosti",
@@ -346,8 +347,8 @@
"page.delete.confirm.title": "Pro potvrzení zadejte titulek stránky",
"page.draft.create": "Vytvořit koncept",
"page.duplicate.appendix": "Kopírovat",
"page.duplicate.files": "Copy files",
"page.duplicate.pages": "Copy pages",
"page.duplicate.files": "Kopírovat soubory",
"page.duplicate.pages": "Kopírovat stránky",
"page.status": "Stav",
"page.status.draft": "Koncept",
"page.status.draft.description":
@@ -373,13 +374,13 @@
"revert": "Zahodit",
"role": "Role",
"role.admin.description": "The admin has all rights",
"role.admin.title": "Admin",
"role.admin.description": "Administrátor má všechna práva",
"role.admin.title": "Administrátor",
"role.all": "Vše",
"role.empty": "Neexistují uživatelé s touto rolí",
"role.description.placeholder": "Žádný popis",
"role.nobody.description": "This is a fallback role without any permissions",
"role.nobody.title": "Nobody",
"role.nobody.description": "Toto je výchozí role bez jakýchkoli oprávnění",
"role.nobody.title": "Nikdo",
"save": "Ulo\u017eit",
"search": "Hledat",
@@ -412,6 +413,17 @@
"translation.name": "\u010cesky",
"upload": "Nahrát",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Chyba",
"upload.progress": "Nahrávání...",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Ugyldigt log ind",
"error.access.panel": "Du har ikke adgang til panelet",
"error.access.view": "Du har ikke adgang til denne del af panelet",
"error.avatar.create.fail": "Profilbilledet kunne blev ikke uploadet ",
"error.avatar.delete.fail": "Profilbilledet kunne ikke slettes",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Ugyldig converter \"{converter}\"",
"error.file.changeName.empty": "Navn kan ikke efterlades tomt",
"error.file.changeName.permission":
"Du har ikke tilladelse til at ændre navnet på filen \"{filename}\"",
"error.file.duplicate": "En fil med navnet \"{filename}\" eksisterer allerede",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "Bekr\u00e6ft venligst adgangskoden",
"error.user.password.undefined": "Brugeren har ikke en adgangskode",
"error.user.role.invalid": "Indtast venligst en gyldig rolle",
"error.user.undefined": "Brugeren kunne ikke findes",
"error.user.update.permission":
"Du har ikke tilladelse til at opdatere brugeren \"{name}\"",
@@ -183,9 +184,9 @@
"error.validation.contains":
"Indtast venligst en værdi der indeholder \"{needle}\"",
"error.validation.date": "Indtast venligst en gyldig dato",
"error.validation.date.after": "Please enter a date after {date}",
"error.validation.date.before": "Please enter a date before {date}",
"error.validation.date.between": "Please enter a date between {min} and {max}",
"error.validation.date.after": "Indtast venligst en dato efter {date}",
"error.validation.date.before": "Indtast venligst en dato før {date}",
"error.validation.date.between": "Indtast venligst en dato imellem {min} og {max}",
"error.validation.denied": "Venligst afvis",
"error.validation.different": "Værdien må ikke være \"{other}\"",
"error.validation.email": "Indtast venligst en gyldig email adresse",
@@ -265,7 +266,7 @@
"language.direction.ltr": "Venstre mod højre",
"language.direction.rtl": "Højre mod venstre",
"language.locale": "PHP locale string",
"language.locale.warning": "You are using a custom locale set up. Please modify it in the language file in /site/languages",
"language.locale.warning": "Du benytter en brugerdefineret sprogopsætning. Rediger venligst dette i sprogfilen i /site/languages",
"language.name": "Navn",
"language.updated": "Sproget er blevet opdateret",
@@ -412,6 +413,17 @@
"translation.name": "Dansk",
"upload": "Upload",
"upload.error.cantMove": "Den uploadede fil kunne ikke flyttes",
"upload.error.cantWrite": "Kunne ikke skrive fil til disk",
"upload.error.default": "Filen kunne ikke uploades",
"upload.error.extension": "Upload af filen blev stoppet af dens type",
"upload.error.formSize": "Filen overskrider MAX_FILE_SIZE direktivet der er specificeret for formularen",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "FIlen overskrider upload_max_filesize direktivet i php.ini",
"upload.error.noFile": "Ingen fil blev uploadet",
"upload.error.noFiles": "Ingen filer blev uploadet",
"upload.error.partial": "Den uploadede fil blev kun delvist uploadet",
"upload.error.tmpDir": "Der mangler en midlertidig mappe",
"upload.errors": "Fejl",
"upload.progress": "Uploader...",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Ungültige Zugangsdaten",
"error.access.panel": "Du hast keinen Zugang zum Panel",
"error.access.view": "Du hast keinen Zugriff auf diesen Teil des Panels",
"error.avatar.create.fail": "Das Profilbild konnte nicht hochgeladen werden",
"error.avatar.delete.fail": "Das Profilbild konnte nicht gel\u00f6scht werden",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Ungültiger Konverter: \"{converter}\"",
"error.file.changeName.empty": "Bitte gib einen Namen an",
"error.file.changeName.permission":
"Du darfst den Dateinamen von \"{filename}\" nicht ändern",
"error.file.duplicate": "Eine Datei mit dem Dateinamen \"{filename}\" besteht bereits",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "Die Passwörter stimmen nicht überein",
"error.user.password.undefined": "Der Benutzer hat kein Passwort",
"error.user.role.invalid": "Bitte gib eine gültige Rolle an",
"error.user.undefined": "Der Benutzer wurde nicht gefunden",
"error.user.update.permission":
"Du darfst den den Benutzer \"{name}\" nicht editieren",
@@ -412,6 +413,17 @@
"translation.name": "Deutsch",
"upload": "Hochladen",
"upload.error.cantMove": "Die Datei konnte nicht an ihren Zielort bewegt werden",
"upload.error.cantWrite": "Die Datei konnte nicht auf der Festplatte gespeichert werden",
"upload.error.default": "Die Datei konnte nicht hochgeladen werden",
"upload.error.extension": "Der Dateiupload wurde durch eine Erweiterung verhindert",
"upload.error.formSize": "Die Datei ist größer als die MAX_FILE_SIZE Einstellung im Formular",
"upload.error.iniPostSize": "Die Datei ist größer als die post_max_size Einstellung in der php.ini",
"upload.error.iniSize": "Die Datei ist größer als die upload_max_filesize Einstellung in der php.ini",
"upload.error.noFile": "Es wurde keine Datei hochgeladen",
"upload.error.noFiles": "Es wurden keine Dateien hochgeladen",
"upload.error.partial": "Die Datei wurde nur teilweise hochgeladen",
"upload.error.tmpDir": "Der temporäre Ordner für den Dateiupload existiert leider nicht",
"upload.errors": "Fehler",
"upload.progress": "Hochladen …",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Mη έγκυρη σύνδεση",
"error.access.panel": "Δεν επιτρέπεται η πρόσβαση στον πίνακα ελέγχου",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "Δεν ήταν δυνατή η μεταφόρτωση της εικόνας προφίλ",
"error.avatar.delete.fail": "Δεν ήταν δυνατή η διαγραφή της εικόνας προφίλ",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Μη έγκυρος μετατροπέας \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Δεν επιτρέπεται να αλλάξετε το όνομα του \"{filename}\"",
"error.file.duplicate": "Ένα αρχείο με το όνομα \"{filename}\" υπάρχει ήδη",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03b5\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03b9\u03ce\u03c3\u03c4\u03b5 \u03c4\u03bf\u03bd \u039a\u03c9\u03b4\u03b9\u03ba\u03cc \u03a0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2",
"error.user.password.undefined": "Ο χρήστης δεν έχει κωδικό πρόσβασης",
"error.user.role.invalid": "Παρακαλώ εισαγάγετε έναν έγκυρο ρόλο",
"error.user.undefined": "Δεν είναι δυνατή η εύρεση του χρήστη",
"error.user.update.permission":
"Δεν επιτρέπεται η ενημέρωση του χρήστη \"{name}\"",
@@ -412,6 +413,17 @@
"translation.name": "\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac",
"upload": "Μεταφόρτωση",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Σφάλμα",
"upload.progress": "Μεταφόρτωση...",

View File

@@ -155,6 +155,8 @@
"The role for the last admin cannot be changed",
"error.user.changeRole.permission":
"You are not allowed to change the role for the user \"{name}\"",
"error.user.changeRole.toAdmin":
"You are not allowed to promote someone to the admin role",
"error.user.create.permission": "You are not allowed to create this user",
"error.user.delete": "The user \"{name}\" cannot be deleted",
"error.user.delete.lastAdmin": "The last admin cannot be deleted",
@@ -413,6 +415,17 @@
"translation.name": "English",
"upload": "Upload",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Error",
"upload.progress": "Uploading…",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Ingreso inválido",
"error.access.panel": "No tienes permitido acceder al panel.",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "No se pudo subir la foto de perfil.",
"error.avatar.delete.fail": "No se pudo eliminar la foto de perfil.",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Convertidor inválido \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"No tienes permitido cambiar el nombre de \"{filename}\"",
"error.file.duplicate": "Ya existe un archivo con el nombre \"{filename}\".",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "Por favor confirma la contrase\u00f1a",
"error.user.password.undefined": "El usuario no tiene contraseña",
"error.user.role.invalid": "Por favor ingresa un rol valido",
"error.user.undefined": "El usuario no pudo ser encontrado",
"error.user.update.permission":
"No tienes permiso para actualizar al usuario \"{name}\"",
@@ -412,6 +413,17 @@
"translation.name": "Inglés",
"upload": "Subir",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Error",
"upload.progress": "Subiendo...",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Ingreso inválido",
"error.access.panel": "No estás autorizado para acceder al panel",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "No se pudo subir la foto de perfil.",
"error.avatar.delete.fail": "No se pudo borrar la foto de perfil",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Convertidor \"{converter}\" inválido",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"No tienes permitido cambiar el nombre de \"{filename}\"",
"error.file.duplicate": "Ya existe un archivo con el nombre \"{filename}\"",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "Las contraseñas no coinciden",
"error.user.password.undefined": "El usuario no tiene contraseña",
"error.user.role.invalid": "Por favor ingrese un rol válido",
"error.user.undefined": "El usuario no puede ser encontrado",
"error.user.update.permission":
"No tienes permitido actualizar al usuario \"{name}\"",
@@ -412,6 +413,17 @@
"translation.name": "Español",
"upload": "Subir",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Error",
"upload.progress": "Cargando…",

View File

@@ -37,6 +37,7 @@
"error.access.login": "اطلاعات ورودی نامعتبر است",
"error.access.panel": "شما اجازه دسترسی به پانل را ندارید",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "بارگزاری تصویر پروفایل موفق نبود",
"error.avatar.delete.fail": "\u062a\u0635\u0648\u06cc\u0631 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644 \u0631\u0627 \u0646\u0645\u06cc\u062a\u0648\u0627\u0646 \u062d\u0630\u0641 \u06a9\u0631\u062f",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "مبدل «{converter}» نامعتبر است",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"شما اجازه تنغییر نام فایل «{filename}» را ندارید",
"error.file.duplicate": "فایلی هم نام با «{filename}» هم اکنون موجود است",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "\u0644\u0637\u0641\u0627 \u062a\u06a9\u0631\u0627\u0631 \u06af\u0630\u0631\u0648\u0627\u0698\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u0646\u0645\u0627\u06cc\u06cc\u062f",
"error.user.password.undefined": "کاربر فاقد گذرواژه است",
"error.user.role.invalid": "لطفا نقش صحیحی وارد نمایید",
"error.user.undefined": "\u06a9\u0627\u0631\u0628\u0631 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u067e\u06cc\u062f\u0627 \u0646\u0634\u062f",
"error.user.update.permission":
"شما اجازه بروزرسانی کاربر «{name}» را ندارید",
@@ -412,6 +413,17 @@
"translation.name": "انگلیسی",
"upload": "بارگذاری",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "خطا",
"upload.progress": "در حال بارگذاری...",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Kirjautumistiedot eivät kelpaa",
"error.access.panel": "Sinulla ei ole oikeutta käyttää paneelia",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "Profiilikuvaa ei voitu lähettää",
"error.avatar.delete.fail": "Profiilikuvaa ei voitu poistaa",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Muunnin \"{converter}\" ei kelpaa",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Sinulla ei ole oikeutta muuttaa tiedoston \"{filename}\" nimeä",
"error.file.duplicate": "Tiedosto nimellä \"{filename}\" on jo olemassa",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "Salasanat eivät täsmää",
"error.user.password.undefined": "Käyttäjällä ei ole salasanaa",
"error.user.role.invalid": "Anna kelpaava käyttäjätaso",
"error.user.undefined": "K\u00e4ytt\u00e4j\u00e4\u00e4 ei l\u00f6ytynyt",
"error.user.update.permission":
"Sinulla ei ole oikeutta päivittää käyttäjää \"{name}\"",
@@ -412,6 +413,17 @@
"translation.name": "Suomi",
"upload": "Lähetä",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Virhe",
"upload.progress": "Lähetetään...",

View File

@@ -37,8 +37,9 @@
"error.access.login": "Identifiant incorrect",
"error.access.panel": "Vous nêtes pas autorisé à accéder au Panel",
"error.access.view": "Vous nêtes pas autorisé à accéder à cette section du Panel",
"error.avatar.create.fail": "Limage du profil na pas pu être transférée",
"error.avatar.create.fail": "Limage du profil na pu être transférée",
"error.avatar.delete.fail": "Limage du profil na pu être supprimée",
"error.avatar.dimensions.invalid":
"Veuillez choisir une image de profil de largeur et hauteur inférieures à 3000 pixels",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Convertisseur «&nbsp;{converter}&nbsp;» incorrect",
"error.file.changeName.empty": "Le nom ne peut être vide",
"error.file.changeName.permission":
"Vous nêtes pas autorisé à modifier le nom de «&nbsp;{filename}&nbsp;»",
"error.file.duplicate": "Un fichier nommé «&nbsp;{filename}&nbsp;» existe déjà",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "Les mots de passe ne sont pas identiques",
"error.user.password.undefined": "Cet utilisateur na pas de mot de passe",
"error.user.role.invalid": "Veuillez saisir un rôle valide",
"error.user.undefined": "Lutilisateur est introuvable",
"error.user.update.permission":
"Vous nêtes pas autorisé à modifier lutilisateur « {name} »",
@@ -265,7 +266,7 @@
"language.direction.ltr": "De gauche à droite",
"language.direction.rtl": "De droite à gauche",
"language.locale": "Locales PHP",
"language.locale.warning": "You are using a custom locale set up. Please modify it in the language file in /site/languages",
"language.locale.warning": "Vous utilisez une Locale PHP personnalisée. Veuillez la modifier dans le fichier de langue situé dans /site/languages",
"language.name": "Nom",
"language.updated": "La langue a été mise à jour",
@@ -412,6 +413,17 @@
"translation.name": "Français",
"upload": "Transférer",
"upload.error.cantMove": "Le fichier transféré na pu être déplacé",
"upload.error.cantWrite": "Le fichier na pu être écrit sur le disque",
"upload.error.default": "Le fichier na pu être transféré",
"upload.error.extension": "Le transfert de fichier a été stoppé par une extension",
"upload.error.formSize": "Le fichier transféré excède la directive MAX_FILE_SIZE spécifiée dans le formulaire",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "Le fichier transféré excède la directive MAX_FILE_SIZE spécifiée dans php.ini",
"upload.error.noFile": "Aucun fichier na été transféré",
"upload.error.noFiles": "Aucun fichier na été transféré",
"upload.error.partial": "Le fichier na été que partiellement transféré",
"upload.error.tmpDir": "Un dossier temporaire est manquant",
"upload.errors": "Erreur",
"upload.progress": "Transfert en cours…",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Érvénytelen bejelentkezés",
"error.access.panel": "Nincs jogosultságod megnyitni a panelt",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "A profilkép feltöltése nem sikerült",
"error.avatar.delete.fail": "A profilkép nem törölhető",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Érvénytelen konverter: \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Nincs jogosultságod megváltoztatni a \"{filename}\" fájl nevét",
"error.file.duplicate": "Már létezik \"{filename}\" nevű fájl",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "K\u00e9rlek er\u0151s\u00edtsd meg a jelsz\u00f3t",
"error.user.password.undefined": "A felhasználónak nincs jelszó megadva",
"error.user.role.invalid": "Kérlek adj meg egy megfelelő szerepkört",
"error.user.undefined": "A felhaszn\u00e1l\u00f3 nem tal\u00e1lhat\u00f3",
"error.user.update.permission":
"Nincs jogosultságod frissíteni \"{name}\" felhasználó adatait",
@@ -412,6 +413,17 @@
"translation.name": "Magyar",
"upload": "Feltöltés",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Hiba",
"upload.progress": "Feltöltés...",

View File

@@ -33,10 +33,11 @@
"dialog.users.empty": "Tidak ada pengguna untuk dipilih",
"email": "Surel",
"email.placeholder": "surel@contohsurel.com",
"email.placeholder": "surel@contoh.com",
"error.access.login": "Upaya masuk tidak valid",
"error.access.panel": "Anda tidak diizinkan mengakses panel",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "Gambar profil tidak dapat diunggah",
"error.avatar.delete.fail": "Gambar profil tidak dapat dihapus",
@@ -45,12 +46,13 @@
"error.avatar.mime.forbidden":
"Gambar profil harus berupa berkas JPEG atau PNG",
"error.blueprint.notFound": "Blueprint \"{name}\" tidak dapat dimuat",
"error.blueprint.notFound": "Cetak biru \"{name}\" tidak dapat dimuat",
"error.email.preset.notFound": "Surel \"{name}\" tidak dapat ditemukan",
"error.field.converter.invalid": "Konverter \"{converter}\" tidak valid",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Anda tidak diizinkan mengubah nama berkas \"{filename}\"",
"error.file.duplicate": "Berkas dengan nama \"{filename}\" sudah ada",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "Sandi tidak cocok",
"error.user.password.undefined": "Pengguna tidak memiliki sandi",
"error.user.role.invalid": "Masukkan peran yang valid",
"error.user.undefined": "Pengguna tidak dapat ditemukan",
"error.user.update.permission":
"Anda tidak diizinkan memperbaharui pengguna \"{name}\"",
@@ -265,7 +266,7 @@
"language.direction.ltr": "Kiri ke kanan",
"language.direction.rtl": "Kanan ke kiri",
"language.locale": "String \"PHP locale\"",
"language.locale.warning": "You are using a custom locale set up. Please modify it in the language file in /site/languages",
"language.locale.warning": "Anda menggunakan pengaturan lokal ubah suaian. Ubah di berkas bahasa di /site/languages",
"language.name": "Nama",
"language.updated": "Bahasa sudah diperbaharui",
@@ -412,6 +413,17 @@
"translation.name": "Bahasa Indonesia",
"upload": "Unggah",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Kesalahan",
"upload.progress": "Mengunggah…",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Login Invalido",
"error.access.panel": "Non ti è permesso accedere al pannello",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "Non è stato possibile caricare l'immagine del profilo",
"error.avatar.delete.fail": "Non è stato possibile eliminare l'immagine del profilo",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Convertitore \"{converter}\" non valido",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Non ti è permesso modificare il nome di \"{filename}\"",
"error.file.duplicate": "Un file con il nome \"{filename}\" esiste già",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "Le password non corrispondono",
"error.user.password.undefined": "L'utente non ha una password",
"error.user.role.invalid": "Inserisci un ruolo valido",
"error.user.undefined": "L'utente non \u00e8 stato trovato",
"error.user.update.permission":
"Non ti è permesso aggiornare l'utente \"{name}\"",
@@ -412,6 +413,17 @@
"translation.name": "Italiano",
"upload": "Carica",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Errore",
"upload.progress": "Caricamento...",

View File

@@ -37,6 +37,7 @@
"error.access.login": "로그인할 수 없습니다.",
"error.access.panel": "패널에 접근할 권한이 없습니다.",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "프로필 이미지를 업로드할 수 없습니다.",
"error.avatar.delete.fail": "\ud504\ub85c\ud544 \uc774\ubbf8\uc9c0\ub97c \uc0ad\uc81c\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "컨버터({converter})가 올바르지 않습니다.",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"파일명({filename})을 변경할 권한이 없습니다.",
"error.file.duplicate": "파일명이 같은 파일({filename})이 있습니다.",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "\uc554\ud638\ub97c \ud655\uc778\ud558\uc138\uc694.",
"error.user.password.undefined": "암호가 설정되지 않았습니다.",
"error.user.role.invalid": "올바른 역할을 입력하세요.",
"error.user.undefined": "\uc0ac\uc6a9\uc790\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.",
"error.user.update.permission":
"사용자({name})의 정보를 변경할 권한이 없습니다.",
@@ -412,6 +413,17 @@
"translation.name": "한국어",
"upload": "업로드",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "오류",
"upload.progress": "업로드 중…",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Neteisingas prisijungimo vardas",
"error.access.panel": "Neturite teisės prisijungti prie valdymo pulto",
"error.access.view": "Neturite teisės peržiūrėti šios valdymo pulto dalies",
"error.avatar.create.fail": "Nepavyko įkelti profilio nuotraukos",
"error.avatar.delete.fail": "Nepavyko pašalinti profilio nuotraukos",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Neteisingas konverteris \"{converter}\"",
"error.file.changeName.empty": "Pavadinimas negali būti tuščias",
"error.file.changeName.permission":
"Neturite teisės pakeisti failo pavadinimo \"{filename}\"",
"error.file.duplicate": "Failas su pavadinimu \"{filename}\" jau yra",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "Slaptažodžiai nesutampa",
"error.user.password.undefined": "Vartotojas neturi slaptažodžio",
"error.user.role.invalid": "Įrašykite teisingą rolę",
"error.user.undefined": "Vartotojas nerastas",
"error.user.update.permission":
"Neturite teisės keisti vartotojo \"{name}\"",
@@ -412,6 +413,17 @@
"translation.name": "Lietuvių",
"upload": "Įkelti",
"upload.error.cantMove": "Įkeltas failas negali būti perkeltas",
"upload.error.cantWrite": "Nepavyko įrašyti failo į diską",
"upload.error.default": "Nepavyko įkelti failo",
"upload.error.extension": "Neįmanoma įkelti tokio tipo failo",
"upload.error.formSize": "Įkeltas failas viršija MAX_FILE_SIZE nustatymą, kuris buvo nurodytas formoje",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "Įkeltas failas viršija upload_max_filesize nustatymą faile php.ini",
"upload.error.noFile": "Failas nebuvo įkeltas",
"upload.error.noFiles": "Failai nebuvo įkelti",
"upload.error.partial": "Failas įkeltas tik iš dalies",
"upload.error.tmpDir": "Trūksta laikinojo katalogo",
"upload.errors": "Klaida",
"upload.progress": "Įkėlimas…",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Ugyldig innlogging",
"error.access.panel": "Du har ikke tilgang til panelet",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "Profilbildet kunne ikke lastes opp",
"error.avatar.delete.fail": "Profil bildet kunne ikke bli slette",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Ugyldig omformer \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Du er ikke tillatt å endre navnet til \"{filename}\"",
"error.file.duplicate": "En fil med navnet \"{filename}\" eksisterer allerede",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "Vennligst bekreft passordet",
"error.user.password.undefined": "Brukeren har ikke et passord",
"error.user.role.invalid": "Vennligst skriv inn en gyldig rolle",
"error.user.undefined": "Brukeren kunne ikke bli funnet",
"error.user.update.permission":
"Du har ikke tillatelse til å oppdatere brukeren \"{name}\"",
@@ -412,6 +413,17 @@
"translation.name": "Norsk Bokm\u00e5l",
"upload": "Last opp",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Feil",
"upload.progress": "Laster opp…",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Ongeldige login",
"error.access.panel": "Je hebt geen toegang tot het Panel",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "De avatar kon niet worden geupload",
"error.avatar.delete.fail": "De avatar kan niet worden verwijderd",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Ongeldige converter \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Je hebt geen rechten om de naam te wijzigen van \"{filename}\"",
"error.file.duplicate": "Er bestaat al een bestand met de naam \"{filename}\"",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "De wachtwoorden komen niet overeen",
"error.user.password.undefined": "De gebruiker heeft geen wachtwoord",
"error.user.role.invalid": "Gelieve een geldige rol in te voeren",
"error.user.undefined": "De gebruiker kan niet worden gevonden",
"error.user.update.permission":
"Je hebt geen rechten om gebruiker \"{name}\" te updaten",
@@ -412,6 +413,17 @@
"translation.name": "Nederlands",
"upload": "Upload",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Foutmelding",
"upload.progress": "Uploaden...",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Nieprawidłowy login",
"error.access.panel": "Nie masz uprawnień by dostać się do panelu",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "Nie udało się załadować zdjęcia profilowego",
"error.avatar.delete.fail": "Nie udało się usunąć zdjęcia profilowego",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Nieprawidłowy konwerter \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Nie masz uprawnień, by zmienić nazwę \"{filename}\"",
"error.file.duplicate": "Istnieje już plik o nazwie \"{filename}\"",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "Hasła nie są takie same",
"error.user.password.undefined": "Użytkownik nie ma hasła",
"error.user.role.invalid": "Wprowadź poprawną rolę",
"error.user.undefined": "Nie można znaleźć użytkownika",
"error.user.update.permission":
"Nie masz uprawnień, by zaktualizować użytkownika \"{name}\"",
@@ -412,6 +413,17 @@
"translation.name": "Polski",
"upload": "Prześlij",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Błąd",
"upload.progress": "Przesyłanie…",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Login inválido",
"error.access.panel": "Você não tem permissão para acessar o painel",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "A foto de perfil não pôde ser enviada",
"error.avatar.delete.fail": "A foto do perfil não pôde ser deletada",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Conversor \"{converter}\" inválido",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Você não tem permissão para alterar o nome de \"{filename}\"",
"error.file.duplicate": "Um arquivo com o nome \"{filename}\" já existe",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "As senhas não combinam",
"error.user.password.undefined": "O usuário não possui uma senha",
"error.user.role.invalid": "Digite um papel válido",
"error.user.undefined": "Usu\u00e1rio n\u00e3o encontrado",
"error.user.update.permission":
"Você não tem permissão para atualizar o usuário \"{name}\"",
@@ -412,6 +413,17 @@
"translation.name": "Português (Brasileiro)",
"upload": "Enviar",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Erro",
"upload.progress": "Enviando…",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Login inválido",
"error.access.panel": "Não tem permissões para aceder ao painel",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "A foto de perfil não foi enviada",
"error.avatar.delete.fail": "A foto do perfil não foi deletada",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Conversor \"{converter}\" inválido",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Não tem permissões para alterar o nome de \"{filename}\"",
"error.file.duplicate": "Um arquivo com o nome \"{filename}\" já existe",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "As palavras-passe não combinam",
"error.user.password.undefined": "O utilizador não possui uma palavra-passe",
"error.user.role.invalid": "Digite uma função válida",
"error.user.undefined": "Usu\u00e1rio n\u00e3o encontrado",
"error.user.update.permission":
"Não tem permissões para atualizar o utilizador \"{name}\"",
@@ -412,6 +413,17 @@
"translation.name": "Português (Europeu)",
"upload": "Enviar",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Erro",
"upload.progress": "A enviar…",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Неправильный логин",
"error.access.panel": "У вас нет права доступа к панели",
"error.access.view": "У вас нет прав доступа к этой части панели",
"error.avatar.create.fail": "Не удалось загрузить фотографию профиля",
"error.avatar.delete.fail": "\u0410\u0432\u0430\u0442\u0430\u0440 (\u0444\u043e\u0442\u043e) \u043a \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Неверный конвертер \"{converter}\"",
"error.file.changeName.empty": "Название не может быть пустым",
"error.file.changeName.permission":
"У вас нет права поменять название \"{filename}\"",
"error.file.duplicate": "Файл с названием \"{filename}\" уже есть",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c",
"error.user.password.undefined": "У пользователя нет пароля",
"error.user.role.invalid": "Впишите правильную роль",
"error.user.undefined": "\u0410\u043a\u043a\u0430\u0443\u043d\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d",
"error.user.update.permission":
"У вас нет права обновить пользователя \"{name}\"",
@@ -412,6 +413,17 @@
"translation.name": "Русский (Russian)",
"upload": "Закачать",
"upload.error.cantMove": "Загруженный файл не может быть перемещен",
"upload.error.cantWrite": "Не получилось записать файл на диск",
"upload.error.default": "Не получилось загрузить файл",
"upload.error.extension": "Загрузка файла не удалась из за расширения",
"upload.error.formSize": "Загруженный файл больше чем MAX_FILE_SIZE настройка в форме",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "Загруженный файл больше чем upload_max_filesize настройка в php.ini",
"upload.error.noFile": "Файл не был загружен",
"upload.error.noFiles": "Файлы не были загружены",
"upload.error.partial": "Файл загружен только частично",
"upload.error.tmpDir": "Не хватает временной папки",
"upload.errors": "Ошибка",
"upload.progress": "Закачивается...",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Neplatné prihlásenie",
"error.access.panel": "Nemáte povolenie na prístup do Panel-u",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "Profilový obrázok sa nepodarilo nahrať",
"error.avatar.delete.fail": "Profilový obrázok sa nepodarilo zmazať",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Neplatný converter \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Nemáte povolenie na zmenu názvu pre \"{filename}\"",
"error.file.duplicate": "Súbor s názvom \"{filename}\" už existuje",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "Heslá nie sú rovnaké",
"error.user.password.undefined": "Užívateľ nemá heslo",
"error.user.role.invalid": "Prosím, zadajte platnú rolu",
"error.user.undefined": "Užívateľa sa nepodarilo nájsť",
"error.user.update.permission":
"Nemáte povolenie na aktualizáciu užívateľa \"{name}\"",
@@ -412,6 +413,17 @@
"translation.name": "Slovensky",
"upload": "Nahrať",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Chyba",
"upload.progress": "Nahrávanie...",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Ogiltig inloggning",
"error.access.panel": "Du saknar behörighet att nå panelen",
"error.access.view": "You are not allowed to access this part of the panel",
"error.avatar.create.fail": "Profilbilden kunde inte laddas upp",
"error.avatar.delete.fail": "Profilbilden kunde inte raderas",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Ogiltig omvandlare \"{converter}\"",
"error.file.changeName.empty": "The name must not be empty",
"error.file.changeName.permission":
"Du har inte behörighet att ändra namnet på \"{filename}\"",
"error.file.duplicate": "En fil med namnet \"{filename}\" existerar redan",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "Lösenorden matchar inte",
"error.user.password.undefined": "Användaren har inget lösenord",
"error.user.role.invalid": "Ange en giltig roll",
"error.user.undefined": "Användaren kan inte hittas",
"error.user.update.permission":
"Du har inte behörighet att uppdatera användaren \"{name}\"",
@@ -412,6 +413,17 @@
"translation.name": "Svenska",
"upload": "Ladda upp",
"upload.error.cantMove": "The uploaded file could not be moved",
"upload.error.cantWrite": "Failed to write file to disk",
"upload.error.default": "The file could not be uploaded",
"upload.error.extension": "File upload stopped by extension",
"upload.error.formSize": "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the form",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"upload.error.noFile": "No file was uploaded",
"upload.error.noFiles": "No files were uploaded",
"upload.error.partial": "The uploaded file was only partially uploaded",
"upload.error.tmpDir": "Missing a temporary folder",
"upload.errors": "Fel",
"upload.progress": "Laddar upp...",

View File

@@ -37,6 +37,7 @@
"error.access.login": "Geçersiz giriş",
"error.access.panel": "Panele erişim izniniz yok",
"error.access.view": "Panelin bu bölümüne erişemezsiniz",
"error.avatar.create.fail": "Profil resmi yüklenemedi",
"error.avatar.delete.fail": "Profil resmi silinemedi",
@@ -51,6 +52,7 @@
"error.field.converter.invalid": "Geçersiz dönüştürücü \"{converter}\"",
"error.file.changeName.empty": "İsim boş olmamalıdır",
"error.file.changeName.permission":
"\"{filename}\" adını değiştiremezsiniz",
"error.file.duplicate": "\"{filename}\" isimli bir dosya zaten var",
@@ -169,7 +171,6 @@
"error.user.password.notSame": "L\u00fctfen \u015fifreyi do\u011frulay\u0131n",
"error.user.password.undefined": "Bu kullanıcının şifresi yok",
"error.user.role.invalid": "Lütfen geçerli bir rol girin",
"error.user.undefined": "Kullan\u0131c\u0131 bulunamad\u0131",
"error.user.update.permission":
"\"{name}\" kullanıcısını güncellemenize izin verilmiyor",
@@ -325,7 +326,7 @@
"next": "Sonraki",
"off": "kapalı",
"on": "açık",
"open": "Önizle",
"open": "Önizleme",
"options": "Seçenekler",
"orientation": "Oryantasyon",
@@ -412,6 +413,17 @@
"translation.name": "T\u00fcrk\u00e7e",
"upload": "Yükle",
"upload.error.cantMove": "Yüklenen dosya taşınamadı",
"upload.error.cantWrite": "Dosya diske yazılamadı",
"upload.error.default": "Dosya yüklenemedi",
"upload.error.extension": "Dosya yükleme uzantısı tarafından durduruldu",
"upload.error.formSize": "Yüklenen dosya, formda belirtilen MAX_FILE_SIZE yönergesini aşıyor",
"upload.error.iniPostSize": "The uploaded file exceeds the post_max_size directive in php.ini",
"upload.error.iniSize": "Yüklenen dosya php.ini içindeki upload_max_filesize yönergesini aşıyor",
"upload.error.noFile": "Dosya yüklenmedi",
"upload.error.noFiles": "Dosyalar yüklenmedi",
"upload.error.partial": "Yüklenen dosya sadece kısmen yüklendi",
"upload.error.tmpDir": "Geçici klasör eksik",
"upload.errors": "Hata",
"upload.progress": "Yükleniyor...",

File diff suppressed because one or more lines are too long

View File

@@ -2,18 +2,15 @@
<defs>
<symbol id="icon-account" viewBox="0 0 16 16">
<path d="M11 7a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" />
<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 12.4c-.6-.7-1.4-1.4-3-1.4H7c-1.6 0-2.4.7-3 1.4C2.8 11.3 2 9.8 2 8c0-3.3 2.7-6 6-6s6 2.7 6 6c0 1.8-.8 3.3-2 4.4z"
/>
<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 12.4c-.6-.7-1.4-1.4-3-1.4H7c-1.6 0-2.4.7-3 1.4C2.8 11.3 2 9.8 2 8c0-3.3 2.7-6 6-6s6 2.7 6 6c0 1.8-.8 3.3-2 4.4z" />
</symbol>
<symbol id="icon-add" viewBox="0 0 16 16">
<path d="M9 4H7v3H4v2h3v3h2V9h3V7H9z" />
<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z"
/>
<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z" />
</symbol>
<symbol id="icon-alert" viewBox="0 0 16 16">
<path d="M7 6h2v4H7V6zM9 12a1 1 0 1 1-2 0 1 1 0 0 1 2 0z" />
<path d="M15 16H1a1.001 1.001 0 0 1-.895-1.448l7-14c.34-.678 1.449-.678 1.789 0l7 14A1 1 0 0 1 15 16zM2.618 14h10.764L8 3.236 2.618 14z"
/>
<path d="M15 16H1a1.001 1.001 0 0 1-.895-1.448l7-14c.34-.678 1.449-.678 1.789 0l7 14A1 1 0 0 1 15 16zM2.618 14h10.764L8 3.236 2.618 14z" />
</symbol>
<symbol id="icon-angle-down" viewBox="0 0 16 16">
<path d="M8 11.4L2.6 6 4 4.6l4 4 4-4L13.4 6z" />
@@ -31,30 +28,24 @@
<path d="M5,5v4c0,1.7,1.3,3,3,3s3-1.3,3-3V4.5C11,2,9,0,6.5,0S2,2,2,4.5V10c0,3.3,2.7,6,6,6s6-2.7,6-6V4h-2v6 c0,2.2-1.8,4-4,4s-4-1.8-4-4V4.5C4,3.1,5.1,2,6.5,2S9,3.1,9,4.5V9c0,0.6-0.4,1-1,1S7,9.6,7,9V5H5z" />
</symbol>
<symbol id="icon-bars" viewBox="0 0 16 16">
<path d="M15 7H1c-.6 0-1 .4-1 1s.4 1 1 1h14c.6 0 1-.4 1-1s-.4-1-1-1zM15 1H1c-.6 0-1 .4-1 1s.4 1 1 1h14c.6 0 1-.4 1-1s-.4-1-1-1zM15 13H1c-.6 0-1 .4-1 1s.4 1 1 1h14c.6 0 1-.4 1-1s-.4-1-1-1z"
/>
<path d="M15 7H1c-.6 0-1 .4-1 1s.4 1 1 1h14c.6 0 1-.4 1-1s-.4-1-1-1zM15 1H1c-.6 0-1 .4-1 1s.4 1 1 1h14c.6 0 1-.4 1-1s-.4-1-1-1zM15 13H1c-.6 0-1 .4-1 1s.4 1 1 1h14c.6 0 1-.4 1-1s-.4-1-1-1z" />
</symbol>
<symbol id="icon-bold" viewBox="0 0 16 16">
<path d="M11.561 7.316a3.485 3.485 0 0 0 1.418-3.208C12.781 2.305 11.144.999 9.33.999H2.001v1l1.447.724a1 1 0 0 1 .553.894v8.764a.998.998 0 0 1-.553.894l-1.447.724v1h7.823c2.104 0 3.98-1.547 4.162-3.643a4 4 0 0 0-2.424-4.04zM7 3h1a2 2 0 1 1 0 4H7V3zm2 10H7V9h2a2 2 0 1 1 0 4z"
/>
<path d="M11.561 7.316a3.485 3.485 0 0 0 1.418-3.208C12.781 2.305 11.144.999 9.33.999H2.001v1l1.447.724a1 1 0 0 1 .553.894v8.764a.998.998 0 0 1-.553.894l-1.447.724v1h7.823c2.104 0 3.98-1.547 4.162-3.643a4 4 0 0 0-2.424-4.04zM7 3h1a2 2 0 1 1 0 4H7V3zm2 10H7V9h2a2 2 0 1 1 0 4z" />
</symbol>
<symbol id="icon-bolt" viewBox="0 0 16 16">
<path d="M9.2 0H5.4c-.4 0-.8.3-1 .7l-2 7c-.2.7.3 1.3.9 1.3H7l-1.5 7 7.3-9.4c.5-.6 0-1.6-.8-1.6H9l1.1-3.7C10.3.6 9.8 0 9.2 0z"
/>
<path d="M9.2 0H5.4c-.4 0-.8.3-1 .7l-2 7c-.2.7.3 1.3.9 1.3H7l-1.5 7 7.3-9.4c.5-.6 0-1.6-.8-1.6H9l1.1-3.7C10.3.6 9.8 0 9.2 0z" />
</symbol>
<symbol id="icon-calendar" viewBox="0 0 16 16">
<path d="M15 2h-2V0h-2v2H9V0H7v2H5V0H3v2H1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1zm-1 12H2V5h12v9z"
/>
<path d="M15 2h-2V0h-2v2H9V0H7v2H5V0H3v2H1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1zm-1 12H2V5h12v9z" />
<path d="M4 7h2v2H4V7zM7 7h2v2H7V7zM4 10h2v2H4v-2zM7 10h2v2H7v-2zM10 7h2v2h-2V7zM10 10h2v2h-2v-2z" />
</symbol>
<symbol id="icon-cancel" viewBox="0 0 16 16">
<path d="M10.1 4.5L8 6.6 5.9 4.5 4.5 5.9 6.6 8l-2.1 2.1 1.4 1.4L8 9.4l2.1 2.1 1.4-1.4L9.4 8l2.1-2.1z" />
<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z"
/>
<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z" />
</symbol>
<symbol id="icon-check" viewBox="0 0 16 16">
<path d="M8 0C3.589 0 0 3.589 0 8s3.589 8 8 8 8-3.589 8-8-3.589-8-8-8zm0 14c-3.309 0-6-2.691-6-6s2.691-6 6-6 6 2.691 6 6-2.691 6-6 6z"
/>
<path d="M8 0C3.589 0 0 3.589 0 8s3.589 8 8 8 8-3.589 8-8-3.589-8-8-8zm0 14c-3.309 0-6-2.691-6-6s2.691-6 6-6 6 2.691 6 6-2.691 6-6 6z" />
<path d="M7 11.414L3.586 8 5 6.586l2 2 4-4L12.414 6z" />
</symbol>
<symbol id="icon-clock" viewBox="0 0 16 16">
@@ -62,32 +53,27 @@
<path d="M9 4H7v5h5V7H9z" />
</symbol>
<symbol id="icon-code" viewBox="0 0 16 16">
<path d="M12.7 11.7l-1.4-1.4L13.6 8l-2.3-2.3 1.4-1.4 3 3c.4.4.4 1 0 1.4l-3 3zM3.3 11.7l-3-3c-.4-.4-.4-1 0-1.4l3-3 1.4 1.4L2.4 8l2.3 2.3-1.4 1.4zM6 15c-.1 0-.2 0-.3-.1-.5-.2-.8-.7-.6-1.3l4-12c.2-.5.7-.8 1.3-.6.5.2.8.7.6 1.3l-4 12c-.2.4-.6.7-1 .7z"
/>
<path d="M12.7 11.7l-1.4-1.4L13.6 8l-2.3-2.3 1.4-1.4 3 3c.4.4.4 1 0 1.4l-3 3zM3.3 11.7l-3-3c-.4-.4-.4-1 0-1.4l3-3 1.4 1.4L2.4 8l2.3 2.3-1.4 1.4zM6 15c-.1 0-.2 0-.3-.1-.5-.2-.8-.7-.6-1.3l4-12c.2-.5.7-.8 1.3-.6.5.2.8.7.6 1.3l-4 12c-.2.4-.6.7-1 .7z" />
</symbol>
<symbol id="icon-cog" viewBox="0 0 16 16">
<path d="M13.3 5.2l1.1-2.1L13 1.7l-2.1 1.1c-.3-.2-.7-.3-1.1-.4L9 0H7l-.8 2.3c-.3.1-.7.2-1 .4L3.1 1.6 1.6 3.1l1.1 2.1c-.2.3-.3.7-.4 1L0 7v2l2.3.8c.1.4.3.7.4 1.1L1.6 13 3 14.4l2.1-1.1c.3.2.7.3 1.1.4L7 16h2l.8-2.3c.4-.1.7-.3 1.1-.4l2.1 1.1 1.4-1.4-1.1-2.1c.2-.3.3-.7.4-1.1L16 9V7l-2.3-.8c-.1-.3-.2-.7-.4-1zM8 11c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3z"
/>
<path d="M13.3 5.2l1.1-2.1L13 1.7l-2.1 1.1c-.3-.2-.7-.3-1.1-.4L9 0H7l-.8 2.3c-.3.1-.7.2-1 .4L3.1 1.6 1.6 3.1l1.1 2.1c-.2.3-.3.7-.4 1L0 7v2l2.3.8c.1.4.3.7.4 1.1L1.6 13 3 14.4l2.1-1.1c.3.2.7.3 1.1.4L7 16h2l.8-2.3c.4-.1.7-.3 1.1-.4l2.1 1.1 1.4-1.4-1.1-2.1c.2-.3.3-.7.4-1.1L16 9V7l-2.3-.8c-.1-.3-.2-.7-.4-1zM8 11c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3z" />
</symbol>
<symbol id="icon-collapse" viewBox="0 0 16 16">
<path d="M15.707 1.707A.999.999 0 1 0 14.293.293l-2.5 2.5L9 0v7h7l-2.793-2.793 2.5-2.5zM2.793 11.793l-2.5 2.5a.999.999 0 1 0 1.414 1.414l2.5-2.5L7 16V9H0l2.793 2.793z"
/>
<path d="M15.707 1.707A.999.999 0 1 0 14.293.293l-2.5 2.5L9 0v7h7l-2.793-2.793 2.5-2.5zM2.793 11.793l-2.5 2.5a.999.999 0 1 0 1.414 1.414l2.5-2.5L7 16V9H0l2.793 2.793z" />
</symbol>
<symbol id="icon-copy" viewBox="0 0 16 16">
<path d="M10 4H2c-.6 0-1 .4-1 1v10c0 .6.4 1 1 1h8c.6 0 1-.4 1-1V5c0-.6-.4-1-1-1z" />
<path d="M14 0H4v2h9v11h2V1c0-.6-.4-1-1-1z" />
</symbol>
<symbol id="icon-dashboard" viewBox="0 0 16 16">
<path d="M6 9H1a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1zM6 16H1a1 1 0 0 1-1-1v-3a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1zM15 6h-5a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1zM15 16h-5a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1z"
/>
<path d="M6 9H1a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1zM6 16H1a1 1 0 0 1-1-1v-3a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1zM15 6h-5a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1zM15 16h-5a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1z" />
</symbol>
<symbol id="icon-document" viewBox="0 0 16 16">
<path d="M14 0H2c-.6 0-1 .4-1 1v14c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V1c0-.6-.4-1-1-1zm-1 14H3V2h10v12z" />
<path d="M4 3h4v4H4V3zM9 4h3v1H9V4zM9 6h3v1H9V6zM4 8h8v1H4V8zM4 10h8v1H4v-1zM4 12h5v1H4v-1z" />
</symbol>
<symbol id="icon-dots" viewBox="0 0 16 16">
<path d="M10 8a2 2 0 1 1-3.999.001A2 2 0 0 1 10 8zM4 8a2 2 0 1 1-3.999.001A2 2 0 0 1 4 8zM16 8a2 2 0 1 1-3.999.001A2 2 0 0 1 16 8z"
/>
<path d="M10 8a2 2 0 1 1-3.999.001A2 2 0 0 1 10 8zM4 8a2 2 0 1 1-3.999.001A2 2 0 0 1 4 8zM16 8a2 2 0 1 1-3.999.001A2 2 0 0 1 16 8z" />
</symbol>
<symbol id="icon-download" viewBox="0 0 16 16">
<path d="M8 12c.3 0 .5-.1.7-.3L14.4 6 13 4.6l-4 4V0H7v8.6l-4-4L1.6 6l5.7 5.7c.2.2.4.3.7.3z" />
@@ -98,19 +84,16 @@
<path d="M8 5h4v2H8V5zM8 9h4v2H8V9z" />
</symbol>
<symbol id="icon-edit" viewBox="0 0 16 16">
<path d="M8.1 3.5L.3 11.3c-.2.2-.3.4-.3.7v3c0 .6.4 1 1 1h3c.3 0 .5-.1.7-.3l7.8-7.8-4.4-4.4zM15.7 3.3l-3-3c-.4-.4-1-.4-1.4 0L9.5 2.1l4.4 4.4 1.8-1.8c.4-.4.4-1 0-1.4z"
/>
<path d="M8.1 3.5L.3 11.3c-.2.2-.3.4-.3.7v3c0 .6.4 1 1 1h3c.3 0 .5-.1.7-.3l7.8-7.8-4.4-4.4zM15.7 3.3l-3-3c-.4-.4-1-.4-1.4 0L9.5 2.1l4.4 4.4 1.8-1.8c.4-.4.4-1 0-1.4z" />
</symbol>
<symbol id="icon-email" viewBox="0 0 16 16">
<path d="M15 1H1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm-1 12H2V6.723l5.504 3.145a.998.998 0 0 0 .992 0L14 6.723V13zm0-8.58L8 7.849 2 4.42V3h12v1.42z"
/>
<path d="M15 1H1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm-1 12H2V6.723l5.504 3.145a.998.998 0 0 0 .992 0L14 6.723V13zm0-8.58L8 7.849 2 4.42V3h12v1.42z" />
</symbol>
<symbol id="icon-expand" viewBox="0 0 16 16">
<path d="M7.4 10L6 8.6l-2.7 2.7L0 8v8h8l-3.3-3.3zM11.3 3.3L8.6 6 10 7.4l2.7-2.7L16 8V0H8z" />
</symbol>
<symbol id="icon-facebook" viewBox="0 0 16 16">
<path d="M15.3 0H.7C.3 0 0 .3 0 .7v14.7c0 .3.3.6.7.6H8v-5H6V8h2V6c0-2.1 1.2-3 3-3h2v3h-1c-.6 0-1 .4-1 1v1h2.6l-.6 3h-2v5h4.3c.4 0 .7-.3.7-.7V.7c0-.4-.3-.7-.7-.7z"
/>
<path d="M15.3 0H.7C.3 0 0 .3 0 .7v14.7c0 .3.3.6.7.6H8v-5H6V8h2V6c0-2.1 1.2-3 3-3h2v3h-1c-.6 0-1 .4-1 1v1h2.6l-.6 3h-2v5h4.3c.4 0 .7-.3.7-.7V.7c0-.4-.3-.7-.7-.7z" />
</symbol>
<symbol id="icon-file-word" viewBox="0 0 32 32">
<g>
@@ -122,93 +105,65 @@
</g>
</symbol>
<symbol id="icon-file-audio" viewBox="0 0 32 32">
<g>
<path d="M28,32H0V0h28V32z M2,30h24V2H2V30z" />
<polygon points="12,20.5 10,20.5 10,8 21,8 21,18.5 19,18.5 19,10 12,10" />
<path d="M8.5,24C6.6,24,5,22.4,5,20.5S6.6,17,8.5,17s3.5,1.6,3.5,3.5S10.4,24,8.5,24z M8.5,19C7.7,19,7,19.7,7,20.5
S7.7,22,8.5,22s1.5-0.7,1.5-1.5S9.3,19,8.5,19z" />
<path d="M17.5,22c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5s3.5,1.6,3.5,3.5S19.4,22,17.5,22z M17.5,17
c-0.8,0-1.5,0.7-1.5,1.5s0.7,1.5,1.5,1.5s1.5-0.7,1.5-1.5S18.3,17,17.5,17z" />
</g>
<path d="M8.5,24C6.6,24,5,22.4,5,20.5S6.6,17,8.5,17s3.5,1.6,3.5,3.5S10.4,24,8.5,24z M8.5,19C7.7,19,7,19.7,7,20.5 S7.7,22,8.5,22s1.5-0.7,1.5-1.5S9.3,19,8.5,19z" />
<path d="M17.5,22c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5s3.5,1.6,3.5,3.5S19.4,22,17.5,22z M17.5,17 c-0.8,0-1.5,0.7-1.5,1.5s0.7,1.5,1.5,1.5s1.5-0.7,1.5-1.5S18.3,17,17.5,17z" />
</symbol>
<symbol id="icon-file-image" viewBox="0 0 32 32">
<g>
<polygon points="13.1,23.4 8.1,19.3 5,22.4 3.6,21 7.9,16.7 12.9,20.6 19,13.4 24.4,20.2 22.8,21.4 19,16.6 " />
<path d="M28,32H0V0h28V32z M2,30h24V2H2V30z" />
<path d="M12.5,14C10.6,14,9,12.4,9,10.5S10.6,7,12.5,7S16,8.6,16,10.5S14.4,14,12.5,14z M12.5,9
C11.7,9,11,9.7,11,10.5s0.7,1.5,1.5,1.5s1.5-0.7,1.5-1.5S13.3,9,12.5,9z" />
</g>
<path d="M12.5,14C10.6,14,9,12.4,9,10.5S10.6,7,12.5,7S16,8.6,16,10.5S14.4,14,12.5,14z M12.5,9 C11.7,9,11,9.7,11,10.5s0.7,1.5,1.5,1.5s1.5-0.7,1.5-1.5S13.3,9,12.5,9z" />
</symbol>
<symbol id="icon-file-text" viewBox="0 0 32 32">
<g>
<path d="M32,32H0V0h32V32z M2,30h28V2H2V30z" />
<polygon points="23.1,25.4 16.3,8 15.7,8 8.9,25.4 7.1,24.6 14.3,6 17.7,6 24.9,24.6 " />
<rect x="11.1" y="16" width="9.8" height="2" />
<rect x="5" y="24" width="6" height="2" />
<rect x="21" y="24" width="6" height="2" />
</g>
</symbol>
<symbol id="icon-file-video" viewBox="0 0 32 32">
<g>
<path d="M32,32H0V0h32V32z M2,30h28V2H2V30z" />
<path d="M11,18.8V5.2L21.9,12L11,18.8z M13,8.8v6.4l5.1-3.2L13,8.8z" />
<rect x="24" y="23" width="4" height="2" />
<rect x="4" y="23" width="12" height="2" />
<path d="M18,28c-2.2,0-4-1.8-4-4s1.8-4,4-4c2.2,0,4,1.8,4,4S20.2,28,18,28z M18,22c-1.1,0-2,0.9-2,2s0.9,2,2,2
c1.1,0,2-0.9,2-2S19.1,22,18,22z" />
</g>
<path d="M18,28c-2.2,0-4-1.8-4-4s1.8-4,4-4c2.2,0,4,1.8,4,4S20.2,28,18,28z M18,22c-1.1,0-2,0.9-2,2s0.9,2,2,2 c1.1,0,2-0.9,2-2S19.1,22,18,22z" />
</symbol>
<symbol id="icon-file-code" viewBox="0 0 32 32">
<g>
<path d="M28,32H0V0h28V32z M2,30h24V2H2V30z" />
<polygon points="9,20.4 4.6,16 9,11.6 10.4,13 7.4,16 10.4,19 " />
<polygon points="19,20.4 17.6,19 20.6,16 17.6,13 19,11.6 23.4,16 " />
<rect x="13" y="8.7" transform="matrix(0.9488 0.3159 -0.3159 0.9488 5.7719 -3.6035)" width="2"
height="14.6" />
</g>
<rect x="13" y="8.7" transform="matrix(0.9488 0.3159 -0.3159 0.9488 5.7719 -3.6035)" width="2" height="14.6" />
</symbol>
<symbol id="icon-file-zip" viewBox="0 0 32 32">
<g>
<polygon points="28,32 0,32 0,0 15,0 15,8 13,8 13,2 2,2 2,30 26,30 26,2 18,2 18,0 28,0 " />
<path d="M18,19h-8v-9h8V19z M12,17h4v-5h-4V17z" />
<rect x="12" y="25" width="4" height="2" />
<rect x="12" y="21" width="4" height="2" />
</g>
</symbol>
<symbol id="icon-file-document" viewBox="0 0 32 32">
<g>
<path d="M28,32H0V0h28V32z M2,30h24V2H2V30z" />
<rect x="16" y="7" width="6" height="2" />
<rect x="16" y="12" width="6" height="2" />
<rect x="6" y="17" width="16" height="2" />
<rect x="6" y="22" width="16" height="2" />
<path d="M14,14H6V7h8V14z M8,12h4V9H8V12z" />
</g>
</symbol>
<symbol id="icon-file-spreadsheet" viewBox="0 0 32 32">
<g>
<path d="M28,32H0V0h28V32z M2,30h24V2H2V30z" />
<rect x="13" y="10" width="2" height="12" />
<rect x="8" y="17" width="2" height="5" />
<rect x="18" y="14" width="2" height="8" />
</g>
</symbol>
<symbol id="icon-file" viewBox="0 0 32 32">
<g>
<path d="M28,32H0V0h28V32z M2,30h24V2H2V30z" />
<path d="M19.5,22h-11C6.6,22,5,20.4,5,18.5c0-1.8,1.3-3.3,3.1-3.5c0.5-2.8,2.9-5,5.9-5s5.5,2.2,5.9,5
c1.7,0.2,3.1,1.7,3.1,3.5C23,20.4,21.4,22,19.5,22z M8.5,17C7.7,17,7,17.7,7,18.5S7.7,20,8.5,20h11c0.8,0,1.5-0.7,1.5-1.5
S20.3,17,19.5,17c-0.1,0-0.2,0-0.3,0L18,17.3l0-1.3c0-2.2-1.8-3.9-4-3.9c-2.2,0-4,1.8-4,3.9l0,0.1v1.2L8.8,17C8.7,17,8.6,17,8.5,17
z" />
</g>
<path d="M19.5,22h-11C6.6,22,5,20.4,5,18.5c0-1.8,1.3-3.3,3.1-3.5c0.5-2.8,2.9-5,5.9-5s5.5,2.2,5.9,5 c1.7,0.2,3.1,1.7,3.1,3.5C23,20.4,21.4,22,19.5,22z M8.5,17C7.7,17,7,17.7,7,18.5S7.7,20,8.5,20h11c0.8,0,1.5-0.7,1.5-1.5 S20.3,17,19.5,17c-0.1,0-0.2,0-0.3,0L18,17.3l0-1.3c0-2.2-1.8-3.9-4-3.9c-2.2,0-4,1.8-4,3.9l0,0.1v1.2L8.8,17C8.7,17,8.6,17,8.5,17 z" />
</symbol>
<symbol id="icon-funnel" viewBox="0 0 16 16">
<path d="M9 15H7a1 1 0 0 1 0-2h2a1 1 0 0 1 0 2zM11 11H5a1 1 0 0 1 0-2h6a1 1 0 0 1 0 2zM13 7H3a1 1 0 0 1 0-2h10a1 1 0 0 1 0 2zM15 3H1a1 1 0 0 1 0-2h14a1 1 0 0 1 0 2z"
/>
<path d="M9 15H7a1 1 0 0 1 0-2h2a1 1 0 0 1 0 2zM11 11H5a1 1 0 0 1 0-2h6a1 1 0 0 1 0 2zM13 7H3a1 1 0 0 1 0-2h10a1 1 0 0 1 0 2zM15 3H1a1 1 0 0 1 0-2h14a1 1 0 0 1 0 2z" />
</symbol>
<symbol id="icon-globe" viewBox="0 0 16 16">
<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5.9 7H12c-.1-1.5-.4-2.9-.8-4.1 1.4.9 2.4 2.4 2.7 4.1zM8 14c-.6 0-1.8-1.9-2-5h4c-.2 3.1-1.4 5-2 5zM6 7c.2-3.1 1.3-5 2-5s1.8 1.9 2 5H6zM4.9 2.9C4.4 4.1 4.1 5.5 4 7H2.1c.3-1.7 1.3-3.2 2.8-4.1zM2.1 9H4c.1 1.5.4 2.9.8 4.1-1.4-.9-2.4-2.4-2.7-4.1zm9 4.1c.5-1.2.7-2.6.8-4.1h1.9c-.2 1.7-1.2 3.2-2.7 4.1z"
/>
<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5.9 7H12c-.1-1.5-.4-2.9-.8-4.1 1.4.9 2.4 2.4 2.7 4.1zM8 14c-.6 0-1.8-1.9-2-5h4c-.2 3.1-1.4 5-2 5zM6 7c.2-3.1 1.3-5 2-5s1.8 1.9 2 5H6zM4.9 2.9C4.4 4.1 4.1 5.5 4 7H2.1c.3-1.7 1.3-3.2 2.8-4.1zM2.1 9H4c.1 1.5.4 2.9.8 4.1-1.4-.9-2.4-2.4-2.7-4.1zm9 4.1c.5-1.2.7-2.6.8-4.1h1.9c-.2 1.7-1.2 3.2-2.7 4.1z" />
</symbol>
<symbol id="icon-headline" viewBox="0 0 16 16">
<path d="M0 0v6h1l2-3h3v10l-3 2v1h10v-1l-3-2V3h3l2 3h1V0z" />
@@ -222,46 +177,36 @@
<path d="M9 7V1H7v6H4l4 4 4-4z" />
</symbol>
<symbol id="icon-instagram" viewBox="0 0 16 16">
<path d="M13.105 3.892a.96.96 0 1 1-1.92 0 .96.96 0 0 1 1.92 0zM8 12c-2.206 0-4-1.794-4-4s1.794-4 4-4 4 1.794 4 4-1.794 4-4 4zm0-6c-1.103 0-2 .897-2 2s.897 2 2 2 2-.897 2-2-.897-2-2-2z"
/>
<path d="M12 16H4c-2.056 0-4-1.944-4-4V4c0-2.056 1.944-4 4-4h8c2.056 0 4 1.944 4 4v8c0 2.056-1.944 4-4 4zM4 2c-.935 0-2 1.065-2 2v8c0 .953 1.047 2 2 2h8c.935 0 2-1.065 2-2V4c0-.935-1.065-2-2-2H4z"
/>
<path d="M13.105 3.892a.96.96 0 1 1-1.92 0 .96.96 0 0 1 1.92 0zM8 12c-2.206 0-4-1.794-4-4s1.794-4 4-4 4 1.794 4 4-1.794 4-4 4zm0-6c-1.103 0-2 .897-2 2s.897 2 2 2 2-.897 2-2-.897-2-2-2z" />
<path d="M12 16H4c-2.056 0-4-1.944-4-4V4c0-2.056 1.944-4 4-4h8c2.056 0 4 1.944 4 4v8c0 2.056-1.944 4-4 4zM4 2c-.935 0-2 1.065-2 2v8c0 .953 1.047 2 2 2h8c.935 0 2-1.065 2-2V4c0-.935-1.065-2-2-2H4z" />
</symbol>
<symbol id="icon-italic" viewBox="0 0 16 16">
<path d="M12 2V0H6v2h1.271a.5.5 0 0 1 .495.571l-1.51 10.571a1 1 0 0 1-.99.859H4v2h6v-2H8.729a.5.5 0 0 1-.495-.571l1.51-10.571a1 1 0 0 1 .99-.859H12z"
/>
<path d="M12 2V0H6v2h1.271a.5.5 0 0 1 .495.571l-1.51 10.571a1 1 0 0 1-.99.859H4v2h6v-2H8.729a.5.5 0 0 1-.495-.571l1.51-10.571a1 1 0 0 1 .99-.859H12z" />
</symbol>
<symbol id="icon-key" viewBox="0 0 16 16">
<path d="M12.7 0L6.5 6.3C6 6.1 5.5 6 5 6c-2.8 0-5 2.2-5 5s2.2 5 5 5 5-2.2 5-5c0-.5-.1-1.1-.3-1.6L11 8V6h2V4h2l1-1V0h-3.3zM4.5 12c-.8 0-1.5-.7-1.5-1.5S3.7 9 4.5 9 6 9.7 6 10.5 5.3 12 4.5 12z"
/>
<path d="M12.7 0L6.5 6.3C6 6.1 5.5 6 5 6c-2.8 0-5 2.2-5 5s2.2 5 5 5 5-2.2 5-5c0-.5-.1-1.1-.3-1.6L11 8V6h2V4h2l1-1V0h-3.3zM4.5 12c-.8 0-1.5-.7-1.5-1.5S3.7 9 4.5 9 6 9.7 6 10.5 5.3 12 4.5 12z" />
</symbol>
<symbol id="icon-list-bullet" viewBox="0 0 16 16">
<path d="M4 2a2 2 0 1 1-3.999.001A2 2 0 0 1 4 2zM4 8a2 2 0 1 1-3.999.001A2 2 0 0 1 4 8zM4 14a2 2 0 1 1-3.999.001A2 2 0 0 1 4 14zM6 1h10v2H6V1zM6 7h10v2H6V7zM6 13h10v2H6v-2z"
/>
<path d="M4 2a2 2 0 1 1-3.999.001A2 2 0 0 1 4 2zM4 8a2 2 0 1 1-3.999.001A2 2 0 0 1 4 8zM4 14a2 2 0 1 1-3.999.001A2 2 0 0 1 4 14zM6 1h10v2H6V1zM6 7h10v2H6V7zM6 13h10v2H6v-2z" />
</symbol>
<symbol id="icon-list-numbers" viewBox="0 0 16 16">
<path d="M5 1h11v2H5V1zM5 7h11v2H5V7zM5 13h11v2H5v-2zM.368 4v-.549l.597-.049c.097-.007.111-.035.111-.139V.839c0-.083-.021-.125-.09-.146L.382.568l.076-.569h1.667v3.264c0 .111.007.132.111.139l.569.049V4H.367zM.047 10v-.63l.907-.886c.683-.663.975-.934.975-1.32 0-.251-.122-.433-.48-.433-.373 0-.528.122-.528.602l-.92-.081C.008 6.176.827 6 1.537 6c1.049 0 1.421.447 1.421 1.083s-.44 1.056-.934 1.53l-.765.731h.995c.068 0 .095-.014.108-.081l.095-.534h.717v1.272H.047zM2.344 13.682c.566.087.879.426.879 1.026 0 .879-.659 1.292-1.612 1.292-.673 0-1.272-.239-1.612-.613l.533-.586c.253.246.533.439.999.439.373 0 .693-.133.693-.599 0-.406-.253-.573-.666-.573a2.66 2.66 0 0 0-.493.047v-.666l.327-.04c.479-.06.739-.293.739-.719 0-.253-.113-.46-.486-.46-.359 0-.532.12-.532.593l-.912-.08c0-1.052.793-1.232 1.492-1.232 1.026 0 1.419.393 1.419 1.106 0 .56-.346.912-.766 1.039v.027z"
/>
<path d="M5 1h11v2H5V1zM5 7h11v2H5V7zM5 13h11v2H5v-2zM.368 4v-.549l.597-.049c.097-.007.111-.035.111-.139V.839c0-.083-.021-.125-.09-.146L.382.568l.076-.569h1.667v3.264c0 .111.007.132.111.139l.569.049V4H.367zM.047 10v-.63l.907-.886c.683-.663.975-.934.975-1.32 0-.251-.122-.433-.48-.433-.373 0-.528.122-.528.602l-.92-.081C.008 6.176.827 6 1.537 6c1.049 0 1.421.447 1.421 1.083s-.44 1.056-.934 1.53l-.765.731h.995c.068 0 .095-.014.108-.081l.095-.534h.717v1.272H.047zM2.344 13.682c.566.087.879.426.879 1.026 0 .879-.659 1.292-1.612 1.292-.673 0-1.272-.239-1.612-.613l.533-.586c.253.246.533.439.999.439.373 0 .693-.133.693-.599 0-.406-.253-.573-.666-.573a2.66 2.66 0 0 0-.493.047v-.666l.327-.04c.479-.06.739-.293.739-.719 0-.253-.113-.46-.486-.46-.359 0-.532.12-.532.593l-.912-.08c0-1.052.793-1.232 1.492-1.232 1.026 0 1.419.393 1.419 1.106 0 .56-.346.912-.766 1.039v.027z" />
</symbol>
<symbol id="icon-loader" viewBox="0 0 16 16">
<path d="M8 16a7.928 7.928 0 0 1-3.428-.77l.857-1.807A6.006 6.006 0 0 0 14 8c0-3.309-2.691-6-6-6a6.006 6.006 0 0 0-5.422 8.572l-1.806.859A7.929 7.929 0 0 1 0 8c0-4.411 3.589-8 8-8s8 3.589 8 8-3.589 8-8 8z"
/>
<path d="M8 16a7.928 7.928 0 0 1-3.428-.77l.857-1.807A6.006 6.006 0 0 0 14 8c0-3.309-2.691-6-6-6a6.006 6.006 0 0 0-5.422 8.572l-1.806.859A7.929 7.929 0 0 1 0 8c0-4.411 3.589-8 8-8s8 3.589 8 8-3.589 8-8 8z" />
</symbol>
<symbol id="icon-lock" viewBox="0 0 16 16">
<path d="M8 0C5.8 0 4 1.8 4 4v1H2c-.6 0-1 .4-1 1v9c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1h-2V4c0-2.2-1.8-4-4-4zm1 11.7V13H7v-1.3c-.6-.3-1-1-1-1.7 0-1.1.9-2 2-2s2 .9 2 2c0 .7-.4 1.4-1 1.7zM10 5H6V4c0-1.1.9-2 2-2s2 .9 2 2v1z"
/>
<path d="M8 0C5.8 0 4 1.8 4 4v1H2c-.6 0-1 .4-1 1v9c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1h-2V4c0-2.2-1.8-4-4-4zm1 11.7V13H7v-1.3c-.6-.3-1-1-1-1.7 0-1.1.9-2 2-2s2 .9 2 2c0 .7-.4 1.4-1 1.7zM10 5H6V4c0-1.1.9-2 2-2s2 .9 2 2v1z" />
</symbol>
<symbol id="icon-unlock" viewBox="0 0 16 16">
<path d="M1,15c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1V6c0-0.6-0.4-1-1-1h-2H6V4c0-1.1,0.9-2,2-2c0.6,0,1.1,0.2,1.5,0.7 l0.7,0.7l1.5-1.3L11,1.3C10.2,0.5,9.1,0,8,0C5.8,0,4,1.8,4,4v1H2C1.4,5,1,5.4,1,6V15z M8,8c1.1,0,2,0.9,2,2c0,0.7-0.4,1.4-1,1.7V13 H7v-1.3c-0.6-0.3-1-1-1-1.7C6,8.9,6.9,8,8,8z"></path>
<path d="M1,15c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1V6c0-0.6-0.4-1-1-1h-2H6V4c0-1.1,0.9-2,2-2c0.6,0,1.1,0.2,1.5,0.7 l0.7,0.7l1.5-1.3L11,1.3C10.2,0.5,9.1,0,8,0C5.8,0,4,1.8,4,4v1H2C1.4,5,1,5.4,1,6V15z M8,8c1.1,0,2,0.9,2,2c0,0.7-0.4,1.4-1,1.7V13 H7v-1.3c-0.6-0.3-1-1-1-1.7C6,8.9,6.9,8,8,8z" />
</symbol>
<symbol id="icon-logout" viewBox="0 0 16 16">
<path d="M3.4 2H8v2h2V1c0-.6-.4-1-1-1H1C.4 0 0 .4 0 1v9c0 .3.1.5.3.7l5 5c.2.2.4.3.7.3.1 0 .3 0 .4-.1.4-.1.6-.5.6-.9V6c0-.3-.1-.5-.3-.7L3.4 2zM5 12.6l-3-3V3.4l3 3v6.2z"
/>
<path d="M3.4 2H8v2h2V1c0-.6-.4-1-1-1H1C.4 0 0 .4 0 1v9c0 .3.1.5.3.7l5 5c.2.2.4.3.7.3.1 0 .3 0 .4-.1.4-.1.6-.5.6-.9V6c0-.3-.1-.5-.3-.7L3.4 2zM5 12.6l-3-3V3.4l3 3v6.2z" />
<path d="M15.7 7.3L12 3.6 10.6 5l2 2H8v2h4.6l-2 2 1.4 1.4 3.7-3.7c.4-.4.4-1 0-1.4z" />
</symbol>
<symbol id="icon-markdown" viewBox="0 0 16 16">
<path d="M14.85 3H1.15C.52 3 0 3.52 0 4.15v7.69C0 12.48.52 13 1.15 13h13.69c.64 0 1.15-.52 1.15-1.15v-7.7C16 3.52 15.48 3 14.85 3zM9 11H7V8L5.5 9.92 4 8v3H2V5h2l1.5 2L7 5h2v6zm2.99.5L9.5 8H11V5h2v3h1.5l-2.51 3.5z"
/>
<path d="M14.85 3H1.15C.52 3 0 3.52 0 4.15v7.69C0 12.48.52 13 1.15 13h13.69c.64 0 1.15-.52 1.15-1.15v-7.7C16 3.52 15.48 3 14.85 3zM9 11H7V8L5.5 9.92 4 8v3H2V5h2l1.5 2L7 5h2v6zm2.99.5L9.5 8H11V5h2v3h1.5l-2.51 3.5z" />
</symbol>
<symbol id="icon-menu" viewBox="0 0 16 16">
<path d="M0 0h16v3H0V0zM0 6h16v3H0V6zM0 12h16v3H0v-3z" />
@@ -275,45 +220,36 @@
<path d="M4 3h4v4H4V3zM9 4h3v1H9V4zM9 6h3v1H9V6zM4 8h8v1H4V8zM4 10h8v1H4v-1zM4 12h5v1H4v-1z" />
</symbol>
<symbol id="icon-phone" viewBox="0 0 16 16">
<path d="M15.285 12.305l-2.578-2.594a1 1 0 0 0-1.416-.002L9 12 4 7l2.294-2.294a1 1 0 0 0 .001-1.414L3.715.708a1 1 0 0 0-1.415 0L.004 3.003 0 3c0 7.18 5.82 13 13 13l2.283-2.283a1 1 0 0 0 .002-1.412z"
/>
<path d="M15.285 12.305l-2.578-2.594a1 1 0 0 0-1.416-.002L9 12 4 7l2.294-2.294a1 1 0 0 0 .001-1.414L3.715.708a1 1 0 0 0-1.415 0L.004 3.003 0 3c0 7.18 5.82 13 13 13l2.283-2.283a1 1 0 0 0 .002-1.412z" />
</symbol>
<symbol id="icon-pinterest" viewBox="0 0 16 16">
<path d="M8 0C3.6 0 0 3.6 0 8c0 3.4 2.1 6.3 5.1 7.4-.1-.6-.1-1.6 0-2.3.1-.6.9-4 .9-4s-.2-.4-.2-1.1c0-1.1.7-2 1.5-2 .7 0 1 .5 1 1.1 0 .7-.4 1.7-.7 2.7-.2.8.4 1.4 1.2 1.4 1.4 0 2.5-1.5 2.5-3.7 0-1.9-1.4-3.3-3.3-3.3-2.3 0-3.6 1.7-3.6 3.5 0 .7.3 1.4.6 1.8v.4c-.1.3-.2.8-.2.9s-.1.2-.3.1c-1-.5-1.6-1.9-1.6-3.1C2.9 5.3 4.7 3 8.2 3c2.8 0 4.9 2 4.9 4.6 0 2.8-1.7 5-4.2 5-.8 0-1.6-.4-1.8-.9 0 0-.4 1.5-.5 1.9-.2.7-.7 1.6-1 2.1.8.2 1.6.3 2.4.3 4.4 0 8-3.6 8-8s-3.6-8-8-8z"
/>
<path d="M8 0C3.6 0 0 3.6 0 8c0 3.4 2.1 6.3 5.1 7.4-.1-.6-.1-1.6 0-2.3.1-.6.9-4 .9-4s-.2-.4-.2-1.1c0-1.1.7-2 1.5-2 .7 0 1 .5 1 1.1 0 .7-.4 1.7-.7 2.7-.2.8.4 1.4 1.2 1.4 1.4 0 2.5-1.5 2.5-3.7 0-1.9-1.4-3.3-3.3-3.3-2.3 0-3.6 1.7-3.6 3.5 0 .7.3 1.4.6 1.8v.4c-.1.3-.2.8-.2.9s-.1.2-.3.1c-1-.5-1.6-1.9-1.6-3.1C2.9 5.3 4.7 3 8.2 3c2.8 0 4.9 2 4.9 4.6 0 2.8-1.7 5-4.2 5-.8 0-1.6-.4-1.8-.9 0 0-.4 1.5-.5 1.9-.2.7-.7 1.6-1 2.1.8.2 1.6.3 2.4.3 4.4 0 8-3.6 8-8s-3.6-8-8-8z" />
</symbol>
<symbol id="icon-preview" viewBox="0 0 16 16">
<path d="M8 14c4.707 0 7.744-5.284 7.871-5.508a1 1 0 0 0 .001-.98C15.746 7.287 12.731 2 8 2 3.245 2 .251 7.289.126 7.514a.998.998 0 0 0 .002.975C.254 8.713 3.269 14 8 14zM8 4c2.839 0 5.036 2.835 5.818 4-.784 1.166-2.981 4-5.818 4-2.841 0-5.038-2.838-5.819-4.001C2.958 6.835 5.146 4 8 4z"
/>
<path d="M8 14c4.707 0 7.744-5.284 7.871-5.508a1 1 0 0 0 .001-.98C15.746 7.287 12.731 2 8 2 3.245 2 .251 7.289.126 7.514a.998.998 0 0 0 .002.975C.254 8.713 3.269 14 8 14zM8 4c2.839 0 5.036 2.835 5.818 4-.784 1.166-2.981 4-5.818 4-2.841 0-5.038-2.838-5.819-4.001C2.958 6.835 5.146 4 8 4z" />
<path d="M10 8a2 2 0 1 1-3.999.001A2 2 0 0 1 10 8z" />
</symbol>
<symbol id="icon-quote" viewBox="0 0 16 16">
<path d="M3.024 4.561C1.839 6.042 1.668 7.535 2.016 8.58c1.316-1.045 3.145-.826 4.258.214 1.125 1.051 1.222 2.898.504 4.094a3.293 3.293 0 0 1-2.847 1.613C1.238 14.501 0 12.126 0 9.462c0-1.73.441-3.28 1.323-4.649S3.536 2.34 5.317 1.5l.479.932c-1.075.454-1.999 1.163-2.772 2.129zm8.768 0c-1.185 1.481-1.356 2.974-1.008 4.019.588-.454 1.226-.68 1.915-.68C14.511 7.9 16 9.107 16 11.201c0 1.926-1.478 3.301-3.301 3.301-2.693 0-3.931-2.375-3.931-5.039 0-1.73.441-3.28 1.323-4.649s2.213-2.473 3.994-3.313l.479.932c-1.075.454-1.999 1.163-2.772 2.129z"
/>
<path d="M3.024 4.561C1.839 6.042 1.668 7.535 2.016 8.58c1.316-1.045 3.145-.826 4.258.214 1.125 1.051 1.222 2.898.504 4.094a3.293 3.293 0 0 1-2.847 1.613C1.238 14.501 0 12.126 0 9.462c0-1.73.441-3.28 1.323-4.649S3.536 2.34 5.317 1.5l.479.932c-1.075.454-1.999 1.163-2.772 2.129zm8.768 0c-1.185 1.481-1.356 2.974-1.008 4.019.588-.454 1.226-.68 1.915-.68C14.511 7.9 16 9.107 16 11.201c0 1.926-1.478 3.301-3.301 3.301-2.693 0-3.931-2.375-3.931-5.039 0-1.73.441-3.28 1.323-4.649s2.213-2.473 3.994-3.313l.479.932c-1.075.454-1.999 1.163-2.772 2.129z" />
</symbol>
<symbol id="icon-refresh" viewBox="0 0 16 16">
<path d="M4.5 4.5c1.9-1.9 5.1-1.9 7 0 .7.7 1.2 1.7 1.4 2.7l2-.3c-.2-1.5-.9-2.8-1.9-3.8C10.3.4 5.9.4 3.1 3.1L.9.9.2 7.3l6.4-.7-2.1-2.1zM15.8 8.7l-6.4.7 2.1 2.1c-1.9 1.9-5.1 1.9-7 0-.7-.7-1.2-1.7-1.4-2.7l-2 .3c.2 1.5.9 2.8 1.9 3.8 1.4 1.4 3.1 2 4.9 2s3.6-.7 4.9-2l2.2 2.2.8-6.4z"
/>
<path d="M4.5 4.5c1.9-1.9 5.1-1.9 7 0 .7.7 1.2 1.7 1.4 2.7l2-.3c-.2-1.5-.9-2.8-1.9-3.8C10.3.4 5.9.4 3.1 3.1L.9.9.2 7.3l6.4-.7-2.1-2.1zM15.8 8.7l-6.4.7 2.1 2.1c-1.9 1.9-5.1 1.9-7 0-.7-.7-1.2-1.7-1.4-2.7l-2 .3c.2 1.5.9 2.8 1.9 3.8 1.4 1.4 3.1 2 4.9 2s3.6-.7 4.9-2l2.2 2.2.8-6.4z" />
</symbol>
<symbol id="icon-search" viewBox="0 0 16 16">
<path d="M7 14c-3.86 0-7-3.14-7-7s3.14-7 7-7 7 3.14 7 7-3.14 7-7 7zM7 2C4.243 2 2 4.243 2 7s2.243 5 5 5 5-2.243 5-5-2.243-5-5-5zM15.707 14.293L13.314 11.9a8.019 8.019 0 0 1-1.414 1.414l2.393 2.393a.997.997 0 0 0 1.414 0 .999.999 0 0 0 0-1.414z"
/>
<path d="M7 14c-3.86 0-7-3.14-7-7s3.14-7 7-7 7 3.14 7 7-3.14 7-7 7zM7 2C4.243 2 2 4.243 2 7s2.243 5 5 5 5-2.243 5-5-2.243-5-5-5zM15.707 14.293L13.314 11.9a8.019 8.019 0 0 1-1.414 1.414l2.393 2.393a.997.997 0 0 0 1.414 0 .999.999 0 0 0 0-1.414z" />
</symbol>
<symbol id="icon-settings" viewBox="0 0 16 16">
<path d="M5 5V1c0-.6-.4-1-1-1S3 .4 3 1v4c0 .6.4 1 1 1s1-.4 1-1zM1 11c0 1.3.9 2.4 2 2.8V15c0 .6.4 1 1 1s1-.4 1-1v-1-.2c1.2-.4 2-1.5 2-2.8 0-1.7-1.3-3-3-3s-3 1.3-3 3zM11 11v4c0 .6.4 1 1 1s1-.4 1-1v-4c0-.6-.4-1-1-1s-1 .4-1 1zM9 5c0 1.7 1.3 3 3 3s3-1.3 3-3c0-1.3-.9-2.4-2-2.8V1c0-.6-.4-1-1-1s-1 .4-1 1v1.2C9.9 2.6 9 3.7 9 5z"
/>
<path d="M5 5V1c0-.6-.4-1-1-1S3 .4 3 1v4c0 .6.4 1 1 1s1-.4 1-1zM1 11c0 1.3.9 2.4 2 2.8V15c0 .6.4 1 1 1s1-.4 1-1v-1-.2c1.2-.4 2-1.5 2-2.8 0-1.7-1.3-3-3-3s-3 1.3-3 3zM11 11v4c0 .6.4 1 1 1s1-.4 1-1v-4c0-.6-.4-1-1-1s-1 .4-1 1zM9 5c0 1.7 1.3 3 3 3s3-1.3 3-3c0-1.3-.9-2.4-2-2.8V1c0-.6-.4-1-1-1s-1 .4-1 1v1.2C9.9 2.6 9 3.7 9 5z" />
</symbol>
<symbol id="icon-smile" viewBox="0 0 16 16">
<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z" />
<path d="M7 6a1 1 0 1 1-2 0 1 1 0 0 1 2 0zM11 6a1 1 0 1 1-2 0 1 1 0 0 1 2 0zM8 12c1.7 0 3-1.3 3-3H5c0 1.7 1.3 3 3 3z"
/>
<path d="M7 6a1 1 0 1 1-2 0 1 1 0 0 1 2 0zM11 6a1 1 0 1 1-2 0 1 1 0 0 1 2 0zM8 12c1.7 0 3-1.3 3-3H5c0 1.7 1.3 3 3 3z" />
</symbol>
<symbol id="icon-sort" viewBox="0 0 10 16">
<path d="M0 0h3v3H0V0zM6 0h3v3H6V0zM0 6h3v3H0V6zM6 6h3v3H6V6zM0 12h3v3H0v-3zM6 12h3v3H6v-3z" />
</symbol>
<symbol id="icon-tag" viewBox="0 0 16 16">
<path d="M15.7 8.3l-8-8C7.5.1 7.3 0 7 0H1C.4 0 0 .4 0 1v6c0 .3.1.5.3.7l8 8c.2.2.4.3.7.3s.5-.1.7-.3l6-6c.4-.4.4-1 0-1.4zM4 5c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1z"
/>
<path d="M15.7 8.3l-8-8C7.5.1 7.3 0 7 0H1C.4 0 0 .4 0 1v6c0 .3.1.5.3.7l8 8c.2.2.4.3.7.3s.5-.1.7-.3l6-6c.4-.4.4-1 0-1.4zM4 5c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1z" />
</symbol>
<symbol id="icon-text" viewBox="0 0 16 16">
<path d="M0 1h16v2H0V1zM0 5h10v2H0V5zM0 9h16v2H0V9zM0 13h10v2H0v-2z" />
@@ -324,49 +260,40 @@
</symbol>
<symbol id="icon-toggle-off" viewBox="0 0 16 16">
<path d="M8 8a2 2 0 1 1-3.999.001A2 2 0 0 1 8 8z" />
<path d="M10 2H6C2.7 2 0 4.7 0 8s2.7 6 6 6h4c3.3 0 6-2.7 6-6s-2.7-6-6-6zm0 10H6c-2.2 0-4-1.8-4-4s1.8-4 4-4h4c2.2 0 4 1.8 4 4s-1.8 4-4 4z"
/>
<path d="M10 2H6C2.7 2 0 4.7 0 8s2.7 6 6 6h4c3.3 0 6-2.7 6-6s-2.7-6-6-6zm0 10H6c-2.2 0-4-1.8-4-4s1.8-4 4-4h4c2.2 0 4 1.8 4 4s-1.8 4-4 4z" />
</symbol>
<symbol id="icon-toggle-on" viewBox="0 0 16 16">
<path d="M8,8 C8,6.3 9.3,5 11,5 C12.7,5 14,6.3 14,8 C14,9.7 12.7,11 11,11 C9.3,11 8,9.7 8,8 M0,8 C0,10.8 2.2,13 5,13 L11,13 C13.8,13 16,10.8 16,8 C16,5.2 13.8,3 11,3 L5,3 C2.2,3 0,5.2 0,8" />
</symbol>
<symbol id="icon-trash" viewBox="0 0 16 16">
<path d="M5 7h2v6H5V7zM9 7h2v6H9V7z" />
<path d="M12 1c0-.6-.4-1-1-1H5c-.6 0-1 .4-1 1v2H0v2h1v10c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V5h1V3h-4V1zM6 2h4v1H6V2zm7 3v9H3V5h10z"
/>
<path d="M12 1c0-.6-.4-1-1-1H5c-.6 0-1 .4-1 1v2H0v2h1v10c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V5h1V3h-4V1zM6 2h4v1H6V2zm7 3v9H3V5h10z" />
</symbol>
<symbol id="icon-twitter" viewBox="0 0 16 16">
<path d="M16 3c-.6.3-1.2.4-1.9.5.7-.4 1.2-1 1.4-1.8-.6.4-1.3.6-2.1.8-.6-.6-1.5-1-2.4-1-1.7 0-3.2 1.5-3.2 3.3 0 .3 0 .5.1.7-2.7-.1-5.2-1.4-6.8-3.4-.3.5-.4 1-.4 1.7 0 1.1.6 2.1 1.5 2.7-.5 0-1-.2-1.5-.4C.7 7.7 1.8 9 3.3 9.3c-.3.1-.6.1-.9.1-.2 0-.4 0-.6-.1.4 1.3 1.6 2.3 3.1 2.3-1.1.9-2.5 1.4-4.1 1.4H0c1.5.9 3.2 1.5 5 1.5 6 0 9.3-5 9.3-9.3v-.4C15 4.3 15.6 3.7 16 3z"
/>
<path d="M16 3c-.6.3-1.2.4-1.9.5.7-.4 1.2-1 1.4-1.8-.6.4-1.3.6-2.1.8-.6-.6-1.5-1-2.4-1-1.7 0-3.2 1.5-3.2 3.3 0 .3 0 .5.1.7-2.7-.1-5.2-1.4-6.8-3.4-.3.5-.4 1-.4 1.7 0 1.1.6 2.1 1.5 2.7-.5 0-1-.2-1.5-.4C.7 7.7 1.8 9 3.3 9.3c-.3.1-.6.1-.9.1-.2 0-.4 0-.6-.1.4 1.3 1.6 2.3 3.1 2.3-1.1.9-2.5 1.4-4.1 1.4H0c1.5.9 3.2 1.5 5 1.5 6 0 9.3-5 9.3-9.3v-.4C15 4.3 15.6 3.7 16 3z" />
</symbol>
<symbol id="icon-undo" viewBox="0 0 16 16">
<path d="M2.502 12.333a6.996 6.996 0 0 1-1.405-3.168l1.973-.331a4.982 4.982 0 0 0 1.003 2.26l-1.571 1.239zM6.834 14.903a7.015 7.015 0 0 1-2.976-1.259l1.186-1.611c.624.459 1.358.77 2.122.898l-.332 1.972zM9.165 14.903l-.33-1.973a4.99 4.99 0 0 0 2.209-.964l1.219 1.586a6.997 6.997 0 0 1-3.098 1.351zM8 1c-1.873 0-3.65.759-4.948 2.052L.9.9.2 7.3l6.4-.7-2.135-2.135A5.023 5.023 0 0 1 8 3c2.757 0 5 2.243 5 5 0 1.06-.327 2.072-.947 2.928l1.621 1.173A6.96 6.96 0 0 0 15 8c0-3.86-3.141-7-7-7z"
/>
<path d="M2.502 12.333a6.996 6.996 0 0 1-1.405-3.168l1.973-.331a4.982 4.982 0 0 0 1.003 2.26l-1.571 1.239zM6.834 14.903a7.015 7.015 0 0 1-2.976-1.259l1.186-1.611c.624.459 1.358.77 2.122.898l-.332 1.972zM9.165 14.903l-.33-1.973a4.99 4.99 0 0 0 2.209-.964l1.219 1.586a6.997 6.997 0 0 1-3.098 1.351zM8 1c-1.873 0-3.65.759-4.948 2.052L.9.9.2 7.3l6.4-.7-2.135-2.135A5.023 5.023 0 0 1 8 3c2.757 0 5 2.243 5 5 0 1.06-.327 2.072-.947 2.928l1.621 1.173A6.96 6.96 0 0 0 15 8c0-3.86-3.141-7-7-7z" />
</symbol>
<symbol id="icon-upload" viewBox="0 0 16 16">
<path d="M7 3.4V12h2V3.4l4 4L14.4 6 8.7.3c-.4-.4-1-.4-1.4 0L1.6 6 3 7.4l4-4z" />
<path d="M14 14H2v-3H0v4c0 .6.4 1 1 1h14c.6 0 1-.4 1-1v-4h-2v3z" />
</symbol>
<symbol id="icon-url" viewBox="0 0 16 16">
<path d="M11 0C9.7 0 8.4.5 7.5 1.5L6.3 2.6c-.4.4-.4 1 0 1.4s1 .4 1.4 0l1.2-1.2c1.1-1.1 3.1-1.1 4.2 0 .6.6.9 1.4.9 2.2s-.3 1.6-.9 2.1L12 8.3c-.4.4-.4 1 0 1.4.2.2.5.3.7.3s.5-.1.7-.3l1.2-1.2C15.5 7.6 16 6.3 16 5s-.5-2.6-1.5-3.5C13.6.5 12.3 0 11 0zM8.3 12l-1.2 1.2c-1.1 1.1-3.1 1.1-4.2 0-.6-.6-.9-1.4-.9-2.2s.3-1.6.9-2.1L4 7.7c.4-.4.4-1 0-1.4s-1-.4-1.4 0L1.5 7.5C.5 8.4 0 9.7 0 11s.5 2.6 1.5 3.5c.9 1 2.2 1.5 3.5 1.5s2.6-.5 3.5-1.5l1.2-1.2c.4-.4.4-1 0-1.4s-1-.3-1.4.1z"
/>
<path d="M11 0C9.7 0 8.4.5 7.5 1.5L6.3 2.6c-.4.4-.4 1 0 1.4s1 .4 1.4 0l1.2-1.2c1.1-1.1 3.1-1.1 4.2 0 .6.6.9 1.4.9 2.2s-.3 1.6-.9 2.1L12 8.3c-.4.4-.4 1 0 1.4.2.2.5.3.7.3s.5-.1.7-.3l1.2-1.2C15.5 7.6 16 6.3 16 5s-.5-2.6-1.5-3.5C13.6.5 12.3 0 11 0zM8.3 12l-1.2 1.2c-1.1 1.1-3.1 1.1-4.2 0-.6-.6-.9-1.4-.9-2.2s.3-1.6.9-2.1L4 7.7c.4-.4.4-1 0-1.4s-1-.4-1.4 0L1.5 7.5C.5 8.4 0 9.7 0 11s.5 2.6 1.5 3.5c.9 1 2.2 1.5 3.5 1.5s2.6-.5 3.5-1.5l1.2-1.2c.4-.4.4-1 0-1.4s-1-.3-1.4.1z" />
<path d="M9.4 5.2L5.2 9.4c-.4.4-.4 1 0 1.4.2.2.5.3.7.3s.5-.1.7-.3l4.2-4.2c.4-.4.4-1 0-1.4s-1-.4-1.4 0z" />
</symbol>
<symbol id="icon-user" viewBox="0 0 16 16">
<path d="M8 0C5.794 0 4 1.794 4 4v1c0 2.206 1.794 4 4 4s4-1.794 4-4V4c0-2.206-1.794-4-4-4zM12.036 9.426C10.969 10.4 9.555 11 8 11s-2.969-.6-4.036-1.574C2.203 10 1 11.311 1 13v3h14v-3c0-1.689-1.203-3-2.964-3.574z"
/>
<path d="M8 0C5.794 0 4 1.794 4 4v1c0 2.206 1.794 4 4 4s4-1.794 4-4V4c0-2.206-1.794-4-4-4zM12.036 9.426C10.969 10.4 9.555 11 8 11s-2.969-.6-4.036-1.574C2.203 10 1 11.311 1 13v3h14v-3c0-1.689-1.203-3-2.964-3.574z" />
</symbol>
<symbol id="icon-users" viewBox="0 0 16 16">
<path d="M10.2 11.4l-2.7-2C8.4 8.7 9 7.7 9 6.5v-.8C9 3.8 7.6 2.1 5.7 2 3.7 1.9 2 3.5 2 5.5v1c0 1.2.6 2.2 1.5 2.9L.8 11.5c-.5.4-.8 1-.8 1.6V15c0 .6.4 1 1 1h9c.6 0 1-.4 1-1v-2c0-.6-.3-1.2-.8-1.6zM15.1 6.4l-1.8-1.2c.4-.4.7-1 .7-1.7v-.9c0-1.2-.9-2.4-2.1-2.6S9.7.5 9.2 1.4c1.1 1 1.8 2.4 1.8 4v1c0 .9-.2 1.8-.6 2.5 0 0 1.2.9 1.2 1H15c.6 0 1-.4 1-1v-.8c0-.7-.3-1.3-.9-1.7z"
/>
<path d="M10.2 11.4l-2.7-2C8.4 8.7 9 7.7 9 6.5v-.8C9 3.8 7.6 2.1 5.7 2 3.7 1.9 2 3.5 2 5.5v1c0 1.2.6 2.2 1.5 2.9L.8 11.5c-.5.4-.8 1-.8 1.6V15c0 .6.4 1 1 1h9c.6 0 1-.4 1-1v-2c0-.6-.3-1.2-.8-1.6zM15.1 6.4l-1.8-1.2c.4-.4.7-1 .7-1.7v-.9c0-1.2-.9-2.4-2.1-2.6S9.7.5 9.2 1.4c1.1 1 1.8 2.4 1.8 4v1c0 .9-.2 1.8-.6 2.5 0 0 1.2.9 1.2 1H15c.6 0 1-.4 1-1v-.8c0-.7-.3-1.3-.9-1.7z" />
</symbol>
<symbol id="icon-video" viewBox="0 0 16 16">
<path d="M11 9V7c0-.6-.4-1-1-1H1c-.6 0-1 .4-1 1v8c0 .6.4 1 1 1h9c.6 0 1-.4 1-1v-2l5 2V7l-5 2zM5 2.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0zM10 3a2 2 0 1 1-3.999.001A2 2 0 0 1 10 3z"
/>
<path d="M11 9V7c0-.6-.4-1-1-1H1c-.6 0-1 .4-1 1v8c0 .6.4 1 1 1h9c.6 0 1-.4 1-1v-2l5 2V7l-5 2zM5 2.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0zM10 3a2 2 0 1 1-3.999.001A2 2 0 0 1 10 3z" />
</symbol>
<symbol id="icon-wand" viewBox="0 0 16 16">
<path d="M8.046 4.985l2.97 2.97-7.99 7.99-2.97-2.97 7.99-7.99zM12.995 1.591l1.414 1.414-2.404 2.404-1.414-1.414 2.404-2.404zM13 7h3v2h-3V7zM12.243 10.834l2.121 2.121-1.414 1.414-2.121-2.121 1.414-1.414zM7 0h2v3H7V0zM3.05 1.631l2.121 2.121-1.414 1.414-2.121-2.121L3.05 1.631z"
/>
<path d="M8.046 4.985l2.97 2.97-7.99 7.99-2.97-2.97 7.99-7.99zM12.995 1.591l1.414 1.414-2.404 2.404-1.414-1.414 2.404-2.404zM13 7h3v2h-3V7zM12.243 10.834l2.121 2.121-1.414 1.414-2.121-2.121 1.414-1.414zM7 0h2v3H7V0zM3.05 1.631l2.121 2.121-1.414 1.414-2.121-2.121L3.05 1.631z" />
</symbol>
<symbol id="icon-template" viewBox="0 0 16 16">
<path d="M15 1h-3v2h2v11H2V3h2V1H1c-.6 0-1 .4-1 1v13c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1z" />
@@ -393,19 +320,21 @@
<path d="M10,3c-3.2,0-6,2.5-6,7c1.1-1.7,2.4-3,6-3v3l6-5l-6-5V3z" />
</symbol>
<symbol id="icon-remove" viewBox="0 0 16 16">
<rect data-color="color-2" x="4" y="7" width="8" height="2"></rect> <path d="M8,0C3.6,0,0,3.6,0,8s3.6,8,8,8s8-3.6,8-8S12.4,0,8,0z M8,14c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6 S11.3,14,8,14z"></path>
<rect x="4" y="7" width="8" height="2" />
<path d="M8,0C3.6,0,0,3.6,0,8s3.6,8,8,8s8-3.6,8-8S12.4,0,8,0z M8,14c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6 S11.3,14,8,14z" />
</symbol>
<symbol id="icon-cart" viewBox="0 0 16 16">
<path d="M15,3H4.5L4,0.8C3.9,0.3,3.5,0,3,0H0v2h2.2L4,10.2C4.1,10.7,4.5,11,5,11h8c0.4,0,0.8-0.3,0.9-0.7l2-6 C16.1,3.8,15.8,3,15,3z"></path>
<circle data-color="color-2" cx="5" cy="14" r="2"></circle>
<circle data-color="color-2" cx="13" cy="14" r="2"></circle>
<path d="M15,3H4.5L4,0.8C3.9,0.3,3.5,0,3,0H0v2h2.2L4,10.2C4.1,10.7,4.5,11,5,11h8c0.4,0,0.8-0.3,0.9-0.7l2-6 C16.1,3.8,15.8,3,15,3z" />
<circle cx="5" cy="14" r="2" />
<circle cx="13" cy="14" r="2" />
</symbol>
<symbol id="icon-key" viewBox="0 0 16 16">
<path d="M12.7,0L6.5,6.3C6,6.1,5.5,6,5,6c-2.8,0-5,2.2-5,5s2.2,5,5,5s5-2.2,5-5c0-0.5-0.1-1.1-0.3-1.6L11,8V6h2V4h2 l1-1V0H12.7z M4.5,12C3.7,12,3,11.3,3,10.5S3.7,9,4.5,9S6,9.7,6,10.5S5.3,12,4.5,12z"></path>
<path d="M12.7,0L6.5,6.3C6,6.1,5.5,6,5,6c-2.8,0-5,2.2-5,5s2.2,5,5,5s5-2.2,5-5c0-0.5-0.1-1.1-0.3-1.6L11,8V6h2V4h2 l1-1V0H12.7z M4.5,12C3.7,12,3,11.3,3,10.5S3.7,9,4.5,9S6,9.7,6,10.5S5.3,12,4.5,12z"
/>
</symbol>
<symbol id="icon-copy" viewBox="0 0 16 16">
<path d="M10,4H2C1.4,4,1,4.4,1,5v10c0,0.6,0.4,1,1,1h8c0.6,0,1-0.4,1-1V5C11,4.4,10.6,4,10,4z"></path>
<path d="M14,0H4v2h9v11h2V1C15,0.4,14.6,0,14,0z"></path>
<path d="M10,4H2C1.4,4,1,4.4,1,5v10c0,0.6,0.4,1,1,1h8c0.6,0,1-0.4,1-1V5C11,4.4,10.6,4,10,4z" />
<path d="M14,0H4v2h9v11h2V1C15,0.4,14.6,0,14,0z" />
</symbol>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 26 KiB

File diff suppressed because one or more lines are too long

View File

@@ -4,6 +4,7 @@ window.panel.plugins = {
components: {},
created: [],
fields: {},
icons: {},
sections: {},
routes: [],
use: [],
@@ -21,6 +22,11 @@ window.panel.plugin = function (plugin, parts) {
window.panel.plugins["fields"][`k-${name}-field`] = options;
});
// Icons
resolve(parts, "icons", function (name, options) {
window.panel.plugins["icons"][name] = options;
});
// Sections
resolve(parts, "sections", function (name, options) {
window.panel.plugins["sections"][`k-${name}-section`] = options;

View File

@@ -4,14 +4,13 @@ namespace Kirby\Api;
use Closure;
use Exception;
use Throwable;
use Kirby\Exception\NotFoundException;
use Kirby\Http\Router;
use Kirby\Http\Response;
use Kirby\Http\Router;
use Kirby\Toolkit\F;
use Kirby\Toolkit\Properties;
use Kirby\Toolkit\Str;
use Throwable;
/**
* The API class is a generic container
@@ -169,12 +168,41 @@ class Api
$auth = $this->route->attributes()['auth'] ?? true;
if ($auth !== false) {
$this->authenticate();
$user = $this->authenticate();
// set PHP locales based on *user* language
// so that e.g. strftime() gets formatted correctly
if (is_a($user, 'Kirby\Cms\User') === true) {
$locale = $language = $user->language();
// if it's not already a full locale, "fake" one
// and assume that the country equals the language
if (Str::contains($locale, '_') !== true) {
$locale .= '_' . strtoupper($locale);
}
// provide some variants as fallbacks to be
// compatible with as many systems as possible
$locales = [
$locale,
$locale . '.UTF-8',
$locale . '.UTF8',
$locale . '.ISO8859-1',
$language,
setlocale(LC_ALL, 0) // fall back to the previously defined locale
];
// set the locales that are relevant for string formatting
// *don't* set LC_CTYPE to avoid breaking other parts of the system
setlocale(LC_MONETARY, $locales);
setlocale(LC_NUMERIC, $locales);
setlocale(LC_TIME, $locales);
}
}
$output = $this->route->action()->call($this, ...$this->route->arguments());
if (is_object($output) === true) {
if (is_object($output) === true && is_a($output, 'Kirby\\Http\\Response') !== true) {
return $this->resolve($output)->toResponse();
}
@@ -186,7 +214,7 @@ class Api
*
* @param string $name
* @param array|null $collection
* @return Kirby\Api\Collection
* @return \Kirby\Api\Collection
*
* @throws NotFoundException If no collection for `$name` exists
*/
@@ -263,7 +291,7 @@ class Api
*
* @param string $name
* @param mixed $object
* @return Kirby\Api\Model
* @return \Kirby\Api\Model
*
* @throws NotFoundException If no model for `$name` exists
*/
@@ -375,7 +403,7 @@ class Api
* API model or collection representation
*
* @param mixed $object
* @return Kirby\Api\Model|Kirby\Api\Collection
* @return \Kirby\Api\Model|\Kirby\Api\Collection
*
* @throws NotFoundException If `$object` cannot be resolved
*/
@@ -540,50 +568,15 @@ class Api
try {
$result = $this->call($path, $method, $requestData);
} catch (Throwable $e) {
if (is_a($e, 'Kirby\Exception\Exception') === true) {
$result = [
'status' => 'error',
'route' => ($this->route)? $this->route->pattern() : null
] + $e->toArray();
} else {
// remove the document root from the file path
$file = $e->getFile();
if (empty($_SERVER['DOCUMENT_ROOT']) === false) {
$file = ltrim(Str::after($file, $_SERVER['DOCUMENT_ROOT']), '/');
}
$result = [
'status' => 'error',
'exception' => get_class($e),
'message' => $e->getMessage(),
'file' => $file,
'line' => $e->getLine(),
'code' => empty($e->getCode()) === false ? $e->getCode() : 500,
'route' => $this->route ? $this->route->pattern() : null
];
}
$result = $this->responseForException($e);
}
if ($result === null) {
$result = [
'status' => 'error',
'message' => 'not found',
'code' => 404,
];
}
if ($result === true) {
$result = [
'status' => 'ok',
];
}
if ($result === false) {
$result = [
'status' => 'error',
'message' => 'bad request',
'code' => 400,
];
$result = $this->responseFor404();
} elseif ($result === false) {
$result = $this->responseFor400();
} elseif ($result === true) {
$result = $this->responseFor200();
}
if (is_array($result) === false) {
@@ -593,17 +586,6 @@ class Api
// pretty print json data
$pretty = (bool)($requestData['query']['pretty'] ?? false) === true;
// remove critical info from the result set if
// debug mode is switched off
if ($this->debug !== true) {
unset(
$result['file'],
$result['exception'],
$result['line'],
$result['route']
);
}
if (($result['status'] ?? 'ok') === 'error') {
$code = $result['code'] ?? 400;
@@ -618,6 +600,95 @@ class Api
return Response::json($result, 200, $pretty);
}
/**
* Returns a 200 - ok
* response array.
*
* @return array
*/
public function responseFor200(): array
{
return [
'status' => 'ok',
'message' => 'ok',
'code' => 200
];
}
/**
* Returns a 400 - bad request
* response array.
*
* @return array
*/
public function responseFor400(): array
{
return [
'status' => 'error',
'message' => 'bad request',
'code' => 400,
];
}
/**
* Returns a 404 - not found
* response array.
*
* @return array
*/
public function responseFor404(): array
{
return [
'status' => 'error',
'message' => 'not found',
'code' => 404,
];
}
/**
* Creates the response array for
* an exception. Kirby exceptions will
* have more information
*
* @param Exception $e
* @return array
*/
public function responseForException($e): array
{
// prepare the result array for all exception types
$result = [
'status' => 'error',
'message' => $e->getMessage(),
'code' => empty($e->getCode()) === true ? 500 : $e->getCode(),
'exception' => get_class($e),
'key' => null,
'file' => F::relativepath($e->getFile(), $_SERVER['DOCUMENT_ROOT'] ?? null),
'line' => $e->getLine(),
'details' => [],
'route' => $this->route ? $this->route->pattern() : null
];
// extend the information for Kirby Exceptions
if (is_a($e, 'Kirby\Exception\Exception') === true) {
$result['key'] = $e->getKey();
$result['details'] = $e->getDetails();
$result['code'] = $e->getHttpCode();
}
// remove critical info from the result set if
// debug mode is switched off
if ($this->debug !== true) {
unset(
$result['file'],
$result['exception'],
$result['line'],
$result['route']
);
}
return $result;
}
/**
* Upload helper method
*
@@ -635,8 +706,26 @@ class Api
$errors = [];
$files = $this->requestFiles();
// get error messages from translation
$errorMessages = [
UPLOAD_ERR_INI_SIZE => t('upload.error.iniSize'),
UPLOAD_ERR_FORM_SIZE => t('upload.error.formSize'),
UPLOAD_ERR_PARTIAL => t('upload.error.partial'),
UPLOAD_ERR_NO_FILE => t('upload.error.noFile'),
UPLOAD_ERR_NO_TMP_DIR => t('upload.error.tmpDir'),
UPLOAD_ERR_CANT_WRITE => t('upload.error.cantWrite'),
UPLOAD_ERR_EXTENSION => t('upload.error.extension')
];
if (empty($files) === true) {
throw new Exception('No uploaded files');
$postMaxSize = Str::toBytes(ini_get('post_max_size'));
$uploadMaxFileSize = Str::toBytes(ini_get('upload_max_filesize'));
if ($postMaxSize < $uploadMaxFileSize) {
throw new Exception(t('upload.error.iniPostSize'));
} else {
throw new Exception(t('upload.error.noFiles'));
}
}
foreach ($files as $upload) {
@@ -648,7 +737,8 @@ class Api
try {
if ($upload['error'] !== 0) {
throw new Exception('Upload error');
$errorMessage = $errorMessages[$upload['error']] ?? t('upload.error.default');
throw new Exception($errorMessage);
}
// get the extension of the uploaded file
@@ -669,7 +759,7 @@ class Api
// move the file to a location including the extension,
// for better mime detection
if (move_uploaded_file($upload['tmp_name'], $source) === false) {
throw new Exception('The uploaded file could not be moved');
throw new Exception(t('upload.error.cantMove'));
}
$data = $callback($source, $filename);

View File

@@ -15,7 +15,6 @@ use APCUIterator;
*/
class ApcuCache extends Cache
{
/**
* Determines if an item exists in the cache
*
@@ -59,7 +58,7 @@ class ApcuCache extends Cache
* needs to return a Value object or null if not found
*
* @param string $key
* @return Kirby\Cache\Value|null
* @return \Kirby\Cache\Value|null
*/
public function retrieve(string $key)
{

View File

@@ -16,7 +16,6 @@ namespace Kirby\Cache;
*/
abstract class Cache
{
/**
* Stores all options for the driver
* @var array
@@ -71,7 +70,7 @@ abstract class Cache
* this needs to be defined by the driver
*
* @param string $key
* @return Kirby\Cache\Value|null
* @return \Kirby\Cache\Value|null
*/
abstract public function retrieve(string $key);
@@ -96,7 +95,7 @@ abstract class Cache
$value = $this->retrieve($key);
// check for a valid cache value
if (!is_a($value, Value::class)) {
if (!is_a($value, 'Kirby\Cache\Value')) {
return $default;
}
@@ -141,7 +140,7 @@ abstract class Cache
$value = $this->retrieve($key);
// check for a valid Value object
if (!is_a($value, Value::class)) {
if (!is_a($value, 'Kirby\Cache\Value')) {
return false;
}
@@ -182,7 +181,7 @@ abstract class Cache
$value = $this->retrieve($key);
// check for a valid Value object
if (!is_a($value, Value::class)) {
if (!is_a($value, 'Kirby\Cache\Value')) {
return false;
}

View File

@@ -16,7 +16,6 @@ use Kirby\Toolkit\F;
*/
class FileCache extends Cache
{
/**
* Full root including prefix
* @var string
@@ -93,7 +92,7 @@ class FileCache extends Cache
* needs to return a Value object or null if not found
*
* @param string $key
* @return Kirby\Cache\Value|null
* @return \Kirby\Cache\Value|null
*/
public function retrieve(string $key)
{

View File

@@ -13,7 +13,6 @@ namespace Kirby\Cache;
*/
class MemCached extends Cache
{
/**
* store for the memache connection
* @var Memcached
@@ -65,7 +64,7 @@ class MemCached extends Cache
* needs to return a Value object or null if not found
*
* @param string $key
* @return Kirby\Cache\Value|null
* @return \Kirby\Cache\Value|null
*/
public function retrieve(string $key)
{

View File

@@ -13,7 +13,6 @@ namespace Kirby\Cache;
*/
class MemoryCache extends Cache
{
/**
* Cache data
* @var array
@@ -45,7 +44,7 @@ class MemoryCache extends Cache
* needs to return a Value object or null if not found
*
* @param string $key
* @return Kirby\Cache\Value|null
* @return \Kirby\Cache\Value|null
*/
public function retrieve(string $key)
{

View File

@@ -13,7 +13,6 @@ namespace Kirby\Cache;
*/
class NullCache extends Cache
{
/**
* Writes an item to the cache for a given number of minutes and
* returns whether the operation was successful
@@ -38,7 +37,7 @@ class NullCache extends Cache
* needs to return a Value object or null if not found
*
* @param string $key
* @return Kirby\Cache\Value|null
* @return \Kirby\Cache\Value|null
*/
public function retrieve(string $key)
{

View File

@@ -17,7 +17,6 @@ use Throwable;
*/
class Value
{
/**
* Cached value
* @var mixed

View File

@@ -92,7 +92,7 @@ class Api extends BaseApi
*
* @param string $path Path to file's parent model
* @param string $filename Filename
* @return Kirby\Cms\File|null
* @return \Kirby\Cms\File|null
*/
public function file(string $path = null, string $filename)
{
@@ -114,7 +114,7 @@ class Api extends BaseApi
* Returns the model's object for the given path
*
* @param string $path Path to parent model
* @return Kirby\Cms\Model|null
* @return \Kirby\Cms\Model|null
*/
public function parent(string $path)
{
@@ -166,7 +166,7 @@ class Api extends BaseApi
/**
* Returns the Kirby instance
*
* @return Kirby\Cms\App
* @return \Kirby\Cms\App
*/
public function kirby()
{
@@ -187,7 +187,7 @@ class Api extends BaseApi
* Returns the page object for the given id
*
* @param string $id Page's id
* @return Kirby\Cms\Page|null
* @return \Kirby\Cms\Page|null
*/
public function page(string $id)
{
@@ -214,7 +214,7 @@ class Api extends BaseApi
}
/**
* @param Kirby\Cms\App $kirby
* @param \Kirby\Cms\App $kirby
*/
protected function setKirby(App $kirby)
{
@@ -225,7 +225,7 @@ class Api extends BaseApi
/**
* Returns the site object
*
* @return Kirby\Cms\Site
* @return \Kirby\Cms\Site
*/
public function site()
{
@@ -238,7 +238,7 @@ class Api extends BaseApi
* id is passed
*
* @param string $id User's id
* @return Kirby\Cms\User|null
* @return \Kirby\Cms\User|null
*/
public function user(string $id = null)
{
@@ -263,7 +263,7 @@ class Api extends BaseApi
/**
* Returns the users collection
*
* @return Kirby\Cms\Users
* @return \Kirby\Cms\Users
*/
public function users()
{

View File

@@ -6,8 +6,8 @@ use Kirby\Data\Data;
use Kirby\Email\PHPMailer as Emailer;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Exception\NotFoundException;
use Kirby\Http\Router;
use Kirby\Http\Request;
use Kirby\Http\Router;
use Kirby\Http\Server;
use Kirby\Http\Visitor;
use Kirby\Session\AutoSession;
@@ -15,8 +15,8 @@ use Kirby\Text\KirbyTag;
use Kirby\Toolkit\A;
use Kirby\Toolkit\Config;
use Kirby\Toolkit\Controller;
use Kirby\Toolkit\F;
use Kirby\Toolkit\Dir;
use Kirby\Toolkit\F;
use Kirby\Toolkit\Properties;
/**
@@ -132,7 +132,7 @@ class App
*
* @return array
*/
public function __debuginfo(): array
public function __debugInfo(): array
{
return [
'languages' => $this->languages(),
@@ -149,7 +149,7 @@ class App
* Returns the Api instance
*
* @internal
* @return Kirby\Cms\Api
* @return \Kirby\Cms\Api
*/
public function api()
{
@@ -181,7 +181,7 @@ class App
*
* @internal
* @param string $name Hook name
* @param mixed $args Arguments to pass to the hooks
* @param mixed ...$args Arguments to pass to the hooks
* @return mixed Resulting value as modified by the hooks
*/
public function apply(string $name, ...$args)
@@ -294,7 +294,7 @@ class App
* automatically injected
*
* @param string $name
* @return Kirby\Cms\Collection|null
* @return \Kirby\Cms\Collection|null
*/
public function collection(string $name)
{
@@ -309,11 +309,11 @@ class App
/**
* Returns all user-defined collections
*
* @return Kirby\Cms\Collections
* @return \Kirby\Cms\Collections
*/
public function collections()
{
return $this->collections = $this->collections ?? new Collections;
return $this->collections = $this->collections ?? new Collections();
}
/**
@@ -357,6 +357,7 @@ class App
* @internal
* @param string $name
* @param array $arguments
* @param string $contentType
* @return array
*/
public function controller(string $name, array $arguments = [], string $contentType = 'html'): array
@@ -388,7 +389,8 @@ class App
* Try to find a controller by name
*
* @param string $name
* @return Kirby\Toolkit\Controller|null
* @param string $contentType
* @return \Kirby\Toolkit\Controller|null
*/
protected function controllerLookup(string $name, string $contentType = 'html')
{
@@ -403,7 +405,7 @@ class App
// registry controller
if ($controller = $this->extension('controllers', $name)) {
return is_a($controller, Controller::class) ? $controller : new Controller($controller);
return is_a($controller, 'Kirby\Toolkit\Controller') ? $controller : new Controller($controller);
}
return null;
@@ -412,7 +414,7 @@ class App
/**
* Returns the default language object
*
* @return Kirby\Cms\Language|null
* @return \Kirby\Cms\Language|null
*/
public function defaultLanguage()
{
@@ -434,7 +436,7 @@ class App
/**
* Detect the prefered language from the visitor object
*
* @return Kirby\Cms\Language
* @return \Kirby\Cms\Language
*/
public function detectedLanguage()
{
@@ -459,7 +461,9 @@ class App
/**
* Returns the Email singleton
*
* @return Kirby\Email\PHPMailer
* @param mixed $preset
* @param array $props
* @return \Kirby\Email\PHPMailer
*/
public function email($preset = [], array $props = [])
{
@@ -470,8 +474,9 @@ class App
* Finds any file in the content directory
*
* @param string $path
* @param mixed $parent
* @param boolean $drafts
* @return Kirby\Cms\File|null
* @return \Kirby\Cms\File|null
*/
public function file(string $path, $parent = null, bool $drafts = true)
{
@@ -479,11 +484,11 @@ class App
$id = dirname($path);
$filename = basename($path);
if (is_a($parent, User::class) === true) {
if (is_a($parent, 'Kirby\Cms\User') === true) {
return $parent->file($filename);
}
if (is_a($parent, File::class) === true) {
if (is_a($parent, 'Kirby\Cms\File') === true) {
$parent = $parent->parent();
}
@@ -511,13 +516,13 @@ class App
/**
* Returns the current App instance
*
* @param Kirby\Cms\App $instance
* @param \Kirby\Cms\App $instance
* @return self
*/
public static function instance(self $instance = null)
{
if ($instance === null) {
return static::$instance ?? new static;
return static::$instance ?? new static();
}
return static::$instance = $instance;
@@ -529,7 +534,7 @@ class App
*
* @internal
* @param mixed $input
* @return Kirby\Http\Response
* @return \Kirby\Http\Response
*/
public function io($input)
{
@@ -652,6 +657,7 @@ class App
* @internal
* @param string $text
* @param array $data
* @param bool $inline
* @return string
*/
public function kirbytext(string $text = null, array $data = [], bool $inline = false): string
@@ -673,7 +679,7 @@ class App
* Returns the current language
*
* @param string|null $code
* @return Kirby\Cms\Language|null
* @return \Kirby\Cms\Language|null
*/
public function language(string $code = null)
{
@@ -696,6 +702,7 @@ class App
* Returns the current language code
*
* @internal
* @param string|null $languageCode
* @return string|null
*/
public function languageCode(string $languageCode = null): ?string
@@ -710,7 +717,7 @@ class App
/**
* Returns all available site languages
*
* @return Kirby\Cms\Languages
* @return \Kirby\Cms\Languages
*/
public function languages()
{
@@ -724,7 +731,7 @@ class App
/**
* Returns the app's locks object
*
* @return Kirby\Cms\ContentLocks
* @return \Kirby\Cms\ContentLocks
*/
public function locks(): ContentLocks
{
@@ -732,7 +739,7 @@ class App
return $this->locks;
}
return $this->locks = new ContentLocks;
return $this->locks = new ContentLocks();
}
/**
@@ -787,6 +794,7 @@ class App
/**
* Inject options from Kirby instance props
*
* @param array $options
* @return array
*/
protected function optionsFromProps(array $options = []): array
@@ -819,9 +827,9 @@ class App
* Returns any page from the content folder
*
* @param string $id
* @param Kirby\Cms\Page|Kirby\Cms\Site|null $parent
* @param \Kirby\Cms\Page|\Kirby\Cms\Site|null $parent
* @param bool $drafts
* @return Kirby\Cms\Page|null
* @return \Kirby\Cms\Page|null
*/
public function page(string $id, $parent = null, bool $drafts = true)
{
@@ -863,7 +871,9 @@ class App
* Returns the Response object for the
* current request
*
* @return Kirby\Http\Response
* @param string|null $path
* @param string|null $method
* @return \Kirby\Http\Response
*/
public function render(string $path = null, string $method = null)
{
@@ -873,11 +883,11 @@ class App
/**
* Returns the Request singleton
*
* @return Kirby\Http\Request
* @return \Kirby\Http\Request
*/
public function request()
{
return $this->request = $this->request ?? new Request;
return $this->request = $this->request ?? new Request();
}
/**
@@ -954,17 +964,17 @@ class App
/**
* Response configuration
*
* @return Kirby\Cms\Responder
* @return \Kirby\Cms\Responder
*/
public function response()
{
return $this->response = $this->response ?? new Responder;
return $this->response = $this->response ?? new Responder();
}
/**
* Returns all user roles
*
* @return Kirby\Cms\Roles
* @return \Kirby\Cms\Roles
*/
public function roles()
{
@@ -985,7 +995,7 @@ class App
/**
* Returns the directory structure
*
* @return Kirby\Cms\Ingredients
* @return \Kirby\Cms\Ingredients
*/
public function roots()
{
@@ -995,7 +1005,7 @@ class App
/**
* Returns the currently active route
*
* @return Kirby\Http\Route|null
* @return \Kirby\Http\Route|null
*/
public function route()
{
@@ -1006,7 +1016,7 @@ class App
* Returns the Router singleton
*
* @internal
* @return Kirby\Http\Router
* @return \Kirby\Http\Router
*/
public function router()
{
@@ -1046,7 +1056,7 @@ class App
* Returns the current session object
*
* @param array $options Additional options, see the session component
* @return Kirby\Session\Session
* @return \Kirby\Session\Session
*/
public function session(array $options = [])
{
@@ -1123,7 +1133,7 @@ class App
/**
* Sets a custom Site object
*
* @param Kirby\Cms\Site|array $site
* @param \Kirby\Cms\Site|array $site
* @return self
*/
protected function setSite($site = null)
@@ -1141,17 +1151,17 @@ class App
/**
* Returns the Server object
*
* @return Kirby\Http\Server
* @return \Kirby\Http\Server
*/
public function server()
{
return $this->server = $this->server ?? new Server;
return $this->server = $this->server ?? new Server();
}
/**
* Initializes and returns the Site object
*
* @return Kirby\Cms\Site
* @return \Kirby\Cms\Site
*/
public function site()
{
@@ -1186,7 +1196,9 @@ class App
* and return a template snippet
*
* @internal
* @return string
* @param mixed $name
* @param array $data
* @return string|null
*/
public function snippet($name, array $data = []): ?string
{
@@ -1196,7 +1208,7 @@ class App
/**
* System check class
*
* @return Kirby\Cms\System
* @return \Kirby\Cms\System
*/
public function system()
{
@@ -1208,7 +1220,10 @@ class App
* and return the Template object
*
* @internal
* @return Kirby\Cms\Template
* @return \Kirby\Cms\Template
* @param string $name
* @param string $type
* @param string $defaultType
*/
public function template(string $name, string $type = 'html', string $defaultType = 'html')
{
@@ -1277,7 +1292,7 @@ class App
/**
* Returns the url structure
*
* @return Kirby\Cms\Ingredients
* @return \Kirby\Cms\Ingredients
*/
public function urls()
{
@@ -1308,7 +1323,7 @@ class App
/**
* Returns the visitor object
*
* @return Kirby\Cms\Visitor
* @return \Kirby\Cms\Visitor
*/
public function visitor()
{

View File

@@ -23,7 +23,7 @@ trait AppCaches
* Returns a cache instance by key
*
* @param string $key
* @return Kirby\Cache\Cache
* @return \Kirby\Cache\Cache
*/
public function cache(string $key)
{
@@ -36,7 +36,7 @@ trait AppCaches
if ($options['active'] === false) {
// use a dummy cache that does nothing
return $this->caches[$key] = new NullCache;
return $this->caches[$key] = new NullCache();
}
$type = strtolower($options['type']);
@@ -55,7 +55,7 @@ trait AppCaches
$cache = new $className($options);
// check if it is a useable cache object
if (is_a($cache, Cache::class) !== true) {
if (is_a($cache, 'Kirby\Cache\Cache') !== true) {
throw new InvalidArgumentException([
'key' => 'app.invalid.cacheType',
'data' => ['type' => $type]

View File

@@ -3,11 +3,11 @@
namespace Kirby\Cms;
use Kirby\Http\Response;
use Whoops\Run as Whoops;
use Whoops\Handler\Handler;
use Whoops\Handler\PrettyPageHandler;
use Whoops\Handler\PlainTextHandler;
use Whoops\Handler\CallbackHandler;
use Whoops\Handler\Handler;
use Whoops\Handler\PlainTextHandler;
use Whoops\Handler\PrettyPageHandler;
use Whoops\Run as Whoops;
/**
* AppErrors
@@ -22,8 +22,8 @@ trait AppErrors
{
protected function handleCliErrors(): void
{
$whoops = new Whoops;
$whoops->pushHandler(new PlainTextHandler);
$whoops = new Whoops();
$whoops->pushHandler(new PlainTextHandler());
$whoops->register();
}
@@ -45,11 +45,11 @@ trait AppErrors
protected function handleHtmlErrors()
{
$whoops = new Whoops;
$whoops = new Whoops();
if ($this->option('debug') === true) {
if ($this->option('whoops', true) === true) {
$handler = new PrettyPageHandler;
$handler = new PrettyPageHandler();
$handler->setPageTitle('Kirby CMS Debugger');
if ($editor = $this->option('editor')) {
@@ -79,7 +79,7 @@ trait AppErrors
protected function handleJsonErrors()
{
$whoops = new Whoops;
$whoops = new Whoops();
$handler = new CallbackHandler(function ($exception, $inspector, $run) {
if (is_a($exception, 'Kirby\Exception\Exception') === true) {
$httpCode = $exception->getHttpCode();

View File

@@ -23,7 +23,6 @@ use Kirby\Toolkit\V;
*/
trait AppPlugins
{
/**
* A list of all registered plugins
*
@@ -83,7 +82,7 @@ trait AppPlugins
*
* @internal
* @param array $extensions
* @param Kirby\Cms\Plugin $plugin The plugin which defined those extensions
* @param \Kirby\Cms\Plugin $plugin The plugin which defined those extensions
* @return array
*/
public function extend(array $extensions, Plugin $plugin = null): array
@@ -106,7 +105,7 @@ trait AppPlugins
protected function extendApi($api): array
{
if (is_array($api) === true) {
if (is_a($api['routes'] ?? [], Closure::class) === true) {
if (is_a($api['routes'] ?? [], 'Closure') === true) {
$api['routes'] = $api['routes']($this);
}
@@ -254,7 +253,7 @@ trait AppPlugins
/**
* Registers markdown component
*
* @param Closure $blueprints
* @param Closure $markdown
* @return Closure
*/
protected function extendMarkdown(Closure $markdown)
@@ -266,7 +265,7 @@ trait AppPlugins
* Registers additional options
*
* @param array $options
* @param Kirby\Cms\Plugin|null $plugin
* @param \Kirby\Cms\Plugin|null $plugin
* @return array
*/
protected function extendOptions(array $options, Plugin $plugin = null): array
@@ -336,7 +335,7 @@ trait AppPlugins
*/
protected function extendRoutes($routes): array
{
if (is_a($routes, Closure::class) === true) {
if (is_a($routes, 'Closure') === true) {
$routes = $routes($this);
}
@@ -480,7 +479,7 @@ trait AppPlugins
/**
* Returns the extensions registry
*
* @internal
* @param string|null $type
* @return array
@@ -556,6 +555,7 @@ trait AppPlugins
/**
* Apply all passed extensions
*
* @param array $props
* @return void
*/
protected function extensionsFromProps(array $props)
@@ -643,7 +643,7 @@ trait AppPlugins
*
* @param string $name
* @param array|null $extends If null is passed it will be used as getter. Otherwise as factory.
* @return Kirby\Cms\Plugin|null
* @return \Kirby\Cms\Plugin|null
*/
public static function plugin(string $name, array $extends = null)
{

View File

@@ -85,7 +85,7 @@ trait AppTranslations
*
* @internal
* @param string $languageCode
* @return Kirby\Cms\Language|null
* @return \Kirby\Cms\Language|null
*/
public function setCurrentLanguage(string $languageCode = null)
{
@@ -140,7 +140,7 @@ trait AppTranslations
* Load a specific translation by locale
*
* @param string|null $locale
* @return Kirby\Cms\Translation|null
* @return \Kirby\Cms\Translation|null
*/
public function translation(string $locale = null)
{
@@ -164,7 +164,7 @@ trait AppTranslations
/**
* Returns all available translations
*
* @return Kirby\Cms\Translations
* @return \Kirby\Cms\Translations
*/
public function translations()
{

View File

@@ -15,7 +15,6 @@ use Throwable;
*/
trait AppUsers
{
/**
* Cache for the auth auth layer
*
@@ -27,7 +26,7 @@ trait AppUsers
* Returns the Authentication layer class
*
* @internal
* @return Kirby\Cms\Auth
* @return \Kirby\Cms\Auth
*/
public function auth()
{
@@ -38,7 +37,7 @@ trait AppUsers
* Become any existing user
*
* @param string|null $who
* @return Kirby\Cms\User|null
* @return \Kirby\Cms\User|null
*/
public function impersonate(string $who = null)
{
@@ -48,8 +47,8 @@ trait AppUsers
/**
* Set the currently active user id
*
* @param Kirby\Cms\User|string $user
* @return Kirby\Cms\App
* @param \Kirby\Cms\User|string $user
* @return \Kirby\Cms\App
*/
protected function setUser($user = null)
{
@@ -61,7 +60,7 @@ trait AppUsers
* Create your own set of app users
*
* @param array $users
* @return Kirby\Cms\App
* @return \Kirby\Cms\App
*/
protected function setUsers(array $users = null)
{
@@ -79,7 +78,7 @@ trait AppUsers
* or the current user if no id is given
*
* @param string $id
* @return Kirby\Cms\User|null
* @return \Kirby\Cms\User|null
*/
public function user(string $id = null)
{
@@ -101,7 +100,7 @@ trait AppUsers
/**
* Returns all users
*
* @return Kirby\Cms\Users
* @return \Kirby\Cms\Users
*/
public function users()
{

View File

@@ -31,6 +31,8 @@ class Asset
/**
* Creates a new Asset object
* for the given path.
*
* @param string $path
*/
public function __construct(string $path)
{

View File

@@ -3,9 +3,9 @@
namespace Kirby\Cms;
use Kirby\Data\Data;
use Kirby\Exception\PermissionException;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Exception\NotFoundException;
use Kirby\Exception\PermissionException;
use Kirby\Http\Request\Auth\BasicAuth;
use Kirby\Toolkit\F;
use Throwable;
@@ -27,7 +27,7 @@ class Auth
protected $userException;
/**
* @param Kirby\Cms\App $kirby
* @param \Kirby\Cms\App $kirby
* @codeCoverageIgnore
*/
public function __construct(App $kirby)
@@ -61,8 +61,8 @@ class Auth
* for a basic authentication header with
* valid credentials
*
* @param Kirby\Http\Request\Auth\BasicAuth|null $auth
* @return Kirby\Cms\User|null
* @param \Kirby\Http\Request\Auth\BasicAuth|null $auth
* @return \Kirby\Cms\User|null
*/
public function currentUserFromBasicAuth(BasicAuth $auth = null)
{
@@ -90,8 +90,8 @@ class Auth
* the current session and finding a valid
* valid user id in there
*
* @param Kirby\Cms\Session|array|null $session
* @return Kirby\Cms\User|null
* @param \Kirby\Session\Session|array|null $session
* @return \Kirby\Cms\User|null
*/
public function currentUserFromSession($session = null)
{
@@ -125,7 +125,7 @@ class Auth
* Become any existing user
*
* @param string|null $who
* @return Kirby\Cms\User|null
* @return \Kirby\Cms\User|null
*/
public function impersonate(string $who = null)
{
@@ -196,7 +196,7 @@ class Auth
* @param string $email
* @param string $password
* @param boolean $long
* @return Kirby\Cms\User
* @return \Kirby\Cms\User
*
* @throws PermissionException If the rate limit was exceeded or if any other error occured with debug mode off
* @throws NotFoundException If the email was invalid
@@ -226,7 +226,7 @@ class Auth
*
* @param string $email
* @param string $password
* @return Kirby\Cms\User
* @return \Kirby\Cms\User
*
* @throws PermissionException If the rate limit was exceeded or if any other error occured with debug mode off
* @throws NotFoundException If the email was invalid
@@ -413,8 +413,8 @@ class Auth
/**
* Validates the currently logged in user
*
* @param Kirby\Session\Session|array|null $session
* @return Kirby\Cms\User
* @param \Kirby\Session\Session|array|null $session
* @return \Kirby\Cms\User
* @throws
*/
public function user($session = null)

View File

@@ -3,9 +3,9 @@
namespace Kirby\Cms;
use Exception;
use Kirby\Data\Data;
use Kirby\Exception\InvalidArgumentException;
use Kirby\Exception\NotFoundException;
use Kirby\Data\Data;
use Kirby\Form\Field;
use Kirby\Toolkit\A;
use Kirby\Toolkit\F;
@@ -90,7 +90,7 @@ class Blueprint
*
* @return array
*/
public function __debuginfo(): array
public function __debugInfo(): array
{
return $this->props ?? [];
}
@@ -222,7 +222,7 @@ class Blueprint
*
* @param string $name
* @param string $fallback
* @param Kirby\Cms\Model $model
* @param \Kirby\Cms\Model $model
* @return self
*/
public static function factory(string $name, string $fallback = null, Model $model)
@@ -352,7 +352,7 @@ class Blueprint
/**
* Returns the parent model
*
* @return Kirby\Cms\Model
* @return \Kirby\Cms\Model
*/
public function model()
{
@@ -603,7 +603,14 @@ class Blueprint
'type' => $type = $sectionProps['type'] ?? null
]);
if (isset(Section::$types[$type]) === false) {
if (empty($type) === true || is_string($type) === false) {
$sections[$sectionName] = [
'name' => $sectionName,
'headline' => 'Invalid section type for section "' . $sectionName . '"',
'type' => 'info',
'text' => 'The following section types are available: ' . $this->helpList(array_keys(Section::$types))
];
} elseif (isset(Section::$types[$type]) === false) {
$sections[$sectionName] = [
'name' => $sectionName,
'headline' => 'Invalid section type ("' . $type . '")',
@@ -712,7 +719,7 @@ class Blueprint
* Returns a single section by name
*
* @param string $name
* @return Kirby\Cms\Section|null
* @return \Kirby\Cms\Section|null
*/
public function section(string $name)
{

View File

@@ -101,23 +101,22 @@ class Collection extends BaseCollection
/**
* Appends an element to the data array
*
* @param mixed $key
* @param mixed $key Optional collection key, will be determined from the item if not given
* @param mixed $item
* @return Kirby\Cms\Collection
* @return \Kirby\Cms\Collection
*/
public function append(...$args)
{
if (count($args) === 1) {
if (is_object($args[0]) === true) {
$this->data[$args[0]->id()] = $args[0];
// try to determine the key from the provided item
if (is_object($args[0]) === true && is_callable([$args[0], 'id']) === true) {
return parent::append($args[0]->id(), $args[0]);
} else {
$this->data[] = $args[0];
return parent::append($args[0]);
}
} elseif (count($args) === 2) {
$this->set($args[0], $args[1]);
}
return $this;
return parent::append(...$args);
}
/**
@@ -126,7 +125,7 @@ class Collection extends BaseCollection
*
* @param string $field
* @param bool $i Ignore upper/lowercase for group names
* @return Kirby\Cms\Collection
* @return \Kirby\Cms\Collection
*/
public function groupBy($field, bool $i = true)
{
@@ -165,7 +164,7 @@ class Collection extends BaseCollection
* Checks if the given object or id
* is in the collection
*
* @param string|object
* @param string|object $id
* @return boolean
*/
public function has($id): bool
@@ -197,8 +196,8 @@ class Collection extends BaseCollection
/**
* Returns a Collection without the given element(s)
*
* @param mixed[] $keys any number of keys, passed as individual arguments
* @return Kirby\Cms\Collection
* @param mixed ...$keys any number of keys, passed as individual arguments
* @return \Kirby\Cms\Collection
*/
public function not(...$keys)
{
@@ -217,7 +216,8 @@ class Collection extends BaseCollection
/**
* Add pagination and return a sliced set of data.
*
* @return Kirby\Cms\Collection
* @param mixed ...$arguments
* @return \Kirby\Cms\Collection
*/
public function paginate(...$arguments)
{
@@ -230,13 +230,34 @@ class Collection extends BaseCollection
/**
* Returns the parent model
*
* @return Kirby\Cms\Model
* @return \Kirby\Cms\Model
*/
public function parent()
{
return $this->parent;
}
/**
* Prepends an element to the data array
*
* @param mixed $key Optional collection key, will be determined from the item if not given
* @param mixed $item
* @return Kirby\Cms\Collection
*/
public function prepend(...$args)
{
if (count($args) === 1) {
// try to determine the key from the provided item
if (is_object($args[0]) === true && is_callable([$args[0], 'id']) === true) {
return parent::prepend($args[0]->id(), $args[0]);
} else {
return parent::prepend($args[0]);
}
}
return parent::prepend(...$args);
}
/**
* Runs a combination of filterBy, sortBy, not
* offset, limit, search and paginate on the collection.

View File

@@ -21,7 +21,6 @@ use Kirby\Toolkit\Controller;
*/
class Collections
{
/**
* Each collection is cached once it
* has been called, to avoid further
@@ -45,7 +44,7 @@ class Collections
*
* @param string $name
* @param array $arguments
* @return Kirby\Cms\Collection|null
* @return \Kirby\Cms\Collection|null
*/
public function __call(string $name, array $arguments = [])
{
@@ -57,7 +56,7 @@ class Collections
*
* @param string $name
* @param array $data
* @return Kirby\Cms\Collection|null
* @return \Kirby\Cms\Collection|null
*/
public function get(string $name, array $data = [])
{

Some files were not shown because too many files have changed in this diff Show More