Compare commits
17 Commits
2e8aa1ed80
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| adc2fae5af | |||
| 30431491e2 | |||
| 6f31b28e8c | |||
|
|
dba516f484 | ||
|
|
3fc57831eb | ||
|
|
97da8f7079 | ||
|
|
3fe23d469f | ||
|
|
a6550c95fb | ||
|
|
fd06ae62d4 | ||
|
|
63ddf40692 | ||
|
|
49287c7a5e | ||
|
|
8bc7250b68 | ||
|
|
a955c7822e | ||
|
|
e50c0341fc | ||
|
|
4b55753c46 | ||
|
|
7f4eb7509d | ||
|
|
77d9337371 |
1
.github/FUNDING.yml
vendored
1
.github/FUNDING.yml
vendored
@@ -1 +0,0 @@
|
|||||||
custom: ['https://getkirby.com/buy']
|
|
||||||
115
README.md
115
README.md
@@ -1,44 +1,79 @@
|
|||||||
<img src="http://getkirby.com/assets/images/github/starterkit.jpg" width="300">
|
# hocusfokus-web
|
||||||
|
|
||||||
**Kirby: the CMS that adapts to any project, loved by developers and editors alike.**
|
Die Website von **hocusfokus** basiert auf [Kirby CMS](https://getkirby.com) und wird auf `https://web.mindboost.team` gehostet.
|
||||||
The Starterkit is a full-blown Kirby installation with a lot of example content, blueprints, templates and more.
|
|
||||||
It is ideal for new users to explore many of Kirby's options and get to know the Panel.
|
|
||||||
|
|
||||||
You can learn more about Kirby at [getkirby.com](https://getkirby.com).
|
|
||||||
|
|
||||||
<img src="http://getkirby.com/assets/images/github/starterkit-screen.png" />
|
|
||||||
|
|
||||||
### Try Kirby for free
|
|
||||||
|
|
||||||
You can try Kirby and the Starterkit on your local machine or on a test server as long as you need to make sure it is the right tool for your next project. … and when you’re convinced, [buy your license](https://getkirby.com/buy).
|
|
||||||
|
|
||||||
The Starterkit is a demo of basic Kirby features. It's not recommended to be used "as is" in production. Please, follow our documentation closely for more features and guides on how to build secure, high-quality websites with Kirby.
|
|
||||||
|
|
||||||
While Kirby as the CMS software itself requires you to purchase a license, we consider the files primarily connected to this Starterkit (assets, templates, snippets...) free to use under the MIT license. Feel free to start building your own project with them.
|
|
||||||
|
|
||||||
### Get going
|
|
||||||
|
|
||||||
Read our guide on [how to get started with Kirby](https://getkirby.com/docs/guide/quickstart).
|
|
||||||
|
|
||||||
You can download the latest version of the Starterkit from https://download.getkirby.com/.
|
|
||||||
If you are familiar with Git, you can clone Kirby's Starterkit repository from Github.
|
|
||||||
|
|
||||||
git clone https://github.com/getkirby/starterkit.git
|
|
||||||
|
|
||||||
## What's Kirby?
|
|
||||||
|
|
||||||
- **[getkirby.com](https://getkirby.com)** – Get to know the CMS.
|
|
||||||
- **[Try it](https://getkirby.com/try)** – Take a test ride with our online demo. Or download one of our kits to get started.
|
|
||||||
- **[Documentation](https://getkirby.com/docs/guide)** – Read the official guide, reference and cookbook recipes.
|
|
||||||
- **[Issues](https://github.com/getkirby/kirby/issues)** – Report bugs and other problems.
|
|
||||||
- **[Feedback](https://feedback.getkirby.com)** – You have an idea for Kirby? Share it.
|
|
||||||
- **[Forum](https://forum.getkirby.com)** – Whenever you get stuck, don't hesitate to reach out for questions and support.
|
|
||||||
- **[Discord](https://chat.getkirby.com)** – Hang out and meet the community.
|
|
||||||
- **[YouTube](https://youtube.com/kirbyCasts)** - Watch the latest video tutorials visually with Bastian.
|
|
||||||
- **[Mastodon](https://mastodon.social/@getkirby)** – Spread the word.
|
|
||||||
- **[Instagram](https://www.instagram.com/getkirby/)** – Share your creations: #madewithkirby.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
© 2009 Bastian Allgeier
|
## Für Entwickler: So funktioniert der Workflow
|
||||||
[getkirby.com](https://getkirby.com) · [License agreement](https://getkirby.com/license)
|
|
||||||
|
### Voraussetzungen
|
||||||
|
|
||||||
|
- Git-Zugang zum Repo: `https://gitea.mindboost.team/hocusfokus/hocusfokus-web.git`
|
||||||
|
- Schreibrechte auf dem `main`-Branch
|
||||||
|
|
||||||
|
### Repository klonen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://gitea.mindboost.team/hocusfokus/hocusfokus-web.git
|
||||||
|
cd hocusfokus-web
|
||||||
|
```
|
||||||
|
|
||||||
|
### Lokale Entwicklung
|
||||||
|
|
||||||
|
Kirby läuft ohne Datenbank – alle Inhalte liegen als Dateien im `content/`-Ordner. Für eine lokale Vorschau reicht ein einfacher PHP-Server:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
php -S localhost:8000
|
||||||
|
```
|
||||||
|
|
||||||
|
Danach ist die Seite unter `http://localhost:8000` und das Panel unter `http://localhost:8000/panel` erreichbar.
|
||||||
|
|
||||||
|
> **Hinweis:** Die Datei `site/config/config.php` enthält die URL-Konfiguration für die Produktionsumgebung. Lokal kann es sein, dass Kirby eine Warnung wegen der URL zeigt – das ist normal und beeinflusst die Entwicklung nicht.
|
||||||
|
|
||||||
|
### Änderungen deployen
|
||||||
|
|
||||||
|
Das Deployment läuft vollautomatisch über einen Gitea-Webhook:
|
||||||
|
|
||||||
|
1. Änderungen committen und auf `main` pushen
|
||||||
|
2. Gitea löst automatisch einen Webhook aus
|
||||||
|
3. Der Server führt `git pull` im Produktionsverzeichnis aus
|
||||||
|
4. Die Änderungen sind sofort live auf `https://web.mindboost.team`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "Beschreibung der Änderung"
|
||||||
|
git push origin main
|
||||||
|
```
|
||||||
|
|
||||||
|
> Pushes auf andere Branches lösen **kein** Deployment aus. Nur `main` wird automatisch deployed.
|
||||||
|
|
||||||
|
### Projektstruktur
|
||||||
|
|
||||||
|
```
|
||||||
|
├── assets/ # CSS, JS, Bilder (Theme-Dateien)
|
||||||
|
├── content/ # Alle Seiteninhalte als Textdateien
|
||||||
|
├── kirby/ # Kirby CMS Core (nicht bearbeiten)
|
||||||
|
├── media/ # Automatisch generierter Cache (nicht committen)
|
||||||
|
├── site/
|
||||||
|
│ ├── blueprints/ # Panel-Konfiguration (Felder, Layouts)
|
||||||
|
│ ├── config/ # Kirby-Konfiguration
|
||||||
|
│ ├── plugins/ # Erweiterungen
|
||||||
|
│ ├── snippets/ # Wiederverwendbare Template-Teile
|
||||||
|
│ └── templates/ # Seitentemplates
|
||||||
|
└── index.php # Einstiegspunkt
|
||||||
|
```
|
||||||
|
|
||||||
|
### Was gehört ins Repo, was nicht?
|
||||||
|
|
||||||
|
| Gehört rein | Gehört **nicht** rein |
|
||||||
|
|---|---|
|
||||||
|
| `content/` | `media/` (automatisch generiert) |
|
||||||
|
| `assets/` | `site/accounts/` (Benutzerkonten) |
|
||||||
|
| `site/` | `site/sessions/` (Sitzungsdaten) |
|
||||||
|
| `kirby/` | `site/cache/` (Cache) |
|
||||||
|
|
||||||
|
Die `.gitignore` ist bereits entsprechend konfiguriert.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Fragen zum Setup? Wende dich an das Hocus Fokus-Team.
|
||||||
|
|||||||
@@ -10,11 +10,11 @@ Headline:
|
|||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
Subheadline: Our friends with leaves
|
Subheadline: Our friends with leaves are trees
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
Text: <p>Hug them if you like. They might not appreciate it though.</p><p>Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum id ligula porta felis euismod semper. Donec sed odio dui. Etiam porta sem malesuada magna mollis euismod.</p>
|
Text: <p>I like to hug them. They might not appreciate it though.</p><p>Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum id ligula porta felis euismod semper. Donec sed odio dui. Etiam porta sem malesuada magna mollis euismod.</p>
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,11 @@ Title: Home
|
|||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
Headline: Welcome to Kirby's Starterkit
|
Headline: Welcome to Hocus Fokus Fidibus
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
Subheadline: A fully documented example project
|
Subheadline: Gespräche weg hex hex.
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|||||||
49
deploy.php
Normal file
49
deploy.php
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Gitea Webhook Deploy Handler
|
||||||
|
* Called by Gitea on push to main branch.
|
||||||
|
*
|
||||||
|
* Set DEPLOY_SECRET in Gitea webhook settings and
|
||||||
|
* configure the same value in the DEPLOY_SECRET env var
|
||||||
|
* (or hardcode it below for simple setups).
|
||||||
|
*/
|
||||||
|
|
||||||
|
$secret = getenv('DEPLOY_SECRET') ?: '';
|
||||||
|
|
||||||
|
if (empty($secret)) {
|
||||||
|
http_response_code(500);
|
||||||
|
die('DEPLOY_SECRET not configured.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify Gitea HMAC-SHA256 signature
|
||||||
|
$signature = $_SERVER['HTTP_X_GITEA_SIGNATURE'] ?? '';
|
||||||
|
$body = file_get_contents('php://input');
|
||||||
|
$expected = hash_hmac('sha256', $body, $secret);
|
||||||
|
|
||||||
|
if (!hash_equals($expected, $signature)) {
|
||||||
|
http_response_code(403);
|
||||||
|
die('Invalid signature.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only act on push events
|
||||||
|
$event = $_SERVER['HTTP_X_GITEA_EVENT'] ?? '';
|
||||||
|
if ($event !== 'push') {
|
||||||
|
http_response_code(200);
|
||||||
|
die('Ignored: not a push event.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only deploy on main branch
|
||||||
|
$payload = json_decode($body, true);
|
||||||
|
$ref = $payload['ref'] ?? '';
|
||||||
|
if ($ref !== 'refs/heads/main') {
|
||||||
|
http_response_code(200);
|
||||||
|
die('Ignored: not main branch.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run git pull (HOME must be set explicitly since PHP's shell_exec doesn't inherit it)
|
||||||
|
putenv('HOME=/var/www');
|
||||||
|
$output = shell_exec('git -C /var/www/html pull 2>&1');
|
||||||
|
|
||||||
|
http_response_code(200);
|
||||||
|
header('Content-Type: text/plain');
|
||||||
|
echo "Deploy triggered:\n" . $output;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
[<img src="https://getkirby.com/assets/images/github/kirby.jpg" width="300">](https://getkirby.com)
|
[<img src="https://getkirby.com/assets/images/github/kirby.jpg" width="300">](https://getkirby.com)
|
||||||
|
|
||||||
[](https://github.com/getkirby/kirby/releases/latest)
|
[](https://github.com/getkirby/kirby/releases/latest)
|
||||||
[](https://github.com/getkirby/kirby/actions?query=workflow%3ACI+branch%3Amain)
|
[](https://github.com/getkirby/kirby/actions?query=workflow%3ACI+branch%3Amain)
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
[](https://github.com/getkirby/kirby/releases/latest)
|
[](https://github.com/getkirby/kirby/releases/latest)
|
||||||
|
|
||||||
**Kirby: the CMS that adapts to any project, loved by developers and editors alike.**
|
**Kirby: the CMS that adapts to any project, loved by developers and editors alike.**
|
||||||
With Kirby, you build your own ideal interface. Combine forms, galleries, articles, spreadsheets and more into an amazing editing experience. You can learn more about Kirby at [getkirby.com](https://getkirby.com).
|
With Kirby, you build your own ideal interface. Combine forms, galleries, articles, spreadsheets and more into an amazing editing experience. You can learn more about Kirby at [getkirby.com](https://getkirby.com).
|
||||||
|
|
||||||
This is Kirby's core application folder. Get started with one of the following repositories instead:
|
This is Kirby's core application folder. Get started with one of the following repositories instead:
|
||||||
|
|
||||||
@@ -15,7 +15,8 @@ This is Kirby's core application folder. Get started with one of the following r
|
|||||||
|
|
||||||
<img src="https://getkirby.com/assets/images/github/kirby-screen.png" />
|
<img src="https://getkirby.com/assets/images/github/kirby-screen.png" />
|
||||||
|
|
||||||
### Try Kirby for free
|
### Try Kirby for free
|
||||||
|
|
||||||
Kirby is not free software. However, you can try Kirby and the Starterkit on your local machine or on a test server as long as you need to make sure it is the right tool for your next project. … and when you’re convinced, [buy your license](https://getkirby.com/buy).
|
Kirby is not free software. However, you can try Kirby and the Starterkit on your local machine or on a test server as long as you need to make sure it is the right tool for your next project. … and when you’re convinced, [buy your license](https://getkirby.com/buy).
|
||||||
|
|
||||||
### Contribute
|
### Contribute
|
||||||
@@ -30,6 +31,7 @@ If you have ideas for a feature or enhancement for Kirby, please use our [feedba
|
|||||||
Read about how to contribute to the development in our [contributing guide](/CONTRIBUTING.md).
|
Read about how to contribute to the development in our [contributing guide](/CONTRIBUTING.md).
|
||||||
|
|
||||||
## What's Kirby?
|
## What's Kirby?
|
||||||
|
|
||||||
- **[getkirby.com](https://getkirby.com)** – Get to know the CMS.
|
- **[getkirby.com](https://getkirby.com)** – Get to know the CMS.
|
||||||
- **[Try it](https://getkirby.com/try)** – Take a test ride with our online demo. Or download one of our kits to get started.
|
- **[Try it](https://getkirby.com/try)** – Take a test ride with our online demo. Or download one of our kits to get started.
|
||||||
- **[Documentation](https://getkirby.com/docs/guide)** – Read the official guide, reference and cookbook recipes.
|
- **[Documentation](https://getkirby.com/docs/guide)** – Read the official guide, reference and cookbook recipes.
|
||||||
@@ -43,5 +45,5 @@ Read about how to contribute to the development in our [contributing guide](/CON
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
© 2009-2023 Bastian Allgeier
|
© 2009 Bastian Allgeier
|
||||||
[getkirby.com](https://getkirby.com) · [License agreement](https://getkirby.com/license)
|
[getkirby.com](https://getkirby.com) · [License agreement](https://getkirby.com/license)
|
||||||
|
|||||||
166
kirby/cacert.pem
166
kirby/cacert.pem
@@ -1,7 +1,9 @@
|
|||||||
##
|
##
|
||||||
## Bundle of CA Root Certificates
|
## Bundle of CA Root Certificates
|
||||||
##
|
##
|
||||||
## Certificate data from Mozilla as of: Tue Dec 12 04:12:04 2023 GMT
|
## Certificate data from Mozilla as of: Tue Nov 26 13:58:25 2024 GMT
|
||||||
|
##
|
||||||
|
## Find updated versions here: https://curl.se/docs/caextract.html
|
||||||
##
|
##
|
||||||
## This is a bundle of X.509 certificates of public Certificate Authorities
|
## This is a bundle of X.509 certificates of public Certificate Authorities
|
||||||
## (CA). These were automatically extracted from Mozilla's root certificates
|
## (CA). These were automatically extracted from Mozilla's root certificates
|
||||||
@@ -14,7 +16,7 @@
|
|||||||
## Just configure this file as the SSLCACertificateFile.
|
## Just configure this file as the SSLCACertificateFile.
|
||||||
##
|
##
|
||||||
## Conversion done with mk-ca-bundle.pl version 1.29.
|
## Conversion done with mk-ca-bundle.pl version 1.29.
|
||||||
## SHA256: 1970dd65858925d68498d2356aea6d03f764422523c5887deca8ce3ba9e1f845
|
## SHA256: 36105b01631f9fc03b1eca779b44a30a1a5890b9bf8dc07ccb001a07301e01cf
|
||||||
##
|
##
|
||||||
|
|
||||||
|
|
||||||
@@ -3532,3 +3534,163 @@ dVwPaFsdZcJfMw8eD/A7hvWwTruc9+olBdytoptLFwG+Qt81IR2tq670v64fG9PiO/yzcnMcmyiQ
|
|||||||
iRM9HcEARwmWmjgb3bHPDcK0RPOWlc4yOo80nOAXx17Org3bhzjlP1v9mxnhMUF6cKojawHhRUzN
|
iRM9HcEARwmWmjgb3bHPDcK0RPOWlc4yOo80nOAXx17Org3bhzjlP1v9mxnhMUF6cKojawHhRUzN
|
||||||
lM47ni3niAIi9G7oyOzWPPO5std3eqx7
|
lM47ni3niAIi9G7oyOzWPPO5std3eqx7
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
Telekom Security TLS ECC Root 2020
|
||||||
|
==================================
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQjCCAcmgAwIBAgIQNjqWjMlcsljN0AFdxeVXADAKBggqhkjOPQQDAzBjMQswCQYDVQQGEwJE
|
||||||
|
RTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBHbWJIMSswKQYDVQQDDCJUZWxl
|
||||||
|
a29tIFNlY3VyaXR5IFRMUyBFQ0MgUm9vdCAyMDIwMB4XDTIwMDgyNTA3NDgyMFoXDTQ1MDgyNTIz
|
||||||
|
NTk1OVowYzELMAkGA1UEBhMCREUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkg
|
||||||
|
R21iSDErMCkGA1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgRUNDIFJvb3QgMjAyMDB2MBAGByqG
|
||||||
|
SM49AgEGBSuBBAAiA2IABM6//leov9Wq9xCazbzREaK9Z0LMkOsVGJDZos0MKiXrPk/OtdKPD/M1
|
||||||
|
2kOLAoC+b1EkHQ9rK8qfwm9QMuU3ILYg/4gND21Ju9sGpIeQkpT0CdDPf8iAC8GXs7s1J8nCG6NC
|
||||||
|
MEAwHQYDVR0OBBYEFONyzG6VmUex5rNhTNHLq+O6zd6fMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
|
||||||
|
AQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMHVSi7ekEE+uShCLsoRbQuHmKjYC2qBuGT8lv9pZ
|
||||||
|
Mo7k+5Dck2TOrbRBR2Diz6fLHgIwN0GMZt9Ba9aDAEH9L1r3ULRn0SyocddDypwnJJGDSA3PzfdU
|
||||||
|
ga/sf+Rn27iQ7t0l
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
Telekom Security TLS RSA Root 2023
|
||||||
|
==================================
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIFszCCA5ugAwIBAgIQIZxULej27HF3+k7ow3BXlzANBgkqhkiG9w0BAQwFADBjMQswCQYDVQQG
|
||||||
|
EwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBHbWJIMSswKQYDVQQDDCJU
|
||||||
|
ZWxla29tIFNlY3VyaXR5IFRMUyBSU0EgUm9vdCAyMDIzMB4XDTIzMDMyODEyMTY0NVoXDTQ4MDMy
|
||||||
|
NzIzNTk1OVowYzELMAkGA1UEBhMCREUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJp
|
||||||
|
dHkgR21iSDErMCkGA1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgUlNBIFJvb3QgMjAyMzCCAiIw
|
||||||
|
DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAO01oYGA88tKaVvC+1GDrib94W7zgRJ9cUD/h3VC
|
||||||
|
KSHtgVIs3xLBGYSJwb3FKNXVS2xE1kzbB5ZKVXrKNoIENqil/Cf2SfHVcp6R+SPWcHu79ZvB7JPP
|
||||||
|
GeplfohwoHP89v+1VmLhc2o0mD6CuKyVU/QBoCcHcqMAU6DksquDOFczJZSfvkgdmOGjup5czQRx
|
||||||
|
UX11eKvzWarE4GC+j4NSuHUaQTXtvPM6Y+mpFEXX5lLRbtLevOP1Czvm4MS9Q2QTps70mDdsipWo
|
||||||
|
l8hHD/BeEIvnHRz+sTugBTNoBUGCwQMrAcjnj02r6LX2zWtEtefdi+zqJbQAIldNsLGyMcEWzv/9
|
||||||
|
FIS3R/qy8XDe24tsNlikfLMR0cN3f1+2JeANxdKz+bi4d9s3cXFH42AYTyS2dTd4uaNir73Jco4v
|
||||||
|
zLuu2+QVUhkHM/tqty1LkCiCc/4YizWN26cEar7qwU02OxY2kTLvtkCJkUPg8qKrBC7m8kwOFjQg
|
||||||
|
rIfBLX7JZkcXFBGk8/ehJImr2BrIoVyxo/eMbcgByU/J7MT8rFEz0ciD0cmfHdRHNCk+y7AO+oML
|
||||||
|
KFjlKdw/fKifybYKu6boRhYPluV75Gp6SG12mAWl3G0eQh5C2hrgUve1g8Aae3g1LDj1H/1Joy7S
|
||||||
|
WWO/gLCMk3PLNaaZlSJhZQNg+y+TS/qanIA7AgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAdBgNV
|
||||||
|
HQ4EFgQUtqeXgj10hZv3PJ+TmpV5dVKMbUcwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS2
|
||||||
|
p5eCPXSFm/c8n5OalXl1UoxtRzANBgkqhkiG9w0BAQwFAAOCAgEAqMxhpr51nhVQpGv7qHBFfLp+
|
||||||
|
sVr8WyP6Cnf4mHGCDG3gXkaqk/QeoMPhk9tLrbKmXauw1GLLXrtm9S3ul0A8Yute1hTWjOKWi0Fp
|
||||||
|
kzXmuZlrYrShF2Y0pmtjxrlO8iLpWA1WQdH6DErwM807u20hOq6OcrXDSvvpfeWxm4bu4uB9tPcy
|
||||||
|
/SKE8YXJN3nptT+/XOR0so8RYgDdGGah2XsjX/GO1WfoVNpbOms2b/mBsTNHM3dA+VKq3dSDz4V4
|
||||||
|
mZqTuXNnQkYRIer+CqkbGmVps4+uFrb2S1ayLfmlyOw7YqPta9BO1UAJpB+Y1zqlklkg5LB9zVtz
|
||||||
|
aL1txKITDmcZuI1CfmwMmm6gJC3VRRvcxAIU/oVbZZfKTpBQCHpCNfnqwmbU+AGuHrS+w6jv/naa
|
||||||
|
oqYfRvaE7fzbzsQCzndILIyy7MMAo+wsVRjBfhnu4S/yrYObnqsZ38aKL4x35bcF7DvB7L6Gs4a8
|
||||||
|
wPfc5+pbrrLMtTWGS9DiP7bY+A4A7l3j941Y/8+LN+ljX273CXE2whJdV/LItM3z7gLfEdxquVeE
|
||||||
|
HVlNjM7IDiPCtyaaEBRx/pOyiriA8A4QntOoUAw3gi/q4Iqd4Sw5/7W0cwDk90imc6y/st53BIe0
|
||||||
|
o82bNSQ3+pCTE4FCxpgmdTdmQRCsu/WU48IxK63nI1bMNSWSs1A=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
FIRMAPROFESIONAL CA ROOT-A WEB
|
||||||
|
==============================
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICejCCAgCgAwIBAgIQMZch7a+JQn81QYehZ1ZMbTAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJF
|
||||||
|
UzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UEYQwPVkFURVMtQTYyNjM0MDY4
|
||||||
|
MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENBIFJPT1QtQSBXRUIwHhcNMjIwNDA2MDkwMTM2
|
||||||
|
WhcNNDcwMzMxMDkwMTM2WjBuMQswCQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25h
|
||||||
|
bCBTQTEYMBYGA1UEYQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFM
|
||||||
|
IENBIFJPT1QtQSBXRUIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARHU+osEaR3xyrq89Zfe9MEkVz6
|
||||||
|
iMYiuYMQYneEMy3pA4jU4DP37XcsSmDq5G+tbbT4TIqk5B/K6k84Si6CcyvHZpsKjECcfIr28jlg
|
||||||
|
st7L7Ljkb+qbXbdTkBgyVcUgt5SjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUk+FD
|
||||||
|
Y1w8ndYn81LsF7Kpryz3dvgwHQYDVR0OBBYEFJPhQ2NcPJ3WJ/NS7Beyqa8s93b4MA4GA1UdDwEB
|
||||||
|
/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjAdfKR7w4l1M+E7qUW/Runpod3JIha3RxEL2Jq68cgL
|
||||||
|
cFBTApFwhVmpHqTm6iMxoAACMQD94vizrxa5HnPEluPBMBnYfubDl94cT7iJLzPrSA8Z94dGXSaQ
|
||||||
|
pYXFuXqUPoeovQA=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
TWCA CYBER Root CA
|
||||||
|
==================
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIFjTCCA3WgAwIBAgIQQAE0jMIAAAAAAAAAATzyxjANBgkqhkiG9w0BAQwFADBQMQswCQYDVQQG
|
||||||
|
EwJUVzESMBAGA1UEChMJVEFJV0FOLUNBMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJUV0NB
|
||||||
|
IENZQkVSIFJvb3QgQ0EwHhcNMjIxMTIyMDY1NDI5WhcNNDcxMTIyMTU1OTU5WjBQMQswCQYDVQQG
|
||||||
|
EwJUVzESMBAGA1UEChMJVEFJV0FOLUNBMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJUV0NB
|
||||||
|
IENZQkVSIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDG+Moe2Qkgfh1s
|
||||||
|
Ts6P40czRJzHyWmqOlt47nDSkvgEs1JSHWdyKKHfi12VCv7qze33Kc7wb3+szT3vsxxFavcokPFh
|
||||||
|
V8UMxKNQXd7UtcsZyoC5dc4pztKFIuwCY8xEMCDa6pFbVuYdHNWdZsc/34bKS1PE2Y2yHer43CdT
|
||||||
|
o0fhYcx9tbD47nORxc5zb87uEB8aBs/pJ2DFTxnk684iJkXXYJndzk834H/nY62wuFm40AZoNWDT
|
||||||
|
Nq5xQwTxaWV4fPMf88oon1oglWa0zbfuj3ikRRjpJi+NmykosaS3Om251Bw4ckVYsV7r8Cibt4LK
|
||||||
|
/c/WMw+f+5eesRycnupfXtuq3VTpMCEobY5583WSjCb+3MX2w7DfRFlDo7YDKPYIMKoNM+HvnKkH
|
||||||
|
IuNZW0CP2oi3aQiotyMuRAlZN1vH4xfyIutuOVLF3lSnmMlLIJXcRolftBL5hSmO68gnFSDAS9TM
|
||||||
|
fAxsNAwmmyYxpjyn9tnQS6Jk/zuZQXLB4HCX8SS7K8R0IrGsayIyJNN4KsDAoS/xUgXJP+92ZuJF
|
||||||
|
2A09rZXIx4kmyA+upwMu+8Ff+iDhcK2wZSA3M2Cw1a/XDBzCkHDXShi8fgGwsOsVHkQGzaRP6AzR
|
||||||
|
wyAQ4VRlnrZR0Bp2a0JaWHY06rc3Ga4udfmW5cFZ95RXKSWNOkyrTZpB0F8mAwIDAQABo2MwYTAO
|
||||||
|
BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBSdhWEUfMFib5do5E83
|
||||||
|
QOGt4A1WNzAdBgNVHQ4EFgQUnYVhFHzBYm+XaORPN0DhreANVjcwDQYJKoZIhvcNAQEMBQADggIB
|
||||||
|
AGSPesRiDrWIzLjHhg6hShbNcAu3p4ULs3a2D6f/CIsLJc+o1IN1KriWiLb73y0ttGlTITVX1olN
|
||||||
|
c79pj3CjYcya2x6a4CD4bLubIp1dhDGaLIrdaqHXKGnK/nZVekZn68xDiBaiA9a5F/gZbG0jAn/x
|
||||||
|
X9AKKSM70aoK7akXJlQKTcKlTfjF/biBzysseKNnTKkHmvPfXvt89YnNdJdhEGoHK4Fa0o635yDR
|
||||||
|
IG4kqIQnoVesqlVYL9zZyvpoBJ7tRCT5dEA7IzOrg1oYJkK2bVS1FmAwbLGg+LhBoF1JSdJlBTrq
|
||||||
|
/p1hvIbZv97Tujqxf36SNI7JAG7cmL3c7IAFrQI932XtCwP39xaEBDG6k5TY8hL4iuO/Qq+n1M0R
|
||||||
|
FxbIQh0UqEL20kCGoE8jypZFVmAGzbdVAaYBlGX+bgUJurSkquLvWL69J1bY73NxW0Qz8ppy6rBe
|
||||||
|
Pm6pUlvscG21h483XjyMnM7k8M4MZ0HMzvaAq07MTFb1wWFZk7Q+ptq4NxKfKjLji7gh7MMrZQzv
|
||||||
|
It6IKTtM1/r+t+FHvpw+PoP7UV31aPcuIYXcv/Fa4nzXxeSDwWrruoBa3lwtcHb4yOWHh8qgnaHl
|
||||||
|
IhInD0Q9HWzq1MKLL295q39QpsQZp6F6t5b5wR9iWqJDB0BeJsas7a5wFsWqynKKTbDPAYsDP27X
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
SecureSign Root CA12
|
||||||
|
====================
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDcjCCAlqgAwIBAgIUZvnHwa/swlG07VOX5uaCwysckBYwDQYJKoZIhvcNAQELBQAwUTELMAkG
|
||||||
|
A1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBMdGQuMR0wGwYDVQQDExRT
|
||||||
|
ZWN1cmVTaWduIFJvb3QgQ0ExMjAeFw0yMDA0MDgwNTM2NDZaFw00MDA0MDgwNTM2NDZaMFExCzAJ
|
||||||
|
BgNVBAYTAkpQMSMwIQYDVQQKExpDeWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMU
|
||||||
|
U2VjdXJlU2lnbiBSb290IENBMTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6OcE3
|
||||||
|
emhFKxS06+QT61d1I02PJC0W6K6OyX2kVzsqdiUzg2zqMoqUm048luT9Ub+ZyZN+v/mtp7JIKwcc
|
||||||
|
J/VMvHASd6SFVLX9kHrko+RRWAPNEHl57muTH2SOa2SroxPjcf59q5zdJ1M3s6oYwlkm7Fsf0uZl
|
||||||
|
fO+TvdhYXAvA42VvPMfKWeP+bl+sg779XSVOKik71gurFzJ4pOE+lEa+Ym6b3kaosRbnhW70CEBF
|
||||||
|
EaCeVESE99g2zvVQR9wsMJvuwPWW0v4JhscGWa5Pro4RmHvzC1KqYiaqId+OJTN5lxZJjfU+1Uef
|
||||||
|
NzFJM3IFTQy2VYzxV4+Kh9GtxRESOaCtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
|
||||||
|
AQH/BAQDAgEGMB0GA1UdDgQWBBRXNPN0zwRL1SXm8UC2LEzZLemgrTANBgkqhkiG9w0BAQsFAAOC
|
||||||
|
AQEAPrvbFxbS8hQBICw4g0utvsqFepq2m2um4fylOqyttCg6r9cBg0krY6LdmmQOmFxv3Y67ilQi
|
||||||
|
LUoT865AQ9tPkbeGGuwAtEGBpE/6aouIs3YIcipJQMPTw4WJmBClnW8Zt7vPemVV2zfrPIpyMpce
|
||||||
|
mik+rY3moxtt9XUa5rBouVui7mlHJzWhhpmA8zNL4WukJsPvdFlseqJkth5Ew1DgDzk9qTPxpfPS
|
||||||
|
vWKErI4cqc1avTc7bgoitPQV55FYxTpE05Uo2cBl6XLK0A+9H7MV2anjpEcJnuDLN/v9vZfVvhga
|
||||||
|
aaI5gdka9at/yOPiZwud9AzqVN/Ssq+xIvEg37xEHA==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
SecureSign Root CA14
|
||||||
|
====================
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIFcjCCA1qgAwIBAgIUZNtaDCBO6Ncpd8hQJ6JaJ90t8sswDQYJKoZIhvcNAQEMBQAwUTELMAkG
|
||||||
|
A1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBMdGQuMR0wGwYDVQQDExRT
|
||||||
|
ZWN1cmVTaWduIFJvb3QgQ0ExNDAeFw0yMDA0MDgwNzA2MTlaFw00NTA0MDgwNzA2MTlaMFExCzAJ
|
||||||
|
BgNVBAYTAkpQMSMwIQYDVQQKExpDeWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMU
|
||||||
|
U2VjdXJlU2lnbiBSb290IENBMTQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDF0nqh
|
||||||
|
1oq/FjHQmNE6lPxauG4iwWL3pwon71D2LrGeaBLwbCRjOfHw3xDG3rdSINVSW0KZnvOgvlIfX8xn
|
||||||
|
bacuUKLBl422+JX1sLrcneC+y9/3OPJH9aaakpUqYllQC6KxNedlsmGy6pJxaeQp8E+BgQQ8sqVb
|
||||||
|
1MWoWWd7VRxJq3qdwudzTe/NCcLEVxLbAQ4jeQkHO6Lo/IrPj8BGJJw4J+CDnRugv3gVEOuGTgpa
|
||||||
|
/d/aLIJ+7sr2KeH6caH3iGicnPCNvg9JkdjqOvn90Ghx2+m1K06Ckm9mH+Dw3EzsytHqunQG+bOE
|
||||||
|
kJTRX45zGRBdAuVwpcAQ0BB8b8VYSbSwbprafZX1zNoCr7gsfXmPvkPx+SgojQlD+Ajda8iLLCSx
|
||||||
|
jVIHvXiby8posqTdDEx5YMaZ0ZPxMBoH064iwurO8YQJzOAUbn8/ftKChazcqRZOhaBgy/ac18iz
|
||||||
|
ju3Gm5h1DVXoX+WViwKkrkMpKBGk5hIwAUt1ax5mnXkvpXYvHUC0bcl9eQjs0Wq2XSqypWa9a4X0
|
||||||
|
dFbD9ed1Uigspf9mR6XU/v6eVL9lfgHWMI+lNpyiUBzuOIABSMbHdPTGrMNASRZhdCyvjG817XsY
|
||||||
|
AFs2PJxQDcqSMxDxJklt33UkN4Ii1+iW/RVLApY+B3KVfqs9TC7XyvDf4Fg/LS8EmjijAQIDAQAB
|
||||||
|
o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUBpOjCl4oaTeq
|
||||||
|
YR3r6/wtbyPk86AwDQYJKoZIhvcNAQEMBQADggIBAJaAcgkGfpzMkwQWu6A6jZJOtxEaCnFxEM0E
|
||||||
|
rX+lRVAQZk5KQaID2RFPeje5S+LGjzJmdSX7684/AykmjbgWHfYfM25I5uj4V7Ibed87hwriZLoA
|
||||||
|
ymzvftAj63iP/2SbNDefNWWipAA9EiOWWF3KY4fGoweITedpdopTzfFP7ELyk+OZpDc8h7hi2/Ds
|
||||||
|
Hzc/N19DzFGdtfCXwreFamgLRB7lUe6TzktuhsHSDCRZNhqfLJGP4xjblJUK7ZGqDpncllPjYYPG
|
||||||
|
FrojutzdfhrGe0K22VoF3Jpf1d+42kd92jjbrDnVHmtsKheMYc2xbXIBw8MgAGJoFjHVdqqGuw6q
|
||||||
|
nsb58Nn4DSEC5MUoFlkRudlpcyqSeLiSV5sI8jrlL5WwWLdrIBRtFO8KvH7YVdiI2i/6GaX7i+B/
|
||||||
|
OfVyK4XELKzvGUWSTLNhB9xNH27SgRNcmvMSZ4PPmz+Ln52kuaiWA3rF7iDeM9ovnhp6dB7h7sxa
|
||||||
|
OgTdsxoEqBRjrLdHEoOabPXm6RUVkRqEGQ6UROcSjiVbgGcZ3GOTEAtlLor6CZpO2oYofaphNdgO
|
||||||
|
pygau1LgePhsumywbrmHXumZNTfxPWQrqaA0k89jL9WB365jJ6UeTo3cKXhZ+PmhIIynJkBugnLN
|
||||||
|
eLLIjzwec+fBH7/PzqUqm9tEZDKgu39cJRNItX+S
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
SecureSign Root CA15
|
||||||
|
====================
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICIzCCAamgAwIBAgIUFhXHw9hJp75pDIqI7fBw+d23PocwCgYIKoZIzj0EAwMwUTELMAkGA1UE
|
||||||
|
BhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBMdGQuMR0wGwYDVQQDExRTZWN1
|
||||||
|
cmVTaWduIFJvb3QgQ0ExNTAeFw0yMDA0MDgwODMyNTZaFw00NTA0MDgwODMyNTZaMFExCzAJBgNV
|
||||||
|
BAYTAkpQMSMwIQYDVQQKExpDeWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2Vj
|
||||||
|
dXJlU2lnbiBSb290IENBMTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQLUHSNZDKZmbPSYAi4Io5G
|
||||||
|
dCx4wCtELW1fHcmuS1Iggz24FG1Th2CeX2yF2wYUleDHKP+dX+Sq8bOLbe1PL0vJSpSRZHX+AezB
|
||||||
|
2Ot6lHhWGENfa4HL9rzatAy2KZMIaY+jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
|
||||||
|
AgEGMB0GA1UdDgQWBBTrQciu/NWeUUj1vYv0hyCTQSvT9DAKBggqhkjOPQQDAwNoADBlAjEA2S6J
|
||||||
|
fl5OpBEHvVnCB96rMjhTKkZEBhd6zlHp4P9mLQlO4E/0BdGF9jVg3PVys0Z9AjBEmEYagoUeYWmJ
|
||||||
|
SwdLZrWeqrqgHkHZAXQ6bkU6iYAZezKYVWOr62Nuk22rGwlgMU4=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"description": "The Kirby core",
|
"description": "The Kirby core",
|
||||||
"license": "proprietary",
|
"license": "proprietary",
|
||||||
"type": "kirby-cms",
|
"type": "kirby-cms",
|
||||||
"version": "4.1.1",
|
"version": "4.5.0",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"kirby",
|
"kirby",
|
||||||
"cms",
|
"cms",
|
||||||
@@ -37,16 +37,16 @@
|
|||||||
"ext-mbstring": "*",
|
"ext-mbstring": "*",
|
||||||
"ext-openssl": "*",
|
"ext-openssl": "*",
|
||||||
"christian-riesen/base32": "1.6.0",
|
"christian-riesen/base32": "1.6.0",
|
||||||
"claviska/simpleimage": "4.0.6",
|
"claviska/simpleimage": "4.2.0",
|
||||||
"composer/semver": "3.4.0",
|
"composer/semver": "3.4.3",
|
||||||
"filp/whoops": "2.15.4",
|
"filp/whoops": "2.16.0",
|
||||||
"getkirby/composer-installer": "^1.2.1",
|
"getkirby/composer-installer": "^1.2.1",
|
||||||
"laminas/laminas-escaper": "2.13.0",
|
"laminas/laminas-escaper": "2.14.0",
|
||||||
"michelf/php-smartypants": "1.8.1",
|
"michelf/php-smartypants": "1.8.1",
|
||||||
"phpmailer/phpmailer": "6.9.1",
|
"phpmailer/phpmailer": "6.9.2",
|
||||||
"symfony/polyfill-intl-idn": "1.28.0",
|
"symfony/polyfill-intl-idn": "1.31.0",
|
||||||
"symfony/polyfill-mbstring": "1.28.0",
|
"symfony/polyfill-mbstring": "1.31.0",
|
||||||
"symfony/yaml": "6.4.0"
|
"symfony/yaml": "6.4.13"
|
||||||
},
|
},
|
||||||
"replace": {
|
"replace": {
|
||||||
"symfony/polyfill-php72": "*"
|
"symfony/polyfill-php72": "*"
|
||||||
|
|||||||
193
kirby/composer.lock
generated
193
kirby/composer.lock
generated
@@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "198d5d56dcbb8ba4ff42a1cb4a2630bc",
|
"content-hash": "f12b026f0a6ca67dc1bd0072f607d1eb",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "christian-riesen/base32",
|
"name": "christian-riesen/base32",
|
||||||
@@ -67,16 +67,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "claviska/simpleimage",
|
"name": "claviska/simpleimage",
|
||||||
"version": "4.0.6",
|
"version": "4.2.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/claviska/SimpleImage.git",
|
"url": "https://github.com/claviska/SimpleImage.git",
|
||||||
"reference": "969de5e61810ef91f6f83c475b192c4841367dfa"
|
"reference": "dfbe53c01dae8467468ef2b817c09b786a7839d2"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/claviska/SimpleImage/zipball/969de5e61810ef91f6f83c475b192c4841367dfa",
|
"url": "https://api.github.com/repos/claviska/SimpleImage/zipball/dfbe53c01dae8467468ef2b817c09b786a7839d2",
|
||||||
"reference": "969de5e61810ef91f6f83c475b192c4841367dfa",
|
"reference": "dfbe53c01dae8467468ef2b817c09b786a7839d2",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -108,7 +108,7 @@
|
|||||||
"description": "A PHP class that makes working with images as simple as possible.",
|
"description": "A PHP class that makes working with images as simple as possible.",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/claviska/SimpleImage/issues",
|
"issues": "https://github.com/claviska/SimpleImage/issues",
|
||||||
"source": "https://github.com/claviska/SimpleImage/tree/4.0.6"
|
"source": "https://github.com/claviska/SimpleImage/tree/4.2.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -116,28 +116,28 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-07-27T16:48:12+00:00"
|
"time": "2024-04-15T16:07:16+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "composer/semver",
|
"name": "composer/semver",
|
||||||
"version": "3.4.0",
|
"version": "3.4.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/composer/semver.git",
|
"url": "https://github.com/composer/semver.git",
|
||||||
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32"
|
"reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32",
|
"url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
|
||||||
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32",
|
"reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^5.3.2 || ^7.0 || ^8.0"
|
"php": "^5.3.2 || ^7.0 || ^8.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpstan/phpstan": "^1.4",
|
"phpstan/phpstan": "^1.11",
|
||||||
"symfony/phpunit-bridge": "^4.2 || ^5"
|
"symfony/phpunit-bridge": "^3 || ^7"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
@@ -181,7 +181,7 @@
|
|||||||
"support": {
|
"support": {
|
||||||
"irc": "ircs://irc.libera.chat:6697/composer",
|
"irc": "ircs://irc.libera.chat:6697/composer",
|
||||||
"issues": "https://github.com/composer/semver/issues",
|
"issues": "https://github.com/composer/semver/issues",
|
||||||
"source": "https://github.com/composer/semver/tree/3.4.0"
|
"source": "https://github.com/composer/semver/tree/3.4.3"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -197,30 +197,30 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-08-31T09:50:34+00:00"
|
"time": "2024-09-19T14:15:21+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "filp/whoops",
|
"name": "filp/whoops",
|
||||||
"version": "2.15.4",
|
"version": "2.16.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/filp/whoops.git",
|
"url": "https://github.com/filp/whoops.git",
|
||||||
"reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546"
|
"reference": "befcdc0e5dce67252aa6322d82424be928214fa2"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546",
|
"url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2",
|
||||||
"reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546",
|
"reference": "befcdc0e5dce67252aa6322d82424be928214fa2",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^5.5.9 || ^7.0 || ^8.0",
|
"php": "^7.1 || ^8.0",
|
||||||
"psr/log": "^1.0.1 || ^2.0 || ^3.0"
|
"psr/log": "^1.0.1 || ^2.0 || ^3.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"mockery/mockery": "^0.9 || ^1.0",
|
"mockery/mockery": "^1.0",
|
||||||
"phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3",
|
"phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3",
|
||||||
"symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0"
|
"symfony/var-dumper": "^4.0 || ^5.0"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"symfony/var-dumper": "Pretty print complex values better with var-dumper available",
|
"symfony/var-dumper": "Pretty print complex values better with var-dumper available",
|
||||||
@@ -260,7 +260,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/filp/whoops/issues",
|
"issues": "https://github.com/filp/whoops/issues",
|
||||||
"source": "https://github.com/filp/whoops/tree/2.15.4"
|
"source": "https://github.com/filp/whoops/tree/2.16.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -268,7 +268,7 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-11-03T12:00:00+00:00"
|
"time": "2024-09-25T12:00:00+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "getkirby/composer-installer",
|
"name": "getkirby/composer-installer",
|
||||||
@@ -319,33 +319,33 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laminas/laminas-escaper",
|
"name": "laminas/laminas-escaper",
|
||||||
"version": "2.13.0",
|
"version": "2.14.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/laminas/laminas-escaper.git",
|
"url": "https://github.com/laminas/laminas-escaper.git",
|
||||||
"reference": "af459883f4018d0f8a0c69c7a209daef3bf973ba"
|
"reference": "0f7cb975f4443cf22f33408925c231225cfba8cb"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/af459883f4018d0f8a0c69c7a209daef3bf973ba",
|
"url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/0f7cb975f4443cf22f33408925c231225cfba8cb",
|
||||||
"reference": "af459883f4018d0f8a0c69c7a209daef3bf973ba",
|
"reference": "0f7cb975f4443cf22f33408925c231225cfba8cb",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-ctype": "*",
|
"ext-ctype": "*",
|
||||||
"ext-mbstring": "*",
|
"ext-mbstring": "*",
|
||||||
"php": "~8.1.0 || ~8.2.0 || ~8.3.0"
|
"php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"zendframework/zend-escaper": "*"
|
"zendframework/zend-escaper": "*"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"infection/infection": "^0.27.0",
|
"infection/infection": "^0.27.9",
|
||||||
"laminas/laminas-coding-standard": "~2.5.0",
|
"laminas/laminas-coding-standard": "~3.0.0",
|
||||||
"maglnet/composer-require-checker": "^3.8.0",
|
"maglnet/composer-require-checker": "^3.8.0",
|
||||||
"phpunit/phpunit": "^9.6.7",
|
"phpunit/phpunit": "^9.6.16",
|
||||||
"psalm/plugin-phpunit": "^0.18.4",
|
"psalm/plugin-phpunit": "^0.19.0",
|
||||||
"vimeo/psalm": "^5.9"
|
"vimeo/psalm": "^5.21.1"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -377,7 +377,7 @@
|
|||||||
"type": "community_bridge"
|
"type": "community_bridge"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-10-10T08:35:13+00:00"
|
"time": "2024-10-24T10:12:53+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "league/color-extractor",
|
"name": "league/color-extractor",
|
||||||
@@ -496,16 +496,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpmailer/phpmailer",
|
"name": "phpmailer/phpmailer",
|
||||||
"version": "v6.9.1",
|
"version": "v6.9.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||||
"reference": "039de174cd9c17a8389754d3b877a2ed22743e18"
|
"reference": "a7b17b42fa4887c92146243f3d2f4ccb962af17c"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/039de174cd9c17a8389754d3b877a2ed22743e18",
|
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a7b17b42fa4887c92146243f3d2f4ccb962af17c",
|
||||||
"reference": "039de174cd9c17a8389754d3b877a2ed22743e18",
|
"reference": "a7b17b42fa4887c92146243f3d2f4ccb962af17c",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -565,7 +565,7 @@
|
|||||||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
||||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.1"
|
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.2"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -573,20 +573,20 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-11-25T22:23:28+00:00"
|
"time": "2024-10-09T10:07:50+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/log",
|
"name": "psr/log",
|
||||||
"version": "3.0.0",
|
"version": "3.0.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/log.git",
|
"url": "https://github.com/php-fig/log.git",
|
||||||
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
|
"reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
|
"url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
|
||||||
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
|
"reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -621,22 +621,22 @@
|
|||||||
"psr-3"
|
"psr-3"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/php-fig/log/tree/3.0.0"
|
"source": "https://github.com/php-fig/log/tree/3.0.2"
|
||||||
},
|
},
|
||||||
"time": "2021-07-14T16:46:02+00:00"
|
"time": "2024-09-11T13:17:53+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/deprecation-contracts",
|
"name": "symfony/deprecation-contracts",
|
||||||
"version": "v3.4.0",
|
"version": "v3.5.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/deprecation-contracts.git",
|
"url": "https://github.com/symfony/deprecation-contracts.git",
|
||||||
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf"
|
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf",
|
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
|
||||||
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf",
|
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -645,7 +645,7 @@
|
|||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "3.4-dev"
|
"dev-main": "3.5-dev"
|
||||||
},
|
},
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/contracts",
|
"name": "symfony/contracts",
|
||||||
@@ -674,7 +674,7 @@
|
|||||||
"description": "A generic function and convention to trigger deprecation notices",
|
"description": "A generic function and convention to trigger deprecation notices",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0"
|
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -690,24 +690,24 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-05-23T14:45:45+00:00"
|
"time": "2024-04-18T09:32:20+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-ctype",
|
"name": "symfony/polyfill-ctype",
|
||||||
"version": "v1.28.0",
|
"version": "v1.31.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-ctype.git",
|
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||||
"reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb"
|
"reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb",
|
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
|
||||||
"reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb",
|
"reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1"
|
"php": ">=7.2"
|
||||||
},
|
},
|
||||||
"provide": {
|
"provide": {
|
||||||
"ext-ctype": "*"
|
"ext-ctype": "*"
|
||||||
@@ -717,9 +717,6 @@
|
|||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
|
||||||
"dev-main": "1.28-dev"
|
|
||||||
},
|
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/polyfill",
|
"name": "symfony/polyfill",
|
||||||
"url": "https://github.com/symfony/polyfill"
|
"url": "https://github.com/symfony/polyfill"
|
||||||
@@ -756,7 +753,7 @@
|
|||||||
"portable"
|
"portable"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0"
|
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -772,35 +769,31 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-01-26T09:26:14+00:00"
|
"time": "2024-09-09T11:45:10+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-intl-idn",
|
"name": "symfony/polyfill-intl-idn",
|
||||||
"version": "v1.28.0",
|
"version": "v1.31.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-intl-idn.git",
|
"url": "https://github.com/symfony/polyfill-intl-idn.git",
|
||||||
"reference": "ecaafce9f77234a6a449d29e49267ba10499116d"
|
"reference": "c36586dcf89a12315939e00ec9b4474adcb1d773"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d",
|
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773",
|
||||||
"reference": "ecaafce9f77234a6a449d29e49267ba10499116d",
|
"reference": "c36586dcf89a12315939e00ec9b4474adcb1d773",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1",
|
"php": ">=7.2",
|
||||||
"symfony/polyfill-intl-normalizer": "^1.10",
|
"symfony/polyfill-intl-normalizer": "^1.10"
|
||||||
"symfony/polyfill-php72": "^1.10"
|
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-intl": "For best performance"
|
"ext-intl": "For best performance"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
|
||||||
"dev-main": "1.28-dev"
|
|
||||||
},
|
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/polyfill",
|
"name": "symfony/polyfill",
|
||||||
"url": "https://github.com/symfony/polyfill"
|
"url": "https://github.com/symfony/polyfill"
|
||||||
@@ -843,7 +836,7 @@
|
|||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0"
|
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -859,33 +852,30 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-01-26T09:30:37+00:00"
|
"time": "2024-09-09T11:45:10+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-intl-normalizer",
|
"name": "symfony/polyfill-intl-normalizer",
|
||||||
"version": "v1.28.0",
|
"version": "v1.31.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
|
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
|
||||||
"reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92"
|
"reference": "3833d7255cc303546435cb650316bff708a1c75c"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
|
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
|
||||||
"reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
|
"reference": "3833d7255cc303546435cb650316bff708a1c75c",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1"
|
"php": ">=7.2"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-intl": "For best performance"
|
"ext-intl": "For best performance"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
|
||||||
"dev-main": "1.28-dev"
|
|
||||||
},
|
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/polyfill",
|
"name": "symfony/polyfill",
|
||||||
"url": "https://github.com/symfony/polyfill"
|
"url": "https://github.com/symfony/polyfill"
|
||||||
@@ -927,7 +917,7 @@
|
|||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0"
|
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -943,24 +933,24 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-01-26T09:26:14+00:00"
|
"time": "2024-09-09T11:45:10+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-mbstring",
|
"name": "symfony/polyfill-mbstring",
|
||||||
"version": "v1.28.0",
|
"version": "v1.31.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||||
"reference": "42292d99c55abe617799667f454222c54c60e229"
|
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229",
|
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
|
||||||
"reference": "42292d99c55abe617799667f454222c54c60e229",
|
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1"
|
"php": ">=7.2"
|
||||||
},
|
},
|
||||||
"provide": {
|
"provide": {
|
||||||
"ext-mbstring": "*"
|
"ext-mbstring": "*"
|
||||||
@@ -970,9 +960,6 @@
|
|||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
|
||||||
"dev-main": "1.28-dev"
|
|
||||||
},
|
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/polyfill",
|
"name": "symfony/polyfill",
|
||||||
"url": "https://github.com/symfony/polyfill"
|
"url": "https://github.com/symfony/polyfill"
|
||||||
@@ -1010,7 +997,7 @@
|
|||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0"
|
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1026,20 +1013,20 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-07-28T09:04:16+00:00"
|
"time": "2024-09-09T11:45:10+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/yaml",
|
"name": "symfony/yaml",
|
||||||
"version": "v6.4.0",
|
"version": "v6.4.13",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/yaml.git",
|
"url": "https://github.com/symfony/yaml.git",
|
||||||
"reference": "4f9237a1bb42455d609e6687d2613dde5b41a587"
|
"reference": "e99b4e94d124b29ee4cf3140e1b537d2dad8cec9"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/yaml/zipball/4f9237a1bb42455d609e6687d2613dde5b41a587",
|
"url": "https://api.github.com/repos/symfony/yaml/zipball/e99b4e94d124b29ee4cf3140e1b537d2dad8cec9",
|
||||||
"reference": "4f9237a1bb42455d609e6687d2613dde5b41a587",
|
"reference": "e99b4e94d124b29ee4cf3140e1b537d2dad8cec9",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -1082,7 +1069,7 @@
|
|||||||
"description": "Loads and dumps YAML files",
|
"description": "Loads and dumps YAML files",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/yaml/tree/v6.4.0"
|
"source": "https://github.com/symfony/yaml/tree/v6.4.13"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1098,7 +1085,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-11-06T11:00:25+00:00"
|
"time": "2024-09-25T14:18:03+00:00"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packages-dev": [],
|
"packages-dev": [],
|
||||||
|
|||||||
@@ -1,14 +1,22 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
// routing pattern to match all models with files
|
// routing pattern to match all models with files
|
||||||
$filePattern = '(account/|pages/[^/]+/|site/|users/[^/]+/|)files/(:any)';
|
$filePattern = '(account/|pages/[^/]+/|site/|users/[^/]+/|)files/(:any)';
|
||||||
$parentPattern = '(account|pages/[^/]+|site|users/[^/]+)/files';
|
$parentPattern = '(account|pages/[^/]+|site|users/[^/]+)/files';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Files Routes
|
* Files Routes
|
||||||
*/
|
*/
|
||||||
return [
|
return [
|
||||||
|
[
|
||||||
|
'pattern' => $filePattern . '/fields/(:any)/(:all?)',
|
||||||
|
'method' => 'ALL',
|
||||||
|
'action' => function (string $parent, string $filename, string $fieldName, string|null $path = null) {
|
||||||
|
if ($file = $this->file($parent, $filename)) {
|
||||||
|
return $this->fieldApi($file, $fieldName, $path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'pattern' => $filePattern . '/sections/(:any)',
|
'pattern' => $filePattern . '/sections/(:any)',
|
||||||
'method' => 'GET',
|
'method' => 'GET',
|
||||||
@@ -17,11 +25,11 @@ return [
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'pattern' => $filePattern . '/fields/(:any)/(:all?)',
|
'pattern' => $filePattern . '/sections/(:any)/(:all?)',
|
||||||
'method' => 'ALL',
|
'method' => 'ALL',
|
||||||
'action' => function (string $parent, string $filename, string $fieldName, string $path = null) {
|
'action' => function (string $parent, string $filename, string $sectionName, string|null $path = null) {
|
||||||
if ($file = $this->file($parent, $filename)) {
|
if ($file = $this->file($parent, $filename)) {
|
||||||
return $this->fieldApi($file, $fieldName, $path);
|
return $this->sectionApi($file, $sectionName, $path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -39,17 +47,15 @@ return [
|
|||||||
// move_uploaded_file() not working with unit test
|
// move_uploaded_file() not working with unit test
|
||||||
// @codeCoverageIgnoreStart
|
// @codeCoverageIgnoreStart
|
||||||
return $this->upload(function ($source, $filename) use ($path) {
|
return $this->upload(function ($source, $filename) use ($path) {
|
||||||
$props = [
|
// move the source file from the temp dir
|
||||||
|
return $this->parent($path)->createFile([
|
||||||
'content' => [
|
'content' => [
|
||||||
'sort' => $this->requestBody('sort')
|
'sort' => $this->requestBody('sort')
|
||||||
],
|
],
|
||||||
'source' => $source,
|
'source' => $source,
|
||||||
'template' => $this->requestBody('template'),
|
'template' => $this->requestBody('template'),
|
||||||
'filename' => $filename
|
'filename' => $filename
|
||||||
];
|
], true);
|
||||||
|
|
||||||
// move the source file from the temp dir
|
|
||||||
return $this->parent($path)->createFile($props, true);
|
|
||||||
});
|
});
|
||||||
// @codeCoverageIgnoreEnd
|
// @codeCoverageIgnoreEnd
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,8 @@
|
|||||||
/**
|
/**
|
||||||
* Page Routes
|
* Page Routes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
[
|
[
|
||||||
'pattern' => 'pages/(:any)',
|
'pattern' => 'pages/(:any)',
|
||||||
'method' => 'GET',
|
'method' => 'GET',
|
||||||
@@ -101,6 +100,15 @@ return [
|
|||||||
return $this->page($id)->changeTitle($this->requestBody('title'));
|
return $this->page($id)->changeTitle($this->requestBody('title'));
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'pattern' => 'pages/(:any)/fields/(:any)/(:all?)',
|
||||||
|
'method' => 'ALL',
|
||||||
|
'action' => function (string $id, string $fieldName, string|null $path = null) {
|
||||||
|
if ($page = $this->page($id)) {
|
||||||
|
return $this->fieldApi($page, $fieldName, $path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'pattern' => 'pages/(:any)/sections/(:any)',
|
'pattern' => 'pages/(:any)/sections/(:any)',
|
||||||
'method' => 'GET',
|
'method' => 'GET',
|
||||||
@@ -109,12 +117,13 @@ return [
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'pattern' => 'pages/(:any)/fields/(:any)/(:all?)',
|
'pattern' => 'pages/(:any)/sections/(:any)/(:all?)',
|
||||||
'method' => 'ALL',
|
'method' => 'ALL',
|
||||||
'action' => function (string $id, string $fieldName, string $path = null) {
|
'action' => function (string $id, string $sectionName, string|null $path = null) {
|
||||||
if ($page = $this->page($id)) {
|
if ($page = $this->page($id)) {
|
||||||
return $this->fieldApi($page, $fieldName, $path);
|
return $this->sectionApi($page, $sectionName, $path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
// @codeCoverageIgnoreEnd
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
* Site Routes
|
* Site Routes
|
||||||
*/
|
*/
|
||||||
return [
|
return [
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
[
|
[
|
||||||
'pattern' => 'site',
|
'pattern' => 'site',
|
||||||
'action' => function () {
|
'action' => function () {
|
||||||
@@ -84,6 +84,13 @@ return [
|
|||||||
return $pages->query($this->requestBody());
|
return $pages->query($this->requestBody());
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'pattern' => 'site/fields/(:any)/(:all?)',
|
||||||
|
'method' => 'ALL',
|
||||||
|
'action' => function (string $fieldName, string|null $path = null) {
|
||||||
|
return $this->fieldApi($this->site(), $fieldName, $path);
|
||||||
|
}
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'pattern' => 'site/sections/(:any)',
|
'pattern' => 'site/sections/(:any)',
|
||||||
'method' => 'GET',
|
'method' => 'GET',
|
||||||
@@ -92,11 +99,11 @@ return [
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'pattern' => 'site/fields/(:any)/(:all?)',
|
'pattern' => 'site/sections/(:any)/(:all?)',
|
||||||
'method' => 'ALL',
|
'method' => 'ALL',
|
||||||
'action' => function (string $fieldName, string $path = null) {
|
'action' => function (string $sectionName, string|null $path = null) {
|
||||||
return $this->fieldApi($this->site(), $fieldName, $path);
|
return $this->sectionApi($this->site(), $sectionName, $path);
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
// @codeCoverageIgnoreEnd
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -31,6 +31,18 @@ return [
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'pattern' => 'system/method-test',
|
||||||
|
'method' => 'PATCH',
|
||||||
|
'action' => function () {
|
||||||
|
return [
|
||||||
|
'status' => match ($this->kirby()->request()->method()) {
|
||||||
|
'PATCH' => 'ok',
|
||||||
|
default => 'fail'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'pattern' => 'system/register',
|
'pattern' => 'system/register',
|
||||||
'method' => 'POST',
|
'method' => 'POST',
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ use Kirby\Toolkit\Str;
|
|||||||
* User Routes
|
* User Routes
|
||||||
*/
|
*/
|
||||||
return [
|
return [
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
[
|
[
|
||||||
'pattern' => 'users',
|
'pattern' => 'users',
|
||||||
'method' => 'GET',
|
'method' => 'GET',
|
||||||
@@ -202,7 +203,19 @@ return [
|
|||||||
'users/(:any)/roles',
|
'users/(:any)/roles',
|
||||||
],
|
],
|
||||||
'action' => function (string $id) {
|
'action' => function (string $id) {
|
||||||
return $this->user($id)->roles();
|
$kirby = $this->kirby();
|
||||||
|
$purpose = $kirby->request()->get('purpose');
|
||||||
|
return $this->user($id)->roles($purpose);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'pattern' => [
|
||||||
|
'(account)/fields/(:any)/(:all?)',
|
||||||
|
'users/(:any)/fields/(:any)/(:all?)',
|
||||||
|
],
|
||||||
|
'method' => 'ALL',
|
||||||
|
'action' => function (string $id, string $fieldName, string|null $path = null) {
|
||||||
|
return $this->fieldApi($this->user($id), $fieldName, $path);
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@@ -219,12 +232,13 @@ return [
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'pattern' => [
|
'pattern' => [
|
||||||
'(account)/fields/(:any)/(:all?)',
|
'(account)/sections/(:any)/(:all?)',
|
||||||
'users/(:any)/fields/(:any)/(:all?)',
|
'users/(:any)/sections/(:any)/(:all?)',
|
||||||
],
|
],
|
||||||
'method' => 'ALL',
|
'method' => 'ALL',
|
||||||
'action' => function (string $id, string $fieldName, string $path = null) {
|
'action' => function (string $id, string $sectionName, string|null $path = null) {
|
||||||
return $this->fieldApi($this->user($id), $fieldName, $path);
|
return $this->sectionApi($this->user($id), $sectionName, $path);
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
// @codeCoverageIgnoreEnd
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -109,6 +109,16 @@ return [
|
|||||||
$props = $example->props();
|
$props = $example->props();
|
||||||
$vue = $example->vue();
|
$vue = $example->vue();
|
||||||
|
|
||||||
|
if (Docs::installed() === true && $docs = $props['docs'] ?? null) {
|
||||||
|
$docs = new Docs($docs);
|
||||||
|
}
|
||||||
|
|
||||||
|
$github = $docs?->github();
|
||||||
|
|
||||||
|
if ($source = $props['source'] ?? null) {
|
||||||
|
$github ??= 'https://github.com/getkirby/kirby/tree/main/' . $source;
|
||||||
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'component' => 'k-lab-playground-view',
|
'component' => 'k-lab-playground-view',
|
||||||
'breadcrumb' => [
|
'breadcrumb' => [
|
||||||
@@ -121,10 +131,10 @@ return [
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
'props' => [
|
'props' => [
|
||||||
'docs' => $props['docs'] ?? null,
|
'docs' => $docs?->name(),
|
||||||
'examples' => $vue['examples'],
|
'examples' => $vue['examples'],
|
||||||
'file' => $example->module(),
|
'file' => $example->module(),
|
||||||
'github' => $example->github(),
|
'github' => $github,
|
||||||
'props' => $props,
|
'props' => $props,
|
||||||
'styles' => $vue['style'],
|
'styles' => $vue['style'],
|
||||||
'tab' => $example->tab(),
|
'tab' => $example->tab(),
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ return [
|
|||||||
},
|
},
|
||||||
'submit' => function (string $languageCode, string $translationKey) {
|
'submit' => function (string $languageCode, string $translationKey) {
|
||||||
Find::language($languageCode)->variable($translationKey, true)->update(
|
Find::language($languageCode)->variable($translationKey, true)->update(
|
||||||
App::instance()->request()->get('value')
|
App::instance()->request()->get('value', '')
|
||||||
);
|
);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -12,12 +12,17 @@ return [
|
|||||||
return App::instance()->option('languages.variables', true) !== false;
|
return App::instance()->option('languages.variables', true) !== false;
|
||||||
},
|
},
|
||||||
'action' => function (string $code) {
|
'action' => function (string $code) {
|
||||||
|
$kirby = App::instance();
|
||||||
$language = Find::language($code);
|
$language = Find::language($code);
|
||||||
$link = '/languages/' . $language->code();
|
$link = '/languages/' . $language->code();
|
||||||
$strings = [];
|
$strings = [];
|
||||||
$foundation = App::instance()->defaultLanguage()->translations();
|
$foundation = $kirby->defaultLanguage()->translations();
|
||||||
$translations = $language->translations();
|
$translations = $language->translations();
|
||||||
|
|
||||||
|
// TODO: update following line and adapt for update and delete options
|
||||||
|
// when new `languageVariables.*` permissions available
|
||||||
|
$canUpdate = $kirby->user()?->role()->permissions()->for('languages', 'update') === true;
|
||||||
|
|
||||||
ksort($foundation);
|
ksort($foundation);
|
||||||
|
|
||||||
foreach ($foundation as $key => $value) {
|
foreach ($foundation as $key => $value) {
|
||||||
@@ -26,13 +31,14 @@ return [
|
|||||||
'value' => $translations[$key] ?? null,
|
'value' => $translations[$key] ?? null,
|
||||||
'options' => [
|
'options' => [
|
||||||
[
|
[
|
||||||
'click' => 'update',
|
'click' => 'update',
|
||||||
'icon' => 'edit',
|
'disabled' => $canUpdate === false,
|
||||||
'text' => I18n::translate('edit'),
|
'icon' => 'edit',
|
||||||
|
'text' => I18n::translate('edit'),
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'click' => 'delete',
|
'click' => 'delete',
|
||||||
'disabled' => $language->isDefault() === false,
|
'disabled' => $canUpdate === false || $language->isDefault() === false,
|
||||||
'icon' => 'trash',
|
'icon' => 'trash',
|
||||||
'text' => I18n::translate('delete'),
|
'text' => I18n::translate('delete'),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -3,12 +3,14 @@
|
|||||||
use Kirby\Toolkit\I18n;
|
use Kirby\Toolkit\I18n;
|
||||||
|
|
||||||
return function ($kirby) {
|
return function ($kirby) {
|
||||||
|
$blueprint = $kirby->site()->blueprint();
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'breadcrumbLabel' => function () use ($kirby) {
|
'breadcrumbLabel' => function () use ($kirby) {
|
||||||
return $kirby->site()->title()->or(I18n::translate('view.site'))->toString();
|
return $kirby->site()->title()->or(I18n::translate('view.site'))->toString();
|
||||||
},
|
},
|
||||||
'icon' => 'home',
|
'icon' => $blueprint->icon() ?? 'home',
|
||||||
'label' => $kirby->site()->blueprint()->title() ?? I18n::translate('view.site'),
|
'label' => $blueprint->title() ?? I18n::translate('view.site'),
|
||||||
'menu' => true,
|
'menu' => true,
|
||||||
'dialogs' => require __DIR__ . '/site/dialogs.php',
|
'dialogs' => require __DIR__ . '/site/dialogs.php',
|
||||||
'drawers' => require __DIR__ . '/site/drawers.php',
|
'drawers' => require __DIR__ . '/site/drawers.php',
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
use Kirby\Cms\App;
|
use Kirby\Cms\App;
|
||||||
use Kirby\Cms\Find;
|
use Kirby\Cms\Find;
|
||||||
use Kirby\Cms\PageRules;
|
use Kirby\Cms\PageRules;
|
||||||
|
use Kirby\Cms\Url;
|
||||||
use Kirby\Exception\Exception;
|
use Kirby\Exception\Exception;
|
||||||
use Kirby\Exception\InvalidArgumentException;
|
use Kirby\Exception\InvalidArgumentException;
|
||||||
use Kirby\Exception\PermissionException;
|
use Kirby\Exception\PermissionException;
|
||||||
@@ -194,12 +195,23 @@ return [
|
|||||||
'page.changeTitle' => [
|
'page.changeTitle' => [
|
||||||
'pattern' => 'pages/(:any)/changeTitle',
|
'pattern' => 'pages/(:any)/changeTitle',
|
||||||
'load' => function (string $id) {
|
'load' => function (string $id) {
|
||||||
$request = App::instance()->request();
|
$kirby = App::instance();
|
||||||
|
$request = $kirby->request();
|
||||||
|
|
||||||
$page = Find::page($id);
|
$page = Find::page($id);
|
||||||
$permissions = $page->permissions();
|
$permissions = $page->permissions();
|
||||||
$select = $request->get('select', 'title');
|
$select = $request->get('select', 'title');
|
||||||
|
|
||||||
|
// build the path prefix
|
||||||
|
$path = match ($kirby->multilang()) {
|
||||||
|
true => Str::after($kirby->site()->url(), $kirby->url()) . '/',
|
||||||
|
false => '/'
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($parent = $page->parent()) {
|
||||||
|
$path .= $parent->uri() . '/';
|
||||||
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'component' => 'k-form-dialog',
|
'component' => 'k-form-dialog',
|
||||||
'props' => [
|
'props' => [
|
||||||
@@ -212,7 +224,7 @@ return [
|
|||||||
'slug' => Field::slug([
|
'slug' => Field::slug([
|
||||||
'required' => true,
|
'required' => true,
|
||||||
'preselect' => $select === 'slug',
|
'preselect' => $select === 'slug',
|
||||||
'path' => $page->parent() ? '/' . $page->parent()->uri() . '/' : '/',
|
'path' => $path,
|
||||||
'disabled' => $permissions->can('changeSlug') === false,
|
'disabled' => $permissions->can('changeSlug') === false,
|
||||||
'wizard' => [
|
'wizard' => [
|
||||||
'text' => I18n::translate('page.changeSlug.fromTitle'),
|
'text' => I18n::translate('page.changeSlug.fromTitle'),
|
||||||
@@ -420,7 +432,7 @@ return [
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
$slugAppendix = Str::slug(I18n::translate('page.duplicate.appendix'));
|
$slugAppendix = Url::slug(I18n::translate('page.duplicate.appendix'));
|
||||||
$titleAppendix = I18n::translate('page.duplicate.appendix');
|
$titleAppendix = I18n::translate('page.duplicate.appendix');
|
||||||
|
|
||||||
// if the item to be duplicated already exists
|
// if the item to be duplicated already exists
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ use Kirby\Cms\Find;
|
|||||||
use Kirby\Toolkit\I18n;
|
use Kirby\Toolkit\I18n;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
|
// TODO: move to controller class and add unit tests
|
||||||
'tree' => [
|
'tree' => [
|
||||||
'pattern' => 'site/tree',
|
'pattern' => 'site/tree',
|
||||||
'action' => function () {
|
'action' => function () {
|
||||||
@@ -62,5 +64,27 @@ return [
|
|||||||
|
|
||||||
return $pages;
|
return $pages;
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
'tree.parents' => [
|
||||||
|
'pattern' => 'site/tree/parents',
|
||||||
|
'action' => function () {
|
||||||
|
$kirby = App::instance();
|
||||||
|
$request = $kirby->request();
|
||||||
|
$root = $request->get('root');
|
||||||
|
$page = $kirby->page($request->get('page'));
|
||||||
|
$parents = $page?->parents()->flip()->values(
|
||||||
|
fn ($parent) => $parent->uuid()?->toString() ?? $parent->id()
|
||||||
|
) ?? [];
|
||||||
|
|
||||||
|
// if root is included, add the site as top-level parent
|
||||||
|
if ($root === 'true') {
|
||||||
|
array_unshift($parents, $kirby->site()->uuid()?->toString() ?? '/');
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'data' => $parents
|
||||||
|
];
|
||||||
|
}
|
||||||
]
|
]
|
||||||
|
// @codeCoverageIgnoreEnd
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ return [
|
|||||||
'text' => Escape::html($page->title()->value()),
|
'text' => Escape::html($page->title()->value()),
|
||||||
'link' => $page->panel()->url(true),
|
'link' => $page->panel()->url(true),
|
||||||
'info' => Escape::html($page->id()),
|
'info' => Escape::html($page->id()),
|
||||||
'uuid' => $page->uuid()->toString(),
|
'uuid' => $page->uuid()?->toString(),
|
||||||
]),
|
]),
|
||||||
'pagination' => $pages->pagination()->toArray()
|
'pagination' => $pages->pagination()->toArray()
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ return [
|
|||||||
'props' => [
|
'props' => [
|
||||||
'environment' => $environment,
|
'environment' => $environment,
|
||||||
'exceptions' => $kirby->option('debug') === true ? $exceptions : [],
|
'exceptions' => $kirby->option('debug') === true ? $exceptions : [],
|
||||||
|
'info' => $system->info(),
|
||||||
'plugins' => $plugins,
|
'plugins' => $plugins,
|
||||||
'security' => $security,
|
'security' => $security,
|
||||||
'urls' => [
|
'urls' => [
|
||||||
|
|||||||
@@ -20,12 +20,19 @@ return [
|
|||||||
'pattern' => 'users/create',
|
'pattern' => 'users/create',
|
||||||
'load' => function () {
|
'load' => function () {
|
||||||
$kirby = App::instance();
|
$kirby = App::instance();
|
||||||
|
$roles = $kirby->roles()->canBeCreated();
|
||||||
|
|
||||||
// get default value for role
|
// get default value for role
|
||||||
if ($role = $kirby->request()->get('role')) {
|
if ($role = $kirby->request()->get('role')) {
|
||||||
$role = $kirby->roles()->find($role)?->id();
|
$role = $roles->find($role)?->id();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get role field definition, incl. available role options
|
||||||
|
$roles = Field::role(
|
||||||
|
roles: $roles,
|
||||||
|
props: ['required' => true]
|
||||||
|
);
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'component' => 'k-form-dialog',
|
'component' => 'k-form-dialog',
|
||||||
'props' => [
|
'props' => [
|
||||||
@@ -39,9 +46,7 @@ return [
|
|||||||
'translation' => Field::translation([
|
'translation' => Field::translation([
|
||||||
'required' => true
|
'required' => true
|
||||||
]),
|
]),
|
||||||
'role' => Field::role([
|
'role' => $roles
|
||||||
'required' => true
|
|
||||||
])
|
|
||||||
],
|
],
|
||||||
'submitButton' => I18n::translate('create'),
|
'submitButton' => I18n::translate('create'),
|
||||||
'value' => [
|
'value' => [
|
||||||
@@ -49,7 +54,7 @@ return [
|
|||||||
'email' => '',
|
'email' => '',
|
||||||
'password' => '',
|
'password' => '',
|
||||||
'translation' => $kirby->panelLanguage(),
|
'translation' => $kirby->panelLanguage(),
|
||||||
'role' => $role ?? $kirby->user()->role()->name()
|
'role' => $role ?? $roles['options'][0]['value'] ?? null
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
@@ -228,10 +233,13 @@ return [
|
|||||||
'component' => 'k-form-dialog',
|
'component' => 'k-form-dialog',
|
||||||
'props' => [
|
'props' => [
|
||||||
'fields' => [
|
'fields' => [
|
||||||
'role' => Field::role([
|
'role' => Field::role(
|
||||||
'label' => I18n::translate('user.changeRole.select'),
|
roles: $user->roles(),
|
||||||
'required' => true,
|
props: [
|
||||||
])
|
'label' => I18n::translate('user.changeRole.select'),
|
||||||
|
'required' => true,
|
||||||
|
]
|
||||||
|
)
|
||||||
],
|
],
|
||||||
'submitButton' => I18n::translate('user.changeRole'),
|
'submitButton' => I18n::translate('user.changeRole'),
|
||||||
'value' => [
|
'value' => [
|
||||||
|
|||||||
@@ -18,7 +18,8 @@ return [
|
|||||||
return [
|
return [
|
||||||
'component' => 'k-users-view',
|
'component' => 'k-users-view',
|
||||||
'props' => [
|
'props' => [
|
||||||
'role' => function () use ($kirby, $roles, $role) {
|
'canCreate' => $kirby->roles()->canBeCreated()->count() > 0,
|
||||||
|
'role' => function () use ($roles, $role) {
|
||||||
if ($role) {
|
if ($role) {
|
||||||
return $roles[$role] ?? null;
|
return $roles[$role] ?? null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,12 +2,31 @@
|
|||||||
use Kirby\Cms\Html;
|
use Kirby\Cms\Html;
|
||||||
|
|
||||||
/** @var \Kirby\Cms\Block $block */
|
/** @var \Kirby\Cms\Block $block */
|
||||||
|
$caption = $block->caption();
|
||||||
|
|
||||||
|
if (
|
||||||
|
$block->location() == 'kirby' &&
|
||||||
|
$video = $block->video()->toFile()
|
||||||
|
) {
|
||||||
|
$url = $video->url();
|
||||||
|
$attrs = array_filter([
|
||||||
|
'autoplay' => $block->autoplay()->toBool(),
|
||||||
|
'controls' => $block->controls()->toBool(),
|
||||||
|
'loop' => $block->loop()->toBool(),
|
||||||
|
'muted' => $block->muted()->toBool() || $block->autoplay()->toBool(),
|
||||||
|
'playsinline' => $block->autoplay()->toBool(),
|
||||||
|
'poster' => $block->poster()->toFile()?->url(),
|
||||||
|
'preload' => $block->preload()->value(),
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
$url = $block->url();
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
<?php if ($video = Html::video($block->url())): ?>
|
<?php if ($video = Html::video($url, [], $attrs ?? [])): ?>
|
||||||
<figure>
|
<figure>
|
||||||
<?= $video ?>
|
<?= $video ?>
|
||||||
<?php if ($block->caption()->isNotEmpty()): ?>
|
<?php if ($caption->isNotEmpty()): ?>
|
||||||
<figcaption><?= $block->caption() ?></figcaption>
|
<figcaption><?= $caption ?></figcaption>
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
</figure>
|
</figure>
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
|
|||||||
@@ -2,11 +2,77 @@ name: field.blocks.video.name
|
|||||||
icon: video
|
icon: video
|
||||||
preview: video
|
preview: video
|
||||||
fields:
|
fields:
|
||||||
|
location:
|
||||||
|
label: field.blocks.video.location
|
||||||
|
type: radio
|
||||||
|
columns: 2
|
||||||
|
default: "web"
|
||||||
|
options:
|
||||||
|
kirby: "{{ t('field.blocks.image.location.internal') }}"
|
||||||
|
web: "{{ t('field.blocks.image.location.external') }}"
|
||||||
url:
|
url:
|
||||||
label: field.blocks.video.url.label
|
label: field.blocks.video.url.label
|
||||||
type: url
|
type: url
|
||||||
placeholder: field.blocks.video.url.placeholder
|
placeholder: field.blocks.video.url.placeholder
|
||||||
|
when:
|
||||||
|
location: web
|
||||||
|
video:
|
||||||
|
label: field.blocks.video.name
|
||||||
|
type: files
|
||||||
|
query: model.videos
|
||||||
|
multiple: false
|
||||||
|
# you might want to add a template for videos here
|
||||||
|
when:
|
||||||
|
location: kirby
|
||||||
|
poster:
|
||||||
|
label: field.blocks.video.poster
|
||||||
|
type: files
|
||||||
|
query: model.images
|
||||||
|
multiple: false
|
||||||
|
image:
|
||||||
|
back: black
|
||||||
|
uploads:
|
||||||
|
template: blocks/image
|
||||||
|
when:
|
||||||
|
location: kirby
|
||||||
caption:
|
caption:
|
||||||
label: field.blocks.video.caption
|
label: field.blocks.video.caption
|
||||||
type: writer
|
type: writer
|
||||||
inline: true
|
inline: true
|
||||||
|
autoplay:
|
||||||
|
label: field.blocks.video.autoplay
|
||||||
|
type: toggle
|
||||||
|
width: 1/3
|
||||||
|
when:
|
||||||
|
location: kirby
|
||||||
|
muted:
|
||||||
|
label: field.blocks.video.muted
|
||||||
|
type: toggle
|
||||||
|
width: 1/3
|
||||||
|
default: true
|
||||||
|
when:
|
||||||
|
location: kirby
|
||||||
|
loop:
|
||||||
|
label: field.blocks.video.loop
|
||||||
|
type: toggle
|
||||||
|
width: 1/3
|
||||||
|
when:
|
||||||
|
location: kirby
|
||||||
|
controls:
|
||||||
|
label: field.blocks.video.controls
|
||||||
|
type: toggle
|
||||||
|
width: 1/3
|
||||||
|
default: true
|
||||||
|
when:
|
||||||
|
location: kirby
|
||||||
|
preload:
|
||||||
|
label: field.blocks.video.preload
|
||||||
|
type: select
|
||||||
|
width: 2/3
|
||||||
|
default: auto
|
||||||
|
options:
|
||||||
|
- auto
|
||||||
|
- metadata
|
||||||
|
- none
|
||||||
|
when:
|
||||||
|
location: kirby
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
use Kirby\Toolkit\I18n;
|
use Kirby\Toolkit\I18n;
|
||||||
use Kirby\Toolkit\Str;
|
use Kirby\Toolkit\Str;
|
||||||
|
use Kirby\Uuid\Uuids;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'props' => [
|
'props' => [
|
||||||
@@ -75,7 +76,11 @@ return [
|
|||||||
* @param string $store 'uuid'|'id'
|
* @param string $store 'uuid'|'id'
|
||||||
*/
|
*/
|
||||||
'store' => function (string $store = 'uuid') {
|
'store' => function (string $store = 'uuid') {
|
||||||
return Str::lower($store);
|
// fall back to ID, if UUIDs globally disabled
|
||||||
|
return match (Uuids::enabled()) {
|
||||||
|
false => 'id',
|
||||||
|
default => Str::lower($store)
|
||||||
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -23,7 +23,11 @@ return [
|
|||||||
$uploads = [];
|
$uploads = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$uploads['accept'] = '*';
|
$uploads['accept'] = '*';
|
||||||
|
|
||||||
|
if ($preview = $this->image) {
|
||||||
|
$uploads['preview'] = $preview;
|
||||||
|
}
|
||||||
|
|
||||||
if ($template = $uploads['template'] ?? null) {
|
if ($template = $uploads['template'] ?? null) {
|
||||||
// get parent object for upload target
|
// get parent object for upload target
|
||||||
@@ -39,7 +43,7 @@ return [
|
|||||||
'template' => $template
|
'template' => $template
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$uploads['accept'] = $file->blueprint()->acceptMime();
|
$uploads['accept'] = $file->blueprint()->acceptAttribute();
|
||||||
}
|
}
|
||||||
|
|
||||||
return $uploads;
|
return $uploads;
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Kirby\Toolkit\I18n;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'extends' => 'number',
|
'extends' => 'number',
|
||||||
'props' => [
|
'props' => [
|
||||||
@@ -18,6 +20,13 @@ return [
|
|||||||
* Enables/disables the tooltip and set the before and after values
|
* Enables/disables the tooltip and set the before and after values
|
||||||
*/
|
*/
|
||||||
'tooltip' => function ($tooltip = true) {
|
'tooltip' => function ($tooltip = true) {
|
||||||
|
if (is_array($tooltip) === true) {
|
||||||
|
$after = $tooltip['after'] ?? null;
|
||||||
|
$before = $tooltip['before'] ?? null;
|
||||||
|
$tooltip['after'] = I18n::translate($after, $after);
|
||||||
|
$tooltip['before'] = I18n::translate($before, $before);
|
||||||
|
}
|
||||||
|
|
||||||
return $tooltip;
|
return $tooltip;
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -63,7 +63,14 @@ return [
|
|||||||
'computed' => [
|
'computed' => [
|
||||||
'value' => function () {
|
'value' => function () {
|
||||||
$value = trim($this->value ?? '');
|
$value = trim($this->value ?? '');
|
||||||
return Sane::sanitize($value, 'html');
|
$value = Sane::sanitize($value, 'html');
|
||||||
|
|
||||||
|
// convert non-breaking spaces to HTML entity
|
||||||
|
// as that's how ProseMirror handles it internally;
|
||||||
|
// will allow comparing saved and current content
|
||||||
|
$value = str_replace(' ', ' ', $value);
|
||||||
|
|
||||||
|
return $value;
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
'validations' => [
|
'validations' => [
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ if (Helpers::hasOverride('deprecated') === false) { // @codeCoverageIgnore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Helpers::hasOverride('dump') === false) { // @codeCoverageIgnore
|
if (Helpers::hasOverride('dump') === false && function_exists('dump') === false) { // @codeCoverageIgnore
|
||||||
/**
|
/**
|
||||||
* Simple object and variable dumper
|
* Simple object and variable dumper
|
||||||
* to help with debugging.
|
* to help with debugging.
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ return function (App $app) {
|
|||||||
$files = new Files([]);
|
$files = new Files([]);
|
||||||
|
|
||||||
foreach ($field->toData($separator) as $id) {
|
foreach ($field->toData($separator) as $id) {
|
||||||
if ($file = $parent->kirby()->file($id, $parent)) {
|
if (is_string($id) === true && $file = $parent->kirby()->file($id, $parent)) {
|
||||||
$files->add($file);
|
$files->add($file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -481,10 +481,9 @@ return function (App $app) {
|
|||||||
|
|
||||||
foreach ($elements as $element) {
|
foreach ($elements as $element) {
|
||||||
foreach ($attributes as $attribute) {
|
foreach ($attributes as $attribute) {
|
||||||
if ($element->hasAttribute($attribute) && $url = $element->getAttribute($attribute)) {
|
if ($element->hasAttribute($attribute) && $uuid = $element->getAttribute($attribute)) {
|
||||||
try {
|
try {
|
||||||
if ($uuid = Uuid::for($url)) {
|
if ($url = Uuid::for($uuid)?->model()?->url()) {
|
||||||
$url = $uuid->model()?->url();
|
|
||||||
$element->setAttribute($attribute, $url);
|
$element->setAttribute($attribute, $url);
|
||||||
}
|
}
|
||||||
} catch (InvalidArgumentException) {
|
} catch (InvalidArgumentException) {
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ return function ($props) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (empty($sidebar) === true) {
|
if (empty($sidebar) === true) {
|
||||||
$props['fields'] = $props['fields'] ?? [];
|
$props['fields'] ??= [];
|
||||||
|
|
||||||
unset(
|
unset(
|
||||||
$props['files'],
|
$props['files'],
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ return function (array $props) {
|
|||||||
|
|
||||||
// inject the global templates definition
|
// inject the global templates definition
|
||||||
if (empty($templates) === false) {
|
if (empty($templates) === false) {
|
||||||
$props['templates'] = $props['templates'] ?? $templates;
|
$props['templates'] ??= $templates;
|
||||||
}
|
}
|
||||||
|
|
||||||
return array_replace_recursive($defaults, $props);
|
return array_replace_recursive($defaults, $props);
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ return [
|
|||||||
'template' => $this->template
|
'template' => $this->template
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return $file->blueprint()->acceptMime();
|
return $file->blueprint()->acceptAttribute();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@@ -194,6 +194,7 @@ return [
|
|||||||
'multiple' => $multiple,
|
'multiple' => $multiple,
|
||||||
'max' => $max,
|
'max' => $max,
|
||||||
'api' => $this->parent->apiUrl(true) . '/files',
|
'api' => $this->parent->apiUrl(true) . '/files',
|
||||||
|
'preview' => $this->image,
|
||||||
'attributes' => [
|
'attributes' => [
|
||||||
// TODO: an edge issue that needs to be solved:
|
// TODO: an edge issue that needs to be solved:
|
||||||
// if multiple users load the same section
|
// if multiple users load the same section
|
||||||
@@ -205,13 +206,31 @@ return [
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
|
'api' => function () {
|
||||||
|
return [
|
||||||
|
[
|
||||||
|
'pattern' => 'sort',
|
||||||
|
'method' => 'PATCH',
|
||||||
|
'action' => function () {
|
||||||
|
$this->section()->model()->files()->changeSort(
|
||||||
|
$this->requestBody('files'),
|
||||||
|
$this->requestBody('index')
|
||||||
|
);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
]
|
||||||
|
];
|
||||||
|
},
|
||||||
|
// @codeCoverageIgnoreEnd
|
||||||
'toArray' => function () {
|
'toArray' => function () {
|
||||||
return [
|
return [
|
||||||
'data' => $this->data,
|
'data' => $this->data,
|
||||||
'errors' => $this->errors,
|
'errors' => $this->errors,
|
||||||
'options' => [
|
'options' => [
|
||||||
'accept' => $this->accept,
|
'accept' => $this->accept,
|
||||||
'apiUrl' => $this->parent->apiUrl(true),
|
'apiUrl' => $this->parent->apiUrl(true) . '/sections/' . $this->name,
|
||||||
'columns' => $this->columnsWithTypes(),
|
'columns' => $this->columnsWithTypes(),
|
||||||
'empty' => $this->empty,
|
'empty' => $this->empty,
|
||||||
'headline' => $this->headline,
|
'headline' => $this->headline,
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Kirby\Cms\ModelWithContent;
|
use Kirby\Cms\ModelWithContent;
|
||||||
|
use Kirby\Form\Form;
|
||||||
use Kirby\Toolkit\I18n;
|
use Kirby\Toolkit\I18n;
|
||||||
use Kirby\Toolkit\Str;
|
use Kirby\Toolkit\Str;
|
||||||
|
|
||||||
@@ -20,6 +21,14 @@ return [
|
|||||||
$layouts = ['list', 'cardlets', 'cards', 'table'];
|
$layouts = ['list', 'cardlets', 'cards', 'table'];
|
||||||
return in_array($layout, $layouts) ? $layout : 'list';
|
return in_array($layout, $layouts) ? $layout : 'list';
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* Whether the raw content file values should be used for the table column previews. Should not be used unless it eases performance issues in your setup introduced with Kirby 4.2
|
||||||
|
*
|
||||||
|
* @todo remove when Form classes have been refactored
|
||||||
|
*/
|
||||||
|
'rawvalues' => function (bool $rawvalues = false) {
|
||||||
|
return $rawvalues;
|
||||||
|
},
|
||||||
/**
|
/**
|
||||||
* The size option controls the size of cards. By default cards are auto-sized and the cards grid will always fill the full width. With a size you can disable auto-sizing. Available sizes: `tiny`, `small`, `medium`, `large`, `huge`, `full`
|
* The size option controls the size of cards. By default cards are auto-sized and the cards grid will always fill the full width. With a size you can disable auto-sizing. Available sizes: `tiny`, `small`, `medium`, `large`, `huge`, `full`
|
||||||
*/
|
*/
|
||||||
@@ -77,9 +86,12 @@ return [
|
|||||||
// keep the original column name as id
|
// keep the original column name as id
|
||||||
$column['id'] = $columnName;
|
$column['id'] = $columnName;
|
||||||
|
|
||||||
// add the custom column to the array with a key that won't
|
// add the custom column to the array
|
||||||
// override the system columns
|
// allowing to extend/overwrite existing columns
|
||||||
$columns[$columnName . 'Cell'] = $column;
|
$columns[$columnName] = [
|
||||||
|
...$columns[$columnName] ?? [],
|
||||||
|
...$column
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->type === 'pages') {
|
if ($this->type === 'pages') {
|
||||||
@@ -129,19 +141,35 @@ return [
|
|||||||
$item['info'] = $model->toString($this->info);
|
$item['info'] = $model->toString($this->info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if forcing raw values, get those directly from content file
|
||||||
|
// TODO: remove once Form classes have been refactored
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
|
if ($this->rawvalues === true) {
|
||||||
|
foreach ($this->columns as $columnName => $column) {
|
||||||
|
$item[$columnName] = match (empty($column['value'])) {
|
||||||
|
// if column value defined, resolve the query
|
||||||
|
false => $model->toString($column['value']),
|
||||||
|
// otherwise use the form value,
|
||||||
|
// but don't overwrite columns
|
||||||
|
default => $item[$columnName] ?? $model->content()->get($column['id'] ?? $columnName)->value()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return $item;
|
||||||
|
}
|
||||||
|
// @codeCoverageIgnoreEnd
|
||||||
|
|
||||||
|
// Use form to get the proper values for the columns
|
||||||
|
$form = Form::for($model)->values();
|
||||||
|
|
||||||
foreach ($this->columns as $columnName => $column) {
|
foreach ($this->columns as $columnName => $column) {
|
||||||
// don't overwrite essential columns
|
$item[$columnName] = match (empty($column['value'])) {
|
||||||
if (isset($item[$columnName]) === true) {
|
// if column value defined, resolve the query
|
||||||
continue;
|
false => $model->toString($column['value']),
|
||||||
}
|
// otherwise use the form value,
|
||||||
|
// but don't overwrite columns
|
||||||
if (empty($column['value']) === false) {
|
default => $item[$columnName] ?? $form[$column['id'] ?? $columnName] ?? null
|
||||||
$value = $model->toString($column['value']);
|
};
|
||||||
} else {
|
|
||||||
$value = $model->content()->get($column['id'] ?? $columnName)->value();
|
|
||||||
}
|
|
||||||
|
|
||||||
$item[$columnName] = $value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $item;
|
return $item;
|
||||||
|
|||||||
@@ -232,11 +232,39 @@ return [
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_array($this->status, ['draft', 'all']) === false) {
|
if ($this->isFull() === true) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->isFull() === true) {
|
// form here on, we need to check with which status
|
||||||
|
// the pages are created and if the section can show
|
||||||
|
// these newly created pages
|
||||||
|
|
||||||
|
// if the section shows pages no matter what status they have,
|
||||||
|
// we can always show the add button
|
||||||
|
if ($this->status === 'all') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// collect all statuses of the blueprints
|
||||||
|
// that are allowed to be created
|
||||||
|
$statuses = [];
|
||||||
|
|
||||||
|
foreach ($this->blueprintNames() as $blueprint) {
|
||||||
|
try {
|
||||||
|
$props = Blueprint::load('pages/' . $blueprint);
|
||||||
|
$statuses[] = $props['create']['status'] ?? 'draft';
|
||||||
|
} catch (Throwable) {
|
||||||
|
$statuses[] = 'draft'; // @codeCoverageIgnore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$statuses = array_unique($statuses);
|
||||||
|
|
||||||
|
// if there are multiple statuses or if the section is showing
|
||||||
|
// a different status than new pages would be created with,
|
||||||
|
// we cannot show the add button
|
||||||
|
if (count($statuses) > 1 || $this->status !== $statuses[0]) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -249,22 +277,12 @@ return [
|
|||||||
'methods' => [
|
'methods' => [
|
||||||
'blueprints' => function () {
|
'blueprints' => function () {
|
||||||
$blueprints = [];
|
$blueprints = [];
|
||||||
$templates = empty($this->create) === false ? A::wrap($this->create) : $this->templates;
|
|
||||||
|
|
||||||
if (empty($templates) === true) {
|
|
||||||
$templates = $this->kirby()->blueprints();
|
|
||||||
}
|
|
||||||
|
|
||||||
// excludes ignored templates
|
|
||||||
if ($templatesIgnore = $this->templatesIgnore) {
|
|
||||||
$templates = array_diff($templates, $templatesIgnore);
|
|
||||||
}
|
|
||||||
|
|
||||||
// convert every template to a usable option array
|
// convert every template to a usable option array
|
||||||
// for the template select box
|
// for the template select box
|
||||||
foreach ($templates as $template) {
|
foreach ($this->blueprintNames() as $blueprint) {
|
||||||
try {
|
try {
|
||||||
$props = Blueprint::load('pages/' . $template);
|
$props = Blueprint::load('pages/' . $blueprint);
|
||||||
|
|
||||||
$blueprints[] = [
|
$blueprints[] = [
|
||||||
'name' => basename($props['name']),
|
'name' => basename($props['name']),
|
||||||
@@ -272,14 +290,28 @@ return [
|
|||||||
];
|
];
|
||||||
} catch (Throwable) {
|
} catch (Throwable) {
|
||||||
$blueprints[] = [
|
$blueprints[] = [
|
||||||
'name' => basename($template),
|
'name' => basename($blueprint),
|
||||||
'title' => ucfirst($template),
|
'title' => ucfirst($blueprint),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $blueprints;
|
return $blueprints;
|
||||||
}
|
},
|
||||||
|
'blueprintNames' => function () {
|
||||||
|
$blueprints = empty($this->create) === false ? A::wrap($this->create) : $this->templates;
|
||||||
|
|
||||||
|
if (empty($blueprints) === true) {
|
||||||
|
$blueprints = $this->kirby()->blueprints();
|
||||||
|
}
|
||||||
|
|
||||||
|
// excludes ignored templates
|
||||||
|
if ($templatesIgnore = $this->templatesIgnore) {
|
||||||
|
$blueprints = array_diff($blueprints, $templatesIgnore);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $blueprints;
|
||||||
|
},
|
||||||
],
|
],
|
||||||
'toArray' => function () {
|
'toArray' => function () {
|
||||||
return [
|
return [
|
||||||
|
|||||||
@@ -112,6 +112,11 @@ return [
|
|||||||
'width'
|
'width'
|
||||||
],
|
],
|
||||||
'html' => function (KirbyTag $tag): string {
|
'html' => function (KirbyTag $tag): string {
|
||||||
|
$kirby = $tag->kirby();
|
||||||
|
|
||||||
|
$tag->width ??= $kirby->option('kirbytext.image.width');
|
||||||
|
$tag->height ??= $kirby->option('kirbytext.image.height');
|
||||||
|
|
||||||
if ($tag->file = $tag->file($tag->value)) {
|
if ($tag->file = $tag->file($tag->value)) {
|
||||||
$tag->src = $tag->file->url();
|
$tag->src = $tag->file->url();
|
||||||
$tag->alt ??= $tag->file->alt()->or('')->value();
|
$tag->alt ??= $tag->file->alt()->or('')->value();
|
||||||
@@ -129,6 +134,13 @@ return [
|
|||||||
|
|
||||||
$tag->srcset = $tag->file->srcset($srcset);
|
$tag->srcset = $tag->file->srcset($srcset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($tag->width === 'auto') {
|
||||||
|
$tag->width = $tag->file->width();
|
||||||
|
}
|
||||||
|
if ($tag->height === 'auto') {
|
||||||
|
$tag->height = $tag->file->height();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$tag->src = Url::to($tag->value);
|
$tag->src = Url::to($tag->value);
|
||||||
}
|
}
|
||||||
@@ -157,14 +169,14 @@ return [
|
|||||||
'alt' => $tag->alt ?? ''
|
'alt' => $tag->alt ?? ''
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if ($tag->kirby()->option('kirbytext.image.figure', true) === false) {
|
if ($kirby->option('kirbytext.image.figure', true) === false) {
|
||||||
return $link($image);
|
return $link($image);
|
||||||
}
|
}
|
||||||
|
|
||||||
// render KirbyText in caption
|
// render KirbyText in caption
|
||||||
if ($tag->caption) {
|
if ($tag->caption) {
|
||||||
$options = ['markdown' => ['inline' => true]];
|
$options = ['markdown' => ['inline' => true]];
|
||||||
$caption = $tag->kirby()->kirbytext($tag->caption, $options);
|
$caption = $kirby->kirbytext($tag->caption, $options);
|
||||||
$tag->caption = [$caption];
|
$tag->caption = [$caption];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,6 +264,7 @@ return [
|
|||||||
'caption',
|
'caption',
|
||||||
'controls',
|
'controls',
|
||||||
'class',
|
'class',
|
||||||
|
'disablepictureinpicture',
|
||||||
'height',
|
'height',
|
||||||
'loop',
|
'loop',
|
||||||
'muted',
|
'muted',
|
||||||
@@ -294,12 +307,15 @@ return [
|
|||||||
|
|
||||||
// don't use attributes that iframe doesn't support
|
// don't use attributes that iframe doesn't support
|
||||||
if ($isProviderVideo === false) {
|
if ($isProviderVideo === false) {
|
||||||
// converts tag attributes to supported formats (listed below) to output correct html
|
// convert tag attributes to supported formats (bool, string)
|
||||||
// booleans: autoplay, controls, loop, muted
|
// to output correct html attributes
|
||||||
// strings : poster, preload
|
//
|
||||||
// for ex : `autoplay` will not work if `false` is a `string` instead of a `boolean`
|
// for ex:
|
||||||
|
// `autoplay` will not work if `false` is a string
|
||||||
|
// instead of a boolean
|
||||||
$attrs['autoplay'] = $autoplay = Str::toType($tag->autoplay, 'bool');
|
$attrs['autoplay'] = $autoplay = Str::toType($tag->autoplay, 'bool');
|
||||||
$attrs['controls'] = Str::toType($tag->controls ?? true, 'bool');
|
$attrs['controls'] = Str::toType($tag->controls ?? true, 'bool');
|
||||||
|
$attrs['disablepictureinpicture'] = Str::toType($tag->disablepictureinpicture ?? false, 'bool');
|
||||||
$attrs['loop'] = Str::toType($tag->loop, 'bool');
|
$attrs['loop'] = Str::toType($tag->loop, 'bool');
|
||||||
$attrs['muted'] = Str::toType($tag->muted ?? $autoplay, 'bool');
|
$attrs['muted'] = Str::toType($tag->muted ?? $autoplay, 'bool');
|
||||||
$attrs['playsinline'] = Str::toType($tag->playsinline ?? $autoplay, 'bool');
|
$attrs['playsinline'] = Str::toType($tag->playsinline ?? $autoplay, 'bool');
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Формата не може да бъде запазена",
|
"error.form.notSaved": "Формата не може да бъде запазена",
|
||||||
|
|
||||||
"error.language.code": "Please enter a valid code for the language",
|
"error.language.code": "Please enter a valid code for the language",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "The language already exists",
|
"error.language.duplicate": "The language already exists",
|
||||||
"error.language.name": "Please enter a valid name for the language",
|
"error.language.name": "Please enter a valid name for the language",
|
||||||
"error.language.notFound": "The language could not be found",
|
"error.language.notFound": "The language could not be found",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "There's an error in layout {index} settings",
|
"error.layout.validation.settings": "There's an error in layout {index} settings",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "by …",
|
"field.blocks.quote.citation.placeholder": "by …",
|
||||||
"field.blocks.text.name": "Text",
|
"field.blocks.text.name": "Text",
|
||||||
"field.blocks.text.placeholder": "Text …",
|
"field.blocks.text.placeholder": "Text …",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Caption",
|
"field.blocks.video.caption": "Caption",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "Location",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Enter a video URL",
|
"field.blocks.video.placeholder": "Enter a video URL",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "Video-URL",
|
"field.blocks.video.url.label": "Video-URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "Изисква се разширението <code>MB String</code>",
|
"installation.issues.mbstring": "Изисква се разширението <code>MB String</code>",
|
||||||
"installation.issues.media": "Папката <code>/media</code> не съществува или няма права за запис",
|
"installation.issues.media": "Папката <code>/media</code> не съществува или няма права за запис",
|
||||||
"installation.issues.php": "Бъдете сигурни, че използвате <code>PHP 8+</code>",
|
"installation.issues.php": "Бъдете сигурни, че използвате <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby изисква <code>Apache</code>, <code>Nginx</code> или <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "The <code>/site/sessions</code> folder does not exist or is not writable",
|
"installation.issues.sessions": "The <code>/site/sessions</code> folder does not exist or is not writable",
|
||||||
|
|
||||||
"language": "\u0415\u0437\u0438\u043a",
|
"language": "\u0415\u0437\u0438\u043a",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "No reports",
|
"stats.empty": "No reports",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "The content folder seems to be exposed",
|
"system.issues.content": "The content folder seems to be exposed",
|
||||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "No s'ha pogut desar el formulari",
|
"error.form.notSaved": "No s'ha pogut desar el formulari",
|
||||||
|
|
||||||
"error.language.code": "Introdueix un codi vàlid per a l’idioma",
|
"error.language.code": "Introdueix un codi vàlid per a l’idioma",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "L'idioma ja existeix",
|
"error.language.duplicate": "L'idioma ja existeix",
|
||||||
"error.language.name": "Introdueix un nom vàlid per a l'idioma",
|
"error.language.name": "Introdueix un nom vàlid per a l'idioma",
|
||||||
"error.language.notFound": "The language could not be found",
|
"error.language.notFound": "The language could not be found",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "There's an error in layout {index} settings",
|
"error.layout.validation.settings": "There's an error in layout {index} settings",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "by …",
|
"field.blocks.quote.citation.placeholder": "by …",
|
||||||
"field.blocks.text.name": "Text",
|
"field.blocks.text.name": "Text",
|
||||||
"field.blocks.text.placeholder": "Text …",
|
"field.blocks.text.placeholder": "Text …",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Caption",
|
"field.blocks.video.caption": "Caption",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "Location",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Enter a video URL",
|
"field.blocks.video.placeholder": "Enter a video URL",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "Video-URL",
|
"field.blocks.video.url.label": "Video-URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "Es requereix l'extensió de <code>MB String</code>",
|
"installation.issues.mbstring": "Es requereix l'extensió de <code>MB String</code>",
|
||||||
"installation.issues.media": "La carpeta <code>/media</code> no existeix o no es pot escriure",
|
"installation.issues.media": "La carpeta <code>/media</code> no existeix o no es pot escriure",
|
||||||
"installation.issues.php": "Assegureu-vos d'utilitzar <code>PHP 8+</code>",
|
"installation.issues.php": "Assegureu-vos d'utilitzar <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby requereix <code>Apache</code>, <code>Nginx</code> o <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "La carpeta <code>/site/sessions</code> no existeix o no es pot escriure",
|
"installation.issues.sessions": "La carpeta <code>/site/sessions</code> no existeix o no es pot escriure",
|
||||||
|
|
||||||
"language": "Idioma",
|
"language": "Idioma",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "No reports",
|
"stats.empty": "No reports",
|
||||||
"status": "Estat",
|
"status": "Estat",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "The content folder seems to be exposed",
|
"system.issues.content": "The content folder seems to be exposed",
|
||||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Formulář nemohl být uložen",
|
"error.form.notSaved": "Formulář nemohl být uložen",
|
||||||
|
|
||||||
"error.language.code": "Zadejte prosím platný kód jazyka",
|
"error.language.code": "Zadejte prosím platný kód jazyka",
|
||||||
|
"error.language.create.permission": "Nemáte dovoleno vytvořit jazyk",
|
||||||
|
"error.language.delete.permission": "Nemáte dovoleno jazyk vymazat",
|
||||||
"error.language.duplicate": "Jazyk již existuje",
|
"error.language.duplicate": "Jazyk již existuje",
|
||||||
"error.language.name": "Zadejte prosím platné jméno jazyka",
|
"error.language.name": "Zadejte prosím platné jméno jazyka",
|
||||||
"error.language.notFound": "Jazyk nebyl nalezen",
|
"error.language.notFound": "Jazyk nebyl nalezen",
|
||||||
|
"error.language.update.permission": "Nemáte dovoleno aktualizovat jazyk",
|
||||||
|
|
||||||
"error.layout.validation.block": "V rozvržení {layoutIndex} je v poli \"{field}\" v bloku {blockIndex} při použití \"{fieldset}\" typu chyba",
|
"error.layout.validation.block": "V rozvržení {layoutIndex} je v poli \"{field}\" v bloku {blockIndex} při použití \"{fieldset}\" typu chyba",
|
||||||
"error.layout.validation.settings": "Chyba v nastavení rozvržení {index}",
|
"error.layout.validation.settings": "Chyba v nastavení rozvržení {index}",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "od …",
|
"field.blocks.quote.citation.placeholder": "od …",
|
||||||
"field.blocks.text.name": "Text",
|
"field.blocks.text.name": "Text",
|
||||||
"field.blocks.text.placeholder": "Text …",
|
"field.blocks.text.placeholder": "Text …",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Titulek",
|
"field.blocks.video.caption": "Titulek",
|
||||||
|
"field.blocks.video.controls": "Ovládání",
|
||||||
|
"field.blocks.video.location": "Umístění",
|
||||||
|
"field.blocks.video.loop": "Smyčka",
|
||||||
|
"field.blocks.video.muted": "Ztlumené",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Zadejte URL adresu videa",
|
"field.blocks.video.placeholder": "Zadejte URL adresu videa",
|
||||||
|
"field.blocks.video.poster": "Náhledový obrázek",
|
||||||
|
"field.blocks.video.preload": "Předběžně načíst",
|
||||||
"field.blocks.video.url.label": "URL adresa videa",
|
"field.blocks.video.url.label": "URL adresa videa",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "Je vyžadováno rozšíření<code>MB String</code>",
|
"installation.issues.mbstring": "Je vyžadováno rozšíření<code>MB String</code>",
|
||||||
"installation.issues.media": "Složka<code>/media</code> neexistuje, nebo nemá povolený zápis",
|
"installation.issues.media": "Složka<code>/media</code> neexistuje, nebo nemá povolený zápis",
|
||||||
"installation.issues.php": "Ujistěte se, že používáte<code>PHP 8+</code>",
|
"installation.issues.php": "Ujistěte se, že používáte<code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby vyžaduje<code>Apache</code>, <code>Nginx</code> nebo<code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "Složka<code>/site/sessions</code> neexistuje, nebo nemá povolený zápis",
|
"installation.issues.sessions": "Složka<code>/site/sessions</code> neexistuje, nebo nemá povolený zápis",
|
||||||
|
|
||||||
"language": "Jazyk",
|
"language": "Jazyk",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Žádná hlášení",
|
"stats.empty": "Žádná hlášení",
|
||||||
"status": "Stav",
|
"status": "Stav",
|
||||||
|
|
||||||
|
"system.info.copy": "Kopírovat informace",
|
||||||
|
"system.info.copied": "Systémové informace zkopírovány",
|
||||||
"system.issues.content": "Složka content je zřejmě přístupná zvenčí",
|
"system.issues.content": "Složka content je zřejmě přístupná zvenčí",
|
||||||
"system.issues.eol.kirby": "Instalovaná verze Kirby dosáhla konce životnosti a nebude již dále dostávat bezpečnostní aktualizace",
|
"system.issues.eol.kirby": "Instalovaná verze Kirby dosáhla konce životnosti a nebude již dále dostávat bezpečnostní aktualizace",
|
||||||
"system.issues.eol.plugin": "Instalovaná verze doplňku { plugin } dosáhla konce životnosti a nebude již dále dostávat bezpečnostní aktualizace",
|
"system.issues.eol.plugin": "Instalovaná verze doplňku { plugin } dosáhla konce životnosti a nebude již dále dostávat bezpečnostní aktualizace",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Formularen kunne ikke gemmes",
|
"error.form.notSaved": "Formularen kunne ikke gemmes",
|
||||||
|
|
||||||
"error.language.code": "Indtast venligst en gyldig kode for sproget",
|
"error.language.code": "Indtast venligst en gyldig kode for sproget",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "Sproget eksisterer allerede",
|
"error.language.duplicate": "Sproget eksisterer allerede",
|
||||||
"error.language.name": "Indtast venligst et gyldigt navn for sproget",
|
"error.language.name": "Indtast venligst et gyldigt navn for sproget",
|
||||||
"error.language.notFound": "Sproget fandtes ikke",
|
"error.language.notFound": "Sproget fandtes ikke",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Der er fejl i layout {index} indstillinger",
|
"error.layout.validation.settings": "Der er fejl i layout {index} indstillinger",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "af …",
|
"field.blocks.quote.citation.placeholder": "af …",
|
||||||
"field.blocks.text.name": "Tekst",
|
"field.blocks.text.name": "Tekst",
|
||||||
"field.blocks.text.placeholder": "Tekst …",
|
"field.blocks.text.placeholder": "Tekst …",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Billedtekst",
|
"field.blocks.video.caption": "Billedtekst",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "Placering",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Indtast URL til en video",
|
"field.blocks.video.placeholder": "Indtast URL til en video",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "Video-URL",
|
"field.blocks.video.url.label": "Video-URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "<code>MB String</code> extension er påkrævet",
|
"installation.issues.mbstring": "<code>MB String</code> extension er påkrævet",
|
||||||
"installation.issues.media": "<code>/media</code> mappen eksisterer ikke eller er ikke skrivbar",
|
"installation.issues.media": "<code>/media</code> mappen eksisterer ikke eller er ikke skrivbar",
|
||||||
"installation.issues.php": "Sikre dig at der benyttes <code>PHP 8+</code>",
|
"installation.issues.php": "Sikre dig at der benyttes <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby kræver <code>Apache</code>, <code>Nginx</code> eller <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "/site/sessions mappen eksisterer ikke eller er ikke skrivbar",
|
"installation.issues.sessions": "/site/sessions mappen eksisterer ikke eller er ikke skrivbar",
|
||||||
|
|
||||||
"language": "Sprog",
|
"language": "Sprog",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "No reports",
|
"stats.empty": "No reports",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "The content folder seems to be exposed",
|
"system.issues.content": "The content folder seems to be exposed",
|
||||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Das Formular konnte nicht gespeichert werden",
|
"error.form.notSaved": "Das Formular konnte nicht gespeichert werden",
|
||||||
|
|
||||||
"error.language.code": "Bitte gib einen gültigen Code für die Sprache an",
|
"error.language.code": "Bitte gib einen gültigen Code für die Sprache an",
|
||||||
|
"error.language.create.permission": "Du darfst keine Sprache anlegen",
|
||||||
|
"error.language.delete.permission": "Du darfst diese Sprache nicht löschen",
|
||||||
"error.language.duplicate": "Die Sprache besteht bereits",
|
"error.language.duplicate": "Die Sprache besteht bereits",
|
||||||
"error.language.name": "Bitte gib einen gültigen Namen für die Sprache an",
|
"error.language.name": "Bitte gib einen gültigen Namen für die Sprache an",
|
||||||
"error.language.notFound": "Die Sprache konnte nicht gefunden werden",
|
"error.language.notFound": "Die Sprache konnte nicht gefunden werden",
|
||||||
|
"error.language.update.permission": "Du darfst diese Sprache nicht bearbeiten",
|
||||||
|
|
||||||
"error.layout.validation.block": "Fehler im \"{field}\" Feld in Block {blockIndex} mit dem Blocktyp \"{fieldset}\" in Layout {layoutIndex}",
|
"error.layout.validation.block": "Fehler im \"{field}\" Feld in Block {blockIndex} mit dem Blocktyp \"{fieldset}\" in Layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Fehler in den Einstellungen von Layout {index}",
|
"error.layout.validation.settings": "Fehler in den Einstellungen von Layout {index}",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "Quelle …",
|
"field.blocks.quote.citation.placeholder": "Quelle …",
|
||||||
"field.blocks.text.name": "Text",
|
"field.blocks.text.name": "Text",
|
||||||
"field.blocks.text.placeholder": "Text …",
|
"field.blocks.text.placeholder": "Text …",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Bildunterschrift",
|
"field.blocks.video.caption": "Bildunterschrift",
|
||||||
|
"field.blocks.video.controls": "Steuerung",
|
||||||
|
"field.blocks.video.location": "Ort",
|
||||||
|
"field.blocks.video.loop": "Schleife",
|
||||||
|
"field.blocks.video.muted": "Stumm",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Video-URL eingeben",
|
"field.blocks.video.placeholder": "Video-URL eingeben",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Vorladen",
|
||||||
"field.blocks.video.url.label": "Video-URL",
|
"field.blocks.video.url.label": "Video-URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "Die <code>MB String</code> Erweiterung wird benötigt",
|
"installation.issues.mbstring": "Die <code>MB String</code> Erweiterung wird benötigt",
|
||||||
"installation.issues.media": "Der <code>/media</code> Ordner ist nicht beschreibbar",
|
"installation.issues.media": "Der <code>/media</code> Ordner ist nicht beschreibbar",
|
||||||
"installation.issues.php": "Bitte verwende <code>PHP 8+</code>",
|
"installation.issues.php": "Bitte verwende <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby benötigt <code>Apache</code>, <code>Nginx</code> or <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "<code>/site/sessions</code> ist nicht beschreibbar",
|
"installation.issues.sessions": "<code>/site/sessions</code> ist nicht beschreibbar",
|
||||||
|
|
||||||
"language": "Sprache",
|
"language": "Sprache",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Keine Daten",
|
"stats.empty": "Keine Daten",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|
||||||
|
"system.info.copy": "Info kopieren",
|
||||||
|
"system.info.copied": "System Info wurde kopiert",
|
||||||
"system.issues.content": "Der content Ordner scheint öffentlich zugänglich zu sein",
|
"system.issues.content": "Der content Ordner scheint öffentlich zugänglich zu sein",
|
||||||
"system.issues.eol.kirby": "Deine Kirby Installation ist veraltet und erhält keine weiteren Sicherheitsupdates",
|
"system.issues.eol.kirby": "Deine Kirby Installation ist veraltet und erhält keine weiteren Sicherheitsupdates",
|
||||||
"system.issues.eol.plugin": "Deine Version des { plugin } Plugins ist veraltet und erhält keine weiteren Sicherheitsupdates",
|
"system.issues.eol.plugin": "Deine Version des { plugin } Plugins ist veraltet und erhält keine weiteren Sicherheitsupdates",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Δεν ήταν δυνατή η αποθήκευση της φόρμας",
|
"error.form.notSaved": "Δεν ήταν δυνατή η αποθήκευση της φόρμας",
|
||||||
|
|
||||||
"error.language.code": "Please enter a valid code for the language",
|
"error.language.code": "Please enter a valid code for the language",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "The language already exists",
|
"error.language.duplicate": "The language already exists",
|
||||||
"error.language.name": "Please enter a valid name for the language",
|
"error.language.name": "Please enter a valid name for the language",
|
||||||
"error.language.notFound": "The language could not be found",
|
"error.language.notFound": "The language could not be found",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "There's an error in layout {index} settings",
|
"error.layout.validation.settings": "There's an error in layout {index} settings",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "by …",
|
"field.blocks.quote.citation.placeholder": "by …",
|
||||||
"field.blocks.text.name": "Text",
|
"field.blocks.text.name": "Text",
|
||||||
"field.blocks.text.placeholder": "Text …",
|
"field.blocks.text.placeholder": "Text …",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Caption",
|
"field.blocks.video.caption": "Caption",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "Location",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Enter a video URL",
|
"field.blocks.video.placeholder": "Enter a video URL",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "Video-URL",
|
"field.blocks.video.url.label": "Video-URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "Απαιτείται η επέκταση <code>MB String</code> ",
|
"installation.issues.mbstring": "Απαιτείται η επέκταση <code>MB String</code> ",
|
||||||
"installation.issues.media": "Ο φάκελος <code>/media</code> δεν υπάρχει ή δεν είναι εγγράψιμος",
|
"installation.issues.media": "Ο φάκελος <code>/media</code> δεν υπάρχει ή δεν είναι εγγράψιμος",
|
||||||
"installation.issues.php": "Βεβαιωθείτε ότι χρησιμοποιήτε <code>PHP 8+</code>",
|
"installation.issues.php": "Βεβαιωθείτε ότι χρησιμοποιήτε <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "To Kirby απαιτεί <code>Apache</code>, <code>Nginx</code> ή <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "Ο φάκελος <code>/site/sessions</code> δεν υπάρχει ή δεν είναι εγγράψιμος",
|
"installation.issues.sessions": "Ο φάκελος <code>/site/sessions</code> δεν υπάρχει ή δεν είναι εγγράψιμος",
|
||||||
|
|
||||||
"language": "\u0393\u03bb\u03ce\u03c3\u03c3\u03b1",
|
"language": "\u0393\u03bb\u03ce\u03c3\u03c3\u03b1",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "No reports",
|
"stats.empty": "No reports",
|
||||||
"status": "Kατάσταση",
|
"status": "Kατάσταση",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "The content folder seems to be exposed",
|
"system.issues.content": "The content folder seems to be exposed",
|
||||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "The form could not be saved",
|
"error.form.notSaved": "The form could not be saved",
|
||||||
|
|
||||||
"error.language.code": "Please enter a valid code for the language",
|
"error.language.code": "Please enter a valid code for the language",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "The language already exists",
|
"error.language.duplicate": "The language already exists",
|
||||||
"error.language.name": "Please enter a valid name for the language",
|
"error.language.name": "Please enter a valid name for the language",
|
||||||
"error.language.notFound": "The language could not be found",
|
"error.language.notFound": "The language could not be found",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "There's an error in layout {index} settings",
|
"error.layout.validation.settings": "There's an error in layout {index} settings",
|
||||||
@@ -165,6 +168,7 @@
|
|||||||
"error.page.move.ancestor": "The page cannot be moved into itself",
|
"error.page.move.ancestor": "The page cannot be moved into itself",
|
||||||
"error.page.move.directory": "The page directory cannot be moved",
|
"error.page.move.directory": "The page directory cannot be moved",
|
||||||
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists",
|
"error.page.move.duplicate": "A sub page with the URL appendix \"{slug}\" already exists",
|
||||||
|
"error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint",
|
||||||
"error.page.move.notFound": "The moved page could not be found",
|
"error.page.move.notFound": "The moved page could not be found",
|
||||||
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
|
"error.page.move.permission": "You are not allowed to move \"{slug}\"",
|
||||||
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"",
|
"error.page.move.template": "The \"{template}\" template is not accepted as a subpage of \"{parent}\"",
|
||||||
@@ -294,6 +298,9 @@
|
|||||||
"field.blocks.heading.name": "Heading",
|
"field.blocks.heading.name": "Heading",
|
||||||
"field.blocks.heading.text": "Text",
|
"field.blocks.heading.text": "Text",
|
||||||
"field.blocks.heading.placeholder": "Heading …",
|
"field.blocks.heading.placeholder": "Heading …",
|
||||||
|
"field.blocks.figure.back.plain": "Plain",
|
||||||
|
"field.blocks.figure.back.pattern.light": "Pattern (light)",
|
||||||
|
"field.blocks.figure.back.pattern.dark": "Pattern (dark)",
|
||||||
"field.blocks.image.alt": "Alternative text",
|
"field.blocks.image.alt": "Alternative text",
|
||||||
"field.blocks.image.caption": "Caption",
|
"field.blocks.image.caption": "Caption",
|
||||||
"field.blocks.image.crop": "Crop",
|
"field.blocks.image.crop": "Crop",
|
||||||
@@ -317,13 +324,21 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "by …",
|
"field.blocks.quote.citation.placeholder": "by …",
|
||||||
"field.blocks.text.name": "Text",
|
"field.blocks.text.name": "Text",
|
||||||
"field.blocks.text.placeholder": "Text …",
|
"field.blocks.text.placeholder": "Text …",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Caption",
|
"field.blocks.video.caption": "Caption",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "Location",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Enter a video URL",
|
"field.blocks.video.placeholder": "Enter a video URL",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "Video-URL",
|
"field.blocks.video.url.label": "Video-URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
"field.files.empty": "No files selected yet",
|
"field.files.empty": "No files selected yet",
|
||||||
|
"field.files.empty.single": "No file selected yet",
|
||||||
|
|
||||||
"field.layout.change": "Change layout",
|
"field.layout.change": "Change layout",
|
||||||
"field.layout.delete": "Delete layout",
|
"field.layout.delete": "Delete layout",
|
||||||
@@ -335,12 +350,14 @@
|
|||||||
"field.object.empty": "No information yet",
|
"field.object.empty": "No information yet",
|
||||||
|
|
||||||
"field.pages.empty": "No pages selected yet",
|
"field.pages.empty": "No pages selected yet",
|
||||||
|
"field.pages.empty.single": "No page selected yet",
|
||||||
|
|
||||||
"field.structure.delete.confirm": "Do you really want to delete this row?",
|
"field.structure.delete.confirm": "Do you really want to delete this row?",
|
||||||
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
|
"field.structure.delete.confirm.all": "Do you really want to delete all entries?",
|
||||||
"field.structure.empty": "No entries yet",
|
"field.structure.empty": "No entries yet",
|
||||||
|
|
||||||
"field.users.empty": "No users selected yet",
|
"field.users.empty": "No users selected yet",
|
||||||
|
"field.users.empty.single": "No user selected yet",
|
||||||
|
|
||||||
"fields.empty": "No fields yet",
|
"fields.empty": "No fields yet",
|
||||||
|
|
||||||
@@ -379,7 +396,6 @@
|
|||||||
"installation.issues.mbstring": "The <code>MB String</code> extension is required",
|
"installation.issues.mbstring": "The <code>MB String</code> extension is required",
|
||||||
"installation.issues.media": "The <code>/media</code> folder does not exist or is not writable",
|
"installation.issues.media": "The <code>/media</code> folder does not exist or is not writable",
|
||||||
"installation.issues.php": "Make sure to use <code>PHP 8+</code>",
|
"installation.issues.php": "Make sure to use <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby requires <code>Apache</code>, <code>Nginx</code> or <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "The <code>/site/sessions</code> folder does not exist or is not writable",
|
"installation.issues.sessions": "The <code>/site/sessions</code> folder does not exist or is not writable",
|
||||||
|
|
||||||
"language": "Language",
|
"language": "Language",
|
||||||
@@ -589,6 +605,7 @@
|
|||||||
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"search": "Search",
|
"search": "Search",
|
||||||
|
"searching": "Searching",
|
||||||
"search.min": "Enter {min} characters to search",
|
"search.min": "Enter {min} characters to search",
|
||||||
"search.all": "Show all {count} results",
|
"search.all": "Show all {count} results",
|
||||||
"search.results.none": "No results",
|
"search.results.none": "No results",
|
||||||
@@ -611,6 +628,9 @@
|
|||||||
"stats.empty": "No reports",
|
"stats.empty": "No reports",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
|
"system.issues.api.methods": "Your server does not support PATCH requests",
|
||||||
"system.issues.content": "The content folder seems to be exposed",
|
"system.issues.content": "The content folder seems to be exposed",
|
||||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Ne eblis konservi la formularon",
|
"error.form.notSaved": "Ne eblis konservi la formularon",
|
||||||
|
|
||||||
"error.language.code": "Bonvolu entajpi validan kodon por la lingvo",
|
"error.language.code": "Bonvolu entajpi validan kodon por la lingvo",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "La lingvo jam ekzistas",
|
"error.language.duplicate": "La lingvo jam ekzistas",
|
||||||
"error.language.name": "Bonvolu entajpi validan nomon por la lingvo",
|
"error.language.name": "Bonvolu entajpi validan nomon por la lingvo",
|
||||||
"error.language.notFound": "La lingvo ne troveblas",
|
"error.language.notFound": "La lingvo ne troveblas",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Estas eraro en la agordoj de blokaranĝo {index}",
|
"error.layout.validation.settings": "Estas eraro en la agordoj de blokaranĝo {index}",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "de ...",
|
"field.blocks.quote.citation.placeholder": "de ...",
|
||||||
"field.blocks.text.name": "Teksto",
|
"field.blocks.text.name": "Teksto",
|
||||||
"field.blocks.text.placeholder": "Teksto ...",
|
"field.blocks.text.placeholder": "Teksto ...",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Apudskribo",
|
"field.blocks.video.caption": "Apudskribo",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "Loko",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Videâjo",
|
"field.blocks.video.name": "Videâjo",
|
||||||
"field.blocks.video.placeholder": "Entajpi URL de videaĵo",
|
"field.blocks.video.placeholder": "Entajpi URL de videaĵo",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "Video-URL",
|
"field.blocks.video.url.label": "Video-URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "La kromprogramo <code>MB String</code> estas deviga",
|
"installation.issues.mbstring": "La kromprogramo <code>MB String</code> estas deviga",
|
||||||
"installation.issues.media": "La dosierujo <code>/media</code> ne ekzistas, aũ ne estas skribebla",
|
"installation.issues.media": "La dosierujo <code>/media</code> ne ekzistas, aũ ne estas skribebla",
|
||||||
"installation.issues.php": "Nepre uzu <code>PHP 8+</code>",
|
"installation.issues.php": "Nepre uzu <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby bezonas <code>Apache</code>, <code>Nginx</code> aŭ <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "La dosierujo <code>/site/sessions</code> ne ekzistas, aŭ ne estas skribebla",
|
"installation.issues.sessions": "La dosierujo <code>/site/sessions</code> ne ekzistas, aŭ ne estas skribebla",
|
||||||
|
|
||||||
"language": "Lingvo",
|
"language": "Lingvo",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "No reports",
|
"stats.empty": "No reports",
|
||||||
"status": "Stato",
|
"status": "Stato",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "The content folder seems to be exposed",
|
"system.issues.content": "The content folder seems to be exposed",
|
||||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "No se pudo guardar el formulario",
|
"error.form.notSaved": "No se pudo guardar el formulario",
|
||||||
|
|
||||||
"error.language.code": "Por favor introduce un código válido para el idioma",
|
"error.language.code": "Por favor introduce un código válido para el idioma",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "El idioma ya existe",
|
"error.language.duplicate": "El idioma ya existe",
|
||||||
"error.language.name": "Por favor introduce un nombre válido para el idioma",
|
"error.language.name": "Por favor introduce un nombre válido para el idioma",
|
||||||
"error.language.notFound": "No se pudo encontrar el idioma",
|
"error.language.notFound": "No se pudo encontrar el idioma",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "Hay un error en el campo \"{field}\" del bloque {blockIndex} que utiliza el tipo de bloque \"{fieldset}\" en el layout {layoutIndex}",
|
"error.layout.validation.block": "Hay un error en el campo \"{field}\" del bloque {blockIndex} que utiliza el tipo de bloque \"{fieldset}\" en el layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Hay un error en los ajustes del layout {index}",
|
"error.layout.validation.settings": "Hay un error en los ajustes del layout {index}",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "Por ...",
|
"field.blocks.quote.citation.placeholder": "Por ...",
|
||||||
"field.blocks.text.name": "Texto",
|
"field.blocks.text.name": "Texto",
|
||||||
"field.blocks.text.placeholder": "Texto ...",
|
"field.blocks.text.placeholder": "Texto ...",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Leyenda",
|
"field.blocks.video.caption": "Leyenda",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "Ubicación",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Introduce la URL de un vídeo",
|
"field.blocks.video.placeholder": "Introduce la URL de un vídeo",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "Vídeo-URL",
|
"field.blocks.video.url.label": "Vídeo-URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "Se requiere la extensión <code>MB String</code>.",
|
"installation.issues.mbstring": "Se requiere la extensión <code>MB String</code>.",
|
||||||
"installation.issues.media": "La carpeta <code>/media</code> no existe o no posee permisos de escritura.",
|
"installation.issues.media": "La carpeta <code>/media</code> no existe o no posee permisos de escritura.",
|
||||||
"installation.issues.php": "Asegurese de estar usando <code>PHP 8+</code>",
|
"installation.issues.php": "Asegurese de estar usando <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby requiere <code>Apache</code>, <code>Nginx</code>, <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "La carpeta <code>/site/sessions</code> no existe o no posee permisos de escritura.",
|
"installation.issues.sessions": "La carpeta <code>/site/sessions</code> no existe o no posee permisos de escritura.",
|
||||||
|
|
||||||
"language": "Idioma",
|
"language": "Idioma",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Sin informes",
|
"stats.empty": "Sin informes",
|
||||||
"status": "Estado",
|
"status": "Estado",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "La carpeta content parece estar expuesta",
|
"system.issues.content": "La carpeta content parece estar expuesta",
|
||||||
"system.issues.eol.kirby": "La versión de Kirby que tienes instalada ha llegado al final de su vida útil y no recibirá más actualizaciones de seguridad.",
|
"system.issues.eol.kirby": "La versión de Kirby que tienes instalada ha llegado al final de su vida útil y no recibirá más actualizaciones de seguridad.",
|
||||||
"system.issues.eol.plugin": "Tu versión instalada del plugin { plugin } ha llegado al final de su vida útil y no recibirá más actualizaciones de seguridad.",
|
"system.issues.eol.plugin": "Tu versión instalada del plugin { plugin } ha llegado al final de su vida útil y no recibirá más actualizaciones de seguridad.",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "El formulario no pudo ser guardado",
|
"error.form.notSaved": "El formulario no pudo ser guardado",
|
||||||
|
|
||||||
"error.language.code": "Por favor, introduce un código válido para el idioma",
|
"error.language.code": "Por favor, introduce un código válido para el idioma",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "El idioma ya existe",
|
"error.language.duplicate": "El idioma ya existe",
|
||||||
"error.language.name": "Por favor, introduce un nombre válido para el idioma",
|
"error.language.name": "Por favor, introduce un nombre válido para el idioma",
|
||||||
"error.language.notFound": "No se pudo encontrar el idioma",
|
"error.language.notFound": "No se pudo encontrar el idioma",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "Hay un error en el campo \"{field}\" del bloque {blockIndex} que utiliza el tipo de bloque \"{fieldset}\" en el layout {layoutIndex}",
|
"error.layout.validation.block": "Hay un error en el campo \"{field}\" del bloque {blockIndex} que utiliza el tipo de bloque \"{fieldset}\" en el layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Hay un error en los ajustes del layout {index}",
|
"error.layout.validation.settings": "Hay un error en los ajustes del layout {index}",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "Por ...",
|
"field.blocks.quote.citation.placeholder": "Por ...",
|
||||||
"field.blocks.text.name": "Texto",
|
"field.blocks.text.name": "Texto",
|
||||||
"field.blocks.text.placeholder": "Texto ...",
|
"field.blocks.text.placeholder": "Texto ...",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Leyenda",
|
"field.blocks.video.caption": "Leyenda",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "Ubicación",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Introduce la URL de un vídeo",
|
"field.blocks.video.placeholder": "Introduce la URL de un vídeo",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "Vídeo-URL",
|
"field.blocks.video.url.label": "Vídeo-URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "La extension <code>MB String</code> es requerida",
|
"installation.issues.mbstring": "La extension <code>MB String</code> es requerida",
|
||||||
"installation.issues.media": "La carpeta <code>/media</code> no existe o no se puede escribir",
|
"installation.issues.media": "La carpeta <code>/media</code> no existe o no se puede escribir",
|
||||||
"installation.issues.php": "Asegurese de estar usando <code>PHP 8+</code>",
|
"installation.issues.php": "Asegurese de estar usando <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby requiere <code>Apache</code>, <code>Nginx</code> o <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "La carpeta <code>/site/sessions</code> no existe o no se puede escribir",
|
"installation.issues.sessions": "La carpeta <code>/site/sessions</code> no existe o no se puede escribir",
|
||||||
|
|
||||||
"language": "Idioma",
|
"language": "Idioma",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Sin informes",
|
"stats.empty": "Sin informes",
|
||||||
"status": "Estado",
|
"status": "Estado",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "La carpeta content parece estar expuesta",
|
"system.issues.content": "La carpeta content parece estar expuesta",
|
||||||
"system.issues.eol.kirby": "La versión de Kirby que tienes instalada ha llegado al final de su vida útil y no recibirá más actualizaciones de seguridad.",
|
"system.issues.eol.kirby": "La versión de Kirby que tienes instalada ha llegado al final de su vida útil y no recibirá más actualizaciones de seguridad.",
|
||||||
"system.issues.eol.plugin": "La versión del plugin { plugin } que tienes instalada ha llegado al final de su vida útil y no recibirá más actualizaciones de seguridad.",
|
"system.issues.eol.plugin": "La versión del plugin { plugin } que tienes instalada ha llegado al final de su vida útil y no recibirá más actualizaciones de seguridad.",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "امکان دخیره فرم وجود ندارد",
|
"error.form.notSaved": "امکان دخیره فرم وجود ندارد",
|
||||||
|
|
||||||
"error.language.code": "Please enter a valid code for the language",
|
"error.language.code": "Please enter a valid code for the language",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "The language already exists",
|
"error.language.duplicate": "The language already exists",
|
||||||
"error.language.name": "Please enter a valid name for the language",
|
"error.language.name": "Please enter a valid name for the language",
|
||||||
"error.language.notFound": "The language could not be found",
|
"error.language.notFound": "The language could not be found",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "There's an error in layout {index} settings",
|
"error.layout.validation.settings": "There's an error in layout {index} settings",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "by …",
|
"field.blocks.quote.citation.placeholder": "by …",
|
||||||
"field.blocks.text.name": "Text",
|
"field.blocks.text.name": "Text",
|
||||||
"field.blocks.text.placeholder": "Text …",
|
"field.blocks.text.placeholder": "Text …",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Caption",
|
"field.blocks.video.caption": "Caption",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "Location",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Enter a video URL",
|
"field.blocks.video.placeholder": "Enter a video URL",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "Video-URL",
|
"field.blocks.video.url.label": "Video-URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "افزونه <code>MB String</code> مورد نیاز است",
|
"installation.issues.mbstring": "افزونه <code>MB String</code> مورد نیاز است",
|
||||||
"installation.issues.media": "پوشه <code>/media</code> موجود نیست یا قابل نوشتن نیست",
|
"installation.issues.media": "پوشه <code>/media</code> موجود نیست یا قابل نوشتن نیست",
|
||||||
"installation.issues.php": "لطفا از پیاچپی 8 یا بالاتر استفاده کنید",
|
"installation.issues.php": "لطفا از پیاچپی 8 یا بالاتر استفاده کنید",
|
||||||
"installation.issues.server": "کربی نیاز به <code>Apache</code>، <code>Nginx</code> یا <code>Caddy</code> دارد",
|
|
||||||
"installation.issues.sessions": "پوشه <code>/site/sessions</code> وجود ندارد یا قابل نوشتن نیست",
|
"installation.issues.sessions": "پوشه <code>/site/sessions</code> وجود ندارد یا قابل نوشتن نیست",
|
||||||
|
|
||||||
"language": "\u0632\u0628\u0627\u0646",
|
"language": "\u0632\u0628\u0627\u0646",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "No reports",
|
"stats.empty": "No reports",
|
||||||
"status": "وضعیت",
|
"status": "وضعیت",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "The content folder seems to be exposed",
|
"system.issues.content": "The content folder seems to be exposed",
|
||||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Lomaketta ei voitu tallentaa",
|
"error.form.notSaved": "Lomaketta ei voitu tallentaa",
|
||||||
|
|
||||||
"error.language.code": "Anna kielen lyhenne",
|
"error.language.code": "Anna kielen lyhenne",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "Kieli on jo olemassa",
|
"error.language.duplicate": "Kieli on jo olemassa",
|
||||||
"error.language.name": "Anna kielen nimi",
|
"error.language.name": "Anna kielen nimi",
|
||||||
"error.language.notFound": "Kieltä ei löytynyt",
|
"error.language.notFound": "Kieltä ei löytynyt",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Virhe asetelman {index} asetuksissa",
|
"error.layout.validation.settings": "Virhe asetelman {index} asetuksissa",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "Lähde …",
|
"field.blocks.quote.citation.placeholder": "Lähde …",
|
||||||
"field.blocks.text.name": "Teksti",
|
"field.blocks.text.name": "Teksti",
|
||||||
"field.blocks.text.placeholder": "Teksti …",
|
"field.blocks.text.placeholder": "Teksti …",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Videon teksti",
|
"field.blocks.video.caption": "Videon teksti",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "Sijainti",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Anna videon URL",
|
"field.blocks.video.placeholder": "Anna videon URL",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "Videon URL",
|
"field.blocks.video.url.label": "Videon URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "<code>MB String</code>-laajennos on pakollinen",
|
"installation.issues.mbstring": "<code>MB String</code>-laajennos on pakollinen",
|
||||||
"installation.issues.media": "<code>/media</code> -kansio ei ole olemassa tai siihen ei voi kirjoittaa",
|
"installation.issues.media": "<code>/media</code> -kansio ei ole olemassa tai siihen ei voi kirjoittaa",
|
||||||
"installation.issues.php": "Varmista että <code>PHP 8+</code> on käytössä",
|
"installation.issues.php": "Varmista että <code>PHP 8+</code> on käytössä",
|
||||||
"installation.issues.server": "Kirby tarvitsee jonkun seuraavista: <code>Apache</code>, <code>Nginx</code> tai <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "<code>/site/sessions</code> -kansio ei ole olemassa tai siihen ei voi kirjoittaa",
|
"installation.issues.sessions": "<code>/site/sessions</code> -kansio ei ole olemassa tai siihen ei voi kirjoittaa",
|
||||||
|
|
||||||
"language": "Kieli",
|
"language": "Kieli",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Ei raportteja",
|
"stats.empty": "Ei raportteja",
|
||||||
"status": "Tila",
|
"status": "Tila",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "Content-kansio näyttäisi olevan julkinen",
|
"system.issues.content": "Content-kansio näyttäisi olevan julkinen",
|
||||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||||
|
|||||||
@@ -125,10 +125,13 @@
|
|||||||
"error.form.incomplete": "Veuillez corriger toutes les erreurs du formulaire…",
|
"error.form.incomplete": "Veuillez corriger toutes les erreurs du formulaire…",
|
||||||
"error.form.notSaved": "Le formulaire n’a pu être enregistré",
|
"error.form.notSaved": "Le formulaire n’a pu être enregistré",
|
||||||
|
|
||||||
"error.language.code": "Veuillez saisir un code correct pour cette langue",
|
"error.language.code": "Veuillez saisir un code correct pour la langue",
|
||||||
|
"error.language.create.permission": "Vous n’êtes pas autorisé à créer une langue",
|
||||||
|
"error.language.delete.permission": "Vous n’êtes pas autorisé à supprimer la langue",
|
||||||
"error.language.duplicate": "Cette langue existe déjà",
|
"error.language.duplicate": "Cette langue existe déjà",
|
||||||
"error.language.name": "Veuillez saisir un nom correct pour cette langue",
|
"error.language.name": "Veuillez saisir un nom correct pour la langue",
|
||||||
"error.language.notFound": "La langue n’a pu être trouvée",
|
"error.language.notFound": "La langue n’a pu être trouvée",
|
||||||
|
"error.language.update.permission": "Vous n’êtes pas autorisé à modifier la langue",
|
||||||
|
|
||||||
"error.layout.validation.block": "Il y a une erreur sur le champ « {field} » du bloc {blockIndex} utilisant le type de bloc « {fieldset} » dans le layout {layoutIndex}.",
|
"error.layout.validation.block": "Il y a une erreur sur le champ « {field} » du bloc {blockIndex} utilisant le type de bloc « {fieldset} » dans le layout {layoutIndex}.",
|
||||||
"error.layout.validation.settings": "Il y a une erreur dans les paramètres de la disposition {index}",
|
"error.layout.validation.settings": "Il y a une erreur dans les paramètres de la disposition {index}",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "par…",
|
"field.blocks.quote.citation.placeholder": "par…",
|
||||||
"field.blocks.text.name": "Texte",
|
"field.blocks.text.name": "Texte",
|
||||||
"field.blocks.text.placeholder": "Texte…",
|
"field.blocks.text.placeholder": "Texte…",
|
||||||
|
"field.blocks.video.autoplay": "Lecture automatique",
|
||||||
"field.blocks.video.caption": "Légende",
|
"field.blocks.video.caption": "Légende",
|
||||||
|
"field.blocks.video.controls": "Contrôles",
|
||||||
|
"field.blocks.video.location": "Emplacement",
|
||||||
|
"field.blocks.video.loop": "Boucle",
|
||||||
|
"field.blocks.video.muted": "Muet",
|
||||||
"field.blocks.video.name": "Vidéo",
|
"field.blocks.video.name": "Vidéo",
|
||||||
"field.blocks.video.placeholder": "Saisissez l’URL d’une vidéo",
|
"field.blocks.video.placeholder": "Saisissez l’URL d’une vidéo",
|
||||||
|
"field.blocks.video.poster": "Vignette",
|
||||||
|
"field.blocks.video.preload": "Préchargement",
|
||||||
"field.blocks.video.url.label": "URL de la vidéo",
|
"field.blocks.video.url.label": "URL de la vidéo",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "L’extension <code>MB String</code> est requise",
|
"installation.issues.mbstring": "L’extension <code>MB String</code> est requise",
|
||||||
"installation.issues.media": "Le dossier <code>/media</code> n’existe pas ou n’est pas accessible en écriture",
|
"installation.issues.media": "Le dossier <code>/media</code> n’existe pas ou n’est pas accessible en écriture",
|
||||||
"installation.issues.php": "Veuillez utiliser <code>PHP 8+</code>",
|
"installation.issues.php": "Veuillez utiliser <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby requiert <code>Apache</code>, <code>Nginx</code> ou <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "Le dossier <code>/site/sessions</code> n’existe pas ou n’est pas accessible en écriture",
|
"installation.issues.sessions": "Le dossier <code>/site/sessions</code> n’existe pas ou n’est pas accessible en écriture",
|
||||||
|
|
||||||
"language": "Langue",
|
"language": "Langue",
|
||||||
@@ -464,7 +473,7 @@
|
|||||||
"login.email.password-reset.body": "Bonjour {user.nameOrEmail},\n\nVous avez récemment demandé un code de réinitialisation de mot de passe pour le Panel de {site}.\nLe code de réinitialisation de mot de passe suivant sera valable pendant {timeout} minutes :\n\n{code}\n\nSi vous n’avez pas demandé de code de réinitialisation de mot de passe, veuillez ignorer cet email ou contacter votre administrateur si vous avez des questions.\nPar sécurité, merci de ne PAS faire suivre ce courriel.",
|
"login.email.password-reset.body": "Bonjour {user.nameOrEmail},\n\nVous avez récemment demandé un code de réinitialisation de mot de passe pour le Panel de {site}.\nLe code de réinitialisation de mot de passe suivant sera valable pendant {timeout} minutes :\n\n{code}\n\nSi vous n’avez pas demandé de code de réinitialisation de mot de passe, veuillez ignorer cet email ou contacter votre administrateur si vous avez des questions.\nPar sécurité, merci de ne PAS faire suivre ce courriel.",
|
||||||
"login.email.password-reset.subject": "Votre code de réinitialisation du mot de passe",
|
"login.email.password-reset.subject": "Votre code de réinitialisation du mot de passe",
|
||||||
"login.remember": "Rester connecté",
|
"login.remember": "Rester connecté",
|
||||||
"login.reset": "Réinitialiser le mot de passe",
|
"login.reset": "Réinitialiser",
|
||||||
"login.toggleText.code.email": "Se connecter par courriel",
|
"login.toggleText.code.email": "Se connecter par courriel",
|
||||||
"login.toggleText.code.email-password": "Se connecter avec un mot de passe",
|
"login.toggleText.code.email-password": "Se connecter avec un mot de passe",
|
||||||
"login.toggleText.password-reset.email": "Mot de passe oublié ?",
|
"login.toggleText.password-reset.email": "Mot de passe oublié ?",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Aucun rapport",
|
"stats.empty": "Aucun rapport",
|
||||||
"status": "Statut",
|
"status": "Statut",
|
||||||
|
|
||||||
|
"system.info.copy": "Copier les informations",
|
||||||
|
"system.info.copied": "Informations système copiées",
|
||||||
"system.issues.content": "Le dossier content semble exposé",
|
"system.issues.content": "Le dossier content semble exposé",
|
||||||
"system.issues.eol.kirby": "La version de Kirby installée a atteint la fin de son cycle de vie et ne recevra plus de mises à jour de sécurité",
|
"system.issues.eol.kirby": "La version de Kirby installée a atteint la fin de son cycle de vie et ne recevra plus de mises à jour de sécurité",
|
||||||
"system.issues.eol.plugin": "La version du plugin { plugin } installée a atteint la fin de son cycle de vie et ne recevra plus de mises à jour de sécurité",
|
"system.issues.eol.plugin": "La version du plugin { plugin } installée a atteint la fin de son cycle de vie et ne recevra plus de mises à jour de sécurité",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Az űrlap nem menthető",
|
"error.form.notSaved": "Az űrlap nem menthető",
|
||||||
|
|
||||||
"error.language.code": "Kérlek, add meg a nyelv érvényes kódját",
|
"error.language.code": "Kérlek, add meg a nyelv érvényes kódját",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "A nyelv már létezik",
|
"error.language.duplicate": "A nyelv már létezik",
|
||||||
"error.language.name": "Kérlek, add meg a nyelv érvényes nevét",
|
"error.language.name": "Kérlek, add meg a nyelv érvényes nevét",
|
||||||
"error.language.notFound": "A nyelv nem található",
|
"error.language.notFound": "A nyelv nem található",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Hibát találtunk a(z) {index} elrendezés beállításaiban",
|
"error.layout.validation.settings": "Hibát találtunk a(z) {index} elrendezés beállításaiban",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "Szerző …",
|
"field.blocks.quote.citation.placeholder": "Szerző …",
|
||||||
"field.blocks.text.name": "Szöveg",
|
"field.blocks.text.name": "Szöveg",
|
||||||
"field.blocks.text.placeholder": "Szöveg …",
|
"field.blocks.text.placeholder": "Szöveg …",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Képaláírás",
|
"field.blocks.video.caption": "Képaláírás",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "A kép helye",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Videó",
|
"field.blocks.video.name": "Videó",
|
||||||
"field.blocks.video.placeholder": "Videó URL-jének megadása",
|
"field.blocks.video.placeholder": "Videó URL-jének megadása",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "Videó URL",
|
"field.blocks.video.url.label": "Videó URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "Az <code>MB String</code> bővítmény engedélyezése szükséges",
|
"installation.issues.mbstring": "Az <code>MB String</code> bővítmény engedélyezése szükséges",
|
||||||
"installation.issues.media": "A <code>/media</code> mappa nem létezik vagy nem írható",
|
"installation.issues.media": "A <code>/media</code> mappa nem létezik vagy nem írható",
|
||||||
"installation.issues.php": "Bizonyosodj meg róla, hogy az általad használt PHP-verzió <code>PHP 8+</code>",
|
"installation.issues.php": "Bizonyosodj meg róla, hogy az általad használt PHP-verzió <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "A Kirby az alábbi szervereken futtatható: <code>Apache</code>, <code>Nginx</code> vagy <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "A <code>/site/sessions</code> könyvtár nem létezik vagy nem írható",
|
"installation.issues.sessions": "A <code>/site/sessions</code> könyvtár nem létezik vagy nem írható",
|
||||||
|
|
||||||
"language": "Nyelv",
|
"language": "Nyelv",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "No reports",
|
"stats.empty": "No reports",
|
||||||
"status": "Állapot",
|
"status": "Állapot",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "The content folder seems to be exposed",
|
"system.issues.content": "The content folder seems to be exposed",
|
||||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Formulir tidak dapat disimpan",
|
"error.form.notSaved": "Formulir tidak dapat disimpan",
|
||||||
|
|
||||||
"error.language.code": "Masukkan kode bahasa yang valid",
|
"error.language.code": "Masukkan kode bahasa yang valid",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "Bahasa sudah ada",
|
"error.language.duplicate": "Bahasa sudah ada",
|
||||||
"error.language.name": "Masukkan nama bahasa yang valid",
|
"error.language.name": "Masukkan nama bahasa yang valid",
|
||||||
"error.language.notFound": "Bahasa tidak ditemukan",
|
"error.language.notFound": "Bahasa tidak ditemukan",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "Ada kesalahan pada bidang \"{field}\" di blok {blockIndex} menggunakan tipe blok \"{fieldset}\" di tata letak {layoutIndex}",
|
"error.layout.validation.block": "Ada kesalahan pada bidang \"{field}\" di blok {blockIndex} menggunakan tipe blok \"{fieldset}\" di tata letak {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Ada kesalahan di pengaturan tata letak {index}",
|
"error.layout.validation.settings": "Ada kesalahan di pengaturan tata letak {index}",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "oleh …",
|
"field.blocks.quote.citation.placeholder": "oleh …",
|
||||||
"field.blocks.text.name": "Teks",
|
"field.blocks.text.name": "Teks",
|
||||||
"field.blocks.text.placeholder": "Teks …",
|
"field.blocks.text.placeholder": "Teks …",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Deskripsi",
|
"field.blocks.video.caption": "Deskripsi",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "Lokasi",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Masukkan URL video",
|
"field.blocks.video.placeholder": "Masukkan URL video",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "URL Video",
|
"field.blocks.video.url.label": "URL Video",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "Ekstensi <code>MB String</code> diperlukan",
|
"installation.issues.mbstring": "Ekstensi <code>MB String</code> diperlukan",
|
||||||
"installation.issues.media": "Folder <code>/media</code> tidak ada atau tidak dapat ditulis",
|
"installation.issues.media": "Folder <code>/media</code> tidak ada atau tidak dapat ditulis",
|
||||||
"installation.issues.php": "Pastikan Anda menggunakan <code>PHP 8+</code>",
|
"installation.issues.php": "Pastikan Anda menggunakan <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby memerlukan <code>Apache</code>, <code>Nginx</code>, atau <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "Folder <code>/site/sessions</code> tidak ada atau tidak dapat ditulis",
|
"installation.issues.sessions": "Folder <code>/site/sessions</code> tidak ada atau tidak dapat ditulis",
|
||||||
|
|
||||||
"language": "Bahasa",
|
"language": "Bahasa",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Tidak ada laporan",
|
"stats.empty": "Tidak ada laporan",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "Folder konten nampaknya terekspos",
|
"system.issues.content": "Folder konten nampaknya terekspos",
|
||||||
"system.issues.eol.kirby": "Versi instalasi Kirby Anda sudah mencapai akhir dan tidak akan lagi mendapat pembaruan keamanan",
|
"system.issues.eol.kirby": "Versi instalasi Kirby Anda sudah mencapai akhir dan tidak akan lagi mendapat pembaruan keamanan",
|
||||||
"system.issues.eol.plugin": "Versi instalasi plugin { plugin } Anda sudah mencapai akhir dan tidak akan lagi mendapatkan pembaruan keamanan",
|
"system.issues.eol.plugin": "Versi instalasi plugin { plugin } Anda sudah mencapai akhir dan tidak akan lagi mendapatkan pembaruan keamanan",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Ekki tókst að vista upplýsingar úr forminu",
|
"error.form.notSaved": "Ekki tókst að vista upplýsingar úr forminu",
|
||||||
|
|
||||||
"error.language.code": "Gófúslega settu inn gildan kóða fyrir tungumál",
|
"error.language.code": "Gófúslega settu inn gildan kóða fyrir tungumál",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "Þetta tungumál er nú þegar skráð",
|
"error.language.duplicate": "Þetta tungumál er nú þegar skráð",
|
||||||
"error.language.name": "Gott og gyllt nafn fyrir tungumálið",
|
"error.language.name": "Gott og gyllt nafn fyrir tungumálið",
|
||||||
"error.language.notFound": "Tungumálið fannst ekkert",
|
"error.language.notFound": "Tungumálið fannst ekkert",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "Það er villa í {field} sviðinu í bálkinum {blockIndex} sem notar {fieldset} bálkgerðina í rammanum {layoutIndex}",
|
"error.layout.validation.block": "Það er villa í {field} sviðinu í bálkinum {blockIndex} sem notar {fieldset} bálkgerðina í rammanum {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Hér er villa í sitllingum fyrir ramman {index}",
|
"error.layout.validation.settings": "Hér er villa í sitllingum fyrir ramman {index}",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "eftir …",
|
"field.blocks.quote.citation.placeholder": "eftir …",
|
||||||
"field.blocks.text.name": "Prósi",
|
"field.blocks.text.name": "Prósi",
|
||||||
"field.blocks.text.placeholder": "Þessi prósi …",
|
"field.blocks.text.placeholder": "Þessi prósi …",
|
||||||
|
"field.blocks.video.autoplay": "Sjálfspila",
|
||||||
"field.blocks.video.caption": "Myndskeiðstexti",
|
"field.blocks.video.caption": "Myndskeiðstexti",
|
||||||
|
"field.blocks.video.controls": "Stjórnhnappar",
|
||||||
|
"field.blocks.video.location": "Staðsetning",
|
||||||
|
"field.blocks.video.loop": "Lykkja",
|
||||||
|
"field.blocks.video.muted": "Þaggað",
|
||||||
"field.blocks.video.name": "Myndskeið",
|
"field.blocks.video.name": "Myndskeið",
|
||||||
"field.blocks.video.placeholder": "Vefslóð myndskeiðs (URL)",
|
"field.blocks.video.placeholder": "Vefslóð myndskeiðs (URL)",
|
||||||
|
"field.blocks.video.poster": "Plakkat",
|
||||||
|
"field.blocks.video.preload": "Forhlaða",
|
||||||
"field.blocks.video.url.label": "Vefslóð",
|
"field.blocks.video.url.label": "Vefslóð",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "<code>MB String</code> er hér bráðnauðsynleg",
|
"installation.issues.mbstring": "<code>MB String</code> er hér bráðnauðsynleg",
|
||||||
"installation.issues.media": "<code>/media</code> mappan er annaðhvort ekki til eða er ekki skrifanleg",
|
"installation.issues.media": "<code>/media</code> mappan er annaðhvort ekki til eða er ekki skrifanleg",
|
||||||
"installation.issues.php": "Notaðu <code>PHP 8+</code>",
|
"installation.issues.php": "Notaðu <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby krefst <code>Apache</code>, <code>Nginx</code> eða <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "<code>/site/sessions</code> mappan er annaðhvort ekki til eða er ekki skrifanleg",
|
"installation.issues.sessions": "<code>/site/sessions</code> mappan er annaðhvort ekki til eða er ekki skrifanleg",
|
||||||
|
|
||||||
"language": "Tungumál",
|
"language": "Tungumál",
|
||||||
@@ -549,14 +558,14 @@
|
|||||||
"page.status.draft.description": "Þessi síða er uppkast og er aðeins sýnileg vefstjórum eða gegnum laumu tengil.",
|
"page.status.draft.description": "Þessi síða er uppkast og er aðeins sýnileg vefstjórum eða gegnum laumu tengil.",
|
||||||
"page.status.listed": "Útgefin og listuð",
|
"page.status.listed": "Útgefin og listuð",
|
||||||
"page.status.listed.description": "Síðan er útgefin og listuð.",
|
"page.status.listed.description": "Síðan er útgefin og listuð.",
|
||||||
"page.status.unlisted": "Útgefin",
|
"page.status.unlisted": "Útgefin en ólistuð",
|
||||||
"page.status.unlisted.description": "Síðan er útgefin en þó ólistuð.",
|
"page.status.unlisted.description": "Síðan er útgefin en þó ólistuð.",
|
||||||
|
|
||||||
"pages": "Síður",
|
"pages": "Síður",
|
||||||
"pages.empty": "Engar síður enn",
|
"pages.empty": "Engar síður enn",
|
||||||
"pages.status.draft": "Uppköst",
|
"pages.status.draft": "Uppköst",
|
||||||
"pages.status.listed": "Útgefnar og listaðar",
|
"pages.status.listed": "Útgefnar og listaðar",
|
||||||
"pages.status.unlisted": "Útgefnar",
|
"pages.status.unlisted": "Útgefnar en ólistaðar",
|
||||||
|
|
||||||
"pagination.page": "Síða",
|
"pagination.page": "Síða",
|
||||||
|
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Engar skýrslur",
|
"stats.empty": "Engar skýrslur",
|
||||||
"status": "Staða",
|
"status": "Staða",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "Efnismappan virðist vera berskjölduð",
|
"system.issues.content": "Efnismappan virðist vera berskjölduð",
|
||||||
"system.issues.eol.kirby": "Uppsett Kirby eintak þitt hefur runnið sitt skeið á enda og mun ekki verða uppfært framar",
|
"system.issues.eol.kirby": "Uppsett Kirby eintak þitt hefur runnið sitt skeið á enda og mun ekki verða uppfært framar",
|
||||||
"system.issues.eol.plugin": "Uppsett eintak þitt af viðbótinni { plugin } hefur runnið sitt skeið á enda og mun ekki verða uppfærð framar",
|
"system.issues.eol.plugin": "Uppsett eintak þitt af viðbótinni { plugin } hefur runnið sitt skeið á enda og mun ekki verða uppfærð framar",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Non è stato possibile salvare il form",
|
"error.form.notSaved": "Non è stato possibile salvare il form",
|
||||||
|
|
||||||
"error.language.code": "Inserisci un codice valido per la lingua",
|
"error.language.code": "Inserisci un codice valido per la lingua",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "La lingua esiste già",
|
"error.language.duplicate": "La lingua esiste già",
|
||||||
"error.language.name": "Inserisci un nome valido per la lingua",
|
"error.language.name": "Inserisci un nome valido per la lingua",
|
||||||
"error.language.notFound": "La lingua non è stata trovata",
|
"error.language.notFound": "La lingua non è stata trovata",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "C'è un errore sul campo \"{field}\" nel blocco {blockIndex} che utilizza il tipo di blocco \"{fieldset}\" nel layout {layoutIndex}",
|
"error.layout.validation.block": "C'è un errore sul campo \"{field}\" nel blocco {blockIndex} che utilizza il tipo di blocco \"{fieldset}\" nel layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "C'è un errore nelle impostazioni del layout {index}",
|
"error.layout.validation.settings": "C'è un errore nelle impostazioni del layout {index}",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "di …",
|
"field.blocks.quote.citation.placeholder": "di …",
|
||||||
"field.blocks.text.name": "Testo",
|
"field.blocks.text.name": "Testo",
|
||||||
"field.blocks.text.placeholder": "Testo …",
|
"field.blocks.text.placeholder": "Testo …",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Didascalia",
|
"field.blocks.video.caption": "Didascalia",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "Posizione",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Inserisci un URL di un video",
|
"field.blocks.video.placeholder": "Inserisci un URL di un video",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "URL Video",
|
"field.blocks.video.url.label": "URL Video",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "È necessaria l'estensione <code>MB String</code>",
|
"installation.issues.mbstring": "È necessaria l'estensione <code>MB String</code>",
|
||||||
"installation.issues.media": "La cartella <code>/media</code> non esiste o non dispone dei permessi di scrittura",
|
"installation.issues.media": "La cartella <code>/media</code> non esiste o non dispone dei permessi di scrittura",
|
||||||
"installation.issues.php": "Assicurati di utilizzare <code>PHP 8+</code>",
|
"installation.issues.php": "Assicurati di utilizzare <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby necessita di <code>Apache</code>, <code>Nginx</code> o <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "La cartella <code>/site/sessions</code>non esiste o non dispone dei permessi di scrittura",
|
"installation.issues.sessions": "La cartella <code>/site/sessions</code>non esiste o non dispone dei permessi di scrittura",
|
||||||
|
|
||||||
"language": "Lingua",
|
"language": "Lingua",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Nessuna segnalazione",
|
"stats.empty": "Nessuna segnalazione",
|
||||||
"status": "Stato",
|
"status": "Stato",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "La cartella content sembra essere esposta",
|
"system.issues.content": "La cartella content sembra essere esposta",
|
||||||
"system.issues.eol.kirby": "La versione di Kirby installata è giunta alla fine del suo ciclo di vita e non riceverà ulteriori aggiornamenti di sicurezza ",
|
"system.issues.eol.kirby": "La versione di Kirby installata è giunta alla fine del suo ciclo di vita e non riceverà ulteriori aggiornamenti di sicurezza ",
|
||||||
"system.issues.eol.plugin": "La versione installata del plugin { plugin } è giunta alla fine del suo ciclo di vita e non riceverà ulteriori aggiornamenti di sicurezza",
|
"system.issues.eol.plugin": "La versione installata del plugin { plugin } è giunta alla fine del suo ciclo di vita e non riceverà ulteriori aggiornamenti di sicurezza",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "항목을 저장할 수 없습니다.",
|
"error.form.notSaved": "항목을 저장할 수 없습니다.",
|
||||||
|
|
||||||
"error.language.code": "올바른 언어 코드를 입력하세요.",
|
"error.language.code": "올바른 언어 코드를 입력하세요.",
|
||||||
|
"error.language.create.permission": "언어를 등록할 권한이 없습니다.",
|
||||||
|
"error.language.delete.permission": "언어를 삭제할 권한이 없습니다.",
|
||||||
"error.language.duplicate": "이미 등록한 언어입니다.",
|
"error.language.duplicate": "이미 등록한 언어입니다.",
|
||||||
"error.language.name": "올바른 언어명을 입력하세요.",
|
"error.language.name": "올바른 언어명을 입력하세요.",
|
||||||
"error.language.notFound": "언어를 찾을 수 없습니다.",
|
"error.language.notFound": "언어를 찾을 수 없습니다.",
|
||||||
|
"error.language.update.permission": "언어를 변경할 권한이 없습니다.",
|
||||||
|
|
||||||
"error.layout.validation.block": "레이아웃({layoutIndex})의 특정 블록 유형({fieldset})을 사용하는 블록({blockIndex})의 특정 필드({field})에 오류가 있습니다.",
|
"error.layout.validation.block": "레이아웃({layoutIndex})의 특정 블록 유형({fieldset})을 사용하는 블록({blockIndex})의 특정 필드({field})에 오류가 있습니다.",
|
||||||
"error.layout.validation.settings": "레이아웃({index}) 옵션을 확인하세요.",
|
"error.layout.validation.settings": "레이아웃({index}) 옵션을 확인하세요.",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "출처",
|
"field.blocks.quote.citation.placeholder": "출처",
|
||||||
"field.blocks.text.name": "텍스트",
|
"field.blocks.text.name": "텍스트",
|
||||||
"field.blocks.text.placeholder": "텍스트",
|
"field.blocks.text.placeholder": "텍스트",
|
||||||
|
"field.blocks.video.autoplay": "자동 재생",
|
||||||
"field.blocks.video.caption": "캡션",
|
"field.blocks.video.caption": "캡션",
|
||||||
|
"field.blocks.video.controls": "제어 도구",
|
||||||
|
"field.blocks.video.location": "위치",
|
||||||
|
"field.blocks.video.loop": "반복",
|
||||||
|
"field.blocks.video.muted": "음소거",
|
||||||
"field.blocks.video.name": "영상",
|
"field.blocks.video.name": "영상",
|
||||||
"field.blocks.video.placeholder": "영상 URL 입력",
|
"field.blocks.video.placeholder": "영상 URL 입력",
|
||||||
|
"field.blocks.video.poster": "대표 이미지",
|
||||||
|
"field.blocks.video.preload": "미리 로드",
|
||||||
"field.blocks.video.url.label": "영상 URL",
|
"field.blocks.video.url.label": "영상 URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "<code>MB String</code> 확장 모듈이 필요합니다.",
|
"installation.issues.mbstring": "<code>MB String</code> 확장 모듈이 필요합니다.",
|
||||||
"installation.issues.media": "<code>/media</code> 폴더의 쓰기 권한을 확인하세요.",
|
"installation.issues.media": "<code>/media</code> 폴더의 쓰기 권한을 확인하세요.",
|
||||||
"installation.issues.php": "<code>PHP</code> 버전이 8 이상인지 확인하세요.",
|
"installation.issues.php": "<code>PHP</code> 버전이 8 이상인지 확인하세요.",
|
||||||
"installation.issues.server": "Kirby를 실행하려면 <code>Apache</code>, <code>Nginx</code>, 또는 <code>Caddy</code>가 필요합니다.",
|
|
||||||
"installation.issues.sessions": "<code>/site/sessions</code> 폴더의 쓰기 권한을 확인하세요.",
|
"installation.issues.sessions": "<code>/site/sessions</code> 폴더의 쓰기 권한을 확인하세요.",
|
||||||
|
|
||||||
"language": "\uc5b8\uc5b4",
|
"language": "\uc5b8\uc5b4",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "관련 기록이 없습니다.",
|
"stats.empty": "관련 기록이 없습니다.",
|
||||||
"status": "상태",
|
"status": "상태",
|
||||||
|
|
||||||
|
"system.info.copy": "정보 복사",
|
||||||
|
"system.info.copied": "시스템 정보가 복사되었습니다.",
|
||||||
"system.issues.content": "<code>/content</code> 폴더의 권한을 확인하세요.",
|
"system.issues.content": "<code>/content</code> 폴더의 권한을 확인하세요.",
|
||||||
"system.issues.eol.kirby": "설치된 Kirby 버전이 만료되었습니다. 더 이상 보안 업데이트를 받을 수 없습니다.",
|
"system.issues.eol.kirby": "설치된 Kirby 버전이 만료되었습니다. 더 이상 보안 업데이트를 받을 수 없습니다.",
|
||||||
"system.issues.eol.plugin": "설치된 플러그인({plugin}의 지원이 종료되었습니다. 더 이상 보안 업데이트를 받을 수 없습니다.",
|
"system.issues.eol.plugin": "설치된 플러그인({plugin}의 지원이 종료되었습니다. 더 이상 보안 업데이트를 받을 수 없습니다.",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Formos nepavyko išsaugoti",
|
"error.form.notSaved": "Formos nepavyko išsaugoti",
|
||||||
|
|
||||||
"error.language.code": "Prašome įrašyti teisingą kalbos kodą",
|
"error.language.code": "Prašome įrašyti teisingą kalbos kodą",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "Tokia kalba jau yra",
|
"error.language.duplicate": "Tokia kalba jau yra",
|
||||||
"error.language.name": "Prašome įrašyti teisingą kalbos pavadinimą",
|
"error.language.name": "Prašome įrašyti teisingą kalbos pavadinimą",
|
||||||
"error.language.notFound": "Nepavyko rasti šios kalbos",
|
"error.language.notFound": "Nepavyko rasti šios kalbos",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Yra klaida išdėstymo {index} nustatymuose",
|
"error.layout.validation.settings": "Yra klaida išdėstymo {index} nustatymuose",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "autorius",
|
"field.blocks.quote.citation.placeholder": "autorius",
|
||||||
"field.blocks.text.name": "Tekstas",
|
"field.blocks.text.name": "Tekstas",
|
||||||
"field.blocks.text.placeholder": "Tekstas ...",
|
"field.blocks.text.placeholder": "Tekstas ...",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Aprašymas",
|
"field.blocks.video.caption": "Aprašymas",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "Šaltinis",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Įrašykite video URL",
|
"field.blocks.video.placeholder": "Įrašykite video URL",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "Video-URL",
|
"field.blocks.video.url.label": "Video-URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "Plėtinys <code>MB String</code> yra privalomas",
|
"installation.issues.mbstring": "Plėtinys <code>MB String</code> yra privalomas",
|
||||||
"installation.issues.media": "Katalogas <code>/media</code> neegzistuoja arba neturi įrašymo teisių",
|
"installation.issues.media": "Katalogas <code>/media</code> neegzistuoja arba neturi įrašymo teisių",
|
||||||
"installation.issues.php": "Įsitikinkite, kad naudojama <code>PHP 8+</code>",
|
"installation.issues.php": "Įsitikinkite, kad naudojama <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby reikalauja <code>Apache</code>, <code>Nginx</code> arba <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "Katalogas <code>/site/sessions</code> neegzistuoja arba neturi įrašymo teisių",
|
"installation.issues.sessions": "Katalogas <code>/site/sessions</code> neegzistuoja arba neturi įrašymo teisių",
|
||||||
|
|
||||||
"language": "Kalba",
|
"language": "Kalba",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Nėra pranešimų",
|
"stats.empty": "Nėra pranešimų",
|
||||||
"status": "Statusas",
|
"status": "Statusas",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "The content folder seems to be exposed",
|
"system.issues.content": "The content folder seems to be exposed",
|
||||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Skjemaet kunne ikke lagres",
|
"error.form.notSaved": "Skjemaet kunne ikke lagres",
|
||||||
|
|
||||||
"error.language.code": "Vennligst skriv inn gyldig språkkode",
|
"error.language.code": "Vennligst skriv inn gyldig språkkode",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "Språket eksisterer allerede",
|
"error.language.duplicate": "Språket eksisterer allerede",
|
||||||
"error.language.name": "Vennligst skriv inn et gyldig navn for språket",
|
"error.language.name": "Vennligst skriv inn et gyldig navn for språket",
|
||||||
"error.language.notFound": "Finner ikke språket",
|
"error.language.notFound": "Finner ikke språket",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "Det er en feilmelding på \"{field}\" feltet i blokk {blockIndex} med bruk av \"{fieldset}\" blokktypen i layout {layoutIndex}",
|
"error.layout.validation.block": "Det er en feilmelding på \"{field}\" feltet i blokk {blockIndex} med bruk av \"{fieldset}\" blokktypen i layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Det er en feil i layout {index} innstillinger",
|
"error.layout.validation.settings": "Det er en feil i layout {index} innstillinger",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "av…",
|
"field.blocks.quote.citation.placeholder": "av…",
|
||||||
"field.blocks.text.name": "Tekst",
|
"field.blocks.text.name": "Tekst",
|
||||||
"field.blocks.text.placeholder": "Tekst…",
|
"field.blocks.text.placeholder": "Tekst…",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Caption",
|
"field.blocks.video.caption": "Caption",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "Plassering",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Legg til en video URL",
|
"field.blocks.video.placeholder": "Legg til en video URL",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "Video-URL",
|
"field.blocks.video.url.label": "Video-URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "Utvidelsen <code>MB String</code> er nødvendig",
|
"installation.issues.mbstring": "Utvidelsen <code>MB String</code> er nødvendig",
|
||||||
"installation.issues.media": "Mappen <code>/media</code> eksisterer ikke eller er ikke skrivbar",
|
"installation.issues.media": "Mappen <code>/media</code> eksisterer ikke eller er ikke skrivbar",
|
||||||
"installation.issues.php": "Pass på at du bruker <code>PHP 8+</code>",
|
"installation.issues.php": "Pass på at du bruker <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby krever <code>Apache</code>, <code>Nginx</code> eller <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "Mappen <code>/site/sessions</code> eksisterer ikke eller er ikke skrivbar",
|
"installation.issues.sessions": "Mappen <code>/site/sessions</code> eksisterer ikke eller er ikke skrivbar",
|
||||||
|
|
||||||
"language": "Spr\u00e5k",
|
"language": "Spr\u00e5k",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Ingen rapporter",
|
"stats.empty": "Ingen rapporter",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "content-mappen ser ut til å være eksponert",
|
"system.issues.content": "content-mappen ser ut til å være eksponert",
|
||||||
"system.issues.eol.kirby": "Din installerte Kirby versjon har nådd sitt end-of-life, og vil ikke lenger motta sikkerhetsoppdateringer",
|
"system.issues.eol.kirby": "Din installerte Kirby versjon har nådd sitt end-of-life, og vil ikke lenger motta sikkerhetsoppdateringer",
|
||||||
"system.issues.eol.plugin": "Din installerte plugin { plugin } har nådd sitt end-of-life og vil ikke lenger motta sikkerhetsoppdateringer",
|
"system.issues.eol.plugin": "Din installerte plugin { plugin } har nådd sitt end-of-life og vil ikke lenger motta sikkerhetsoppdateringer",
|
||||||
|
|||||||
@@ -114,7 +114,7 @@
|
|||||||
"error.file.minheight": "De hoogte van de afbeelding moet minimaal {height} pixels zijn",
|
"error.file.minheight": "De hoogte van de afbeelding moet minimaal {height} pixels zijn",
|
||||||
"error.file.minsize": "Het bestand is te klein",
|
"error.file.minsize": "Het bestand is te klein",
|
||||||
"error.file.minwidth": "De breedte van de afbeelding moet minimaal {width} pixels zijn",
|
"error.file.minwidth": "De breedte van de afbeelding moet minimaal {width} pixels zijn",
|
||||||
"error.file.name.unique": "The filename must be unique",
|
"error.file.name.unique": "De bestandsnaam moet uniek zijn",
|
||||||
"error.file.name.missing": "De bestandsnaam mag niet leeg zijn",
|
"error.file.name.missing": "De bestandsnaam mag niet leeg zijn",
|
||||||
"error.file.notFound": "Het bestand kan niet worden gevonden",
|
"error.file.notFound": "Het bestand kan niet worden gevonden",
|
||||||
"error.file.orientation": "De oriëntatie van de afbeelding moet \"{orientation}\" zijn",
|
"error.file.orientation": "De oriëntatie van de afbeelding moet \"{orientation}\" zijn",
|
||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Het formulier kon niet worden opgeslagen",
|
"error.form.notSaved": "Het formulier kon niet worden opgeslagen",
|
||||||
|
|
||||||
"error.language.code": "Vul een geldige code voor deze taal in",
|
"error.language.code": "Vul een geldige code voor deze taal in",
|
||||||
|
"error.language.create.permission": "Je hebt geen rechten om een taal toe te voegen",
|
||||||
|
"error.language.delete.permission": "Je hebt geen rechten om een taal te verwijderen",
|
||||||
"error.language.duplicate": "De taal bestaat al",
|
"error.language.duplicate": "De taal bestaat al",
|
||||||
"error.language.name": "Vul een geldige naam voor deze taal in",
|
"error.language.name": "Vul een geldige naam voor deze taal in",
|
||||||
"error.language.notFound": "De taal kan niet worden gevonden",
|
"error.language.notFound": "De taal kan niet worden gevonden",
|
||||||
|
"error.language.update.permission": "Je hebt geen rechten om deze taal te updaten",
|
||||||
|
|
||||||
"error.layout.validation.block": "Er is een fout opgetreden bij het \"{field}\" veld in blok {blockIndex} in het \"{fieldset}\" bloktype in layout {layoutIndex}",
|
"error.layout.validation.block": "Er is een fout opgetreden bij het \"{field}\" veld in blok {blockIndex} in het \"{fieldset}\" bloktype in layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Er is een fout gevonden in de instellingen van ontwerp {index} ",
|
"error.layout.validation.settings": "Er is een fout gevonden in de instellingen van ontwerp {index} ",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "door ...",
|
"field.blocks.quote.citation.placeholder": "door ...",
|
||||||
"field.blocks.text.name": "Tekst",
|
"field.blocks.text.name": "Tekst",
|
||||||
"field.blocks.text.placeholder": "Tekst ...",
|
"field.blocks.text.placeholder": "Tekst ...",
|
||||||
|
"field.blocks.video.autoplay": "Automatisch afspelen",
|
||||||
"field.blocks.video.caption": "Beschrijving",
|
"field.blocks.video.caption": "Beschrijving",
|
||||||
|
"field.blocks.video.controls": "Besturingselementen",
|
||||||
|
"field.blocks.video.location": "Locatie",
|
||||||
|
"field.blocks.video.loop": "Herhalen",
|
||||||
|
"field.blocks.video.muted": "Gedempt",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Voer een video link in",
|
"field.blocks.video.placeholder": "Voer een video link in",
|
||||||
|
"field.blocks.video.poster": "Afbeelding",
|
||||||
|
"field.blocks.video.preload": "Vooral laden",
|
||||||
"field.blocks.video.url.label": "Video link",
|
"field.blocks.video.url.label": "Video link",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "De <code>MB String</code> extensie is verplicht",
|
"installation.issues.mbstring": "De <code>MB String</code> extensie is verplicht",
|
||||||
"installation.issues.media": "De map <code>/media</code>bestaat niet of heeft geen schrijfrechten",
|
"installation.issues.media": "De map <code>/media</code>bestaat niet of heeft geen schrijfrechten",
|
||||||
"installation.issues.php": "Gebruik <code>PHP8+</code>",
|
"installation.issues.php": "Gebruik <code>PHP8+</code>",
|
||||||
"installation.issues.server": "Kirby vereist <code>Apache</code>, <code>Nginx</code> of <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "De map <code>/site/sessions</code> bestaat niet of heeft geen schrijfrechten",
|
"installation.issues.sessions": "De map <code>/site/sessions</code> bestaat niet of heeft geen schrijfrechten",
|
||||||
|
|
||||||
"language": "Taal",
|
"language": "Taal",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Geen rapporten",
|
"stats.empty": "Geen rapporten",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|
||||||
|
"system.info.copy": "Kopieer informatie",
|
||||||
|
"system.info.copied": "Systeem informatie gekopieerd",
|
||||||
"system.issues.content": "De content map lijkt zichtbaar te zijn",
|
"system.issues.content": "De content map lijkt zichtbaar te zijn",
|
||||||
"system.issues.eol.kirby": "De geïnstalleerde Kirby versie is niet meer actueel en zal geen verdere beveiligingsupdates meer ontvangen.",
|
"system.issues.eol.kirby": "De geïnstalleerde Kirby versie is niet meer actueel en zal geen verdere beveiligingsupdates meer ontvangen.",
|
||||||
"system.issues.eol.plugin": "De geïnstalleerde versie van plugin { plugin } is niet meer actueel en zal geen verdere beveiligingsupdates meer ontvangen.",
|
"system.issues.eol.plugin": "De geïnstalleerde versie van plugin { plugin } is niet meer actueel en zal geen verdere beveiligingsupdates meer ontvangen.",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Nie udało się zapisać formularza",
|
"error.form.notSaved": "Nie udało się zapisać formularza",
|
||||||
|
|
||||||
"error.language.code": "Wprowadź poprawny kod języka.",
|
"error.language.code": "Wprowadź poprawny kod języka.",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "Język już istnieje.",
|
"error.language.duplicate": "Język już istnieje.",
|
||||||
"error.language.name": "Wprowadź poprawną nazwę języka.",
|
"error.language.name": "Wprowadź poprawną nazwę języka.",
|
||||||
"error.language.notFound": "Język nie został odnaleziony",
|
"error.language.notFound": "Język nie został odnaleziony",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "Wystąpił błąd w polu „{field}” w bloku {blockIndex} o typie bloku „{fieldset}” w układzie {layoutIndex}",
|
"error.layout.validation.block": "Wystąpił błąd w polu „{field}” w bloku {blockIndex} o typie bloku „{fieldset}” w układzie {layoutIndex}",
|
||||||
"error.layout.validation.settings": "W ustawieniach układu {index} jest błąd",
|
"error.layout.validation.settings": "W ustawieniach układu {index} jest błąd",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "autorstwa …",
|
"field.blocks.quote.citation.placeholder": "autorstwa …",
|
||||||
"field.blocks.text.name": "Tekst",
|
"field.blocks.text.name": "Tekst",
|
||||||
"field.blocks.text.placeholder": "Tekst …",
|
"field.blocks.text.placeholder": "Tekst …",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Podpis",
|
"field.blocks.video.caption": "Podpis",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "Lokalizacja",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Wprowadź URL video",
|
"field.blocks.video.placeholder": "Wprowadź URL video",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "URL video",
|
"field.blocks.video.url.label": "URL video",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "Wymagane jest rozszerzenie <code>MB String</code>",
|
"installation.issues.mbstring": "Wymagane jest rozszerzenie <code>MB String</code>",
|
||||||
"installation.issues.media": "Folder <code>/media</code> nie istnieje lub nie ma uprawnień do zapisu",
|
"installation.issues.media": "Folder <code>/media</code> nie istnieje lub nie ma uprawnień do zapisu",
|
||||||
"installation.issues.php": "Upewnij się, że używasz <code>PHP 8+</code>",
|
"installation.issues.php": "Upewnij się, że używasz <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby wymaga <code>Apache</code>, <code>Nginx</code> lub <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "Folder <code>/site/sessions</code> nie istnieje lub nie ma uprawnień do zapisu",
|
"installation.issues.sessions": "Folder <code>/site/sessions</code> nie istnieje lub nie ma uprawnień do zapisu",
|
||||||
|
|
||||||
"language": "J\u0119zyk",
|
"language": "J\u0119zyk",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Brak raportów",
|
"stats.empty": "Brak raportów",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "Zdaje się, że folder „content” jest wystawiony na publiczny dostęp",
|
"system.issues.content": "Zdaje się, że folder „content” jest wystawiony na publiczny dostęp",
|
||||||
"system.issues.eol.kirby": "Twoja zainstalowana wersja Kirby osiągnęła koniec okresu wsparcia i nie będzie otrzymywać dalszych aktualizacji zabezpieczeń",
|
"system.issues.eol.kirby": "Twoja zainstalowana wersja Kirby osiągnęła koniec okresu wsparcia i nie będzie otrzymywać dalszych aktualizacji zabezpieczeń",
|
||||||
"system.issues.eol.plugin": "Twoja zainstalowana wersja wtyczki { plugin } osiągnęła koniec okresu wsparcia i nie będzie otrzymywać dalszych aktualizacji zabezpieczeń",
|
"system.issues.eol.plugin": "Twoja zainstalowana wersja wtyczki { plugin } osiągnęła koniec okresu wsparcia i nie będzie otrzymywać dalszych aktualizacji zabezpieczeń",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "O formulário não pôde ser salvo",
|
"error.form.notSaved": "O formulário não pôde ser salvo",
|
||||||
|
|
||||||
"error.language.code": "Por favor entre um código válido para o idioma",
|
"error.language.code": "Por favor entre um código válido para o idioma",
|
||||||
|
"error.language.create.permission": "Não tem permissões para criar um idioma",
|
||||||
|
"error.language.delete.permission": "Não tem permissões para eliminar o idioma",
|
||||||
"error.language.duplicate": "O idioma já existe",
|
"error.language.duplicate": "O idioma já existe",
|
||||||
"error.language.name": "Por favor entre um nome válido para o idioma",
|
"error.language.name": "Por favor entre um nome válido para o idioma",
|
||||||
"error.language.notFound": "O idioma não foi encontrado",
|
"error.language.notFound": "O idioma não foi encontrado",
|
||||||
|
"error.language.update.permission": "Não tem permissões para atualizar o idioma",
|
||||||
|
|
||||||
"error.layout.validation.block": "Há um erro no campo \"{field}\" no bloco {blockIndex} a usar o tipo de bloco \"{fieldset}\" no layout {layoutIndex}",
|
"error.layout.validation.block": "Há um erro no campo \"{field}\" no bloco {blockIndex} a usar o tipo de bloco \"{fieldset}\" no layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Há um erro na configuração do layout {index}",
|
"error.layout.validation.settings": "Há um erro na configuração do layout {index}",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "de …",
|
"field.blocks.quote.citation.placeholder": "de …",
|
||||||
"field.blocks.text.name": "Texto",
|
"field.blocks.text.name": "Texto",
|
||||||
"field.blocks.text.placeholder": "Texto …",
|
"field.blocks.text.placeholder": "Texto …",
|
||||||
|
"field.blocks.video.autoplay": "Reprodução automática",
|
||||||
"field.blocks.video.caption": "Legenda",
|
"field.blocks.video.caption": "Legenda",
|
||||||
|
"field.blocks.video.controls": "Controlos",
|
||||||
|
"field.blocks.video.location": "Localização ",
|
||||||
|
"field.blocks.video.loop": "Repetir",
|
||||||
|
"field.blocks.video.muted": "Sem som",
|
||||||
"field.blocks.video.name": "Vídeo ",
|
"field.blocks.video.name": "Vídeo ",
|
||||||
"field.blocks.video.placeholder": "Entre uma URL de vídeo ",
|
"field.blocks.video.placeholder": "Entre uma URL de vídeo ",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Pré-carregamento",
|
||||||
"field.blocks.video.url.label": "URL-Vídeo",
|
"field.blocks.video.url.label": "URL-Vídeo",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "A extensão <code>MB String</code> é necessária",
|
"installation.issues.mbstring": "A extensão <code>MB String</code> é necessária",
|
||||||
"installation.issues.media": "A pasta <code>/media</code> não existe ou não possui permissão de escrita",
|
"installation.issues.media": "A pasta <code>/media</code> não existe ou não possui permissão de escrita",
|
||||||
"installation.issues.php": "Certifique-se que você está usando o <code>PHP 8+</code>",
|
"installation.issues.php": "Certifique-se que você está usando o <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby necessita do <code>Apache</code>, <code>Nginx</code> ou <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "A pasta <code>/site/sessions</code> não existe ou não possui permissão de escrita",
|
"installation.issues.sessions": "A pasta <code>/site/sessions</code> não existe ou não possui permissão de escrita",
|
||||||
|
|
||||||
"language": "Idioma",
|
"language": "Idioma",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Nenhum relatório",
|
"stats.empty": "Nenhum relatório",
|
||||||
"status": "Estado",
|
"status": "Estado",
|
||||||
|
|
||||||
|
"system.info.copy": "Copiar informação",
|
||||||
|
"system.info.copied": "Informação de sistema copiada",
|
||||||
"system.issues.content": "A pasta \"content\" parece não estar protegida",
|
"system.issues.content": "A pasta \"content\" parece não estar protegida",
|
||||||
"system.issues.eol.kirby": "A versão instalada do Kirby chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
|
"system.issues.eol.kirby": "A versão instalada do Kirby chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
|
||||||
"system.issues.eol.plugin": "A versão instalada do plugin {plugin} chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
|
"system.issues.eol.plugin": "A versão instalada do plugin {plugin} chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
|
||||||
|
|||||||
@@ -104,16 +104,16 @@
|
|||||||
"error.file.extension.forbidden": "A extensão \"{extension}\" não é permitida",
|
"error.file.extension.forbidden": "A extensão \"{extension}\" não é permitida",
|
||||||
"error.file.extension.invalid": "Extensão inválida: {extension}",
|
"error.file.extension.invalid": "Extensão inválida: {extension}",
|
||||||
"error.file.extension.missing": "As extensões de \"{filename}\" estão em falta",
|
"error.file.extension.missing": "As extensões de \"{filename}\" estão em falta",
|
||||||
"error.file.maxheight": "A altura da imagem não deve exceder {height} pixels",
|
"error.file.maxheight": "A altura da imagem não deve exceder {height} píxeis",
|
||||||
"error.file.maxsize": "O ficheiro é demasiado grande",
|
"error.file.maxsize": "O ficheiro é demasiado grande",
|
||||||
"error.file.maxwidth": "A largura da imagem não deve exceder {width} pixels",
|
"error.file.maxwidth": "A largura da imagem não deve exceder {width} píxeis",
|
||||||
"error.file.mime.differs": "O ficheiro enviado precisa de ser do tipo \"{mime}\"",
|
"error.file.mime.differs": "O ficheiro enviado precisa de ser do tipo \"{mime}\"",
|
||||||
"error.file.mime.forbidden": "O tipo de mídia \"{mime}\" não é permitido",
|
"error.file.mime.forbidden": "O tipo de mídia \"{mime}\" não é permitido",
|
||||||
"error.file.mime.invalid": "Tipo de mídia inválido: {mime}",
|
"error.file.mime.invalid": "Tipo de mídia inválido: {mime}",
|
||||||
"error.file.mime.missing": "Não foi possível detectar o tipo de mídia de \"{filename}\"",
|
"error.file.mime.missing": "Não foi possível detectar o tipo de mídia de \"{filename}\"",
|
||||||
"error.file.minheight": "A altura da imagem deve ter pelo menos {height} pixels",
|
"error.file.minheight": "A altura da imagem deve ter pelo menos {height} píxeis",
|
||||||
"error.file.minsize": "O ficheiro é demasiado pequeno",
|
"error.file.minsize": "O ficheiro é demasiado pequeno",
|
||||||
"error.file.minwidth": "A largura da imagem deve ter pelo menos {width} pixels",
|
"error.file.minwidth": "A largura da imagem deve ter pelo menos {width} píxeis",
|
||||||
"error.file.name.unique": "O nome do ficheiro deve ser único",
|
"error.file.name.unique": "O nome do ficheiro deve ser único",
|
||||||
"error.file.name.missing": "O nome do ficheiro não pode ficar em branco",
|
"error.file.name.missing": "O nome do ficheiro não pode ficar em branco",
|
||||||
"error.file.notFound": "Não foi possível encontrar o ficheiro \"{filename}\"",
|
"error.file.notFound": "Não foi possível encontrar o ficheiro \"{filename}\"",
|
||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Não foi possível guardar o formulário",
|
"error.form.notSaved": "Não foi possível guardar o formulário",
|
||||||
|
|
||||||
"error.language.code": "Por favor, insira um código válido para o idioma",
|
"error.language.code": "Por favor, insira um código válido para o idioma",
|
||||||
|
"error.language.create.permission": "Não tem permissões para criar um idioma",
|
||||||
|
"error.language.delete.permission": "Não tem permissões para eliminar o idioma",
|
||||||
"error.language.duplicate": "O idioma já existe",
|
"error.language.duplicate": "O idioma já existe",
|
||||||
"error.language.name": "Por favor, insira um nome válido para o idioma",
|
"error.language.name": "Por favor, insira um nome válido para o idioma",
|
||||||
"error.language.notFound": "Não foi possível encontrar o idioma",
|
"error.language.notFound": "Não foi possível encontrar o idioma",
|
||||||
|
"error.language.update.permission": "Não tem permissões para atualizar o idioma",
|
||||||
|
|
||||||
"error.layout.validation.block": "Há um erro no campo \"{field}\" no bloco {blockIndex} a usar o tipo de bloco \"{fieldset}\" no layout {layoutIndex}",
|
"error.layout.validation.block": "Há um erro no campo \"{field}\" no bloco {blockIndex} a usar o tipo de bloco \"{fieldset}\" no layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Há um erro na configuração do layout {index}",
|
"error.layout.validation.settings": "Há um erro na configuração do layout {index}",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "de …",
|
"field.blocks.quote.citation.placeholder": "de …",
|
||||||
"field.blocks.text.name": "Texto",
|
"field.blocks.text.name": "Texto",
|
||||||
"field.blocks.text.placeholder": "Texto …",
|
"field.blocks.text.placeholder": "Texto …",
|
||||||
|
"field.blocks.video.autoplay": "Reprodução automática",
|
||||||
"field.blocks.video.caption": "Legenda",
|
"field.blocks.video.caption": "Legenda",
|
||||||
|
"field.blocks.video.controls": "Controlos",
|
||||||
|
"field.blocks.video.location": "Localização ",
|
||||||
|
"field.blocks.video.loop": "Repetir",
|
||||||
|
"field.blocks.video.muted": "Sem som",
|
||||||
"field.blocks.video.name": "Vídeo ",
|
"field.blocks.video.name": "Vídeo ",
|
||||||
"field.blocks.video.placeholder": "Insira um URL de vídeo ",
|
"field.blocks.video.placeholder": "Insira um URL de vídeo ",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Pré-carregamento",
|
||||||
"field.blocks.video.url.label": "URL-Vídeo",
|
"field.blocks.video.url.label": "URL-Vídeo",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "A extensão <code>MB String</code> é necessária",
|
"installation.issues.mbstring": "A extensão <code>MB String</code> é necessária",
|
||||||
"installation.issues.media": "A pasta <code>/media</code> não existe ou não tem permissão de escrita",
|
"installation.issues.media": "A pasta <code>/media</code> não existe ou não tem permissão de escrita",
|
||||||
"installation.issues.php": "Certifique-se que está a usar o <code>PHP 8+</code>",
|
"installation.issues.php": "Certifique-se que está a usar o <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "O Kirby necessita do <code>Apache</code>, <code>Nginx</code> ou <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "A pasta <code>/site/sessions</code> não existe ou não tem permissão de escrita",
|
"installation.issues.sessions": "A pasta <code>/site/sessions</code> não existe ou não tem permissão de escrita",
|
||||||
|
|
||||||
"language": "Idioma",
|
"language": "Idioma",
|
||||||
@@ -481,7 +490,7 @@
|
|||||||
"login.totp.disable.option": "Desativar códigos de segurança",
|
"login.totp.disable.option": "Desativar códigos de segurança",
|
||||||
"login.totp.disable.label": "Insira a sua palavra-passe para desativar códigos de segurança",
|
"login.totp.disable.label": "Insira a sua palavra-passe para desativar códigos de segurança",
|
||||||
"login.totp.disable.help": "No futuro, um segundo fator diferente, como um código de início de sessão enviado por e-mail, será solicitado quando iniciar a sessão. Poderá configurar códigos de segurança novamente mais tarde.",
|
"login.totp.disable.help": "No futuro, um segundo fator diferente, como um código de início de sessão enviado por e-mail, será solicitado quando iniciar a sessão. Poderá configurar códigos de segurança novamente mais tarde.",
|
||||||
"login.totp.disable.admin": "<p>Isto irá desactivar os códigos de segurança para <strong>{user}</strong>.</p> <p>No futuro, um segundo fator diferente, como um código de início de sessão enviado por e-mail, será solicitado quando eles iniciarem a sessão. {user} poderá configurar códigos de segurança novamente após o próximo início de sessão.</p>",
|
"login.totp.disable.admin": "<p>Isto irá desativar os códigos de segurança para <strong>{user}</strong>.</p> <p>No futuro, um segundo fator diferente, como um código de início de sessão enviado por e-mail, será solicitado quando eles iniciarem a sessão. {user} poderá configurar códigos de segurança novamente após o próximo início de sessão.</p>",
|
||||||
"login.totp.disable.success": "Códigos de segurança desativados",
|
"login.totp.disable.success": "Códigos de segurança desativados",
|
||||||
|
|
||||||
"logout": "Sair",
|
"logout": "Sair",
|
||||||
@@ -564,7 +573,7 @@
|
|||||||
"paste": "Colar",
|
"paste": "Colar",
|
||||||
"paste.after": "Colar após",
|
"paste.after": "Colar após",
|
||||||
"paste.success": "{count} colados!",
|
"paste.success": "{count} colados!",
|
||||||
"pixel": "Pixel",
|
"pixel": "Píxel",
|
||||||
"plugin": "Plugin",
|
"plugin": "Plugin",
|
||||||
"plugins": "Plugins",
|
"plugins": "Plugins",
|
||||||
"prev": "Anterior",
|
"prev": "Anterior",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Sem relatórios",
|
"stats.empty": "Sem relatórios",
|
||||||
"status": "Estado",
|
"status": "Estado",
|
||||||
|
|
||||||
|
"system.info.copy": "Copiar informação",
|
||||||
|
"system.info.copied": "Informação de sistema copiada",
|
||||||
"system.issues.content": "A pasta content parece não estar protegida",
|
"system.issues.content": "A pasta content parece não estar protegida",
|
||||||
"system.issues.eol.kirby": "A versão instalada do Kirby chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
|
"system.issues.eol.kirby": "A versão instalada do Kirby chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
|
||||||
"system.issues.eol.plugin": "A versão instalada do plugin { plugin } chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
|
"system.issues.eol.plugin": "A versão instalada do plugin { plugin } chegou ao fim da sua vida útil e não irá receber mais atualizações de segurança",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"account.delete": "Șterge-ți contul",
|
"account.delete": "Șterge-ți contul",
|
||||||
"account.delete.confirm": "Chiar vrei să îți ștergi contul? Vei fi deconectat imediat. Contul nu poate fi recuperat.",
|
"account.delete.confirm": "Chiar vrei să îți ștergi contul? Vei fi deconectat imediat. Contul nu poate fi recuperat.",
|
||||||
|
|
||||||
"activate": "Activați",
|
"activate": "Activează",
|
||||||
"add": "Adaug\u0103",
|
"add": "Adaug\u0103",
|
||||||
"alpha": "Alfa",
|
"alpha": "Alfa",
|
||||||
"author": "Autor",
|
"author": "Autor",
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
"coordinates": "Coordonate",
|
"coordinates": "Coordonate",
|
||||||
"copy": "Copiază",
|
"copy": "Copiază",
|
||||||
"copy.all": "Copiază toate",
|
"copy.all": "Copiază toate",
|
||||||
"copy.success": "copiat {count}!",
|
"copy.success": "Copiat {count}!",
|
||||||
"create": "Creează",
|
"create": "Creează",
|
||||||
"custom": "Personalizat",
|
"custom": "Personalizat",
|
||||||
|
|
||||||
@@ -63,17 +63,17 @@
|
|||||||
"email": "E-mail",
|
"email": "E-mail",
|
||||||
"email.placeholder": "email@exemplu.com",
|
"email.placeholder": "email@exemplu.com",
|
||||||
|
|
||||||
"enter": "Enter",
|
"enter": "Introdu",
|
||||||
"entries": "Întregistrări",
|
"entries": "Întregistrări",
|
||||||
"entry": "Înregistrare",
|
"entry": "Înregistrare",
|
||||||
|
|
||||||
"environment": "Mediu",
|
"environment": "Mediu",
|
||||||
|
|
||||||
"error": "Eroare",
|
"error": "Eroare",
|
||||||
"error.access.code": "Cod invalid",
|
"error.access.code": "Cod nevalid",
|
||||||
"error.access.login": "Conectare invalidă",
|
"error.access.login": "Conectare nevalidă",
|
||||||
"error.access.panel": "Nu aveți voie să accesați panoul",
|
"error.access.panel": "Nu ai voie să accesezi panoul",
|
||||||
"error.access.view": "Nu vi se permite să accesați această parte a panoului",
|
"error.access.view": "Nu ai voie să accesezi această parte a panoului",
|
||||||
|
|
||||||
"error.avatar.create.fail": "Imaginea de profil nu a putut fi încărcată",
|
"error.avatar.create.fail": "Imaginea de profil nu a putut fi încărcată",
|
||||||
"error.avatar.delete.fail": "Imaginea de profil nu a putut fi ștearsă",
|
"error.avatar.delete.fail": "Imaginea de profil nu a putut fi ștearsă",
|
||||||
@@ -88,11 +88,11 @@
|
|||||||
"error.blocks.min.singular": "Trebuie să adaugi cel puțin un bloc",
|
"error.blocks.min.singular": "Trebuie să adaugi cel puțin un bloc",
|
||||||
"error.blocks.validation": "Există o eroare la câmpul \"{field}\" în blocul {index} care folosește tipul de bloc \"{fieldset}\"",
|
"error.blocks.validation": "Există o eroare la câmpul \"{field}\" în blocul {index} care folosește tipul de bloc \"{fieldset}\"",
|
||||||
|
|
||||||
"error.cache.type.invalid": "Tipul de cache \"{type}\" este invalid",
|
"error.cache.type.invalid": "Tipul de cache \"{type}\" este nevalid",
|
||||||
|
|
||||||
"error.email.preset.notFound": "Preset-ul de e-mail \"{name}\" nu a fost găsit",
|
"error.email.preset.notFound": "Preset-ul de e-mail \"{name}\" nu a fost găsit",
|
||||||
|
|
||||||
"error.field.converter.invalid": "Convertorul \"{converter}\" invalid",
|
"error.field.converter.invalid": "Convertorul \"{converter}\" nu este valid",
|
||||||
"error.field.type.missing": "Câmpul \"{ name }\": Tipul de câmp \"{ type }\" nu există",
|
"error.field.type.missing": "Câmpul \"{ name }\": Tipul de câmp \"{ type }\" nu există",
|
||||||
|
|
||||||
"error.file.changeName.empty": "Numele nu trebuie să fie gol",
|
"error.file.changeName.empty": "Numele nu trebuie să fie gol",
|
||||||
@@ -102,14 +102,14 @@
|
|||||||
|
|
||||||
"error.file.duplicate": "Există deja un fișier cu numele \"{filename}\"",
|
"error.file.duplicate": "Există deja un fișier cu numele \"{filename}\"",
|
||||||
"error.file.extension.forbidden": "Extensia de fișier \"{extension}\" nu este permisă",
|
"error.file.extension.forbidden": "Extensia de fișier \"{extension}\" nu este permisă",
|
||||||
"error.file.extension.invalid": "Extensie de fișier invalidă: {extension}",
|
"error.file.extension.invalid": "Extensie de fișier nevalidă: {extension}",
|
||||||
"error.file.extension.missing": "Extensia de fișier pentru \"{filename}\" lipsește",
|
"error.file.extension.missing": "Extensia de fișier pentru \"{filename}\" lipsește",
|
||||||
"error.file.maxheight": "Înălțimea imaginii nu poate depăși {height} pixeli",
|
"error.file.maxheight": "Înălțimea imaginii nu poate depăși {height} pixeli",
|
||||||
"error.file.maxsize": "Fișierul este prea mare",
|
"error.file.maxsize": "Fișierul este prea mare",
|
||||||
"error.file.maxwidth": "Lățimea imaginii nu poate depăși {width} pixeli",
|
"error.file.maxwidth": "Lățimea imaginii nu poate depăși {width} pixeli",
|
||||||
"error.file.mime.differs": "Fișierul încărcat trebuie să aibă același tip mime \"{mime}\"",
|
"error.file.mime.differs": "Fișierul încărcat trebuie să aibă același tip mime \"{mime}\"",
|
||||||
"error.file.mime.forbidden": "Tipul media \"{mime}\" nu este permis",
|
"error.file.mime.forbidden": "Tipul media \"{mime}\" nu este permis",
|
||||||
"error.file.mime.invalid": "Tip mime invalid: {mime}",
|
"error.file.mime.invalid": "Tip mime nevalid: {mime}",
|
||||||
"error.file.mime.missing": "Tipul media pentru \"{filename}\" nu poate fi detectat",
|
"error.file.mime.missing": "Tipul media pentru \"{filename}\" nu poate fi detectat",
|
||||||
"error.file.minheight": "Imaginea trebuie să aibă înălțimea de minim {height} pixeli",
|
"error.file.minheight": "Imaginea trebuie să aibă înălțimea de minim {height} pixeli",
|
||||||
"error.file.minsize": "Fișierul este prea mic",
|
"error.file.minsize": "Fișierul este prea mic",
|
||||||
@@ -118,17 +118,20 @@
|
|||||||
"error.file.name.missing": "Numele fișierului nu poate fi gol",
|
"error.file.name.missing": "Numele fișierului nu poate fi gol",
|
||||||
"error.file.notFound": "Fișierul \"{filename}\" nu a fost găsit",
|
"error.file.notFound": "Fișierul \"{filename}\" nu a fost găsit",
|
||||||
"error.file.orientation": "Orientarea imaginii trebuie să fie \"{orientation}\"",
|
"error.file.orientation": "Orientarea imaginii trebuie să fie \"{orientation}\"",
|
||||||
"error.file.type.forbidden": "Nu ai permisiunea să încarci fișiere {type}",
|
"error.file.type.forbidden": "Nu ai voie să încarci fișiere {type}",
|
||||||
"error.file.type.invalid": "Tip invalid de fișier: {type}",
|
"error.file.type.invalid": "Tip nevalid de fișier: {type}",
|
||||||
"error.file.undefined": "Fișierul nu a fost găsit",
|
"error.file.undefined": "Fișierul nu a fost găsit",
|
||||||
|
|
||||||
"error.form.incomplete": "Te rog repară toate erorile din formular…",
|
"error.form.incomplete": "Te rog repară toate erorile din formular…",
|
||||||
"error.form.notSaved": "Formularul nu a putut fi salvat",
|
"error.form.notSaved": "Formularul nu a putut fi salvat",
|
||||||
|
|
||||||
"error.language.code": "Te rog introdu un cod valid pentru limbă",
|
"error.language.code": "Te rog introdu un cod valid pentru limbă",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "Limba există deja",
|
"error.language.duplicate": "Limba există deja",
|
||||||
"error.language.name": "Te rog introdu un nume valid pentru limbă",
|
"error.language.name": "Te rog introdu un nume valid pentru limbă",
|
||||||
"error.language.notFound": "Limba nu a fost găsită",
|
"error.language.notFound": "Limba nu a fost găsită",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "Există o eroare la câmpul \"{field}\" în blocul {blockIndex} care utilizează tipul de bloc \"{fieldset}\" în aranjamentul {layoutIndex}",
|
"error.layout.validation.block": "Există o eroare la câmpul \"{field}\" în blocul {blockIndex} care utilizează tipul de bloc \"{fieldset}\" în aranjamentul {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Există o eroare la setările aranjamentului {index}",
|
"error.layout.validation.settings": "Există o eroare la setările aranjamentului {index}",
|
||||||
@@ -138,7 +141,7 @@
|
|||||||
"error.license.format": "Te rog introdu un cod de licență valid",
|
"error.license.format": "Te rog introdu un cod de licență valid",
|
||||||
"error.license.verification": "Licența nu a putut fi verificată",
|
"error.license.verification": "Licența nu a putut fi verificată",
|
||||||
|
|
||||||
"error.login.totp.confirm.invalid": "Cod invalid",
|
"error.login.totp.confirm.invalid": "Cod nevalid",
|
||||||
"error.login.totp.confirm.missing": "Vă rugăm să introduceți codul curent",
|
"error.login.totp.confirm.missing": "Vă rugăm să introduceți codul curent",
|
||||||
|
|
||||||
"error.object.validation": "Există o eroare la câmpul \"{label}\":\n{message}",
|
"error.object.validation": "Există o eroare la câmpul \"{label}\":\n{message}",
|
||||||
@@ -148,7 +151,7 @@
|
|||||||
"error.page.changeSlug.permission": "Nu ai voie să schimbi apendicele URL pentru \"{slug}\"",
|
"error.page.changeSlug.permission": "Nu ai voie să schimbi apendicele URL pentru \"{slug}\"",
|
||||||
"error.page.changeSlug.reserved": "Calea paginilor de la primul nivel nu poate să înceapă cu \"{path}\"",
|
"error.page.changeSlug.reserved": "Calea paginilor de la primul nivel nu poate să înceapă cu \"{path}\"",
|
||||||
"error.page.changeStatus.incomplete": "Pagina are erori și nu poate fi publicată",
|
"error.page.changeStatus.incomplete": "Pagina are erori și nu poate fi publicată",
|
||||||
"error.page.changeStatus.permission": "Statusul acestei pagini nu poate fi schimbat",
|
"error.page.changeStatus.permission": "Starea acestei pagini nu poate fi schimbată",
|
||||||
"error.page.changeStatus.toDraft.invalid": "Pagina \"{slug}\" nu poate fi schimbată în ciornă",
|
"error.page.changeStatus.toDraft.invalid": "Pagina \"{slug}\" nu poate fi schimbată în ciornă",
|
||||||
"error.page.changeTemplate.invalid": "Șablonul paginii \"{slug}\" nu poate fi schimbat",
|
"error.page.changeTemplate.invalid": "Șablonul paginii \"{slug}\" nu poate fi schimbat",
|
||||||
"error.page.changeTemplate.permission": "Nu ai voie să schimbi șablonul pentru \"{slug}\"",
|
"error.page.changeTemplate.permission": "Nu ai voie să schimbi șablonul pentru \"{slug}\"",
|
||||||
@@ -162,7 +165,7 @@
|
|||||||
"error.page.draft.duplicate": "Există deja o ciornă cu apendicele URL \"{slug}\"",
|
"error.page.draft.duplicate": "Există deja o ciornă cu apendicele URL \"{slug}\"",
|
||||||
"error.page.duplicate": "Există deja o pagină cu apendicele URL \"{slug}\"",
|
"error.page.duplicate": "Există deja o pagină cu apendicele URL \"{slug}\"",
|
||||||
"error.page.duplicate.permission": "Nu ai voie să duplici \"{slug}\"",
|
"error.page.duplicate.permission": "Nu ai voie să duplici \"{slug}\"",
|
||||||
"error.page.move.ancestor": "Pagina nu poate fi mutată în ea însăși.",
|
"error.page.move.ancestor": "Pagina nu poate fi mutată în ea însăși",
|
||||||
"error.page.move.directory": "Directorul de pagini nu poate fi mutat",
|
"error.page.move.directory": "Directorul de pagini nu poate fi mutat",
|
||||||
"error.page.move.duplicate": "Există deja o sub-pagină cu apendicele URL \"{slug}\"",
|
"error.page.move.duplicate": "Există deja o sub-pagină cu apendicele URL \"{slug}\"",
|
||||||
"error.page.move.notFound": "Pagina mutată nu a fost găsită",
|
"error.page.move.notFound": "Pagina mutată nu a fost găsită",
|
||||||
@@ -173,7 +176,7 @@
|
|||||||
"error.page.slug.invalid": "Te rog introdu un apendice URL valid",
|
"error.page.slug.invalid": "Te rog introdu un apendice URL valid",
|
||||||
"error.page.slug.maxlength": "Lungimea slug-ului nu poate depăși \"{length}\"",
|
"error.page.slug.maxlength": "Lungimea slug-ului nu poate depăși \"{length}\"",
|
||||||
"error.page.sort.permission": "Pagina \"{slug}\" nu poate fi sortată",
|
"error.page.sort.permission": "Pagina \"{slug}\" nu poate fi sortată",
|
||||||
"error.page.status.invalid": "Te rog stabilește un status valid pentru pagină",
|
"error.page.status.invalid": "Te rog stabilește o stare validă pentru pagină",
|
||||||
"error.page.undefined": "Pagina nu a fost găsită",
|
"error.page.undefined": "Pagina nu a fost găsită",
|
||||||
"error.page.update.permission": "Nu ai voie să actualizezi \"{slug}\"",
|
"error.page.update.permission": "Nu ai voie să actualizezi \"{slug}\"",
|
||||||
|
|
||||||
@@ -274,7 +277,7 @@
|
|||||||
"expand": "Extinde",
|
"expand": "Extinde",
|
||||||
"expand.all": "Extinde toate",
|
"expand.all": "Extinde toate",
|
||||||
|
|
||||||
"field.invalid": "Câmpul este invalid",
|
"field.invalid": "Câmpul este nevalid",
|
||||||
"field.required": "Acest câmp este necesar",
|
"field.required": "Acest câmp este necesar",
|
||||||
"field.blocks.changeType": "Schimbă tipul",
|
"field.blocks.changeType": "Schimbă tipul",
|
||||||
"field.blocks.code.name": "Cod",
|
"field.blocks.code.name": "Cod",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "de …",
|
"field.blocks.quote.citation.placeholder": "de …",
|
||||||
"field.blocks.text.name": "Text",
|
"field.blocks.text.name": "Text",
|
||||||
"field.blocks.text.placeholder": "Text …",
|
"field.blocks.text.placeholder": "Text …",
|
||||||
|
"field.blocks.video.autoplay": "Autoredare",
|
||||||
"field.blocks.video.caption": "Etichetă",
|
"field.blocks.video.caption": "Etichetă",
|
||||||
|
"field.blocks.video.controls": "Controale",
|
||||||
|
"field.blocks.video.location": "Localizare",
|
||||||
|
"field.blocks.video.loop": "În buclă",
|
||||||
|
"field.blocks.video.muted": "Fără sonor",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Introdu URL-ul video-ului",
|
"field.blocks.video.placeholder": "Introdu URL-ul video-ului",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preîncarcă",
|
||||||
"field.blocks.video.url.label": "URL-ul video-ului",
|
"field.blocks.video.url.label": "URL-ul video-ului",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "Extensia <code>MB String</code> este necesară",
|
"installation.issues.mbstring": "Extensia <code>MB String</code> este necesară",
|
||||||
"installation.issues.media": "Directorul <code>/media</code> nu există sau nu are permisiuni de scriere",
|
"installation.issues.media": "Directorul <code>/media</code> nu există sau nu are permisiuni de scriere",
|
||||||
"installation.issues.php": "Asigură-te că folosești <code>PHP 8+</code>",
|
"installation.issues.php": "Asigură-te că folosești <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby are nevoie de <code>Apache</code>, <code>Nginx</code> sau <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "Directorul <code>/site/sessions</code> folder nu există sau nu are permisiuni de scriere",
|
"installation.issues.sessions": "Directorul <code>/site/sessions</code> folder nu există sau nu are permisiuni de scriere",
|
||||||
|
|
||||||
"language": "Limba",
|
"language": "Limba",
|
||||||
@@ -530,9 +539,9 @@
|
|||||||
"page.blueprint": "Această pagină nu are încă un Blueprint. Poți să-l definești în <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
|
"page.blueprint": "Această pagină nu are încă un Blueprint. Poți să-l definești în <strong>/site/blueprints/pages/{blueprint}.yml</strong>",
|
||||||
"page.changeSlug": "Schimbă URL-ul",
|
"page.changeSlug": "Schimbă URL-ul",
|
||||||
"page.changeSlug.fromTitle": "Creează din titlu",
|
"page.changeSlug.fromTitle": "Creează din titlu",
|
||||||
"page.changeStatus": "Schimbă statusul",
|
"page.changeStatus": "Schimbă starea",
|
||||||
"page.changeStatus.position": "Te rog alege o poziție",
|
"page.changeStatus.position": "Te rog alege o poziție",
|
||||||
"page.changeStatus.select": "Alege un status nou",
|
"page.changeStatus.select": "Alege o stare nouă",
|
||||||
"page.changeTemplate": "Schimbă șablonul",
|
"page.changeTemplate": "Schimbă șablonul",
|
||||||
"page.changeTemplate.notice": "Schimbarea șablonului paginii va înlătura conținutul câmpurilor care nu se potrivesc ca tip. Folosește cu prudență.",
|
"page.changeTemplate.notice": "Schimbarea șablonului paginii va înlătura conținutul câmpurilor care nu se potrivesc ca tip. Folosește cu prudență.",
|
||||||
"page.create": "Creează ca {status}",
|
"page.create": "Creează ca {status}",
|
||||||
@@ -544,7 +553,7 @@
|
|||||||
"page.duplicate.pages": "Copiază paginile",
|
"page.duplicate.pages": "Copiază paginile",
|
||||||
"page.move": "Mută pagina",
|
"page.move": "Mută pagina",
|
||||||
"page.sort": "Schimbă poziția",
|
"page.sort": "Schimbă poziția",
|
||||||
"page.status": "Status",
|
"page.status": "Stare",
|
||||||
"page.status.draft": "Ciornă",
|
"page.status.draft": "Ciornă",
|
||||||
"page.status.draft.description": "Pagina este în modul ciornă și va fi vizibilă doar editorilor conectați sau printr-un link secret",
|
"page.status.draft.description": "Pagina este în modul ciornă și va fi vizibilă doar editorilor conectați sau printr-un link secret",
|
||||||
"page.status.listed": "Publică",
|
"page.status.listed": "Publică",
|
||||||
@@ -593,7 +602,7 @@
|
|||||||
"search.all": "Afișați toate {count} rezultatele",
|
"search.all": "Afișați toate {count} rezultatele",
|
||||||
"search.results.none": "Niciun rezultat",
|
"search.results.none": "Niciun rezultat",
|
||||||
|
|
||||||
"section.invalid": "Secțiunea este invalidă",
|
"section.invalid": "Secțiunea este nevalidă",
|
||||||
"section.required": "Această secțiune este necesară",
|
"section.required": "Această secțiune este necesară",
|
||||||
|
|
||||||
"security": "Securitate",
|
"security": "Securitate",
|
||||||
@@ -609,8 +618,10 @@
|
|||||||
"split": "Împarte",
|
"split": "Împarte",
|
||||||
|
|
||||||
"stats.empty": "Niciun raport",
|
"stats.empty": "Niciun raport",
|
||||||
"status": "Status",
|
"status": "Stare",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "Directorul de conținut pare să fie expus",
|
"system.issues.content": "Directorul de conținut pare să fie expus",
|
||||||
"system.issues.eol.kirby": "Versiunea instalată de Kirby a ajuns la sfârșitul vieții utile și nu va mai primi actualizări de securitate.",
|
"system.issues.eol.kirby": "Versiunea instalată de Kirby a ajuns la sfârșitul vieții utile și nu va mai primi actualizări de securitate.",
|
||||||
"system.issues.eol.plugin": "Versiunea instalată a plugin-ului { plugin } a ajuns la sfârșitul vieții utile și nu va mai primi actualizări de securitate.",
|
"system.issues.eol.plugin": "Versiunea instalată a plugin-ului { plugin } a ajuns la sfârșitul vieții utile și nu va mai primi actualizări de securitate.",
|
||||||
@@ -622,7 +633,7 @@
|
|||||||
"system.issues.site": "Directorul site pare să fie expus",
|
"system.issues.site": "Directorul site pare să fie expus",
|
||||||
"system.issues.vulnerability.kirby": "Instalarea ta ar putea fi afectată de următoarea vulnerabilitate ({ severity } severity): { description }",
|
"system.issues.vulnerability.kirby": "Instalarea ta ar putea fi afectată de următoarea vulnerabilitate ({ severity } severity): { description }",
|
||||||
"system.issues.vulnerability.plugin": "Instalarea ta ar putea fi afectată de următoarea vulnerabilitate în plugin-ul { plugin } ({ severity } severity): { description }",
|
"system.issues.vulnerability.plugin": "Instalarea ta ar putea fi afectată de următoarea vulnerabilitate în plugin-ul { plugin } ({ severity } severity): { description }",
|
||||||
"system.updateStatus": "Status actualizare",
|
"system.updateStatus": "Starea actualizării",
|
||||||
"system.updateStatus.error": "Nu am putut căuta actualizări",
|
"system.updateStatus.error": "Nu am putut căuta actualizări",
|
||||||
"system.updateStatus.not-vulnerable": "Nicio vulnerabilitate cunoscută",
|
"system.updateStatus.not-vulnerable": "Nicio vulnerabilitate cunoscută",
|
||||||
"system.updateStatus.security-update": "Actualizare gratuită de securitate { version } disponibilă",
|
"system.updateStatus.security-update": "Actualizare gratuită de securitate { version } disponibilă",
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
|
|
||||||
"error": "Ошибка",
|
"error": "Ошибка",
|
||||||
"error.access.code": "Неверный код",
|
"error.access.code": "Неверный код",
|
||||||
"error.access.login": "Неправильный логин",
|
"error.access.login": "Неверный логин или пароль",
|
||||||
"error.access.panel": "У вас нет права доступа к панели",
|
"error.access.panel": "У вас нет права доступа к панели",
|
||||||
"error.access.view": "У вас нет прав доступа к этой части панели",
|
"error.access.view": "У вас нет прав доступа к этой части панели",
|
||||||
|
|
||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Форма не может быть сохранена",
|
"error.form.notSaved": "Форма не может быть сохранена",
|
||||||
|
|
||||||
"error.language.code": "Пожалуйста, впишите правильный код языка",
|
"error.language.code": "Пожалуйста, впишите правильный код языка",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "Язык уже есть",
|
"error.language.duplicate": "Язык уже есть",
|
||||||
"error.language.name": "Пожалуйста, впишите правильное название языка",
|
"error.language.name": "Пожалуйста, впишите правильное название языка",
|
||||||
"error.language.notFound": "Не получилось найти этот язык",
|
"error.language.notFound": "Не получилось найти этот язык",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "Ошибка в поле \"{field}\" в блоке {blockIndex} типа \"{fieldset}\" внутри разметки {layoutIndex}",
|
"error.layout.validation.block": "Ошибка в поле \"{field}\" в блоке {blockIndex} типа \"{fieldset}\" внутри разметки {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Ошибка в настройках макета {index}",
|
"error.layout.validation.settings": "Ошибка в настройках макета {index}",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "Автор …",
|
"field.blocks.quote.citation.placeholder": "Автор …",
|
||||||
"field.blocks.text.name": "Текст",
|
"field.blocks.text.name": "Текст",
|
||||||
"field.blocks.text.placeholder": "Текст …",
|
"field.blocks.text.placeholder": "Текст …",
|
||||||
|
"field.blocks.video.autoplay": "Автовоспроизведение",
|
||||||
"field.blocks.video.caption": "Подпись",
|
"field.blocks.video.caption": "Подпись",
|
||||||
|
"field.blocks.video.controls": "Элементы управления",
|
||||||
|
"field.blocks.video.location": "Расположение",
|
||||||
|
"field.blocks.video.loop": "Зациклить",
|
||||||
|
"field.blocks.video.muted": "Без звука",
|
||||||
"field.blocks.video.name": "Видео",
|
"field.blocks.video.name": "Видео",
|
||||||
"field.blocks.video.placeholder": "Введите ссылку на видео",
|
"field.blocks.video.placeholder": "Введите ссылку на видео",
|
||||||
|
"field.blocks.video.poster": "Обложка",
|
||||||
|
"field.blocks.video.preload": "Предзагрузка",
|
||||||
"field.blocks.video.url.label": "Ссылка на видео",
|
"field.blocks.video.url.label": "Ссылка на видео",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "Расширение <code>MB String</code> необходимо",
|
"installation.issues.mbstring": "Расширение <code>MB String</code> необходимо",
|
||||||
"installation.issues.media": "Каталог <code>/media</code> не существует или нет прав записи",
|
"installation.issues.media": "Каталог <code>/media</code> не существует или нет прав записи",
|
||||||
"installation.issues.php": "Убедитесь, что используется <code>PHP 8+</code>",
|
"installation.issues.php": "Убедитесь, что используется <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby требует <code>Apache</code>, <code>Nginx</code> или <code>Caddy</code> ",
|
|
||||||
"installation.issues.sessions": "Каталог <code>/site/sessions</code> не существует или нет прав записи",
|
"installation.issues.sessions": "Каталог <code>/site/sessions</code> не существует или нет прав записи",
|
||||||
|
|
||||||
"language": "\u042f\u0437\u044b\u043a",
|
"language": "\u042f\u0437\u044b\u043a",
|
||||||
@@ -447,7 +456,7 @@
|
|||||||
|
|
||||||
"lock.unsaved": "Несохраненные изменения",
|
"lock.unsaved": "Несохраненные изменения",
|
||||||
"lock.unsaved.empty": "Несохраненных изменений нет",
|
"lock.unsaved.empty": "Несохраненных изменений нет",
|
||||||
"lock.isLocked": "Несохраненные изменения <strong>{email}</strong>",
|
"lock.isLocked": "Несохраненные изменения {email}",
|
||||||
"lock.unlock": "Разблокировать",
|
"lock.unlock": "Разблокировать",
|
||||||
"lock.unlock.submit": "Разблокируйте и перезапишите несохраненные изменения <strong>{email}</strong>",
|
"lock.unlock.submit": "Разблокируйте и перезапишите несохраненные изменения <strong>{email}</strong>",
|
||||||
"lock.isUnlocked": "Были перезаписаны другим пользователем",
|
"lock.isUnlocked": "Были перезаписаны другим пользователем",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Статистики нет",
|
"stats.empty": "Статистики нет",
|
||||||
"status": "Статус",
|
"status": "Статус",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "Похоже, к папке content есть несанкционированный доступ",
|
"system.issues.content": "Похоже, к папке content есть несанкционированный доступ",
|
||||||
"system.issues.eol.kirby": "Срок службы установленной вами версии Kirby истек, и она больше не будет получать обновления для системы безопасности",
|
"system.issues.eol.kirby": "Срок службы установленной вами версии Kirby истек, и она больше не будет получать обновления для системы безопасности",
|
||||||
"system.issues.eol.plugin": "Срок службы установленной вами версии плагина { plugin } истек, и он не будет получать дальнейших обновлений для системы безопасности",
|
"system.issues.eol.plugin": "Срок службы установленной вами версии плагина { plugin } истек, и он не будет получать дальнейших обновлений для системы безопасности",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Formulár sa nepodarilo uložiť",
|
"error.form.notSaved": "Formulár sa nepodarilo uložiť",
|
||||||
|
|
||||||
"error.language.code": "Please enter a valid code for the language",
|
"error.language.code": "Please enter a valid code for the language",
|
||||||
|
"error.language.create.permission": "You are not allowed to create a language",
|
||||||
|
"error.language.delete.permission": "You are not allowed to delete the language",
|
||||||
"error.language.duplicate": "The language already exists",
|
"error.language.duplicate": "The language already exists",
|
||||||
"error.language.name": "Please enter a valid name for the language",
|
"error.language.name": "Please enter a valid name for the language",
|
||||||
"error.language.notFound": "The language could not be found",
|
"error.language.notFound": "The language could not be found",
|
||||||
|
"error.language.update.permission": "You are not allowed to update the language",
|
||||||
|
|
||||||
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
"error.layout.validation.block": "There's an error on the \"{field}\" field in block {blockIndex} using the \"{fieldset}\" block type in layout {layoutIndex}",
|
||||||
"error.layout.validation.settings": "There's an error in layout {index} settings",
|
"error.layout.validation.settings": "There's an error in layout {index} settings",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "by …",
|
"field.blocks.quote.citation.placeholder": "by …",
|
||||||
"field.blocks.text.name": "Text",
|
"field.blocks.text.name": "Text",
|
||||||
"field.blocks.text.placeholder": "Text …",
|
"field.blocks.text.placeholder": "Text …",
|
||||||
|
"field.blocks.video.autoplay": "Autoplay",
|
||||||
"field.blocks.video.caption": "Popis",
|
"field.blocks.video.caption": "Popis",
|
||||||
|
"field.blocks.video.controls": "Controls",
|
||||||
|
"field.blocks.video.location": "Poloha",
|
||||||
|
"field.blocks.video.loop": "Loop",
|
||||||
|
"field.blocks.video.muted": "Muted",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Enter a video URL",
|
"field.blocks.video.placeholder": "Enter a video URL",
|
||||||
|
"field.blocks.video.poster": "Poster",
|
||||||
|
"field.blocks.video.preload": "Preload",
|
||||||
"field.blocks.video.url.label": "Video-URL",
|
"field.blocks.video.url.label": "Video-URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "<code>MB String</code> rozšírenie je povinné",
|
"installation.issues.mbstring": "<code>MB String</code> rozšírenie je povinné",
|
||||||
"installation.issues.media": "Priečinok <code>/media</code> neexistuje alebo nie je nastavený ako zapisovateľný",
|
"installation.issues.media": "Priečinok <code>/media</code> neexistuje alebo nie je nastavený ako zapisovateľný",
|
||||||
"installation.issues.php": "Uistite sa, že používate <code>PHP 8+</code>",
|
"installation.issues.php": "Uistite sa, že používate <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby vyžaduje <code>Apache</code>, <code>Nginx</code> alebo <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "Priečinok <code>/site/sessions</code> neexistuje alebo nie je nastavený ako zapisovateľný",
|
"installation.issues.sessions": "Priečinok <code>/site/sessions</code> neexistuje alebo nie je nastavený ako zapisovateľný",
|
||||||
|
|
||||||
"language": "Jazyk",
|
"language": "Jazyk",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "No reports",
|
"stats.empty": "No reports",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|
||||||
|
"system.info.copy": "Copy info",
|
||||||
|
"system.info.copied": "System info copied",
|
||||||
"system.issues.content": "The content folder seems to be exposed",
|
"system.issues.content": "The content folder seems to be exposed",
|
||||||
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates",
|
||||||
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
"system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates",
|
||||||
|
|||||||
@@ -126,16 +126,19 @@
|
|||||||
"error.form.notSaved": "Formuläret kunde inte sparas",
|
"error.form.notSaved": "Formuläret kunde inte sparas",
|
||||||
|
|
||||||
"error.language.code": "Ange en giltig kod för språket",
|
"error.language.code": "Ange en giltig kod för språket",
|
||||||
|
"error.language.create.permission": "Du saknar behörighet att skapa ett nytt språk",
|
||||||
|
"error.language.delete.permission": "Du saknar behörighet att radera språket",
|
||||||
"error.language.duplicate": "Språket finns redan",
|
"error.language.duplicate": "Språket finns redan",
|
||||||
"error.language.name": "Ange ett giltigt namn för språket",
|
"error.language.name": "Ange ett giltigt namn för språket",
|
||||||
"error.language.notFound": "Språket hittades inte",
|
"error.language.notFound": "Språket hittades inte",
|
||||||
|
"error.language.update.permission": "Du saknar behörighet att redigera språket",
|
||||||
|
|
||||||
"error.layout.validation.block": "Det finns ett fel i fältet \"{field}\" i blocket {blockIndex} med blocktypen \"{fieldset}\" i layouten {layoutIndex}",
|
"error.layout.validation.block": "Det finns ett fel i fältet \"{field}\" i blocket {blockIndex} med blocktypen \"{fieldset}\" i layouten {layoutIndex}",
|
||||||
"error.layout.validation.settings": "Det finns ett fel i inställningarna för layout {index}",
|
"error.layout.validation.settings": "Det finns ett fel i inställningarna för layout {index}",
|
||||||
|
|
||||||
"error.license.domain": "Domänen för licensen saknas",
|
"error.license.domain": "Domänen för licensen saknas",
|
||||||
"error.license.email": "Ange en giltig e-postadress",
|
"error.license.email": "Ange en giltig e-postadress",
|
||||||
"error.license.format": "Please enter a valid license code",
|
"error.license.format": "Ange en giltig licenskod",
|
||||||
"error.license.verification": "Licensen kunde inte verifieras",
|
"error.license.verification": "Licensen kunde inte verifieras",
|
||||||
|
|
||||||
"error.login.totp.confirm.invalid": "Ogiltig kod",
|
"error.login.totp.confirm.invalid": "Ogiltig kod",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "av …",
|
"field.blocks.quote.citation.placeholder": "av …",
|
||||||
"field.blocks.text.name": "Text",
|
"field.blocks.text.name": "Text",
|
||||||
"field.blocks.text.placeholder": "Text …",
|
"field.blocks.text.placeholder": "Text …",
|
||||||
|
"field.blocks.video.autoplay": "Autospela",
|
||||||
"field.blocks.video.caption": "Rubrik",
|
"field.blocks.video.caption": "Rubrik",
|
||||||
|
"field.blocks.video.controls": "Kontroller",
|
||||||
|
"field.blocks.video.location": "Plats",
|
||||||
|
"field.blocks.video.loop": "Loopa",
|
||||||
|
"field.blocks.video.muted": "Ljud av",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Ange en URL till en video",
|
"field.blocks.video.placeholder": "Ange en URL till en video",
|
||||||
|
"field.blocks.video.poster": "Stillbild",
|
||||||
|
"field.blocks.video.preload": "Förladda",
|
||||||
"field.blocks.video.url.label": "Video-URL",
|
"field.blocks.video.url.label": "Video-URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "Tillägget <code>MB String</code> krävs",
|
"installation.issues.mbstring": "Tillägget <code>MB String</code> krävs",
|
||||||
"installation.issues.media": "Mappen <code>/media</code> finns inte eller är inte skrivbar",
|
"installation.issues.media": "Mappen <code>/media</code> finns inte eller är inte skrivbar",
|
||||||
"installation.issues.php": "Se till att du använder <code>PHP 8+</code>",
|
"installation.issues.php": "Se till att du använder <code>PHP 8+</code>",
|
||||||
"installation.issues.server": "Kirby kräver <code>Apache</code>, <code>Nginx</code> eller <code>Caddy</code>",
|
|
||||||
"installation.issues.sessions": "Mappen <code>/site/sessions</code> finns inte eller är inte skrivbar",
|
"installation.issues.sessions": "Mappen <code>/site/sessions</code> finns inte eller är inte skrivbar",
|
||||||
|
|
||||||
"language": "Spr\u00e5k",
|
"language": "Spr\u00e5k",
|
||||||
@@ -425,7 +434,7 @@
|
|||||||
"license.code.label": "Ange din licenskod",
|
"license.code.label": "Ange din licenskod",
|
||||||
"license.status.active.info": "Inkluderar nya större versioner fram till {date}",
|
"license.status.active.info": "Inkluderar nya större versioner fram till {date}",
|
||||||
"license.status.active.label": "Giltig licens",
|
"license.status.active.label": "Giltig licens",
|
||||||
"license.status.demo.info": "This is a demo installation",
|
"license.status.demo.info": "Detta är en demoinstallation",
|
||||||
"license.status.demo.label": "Demo",
|
"license.status.demo.label": "Demo",
|
||||||
"license.status.inactive.info": "Förnya licensen för att uppdatera till nyare större versioner",
|
"license.status.inactive.info": "Förnya licensen för att uppdatera till nyare större versioner",
|
||||||
"license.status.inactive.label": "Inga nya större versioner",
|
"license.status.inactive.label": "Inga nya större versioner",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Inga rapporter",
|
"stats.empty": "Inga rapporter",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
|
||||||
|
"system.info.copy": "Kopiera info",
|
||||||
|
"system.info.copied": "Systeminformation kopierad",
|
||||||
"system.issues.content": "Mappen content verkar vara exponerad",
|
"system.issues.content": "Mappen content verkar vara exponerad",
|
||||||
"system.issues.eol.kirby": "Din installerade Kirby-version har nått slutet av sin livscykel och kommer inte att få fler säkerhetsuppdateringar",
|
"system.issues.eol.kirby": "Din installerade Kirby-version har nått slutet av sin livscykel och kommer inte att få fler säkerhetsuppdateringar",
|
||||||
"system.issues.eol.plugin": "Den installerade versionen av tillägget { plugin } har nått slutet på sin livscykel och kommer inte att få fler säkerhetsuppdateringar.",
|
"system.issues.eol.plugin": "Den installerade versionen av tillägget { plugin } har nått slutet på sin livscykel och kommer inte att få fler säkerhetsuppdateringar.",
|
||||||
|
|||||||
@@ -126,9 +126,12 @@
|
|||||||
"error.form.notSaved": "Form kaydedilemedi",
|
"error.form.notSaved": "Form kaydedilemedi",
|
||||||
|
|
||||||
"error.language.code": "Lütfen dil için geçerli bir kod girin",
|
"error.language.code": "Lütfen dil için geçerli bir kod girin",
|
||||||
|
"error.language.create.permission": "Bir dil oluşturmanıza izin verilmiyor",
|
||||||
|
"error.language.delete.permission": "Dili silmenize izin verilmiyor",
|
||||||
"error.language.duplicate": "Bu dil zaten var",
|
"error.language.duplicate": "Bu dil zaten var",
|
||||||
"error.language.name": "Lütfen dil için geçerli bir isim girin",
|
"error.language.name": "Lütfen dil için geçerli bir isim girin",
|
||||||
"error.language.notFound": "Dil bulunamadı",
|
"error.language.notFound": "Dil bulunamadı",
|
||||||
|
"error.language.update.permission": "Dili güncellemenize izin verilmiyor",
|
||||||
|
|
||||||
"error.layout.validation.block": "{layoutIndex}. sıradaki düzende \"{fieldset}\" blok türünü kullanan {blockIndex}. bloktaki \"{field}\" alanında bir hata var",
|
"error.layout.validation.block": "{layoutIndex}. sıradaki düzende \"{fieldset}\" blok türünü kullanan {blockIndex}. bloktaki \"{field}\" alanında bir hata var",
|
||||||
"error.layout.validation.settings": "{index}. düzen ayarlarında bir hata var",
|
"error.layout.validation.settings": "{index}. düzen ayarlarında bir hata var",
|
||||||
@@ -317,9 +320,16 @@
|
|||||||
"field.blocks.quote.citation.placeholder": "yazar …",
|
"field.blocks.quote.citation.placeholder": "yazar …",
|
||||||
"field.blocks.text.name": "Metin",
|
"field.blocks.text.name": "Metin",
|
||||||
"field.blocks.text.placeholder": "Metin …",
|
"field.blocks.text.placeholder": "Metin …",
|
||||||
|
"field.blocks.video.autoplay": "Otomatik oynatma",
|
||||||
"field.blocks.video.caption": "Altyazı",
|
"field.blocks.video.caption": "Altyazı",
|
||||||
|
"field.blocks.video.controls": "Kontroller",
|
||||||
|
"field.blocks.video.location": "Lokasyon",
|
||||||
|
"field.blocks.video.loop": "Döngü",
|
||||||
|
"field.blocks.video.muted": "Sessiz",
|
||||||
"field.blocks.video.name": "Video",
|
"field.blocks.video.name": "Video",
|
||||||
"field.blocks.video.placeholder": "Bir video URL'si girin",
|
"field.blocks.video.placeholder": "Bir video URL'si girin",
|
||||||
|
"field.blocks.video.poster": "Kapak",
|
||||||
|
"field.blocks.video.preload": "Önyükleme",
|
||||||
"field.blocks.video.url.label": "Video-URL",
|
"field.blocks.video.url.label": "Video-URL",
|
||||||
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
"field.blocks.video.url.placeholder": "https://youtube.com/?v=",
|
||||||
|
|
||||||
@@ -379,7 +389,6 @@
|
|||||||
"installation.issues.mbstring": "<code>MB String</code> eklentisi gerekli",
|
"installation.issues.mbstring": "<code>MB String</code> eklentisi gerekli",
|
||||||
"installation.issues.media": "<code>/media</code> klasörü yok yada yazılamaz",
|
"installation.issues.media": "<code>/media</code> klasörü yok yada yazılamaz",
|
||||||
"installation.issues.php": "<code>PHP 8+</code> kullandığınızdan emin olun. ",
|
"installation.issues.php": "<code>PHP 8+</code> kullandığınızdan emin olun. ",
|
||||||
"installation.issues.server": "Kirby <code>Apache</code>, <code>Nginx</code> veya <code>Caddy</code> gerektirir",
|
|
||||||
"installation.issues.sessions": "<code>/site/sessions</code> klasörü mevcut değil veya yazılabilir değil",
|
"installation.issues.sessions": "<code>/site/sessions</code> klasörü mevcut değil veya yazılabilir değil",
|
||||||
|
|
||||||
"language": "Dil",
|
"language": "Dil",
|
||||||
@@ -611,6 +620,8 @@
|
|||||||
"stats.empty": "Rapor yok",
|
"stats.empty": "Rapor yok",
|
||||||
"status": "Durum",
|
"status": "Durum",
|
||||||
|
|
||||||
|
"system.info.copy": "Bilgileri kopyala",
|
||||||
|
"system.info.copied": "Sistem bilgisi kopyalandı",
|
||||||
"system.issues.content": "İçerik klasörü açığa çıkmış görünüyor",
|
"system.issues.content": "İçerik klasörü açığa çıkmış görünüyor",
|
||||||
"system.issues.eol.kirby": "Yüklü Kirby sürümünüz kullanım ömrünün sonuna ulaştı ve daha fazla güvenlik güncellemesi almayacak",
|
"system.issues.eol.kirby": "Yüklü Kirby sürümünüz kullanım ömrünün sonuna ulaştı ve daha fazla güvenlik güncellemesi almayacak",
|
||||||
"system.issues.eol.plugin": "{ plugin } eklentisinin yüklü sürümü kullanım ömrünün sonuna ulaştı ve daha fazla güvenlik güncellemesi almayacak",
|
"system.issues.eol.plugin": "{ plugin } eklentisinin yüklü sürümü kullanım ömrünün sonuna ulaştı ve daha fazla güvenlik güncellemesi almayacak",
|
||||||
|
|||||||
BIN
kirby/panel/dist/apple-touch-icon-dark.png
vendored
Normal file
BIN
kirby/panel/dist/apple-touch-icon-dark.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
2
kirby/panel/dist/css/style.min.css
vendored
2
kirby/panel/dist/css/style.min.css
vendored
File diff suppressed because one or more lines are too long
BIN
kirby/panel/dist/favicon-dark.png
vendored
Normal file
BIN
kirby/panel/dist/favicon-dark.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 416 B |
41
kirby/panel/dist/img/icons.svg
vendored
41
kirby/panel/dist/img/icons.svg
vendored
@@ -20,6 +20,9 @@
|
|||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-angle-down" viewBox="0 0 24 24">
|
<symbol id="icon-angle-down" viewBox="0 0 24 24">
|
||||||
<path d="M11.9997 13.1714L16.9495 8.22168L18.3637 9.63589L11.9997 15.9999L5.63574 9.63589L7.04996 8.22168L11.9997 13.1714Z" />
|
<path d="M11.9997 13.1714L16.9495 8.22168L18.3637 9.63589L11.9997 15.9999L5.63574 9.63589L7.04996 8.22168L11.9997 13.1714Z" />
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-angle-dropdown" viewBox="0 0 24 24">
|
||||||
|
<path d="M12 15.0006L7.75732 10.758L9.17154 9.34375L12 12.1722L14.8284 9.34375L16.2426 10.758L12 15.0006Z" />
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-angle-left" viewBox="0 0 24 24">
|
<symbol id="icon-angle-left" viewBox="0 0 24 24">
|
||||||
<path d="M10.8284 12.0007L15.7782 16.9504L14.364 18.3646L8 12.0007L14.364 5.63672L15.7782 7.05093L10.8284 12.0007Z" />
|
<path d="M10.8284 12.0007L15.7782 16.9504L14.364 18.3646L8 12.0007L14.364 5.63672L15.7782 7.05093L10.8284 12.0007Z" />
|
||||||
@@ -86,7 +89,7 @@
|
|||||||
<path d="M4.00488 16V4H2.00488V2H5.00488C5.55717 2 6.00488 2.44772 6.00488 3V15H18.4433L20.4433 7H8.00488V5H21.7241C22.2764 5 22.7241 5.44772 22.7241 6C22.7241 6.08176 22.7141 6.16322 22.6942 6.24254L20.1942 16.2425C20.083 16.6877 19.683 17 19.2241 17H5.00488C4.4526 17 4.00488 16.5523 4.00488 16ZM6.00488 23C4.90031 23 4.00488 22.1046 4.00488 21C4.00488 19.8954 4.90031 19 6.00488 19C7.10945 19 8.00488 19.8954 8.00488 21C8.00488 22.1046 7.10945 23 6.00488 23ZM18.0049 23C16.9003 23 16.0049 22.1046 16.0049 21C16.0049 19.8954 16.9003 19 18.0049 19C19.1095 19 20.0049 19.8954 20.0049 21C20.0049 22.1046 19.1095 23 18.0049 23Z"/>
|
<path d="M4.00488 16V4H2.00488V2H5.00488C5.55717 2 6.00488 2.44772 6.00488 3V15H18.4433L20.4433 7H8.00488V5H21.7241C22.2764 5 22.7241 5.44772 22.7241 6C22.7241 6.08176 22.7141 6.16322 22.6942 6.24254L20.1942 16.2425C20.083 16.6877 19.683 17 19.2241 17H5.00488C4.4526 17 4.00488 16.5523 4.00488 16ZM6.00488 23C4.90031 23 4.00488 22.1046 4.00488 21C4.00488 19.8954 4.90031 19 6.00488 19C7.10945 19 8.00488 19.8954 8.00488 21C8.00488 22.1046 7.10945 23 6.00488 23ZM18.0049 23C16.9003 23 16.0049 22.1046 16.0049 21C16.0049 19.8954 16.9003 19 18.0049 19C19.1095 19 20.0049 19.8954 20.0049 21C20.0049 22.1046 19.1095 23 18.0049 23Z"/>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-chart" viewBox="0 0 24 24">
|
<symbol id="icon-chart" viewBox="0 0 24 24">
|
||||||
<path d="M3 12H7V21H3V12ZM17 8H21V21H17V8ZM10 2H14V21H10V2Z"/>
|
<path d="M2 9H4V21H2V9ZM8 3H10V21H8V3ZM14 12H16V21H14V12ZM20 6H22V21H20V6Z" />
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-chat" viewBox="0 0 24 24">
|
<symbol id="icon-chat" viewBox="0 0 24 24">
|
||||||
<path d="M5.45455 15L1 18.5V3C1 2.44772 1.44772 2 2 2H17C17.5523 2 18 2.44772 18 3V15H5.45455ZM4.76282 13H16V4H3V14.3851L4.76282 13ZM8 17H18.2372L20 18.3851V8H21C21.5523 8 22 8.44772 22 9V22.5L17.5455 19H9C8.44772 19 8 18.5523 8 18V17Z"/>
|
<path d="M5.45455 15L1 18.5V3C1 2.44772 1.44772 2 2 2H17C17.5523 2 18 2.44772 18 3V15H5.45455ZM4.76282 13H16V4H3V14.3851L4.76282 13ZM8 17H18.2372L20 18.3851V8H21C21.5523 8 22 8.44772 22 9V22.5L17.5455 19H9C8.44772 19 8 18.5523 8 18V17Z"/>
|
||||||
@@ -126,8 +129,7 @@
|
|||||||
<path d="M2.21329 14.0601C1.92026 12.6755 1.93213 11.2743 2.21413 9.94038C3.32405 10.0711 4.29284 9.7035 4.60963 8.93871C4.92641 8.17392 4.50129 7.22896 3.62405 6.53655C4.36788 5.3939 5.35029 4.39471 6.53651 3.62289C7.22898 4.50059 8.17422 4.92601 8.9392 4.60914C9.70418 4.29227 10.0717 3.32308 9.94077 2.21281C11.3253 1.91977 12.7265 1.93164 14.0605 2.21364C13.9298 3.32356 14.2973 4.29235 15.0621 4.60914C15.8269 4.92593 16.7719 4.5008 17.4643 3.62356C18.6069 4.36739 19.6061 5.3498 20.3779 6.53602C19.5002 7.22849 19.0748 8.17373 19.3917 8.93871C19.7086 9.70369 20.6778 10.0713 21.788 9.94028C22.0811 11.3248 22.0692 12.726 21.7872 14.06C20.6773 13.9293 19.7085 14.2969 19.3917 15.0616C19.0749 15.8264 19.5 16.7714 20.3773 17.4638C19.6335 18.6064 18.651 19.6056 17.4648 20.3775C16.7724 19.4998 15.8271 19.0743 15.0621 19.3912C14.2971 19.7081 13.9296 20.6773 14.0606 21.7875C12.676 22.0806 11.2748 22.0687 9.94087 21.7867C10.0716 20.6768 9.70399 19.708 8.9392 19.3912C8.17441 19.0744 7.22945 19.4995 6.53703 20.3768C5.39439 19.633 4.3952 18.6506 3.62338 17.4643C4.50108 16.7719 4.92649 15.8266 4.60963 15.0616C4.29276 14.2967 3.32356 13.9291 2.21329 14.0601ZM4.00073 12.2104C5.10054 12.5148 6.00815 13.2117 6.45739 14.2963C6.90662 15.3808 6.75764 16.5154 6.19519 17.5083C6.29175 17.61 6.39096 17.7092 6.4927 17.8056C7.48558 17.2432 8.6201 17.0943 9.70456 17.5435C10.789 17.9927 11.4859 18.9002 11.7904 19.9999C11.9305 20.0037 12.0707 20.0038 12.2109 20.0001C12.5153 18.9003 13.2122 17.9927 14.2968 17.5435C15.3813 17.0942 16.5159 17.2432 17.5088 17.8057C17.6105 17.7091 17.7096 17.6099 17.806 17.5081C17.2437 16.5153 17.0947 15.3807 17.5439 14.2963C17.9931 13.2118 18.9007 12.5149 20.0004 12.2105C20.0042 12.0704 20.0043 11.9301 20.0006 11.7899C18.9008 11.4856 17.9932 10.7886 17.5439 9.70407C17.0947 8.61953 17.2437 7.48494 17.8061 6.49204C17.7096 6.39031 17.6104 6.2912 17.5086 6.19479C16.5158 6.75717 15.3812 6.9061 14.2968 6.4569C13.2123 6.0077 12.5154 5.10016 12.211 4.00044C12.0709 3.99666 11.9306 3.99659 11.7904 4.00024C11.486 5.10005 10.7891 6.00767 9.70456 6.4569C8.62002 6.90613 7.48543 6.75715 6.49252 6.1947C6.39079 6.29126 6.29169 6.39047 6.19528 6.49222C6.75766 7.48509 6.90659 8.61961 6.45739 9.70407C6.00819 10.7885 5.10065 11.4855 4.00092 11.7899C3.99715 11.93 3.99708 12.0702 4.00073 12.2104ZM12.0007 15.0002C10.3438 15.0002 9.00066 13.657 9.00066 12.0002C9.00066 10.3433 10.3438 9.00018 12.0007 9.00018C13.6575 9.00018 15.0007 10.3433 15.0007 12.0002C15.0007 13.657 13.6575 15.0002 12.0007 15.0002ZM12.0007 13.0002C12.5529 13.0002 13.0007 12.5525 13.0007 12.0002C13.0007 11.4479 12.5529 11.0002 12.0007 11.0002C11.4484 11.0002 11.0007 11.4479 11.0007 12.0002C11.0007 12.5525 11.4484 13.0002 12.0007 13.0002Z"/>
|
<path d="M2.21329 14.0601C1.92026 12.6755 1.93213 11.2743 2.21413 9.94038C3.32405 10.0711 4.29284 9.7035 4.60963 8.93871C4.92641 8.17392 4.50129 7.22896 3.62405 6.53655C4.36788 5.3939 5.35029 4.39471 6.53651 3.62289C7.22898 4.50059 8.17422 4.92601 8.9392 4.60914C9.70418 4.29227 10.0717 3.32308 9.94077 2.21281C11.3253 1.91977 12.7265 1.93164 14.0605 2.21364C13.9298 3.32356 14.2973 4.29235 15.0621 4.60914C15.8269 4.92593 16.7719 4.5008 17.4643 3.62356C18.6069 4.36739 19.6061 5.3498 20.3779 6.53602C19.5002 7.22849 19.0748 8.17373 19.3917 8.93871C19.7086 9.70369 20.6778 10.0713 21.788 9.94028C22.0811 11.3248 22.0692 12.726 21.7872 14.06C20.6773 13.9293 19.7085 14.2969 19.3917 15.0616C19.0749 15.8264 19.5 16.7714 20.3773 17.4638C19.6335 18.6064 18.651 19.6056 17.4648 20.3775C16.7724 19.4998 15.8271 19.0743 15.0621 19.3912C14.2971 19.7081 13.9296 20.6773 14.0606 21.7875C12.676 22.0806 11.2748 22.0687 9.94087 21.7867C10.0716 20.6768 9.70399 19.708 8.9392 19.3912C8.17441 19.0744 7.22945 19.4995 6.53703 20.3768C5.39439 19.633 4.3952 18.6506 3.62338 17.4643C4.50108 16.7719 4.92649 15.8266 4.60963 15.0616C4.29276 14.2967 3.32356 13.9291 2.21329 14.0601ZM4.00073 12.2104C5.10054 12.5148 6.00815 13.2117 6.45739 14.2963C6.90662 15.3808 6.75764 16.5154 6.19519 17.5083C6.29175 17.61 6.39096 17.7092 6.4927 17.8056C7.48558 17.2432 8.6201 17.0943 9.70456 17.5435C10.789 17.9927 11.4859 18.9002 11.7904 19.9999C11.9305 20.0037 12.0707 20.0038 12.2109 20.0001C12.5153 18.9003 13.2122 17.9927 14.2968 17.5435C15.3813 17.0942 16.5159 17.2432 17.5088 17.8057C17.6105 17.7091 17.7096 17.6099 17.806 17.5081C17.2437 16.5153 17.0947 15.3807 17.5439 14.2963C17.9931 13.2118 18.9007 12.5149 20.0004 12.2105C20.0042 12.0704 20.0043 11.9301 20.0006 11.7899C18.9008 11.4856 17.9932 10.7886 17.5439 9.70407C17.0947 8.61953 17.2437 7.48494 17.8061 6.49204C17.7096 6.39031 17.6104 6.2912 17.5086 6.19479C16.5158 6.75717 15.3812 6.9061 14.2968 6.4569C13.2123 6.0077 12.5154 5.10016 12.211 4.00044C12.0709 3.99666 11.9306 3.99659 11.7904 4.00024C11.486 5.10005 10.7891 6.00767 9.70456 6.4569C8.62002 6.90613 7.48543 6.75715 6.49252 6.1947C6.39079 6.29126 6.29169 6.39047 6.19528 6.49222C6.75766 7.48509 6.90659 8.61961 6.45739 9.70407C6.00819 10.7885 5.10065 11.4855 4.00092 11.7899C3.99715 11.93 3.99708 12.0702 4.00073 12.2104ZM12.0007 15.0002C10.3438 15.0002 9.00066 13.657 9.00066 12.0002C9.00066 10.3433 10.3438 9.00018 12.0007 9.00018C13.6575 9.00018 15.0007 10.3433 15.0007 12.0002C15.0007 13.657 13.6575 15.0002 12.0007 15.0002ZM12.0007 13.0002C12.5529 13.0002 13.0007 12.5525 13.0007 12.0002C13.0007 11.4479 12.5529 11.0002 12.0007 11.0002C11.4484 11.0002 11.0007 11.4479 11.0007 12.0002C11.0007 12.5525 11.4484 13.0002 12.0007 13.0002Z"/>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-collapse" viewBox="0 0 24 24">
|
<symbol id="icon-collapse" viewBox="0 0 24 24">
|
||||||
<path d="M 7.277948 17.761471 L 3.03918 22.000246 L 1.97949 20.940571 L 6.218198 16.701794 L 2.509335 12.992909 L 10.986812 12.992909 L 10.986812 21.470409 L 7.277948 17.761471 Z"/>
|
<path d="M15 4.00008H13V11.0001H20V9.00008H16.4142L20.7071 4.70718L19.2929 3.29297L15 7.58586V4.00008ZM4.00008 15H7.58586L3.29297 19.2929L4.70718 20.7071L9.00008 16.4142V20H11.0001V13H4.00008V15Z" />
|
||||||
<path d="M 17.761225 6.27887 L 21.470163 9.987807 L 12.992662 9.987807 L 12.992662 1.510315 L 16.70155 5.219193 L 20.940325 0.980471 L 22 2.040154 L 17.761225 6.27887 Z"/>
|
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-copy" viewBox="0 0 24 24">
|
<symbol id="icon-copy" viewBox="0 0 24 24">
|
||||||
<path d="M6.9998 6V3C6.9998 2.44772 7.44752 2 7.9998 2H19.9998C20.5521 2 20.9998 2.44772 20.9998 3V17C20.9998 17.5523 20.5521 18 19.9998 18H16.9998V20.9991C16.9998 21.5519 16.5499 22 15.993 22H4.00666C3.45059 22 3 21.5554 3 20.9991L3.0026 7.00087C3.0027 6.44811 3.45264 6 4.00942 6H6.9998ZM5.00242 8L5.00019 20H14.9998V8H5.00242ZM8.9998 6H16.9998V16H18.9998V4H8.9998V6Z" />
|
<path d="M6.9998 6V3C6.9998 2.44772 7.44752 2 7.9998 2H19.9998C20.5521 2 20.9998 2.44772 20.9998 3V17C20.9998 17.5523 20.5521 18 19.9998 18H16.9998V20.9991C16.9998 21.5519 16.5499 22 15.993 22H4.00666C3.45059 22 3 21.5554 3 20.9991L3.0026 7.00087C3.0027 6.44811 3.45264 6 4.00942 6H6.9998ZM5.00242 8L5.00019 20H14.9998V8H5.00242ZM8.9998 6H16.9998V16H18.9998V4H8.9998V6Z" />
|
||||||
@@ -151,7 +153,7 @@
|
|||||||
<path d="M4 16H20V5H4V16ZM13 18V20H17V22H7V20H11V18H2.9918C2.44405 18 2 17.5511 2 16.9925V4.00748C2 3.45107 2.45531 3 2.9918 3H21.0082C21.556 3 22 3.44892 22 4.00748V16.9925C22 17.5489 21.5447 18 21.0082 18H13Z"/>
|
<path d="M4 16H20V5H4V16ZM13 18V20H17V22H7V20H11V18H2.9918C2.44405 18 2 17.5511 2 16.9925V4.00748C2 3.45107 2.45531 3 2.9918 3H21.0082C21.556 3 22 3.44892 22 4.00748V16.9925C22 17.5489 21.5447 18 21.0082 18H13Z"/>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-divider" viewBox="0 0 24 24">
|
<symbol id="icon-divider" viewBox="0 0 24 24">
|
||||||
<path d="M17 21V17H7V21H5V16C5 15.4477 5.44772 15 6 15H18C18.5523 15 19 15.4477 19 16V21H17ZM7 3V7H17V3H19V8C19 8.55228 18.5523 9 18 9H6C5.44772 9 5 8.55228 5 8V3H7ZM2 9L6 12L2 15V9ZM22 9V15L18 12L22 9Z"/>
|
<path d="M22 11L2 11L2 13L22 13V11ZM18 2C19.1046 2 20 2.89543 20 4V7C20 8.10457 19.1046 9 18 9L6 9C4.89543 9 4 8.10457 4 7L4 4C4 2.89543 4.89543 2 6 2L18 2ZM18 20H6V17L18 17V20ZM20 17C20 15.8954 19.1046 15 18 15L6 15C4.89543 15 4 15.8954 4 17L4 20C4 21.1046 4.89543 22 6 22H18C19.1046 22 20 21.1046 20 20V17Z" />
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-document" viewBox="0 0 24 24">
|
<symbol id="icon-document" viewBox="0 0 24 24">
|
||||||
<path d="M20 22H4C3.44772 22 3 21.5523 3 21V3C3 2.44772 3.44772 2 4 2H20C20.5523 2 21 2.44772 21 3V21C21 21.5523 20.5523 22 20 22ZM19 20V4H5V20H19ZM7 6H11V10H7V6ZM7 12H17V14H7V12ZM7 16H17V18H7V16ZM13 7H17V9H13V7Z"/>
|
<path d="M20 22H4C3.44772 22 3 21.5523 3 21V3C3 2.44772 3.44772 2 4 2H20C20.5523 2 21 2.44772 21 3V21C21 21.5523 20.5523 22 20 22ZM19 20V4H5V20H19ZM7 6H11V10H7V6ZM7 12H17V14H7V12ZM7 16H17V18H7V16ZM13 7H17V9H13V7Z"/>
|
||||||
@@ -175,8 +177,7 @@
|
|||||||
<path d="M3 3H21C21.5523 3 22 3.44772 22 4V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3ZM20 7.23792L12.0718 14.338L4 7.21594V19H20V7.23792ZM4.51146 5L12.0619 11.662L19.501 5H4.51146Z"/>
|
<path d="M3 3H21C21.5523 3 22 3.44772 22 4V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3ZM20 7.23792L12.0718 14.338L4 7.21594V19H20V7.23792ZM4.51146 5L12.0619 11.662L19.501 5H4.51146Z"/>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-expand" viewBox="0 0 24 24">
|
<symbol id="icon-expand" viewBox="0 0 24 24">
|
||||||
<path d="M 18.277948 6.761469 L 14.03918 11.000246 L 12.979489 9.940571 L 17.218199 5.701796 L 13.509336 1.992908 L 21.986811 1.992908 L 21.986811 10.470408 L 18.277948 6.761469 Z"/>
|
<path d="M17.5858 5H14V3H21V10H19V6.41421L14.7071 10.7071L13.2929 9.29289L17.5858 5ZM3 14H5V17.5858L9.29289 13.2929L10.7071 14.7071L6.41421 19H10V21H3V14Z" />
|
||||||
<path d="M 6.761224 18.27887 L 10.470162 21.987808 L 1.992663 21.987808 L 1.992663 13.510315 L 5.701549 17.219193 L 9.940325 12.980471 L 11 14.040153 L 6.761224 18.27887 Z"/>
|
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-facebook" viewBox="0 0 24 24">
|
<symbol id="icon-facebook" viewBox="0 0 24 24">
|
||||||
<path d="M15.4024 21V14.0344H17.7347L18.0838 11.3265H15.4024V9.59765C15.4024 8.81364 15.62 8.27934 16.7443 8.27934L18.1783 8.27867V5.85676C17.9302 5.82382 17.0791 5.75006 16.0888 5.75006C14.0213 5.75006 12.606 7.01198 12.606 9.32952V11.3265H10.2677V14.0344H12.606V21H4C3.44772 21 3 20.5523 3 20V4C3 3.44772 3.44772 3 4 3H20C20.5523 3 21 3.44772 21 4V20C21 20.5523 20.5523 21 20 21H15.4024Z"/>
|
<path d="M15.4024 21V14.0344H17.7347L18.0838 11.3265H15.4024V9.59765C15.4024 8.81364 15.62 8.27934 16.7443 8.27934L18.1783 8.27867V5.85676C17.9302 5.82382 17.0791 5.75006 16.0888 5.75006C14.0213 5.75006 12.606 7.01198 12.606 9.32952V11.3265H10.2677V14.0344H12.606V21H4C3.44772 21 3 20.5523 3 20V4C3 3.44772 3.44772 3 4 3H20C20.5523 3 21 3.44772 21 4V20C21 20.5523 20.5523 21 20 21H15.4024Z"/>
|
||||||
@@ -236,6 +237,9 @@
|
|||||||
<symbol id="icon-globe" viewBox="0 0 24 24">
|
<symbol id="icon-globe" viewBox="0 0 24 24">
|
||||||
<path d="M13.0003 20.9998H18.0003V22.9998H6.00032V20.9998H11.0003V19.9505C7.70689 19.6235 4.88351 17.6986 3.31641 14.9621L5.05319 13.9696C6.43208 16.3775 9.02674 17.9998 12.0003 17.9998C16.4186 17.9998 20.0003 14.4181 20.0003 9.99983C20.0003 7.02625 18.378 4.43159 15.9701 3.0527L16.9626 1.31592C19.9724 3.03953 22.0003 6.28285 22.0003 9.99983C22.0003 15.1852 18.0536 19.4487 13.0003 19.9505V20.9998ZM12.0003 16.9998C8.13433 16.9998 5.00032 13.8658 5.00032 9.99983C5.00032 6.13384 8.13433 2.99983 12.0003 2.99983C15.8663 2.99983 19.0003 6.13384 19.0003 9.99983C19.0003 13.8658 15.8663 16.9998 12.0003 16.9998ZM12.0003 14.9998C14.7617 14.9998 17.0003 12.7613 17.0003 9.99983C17.0003 7.23841 14.7617 4.99983 12.0003 4.99983C9.2389 4.99983 7.00032 7.23841 7.00032 9.99983C7.00032 12.7613 9.2389 14.9998 12.0003 14.9998Z"/>
|
<path d="M13.0003 20.9998H18.0003V22.9998H6.00032V20.9998H11.0003V19.9505C7.70689 19.6235 4.88351 17.6986 3.31641 14.9621L5.05319 13.9696C6.43208 16.3775 9.02674 17.9998 12.0003 17.9998C16.4186 17.9998 20.0003 14.4181 20.0003 9.99983C20.0003 7.02625 18.378 4.43159 15.9701 3.0527L16.9626 1.31592C19.9724 3.03953 22.0003 6.28285 22.0003 9.99983C22.0003 15.1852 18.0536 19.4487 13.0003 19.9505V20.9998ZM12.0003 16.9998C8.13433 16.9998 5.00032 13.8658 5.00032 9.99983C5.00032 6.13384 8.13433 2.99983 12.0003 2.99983C15.8663 2.99983 19.0003 6.13384 19.0003 9.99983C19.0003 13.8658 15.8663 16.9998 12.0003 16.9998ZM12.0003 14.9998C14.7617 14.9998 17.0003 12.7613 17.0003 9.99983C17.0003 7.23841 14.7617 4.99983 12.0003 4.99983C9.2389 4.99983 7.00032 7.23841 7.00032 9.99983C7.00032 12.7613 9.2389 14.9998 12.0003 14.9998Z"/>
|
||||||
</symbol>
|
</symbol>
|
||||||
|
<symbol id="icon-google" viewBox="0 0 24 24">
|
||||||
|
<path d="M12 11H20.5329C20.5769 11.3847 20.6 11.7792 20.6 12.1837C20.6 14.9184 19.6204 17.2204 17.9224 18.7837C16.4367 20.1551 14.404 20.9592 11.9796 20.9592C8.46933 20.9592 5.43266 18.947 3.9551 16.0123C3.34695 14.8 3 13.4286 3 11.9796C3 10.5306 3.34695 9.1592 3.9551 7.94698C5.43266 5.01226 8.46933 3 11.9796 3C14.4 3 16.4326 3.88983 17.9877 5.33878L16.5255 6.80101C15.3682 5.68153 13.8028 5 12 5C8.13401 5 5 8.13401 5 12C5 15.866 8.13401 19 12 19C15.5265 19 18.1443 16.3923 18.577 13H12V11Z"/>
|
||||||
|
</symbol>
|
||||||
<symbol id="icon-grid" viewBox="0 0 24 24">
|
<symbol id="icon-grid" viewBox="0 0 24 24">
|
||||||
<path d="M22 12.999V20C22 20.5523 21.5523 21 21 21H13V12.999H22ZM11 12.999V21H3C2.44772 21 2 20.5523 2 20V12.999H11ZM11 3V10.999H2V4C2 3.44772 2.44772 3 3 3H11ZM21 3C21.5523 3 22 3.44772 22 4V10.999H13V3H21Z"/>
|
<path d="M22 12.999V20C22 20.5523 21.5523 21 21 21H13V12.999H22ZM11 12.999V21H3C2.44772 21 2 20.5523 2 20V12.999H11ZM11 3V10.999H2V4C2 3.44772 2.44772 3 3 3H11ZM21 3C21.5523 3 22 3.44772 22 4V10.999H13V3H21Z"/>
|
||||||
</symbol>
|
</symbol>
|
||||||
@@ -408,24 +412,16 @@
|
|||||||
<path d="M10 6V8H5V19H16V14H18V20C18 20.5523 17.5523 21 17 21H4C3.44772 21 3 20.5523 3 20V7C3 6.44772 3.44772 6 4 6H10ZM21 3V11H19L18.9999 6.413L11.2071 14.2071L9.79289 12.7929L17.5849 5H13V3H21Z"/>
|
<path d="M10 6V8H5V19H16V14H18V20C18 20.5523 17.5523 21 17 21H4C3.44772 21 3 20.5523 3 20V7C3 6.44772 3.44772 6 4 6H10ZM21 3V11H19L18.9999 6.413L11.2071 14.2071L9.79289 12.7929L17.5849 5H13V3H21Z"/>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-order-alpha-asc" viewBox="0 0 24 24">
|
<symbol id="icon-order-alpha-asc" viewBox="0 0 24 24">
|
||||||
<path d="M 9.336546 1 L 12.936545 10 L 11.173365 10 L 10.190728 7.545454 L 6.844365 7.545454 L 5.863364 10 L 4.101 10 L 7.700182 1 Z M 8.518364 3.360619 L 7.498092 5.90909 L 9.537002 5.90909 Z"/>
|
<path d="M4.86885 11H2.6665L6 3H8L11.3334 11H9.13113L8.7213 10H5.27869L4.86885 11ZM6.09836 8H7.90163L7 5.8L6.09836 8ZM18.9999 16V3H16.9999V16H13.9999L17.9999 21L21.9999 16H18.9999ZM10.9999 13H2.99992V15H7.85414L2.99992 19V21H10.9999V19H6.14605L10.9999 15V13Z" />
|
||||||
<path d="M 12 13 L 12 14.75 L 7.338525 20 L 12 20 L 12 21.75 L 5 21.75 L 5 20 L 9.6599 14.75 L 5 14.75 L 5 13 Z"/>
|
|
||||||
<path d="M 20 4 L 20 16 L 23 16 L 19 21 L 15 16 L 18 16 L 18 4 Z"/>
|
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-order-alpha-desc" viewBox="0 0 24 24">
|
<symbol id="icon-order-alpha-desc" viewBox="0 0 24 24">
|
||||||
<path d="M 9.336546 1 L 12.936545 10 L 11.173365 10 L 10.190728 7.545454 L 6.844365 7.545454 L 5.863364 10 L 4.101 10 L 7.700182 1 Z M 8.518364 3.360619 L 7.498092 5.90909 L 9.537002 5.90909 Z"/>
|
<path d="M4.86885 11H2.6665L6 3H8L11.3334 11H9.13113L8.7213 10H5.27869L4.86885 11ZM6.09836 8H7.90163L7 5.8L6.09836 8ZM21.9999 8L17.9999 3L13.9999 8H16.9999V21H18.9999V8H21.9999ZM10.9999 13H2.99992V15H7.85414L2.99992 19V21H10.9999V19H6.14605L10.9999 15V13Z" />
|
||||||
<path d="M 12 13 L 12 14.75 L 7.338525 20 L 12 20 L 12 21.75 L 5 21.75 L 5 20 L 9.6599 14.75 L 5 14.75 L 5 13 Z"/>
|
|
||||||
<path d="M 19 3 L 23 8 L 20 8 L 20 20 L 18 20 L 18 8 L 15 8 Z"/>
|
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-order-num-asc" viewBox="0 0 24 24">
|
<symbol id="icon-order-num-asc" viewBox="0 0 24 24">
|
||||||
<path d="M 6.6224 22 L 8.7008 18.4 C 6.932719 18.4 5.5 16.967279 5.5 15.2 C 5.5 13.432719 6.932719 12 8.7 12 C 10.46728 12 11.9 13.432719 11.9 15.2 C 11.9 15.78912 11.7408 16.34104 11.46312 16.815121 L 8.4696 22 Z M 8.7 16.799999 C 9.583681 16.799999 10.3 16.083679 10.3 15.2 C 10.3 14.316319 9.583681 13.6 8.7 13.6 C 7.816319 13.6 7.1 14.316319 7.1 15.2 C 7.1 16.083679 7.816319 16.799999 8.7 16.799999 Z"/>
|
<path d="M9.00054 3L9 11H7V5.41L5 5.9485V3.61978L7.31304 3H9.00054ZM19 3V16H22L18 21L14 16H17V3H19ZM11 15.5C11 16.0645 10.8441 16.5926 10.5729 17.0436L8.28871 21H5.97931L7.45156 18.45C6.05661 18.1923 5 16.9695 5 15.5C5 13.8431 6.34315 12.5 8 12.5C9.65685 12.5 11 13.8431 11 15.5ZM8 16.5C8.55228 16.5 9 16.0523 9 15.5C9 14.9477 8.55228 14.5 8 14.5C7.44772 14.5 7 14.9477 7 15.5C7 16.0523 7.44772 16.5 8 16.5Z" />
|
||||||
<path d="M 10 1 L 10 9.998876 L 8.500187 9.998876 L 8.499813 2.652794 L 7 3.054743 L 7 1.502438 L 8.87514 1 Z"/>
|
|
||||||
<path d="M 20 4 L 20 16 L 23 16 L 19 21 L 15 16 L 18 16 L 18 4 Z"/>
|
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-order-num-desc" viewBox="0 0 24 24">
|
<symbol id="icon-order-num-desc" viewBox="0 0 24 24">
|
||||||
<path d="M 6.6224 22 L 8.7008 18.4 C 6.932719 18.4 5.5 16.967279 5.5 15.2 C 5.5 13.432719 6.932719 12 8.7 12 C 10.46728 12 11.9 13.432719 11.9 15.2 C 11.9 15.78912 11.7408 16.34104 11.46312 16.815121 L 8.4696 22 Z M 8.7 16.799999 C 9.583681 16.799999 10.3 16.083679 10.3 15.2 C 10.3 14.316319 9.583681 13.6 8.7 13.6 C 7.816319 13.6 7.1 14.316319 7.1 15.2 C 7.1 16.083679 7.816319 16.799999 8.7 16.799999 Z"/>
|
<path d="M9 11L9.00054 3H7.31304L5 3.61978V5.9485L7 5.41V11H9ZM22 8L18 3L14 8H17V21H19V8H22ZM8 16.5C7.44772 16.5 7 16.0523 7 15.5C7 14.9477 7.44772 14.5 8 14.5C8.55228 14.5 9 14.9477 9 15.5C9 16.0523 8.55228 16.5 8 16.5ZM10.5729 17.0436C10.8441 16.5926 11 16.0645 11 15.5C11 13.8431 9.65685 12.5 8 12.5C6.34315 12.5 5 13.8431 5 15.5C5 16.9695 6.05661 18.1923 7.45156 18.45L5.97931 21H8.28871L10.5729 17.0436Z" />
|
||||||
<path d="M 10 1 L 10 9.998876 L 8.500187 9.998876 L 8.499813 2.652794 L 7 3.054743 L 7 1.502438 L 8.87514 1 Z"/>
|
|
||||||
<path d="M 19 3 L 23 8 L 20 8 L 20 20 L 18 20 L 18 8 L 15 8 Z"/>
|
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-page" viewBox="0 0 24 24">
|
<symbol id="icon-page" viewBox="0 0 24 24">
|
||||||
<use href="#icon-document" />
|
<use href="#icon-document" />
|
||||||
@@ -580,6 +576,15 @@
|
|||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-text-right" viewBox="0 0 24 24">
|
<symbol id="icon-text-right" viewBox="0 0 24 24">
|
||||||
<path d="M3 4H21V6H3V4ZM7 19H21V21H7V19ZM3 14H21V16H3V14ZM7 9H21V11H7V9Z"/>
|
<path d="M3 4H21V6H3V4ZM7 19H21V21H7V19ZM3 14H21V16H3V14ZM7 9H21V11H7V9Z"/>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-text-top" viewBox="0 0 24 24">
|
||||||
|
<path d="M3 3H21V5H3V3ZM8 11V21H6V11H3L7 7L11 11H8ZM18 11V21H16V11H13L17 7L21 11H18Z"/>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-text-middle" viewBox="0 0 24 24">
|
||||||
|
<path d="M3 11H21V13H3V11ZM18 18V21H16V18H13L17 14L21 18H18ZM8 18V21H6V18H3L7 14L11 18H8ZM18 6H21L17 10L13 6H16V3H18V6ZM8 6H11L7 10L3 6H6V3H8V6Z" />
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-text-bottom" viewBox="0 0 24 24">
|
||||||
|
<path d="M3 19H21V21H3V19ZM8 13H11L7 17L3 13H6V3H8V13ZM18 13H21L17 17L13 13H16V3H18V13Z" />
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-ticket" viewBox="0 0 24 24">
|
<symbol id="icon-ticket" viewBox="0 0 24 24">
|
||||||
<path d="M2.00488 9.5V4C2.00488 3.44772 2.4526 3 3.00488 3H21.0049C21.5572 3 22.0049 3.44772 22.0049 4V9.5C20.6242 9.5 19.5049 10.6193 19.5049 12C19.5049 13.3807 20.6242 14.5 22.0049 14.5V20C22.0049 20.5523 21.5572 21 21.0049 21H3.00488C2.4526 21 2.00488 20.5523 2.00488 20V14.5C3.38559 14.5 4.50488 13.3807 4.50488 12C4.50488 10.6193 3.38559 9.5 2.00488 9.5ZM4.00488 7.96776C5.4866 8.70411 6.50488 10.2331 6.50488 12C6.50488 13.7669 5.4866 15.2959 4.00488 16.0322V19H20.0049V16.0322C18.5232 15.2959 17.5049 13.7669 17.5049 12C17.5049 10.2331 18.5232 8.70411 20.0049 7.96776V5H4.00488V7.96776ZM9.00488 9H15.0049V11H9.00488V9ZM9.00488 13H15.0049V15H9.00488V13Z"/>
|
<path d="M2.00488 9.5V4C2.00488 3.44772 2.4526 3 3.00488 3H21.0049C21.5572 3 22.0049 3.44772 22.0049 4V9.5C20.6242 9.5 19.5049 10.6193 19.5049 12C19.5049 13.3807 20.6242 14.5 22.0049 14.5V20C22.0049 20.5523 21.5572 21 21.0049 21H3.00488C2.4526 21 2.00488 20.5523 2.00488 20V14.5C3.38559 14.5 4.50488 13.3807 4.50488 12C4.50488 10.6193 3.38559 9.5 2.00488 9.5ZM4.00488 7.96776C5.4866 8.70411 6.50488 10.2331 6.50488 12C6.50488 13.7669 5.4866 15.2959 4.00488 16.0322V19H20.0049V16.0322C18.5232 15.2959 17.5049 13.7669 17.5049 12C17.5049 10.2331 18.5232 8.70411 20.0049 7.96776V5H4.00488V7.96776ZM9.00488 9H15.0049V11H9.00488V9ZM9.00488 13H15.0049V15H9.00488V13Z"/>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 99 KiB |
2
kirby/panel/dist/js/Docs.min.js
vendored
2
kirby/panel/dist/js/Docs.min.js
vendored
File diff suppressed because one or more lines are too long
2
kirby/panel/dist/js/DocsView.min.js
vendored
2
kirby/panel/dist/js/DocsView.min.js
vendored
@@ -1 +1 @@
|
|||||||
import{D as t}from"./Docs.min.js";import{n as s}from"./index.min.js";import"./vendor.min.js";const o=s({components:{"k-lab-docs":t},props:{component:String,docs:Object,lab:String},mounted(){},methods:{reloadDocs(){this.$panel.view.refresh()}}},(function(){var t=this,s=t._self._c;return s("k-panel-inside",{staticClass:"k-lab-docs-view"},[s("k-header",[t._v(" "+t._s(t.component)+" "),t.docs.github||t.lab?s("k-button-group",{attrs:{slot:"buttons"},slot:"buttons"},[t.lab?s("k-button",{attrs:{icon:"lab",text:"Lab examples",size:"sm",variant:"filled",link:"/lab/"+t.lab}}):t._e(),t.docs.github?s("k-button",{attrs:{icon:"github",size:"sm",variant:"filled",link:t.docs.github,target:"_blank"}}):t._e()],1):t._e()],1),s("k-lab-docs",t._b({},"k-lab-docs",t.docs,!1))],1)}),[],!1,null,null,null,null).exports;export{o as default};
|
import{D as t}from"./Docs.min.js";import{n as s}from"./index.min.js";import"./vendor.min.js";const o=s({components:{"k-lab-docs":t},props:{component:String,docs:Object,lab:String},mounted(){},methods:{reloadDocs(){this.$panel.view.refresh()}}},(function(){var t=this,s=t._self._c;return s("k-panel-inside",{staticClass:"k-lab-docs-view"},[s("k-header",[t._v(" "+t._s(t.component)+" "),t.docs.github||t.lab?s("k-button-group",{attrs:{slot:"buttons"},slot:"buttons"},[t.lab?s("k-button",{attrs:{icon:"lab",text:"Lab examples",size:"sm",variant:"filled",link:"/lab/"+t.lab}}):t._e(),t.docs.github?s("k-button",{attrs:{icon:"github",size:"sm",variant:"filled",link:t.docs.github,target:"_blank"}}):t._e()],1):t._e()],1),s("k-lab-docs",t._b({},"k-lab-docs",t.docs,!1))],1)}),[]).exports;export{o as default};
|
||||||
|
|||||||
2
kirby/panel/dist/js/Highlight.min.js
vendored
2
kirby/panel/dist/js/Highlight.min.js
vendored
File diff suppressed because one or more lines are too long
2
kirby/panel/dist/js/IndexView.min.js
vendored
2
kirby/panel/dist/js/IndexView.min.js
vendored
@@ -1 +1 @@
|
|||||||
import{n as e}from"./index.min.js";import"./vendor.min.js";const t=e({props:{categories:Array,info:String,tab:String}},(function(){var e=this,t=e._self._c;return t("k-panel-inside",{staticClass:"k-lab-index-view"},[t("k-header",[e._v("Lab")]),t("k-tabs",{attrs:{tab:e.tab,tabs:[{name:"examples",label:"Examples",link:"/lab"},{name:"docs",label:"Docs",link:"/lab/docs"}]}}),e.info?t("k-box",{attrs:{icon:"question",theme:"info",text:e.info,html:!0}}):e._e(),e._l(e.categories,(function(e){return t("k-section",{key:e.name,attrs:{headline:e.name}},[t("k-collection",{attrs:{items:e.examples,empty:{icon:e.icon,text:"Add examples to "+e.path}}})],1)}))],2)}),[],!1,null,null,null,null).exports;export{t as default};
|
import{n as e}from"./index.min.js";import"./vendor.min.js";const t=e({props:{categories:Array,info:String,tab:String}},(function(){var e=this,t=e._self._c;return t("k-panel-inside",{staticClass:"k-lab-index-view"},[t("k-header",[e._v("Lab")]),t("k-tabs",{attrs:{tab:e.tab,tabs:[{name:"examples",label:"Examples",link:"/lab"},{name:"docs",label:"Docs",link:"/lab/docs"}]}}),e.info?t("k-box",{attrs:{icon:"question",theme:"info",text:e.info,html:!0}}):e._e(),e._l(e.categories,(function(e){return t("k-section",{key:e.name,attrs:{headline:e.name}},[t("k-collection",{attrs:{items:e.examples,empty:{icon:e.icon,text:"Add examples to "+e.path}}})],1)}))],2)}),[]).exports;export{t as default};
|
||||||
|
|||||||
8
kirby/panel/dist/js/PlaygroundView.min.js
vendored
8
kirby/panel/dist/js/PlaygroundView.min.js
vendored
@@ -1,7 +1 @@
|
|||||||
import{n as t,_ as e}from"./index.min.js";import{D as n}from"./Docs.min.js";import"./vendor.min.js";const l=t({props:{docs:Object},emits:["cancel"],computed:{options(){const t=[{icon:"expand",link:"lab/docs/"+this.docs.component}];return this.docs.github&&t.unshift({icon:"github",link:this.docs.github,target:"_blank"}),t}}},(function(){var t=this,e=t._self._c;return e("k-drawer",t._b({ref:"drawer",staticClass:"k-form-drawer",attrs:{options:t.options},on:{submit:function(e){return t.$emit("cancel")}}},"k-drawer",t.$attrs,!1),[e("k-lab-docs",t._b({},"k-lab-docs",t.docs,!1))],1)}),[],!1,null,null,null,null).exports;const a=t({props:{code:{type:Boolean,default:!0},label:String,flex:Boolean},data:()=>({mode:"preview"}),computed:{component(){return window.UiExamples[this.label]}}},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-lab-example",attrs:{"data-flex":t.flex,tabindex:"0"}},[e("header",{staticClass:"k-lab-example-header"},[e("h3",{staticClass:"k-lab-example-label"},[t._v(t._s(t.label))]),t.code?e("k-button-group",{staticClass:"k-lab-example-inspector",attrs:{layout:"collapsed"}},[e("k-button",{attrs:{theme:"preview"===t.mode?"info":null,icon:"preview",size:"xs",title:"Preview"},on:{click:function(e){t.mode="preview"}}}),e("k-button",{attrs:{theme:"inspect"===t.mode?"info":null,icon:"code",size:"xs",title:"Vue code"},on:{click:function(e){t.mode="inspect"}}})],1):t._e()],1),"preview"===t.mode?e("div",{staticClass:"k-lab-example-canvas"},[t._t("default")],2):t._e(),"inspect"===t.mode?e("div",{staticClass:"k-lab-example-code"},[e("k-code",{attrs:{language:"html"}},[t._v(t._s(t.component))])],1):t._e()])}),[],!1,null,null,null,null).exports;const s=t({},(function(){return(0,this._self._c)("div",{staticClass:"k-lab-examples"},[this._t("default")],2)}),[],!1,null,null,null,null).exports;const o=t({methods:{submit(t){const e=Object.fromEntries(new FormData(t));this.$panel.dialog.open({component:"k-lab-output-dialog",props:{code:JSON.stringify(e,null,2)}})}}},(function(){var t=this,e=t._self._c;return e("form",{staticClass:"k-lab-form",on:{submit:function(e){return e.preventDefault(),t.submit(e.target)}}},[t._t("default"),e("footer",[e("k-button",{attrs:{type:"submit",icon:"check",theme:"positive",variant:"filled"}},[t._v(" Submit ")])],1)],2)}),[],!1,null,null,null,null).exports;const i=t({props:{code:String,language:{default:"js",type:String}},emits:["cancel"]},(function(){var t=this,e=t._self._c;return e("k-dialog",t._b({attrs:{size:"large","cancel-button":!1,"submit-button":!1},on:{cancel:function(e){return t.$emit("cancel")}}},"k-dialog",t.$attrs,!1),[e("k-code",{attrs:{language:t.language}},[t._v(t._s(t.code))])],1)}),[],!1,null,null,null,null).exports;const r=t({},(function(){var t=this._self._c;return t("div",{staticClass:"k-table"},[t("table",[t("tbody",[t("tr",[t("td",{staticClass:"k-table-cell",attrs:{"data-mobile":"true"}},[this._t("default")],2)])])])])}),[],!1,null,null,null,null).exports;Vue.component("k-lab-docs",n),Vue.component("k-lab-docs-drawer",l),Vue.component("k-lab-example",a),Vue.component("k-lab-examples",s),Vue.component("k-lab-form",o),Vue.component("k-lab-output-dialog",i),Vue.component("k-lab-table-cell",r);const c=t({props:{docs:String,examples:[Object,Array],file:String,github:String,props:[Object,Array],styles:String,tab:String,tabs:{type:Array,default:()=>[]},template:String,title:String},data:()=>({component:null}),watch:{tab:{handler(){this.createComponent()},immediate:!0}},mounted(){this.$panel.view.path.replace(/lab\//,"")},methods:{async createComponent(){if(!this.file)return;const{default:t}=await e((()=>import(this.$panel.url(this.file)+"?cache="+Date.now())),__vite__mapDeps([]),import.meta.url);t.template=this.template,this.component={...t},window.UiExamples=this.examples},openDocs(){this.$panel.drawer.open(`lab/docs/${this.docs}`)},async reloadComponent(){await this.$panel.view.refresh(),this.createComponent()},reloadDocs(){this.$panel.drawer.isOpen&&this.$panel.drawer.refresh()}}},(function(){var t=this,e=t._self._c;return e("k-panel-inside",{staticClass:"k-lab-playground-view",attrs:{"data-has-tabs":t.tabs.length>1}},[e("k-header",[t._v(" "+t._s(t.title)+" "),t.docs||t.github?e("k-button-group",{attrs:{slot:"buttons"},slot:"buttons"},[t.docs?e("k-button",{attrs:{text:t.docs,icon:"book",size:"sm",variant:"filled"},on:{click:t.openDocs}}):t._e(),t.github?e("k-button",{attrs:{icon:"github",size:"sm",variant:"filled",link:t.github,target:"_blank"}}):t._e()],1):t._e()],1),e("k-tabs",{attrs:{tab:t.tab,tabs:t.tabs}}),t.component?e(t.component,t._b({tag:"component"},"component",t.props,!1)):t._e(),t.styles?e("style",{tag:"component",domProps:{innerHTML:t._s(t.styles)}}):t._e()],1)}),[],!1,null,null,null,null).exports;export{c as default};
|
import{D as t}from"./Docs.min.js";import{n as e}from"./index.min.js";import"./vendor.min.js";const a=e({props:{docs:Object},emits:["cancel"],computed:{options(){const t=[{icon:"expand",link:"lab/docs/"+this.docs.component}];return this.docs.github&&t.unshift({icon:"github",link:this.docs.github,target:"_blank"}),t}}},(function(){var t=this,e=t._self._c;return e("k-drawer",t._b({ref:"drawer",staticClass:"k-form-drawer",attrs:{options:t.options},on:{submit:function(e){return t.$emit("cancel")}}},"k-drawer",t.$attrs,!1),[e("k-lab-docs",t._b({},"k-lab-docs",t.docs,!1))],1)}),[]).exports;const o=e({props:{code:{type:Boolean,default:!0},label:String,flex:Boolean},data:()=>({mode:"preview"}),computed:{component(){return window.UiExamples[this.label]}}},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-lab-example",attrs:{"data-flex":t.flex,tabindex:"0"}},[e("header",{staticClass:"k-lab-example-header"},[e("h3",{staticClass:"k-lab-example-label"},[t._v(t._s(t.label))]),t.code?e("k-button-group",{staticClass:"k-lab-example-inspector",attrs:{layout:"collapsed"}},[e("k-button",{attrs:{theme:"preview"===t.mode?"info":null,icon:"preview",size:"xs",title:"Preview"},on:{click:function(e){t.mode="preview"}}}),e("k-button",{attrs:{theme:"inspect"===t.mode?"info":null,icon:"code",size:"xs",title:"Vue code"},on:{click:function(e){t.mode="inspect"}}})],1):t._e()],1),"preview"===t.mode?e("div",{staticClass:"k-lab-example-canvas"},[t._t("default")],2):t._e(),"inspect"===t.mode?e("div",{staticClass:"k-lab-example-code"},[e("k-code",{attrs:{language:"html"}},[t._v(t._s(t.component))])],1):t._e()])}),[]).exports;const s=e({},(function(){return(0,this._self._c)("div",{staticClass:"k-lab-examples"},[this._t("default")],2)}),[]).exports;const n=e({methods:{submit(t){const e=Object.fromEntries(new FormData(t));this.$panel.dialog.open({component:"k-lab-output-dialog",props:{code:JSON.stringify(e,null,2)}})}}},(function(){var t=this,e=t._self._c;return e("form",{staticClass:"k-lab-form",on:{submit:function(e){return e.preventDefault(),t.submit(e.target)}}},[t._t("default"),e("footer",[e("k-button",{attrs:{type:"submit",icon:"check",theme:"positive",variant:"filled"}},[t._v(" Submit ")])],1)],2)}),[]).exports;const i=e({props:{code:String,language:{default:"js",type:String}},emits:["cancel"]},(function(){var t=this,e=t._self._c;return e("k-dialog",t._b({attrs:{size:"large","cancel-button":!1,"submit-button":!1},on:{cancel:function(e){return t.$emit("cancel")}}},"k-dialog",t.$attrs,!1),[e("k-code",{attrs:{language:t.language}},[t._v(t._s(t.code))])],1)}),[]).exports;const l=e({},(function(){var t=this._self._c;return t("div",{staticClass:"k-table"},[t("table",[t("tbody",[t("tr",[t("td",{staticClass:"k-table-cell",attrs:{"data-mobile":"true"}},[this._t("default")],2)])])])])}),[]).exports;Vue.component("k-lab-docs",t),Vue.component("k-lab-docs-drawer",a),Vue.component("k-lab-example",o),Vue.component("k-lab-examples",s),Vue.component("k-lab-form",n),Vue.component("k-lab-output-dialog",i),Vue.component("k-lab-table-cell",l);const r=e({props:{docs:String,examples:[Object,Array],file:String,github:String,props:[Object,Array],styles:String,tab:String,tabs:{type:Array,default:()=>[]},template:String,title:String},data:()=>({component:null}),watch:{tab:{handler(){this.createComponent()},immediate:!0}},mounted(){this.$panel.view.path.replace(/lab\//,"")},methods:{async createComponent(){if(!this.file)return;const{default:t}=await import(this.$panel.url(this.file)+"?cache="+Date.now());t.template=this.template,this.component={...t},window.UiExamples=this.examples},openDocs(){this.$panel.drawer.open(`lab/docs/${this.docs}`)},async reloadComponent(){await this.$panel.view.refresh(),this.createComponent()},reloadDocs(){this.$panel.drawer.isOpen&&this.$panel.drawer.refresh()}}},(function(){var t=this,e=t._self._c;return e("k-panel-inside",{staticClass:"k-lab-playground-view",attrs:{"data-has-tabs":t.tabs.length>1}},[e("k-header",{scopedSlots:t._u([{key:"buttons",fn:function(){return[t.docs||t.github?e("k-button-group",[t.docs?e("k-button",{attrs:{text:t.docs,icon:"book",size:"sm",variant:"filled"},on:{click:t.openDocs}}):t._e(),t.github?e("k-button",{attrs:{link:t.github,icon:"github",size:"sm",target:"_blank",variant:"filled"}}):t._e()],1):t._e()]},proxy:!0}])},[t._v(" "+t._s(t.title)+" ")]),e("k-tabs",{attrs:{tab:t.tab,tabs:t.tabs}}),t.component?e(t.component,t._b({tag:"component"},"component",t.props,!1)):t._e(),t.styles?e("style",{tag:"component",domProps:{innerHTML:t._s(t.styles)}}):t._e()],1)}),[]).exports;export{r as default};
|
||||||
function __vite__mapDeps(indexes) {
|
|
||||||
if (!__vite__mapDeps.viteFileDeps) {
|
|
||||||
__vite__mapDeps.viteFileDeps = []
|
|
||||||
}
|
|
||||||
return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
|
|
||||||
}
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
9
kirby/panel/dist/js/index.min.js
vendored
9
kirby/panel/dist/js/index.min.js
vendored
File diff suppressed because one or more lines are too long
6
kirby/panel/dist/js/vendor.min.js
vendored
6
kirby/panel/dist/js/vendor.min.js
vendored
File diff suppressed because one or more lines are too long
2
kirby/panel/dist/js/vuedraggable.min.js
vendored
2
kirby/panel/dist/js/vuedraggable.min.js
vendored
File diff suppressed because one or more lines are too long
28
kirby/panel/eslint.config.mjs
Normal file
28
kirby/panel/eslint.config.mjs
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import js from "@eslint/js";
|
||||||
|
import prettier from "eslint-config-prettier";
|
||||||
|
import vue from "eslint-plugin-vue";
|
||||||
|
|
||||||
|
export default [
|
||||||
|
js.configs.recommended,
|
||||||
|
...vue.configs["flat/vue2-recommended"],
|
||||||
|
prettier,
|
||||||
|
{
|
||||||
|
rules: {
|
||||||
|
"vue/attributes-order": "error",
|
||||||
|
"vue/component-definition-name-casing": "off",
|
||||||
|
"vue/html-closing-bracket-newline": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
singleline: "never",
|
||||||
|
multiline: "always"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vue/multi-word-component-names": "off",
|
||||||
|
"vue/require-default-prop": "off",
|
||||||
|
"vue/require-prop-types": "error"
|
||||||
|
},
|
||||||
|
languageOptions: {
|
||||||
|
ecmaVersion: 2022
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
@@ -1,11 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
$uri = urldecode(
|
// prepend a fake host to ensure that PHP can parse the path even if it contains weird stuff;
|
||||||
parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
|
// afterwards just take the plain path back out from the parsed result
|
||||||
);
|
$uri = parse_url('https://getkirby.com/' . ltrim($_SERVER['REQUEST_URI'], '/'), PHP_URL_PATH) ?? '/';
|
||||||
|
$uri = urldecode($uri);
|
||||||
|
|
||||||
// Emulate Apache's `mod_rewrite` functionality
|
// Emulate Apache's `mod_rewrite` functionality
|
||||||
if ($uri !== '/' && file_exists($_SERVER['DOCUMENT_ROOT'] . '/' . $uri)) {
|
if ($uri !== '/' && file_exists($_SERVER['DOCUMENT_ROOT'] . '/' . ltrim($uri, '/'))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,11 @@ class Model
|
|||||||
isset($schema['type']) === true &&
|
isset($schema['type']) === true &&
|
||||||
$this->data instanceof $schema['type'] === false
|
$this->data instanceof $schema['type'] === false
|
||||||
) {
|
) {
|
||||||
throw new Exception(sprintf('Invalid model type "%s" expected: "%s"', get_class($this->data), $schema['type']));
|
$class = match ($this->data) {
|
||||||
|
null => 'null',
|
||||||
|
default => get_class($this->data),
|
||||||
|
};
|
||||||
|
throw new Exception(sprintf('Invalid model type "%s" expected: "%s"', $class, $schema['type']));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ class Api extends BaseApi
|
|||||||
$field = Form::for($model)->field($name);
|
$field = Form::for($model)->field($name);
|
||||||
|
|
||||||
$fieldApi = $this->clone([
|
$fieldApi = $this->clone([
|
||||||
'data' => array_merge($this->data(), ['field' => $field]),
|
'data' => [...$this->data(), 'field' => $field],
|
||||||
'routes' => $field->api(),
|
'routes' => $field->api(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@@ -185,6 +185,30 @@ class Api extends BaseApi
|
|||||||
return $pages->query($this->requestBody());
|
return $pages->query($this->requestBody());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws \Kirby\Exception\NotFoundException if the section type cannot be found or the section cannot be loaded
|
||||||
|
*/
|
||||||
|
public function sectionApi(
|
||||||
|
ModelWithContent $model,
|
||||||
|
string $name,
|
||||||
|
string|null $path = null
|
||||||
|
): mixed {
|
||||||
|
if (!$section = $model->blueprint()?->section($name)) {
|
||||||
|
throw new NotFoundException('The section "' . $name . '" could not be found');
|
||||||
|
}
|
||||||
|
|
||||||
|
$sectionApi = $this->clone([
|
||||||
|
'data' => [...$this->data(), 'section' => $section],
|
||||||
|
'routes' => $section->api(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
return $sectionApi->call(
|
||||||
|
$path,
|
||||||
|
$this->requestMethod(),
|
||||||
|
$this->requestData()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the current Session instance
|
* Returns the current Session instance
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ use Kirby\Toolkit\A;
|
|||||||
use Kirby\Toolkit\Config;
|
use Kirby\Toolkit\Config;
|
||||||
use Kirby\Toolkit\Controller;
|
use Kirby\Toolkit\Controller;
|
||||||
use Kirby\Toolkit\LazyValue;
|
use Kirby\Toolkit\LazyValue;
|
||||||
|
use Kirby\Toolkit\Locale;
|
||||||
use Kirby\Toolkit\Str;
|
use Kirby\Toolkit\Str;
|
||||||
use Kirby\Uuid\Uuid;
|
use Kirby\Uuid\Uuid;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
@@ -170,7 +171,7 @@ class App
|
|||||||
'roots' => $this->roots(),
|
'roots' => $this->roots(),
|
||||||
'site' => $this->site(),
|
'site' => $this->site(),
|
||||||
'urls' => $this->urls(),
|
'urls' => $this->urls(),
|
||||||
'version' => $this->version(),
|
'version' => static::version(),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,7 +256,7 @@ class App
|
|||||||
foreach ($this->options as $key => $value) {
|
foreach ($this->options as $key => $value) {
|
||||||
// detect option keys with the `vendor.plugin.option` format
|
// detect option keys with the `vendor.plugin.option` format
|
||||||
if (preg_match('/^([a-z0-9-]+\.[a-z0-9-]+)\.(.*)$/i', $key, $matches) === 1) {
|
if (preg_match('/^([a-z0-9-]+\.[a-z0-9-]+)\.(.*)$/i', $key, $matches) === 1) {
|
||||||
list(, $plugin, $option) = $matches;
|
[, $plugin, $option] = $matches;
|
||||||
|
|
||||||
// verify that it's really a plugin option
|
// verify that it's really a plugin option
|
||||||
if (isset(static::$plugins[str_replace('.', '/', $plugin)]) !== true) {
|
if (isset(static::$plugins[str_replace('.', '/', $plugin)]) !== true) {
|
||||||
@@ -538,6 +539,14 @@ class App
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the current language, if set by `static::setCurrentLanguage`
|
||||||
|
*/
|
||||||
|
public function currentLanguage(): Language|null
|
||||||
|
{
|
||||||
|
return $this->language ??= $this->defaultLanguage();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the default language object
|
* Returns the default language object
|
||||||
*/
|
*/
|
||||||
@@ -623,7 +632,7 @@ class App
|
|||||||
return Uuid::for($path, $parent?->files())->model();
|
return Uuid::for($path, $parent?->files())->model();
|
||||||
}
|
}
|
||||||
|
|
||||||
$parent = $parent ?? $this->site();
|
$parent ??= $this->site();
|
||||||
$id = dirname($path);
|
$id = dirname($path);
|
||||||
$filename = basename($path);
|
$filename = basename($path);
|
||||||
|
|
||||||
@@ -773,7 +782,7 @@ class App
|
|||||||
if ($input instanceof Page) {
|
if ($input instanceof Page) {
|
||||||
try {
|
try {
|
||||||
$html = $input->render();
|
$html = $input->render();
|
||||||
} catch (ErrorPageException $e) {
|
} catch (ErrorPageException|NotFoundException $e) {
|
||||||
return $this->io($e);
|
return $this->io($e);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -879,7 +888,8 @@ class App
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the current language
|
* Returns the language by code or shortcut (`default`, `current`).
|
||||||
|
* Passing `null` is an alias for passing `current`
|
||||||
*/
|
*/
|
||||||
public function language(string $code = null): Language|null
|
public function language(string $code = null): Language|null
|
||||||
{
|
{
|
||||||
@@ -887,19 +897,11 @@ class App
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($code === 'default') {
|
return match ($code ?? 'current') {
|
||||||
return $this->defaultLanguage();
|
'default' => $this->defaultLanguage(),
|
||||||
}
|
'current' => $this->currentLanguage(),
|
||||||
|
default => $this->languages()->find($code)
|
||||||
// if requesting a non-default language,
|
};
|
||||||
// find it but don't cache it
|
|
||||||
if ($code !== null) {
|
|
||||||
return $this->languages()->find($code);
|
|
||||||
}
|
|
||||||
|
|
||||||
// otherwise return language set by `AppTranslation::setCurrentLanguage`
|
|
||||||
// or default language
|
|
||||||
return $this->language ??= $this->defaultLanguage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1141,7 +1143,7 @@ class App
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$parent = $parent ?? $this->site();
|
$parent ??= $this->site();
|
||||||
|
|
||||||
if ($page = $parent->find($id)) {
|
if ($page = $parent->find($id)) {
|
||||||
/**
|
/**
|
||||||
@@ -1212,7 +1214,7 @@ class App
|
|||||||
* @internal
|
* @internal
|
||||||
* @throws \Kirby\Exception\NotFoundException if the home page cannot be found
|
* @throws \Kirby\Exception\NotFoundException if the home page cannot be found
|
||||||
*/
|
*/
|
||||||
public function resolve(string $path = null, string $language = null): mixed
|
public function resolve(string|null $path = null, string|null $language = null): mixed
|
||||||
{
|
{
|
||||||
// set the current translation
|
// set the current translation
|
||||||
$this->setCurrentTranslation($language);
|
$this->setCurrentTranslation($language);
|
||||||
@@ -1410,6 +1412,30 @@ class App
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load and set the current language if it exists
|
||||||
|
* Otherwise fall back to the default language
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
public function setCurrentLanguage(
|
||||||
|
string|null $languageCode = null
|
||||||
|
): Language|null {
|
||||||
|
if ($this->multilang() === false) {
|
||||||
|
Locale::set($this->option('locale', 'en_US.utf-8'));
|
||||||
|
return $this->language = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->language = $this->language($languageCode) ?? $this->defaultLanguage();
|
||||||
|
|
||||||
|
Locale::set($this->language->locale());
|
||||||
|
|
||||||
|
// add language slug rules to Str class
|
||||||
|
Str::$language = $this->language->rules();
|
||||||
|
|
||||||
|
return $this->language;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create your own set of languages
|
* Create your own set of languages
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -190,8 +190,19 @@ trait AppErrors
|
|||||||
protected function getAdditionalWhoopsHandler(): CallbackHandler
|
protected function getAdditionalWhoopsHandler(): CallbackHandler
|
||||||
{
|
{
|
||||||
return new CallbackHandler(function ($exception, $inspector, $run) {
|
return new CallbackHandler(function ($exception, $inspector, $run) {
|
||||||
$this->trigger('system.exception', compact('exception'));
|
$isLogged = true;
|
||||||
error_log($exception);
|
|
||||||
|
// allow hook to modify whether the exception should be logged
|
||||||
|
$isLogged = $this->apply(
|
||||||
|
'system.exception',
|
||||||
|
compact('exception', 'isLogged'),
|
||||||
|
'isLogged'
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($isLogged !== false) {
|
||||||
|
error_log($exception);
|
||||||
|
}
|
||||||
|
|
||||||
return Handler::DONE;
|
return Handler::DONE;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -659,6 +659,11 @@ trait AppPlugins
|
|||||||
*/
|
*/
|
||||||
protected function extensionsFromSystem(): void
|
protected function extensionsFromSystem(): void
|
||||||
{
|
{
|
||||||
|
// Always start with fresh fields and sections
|
||||||
|
// from the core and add plugins on top of that
|
||||||
|
FormField::$types = [];
|
||||||
|
Section::$types = [];
|
||||||
|
|
||||||
// mixins
|
// mixins
|
||||||
FormField::$mixins = $this->core->fieldMixins();
|
FormField::$mixins = $this->core->fieldMixins();
|
||||||
Section::$mixins = $this->core->sectionMixins();
|
Section::$mixins = $this->core->sectionMixins();
|
||||||
@@ -674,8 +679,8 @@ trait AppPlugins
|
|||||||
$this->extendCacheTypes($this->core->cacheTypes());
|
$this->extendCacheTypes($this->core->cacheTypes());
|
||||||
$this->extendComponents($this->core->components());
|
$this->extendComponents($this->core->components());
|
||||||
$this->extendBlueprints($this->core->blueprints());
|
$this->extendBlueprints($this->core->blueprints());
|
||||||
$this->extendFields($this->core->fields());
|
|
||||||
$this->extendFieldMethods($this->core->fieldMethods());
|
$this->extendFieldMethods($this->core->fieldMethods());
|
||||||
|
$this->extendFields($this->core->fields());
|
||||||
$this->extendSections($this->core->sections());
|
$this->extendSections($this->core->sections());
|
||||||
$this->extendSnippets($this->core->snippets());
|
$this->extendSnippets($this->core->snippets());
|
||||||
$this->extendTags($this->core->kirbyTags());
|
$this->extendTags($this->core->kirbyTags());
|
||||||
@@ -708,17 +713,25 @@ trait AppPlugins
|
|||||||
*/
|
*/
|
||||||
public static function plugin(
|
public static function plugin(
|
||||||
string $name,
|
string $name,
|
||||||
array $extends = null
|
array $extends = null,
|
||||||
): PLugin|null {
|
array $info = [],
|
||||||
|
string|null $root = null,
|
||||||
|
string|null $version = null
|
||||||
|
): Plugin|null {
|
||||||
if ($extends === null) {
|
if ($extends === null) {
|
||||||
return static::$plugins[$name] ?? null;
|
return static::$plugins[$name] ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the correct root for the plugin
|
$plugin = new Plugin(
|
||||||
$extends['root'] = $extends['root'] ?? dirname(debug_backtrace()[0]['file']);
|
name: $name,
|
||||||
|
extends: $extends,
|
||||||
|
info: $info,
|
||||||
|
// TODO: Remove fallback to $extends in v7
|
||||||
|
root: $root ?? $extends['root'] ?? dirname(debug_backtrace()[0]['file']),
|
||||||
|
version: $version
|
||||||
|
);
|
||||||
|
|
||||||
$plugin = new Plugin($name, $extends);
|
$name = $plugin->name();
|
||||||
$name = $plugin->name();
|
|
||||||
|
|
||||||
if (isset(static::$plugins[$name]) === true) {
|
if (isset(static::$plugins[$name]) === true) {
|
||||||
throw new DuplicateException('The plugin "' . $name . '" has already been registered');
|
throw new DuplicateException('The plugin "' . $name . '" has already been registered');
|
||||||
@@ -787,7 +800,11 @@ trait AppPlugins
|
|||||||
// register as anonymous plugin (without actual extensions)
|
// register as anonymous plugin (without actual extensions)
|
||||||
// to be picked up by the Panel\Document class when
|
// to be picked up by the Panel\Document class when
|
||||||
// rendering the Panel view
|
// rendering the Panel view
|
||||||
static::plugin('plugins/' . $dirname, ['root' => $dir]);
|
static::plugin(
|
||||||
|
name: 'plugins/' . $dirname,
|
||||||
|
extends: [],
|
||||||
|
root: $dir
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
namespace Kirby\Cms;
|
namespace Kirby\Cms;
|
||||||
|
|
||||||
use Kirby\Toolkit\I18n;
|
use Kirby\Toolkit\I18n;
|
||||||
use Kirby\Toolkit\Locale;
|
|
||||||
use Kirby\Toolkit\Str;
|
use Kirby\Toolkit\Str;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -104,33 +103,6 @@ trait AppTranslations
|
|||||||
return $this->option('panel.language', $defaultCode);
|
return $this->option('panel.language', $defaultCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Load and set the current language if it exists
|
|
||||||
* Otherwise fall back to the default language
|
|
||||||
*
|
|
||||||
* @internal
|
|
||||||
*/
|
|
||||||
public function setCurrentLanguage(
|
|
||||||
string $languageCode = null
|
|
||||||
): Language|null {
|
|
||||||
if ($this->multilang() === false) {
|
|
||||||
Locale::set($this->option('locale', 'en_US.utf-8'));
|
|
||||||
return $this->language = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->language = $this->language($languageCode);
|
|
||||||
$this->language ??= $this->defaultLanguage();
|
|
||||||
|
|
||||||
if ($this->language) {
|
|
||||||
Locale::set($this->language->locale());
|
|
||||||
}
|
|
||||||
|
|
||||||
// add language slug rules to Str class
|
|
||||||
Str::$language = $this->language->rules();
|
|
||||||
|
|
||||||
return $this->language;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the current translation
|
* Set the current translation
|
||||||
*
|
*
|
||||||
@@ -148,7 +120,7 @@ trait AppTranslations
|
|||||||
*/
|
*/
|
||||||
public function translation(string|null $locale = null): Translation
|
public function translation(string|null $locale = null): Translation
|
||||||
{
|
{
|
||||||
$locale = $locale ?? I18n::locale();
|
$locale ??= I18n::locale();
|
||||||
$locale = basename($locale);
|
$locale = basename($locale);
|
||||||
|
|
||||||
// prefer loading them from the translations collection
|
// prefer loading them from the translations collection
|
||||||
|
|||||||
@@ -575,8 +575,8 @@ class Auth
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ensure that the category arrays are defined
|
// ensure that the category arrays are defined
|
||||||
$log['by-ip'] = $log['by-ip'] ?? [];
|
$log['by-ip'] ??= [];
|
||||||
$log['by-email'] = $log['by-email'] ?? [];
|
$log['by-email'] ??= [];
|
||||||
|
|
||||||
// remove all elements on the top level with different keys (old structure)
|
// remove all elements on the top level with different keys (old structure)
|
||||||
$log = array_intersect_key($log, array_flip(['by-ip', 'by-email']));
|
$log = array_intersect_key($log, array_flip(['by-ip', 'by-email']));
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ class Blueprint
|
|||||||
protected $sections = [];
|
protected $sections = [];
|
||||||
protected $tabs = [];
|
protected $tabs = [];
|
||||||
|
|
||||||
|
protected array|null $fileTemplates = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Magic getter/caller for any blueprint prop
|
* Magic getter/caller for any blueprint prop
|
||||||
*/
|
*/
|
||||||
@@ -63,7 +65,7 @@ class Blueprint
|
|||||||
unset($props['model']);
|
unset($props['model']);
|
||||||
|
|
||||||
// extend the blueprint in general
|
// extend the blueprint in general
|
||||||
$props = $this->extend($props);
|
$props = static::extend($props);
|
||||||
|
|
||||||
// apply any blueprint preset
|
// apply any blueprint preset
|
||||||
$props = $this->preset($props);
|
$props = $this->preset($props);
|
||||||
@@ -96,6 +98,115 @@ class Blueprint
|
|||||||
return $this->props ?? [];
|
return $this->props ?? [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gathers what file templates are allowed in
|
||||||
|
* this model based on the blueprint
|
||||||
|
*/
|
||||||
|
public function acceptedFileTemplates(string $inSection = null): array
|
||||||
|
{
|
||||||
|
// get cached results for the current file model
|
||||||
|
// (except when collecting for a specific section)
|
||||||
|
if ($inSection === null && $this->fileTemplates !== null) {
|
||||||
|
return $this->fileTemplates; // @codeCoverageIgnore
|
||||||
|
}
|
||||||
|
|
||||||
|
$templates = [];
|
||||||
|
|
||||||
|
// collect all allowed file templates from blueprint…
|
||||||
|
foreach ($this->sections() as $section) {
|
||||||
|
// if collecting for a specific section, skip all others
|
||||||
|
if ($inSection !== null && $section->name() !== $inSection) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$templates = match ($section->type()) {
|
||||||
|
'files' => [...$templates, $section->template() ?? 'default'],
|
||||||
|
'fields' => [
|
||||||
|
...$templates,
|
||||||
|
...$this->acceptedFileTemplatesFromFields($section->fields())
|
||||||
|
],
|
||||||
|
default => $templates
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// no caching for when collecting for specific section
|
||||||
|
if ($inSection !== null) {
|
||||||
|
return $templates; // @codeCoverageIgnore
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->fileTemplates = $templates;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gathers the allowed file templates from model's fields
|
||||||
|
*/
|
||||||
|
protected function acceptedFileTemplatesFromFields(array $fields): array
|
||||||
|
{
|
||||||
|
$templates = [];
|
||||||
|
|
||||||
|
foreach ($fields as $field) {
|
||||||
|
// fields with uploads settings
|
||||||
|
if (isset($field['uploads']) === true && is_array($field['uploads']) === true) {
|
||||||
|
$templates = [
|
||||||
|
...$templates,
|
||||||
|
...$this->acceptedFileTemplatesFromFieldUploads($field['uploads'])
|
||||||
|
];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// structure and object fields
|
||||||
|
if (isset($field['fields']) === true && is_array($field['fields']) === true) {
|
||||||
|
$templates = [
|
||||||
|
...$templates,
|
||||||
|
...$this->acceptedFileTemplatesFromFields($field['fields']),
|
||||||
|
];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// layout and blocks fields
|
||||||
|
if (isset($field['fieldsets']) === true && is_array($field['fieldsets']) === true) {
|
||||||
|
$templates = [
|
||||||
|
...$templates,
|
||||||
|
...$this->acceptedFileTemplatesFromFieldsets($field['fieldsets'])
|
||||||
|
];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $templates;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gathers the allowed file templates from fieldsets
|
||||||
|
*/
|
||||||
|
protected function acceptedFileTemplatesFromFieldsets(array $fieldsets): array
|
||||||
|
{
|
||||||
|
$templates = [];
|
||||||
|
|
||||||
|
foreach ($fieldsets as $fieldset) {
|
||||||
|
foreach (($fieldset['tabs'] ?? []) as $tab) {
|
||||||
|
$templates = array_merge($templates, $this->acceptedFileTemplatesFromFields($tab['fields'] ?? []));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $templates;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extracts templates from field uploads settings
|
||||||
|
*/
|
||||||
|
protected function acceptedFileTemplatesFromFieldUploads(array $uploads): array
|
||||||
|
{
|
||||||
|
// only if the `uploads` parent is this model
|
||||||
|
if ($target = $uploads['parent'] ?? null) {
|
||||||
|
if ($this->model->id() !== $target) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [($uploads['template'] ?? 'default')];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts all column definitions, that
|
* Converts all column definitions, that
|
||||||
* are not wrapped in a tab, into a generic tab
|
* are not wrapped in a tab, into a generic tab
|
||||||
@@ -186,24 +297,20 @@ class Blueprint
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
$extends = $props['extends'] ?? null;
|
if ($extends = $props['extends'] ?? null) {
|
||||||
|
foreach (A::wrap($extends) as $extend) {
|
||||||
if ($extends === null) {
|
try {
|
||||||
return $props;
|
$mixin = static::find($extend);
|
||||||
}
|
$mixin = static::extend($mixin);
|
||||||
|
$props = A::merge($mixin, $props, A::MERGE_REPLACE);
|
||||||
foreach (A::wrap($extends) as $extend) {
|
} catch (Exception) {
|
||||||
try {
|
// keep the props unextended if the snippet wasn't found
|
||||||
$mixin = static::find($extend);
|
}
|
||||||
$mixin = static::extend($mixin);
|
|
||||||
$props = A::merge($mixin, $props, A::MERGE_REPLACE);
|
|
||||||
} catch (Exception) {
|
|
||||||
// keep the props unextended if the snippet wasn't found
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// remove the extends flag
|
// remove the extends flag
|
||||||
unset($props['extends']);
|
unset($props['extends']);
|
||||||
|
}
|
||||||
|
|
||||||
return $props;
|
return $props;
|
||||||
}
|
}
|
||||||
@@ -280,6 +387,7 @@ class Blueprint
|
|||||||
if (is_string($file) === true && F::exists($file) === true) {
|
if (is_string($file) === true && F::exists($file) === true) {
|
||||||
return static::$loaded[$name] = Data::read($file);
|
return static::$loaded[$name] = Data::read($file);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_array($file) === true) {
|
if (is_array($file) === true) {
|
||||||
return static::$loaded[$name] = $file;
|
return static::$loaded[$name] = $file;
|
||||||
}
|
}
|
||||||
@@ -354,7 +462,10 @@ class Blueprint
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$columnProps = $this->convertFieldsToSections($tabName . '-col-' . $columnKey, $columnProps);
|
$columnProps = $this->convertFieldsToSections(
|
||||||
|
$tabName . '-col-' . $columnKey,
|
||||||
|
$columnProps
|
||||||
|
);
|
||||||
|
|
||||||
// inject getting started info, if the sections are empty
|
// inject getting started info, if the sections are empty
|
||||||
if (empty($columnProps['sections']) === true) {
|
if (empty($columnProps['sections']) === true) {
|
||||||
@@ -367,10 +478,14 @@ class Blueprint
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
$columns[$columnKey] = array_merge($columnProps, [
|
$columns[$columnKey] = [
|
||||||
|
...$columnProps,
|
||||||
'width' => $columnProps['width'] ?? '1/1',
|
'width' => $columnProps['width'] ?? '1/1',
|
||||||
'sections' => $this->normalizeSections($tabName, $columnProps['sections'] ?? [])
|
'sections' => $this->normalizeSections(
|
||||||
]);
|
$tabName,
|
||||||
|
$columnProps['sections'] ?? []
|
||||||
|
)
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
@@ -390,10 +505,9 @@ class Blueprint
|
|||||||
/**
|
/**
|
||||||
* Normalize field props for a single field
|
* Normalize field props for a single field
|
||||||
*
|
*
|
||||||
* @param array|string $props
|
|
||||||
* @throws \Kirby\Exception\InvalidArgumentException If the filed name is missing or the field type is invalid
|
* @throws \Kirby\Exception\InvalidArgumentException If the filed name is missing or the field type is invalid
|
||||||
*/
|
*/
|
||||||
public static function fieldProps($props): array
|
public static function fieldProps(array|string $props): array
|
||||||
{
|
{
|
||||||
$props = static::extend($props);
|
$props = static::extend($props);
|
||||||
|
|
||||||
@@ -432,12 +546,13 @@ class Blueprint
|
|||||||
}
|
}
|
||||||
|
|
||||||
// add some useful defaults
|
// add some useful defaults
|
||||||
return array_merge($props, [
|
return [
|
||||||
|
...$props,
|
||||||
'label' => $props['label'] ?? ucfirst($name),
|
'label' => $props['label'] ?? ucfirst($name),
|
||||||
'name' => $name,
|
'name' => $name,
|
||||||
'type' => $type,
|
'type' => $type,
|
||||||
'width' => $props['width'] ?? '1/1',
|
'width' => $props['width'] ?? '1/1',
|
||||||
]);
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -496,11 +611,16 @@ class Blueprint
|
|||||||
|
|
||||||
// resolve field groups
|
// resolve field groups
|
||||||
if ($fieldProps['type'] === 'group') {
|
if ($fieldProps['type'] === 'group') {
|
||||||
if (empty($fieldProps['fields']) === false && is_array($fieldProps['fields']) === true) {
|
if (
|
||||||
|
empty($fieldProps['fields']) === false &&
|
||||||
|
is_array($fieldProps['fields']) === true
|
||||||
|
) {
|
||||||
$index = array_search($fieldName, array_keys($fields));
|
$index = array_search($fieldName, array_keys($fields));
|
||||||
$before = array_slice($fields, 0, $index);
|
$fields = [
|
||||||
$after = array_slice($fields, $index + 1);
|
...array_slice($fields, 0, $index),
|
||||||
$fields = array_merge($before, $fieldProps['fields'] ?? [], $after);
|
...$fieldProps['fields'] ?? [],
|
||||||
|
...array_slice($fields, $index + 1)
|
||||||
|
];
|
||||||
} else {
|
} else {
|
||||||
unset($fields[$fieldName]);
|
unset($fields[$fieldName]);
|
||||||
}
|
}
|
||||||
@@ -515,11 +635,9 @@ class Blueprint
|
|||||||
/**
|
/**
|
||||||
* Normalizes blueprint options. This must be used in the
|
* Normalizes blueprint options. This must be used in the
|
||||||
* constructor of an extended class, if you want to make use of it.
|
* constructor of an extended class, if you want to make use of it.
|
||||||
*
|
|
||||||
* @param array|true|false|null|string $options
|
|
||||||
*/
|
*/
|
||||||
protected function normalizeOptions(
|
protected function normalizeOptions(
|
||||||
$options,
|
array|string|bool|null $options,
|
||||||
array $defaults,
|
array $defaults,
|
||||||
array $aliases = []
|
array $aliases = []
|
||||||
): array {
|
): array {
|
||||||
@@ -534,7 +652,7 @@ class Blueprint
|
|||||||
}
|
}
|
||||||
|
|
||||||
// extend options if possible
|
// extend options if possible
|
||||||
$options = $this->extend($options);
|
$options = static::extend($options);
|
||||||
|
|
||||||
foreach ($options as $key => $value) {
|
foreach ($options as $key => $value) {
|
||||||
$alias = $aliases[$key] ?? null;
|
$alias = $aliases[$key] ?? null;
|
||||||
@@ -545,7 +663,7 @@ class Blueprint
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return array_merge($defaults, $options);
|
return [...$defaults, ...$options];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -568,26 +686,27 @@ class Blueprint
|
|||||||
}
|
}
|
||||||
|
|
||||||
// inject all section extensions
|
// inject all section extensions
|
||||||
$sectionProps = $this->extend($sectionProps);
|
$sectionProps = static::extend($sectionProps);
|
||||||
|
|
||||||
$sections[$sectionName] = $sectionProps = array_merge($sectionProps, [
|
$sections[$sectionName] = $sectionProps = [
|
||||||
|
...$sectionProps,
|
||||||
'name' => $sectionName,
|
'name' => $sectionName,
|
||||||
'type' => $type = $sectionProps['type'] ?? $sectionName
|
'type' => $type = $sectionProps['type'] ?? $sectionName
|
||||||
]);
|
];
|
||||||
|
|
||||||
if (empty($type) === true || is_string($type) === false) {
|
if (empty($type) === true || is_string($type) === false) {
|
||||||
$sections[$sectionName] = [
|
$sections[$sectionName] = [
|
||||||
'name' => $sectionName,
|
'name' => $sectionName,
|
||||||
'label' => 'Invalid section type for section "' . $sectionName . '"',
|
'label' => 'Invalid section type for section "' . $sectionName . '"',
|
||||||
'type' => 'info',
|
'type' => 'info',
|
||||||
'text' => 'The following section types are available: ' . $this->helpList(array_keys(Section::$types))
|
'text' => 'The following section types are available: ' . static::helpList(array_keys(Section::$types))
|
||||||
];
|
];
|
||||||
} elseif (isset(Section::$types[$type]) === false) {
|
} elseif (isset(Section::$types[$type]) === false) {
|
||||||
$sections[$sectionName] = [
|
$sections[$sectionName] = [
|
||||||
'name' => $sectionName,
|
'name' => $sectionName,
|
||||||
'label' => 'Invalid section type ("' . $type . '")',
|
'label' => 'Invalid section type ("' . $type . '")',
|
||||||
'type' => 'info',
|
'type' => 'info',
|
||||||
'text' => 'The following section types are available: ' . $this->helpList(array_keys(Section::$types))
|
'text' => 'The following section types are available: ' . static::helpList(array_keys(Section::$types))
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -623,7 +742,7 @@ class Blueprint
|
|||||||
}
|
}
|
||||||
|
|
||||||
// store all normalized sections
|
// store all normalized sections
|
||||||
$this->sections = array_merge($this->sections, $sections);
|
$this->sections = [...$this->sections, ...$sections];
|
||||||
|
|
||||||
return $sections;
|
return $sections;
|
||||||
}
|
}
|
||||||
@@ -645,7 +764,7 @@ class Blueprint
|
|||||||
}
|
}
|
||||||
|
|
||||||
// inject all tab extensions
|
// inject all tab extensions
|
||||||
$tabProps = $this->extend($tabProps);
|
$tabProps = static::extend($tabProps);
|
||||||
|
|
||||||
// inject a preset if available
|
// inject a preset if available
|
||||||
$tabProps = $this->preset($tabProps);
|
$tabProps = $this->preset($tabProps);
|
||||||
@@ -653,13 +772,14 @@ class Blueprint
|
|||||||
$tabProps = $this->convertFieldsToSections($tabName, $tabProps);
|
$tabProps = $this->convertFieldsToSections($tabName, $tabProps);
|
||||||
$tabProps = $this->convertSectionsToColumns($tabName, $tabProps);
|
$tabProps = $this->convertSectionsToColumns($tabName, $tabProps);
|
||||||
|
|
||||||
$tabs[$tabName] = array_merge($tabProps, [
|
$tabs[$tabName] = [
|
||||||
|
...$tabProps,
|
||||||
'columns' => $this->normalizeColumns($tabName, $tabProps['columns'] ?? []),
|
'columns' => $this->normalizeColumns($tabName, $tabProps['columns'] ?? []),
|
||||||
'icon' => $tabProps['icon'] ?? null,
|
'icon' => $tabProps['icon'] ?? null,
|
||||||
'label' => $this->i18n($tabProps['label'] ?? ucfirst($tabName)),
|
'label' => $this->i18n($tabProps['label'] ?? ucfirst($tabName)),
|
||||||
'link' => $this->model->panel()->url(true) . '/?tab=' . $tabName,
|
'link' => $this->model->panel()->url(true) . '/?tab=' . $tabName,
|
||||||
'name' => $tabName,
|
'name' => $tabName,
|
||||||
]);
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->tabs = $tabs;
|
return $this->tabs = $tabs;
|
||||||
|
|||||||
@@ -157,72 +157,17 @@ class File extends ModelWithContent
|
|||||||
*/
|
*/
|
||||||
public function blueprints(string $inSection = null): array
|
public function blueprints(string $inSection = null): array
|
||||||
{
|
{
|
||||||
|
// get cached results for the current file model
|
||||||
|
// (except when collecting for a specific section)
|
||||||
if ($inSection === null && $this->blueprints !== null) {
|
if ($inSection === null && $this->blueprints !== null) {
|
||||||
return $this->blueprints; // @codeCoverageIgnore
|
return $this->blueprints; // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
|
|
||||||
// always include the current template as option
|
// always include the current template as option
|
||||||
$template = $this->template() ?? 'default';
|
$templates = [
|
||||||
$templates = [$template];
|
$this->template() ?? 'default',
|
||||||
$parent = $this->parent();
|
...$this->parent()->blueprint()->acceptedFileTemplates($inSection)
|
||||||
|
];
|
||||||
// what file templates/blueprints should be considered is
|
|
||||||
// defined bythe parent's blueprint: which templates it allows
|
|
||||||
// in files sections as well as files fields
|
|
||||||
$blueprint = $parent->blueprint();
|
|
||||||
|
|
||||||
$fromFields = function ($fields) use (&$fromFields, $parent) {
|
|
||||||
$templates = [];
|
|
||||||
|
|
||||||
foreach ($fields as $field) {
|
|
||||||
// files or textare field
|
|
||||||
if (
|
|
||||||
$field['type'] === 'files' ||
|
|
||||||
$field['type'] === 'textarea'
|
|
||||||
) {
|
|
||||||
$uploads = $field['uploads'] ?? null;
|
|
||||||
|
|
||||||
// only if the `uploads` parent is the actual parent
|
|
||||||
if ($target = $uploads['parent'] ?? null) {
|
|
||||||
if ($parent->id() !== $target) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$templates[] = $uploads['template'] ?? 'default';
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// structure field
|
|
||||||
if ($field['type'] === 'structure') {
|
|
||||||
$fields = $fromFields($field['fields']);
|
|
||||||
$templates = array_merge($templates, $fields);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $templates;
|
|
||||||
};
|
|
||||||
|
|
||||||
// collect all allowed templates…
|
|
||||||
foreach ($blueprint->sections() as $section) {
|
|
||||||
// if collecting for a specific section, skip all others
|
|
||||||
if ($inSection !== null && $section->name() !== $inSection) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// …from files sections
|
|
||||||
if ($section->type() === 'files') {
|
|
||||||
$templates[] = $section->template() ?? 'default';
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// …from fields
|
|
||||||
if ($section->type() === 'fields') {
|
|
||||||
$fields = $fromFields($section->fields());
|
|
||||||
$templates = array_merge($templates, $fields);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// make sure every template is only included once
|
// make sure every template is only included once
|
||||||
$templates = array_unique(array_filter($templates));
|
$templates = array_unique(array_filter($templates));
|
||||||
@@ -393,13 +338,12 @@ class File extends ModelWithContent
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static $accessible = [];
|
static $accessible = [];
|
||||||
|
$role = $this->kirby()->user()?->role()->id() ?? '__none__';
|
||||||
|
$template = $this->template() ?? '__none__';
|
||||||
|
$accessible[$role] ??= [];
|
||||||
|
|
||||||
if ($template = $this->template()) {
|
return $accessible[$role][$template] ??= $this->permissions()->can('access');
|
||||||
return $accessible[$template] ??= $this->permissions()->can('access');
|
|
||||||
}
|
|
||||||
|
|
||||||
return $accessible['__none__'] ??= $this->permissions()->can('access');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -418,13 +362,12 @@ class File extends ModelWithContent
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static $listable = [];
|
static $listable = [];
|
||||||
|
$role = $this->kirby()->user()?->role()->id() ?? '__none__';
|
||||||
|
$template = $this->template() ?? '__none__';
|
||||||
|
$listable[$role] ??= [];
|
||||||
|
|
||||||
if ($template = $this->template()) {
|
return $listable[$role][$template] ??= $this->permissions()->can('list');
|
||||||
return $listable[$template] ??= $this->permissions()->can('list');
|
|
||||||
}
|
|
||||||
|
|
||||||
return $listable['__none__'] ??= $this->permissions()->can('list');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -434,13 +377,12 @@ class File extends ModelWithContent
|
|||||||
*/
|
*/
|
||||||
public function isReadable(): bool
|
public function isReadable(): bool
|
||||||
{
|
{
|
||||||
static $readable = [];
|
static $readable = [];
|
||||||
|
$role = $this->kirby()->user()?->role()->id() ?? '__none__';
|
||||||
|
$template = $this->template() ?? '__none__';
|
||||||
|
$readable[$role] ??= [];
|
||||||
|
|
||||||
if ($template = $this->template()) {
|
return $readable[$role][$template] ??= $this->permissions()->can('read');
|
||||||
return $readable[$template] ??= $this->permissions()->can('read');
|
|
||||||
}
|
|
||||||
|
|
||||||
return $readable['__none__'] ??= $this->permissions()->can('read');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -679,7 +621,7 @@ class File extends ModelWithContent
|
|||||||
* Page URL and the filename as a more stable
|
* Page URL and the filename as a more stable
|
||||||
* alternative for the media URLs.
|
* alternative for the media URLs.
|
||||||
*/
|
*/
|
||||||
public function previewUrl(): string
|
public function previewUrl(): string|null
|
||||||
{
|
{
|
||||||
$parent = $this->parent();
|
$parent = $this->parent();
|
||||||
$url = Url::to($this->id());
|
$url = Url::to($this->id());
|
||||||
|
|||||||
@@ -47,7 +47,9 @@ trait FileActions
|
|||||||
string|null $extension = null
|
string|null $extension = null
|
||||||
): static {
|
): static {
|
||||||
if ($sanitize === true) {
|
if ($sanitize === true) {
|
||||||
$name = F::safeName($name);
|
// sanitize the basename part only
|
||||||
|
// as the extension isn't included in $name
|
||||||
|
$name = F::safeBasename($name, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if no extension is passed, make sure to maintain current one
|
// if no extension is passed, make sure to maintain current one
|
||||||
@@ -100,6 +102,11 @@ trait FileActions
|
|||||||
*/
|
*/
|
||||||
public function changeSort(int $sort): static
|
public function changeSort(int $sort): static
|
||||||
{
|
{
|
||||||
|
// skip if the sort number stays the same
|
||||||
|
if ($this->sort()->value() === $sort) {
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
return $this->commit(
|
return $this->commit(
|
||||||
'changeSort',
|
'changeSort',
|
||||||
['file' => $this, 'position' => $sort],
|
['file' => $this, 'position' => $sort],
|
||||||
@@ -132,10 +139,9 @@ trait FileActions
|
|||||||
|
|
||||||
$file = $file->update(['template' => $template]);
|
$file = $file->update(['template' => $template]);
|
||||||
|
|
||||||
// rename and/or resize the file if configured by new blueprint
|
// resize the file if configured by new blueprint
|
||||||
$create = $file->blueprint()->create();
|
$create = $file->blueprint()->create();
|
||||||
$file = $file->changeExtension($file, $create['format'] ?? null);
|
$file = $file->manipulate($create);
|
||||||
$file->manipulate($create);
|
|
||||||
|
|
||||||
return $file;
|
return $file;
|
||||||
});
|
});
|
||||||
@@ -178,6 +184,7 @@ trait FileActions
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Copy the file to the given page
|
* Copy the file to the given page
|
||||||
|
* @internal
|
||||||
*/
|
*/
|
||||||
public function copy(Page $page): static
|
public function copy(Page $page): static
|
||||||
{
|
{
|
||||||
@@ -261,7 +268,6 @@ trait FileActions
|
|||||||
// we need to already rename it so that the correct file rules
|
// we need to already rename it so that the correct file rules
|
||||||
// are applied
|
// are applied
|
||||||
$create = $file->blueprint()->create();
|
$create = $file->blueprint()->create();
|
||||||
$file = $file->changeExtension($file, $create['format'] ?? null);
|
|
||||||
|
|
||||||
// run the hook
|
// run the hook
|
||||||
$arguments = compact('file', 'upload');
|
$arguments = compact('file', 'upload');
|
||||||
@@ -331,7 +337,14 @@ trait FileActions
|
|||||||
// generate image file and overwrite it in place
|
// generate image file and overwrite it in place
|
||||||
$this->kirby()->thumb($this->root(), $this->root(), $options);
|
$this->kirby()->thumb($this->root(), $this->root(), $options);
|
||||||
|
|
||||||
return $this->clone([]);
|
$file = $this->clone();
|
||||||
|
|
||||||
|
// change the file extension if format option configured
|
||||||
|
if ($format = $options['format'] ?? null) {
|
||||||
|
$file = $file->changeExtension($file, $format);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $file;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -379,7 +392,6 @@ trait FileActions
|
|||||||
|
|
||||||
// apply the resizing/crop options from the blueprint
|
// apply the resizing/crop options from the blueprint
|
||||||
$create = $file->blueprint()->create();
|
$create = $file->blueprint()->create();
|
||||||
$file = $file->changeExtension($file, $create['format'] ?? null);
|
|
||||||
$file = $file->manipulate($create);
|
$file = $file->manipulate($create);
|
||||||
|
|
||||||
// return a fresh clone
|
// return a fresh clone
|
||||||
|
|||||||
@@ -57,6 +57,9 @@ class FileBlueprint extends Blueprint
|
|||||||
/**
|
/**
|
||||||
* Returns the list of all accepted MIME types for
|
* Returns the list of all accepted MIME types for
|
||||||
* file upload or `*` if all MIME types are allowed
|
* file upload or `*` if all MIME types are allowed
|
||||||
|
*
|
||||||
|
* @deprecated 4.2.0 Use `acceptAttribute` instead
|
||||||
|
* @todo 5.0.0 Remove method
|
||||||
*/
|
*/
|
||||||
public function acceptMime(): string
|
public function acceptMime(): string
|
||||||
{
|
{
|
||||||
@@ -116,6 +119,74 @@ class FileBlueprint extends Blueprint
|
|||||||
return '*';
|
return '*';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the list of all accepted file extensions
|
||||||
|
* for file upload or `*` if all extensions are allowed
|
||||||
|
*
|
||||||
|
* If a MIME type is specified in the blueprint, the `extension` and `type` options are ignored for the browser.
|
||||||
|
* Extensions and types, however, are still used to validate an uploaded file on the server.
|
||||||
|
* This behavior might change in the future to better represent which file extensions are actually allowed.
|
||||||
|
*
|
||||||
|
* If no MIME type is specified, the intersection between manually defined extensions and the Kirby "file types" is returned.
|
||||||
|
* If the intersection is empty, an empty string is returned.
|
||||||
|
* This behavior might change in the future to instead return the union of `mime`, `extension` and `type`.
|
||||||
|
*
|
||||||
|
* @since 4.2.0
|
||||||
|
*/
|
||||||
|
public function acceptAttribute(): string
|
||||||
|
{
|
||||||
|
// don't disclose the specific default types
|
||||||
|
if ($this->defaultTypes === true) {
|
||||||
|
return '*';
|
||||||
|
}
|
||||||
|
|
||||||
|
$accept = $this->accept();
|
||||||
|
|
||||||
|
// get extensions from "mime" option
|
||||||
|
if (is_array($accept['mime']) === true) {
|
||||||
|
// determine the extensions for each MIME type
|
||||||
|
$extensions = array_map(
|
||||||
|
fn ($pattern) => Mime::toExtensions($pattern, true),
|
||||||
|
$accept['mime']
|
||||||
|
);
|
||||||
|
|
||||||
|
$fromMime = array_unique(array_merge(...array_values($extensions)));
|
||||||
|
|
||||||
|
// return early to ignore the other options
|
||||||
|
return implode(',', array_map(fn ($ext) => ".$ext", $fromMime));
|
||||||
|
}
|
||||||
|
|
||||||
|
$restrictions = [];
|
||||||
|
|
||||||
|
// get extensions from "type" option
|
||||||
|
if (is_array($accept['type']) === true) {
|
||||||
|
$extensions = array_map(
|
||||||
|
fn ($type) => F::typeToExtensions($type) ?? [],
|
||||||
|
$accept['type']
|
||||||
|
);
|
||||||
|
|
||||||
|
$fromType = array_merge(...array_values($extensions));
|
||||||
|
$restrictions[] = $fromType;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get extensions from "extension" option
|
||||||
|
if (is_array($accept['extension']) === true) {
|
||||||
|
$restrictions[] = $accept['extension'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// intersect all restrictions
|
||||||
|
$list = match (count($restrictions)) {
|
||||||
|
0 => [],
|
||||||
|
1 => $restrictions[0],
|
||||||
|
default => array_intersect(...$restrictions)
|
||||||
|
};
|
||||||
|
|
||||||
|
$list = array_unique($list);
|
||||||
|
|
||||||
|
// format the list to include a leading dot on each extension
|
||||||
|
return implode(',', array_map(fn ($ext) => ".$ext", $list));
|
||||||
|
}
|
||||||
|
|
||||||
protected function normalizeAccept(mixed $accept = null): array
|
protected function normalizeAccept(mixed $accept = null): array
|
||||||
{
|
{
|
||||||
$accept = match (true) {
|
$accept = match (true) {
|
||||||
|
|||||||
@@ -315,7 +315,7 @@ class FileRules
|
|||||||
public static function validMime(File $file, string $mime = null): bool
|
public static function validMime(File $file, string $mime = null): bool
|
||||||
{
|
{
|
||||||
// make it easier to compare the mime
|
// make it easier to compare the mime
|
||||||
$mime = strtolower($mime);
|
$mime = strtolower($mime ?? '');
|
||||||
|
|
||||||
if (empty($mime)) {
|
if (empty($mime)) {
|
||||||
throw new InvalidArgumentException([
|
throw new InvalidArgumentException([
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ class FileVersion
|
|||||||
|
|
||||||
// content fields
|
// content fields
|
||||||
if ($this->original() instanceof File) {
|
if ($this->original() instanceof File) {
|
||||||
return $this->original()->content()->get($method, $arguments);
|
return $this->original()->content()->get($method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,14 +29,20 @@ class Helpers
|
|||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
public static $deprecations = [
|
public static $deprecations = [
|
||||||
|
// The internal `$model->contentFile*()` methods have been deprecated
|
||||||
|
'model-content-file' => true,
|
||||||
|
|
||||||
|
// Passing an `info` array inside the `extends` array
|
||||||
|
// has been deprecated. Pass the individual entries (e.g. root, version)
|
||||||
|
// directly as named arguments.
|
||||||
|
// TODO: switch to true in v6
|
||||||
|
'plugin-extends-root' => false,
|
||||||
|
|
||||||
// Passing a single space as value to `Xml::attr()` has been
|
// Passing a single space as value to `Xml::attr()` has been
|
||||||
// deprecated. In a future version, passing a single space won't
|
// deprecated. In a future version, passing a single space won't
|
||||||
// render an empty value anymore but a single space.
|
// render an empty value anymore but a single space.
|
||||||
// To render an empty value, please pass an empty string.
|
// To render an empty value, please pass an empty string.
|
||||||
'xml-attr-single-space' => true,
|
'xml-attr-single-space' => true,
|
||||||
|
|
||||||
// The internal `$model->contentFile*()` methods have been deprecated
|
|
||||||
'model-content-file' => true,
|
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -110,6 +116,9 @@ class Helpers
|
|||||||
) {
|
) {
|
||||||
$override = null;
|
$override = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @psalm-suppress UndefinedVariable
|
||||||
|
*/
|
||||||
$handler = set_error_handler(function () use (&$override, &$handler, $condition, $fallback) {
|
$handler = set_error_handler(function () use (&$override, &$handler, $condition, $fallback) {
|
||||||
// check if suppress condition is met
|
// check if suppress condition is met
|
||||||
$suppress = $condition(...func_get_args());
|
$suppress = $condition(...func_get_args());
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ use Kirby\Data\Data;
|
|||||||
use Kirby\Exception\Exception;
|
use Kirby\Exception\Exception;
|
||||||
use Kirby\Exception\InvalidArgumentException;
|
use Kirby\Exception\InvalidArgumentException;
|
||||||
use Kirby\Exception\LogicException;
|
use Kirby\Exception\LogicException;
|
||||||
|
use Kirby\Exception\PermissionException;
|
||||||
use Kirby\Filesystem\F;
|
use Kirby\Filesystem\F;
|
||||||
use Kirby\Toolkit\Locale;
|
use Kirby\Toolkit\Locale;
|
||||||
use Kirby\Toolkit\Str;
|
use Kirby\Toolkit\Str;
|
||||||
@@ -145,8 +146,17 @@ class Language
|
|||||||
*/
|
*/
|
||||||
public static function create(array $props): static
|
public static function create(array $props): static
|
||||||
{
|
{
|
||||||
|
$kirby = App::instance();
|
||||||
|
$user = $kirby->user();
|
||||||
|
|
||||||
|
if (
|
||||||
|
$user === null ||
|
||||||
|
$user->role()->permissions()->for('languages', 'create') === false
|
||||||
|
) {
|
||||||
|
throw new PermissionException(['key' => 'language.create.permission']);
|
||||||
|
}
|
||||||
|
|
||||||
$props['code'] = Str::slug($props['code'] ?? null);
|
$props['code'] = Str::slug($props['code'] ?? null);
|
||||||
$kirby = App::instance();
|
|
||||||
$languages = $kirby->languages();
|
$languages = $kirby->languages();
|
||||||
|
|
||||||
// make the first language the default language
|
// make the first language the default language
|
||||||
@@ -204,8 +214,16 @@ class Language
|
|||||||
public function delete(): bool
|
public function delete(): bool
|
||||||
{
|
{
|
||||||
$kirby = App::instance();
|
$kirby = App::instance();
|
||||||
|
$user = $kirby->user();
|
||||||
$code = $this->code();
|
$code = $this->code();
|
||||||
|
|
||||||
|
if (
|
||||||
|
$user === null ||
|
||||||
|
$user->role()->permissions()->for('languages', 'delete') === false
|
||||||
|
) {
|
||||||
|
throw new PermissionException(['key' => 'language.delete.permission']);
|
||||||
|
}
|
||||||
|
|
||||||
if ($this->isDeletable() === false) {
|
if ($this->isDeletable() === false) {
|
||||||
throw new Exception('The language cannot be deleted');
|
throw new Exception('The language cannot be deleted');
|
||||||
}
|
}
|
||||||
@@ -497,13 +515,22 @@ class Language
|
|||||||
*/
|
*/
|
||||||
public function update(array $props = null): static
|
public function update(array $props = null): static
|
||||||
{
|
{
|
||||||
|
$kirby = App::instance();
|
||||||
|
$user = $kirby->user();
|
||||||
|
|
||||||
|
if (
|
||||||
|
$user === null ||
|
||||||
|
$user->role()->permissions()->for('languages', 'update') === false
|
||||||
|
) {
|
||||||
|
throw new PermissionException(['key' => 'language.update.permission']);
|
||||||
|
}
|
||||||
|
|
||||||
// don't change the language code
|
// don't change the language code
|
||||||
unset($props['code']);
|
unset($props['code']);
|
||||||
|
|
||||||
// make sure the slug is nice and clean
|
// make sure the slug is nice and clean
|
||||||
$props['slug'] = Str::slug($props['slug'] ?? null);
|
$props['slug'] = Str::slug($props['slug'] ?? null);
|
||||||
|
|
||||||
$kirby = App::instance();
|
|
||||||
$updated = $this->clone($props);
|
$updated = $this->clone($props);
|
||||||
|
|
||||||
if (isset($props['translations']) === true) {
|
if (isset($props['translations']) === true) {
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ use Kirby\Exception\NotFoundException;
|
|||||||
use Kirby\Http\Router;
|
use Kirby\Http\Router;
|
||||||
use Kirby\Toolkit\A;
|
use Kirby\Toolkit\A;
|
||||||
use Kirby\Toolkit\Str;
|
use Kirby\Toolkit\Str;
|
||||||
|
use Kirby\Uuid\Uuid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The language router is used internally
|
* The language router is used internally
|
||||||
@@ -84,6 +85,27 @@ class LanguageRouter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Language-specific UUID URLs
|
||||||
|
$routes[] = [
|
||||||
|
'pattern' => '@/(page|file)/(:all)',
|
||||||
|
'method' => 'ALL',
|
||||||
|
'env' => 'site',
|
||||||
|
'action' => function (string $languageCode, string $type, string $id) use ($kirby, $language) {
|
||||||
|
// try to resolve to model, but only from UUID cache;
|
||||||
|
// this ensures that only existing UUIDs can be queried
|
||||||
|
// and attackers can't force Kirby to go through the whole
|
||||||
|
// site index with a non-existing UUID
|
||||||
|
if ($model = Uuid::for($type . '://' . $id)?->model(true)) {
|
||||||
|
return $kirby
|
||||||
|
->response()
|
||||||
|
->redirect($model->url($language->code()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// render the error page
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
return $routes;
|
return $routes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ class LanguageRules
|
|||||||
/**
|
/**
|
||||||
* Validates if the language can be updated
|
* Validates if the language can be updated
|
||||||
*/
|
*/
|
||||||
public static function update(Language $language)
|
public static function update(Language $language): void
|
||||||
{
|
{
|
||||||
static::validLanguageCode($language);
|
static::validLanguageCode($language);
|
||||||
static::validLanguageName($language);
|
static::validLanguageName($language);
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ class LanguageVariable
|
|||||||
throw new DuplicateException('The variable is part of the core translation and cannot be overwritten');
|
throw new DuplicateException('The variable is part of the core translation and cannot be overwritten');
|
||||||
}
|
}
|
||||||
|
|
||||||
$translations[$key] = trim($value ?? '');
|
$translations[$key] = $value ?? '';
|
||||||
|
|
||||||
$language->update(['translations' => $translations]);
|
$language->update(['translations' => $translations]);
|
||||||
|
|
||||||
@@ -102,10 +102,10 @@ class LanguageVariable
|
|||||||
/**
|
/**
|
||||||
* Sets a new value for the language variable
|
* Sets a new value for the language variable
|
||||||
*/
|
*/
|
||||||
public function update(string $value): static
|
public function update(string|null $value = null): static
|
||||||
{
|
{
|
||||||
$translations = $this->language->translations();
|
$translations = $this->language->translations();
|
||||||
$translations[$this->key] = $value;
|
$translations[$this->key] = $value ?? '';
|
||||||
|
|
||||||
$language = $this->language->update(['translations' => $translations]);
|
$language = $this->language->update(['translations' => $translations]);
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user