(Grav GitSync) Automatic Commit from dan

This commit is contained in:
dan 2022-02-19 20:08:46 +13:00 committed by GitSync
parent 72b3e0c552
commit 2fa5edfdbb
143 changed files with 11847 additions and 14514 deletions

View File

@ -0,0 +1,34 @@
---
title: 'Our Android section tutorial/guide is ready 🍻 '
published: true
date: '19-02-2022 20:06'
taxonomy:
category:
- news
tag:
- tutorials
- '#phone'
- '#android'
- '#magisk'
- fdroid
- afwall
- xprivacylua
- lsposed
- microg
- shelter
- aurora
- lineage
- privacy
aura:
author: dan
---
# Our Android section tutorial/guide is ready 🍻
Are you interested in refreshing your old Android phone via a Custom ROM? Using an Android device for your digital privacy ?
We just finished our tutorial/guide for our Android section.
F-Droid, Magisk, AFWall, LSPosed, microG ... they're all part of it.
Have a look:
https://wiki.techsaviours.org/en/phone/operating_systems/android

View File

@ -1,4 +1,4 @@
# EditorConfig is awesome: http://EditorConfig.org
# EditorConfig is awesome: https://EditorConfig.org
# top-most EditorConfig file
root = true
@ -12,6 +12,6 @@ insert_final_newline = true
indent_style = space
indent_size = 2
# 2 space indentation
[*.{yaml,.yml}]
indent_size = 2
# 4 space indentation
[*.php]
indent_size = 4

View File

@ -1,17 +1,52 @@
# v1.10.30.2
## 02/09/2022
1. [](#bugfix)
* Fixed regression preventing new `elements` field from saving its state
# v1.10.30.1
## 02/09/2022
1. [](#improved)
* List field items will now require confirmation before getting deleted
# v1.10.30
## 02/07/2022
1. [](#new)
* Require **Grav 1.7.30**
* Updated SCSS compiler to v1.10
* PageMedia can now be collapsed and thumbnails previewed smaller, in order to save room on the page. Selection will be remembered.
* DEPRECATED: Admin field `pages_list_display_field` is no longer available as an option [#2191](https://github.com/getgrav/grav-plugin-admin/issues/2191)
* When listing installable themes/plugins, it is now possible to sort them by [Premium](https://getgrav.org/premium)
2. [](#improved)
* Updated JavaScript dependencies
* Cleaned up JavaScript unused dependencies and warnings
* Removed unused style assets
* Plugins list rows now properly highlight on hover, no more guessing when wanting to disable a plugin!
3. [](#bugfix)
* Fixed `elements` field when it's used inside `list` field
* Fixed issue uploading non-images media when Resolution setting enabled in Admin [#2172](https://github.com/getgrav/grav-plugin-admin/issues/2172)
* Prevent fields from being toggled incorrectly by adding originalValue to childs of fieldset. [#2218](https://github.com/getgrav/grav-plugin-admin/pull/2218)
* Fixed persistent focus on Folder field when Adding page (Safari) [#2209](https://github.com/getgrav/grav-plugin-admin/issues/2209)
* Fixed performance of Plugins / Themes sort in the installation table
* Fixed list field with key/value pairs throwing an exception due to bad value [#2199](https://github.com/getgrav/grav-plugin-admin/issues/2199)
* Fixed disabling/enabling plugin from the list breaking the plugin configuration
# v1.10.29
## 01/28/2022
1. [](#new)
* Require **Grav 1.7.29**
3. [](#improved)
* Made path handling unicode-safe, use new `Utils::basename()` and `Utils::pathinfo()` everywhere
* Made path handling unicode-safe, use new `Utils::basename()` and `Utils::pathinfo()` everywhere
# v1.10.28
## 01/24/2022
1. [](#bugfix)
* Clean file names before displaying errors/metadata modals
* Recompiled JS for production [#2225](https://github.com/getgrav/grav-plugin-admin/issues/2225)
* Clean file names before displaying errors/metadata modals
* Recompiled JS for production [#2225](https://github.com/getgrav/grav-plugin-admin/issues/2225)
# v1.10.27
## 01/12/2022

View File

@ -1,6 +1,6 @@
# Grav Standard Administration Panel Plugin
This **admin plugin** for [Grav](http://github.com/getgrav/grav) is an HTML user interface that provides a convenient way to configure Grav and easily create and modify pages. This will remain a totally optional plugin, and is not in any way required or needed to use Grav effectively. In fact, the admin provides an intentionally limited view to ensure it remains easy to use and not overwhelming. I'm sure power users will still prefer to work with the configuration files directly.
This **admin plugin** for [Grav](https://github.com/getgrav/grav) is an HTML user interface that provides a convenient way to configure Grav and easily create and modify pages. This will remain a totally optional plugin, and is not in any way required or needed to use Grav effectively. In fact, the admin provides an intentionally limited view to ensure it remains easy to use and not overwhelming. I'm sure power users will still prefer to work with the configuration files directly.
![](assets/admin-dashboard.png)
@ -33,7 +33,7 @@ This **admin plugin** for [Grav](http://github.com/getgrav/grav) is an HTML user
We have tested internally, but we hope to use this public beta phase to identify, isolate, and fix issues related to the plugin to ensure it is as solid and reliable as possible.
For **live chatting**, please use the dedicated [Slack Chat Room](https://getgrav.org/slack) for discussions directly related to Grav.
For **live chatting**, please use the dedicated [Discord Chat Room](https://getgrav.org/discord) for discussions directly related to Grav.
For **bugs, features, improvements**, please ensure you [create issues in the admin plugin GitHub repository](https://github.com/getgrav/grav-plugin-admin).
@ -99,7 +99,7 @@ By default, you can access the admin by pointing your browser to `http://yoursit
# Standard Free & Paid Pro Versions
If you have been following the [blog](http://getgrav.org/blog), [Twitter](https://twitter.com/getgrav), [Slack chat](https://getgrav.org/slack), etc., you probably already know now that our intention is to provide two versions of this plugin.
If you have been following the [blog](https://getgrav.org/blog), [Twitter](https://twitter.com/getgrav), [Discord chat](https://getgrav.org/discord), etc., you probably already know now that our intention is to provide two versions of this plugin.
The **standard free version**, is very powerful, and has more functionality than most commercial flat-file CMS systems.

View File

@ -119,6 +119,12 @@ class AdminPlugin extends Plugin
'list' => [
'array' => true
],
'elements' => [
'input@' => true
],
'element' => [
'input@' => false
],
'file' => [
'array' => true,
'media_field' => true,

View File

@ -26,7 +26,6 @@ session:
edit_mode: normal
frontend_preview_target: inline
show_github_msg: true
pages_list_display_field: title
admin_icons: line-awesome
enable_auto_updates_check: true
notifications:

View File

@ -1,13 +1,13 @@
name: Admin Panel
slug: admin
type: plugin
version: 1.10.29
version: 1.10.30.2
description: Adds an advanced administration panel to manage your site
icon: empire
author:
name: Team Grav
email: devs@getgrav.org
url: http://getgrav.org
url: https://getgrav.org
homepage: https://github.com/getgrav/grav-plugin-admin
keywords: admin, plugin, manager, panel
bugs: https://github.com/getgrav/grav-plugin-admin/issues
@ -15,7 +15,7 @@ docs: https://github.com/getgrav/grav-plugin-admin/blob/develop/README.md
license: MIT
dependencies:
- { name: grav, version: '>=1.7.29' }
- { name: grav, version: '>=1.7.30' }
- { name: form, version: '>=5.1.0' }
- { name: login, version: '>=3.6.2' }
- { name: email, version: '>=3.1.0' }
@ -202,12 +202,6 @@ form:
type: bool
help: PLUGIN_ADMIN.SHOW_GITHUB_LINK_HELP
pages_list_display_field:
type: text
size: small
label: PLUGIN_ADMIN.PAGES_LIST_DISPLAY_FIELD
help: PLUGIN_ADMIN.PAGES_LIST_DISPLAY_FIELD_HELP
enable_auto_updates_check:
type: toggle
label: PLUGIN_ADMIN.AUTO_UPDATES

View File

@ -22,6 +22,7 @@ use Grav\Common\Page\Medium\Medium;
use Grav\Common\Page\Page;
use Grav\Common\Page\Pages;
use Grav\Common\Page\Collection;
use Grav\Common\Plugins;
use Grav\Common\Security;
use Grav\Common\User\Interfaces\UserCollectionInterface;
use Grav\Common\User\Interfaces\UserInterface;
@ -35,6 +36,7 @@ use PicoFeed\Parser\MalformedXmlException;
use Psr\Http\Message\ResponseInterface;
use RocketTheme\Toolbox\Event\Event;
use RocketTheme\Toolbox\File\File;
use RocketTheme\Toolbox\File\YamlFile;
use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator;
use Twig\Loader\FilesystemLoader;
@ -629,10 +631,8 @@ class AdminController extends AdminBaseController
return false;
}
// Filter value and save it.
$this->post = ['enabled' => true];
$obj = $this->prepareData($this->post);
$obj->save();
$type = $this->getDataType();
$this->updatePluginState($type, ['enabled' => true]);
$this->post = ['_redirect' => 'plugins'];
if ($this->grav['uri']->param('redirect')) {
@ -662,10 +662,8 @@ class AdminController extends AdminBaseController
return false;
}
// Filter value and save it.
$this->post = ['enabled' => false];
$obj = $this->prepareData($this->post);
$obj->save();
$type = $this->getDataType();
$this->updatePluginState($type, ['enabled' => false]);
$this->post = ['_redirect' => 'plugins'];
$this->admin->setMessage($this->admin::translate('PLUGIN_ADMIN.SUCCESSFULLY_DISABLED_PLUGIN'), 'info');
@ -675,6 +673,30 @@ class AdminController extends AdminBaseController
return true;
}
/**
* @param string $type
* @param array $value
* @return void
*/
protected function updatePluginState(string $type, array $value): void
{
$obj = Plugins::get(preg_replace('|plugins/|', '', $type));
if (null === $obj) {
throw new \RuntimeException("Plugin '{$type}' doesn't exist!");
}
/** @var UniformResourceLocator $locator */
$locator = $this->grav['locator'];
// Configuration file will be saved to the existing config stream.
$filename = $locator->findResource('config://') . "/{$type}.yaml";
$file = YamlFile::instance($filename);
$contents = $value + $file->content();
$file->save($contents);
}
/**
* Set the default theme.
*

View File

@ -363,7 +363,7 @@ class Gpm
$error[] = '<p>Grav has increased the minimum PHP requirement.<br />';
$error[] = 'You are currently running PHP <strong>' . phpversion() . '</strong>';
$error[] = ', but PHP <strong>' . $upgrader->minPHPVersion() . '</strong> is required.</p>';
$error[] = '<p><a href="http://getgrav.org/blog/changing-php-requirements-to-5.5" class="button button-small secondary">Additional information</a></p>';
$error[] = '<p><a href="https://getgrav.org/blog/changing-php-requirements-to-5.5" class="button button-small secondary">Additional information</a></p>';
Installer::setError(implode("\n", $error));

View File

@ -190,16 +190,16 @@
},
{
"name": "scssphp/scssphp",
"version": "v1.9.0",
"version": "v1.10.0",
"source": {
"type": "git",
"url": "https://github.com/scssphp/scssphp.git",
"reference": "bc8bece4e5e176973a832f3763049ddbba16e6fd"
"reference": "9699a52a862da4efb43985943afa17150155dd3d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/scssphp/scssphp/zipball/bc8bece4e5e176973a832f3763049ddbba16e6fd",
"reference": "bc8bece4e5e176973a832f3763049ddbba16e6fd",
"url": "https://api.github.com/repos/scssphp/scssphp/zipball/9699a52a862da4efb43985943afa17150155dd3d",
"reference": "9699a52a862da4efb43985943afa17150155dd3d",
"shasum": ""
},
"require": {
@ -215,7 +215,7 @@
"symfony/phpunit-bridge": "^5.1",
"thoughtbot/bourbon": "^7.0",
"twbs/bootstrap": "~5.0",
"twbs/bootstrap4": "4.6.0",
"twbs/bootstrap4": "4.6.1",
"zurb/foundation": "~6.5"
},
"suggest": {
@ -258,9 +258,9 @@
],
"support": {
"issues": "https://github.com/scssphp/scssphp/issues",
"source": "https://github.com/scssphp/scssphp/tree/v1.9.0"
"source": "https://github.com/scssphp/scssphp/tree/v1.10.0"
},
"time": "2021-12-13T11:55:16+00:00"
"time": "2022-01-06T18:16:18+00:00"
}
],
"packages-dev": [
@ -885,12 +885,12 @@
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
},
"files": [
"src/functions_include.php"
]
],
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -976,9 +976,6 @@
"require": {
"php": "^7.1 || ^8.0"
},
"replace": {
"myclabs/deep-copy": "self.version"
},
"require-dev": {
"doctrine/collections": "^1.0",
"doctrine/common": "^2.6",
@ -986,12 +983,12 @@
},
"type": "library",
"autoload": {
"psr-4": {
"DeepCopy\\": "src/DeepCopy/"
},
"files": [
"src/DeepCopy/deep_copy.php"
]
],
"psr-4": {
"DeepCopy\\": "src/DeepCopy/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -1239,16 +1236,16 @@
},
{
"name": "phpdocumentor/type-resolver",
"version": "1.5.1",
"version": "1.6.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
"reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae"
"reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae",
"reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706",
"reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706",
"shasum": ""
},
"require": {
@ -1283,9 +1280,9 @@
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1"
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0"
},
"time": "2021-10-02T14:08:47+00:00"
"time": "2022-01-04T19:58:01+00:00"
},
{
"name": "phpspec/prophecy",
@ -2544,16 +2541,16 @@
},
{
"name": "symfony/browser-kit",
"version": "v4.4.27",
"version": "v4.4.37",
"source": {
"type": "git",
"url": "https://github.com/symfony/browser-kit.git",
"reference": "9629d1524d8ced5a4ec3e94abdbd638b4ec8319b"
"reference": "6e81008cac62369871cb6b8de64576ed138e3998"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/9629d1524d8ced5a4ec3e94abdbd638b4ec8319b",
"reference": "9629d1524d8ced5a4ec3e94abdbd638b4ec8319b",
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/6e81008cac62369871cb6b8de64576ed138e3998",
"reference": "6e81008cac62369871cb6b8de64576ed138e3998",
"shasum": ""
},
"require": {
@ -2596,7 +2593,7 @@
"description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/browser-kit/tree/v4.4.27"
"source": "https://github.com/symfony/browser-kit/tree/v4.4.37"
},
"funding": [
{
@ -2612,20 +2609,20 @@
"type": "tidelift"
}
],
"time": "2021-07-21T12:19:41+00:00"
"time": "2022-01-02T09:41:36+00:00"
},
{
"name": "symfony/console",
"version": "v4.4.36",
"version": "v4.4.37",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "621379b62bb19af213b569b60013200b11dd576f"
"reference": "0259f01dbf9d77badddbbf4c2abb681f24c9cac6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/621379b62bb19af213b569b60013200b11dd576f",
"reference": "621379b62bb19af213b569b60013200b11dd576f",
"url": "https://api.github.com/repos/symfony/console/zipball/0259f01dbf9d77badddbbf4c2abb681f24c9cac6",
"reference": "0259f01dbf9d77badddbbf4c2abb681f24c9cac6",
"shasum": ""
},
"require": {
@ -2686,7 +2683,7 @@
"description": "Eases the creation of beautiful and testable command line interfaces",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/console/tree/v4.4.36"
"source": "https://github.com/symfony/console/tree/v4.4.37"
},
"funding": [
{
@ -2702,20 +2699,20 @@
"type": "tidelift"
}
],
"time": "2021-12-15T10:33:10+00:00"
"time": "2022-01-26T16:15:26+00:00"
},
{
"name": "symfony/css-selector",
"version": "v4.4.27",
"version": "v4.4.37",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
"reference": "5194f18bd80d106f11efa8f7cd0fbdcc3af96ce6"
"reference": "0628e6c6d7c92f1a7bae543959bdc17347be2436"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/5194f18bd80d106f11efa8f7cd0fbdcc3af96ce6",
"reference": "5194f18bd80d106f11efa8f7cd0fbdcc3af96ce6",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/0628e6c6d7c92f1a7bae543959bdc17347be2436",
"reference": "0628e6c6d7c92f1a7bae543959bdc17347be2436",
"shasum": ""
},
"require": {
@ -2752,7 +2749,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/css-selector/tree/v4.4.27"
"source": "https://github.com/symfony/css-selector/tree/v4.4.37"
},
"funding": [
{
@ -2768,7 +2765,7 @@
"type": "tidelift"
}
],
"time": "2021-07-21T12:19:41+00:00"
"time": "2022-01-02T09:41:36+00:00"
},
{
"name": "symfony/deprecation-contracts",
@ -2839,16 +2836,16 @@
},
{
"name": "symfony/dom-crawler",
"version": "v4.4.36",
"version": "v4.4.37",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
"reference": "42de12bee3b5e594977209bcdf58ec4fef8dde39"
"reference": "60d36408a3a48500bcc6e30d9f831e51d04d7fa4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/42de12bee3b5e594977209bcdf58ec4fef8dde39",
"reference": "42de12bee3b5e594977209bcdf58ec4fef8dde39",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/60d36408a3a48500bcc6e30d9f831e51d04d7fa4",
"reference": "60d36408a3a48500bcc6e30d9f831e51d04d7fa4",
"shasum": ""
},
"require": {
@ -2893,7 +2890,7 @@
"description": "Eases DOM navigation for HTML and XML documents",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/dom-crawler/tree/v4.4.36"
"source": "https://github.com/symfony/dom-crawler/tree/v4.4.37"
},
"funding": [
{
@ -2909,20 +2906,20 @@
"type": "tidelift"
}
],
"time": "2021-12-28T14:48:02+00:00"
"time": "2022-01-02T09:41:36+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v4.4.34",
"version": "v4.4.37",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "1a024b45369c9d55d76b6b8a241bd20c9ea1cbd8"
"reference": "3ccfcfb96ecce1217d7b0875a0736976bc6e63dc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1a024b45369c9d55d76b6b8a241bd20c9ea1cbd8",
"reference": "1a024b45369c9d55d76b6b8a241bd20c9ea1cbd8",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3ccfcfb96ecce1217d7b0875a0736976bc6e63dc",
"reference": "3ccfcfb96ecce1217d7b0875a0736976bc6e63dc",
"shasum": ""
},
"require": {
@ -2977,7 +2974,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/event-dispatcher/tree/v4.4.34"
"source": "https://github.com/symfony/event-dispatcher/tree/v4.4.37"
},
"funding": [
{
@ -2993,7 +2990,7 @@
"type": "tidelift"
}
],
"time": "2021-11-15T14:42:25+00:00"
"time": "2022-01-02T09:41:36+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@ -3076,16 +3073,16 @@
},
{
"name": "symfony/finder",
"version": "v4.4.36",
"version": "v4.4.37",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "1fef05633cd61b629e963e5d8200fb6b67ecf42c"
"reference": "b17d76d7ed179f017aad646e858c90a2771af15d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/1fef05633cd61b629e963e5d8200fb6b67ecf42c",
"reference": "1fef05633cd61b629e963e5d8200fb6b67ecf42c",
"url": "https://api.github.com/repos/symfony/finder/zipball/b17d76d7ed179f017aad646e858c90a2771af15d",
"reference": "b17d76d7ed179f017aad646e858c90a2771af15d",
"shasum": ""
},
"require": {
@ -3118,7 +3115,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/finder/tree/v4.4.36"
"source": "https://github.com/symfony/finder/tree/v4.4.37"
},
"funding": [
{
@ -3134,25 +3131,28 @@
"type": "tidelift"
}
],
"time": "2021-12-15T10:33:10+00:00"
"time": "2022-01-02T09:41:36+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.23.0",
"version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
"reference": "30885182c981ab175d4d034db0f6f469898070ab"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
"reference": "30885182c981ab175d4d034db0f6f469898070ab",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"provide": {
"ext-ctype": "*"
},
"suggest": {
"ext-ctype": "For best performance"
},
@ -3197,7 +3197,7 @@
"portable"
],
"support": {
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0"
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0"
},
"funding": [
{
@ -3213,20 +3213,20 @@
"type": "tidelift"
}
],
"time": "2021-02-19T12:13:01+00:00"
"time": "2021-10-20T20:35:02+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
"version": "v1.23.0",
"version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
"reference": "65bd267525e82759e7d8c4e8ceea44f398838e65"
"reference": "749045c69efb97c70d25d7463abba812e91f3a44"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65",
"reference": "65bd267525e82759e7d8c4e8ceea44f398838e65",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44",
"reference": "749045c69efb97c70d25d7463abba812e91f3a44",
"shasum": ""
},
"require": {
@ -3248,12 +3248,12 @@
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Intl\\Idn\\": ""
},
"files": [
"bootstrap.php"
]
],
"psr-4": {
"Symfony\\Polyfill\\Intl\\Idn\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -3284,7 +3284,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0"
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.24.0"
},
"funding": [
{
@ -3300,11 +3300,11 @@
"type": "tidelift"
}
],
"time": "2021-05-27T09:27:20+00:00"
"time": "2021-09-14T14:02:44+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.23.0",
"version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
@ -3333,12 +3333,12 @@
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Intl\\Normalizer\\": ""
},
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Intl\\Normalizer\\": ""
},
"classmap": [
"Resources/stubs"
]
@ -3368,7 +3368,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0"
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0"
},
"funding": [
{
@ -3388,21 +3388,24 @@
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.23.1",
"version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6"
"reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6",
"reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
"reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"provide": {
"ext-mbstring": "*"
},
"suggest": {
"ext-mbstring": "For best performance"
},
@ -3448,7 +3451,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0"
},
"funding": [
{
@ -3464,20 +3467,20 @@
"type": "tidelift"
}
],
"time": "2021-05-27T12:26:48+00:00"
"time": "2021-11-30T18:21:41+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.23.1",
"version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be"
"reference": "57b712b08eddb97c762a8caa32c84e037892d2e9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be",
"reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9",
"reference": "57b712b08eddb97c762a8caa32c84e037892d2e9",
"shasum": ""
},
"require": {
@ -3494,12 +3497,12 @@
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php80\\": ""
},
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Php80\\": ""
},
"classmap": [
"Resources/stubs"
]
@ -3531,7 +3534,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1"
"source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0"
},
"funding": [
{
@ -3547,20 +3550,20 @@
"type": "tidelift"
}
],
"time": "2021-07-28T13:41:28+00:00"
"time": "2021-09-13T13:58:33+00:00"
},
{
"name": "symfony/process",
"version": "v4.4.36",
"version": "v4.4.37",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "a35d6b8f82e2272504f23a267de49b8717ca0028"
"reference": "b2d924e5a4cb284f293d5092b1dbf0d364cb8b67"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/a35d6b8f82e2272504f23a267de49b8717ca0028",
"reference": "a35d6b8f82e2272504f23a267de49b8717ca0028",
"url": "https://api.github.com/repos/symfony/process/zipball/b2d924e5a4cb284f293d5092b1dbf0d364cb8b67",
"reference": "b2d924e5a4cb284f293d5092b1dbf0d364cb8b67",
"shasum": ""
},
"require": {
@ -3593,7 +3596,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/process/tree/v4.4.36"
"source": "https://github.com/symfony/process/tree/v4.4.37"
},
"funding": [
{
@ -3609,7 +3612,7 @@
"type": "tidelift"
}
],
"time": "2021-12-19T16:27:15+00:00"
"time": "2022-01-27T17:14:04+00:00"
},
{
"name": "symfony/service-contracts",
@ -3696,16 +3699,16 @@
},
{
"name": "symfony/yaml",
"version": "v4.4.36",
"version": "v4.4.37",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "a19f7c44ba665fa9d9d415cc4493361381b93f9b"
"reference": "d7f637cc0f0cc14beb0984f2bb50da560b271311"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/a19f7c44ba665fa9d9d415cc4493361381b93f9b",
"reference": "a19f7c44ba665fa9d9d415cc4493361381b93f9b",
"url": "https://api.github.com/repos/symfony/yaml/zipball/d7f637cc0f0cc14beb0984f2bb50da560b271311",
"reference": "d7f637cc0f0cc14beb0984f2bb50da560b271311",
"shasum": ""
},
"require": {
@ -3747,7 +3750,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/yaml/tree/v4.4.36"
"source": "https://github.com/symfony/yaml/tree/v4.4.37"
},
"funding": [
{
@ -3763,7 +3766,7 @@
"type": "tidelift"
}
],
"time": "2021-11-25T16:40:00+00:00"
"time": "2022-01-24T20:11:01+00:00"
},
{
"name": "theseer/tokenizer",
@ -3889,5 +3892,5 @@
"platform-overrides": {
"php": "7.3.6"
},
"plugin-api-version": "2.1.0"
"plugin-api-version": "2.2.0"
}

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "هذا إصدار بيتا! استخدم هذا في الإنتاج على مسؤوليتك الخاصة..."
ADMIN_REPORT_ISSUE: "وجدت مشكلة؟ الرجاء الإبلاغ عن GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Powered by Grav</a> - The Modern Flat File CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Powered by Grav</a> - The Modern Flat File CMS"
LOGIN_BTN: "تسجل الدخول"
LOGIN_BTN_FORGOT: "نسيت"
LOGIN_BTN_RESET: "إعادة تعيين كلمة المرور"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Това е Бета версия! Използвате на ваша отговорност..."
ADMIN_REPORT_ISSUE: "Открили сте проблем? Моля, съобщете за него в GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Задвижван от Grav</a> - Модерният Флат Файл CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Задвижван от Grav</a> - Модерният Флат Файл CMS"
LOGIN_BTN: "Вход"
LOGIN_BTN_FORGOT: "Забравена парола"
LOGIN_BTN_RESET: "Промяна на паролата"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Un ermaeziadenn beta an hini eo! Arverit en endro produadur gant evezh..."
ADMIN_REPORT_ISSUE: "Kavet hoc'h eus ur gudenn? Danevellit anezhi war Github."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Lusket gant Grav</a> - Ar CMS Restr plad modern"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Lusket gant Grav</a> - Ar CMS Restr plad modern"
LOGIN_BTN: "Anv arveriad"
LOGIN_BTN_FORGOT: "Ankouaet"
LOGIN_BTN_RESET: "Adderaouekaat ar ger-tremen"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Aquesta és una versió beta! Utilitza-la en producció sota el teu propi risc..."
ADMIN_REPORT_ISSUE: "Has trobat algun problema? Sisplau, reporta'l a GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Funcionant amb Grav</a> - El CMS de fitxers plans modern"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Funcionant amb Grav</a> - El CMS de fitxers plans modern"
LOGIN_BTN: "Inicia sessió"
LOGIN_BTN_FORGOT: "Ho he oblidat"
LOGIN_BTN_RESET: "Restablir contrasenya"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Prosím povolte JavaScript ve vašem prohlížeči."
ADMIN_BETA_MSG: "Jedná se o beta verzi! V ostrém provozu používejte pouze na vlastní nebezpečí..."
ADMIN_REPORT_ISSUE: "Objevili jste problém? Nahlaste ho, prosím, na GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Beží na Grav CMS</a> - Moderní správce obsahu pomocí souborů prostých textů"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Beží na Grav CMS</a> - Moderní správce obsahu pomocí souborů prostých textů"
LOGIN_BTN: "Přihlásit"
LOGIN_BTN_FORGOT: "Obnovit heslo"
LOGIN_BTN_RESET: "Obnovit heslo"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Mae hwn yn fersiwn beta! Defnyddio hwn yn cynhyrchu ar risg eich hun..."
ADMIN_REPORT_ISSUE: "Canfod problem? Rhowch wybod ar GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\"> wedi'u pweru gan Grav</a>-ffeil fflat Modern CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\"> wedi'u pweru gan Grav</a>-ffeil fflat Modern CMS"
LOGIN_BTN: "Mewngofnodi"
LOGIN_BTN_FORGOT: "Anghofio"
LOGIN_BTN_RESET: "Ailosod cyfrinair"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Aktivér JavaScript i din browser."
ADMIN_BETA_MSG: "Dette er en beta-udgivelse! Brug i produktionsmiljøer er på egen risiko..."
ADMIN_REPORT_ISSUE: "Har du fundet et problem? Så bedes du rapportere det på GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Drevet af Grav</a> - det moderne fladfil-CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Drevet af Grav</a> - det moderne fladfil-CMS"
LOGIN_BTN: "Login"
LOGIN_BTN_FORGOT: "Glemt"
LOGIN_BTN_RESET: "Nulstil adgangskode"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Bitte aktivieren Sie JavaScript in Ihrem Browser."
ADMIN_BETA_MSG: "Dies ist eine Beta-Version! Benutzung auf eigene Gefahr..."
ADMIN_REPORT_ISSUE: "Fehler gefunden? Bitte melden Sie ihn auf GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\"> Umgesetzt mit Grav</a> - dem modernen Flat-File CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\"> Umgesetzt mit Grav</a> - dem modernen Flat-File CMS"
LOGIN_BTN: "Anmelden"
LOGIN_BTN_FORGOT: "Passwort vergessen"
LOGIN_BTN_RESET: "Passwort zurücksetzen"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Αυτή είναι δοκιμαστική έκδοση (beta)! Χρησιμοποιήστε την στην παραγωγή με δική σας ευθύνη..."
ADMIN_REPORT_ISSUE: "Βρήκατε κάποιο πρόβλημα; Παρακαλείστε να το αναφέρετε στο GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\"> με την ισχύ του Grav</a> - Το μοντέρνο CMS χωρίς τη χρήση Βάσης Δεδομένων"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\"> με την ισχύ του Grav</a> - Το μοντέρνο CMS χωρίς τη χρήση Βάσης Δεδομένων"
LOGIN_BTN: "Σύνδεση"
LOGIN_BTN_FORGOT: "Το ξέχασα"
LOGIN_BTN_RESET: "Επαναφορά συνθηματικού"

View File

@ -2,7 +2,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Please enable JavaScript in your browser."
ADMIN_BETA_MSG: "This is a Beta release! Use this in production at your own risk..."
ADMIN_REPORT_ISSUE: "Found an issue? Please report it on GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Powered by Grav</a> - The Modern Flat File CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Powered by Grav</a> - The Modern Flat File CMS"
LOGIN_BTN: "Login"
LOGIN_BTN_FORGOT: "Forgot"
LOGIN_BTN_RESET: "Reset Password"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Tio ĉi estas beta-versio! Uzi ĝin en produkta medio estas je via propra risko..."
ADMIN_REPORT_ISSUE: "Ĉu vi trovis problemon? Bonvolu raporti ĝin ĉe GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Povigita de Grav</a> - La moderna platdosiera CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Povigita de Grav</a> - La moderna platdosiera CMS"
LOGIN_BTN: "Ensaluti"
LOGIN_BTN_FORGOT: "Forgesita"
LOGIN_BTN_RESET: "Restarigi pasvorton"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Por favor, habilita JavaScript en tu navegador."
ADMIN_BETA_MSG: "¡Ésta es una versión Beta! Utilízala en producción bajo tu propio riesgo..."
ADMIN_REPORT_ISSUE: "¿Encontraste algún problema de funcionamiento? Por favor, repórtalo en GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Generado con Grav</a> - El CMS moderno de archivos planos"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Generado con Grav</a> - El CMS moderno de archivos planos"
LOGIN_BTN: "Acceder"
LOGIN_BTN_FORGOT: "La olvidé"
LOGIN_BTN_RESET: "Restablecer contraseña"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Tegemist on beeta-versiooniga! Kasutamine töötaval veebilehel oma vastutusel..."
ADMIN_REPORT_ISSUE: "Leidsid mõne vea? Palun anna sellest teada GitHub-i vahendusel."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\"> Veebileht kasutab Grav'i</a> - kaasaegset failipõhist CMS-i"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\"> Veebileht kasutab Grav'i</a> - kaasaegset failipõhist CMS-i"
LOGIN_BTN: "Logi sisse"
LOGIN_BTN_FORGOT: "Unusta"
LOGIN_BTN_RESET: "Lähtesta salasõna"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Beta bertsio bat da hau! Produkzioan erabili ezazu zure ardurapean..."
ADMIN_REPORT_ISSUE: "Arazoren bat topatu duzu? Mesedez, horren berri eman GitHub-en."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Grav-ekin eginda</a> - Fitxategi lauzko CMS modernoa"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Grav-ekin eginda</a> - Fitxategi lauzko CMS modernoa"
LOGIN_BTN: "Sartu"
LOGIN_BTN_FORGOT: "Ahaztu"
LOGIN_BTN_RESET: "Berrezarri pasahitza"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "لطفاً جاوا اسکریپت را در مرورگرتان فعال کنید."
ADMIN_BETA_MSG: "این یک نسخه تکمیل نشده است! استفاده از آن در محصولتان شمارا با خطر مواجه میکند..."
ADMIN_REPORT_ISSUE: "یک مشکل پیدا شد؟ لطفاً آن را در گیت هاب گزارش کنید."
EMAIL_FOOTER: "قدرت گرفته از <a href=\"http://getgrav.org\">گراو</a> - سامانه مدیریت محتوی مدرن و بی نیاز به پایگاه داده"
EMAIL_FOOTER: "قدرت گرفته از <a href=\"https://getgrav.org\">گراو</a> - سامانه مدیریت محتوی مدرن و بی نیاز به پایگاه داده"
LOGIN_BTN: "ورود"
LOGIN_BTN_FORGOT: "فراموش کرده اید"
LOGIN_BTN_RESET: "تنظیم مجدد رمز عبور"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Ota JavaScript käyttöön selaimessasi."
ADMIN_BETA_MSG: "Tämä on beta-versio! Käyttö tuotannossa omalla vastuulla..."
ADMIN_REPORT_ISSUE: "Löysitkö virheen tai puutteen? Ilmoita siitä Github-palveluun."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Tehty Gravilla</a> - Moderni Flat File CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Tehty Gravilla</a> - Moderni Flat File CMS"
LOGIN_BTN: "Kirjaudu sisään"
LOGIN_BTN_FORGOT: "Unohditko"
LOGIN_BTN_RESET: "Nollaa salasana"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Veuillez activer JavaScript pour votre navigateur."
ADMIN_BETA_MSG: "Ceci est une version bêta ! Utilisez-là en production à vos risques et périls..."
ADMIN_REPORT_ISSUE: "Vous avez rencontré une anomalie ? Veuillez la signaler sur GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Propulsé par Grav</a> - Le CMS Moderne sans base de données"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Propulsé par Grav</a> - Le CMS Moderne sans base de données"
LOGIN_BTN: "Connexion"
LOGIN_BTN_FORGOT: "Mot de passe oublié"
LOGIN_BTN_RESET: "Réinitialiser le mot de passe"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Porfavor habilite JavaScript no seu navegador."
ADMIN_BETA_MSG: "Esta é unha versión beta! Utilícea en produción asumindo o risco..."
ADMIN_REPORT_ISSUE: "Atopou unha incidencia? Informe dela en GitHub"
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Xerado con Grav</a> - O CMS moderno sobre ficheiro plano"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Xerado con Grav</a> - O CMS moderno sobre ficheiro plano"
LOGIN_BTN: "Iniciar sesión"
LOGIN_BTN_FORGOT: "Esquecido"
LOGIN_BTN_RESET: "Restabelecer o contrasinal"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "זוהי מהדורת ביתא! השימוש על אחריותכם בלבד..."
ADMIN_REPORT_ISSUE: "GitHub נמצאה בעיה? נא לדווח עליה דרך"
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">אתר זה מופעל על ידי גראב</a> -מערכת ניהול בקובץ שטוח מודרני"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">אתר זה מופעל על ידי גראב</a> -מערכת ניהול בקובץ שטוח מודרני"
LOGIN_BTN: "התחברות"
LOGIN_BTN_FORGOT: "שכחת"
LOGIN_BTN_RESET: "איפוס סיסמה"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Ovo je Beta izdanje! Koristite u produkciji na vlastiti rizik..."
ADMIN_REPORT_ISSUE: "Pronašli ste grešku? Molimo Vas da prijavite na GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Pokreće Grav</a> - Moderni Flat File CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Pokreće Grav</a> - Moderni Flat File CMS"
LOGIN_BTN: "Prijava"
LOGIN_BTN_FORGOT: "Zaboravih"
LOGIN_BTN_RESET: "Resetiraj Lozinku"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Kérjük, engedélyezd a JavaScriptet a böngésződben."
ADMIN_BETA_MSG: "Ez egy béta kiadás! Éles környezetben csak saját felelősségre használd..."
ADMIN_REPORT_ISSUE: "Találtál egy hibát? Kérlek jelezd a GitHub-on."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Powered by Grav</a> - Egy Modern, File-alapú CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Powered by Grav</a> - Egy Modern, File-alapú CMS"
LOGIN_BTN: "Bejelentkezés"
LOGIN_BTN_FORGOT: "Elfelejtettem"
LOGIN_BTN_RESET: "Új jelszó"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Silahkan aktifkan JavaScript di browser Anda."
ADMIN_BETA_MSG: "Ini merupakan rilisan Beta! Gunakan ini di produksi dengan resiko anda sendiri..."
ADMIN_REPORT_ISSUE: "Menemukan masalah? Harap laporkan di Github."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Ditenagai oleh Grav</a> - The Modern Flat File CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Ditenagai oleh Grav</a> - The Modern Flat File CMS"
LOGIN_BTN: "Login"
LOGIN_BTN_FORGOT: "Lupa"
LOGIN_BTN_RESET: "Reset Password"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Per cortesia, abilita JavaScript nel browser."
ADMIN_BETA_MSG: "Questa è una versione beta! Usare in produzione a proprio rischio e pericolo…"
ADMIN_REPORT_ISSUE: "Trovato un problema? Per favore, apri un ticket su GitHub"
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Powered by Grav</a> - Il CMS Flat File e Moderno"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Powered by Grav</a> - Il CMS Flat File e Moderno"
LOGIN_BTN: "Accedi"
LOGIN_BTN_FORGOT: "Dimenticata"
LOGIN_BTN_RESET: "Ripristina la password"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "お使いのブラウザーの JavaScript を有効にしてください。"
ADMIN_BETA_MSG: "これはベータリリースです。稼働中サイトでは、自己責任においてご利用ください。"
ADMIN_REPORT_ISSUE: "問題を見つけた場合は、GitHub にてご報告をお願いします。"
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Powered by Grav</a> - The Modern Flat File CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Powered by Grav</a> - The Modern Flat File CMS"
LOGIN_BTN: "ログイン"
LOGIN_BTN_FORGOT: "パスワードを紛失"
LOGIN_BTN_RESET: "パスワードをリセット"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "이것은 베타입니다! 개인적으로 사용할시 위험할수있습니다..."
ADMIN_REPORT_ISSUE: "문제가 있습니까? GitHub에 신고해주세요."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\"> Grav에 의해 구동</a>-현대 플랫 파일 CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\"> Grav에 의해 구동</a>-현대 플랫 파일 CMS"
LOGIN_BTN: "로그인"
LOGIN_BTN_FORGOT: "잃어버림"
LOGIN_BTN_RESET: "비밀번호 초기화"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Tai Grav administravimo įskiepio beta versija! Naudokite atsargiai..."
ADMIN_REPORT_ISSUE: "Radote klaidą? Prašome pranešti apie ją GitHub platformoje."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Naudojama Grav</a> - Moderni TVS, nenaudojanti duomenų bazės"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Naudojama Grav</a> - Moderni TVS, nenaudojanti duomenų bazės"
LOGIN_BTN: "Prisijungti"
LOGIN_BTN_FORGOT: "Pamiršau"
LOGIN_BTN_RESET: "Atstatyti slaptažodį"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Хөтөч дээрээ JavaScript-ийг идэвхжүүлнэ үү."
ADMIN_BETA_MSG: "Энэ нь туршилтийн хувилбар шүү! Тиймээс ашиглалт нь таны өөрийн эрсдэлийн асуудал..."
ADMIN_REPORT_ISSUE: "Алдаа олсон уу? Та ийшээ GitHub -д орж мэдэгдэнэ үү."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Grav -ын тусламжаар</a> - Орчин үеийн текст файл CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Grav -ын тусламжаар</a> - Орчин үеийн текст файл CMS"
LOGIN_BTN: "Нэвтрэх"
LOGIN_BTN_FORGOT: "Мартсан"
LOGIN_BTN_RESET: "Нууц үгийг өөрчлөх"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Dette er en betaversjon! Bruk denne i produksjon på egen risiko..."
ADMIN_REPORT_ISSUE: "Oppdaget et problem? Vennligst rapport det på GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Drevet av Grav</a> - Det moderne flat file CMSet"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Drevet av Grav</a> - Det moderne flat file CMSet"
LOGIN_BTN: "Logg inn"
LOGIN_BTN_FORGOT: "Glemt"
LOGIN_BTN_RESET: "Nullstill passord"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Proszę, włącz JavaScript w przeglądarce."
ADMIN_BETA_MSG: "To jest wersja Beta! Używasz tego w produkcji na własne ryzyko..."
ADMIN_REPORT_ISSUE: "Znalazłeś błąd? Zgłoś to na GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Powered by Grav</a> - The Modern Flat File CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Powered by Grav</a> - The Modern Flat File CMS"
LOGIN_BTN: "Zaloguj"
LOGIN_BTN_FORGOT: "Zapomniałem"
LOGIN_BTN_RESET: "Zresetuj hasło"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Por favor, ative o JavaScript no seu navegador."
ADMIN_BETA_MSG: "Esta é uma versão Beta! Usa-a em produção à tua responsabilidade..."
ADMIN_REPORT_ISSUE: "Encontrou um problema? Por favor reporte-o no GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\"> Gerado por Grav</a> - O moderno CMS de ficheiros simples"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\"> Gerado por Grav</a> - O moderno CMS de ficheiros simples"
LOGIN_BTN: "Entrar"
LOGIN_BTN_FORGOT: "Esqueci-me"
LOGIN_BTN_RESET: "Repôr Palavra-passe"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Vă rugăm să activați JavaScript în browser-ul dvs."
ADMIN_BETA_MSG: "Aceasta este o versiune Beta! Folosiți-o pe propiul risc..."
ADMIN_REPORT_ISSUE: "Ați găsit o problemă? Raportați-o pe Github."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Construit cu Grav</a> - CMS modern"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Construit cu Grav</a> - CMS modern"
LOGIN_BTN: "Logare"
LOGIN_BTN_FORGOT: "Ai uitat?"
LOGIN_BTN_RESET: "Resetarea parolei"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Toto je Beta verzia! Používajte v ostrej prevádzke na vlastné riziko..."
ADMIN_REPORT_ISSUE: "Vyskytla sa chyba? Prosím, nahláste to na GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Poháňaný Grav-om</a> - moderný flat-file redakčný systém"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Poháňaný Grav-om</a> - moderný flat-file redakčný systém"
LOGIN_BTN: "Prihlásiť sa"
LOGIN_BTN_FORGOT: "Zabudli ste meno/heslo"
LOGIN_BTN_RESET: "Obnoviť heslo"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Ово је Бета издање! Користите га у раду на сопствену одговорност..."
ADMIN_REPORT_ISSUE: "Пронашли сте грешку? Пријавите је на GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Покреће се са Grav-ом</a> - Модерним Flat File CMS-ом"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Покреће се са Grav-ом</a> - Модерним Flat File CMS-ом"
LOGIN_BTN: "Пријава"
LOGIN_BTN_FORGOT: "Заборавили сте"
LOGIN_BTN_RESET: "Ресетуј лозинку"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Detta är en betaversion! Använd i produktion på egen risk..."
ADMIN_REPORT_ISSUE: "Hittat ett fel? Vänligen rapportera det på GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Powered by Grav</a> - The Modern Flat File CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Powered by Grav</a> - The Modern Flat File CMS"
LOGIN_BTN: "Logga in"
LOGIN_BTN_FORGOT: "Glömt"
LOGIN_BTN_RESET: "Återställ Lösenord"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "นี่เป็นรุ่นทดลอง หากคุณใช้บนเว็บจริงคุณต้องยอมรับในความเสี่ยงนั้นเอง"
ADMIN_REPORT_ISSUE: "พบปัญหา กรุณารายงานบน GitHub"
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">ขับเคลื่อนด้วย Grav</a> - The Modern Flat File CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">ขับเคลื่อนด้วย Grav</a> - The Modern Flat File CMS"
LOGIN_BTN: "เข้าสู่ระบบ"
LOGIN_BTN_FORGOT: "ลืมรหัสผ่าน"
LOGIN_BTN_RESET: "กำหนดรหัสผ่านใหม่"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Lütfen tarayıcınızda Javascript aktive edin."
ADMIN_BETA_MSG: "Bu bir beta sürümüdür! Sunucunuzda kullanmak sizin sorumluluğunuzdadır..."
ADMIN_REPORT_ISSUE: "Hata mı var? Lütfen GitHub aracılığıyla bildirin."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Grav ile güçlendirilmiştir</a> - Modern Düz Dosya CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Grav ile güçlendirilmiştir</a> - Modern Düz Dosya CMS"
LOGIN_BTN: "Giriş"
LOGIN_BTN_FORGOT: "Şifremi Unuttum"
LOGIN_BTN_RESET: "Şifreni Sıfırla"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Будь ласка, увімкніть JavaScript у Вашому браузері."
ADMIN_BETA_MSG: "Це бета-реліз! Використовуйте його на продуктовому сервері на свій страх і ризик..."
ADMIN_REPORT_ISSUE: "Виявила проблему? Будь ласка, повідомте про це на GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Працює на Grav</a> - сучасна файлова CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Працює на Grav</a> - сучасна файлова CMS"
LOGIN_BTN: "Увійти"
LOGIN_BTN_FORGOT: "Забув"
LOGIN_BTN_RESET: "Скинути пароль"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Đây là phiên bản thử nghiệm! Bạn phải tự chịu rủi ro khi sử dụng trong production..."
ADMIN_REPORT_ISSUE: "Tìm thấy một lỗi? Xin vui lòng báo cáo trên GitHub."
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">Cung cấp bởi Grav</a> - The Modern Flat File CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Cung cấp bởi Grav</a> - The Modern Flat File CMS"
LOGIN_BTN: "Đăng nhập"
LOGIN_BTN_FORGOT: "Quên"
LOGIN_BTN_RESET: "Đặt lại mật khẩu"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "请在您的浏览器中启用 JavaScript。"
ADMIN_BETA_MSG: "这是一个 Beta 版本!若在生产环境中使用,请自行承担责任。"
ADMIN_REPORT_ISSUE: "遇到问题?请提交到 GitHub。"
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">由 Grav 驱动</a> - 先进的纯文件 CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">由 Grav 驱动</a> - 先进的纯文件 CMS"
LOGIN_BTN: "登录"
LOGIN_BTN_FORGOT: "忘记密码"
LOGIN_BTN_RESET: "重置密码"

View File

@ -2,7 +2,7 @@
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "這是 Beta 版!如果要用在營運中請自行承擔風險…"
ADMIN_REPORT_ISSUE: "發現有問題?請回報到 GitHub 上。"
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">由 Grav 提供技術驅動</a> - 現代純文字檔案管理系統"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">由 Grav 提供技術驅動</a> - 現代純文字檔案管理系統"
LOGIN_BTN: "登入"
LOGIN_BTN_FORGOT: "忘記密碼"
LOGIN_BTN_RESET: "重設密碼"

View File

@ -3,7 +3,7 @@ PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "请在您的浏览器中启用 JavaScript。"
ADMIN_BETA_MSG: "这是一个 Beta 版本!若在生产环境中使用,请自行承担责任。"
ADMIN_REPORT_ISSUE: "遇到问题?请提交到 GitHub。"
EMAIL_FOOTER: "<a href=\"http://getgrav.org\">由 Grav 驱动</a> - 先进的纯文件 CMS"
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">由 Grav 驱动</a> - 先进的纯文件 CMS"
LOGIN_BTN: "登录"
LOGIN_BTN_FORGOT: "忘记密码"
LOGIN_BTN_RESET: "重置密码"

View File

@ -0,0 +1 @@
node_modules/

View File

@ -3,259 +3,309 @@ import Sortable from 'sortablejs';
import '../../utils/jquery-utils';
export default class CollectionsField {
constructor() {
this.lists = $();
constructor() {
this.lists = $();
$('[data-type="collection"]').each((index, list) => this.addList(list));
$('body').on('mutation._grav', this._onAddedNodes.bind(this));
const body = $('body');
$('[data-type="collection"]').each((index, list) => this.addList(list));
body.on('mutation._grav', this._onAddedNodes.bind(this));
body.on('click', (event) => {
const target = $(event.target);
if (!(target.is('[data-action="confirm"], [data-action="delete"]') || target.closest('[data-action="confirm"], [data-action="delete"]').length)) {
CollectionsField.closeConfirmations();
}
});
}
addList(list) {
list = $(list);
this.lists = this.lists.add(list);
list.on('click', '> .collection-actions [data-action="add"]', (event) => this.addItem(event));
list.on('click', '> ul > li > .item-actions [data-action="confirm"]', (event) => this.confirmRemove(event));
list.on('click', '> ul > li > .item-actions [data-action="delete"]', (event) => this.removeItem(event));
list.on('click', '> ul > li > .item-actions [data-action="collapse"]', (event) => this.collapseItem(event));
list.on('click', '> ul > li > .item-actions [data-action="expand"]', (event) => this.expandItem(event));
list.on('click', '> .collection-actions [data-action-sort="date"]', (event) => this.sortItems(event));
list.on('click', '> .collection-actions [data-action="collapse_all"]', (event) => this.collapseItems(event));
list.on('click', '> .collection-actions [data-action="expand_all"]', (event) => this.expandItems(event));
list.on('input change', '[data-key-observe]', (event) => this.observeKey(event));
list.find('[data-collection-holder]').each((index, container) => {
container = $(container);
if (container.data('collection-sort') || container[0].hasAttribute('data-collection-nosort')) {
return;
}
container.data('collection-sort', new Sortable(container.get(0), {
forceFallback: false,
handle: '.collection-sort',
animation: 150,
onUpdate: () => this.reindex(container)
}));
});
this._updateActionsStateBasedOnMinMax(list);
}
addItem(event) {
let button = $(event.currentTarget);
let position = button.data('action-add') || 'bottom';
let list = $(button.closest('[data-type="collection"]'));
let template = $(list.find('> [data-collection-template="new"]').data('collection-template-html'));
this._updateActionsStateBasedOnMinMax(list);
let items = list.closest('[data-type="collection"]').find('> ul > [data-collection-item]');
let maxItems = list.data('max');
if (typeof maxItems !== 'undefined' && items.length >= maxItems) {
return;
}
addList(list) {
list = $(list);
this.lists = this.lists.add(list);
list.find('> [data-collection-holder]')[position === 'top'
? 'prepend'
: 'append'](template);
this.reindex(list);
list.on('click', '> .collection-actions [data-action="add"]', (event) => this.addItem(event));
list.on('click', '> ul > li > .item-actions [data-action="delete"]', (event) => this.removeItem(event));
list.on('click', '> ul > li > .item-actions [data-action="collapse"]', (event) => this.collapseItem(event));
list.on('click', '> ul > li > .item-actions [data-action="expand"]', (event) => this.expandItem(event));
list.on('click', '> .collection-actions [data-action-sort="date"]', (event) => this.sortItems(event));
list.on('click', '> .collection-actions [data-action="collapse_all"]', (event) => this.collapseItems(event));
list.on('click', '> .collection-actions [data-action="expand_all"]', (event) => this.expandItems(event));
list.on('input change', '[data-key-observe]', (event) => this.observeKey(event));
items = list.closest('[data-type="collection"]').find('> ul > [data-collection-item]');
let topAction = list.closest('[data-type="collection"]').find('[data-action-add="top"]');
let sortAction = list.closest('[data-type="collection"]').find('[data-action="sort"]');
list.find('[data-collection-holder]').each((index, container) => {
container = $(container);
if (container.data('collection-sort') || container[0].hasAttribute('data-collection-nosort')) { return; }
container.data('collection-sort', new Sortable(container.get(0), {
forceFallback: false,
handle: '.collection-sort',
animation: 150,
onUpdate: () => this.reindex(container)
}));
});
this._updateActionsStateBasedOnMinMax(list);
if (items.length) {
if (topAction.length) {
topAction.parent().removeClass('hidden');
}
if (sortAction.length && items.length > 1) {
sortAction.removeClass('hidden');
}
}
addItem(event) {
let button = $(event.currentTarget);
let position = button.data('action-add') || 'bottom';
let list = $(button.closest('[data-type="collection"]'));
let template = $(list.find('> [data-collection-template="new"]').data('collection-template-html'));
// refresh toggleables in a list
$('[data-grav-field="toggleable"] input[type="checkbox"]').trigger('change');
}
this._updateActionsStateBasedOnMinMax(list);
let items = list.closest('[data-type="collection"]').find('> ul > [data-collection-item]');
let maxItems = list.data('max');
if (typeof maxItems !== 'undefined' && items.length >= maxItems) {
static closeConfirmations() {
$('.list-confirm-deletion[data-action="delete"]').addClass('hidden');
}
confirmRemove(event) {
const button = $(event.currentTarget);
const list = $(button.closest('.item-actions'));
const action = list.find('.list-confirm-deletion[data-action="delete"]');
const isHidden = action.hasClass('hidden');
CollectionsField.closeConfirmations();
action[isHidden ? 'removeClass' : 'addClass']('hidden');
}
removeItem(event) {
let button = $(event.currentTarget);
let item = button.closest('[data-collection-item]');
let list = $(button.closest('[data-type="collection"]'));
let items = list.closest('[data-type="collection"]').find('> ul > [data-collection-item]');
let minItems = list.data('min');
if (typeof minItems !== 'undefined' && items.length <= minItems) {
return;
}
item.remove();
this.reindex(list);
items = list.closest('[data-type="collection"]').find('> ul > [data-collection-item]');
let topAction = list.closest('[data-type="collection"]').find('[data-action-add="top"]');
let sortAction = list.closest('[data-type="collection"]').find('[data-action="sort"]');
if (!items.length) {
if (topAction.length) {
topAction.parent().addClass('hidden');
}
}
if (sortAction.length && items.length <= 1) {
sortAction.addClass('hidden');
}
this._updateActionsStateBasedOnMinMax(list);
}
collapseItems(event) {
let button = $(event.currentTarget);
let items = $(button.closest('[data-type="collection"]')).find('> ul > [data-collection-item] > .item-actions [data-action="collapse"]');
items.click();
}
collapseItem(event) {
let button = $(event.currentTarget);
let item = button.closest('[data-collection-item]');
button.attr('data-action', 'expand').removeClass('fa-chevron-circle-down').addClass('fa-chevron-circle-right');
item.addClass('collection-collapsed');
}
expandItems(event) {
let button = $(event.currentTarget);
let items = $(button.closest('[data-type="collection"]')).find('> ul > [data-collection-item] > .item-actions [data-action="expand"]');
items.click();
}
expandItem(event) {
let button = $(event.currentTarget);
let item = button.closest('[data-collection-item]');
button.attr('data-action', 'collapse').removeClass('fa-chevron-circle-right').addClass('fa-chevron-circle-down');
item.removeClass('collection-collapsed');
}
sortItems(event) {
let button = $(event.currentTarget);
let sortby = button.data('action-sort');
let sortby_dir = button.data('action-sort-dir') || 'asc';
let list = $(button.closest('[data-type="collection"]'));
let items = list.closest('[data-type="collection"]').find('> ul > [data-collection-item]');
items.sort((a, b) => {
let A = $(a).find('[name$="[' + sortby + ']"]');
let B = $(b).find('[name$="[' + sortby + ']"]');
let sort;
if (sortby_dir === 'asc') {
sort = (A.val() < B.val())
? -1
: (A.val() > B.val())
? 1
: 0;
} else {
sort = (A.val() > B.val())
? -1
: (A.val() < B.val())
? 1
: 0;
}
return sort;
}).each((_, container) => {
$(container).parent().append(container);
});
this.reindex(list);
}
observeKey(event) {
let input = $(event.target);
let value = input.val();
let item = input.closest('[data-collection-key]');
item.data('collection-key-backup', item.data('collection-key')).data('collection-key', value);
this.reindex(null, item);
}
reindex(list, items) {
items = items || $(list).closest('[data-type="collection"]').find('> ul > [data-collection-item]');
items.each((index, item) => {
item = $(item);
let observed = item.find('[data-key-observe]');
let observedValue = observed.val();
let hasCustomKey = observed.length;
let currentKey = item.data('collection-key-backup');
item.attr('data-collection-key', hasCustomKey
? observedValue
: index);
['name', 'data-grav-field-name', 'for', 'id', 'data-grav-file-settings', 'data-file-post-add', 'data-file-post-remove', 'data-grav-array-name'].forEach((prop) => {
item.find('[' + prop + '], [_' + prop + ']').each(function() {
let element = $(this);
let indexes = [];
let array_index = null;
let regexps = [
new RegExp('\\[(\\d+|\\*|' + currentKey + ')\\]', 'g'),
new RegExp('\\.(\\d+|\\*|' + currentKey + ')\\.', 'g')
];
// special case to preserve array field index keys
if (prop === 'name' && element.data('gravArrayType')) {
const match_index = element.attr(prop).match(/\[[0-9]{1,}\]$/);
const pattern = element[0].closest('[data-grav-array-name]').dataset.gravArrayName;
if (match_index && pattern) {
array_index = match_index[0];
element.attr(prop, `${pattern}${match_index[0]}`);
return;
}
}
if (hasCustomKey && !observedValue) {
element.attr(`_${prop}`, element.attr(prop));
element.attr(prop, null);
return;
}
}
list.find('> [data-collection-holder]')[position === 'top' ? 'prepend' : 'append'](template);
this.reindex(list);
if (element.attr(`_${prop}`)) {
element.attr(prop, element.attr(`_${prop}`));
element.attr(`_${prop}`, null);
}
items = list.closest('[data-type="collection"]').find('> ul > [data-collection-item]');
let topAction = list.closest('[data-type="collection"]').find('[data-action-add="top"]');
let sortAction = list.closest('[data-type="collection"]').find('[data-action="sort"]');
element.parents('[data-collection-key]').map((idx, parent) => indexes.push($(parent).attr('data-collection-key')));
indexes.reverse();
if (items.length) {
if (topAction.length) { topAction.parent().removeClass('hidden'); }
if (sortAction.length && items.length > 1) { sortAction.removeClass('hidden'); }
}
// refresh toggleables in a list
$('[data-grav-field="toggleable"] input[type="checkbox"]').trigger('change');
}
removeItem(event) {
let button = $(event.currentTarget);
let item = button.closest('[data-collection-item]');
let list = $(button.closest('[data-type="collection"]'));
let items = list.closest('[data-type="collection"]').find('> ul > [data-collection-item]');
let minItems = list.data('min');
if (typeof minItems !== 'undefined' && items.length <= minItems) {
return;
}
item.remove();
this.reindex(list);
items = list.closest('[data-type="collection"]').find('> ul > [data-collection-item]');
let topAction = list.closest('[data-type="collection"]').find('[data-action-add="top"]');
let sortAction = list.closest('[data-type="collection"]').find('[data-action="sort"]');
if (!items.length) {
if (topAction.length) { topAction.parent().addClass('hidden'); }
}
if (sortAction.length && items.length <= 1) { sortAction.addClass('hidden'); }
this._updateActionsStateBasedOnMinMax(list);
}
collapseItems(event) {
let button = $(event.currentTarget);
let items = $(button.closest('[data-type="collection"]')).find('> ul > [data-collection-item] > .item-actions [data-action="collapse"]');
items.click();
}
collapseItem(event) {
let button = $(event.currentTarget);
let item = button.closest('[data-collection-item]');
button.attr('data-action', 'expand').removeClass('fa-chevron-circle-down').addClass('fa-chevron-circle-right');
item.addClass('collection-collapsed');
}
expandItems(event) {
let button = $(event.currentTarget);
let items = $(button.closest('[data-type="collection"]')).find('> ul > [data-collection-item] > .item-actions [data-action="expand"]');
items.click();
}
expandItem(event) {
let button = $(event.currentTarget);
let item = button.closest('[data-collection-item]');
button.attr('data-action', 'collapse').removeClass('fa-chevron-circle-right').addClass('fa-chevron-circle-down');
item.removeClass('collection-collapsed');
}
sortItems(event) {
let button = $(event.currentTarget);
let sortby = button.data('action-sort');
let sortby_dir = button.data('action-sort-dir') || 'asc';
let list = $(button.closest('[data-type="collection"]'));
let items = list.closest('[data-type="collection"]').find('> ul > [data-collection-item]');
items.sort((a, b) => {
let A = $(a).find('[name$="[' + sortby + ']"]');
let B = $(b).find('[name$="[' + sortby + ']"]');
let sort;
if (sortby_dir === 'asc') {
sort = (A.val() < B.val()) ? -1 : (A.val() > B.val()) ? 1 : 0;
} else {
sort = (A.val() > B.val()) ? -1 : (A.val() < B.val()) ? 1 : 0;
let matchedKey = currentKey;
let replaced = element.attr(prop).replace(regexps[0], (/* str, p1, offset */) => {
let extras = '';
if (array_index) {
extras = array_index;
console.log(indexes, extras);
}
return sort;
}).each((_, container) => {
$(container).parent().append(container);
matchedKey = indexes.shift() || matchedKey;
return `[${matchedKey}]${extras}`;
});
replaced = replaced.replace(regexps[1], (/* str, p1, offset */) => {
matchedKey = indexes.shift() || matchedKey;
return `.${matchedKey}.`;
});
element.attr(prop, replaced);
});
});
});
}
this.reindex(list);
_onAddedNodes(event, target/* , record, instance */) {
let collections = $(target).find('[data-type="collection"]');
if (!collections.length) {
return;
}
observeKey(event) {
let input = $(event.target);
let value = input.val();
let item = input.closest('[data-collection-key]');
collections.each((index, collection) => {
collection = $(collection);
if (!~this.lists.index(collection)) {
this.addList(collection);
}
});
}
item.data('collection-key-backup', item.data('collection-key')).data('collection-key', value);
this.reindex(null, item);
_updateActionsStateBasedOnMinMax(list) {
let items = list.closest('[data-type="collection"]').find('> ul > [data-collection-item]');
let minItems = list.data('min');
let maxItems = list.data('max');
list.find('> .collection-actions [data-action="add"]').attr('disabled', false);
list.find('> ul > li > .item-actions [data-action="delete"]').attr('disabled', false);
if (typeof minItems !== 'undefined' && items.length <= minItems) {
list.find('> ul > li > .item-actions [data-action="delete"]').attr('disabled', true);
}
reindex(list, items) {
items = items || $(list).closest('[data-type="collection"]').find('> ul > [data-collection-item]');
items.each((index, item) => {
item = $(item);
let observed = item.find('[data-key-observe]');
let observedValue = observed.val();
let hasCustomKey = observed.length;
let currentKey = item.data('collection-key-backup');
item.attr('data-collection-key', hasCustomKey ? observedValue : index);
['name', 'data-grav-field-name', 'for', 'id', 'data-grav-file-settings', 'data-file-post-add', 'data-file-post-remove', 'data-grav-array-name'].forEach((prop) => {
item.find('[' + prop + '], [_' + prop + ']').each(function() {
let element = $(this);
let indexes = [];
let array_index = null;
let regexps = [
new RegExp('\\[(\\d+|\\*|' + currentKey + ')\\]', 'g'),
new RegExp('\\.(\\d+|\\*|' + currentKey + ')\\.', 'g')
];
// special case to preserve array field index keys
if (prop === 'name' && element.data('gravArrayType')) {
const match_index = element.attr(prop).match(/\[[0-9]{1,}\]$/);
const pattern = element[0].closest('[data-grav-array-name]').dataset.gravArrayName;
if (match_index && pattern) {
array_index = match_index[0];
element.attr(prop, `${pattern}${match_index[0]}`);
return;
}
}
if (hasCustomKey && !observedValue) {
element.attr(`_${prop}`, element.attr(prop));
element.attr(prop, null);
return;
}
if (element.attr(`_${prop}`)) {
element.attr(prop, element.attr(`_${prop}`));
element.attr(`_${prop}`, null);
}
element.parents('[data-collection-key]').map((idx, parent) => indexes.push($(parent).attr('data-collection-key')));
indexes.reverse();
let matchedKey = currentKey;
let replaced = element.attr(prop).replace(regexps[0], (/* str, p1, offset */) => {
let extras = '';
if (array_index) { extras = array_index; console.log(indexes, extras); }
matchedKey = indexes.shift() || matchedKey;
return `[${matchedKey}]${extras}`;
});
replaced = replaced.replace(regexps[1], (/* str, p1, offset */) => {
matchedKey = indexes.shift() || matchedKey;
return `.${matchedKey}.`;
});
element.attr(prop, replaced);
});
});
});
}
_onAddedNodes(event, target/* , record, instance */) {
let collections = $(target).find('[data-type="collection"]');
if (!collections.length) { return; }
collections.each((index, collection) => {
collection = $(collection);
if (!~this.lists.index(collection)) {
this.addList(collection);
}
});
}
_updateActionsStateBasedOnMinMax(list) {
let items = list.closest('[data-type="collection"]').find('> ul > [data-collection-item]');
let minItems = list.data('min');
let maxItems = list.data('max');
list.find('> .collection-actions [data-action="add"]').attr('disabled', false);
list.find('> ul > li > .item-actions [data-action="delete"]').attr('disabled', false);
if (typeof minItems !== 'undefined' && items.length <= minItems) {
list.find('> ul > li > .item-actions [data-action="delete"]').attr('disabled', true);
}
if (typeof maxItems !== 'undefined' && items.length >= maxItems) {
list.find('> .collection-actions [data-action="add"]').attr('disabled', true);
}
if (typeof maxItems !== 'undefined' && items.length >= maxItems) {
list.find('> .collection-actions [data-action="add"]').attr('disabled', true);
}
}
}
export let Instance = new CollectionsField();

View File

@ -83,6 +83,11 @@ const ACCEPT_FUNC = function(file, done, settings) {
const hasMax = (resolution.max && (resolution.max.width || resolution.max.height));
if (hasMin || (!(settings.resizeWidth || settings.resizeHeight) && hasMax)) {
reader.onload = function(event) {
if (!/image\//.test(file.type)) {
done();
return;
}
const image = new Image();
image.src = event.target.result;
image.onerror = function() {
@ -139,6 +144,7 @@ export default class FilesField {
this.dropzone = new Dropzone(container, this.options);
this.dropzone.on('complete', this.onDropzoneComplete.bind(this));
this.dropzone.on('success', this.onDropzoneSuccess.bind(this));
this.dropzone.on('addedfile', this.onDropzoneAddedFile.bind(this));
this.dropzone.on('removedfile', this.onDropzoneRemovedFile.bind(this));
this.dropzone.on('sending', this.onDropzoneSending.bind(this));
this.dropzone.on('error', this.onDropzoneError.bind(this));
@ -255,6 +261,10 @@ export default class FilesField {
return decodeURIComponent(escape(window.atob(str)));
}
onDropzoneAddedFile(file, ...extra) {
return this.dropzone.options.addedfile(file);
}
onDropzoneRemovedFile(file, ...extra) {
if (!file.accepted || file.rejected) { return; }
let url = file.removeUrl || this.urls.delete || this.options.url;

View File

@ -3,7 +3,7 @@ import '@babel/polyfill';
import $ from 'jquery';
import './utils/remodal';
import 'simplebar';
import 'simplebar/dist/simplebar.min.js';
import GPM, { Instance as gpm } from './utils/gpm';
import KeepAlive from './utils/keepalive';
import Updates, { Instance as updates, Notifications, Feed } from './updates';

View File

@ -43,7 +43,9 @@ folder.on('input', (event) => {
});
folder.on('focus blur', (event) => getFields('title', event.currentTarget).title.trigger('input'));
folder.on('focus blur', (event) => {
getFields('title').title.trigger('input');
});
$(document).on('change', '[name="data[route]"]', (event) => {
const rawroute = $(event.currentTarget).val();

View File

@ -1,4 +1,5 @@
import $ from 'jquery';
import Cookies from '../../utils/cookies.js';
import request from '../../utils/request';
import FilesField, { UriToMarkdown } from '../../forms/fields/files';
import { config, translations } from 'grav-config';
@ -90,6 +91,7 @@ export default class PageMedia extends FilesField {
this.dropzone.options.thumbnail.call(this.dropzone, mock, data.url);
});
this.updateThumbsSize();
this.container.find('.dz-preview').prop('draggable', 'true');
});
}
@ -113,16 +115,40 @@ export default class PageMedia extends FilesField {
}
// accepted
this.updateThumbsSize();
this.updateMediaCount();
$('.dz-preview').prop('draggable', 'true');
}
onDropzoneAddedFile(file, ...extra) {
super.onDropzoneAddedFile(file, extra);
this.updateThumbsSize();
}
onDropzoneRemovedFile(file, ...extra) {
super.onDropzoneRemovedFile(file, ...extra);
this.updateMediaCount();
if (this.sortable) {
this.sortable.options.onSort();
}
}
updateThumbsSize() {
const status = JSON.parse(Cookies.get('grav-admin-pagemedia') || '{}');
if (status.width) {
const input = this.container.closest('.pagemedia-field').find('.media-resizer');
updateMediaSizes(input, status.width, false);
}
}
updateMediaCount() {
const element = this.container.closest('.pagemedia-field').find('[data-pagemedia-count]');
element.text(`(${this.dropzone.files.length})`);
}
attachDragDrop() {
this.container.delegate('[data-dz-insert]', 'click', (e) => {
let target = $(e.currentTarget).parent('.dz-preview').find('.dz-filename');
@ -204,4 +230,61 @@ export default class PageMedia extends FilesField {
}
}
export const updateMediaSizes = (input, width, store = true) => {
const status = JSON.parse(Cookies.get('grav-admin-pagemedia') || '{}');
const height = 150 * width / 200;
const media = input.closest('.pagemedia-field').find('.dz-details, [data-dz-thumbnail]');
media.css({ width, height });
if (store) {
const data = Object.assign({}, status, { width });
Cookies.set('grav-admin-pagemedia', JSON.stringify(data), { expires: Infinity });
}
};
export const updateMediaCollapseStatus = (element, store = true) => {
const status = JSON.parse(Cookies.get('grav-admin-pagemedia') || '{}');
element = $(element);
const icon = element.find('i.fa');
const container = element.closest('.pagemedia-field');
const panel = container.find('.form-data');
const slider = container.find('.media-resizer').parent();
const isCollapsed = !icon.hasClass('fa-chevron-down');
const collapsed = !isCollapsed;
icon.removeClass('fa-chevron-down fa-chevron-right').addClass(isCollapsed ? 'fa-chevron-down' : 'fa-chevron-right');
slider[isCollapsed ? 'removeClass' : 'addClass']('hidden');
panel[isCollapsed ? 'slideDown' : 'slideUp']();
if (store) {
const data = Object.assign({}, status, { collapsed });
Cookies.set('grav-admin-pagemedia', JSON.stringify(data), { expires: Infinity });
}
};
$(document).on('input', '.media-resizer', (event) => {
const target = $(event.currentTarget);
const width = target.val();
updateMediaSizes(target, width);
});
$(document).on('click', '.media-collapser', (event) => {
updateMediaCollapseStatus(event.currentTarget);
});
$(document).ready(() => {
const status = JSON.parse(Cookies.get('grav-admin-pagemedia') || '{}');
if (status.width) {
$('.media-resizer').each((index, input) => {
input = $(input);
updateMediaSizes(input, status.width, false);
});
}
});
export let Instance = new PageMedia();

View File

@ -2,12 +2,12 @@ import $ from 'jquery';
import { config, translations } from 'grav-config';
import request from '../utils/request';
import { Instance as gpm } from '../utils/gpm';
import { Promise } from 'es6-promise';
class Sorter {
getElements(elements, container) {
this.elements = elements || $('[data-gpm-plugin], [data-gpm-theme]');
this.container = container || $('.gpm-plugins > table > tbody, .gpm-themes > .themes.card-row');
this.elements = elements || document.querySelectorAll('[data-gpm-plugin], [data-gpm-theme]');
this.container = container || document.querySelector('.gpm-plugins > table > tbody, .gpm-themes > .themes.card-row');
return this.elements;
}
@ -19,50 +19,78 @@ class Sorter {
}
byCommon(direction = 'asc', data = '') {
let elements = this.getElements().sort((a, b) => {
let A = $(a).data(data).toString().toLowerCase();
let B = $(b).data(data).toString().toLowerCase();
const elements = this.getElements();
this.removeGumroad();
Array.from(elements).sort((a, b) => {
let A = a.dataset[data].toString().toLowerCase();
let B = b.dataset[data].toString().toLowerCase();
return Sorter.sort(A, B, direction);
}).forEach((element) => {
this.container.appendChild(element);
});
return elements.appendTo(this.container);
this.addGumroad();
return this.container;
}
byName(direction = 'asc', data = 'gpm-name') {
byName(direction = 'asc', data = 'gpmName') {
return this.byCommon(direction, data);
}
byAuthor(direction = 'asc', data = 'gpm-author') {
byAuthor(direction = 'asc', data = 'gpmAuthor') {
return this.byCommon(direction, data);
}
byOfficial(direction = 'asc', data = 'gpm-official') {
return this.byCommon(direction, data);
byOfficial(direction = 'asc', data = 'gpmOfficial') {
return this.byCommon(direction, data);
}
byReleaseDate(direction = 'asc', data = 'gpm-release-date') {
let elements = this.getElements().sort((a, b) => {
let A = new Date($(a).data(data)).getTime();
let B = new Date($(b).data(data)).getTime();
byPremium(direction = 'asc', data = 'gpmPremium') {
return this.byCommon(direction, data);
}
byReleaseDate(direction = 'asc', data = 'gpmReleaseDate') {
const elements = this.getElements();
this.removeGumroad();
Array.from(elements).sort((a, b) => {
let A = new Date(a.dataset[data]).getTime();
let B = new Date(b.dataset[data]).getTime();
return Sorter.sort(A, B, direction === 'asc' ? 'desc' : 'asc');
}).forEach((element) => {
this.container.appendChild(element);
});
elements.appendTo(this.container);
this.addGumroad();
return this.container;
}
byUpdatable(direction = 'asc', data = 'gpm-updatable') {
byUpdatable(direction = 'asc', data = 'gpmUpdatable') {
return this.byCommon(direction, data);
}
byEnabled(direction = 'asc', data = 'gpm-enabled') {
byEnabled(direction = 'asc', data = 'gpmEnabled') {
return this.byCommon(direction, data);
}
byTesting(direction = 'asc', data = 'gpm-testing') {
byTesting(direction = 'asc', data = 'gpmTesting') {
return this.byCommon(direction, data);
}
addGumroad() {
if (window.GumroadOverlay) {
window.GumroadOverlay.startNodeAdditionObserver();
}
}
removeGumroad() {
if (window.GumroadOverlay) {
window.GumroadOverlay.nodeAdditionObserver.disconnect();
}
}
}
class Packages {
@ -279,8 +307,8 @@ class Packages {
installPackages(type, slugs, callbackSuccess) {
let url = Packages.getInstallPackageUrl(type);
Promise.all(slugs.map((slug) => {
return new Promise((resolve, reject) => {
global.Promise.all(slugs.map((slug) => {
return new global.Promise((resolve, reject) => {
request(url, {
method: 'post',
body: {

View File

@ -1 +0,0 @@
import 'simplebar';

View File

@ -1,5 +1,4 @@
import $ from 'jquery';
import Map from 'es6-map';
import Cookies from '../utils/cookies';
const MOBILE_BREAKPOINT = 48 - 0.062;
@ -9,7 +8,7 @@ const TARGETS = '[data-sidebar-mobile-toggle], #overlay';
const MOBILE_QUERY = `(max-width: ${MOBILE_BREAKPOINT}em)`;
const DESKTOP_QUERY = `(min-width: ${DESKTOP_BREAKPOINT}em)`;
let map = new Map();
let map = new global.Map();
export default class Sidebar {
constructor() {

View File

@ -1,3 +0,0 @@
@import url("https://fonts.googleapis.com/css?family=Josefin+Slab:400|Roboto:300,400,500|Inconsolata:400,700&subset=latin-ext");body,h5,h6,.badge,.note,.grav-mdeditor-preview,input,select,textarea,button,.selectize-input{font-family:"Roboto","Helvetica","Tahoma","Geneva","Arial",sans-serif}h1,h2,h3,h4,.form-tabs>label,.label{font-family:"Josefin Slab","Helvetica","Tahoma","Geneva","Arial",sans-serif}code,kbd,pre,samp,body .CodeMirror{font-family:"Inconsolata","Monaco","Consolas","Lucida Console",monospace !important}
/*# sourceMappingURL=../css-compiled/fonts.css.map */

View File

@ -1 +0,0 @@
{"version":3,"file":"fonts.css","sources":["fonts.scss","configuration/fonts/_support.scss"],"sourcesContent":["$fonts-header: 'Josefin Slab' !default;\n$fonts-default: 'Roboto' !default;\n$fonts-mono: 'Inconsolata' !default;\n\n$font-definitions: (\n 'Josefin Slab': '400',\n Roboto: '300,400,500',\n Inconsolata: '400,700'\n);\n\n@import \"configuration/fonts/support\";\n","@function str-replace($string, $search, $replace: '') {\n $index: str-index($string, $search);\n\n @if $index {\n @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n }\n\n @return $string;\n}\n\n@function admin-font-faces($fonts) {\n $url: \"https://fonts.googleapis.com/css?family=\";\n $nb: 0;\n\n @each $fontname, $weights in $fonts {\n\n @if $fontname == $fonts-default or\n $fontname == $fonts-header or\n $fontname == $fonts-mono {\n\n $nb: $nb + 1;\n $nb-word: 0;\n\n $fontname: str-replace(\"#{$fontname}\", \" \", \"+\");\n\n $url: $url + $fontname;\n\n @if $weights != null {\n $url: $url + \":\" + $weights;\n }\n\n @if $nb < 3 {\n $url: $url + \"|\";\n }\n }\n }\n\n @return $url + \"&subset=latin-ext\";\n}\n\n@mixin body-fonts($font) {\n body, h5, h6,\n .badge, .note, .grav-mdeditor-preview,\n input, select, textarea, button, .selectize-input {\n font-family: \"#{$font}\", \"Helvetica\", \"Tahoma\", \"Geneva\", \"Arial\", sans-serif;\n }\n}\n\n@mixin header-fonts($font) {\n h1, h2, h3, h4,\n .form-tabs > label, .label {\n font-family: \"#{$font}\", \"Helvetica\", \"Tahoma\", \"Geneva\", \"Arial\", sans-serif;\n }\n}\n\n@mixin mono-fonts($font) {\n code, kbd, pre, samp,\n body .CodeMirror {\n font-family: \"#{$font}\", \"Monaco\", \"Consolas\", \"Lucida Console\", monospace !important;\n }\n}\n$font-url: admin-font-faces($font-definitions);\n\n@import url(\"#{$font-url}\");\n\n@include body-fonts($fonts-default);\n\n@include header-fonts($fonts-header);\n\n@include mono-fonts($fonts-mono);\n\n\n\n\n\n"],"names":[],"mappings":"AC+DA,OAAO,CAAC,uHAAI,CAtBR,AAAA,IAAI,CAAE,EAAE,CAAE,EAAE,CACZ,MAAM,CAAE,KAAK,CAAE,sBAAsB,CACrC,KAAK,CAAE,MAAM,CAAE,QAAQ,CAAE,MAAM,CAAE,gBAAgB,AAAC,CAC9C,WAAW,CAAE,QAAU,CAAE,WAAW,CAAE,QAAQ,CAAE,QAAQ,CAAE,OAAO,CAAE,UAAU,CAChF,AAID,AAAA,EAAE,CAAE,EAAE,CAAE,EAAE,CAAE,EAAE,CACd,UAAU,CAAG,KAAK,CAAE,MAAM,AAAC,CACvB,WAAW,CAAE,cAAU,CAAE,WAAW,CAAE,QAAQ,CAAE,QAAQ,CAAE,OAAO,CAAE,UAAU,CAChF,AAID,AAAA,IAAI,CAAE,GAAG,CAAE,GAAG,CAAE,IAAI,CACpB,IAAI,CAAC,WAAW,AAAC,CACb,WAAW,CAAE,aAAU,CAAE,QAAQ,CAAE,UAAU,CAAE,gBAAgB,CAAE,SAAS,CAAC,UAAU,CACxF"}

View File

@ -1 +0,0 @@
{"version":3,"file":"paper.css","sources":["paper.scss"],"sourcesContent":["// CodeMirror Theme\n.cm-s-paper {\n $paper-fg: #666;\n $tag: darken($paper-fg, 10%);\n\n &.CodeMirror {\n color: $paper-fg;\n line-height: 1.4;\n font-size: 16px;\n }\n\n .cm-link {color: #0082ba;}\n .cm-comment {color: lighten($paper-fg,10%);}\n .cm-header {color: darken($paper-fg,5%);}\n .cm-strong {color: darken($paper-fg,10%);}\n .cm-em {color: darken($paper-fg, 10%);}\n .cm-string {color: #0082BA;}\n .cm-tag {color: $tag}\n .cm-bracket {color: lighten($tag, 10%);}\n .cm-hr {color: lighten($paper-fg,40%);font-weight: bold;}\n\n .cm-keyword {color: #0082ba;}\n .cm-atom {color: #9055af;}\n .cm-meta {color: $paper-fg;}\n\n .cm-number {color: #7f8c8d;}\n .cm-def {color: #00f;}\n .cm-variable {color: black;}\n //.cm-variable-2 {color: #555;}\n //.cm-variable-3 {color: #085;}\n .cm-property {color: black;}\n .cm-operator {color: black;}\n\n\n .cm-string-2 {color: #f50;}\n .cm-meta {color: #555;}\n .cm-error {color: #f00;}\n .cm-qualifier {color: #555;}\n .cm-builtin {color: #555;}\n\n\n .cm-attribute {color: #7f8c8d;}\n\n .cm-quote {color: #888;}\n\n\n .cm-header-1 {font-size: 140%;}\n .cm-header-2 {font-size: 120%;}\n .cm-header-3 {font-size: 110%;}\n\n .cm-negative {color: #d44;}\n .cm-positive {color: #292;}\n .cm-header, .cm-strong {font-weight: bold;}\n .cm-em {font-style: italic;}\n .cm-link {text-decoration: underline;}\n\n .cm-invalidchar {color: #f00;}\n}\n"],"names":[],"mappings":"AACA,AAII,WAJO,AAIN,WAAW,AAAC,CACT,KAAK,CAJE,IAAI,CAKX,WAAW,CAAE,GAAG,CAChB,SAAS,CAAE,IAAI,CAClB,AARL,AAUI,WAVO,CAUP,QAAQ,AAAC,CAAC,KAAK,CAAE,OAAO,CAAG,AAV/B,AAWI,WAXO,CAWP,WAAW,AAAC,CAAC,KAAK,CAAE,IAAsB,CAAG,AAXjD,AAYI,WAZO,CAYP,UAAU,AAAC,CAAC,KAAK,CAAE,OAAoB,CAAG,AAZ9C,AAaI,WAbO,CAaP,UAAU,AAAC,CAAC,KAAK,CAAE,OAAqB,CAAG,AAb/C,AAcI,WAdO,CAcP,MAAM,AAAC,CAAC,KAAK,CAAE,OAAsB,CAAG,AAd5C,AAeI,WAfO,CAeP,UAAU,AAAC,CAAC,KAAK,CAAE,OAAO,CAAG,AAfjC,AAgBI,WAhBO,CAgBP,OAAO,AAAC,CAAC,KAAK,CAdR,OAAsB,CAcN,AAhB1B,AAiBI,WAjBO,CAiBP,WAAW,AAAC,CAAC,KAAK,CAAE,IAAkB,CAAG,AAjB7C,AAkBI,WAlBO,CAkBP,MAAM,AAAC,CAAC,KAAK,CAAE,IAAsB,CAAC,WAAW,CAAE,IAAI,CAAG,AAlB9D,AAoBI,WApBO,CAoBP,WAAW,AAAC,CAAC,KAAK,CAAE,OAAO,CAAG,AApBlC,AAqBI,WArBO,CAqBP,QAAQ,AAAC,CAAC,KAAK,CAAE,OAAO,CAAG,AArB/B,AAsBI,WAtBO,CAsBP,QAAQ,AAAC,CAAC,KAAK,CArBJ,IAAI,CAqBc,AAtBjC,AAwBI,WAxBO,CAwBP,UAAU,AAAC,CAAC,KAAK,CAAE,OAAO,CAAG,AAxBjC,AAyBI,WAzBO,CAyBP,OAAO,AAAC,CAAC,KAAK,CAAE,IAAI,CAAG,AAzB3B,AA0BI,WA1BO,CA0BP,YAAY,AAAC,CAAC,KAAK,CAAE,KAAK,CAAG,AA1BjC,AA6BI,WA7BO,CA6BP,YAAY,AAAC,CAAC,KAAK,CAAE,KAAK,CAAG,AA7BjC,AA8BI,WA9BO,CA8BP,YAAY,AAAC,CAAC,KAAK,CAAE,KAAK,CAAG,AA9BjC,AAiCI,WAjCO,CAiCP,YAAY,AAAC,CAAC,KAAK,CAAE,IAAI,CAAG,AAjChC,AAkCI,WAlCO,CAkCP,QAAQ,AAAC,CAAC,KAAK,CAAE,IAAI,CAAG,AAlC5B,AAmCI,WAnCO,CAmCP,SAAS,AAAC,CAAC,KAAK,CAAE,IAAI,CAAG,AAnC7B,AAoCI,WApCO,CAoCP,aAAa,AAAC,CAAC,KAAK,CAAE,IAAI,CAAG,AApCjC,AAqCI,WArCO,CAqCP,WAAW,AAAC,CAAC,KAAK,CAAE,IAAI,CAAG,AArC/B,AAwCI,WAxCO,CAwCP,aAAa,AAAC,CAAC,KAAK,CAAE,OAAO,CAAG,AAxCpC,AA0CI,WA1CO,CA0CP,SAAS,AAAC,CAAC,KAAK,CAAE,IAAI,CAAG,AA1C7B,AA6CI,WA7CO,CA6CP,YAAY,AAAC,CAAC,SAAS,CAAE,IAAI,CAAG,AA7CpC,AA8CI,WA9CO,CA8CP,YAAY,AAAC,CAAC,SAAS,CAAE,IAAI,CAAG,AA9CpC,AA+CI,WA/CO,CA+CP,YAAY,AAAC,CAAC,SAAS,CAAE,IAAI,CAAG,AA/CpC,AAiDI,WAjDO,CAiDP,YAAY,AAAC,CAAC,KAAK,CAAE,IAAI,CAAG,AAjDhC,AAkDI,WAlDO,CAkDP,YAAY,AAAC,CAAC,KAAK,CAAE,IAAI,CAAG,AAlDhC,AAmDI,WAnDO,CAmDP,UAAU,CAnDd,WAAW,CAmDK,UAAU,AAAC,CAAC,WAAW,CAAE,IAAI,CAAG,AAnDhD,AAoDI,WApDO,CAoDP,MAAM,AAAC,CAAC,UAAU,CAAE,MAAM,CAAG,AApDjC,AAqDI,WArDO,CAqDP,QAAQ,AAAC,CAAC,eAAe,CAAE,SAAS,CAAG,AArD3C,AAuDI,WAvDO,CAuDP,eAAe,AAAC,CAAC,KAAK,CAAE,IAAI,CAAG"}

View File

@ -942,7 +942,7 @@ form .form-display-wrapper table {
.gpm > table > tbody > tr {
border-bottom: 1px solid #f7f7f7; }
.gpm > table > tbody > tr:hover {
background: white; }
background: #f2f2f2; }
.gpm .gpm-name {
color: #99a2ad; }

File diff suppressed because one or more lines are too long

View File

@ -1404,6 +1404,19 @@ textarea.frontmatter {
.form-list-wrapper [data-collection-nosort] .collection-sort {
display: none; }
.form-list-wrapper .list-confirm-deletion {
cursor: pointer;
display: flex;
position: absolute !important;
z-index: 10010;
padding: .5rem;
top: 13px;
right: 20px; }
.form-list-wrapper .list-confirm-deletion > i, .form-list-wrapper .list-confirm-deletion span {
text-align: center;
display: inline-flex;
align-items: center; }
.form-label.block {
position: relative; }
.form-label.block:hover {
@ -4101,6 +4114,19 @@ html.remodal-is-locked {
padding-left: 20px; }
/* The MIT License */
.pagemedia-field .form-label {
display: flex;
justify-content: space-between;
margin-right: 1.5rem;
align-items: center; }
.pagemedia-field .form-label label {
cursor: pointer;
flex: 1; }
.pagemedia-field input[type="range"]::-webkit-slider-runnable-track {
background: inherit !important;
border: none !important; }
.dropzone {
position: relative;
border-radius: 4px;
@ -4149,7 +4175,7 @@ html.remodal-is-locked {
content: '\f12a'; }
.dropzone .dz-preview .dz-progress {
position: absolute;
top: 150px;
bottom: auto;
left: 0px;
right: 0px;
height: 4px;

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
/*
Name: 3024 day
Author: Jan T. Sott (http://github.com/idleberg)
Author: Jan T. Sott (https://github.com/idleberg)
CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)

View File

@ -1,7 +1,7 @@
/*
Name: 3024 night
Author: Jan T. Sott (http://github.com/idleberg)
Author: Jan T. Sott (https://github.com/idleberg)
CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)

View File

@ -1,7 +1,7 @@
/*
Name: dracula
Author: Michael Kaminsky (http://github.com/mkaminsky11)
Author: Michael Kaminsky (https://github.com/mkaminsky11)
Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)

View File

@ -1,6 +1,6 @@
/*
Name: material
Author: Mattia Astorino (http://github.com/equinusocio)
Author: Mattia Astorino (https://github.com/equinusocio)
Website: https://material-theme.site/
*/
@ -132,4 +132,4 @@
.cm-s-material-darker .CodeMirror-matchingbracket {
text-decoration: underline;
color: white !important;
}
}

View File

@ -1,6 +1,6 @@
/*
Name: material
Author: Mattia Astorino (http://github.com/equinusocio)
Author: Mattia Astorino (https://github.com/equinusocio)
Website: https://material-theme.site/
*/
@ -132,4 +132,4 @@
.cm-s-material-ocean .CodeMirror-matchingbracket {
text-decoration: underline;
color: white !important;
}
}

View File

@ -1,6 +1,6 @@
/*
Name: material
Author: Mattia Astorino (http://github.com/equinusocio)
Author: Mattia Astorino (https://github.com/equinusocio)
Website: https://material-theme.site/
*/
@ -132,4 +132,4 @@
.cm-s-material-palenight .CodeMirror-matchingbracket {
text-decoration: underline;
color: white !important;
}
}

View File

@ -1,6 +1,6 @@
/*
Name: material
Author: Mattia Astorino (http://github.com/equinusocio)
Author: Mattia Astorino (https://github.com/equinusocio)
Website: https://material-theme.site/
*/
@ -132,4 +132,4 @@
.cm-s-material .CodeMirror-matchingbracket {
text-decoration: underline;
color: white !important;
}
}

View File

@ -1,6 +1,6 @@
/*
Name: Moxer Theme
Author: Mattia Astorino (http://github.com/equinusocio)
Author: Mattia Astorino (https://github.com/equinusocio)
Website: https://github.com/moxer-theme/moxer-code
*/
@ -140,4 +140,4 @@
.cm-s-moxer .CodeMirror-matchingbracket {
text-decoration: underline;
color: white !important;
}
}

View File

@ -1,6 +1,6 @@
/*
Name: Panda Syntax
Author: Siamak Mokhtari (http://github.com/siamak/)
Author: Siamak Mokhtari (https://github.com/siamak/)
CodeMirror template by Siamak Mokhtari (https://github.com/siamak/atom-panda-syntax)
*/
.cm-s-panda-syntax {

View File

@ -1,7 +1,7 @@
/*
Name: seti
Author: Michael Kaminsky (http://github.com/mkaminsky11)
Author: Michael Kaminsky (https://github.com/mkaminsky11)
Original seti color scheme by Jesse Weed (https://github.com/jesseweed/seti-syntax)

View File

@ -1,7 +1,7 @@
/*
Name: shadowfox
Author: overdodactyl (http://github.com/overdodactyl)
Author: overdodactyl (https://github.com/overdodactyl)
Original shadowfox color scheme by Firefox

View File

@ -1,7 +1,7 @@
/*
Name: yeti
Author: Michael Kaminsky (http://github.com/mkaminsky11)
Author: Michael Kaminsky (https://github.com/mkaminsky11)
Original yeti color scheme by Jesse Weed (https://github.com/jesseweed/yeti-syntax)

View File

@ -1,7 +1,7 @@
/*
Name: yoncé
Author: Thomas MacLean (http://github.com/thomasmaclean)
Author: Thomas MacLean (https://github.com/thomasmaclean)
Original yoncé color scheme by Mina Markham (https://github.com/minamarkham)

View File

@ -1,8 +0,0 @@
/**
* Featherlight - ultra slim jQuery lightbox
* Version 0.4.9 - http://noelboss.github.io/featherlight/
*
* Copyright 2014, Noël Raoul Bossart (http://www.noelboss.com)
* MIT Licensed.
**/
@media all{.featherlight{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:2;text-align:center;white-space:nowrap;cursor:pointer;background:#333;background:rgba(0,0,0,0)}.featherlight:last-of-type{background:rgba(0,0,0,.8)}.featherlight:before{content:'';display:inline-block;height:100%;vertical-align:middle;margin-right:-.25em}.featherlight .featherlight-content{position:relative;text-align:left;vertical-align:middle;display:inline-block;overflow:auto;padding:25px 25px 0;border-bottom:25px solid transparent;min-width:30%;margin-left:5%;margin-right:5%;max-height:95%;background:#fff;cursor:auto;white-space:normal}.featherlight .featherlight-inner{display:block}.featherlight .featherlight-close-icon{position:absolute;z-index:9999;top:0;right:0;line-height:25px;width:25px;cursor:pointer;text-align:center;font:Arial,sans-serif;background:#fff;background:rgba(255,255,255,.3);color:#000}.featherlight .featherlight-image{width:100%}.featherlight-iframe .featherlight-content{border-bottom:0;padding:0}.featherlight iframe{border:0}}@media only screen and (max-width:1024px){.featherlight .featherlight-content{margin-left:10px;margin-right:10px;max-height:98%;padding:10px 10px 0;border-bottom:10px solid transparent}}

View File

@ -2,7 +2,7 @@ var Grav;
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ 75833:
/***/ 56299:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
@ -709,8 +709,8 @@ var external_jQuery_default = /*#__PURE__*/__webpack_require__.n(external_jQuery
$(window).on('hashchange.' + NAMESPACE, handleHashChangeEvent);
});
});
// EXTERNAL MODULE: ./node_modules/simplebar/dist/simplebar.esm.js + 24 modules
var simplebar_esm = __webpack_require__(17924);
// EXTERNAL MODULE: ./node_modules/simplebar/dist/simplebar.min.js
var simplebar_min = __webpack_require__(85766);
// EXTERNAL MODULE: ./node_modules/toastr/toastr.js
var toastr = __webpack_require__(8901);
var toastr_default = /*#__PURE__*/__webpack_require__.n(toastr);
@ -1980,7 +1980,7 @@ var sortable_esm = __webpack_require__(51474);
var debounce = __webpack_require__(20296);
var debounce_default = /*#__PURE__*/__webpack_require__.n(debounce);
// EXTERNAL MODULE: ./app/utils/storage.js
var storage = __webpack_require__(92511);
var storage = __webpack_require__(31619);
;// CONCATENATED MODULE: ./app/pages/tree.js
function tree_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@ -2532,7 +2532,7 @@ folder.on('input', function (event) {
input.setSelectionRange(selection.start, selection.end);
});
folder.on('focus blur', function (event) {
return getFields('title', event.currentTarget).title.trigger('input');
getFields('title').title.trigger('input');
});
external_jQuery_default()(document).on('change', '[name="data[route]"]', function (event) {
var rawroute = external_jQuery_default()(event.currentTarget).val();
@ -2648,6 +2648,161 @@ external_jQuery_default()(document).on('click', '.dz-unset', function () {
external_jQuery_default()('.disable-after-click').on('click', function () {
external_jQuery_default()(this).addClass('pointer-events-disabled');
});
;// CONCATENATED MODULE: ./app/utils/cookies.js
function cookies_typeof(obj) { "@babel/helpers - typeof"; return cookies_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, cookies_typeof(obj); }
/*
* Cookies.js - 1.2.3-grav
* https://github.com/ScottHamper/Cookies
*
* With SameSite support by Grav
*
* This is free and unencumbered software released into the public domain.
*/
var factory = function factory(window) {
var _arguments = arguments;
if (cookies_typeof(window.document) !== 'object') {
throw new Error('Cookies.js requires a `window` with a `document` object');
}
var Cookies = function Cookies(key, value, options) {
return _arguments.length === 1 ? Cookies.get(key) : Cookies.set(key, value, options);
}; // Allows for setter injection in unit tests
Cookies._document = window.document; // Used to ensure cookie keys do not collide with
// built-in `Object` properties
Cookies._cacheKeyPrefix = 'cookey.'; // Hurr hurr, :)
Cookies._maxExpireDate = new Date('Fri, 31 Dec 9999 23:59:59 UTC');
Cookies.defaults = {
path: '/',
secure: false,
sameSite: 'Lax'
};
Cookies.get = function (key) {
if (Cookies._cachedDocumentCookie !== Cookies._document.cookie) {
Cookies._renewCache();
}
var value = Cookies._cache[Cookies._cacheKeyPrefix + key];
return value === undefined ? undefined : decodeURIComponent(value);
};
Cookies.set = function (key, value, options) {
options = Cookies._getExtendedOptions(options);
options.expires = Cookies._getExpiresDate(value === undefined ? -1 : options.expires);
Cookies._document.cookie = Cookies._generateCookieString(key, value, options);
return Cookies;
};
Cookies.expire = function (key, options) {
return Cookies.set(key, undefined, options);
};
Cookies._getExtendedOptions = function (options) {
return {
path: options && options.path || Cookies.defaults.path,
domain: options && options.domain || Cookies.defaults.domain,
expires: options && options.expires || Cookies.defaults.expires,
secure: options && options.secure !== undefined ? options.secure : Cookies.defaults.secure,
sameSite: options && options.sameSite || Cookies.defaults.sameSite
};
};
Cookies._isValidDate = function (date) {
return Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date.getTime());
};
Cookies._getExpiresDate = function (expires, now) {
now = now || new Date();
if (typeof expires === 'number') {
expires = expires === Infinity ? Cookies._maxExpireDate : new Date(now.getTime() + expires * 1000);
} else if (typeof expires === 'string') {
expires = new Date(expires);
}
if (expires && !Cookies._isValidDate(expires)) {
throw new Error('`expires` parameter cannot be converted to a valid Date instance');
}
return expires;
};
Cookies._generateCookieString = function (key, value, options) {
key = key.replace(/[^#$&+\^`|]/g, encodeURIComponent);
key = key.replace(/\(/g, '%28').replace(/\)/g, '%29');
value = (value + '').replace(/[^!#$&-+\--:<-\[\]-~]/g, encodeURIComponent);
options = options || {};
var cookieString = key + '=' + value;
cookieString += options.path ? ';path=' + options.path : '';
cookieString += options.domain ? ';domain=' + options.domain : '';
cookieString += options.expires ? ';expires=' + options.expires.toUTCString() : '';
cookieString += options.secure ? ';secure' : '';
cookieString += options.sameSite ? ';SameSite=' + options.sameSite : '';
return cookieString;
};
Cookies._getCacheFromString = function (documentCookie) {
var cookieCache = {};
var cookiesArray = documentCookie ? documentCookie.split('; ') : [];
for (var i = 0; i < cookiesArray.length; i++) {
var cookieKvp = Cookies._getKeyValuePairFromCookieString(cookiesArray[i]);
if (cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] === undefined) {
cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] = cookieKvp.value;
}
}
return cookieCache;
};
Cookies._getKeyValuePairFromCookieString = function (cookieString) {
// "=" is a valid character in a cookie value according to RFC6265, so cannot `split('=')`
var separatorIndex = cookieString.indexOf('='); // IE omits the "=" when the cookie value is an empty string
separatorIndex = separatorIndex < 0 ? cookieString.length : separatorIndex;
var key = cookieString.substr(0, separatorIndex);
var decodedKey;
try {
decodedKey = decodeURIComponent(key);
} catch (e) {
if (console && typeof console.error === 'function') {
console.error('Could not decode cookie with key "' + key + '"', e);
}
}
return {
key: decodedKey,
value: cookieString.substr(separatorIndex + 1) // Defer decoding value until accessed
};
};
Cookies._renewCache = function () {
Cookies._cache = Cookies._getCacheFromString(Cookies._document.cookie);
Cookies._cachedDocumentCookie = Cookies._document.cookie;
};
Cookies._areEnabled = function () {
var testKey = 'cookies.js';
var areEnabled = Cookies.set(testKey, 1).get(testKey) === '1';
Cookies.expire(testKey);
return areEnabled;
};
Cookies.enabled = Cookies._areEnabled();
return Cookies;
};
__webpack_require__.g.Cookies = __webpack_require__.g && cookies_typeof(__webpack_require__.g.document) === 'object' ? factory(__webpack_require__.g) : factory;
/* harmony default export */ const cookies = (__webpack_require__.g.Cookies);
// EXTERNAL MODULE: ./node_modules/dropzone/dist/dropzone.js
var dist_dropzone = __webpack_require__(32025);
var dropzone_default = /*#__PURE__*/__webpack_require__.n(dist_dropzone);
@ -2724,6 +2879,11 @@ var ACCEPT_FUNC = function ACCEPT_FUNC(file, done, settings) {
if (hasMin || !(settings.resizeWidth || settings.resizeHeight) && hasMax) {
reader.onload = function (event) {
if (!/image\//.test(file.type)) {
done();
return;
}
var image = new Image();
image.src = event.target.result;
@ -2798,6 +2958,7 @@ var FilesField = /*#__PURE__*/function () {
this.dropzone = new (dropzone_default())(container, this.options);
this.dropzone.on('complete', this.onDropzoneComplete.bind(this));
this.dropzone.on('success', this.onDropzoneSuccess.bind(this));
this.dropzone.on('addedfile', this.onDropzoneAddedFile.bind(this));
this.dropzone.on('removedfile', this.onDropzoneRemovedFile.bind(this));
this.dropzone.on('sending', this.onDropzoneSending.bind(this));
this.dropzone.on('error', this.onDropzoneError.bind(this));
@ -2922,6 +3083,11 @@ var FilesField = /*#__PURE__*/function () {
str = str.replace(/\s/g, '');
return decodeURIComponent(escape(window.atob(str)));
}
}, {
key: "onDropzoneAddedFile",
value: function onDropzoneAddedFile(file) {
return this.dropzone.options.addedfile(file);
}
}, {
key: "onDropzoneRemovedFile",
value: function onDropzoneRemovedFile(file) {
@ -4060,6 +4226,7 @@ function media_getPrototypeOf(o) { media_getPrototypeOf = Object.setPrototypeOf
var previewTemplate = "\n <div class=\"dz-preview dz-file-preview\">\n <div class=\"dz-details\">\n <div class=\"dz-filename\"><span data-dz-name></span></div>\n <div class=\"dz-size\" data-dz-size></div>\n <img data-dz-thumbnail />\n </div>\n <div class=\"dz-progress\"><span class=\"dz-upload\" data-dz-uploadprogress></span></div>\n <div class=\"dz-success-mark\"><span>\u2714</span></div>\n <div class=\"dz-error-mark\"><span>\u2718</span></div>\n <div class=\"dz-error-message\"><span data-dz-errormessage></span></div>\n <a class=\"dz-remove\" title=\"".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DELETE, "\" href=\"javascript:undefined;\" data-dz-remove>").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DELETE, "</a>\n <a class=\"dz-metadata\" title=\"").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.METADATA, "\" href=\"#\" target=\"_blank\" data-dz-metadata>").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.METADATA, "</a>\n <a class=\"dz-view\" title=\"").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.VIEW, "\" href=\"#\" target=\"_blank\" data-dz-view>").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.VIEW, "</a>\n <a class=\"dz-insert\" title=\"").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.INSERT, "\" href=\"javascript:undefined;\" data-dz-insert>").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.INSERT, "</a>\n </div>").trim();
var PageMedia = /*#__PURE__*/function (_FilesField) {
@ -4171,6 +4338,8 @@ var PageMedia = /*#__PURE__*/function (_FilesField) {
_this2.dropzone.options.thumbnail.call(_this2.dropzone, mock, data.url);
});
_this2.updateThumbsSize();
_this2.container.find('.dz-preview').prop('draggable', 'true');
});
}
@ -4196,23 +4365,54 @@ var PageMedia = /*#__PURE__*/function (_FilesField) {
} // accepted
this.updateThumbsSize();
this.updateMediaCount();
external_jQuery_default()('.dz-preview').prop('draggable', 'true');
}
}, {
key: "onDropzoneAddedFile",
value: function onDropzoneAddedFile(file) {
for (var _len = arguments.length, extra = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
extra[_key - 1] = arguments[_key];
}
media_get(media_getPrototypeOf(PageMedia.prototype), "onDropzoneAddedFile", this).call(this, file, extra);
this.updateThumbsSize();
}
}, {
key: "onDropzoneRemovedFile",
value: function onDropzoneRemovedFile(file) {
var _get2;
for (var _len = arguments.length, extra = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
extra[_key - 1] = arguments[_key];
for (var _len2 = arguments.length, extra = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
extra[_key2 - 1] = arguments[_key2];
}
(_get2 = media_get(media_getPrototypeOf(PageMedia.prototype), "onDropzoneRemovedFile", this)).call.apply(_get2, [this, file].concat(extra));
this.updateMediaCount();
if (this.sortable) {
this.sortable.options.onSort();
}
}
}, {
key: "updateThumbsSize",
value: function updateThumbsSize() {
var status = JSON.parse(cookies.get('grav-admin-pagemedia') || '{}');
if (status.width) {
var input = this.container.closest('.pagemedia-field').find('.media-resizer');
updateMediaSizes(input, status.width, false);
}
}
}, {
key: "updateMediaCount",
value: function updateMediaCount() {
var element = this.container.closest('.pagemedia-field').find('[data-pagemedia-count]');
element.text("(".concat(this.dropzone.files.length, ")"));
}
}, {
key: "attachDragDrop",
value: function attachDragDrop() {
@ -4308,6 +4508,66 @@ var PageMedia = /*#__PURE__*/function (_FilesField) {
}(FilesField);
var updateMediaSizes = function updateMediaSizes(input, width) {
var store = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
var status = JSON.parse(cookies.get('grav-admin-pagemedia') || '{}');
var height = 150 * width / 200;
var media = input.closest('.pagemedia-field').find('.dz-details, [data-dz-thumbnail]');
media.css({
width: width,
height: height
});
if (store) {
var data = Object.assign({}, status, {
width: width
});
cookies.set('grav-admin-pagemedia', JSON.stringify(data), {
expires: Infinity
});
}
};
var updateMediaCollapseStatus = function updateMediaCollapseStatus(element) {
var store = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var status = JSON.parse(cookies.get('grav-admin-pagemedia') || '{}');
element = external_jQuery_default()(element);
var icon = element.find('i.fa');
var container = element.closest('.pagemedia-field');
var panel = container.find('.form-data');
var slider = container.find('.media-resizer').parent();
var isCollapsed = !icon.hasClass('fa-chevron-down');
var collapsed = !isCollapsed;
icon.removeClass('fa-chevron-down fa-chevron-right').addClass(isCollapsed ? 'fa-chevron-down' : 'fa-chevron-right');
slider[isCollapsed ? 'removeClass' : 'addClass']('hidden');
panel[isCollapsed ? 'slideDown' : 'slideUp']();
if (store) {
var data = Object.assign({}, status, {
collapsed: collapsed
});
cookies.set('grav-admin-pagemedia', JSON.stringify(data), {
expires: Infinity
});
}
};
external_jQuery_default()(document).on('input', '.media-resizer', function (event) {
var target = external_jQuery_default()(event.currentTarget);
var width = target.val();
updateMediaSizes(target, width);
});
external_jQuery_default()(document).on('click', '.media-collapser', function (event) {
updateMediaCollapseStatus(event.currentTarget);
});
external_jQuery_default()(document).ready(function () {
var status = JSON.parse(cookies.get('grav-admin-pagemedia') || '{}');
if (status.width) {
external_jQuery_default()('.media-resizer').each(function (index, input) {
input = external_jQuery_default()(input);
updateMediaSizes(input, status.width, false);
});
}
});
var media_Instance = new PageMedia();
;// CONCATENATED MODULE: ./app/pages/page/multilang.js
@ -4429,9 +4689,8 @@ if (orderingElement.length) {
Instance: filter_Instance
}
});
// EXTERNAL MODULE: ./node_modules/immutable/dist/immutable.js
var immutable = __webpack_require__(43393);
var immutable_default = /*#__PURE__*/__webpack_require__.n(immutable);
// EXTERNAL MODULE: ./node_modules/immutable/dist/immutable.es.js
var immutable_es = __webpack_require__(35369);
// EXTERNAL MODULE: ./node_modules/immutablediff/src/diff.js
var src_diff = __webpack_require__(64847);
var diff_default = /*#__PURE__*/__webpack_require__.n(src_diff);
@ -4592,7 +4851,7 @@ var FormState = /*#__PURE__*/function () {
values[name] = value;
}
});
return immutable_default().OrderedMap(values);
return immutable_es/* default.OrderedMap */.ZP.OrderedMap(values);
}
}, {
key: "diff",
@ -4608,7 +4867,7 @@ var FormState = /*#__PURE__*/function () {
return null;
}
return immutable_default().is(FormLoadState, this.collect());
return immutable_es/* default.is */.ZP.is(FormLoadState, this.collect());
}
}]);
@ -5391,10 +5650,18 @@ var CollectionsField = /*#__PURE__*/function () {
collections_classCallCheck(this, CollectionsField);
this.lists = external_jQuery_default()();
var body = external_jQuery_default()('body');
external_jQuery_default()('[data-type="collection"]').each(function (index, list) {
return _this.addList(list);
});
external_jQuery_default()('body').on('mutation._grav', this._onAddedNodes.bind(this));
body.on('mutation._grav', this._onAddedNodes.bind(this));
body.on('click', function (event) {
var target = external_jQuery_default()(event.target);
if (!(target.is('[data-action="confirm"], [data-action="delete"]') || target.closest('[data-action="confirm"], [data-action="delete"]').length)) {
CollectionsField.closeConfirmations();
}
});
}
collections_createClass(CollectionsField, [{
@ -5407,6 +5674,9 @@ var CollectionsField = /*#__PURE__*/function () {
list.on('click', '> .collection-actions [data-action="add"]', function (event) {
return _this2.addItem(event);
});
list.on('click', '> ul > li > .item-actions [data-action="confirm"]', function (event) {
return _this2.confirmRemove(event);
});
list.on('click', '> ul > li > .item-actions [data-action="delete"]', function (event) {
return _this2.removeItem(event);
});
@ -5483,6 +5753,16 @@ var CollectionsField = /*#__PURE__*/function () {
external_jQuery_default()('[data-grav-field="toggleable"] input[type="checkbox"]').trigger('change');
}
}, {
key: "confirmRemove",
value: function confirmRemove(event) {
var button = external_jQuery_default()(event.currentTarget);
var list = external_jQuery_default()(button.closest('.item-actions'));
var action = list.find('.list-confirm-deletion[data-action="delete"]');
var isHidden = action.hasClass('hidden');
CollectionsField.closeConfirmations();
action[isHidden ? 'removeClass' : 'addClass']('hidden');
}
}, {
key: "removeItem",
value: function removeItem(event) {
@ -5685,6 +5965,11 @@ var CollectionsField = /*#__PURE__*/function () {
list.find('> .collection-actions [data-action="add"]').attr('disabled', true);
}
}
}], [{
key: "closeConfirmations",
value: function closeConfirmations() {
external_jQuery_default()('.list-confirm-deletion[data-action="delete"]').addClass('hidden');
}
}]);
return CollectionsField;
@ -5693,7 +5978,7 @@ var CollectionsField = /*#__PURE__*/function () {
var collections_Instance = new CollectionsField();
// EXTERNAL MODULE: ./app/utils/bootstrap-datetimepicker.js
var bootstrap_datetimepicker = __webpack_require__(36531);
var bootstrap_datetimepicker = __webpack_require__(19912);
;// CONCATENATED MODULE: ./app/forms/fields/datetime.js
function datetime_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@ -9500,163 +9785,6 @@ external_jQuery_default()(document).on('change', '[data-grav-elements] select',
Instance: state_Instance
}
});
;// CONCATENATED MODULE: ./app/utils/cookies.js
function cookies_typeof(obj) { "@babel/helpers - typeof"; return cookies_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, cookies_typeof(obj); }
/*
* Cookies.js - 1.2.3-grav
* https://github.com/ScottHamper/Cookies
*
* With SameSite support by Grav
*
* This is free and unencumbered software released into the public domain.
*/
var factory = function factory(window) {
var _arguments = arguments;
if (cookies_typeof(window.document) !== 'object') {
throw new Error('Cookies.js requires a `window` with a `document` object');
}
var Cookies = function Cookies(key, value, options) {
return _arguments.length === 1 ? Cookies.get(key) : Cookies.set(key, value, options);
}; // Allows for setter injection in unit tests
Cookies._document = window.document; // Used to ensure cookie keys do not collide with
// built-in `Object` properties
Cookies._cacheKeyPrefix = 'cookey.'; // Hurr hurr, :)
Cookies._maxExpireDate = new Date('Fri, 31 Dec 9999 23:59:59 UTC');
Cookies.defaults = {
path: '/',
secure: false,
sameSite: 'Lax'
};
Cookies.get = function (key) {
if (Cookies._cachedDocumentCookie !== Cookies._document.cookie) {
Cookies._renewCache();
}
var value = Cookies._cache[Cookies._cacheKeyPrefix + key];
return value === undefined ? undefined : decodeURIComponent(value);
};
Cookies.set = function (key, value, options) {
options = Cookies._getExtendedOptions(options);
options.expires = Cookies._getExpiresDate(value === undefined ? -1 : options.expires);
Cookies._document.cookie = Cookies._generateCookieString(key, value, options);
return Cookies;
};
Cookies.expire = function (key, options) {
return Cookies.set(key, undefined, options);
};
Cookies._getExtendedOptions = function (options) {
return {
path: options && options.path || Cookies.defaults.path,
domain: options && options.domain || Cookies.defaults.domain,
expires: options && options.expires || Cookies.defaults.expires,
secure: options && options.secure !== undefined ? options.secure : Cookies.defaults.secure,
sameSite: options && options.sameSite || Cookies.defaults.sameSite
};
};
Cookies._isValidDate = function (date) {
return Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date.getTime());
};
Cookies._getExpiresDate = function (expires, now) {
now = now || new Date();
if (typeof expires === 'number') {
expires = expires === Infinity ? Cookies._maxExpireDate : new Date(now.getTime() + expires * 1000);
} else if (typeof expires === 'string') {
expires = new Date(expires);
}
if (expires && !Cookies._isValidDate(expires)) {
throw new Error('`expires` parameter cannot be converted to a valid Date instance');
}
return expires;
};
Cookies._generateCookieString = function (key, value, options) {
key = key.replace(/[^#$&+\^`|]/g, encodeURIComponent);
key = key.replace(/\(/g, '%28').replace(/\)/g, '%29');
value = (value + '').replace(/[^!#$&-+\--:<-\[\]-~]/g, encodeURIComponent);
options = options || {};
var cookieString = key + '=' + value;
cookieString += options.path ? ';path=' + options.path : '';
cookieString += options.domain ? ';domain=' + options.domain : '';
cookieString += options.expires ? ';expires=' + options.expires.toUTCString() : '';
cookieString += options.secure ? ';secure' : '';
cookieString += options.sameSite ? ';SameSite=' + options.sameSite : '';
return cookieString;
};
Cookies._getCacheFromString = function (documentCookie) {
var cookieCache = {};
var cookiesArray = documentCookie ? documentCookie.split('; ') : [];
for (var i = 0; i < cookiesArray.length; i++) {
var cookieKvp = Cookies._getKeyValuePairFromCookieString(cookiesArray[i]);
if (cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] === undefined) {
cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] = cookieKvp.value;
}
}
return cookieCache;
};
Cookies._getKeyValuePairFromCookieString = function (cookieString) {
// "=" is a valid character in a cookie value according to RFC6265, so cannot `split('=')`
var separatorIndex = cookieString.indexOf('='); // IE omits the "=" when the cookie value is an empty string
separatorIndex = separatorIndex < 0 ? cookieString.length : separatorIndex;
var key = cookieString.substr(0, separatorIndex);
var decodedKey;
try {
decodedKey = decodeURIComponent(key);
} catch (e) {
if (console && typeof console.error === 'function') {
console.error('Could not decode cookie with key "' + key + '"', e);
}
}
return {
key: decodedKey,
value: cookieString.substr(separatorIndex + 1) // Defer decoding value until accessed
};
};
Cookies._renewCache = function () {
Cookies._cache = Cookies._getCacheFromString(Cookies._document.cookie);
Cookies._cachedDocumentCookie = Cookies._document.cookie;
};
Cookies._areEnabled = function () {
var testKey = 'cookies.js';
var areEnabled = Cookies.set(testKey, 1).get(testKey) === '1';
Cookies.expire(testKey);
return areEnabled;
};
Cookies.enabled = Cookies._areEnabled();
return Cookies;
};
__webpack_require__.g.Cookies = __webpack_require__.g && cookies_typeof(__webpack_require__.g.document) === 'object' ? factory(__webpack_require__.g) : factory;
/* harmony default export */ const cookies = (__webpack_require__.g.Cookies);
// EXTERNAL MODULE: ./node_modules/es6-promise/dist/es6-promise.js
var es6_promise = __webpack_require__(82702);
;// CONCATENATED MODULE: ./app/utils/packages.js
function packages_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@ -9669,7 +9797,6 @@ function packages_createClass(Constructor, protoProps, staticProps) { if (protoP
var Sorter = /*#__PURE__*/function () {
function Sorter() {
packages_classCallCheck(this, Sorter);
@ -9678,76 +9805,111 @@ var Sorter = /*#__PURE__*/function () {
packages_createClass(Sorter, [{
key: "getElements",
value: function getElements(elements, container) {
this.elements = elements || external_jQuery_default()('[data-gpm-plugin], [data-gpm-theme]');
this.container = container || external_jQuery_default()('.gpm-plugins > table > tbody, .gpm-themes > .themes.card-row');
this.elements = elements || document.querySelectorAll('[data-gpm-plugin], [data-gpm-theme]');
this.container = container || document.querySelector('.gpm-plugins > table > tbody, .gpm-themes > .themes.card-row');
return this.elements;
}
}, {
key: "byCommon",
value: function byCommon() {
var _this = this;
var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'asc';
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
var elements = this.getElements().sort(function (a, b) {
var A = external_jQuery_default()(a).data(data).toString().toLowerCase();
var B = external_jQuery_default()(b).data(data).toString().toLowerCase();
var elements = this.getElements();
this.removeGumroad();
Array.from(elements).sort(function (a, b) {
var A = a.dataset[data].toString().toLowerCase();
var B = b.dataset[data].toString().toLowerCase();
return Sorter.sort(A, B, direction);
}).forEach(function (element) {
_this.container.appendChild(element);
});
return elements.appendTo(this.container);
this.addGumroad();
return this.container;
}
}, {
key: "byName",
value: function byName() {
var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'asc';
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gpm-name';
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gpmName';
return this.byCommon(direction, data);
}
}, {
key: "byAuthor",
value: function byAuthor() {
var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'asc';
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gpm-author';
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gpmAuthor';
return this.byCommon(direction, data);
}
}, {
key: "byOfficial",
value: function byOfficial() {
var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'asc';
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gpm-official';
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gpmOfficial';
return this.byCommon(direction, data);
}
}, {
key: "byPremium",
value: function byPremium() {
var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'asc';
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gpmPremium';
return this.byCommon(direction, data);
}
}, {
key: "byReleaseDate",
value: function byReleaseDate() {
var _this2 = this;
var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'asc';
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gpm-release-date';
var elements = this.getElements().sort(function (a, b) {
var A = new Date(external_jQuery_default()(a).data(data)).getTime();
var B = new Date(external_jQuery_default()(b).data(data)).getTime();
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gpmReleaseDate';
var elements = this.getElements();
this.removeGumroad();
Array.from(elements).sort(function (a, b) {
var A = new Date(a.dataset[data]).getTime();
var B = new Date(b.dataset[data]).getTime();
return Sorter.sort(A, B, direction === 'asc' ? 'desc' : 'asc');
}).forEach(function (element) {
_this2.container.appendChild(element);
});
elements.appendTo(this.container);
this.addGumroad();
return this.container;
}
}, {
key: "byUpdatable",
value: function byUpdatable() {
var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'asc';
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gpm-updatable';
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gpmUpdatable';
return this.byCommon(direction, data);
}
}, {
key: "byEnabled",
value: function byEnabled() {
var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'asc';
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gpm-enabled';
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gpmEnabled';
return this.byCommon(direction, data);
}
}, {
key: "byTesting",
value: function byTesting() {
var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'asc';
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gpm-testing';
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gpmTesting';
return this.byCommon(direction, data);
}
}, {
key: "addGumroad",
value: function addGumroad() {
if (window.GumroadOverlay) {
window.GumroadOverlay.startNodeAdditionObserver();
}
}
}, {
key: "removeGumroad",
value: function removeGumroad() {
if (window.GumroadOverlay) {
window.GumroadOverlay.nodeAdditionObserver.disconnect();
}
}
}], [{
key: "sort",
value: function sort(A, B) {
@ -9786,7 +9948,7 @@ var Packages = /*#__PURE__*/function () {
}, {
key: "removePackage",
value: function removePackage(type, slug) {
var _this = this;
var _this3 = this;
var url = Packages.getRemovePackageUrl(type);
utils_request(url, {
@ -9799,7 +9961,7 @@ var Packages = /*#__PURE__*/function () {
external_jQuery_default()('.remove-package-confirm').addClass('hidden');
if (response.dependencies && response.dependencies.length > 0) {
_this.addDependenciesToList(response.dependencies);
_this3.addDependenciesToList(response.dependencies);
external_jQuery_default()('.remove-package-dependencies').removeClass('hidden');
} else {
@ -9845,7 +10007,7 @@ var Packages = /*#__PURE__*/function () {
}, {
key: "removeDependency",
value: function removeDependency(type, slug, button) {
var _this2 = this;
var _this4 = this;
var url = Packages.getRemovePackageUrl(type);
utils_request(url, {
@ -9859,7 +10021,7 @@ var Packages = /*#__PURE__*/function () {
button.replaceWith(external_jQuery_default()('<span>Removed successfully</span>'));
if (response.dependencies && response.dependencies.length > 0) {
_this2.addDependenciesToList(response.dependencies, slug);
_this4.addDependenciesToList(response.dependencies, slug);
}
}
});
@ -9921,8 +10083,8 @@ var Packages = /*#__PURE__*/function () {
key: "installPackages",
value: function installPackages(type, slugs, callbackSuccess) {
var url = Packages.getInstallPackageUrl(type);
es6_promise.Promise.all(slugs.map(function (slug) {
return new es6_promise.Promise(function (resolve, reject) {
__webpack_require__.g.Promise.all(slugs.map(function (slug) {
return new __webpack_require__.g.Promise(function (resolve, reject) {
utils_request(url, {
method: 'post',
body: {
@ -9995,7 +10157,7 @@ var Packages = /*#__PURE__*/function () {
}, {
key: "handleInstallingDependenciesAndPackage",
value: function handleInstallingDependenciesAndPackage(type, event) {
var _this3 = this;
var _this5 = this;
var slugs = Packages.getSlugsFromEvent(event);
event.preventDefault();
@ -10007,7 +10169,7 @@ var Packages = /*#__PURE__*/function () {
external_jQuery_default()('[data-packages-modal] .installing-dependencies').addClass('hidden');
external_jQuery_default()('[data-packages-modal] .installing-package').removeClass('hidden');
_this3.installPackages(type, slugs, function () {
_this5.installPackages(type, slugs, function () {
external_jQuery_default()('[data-packages-modal] .installing-package').addClass('hidden');
external_jQuery_default()('[data-packages-modal] .installation-complete').removeClass('hidden');
@ -11371,9 +11533,6 @@ external_jQuery_default()(document).on('closed', '[data-remodal-id="changelog"]'
var instance = (external_jQuery_default()).remodal.lookup[external_jQuery_default()('[data-remodal-id=changelog]').data('remodal')];
instance.$modal.html('');
});
// EXTERNAL MODULE: ./node_modules/es6-map/index.js
var es6_map = __webpack_require__(1520);
var es6_map_default = /*#__PURE__*/__webpack_require__.n(es6_map);
;// CONCATENATED MODULE: ./app/utils/sidebar.js
function sidebar_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@ -11383,14 +11542,13 @@ function sidebar_createClass(Constructor, protoProps, staticProps) { if (protoPr
var MOBILE_BREAKPOINT = 48 - 0.062;
var DESKTOP_BREAKPOINT = 75 + 0.063;
var EVENTS = 'touchstart._grav click._grav';
var TARGETS = '[data-sidebar-mobile-toggle], #overlay';
var MOBILE_QUERY = "(max-width: ".concat(MOBILE_BREAKPOINT, "em)");
var DESKTOP_QUERY = "(min-width: ".concat(DESKTOP_BREAKPOINT, "em)");
var map = new (es6_map_default())();
var map = new __webpack_require__.g.Map();
var Sidebar = /*#__PURE__*/function () {
function Sidebar() {
@ -11699,7 +11857,7 @@ external_jQuery_default()(__webpack_require__.g).on('sidebar_state._grav', funct
/***/ }),
/***/ 36531:
/***/ 19912:
/***/ ((module, exports, __webpack_require__) => {
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
@ -14517,7 +14675,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
/***/ }),
/***/ 92511:
/***/ 31619:
/***/ (() => {
// localStorage
@ -14777,8 +14935,8 @@ var map = {
"./si.js": 90124,
"./sk": 64249,
"./sk.js": 64249,
"./sl": 34082,
"./sl.js": 34082,
"./sl": 14985,
"./sl.js": 14985,
"./sq": 51104,
"./sq.js": 51104,
"./sr": 49131,
@ -14797,8 +14955,8 @@ var map = {
"./te.js": 23110,
"./tet": 52095,
"./tet.js": 52095,
"./tg": 44257,
"./tg.js": 44257,
"./tg": 27321,
"./tg.js": 27321,
"./th": 9041,
"./th.js": 9041,
"./tk": 19005,
@ -14863,6 +15021,46 @@ webpackContext.id = 46700;
/***/ }),
/***/ 56089:
/***/ ((module) => {
"use strict";
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==";
/***/ }),
/***/ 17735:
/***/ ((module) => {
"use strict";
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII=";
/***/ }),
/***/ 96192:
/***/ ((module) => {
"use strict";
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC";
/***/ }),
/***/ 71090:
/***/ ((module) => {
"use strict";
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII=";
/***/ }),
/***/ 46050:
/***/ ((module) => {
"use strict";
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=";
/***/ }),
/***/ 65311:
/***/ ((module) => {
@ -15006,7 +15204,7 @@ module.exports = jQuery;
/******/
/******/ /* webpack/runtime/jsonp chunk loading */
/******/ (() => {
/******/ // no baseURI
/******/ __webpack_require__.b = document.baseURI || self.location.href;
/******/
/******/ // object to store loaded and loading chunks
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
@ -15047,7 +15245,7 @@ module.exports = jQuery;
/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
/******/ installedChunks[chunkId][0]();
/******/ }
/******/ installedChunks[chunkIds[i]] = 0;
/******/ installedChunks[chunkId] = 0;
/******/ }
/******/ return __webpack_require__.O(result);
/******/ }
@ -15062,7 +15260,7 @@ module.exports = jQuery;
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module depends on other loaded chunks and execution need to be delayed
/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [736], () => (__webpack_require__(75833)))
/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [736], () => (__webpack_require__(56299)))
/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
/******/ Grav = __webpack_exports__;
/******/

File diff suppressed because one or more lines are too long

View File

@ -11,56 +11,52 @@
"author": "Trilby Media, LLC",
"license": "MIT",
"dependencies": {
"babel-loader": "^8.2.3",
"buffer": "^6.0.3",
"chartist": "0.11.4",
"codemirror": "^5.61.0",
"codemirror": "^5.65.1",
"debounce": "^1.2.1",
"dropzone": "^5.9.2",
"dropzone": "^5.9.3",
"eonasdan-bootstrap-datetimepicker": "^4.17.49",
"es6-map": "^0.1.5",
"es6-promise": "^4.2.8",
"eventemitter3": "^4.0.7",
"events": "^3.3.0",
"exif-js": "^2.3.0",
"immutable": "^3.8.2",
"immutable": "^4.0.0",
"immutablediff": "^0.4.4",
"js-yaml": "^4.1.0",
"mout": "^1.2.2",
"mout": "^1.2.3",
"popper.js": "^1.14.4",
"rangetouch": "^2.0.1",
"remodal": "^1.1.1",
"selectize": "^0.12.6",
"simplebar": "^5.3.2",
"sortablejs": "^1.13.0",
"simplebar": "^5.3.6",
"sortablejs": "^1.14.0",
"speakingurl": "^14.0.1",
"toastr": "^2.1.4",
"watchjs": "0.0.0",
"whatwg-fetch": "^3.6.2",
"yarn": "^1.22.10"
"whatwg-fetch": "^3.6.2"
},
"devDependencies": {
"@babel/core": "^7.14.0",
"@babel/plugin-proposal-class-properties": "^7.13.0",
"@babel/plugin-proposal-json-strings": "^7.13.8",
"@babel/plugin-proposal-object-rest-spread": "^7.13.8",
"@babel/core": "^7.17.0",
"@babel/plugin-proposal-class-properties": "^7.16.7",
"@babel/plugin-proposal-json-strings": "^7.16.7",
"@babel/plugin-proposal-object-rest-spread": "^7.16.7",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-import-meta": "^7.10.4",
"@babel/polyfill": "^7.12.1",
"@babel/preset-env": "^7.14.0",
"@babel/register": "^7.13.16",
"babel-eslint": "^10.1.0",
"babel-loader": "^8.2.2",
"css-loader": "^5.2.4",
"eslint": "^7.25.0",
"eslint-loader": "^4.0.2",
"exports-loader": "^2.0.0",
"imports-loader": "^2.0.0",
"@babel/preset-env": "^7.16.11",
"@babel/register": "^7.17.0",
"css-loader": "^6.6.0",
"eslint": "^8.8.0",
"eslint-webpack-plugin": "^3.1.1",
"exports-loader": "^3.1.0",
"imports-loader": "^3.1.1",
"json-loader": "^0.5.7",
"minimist": "^1.2.5",
"style-loader": "^2.0.0",
"terser-webpack-plugin": "^5.1.1",
"webpack": "^5.36.2",
"webpack-cli": "^4.6.0"
"style-loader": "^3.3.1",
"terser-webpack-plugin": "^5.3.1",
"webpack": "^5.68.0",
"webpack-cli": "^4.9.2"
},
"resolutions": {
"minimist": "^1.2.5"

View File

@ -1527,7 +1527,11 @@ form {
border-bottom: 1px solid $underline;
&:hover {
@if (lightness($content-tabs-bg) < 50) {
background: lighten($content-bg, 2%);
} @else {
background: darken($content-bg, 5%);
}
}
}
}

View File

@ -3,6 +3,27 @@
$preview-width: 200px;
$preview-height: 150px;
.pagemedia-field {
.form-label {
display: flex;
justify-content: space-between;
margin-right: 1.5rem;
align-items: center;
label {
cursor: pointer;
flex: 1;
}
}
input[type="range"] {
&::-webkit-slider-runnable-track {
background: inherit !important;
border: none !important;
}
}
}
.dropzone {
position: relative;
border-radius: $form-border-radius;
@ -77,7 +98,7 @@ $preview-height: 150px;
.dz-progress {
position: absolute;
top: $preview-height;
bottom: auto;
left: 0px;
right: 0px;
height: 4px;
@ -200,7 +221,7 @@ $preview-height: 150px;
content: '\f00d';
}
}
.dz-metadata {
top: 49px;
&:after {

View File

@ -742,6 +742,22 @@ textarea.frontmatter {
[data-collection-nosort] .collection-sort {
display: none;
}
.list-confirm-deletion {
cursor: pointer;
display: flex;
position: absolute !important;
z-index: 10010;
padding: .5rem;
top: 13px;
right: 20px;
> i, span {
text-align: center;
display: inline-flex;
align-items: center;
}
}
}
.form-label.block {

View File

@ -1,7 +1,9 @@
{% extends "forms/field.html.twig" %}
{% block field %}
{% embed 'forms/default/fields.html.twig' with {name: field.name, fields: field.fields} %}
{% set name = parent_name|parent_field ~ '.' ~ field.name %}
{% set fields = prepare_form_fields(field.fields, name) %}
{% embed 'forms/default/fields.html.twig' with {name: name, fields: fields} %}
{% set initial_state = field.name|string is not same as (parent_value|string) ? 'display: none;' %}
{% block outer_markup_field_open %}
<div id="{{ parent_name ~ '__' ~ field.name|string }}" class="form-element" style="{{ initial_state }}">

View File

@ -14,8 +14,7 @@
{{ parent() }}
{% set parent_name = field.name %}
{% set parent_value = value %}
{% set fields = prepare_form_fields(field.fields, field.name) %}
{% if fields|length %}
{% include 'forms/default/fields.html.twig' with {name: field.name, fields: fields} %}
{% include 'forms/default/fields.html.twig' with {name: parent_name, fields: field.fields} %}
{% endif %}
{% endblock %}

View File

@ -57,20 +57,23 @@
{% set child = prepare_form_field(child, child_name, field.name, {key: key}) %}
{% if child %}
{% set default_layout = 'text' %}
{% if child.type == 'key' or child.key == true %}
{# Special handling for the key field #}
{% set default_layout = 'key' %}
{% set child_value = key %}
{% elseif child.name == 'value' %}
{# Special handling for the value field #}
{% set child = child|merge({ name: field.name }) %}
{% set child_value = value %}
{% else %}
{% set child_value = form ? form.value(child.name) : data.value(child.name) %}
{% endif %}
{% if child.type == 'key' or child.key == true %}
{# Special handling for the key field #}
{% set default_layout = 'key' %}
{% set child_value = key %}
{% elseif child.name == 'value' %}
{# Special handling for the value field #}
{% set child = child|merge({ name: field.name }) %}
{% set child_value = value %}
{% else %}
{% set child_value = form ? form.value(child.name) : data.value(child.name) %}
{% endif %}
{% set field_templates = include_form_field(child.type, field_layout, default_layout) %}
{% include field_templates with { field: child, value: child_value } %}
{% set field_templates = include_form_field(child.type, field_layout, default_layout) %}
{% if default_layout != 'key' %}
{% set originalValue = child_value %}
{% endif %}
{% include field_templates with { field: child, value: child_value } %}
{% endif %}
{% endfor %}
{% endif %}

View File

@ -87,7 +87,7 @@
{% elseif child.name == 'value' %}
{# Special handling for the value field #}
{% set child = child|merge({ name: item_name }) %}
{% set child_value = value %}
{% set child_value = val %}
{% else %}
{% set child_value = form ? form.value(child.name) : data.value(child.name) %}
{% endif %}
@ -109,7 +109,11 @@
<i class="fa fa-chevron-circle-{{ field.collapsed ? 'right' : 'down' }}" data-action="{{ field.collapsed ? 'expand' : 'collapse' }}"></i>
<br />
{% endif %}
<i class="fa fa-trash-o" data-action="delete"></i>
<i class="fa fa-trash-o" data-action="confirm"></i>
<div class="list-confirm-deletion button danger hidden" data-action="delete">
<i class="fa fa-fw text-primary fa-check"></i>
<span>{{ 'PLUGIN_ADMIN.DELETE'|t }}</span>
</div>
</div>
</li>
{% endfor %}
@ -163,7 +167,11 @@
<i class="fa fa-chevron-circle-down" data-action="collapse"></i>
<br />
{% endif %}
<i class="fa fa-trash-o" data-action="delete"></i>
<i class="fa fa-trash-o" data-action="confirm"></i>
<div class="list-confirm-deletion button danger hidden" data-action="delete">
<i class="fa fa-fw text-primary fa-check"></i>
<span>{{ 'PLUGIN_ADMIN.DELETE'|t }}</span>
</div>
</div>
{%- endif -%}
</li>

View File

@ -26,12 +26,19 @@
{% set media_path = url(context.relativePagePath) %}
{% set media_uri = context.mediaUri() %}
{% set dropzone_settings = { maxFilesize: form_max_filesize }|merge(pagemedia_settings) %}
{% set pageMediaStore = get_cookie('grav-admin-pagemedia')|default('{"width":200,"collapsed":false}')|json_decode %}
<div class="form-field grid vertical {% if field.classes is defined %}{{ field.classes }}{% endif %}">
<div class="pagemedia-field form-field grid vertical {% if field.classes is defined %}{{ field.classes }}{% endif %}">
<div class="form-label">
<label>{{ field.label|t }}</label>
<label class="media-collapser">
<i class="fa fa-fw small fa-chevron-{{ pageMediaStore.collapsed ? 'right' : 'down' }}"></i>
{{ field.label|t }} <span data-pagemedia-count>({{ admin.page.media|length }})</span>
</label>
<div class="{{ pageMediaStore.collapsed ? 'hidden' : '' }}">
<input type="range" min="70" step="10" max="200" value="{{ pageMediaStore.width }}" class="media-resizer">
</div>
</div>
<div class="form-data form-uploads-wrapper">
<div class="form-data form-uploads-wrapper" style="{{ pageMediaStore.collapsed ? 'display: none;' : '' }}">
<div id="grav-dropzone"
class="dropzone"
data-media-url="{{ (base_url ~ media_url)|e('html_attr') }}"

View File

@ -9,7 +9,7 @@
{% set config = twig_vars['config'] %}
{% set separator = config.system.param_sep %}
{% set display_field = config.plugins.admin.pages_list_display_field %}
{% set display_field = config.plugins.admin.pages_list_display_field %} {# DEPRECATED #}
{% set base_url_relative_frontend = twig_vars['base_url_relative_frontend'] %}
{% set admin = twig_vars['admin'] %}
{% set warn = twig_vars['warn'] %}

View File

@ -1,5 +1,5 @@
{% if custom_admin_footer %}
{{ custom_admin_footer|raw }}
{% else %}
<a href="http://getgrav.org" target="_blank" rel="noopener noreferrer">Grav</a> v<span class="grav-version">{{ constant('GRAV_VERSION') }}</span> - Admin v{{ admin_version }} - {{ "PLUGIN_ADMIN.WAS_MADE_WITH"|t|lower }} <i class="fa fa-heart-o pulse"></i> {{ "PLUGIN_ADMIN.BY"|t|lower }} <a href="https://trilby.media" target="_blank" rel="noopener noreferrer">Trilby Media</a>.
<a href="https://getgrav.org" target="_blank" rel="noopener noreferrer">Grav</a> v<span class="grav-version">{{ constant('GRAV_VERSION') }}</span> - Admin v{{ admin_version }} - {{ "PLUGIN_ADMIN.WAS_MADE_WITH"|t|lower }} <i class="fa fa-heart-o pulse"></i> {{ "PLUGIN_ADMIN.BY"|t|lower }} <a href="https://trilby.media" target="_blank" rel="noopener noreferrer">Trilby Media</a>.
{% endif %}

View File

@ -3,6 +3,7 @@
<option value="name" selected>{{ "PLUGIN_ADMIN.NAME"|t }}</option>
<option value="author">{{ "PLUGIN_ADMIN.AUTHOR"|t }}</option>
<option value="official">GravTeam</option>
<option value="premium">Premium</option>
<option value="release-date">{{ "PLUGIN_ADMIN.RELEASE_DATE"|t }}</option>
{% if list_view == 'plugins' and not installing %}<option value="enabled">{{ "PLUGIN_ADMIN.ENABLED"|t }}</option>{% endif %}
{% if not installing %}<option value="updatable">{{ "PLUGIN_ADMIN.UPDATES_AVAILABLE"|t }}</option>{% endif %}

View File

@ -17,16 +17,17 @@
{% for slug, plugin in admin.plugins(not installing).toArray|ksort %}
{% set data = admin.data('plugins/' ~ slug) %}
{% set isTestingRelease = admin.gpm.isTestingRelease(slug) %}
{% set isPremium = admin.isPremiumProduct(plugin) %}
{% set releaseDate = plugin.date ?: admin.gpm.findPackage(slug, true).date %}
<tr data-gpm-plugin="{{ slug|url_encode }}" data-gpm-name="{{ plugin.name }}" data-gpm-release-date="{{ releaseDate }}" data-gpm-author="{{ plugin.author.name }}" data-gpm-official="{{ admin.isTeamGrav(plugin) ? '1' : '2' }}" data-gpm-updatable="{{ admin.gpm.isUpdatable(slug) ? '1' : '2' }}" data-gpm-enabled="{{ data.get('enabled') ? '1' : '2' }}" data-gpm-testing="{{ isTestingRelease ? '1' : '2' }}">
<tr data-gpm-plugin="{{ slug|url_encode }}" data-gpm-name="{{ plugin.name }}" data-gpm-release-date="{{ releaseDate }}" data-gpm-author="{{ plugin.author.name }}" data-gpm-official="{{ admin.isTeamGrav(plugin) ? '1' : '2' }}" data-gpm-updatable="{{ admin.gpm.isUpdatable(slug) ? '1' : '2' }}" data-gpm-enabled="{{ data.get('enabled') ? '1' : '2' }}" data-gpm-testing="{{ isTestingRelease ? '1' : '2' }}" data-gpm-premium="{{ isPremium ? '1' : '2' }}">
<td class="gpm-name quadruple">
<i class="fa fa-fw fa-{{ plugin.icon }}"></i>
<a href="{{ admin_route('/plugins/' ~ slug|url_encode) }}">{{ plugin.name }}</a>
{% if admin.isTeamGrav(plugin) %}
<small><span class="info-reverse"><i class="fa fa-check-circle" title="{{ "PLUGIN_ADMIN.GRAV_OFFICIAL_PLUGIN"|t }}"></i></span></small>
{% endif %}
{% if admin.isPremiumProduct(plugin) %}
{% if isPremium %}
{% if not gumroad_loaded %}
{% set gumroad_loaded = true %}
<script src="//gumroad.com/js/gumroad.js"></script>

View File

@ -19,16 +19,17 @@
{% if (installing) %}{% set state = 'installing' %}{% endif %}
{% if (config.get('system.pages.theme') == slug) %}{% set state = 'active' %}{% endif %}
{% set isTestingRelease = admin.gpm.isTestingRelease(slug) %}
{% set isPremium = admin.isPremiumProduct(theme) %}
{% set releaseDate = theme.date ?: admin.gpm.findPackage(slug, true).date %}
<div class="theme card-item pure-u-1-3 {{ state }}-theme" data-gpm-theme="{{ slug|url_encode }}" data-gpm-name="{{ theme.name }}" data-gpm-release-date="{{ releaseDate }}" data-gpm-author="{{ theme.author.name }}" data-gpm-official="{{ admin.isTeamGrav(theme) ? '1' : '2' }}" data-gpm-updatable="{{ admin.gpm.isUpdatable(slug) ? '1' : '2' }}" data-gpm-enabled="{{ data.get('enabled') ? '1' : '2' }}" data-gpm-testing="{{ isTestingRelease ? '1' : '2' }}">
<div class="theme card-item pure-u-1-3 {{ state }}-theme" data-gpm-theme="{{ slug|url_encode }}" data-gpm-name="{{ theme.name }}" data-gpm-release-date="{{ releaseDate }}" data-gpm-author="{{ theme.author.name }}" data-gpm-official="{{ admin.isTeamGrav(theme) ? '1' : '2' }}" data-gpm-updatable="{{ admin.gpm.isUpdatable(slug) ? '1' : '2' }}" data-gpm-enabled="{{ data.get('enabled') ? '1' : '2' }}" data-gpm-testing="{{ isTestingRelease ? '1' : '2' }}" data-gpm-premium="{{ isPremium ? '1' : '2' }}">
<div class="gpm-name">
<i class="fa fa-fw fa-{{ theme.icon }}"></i>
<a href="{{ admin_route('/themes/' ~ slug|url_encode) }}">{{ theme.name }}</a>
{% if admin.isTeamGrav(theme) %}
<small><span class="info-reverse"><i class="fa fa-check-circle" title="{{ "PLUGIN_ADMIN.GRAV_OFFICIAL_THEME"|t }}"></i></span></small>
{% endif %}
{% if admin.isPremiumProduct(theme) %}
{% if isPremium %}
{% if not gumroad_loaded %}
{% set gumroad_loaded = true %}
<script src="//gumroad.com/js/gumroad.js"></script>

View File

@ -1,5 +1,6 @@
const path = require('path');
const TerserPlugin = require('terser-webpack-plugin');
const ESLintPlugin = require('eslint-webpack-plugin');
module.exports = (env, argv) => ({
entry: {
@ -32,10 +33,13 @@ module.exports = (env, argv) => ({
jquery: 'jQuery',
'grav-config': 'GravAdmin'
},
plugins: [new ESLintPlugin({
extensions: ['js', 'jsx'],
exclude: ['/node_modules/']
})],
module: {
rules: [
{ enforce: 'pre', test: /\.json$/, loader: 'json-loader' },
{ enforce: 'pre', test: /\.js$/, loader: 'eslint-loader', exclude: /node_modules/ },
{
test: /\.css$/,
use: ['style-loader', 'css-loader']

File diff suppressed because it is too large Load Diff

View File

@ -4,4 +4,4 @@
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit21cdc8503e0b8e5d43533c2109133c23::getLoader();
return ComposerAutoloaderInit38a448a612c5797456d245c809d4a914::getLoader();

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