mirror of
https://github.com/getgrav/grav-plugin-admin.git
synced 2026-04-09 14:18:51 +02:00
Merge branch 'release/1.10.13'
This commit is contained in:
21
CHANGELOG.md
21
CHANGELOG.md
@@ -1,3 +1,24 @@
|
||||
# v1.10.13
|
||||
## 04/23/2021
|
||||
|
||||
1. [](#new)
|
||||
* Added refresh action button for Folder to ease the regeneration of the slug based on the title. Available also as API entry `Grav.default.Forms.Fields.FolderField.Regenerate()` [#1738](https://github.com/getgrav/grav-plugin-admin/issues/1738)
|
||||
1. [](#improved)
|
||||
* Removed sourcemaps references from fork-awesome.min.css [#2122](https://github.com/getgrav/grav-plugin-admin/issues/2122)
|
||||
* Support native spell checkers in CodeMirror editor [#1266](https://github.com/getgrav/grav-plugin-admin/issues/1266)
|
||||
* Added new 'Content Highlight' color to presets
|
||||
* Copying Pages now prompts a dedicated modal that allows for picking title, folder name, parent location, page template and visibility [#1738](https://github.com/getgrav/grav-plugin-admin/issues/1738)
|
||||
* Updated with latest language translations from Crowdin.com
|
||||
1. [](#bugfix)
|
||||
* Moved preset CSS compile to earlier in the process to ensure compilation happens in time.
|
||||
* Prevent Save actions from Flex Objects to trigger the unsaved unload notice [#2125](https://github.com/getgrav/grav-plugin-admin/issues/2125)
|
||||
* Fixed audit vulnerabilities in module dependencies and house cleanup [#2096](https://github.com/getgrav/grav-plugin-admin/issues/2096)
|
||||
* Fixed issue preventing Drag & Drop of media files while in Expert Mode [#1927](https://github.com/getgrav/grav-plugin-admin/issues/1927)
|
||||
* Fixed broken link colors in `preset.css` which was causing issues with tabs and dropdowns
|
||||
* Fixed permissions for page related tasks and actions
|
||||
* Fixed permission check for configuration save [#2130](https://github.com/getgrav/grav-plugin-admin/issues/2130)
|
||||
* Fixed missing/wrong page categories and tags when multi-language support is enabled [#2107](https://github.com/getgrav/grav-plugin-admin/issues/2107)
|
||||
|
||||
# v1.10.12
|
||||
## 04/15/2021
|
||||
|
||||
|
||||
15
admin.php
15
admin.php
@@ -578,13 +578,6 @@ class AdminPlugin extends Plugin
|
||||
$assets->setJsPipeline(false);
|
||||
$assets->setCssPipeline(false);
|
||||
|
||||
// Compile a missing preset.css file
|
||||
$preset_css = 'asset://admin-preset.css';
|
||||
$preset_path = $this->grav['locator']->findResource($preset_css);
|
||||
if (!$preset_path) {
|
||||
$this->grav['admin-whitelabel']->compilePresetScss($this->config->get('plugins.admin.whitelabel'));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -600,6 +593,7 @@ class AdminPlugin extends Plugin
|
||||
$twig_paths[] = __DIR__ . '/themes/' . $this->theme . '/templates';
|
||||
|
||||
$this->grav['twig']->twig_paths = $twig_paths;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1116,6 +1110,13 @@ class AdminPlugin extends Plugin
|
||||
// Initialize white label functionality
|
||||
$this->grav['admin-whitelabel'] = new WhiteLabel();
|
||||
|
||||
// Compile a missing preset.css file
|
||||
$preset_css = 'asset://admin-preset.css';
|
||||
$preset_path = $this->grav['locator']->findResource($preset_css);
|
||||
if (!$preset_path) {
|
||||
$this->grav['admin-whitelabel']->compilePresetScss($this->config->get('plugins.admin.whitelabel'));
|
||||
}
|
||||
|
||||
// These events are needed for login.
|
||||
$this->enable([
|
||||
'onTwigExtensions' => ['onTwigExtensions', 1000],
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: Admin Panel
|
||||
slug: admin
|
||||
type: plugin
|
||||
version: 1.10.12
|
||||
version: 1.10.13
|
||||
description: Adds an advanced administration panel to manage your site
|
||||
icon: empire
|
||||
author:
|
||||
@@ -513,6 +513,11 @@ form:
|
||||
default: '#d1dee7'
|
||||
help: PLUGIN_ADMIN.CONTENT_TABS_TEXT_HELP
|
||||
|
||||
whitelabel.color_scheme.colors.content-highlight:
|
||||
type: colorscheme.color
|
||||
default: '#ffffd7'
|
||||
help: PLUGIN_ADMIN.CONTENT_HIGHLIGHT_HELP
|
||||
|
||||
whitelabel.color_scheme.colors.button-bg:
|
||||
type: colorscheme.color
|
||||
default: '#41bea8'
|
||||
|
||||
43
blueprints/admin/pages/copy.yaml
Normal file
43
blueprints/admin/pages/copy.yaml
Normal file
@@ -0,0 +1,43 @@
|
||||
rules:
|
||||
slug:
|
||||
pattern: '[a-zA-Zа-яA-Я0-9_\-]+'
|
||||
min: 1
|
||||
max: 200
|
||||
|
||||
form:
|
||||
validation: loose
|
||||
fields:
|
||||
|
||||
section:
|
||||
type: section
|
||||
title: PLUGIN_ADMIN.COPY_PAGE
|
||||
|
||||
title:
|
||||
type: text
|
||||
label: PLUGIN_ADMIN.PAGE_TITLE
|
||||
help: PLUGIN_ADMIN.PAGE_TITLE_HELP
|
||||
validate:
|
||||
required: true
|
||||
|
||||
folder:
|
||||
type: text
|
||||
label: PLUGIN_ADMIN.FOLDER_NAME
|
||||
help: PLUGIN_ADMIN.FOLDER_NAME_HELP
|
||||
validate:
|
||||
rule: slug
|
||||
required: true
|
||||
|
||||
header.published:
|
||||
id: move-header-published
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.PUBLISHED
|
||||
help: PLUGIN_ADMIN.PUBLISHED_HELP
|
||||
highlight: ''
|
||||
default: ''
|
||||
size: medium
|
||||
options:
|
||||
'': PLUGIN_ADMIN.AUTO
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
@@ -51,7 +51,7 @@ form:
|
||||
highlight: ''
|
||||
default: ''
|
||||
options:
|
||||
'': Auto
|
||||
'': PLUGIN_ADMIN.AUTO
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
|
||||
@@ -528,14 +528,9 @@ class AdminBaseController
|
||||
$permissions = ['admin.super'];
|
||||
|
||||
switch ($type) {
|
||||
case 'configuration':
|
||||
case 'config':
|
||||
case 'system':
|
||||
$permissions[] = 'admin.configuration.system';
|
||||
break;
|
||||
case 'settings':
|
||||
case 'site':
|
||||
$permissions[] = 'admin.configuration.site';
|
||||
$type = $this->route ?: 'system';
|
||||
$permissions[] = 'admin.configuration.' . $type;
|
||||
break;
|
||||
case 'plugins':
|
||||
$permissions[] = 'admin.plugins';
|
||||
|
||||
@@ -1271,7 +1271,7 @@ class AdminController extends AdminBaseController
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$this->authorizeTask('new folder', ['admin.pages', 'admin.super'])) {
|
||||
if (!$this->authorizeTask('new folder', ['admin.pages', 'admin.pages.create', 'admin.super'])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1465,7 +1465,7 @@ class AdminController extends AdminBaseController
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$this->authorizeTask('copy page', ['admin.pages', 'admin.super'])) {
|
||||
if (!$this->authorizeTask('copy page', ['admin.pages', 'admin.pages.create', 'admin.super'])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1554,7 +1554,7 @@ class AdminController extends AdminBaseController
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$this->authorizeTask('reorder pages', ['admin.pages', 'admin.super'])) {
|
||||
if (!$this->authorizeTask('reorder pages', ['admin.pages', 'admin.pages.update', 'admin.super'])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1579,7 +1579,7 @@ class AdminController extends AdminBaseController
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$this->authorizeTask('delete page', ['admin.pages', 'admin.super'])) {
|
||||
if (!$this->authorizeTask('delete page', ['admin.pages', 'admin.pages.delete', 'admin.super'])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1625,7 +1625,7 @@ class AdminController extends AdminBaseController
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$this->authorizeTask('switch language', ['admin.pages', 'admin.super'])) {
|
||||
if (!$this->authorizeTask('switch language', ['admin.pages', 'admin.pages.list', 'admin.super'])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1666,7 +1666,7 @@ class AdminController extends AdminBaseController
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$this->authorizeTask('save as', ['admin.pages', 'admin.super'])) {
|
||||
if (!$this->authorizeTask('save as', ['admin.pages', 'admin.pages.create', 'admin.super'])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1831,7 +1831,7 @@ class AdminController extends AdminBaseController
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$this->authorizeTask('get childtypes', ['admin.pages', 'admin.super'])) {
|
||||
if (!$this->authorizeTask('get childtypes', ['admin.pages', 'admin.pages.list', 'admin.super'])) {
|
||||
$this->admin->json_response = [
|
||||
'status' => 'error',
|
||||
'message' => $this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK')
|
||||
@@ -1885,7 +1885,7 @@ class AdminController extends AdminBaseController
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$this->authorizeTask('filter pages', ['admin.pages', 'admin.super'])) {
|
||||
if (!$this->authorizeTask('filter pages', ['admin.pages', 'admin.pages.list', 'admin.super'])) {
|
||||
$this->admin->json_response = [
|
||||
'status' => 'error',
|
||||
'message' => $this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK')
|
||||
@@ -2020,7 +2020,7 @@ class AdminController extends AdminBaseController
|
||||
*/
|
||||
protected function taskProcessMarkdown()
|
||||
{
|
||||
if (!$this->authorizeTask('process markdown', ['admin.pages', 'admin.super'])) {
|
||||
if (!$this->authorizeTask('process markdown', ['admin.pages', 'admin.pages.read', 'admin.super'])) {
|
||||
$this->admin->json_response = [
|
||||
'status' => 'error',
|
||||
'message' => $this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK')
|
||||
@@ -2080,7 +2080,7 @@ class AdminController extends AdminBaseController
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$this->authorizeTask('list media', ['admin.pages', 'admin.super'])) {
|
||||
if (!$this->authorizeTask('list media', ['admin.pages', 'admin.pages.read', 'admin.super'])) {
|
||||
$this->admin->json_response = [
|
||||
'status' => 'error',
|
||||
'message' => $this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK')
|
||||
@@ -2142,7 +2142,7 @@ class AdminController extends AdminBaseController
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$this->authorizeTask('add media', ['admin.pages', 'admin.super'])) {
|
||||
if (!$this->authorizeTask('add media', ['admin.pages', 'admin.pages.update', 'admin.super'])) {
|
||||
$this->admin->json_response = [
|
||||
'status' => 'error',
|
||||
'message' => $this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK')
|
||||
@@ -2392,7 +2392,7 @@ class AdminController extends AdminBaseController
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$this->authorizeTask('delete media', ['admin.pages', 'admin.super'])) {
|
||||
if (!$this->authorizeTask('delete media', ['admin.pages', 'admin.pages.update', 'admin.super'])) {
|
||||
$this->admin->json_response = [
|
||||
'status' => 'error',
|
||||
'message' => $this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK')
|
||||
@@ -2979,7 +2979,7 @@ class AdminController extends AdminBaseController
|
||||
*/
|
||||
protected function taskConvertUrls()
|
||||
{
|
||||
if (!$this->authorizeTask('access page', ['admin.pages', 'admin.super'])) {
|
||||
if (!$this->authorizeTask('access page', ['admin.pages', 'admin.pages.list', 'admin.super'])) {
|
||||
$this->admin->json_response = [
|
||||
'status' => 'error',
|
||||
'message' => $this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK')
|
||||
|
||||
@@ -1097,7 +1097,7 @@ PLUGIN_ADMIN:
|
||||
REDIRECT_OPTION_301: "301 - Přesunuto trvale"
|
||||
REDIRECT_OPTION_302: "302 - Přesunuto dočasně"
|
||||
REDIRECT_OPTION_303: "303 - Viz ostatní"
|
||||
IMAGES_CLS_TITLE: "Cumulative Layout Shift (CLS)"
|
||||
IMAGES_CLS_TITLE: "Kumulativní posun rozložení (CLS)"
|
||||
IMAGES_CLS_AUTO_SIZES: "Povolit automatické velikosti"
|
||||
IMAGES_CLS_AUTO_SIZES_HELP: "Automaticky přidat atributy \"šířka\" a \"výška\" k obrázkům do CLS adresy"
|
||||
IMAGES_CLS_ASPECT_RATIO: "Povolit poměr stran"
|
||||
|
||||
@@ -548,6 +548,7 @@ PLUGIN_ADMIN:
|
||||
REVERSE_PROXY_HELP: "Enable this if you are behind a reverse proxy and you are having trouble with URLs containing incorrect ports"
|
||||
INVALID_FRONTMATTER_COULD_NOT_SAVE: "Invalid frontmatter, could not save"
|
||||
ADD_FOLDER: "Add Folder"
|
||||
COPY_PAGE: "Copy Page"
|
||||
PROXY_URL: "Proxy URL"
|
||||
PROXY_URL_HELP: "Enter the proxy HOST or IP and PORT"
|
||||
NOTHING_TO_SAVE: "Nothing to Save"
|
||||
@@ -1044,6 +1045,7 @@ PLUGIN_ADMIN:
|
||||
CONTENT_HEADER_HELP: "Content header"
|
||||
CONTENT_TABS_BG_HELP: "Content tabs bg"
|
||||
CONTENT_TABS_TEXT_HELP: "Content tabs text"
|
||||
CONTENT_HIGHLIGHT_HELP: "Content highlight"
|
||||
BUTTON_BG_HELP: "Button bg"
|
||||
BUTTON_TEXT_HELP: "Button text"
|
||||
NOTICE_BG_HELP: "Notice bg"
|
||||
@@ -1099,10 +1101,11 @@ PLUGIN_ADMIN:
|
||||
REDIRECT_OPTION_301: "301 - Moved permanently"
|
||||
REDIRECT_OPTION_302: "302 - Moved temporarily"
|
||||
REDIRECT_OPTION_303: "303 - See Other"
|
||||
IMAGES_CLS_TITLE: "Cumative Layer Shift (CLS)"
|
||||
IMAGES_CLS_TITLE: "Cumulative Layout Shift (CLS)"
|
||||
IMAGES_CLS_AUTO_SIZES: "Enable Auto Sizes"
|
||||
IMAGES_CLS_AUTO_SIZES_HELP: "Automatically add 'width' and 'height' attributes to images to address CLS"
|
||||
IMAGES_CLS_ASPECT_RATIO: "Enable Aspect Ratio"
|
||||
IMAGES_CLS_ASPECT_RATIO_HELP: "Optional CSS variable that gets applied via a 'style' attribute which can be used in CSS for custom styling"
|
||||
IMAGES_CLS_RETINA_SCALE: "Retina Scale Factor"
|
||||
IMAGES_CLS_RETINA_SCALE_HELP: "Will take the calculated size and divide by scale factor to display a higher resolution image at a smaller pixel size for better handling of HiDPI resolutions"
|
||||
IMAGES_CLS_RETINA_SCALE_HELP: "Will take the calculated size and divide by scale factor to display a higher resolution image at a smaller pixel size for better handling of HiDPI resolutions"
|
||||
AUTOREGENERATE_FOLDER_SLUG: "Auto-regenerate based on page title"
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
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"
|
||||
@@ -46,11 +47,13 @@ PLUGIN_ADMIN:
|
||||
CLOSE: "Pechar"
|
||||
CANCEL: "Anular"
|
||||
CONTINUE: "Continuar"
|
||||
CONFIRM: "Confirmar"
|
||||
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "Requírese confirmación"
|
||||
MODAL_CHANGED_DETECTED_TITLE: "Cambios detectados"
|
||||
MODAL_CHANGED_DETECTED_DESC: "Ten cambios sen gardar. Confirma que quere deixar sen gardar?"
|
||||
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "Confirmación requirida"
|
||||
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Confirma que quere eliminar este ficheiro? Esta acción non se pode desfacer."
|
||||
MODAL_UPDATE_GRAV_CONFIRMATION_REQUIRED_DESC: "Está a piques de actualizar Grav á última versión dispoñible. Quere continuar?"
|
||||
ADD_FILTERS: "Engadir filtros"
|
||||
SEARCH_PAGES: "Buscar páxinas"
|
||||
VERSION: "Versión"
|
||||
@@ -68,6 +71,7 @@ PLUGIN_ADMIN:
|
||||
LICENSE: "Licenza"
|
||||
DESCRIPTION: "Descrición"
|
||||
README: "Léame"
|
||||
DOCS: "Documentos"
|
||||
REMOVE_THEME: "Retirar tema"
|
||||
INSTALL_THEME: "Instalar tema"
|
||||
THEME: "Tema"
|
||||
@@ -105,6 +109,7 @@ PLUGIN_ADMIN:
|
||||
BACKUP_NOT_FOUND: "Non se atopou a copia de seguranza"
|
||||
BACKUP_DATE: "Data da copia"
|
||||
STATISTICS: "Estatísticas"
|
||||
VIEWS_STATISTICS: "Estatísticas de Visualización de Páxina"
|
||||
TODAY: "Hoxe"
|
||||
WEEK: "Semana"
|
||||
MONTH: "Mes"
|
||||
@@ -332,6 +337,7 @@ PLUGIN_ADMIN:
|
||||
LANGUAGES: "Idiomas"
|
||||
SUPPORTED: "Compatíbel"
|
||||
SUPPORTED_HELP: "Lista de códigos de idioma en dúas letras separada por comas (por exemplo 'en,fr,gl'"
|
||||
SUPPORTED_PLACEHOLDER: "p.ex. pt, gl"
|
||||
TRANSLATIONS_FALLBACK: "Desfacer traducións"
|
||||
TRANSLATIONS_FALLBACK_HELP: "Retroceder ata as traducións permitidas se o idioma activo non existe"
|
||||
ACTIVE_LANGUAGE_IN_SESSION: "Idioma activo na sesión"
|
||||
@@ -341,6 +347,7 @@ PLUGIN_ADMIN:
|
||||
EXPIRES_HELP: "Determinar a cabeceira de expiración. O valor dáse en segundos"
|
||||
CACHE_CONTROL: "Control de caché HTTP"
|
||||
CACHE_CONTROL_HELP: "Determinar un valor de control de caché válido como 'no-cache, no-store, must-revalidate'"
|
||||
CACHE_CONTROL_PLACEHOLDER: "p.ex. public, max-age=31536000"
|
||||
LAST_MODIFIED: "Última modificación"
|
||||
LAST_MODIFIED_HELP: "Determinar a cabeceira de última modificación pode axudar a optimizar o cacheo no servidor proxy e no navegador"
|
||||
ETAG: "ETag"
|
||||
@@ -409,6 +416,8 @@ PLUGIN_ADMIN:
|
||||
JAVASCRIPT_MINIFY_HELP: "Minimizar o JS durante o entubado"
|
||||
ENABLED_TIMESTAMPS_ON_ASSETS: "Activar o selo de tempo nos recursos"
|
||||
ENABLED_TIMESTAMPS_ON_ASSETS_HELP: "Activar selo de tempo de recurso"
|
||||
ENABLED_SRI_ON_ASSETS: "Activar SRI nos recursos"
|
||||
ENABLED_SRI_ON_ASSETS_HELP: "Activar SRI de activos"
|
||||
COLLECTIONS: "Coleccións"
|
||||
ERROR_HANDLER: "Erro no manipulador"
|
||||
DISPLAY_ERRORS: "Presentar os erros"
|
||||
@@ -431,6 +440,8 @@ PLUGIN_ADMIN:
|
||||
CACHE_ALL_HELP: "Executar todas as imaxes por medio do sistema de caché do Grav mesmo se non foron manipuladas"
|
||||
IMAGES_DEBUG: "Marca de auga na imaxe depurada"
|
||||
IMAGES_DEBUG_HELP: "Amosar unha capa superposta en imaxes para indicar a profundidade de píxels da imaxe cando se traballa con retina, por exemplo"
|
||||
IMAGES_LOADING: "Comportamento de Carga de Imaxes"
|
||||
IMAGES_LOADING_HELP: "O atributo de carga permite a un navegador aprazar a carga de imaxes e iframes fóra de pantalla ata que os usuarios se desprazan preto deles. a carga admite tres valores: automático, preguiceiro, ansioso"
|
||||
IMAGES_SEOFRIENDLY: "Nomes de imaxe amigábeis co SEO"
|
||||
IMAGES_SEOFRIENDLY_HELP: "Ao estar activado, o nome da imaxe desprégase primeiro, logo unha pequena sinatura electrónica para reflectir as operacións procesadas"
|
||||
UPLOAD_LIMIT: "Límite de carga de ficheiro"
|
||||
@@ -491,6 +502,8 @@ PLUGIN_ADMIN:
|
||||
PLUGIN_STATUS: "Status do complemento"
|
||||
INCLUDE_DEFAULT_LANG: "Incluír idioma predeterminado"
|
||||
INCLUDE_DEFAULT_LANG_HELP: "Isto precederá todos os URL no idioma predeterminado co idioma predeterminado, i.e. '/en/blog/publicacion'"
|
||||
INCLUDE_DEFAULT_LANG_FILE_EXTENSION: "Incluír o idioma predeterminado na extensión de ficheiro"
|
||||
INCLUDE_DEFAULT_LANG_HELP_FILE_EXTENSION: "Se está activado, o idioma predeterminado será anterior á extensión do ficheiro (e.x. `.gl.md`). Desactívao para manter o idioma predeterminado usando a extensión de ficheiro `.md`."
|
||||
PAGES_FALLBACK_ONLY: "Soamente as páxinas inversas"
|
||||
PAGES_FALLBACK_ONLY_HELP: "Soamente 'inversa' para atopar o contido da páxina nos idiomas dispoñíbeis, o comportamento predeterminado é presentar calquera idioma se o idioma activo falta"
|
||||
ALLOW_URL_TAXONOMY_FILTERS: "Filtros da taxonomía de URL"
|
||||
@@ -579,6 +592,7 @@ PLUGIN_ADMIN:
|
||||
FRONTMATTER_PROCESS_TWIG_HELP: "Ao activalo, pode utilizar as variábeis de configuración do Twig na páxina de texto preliminar"
|
||||
FRONTMATTER_IGNORE_FIELDS: "Ignorar os campos de texto preliminar"
|
||||
FRONTMATTER_IGNORE_FIELDS_HELP: "Certos campos de texto preliminar poden conter Twig pero non deberían ser procesados, tales como 'formularios'"
|
||||
FRONTMATTER_IGNORE_FIELDS_PLACEHOLDER: "p.ex. formularios"
|
||||
PACKAGE_X_INSTALLED_SUCCESSFULLY: "O paquete %s instalouse correctamente"
|
||||
ORDERING_DISABLED_BECAUSE_PARENT_SETTING_ORDER: "A orde de configuración vén da superior, a ordenación está desactivada"
|
||||
ORDERING_DISABLED_BECAUSE_PAGE_NOT_VISIBLE: "A páxina non é visíbel, a ordenación está desactivada"
|
||||
@@ -628,6 +642,8 @@ PLUGIN_ADMIN:
|
||||
REDIS_PORT: "Porto de Redis"
|
||||
REDIS_PORT_HELP: "O porto do servidor Redis"
|
||||
REDIS_PASSWORD: "Contrasinal/secreto de Redis"
|
||||
REDIS_DATABASE: "ID de Base de Datos Redis"
|
||||
REDIS_DATABASE_HELP: "O ID da Base de Datos de Instancias de Redis"
|
||||
ALL: "Todos"
|
||||
FROM: "desde"
|
||||
TO: "ata"
|
||||
@@ -638,6 +654,8 @@ PLUGIN_ADMIN:
|
||||
FORCE_SSL_HELP: "Forzar globalmente SSL, se está activado cando se accede a través de HTTP, o Grav devolver unha redirección á páxina HTTPS"
|
||||
NEWS_FEED: "Canle de novas"
|
||||
EXTERNAL_URL: "URL externo"
|
||||
SESSION_SAMESITE: "O atributo SameSite da sesión"
|
||||
SESSION_SAMESITE_HELP: "Lax|Strict|None. Vexa https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite para máis información"
|
||||
CUSTOM_BASE_URL: "URL de base personalizado"
|
||||
CUSTOM_BASE_URL_HELP: "Utilíceo se quere reescribir o dominio do sitio ou utilizar un subcartafol diferente ao utilizado polo Grav. Exemplo: http://localhost"
|
||||
FILEUPLOAD_PREVENT_SELF: 'Non se pode utilizar "%s" fóra das páxinas'
|
||||
@@ -744,8 +762,11 @@ PLUGIN_ADMIN:
|
||||
SCHEDULER: "Programador"
|
||||
SCHEDULER_INSTALL_INSTRUCTIONS: "Instalar instrucións"
|
||||
SCHEDULER_INSTALLED_READY: "Instalado e listo"
|
||||
SCHEDULER_CRON_NA: "Cron Non Dispoñible para o usuario: <b>%s</b>"
|
||||
SCHEDULER_NOT_ENABLED: "Non habilitado para o usuario: <b>%s</b>"
|
||||
SCHEDULER_SETUP: "Configuración do programador"
|
||||
SCHEDULER_INSTRUCTIONS: "O <b>Programador do Grav</b> permite crear e programar tarefas personalizadas. Tamén fornece un método para os complementos do Grav que integra programaticamente e dinamicamente engadir tarefas que se executarán periodicamente."
|
||||
SCHEDULER_POST_INSTRUCTIONS: "Para habilitar a funcionalidade do programador, debes engadir o <b>Grav Scheduler</b> ao ficheiro crontab do teu sistema para o usuario <b>%s</b>. Executa o comando anterior desde o terminal para engadilo automaticamente. Unha vez gardada, actualiza esta páxina para ver o estado."
|
||||
SCHEDULER_JOBS: "Tarefas do programador pesonalizadas"
|
||||
SCHEDULER_STATUS: "Status do programador"
|
||||
SCHEDULER_RUNAT: "Executar en"
|
||||
@@ -756,6 +777,7 @@ PLUGIN_ADMIN:
|
||||
SCHEDULER_OUTPUT_TYPE_HELP: "Ben engade o mesmo ficheiro en cada execución ou sobrescribe o ficheiro con cada execución"
|
||||
SCHEDULER_EMAIL: "Correo"
|
||||
SCHEDULER_EMAIL_HELP: "Correo ao que enviar a saída. NOTA: require que se defina o ficheiro de saída"
|
||||
SCHEDULER_WARNING: "O planificador usa o sistema crontab do seu sistema para executar comandos. Debería empregalo só se é un usuario avanzado e sabe o que está a facer. A mala configuración ou o abuso poden provocar vulnerabilidades na seguridade."
|
||||
SECURITY: "Seguranza"
|
||||
XSS_SECURITY: "XSS Seguranza por contido"
|
||||
XSS_WHITELIST_PERMISSIONS: "Permisos da lista branca"
|
||||
@@ -793,6 +815,45 @@ PLUGIN_ADMIN:
|
||||
BACKUPS_PROFILE_SCHEDULE_AT: "Executar a tarefa programada"
|
||||
COMMAND: "Orde"
|
||||
EXTRA_ARGUMENTS: "Argumentos extra"
|
||||
DEFAULT_LANG: "Anular o idioma predeterminado"
|
||||
DEFAULT_LANG_HELP: "O predeterminado é o primeiro idioma compatible. Isto pódese anular configurando esta opción, pero debe ser un dos idiomas compatibles"
|
||||
DEBUGGER_PROVIDER: "Provedor de depurador"
|
||||
DEBUGGER_PROVIDER_HELP: "Por defecto é a barra de depuración de PHP, pero a extensión do navegador Clockwork proporciona un enfoque menos intrusivo"
|
||||
DEBUGGER_DEBUGBAR: "Barra de depuración de PHP"
|
||||
DEBUGGER_CLOCKWORK: "Extensión do navegador Clockwork"
|
||||
PAGE_ROUTE_NOT_FOUND: "Non se atopou a ruta da páxina"
|
||||
PAGE_ROUTE_FOUND: "Ruta da páxina atopada"
|
||||
NO_ROUTE_PROVIDED: "Non se proporcionou ningunha ruta"
|
||||
CONTENT_LANGUAGE_FALLBACKS: "Idioma alternativo do contido"
|
||||
CONTENT_LANGUAGE_FALLBACKS_HELP: "De xeito predeterminado, se o contido non está traducido, Grav amosará o contido no idioma predeterminado. Use esta configuración para anular ese comportamento por idioma."
|
||||
CONTENT_LANGUAGE_FALLBACK: "Idiomas alternativos"
|
||||
CONTENT_LANGUAGE_FALLBACK_HELP: "Insira unha lista de códigos de idioma. Teña en conta que se omite o código de idioma predeterminado, non se usará."
|
||||
CONTENT_FALLBACK_LANGUAGE_HELP: "Especifique o código de idioma que desexa personalizar."
|
||||
EXPERIMENTAL: "Experimental"
|
||||
PAGES_TYPE: "Tipo de páxina Frontend"
|
||||
PAGES_TYPE_HELP: "Esta opción habilita as páxinas Flex Object no front-end. As páxinas Flex de administración requiren un complemento Flex Objects"
|
||||
ACCOUNTS_TYPE: "Tipo de contas"
|
||||
REGULAR: "Regular"
|
||||
FILE: "Arquivo"
|
||||
SANITIZE_SVG: "Sanear SVG"
|
||||
SANITIZE_SVG_HELP: "Elimina calquera código XSS do SVG"
|
||||
ACCOUNTS: "Contas"
|
||||
USER_ACCOUNTS: "Contas de Usuario"
|
||||
USER_GROUPS: "Grupos de usuarios"
|
||||
GROUP_NAME: "Nome do grupo"
|
||||
DISPLAY_NAME: "Nome de Visualización"
|
||||
ICON: "Ícona"
|
||||
ACCESS: "Acceso"
|
||||
NO_ACCESS: "Sen Acceso"
|
||||
SUPER_USER: "Super Usuario"
|
||||
ALLOWED: "Permitido"
|
||||
DENIED: "Denegado"
|
||||
MODULE: "Módulo"
|
||||
NON_MODULE: "Non Módulo"
|
||||
ADD_MODULE: "Engadir Módulo"
|
||||
ACCESS_SITE: "Sitio Web"
|
||||
ACCESS_SITE_LOGIN: "Ingresar no Sitio"
|
||||
ACCESS_ADMIN: "Administrador"
|
||||
CONFIGURATION: "Configuración"
|
||||
ADMIN_CACHING: "Activar o cacheo da administración"
|
||||
ADMIN_CACHING_HELP: "O cacheo da administración pode controlarse independentemente respecto do front-end"
|
||||
@@ -803,3 +864,4 @@ PLUGIN_ADMIN:
|
||||
DASHBOARD: "Panel de control"
|
||||
NOTIFICATIONS: "Notificacións"
|
||||
PAGEMEDIA_RESIZER: "> A seguinte configuración aplícase ás imaxes cargadas a través da páxina de medios. Redimensionar largo / alto reducirá automaticamente proporcionalmente unha imaxe a nivel máis baixo se excede os límites definidos na configuración. Os valores de resolución mínima e máxima define os límites das imaxes cargadas. Defínase os campos como 0 para evitar calquera manipulación."
|
||||
IMAGES_CLS_AUTO_SIZES: "Habilitar Tamaños Automáticos"
|
||||
|
||||
@@ -46,11 +46,13 @@ PLUGIN_ADMIN:
|
||||
CLOSE: "Sluiten"
|
||||
CANCEL: "Annuleer"
|
||||
CONTINUE: "Verder"
|
||||
CONFIRM: "Bevestig"
|
||||
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "Bevestiging vereist"
|
||||
MODAL_CHANGED_DETECTED_TITLE: "Wijzigingen gedetecteerd"
|
||||
MODAL_CHANGED_DETECTED_DESC: "Je hebt niet bewaarde wijzigingen. Wil je doorgaan zonder ze te op te slaan?"
|
||||
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "Bevestiging vereist"
|
||||
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Weet je zeker dat je dit bestand wilt verwijderen? Dit kan niet ongedaan worden gemaakt."
|
||||
MODAL_UPDATE_GRAV_CONFIRMATION_REQUIRED_DESC: "U staat op het punt Grav te upgraden naar de nieuwste versie die beschikbaar is. Wilt u doorgaan?"
|
||||
ADD_FILTERS: "Filters toevoegen"
|
||||
SEARCH_PAGES: "Pagina's zoeken"
|
||||
VERSION: "Versie"
|
||||
@@ -68,6 +70,7 @@ PLUGIN_ADMIN:
|
||||
LICENSE: "Licentie"
|
||||
DESCRIPTION: "Omschrijving"
|
||||
README: "Leesmij"
|
||||
DOCS: "Documentatie"
|
||||
REMOVE_THEME: "Verwijder Thema"
|
||||
INSTALL_THEME: "Installeer Thema"
|
||||
THEME: "Thema"
|
||||
@@ -332,6 +335,7 @@ PLUGIN_ADMIN:
|
||||
LANGUAGES: "Talen"
|
||||
SUPPORTED: "Ondersteund"
|
||||
SUPPORTED_HELP: "Door komma's gescheiden lijst van tweeletterige taalcodes (bijvoorbeeld 'en,fr,de')"
|
||||
SUPPORTED_PLACEHOLDER: "bijv. en, fr"
|
||||
TRANSLATIONS_FALLBACK: "Noodoplossing vertalingen"
|
||||
TRANSLATIONS_FALLBACK_HELP: "Terugvallen op ondersteunde vertaling als de actieve taal niet bestaat"
|
||||
ACTIVE_LANGUAGE_IN_SESSION: "Actieve taal in sessie"
|
||||
@@ -431,6 +435,7 @@ PLUGIN_ADMIN:
|
||||
CACHE_ALL_HELP: "Verwerk alle afbeeldingen met het Grav cache systeem, zelfs als er geen aanpassingen aan gebeurd zijn"
|
||||
IMAGES_DEBUG: "Debug watermerk op afbeelding"
|
||||
IMAGES_DEBUG_HELP: "Bedek de afbeeldingen met een laag die de pixel diepte van de afbeelding weergeeft wanneer er met bijvoorbeeld retina gewerkt wordt"
|
||||
IMAGES_LOADING: "Gedrag laden van afbeeldingen"
|
||||
IMAGES_SEOFRIENDLY: "SEO-Friendly Afbeeldingnamen"
|
||||
IMAGES_SEOFRIENDLY_HELP: "Wanneer ingeschakeld, wordt de afbeeldingsnaam eerst weergegeven, dan een kleinere hash om de verwerkte bewerkingen weer te geven"
|
||||
UPLOAD_LIMIT: "Bestand upload limiet"
|
||||
@@ -491,6 +496,8 @@ PLUGIN_ADMIN:
|
||||
PLUGIN_STATUS: "Plugin status"
|
||||
INCLUDE_DEFAULT_LANG: "Standaardtaal meerekenen"
|
||||
INCLUDE_DEFAULT_LANG_HELP: "Dit zal aan alle URLs in de standaardtaal, de standaardtaal toevoegen. bvb. 'nl/blog/mijn-artikel'"
|
||||
INCLUDE_DEFAULT_LANG_FILE_EXTENSION: "Standaard taal opnemen in de bestandsextensie"
|
||||
INCLUDE_DEFAULT_LANG_HELP_FILE_EXTENSION: "Indien ingeschakeld, zal het de standaard taal aan de bestandsextensie toevoegen (bijv. `.en.md`). Schakel deze uit om de standaardtaal te behouden met `.md` bestandsextensie."
|
||||
PAGES_FALLBACK_ONLY: "Alleen pagina fallback"
|
||||
PAGES_FALLBACK_ONLY_HELP: "Alleen 'fallback' om pagina-inhoud te vinden in ondersteunde talen, de standaardinstelling is om elke taal weer te geven die gevonden wordt als de actieve taal ontbreekt"
|
||||
ALLOW_URL_TAXONOMY_FILTERS: "URL taxonomie filters"
|
||||
@@ -579,6 +586,7 @@ PLUGIN_ADMIN:
|
||||
FRONTMATTER_PROCESS_TWIG_HELP: "Wanneer ingeschakeld, kunt u Twig config variabelen gebruiken in Frontmatter op de pagina"
|
||||
FRONTMATTER_IGNORE_FIELDS: "Negeer Frontmatter velden"
|
||||
FRONTMATTER_IGNORE_FIELDS_HELP: "Bepaalde Frontmatter velden kunnen Twig bevatten maar moeten niet verwerkt worden, zoals 'forms'"
|
||||
FRONTMATTER_IGNORE_FIELDS_PLACEHOLDER: "bijv. formulieren"
|
||||
PACKAGE_X_INSTALLED_SUCCESSFULLY: "Pakket %s succesvol geïnstalleerd"
|
||||
ORDERING_DISABLED_BECAUSE_PARENT_SETTING_ORDER: "Volgorde bepaald door bovenliggende pagina, volgorde uitgeschakeld"
|
||||
ORDERING_DISABLED_BECAUSE_PAGE_NOT_VISIBLE: "Pagina is niet zichtbaar, sorteren gedeactiveerd"
|
||||
@@ -744,6 +752,8 @@ PLUGIN_ADMIN:
|
||||
SCHEDULER: "Taakplanner"
|
||||
SCHEDULER_INSTALL_INSTRUCTIONS: "Installeerinstructies"
|
||||
SCHEDULER_INSTALLED_READY: "Geïnstalleerd en klaar"
|
||||
SCHEDULER_CRON_NA: "Cron niet beschikbaar voor gebruiker: <b>%s</b>"
|
||||
SCHEDULER_NOT_ENABLED: "Niet geactiveerd voor gebruiker: <b>%s</b>"
|
||||
SCHEDULER_SETUP: "Taakplanner Setup"
|
||||
SCHEDULER_INSTRUCTIONS: "Met de <b>Grav Scheduler</b> kunt u aangepaste taken maken en inplannen. Het biedt ook een methode voor Grav plugins om programmatisch en dynamisch toe te voegen aan taken die periodiek uitgevoerd moeten worden."
|
||||
SCHEDULER_JOBS: "Custom plannertaken"
|
||||
@@ -793,6 +803,44 @@ PLUGIN_ADMIN:
|
||||
BACKUPS_PROFILE_SCHEDULE_AT: "Voer geplande taak uit"
|
||||
COMMAND: "Opdracht"
|
||||
EXTRA_ARGUMENTS: "Extra argumenten"
|
||||
DEFAULT_LANG: "Standaardtaal veranderen"
|
||||
PAGE_ROUTE_NOT_FOUND: "Pagina niet gevonden"
|
||||
PAGE_ROUTE_FOUND: "Pagina gevonden"
|
||||
NO_ROUTE_PROVIDED: "Geen route opgegeven."
|
||||
CONTENT_LANGUAGE_FALLBACK: "Terugvallen op talen"
|
||||
EXPERIMENTAL: "Experimenteel"
|
||||
ACCOUNTS_TYPE: "Account Type"
|
||||
ACCOUNTS_STORAGE: "Account opslag"
|
||||
REGULAR: "Standaard"
|
||||
FILE: "Bestand"
|
||||
SANITIZE_SVG_HELP: "Verwijdert elke XSS code van SVG"
|
||||
ACCOUNTS: "Accounts"
|
||||
USER_ACCOUNTS: "Gebruikersaccounts"
|
||||
PAGE_AUTHORS: "Pagina auteurs"
|
||||
PAGE_GROUPS: "Pagina groepen"
|
||||
READ: "Lezen"
|
||||
PUBLISH: "Publiceren"
|
||||
ACCESS_SITE: "Website"
|
||||
ACCESS_SITE_LOGIN: "Inloggen"
|
||||
ACCESS_ADMIN: "Beheer"
|
||||
ACCESS_ADMIN_LOGIN: "Inloggen op Admin"
|
||||
ACCESS_ADMIN_SUPER: "Super user"
|
||||
ACCESS_ADMIN_CACHE: "Cache legen"
|
||||
ACCESS_ADMIN_CONFIGURATION: "Instellingen"
|
||||
ACCESS_ADMIN_CONFIGURATION_SYSTEM: "Systeemconfiguratie beheren"
|
||||
ACCESS_ADMIN_CONFIGURATION_SITE: "Siteconfiguratie beheren"
|
||||
ACCESS_ADMIN_CONFIGURATION_MEDIA: "Mediaconfiguratie beheren"
|
||||
ACCESS_ADMIN_CONFIGURATION_INFO: "Server Informatie bekijken"
|
||||
ACCESS_ADMIN_SETTINGS: "Instellingen"
|
||||
ACCESS_ADMIN_PAGES: "Beheer pagina's"
|
||||
ACCESS_ADMIN_MAINTENANCE: "Onderhoud website"
|
||||
ACCESS_ADMIN_STATISTICS: "Website statistieken"
|
||||
ACCESS_ADMIN_PLUGINS: "Plugins beheren"
|
||||
ACCESS_ADMIN_THEMES: "Thema's beheren"
|
||||
ACCESS_ADMIN_TOOLS: "Toegang tot tools"
|
||||
ACCESS_ADMIN_USERS: "Beheer gebruikers"
|
||||
USERS: "Gebruikers"
|
||||
ACL: "Toegangsbeheer"
|
||||
CONFIGURATION: "Instellingen"
|
||||
ADMIN_CACHING: "Admin Caching inschakelen"
|
||||
ADMIN_CACHING_HELP: "Caching van de admin kan onafhankelijk van de front-end site beheerd worden"
|
||||
|
||||
10
presets.yaml
10
presets.yaml
@@ -26,6 +26,7 @@ default:
|
||||
content-header: '#414147'
|
||||
content-tabs-bg: '#e6e6e6'
|
||||
content-tabs-text: '#808080'
|
||||
content-highlight: '#ffffd7'
|
||||
button-bg: '#0090D9'
|
||||
button-text: '#ffffff'
|
||||
notice-bg: '#06A599'
|
||||
@@ -62,6 +63,7 @@ original:
|
||||
content-header: '#314d5b'
|
||||
content-tabs-bg: '#D4D4D4'
|
||||
content-tabs-text: '#737c81'
|
||||
content-highlight: '#ffffd7'
|
||||
button-bg: '#41bea8'
|
||||
button-text: '#ffffff'
|
||||
notice-bg: '#00a6cf'
|
||||
@@ -98,6 +100,7 @@ modern:
|
||||
content-header: '#636468'
|
||||
content-tabs-bg: '#f0f0f0'
|
||||
content-tabs-text: '#929699'
|
||||
content-highlight: '#ffffd7'
|
||||
button-bg: '#3EA7E6'
|
||||
button-text: '#ffffff'
|
||||
notice-bg: '#3EA7E6'
|
||||
@@ -134,6 +137,7 @@ modern-dark:
|
||||
content-header: '#b4bed6'
|
||||
content-tabs-bg: '#4a5873'
|
||||
content-tabs-text: '#d1ddf0'
|
||||
content-highlight: '#ffffd7'
|
||||
button-bg: '#3EA7E6'
|
||||
button-text: '#ffffff'
|
||||
notice-bg: '#3EA7E6'
|
||||
@@ -170,6 +174,7 @@ modern-lite:
|
||||
content-header: '#636468'
|
||||
content-tabs-bg: '#f0f0f0'
|
||||
content-tabs-text: '#929699'
|
||||
content-highlight: '#ffffd7'
|
||||
button-bg: '#3EA7E6'
|
||||
button-text: '#ffffff'
|
||||
notice-bg: '#f24d77'
|
||||
@@ -206,6 +211,7 @@ one-dark:
|
||||
content-header: '#727C8C'
|
||||
content-tabs-bg: '#25272E'
|
||||
content-tabs-text: '#9ea5b3'
|
||||
content-highlight: '#ffffd7'
|
||||
button-bg: '#383F4C'
|
||||
button-text: '#d8dadf'
|
||||
notice-bg: '#18a4ba'
|
||||
@@ -238,6 +244,7 @@ firewatch-light:
|
||||
content-header: '#635e53'
|
||||
content-tabs-bg: '#D6D3CC'
|
||||
content-tabs-text: '#6f6a5e'
|
||||
content-highlight: '#ffffd7'
|
||||
button-bg: '#075289'
|
||||
button-text: '#faf8f5'
|
||||
notice-bg: '#718ECD'
|
||||
@@ -278,6 +285,7 @@ remedy:
|
||||
content-header: '#F9E7C4'
|
||||
content-tabs-bg: '#272625'
|
||||
content-tabs-text: '#938977'
|
||||
content-highlight: '#ffffd7'
|
||||
button-bg: '#5a7185'
|
||||
button-text: '#f9e7c4'
|
||||
notice-bg: '#5a7185'
|
||||
@@ -314,6 +322,7 @@ ocean:
|
||||
content-header: '#636468'
|
||||
content-tabs-bg: '#eef6ff'
|
||||
content-tabs-text: '#41627a'
|
||||
content-highlight: '#ffffd7'
|
||||
button-bg: '#027FD4'
|
||||
button-text: '#ffffff'
|
||||
notice-bg: '#8e5b8f'
|
||||
@@ -350,6 +359,7 @@ cobalt2:
|
||||
content-header: '#ffc600'
|
||||
content-tabs-bg: '#173043'
|
||||
content-tabs-text: '#acb8c5'
|
||||
content-highlight: '#ffffd7'
|
||||
button-bg: '#0476e0'
|
||||
button-text: '#ffffff'
|
||||
notice-bg: '#0476e0'
|
||||
|
||||
20
themes/grav/app/forms/fields/folder.js
Normal file
20
themes/grav/app/forms/fields/folder.js
Normal file
@@ -0,0 +1,20 @@
|
||||
import $ from 'jquery';
|
||||
|
||||
const Regenerate = (field = '[name="data[folder]"]') => {
|
||||
const element = $(field);
|
||||
const title = $('[name="data[header][title]"]');
|
||||
const slug = $.slugify(title.val(), {custom: {"'": ''}});
|
||||
|
||||
element.addClass('highlight').val(slug);
|
||||
|
||||
setTimeout(() => element.removeClass('highlight'), 500);
|
||||
};
|
||||
|
||||
$(document).on('click', '[data-regenerate]', (event) => {
|
||||
const target = $(event.currentTarget);
|
||||
const field = $(target.data('regenerate'));
|
||||
|
||||
Regenerate(field);
|
||||
});
|
||||
|
||||
export default Regenerate;
|
||||
@@ -6,6 +6,7 @@ import DateTimeField, { Instance as DateTimeFieldInstance } from './datetime';
|
||||
import EditorField, { Instance as EditorFieldInstance } from './editor';
|
||||
import ColorpickerField, { Instance as ColorpickerFieldInstance } from './colorpicker';
|
||||
import FilesField, { Instance as FilesFieldInstance } from './files';
|
||||
import FolderFieldInstance from './folder';
|
||||
import SelectUniqueField, { Instance as SelectUniqueInstance } from './selectunique';
|
||||
import IconpickerField, { Instance as IconpickerInstance } from './iconpicker';
|
||||
import CronField, { Instance as CronFieldInstance } from './cron';
|
||||
@@ -52,6 +53,9 @@ export default {
|
||||
FilesField,
|
||||
Instance: FilesFieldInstance
|
||||
},
|
||||
FolderField: {
|
||||
Regenerate: FolderFieldInstance
|
||||
},
|
||||
SelectUniqueField: {
|
||||
SelectUniqueField,
|
||||
Instance: SelectUniqueInstance
|
||||
|
||||
@@ -12,7 +12,7 @@ const DOMBehaviors = {
|
||||
},
|
||||
|
||||
preventUnload() {
|
||||
let selector = '[name="task"][value^="save"], [data-delete-action]';
|
||||
let selector = '[name="task"][value^="save"], [data-delete-action], [data-flex-safe-action]';
|
||||
if ($._data(window, 'events') && ($._data(window, 'events').beforeunload || []).filter((event) => event.namespace === '_grav').length) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -4,8 +4,8 @@ import request from '../../utils/request';
|
||||
import { config } from 'grav-config';
|
||||
|
||||
let custom = false;
|
||||
let folder = $('[data-remodal-id="modal"] input[name="data[folder]"], [data-remodal-id="module"] input[name="data[folder]"]');
|
||||
let title = $('[data-remodal-id="modal"] input[name="data[title]"], [data-remodal-id="module"] input[name="data[title]"]');
|
||||
let folder = $('[data-remodal-id="modal"] input[name="data[folder]"], [data-remodal-id="module"] input[name="data[folder]"], [data-remodal-id="modal-page-copy"] input[name="data[folder]"]');
|
||||
let title = $('[data-remodal-id="modal"] input[name="data[title]"], [data-remodal-id="module"] input[name="data[title]"], [data-remodal-id="modal-page-copy"] input[name="data[title]"]');
|
||||
let getFields = (type, target) => {
|
||||
target = $(target);
|
||||
let query = `[data-remodal-id="${target.closest('[data-remodal-id]').data('remodal-id')}"]`;
|
||||
|
||||
@@ -108,7 +108,9 @@ export default class PageMedia extends FilesField {
|
||||
|
||||
onDropzoneComplete(file) {
|
||||
super.onDropzoneComplete(file);
|
||||
this.sortable.options.onSort();
|
||||
if (this.sortable) {
|
||||
this.sortable.options.onSort();
|
||||
}
|
||||
|
||||
// accepted
|
||||
$('.dz-preview').prop('draggable', 'true');
|
||||
@@ -116,7 +118,9 @@ export default class PageMedia extends FilesField {
|
||||
|
||||
onDropzoneRemovedFile(file, ...extra) {
|
||||
super.onDropzoneRemovedFile(file, ...extra);
|
||||
this.sortable.options.onSort();
|
||||
if (this.sortable) {
|
||||
this.sortable.options.onSort();
|
||||
}
|
||||
}
|
||||
|
||||
attachDragDrop() {
|
||||
|
||||
7
themes/grav/css-compiled/preset.css
vendored
7
themes/grav/css-compiled/preset.css
vendored
@@ -292,10 +292,6 @@ tr td.gpm-details {
|
||||
#admin-main .admin-block {
|
||||
background: #ffffff;
|
||||
color: #6f7b8a; }
|
||||
#admin-main .admin-block a:not(.button) {
|
||||
color: #0090D9; }
|
||||
#admin-main .admin-block a:not(.button):hover {
|
||||
color: #007fc0; }
|
||||
#admin-main .admin-block h1 {
|
||||
color: #414147;
|
||||
border-bottom: 1px solid #f7f7f7; }
|
||||
@@ -438,6 +434,9 @@ form .form-input-wrapper .form-input-addon {
|
||||
form .form-input-wrapper .form-input-addon.copy-to-clipboard:hover {
|
||||
background: #007fc0; }
|
||||
|
||||
form .form-input-wrapper input[name="data[folder]"].highlight {
|
||||
background-color: #ffffd7; }
|
||||
|
||||
form .selectize-control.single.plugin-remove_button .selectize-input .item, form .selectize-control.single.plugin-remove_button .selectize-input .remove-single,
|
||||
form .selectize-control.multi .selectize-input .item,
|
||||
form .selectize-control.multi .selectize-input .remove-single {
|
||||
|
||||
File diff suppressed because one or more lines are too long
7
themes/grav/css-compiled/template.css
vendored
7
themes/grav/css-compiled/template.css
vendored
@@ -961,9 +961,13 @@ form .form-input-addon-wrapper {
|
||||
align-items: center; }
|
||||
form .form-input-addon-wrapper .form-input-addon.copy-to-clipboard {
|
||||
cursor: pointer; }
|
||||
form .form-input-addon-wrapper .form-input-addon[data-regenerate] {
|
||||
cursor: pointer; }
|
||||
form .form-input-addon-wrapper input {
|
||||
height: 35px;
|
||||
display: table-cell; }
|
||||
form .form-input-addon-wrapper input[name="data[folder]"] {
|
||||
transition: background-color .5s ease; }
|
||||
form .form-input-addon-wrapper .form-input-prepend {
|
||||
border-radius: 4px 0 0 4px;
|
||||
border-right-width: 0 !important; }
|
||||
@@ -3780,6 +3784,9 @@ html.remodal-is-locked {
|
||||
.admin-pages .form-tabs:first-child {
|
||||
margin-top: -1rem; }
|
||||
|
||||
.admin-pages .form-tabs.side-tabs .tabs-nav {
|
||||
margin-right: 0 !important; }
|
||||
|
||||
.admin-pages .form-tabs .tabs-nav {
|
||||
margin-right: 180px; }
|
||||
@media only all and (max-width: 47.938em) {
|
||||
|
||||
File diff suppressed because one or more lines are too long
2
themes/grav/css/fork-awesome.min.css
vendored
2
themes/grav/css/fork-awesome.min.css
vendored
File diff suppressed because one or more lines are too long
35
themes/grav/gulpfile.babel.js
vendored
35
themes/grav/gulpfile.babel.js
vendored
@@ -1,35 +0,0 @@
|
||||
import gulp from 'gulp';
|
||||
import sass from 'gulp-sass';
|
||||
import sourcemaps from 'gulp-sourcemaps';
|
||||
import cleanCSS from 'gulp-clean-css';
|
||||
|
||||
const paths = {
|
||||
styles: {
|
||||
src: 'scss/**/*.scss',
|
||||
dest: 'css-compiled'
|
||||
}
|
||||
};
|
||||
|
||||
export function styles() {
|
||||
return gulp.src(paths.styles.src)
|
||||
.pipe(sourcemaps.init())
|
||||
.pipe(sass({ outputStyle: 'compressed' }))
|
||||
.on('error', sass.logError)
|
||||
.pipe(cleanCSS())
|
||||
.pipe(sourcemaps.write())
|
||||
.pipe(gulp.dest(paths.styles.dest));
|
||||
}
|
||||
|
||||
export function css() {
|
||||
return styles();
|
||||
}
|
||||
|
||||
function watchFiles() {
|
||||
gulp.watch(paths.styles.src, styles);
|
||||
}
|
||||
|
||||
export { watchFiles as watch };
|
||||
|
||||
const build = gulp.series(styles);
|
||||
|
||||
export default build;
|
||||
394
themes/grav/js/admin.min.js
vendored
394
themes/grav/js/admin.min.js
vendored
File diff suppressed because one or more lines are too long
1876
themes/grav/js/vendor.min.js
vendored
1876
themes/grav/js/vendor.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -7,66 +7,63 @@
|
||||
"scripts": {
|
||||
"watch": "webpack --mode development --watch --progress --color --mode development --config webpack.conf.js",
|
||||
"js": "webpack --mode production --config webpack.conf.js",
|
||||
"css": "gulp css",
|
||||
"watch-js": "webpack --mode development --watch --progress --color --mode development --config webpack.conf.js",
|
||||
"watch-css": "gulp watch-css"
|
||||
"watch-js": "webpack --mode development --watch --progress --color --mode development --config webpack.conf.js"
|
||||
},
|
||||
"author": "Trilby Media, LLC",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"chartist": "0.11.4",
|
||||
"codemirror": "^5.58.3",
|
||||
"debounce": "^1.2.0",
|
||||
"dropzone": "^5.7.2",
|
||||
"eonasdan-bootstrap-datetimepicker": "^4.17.47",
|
||||
"es6-map": "^0.1.5",
|
||||
"buffer": "^6.0.3",
|
||||
"events": "^3.2.0",
|
||||
"chartist": "0.11.4",
|
||||
"codemirror": "^5.61.0",
|
||||
"debounce": "^1.2.1",
|
||||
"dropzone": "^5.9.2",
|
||||
"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",
|
||||
"immutablediff": "^0.4.4",
|
||||
"js-yaml": "^3.14.1",
|
||||
"js-yaml": "^4.1.0",
|
||||
"mout": "^1.2.2",
|
||||
"popper.js": "^1.14.4",
|
||||
"rangetouch": "^2.0.1",
|
||||
"remodal": "^1.1.1",
|
||||
"selectize": "^0.12.6",
|
||||
"simplebar": "^5.3.0",
|
||||
"sortablejs": "^1.10.1",
|
||||
"sortablejs": "^1.13.0",
|
||||
"speakingurl": "^14.0.1",
|
||||
"toastr": "^2.1.4",
|
||||
"watchjs": "0.0.0",
|
||||
"whatwg-fetch": "^3.5.0",
|
||||
"whatwg-fetch": "^3.6.2",
|
||||
"yarn": "^1.22.10"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.10",
|
||||
"@babel/plugin-proposal-class-properties": "^7.12.1",
|
||||
"@babel/plugin-proposal-json-strings": "^7.12.1",
|
||||
"@babel/plugin-proposal-object-rest-spread": "^7.12.1",
|
||||
"@babel/core": "^7.13.16",
|
||||
"@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/plugin-syntax-dynamic-import": "^7.8.3",
|
||||
"@babel/plugin-syntax-import-meta": "^7.10.4",
|
||||
"@babel/polyfill": "^7.12.1",
|
||||
"@babel/preset-env": "^7.12.10",
|
||||
"@babel/register": "^7.12.10",
|
||||
"@babel/preset-env": "^7.13.15",
|
||||
"@babel/register": "^7.13.16",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"babel-loader": "^8.2.2",
|
||||
"css-loader": "^5.0.1",
|
||||
"eslint": "^7.15.0",
|
||||
"css-loader": "^5.2.4",
|
||||
"eslint": "^7.24.0",
|
||||
"eslint-loader": "^4.0.2",
|
||||
"exports-loader": "^1.1.1",
|
||||
"gulp": "^4.0.2",
|
||||
"gulp-babel": "^8.0.0",
|
||||
"gulp-clean-css": "^4.3.0",
|
||||
"gulp-sass": "^4.1.0",
|
||||
"gulp-sourcemaps": "^3.0.0",
|
||||
"imports-loader": "^1.2.0",
|
||||
"exports-loader": "^2.0.0",
|
||||
"imports-loader": "^2.0.0",
|
||||
"json-loader": "^0.5.7",
|
||||
"minimist": "^1.2.5",
|
||||
"style-loader": "^2.0.0",
|
||||
"uglifyjs-webpack-plugin": "^2.2.0",
|
||||
"webpack": "^5.10.0",
|
||||
"webpack-cli": "^4.2.0"
|
||||
"terser-webpack-plugin": "^5.1.1",
|
||||
"webpack": "^5.34.0",
|
||||
"webpack-cli": "^4.6.0"
|
||||
},
|
||||
"resolutions": {
|
||||
"minimist": "^1.2.5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ $content-link2: #da4b46 !default;
|
||||
$content-header: #414147 !default;
|
||||
$content-tabs-bg: #e3e3e3 !default;
|
||||
$content-tabs-text: #808080 !default;
|
||||
$content-highlight: #ffffd7 !default;
|
||||
|
||||
// Buttons
|
||||
$button-bg: #0090D9 !default;
|
||||
@@ -523,13 +524,6 @@ tr {
|
||||
background: $content-bg;
|
||||
color: $content-text;
|
||||
|
||||
a:not(.button) {
|
||||
color: $content-link;
|
||||
&:hover {
|
||||
color: darken($content-link, 5%);
|
||||
}
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: $content-header;
|
||||
border-bottom: 1px solid $underline;
|
||||
@@ -779,6 +773,10 @@ form {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
input[name="data[folder]"].highlight {
|
||||
background-color: $content-highlight;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -97,10 +97,19 @@ form {
|
||||
&.copy-to-clipboard {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
&[data-regenerate] {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
input {
|
||||
height: 35px;
|
||||
display: table-cell;
|
||||
|
||||
&[name="data[folder]"] {
|
||||
transition: background-color .5s ease;
|
||||
}
|
||||
}
|
||||
.form-input-prepend {
|
||||
border-radius: 4px 0 0 4px;
|
||||
|
||||
@@ -6,7 +6,14 @@ $tab-label-height: 50px;
|
||||
.admin-pages &:first-child {
|
||||
margin-top: -1rem;
|
||||
}
|
||||
|
||||
.admin-pages & {
|
||||
&.side-tabs {
|
||||
.tabs-nav {
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.tabs-nav {
|
||||
margin-right: 180px;
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
{% extends 'partials/base.html.twig' %}
|
||||
|
||||
{% set configurations = admin.configurations(true) %}
|
||||
{% set config_slug = uri.basename %}
|
||||
{% if config_slug == 'config' %}
|
||||
{% set config_slug = admin.route %}
|
||||
{% if not config_slug %}
|
||||
{% set config_slug = configurations|first %}
|
||||
{% do admin.redirect('config/' ~ config_slug, 302) %}
|
||||
{% endif %}
|
||||
{% set isInfo = (config_slug == 'info') %}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{% extends "forms/fields/editor/editor.html.twig" %}
|
||||
{% set theme = config.plugins.admin.whitelabel.codemirror_theme ?? 'paper.css' %}
|
||||
{% set font = config.plugins.admin.whitelabel.codemirror_md_font ?? 'sans' %}
|
||||
{% set codemirrorOptions = {'mode': 'gfm', 'theme': theme, 'font': font, 'ignore': []}|merge(field.codemirror|default({})) %}
|
||||
{% set codemirrorOptions = {'spellcheck': 'true', 'inputStyle': 'contenteditable', 'mode': 'gfm', 'theme': theme, 'font': font, 'ignore': []}|merge(field.codemirror|default({})) %}
|
||||
|
||||
{# backward compatibility #}
|
||||
{% if field.showPreview %}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
{% extends "forms/fields/text/text.html.twig" %}
|
||||
{% set field = field|merge({'wrapper_classes': 'form-input-addon-wrapper'}) %}
|
||||
|
||||
{% block append %}
|
||||
<div class="form-input-addon form-input-append hint--top" data-hint="{{ 'PLUGIN_ADMIN.AUTOREGENERATE_FOLDER_SLUG'|tu }}" data-regenerate='[name="{{ (scope ~ field.name)|fieldName }}"]'>
|
||||
<i class="fa fa-refresh"></i>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -11,7 +11,10 @@
|
||||
{% set field_name = parentname ~ '.' ~ name %}
|
||||
{% set value = (form.value(field_name) ?? data.value(field_name) ?? default[name] ?? [])|array %}
|
||||
{% if object %}
|
||||
{% set sub_taxonomies = object.getFlexDirectory().getIndex().getDistinctValues(field_name) %}
|
||||
{% set can_translate = can_translate ?? (admin.multilang and object.hasFlexFeature('flex-translate')) %}
|
||||
{% set index = object.getFlexDirectory().getIndex() %}
|
||||
{% set translated = can_translate ? index.withTranslated(admin.language) : index %}
|
||||
{% set sub_taxonomies = translated.getDistinctValues(field_name) %}
|
||||
{% else %}
|
||||
{% set sub_taxonomies = (attribute(grav.taxonomy.taxonomy, name) ?? [])|keys %}
|
||||
{% endif %}
|
||||
|
||||
22
themes/grav/templates/partials/blueprints-copy.html.twig
Normal file
22
themes/grav/templates/partials/blueprints-copy.html.twig
Normal file
@@ -0,0 +1,22 @@
|
||||
{% set form_id = form_id ? form_id : 'blueprints' %}
|
||||
{% set scope = scope ?: 'data.' %}
|
||||
|
||||
<form {% if form_action %}action="{{ form_action }}"{% endif %} id="{{ form_id }}" method="post" data-grav-form="{{ form_id }}" {% if form.novalidate %}novalidate{% endif %} data-grav-keepalive="true">
|
||||
{% for field in blueprints.fields %}
|
||||
{% if field.type %}
|
||||
{% set value = field.name ? (data.value(field.name) ?? form.value(field.name)) : data.toArray %}
|
||||
<div class="block block-{{field.type}}">
|
||||
{% include ["forms/fields/#{field.type}/#{field.type}.html.twig", 'forms/fields/text/text.html.twig'] %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
<input type="hidden" name="task" value="copy" />
|
||||
<div class="button-bar">
|
||||
<button data-remodal-action="cancel" class="button secondary remodal-cancel"><i class="fa fa-fw fa-close"></i> Cancel</button>
|
||||
<button class="button success" {#data-flex-safe-action#}>{{ "PLUGIN_ADMIN.CONTINUE"|tu }}</button>
|
||||
</div>
|
||||
|
||||
{{ nonce_field('admin-form', 'admin-nonce')|raw }}
|
||||
|
||||
</form>
|
||||
12
themes/grav/webpack.conf.js
vendored
12
themes/grav/webpack.conf.js
vendored
@@ -1,5 +1,5 @@
|
||||
const path = require('path');
|
||||
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
|
||||
const TerserPlugin = require('terser-webpack-plugin');
|
||||
|
||||
module.exports = (env, argv) => ({
|
||||
entry: {
|
||||
@@ -15,15 +15,7 @@ module.exports = (env, argv) => ({
|
||||
},
|
||||
optimization: {
|
||||
minimize: argv.mode === 'disabled-production',
|
||||
minimizer: [
|
||||
new UglifyJsPlugin({
|
||||
uglifyOptions: {
|
||||
compress: {
|
||||
drop_console: true
|
||||
}
|
||||
}
|
||||
})
|
||||
],
|
||||
minimizer: [new TerserPlugin()],
|
||||
splitChunks: {
|
||||
cacheGroups: {
|
||||
vendors: {
|
||||
|
||||
6453
themes/grav/yarn-error.log
Normal file
6453
themes/grav/yarn-error.log
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user