Merge branch 'release/1.10.13'

This commit is contained in:
Andy Miller
2021-04-23 12:54:03 -06:00
38 changed files with 8902 additions and 5472 deletions

View File

@@ -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

View File

@@ -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],

View File

@@ -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'

View 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

View File

@@ -51,7 +51,7 @@ form:
highlight: ''
default: ''
options:
'': Auto
'': PLUGIN_ADMIN.AUTO
1: PLUGIN_ADMIN.YES
0: PLUGIN_ADMIN.NO
validate:

View File

@@ -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';

View File

@@ -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')

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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'

View 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;

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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')}"]`;

View File

@@ -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() {

View File

@@ -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

View File

@@ -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

File diff suppressed because one or more lines are too long

View File

@@ -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;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -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"
}
}

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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') %}

View File

@@ -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 %}

View File

@@ -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 %}

View File

@@ -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 %}

View 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>

View File

@@ -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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +0,0 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1