(Grav GitSync) Automatic Commit from smokephil
This commit is contained in:
parent
d73d0ba519
commit
96a01e3ab4
260 changed files with 25905 additions and 16011 deletions
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
onpage_menu: true
|
||||
onpage_menu: '1'
|
||||
body_classes: 'title-h1h2 header-dark header-transparent'
|
||||
content:
|
||||
items: '@self.modular'
|
||||
|
|
@ -7,6 +7,6 @@ menu: LT24
|
|||
taxonomy:
|
||||
tag:
|
||||
- hidden
|
||||
published: false
|
||||
published: true
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,24 @@
|
|||
# v1.10.49.1
|
||||
## 09/03/2025
|
||||
|
||||
1. [](#bugfix)
|
||||
* Fixed several JS issues with Notifications and Scheduler
|
||||
|
||||
# v1.10.49
|
||||
## 08/25/2025
|
||||
|
||||
1. [](#new)
|
||||
* Upgraded to very latest FontAwesome 7.0 with custom ForkAwesome Shim
|
||||
* Support for enhanced Scheduler in admin
|
||||
* PHP 8.4 compatibility
|
||||
1. [](#improved)
|
||||
* Vendor libraries updated
|
||||
* Added translations for Fetchpriority Trait [#2436](https://github.com/getgrav/grav-plugin-admin/pull/2346)
|
||||
* Other various missing langs strings added to 'english' translation
|
||||
1. [](#bugfix)
|
||||
* Fix `force_ssl` use schema instead of server var [#2435](https://github.com/getgrav/grav-plugin-admin/pull/2345)
|
||||
* Fix for fully turning off notifications JS
|
||||
|
||||
# v1.10.48
|
||||
## 10/28/2024
|
||||
|
||||
|
|
|
|||
|
|
@ -396,9 +396,10 @@ class AdminPlugin extends Plugin
|
|||
|
||||
// Force SSL with redirect if required
|
||||
if ($config->get('system.force_ssl')) {
|
||||
if (!isset($_SERVER['HTTPS']) || strtolower($_SERVER['HTTPS']) !== 'on') {
|
||||
$scheme = $this->uri->scheme(true);
|
||||
if ($scheme !== 'https') {
|
||||
Admin::DEBUG && Admin::addDebugMessage('Admin SSL forced on, redirect');
|
||||
$url = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
||||
$url = 'https://' . $this->uri->host() . $this->uri->uri();
|
||||
$this->grav->redirect($url);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
name: Admin Panel
|
||||
slug: admin
|
||||
type: plugin
|
||||
version: 1.10.48
|
||||
version: 1.10.49.1
|
||||
description: Adds an advanced administration panel to manage your site
|
||||
icon: empire
|
||||
author:
|
||||
|
|
@ -15,7 +15,7 @@ docs: https://github.com/getgrav/grav-plugin-admin/blob/develop/README.md
|
|||
license: MIT
|
||||
|
||||
dependencies:
|
||||
- { name: grav, version: '>=1.7.42' }
|
||||
- { name: grav, version: '>=1.7.49' }
|
||||
- { name: form, version: '>=6.0.1' }
|
||||
- { name: login, version: '>=3.7.8' }
|
||||
- { name: email, version: '>=3.1.6' }
|
||||
|
|
|
|||
|
|
@ -2413,7 +2413,7 @@ class Admin
|
|||
*/
|
||||
public function getLogFiles()
|
||||
{
|
||||
$logs = new GravData(['grav.log' => 'Grav System Log', 'email.log' => 'Email Log']);
|
||||
$logs = new GravData(['grav.log' => 'Grav System Log', 'email.log' => 'Email Log', 'scheduler.log' => 'Scheduler Log']);
|
||||
Grav::instance()->fireEvent('onAdminLogFiles', new Event(['logs' => &$logs]));
|
||||
return $logs->toArray();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,20 +22,18 @@
|
|||
"require": {
|
||||
"php": "^7.3.6 || ^8.0",
|
||||
"ext-json": "*",
|
||||
"scssphp/scssphp": "^1.11",
|
||||
"laminas/laminas-zendframework-bridge": "^1.4",
|
||||
"p3k/picofeed": "@stable"
|
||||
"scssphp/scssphp": "^1.13",
|
||||
"p3k/picofeed": "^1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"codeception/codeception": "^2.4",
|
||||
"fzaninotto/faker": "^1.8",
|
||||
"codeception/codeception": "^2.5",
|
||||
"fzaninotto/faker": "^1.9",
|
||||
"symfony/yaml": "~4.4",
|
||||
"symfony/console": "~4.4",
|
||||
"symfony/finder": "~4.4",
|
||||
"symfony/event-dispatcher": "~4.4"
|
||||
},
|
||||
"replace": {
|
||||
"symfony/polyfill-php72": "*",
|
||||
"symfony/polyfill-php73": "*"
|
||||
},
|
||||
"autoload": {
|
||||
|
|
|
|||
532
plugins/admin/composer.lock
generated
532
plugins/admin/composer.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -383,6 +383,8 @@ PLUGIN_ADMIN:
|
|||
CACHE_JOB_TYPE: "Cache Job Type"
|
||||
CACHE_JOB_TYPE_HELP: "Either clear with the 'standard' folders cache clear, or with 'all' folders"
|
||||
CACHE_PURGE: "Purge Old Cache"
|
||||
CACHE_PURGE_AGE: "Cache Purge Age"
|
||||
CACHE_PURGE_AGE_HELP: "Purge all cache items older than this age (in seconds)"
|
||||
LIFETIME: "Lifetime"
|
||||
LIFETIME_HELP: "Sets the cache lifetime in seconds. 0 = infinite"
|
||||
GZIP_COMPRESSION: "Gzip compression"
|
||||
|
|
@ -449,6 +451,8 @@ PLUGIN_ADMIN:
|
|||
DEBUG_TWIG_HELP: "Enable debugging of Twig templates"
|
||||
SHUTDOWN_CLOSE_CONNECTION: "Shutdown close connection"
|
||||
SHUTDOWN_CLOSE_CONNECTION_HELP: "Close the connection before calling onShutdown(). false for debugging"
|
||||
IMAGE_ADAPTER: "Image Adapter"
|
||||
IMAGE_ADAPTER_HELP: "The image adapter to use for image manipulation. 'GD' is the default, 'Imagick' is an alternative"
|
||||
DEFAULT_IMAGE_QUALITY: "Default image quality"
|
||||
DEFAULT_IMAGE_QUALITY_HELP: "Default image quality to use when resampling or caching images (85%)"
|
||||
CACHE_ALL: "Cache all images"
|
||||
|
|
@ -459,6 +463,8 @@ PLUGIN_ADMIN:
|
|||
IMAGES_LOADING_HELP: "The loading attribute allows a browser to defer loading offscreen images and iframes until users scroll near them. loading supports three values: auto, lazy, eager"
|
||||
IMAGES_DECODING: "Image decoding behavior"
|
||||
IMAGES_DECODING_HELP: "The decoding attribute allows a browser to defer decoding offscreen images until users scroll near them. decoding supports three values: auto, sync, async"
|
||||
IMAGES_FETCHPRIORITY: "Image Fetchpriority Property"
|
||||
IMAGES_FETCHPRIORITY_HELP: "The fetchpriority property in HTML is an attribute that specifies the priority for loading certain resources, such as images or iframes, to optimize performance. Possible values are high, low, or auto."
|
||||
# Removed in Grav 1.8
|
||||
IMAGES_SEOFRIENDLY: "SEO-Friendly Image names"
|
||||
IMAGES_SEOFRIENDLY_HELP: "When enabled, the image name is displayed first, then a smaller hash to reflect processed operations"
|
||||
|
|
@ -794,7 +800,7 @@ PLUGIN_ADMIN:
|
|||
STRICT_TWIG_COMPAT_HELP: "Enables deprecated Twig autoescape setting. When disabled, |raw filter is required to output HTML as Twig will autoescape output"
|
||||
SCHEDULER: "Scheduler"
|
||||
SCHEDULER_INSTALL_INSTRUCTIONS: "Install Instructions"
|
||||
SCHEDULER_INSTALLED_READY: "Installed and Ready"
|
||||
SCHEDULER_INSTALLED_READY: "Scheduler Ready"
|
||||
SCHEDULER_CRON_NA: "Cron Not Available for user: <b>%s</b>"
|
||||
SCHEDULER_NOT_ENABLED: "Not Enabled for user: <b>%s</b>"
|
||||
SCHEDULER_SETUP: "Scheduler Setup"
|
||||
|
|
@ -810,7 +816,7 @@ PLUGIN_ADMIN:
|
|||
SCHEDULER_OUTPUT_TYPE_HELP: "Either append to the same file each run, or overwrite the file with each run"
|
||||
SCHEDULER_EMAIL: "Email"
|
||||
SCHEDULER_EMAIL_HELP: "Email to send output to. NOTE: requires output file to be set"
|
||||
SCHEDULER_WARNING: "The scheduler uses your system's crontab system to execute commands. You should use this only if you are an advanced user and know what you are doing. Misconfiguration or abuse can lead to security vulnerabilities."
|
||||
SCHEDULER_WARNING: "The scheduler can use either system crontab or webhook triggers to execute commands. Webhooks are recommended for cloud environments. Only advanced users should configure custom jobs. Misconfiguration or abuse can lead to security vulnerabilities."
|
||||
SECURITY: "Security"
|
||||
XSS_SECURITY: "XSS Security for Content"
|
||||
XSS_WHITELIST_PERMISSIONS: "Whitelist Permissions"
|
||||
|
|
|
|||
|
|
@ -460,6 +460,8 @@ PLUGIN_ADMIN:
|
|||
IMAGES_LOADING_HELP: "El atributo cargando, permite al navegador diferir la carga de las imágenes que están fuera de pantalla y los iframes, hasta que el usuario se acerca a ellos. Cargando soporta tres valores: auto, lazy, eager"
|
||||
IMAGES_DECODING: "Comportamiento de decodificación de imágenes"
|
||||
IMAGES_DECODING_HELP: "El atributo de decodificación permite a un navegador posponer la decodificación de imágenes fuera de la pantalla hasta que los usuarios se desplacen cerca de ellas. la decodificación admite tres valores: auto, sync, async"
|
||||
IMAGES_FETCHPRIORITY: Propiedad de Imagen Fetchpriority"
|
||||
IMAGES_FETCHPRIORITY_HELP: "La propiedad fetchpriority en HTML es un atributo que permite indicar la prioridad con la que los navegadores deben cargar ciertos recursos, como imágenes o iframes, optimizando el rendimiento. Los valores posibles son high, low o auto."
|
||||
#Removed in Grav 1.8
|
||||
IMAGES_SEOFRIENDLY: "Nombres de imágenes SEO-Friendly"
|
||||
IMAGES_SEOFRIENDLY_HELP: "Cuando está activado, el nombre de la imagen se muestra primero, luego un hash menor para reflejar las operaciones procesadas"
|
||||
|
|
|
|||
|
|
@ -13,8 +13,15 @@ const DOMBehaviors = {
|
|||
|
||||
preventUnload() {
|
||||
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;
|
||||
// jQuery 3.x removed $._data, use $._data only if available (jQuery < 3.0)
|
||||
// or check with jQuery's internal data store for jQuery >= 3.0
|
||||
try {
|
||||
const hasData = typeof $._data === 'function';
|
||||
if (hasData && $._data(window, 'events') && ($._data(window, 'events').beforeunload || []).filter((event) => event.namespace === '_grav').length) {
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
// $._data not available in jQuery 3.x+, continue with adding event handler
|
||||
}
|
||||
|
||||
// Allow some elements to leave the page without native confirmation
|
||||
|
|
@ -33,8 +40,15 @@ const DOMBehaviors = {
|
|||
preventClickAway() {
|
||||
let selector = 'a[href]:not([href^="#"]):not([target="_blank"]):not([href^="javascript:"])';
|
||||
|
||||
if ($._data($(selector).get(0), 'events') && ($._data($(selector).get(0), 'events').click || []).filter((event) => event.namespace === '_grav')) {
|
||||
return;
|
||||
// jQuery 3.x removed $._data, use $._data only if available (jQuery < 3.0)
|
||||
try {
|
||||
const hasData = typeof $._data === 'function';
|
||||
const element = $(selector).get(0);
|
||||
if (element && hasData && $._data(element, 'events') && ($._data(element, 'events').click || []).filter((event) => event.namespace === '_grav')) {
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
// $._data not available in jQuery 3.x+, continue with adding event handler
|
||||
}
|
||||
|
||||
// Prevent clicking away if the form state is dirty
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ export default class Updates {
|
|||
if (!this.payload.resources.total) { return this; }
|
||||
|
||||
[plugins, themes].forEach(function(resources, index) {
|
||||
if (!resources || Array.isArray(resources)) { return; }
|
||||
if (!resources || Array.isArray(resources) || typeof resources !== 'object') { return; }
|
||||
let length = Object.keys(resources).length;
|
||||
let type = map[index];
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,18 @@ import { Instance as Update } from './index';
|
|||
// Dashboard update and Grav update
|
||||
$(document).on('click.remodal', '[data-remodal-id="update-grav"] [data-remodal-action="confirm"]', () => {
|
||||
const element = $('#grav-update-button');
|
||||
element.html(`${translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT} ${formatBytes(Update.payload.grav.assets['grav-update'].size)}..`);
|
||||
|
||||
// Safely get the file size with fallback
|
||||
let sizeText = '';
|
||||
if (Update.payload &&
|
||||
Update.payload.grav &&
|
||||
Update.payload.grav.assets &&
|
||||
Update.payload.grav.assets['grav-update'] &&
|
||||
Update.payload.grav.assets['grav-update'].size) {
|
||||
sizeText = ` ${formatBytes(Update.payload.grav.assets['grav-update'].size)}`;
|
||||
}
|
||||
|
||||
element.html(`${translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT}${sizeText}..`);
|
||||
|
||||
element.attr('disabled', 'disabled').find('> .fa').removeClass('fa-cloud-download').addClass('fa-refresh fa-spin');
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,9 @@ let request = function(url, options = {}, callback = () => true) {
|
|||
let data = new FormData();
|
||||
|
||||
options.body = Object.assign({ 'admin-nonce': config.admin_nonce }, options.body || {});
|
||||
Object.keys(options.body).map((key) => data.append(key, options.body[key]));
|
||||
if (options.body && typeof options.body === 'object') {
|
||||
Object.keys(options.body).map((key) => data.append(key, options.body[key]));
|
||||
}
|
||||
options.body = data;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ export function userFeedback(response) {
|
|||
break;
|
||||
}
|
||||
|
||||
if (settings) {
|
||||
if (settings && typeof settings === 'object' && settings !== null) {
|
||||
backup = Object.assign({}, toastr.options);
|
||||
Object.keys(settings).forEach((key) => { toastr.options[key] = settings[key]; });
|
||||
}
|
||||
|
|
|
|||
9
plugins/admin/themes/grav/css/fontawesome7.min.css
vendored
Normal file
9
plugins/admin/themes/grav/css/fontawesome7.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
651
plugins/admin/themes/grav/css/fork-awesome-shim.css
Normal file
651
plugins/admin/themes/grav/css/fork-awesome-shim.css
Normal file
|
|
@ -0,0 +1,651 @@
|
|||
/*!
|
||||
* ForkAwesome to FontAwesome 7 Compatibility Shim
|
||||
* Version: 1.0.0
|
||||
*
|
||||
* This CSS shim provides compatibility for ForkAwesome 1.1.5 classes
|
||||
* when migrating to FontAwesome 7
|
||||
*/
|
||||
|
||||
/* Base Font Family Override */
|
||||
.fa {
|
||||
font-family: 'Font Awesome 7 Free' , 'Font Awesome 7 Brands' !important;
|
||||
font-weight: 900 !important; /* Default to solid style */
|
||||
}
|
||||
|
||||
/* Utility Classes */
|
||||
.fa-fw {
|
||||
width: 1.25em !important;
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
.fa-ul {
|
||||
padding-left: 0 !important;
|
||||
margin-left: 2.5em !important;
|
||||
list-style-type: none !important;
|
||||
}
|
||||
|
||||
.fa-ul > li {
|
||||
position: relative !important;
|
||||
}
|
||||
|
||||
.fa-li {
|
||||
position: absolute !important;
|
||||
left: -2.5em !important;
|
||||
width: 2.5em !important;
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
.fa-border {
|
||||
padding: .2em .25em .15em !important;
|
||||
border: solid 0.08em #eee !important;
|
||||
border-radius: .1em !important;
|
||||
}
|
||||
|
||||
.fa-pull-left {
|
||||
float: left !important;
|
||||
margin-right: .3em !important;
|
||||
}
|
||||
|
||||
.fa-pull-right {
|
||||
float: right !important;
|
||||
margin-left: .3em !important;
|
||||
}
|
||||
|
||||
.fa-spin {
|
||||
animation: fa-spin 2s infinite linear !important;
|
||||
}
|
||||
|
||||
.fa-pulse {
|
||||
animation: fa-spin 1s infinite steps(8) !important;
|
||||
}
|
||||
|
||||
@keyframes fa-spin {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
/* Size modifiers */
|
||||
.fa-lg {
|
||||
font-size: 1.33333333em !important;
|
||||
line-height: 0.75em !important;
|
||||
vertical-align: -15% !important;
|
||||
}
|
||||
|
||||
.fa-2x {
|
||||
font-size: 2em !important;
|
||||
}
|
||||
|
||||
.fa-3x {
|
||||
font-size: 3em !important;
|
||||
}
|
||||
|
||||
.fa-4x {
|
||||
font-size: 4em !important;
|
||||
}
|
||||
|
||||
.fa-5x {
|
||||
font-size: 5em !important;
|
||||
}
|
||||
|
||||
/* Rotation & Flip */
|
||||
.fa-rotate-90 {
|
||||
transform: rotate(90deg) !important;
|
||||
}
|
||||
|
||||
.fa-rotate-180 {
|
||||
transform: rotate(180deg) !important;
|
||||
}
|
||||
|
||||
.fa-rotate-270 {
|
||||
transform: rotate(270deg) !important;
|
||||
}
|
||||
|
||||
.fa-flip-horizontal {
|
||||
transform: scale(-1, 1) !important;
|
||||
}
|
||||
|
||||
.fa-flip-vertical {
|
||||
transform: scale(1, -1) !important;
|
||||
}
|
||||
|
||||
/* Stack Support */
|
||||
.fa-stack {
|
||||
position: relative !important;
|
||||
display: inline-block !important;
|
||||
width: 2em !important;
|
||||
height: 2em !important;
|
||||
line-height: 2em !important;
|
||||
vertical-align: middle !important;
|
||||
}
|
||||
|
||||
.fa-stack-1x, .fa-stack-2x {
|
||||
position: absolute !important;
|
||||
left: 0 !important;
|
||||
width: 100% !important;
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
.fa-stack-1x {
|
||||
line-height: inherit !important;
|
||||
}
|
||||
|
||||
.fa-stack-2x {
|
||||
font-size: 2em !important;
|
||||
}
|
||||
|
||||
.fa-inverse {
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
/* Icon Remapping - Direct mappings */
|
||||
.fa.fa-home:before { content: "\f015"; } /* house */
|
||||
.fa.fa-warning:before { content: "\f071"; } /* triangle-exclamation */
|
||||
.fa.fa-close:before { content: "\f00d"; } /* xmark */
|
||||
.fa.fa-remove:before { content: "\f00d"; } /* xmark */
|
||||
.fa.fa-trash-o:before { content: "\f2ed"; } /* trash-can */
|
||||
.fa.fa-file-text-o:before { content: "\f15c"; } /* file-lines */
|
||||
.fa.fa-clock-o:before { content: "\f017"; } /* clock regular */
|
||||
.fa.fa-check-circle-o:before { content: "\f058"; } /* circle-check regular */
|
||||
.fa.fa-circle-o:before { content: "\f111"; } /* circle regular */
|
||||
.fa.fa-dot-circle-o:before { content: "\f192"; } /* circle-dot regular */
|
||||
.fa.fa-minus-square-o:before { content: "\f146"; } /* square-minus regular */
|
||||
.fa.fa-plus-square-o:before { content: "\f0fe"; } /* square-plus regular */
|
||||
.fa.fa-square-o:before { content: "\f0c8"; } /* square regular */
|
||||
.fa.fa-envelope-o:before { content: "\f0e0"; } /* envelope regular */
|
||||
.fa.fa-file-o:before { content: "\f15b"; } /* file regular */
|
||||
.fa.fa-file-text-o:before { content: "\f15c"; } /* file-lines regular */
|
||||
.fa.fa-file-audio-o:before { content: "\f1c7"; } /* file-audio regular */
|
||||
.fa.fa-file-photo-o:before { content: "\f1c5"; } /* file-image regular */
|
||||
.fa.fa-files-o:before { content: "\f0c5"; } /* copy regular */
|
||||
.fa.fa-folder-o:before { content: "\f07b"; } /* folder regular */
|
||||
.fa.fa-folder-open-o:before { content: "\f07c"; } /* folder-open regular */
|
||||
.fa.fa-heart-o:before { content: "\f004"; } /* heart regular */
|
||||
.fa.fa-star-o:before { content: "\f005"; } /* star regular */
|
||||
.fa.fa-star-half-o:before { content: "\f089"; } /* star-half regular */
|
||||
.fa.fa-user-o:before { content: "\f007"; } /* user regular */
|
||||
.fa.fa-bell-o:before { content: "\f0f3"; } /* bell regular */
|
||||
.fa.fa-bookmark-o:before { content: "\f02e"; } /* bookmark regular */
|
||||
.fa.fa-building-o:before { content: "\f1ad"; } /* building regular */
|
||||
.fa.fa-calendar-o:before { content: "\f133"; } /* calendar regular */
|
||||
.fa.fa-comment-o:before { content: "\f075"; } /* comment regular */
|
||||
.fa.fa-comments-o:before { content: "\f086"; } /* comments regular */
|
||||
.fa.fa-flag-o:before { content: "\f024"; } /* flag regular */
|
||||
.fa.fa-lemon-o:before { content: "\f094"; } /* lemon regular */
|
||||
.fa.fa-thumbs-up-o:before { content: "\f164"; } /* thumbs-up regular */
|
||||
.fa.fa-thumbs-down-o:before { content: "\f165"; } /* thumbs-down regular */
|
||||
.fa.fa-picture-o:before { content: "\f03e"; } /* image regular */
|
||||
.fa.fa-map-o:before { content: "\f279"; } /* map regular */
|
||||
.fa.fa-lightbulb-o:before { content: "\f0eb"; } /* lightbulb regular */
|
||||
.fa.fa-sign-out:before { content: "\f08b"; } /* arrow-right-from-bracket */
|
||||
.fa.fa-list-ol:before { content: "\f0cb"; } /* list-ol */
|
||||
.fa.fa-toggle-on:before { content: "\f205"; } /* toggle-on */
|
||||
.fa.fa-toggle-off:before { content: "\f204"; } /* toggle-off */
|
||||
.fa.fa-bell-slash-o:before { content: "\f1f6"; } /* bell-slash regular */
|
||||
.fa.fa-paper-plane-o:before { content: "\f1d8"; } /* paper-plane regular */
|
||||
.fa.fa-keyboard-o:before { content: "\f11c"; } /* keyboard regular */
|
||||
.fa.fa-pencil-square-o:before { content: "\f044"; } /* pen-to-square regular */
|
||||
.fa.fa-smile-o:before { content: "\f118"; } /* face-smile regular */
|
||||
.fa.fa-hdd-o:before { content: "\f0a0"; } /* hard-drive regular */
|
||||
|
||||
/* Icon Remapping - Name changes */
|
||||
.fa.fa-home:before { content: "\f015"; } /* house */
|
||||
.fa.fa-gear:before { content: "\f013"; } /* gear */
|
||||
.fa.fa-gears:before { content: "\f085"; } /* gears */
|
||||
.fa.fa-remove:before { content: "\f00d"; } /* xmark */
|
||||
.fa.fa-close:before { content: "\f00d"; } /* xmark */
|
||||
.fa.fa-warning:before { content: "\f071"; } /* triangle-exclamation */
|
||||
.fa.fa-exclamation-triangle:before { content: "\f071"; } /* triangle-exclamation */
|
||||
.fa.fa-exclamation-circle:before { content: "\f06a"; } /* circle-exclamation */
|
||||
.fa.fa-check-circle:before { content: "\f058"; } /* circle-check */
|
||||
.fa.fa-times-circle:before { content: "\f057"; } /* circle-xmark */
|
||||
.fa.fa-times-circle-o:before { content: "\f057"; } /* circle-xmark regular */
|
||||
.fa.fa-chevron-circle-left:before { content: "\f137"; } /* circle-chevron-left */
|
||||
.fa.fa-chevron-circle-right:before { content: "\f138"; } /* circle-chevron-right */
|
||||
.fa.fa-chevron-circle-up:before { content: "\f139"; } /* circle-chevron-up */
|
||||
.fa.fa-chevron-circle-down:before { content: "\f13a"; } /* circle-chevron-down */
|
||||
.fa.fa-arrow-circle-left:before { content: "\f0a8"; } /* circle-arrow-left */
|
||||
.fa.fa-arrow-circle-right:before { content: "\f0a9"; } /* circle-arrow-right */
|
||||
.fa.fa-arrow-circle-up:before { content: "\f0aa"; } /* circle-arrow-up */
|
||||
.fa.fa-arrow-circle-down:before { content: "\f0ab"; } /* circle-arrow-down */
|
||||
.fa.fa-arrow-circle-o-left:before { content: "\f359"; } /* circle-left regular */
|
||||
.fa.fa-arrow-circle-o-right:before { content: "\f35a"; } /* circle-right regular */
|
||||
.fa.fa-arrow-circle-o-up:before { content: "\f358"; } /* circle-up regular */
|
||||
.fa.fa-arrow-circle-o-down:before { content: "\f356"; } /* circle-down regular */
|
||||
.fa.fa-mail-forward:before { content: "\f064"; } /* share */
|
||||
.fa.fa-mail-reply:before { content: "\f3e5"; } /* reply */
|
||||
.fa.fa-mail-reply-all:before { content: "\f122"; } /* reply-all */
|
||||
.fa.fa-chain:before { content: "\f0c1"; } /* link */
|
||||
.fa.fa-chain-broken:before { content: "\f127"; } /* link-slash */
|
||||
.fa.fa-shield:before { content: "\f3ed"; } /* shield */
|
||||
.fa.fa-calendar-o:before { content: "\f133"; } /* calendar regular */
|
||||
.fa.fa-ticket:before { content: "\f3ff"; } /* ticket-simple */
|
||||
.fa.fa-minus-square-o:before { content: "\f146"; } /* square-minus regular */
|
||||
.fa.fa-plus-square-o:before { content: "\f0fe"; } /* square-plus regular */
|
||||
.fa.fa-level-up:before { content: "\f3bf"; } /* turn-up */
|
||||
.fa.fa-level-down:before { content: "\f3be"; } /* turn-down */
|
||||
.fa.fa-pencil-square-o:before { content: "\f044"; } /* pen-to-square regular */
|
||||
.fa.fa-external-link:before { content: "\f35d"; } /* up-right-from-square */
|
||||
.fa.fa-compass:before { content: "\f14e"; } /* compass */
|
||||
.fa.fa-caret-square-o-down:before { content: "\f150"; } /* square-caret-down regular */
|
||||
.fa.fa-caret-square-o-up:before { content: "\f151"; } /* square-caret-up regular */
|
||||
.fa.fa-caret-square-o-right:before { content: "\f152"; } /* square-caret-right regular */
|
||||
.fa.fa-eur:before, .fa.fa-euro:before { content: "\f153"; } /* euro-sign */
|
||||
.fa.fa-gbp:before { content: "\f154"; } /* sterling-sign */
|
||||
.fa.fa-usd:before, .fa.fa-dollar:before { content: "\f155"; } /* dollar-sign */
|
||||
.fa.fa-inr:before, .fa.fa-rupee:before { content: "\e1bc"; } /* indian-rupee-sign */
|
||||
.fa.fa-jpy:before, .fa.fa-cny:before, .fa.fa-rmb:before, .fa.fa-yen:before { content: "\f157"; } /* yen-sign */
|
||||
.fa.fa-rub:before, .fa.fa-ruble:before, .fa.fa-rouble:before { content: "\f158"; } /* ruble-sign */
|
||||
.fa.fa-krw:before, .fa.fa-won:before { content: "\f159"; } /* won-sign */
|
||||
.fa.fa-btc:before, .fa.fa-bitcoin:before { content: "\f15a"; } /* bitcoin */
|
||||
.fa.fa-youtube-play:before { content: "\f167"; } /* youtube */
|
||||
.fa.fa-adn:before { content: "\f170"; } /* adn */
|
||||
.fa.fa-bitbucket-square:before { content: "\f171"; } /* bitbucket */
|
||||
.fa.fa-long-arrow-down:before { content: "\f309"; } /* arrow-down-long */
|
||||
.fa.fa-long-arrow-up:before { content: "\f30c"; } /* arrow-up-long */
|
||||
.fa.fa-long-arrow-left:before { content: "\f30a"; } /* arrow-left-long */
|
||||
.fa.fa-long-arrow-right:before { content: "\f30b"; } /* arrow-right-long */
|
||||
.fa.fa-apple:before { content: "\f179"; } /* apple */
|
||||
.fa.fa-windows:before { content: "\f17a"; } /* windows */
|
||||
.fa.fa-android:before { content: "\f17b"; } /* android */
|
||||
.fa.fa-linux:before { content: "\f17c"; } /* linux */
|
||||
.fa.fa-dribbble:before { content: "\f17d"; } /* dribbble */
|
||||
.fa.fa-skype:before { content: "\f17e"; } /* skype */
|
||||
.fa.fa-foursquare:before { content: "\f180"; } /* foursquare */
|
||||
.fa.fa-trello:before { content: "\f181"; } /* trello */
|
||||
.fa.fa-gratipay:before { content: "\f184"; } /* gratipay */
|
||||
.fa.fa-gittip:before { content: "\f184"; } /* gratipay */
|
||||
.fa.fa-sun-o:before { content: "\f185"; } /* sun regular */
|
||||
.fa.fa-moon-o:before { content: "\f186"; } /* moon regular */
|
||||
.fa.fa-vk:before { content: "\f189"; } /* vk */
|
||||
.fa.fa-weibo:before { content: "\f18a"; } /* weibo */
|
||||
.fa.fa-renren:before { content: "\f18b"; } /* renren */
|
||||
.fa.fa-pagelines:before { content: "\f18c"; } /* pagelines */
|
||||
.fa.fa-stack-exchange:before { content: "\f18d"; } /* stack-exchange */
|
||||
.fa.fa-arrow-circle-o-right:before { content: "\f35a"; } /* circle-right regular */
|
||||
.fa.fa-arrow-circle-o-left:before { content: "\f359"; } /* circle-left regular */
|
||||
.fa.fa-caret-square-o-left:before { content: "\f191"; } /* square-caret-left regular */
|
||||
.fa.fa-toggle-left:before { content: "\f191"; } /* square-caret-left regular */
|
||||
.fa.fa-dot-circle-o:before { content: "\f192"; } /* circle-dot regular */
|
||||
.fa.fa-vimeo-square:before { content: "\f194"; } /* vimeo */
|
||||
.fa.fa-try:before, .fa.fa-turkish-lira:before { content: "\e2bb"; } /* turkish-lira-sign */
|
||||
.fa.fa-plus-square-o:before { content: "\f0fe"; } /* square-plus regular */
|
||||
.fa.fa-slack:before { content: "\f198"; } /* slack */
|
||||
.fa.fa-wordpress:before { content: "\f19a"; } /* wordpress */
|
||||
.fa.fa-openid:before { content: "\f19b"; } /* openid */
|
||||
.fa.fa-institution:before, .fa.fa-bank:before, .fa.fa-university:before { content: "\f19c"; } /* building-columns */
|
||||
.fa.fa-mortar-board:before, .fa.fa-graduation-cap:before { content: "\f19d"; } /* graduation-cap */
|
||||
.fa.fa-yahoo:before { content: "\f19e"; } /* yahoo */
|
||||
.fa.fa-google:before { content: "\f1a0"; } /* google */
|
||||
.fa.fa-reddit:before { content: "\f1a1"; } /* reddit */
|
||||
.fa.fa-reddit-square:before { content: "\f1a2"; } /* reddit-square */
|
||||
.fa.fa-stumbleupon-circle:before { content: "\f1a3"; } /* stumbleupon-circle */
|
||||
.fa.fa-stumbleupon:before { content: "\f1a4"; } /* stumbleupon */
|
||||
.fa.fa-delicious:before { content: "\f1a5"; } /* delicious */
|
||||
.fa.fa-digg:before { content: "\f1a6"; } /* digg */
|
||||
.fa.fa-pied-piper-pp:before { content: "\f1a7"; } /* pied-piper-pp */
|
||||
.fa.fa-pied-piper-alt:before { content: "\f1a8"; } /* pied-piper-alt */
|
||||
.fa.fa-drupal:before { content: "\f1a9"; } /* drupal */
|
||||
.fa.fa-joomla:before { content: "\f1aa"; } /* joomla */
|
||||
.fa.fa-behance:before { content: "\f1b4"; } /* behance */
|
||||
.fa.fa-behance-square:before { content: "\f1b5"; } /* behance-square */
|
||||
.fa.fa-steam:before { content: "\f1b6"; } /* steam */
|
||||
.fa.fa-steam-square:before { content: "\f1b7"; } /* steam-square */
|
||||
.fa.fa-spotify:before { content: "\f1bc"; } /* spotify */
|
||||
.fa.fa-deviantart:before { content: "\f1bd"; } /* deviantart */
|
||||
.fa.fa-soundcloud:before { content: "\f1be"; } /* soundcloud */
|
||||
.fa.fa-vine:before { content: "\f1ca"; } /* vine */
|
||||
.fa.fa-codepen:before { content: "\f1cb"; } /* codepen */
|
||||
.fa.fa-jsfiddle:before { content: "\f1cc"; } /* jsfiddle */
|
||||
.fa.fa-life-ring:before, .fa.fa-life-bouy:before, .fa.fa-life-buoy:before, .fa.fa-life-saver:before, .fa.fa-support:before { content: "\f1cd"; } /* life-ring */
|
||||
.fa.fa-circle-o-notch:before { content: "\f1ce"; } /* circle-notch */
|
||||
.fa.fa-rebel:before, .fa.fa-ra:before, .fa.fa-resistance:before { content: "\f1d0"; } /* rebel */
|
||||
.fa.fa-empire:before, .fa.fa-ge:before { content: "\f1d1"; } /* empire */
|
||||
.fa.fa-git-square:before { content: "\f1d2"; } /* git-square */
|
||||
.fa.fa-git:before { content: "\f1d3"; } /* git */
|
||||
.fa.fa-hacker-news:before, .fa.fa-y-combinator-square:before, .fa.fa-yc-square:before { content: "\f1d4"; } /* hacker-news */
|
||||
.fa.fa-tencent-weibo:before { content: "\f1d5"; } /* tencent-weibo */
|
||||
.fa.fa-qq:before { content: "\f1d6"; } /* qq */
|
||||
.fa.fa-weixin:before, .fa.fa-wechat:before { content: "\f1d7"; } /* weixin */
|
||||
.fa.fa-paper-plane:before, .fa.fa-send:before { content: "\f1d8"; } /* paper-plane */
|
||||
.fa.fa-paper-plane-o:before, .fa.fa-send-o:before { content: "\f1d8"; } /* paper-plane regular */
|
||||
.fa.fa-circle-thin:before { content: "\f111"; } /* circle regular */
|
||||
.fa.fa-header:before { content: "\f1dc"; } /* heading */
|
||||
.fa.fa-futbol-o:before, .fa.fa-soccer-ball-o:before { content: "\f1e3"; } /* futbol regular */
|
||||
.fa.fa-tty:before { content: "\f1e4"; } /* tty */
|
||||
.fa.fa-binoculars:before { content: "\f1e5"; } /* binoculars */
|
||||
.fa.fa-plug:before { content: "\f1e6"; } /* plug */
|
||||
.fa.fa-slideshare:before { content: "\f1e7"; } /* slideshare */
|
||||
.fa.fa-twitch:before { content: "\f1e8"; } /* twitch */
|
||||
.fa.fa-yelp:before { content: "\f1e9"; } /* yelp */
|
||||
.fa.fa-newspaper-o:before { content: "\f1ea"; } /* newspaper regular */
|
||||
.fa.fa-wifi:before { content: "\f1eb"; } /* wifi */
|
||||
.fa.fa-paypal:before { content: "\f1ed"; } /* paypal */
|
||||
.fa.fa-google-wallet:before { content: "\f1ee"; } /* google-wallet */
|
||||
.fa.fa-cc-visa:before { content: "\f1f0"; } /* cc-visa */
|
||||
.fa.fa-cc-mastercard:before { content: "\f1f1"; } /* cc-mastercard */
|
||||
.fa.fa-cc-discover:before { content: "\f1f2"; } /* cc-discover */
|
||||
.fa.fa-cc-amex:before { content: "\f1f3"; } /* cc-amex */
|
||||
.fa.fa-cc-paypal:before { content: "\f1f4"; } /* cc-paypal */
|
||||
.fa.fa-cc-stripe:before { content: "\f1f5"; } /* cc-stripe */
|
||||
.fa.fa-bell-slash:before { content: "\f1f6"; } /* bell-slash */
|
||||
.fa.fa-bell-slash-o:before { content: "\f1f6"; } /* bell-slash regular */
|
||||
.fa.fa-cc:before { content: "\f20a"; } /* closed-captioning regular */
|
||||
.fa.fa-ils:before, .fa.fa-shekel:before, .fa.fa-sheqel:before { content: "\f20b"; } /* shekel-sign */
|
||||
.fa.fa-meanpath:before { content: "\f20c"; } /* font-awesome */
|
||||
.fa.fa-buysellads:before { content: "\f20d"; } /* buysellads */
|
||||
.fa.fa-connectdevelop:before { content: "\f20e"; } /* connectdevelop */
|
||||
.fa.fa-dashcube:before { content: "\f210"; } /* dashcube */
|
||||
.fa.fa-forumbee:before { content: "\f211"; } /* forumbee */
|
||||
.fa.fa-leanpub:before { content: "\f212"; } /* leanpub */
|
||||
.fa.fa-sellsy:before { content: "\f213"; } /* sellsy */
|
||||
.fa.fa-shirtsinbulk:before { content: "\f214"; } /* shirtsinbulk */
|
||||
.fa.fa-simplybuilt:before { content: "\f215"; } /* simplybuilt */
|
||||
.fa.fa-skyatlas:before { content: "\f216"; } /* skyatlas */
|
||||
.fa.fa-diamond:before { content: "\f3a5"; } /* gem */
|
||||
.fa.fa-intersex:before, .fa.fa-transgender:before { content: "\f224"; } /* mars-and-venus */
|
||||
.fa.fa-transgender-alt:before { content: "\f225"; } /* transgender */
|
||||
.fa.fa-pinterest-p:before { content: "\f231"; } /* pinterest-p */
|
||||
.fa.fa-whatsapp:before { content: "\f232"; } /* whatsapp */
|
||||
.fa.fa-hotel:before, .fa.fa-bed:before { content: "\f236"; } /* bed */
|
||||
.fa.fa-viacoin:before { content: "\f237"; } /* viacoin */
|
||||
.fa.fa-medium:before { content: "\f23a"; } /* medium */
|
||||
.fa.fa-y-combinator:before, .fa.fa-yc:before { content: "\f23b"; } /* y-combinator */
|
||||
.fa.fa-optin-monster:before { content: "\f23c"; } /* optin-monster */
|
||||
.fa.fa-opencart:before { content: "\f23d"; } /* opencart */
|
||||
.fa.fa-expeditedssl:before { content: "\f23e"; } /* expeditedssl */
|
||||
.fa.fa-battery-4:before, .fa.fa-battery:before, .fa.fa-battery-full:before { content: "\f240"; } /* battery-full */
|
||||
.fa.fa-battery-3:before, .fa.fa-battery-three-quarters:before { content: "\f241"; } /* battery-three-quarters */
|
||||
.fa.fa-battery-2:before, .fa.fa-battery-half:before { content: "\f242"; } /* battery-half */
|
||||
.fa.fa-battery-1:before, .fa.fa-battery-quarter:before { content: "\f243"; } /* battery-quarter */
|
||||
.fa.fa-battery-0:before, .fa.fa-battery-empty:before { content: "\f244"; } /* battery-empty */
|
||||
.fa.fa-sticky-note:before { content: "\f249"; } /* note-sticky */
|
||||
.fa.fa-sticky-note-o:before { content: "\f249"; } /* note-sticky regular */
|
||||
.fa.fa-cc-jcb:before { content: "\f24b"; } /* cc-jcb */
|
||||
.fa.fa-cc-diners-club:before { content: "\f24c"; } /* cc-diners-club */
|
||||
.fa.fa-clone:before { content: "\f24d"; } /* clone */
|
||||
.fa.fa-hourglass-o:before { content: "\f254"; } /* hourglass regular */
|
||||
.fa.fa-hourglass-1:before, .fa.fa-hourglass-start:before { content: "\f251"; } /* hourglass-start */
|
||||
.fa.fa-hourglass-2:before, .fa.fa-hourglass-half:before { content: "\f252"; } /* hourglass-half */
|
||||
.fa.fa-hourglass-3:before, .fa.fa-hourglass-end:before { content: "\f253"; } /* hourglass-end */
|
||||
.fa.fa-hand-rock-o:before { content: "\f255"; } /* hand-back-fist regular */
|
||||
.fa.fa-hand-grab-o:before, .fa.fa-hand-stop-o:before { content: "\f256"; } /* hand regular */
|
||||
.fa.fa-hand-paper-o:before { content: "\f256"; } /* hand regular */
|
||||
.fa.fa-hand-scissors-o:before { content: "\f257"; } /* hand-scissors regular */
|
||||
.fa.fa-hand-lizard-o:before { content: "\f258"; } /* hand-lizard regular */
|
||||
.fa.fa-hand-spock-o:before { content: "\f259"; } /* hand-spock regular */
|
||||
.fa.fa-hand-pointer-o:before { content: "\f25a"; } /* hand-pointer regular */
|
||||
.fa.fa-hand-peace-o:before { content: "\f25b"; } /* hand-peace regular */
|
||||
.fa.fa-registered:before { content: "\f25d"; } /* registered regular */
|
||||
.fa.fa-creative-commons:before { content: "\f25e"; } /* creative-commons */
|
||||
.fa.fa-gg:before { content: "\f260"; } /* gg */
|
||||
.fa.fa-gg-circle:before { content: "\f261"; } /* gg-circle */
|
||||
.fa.fa-odnoklassniki:before { content: "\f263"; } /* odnoklassniki */
|
||||
.fa.fa-odnoklassniki-square:before { content: "\f264"; } /* odnoklassniki-square */
|
||||
.fa.fa-get-pocket:before { content: "\f265"; } /* get-pocket */
|
||||
.fa.fa-wikipedia-w:before { content: "\f266"; } /* wikipedia-w */
|
||||
.fa.fa-safari:before { content: "\f267"; } /* safari */
|
||||
.fa.fa-chrome:before { content: "\f268"; } /* chrome */
|
||||
.fa.fa-firefox:before { content: "\f269"; } /* firefox */
|
||||
.fa.fa-opera:before { content: "\f26a"; } /* opera */
|
||||
.fa.fa-internet-explorer:before { content: "\f26b"; } /* internet-explorer */
|
||||
.fa.fa-television:before, .fa.fa-tv:before { content: "\f26c"; } /* tv */
|
||||
.fa.fa-contao:before { content: "\f26d"; } /* contao */
|
||||
.fa.fa-500px:before { content: "\f26e"; } /* 500px */
|
||||
.fa.fa-amazon:before { content: "\f270"; } /* amazon */
|
||||
.fa.fa-calendar-plus-o:before { content: "\f271"; } /* calendar-plus regular */
|
||||
.fa.fa-calendar-minus-o:before { content: "\f272"; } /* calendar-minus regular */
|
||||
.fa.fa-calendar-times-o:before { content: "\f273"; } /* calendar-xmark regular */
|
||||
.fa.fa-calendar-check-o:before { content: "\f274"; } /* calendar-check regular */
|
||||
.fa.fa-map-o:before { content: "\f279"; } /* map regular */
|
||||
.fa.fa-commenting:before { content: "\f4ad"; } /* comment-dots */
|
||||
.fa.fa-commenting-o:before { content: "\f4ad"; } /* comment-dots regular */
|
||||
.fa.fa-houzz:before { content: "\f27c"; } /* houzz */
|
||||
.fa.fa-vimeo:before { content: "\f27d"; } /* vimeo-v */
|
||||
.fa.fa-black-tie:before { content: "\f27e"; } /* black-tie */
|
||||
.fa.fa-fonticons:before { content: "\f280"; } /* fonticons */
|
||||
.fa.fa-reddit-alien:before { content: "\f281"; } /* reddit-alien */
|
||||
.fa.fa-edge:before { content: "\f282"; } /* edge */
|
||||
.fa.fa-codiepie:before { content: "\f284"; } /* codiepie */
|
||||
.fa.fa-modx:before { content: "\f285"; } /* modx */
|
||||
.fa.fa-fort-awesome:before { content: "\f286"; } /* fort-awesome */
|
||||
.fa.fa-usb:before { content: "\f287"; } /* usb */
|
||||
.fa.fa-product-hunt:before { content: "\f288"; } /* product-hunt */
|
||||
.fa.fa-mixcloud:before { content: "\f289"; } /* mixcloud */
|
||||
.fa.fa-scribd:before { content: "\f28a"; } /* scribd */
|
||||
.fa.fa-pause-circle-o:before { content: "\f28c"; } /* circle-pause regular */
|
||||
.fa.fa-stop-circle:before { content: "\f28d"; } /* circle-stop */
|
||||
.fa.fa-stop-circle-o:before { content: "\f28d"; } /* circle-stop regular */
|
||||
.fa.fa-bluetooth:before { content: "\f293"; } /* bluetooth */
|
||||
.fa.fa-bluetooth-b:before { content: "\f294"; } /* bluetooth-b */
|
||||
.fa.fa-gitlab:before { content: "\f296"; } /* gitlab */
|
||||
.fa.fa-wpbeginner:before { content: "\f297"; } /* wpbeginner */
|
||||
.fa.fa-wpforms:before { content: "\f298"; } /* wpforms */
|
||||
.fa.fa-envira:before { content: "\f299"; } /* envira */
|
||||
.fa.fa-wheelchair-alt:before { content: "\f368"; } /* accessible-icon */
|
||||
.fa.fa-question-circle-o:before { content: "\f059"; } /* circle-question regular */
|
||||
.fa.fa-blind:before { content: "\f29d"; } /* person-walking-with-cane */
|
||||
.fa.fa-audio-description:before { content: "\f29e"; } /* audio-description */
|
||||
.fa.fa-phone-volume:before, .fa.fa-volume-control-phone:before { content: "\f2a0"; } /* phone-volume */
|
||||
.fa.fa-braille:before { content: "\f2a1"; } /* braille */
|
||||
.fa.fa-assistive-listening-systems:before { content: "\f2a2"; } /* assistive-listening-systems */
|
||||
.fa.fa-american-sign-language-interpreting:before, .fa.fa-asl-interpreting:before { content: "\f2a3"; } /* hands-asl-interpreting */
|
||||
.fa.fa-deaf:before, .fa.fa-deafness:before, .fa.fa-hard-of-hearing:before { content: "\f2a4"; } /* ear-deaf */
|
||||
.fa.fa-glide:before { content: "\f2a5"; } /* glide */
|
||||
.fa.fa-glide-g:before { content: "\f2a6"; } /* glide-g */
|
||||
.fa.fa-sign-language:before, .fa.fa-signing:before { content: "\f2a7"; } /* hands */
|
||||
.fa.fa-viadeo:before { content: "\f2a9"; } /* viadeo */
|
||||
.fa.fa-viadeo-square:before { content: "\f2aa"; } /* viadeo-square */
|
||||
.fa.fa-snapchat:before { content: "\f2ab"; } /* snapchat */
|
||||
.fa.fa-snapchat-ghost:before { content: "\f2ac"; } /* snapchat */
|
||||
.fa.fa-snapchat-square:before { content: "\f2ad"; } /* snapchat-square */
|
||||
.fa.fa-pied-piper:before { content: "\f2ae"; } /* pied-piper */
|
||||
.fa.fa-first-order:before { content: "\f2b0"; } /* first-order */
|
||||
.fa.fa-yoast:before { content: "\f2b1"; } /* yoast */
|
||||
.fa.fa-themeisle:before { content: "\f2b2"; } /* themeisle */
|
||||
.fa.fa-google-plus-official:before, .fa.fa-google-plus-circle:before { content: "\f2b3"; } /* google-plus */
|
||||
.fa.fa-fa:before, .fa.fa-font-awesome:before { content: "\f2b4"; } /* font-awesome */
|
||||
.fa.fa-user-o:before { content: "\f007"; } /* user regular */
|
||||
.fa.fa-id-badge:before { content: "\f2c1"; } /* id-badge */
|
||||
.fa.fa-id-badge-o:before { content: "\f2c1"; } /* id-badge regular */
|
||||
.fa.fa-id-card:before { content: "\f2c2"; } /* id-card */
|
||||
.fa.fa-id-card-o:before { content: "\f2c2"; } /* id-card regular */
|
||||
.fa.fa-quora:before { content: "\f2c4"; } /* quora */
|
||||
.fa.fa-free-code-camp:before { content: "\f2c5"; } /* free-code-camp */
|
||||
.fa.fa-telegram:before { content: "\f2c6"; } /* telegram */
|
||||
.fa.fa-shower:before { content: "\f2cc"; } /* shower */
|
||||
.fa.fa-bath:before, .fa.fa-bathtub:before, .fa.fa-s15:before { content: "\f2cd"; } /* bath */
|
||||
.fa.fa-imdb:before { content: "\f2d8"; } /* imdb */
|
||||
.fa.fa-ravelry:before { content: "\f2d9"; } /* ravelry */
|
||||
.fa.fa-eercast:before { content: "\f2da"; } /* sellcast */
|
||||
.fa.fa-linode:before { content: "\f2b8"; } /* linode */
|
||||
.fa.fa-address-book-o:before { content: "\f2b9"; } /* address-book regular */
|
||||
.fa.fa-address-card-o:before { content: "\f2bb"; } /* address-card regular */
|
||||
.fa.fa-user-circle-o:before { content: "\f2bd"; } /* circle-user regular */
|
||||
.fa.fa-user-circle:before { content: "\f2bd"; } /* circle-user */
|
||||
.fa.fa-bandcamp:before { content: "\f2d5"; } /* bandcamp */
|
||||
/*.fa.fa-grav:before { content: "\f2d6"; } !* grav *!*/
|
||||
.fa.fa-etsy:before { content: "\f2d7"; } /* etsy */
|
||||
.fa.fa-meetup:before { content: "\f2e0"; } /* meetup */
|
||||
|
||||
/* Brands requiring explicit font-family */
|
||||
.fa.fa-twitter:before { content: "\e61b"; } /* x-twitter */
|
||||
.fa.fa-facebook-square:before { content: "\f082"; } /* square-facebook */
|
||||
.fa.fa-facebook:before { content: "\f09a"; } /* facebook */
|
||||
.fa.fa-github:before { content: "\f09b"; } /* github */
|
||||
.fa.fa-github-square:before { content: "\f092"; } /* square-github */
|
||||
.fa.fa-google-plus:before { content: "\f0d5"; } /* google-plus */
|
||||
.fa.fa-google-plus-square:before { content: "\f0d4"; } /* square-google-plus */
|
||||
.fa.fa-linkedin:before { content: "\f08c"; } /* linkedin */
|
||||
.fa.fa-linkedin-square:before { content: "\f08c"; } /* square-linkedin */
|
||||
.fa.fa-pinterest:before { content: "\f0d2"; } /* pinterest */
|
||||
.fa.fa-pinterest-square:before { content: "\f0d3"; } /* square-pinterest */
|
||||
.fa.fa-reddit-square:before { content: "\f1a2"; } /* square-reddit */
|
||||
.fa.fa-tumblr:before { content: "\f173"; } /* tumblr */
|
||||
.fa.fa-tumblr-square:before { content: "\f174"; } /* square-tumblr */
|
||||
.fa.fa-twitter-square:before { content: "\e61a"; } /* square-x-twitter */
|
||||
.fa.fa-vimeo-square:before { content: "\f194"; } /* square-vimeo */
|
||||
.fa.fa-youtube:before { content: "\f167"; } /* youtube */
|
||||
.fa.fa-youtube-square:before { content: "\f431"; } /* square-youtube */
|
||||
.fa.fa-xing:before { content: "\f168"; } /* xing */
|
||||
.fa.fa-xing-square:before { content: "\f169"; } /* square-xing */
|
||||
.fa.fa-unsplash:before { content: "\e07c"; } /* unsplash */
|
||||
.fa.fa-artstation:before { content: "\f77a"; } /* artstation */
|
||||
.fa.fa-cc-by:before { content: "\f4e7"; } /* creative-commons-by */
|
||||
.fa.fa-cc-nc:before { content: "\f4e8"; } /* creative-commons-nc */
|
||||
.fa.fa-cc-nc-eu:before { content: "\f4e9"; } /* creative-commons-nc-eu */
|
||||
.fa.fa-cc-nc-jp:before { content: "\f4ea"; } /* creative-commons-nc-jp */
|
||||
.fa.fa-cc-nd:before { content: "\f4eb"; } /* creative-commons-nd */
|
||||
.fa.fa-cc-pd:before { content: "\f4ec"; } /* creative-commons-pd */
|
||||
.fa.fa-cc-remix:before { content: "\f4ee"; } /* creative-commons-remix */
|
||||
.fa.fa-cc-sa:before { content: "\f4ef"; } /* creative-commons-sa */
|
||||
.fa.fa-cc-share:before { content: "\f4f1"; } /* creative-commons-share */
|
||||
.fa.fa-cc-zero:before { content: "\f4f3"; } /* creative-commons-zero */
|
||||
.fa.fa-digitalocean:before { content: "\f391"; } /* digital-ocean */
|
||||
.fa.fa-discord:before { content: "\f392"; } /* discord */
|
||||
.fa.fa-ethereum:before { content: "\f42e"; } /* ethereum */
|
||||
.fa.fa-f-droid:before { content: "\f17b"; } /* android */
|
||||
.fa.fa-facebook-messenger:before { content: "\f39f"; } /* facebook-messenger */
|
||||
.fa.fa-laravel:before { content: "\f3bd"; } /* laravel */
|
||||
.fa.fa-mastodon:before { content: "\f4f6"; } /* mastodon */
|
||||
.fa.fa-nodejs:before { content: "\f3d3"; } /* node-js */
|
||||
.fa.fa-orcid:before { content: "\f8d2"; } /* orcid */
|
||||
.fa.fa-patreon:before { content: "\f3d9"; } /* patreon */
|
||||
.fa.fa-php:before { content: "\f457"; } /* php */
|
||||
.fa.fa-python:before { content: "\f3e2"; } /* python */
|
||||
.fa.fa-react:before { content: "\f41b"; } /* react */
|
||||
.fa.fa-researchgate:before { content: "\f4f8"; } /* researchgate */
|
||||
.fa.fa-signal:before { content: "\f694"; } /* signal-messenger */
|
||||
|
||||
|
||||
/* Fork Awesome specific icon fallbacks */
|
||||
.fa.fa-activitypub:before { content: "\f1e0"; } /* share-nodes */
|
||||
.fa.fa-archive-org:before { content: "\f19c"; } /* building-columns */
|
||||
.fa.fa-biometric:before { content: "\f577"; } /* fingerprint */
|
||||
.fa.fa-c:before { content: "\43"; } /* letter C fallback */
|
||||
.fa.fa-dat:before { content: "\f1c0"; } /* database */
|
||||
.fa.fa-diaspora:before { content: "\f069"; } /* asterisk */
|
||||
.fa.fa-emby:before { content: "\f144"; } /* play-circle */
|
||||
.fa.fa-foster:before { content: "\e58b"; } /* hands-holding-child */
|
||||
.fa.fa-friendica:before { content: "\f0c0"; } /* users */
|
||||
.fa.fa-galaxy:before { content: "\f135"; } /* rocket */
|
||||
.fa.fa-gimp:before { content: "\f53f"; } /* palette */
|
||||
.fa.fa-gitea:before { content: "\f0f4"; } /* mug-hot */
|
||||
.fa.fa-gnu-social:before { content: "\e60c"; } /* gnu */
|
||||
.fa.fa-google-auth:before { content: "\f3ed"; } /* shield */
|
||||
.fa.fa-hackaday:before { content: "\f0ad"; } /* wrench */
|
||||
.fa.fa-hackster:before { content: "\f2db"; } /* microchip */
|
||||
.fa.fa-inkscape:before { content: "\f5c3"; } /* pen-nib */
|
||||
.fa.fa-jirafeau:before { content: "\f064"; } /* share */
|
||||
.fa.fa-joplin:before { content: "\f02d"; } /* book */
|
||||
.fa.fa-jsdelivr:before { content: "\f48b"; } /* truck-fast */
|
||||
.fa.fa-keybase:before { content: "\f084"; } /* key */
|
||||
.fa.fa-liberapay:before { content: "\f4b9"; } /* hand-holding-heart */
|
||||
.fa.fa-libreoffice:before { content: "\f1c2"; } /* file-word */
|
||||
.fa.fa-line-graph:before { content: "\f201"; } /* chart-line */
|
||||
.fa.fa-matrix-org:before { content: "\f4ad"; } /* comment-dots */
|
||||
.fa.fa-nextcloud:before { content: "\f0c2"; } /* cloud */
|
||||
.fa.fa-peertube:before { content: "\f03d"; } /* video */
|
||||
.fa.fa-pi-hole:before { content: "\f3ed"; } /* shield-halved */
|
||||
.fa.fa-pixelfed:before { content: "\f083"; } /* camera-retro */
|
||||
.fa.fa-plume:before { content: "\f56b"; } /* feather */
|
||||
.fa.fa-postgresql:before { content: "\f1c0"; } /* database */
|
||||
.fa.fa-riot:before { content: "\f086"; } /* comments */
|
||||
.fa.fa-scuttlebutt:before { content: "\f578"; } /* fish */
|
||||
.fa.fa-sketchfab:before { content: "\f1b2"; } /* cube */
|
||||
.fa.fa-snowdrift:before { content: "\f2dc"; } /* snowflake */
|
||||
.fa.fa-social-home:before { content: "\e57f"; } /* house-user */
|
||||
.fa.fa-syncthing:before { content: "\f2f1"; } /* arrows-rotate */
|
||||
.fa.fa-tex:before { content: "\f121"; } /* code */
|
||||
.fa.fa-tor:before { content: "\f4f5"; } /* user-secret */
|
||||
|
||||
.fa.fa-vagrant:before { content: "\56"; } /* letter V fallback */
|
||||
.fa.fa-vscode:before { content: "\f121"; } /* code */
|
||||
.fa.fa-xmpp:before { content: "\f075"; } /* comment */
|
||||
.fa.fa-zotero:before { content: "\f02e"; } /* bookmark */
|
||||
|
||||
/* Additional common icons from Grav admin usage */
|
||||
.fa.fa-paint-brush:before { content: "\f53c"; } /* paintbrush */
|
||||
.fa.fa-birthday-cake:before { content: "\f1fd"; } /* cake-candles */
|
||||
.fa.fa-chart-pie:before { content: "\f200"; } /* chart-pie */
|
||||
.fa.fa-chart-line:before { content: "\f201"; } /* chart-line */
|
||||
.fa.fa-toggle-off:before { content: "\f204"; } /* toggle-off */
|
||||
.fa.fa-toggle-on:before { content: "\f205"; } /* toggle-on */
|
||||
.fa.fa-bicycle:before { content: "\f206"; } /* bicycle */
|
||||
.fa.fa-bus:before { content: "\f207"; } /* bus */
|
||||
.fa.fa-closed-captioning:before { content: "\f20a"; } /* closed-captioning regular */
|
||||
.fa.fa-shekel:before, .fa.fa-sheqel:before, .fa.fa-ils:before { content: "\f20b"; } /* shekel-sign */
|
||||
.fa.fa-cart-plus:before { content: "\f217"; } /* cart-plus */
|
||||
.fa.fa-cart-arrow-down:before { content: "\f218"; } /* cart-arrow-down */
|
||||
.fa.fa-ship:before { content: "\f21a"; } /* ship */
|
||||
.fa.fa-user-secret:before { content: "\f21b"; } /* user-secret */
|
||||
.fa.fa-motorcycle:before { content: "\f21c"; } /* motorcycle */
|
||||
.fa.fa-street-view:before { content: "\f21d"; } /* street-view */
|
||||
.fa.fa-heartbeat:before { content: "\f21e"; } /* heart-pulse */
|
||||
.fa.fa-venus:before { content: "\f221"; } /* venus */
|
||||
.fa.fa-mars:before { content: "\f222"; } /* mars */
|
||||
.fa.fa-mercury:before { content: "\f223"; } /* mercury */
|
||||
.fa.fa-transgender:before { content: "\f224"; } /* mars-and-venus */
|
||||
.fa.fa-transgender-alt:before { content: "\f225"; } /* transgender */
|
||||
.fa.fa-venus-double:before { content: "\f226"; } /* venus-double */
|
||||
.fa.fa-mars-double:before { content: "\f227"; } /* mars-double */
|
||||
.fa.fa-venus-mars:before { content: "\f228"; } /* venus-mars */
|
||||
.fa.fa-mars-stroke:before { content: "\f229"; } /* mars-stroke */
|
||||
.fa.fa-mars-stroke-v:before { content: "\f22a"; } /* mars-stroke-up */
|
||||
.fa.fa-mars-stroke-h:before { content: "\f22b"; } /* mars-stroke-right */
|
||||
.fa.fa-neuter:before { content: "\f22c"; } /* neuter */
|
||||
.fa.fa-genderless:before { content: "\f22d"; } /* genderless */
|
||||
.fa.fa-server:before { content: "\f233"; } /* server */
|
||||
.fa.fa-user-plus:before { content: "\f234"; } /* user-plus */
|
||||
.fa.fa-user-times:before { content: "\f235"; } /* user-xmark */
|
||||
.fa.fa-vcard:before, .fa.fa-vcard-o:before { content: "\f2bb"; } /* address-card */
|
||||
.fa.fa-balance-scale:before { content: "\f24e"; } /* scale-balanced */
|
||||
.fa.fa-balance-scale-left:before { content: "\f515"; } /* scale-unbalanced */
|
||||
.fa.fa-balance-scale-right:before { content: "\f516"; } /* scale-unbalanced-flip */
|
||||
.fa.fa-map-signs:before { content: "\f277"; } /* signs-post */
|
||||
.fa.fa-map-marker-alt:before { content: "\f3c5"; } /* location-dot */
|
||||
.fa.fa-mobile-phone:before, .fa.fa-mobile:before { content: "\f3cd"; } /* mobile-screen-button */
|
||||
.fa.fa-money:before { content: "\f3d1"; } /* money-bill */
|
||||
.fa.fa-euro-sign:before, .fa.fa-eur:before, .fa.fa-euro:before { content: "\f153"; } /* euro-sign */
|
||||
.fa.fa-pound-sign:before, .fa.fa-gbp:before { content: "\f154"; } /* sterling-sign */
|
||||
.fa.fa-dollar-sign:before, .fa.fa-dollar:before, .fa.fa-usd:before { content: "\f155"; } /* dollar-sign */
|
||||
.fa.fa-rupee-sign:before, .fa.fa-rupee:before, .fa.fa-inr:before { content: "\e1bc"; } /* indian-rupee-sign */
|
||||
.fa.fa-yen-sign:before, .fa.fa-cny:before, .fa.fa-rmb:before, .fa.fa-yen:before, .fa.fa-jpy:before { content: "\f157"; } /* yen-sign */
|
||||
.fa.fa-ruble-sign:before, .fa.fa-ruble:before, .fa.fa-rouble:before, .fa.fa-rub:before { content: "\f158"; } /* ruble-sign */
|
||||
.fa.fa-won-sign:before, .fa.fa-krw:before, .fa.fa-won:before { content: "\f159"; } /* won-sign */
|
||||
.fa.fa-lira-sign:before, .fa.fa-try:before { content: "\f195"; } /* turkish-lira-sign */
|
||||
.fa.fa-thermometer-empty:before { content: "\f2cb"; } /* temperature-empty */
|
||||
.fa.fa-thermometer-full:before { content: "\f2c7"; } /* temperature-full */
|
||||
.fa.fa-thermometer-half:before { content: "\f2c9"; } /* temperature-half */
|
||||
.fa.fa-thermometer-quarter:before { content: "\f2ca"; } /* temperature-quarter */
|
||||
.fa.fa-thermometer-three-quarters:before { content: "\f2c8"; } /* temperature-three-quarters */
|
||||
.fa.fa-bath:before, .fa.fa-bathtub:before { content: "\f2cd"; } /* bath */
|
||||
.fa.fa-times-rectangle:before, .fa.fa-window-close:before, .fa.fa-times-rectangle-o:before, .fa.fa-window-close-o:before { content: "\f410"; } /* rectangle-xmark */
|
||||
.fa.fa-power-off:before { content: "\f011"; } /* power-off */
|
||||
|
||||
/* Ensure FA4 style classes work */
|
||||
.fa.pull-left {
|
||||
float: left;
|
||||
margin-right: .3em;
|
||||
}
|
||||
|
||||
.fa.pull-right {
|
||||
float: right;
|
||||
margin-left: .3em;
|
||||
}
|
||||
|
||||
/* Compatibility for -o outline variants using CSS pseudo-elements */
|
||||
/*[class*=" fa-"][class*="-o"]:not(.fa-spotify):not(.fa-edge-o):not(.fa-sign-o),*/
|
||||
/*[class^="fa-"][class*="-o"]:not(.fa-spotify):not(.fa-edge-o):not(.fa-sign-o) {*/
|
||||
/* font-weight: 400 !important;*/
|
||||
/*}*/
|
||||
|
||||
/* Handle special cases for icons ending in -o that aren't outline variants */
|
||||
/*.fa-spotify:before,*/
|
||||
/*.fa-edge-o:before,*/
|
||||
/*.fa-sign-o:before {*/
|
||||
/* font-weight: 900 !important;*/
|
||||
/*}*/
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because it is too large
Load diff
|
Before Width: | Height: | Size: 463 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
59
plugins/admin/themes/grav/js/admin.min.js
vendored
59
plugins/admin/themes/grav/js/admin.min.js
vendored
|
|
@ -704,6 +704,7 @@ const external_GravAdmin_namespaceObject = GravAdmin;
|
|||
var trim = __webpack_require__(35814);
|
||||
var trim_default = /*#__PURE__*/__webpack_require__.n(trim);
|
||||
;// CONCATENATED MODULE: ./app/utils/response.js
|
||||
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
||||
|
||||
|
||||
|
||||
|
|
@ -770,7 +771,7 @@ function userFeedback(response) {
|
|||
message = message || 'Invalid AJAX response.';
|
||||
break;
|
||||
}
|
||||
if (settings) {
|
||||
if (settings && _typeof(settings) === 'object' && settings !== null) {
|
||||
backup = Object.assign({}, utils_toastr.options);
|
||||
Object.keys(settings).forEach(function (key) {
|
||||
utils_toastr.options[key] = settings[key];
|
||||
|
|
@ -796,6 +797,7 @@ external_jQuery_default()(__webpack_require__.g).on('beforeunload._ajax', functi
|
|||
UNLOADING = true;
|
||||
});
|
||||
;// CONCATENATED MODULE: ./app/utils/request.js
|
||||
function request_typeof(o) { "@babel/helpers - typeof"; return request_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, request_typeof(o); }
|
||||
|
||||
|
||||
var raw;
|
||||
|
|
@ -813,9 +815,11 @@ var request = function request(url) {
|
|||
options.body = Object.assign({
|
||||
'admin-nonce': external_GravAdmin_namespaceObject.config.admin_nonce
|
||||
}, options.body || {});
|
||||
Object.keys(options.body).map(function (key) {
|
||||
return data.append(key, options.body[key]);
|
||||
});
|
||||
if (options.body && request_typeof(options.body) === 'object') {
|
||||
Object.keys(options.body).map(function (key) {
|
||||
return data.append(key, options.body[key]);
|
||||
});
|
||||
}
|
||||
options.body = data;
|
||||
}
|
||||
options = Object.assign({
|
||||
|
|
@ -833,12 +837,12 @@ var request = function request(url) {
|
|||
};
|
||||
/* harmony default export */ const utils_request = (request);
|
||||
;// CONCATENATED MODULE: ./app/forms/fields/files.js
|
||||
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
||||
function files_typeof(o) { "@babel/helpers - typeof"; return files_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, files_typeof(o); }
|
||||
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
||||
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
||||
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
||||
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
||||
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
||||
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == files_typeof(i) ? i : i + ""; }
|
||||
function _toPrimitive(t, r) { if ("object" != files_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != files_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
||||
|
||||
|
||||
// import EXIF from 'exif-js';
|
||||
|
|
@ -1692,7 +1696,13 @@ function formatBytes(bytes, decimals) {
|
|||
// Dashboard update and Grav update
|
||||
external_jQuery_default()(document).on('click.remodal', '[data-remodal-id="update-grav"] [data-remodal-action="confirm"]', function () {
|
||||
var element = external_jQuery_default()('#grav-update-button');
|
||||
element.html("".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT, " ").concat(formatBytes(updates_Instance.payload.grav.assets['grav-update'].size), ".."));
|
||||
|
||||
// Safely get the file size with fallback
|
||||
var sizeText = '';
|
||||
if (updates_Instance.payload && updates_Instance.payload.grav && updates_Instance.payload.grav.assets && updates_Instance.payload.grav.assets['grav-update'] && updates_Instance.payload.grav.assets['grav-update'].size) {
|
||||
sizeText = " ".concat(formatBytes(updates_Instance.payload.grav.assets['grav-update'].size));
|
||||
}
|
||||
element.html("".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT).concat(sizeText, ".."));
|
||||
element.attr('disabled', 'disabled').find('> .fa').removeClass('fa-cloud-download').addClass('fa-refresh fa-spin');
|
||||
utils_request(updates_Instance.updateURL, function (response) {
|
||||
if (response.type === 'updategrav') {
|
||||
|
|
@ -1824,7 +1834,7 @@ var Updates = /*#__PURE__*/function () {
|
|||
return this;
|
||||
}
|
||||
[plugins, themes].forEach(function (resources, index) {
|
||||
if (!resources || Array.isArray(resources)) {
|
||||
if (!resources || Array.isArray(resources) || updates_typeof(resources) !== 'object') {
|
||||
return;
|
||||
}
|
||||
var length = Object.keys(resources).length;
|
||||
|
|
@ -4225,10 +4235,17 @@ var DOMBehaviors = {
|
|||
},
|
||||
preventUnload: function preventUnload() {
|
||||
var selector = '[name="task"][value^="save"], [data-delete-action], [data-flex-safe-action]';
|
||||
if (external_jQuery_default()._data(window, 'events') && (external_jQuery_default()._data(window, 'events').beforeunload || []).filter(function (event) {
|
||||
return event.namespace === '_grav';
|
||||
}).length) {
|
||||
return;
|
||||
// jQuery 3.x removed $._data, use $._data only if available (jQuery < 3.0)
|
||||
// or check with jQuery's internal data store for jQuery >= 3.0
|
||||
try {
|
||||
var hasData = typeof (external_jQuery_default())._data === 'function';
|
||||
if (hasData && external_jQuery_default()._data(window, 'events') && (external_jQuery_default()._data(window, 'events').beforeunload || []).filter(function (event) {
|
||||
return event.namespace === '_grav';
|
||||
}).length) {
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
// $._data not available in jQuery 3.x+, continue with adding event handler
|
||||
}
|
||||
|
||||
// Allow some elements to leave the page without native confirmation
|
||||
|
|
@ -4245,10 +4262,18 @@ var DOMBehaviors = {
|
|||
},
|
||||
preventClickAway: function preventClickAway() {
|
||||
var selector = 'a[href]:not([href^="#"]):not([target="_blank"]):not([href^="javascript:"])';
|
||||
if (external_jQuery_default()._data(external_jQuery_default()(selector).get(0), 'events') && (external_jQuery_default()._data(external_jQuery_default()(selector).get(0), 'events').click || []).filter(function (event) {
|
||||
return event.namespace === '_grav';
|
||||
})) {
|
||||
return;
|
||||
|
||||
// jQuery 3.x removed $._data, use $._data only if available (jQuery < 3.0)
|
||||
try {
|
||||
var hasData = typeof (external_jQuery_default())._data === 'function';
|
||||
var element = external_jQuery_default()(selector).get(0);
|
||||
if (element && hasData && external_jQuery_default()._data(element, 'events') && (external_jQuery_default()._data(element, 'events').click || []).filter(function (event) {
|
||||
return event.namespace === '_grav';
|
||||
})) {
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
// $._data not available in jQuery 3.x+, continue with adding event handler
|
||||
}
|
||||
|
||||
// Prevent clicking away if the form state is dirty
|
||||
|
|
|
|||
129
plugins/admin/themes/grav/js/clipboard-helper.js
vendored
Normal file
129
plugins/admin/themes/grav/js/clipboard-helper.js
vendored
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
/**
|
||||
* Clipboard Helper for Grav Admin
|
||||
* Provides copy-to-clipboard functionality with visual feedback
|
||||
*/
|
||||
|
||||
window.GravClipboard = {
|
||||
/**
|
||||
* Copy the value from an input/textarea element with visual feedback
|
||||
* @param {HTMLElement} buttonElement - The button element that was clicked
|
||||
* @param {string} inputId - Optional ID of input to copy from (if not previous sibling)
|
||||
*/
|
||||
copy: function(buttonElement, inputId) {
|
||||
var input;
|
||||
|
||||
if (inputId) {
|
||||
input = document.getElementById(inputId);
|
||||
} else {
|
||||
input = buttonElement.previousElementSibling;
|
||||
}
|
||||
|
||||
if (!input) {
|
||||
console.error('No input element found to copy from');
|
||||
return;
|
||||
}
|
||||
|
||||
// Select and copy the text
|
||||
input.select();
|
||||
var success = document.execCommand('copy');
|
||||
|
||||
if (success) {
|
||||
// Store original content
|
||||
var originalHTML = buttonElement.innerHTML;
|
||||
|
||||
// Show success feedback
|
||||
buttonElement.innerHTML = '<i class="fa fa-check"></i> Copied!';
|
||||
|
||||
// Restore original content after delay
|
||||
setTimeout(function() {
|
||||
buttonElement.innerHTML = originalHTML;
|
||||
}, 2000);
|
||||
} else {
|
||||
console.error('Failed to copy to clipboard');
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Update webhook commands with actual token and URL values
|
||||
* @param {string} tokenFieldSelector - Selector for the token input field
|
||||
*/
|
||||
updateWebhookCommands: function(tokenFieldSelector) {
|
||||
tokenFieldSelector = tokenFieldSelector || '[name="data[scheduler][modern][webhook][token]"]';
|
||||
|
||||
// Try multiple ways to get the token field
|
||||
var tokenField = document.querySelector(tokenFieldSelector);
|
||||
if (!tokenField) {
|
||||
tokenField = document.querySelector('input[name*="webhook][token"]');
|
||||
}
|
||||
if (!tokenField) {
|
||||
// Look for the token input by searching in the webhook section
|
||||
var inputs = document.querySelectorAll('input[type="text"]');
|
||||
for (var i = 0; i < inputs.length; i++) {
|
||||
if (inputs[i].name && inputs[i].name.includes('webhook') && inputs[i].name.includes('token')) {
|
||||
tokenField = inputs[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var token = (tokenField && tokenField.value && tokenField.value.trim()) ? tokenField.value.trim() : 'YOUR_TOKEN';
|
||||
var siteUrl = window.location.origin + window.location.pathname.replace(/\/admin.*$/, '');
|
||||
|
||||
// Update webhook commands with actual values (URLs quoted for shell compatibility)
|
||||
var webhookAllCmd = 'curl -X POST "' + siteUrl + '/scheduler/webhook" \\\n -H "Authorization: Bearer ' + token + '"';
|
||||
var webhookJobCmd = 'curl -X POST "' + siteUrl + '/scheduler/webhook?job=backup" \\\n -H "Authorization: Bearer ' + token + '"';
|
||||
var healthCmd = 'curl "' + siteUrl + '/scheduler/health"';
|
||||
|
||||
// Set values in input fields if they exist
|
||||
var allInput = document.getElementById('webhook-all-cmd');
|
||||
var jobInput = document.getElementById('webhook-job-cmd');
|
||||
var healthInput = document.getElementById('webhook-health-cmd');
|
||||
|
||||
if (allInput) allInput.value = webhookAllCmd;
|
||||
if (jobInput) jobInput.value = webhookJobCmd;
|
||||
if (healthInput) healthInput.value = healthCmd;
|
||||
|
||||
return {
|
||||
token: token,
|
||||
siteUrl: siteUrl,
|
||||
webhookAllCmd: webhookAllCmd,
|
||||
webhookJobCmd: webhookJobCmd,
|
||||
healthCmd: healthCmd
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Initialize webhook command updates and listeners
|
||||
*/
|
||||
initWebhookCommands: function() {
|
||||
var self = this;
|
||||
|
||||
// Update on page load
|
||||
self.updateWebhookCommands();
|
||||
|
||||
// Also update when token field changes
|
||||
setTimeout(function() {
|
||||
var tokenField = document.querySelector('[name="data[scheduler][modern][webhook][token]"]');
|
||||
if (!tokenField) {
|
||||
tokenField = document.querySelector('input[name*="webhook][token"]');
|
||||
}
|
||||
if (tokenField) {
|
||||
tokenField.addEventListener('change', function() { self.updateWebhookCommands(); });
|
||||
tokenField.addEventListener('input', function() { self.updateWebhookCommands(); });
|
||||
}
|
||||
}, 500);
|
||||
}
|
||||
};
|
||||
|
||||
// Auto-initialize when DOM is ready
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
if (document.getElementById('webhook-all-cmd')) {
|
||||
GravClipboard.initWebhookCommands();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (document.getElementById('webhook-all-cmd')) {
|
||||
GravClipboard.initWebhookCommands();
|
||||
}
|
||||
}
|
||||
1389
plugins/admin/themes/grav/js/fork-awesome-shim.js
vendored
Normal file
1389
plugins/admin/themes/grav/js/fork-awesome-shim.js
vendored
Normal file
File diff suppressed because it is too large
Load diff
800
plugins/admin/themes/grav/js/icon-mappings.json
vendored
Normal file
800
plugins/admin/themes/grav/js/icon-mappings.json
vendored
Normal file
|
|
@ -0,0 +1,800 @@
|
|||
{
|
||||
"version": "1.0.0",
|
||||
"description": "ForkAwesome 1.1.5 to FontAwesome 7 icon mappings",
|
||||
"mappings": {
|
||||
"direct": {
|
||||
"comment": "Icons that map directly without changes",
|
||||
"icons": {
|
||||
"anchor": "anchor",
|
||||
"archive": "archive",
|
||||
"asterisk": "asterisk",
|
||||
"ban": "ban",
|
||||
"barcode": "barcode",
|
||||
"bars": "bars",
|
||||
"battery-full": "battery-full",
|
||||
"battery-three-quarters": "battery-three-quarters",
|
||||
"battery-half": "battery-half",
|
||||
"battery-quarter": "battery-quarter",
|
||||
"battery-empty": "battery-empty",
|
||||
"bed": "bed",
|
||||
"beer": "beer",
|
||||
"bell": "bell",
|
||||
"bell-slash": "bell-slash",
|
||||
"bicycle": "bicycle",
|
||||
"binoculars": "binoculars",
|
||||
"birthday-cake": "cake-candles",
|
||||
"bitcoin": "bitcoin",
|
||||
"bold": "bold",
|
||||
"bolt": "bolt",
|
||||
"bomb": "bomb",
|
||||
"book": "book",
|
||||
"bookmark": "bookmark",
|
||||
"briefcase": "briefcase",
|
||||
"bug": "bug",
|
||||
"building": "building",
|
||||
"bullhorn": "bullhorn",
|
||||
"bullseye": "bullseye",
|
||||
"bus": "bus",
|
||||
"calculator": "calculator",
|
||||
"calendar": "calendar",
|
||||
"camera": "camera",
|
||||
"car": "car",
|
||||
"caret-down": "caret-down",
|
||||
"caret-left": "caret-left",
|
||||
"caret-right": "caret-right",
|
||||
"caret-up": "caret-up",
|
||||
"cart-plus": "cart-plus",
|
||||
"certificate": "certificate",
|
||||
"check": "check",
|
||||
"check-circle": "circle-check",
|
||||
"chevron-down": "chevron-down",
|
||||
"chevron-left": "chevron-left",
|
||||
"chevron-right": "chevron-right",
|
||||
"chevron-up": "chevron-up",
|
||||
"child": "child",
|
||||
"circle": "circle",
|
||||
"clipboard": "clipboard",
|
||||
"clock": "clock",
|
||||
"cloud": "cloud",
|
||||
"cloud-download": "cloud-arrow-down",
|
||||
"cloud-upload": "cloud-arrow-up",
|
||||
"code": "code",
|
||||
"coffee": "mug-hot",
|
||||
"cog": "gear",
|
||||
"cogs": "gears",
|
||||
"comment": "comment",
|
||||
"comments": "comments",
|
||||
"compass": "compass",
|
||||
"copy": "copy",
|
||||
"copyright": "copyright",
|
||||
"credit-card": "credit-card",
|
||||
"crop": "crop-simple",
|
||||
"crosshairs": "crosshairs",
|
||||
"cube": "cube",
|
||||
"cubes": "cubes",
|
||||
"database": "database",
|
||||
"desktop": "desktop",
|
||||
"diamond": "gem",
|
||||
"download": "download",
|
||||
"edit": "pen-to-square",
|
||||
"eject": "eject",
|
||||
"ellipsis-h": "ellipsis",
|
||||
"ellipsis-v": "ellipsis-vertical",
|
||||
"envelope": "envelope",
|
||||
"eraser": "eraser",
|
||||
"exclamation": "exclamation",
|
||||
"exclamation-circle": "circle-exclamation",
|
||||
"exclamation-triangle": "triangle-exclamation",
|
||||
"external-link": "up-right-from-square",
|
||||
"eye": "eye",
|
||||
"eye-slash": "eye-slash",
|
||||
"eyedropper": "eye-dropper",
|
||||
"fax": "fax",
|
||||
"file": "file",
|
||||
"file-archive": "file-zipper",
|
||||
"file-audio": "file-audio",
|
||||
"file-code": "file-code",
|
||||
"file-excel": "file-excel",
|
||||
"file-image": "file-image",
|
||||
"file-pdf": "file-pdf",
|
||||
"file-powerpoint": "file-powerpoint",
|
||||
"file-text": "file-lines",
|
||||
"file-video": "file-video",
|
||||
"file-word": "file-word",
|
||||
"film": "film",
|
||||
"filter": "filter",
|
||||
"fire": "fire",
|
||||
"flag": "flag",
|
||||
"flask": "flask",
|
||||
"folder": "folder",
|
||||
"folder-open": "folder-open",
|
||||
"font": "font",
|
||||
"forward": "forward",
|
||||
"gamepad": "gamepad",
|
||||
"gavel": "gavel",
|
||||
"gift": "gift",
|
||||
"globe": "globe",
|
||||
"graduation-cap": "graduation-cap",
|
||||
"h-square": "square-h",
|
||||
"hand-point-down": "hand-point-down",
|
||||
"hand-point-left": "hand-point-left",
|
||||
"hand-point-right": "hand-point-right",
|
||||
"hand-point-up": "hand-point-up",
|
||||
"hashtag": "hashtag",
|
||||
"headphones": "headphones",
|
||||
"heart": "heart",
|
||||
"history": "clock-rotate-left",
|
||||
"home": "house",
|
||||
"hospital": "hospital",
|
||||
"hourglass": "hourglass",
|
||||
"image": "image",
|
||||
"inbox": "inbox",
|
||||
"indent": "indent",
|
||||
"info": "info",
|
||||
"info-circle": "circle-info",
|
||||
"italic": "italic",
|
||||
"key": "key",
|
||||
"keyboard": "keyboard",
|
||||
"language": "language",
|
||||
"laptop": "laptop",
|
||||
"leaf": "leaf",
|
||||
"lemon": "lemon",
|
||||
"level-down": "turn-down",
|
||||
"level-up": "turn-up",
|
||||
"life-ring": "life-ring",
|
||||
"lightbulb": "lightbulb",
|
||||
"link": "link",
|
||||
"list": "list",
|
||||
"list-alt": "rectangle-list",
|
||||
"list-ol": "list-ol",
|
||||
"list-ul": "list-ul",
|
||||
"location-arrow": "location-arrow",
|
||||
"lock": "lock",
|
||||
"magic": "wand-magic-sparkles",
|
||||
"magnet": "magnet",
|
||||
"mail-forward": "share",
|
||||
"mail-reply": "reply",
|
||||
"mail-reply-all": "reply-all",
|
||||
"map": "map",
|
||||
"map-marker": "location-dot",
|
||||
"map-pin": "map-pin",
|
||||
"microphone": "microphone",
|
||||
"microphone-slash": "microphone-slash",
|
||||
"minus": "minus",
|
||||
"minus-circle": "circle-minus",
|
||||
"mobile": "mobile-screen-button",
|
||||
"money": "money-bill",
|
||||
"moon": "moon",
|
||||
"music": "music",
|
||||
"paint-brush": "paintbrush",
|
||||
"paper-plane": "paper-plane",
|
||||
"paperclip": "paperclip",
|
||||
"pause": "pause",
|
||||
"paw": "paw",
|
||||
"pencil": "pencil",
|
||||
"phone": "phone",
|
||||
"picture": "image",
|
||||
"pie-chart": "chart-pie",
|
||||
"plane": "plane",
|
||||
"play": "play",
|
||||
"plug": "plug",
|
||||
"plus": "plus",
|
||||
"plus-circle": "circle-plus",
|
||||
"power-off": "power-off",
|
||||
"print": "print",
|
||||
"puzzle-piece": "puzzle-piece",
|
||||
"qrcode": "qrcode",
|
||||
"question": "question",
|
||||
"question-circle": "circle-question",
|
||||
"quote-left": "quote-left",
|
||||
"quote-right": "quote-right",
|
||||
"random": "shuffle",
|
||||
"recycle": "recycle",
|
||||
"refresh": "rotate",
|
||||
"registered": "registered",
|
||||
"remove": "xmark",
|
||||
"reorder": "bars",
|
||||
"repeat": "repeat",
|
||||
"reply": "reply",
|
||||
"reply-all": "reply-all",
|
||||
"retweet": "retweet",
|
||||
"road": "road",
|
||||
"rocket": "rocket",
|
||||
"rss": "rss",
|
||||
"save": "floppy-disk",
|
||||
"scissors": "scissors",
|
||||
"search": "magnifying-glass",
|
||||
"search-minus": "magnifying-glass-minus",
|
||||
"search-plus": "magnifying-glass-plus",
|
||||
"server": "server",
|
||||
"share": "share",
|
||||
"share-alt": "share-nodes",
|
||||
"shield": "shield",
|
||||
"shopping-cart": "cart-shopping",
|
||||
"sign-in": "right-to-bracket",
|
||||
"sign-out": "right-from-bracket",
|
||||
"signal": "signal",
|
||||
"sitemap": "sitemap",
|
||||
"sliders": "sliders",
|
||||
"smile": "face-smile",
|
||||
"sort": "sort",
|
||||
"sort-alpha-asc": "arrow-down-a-z",
|
||||
"sort-alpha-desc": "arrow-down-z-a",
|
||||
"sort-amount-asc": "arrow-down-short-wide",
|
||||
"sort-amount-desc": "arrow-down-wide-short",
|
||||
"sort-asc": "sort-up",
|
||||
"sort-desc": "sort-down",
|
||||
"sort-numeric-asc": "arrow-down-1-9",
|
||||
"sort-numeric-desc": "arrow-down-9-1",
|
||||
"spinner": "spinner",
|
||||
"square": "square",
|
||||
"star": "star",
|
||||
"star-half": "star-half",
|
||||
"stop": "stop",
|
||||
"strikethrough": "strikethrough",
|
||||
"subscript": "subscript",
|
||||
"sun": "sun",
|
||||
"superscript": "superscript",
|
||||
"table": "table",
|
||||
"tablet": "tablet-screen-button",
|
||||
"tag": "tag",
|
||||
"tags": "tags",
|
||||
"tasks": "list-check",
|
||||
"terminal": "terminal",
|
||||
"text-height": "text-height",
|
||||
"text-width": "text-width",
|
||||
"th": "table-cells",
|
||||
"th-large": "table-cells-large",
|
||||
"th-list": "table-list",
|
||||
"thumbs-down": "thumbs-down",
|
||||
"thumbs-up": "thumbs-up",
|
||||
"ticket": "ticket",
|
||||
"times": "xmark",
|
||||
"times-circle": "circle-xmark",
|
||||
"tint": "droplet",
|
||||
"toggle-off": "toggle-off",
|
||||
"toggle-on": "toggle-on",
|
||||
"trademark": "trademark",
|
||||
"trash": "trash",
|
||||
"tree": "tree",
|
||||
"trophy": "trophy",
|
||||
"truck": "truck",
|
||||
"umbrella": "umbrella",
|
||||
"underline": "underline",
|
||||
"undo": "rotate-left",
|
||||
"unlock": "unlock",
|
||||
"upload": "upload",
|
||||
"user": "user",
|
||||
"users": "users",
|
||||
"video-camera": "video",
|
||||
"volume-down": "volume-low",
|
||||
"volume-off": "volume-xmark",
|
||||
"volume-up": "volume-high",
|
||||
"warning": "triangle-exclamation",
|
||||
"wheelchair": "wheelchair",
|
||||
"wifi": "wifi",
|
||||
"wrench": "wrench"
|
||||
}
|
||||
},
|
||||
"outline": {
|
||||
"comment": "Icons with -o suffix that map to FontAwesome regular style",
|
||||
"icons": {
|
||||
"address-book-o": { "name": "address-book", "style": "regular" },
|
||||
"address-card-o": { "name": "address-card", "style": "regular" },
|
||||
"bell-o": { "name": "bell", "style": "regular" },
|
||||
"bookmark-o": { "name": "bookmark", "style": "regular" },
|
||||
"building-o": { "name": "building", "style": "regular" },
|
||||
"calendar-o": { "name": "calendar", "style": "regular" },
|
||||
"check-circle-o": { "name": "circle-check", "style": "regular" },
|
||||
"check-square-o": { "name": "square-check", "style": "regular" },
|
||||
"circle-o": { "name": "circle", "style": "regular" },
|
||||
"clock-o": { "name": "clock", "style": "regular" },
|
||||
"comment-o": { "name": "comment", "style": "regular" },
|
||||
"comments-o": { "name": "comments", "style": "regular" },
|
||||
"credit-card-o": { "name": "credit-card", "style": "regular" },
|
||||
"dot-circle-o": { "name": "circle-dot", "style": "regular" },
|
||||
"envelope-o": { "name": "envelope", "style": "regular" },
|
||||
"envelope-open-o": { "name": "envelope-open", "style": "regular" },
|
||||
"eye-o": { "name": "eye", "style": "regular" },
|
||||
"file-o": { "name": "file", "style": "regular" },
|
||||
"file-text-o": { "name": "file-lines", "style": "regular" },
|
||||
"flag-o": { "name": "flag", "style": "regular" },
|
||||
"floppy-o": { "name": "floppy-disk", "style": "regular" },
|
||||
"folder-o": { "name": "folder", "style": "regular" },
|
||||
"folder-open-o": { "name": "folder-open", "style": "regular" },
|
||||
"frown-o": { "name": "face-frown", "style": "regular" },
|
||||
"hand-o-down": { "name": "hand-point-down", "style": "regular" },
|
||||
"hand-o-left": { "name": "hand-point-left", "style": "regular" },
|
||||
"hand-o-right": { "name": "hand-point-right", "style": "regular" },
|
||||
"hand-o-up": { "name": "hand-point-up", "style": "regular" },
|
||||
"heart-o": { "name": "heart", "style": "regular" },
|
||||
"hospital-o": { "name": "hospital", "style": "regular" },
|
||||
"hourglass-o": { "name": "hourglass", "style": "regular" },
|
||||
"image-o": { "name": "image", "style": "regular" },
|
||||
"keyboard-o": { "name": "keyboard", "style": "regular" },
|
||||
"lemon-o": { "name": "lemon", "style": "regular" },
|
||||
"lightbulb-o": { "name": "lightbulb", "style": "regular" },
|
||||
"map-o": { "name": "map", "style": "regular" },
|
||||
"meh-o": { "name": "face-meh", "style": "regular" },
|
||||
"minus-square-o": { "name": "square-minus", "style": "regular" },
|
||||
"moon-o": { "name": "moon", "style": "regular" },
|
||||
"newspaper-o": { "name": "newspaper", "style": "regular" },
|
||||
"paper-plane-o": { "name": "paper-plane", "style": "regular" },
|
||||
"pause-circle-o": { "name": "circle-pause", "style": "regular" },
|
||||
"picture-o": { "name": "image", "style": "regular" },
|
||||
"play-circle-o": { "name": "circle-play", "style": "regular" },
|
||||
"plus-square-o": { "name": "square-plus", "style": "regular" },
|
||||
"question-circle-o": { "name": "circle-question", "style": "regular" },
|
||||
"share-square-o": { "name": "share-from-square", "style": "regular" },
|
||||
"smile-o": { "name": "face-smile", "style": "regular" },
|
||||
"snowflake-o": { "name": "snowflake", "style": "regular" },
|
||||
"square-o": { "name": "square", "style": "regular" },
|
||||
"star-half-o": { "name": "star-half", "style": "regular" },
|
||||
"star-o": { "name": "star", "style": "regular" },
|
||||
"sticky-note-o": { "name": "note-sticky", "style": "regular" },
|
||||
"stop-circle-o": { "name": "circle-stop", "style": "regular" },
|
||||
"sun-o": { "name": "sun", "style": "regular" },
|
||||
"thumbs-down-o": { "name": "thumbs-down", "style": "regular" },
|
||||
"thumbs-up-o": { "name": "thumbs-up", "style": "regular" },
|
||||
"times-circle-o": { "name": "circle-xmark", "style": "regular" },
|
||||
"trash-o": { "name": "trash-can", "style": "regular" },
|
||||
"user-o": { "name": "user", "style": "regular" }
|
||||
}
|
||||
},
|
||||
"directional": {
|
||||
"comment": "Directional and arrow icons with special mappings",
|
||||
"icons": {
|
||||
"angle-double-down": "angles-down",
|
||||
"angle-double-left": "angles-left",
|
||||
"angle-double-right": "angles-right",
|
||||
"angle-double-up": "angles-up",
|
||||
"angle-down": "angle-down",
|
||||
"angle-left": "angle-left",
|
||||
"angle-right": "angle-right",
|
||||
"angle-up": "angle-up",
|
||||
"arrow-circle-down": "circle-arrow-down",
|
||||
"arrow-circle-left": "circle-arrow-left",
|
||||
"arrow-circle-right": "circle-arrow-right",
|
||||
"arrow-circle-up": "circle-arrow-up",
|
||||
"arrow-circle-o-down": { "name": "circle-down", "style": "regular" },
|
||||
"arrow-circle-o-left": { "name": "circle-left", "style": "regular" },
|
||||
"arrow-circle-o-right": { "name": "circle-right", "style": "regular" },
|
||||
"arrow-circle-o-up": { "name": "circle-up", "style": "regular" },
|
||||
"arrow-down": "arrow-down",
|
||||
"arrow-left": "arrow-left",
|
||||
"arrow-right": "arrow-right",
|
||||
"arrow-up": "arrow-up",
|
||||
"arrows": "arrows-up-down-left-right",
|
||||
"arrows-alt": "maximize",
|
||||
"arrows-h": "arrows-left-right",
|
||||
"arrows-v": "arrows-up-down",
|
||||
"caret-square-o-down": { "name": "square-caret-down", "style": "regular" },
|
||||
"caret-square-o-left": { "name": "square-caret-left", "style": "regular" },
|
||||
"caret-square-o-right": { "name": "square-caret-right", "style": "regular" },
|
||||
"caret-square-o-up": { "name": "square-caret-up", "style": "regular" },
|
||||
"chevron-circle-down": "circle-chevron-down",
|
||||
"chevron-circle-left": "circle-chevron-left",
|
||||
"chevron-circle-right": "circle-chevron-right",
|
||||
"chevron-circle-up": "circle-chevron-up",
|
||||
"long-arrow-down": "arrow-down-long",
|
||||
"long-arrow-left": "arrow-left-long",
|
||||
"long-arrow-right": "arrow-right-long",
|
||||
"long-arrow-up": "arrow-up-long"
|
||||
}
|
||||
},
|
||||
"brands": {
|
||||
"comment": "Brand icons that need explicit brand style",
|
||||
"icons": {
|
||||
"500px": { "name": "500px", "style": "brands" },
|
||||
"adn": { "name": "adn", "style": "brands" },
|
||||
"amazon": { "name": "amazon", "style": "brands" },
|
||||
"android": { "name": "android", "style": "brands" },
|
||||
"angellist": { "name": "angellist", "style": "brands" },
|
||||
"apple": { "name": "apple", "style": "brands" },
|
||||
"bandcamp": { "name": "bandcamp", "style": "brands" },
|
||||
"behance": { "name": "behance", "style": "brands" },
|
||||
"bitbucket": { "name": "bitbucket", "style": "brands" },
|
||||
"bitcoin": { "name": "bitcoin", "style": "brands" },
|
||||
"black-tie": { "name": "black-tie", "style": "brands" },
|
||||
"bluetooth": { "name": "bluetooth", "style": "brands" },
|
||||
"bluetooth-b": { "name": "bluetooth-b", "style": "brands" },
|
||||
"buysellads": { "name": "buysellads", "style": "brands" },
|
||||
"cc-amex": { "name": "cc-amex", "style": "brands" },
|
||||
"cc-diners-club": { "name": "cc-diners-club", "style": "brands" },
|
||||
"cc-discover": { "name": "cc-discover", "style": "brands" },
|
||||
"cc-jcb": { "name": "cc-jcb", "style": "brands" },
|
||||
"cc-mastercard": { "name": "cc-mastercard", "style": "brands" },
|
||||
"cc-paypal": { "name": "cc-paypal", "style": "brands" },
|
||||
"cc-stripe": { "name": "cc-stripe", "style": "brands" },
|
||||
"cc-visa": { "name": "cc-visa", "style": "brands" },
|
||||
"chrome": { "name": "chrome", "style": "brands" },
|
||||
"codepen": { "name": "codepen", "style": "brands" },
|
||||
"connectdevelop": { "name": "connectdevelop", "style": "brands" },
|
||||
"contao": { "name": "contao", "style": "brands" },
|
||||
"css3": { "name": "css3", "style": "brands" },
|
||||
"dashcube": { "name": "dashcube", "style": "brands" },
|
||||
"delicious": { "name": "delicious", "style": "brands" },
|
||||
"deviantart": { "name": "deviantart", "style": "brands" },
|
||||
"digg": { "name": "digg", "style": "brands" },
|
||||
"dribbble": { "name": "dribbble", "style": "brands" },
|
||||
"dropbox": { "name": "dropbox", "style": "brands" },
|
||||
"drupal": { "name": "drupal", "style": "brands" },
|
||||
"edge": { "name": "edge", "style": "brands" },
|
||||
"empire": { "name": "empire", "style": "brands" },
|
||||
"envira": { "name": "envira", "style": "brands" },
|
||||
"expeditedssl": { "name": "expeditedssl", "style": "brands" },
|
||||
"facebook": { "name": "facebook", "style": "brands" },
|
||||
"facebook-f": { "name": "facebook-f", "style": "brands" },
|
||||
"facebook-official": { "name": "facebook", "style": "brands" },
|
||||
"facebook-square": { "name": "square-facebook", "style": "brands" },
|
||||
"firefox": { "name": "firefox", "style": "brands" },
|
||||
"flickr": { "name": "flickr", "style": "brands" },
|
||||
"fonticons": { "name": "fonticons", "style": "brands" },
|
||||
"fort-awesome": { "name": "fort-awesome", "style": "brands" },
|
||||
"forumbee": { "name": "forumbee", "style": "brands" },
|
||||
"foursquare": { "name": "foursquare", "style": "brands" },
|
||||
"free-code-camp": { "name": "free-code-camp", "style": "brands" },
|
||||
"get-pocket": { "name": "get-pocket", "style": "brands" },
|
||||
"gg": { "name": "gg", "style": "brands" },
|
||||
"gg-circle": { "name": "gg-circle", "style": "brands" },
|
||||
"git": { "name": "git", "style": "brands" },
|
||||
"git-square": { "name": "square-git", "style": "brands" },
|
||||
"github": { "name": "github", "style": "brands" },
|
||||
"github-alt": { "name": "github-alt", "style": "brands" },
|
||||
"github-square": { "name": "square-github", "style": "brands" },
|
||||
"gitlab": { "name": "gitlab", "style": "brands" },
|
||||
"gittip": { "name": "gratipay", "style": "brands" },
|
||||
"glide": { "name": "glide", "style": "brands" },
|
||||
"glide-g": { "name": "glide-g", "style": "brands" },
|
||||
"google": { "name": "google", "style": "brands" },
|
||||
"google-plus": { "name": "google-plus", "style": "brands" },
|
||||
"google-plus-circle": { "name": "google-plus", "style": "brands" },
|
||||
"google-plus-square": { "name": "square-google-plus", "style": "brands" },
|
||||
"google-wallet": { "name": "google-wallet", "style": "brands" },
|
||||
"gratipay": { "name": "gratipay", "style": "brands" },
|
||||
"grav": { "name": "grav", "style": "brands" },
|
||||
"hacker-news": { "name": "hacker-news", "style": "brands" },
|
||||
"houzz": { "name": "houzz", "style": "brands" },
|
||||
"html5": { "name": "html5", "style": "brands" },
|
||||
"imdb": { "name": "imdb", "style": "brands" },
|
||||
"instagram": { "name": "instagram", "style": "brands" },
|
||||
"internet-explorer": { "name": "internet-explorer", "style": "brands" },
|
||||
"ioxhost": { "name": "ioxhost", "style": "brands" },
|
||||
"joomla": { "name": "joomla", "style": "brands" },
|
||||
"jsfiddle": { "name": "jsfiddle", "style": "brands" },
|
||||
"lastfm": { "name": "lastfm", "style": "brands" },
|
||||
"lastfm-square": { "name": "square-lastfm", "style": "brands" },
|
||||
"leanpub": { "name": "leanpub", "style": "brands" },
|
||||
"linkedin": { "name": "linkedin", "style": "brands" },
|
||||
"linkedin-square": { "name": "square-linkedin", "style": "brands" },
|
||||
"linux": { "name": "linux", "style": "brands" },
|
||||
"maxcdn": { "name": "maxcdn", "style": "brands" },
|
||||
"meanpath": { "name": "font-awesome", "style": "brands" },
|
||||
"medium": { "name": "medium", "style": "brands" },
|
||||
"meetup": { "name": "meetup", "style": "brands" },
|
||||
"mixcloud": { "name": "mixcloud", "style": "brands" },
|
||||
"modx": { "name": "modx", "style": "brands" },
|
||||
"odnoklassniki": { "name": "odnoklassniki", "style": "brands" },
|
||||
"odnoklassniki-square": { "name": "square-odnoklassniki", "style": "brands" },
|
||||
"opencart": { "name": "opencart", "style": "brands" },
|
||||
"openid": { "name": "openid", "style": "brands" },
|
||||
"opera": { "name": "opera", "style": "brands" },
|
||||
"optin-monster": { "name": "optin-monster", "style": "brands" },
|
||||
"pagelines": { "name": "pagelines", "style": "brands" },
|
||||
"paypal": { "name": "paypal", "style": "brands" },
|
||||
"pied-piper": { "name": "pied-piper", "style": "brands" },
|
||||
"pied-piper-alt": { "name": "pied-piper-alt", "style": "brands" },
|
||||
"pied-piper-pp": { "name": "pied-piper-pp", "style": "brands" },
|
||||
"pinterest": { "name": "pinterest", "style": "brands" },
|
||||
"pinterest-p": { "name": "pinterest-p", "style": "brands" },
|
||||
"pinterest-square": { "name": "square-pinterest", "style": "brands" },
|
||||
"product-hunt": { "name": "product-hunt", "style": "brands" },
|
||||
"qq": { "name": "qq", "style": "brands" },
|
||||
"quora": { "name": "quora", "style": "brands" },
|
||||
"ra": { "name": "rebel", "style": "brands" },
|
||||
"rebel": { "name": "rebel", "style": "brands" },
|
||||
"reddit": { "name": "reddit", "style": "brands" },
|
||||
"reddit-alien": { "name": "reddit-alien", "style": "brands" },
|
||||
"reddit-square": { "name": "square-reddit", "style": "brands" },
|
||||
"renren": { "name": "renren", "style": "brands" },
|
||||
"resistance": { "name": "rebel", "style": "brands" },
|
||||
"safari": { "name": "safari", "style": "brands" },
|
||||
"scribd": { "name": "scribd", "style": "brands" },
|
||||
"sellsy": { "name": "sellsy", "style": "brands" },
|
||||
"shirtsinbulk": { "name": "shirtsinbulk", "style": "brands" },
|
||||
"simplybuilt": { "name": "simplybuilt", "style": "brands" },
|
||||
"skyatlas": { "name": "skyatlas", "style": "brands" },
|
||||
"skype": { "name": "skype", "style": "brands" },
|
||||
"slack": { "name": "slack", "style": "brands" },
|
||||
"slideshare": { "name": "slideshare", "style": "brands" },
|
||||
"snapchat": { "name": "snapchat", "style": "brands" },
|
||||
"snapchat-ghost": { "name": "snapchat", "style": "brands" },
|
||||
"snapchat-square": { "name": "square-snapchat", "style": "brands" },
|
||||
"soundcloud": { "name": "soundcloud", "style": "brands" },
|
||||
"spotify": { "name": "spotify", "style": "brands" },
|
||||
"stack-exchange": { "name": "stack-exchange", "style": "brands" },
|
||||
"stack-overflow": { "name": "stack-overflow", "style": "brands" },
|
||||
"steam": { "name": "steam", "style": "brands" },
|
||||
"steam-square": { "name": "square-steam", "style": "brands" },
|
||||
"stumbleupon": { "name": "stumbleupon", "style": "brands" },
|
||||
"stumbleupon-circle": { "name": "stumbleupon-circle", "style": "brands" },
|
||||
"tencent-weibo": { "name": "tencent-weibo", "style": "brands" },
|
||||
"themeisle": { "name": "themeisle", "style": "brands" },
|
||||
"trello": { "name": "trello", "style": "brands" },
|
||||
"tripadvisor": { "name": "tripadvisor", "style": "brands" },
|
||||
"tumblr": { "name": "tumblr", "style": "brands" },
|
||||
"tumblr-square": { "name": "square-tumblr", "style": "brands" },
|
||||
"twitch": { "name": "twitch", "style": "brands" },
|
||||
"twitter": { "name": "x-twitter", "style": "brands" },
|
||||
"twitter-square": { "name": "square-x-twitter", "style": "brands" },
|
||||
"usb": { "name": "usb", "style": "brands" },
|
||||
"viacoin": { "name": "viacoin", "style": "brands" },
|
||||
"viadeo": { "name": "viadeo", "style": "brands" },
|
||||
"viadeo-square": { "name": "square-viadeo", "style": "brands" },
|
||||
"vimeo": { "name": "vimeo-v", "style": "brands" },
|
||||
"vimeo-square": { "name": "square-vimeo", "style": "brands" },
|
||||
"vine": { "name": "vine", "style": "brands" },
|
||||
"vk": { "name": "vk", "style": "brands" },
|
||||
"wechat": { "name": "weixin", "style": "brands" },
|
||||
"weibo": { "name": "weibo", "style": "brands" },
|
||||
"weixin": { "name": "weixin", "style": "brands" },
|
||||
"whatsapp": { "name": "whatsapp", "style": "brands" },
|
||||
"wikipedia-w": { "name": "wikipedia-w", "style": "brands" },
|
||||
"windows": { "name": "windows", "style": "brands" },
|
||||
"wordpress": { "name": "wordpress", "style": "brands" },
|
||||
"wpbeginner": { "name": "wpbeginner", "style": "brands" },
|
||||
"wpexplorer": { "name": "wpexplorer", "style": "brands" },
|
||||
"wpforms": { "name": "wpforms", "style": "brands" },
|
||||
"xing": { "name": "xing", "style": "brands" },
|
||||
"xing-square": { "name": "square-xing", "style": "brands" },
|
||||
"y-combinator": { "name": "y-combinator", "style": "brands" },
|
||||
"yahoo": { "name": "yahoo", "style": "brands" },
|
||||
"yc": { "name": "y-combinator", "style": "brands" },
|
||||
"yelp": { "name": "yelp", "style": "brands" },
|
||||
"yoast": { "name": "yoast", "style": "brands" },
|
||||
"youtube": { "name": "youtube", "style": "brands" },
|
||||
"youtube-play": { "name": "youtube", "style": "brands" },
|
||||
"youtube-square": { "name": "square-youtube", "style": "brands" }
|
||||
}
|
||||
},
|
||||
"forkSpecific": {
|
||||
"comment": "Fork Awesome specific icons that need fallbacks in FontAwesome 6",
|
||||
"icons": {
|
||||
"activitypub": { "name": "share-nodes", "fallback": true },
|
||||
"archive-org": { "name": "building-columns", "fallback": true },
|
||||
"artstation": { "name": "artstation", "style": "brands" },
|
||||
"bell-slash-o": { "name": "bell-slash", "style": "regular" },
|
||||
"biometric": { "name": "fingerprint", "fallback": true },
|
||||
"c": { "name": "c", "fallback": true },
|
||||
"cc-by": { "name": "creative-commons-by", "style": "brands" },
|
||||
"cc-nc": { "name": "creative-commons-nc", "style": "brands" },
|
||||
"cc-nc-eu": { "name": "creative-commons-nc-eu", "style": "brands" },
|
||||
"cc-nc-jp": { "name": "creative-commons-nc-jp", "style": "brands" },
|
||||
"cc-nd": { "name": "creative-commons-nd", "style": "brands" },
|
||||
"cc-pd": { "name": "creative-commons-pd", "style": "brands" },
|
||||
"cc-remix": { "name": "creative-commons-remix", "style": "brands" },
|
||||
"cc-sa": { "name": "creative-commons-sa", "style": "brands" },
|
||||
"cc-share": { "name": "creative-commons-share", "style": "brands" },
|
||||
"cc-zero": { "name": "creative-commons-zero", "style": "brands" },
|
||||
"commenting": { "name": "comment-dots", "fallback": true },
|
||||
"commenting-o": { "name": "comment-dots", "style": "regular", "fallback": true },
|
||||
"dat": { "name": "database", "fallback": true },
|
||||
"diaspora": { "name": "asterisk", "fallback": true },
|
||||
"digitalocean": { "name": "digital-ocean", "style": "brands" },
|
||||
"discord": { "name": "discord", "style": "brands" },
|
||||
"emby": { "name": "play-circle", "fallback": true },
|
||||
"ethereum": { "name": "ethereum", "style": "brands" },
|
||||
"f-droid": { "name": "android", "style": "brands", "fallback": true },
|
||||
"facebook-messenger": { "name": "facebook-messenger", "style": "brands" },
|
||||
"foster": { "name": "hands-holding-child", "fallback": true },
|
||||
"friendica": { "name": "users", "fallback": true },
|
||||
"galaxy": { "name": "rocket", "fallback": true },
|
||||
"gimp": { "name": "palette", "fallback": true },
|
||||
"gitea": { "name": "mug-hot", "fallback": true },
|
||||
"gnu-social": { "name": "gnu", "fallback": true },
|
||||
"google-auth": { "name": "shield", "fallback": true },
|
||||
"hackaday": { "name": "wrench", "fallback": true },
|
||||
"hackster": { "name": "microchip", "fallback": true },
|
||||
"inkscape": { "name": "pen-nib", "fallback": true },
|
||||
"jirafeau": { "name": "share", "fallback": true },
|
||||
"joplin": { "name": "book", "fallback": true },
|
||||
"jsdelivr": { "name": "truck-fast", "fallback": true },
|
||||
"keybase": { "name": "key", "fallback": true },
|
||||
"laravel": { "name": "laravel", "style": "brands" },
|
||||
"liberapay": { "name": "hand-holding-heart", "fallback": true },
|
||||
"libreoffice": { "name": "file-word", "fallback": true },
|
||||
"line-graph": { "name": "chart-line", "fallback": true },
|
||||
"mastodon": { "name": "mastodon", "style": "brands" },
|
||||
"matrix-org": { "name": "comment-dots", "fallback": true },
|
||||
"meetup": { "name": "meetup", "style": "brands" },
|
||||
"nextcloud": { "name": "cloud", "fallback": true },
|
||||
"nodejs": { "name": "node-js", "style": "brands" },
|
||||
"orcid": { "name": "orcid", "style": "brands" },
|
||||
"patreon": { "name": "patreon", "style": "brands" },
|
||||
"peertube": { "name": "video", "fallback": true },
|
||||
"php": { "name": "php", "style": "brands" },
|
||||
"pi-hole": { "name": "shield-halved", "fallback": true },
|
||||
"pixelfed": { "name": "camera-retro", "fallback": true },
|
||||
"plume": { "name": "feather", "fallback": true },
|
||||
"postgresql": { "name": "database", "fallback": true },
|
||||
"python": { "name": "python", "style": "brands" },
|
||||
"react": { "name": "react", "style": "brands" },
|
||||
"researchgate": { "name": "researchgate", "style": "brands" },
|
||||
"riot": { "name": "comments", "fallback": true },
|
||||
"scuttlebutt": { "name": "fish", "fallback": true },
|
||||
"signal": { "name": "signal-messenger", "style": "brands" },
|
||||
"sketchfab": { "name": "cube", "fallback": true },
|
||||
"snowdrift": { "name": "snowflake", "fallback": true },
|
||||
"social-home": { "name": "house-user", "fallback": true },
|
||||
"syncthing": { "name": "arrows-rotate", "fallback": true },
|
||||
"telegram": { "name": "telegram", "style": "brands" },
|
||||
"tex": { "name": "code", "fallback": true },
|
||||
"tor": { "name": "user-secret", "fallback": true },
|
||||
"unsplash": { "name": "unsplash", "style": "brands" },
|
||||
"vagrant": { "name": "v", "fallback": true },
|
||||
"vscode": { "name": "code", "fallback": true },
|
||||
"xmpp": { "name": "comment", "fallback": true },
|
||||
"zotero": { "name": "bookmark", "fallback": true }
|
||||
}
|
||||
},
|
||||
"aliases": {
|
||||
"comment": "Common aliases and alternative names",
|
||||
"icons": {
|
||||
"automobile": "car",
|
||||
"bank": "building-columns",
|
||||
"bar-chart": "chart-column",
|
||||
"bar-chart-o": { "name": "chart-bar", "style": "regular" },
|
||||
"battery": "battery-full",
|
||||
"battery-0": "battery-empty",
|
||||
"battery-1": "battery-quarter",
|
||||
"battery-2": "battery-half",
|
||||
"battery-3": "battery-three-quarters",
|
||||
"battery-4": "battery-full",
|
||||
"calendar-check-o": { "name": "calendar-check", "style": "regular" },
|
||||
"calendar-minus-o": { "name": "calendar-minus", "style": "regular" },
|
||||
"calendar-plus-o": { "name": "calendar-plus", "style": "regular" },
|
||||
"calendar-times-o": { "name": "calendar-xmark", "style": "regular" },
|
||||
"cc": { "name": "closed-captioning", "style": "regular" },
|
||||
"chain": "link",
|
||||
"chain-broken": "link-slash",
|
||||
"close": "xmark",
|
||||
"cloud-download-alt": "cloud-arrow-down",
|
||||
"cloud-upload-alt": "cloud-arrow-up",
|
||||
"code-fork": "code-branch",
|
||||
"dashboard": "gauge-high",
|
||||
"deaf": "ear-deaf",
|
||||
"deafness": "ear-deaf",
|
||||
"edit": "pen-to-square",
|
||||
"euro": "euro-sign",
|
||||
"eur": "euro-sign",
|
||||
"eyedropper": "eye-dropper",
|
||||
"fa": { "name": "font-awesome", "style": "brands" },
|
||||
"facebook-official": { "name": "facebook", "style": "brands" },
|
||||
"feed": "rss",
|
||||
"file-archive-o": { "name": "file-zipper", "style": "regular" },
|
||||
"file-audio-o": { "name": "file-audio", "style": "regular" },
|
||||
"file-code-o": { "name": "file-code", "style": "regular" },
|
||||
"file-excel-o": { "name": "file-excel", "style": "regular" },
|
||||
"file-image-o": { "name": "file-image", "style": "regular" },
|
||||
"file-movie-o": { "name": "file-video", "style": "regular" },
|
||||
"file-pdf-o": { "name": "file-pdf", "style": "regular" },
|
||||
"file-photo-o": { "name": "file-image", "style": "regular" },
|
||||
"file-picture-o": { "name": "file-image", "style": "regular" },
|
||||
"file-powerpoint-o": { "name": "file-powerpoint", "style": "regular" },
|
||||
"file-sound-o": { "name": "file-audio", "style": "regular" },
|
||||
"file-video-o": { "name": "file-video", "style": "regular" },
|
||||
"file-word-o": { "name": "file-word", "style": "regular" },
|
||||
"file-zip-o": { "name": "file-zipper", "style": "regular" },
|
||||
"flash": "bolt",
|
||||
"futbol-o": { "name": "futbol", "style": "regular" },
|
||||
"gbp": "sterling-sign",
|
||||
"ge": "greater-than-equal",
|
||||
"gear": "gear",
|
||||
"gears": "gears",
|
||||
"google-plus-circle": { "name": "google-plus", "style": "brands" },
|
||||
"google-plus-official": { "name": "google-plus", "style": "brands" },
|
||||
"group": "users",
|
||||
"hand-grab-o": { "name": "hand", "style": "regular" },
|
||||
"hand-lizard-o": { "name": "hand-lizard", "style": "regular" },
|
||||
"hand-paper-o": { "name": "hand", "style": "regular" },
|
||||
"hand-peace-o": { "name": "hand-peace", "style": "regular" },
|
||||
"hand-pointer-o": { "name": "hand-pointer", "style": "regular" },
|
||||
"hand-rock-o": { "name": "hand-back-fist", "style": "regular" },
|
||||
"hand-scissors-o": { "name": "hand-scissors", "style": "regular" },
|
||||
"hand-spock-o": { "name": "hand-spock", "style": "regular" },
|
||||
"hand-stop-o": { "name": "hand", "style": "regular" },
|
||||
"hard-of-hearing": "ear-deaf",
|
||||
"header": "heading",
|
||||
"hotel": "bed",
|
||||
"hourglass-1": "hourglass-start",
|
||||
"hourglass-2": "hourglass-half",
|
||||
"hourglass-3": "hourglass-end",
|
||||
"id-badge-o": { "name": "id-badge", "style": "regular" },
|
||||
"id-card-o": { "name": "id-card", "style": "regular" },
|
||||
"ils": "shekel-sign",
|
||||
"image": "image",
|
||||
"inr": "indian-rupee-sign",
|
||||
"institution": "building-columns",
|
||||
"intersex": "mars-and-venus",
|
||||
"jpy": "yen-sign",
|
||||
"krw": "won-sign",
|
||||
"legal": "gavel",
|
||||
"life-bouy": "life-ring",
|
||||
"life-buoy": "life-ring",
|
||||
"life-saver": "life-ring",
|
||||
"line-chart": "chart-line",
|
||||
"linkedin-in": { "name": "linkedin-in", "style": "brands" },
|
||||
"map-o": { "name": "map", "style": "regular" },
|
||||
"mortar-board": "graduation-cap",
|
||||
"navicon": "bars",
|
||||
"newspaper-o": { "name": "newspaper", "style": "regular" },
|
||||
"paste": "clipboard",
|
||||
"pencil-square-o": { "name": "pen-to-square", "style": "regular" },
|
||||
"pencil-square": "pen-to-square",
|
||||
"photo": "image",
|
||||
"pie-chart": "chart-pie",
|
||||
"refresh": "rotate",
|
||||
"registered": { "name": "registered", "style": "regular" },
|
||||
"remove": "xmark",
|
||||
"reorder": "bars",
|
||||
"rmb": "yen-sign",
|
||||
"rouble": "ruble-sign",
|
||||
"rub": "ruble-sign",
|
||||
"ruble": "ruble-sign",
|
||||
"rupee": "indian-rupee-sign",
|
||||
"s15": "bath",
|
||||
"save": "floppy-disk",
|
||||
"send": "paper-plane",
|
||||
"send-o": { "name": "paper-plane", "style": "regular" },
|
||||
"shekel": "shekel-sign",
|
||||
"sheqel": "shekel-sign",
|
||||
"shield-alt": "shield-halved",
|
||||
"shopping-bag": "bag-shopping",
|
||||
"sign-in-alt": "right-to-bracket",
|
||||
"sign-out-alt": "right-from-bracket",
|
||||
"signing": "hands",
|
||||
"soccer-ball-o": { "name": "futbol", "style": "regular" },
|
||||
"sort-alpha-down": "arrow-down-a-z",
|
||||
"sort-alpha-up": "arrow-up-a-z",
|
||||
"sort-amount-down": "arrow-down-short-wide",
|
||||
"sort-amount-up": "arrow-up-short-wide",
|
||||
"sort-numeric-down": "arrow-down-1-9",
|
||||
"sort-numeric-up": "arrow-up-1-9",
|
||||
"spoon": "utensil-spoon",
|
||||
"support": "life-ring",
|
||||
"tablet": "tablet-screen-button",
|
||||
"tachometer": "gauge-high",
|
||||
"television": "tv",
|
||||
"thumb-tack": "thumbtack",
|
||||
"thumbs-o-down": { "name": "thumbs-down", "style": "regular" },
|
||||
"thumbs-o-up": { "name": "thumbs-up", "style": "regular" },
|
||||
"ticket": "ticket-simple",
|
||||
"times-rectangle": "rectangle-xmark",
|
||||
"times-rectangle-o": { "name": "rectangle-xmark", "style": "regular" },
|
||||
"toggle-down": { "name": "square-caret-down", "style": "regular" },
|
||||
"toggle-left": { "name": "square-caret-left", "style": "regular" },
|
||||
"toggle-right": { "name": "square-caret-right", "style": "regular" },
|
||||
"toggle-up": { "name": "square-caret-up", "style": "regular" },
|
||||
"trash": "trash",
|
||||
"trash-o": { "name": "trash-can", "style": "regular" },
|
||||
"try": "turkish-lira-sign",
|
||||
"turkish-lira": "turkish-lira-sign",
|
||||
"university": "building-columns",
|
||||
"unlink": "link-slash",
|
||||
"usd": "dollar-sign",
|
||||
"user-circle-o": { "name": "circle-user", "style": "regular" },
|
||||
"user-o": { "name": "user", "style": "regular" },
|
||||
"vcard": "address-card",
|
||||
"vcard-o": { "name": "address-card", "style": "regular" },
|
||||
"volume-control-phone": "phone-volume",
|
||||
"wheelchair-alt": "accessible-icon",
|
||||
"window-close": "rectangle-xmark",
|
||||
"window-close-o": { "name": "rectangle-xmark", "style": "regular" },
|
||||
"won": "won-sign",
|
||||
"y-combinator-square": { "name": "hacker-news", "style": "brands" },
|
||||
"yc-square": { "name": "hacker-news", "style": "brands" },
|
||||
"yen": "yen-sign"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
144
plugins/admin/themes/grav/js/scheduler-admin.js
vendored
Normal file
144
plugins/admin/themes/grav/js/scheduler-admin.js
vendored
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
/**
|
||||
* Scheduler Admin JavaScript
|
||||
* Handles dynamic loading of scheduler status in admin panel
|
||||
*/
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
// Wait for DOM to be ready
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Check if we're on the scheduler config page
|
||||
const healthStatusEl = document.getElementById('scheduler-health-status');
|
||||
const triggersEl = document.getElementById('scheduler-triggers');
|
||||
|
||||
if (!healthStatusEl && !triggersEl) {
|
||||
return; // Not on scheduler page
|
||||
}
|
||||
|
||||
// Load scheduler status
|
||||
loadSchedulerStatus();
|
||||
|
||||
// Refresh every 30 seconds if page is visible
|
||||
let refreshInterval = setInterval(function() {
|
||||
if (!document.hidden) {
|
||||
loadSchedulerStatus();
|
||||
}
|
||||
}, 30000);
|
||||
|
||||
// Clean up interval when leaving page
|
||||
window.addEventListener('beforeunload', function() {
|
||||
clearInterval(refreshInterval);
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Load scheduler status via AJAX
|
||||
*/
|
||||
function loadSchedulerStatus() {
|
||||
const healthStatusEl = document.getElementById('scheduler-health-status');
|
||||
const triggersEl = document.getElementById('scheduler-triggers');
|
||||
|
||||
// Get the admin base URL
|
||||
const adminBase = GravAdmin ? GravAdmin.config.base_url_relative : '/admin';
|
||||
const nonce = GravAdmin ? GravAdmin.config.admin_nonce : '';
|
||||
|
||||
// Make AJAX request
|
||||
fetch(adminBase + '/scheduler/status', {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'X-Requested-With': 'XMLHttpRequest',
|
||||
'Admin-Nonce': nonce
|
||||
},
|
||||
credentials: 'same-origin'
|
||||
})
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then(data => {
|
||||
// Update health status
|
||||
if (healthStatusEl && data.health) {
|
||||
healthStatusEl.innerHTML = data.health;
|
||||
healthStatusEl.classList.remove('text-muted');
|
||||
}
|
||||
|
||||
// Update triggers
|
||||
if (triggersEl && data.triggers) {
|
||||
triggersEl.innerHTML = data.triggers;
|
||||
triggersEl.classList.remove('text-muted');
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error loading scheduler status:', error);
|
||||
|
||||
// Show error message
|
||||
if (healthStatusEl) {
|
||||
healthStatusEl.innerHTML = '<div class="alert alert-danger">Failed to load status</div>';
|
||||
}
|
||||
if (triggersEl) {
|
||||
triggersEl.innerHTML = '<div class="alert alert-danger">Failed to load triggers</div>';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Test scheduler webhook
|
||||
*/
|
||||
window.testSchedulerWebhook = function() {
|
||||
const token = document.querySelector('input[name="data[scheduler][modern][webhook][token]"]')?.value;
|
||||
|
||||
if (!token) {
|
||||
alert('Please set a webhook token first');
|
||||
return;
|
||||
}
|
||||
|
||||
const siteUrl = window.location.origin;
|
||||
const webhookUrl = siteUrl + '/scheduler/webhook';
|
||||
|
||||
fetch(webhookUrl, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + token,
|
||||
'Accept': 'application/json'
|
||||
}
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
alert('Webhook test successful! Jobs run: ' + (data.jobs_run || 0));
|
||||
} else {
|
||||
alert('Webhook test failed: ' + (data.message || 'Unknown error'));
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
alert('Webhook test error: ' + error.message);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Generate secure token
|
||||
*/
|
||||
window.generateSchedulerToken = function() {
|
||||
const tokenField = document.querySelector('input[name="data[scheduler][modern][webhook][token]"]');
|
||||
|
||||
if (!tokenField) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Generate random token (32 bytes = 64 hex chars)
|
||||
const array = new Uint8Array(32);
|
||||
crypto.getRandomValues(array);
|
||||
const token = Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');
|
||||
|
||||
tokenField.value = token;
|
||||
|
||||
// Trigger change event
|
||||
const event = new Event('change', { bubbles: true });
|
||||
tokenField.dispatchEvent(event);
|
||||
};
|
||||
|
||||
})();
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
{% extends "forms/field.html.twig" %}
|
||||
|
||||
{% macro bytesToSize(bytes) -%}
|
||||
{% spaceless %}
|
||||
{% apply spaceless %}
|
||||
{% set kilobyte = 1024 %}
|
||||
{% set megabyte = kilobyte * 1024 %}
|
||||
{% set gigabyte = megabyte * 1024 %}
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
{% else %}
|
||||
{{ (bytes / terabyte)|number_format(2, '.') ~ ' TB' }}
|
||||
{% endif %}
|
||||
{% endspaceless %}
|
||||
{% endapply %}
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro preview(path, value, global) %}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
{% extends "forms/field.html.twig" %}
|
||||
|
||||
{% block field %}
|
||||
<div class="webhook-status-field">
|
||||
{% set plugin_exists = config.plugins['scheduler-webhook'] is defined %}
|
||||
{% set plugin_enabled = plugin_exists and config.plugins['scheduler-webhook'].enabled %}
|
||||
|
||||
{% if not plugin_exists %}
|
||||
{# Plugin not installed #}
|
||||
<div class="alert alert-warning">
|
||||
<strong>Webhook Plugin Required</strong><br>
|
||||
The <code>scheduler-webhook</code> plugin is required for webhook functionality.<br><br>
|
||||
<a class="button button-primary" href="{{ base_url_relative }}/plugins/install/scheduler-webhook">
|
||||
<i class="fa fa-download"></i> Install Plugin Now
|
||||
</a>
|
||||
<span class="hint" style="margin-left: 10px;">or run: <code>bin/gpm install scheduler-webhook</code></span>
|
||||
</div>
|
||||
{% elseif not plugin_enabled %}
|
||||
{# Plugin installed but disabled #}
|
||||
<div class="alert alert-info">
|
||||
<i class="fa fa-info-circle"></i> <strong>Webhook Plugin Installed</strong><br>
|
||||
The scheduler-webhook plugin is installed but disabled.
|
||||
<a href="{{ base_url_relative }}/plugins/scheduler-webhook">Enable it in plugin settings</a> to use webhook functionality.
|
||||
</div>
|
||||
{% else %}
|
||||
{# Plugin installed and enabled #}
|
||||
<div class="alert alert-success">
|
||||
<i class="fa fa-check-circle"></i> <strong>Webhook Plugin Ready!</strong><br>
|
||||
The scheduler-webhook plugin is installed and active. Configure your webhook settings below.
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
@ -33,13 +33,11 @@
|
|||
{{ assets.js()|raw }}
|
||||
{% endblock %}
|
||||
|
||||
<noscript>
|
||||
<style>
|
||||
.simplebar-content-wrapper {
|
||||
overflow: auto;
|
||||
}
|
||||
</style>
|
||||
</noscript>
|
||||
<style>
|
||||
.simplebar-content-wrapper {
|
||||
overflow: auto;
|
||||
}
|
||||
</style>
|
||||
|
||||
</head>
|
||||
{% block body %}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{% if custom_admin_footer %}
|
||||
{{ custom_admin_footer|raw }}
|
||||
{% else %}
|
||||
<a href="https://getgrav.org" target="_blank" rel="noopener noreferrer">Grav</a> v<span class="grav-version">{{ constant('GRAV_VERSION') }}</span> - Admin v{{ admin_version }} - {{ "PLUGIN_ADMIN.WAS_MADE_WITH"|t|lower }} <i class="fa fa-heart-o pulse"></i> {{ "PLUGIN_ADMIN.BY"|t|lower }} <a href="https://trilby.media" target="_blank" rel="noopener noreferrer">Trilby Media</a>.
|
||||
<a href="https://getgrav.org" target="_blank" rel="noopener noreferrer"><i class="fa fa-grav"></i> Grav</a> v<span class="grav-version">{{ constant('GRAV_VERSION') }}</span> - Admin v{{ admin_version }} - {{ "PLUGIN_ADMIN.WAS_MADE_WITH"|t|lower }} <i class="fa fa-heart-o pulse"></i> {{ "PLUGIN_ADMIN.BY"|t|lower }} <a href="https://trilby.media" target="_blank" rel="noopener noreferrer">Trilby Media</a>.
|
||||
{% endif %}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,10 @@
|
|||
{% if user.authorized and authorize(['admin.login', 'admin.super']) %}
|
||||
{% set notifications = (config.plugins.admin.widgets['dashboard-notifications'] or config.plugins.admin.notifications.dashboard or config.plugins.admin.notifications.plugins or config.plugins.admin.notifications.themes) ? 1 : 0 %}
|
||||
{% set feed_enabled = config.plugins.admin.notifications.feed is same as(true) or config.plugins.admin.notifications.feed == 'true' %}
|
||||
{% set dashboard_enabled = config.plugins.admin.notifications.dashboard is same as(true) or config.plugins.admin.notifications.dashboard == 'true' %}
|
||||
{% set plugins_enabled = config.plugins.admin.notifications.plugins is same as(true) or config.plugins.admin.notifications.plugins == 'true' %}
|
||||
{% set themes_enabled = config.plugins.admin.notifications.themes is same as(true) or config.plugins.admin.notifications.themes == 'true' %}
|
||||
{% set notifications = (feed_enabled or dashboard_enabled or plugins_enabled or themes_enabled) ? 1 : 0 %}
|
||||
|
||||
{% switch template_route %}
|
||||
{% case 'dashboard' %}
|
||||
{% set notifications_filters = "['feed', 'dashboard', 'top']" %}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@
|
|||
{% do assets.addCss(theme_url~'/css-compiled/template.css', {priority: 20}) %}
|
||||
{% do assets.addCss('asset://admin-preset.css', {priority: 5}) %}
|
||||
{% do assets.addCss(theme_url~'/css-compiled/simple-fonts.css') %}
|
||||
{% do assets.addCss(theme_url~'/css/fork-awesome.min.css') %}
|
||||
{% do assets.addCss(theme_url~'/css/fontawesome7.min.css') %}
|
||||
{% do assets.addCss(theme_url~'/css/fork-awesome-shim.css') %}
|
||||
{% do assets.addCss(theme_url~'/css/chartist.min.css') %}
|
||||
{% do assets.addCss(theme_url~'/css/selectize.min.css') %}
|
||||
{% do assets.addCss(theme_url~'/css/hint.base.min.css') %}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,33 @@
|
|||
<script src="{{ url('plugin://admin/themes/grav/js/clipboard-helper.js') }}"></script>
|
||||
<div class="scheduler-content">
|
||||
|
||||
{% set data = admin.data('config/scheduler') %}
|
||||
{% set cron_status = grav.scheduler.isCrontabSetup() %}
|
||||
{% set user = grav.scheduler.whoami() %}
|
||||
{% set webhook_enabled = grav.scheduler.isWebhookEnabled() %}
|
||||
{% set active_triggers = grav.scheduler.getActiveTriggers() %}
|
||||
|
||||
{% if cron_status == 1 %}
|
||||
<div class="alert notice secondary-accent">
|
||||
<div id="show-instructions" class="button button-small"><i class="fa fa-clock-o"></i> {{ "PLUGIN_ADMIN.SCHEDULER_INSTALL_INSTRUCTIONS"|t }}</div>
|
||||
<i class="fa fa-check"></i> {{ "PLUGIN_ADMIN.SCHEDULER_INSTALLED_READY"|t }}
|
||||
</div>
|
||||
{% if active_triggers|length > 0 %}
|
||||
{# We have at least one active trigger method #}
|
||||
{% if 'webhook' in active_triggers and 'cron' not in active_triggers %}
|
||||
{# Webhook only mode #}
|
||||
<div class="alert notice secondary-accent">
|
||||
<div id="show-instructions" class="button button-small button-outline float-right"><i class="fa fa-clock-o"></i> {{ "PLUGIN_ADMIN.SCHEDULER_INSTALL_INSTRUCTIONS"|t }}</div>
|
||||
<i class="fa fa-plug"></i> <strong>Webhook Active</strong> - Scheduler is ready to receive webhook triggers
|
||||
</div>
|
||||
{% elseif 'cron' in active_triggers and 'webhook' in active_triggers %}
|
||||
{# Both cron and webhook #}
|
||||
<div class="alert notice secondary-accent">
|
||||
<div id="show-instructions" class="button button-small button-outline float-right"><i class="fa fa-clock-o"></i> {{ "PLUGIN_ADMIN.SCHEDULER_INSTALL_INSTRUCTIONS"|t }}</div>
|
||||
<i class="fa fa-check"></i> <strong>Cron & Webhook Active</strong> - Scheduler is running via cron and accepts webhook triggers
|
||||
</div>
|
||||
{% elseif 'cron' in active_triggers %}
|
||||
{# Cron only #}
|
||||
<div class="alert notice secondary-accent">
|
||||
<div id="show-instructions" class="button button-small button-outline float-right"><i class="fa fa-clock-o"></i> {{ "PLUGIN_ADMIN.SCHEDULER_INSTALL_INSTRUCTIONS"|t }}</div>
|
||||
<i class="fa fa-check"></i> {{ "PLUGIN_ADMIN.SCHEDULER_INSTALLED_READY"|t }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% elseif cron_status == 2 %}
|
||||
<div class="alert warning"> {{ "PLUGIN_ADMIN.SCHEDULER_CRON_NA"|t([user])|raw }}</div>
|
||||
{% else %}
|
||||
|
|
@ -17,8 +36,35 @@
|
|||
|
||||
<div class="alert notice"><i class="fa fa-exclamation-circle"></i> {{ "PLUGIN_ADMIN.SCHEDULER_WARNING"|t([user]) }}</div>
|
||||
|
||||
<div id="cron-install" class="form-border overlay {{ cron_status == 1 ? 'hide' : ''}}">
|
||||
<pre><code>{{- grav.scheduler.getCronCommand()|trim -}}</code></pre>
|
||||
<div id="cron-install" class="form-border overlay {{ (active_triggers|length > 0) ? 'hide' : ''}}">
|
||||
{% if webhook_enabled %}
|
||||
<h3>Webhook Setup</h3>
|
||||
<p>The scheduler is configured to use webhooks. To trigger jobs via webhook:</p>
|
||||
|
||||
{% set webhook_token = config.get('scheduler.modern.webhook.token') %}
|
||||
{% if not webhook_token %}
|
||||
{% set webhook_token = 'YOUR_TOKEN' %}
|
||||
{% endif %}
|
||||
<div class="form-input-wrapper form-input-addon-wrapper" style="margin: 1rem 0;">
|
||||
<textarea id="webhook-setup-cmd" readonly rows="2" style="font-family: monospace; background: #f8f9fa; border: 1px solid #dee2e6; padding: 0.375rem 0.75rem; resize: none; white-space: pre; border-radius: 4px 0 0 4px;">curl -X POST "{{ grav.base_url_absolute }}/scheduler/webhook" \
|
||||
-H "Authorization: Bearer {{ webhook_token }}"</textarea>
|
||||
<div class="form-input-addon form-input-append" style="cursor: pointer; background: #e9ecef; border: 1px solid #dee2e6; border-left: 0; padding: 0.375rem 0.75rem; display: inline-flex; align-items: center; border-radius: 0 4px 4px 0;" onclick="GravClipboard.copy(this)">
|
||||
<i class="fa fa-copy" style="margin-right: 0.25rem;"></i> Copy
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>Make sure the <strong>scheduler-webhook</strong> plugin is installed and enabled.</p>
|
||||
|
||||
<hr>
|
||||
<h3>Alternative: Cron Setup</h3>
|
||||
{% endif %}
|
||||
|
||||
<div class="form-input-wrapper form-input-addon-wrapper" style="margin: 1rem 0;">
|
||||
<input type="text" id="cron-setup-cmd" readonly value="{{ grav.scheduler.getCronCommand()|trim }}" style="font-family: monospace; background: #f8f9fa; border: 1px solid #dee2e6; padding: 0.375rem 0.75rem; border-radius: 4px 0 0 4px;">
|
||||
<div class="form-input-addon form-input-append" style="cursor: pointer; background: #e9ecef; border: 1px solid #dee2e6; border-left: 0; padding: 0.375rem 0.75rem; display: inline-flex; align-items: center; border-radius: 0 4px 4px 0;" onclick="GravClipboard.copy(this)">
|
||||
<i class="fa fa-copy" style="margin-right: 0.25rem;"></i> Copy
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>{{ "PLUGIN_ADMIN.SCHEDULER_POST_INSTRUCTIONS"|t([user])|raw }}</p>
|
||||
</div>
|
||||
|
|
|
|||
40
plugins/admin/themes/grav/test-icons.html
Normal file
40
plugins/admin/themes/grav/test-icons.html
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Icon Test</title>
|
||||
<link rel="stylesheet" href="css/fontawesome7.min.css">
|
||||
<link rel="stylesheet" href="css/fork-awesome-shim.css">
|
||||
<style>
|
||||
body { font-family: Arial, sans-serif; padding: 20px; }
|
||||
.test-icon { font-size: 24px; margin: 10px; }
|
||||
.test-row { margin: 20px 0; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>FontAwesome 7 Icon Test</h1>
|
||||
|
||||
<div class="test-row">
|
||||
<h3>Testing fa-sign-out with ForkAwesome shim:</h3>
|
||||
<i class="fa fa-sign-out test-icon"></i> - Should show logout icon
|
||||
</div>
|
||||
|
||||
<div class="test-row">
|
||||
<h3>Testing fa-list-ol with ForkAwesome shim:</h3>
|
||||
<i class="fa fa-list-ol test-icon"></i> - Should show ordered list icon
|
||||
</div>
|
||||
|
||||
<div class="test-row">
|
||||
<h3>Testing native FontAwesome 7 classes:</h3>
|
||||
<i class="fa-solid fa-arrow-right-from-bracket test-icon"></i> - Native FA7 logout icon (solid)<br>
|
||||
<i class="fa-solid fa-list-ol test-icon"></i> - Native FA7 list icon (solid)<br>
|
||||
<i class="fa-solid fa-right-from-bracket test-icon"></i> - Alternative logout icon
|
||||
</div>
|
||||
|
||||
<div class="test-row">
|
||||
<h3>Testing with different font weights:</h3>
|
||||
<i class="fa fa-sign-out test-icon" style="font-weight: 900;"></i> - Force 900 weight<br>
|
||||
<i class="fa fa-sign-out test-icon" style="font-weight: 400;"></i> - Force 400 weight
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
BIN
plugins/admin/themes/grav/webfonts/fa-brands-400.woff2
Normal file
BIN
plugins/admin/themes/grav/webfonts/fa-brands-400.woff2
Normal file
Binary file not shown.
BIN
plugins/admin/themes/grav/webfonts/fa-regular-400.woff2
Normal file
BIN
plugins/admin/themes/grav/webfonts/fa-regular-400.woff2
Normal file
Binary file not shown.
BIN
plugins/admin/themes/grav/webfonts/fa-solid-900.woff2
Normal file
BIN
plugins/admin/themes/grav/webfonts/fa-solid-900.woff2
Normal file
Binary file not shown.
BIN
plugins/admin/themes/grav/webfonts/fa-v4compatibility.woff2
Normal file
BIN
plugins/admin/themes/grav/webfonts/fa-v4compatibility.woff2
Normal file
Binary file not shown.
5
plugins/admin/vendor/bin/pscss
vendored
5
plugins/admin/vendor/bin/pscss
vendored
|
|
@ -112,9 +112,8 @@ if (PHP_VERSION_ID < 80000) {
|
|||
(function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
|
||||
|| (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
|
||||
) {
|
||||
include("phpvfscomposer://" . __DIR__ . '/..'.'/scssphp/scssphp/bin/pscss');
|
||||
exit(0);
|
||||
return include("phpvfscomposer://" . __DIR__ . '/..'.'/scssphp/scssphp/bin/pscss');
|
||||
}
|
||||
}
|
||||
|
||||
include __DIR__ . '/..'.'/scssphp/scssphp/bin/pscss';
|
||||
return include __DIR__ . '/..'.'/scssphp/scssphp/bin/pscss';
|
||||
|
|
|
|||
10
plugins/admin/vendor/composer/autoload_files.php
vendored
10
plugins/admin/vendor/composer/autoload_files.php
vendored
|
|
@ -1,10 +0,0 @@
|
|||
<?php
|
||||
|
||||
// autoload_files.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(__DIR__);
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'7e9bd612cc444b3eed788ebbe46263a0' => $vendorDir . '/laminas/laminas-zendframework-bridge/src/autoload.php',
|
||||
);
|
||||
|
|
@ -7,7 +7,6 @@ $baseDir = dirname($vendorDir);
|
|||
|
||||
return array(
|
||||
'ScssPhp\\ScssPhp\\' => array($vendorDir . '/scssphp/scssphp/src'),
|
||||
'Laminas\\ZendFrameworkBridge\\' => array($vendorDir . '/laminas/laminas-zendframework-bridge/src'),
|
||||
'Laminas\\Xml\\' => array($vendorDir . '/laminas/laminas-xml/src'),
|
||||
'Grav\\Plugin\\Admin\\' => array($baseDir . '/classes/plugin'),
|
||||
);
|
||||
|
|
|
|||
12
plugins/admin/vendor/composer/autoload_real.php
vendored
12
plugins/admin/vendor/composer/autoload_real.php
vendored
|
|
@ -33,18 +33,6 @@ class ComposerAutoloaderInit98c98c1c3d67f21a128f935fe4a74897
|
|||
|
||||
$loader->register(true);
|
||||
|
||||
$filesToLoad = \Composer\Autoload\ComposerStaticInit98c98c1c3d67f21a128f935fe4a74897::$files;
|
||||
$requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
|
||||
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
||||
|
||||
require $file;
|
||||
}
|
||||
}, null, null);
|
||||
foreach ($filesToLoad as $fileIdentifier => $file) {
|
||||
$requireFile($fileIdentifier, $file);
|
||||
}
|
||||
|
||||
return $loader;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,10 +6,6 @@ namespace Composer\Autoload;
|
|||
|
||||
class ComposerStaticInit98c98c1c3d67f21a128f935fe4a74897
|
||||
{
|
||||
public static $files = array (
|
||||
'7e9bd612cc444b3eed788ebbe46263a0' => __DIR__ . '/..' . '/laminas/laminas-zendframework-bridge/src/autoload.php',
|
||||
);
|
||||
|
||||
public static $prefixLengthsPsr4 = array (
|
||||
'S' =>
|
||||
array (
|
||||
|
|
@ -17,7 +13,6 @@ class ComposerStaticInit98c98c1c3d67f21a128f935fe4a74897
|
|||
),
|
||||
'L' =>
|
||||
array (
|
||||
'Laminas\\ZendFrameworkBridge\\' => 28,
|
||||
'Laminas\\Xml\\' => 12,
|
||||
),
|
||||
'G' =>
|
||||
|
|
@ -31,10 +26,6 @@ class ComposerStaticInit98c98c1c3d67f21a128f935fe4a74897
|
|||
array (
|
||||
0 => __DIR__ . '/..' . '/scssphp/scssphp/src',
|
||||
),
|
||||
'Laminas\\ZendFrameworkBridge\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/laminas/laminas-zendframework-bridge/src',
|
||||
),
|
||||
'Laminas\\Xml\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/laminas/laminas-xml/src',
|
||||
|
|
|
|||
85
plugins/admin/vendor/composer/installed.json
vendored
85
plugins/admin/vendor/composer/installed.json
vendored
|
|
@ -63,71 +63,6 @@
|
|||
],
|
||||
"install-path": "../laminas/laminas-xml"
|
||||
},
|
||||
{
|
||||
"name": "laminas/laminas-zendframework-bridge",
|
||||
"version": "1.4.1",
|
||||
"version_normalized": "1.4.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laminas/laminas-zendframework-bridge.git",
|
||||
"reference": "88bf037259869891afce6504cacc4f8a07b24d0f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/88bf037259869891afce6504cacc4f8a07b24d0f",
|
||||
"reference": "88bf037259869891afce6504cacc4f8a07b24d0f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.3 || ~8.0.0 || ~8.1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^9.3",
|
||||
"psalm/plugin-phpunit": "^0.15.1",
|
||||
"squizlabs/php_codesniffer": "^3.5",
|
||||
"vimeo/psalm": "^4.6"
|
||||
},
|
||||
"time": "2021-12-21T14:34:37+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laminas": {
|
||||
"module": "Laminas\\ZendFrameworkBridge"
|
||||
}
|
||||
},
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/autoload.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Laminas\\ZendFrameworkBridge\\": "src//"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"BSD-3-Clause"
|
||||
],
|
||||
"description": "Alias legacy ZF class names to Laminas Project equivalents.",
|
||||
"keywords": [
|
||||
"ZendFramework",
|
||||
"autoloading",
|
||||
"laminas",
|
||||
"zf"
|
||||
],
|
||||
"support": {
|
||||
"forum": "https://discourse.laminas.dev/",
|
||||
"issues": "https://github.com/laminas/laminas-zendframework-bridge/issues",
|
||||
"rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom",
|
||||
"source": "https://github.com/laminas/laminas-zendframework-bridge"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://funding.communitybridge.org/projects/laminas-project",
|
||||
"type": "community_bridge"
|
||||
}
|
||||
],
|
||||
"install-path": "../laminas/laminas-zendframework-bridge"
|
||||
},
|
||||
{
|
||||
"name": "p3k/picofeed",
|
||||
"version": "1.0.0",
|
||||
|
|
@ -191,17 +126,17 @@
|
|||
},
|
||||
{
|
||||
"name": "scssphp/scssphp",
|
||||
"version": "v1.11.0",
|
||||
"version_normalized": "1.11.0.0",
|
||||
"version": "v1.13.0",
|
||||
"version_normalized": "1.13.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/scssphp/scssphp.git",
|
||||
"reference": "33749d12c2569bb24071f94e9af828662dabb068"
|
||||
"reference": "63d1157457e5554edf00b0c1fabab4c1511d2520"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/scssphp/scssphp/zipball/33749d12c2569bb24071f94e9af828662dabb068",
|
||||
"reference": "33749d12c2569bb24071f94e9af828662dabb068",
|
||||
"url": "https://api.github.com/repos/scssphp/scssphp/zipball/63d1157457e5554edf00b0c1fabab4c1511d2520",
|
||||
"reference": "63d1157457e5554edf00b0c1fabab4c1511d2520",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -218,21 +153,21 @@
|
|||
"thoughtbot/bourbon": "^7.0",
|
||||
"twbs/bootstrap": "~5.0",
|
||||
"twbs/bootstrap4": "4.6.1",
|
||||
"zurb/foundation": "~6.5"
|
||||
"zurb/foundation": "~6.7.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-iconv": "Can be used as fallback when ext-mbstring is not available",
|
||||
"ext-mbstring": "For best performance, mbstring should be installed as it is faster than ext-iconv"
|
||||
},
|
||||
"time": "2022-09-02T21:24:55+00:00",
|
||||
"time": "2024-08-17T21:02:11+00:00",
|
||||
"bin": [
|
||||
"bin/pscss"
|
||||
],
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"bamarni-bin": {
|
||||
"forward-command": false,
|
||||
"bin-links": false
|
||||
"bin-links": false,
|
||||
"forward-command": false
|
||||
}
|
||||
},
|
||||
"installation-source": "dist",
|
||||
|
|
@ -268,7 +203,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/scssphp/scssphp/issues",
|
||||
"source": "https://github.com/scssphp/scssphp/tree/v1.11.0"
|
||||
"source": "https://github.com/scssphp/scssphp/tree/v1.13.0"
|
||||
},
|
||||
"install-path": "../scssphp/scssphp"
|
||||
}
|
||||
|
|
|
|||
25
plugins/admin/vendor/composer/installed.php
vendored
25
plugins/admin/vendor/composer/installed.php
vendored
|
|
@ -3,7 +3,7 @@
|
|||
'name' => 'getgrav/grav-plugin-admin',
|
||||
'pretty_version' => 'dev-develop',
|
||||
'version' => 'dev-develop',
|
||||
'reference' => '8c17ca7d75e271ee2cf4e38ae54e75d2ce8b9224',
|
||||
'reference' => '12bdb5af4bd10e30e24d191b7ea1a78602a583fb',
|
||||
'type' => 'grav-plugin',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
'getgrav/grav-plugin-admin' => array(
|
||||
'pretty_version' => 'dev-develop',
|
||||
'version' => 'dev-develop',
|
||||
'reference' => '8c17ca7d75e271ee2cf4e38ae54e75d2ce8b9224',
|
||||
'reference' => '12bdb5af4bd10e30e24d191b7ea1a78602a583fb',
|
||||
'type' => 'grav-plugin',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
|
|
@ -28,15 +28,6 @@
|
|||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'laminas/laminas-zendframework-bridge' => array(
|
||||
'pretty_version' => '1.4.1',
|
||||
'version' => '1.4.1.0',
|
||||
'reference' => '88bf037259869891afce6504cacc4f8a07b24d0f',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../laminas/laminas-zendframework-bridge',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'miniflux/picofeed' => array(
|
||||
'dev_requirement' => false,
|
||||
'replaced' => array(
|
||||
|
|
@ -53,20 +44,14 @@
|
|||
'dev_requirement' => false,
|
||||
),
|
||||
'scssphp/scssphp' => array(
|
||||
'pretty_version' => 'v1.11.0',
|
||||
'version' => '1.11.0.0',
|
||||
'reference' => '33749d12c2569bb24071f94e9af828662dabb068',
|
||||
'pretty_version' => 'v1.13.0',
|
||||
'version' => '1.13.0.0',
|
||||
'reference' => '63d1157457e5554edf00b0c1fabab4c1511d2520',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../scssphp/scssphp',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-php72' => array(
|
||||
'dev_requirement' => false,
|
||||
'replaced' => array(
|
||||
0 => '*',
|
||||
),
|
||||
),
|
||||
'symfony/polyfill-php73' => array(
|
||||
'dev_requirement' => false,
|
||||
'replaced' => array(
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
community_bridge: laminas-project
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
name: "Continuous Integration"
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- '[0-9]+.[0-9]+.x'
|
||||
- 'refs/pull/*'
|
||||
|
||||
jobs:
|
||||
matrix:
|
||||
name: Generate job matrix
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
matrix: ${{ steps.matrix.outputs.matrix }}
|
||||
steps:
|
||||
- name: Gather CI configuration
|
||||
id: matrix
|
||||
uses: laminas/laminas-ci-matrix-action@v1
|
||||
|
||||
qa:
|
||||
name: QA Checks
|
||||
needs: [matrix]
|
||||
runs-on: ${{ matrix.operatingSystem }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix: ${{ fromJSON(needs.matrix.outputs.matrix) }}
|
||||
steps:
|
||||
- name: ${{ matrix.name }}
|
||||
uses: laminas/laminas-continuous-integration-action@v1
|
||||
with:
|
||||
job: ${{ matrix.job }}
|
||||
|
|
@ -1,61 +0,0 @@
|
|||
# Alternate workflow example.
|
||||
# This one is identical to the one in release-on-milestone.yml, with one change:
|
||||
# the Release step uses the ORGANIZATION_ADMIN_TOKEN instead, to allow it to
|
||||
# trigger a release workflow event. This is useful if you have other actions
|
||||
# that intercept that event.
|
||||
|
||||
name: "Automatic Releases"
|
||||
|
||||
on:
|
||||
milestone:
|
||||
types:
|
||||
- "closed"
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: "GIT tag, release & create merge-up PR"
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: "actions/checkout@v2"
|
||||
|
||||
- name: "Release"
|
||||
uses: "laminas/automatic-releases@v1"
|
||||
with:
|
||||
command-name: "laminas:automatic-releases:release"
|
||||
env:
|
||||
"GITHUB_TOKEN": ${{ secrets.ORGANIZATION_ADMIN_TOKEN }}
|
||||
"SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }}
|
||||
"GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }}
|
||||
"GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }}
|
||||
|
||||
- name: "Create Merge-Up Pull Request"
|
||||
uses: "laminas/automatic-releases@v1"
|
||||
with:
|
||||
command-name: "laminas:automatic-releases:create-merge-up-pull-request"
|
||||
env:
|
||||
"GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }}
|
||||
"SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }}
|
||||
"GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }}
|
||||
"GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }}
|
||||
|
||||
- name: "Create and/or Switch to new Release Branch"
|
||||
uses: "laminas/automatic-releases@v1"
|
||||
with:
|
||||
command-name: "laminas:automatic-releases:switch-default-branch-to-next-minor"
|
||||
env:
|
||||
"GITHUB_TOKEN": ${{ secrets.ORGANIZATION_ADMIN_TOKEN }}
|
||||
"SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }}
|
||||
"GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }}
|
||||
"GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }}
|
||||
|
||||
- name: "Create new milestones"
|
||||
uses: "laminas/automatic-releases@v1"
|
||||
with:
|
||||
command-name: "laminas:automatic-releases:create-milestones"
|
||||
env:
|
||||
"GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }}
|
||||
"SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }}
|
||||
"GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }}
|
||||
"GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"ignore_php_platform_requirements": {
|
||||
"8.1": true
|
||||
}
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
Copyright (c) 2020 Laminas Project a Series of LF Projects, LLC. (https://getlaminas.org/)
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
Copyright (c) 2020 Laminas Project a Series of LF Projects, LLC.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
- Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
- Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
- Neither the name of Laminas Foundation nor the names of its contributors may
|
||||
be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
# laminas-zendframework-bridge
|
||||
|
||||
[](https://github.com/laminas/laminas-zendframework-bridge/actions?query=workflow%3A"Continuous+Integration")
|
||||
|
||||
|
||||
This library provides a custom autoloader that aliases legacy Zend Framework,
|
||||
Apigility, and Expressive classes to their replacements under the Laminas
|
||||
Project.
|
||||
|
||||
This package should be installed only if you are also using the composer plugin
|
||||
that installs Laminas packages to replace ZF/Apigility/Expressive packages.
|
||||
|
||||
This tool supports:
|
||||
|
||||
* Zend Framework MVC projects, all v2 and v3 releases
|
||||
* Apigility projects, all stable versions
|
||||
* Expressive versions, all stable versions
|
||||
|
||||
## Installation
|
||||
|
||||
Run the following to install this library:
|
||||
|
||||
```bash
|
||||
$ composer require laminas/laminas-zendframework-bridge
|
||||
```
|
||||
|
||||
## Support
|
||||
|
||||
* [Issues](https://github.com/laminas/laminas-zendframework-bridge/issues/)
|
||||
* [Forum](https://discourse.laminas.dev/)
|
||||
|
|
@ -1,61 +0,0 @@
|
|||
{
|
||||
"name": "laminas/laminas-zendframework-bridge",
|
||||
"description": "Alias legacy ZF class names to Laminas Project equivalents.",
|
||||
"license": "BSD-3-Clause",
|
||||
"keywords": [
|
||||
"autoloading",
|
||||
"laminas",
|
||||
"zf",
|
||||
"zendframework"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/laminas/laminas-zendframework-bridge/issues",
|
||||
"source": "https://github.com/laminas/laminas-zendframework-bridge",
|
||||
"rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom",
|
||||
"forum": "https://discourse.laminas.dev/"
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.3 || ~8.0.0 || ~8.1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^9.3",
|
||||
"psalm/plugin-phpunit": "^0.15.1",
|
||||
"squizlabs/php_codesniffer": "^3.5",
|
||||
"vimeo/psalm": "^4.6"
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/autoload.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Laminas\\ZendFrameworkBridge\\": "src//"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"files": [
|
||||
"test/classes.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"LaminasTest\\ZendFrameworkBridge\\": "test/",
|
||||
"LaminasTest\\ZendFrameworkBridge\\TestAsset\\": "test/TestAsset/classes/",
|
||||
"Laminas\\ApiTools\\": "test/TestAsset/LaminasApiTools/",
|
||||
"Mezzio\\": "test/TestAsset/Mezzio/",
|
||||
"Laminas\\": "test/TestAsset/Laminas/"
|
||||
}
|
||||
},
|
||||
"extra": {
|
||||
"laminas": {
|
||||
"module": "Laminas\\ZendFrameworkBridge"
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"sort-packages": true
|
||||
},
|
||||
"scripts": {
|
||||
"cs-check": "phpcs",
|
||||
"cs-fix": "phpcbf",
|
||||
"static-analysis": "psalm --shepherd --stats",
|
||||
"test": "phpunit --colors=always",
|
||||
"test-coverage": "phpunit --colors=always --coverage-clover clover.xml"
|
||||
}
|
||||
}
|
||||
3841
plugins/admin/vendor/laminas/laminas-zendframework-bridge/composer.lock
generated
vendored
3841
plugins/admin/vendor/laminas/laminas-zendframework-bridge/composer.lock
generated
vendored
File diff suppressed because it is too large
Load diff
|
|
@ -1,372 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
// NEVER REWRITE
|
||||
'zendframework/zendframework' => 'zendframework/zendframework',
|
||||
'zend-developer-tools/toolbar/bjy' => 'zend-developer-tools/toolbar/bjy',
|
||||
'zend-developer-tools/toolbar/doctrine' => 'zend-developer-tools/toolbar/doctrine',
|
||||
|
||||
// NAMESPACES
|
||||
// Zend Framework components
|
||||
'Zend\\AuraDi\\Config' => 'Laminas\\AuraDi\\Config',
|
||||
'Zend\\Authentication' => 'Laminas\\Authentication',
|
||||
'Zend\\Barcode' => 'Laminas\\Barcode',
|
||||
'Zend\\Cache' => 'Laminas\\Cache',
|
||||
'Zend\\Captcha' => 'Laminas\\Captcha',
|
||||
'Zend\\Code' => 'Laminas\\Code',
|
||||
'ZendCodingStandard\\Sniffs' => 'LaminasCodingStandard\\Sniffs',
|
||||
'ZendCodingStandard\\Utils' => 'LaminasCodingStandard\\Utils',
|
||||
'Zend\\ComponentInstaller' => 'Laminas\\ComponentInstaller',
|
||||
'Zend\\Config' => 'Laminas\\Config',
|
||||
'Zend\\ConfigAggregator' => 'Laminas\\ConfigAggregator',
|
||||
'Zend\\ConfigAggregatorModuleManager' => 'Laminas\\ConfigAggregatorModuleManager',
|
||||
'Zend\\ConfigAggregatorParameters' => 'Laminas\\ConfigAggregatorParameters',
|
||||
'Zend\\Console' => 'Laminas\\Console',
|
||||
'Zend\\ContainerConfigTest' => 'Laminas\\ContainerConfigTest',
|
||||
'Zend\\Crypt' => 'Laminas\\Crypt',
|
||||
'Zend\\Db' => 'Laminas\\Db',
|
||||
'ZendDeveloperTools' => 'Laminas\\DeveloperTools',
|
||||
'Zend\\Di' => 'Laminas\\Di',
|
||||
'Zend\\Diactoros' => 'Laminas\\Diactoros',
|
||||
'ZendDiagnostics\\Check' => 'Laminas\\Diagnostics\\Check',
|
||||
'ZendDiagnostics\\Result' => 'Laminas\\Diagnostics\\Result',
|
||||
'ZendDiagnostics\\Runner' => 'Laminas\\Diagnostics\\Runner',
|
||||
'Zend\\Dom' => 'Laminas\\Dom',
|
||||
'Zend\\Escaper' => 'Laminas\\Escaper',
|
||||
'Zend\\EventManager' => 'Laminas\\EventManager',
|
||||
'Zend\\Feed' => 'Laminas\\Feed',
|
||||
'Zend\\File' => 'Laminas\\File',
|
||||
'Zend\\Filter' => 'Laminas\\Filter',
|
||||
'Zend\\Form' => 'Laminas\\Form',
|
||||
'Zend\\Http' => 'Laminas\\Http',
|
||||
'Zend\\HttpHandlerRunner' => 'Laminas\\HttpHandlerRunner',
|
||||
'Zend\\Hydrator' => 'Laminas\\Hydrator',
|
||||
'Zend\\I18n' => 'Laminas\\I18n',
|
||||
'Zend\\InputFilter' => 'Laminas\\InputFilter',
|
||||
'Zend\\Json' => 'Laminas\\Json',
|
||||
'Zend\\Ldap' => 'Laminas\\Ldap',
|
||||
'Zend\\Loader' => 'Laminas\\Loader',
|
||||
'Zend\\Log' => 'Laminas\\Log',
|
||||
'Zend\\Mail' => 'Laminas\\Mail',
|
||||
'Zend\\Math' => 'Laminas\\Math',
|
||||
'Zend\\Memory' => 'Laminas\\Memory',
|
||||
'Zend\\Mime' => 'Laminas\\Mime',
|
||||
'Zend\\ModuleManager' => 'Laminas\\ModuleManager',
|
||||
'Zend\\Mvc' => 'Laminas\\Mvc',
|
||||
'Zend\\Navigation' => 'Laminas\\Navigation',
|
||||
'Zend\\Paginator' => 'Laminas\\Paginator',
|
||||
'Zend\\Permissions' => 'Laminas\\Permissions',
|
||||
'Zend\\Pimple\\Config' => 'Laminas\\Pimple\\Config',
|
||||
'Zend\\ProblemDetails' => 'Mezzio\\ProblemDetails',
|
||||
'Zend\\ProgressBar' => 'Laminas\\ProgressBar',
|
||||
'Zend\\Psr7Bridge' => 'Laminas\\Psr7Bridge',
|
||||
'Zend\\Router' => 'Laminas\\Router',
|
||||
'Zend\\Serializer' => 'Laminas\\Serializer',
|
||||
'Zend\\Server' => 'Laminas\\Server',
|
||||
'Zend\\ServiceManager' => 'Laminas\\ServiceManager',
|
||||
'ZendService\\ReCaptcha' => 'Laminas\\ReCaptcha',
|
||||
'ZendService\\Twitter' => 'Laminas\\Twitter',
|
||||
'Zend\\Session' => 'Laminas\\Session',
|
||||
'Zend\\SkeletonInstaller' => 'Laminas\\SkeletonInstaller',
|
||||
'Zend\\Soap' => 'Laminas\\Soap',
|
||||
'Zend\\Stdlib' => 'Laminas\\Stdlib',
|
||||
'Zend\\Stratigility' => 'Laminas\\Stratigility',
|
||||
'Zend\\Tag' => 'Laminas\\Tag',
|
||||
'Zend\\Test' => 'Laminas\\Test',
|
||||
'Zend\\Text' => 'Laminas\\Text',
|
||||
'Zend\\Uri' => 'Laminas\\Uri',
|
||||
'Zend\\Validator' => 'Laminas\\Validator',
|
||||
'Zend\\View' => 'Laminas\\View',
|
||||
'ZendXml' => 'Laminas\\Xml',
|
||||
'Zend\\Xml2Json' => 'Laminas\\Xml2Json',
|
||||
'Zend\\XmlRpc' => 'Laminas\\XmlRpc',
|
||||
'ZendOAuth' => 'Laminas\\OAuth',
|
||||
|
||||
// class ZendAcl in zend-expressive-authorization-acl
|
||||
'ZendAcl' => 'LaminasAcl',
|
||||
'Zend\\Expressive\\Authorization\\Acl\\ZendAcl' => 'Mezzio\\Authorization\\Acl\\LaminasAcl',
|
||||
// class ZendHttpClientDecorator in zend-feed
|
||||
'ZendHttp' => 'LaminasHttp',
|
||||
// class ZendModuleProvider in zend-config-aggregator-modulemanager
|
||||
'ZendModule' => 'LaminasModule',
|
||||
// class ZendRbac in zend-expressive-authorization-rbac
|
||||
'ZendRbac' => 'LaminasRbac',
|
||||
'Zend\\Expressive\\Authorization\\Rbac\\ZendRbac' => 'Mezzio\\Authorization\\Rbac\\LaminasRbac',
|
||||
// class ZendRouter in zend-expressive-router-zendrouter
|
||||
'ZendRouter' => 'LaminasRouter',
|
||||
'Zend\\Expressive\\Router\\ZendRouter' => 'Mezzio\\Router\\LaminasRouter',
|
||||
// class ZendViewRenderer in zend-expressive-zendviewrenderer
|
||||
'ZendViewRenderer' => 'LaminasViewRenderer',
|
||||
'Zend\\Expressive\\ZendView\\ZendViewRenderer' => 'Mezzio\\LaminasView\\LaminasViewRenderer',
|
||||
'a\\Zend' => 'a\\Zend',
|
||||
'b\\Zend' => 'b\\Zend',
|
||||
'c\\Zend' => 'c\\Zend',
|
||||
'd\\Zend' => 'd\\Zend',
|
||||
'e\\Zend' => 'e\\Zend',
|
||||
'f\\Zend' => 'f\\Zend',
|
||||
'g\\Zend' => 'g\\Zend',
|
||||
'h\\Zend' => 'h\\Zend',
|
||||
'i\\Zend' => 'i\\Zend',
|
||||
'j\\Zend' => 'j\\Zend',
|
||||
'k\\Zend' => 'k\\Zend',
|
||||
'l\\Zend' => 'l\\Zend',
|
||||
'm\\Zend' => 'm\\Zend',
|
||||
'n\\Zend' => 'n\\Zend',
|
||||
'o\\Zend' => 'o\\Zend',
|
||||
'p\\Zend' => 'p\\Zend',
|
||||
'q\\Zend' => 'q\\Zend',
|
||||
'r\\Zend' => 'r\\Zend',
|
||||
's\\Zend' => 's\\Zend',
|
||||
't\\Zend' => 't\\Zend',
|
||||
'u\\Zend' => 'u\\Zend',
|
||||
'v\\Zend' => 'v\\Zend',
|
||||
'w\\Zend' => 'w\\Zend',
|
||||
'x\\Zend' => 'x\\Zend',
|
||||
'y\\Zend' => 'y\\Zend',
|
||||
'z\\Zend' => 'z\\Zend',
|
||||
|
||||
// Expressive
|
||||
'Zend\\Expressive' => 'Mezzio',
|
||||
'ZendAuthentication' => 'LaminasAuthentication',
|
||||
'ZendAcl' => 'LaminasAcl',
|
||||
'ZendRbac' => 'LaminasRbac',
|
||||
'ZendRouter' => 'LaminasRouter',
|
||||
'ExpressiveUrlGenerator' => 'MezzioUrlGenerator',
|
||||
'ExpressiveInstaller' => 'MezzioInstaller',
|
||||
|
||||
// Apigility
|
||||
'ZF\\Apigility' => 'Laminas\\ApiTools',
|
||||
'ZF\\ApiProblem' => 'Laminas\\ApiTools\\ApiProblem',
|
||||
'ZF\\AssetManager' => 'Laminas\\ApiTools\\AssetManager',
|
||||
'ZF\\ComposerAutoloading' => 'Laminas\\ComposerAutoloading',
|
||||
'ZF\\Configuration' => 'Laminas\\ApiTools\\Configuration',
|
||||
'ZF\\ContentNegotiation' => 'Laminas\\ApiTools\\ContentNegotiation',
|
||||
'ZF\\ContentValidation' => 'Laminas\\ApiTools\\ContentValidation',
|
||||
'ZF\\DevelopmentMode' => 'Laminas\\DevelopmentMode',
|
||||
'ZF\\Doctrine\\QueryBuilder' => 'Laminas\\ApiTools\\Doctrine\\QueryBuilder',
|
||||
'ZF\\Hal' => 'Laminas\\ApiTools\\Hal',
|
||||
'ZF\\HttpCache' => 'Laminas\\ApiTools\\HttpCache',
|
||||
'ZF\\MvcAuth' => 'Laminas\\ApiTools\\MvcAuth',
|
||||
'ZF\\OAuth2' => 'Laminas\\ApiTools\\OAuth2',
|
||||
'ZF\\Rest' => 'Laminas\\ApiTools\\Rest',
|
||||
'ZF\\Rpc' => 'Laminas\\ApiTools\\Rpc',
|
||||
'ZF\\Versioning' => 'Laminas\\ApiTools\\Versioning',
|
||||
'a\\ZF' => 'a\\ZF',
|
||||
'b\\ZF' => 'b\\ZF',
|
||||
'c\\ZF' => 'c\\ZF',
|
||||
'd\\ZF' => 'd\\ZF',
|
||||
'e\\ZF' => 'e\\ZF',
|
||||
'f\\ZF' => 'f\\ZF',
|
||||
'g\\ZF' => 'g\\ZF',
|
||||
'h\\ZF' => 'h\\ZF',
|
||||
'i\\ZF' => 'i\\ZF',
|
||||
'j\\ZF' => 'j\\ZF',
|
||||
'k\\ZF' => 'k\\ZF',
|
||||
'l\\ZF' => 'l\\ZF',
|
||||
'm\\ZF' => 'm\\ZF',
|
||||
'n\\ZF' => 'n\\ZF',
|
||||
'o\\ZF' => 'o\\ZF',
|
||||
'p\\ZF' => 'p\\ZF',
|
||||
'q\\ZF' => 'q\\ZF',
|
||||
'r\\ZF' => 'r\\ZF',
|
||||
's\\ZF' => 's\\ZF',
|
||||
't\\ZF' => 't\\ZF',
|
||||
'u\\ZF' => 'u\\ZF',
|
||||
'v\\ZF' => 'v\\ZF',
|
||||
'w\\ZF' => 'w\\ZF',
|
||||
'x\\ZF' => 'x\\ZF',
|
||||
'y\\ZF' => 'y\\ZF',
|
||||
'z\\ZF' => 'z\\ZF',
|
||||
|
||||
'ApigilityModuleInterface' => 'ApiToolsModuleInterface',
|
||||
'ApigilityProviderInterface' => 'ApiToolsProviderInterface',
|
||||
'ApigilityVersionController' => 'ApiToolsVersionController',
|
||||
|
||||
// PACKAGES
|
||||
// ZF components, MVC
|
||||
'zendframework/skeleton-application' => 'laminas/skeleton-application',
|
||||
'zendframework/zend-auradi-config' => 'laminas/laminas-auradi-config',
|
||||
'zendframework/zend-authentication' => 'laminas/laminas-authentication',
|
||||
'zendframework/zend-barcode' => 'laminas/laminas-barcode',
|
||||
'zendframework/zend-cache' => 'laminas/laminas-cache',
|
||||
'zendframework/zend-captcha' => 'laminas/laminas-captcha',
|
||||
'zendframework/zend-code' => 'laminas/laminas-code',
|
||||
'zendframework/zend-coding-standard' => 'laminas/laminas-coding-standard',
|
||||
'zendframework/zend-component-installer' => 'laminas/laminas-component-installer',
|
||||
'zendframework/zend-composer-autoloading' => 'laminas/laminas-composer-autoloading',
|
||||
'zendframework/zend-config-aggregator' => 'laminas/laminas-config-aggregator',
|
||||
'zendframework/zend-config' => 'laminas/laminas-config',
|
||||
'zendframework/zend-console' => 'laminas/laminas-console',
|
||||
'zendframework/zend-container-config-test' => 'laminas/laminas-container-config-test',
|
||||
'zendframework/zend-crypt' => 'laminas/laminas-crypt',
|
||||
'zendframework/zend-db' => 'laminas/laminas-db',
|
||||
'zendframework/zend-developer-tools' => 'laminas/laminas-developer-tools',
|
||||
'zendframework/zend-diactoros' => 'laminas/laminas-diactoros',
|
||||
'zendframework/zenddiagnostics' => 'laminas/laminas-diagnostics',
|
||||
'zendframework/zend-di' => 'laminas/laminas-di',
|
||||
'zendframework/zend-dom' => 'laminas/laminas-dom',
|
||||
'zendframework/zend-escaper' => 'laminas/laminas-escaper',
|
||||
'zendframework/zend-eventmanager' => 'laminas/laminas-eventmanager',
|
||||
'zendframework/zend-feed' => 'laminas/laminas-feed',
|
||||
'zendframework/zend-file' => 'laminas/laminas-file',
|
||||
'zendframework/zend-filter' => 'laminas/laminas-filter',
|
||||
'zendframework/zend-form' => 'laminas/laminas-form',
|
||||
'zendframework/zend-httphandlerrunner' => 'laminas/laminas-httphandlerrunner',
|
||||
'zendframework/zend-http' => 'laminas/laminas-http',
|
||||
'zendframework/zend-hydrator' => 'laminas/laminas-hydrator',
|
||||
'zendframework/zend-i18n' => 'laminas/laminas-i18n',
|
||||
'zendframework/zend-i18n-resources' => 'laminas/laminas-i18n-resources',
|
||||
'zendframework/zend-inputfilter' => 'laminas/laminas-inputfilter',
|
||||
'zendframework/zend-json' => 'laminas/laminas-json',
|
||||
'zendframework/zend-json-server' => 'laminas/laminas-json-server',
|
||||
'zendframework/zend-ldap' => 'laminas/laminas-ldap',
|
||||
'zendframework/zend-loader' => 'laminas/laminas-loader',
|
||||
'zendframework/zend-log' => 'laminas/laminas-log',
|
||||
'zendframework/zend-mail' => 'laminas/laminas-mail',
|
||||
'zendframework/zend-math' => 'laminas/laminas-math',
|
||||
'zendframework/zend-memory' => 'laminas/laminas-memory',
|
||||
'zendframework/zend-mime' => 'laminas/laminas-mime',
|
||||
'zendframework/zend-modulemanager' => 'laminas/laminas-modulemanager',
|
||||
'zendframework/zend-mvc' => 'laminas/laminas-mvc',
|
||||
'zendframework/zend-navigation' => 'laminas/laminas-navigation',
|
||||
'zendframework/zend-oauth' => 'laminas/laminas-oauth',
|
||||
'zendframework/zend-paginator' => 'laminas/laminas-paginator',
|
||||
'zendframework/zend-permissions-acl' => 'laminas/laminas-permissions-acl',
|
||||
'zendframework/zend-permissions-rbac' => 'laminas/laminas-permissions-rbac',
|
||||
'zendframework/zend-pimple-config' => 'laminas/laminas-pimple-config',
|
||||
'zendframework/zend-progressbar' => 'laminas/laminas-progressbar',
|
||||
'zendframework/zend-psr7bridge' => 'laminas/laminas-psr7bridge',
|
||||
'zendframework/zend-recaptcha' => 'laminas/laminas-recaptcha',
|
||||
'zendframework/zend-router' => 'laminas/laminas-router',
|
||||
'zendframework/zend-serializer' => 'laminas/laminas-serializer',
|
||||
'zendframework/zend-server' => 'laminas/laminas-server',
|
||||
'zendframework/zend-servicemanager' => 'laminas/laminas-servicemanager',
|
||||
'zendframework/zendservice-recaptcha' => 'laminas/laminas-recaptcha',
|
||||
'zendframework/zendservice-twitter' => 'laminas/laminas-twitter',
|
||||
'zendframework/zend-session' => 'laminas/laminas-session',
|
||||
'zendframework/zend-skeleton-installer' => 'laminas/laminas-skeleton-installer',
|
||||
'zendframework/zend-soap' => 'laminas/laminas-soap',
|
||||
'zendframework/zend-stdlib' => 'laminas/laminas-stdlib',
|
||||
'zendframework/zend-stratigility' => 'laminas/laminas-stratigility',
|
||||
'zendframework/zend-tag' => 'laminas/laminas-tag',
|
||||
'zendframework/zend-test' => 'laminas/laminas-test',
|
||||
'zendframework/zend-text' => 'laminas/laminas-text',
|
||||
'zendframework/zend-uri' => 'laminas/laminas-uri',
|
||||
'zendframework/zend-validator' => 'laminas/laminas-validator',
|
||||
'zendframework/zend-view' => 'laminas/laminas-view',
|
||||
'zendframework/zend-xml2json' => 'laminas/laminas-xml2json',
|
||||
'zendframework/zend-xml' => 'laminas/laminas-xml',
|
||||
'zendframework/zend-xmlrpc' => 'laminas/laminas-xmlrpc',
|
||||
|
||||
// Expressive packages
|
||||
'zendframework/zend-expressive' => 'mezzio/mezzio',
|
||||
'zendframework/zend-expressive-zendrouter' => 'mezzio/mezzio-laminasrouter',
|
||||
'zendframework/zend-problem-details' => 'mezzio/mezzio-problem-details',
|
||||
'zendframework/zend-expressive-zendviewrenderer' => 'mezzio/mezzio-laminasviewrenderer',
|
||||
|
||||
// Apigility packages
|
||||
'zfcampus/apigility-documentation' => 'laminas-api-tools/documentation',
|
||||
'zfcampus/statuslib-example' => 'laminas-api-tools/statuslib-example',
|
||||
'zfcampus/zf-apigility' => 'laminas-api-tools/api-tools',
|
||||
'zfcampus/zf-api-problem' => 'laminas-api-tools/api-tools-api-problem',
|
||||
'zfcampus/zf-asset-manager' => 'laminas-api-tools/api-tools-asset-manager',
|
||||
'zfcampus/zf-configuration' => 'laminas-api-tools/api-tools-configuration',
|
||||
'zfcampus/zf-content-negotiation' => 'laminas-api-tools/api-tools-content-negotiation',
|
||||
'zfcampus/zf-content-validation' => 'laminas-api-tools/api-tools-content-validation',
|
||||
'zfcampus/zf-development-mode' => 'laminas/laminas-development-mode',
|
||||
'zfcampus/zf-doctrine-querybuilder' => 'laminas-api-tools/api-tools-doctrine-querybuilder',
|
||||
'zfcampus/zf-hal' => 'laminas-api-tools/api-tools-hal',
|
||||
'zfcampus/zf-http-cache' => 'laminas-api-tools/api-tools-http-cache',
|
||||
'zfcampus/zf-mvc-auth' => 'laminas-api-tools/api-tools-mvc-auth',
|
||||
'zfcampus/zf-oauth2' => 'laminas-api-tools/api-tools-oauth2',
|
||||
'zfcampus/zf-rest' => 'laminas-api-tools/api-tools-rest',
|
||||
'zfcampus/zf-rpc' => 'laminas-api-tools/api-tools-rpc',
|
||||
'zfcampus/zf-versioning' => 'laminas-api-tools/api-tools-versioning',
|
||||
|
||||
// CONFIG KEYS, SCRIPT NAMES, ETC
|
||||
// ZF components
|
||||
'::fromZend' => '::fromLaminas', // psr7bridge
|
||||
'::toZend' => '::toLaminas', // psr7bridge
|
||||
'use_zend_loader' => 'use_laminas_loader', // zend-modulemanager
|
||||
'zend-config' => 'laminas-config',
|
||||
'zend-developer-tools/' => 'laminas-developer-tools/',
|
||||
'zend-tag-cloud' => 'laminas-tag-cloud',
|
||||
'zenddevelopertools' => 'laminas-developer-tools',
|
||||
'zendbarcode' => 'laminasbarcode',
|
||||
'ZendBarcode' => 'LaminasBarcode',
|
||||
'zendcache' => 'laminascache',
|
||||
'ZendCache' => 'LaminasCache',
|
||||
'zendconfig' => 'laminasconfig',
|
||||
'ZendConfig' => 'LaminasConfig',
|
||||
'zendfeed' => 'laminasfeed',
|
||||
'ZendFeed' => 'LaminasFeed',
|
||||
'zendfilter' => 'laminasfilter',
|
||||
'ZendFilter' => 'LaminasFilter',
|
||||
'zendform' => 'laminasform',
|
||||
'ZendForm' => 'LaminasForm',
|
||||
'zendi18n' => 'laminasi18n',
|
||||
'ZendI18n' => 'LaminasI18n',
|
||||
'zendinputfilter' => 'laminasinputfilter',
|
||||
'ZendInputFilter' => 'LaminasInputFilter',
|
||||
'zendlog' => 'laminaslog',
|
||||
'ZendLog' => 'LaminasLog',
|
||||
'zendmail' => 'laminasmail',
|
||||
'ZendMail' => 'LaminasMail',
|
||||
'zendmvc' => 'laminasmvc',
|
||||
'ZendMvc' => 'LaminasMvc',
|
||||
'zendpaginator' => 'laminaspaginator',
|
||||
'ZendPaginator' => 'LaminasPaginator',
|
||||
'zendserializer' => 'laminasserializer',
|
||||
'ZendSerializer' => 'LaminasSerializer',
|
||||
'zendtag' => 'laminastag',
|
||||
'ZendTag' => 'LaminasTag',
|
||||
'zendtext' => 'laminastext',
|
||||
'ZendText' => 'LaminasText',
|
||||
'zendvalidator' => 'laminasvalidator',
|
||||
'ZendValidator' => 'LaminasValidator',
|
||||
'zendview' => 'laminasview',
|
||||
'ZendView' => 'LaminasView',
|
||||
'zend-framework.flf' => 'laminas-project.flf',
|
||||
|
||||
// Expressive-related
|
||||
"'zend-expressive'" => "'mezzio'",
|
||||
'"zend-expressive"' => '"mezzio"',
|
||||
'zend-expressive.' => 'mezzio.',
|
||||
'zend-expressive-authorization' => 'mezzio-authorization',
|
||||
'zend-expressive-hal' => 'mezzio-hal',
|
||||
'zend-expressive-session' => 'mezzio-session',
|
||||
'zend-expressive-swoole' => 'mezzio-swoole',
|
||||
'zend-expressive-tooling' => 'mezzio-tooling',
|
||||
|
||||
// Apigility-related
|
||||
"'zf-apigility'" => "'api-tools'",
|
||||
'"zf-apigility"' => '"api-tools"',
|
||||
'zf-apigility/' => 'api-tools/',
|
||||
'zf-apigility-admin' => 'api-tools-admin',
|
||||
'zf-content-negotiation' => 'api-tools-content-negotiation',
|
||||
'zf-hal' => 'api-tools-hal',
|
||||
'zf-rest' => 'api-tools-rest',
|
||||
'zf-rpc' => 'api-tools-rpc',
|
||||
'zf-content-validation' => 'api-tools-content-validation',
|
||||
'zf-apigility-ui' => 'api-tools-ui',
|
||||
'zf-apigility-documentation-blueprint' => 'api-tools-documentation-blueprint',
|
||||
'zf-apigility-documentation-swagger' => 'api-tools-documentation-swagger',
|
||||
'zf-apigility-welcome' => 'api-tools-welcome',
|
||||
'zf-api-problem' => 'api-tools-api-problem',
|
||||
'zf-configuration' => 'api-tools-configuration',
|
||||
'zf-http-cache' => 'api-tools-http-cache',
|
||||
'zf-mvc-auth' => 'api-tools-mvc-auth',
|
||||
'zf-oauth2' => 'api-tools-oauth2',
|
||||
'zf-versioning' => 'api-tools-versioning',
|
||||
'ZfApigilityDoctrineQueryProviderManager' => 'LaminasApiToolsDoctrineQueryProviderManager',
|
||||
'ZfApigilityDoctrineQueryCreateFilterManager' => 'LaminasApiToolsDoctrineQueryCreateFilterManager',
|
||||
'zf-apigility-doctrine' => 'api-tools-doctrine',
|
||||
'zf-development-mode' => 'laminas-development-mode',
|
||||
'zf-doctrine-querybuilder' => 'api-tools-doctrine-querybuilder',
|
||||
|
||||
// 3rd party Apigility packages
|
||||
'api-skeletons/zf-' => 'api-skeletons/zf-', // api-skeletons packages
|
||||
'zf-oauth2-' => 'zf-oauth2-', // api-skeletons OAuth2-related packages
|
||||
'ZF\\OAuth2\\Client' => 'ZF\\OAuth2\\Client', // api-skeletons/zf-oauth2-client
|
||||
'ZF\\OAuth2\\Doctrine' => 'ZF\\OAuth2\\Doctrine', // api-skeletons/zf-oauth2-doctrine
|
||||
];
|
||||
|
|
@ -1,345 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<files psalm-version="4.9.3@4c262932602b9bbab5020863d1eb22d49de0dbf4">
|
||||
<file src="config/replacements.php">
|
||||
<DuplicateArrayKey occurrences="3">
|
||||
<code>'ZendAcl' => 'LaminasAcl'</code>
|
||||
<code>'ZendRbac' => 'LaminasRbac'</code>
|
||||
<code>'ZendRouter' => 'LaminasRouter'</code>
|
||||
</DuplicateArrayKey>
|
||||
</file>
|
||||
<file src="src/Autoloader.php">
|
||||
<MissingClosureParamType occurrences="2">
|
||||
<code>$class</code>
|
||||
<code>$class</code>
|
||||
</MissingClosureParamType>
|
||||
<MissingReturnType occurrences="1">
|
||||
<code>load</code>
|
||||
</MissingReturnType>
|
||||
<MixedArgument occurrences="7">
|
||||
<code>$class</code>
|
||||
<code>$class</code>
|
||||
<code>$class</code>
|
||||
<code>$class</code>
|
||||
<code>$class</code>
|
||||
<code>$class</code>
|
||||
<code>$class</code>
|
||||
</MixedArgument>
|
||||
<MixedArgumentTypeCoercion occurrences="2"/>
|
||||
<MixedArrayOffset occurrences="1">
|
||||
<code>$loaded[$class]</code>
|
||||
</MixedArrayOffset>
|
||||
<MixedOperand occurrences="2">
|
||||
<code>$namespaces[$check]</code>
|
||||
<code>$namespaces[$check]</code>
|
||||
</MixedOperand>
|
||||
</file>
|
||||
<file src="src/ConfigPostProcessor.php">
|
||||
<InvalidArgument occurrences="1">
|
||||
<code>$keys</code>
|
||||
</InvalidArgument>
|
||||
<MissingClosureParamType occurrences="4">
|
||||
<code>$value</code>
|
||||
<code>$value</code>
|
||||
<code>$value</code>
|
||||
<code>$value</code>
|
||||
</MissingClosureParamType>
|
||||
<MissingClosureReturnType occurrences="4">
|
||||
<code>function ($value) {</code>
|
||||
<code>function ($value) {</code>
|
||||
<code>function ($value, array $keys) {</code>
|
||||
<code>function ($value, array $keys) {</code>
|
||||
</MissingClosureReturnType>
|
||||
<MissingReturnType occurrences="3">
|
||||
<code>replaceDependencyConfiguration</code>
|
||||
<code>replaceDependencyFactories</code>
|
||||
<code>replaceDependencyServices</code>
|
||||
</MissingReturnType>
|
||||
<MixedArgument occurrences="5">
|
||||
<code>$config</code>
|
||||
<code>$newKey</code>
|
||||
<code>$newKey</code>
|
||||
<code>$newKey</code>
|
||||
<code>$target</code>
|
||||
</MixedArgument>
|
||||
<MixedArgumentTypeCoercion occurrences="1">
|
||||
<code>[$key]</code>
|
||||
</MixedArgumentTypeCoercion>
|
||||
<MixedArrayAssignment occurrences="4">
|
||||
<code>$config[$key]</code>
|
||||
<code>$config['aliases'][$alias]</code>
|
||||
<code>$config['aliases'][$service]</code>
|
||||
<code>$config['aliases'][$service]</code>
|
||||
</MixedArrayAssignment>
|
||||
<MixedArrayOffset occurrences="7">
|
||||
<code>$aliases[$name]</code>
|
||||
<code>$config[$key]</code>
|
||||
<code>$keys[$key]</code>
|
||||
<code>$rewritten[$newKey]</code>
|
||||
<code>$rewritten[$newKey]</code>
|
||||
<code>$rewritten[$newKey]</code>
|
||||
<code>$this->exactReplacements[$value]</code>
|
||||
</MixedArrayOffset>
|
||||
<MixedArrayTypeCoercion occurrences="1">
|
||||
<code>$aliases[$name]</code>
|
||||
</MixedArrayTypeCoercion>
|
||||
<MixedAssignment occurrences="26">
|
||||
<code>$a[$key]</code>
|
||||
<code>$a[$key]</code>
|
||||
<code>$a[]</code>
|
||||
<code>$config</code>
|
||||
<code>$config</code>
|
||||
<code>$config[$key]</code>
|
||||
<code>$config['factories'][$replacedService]</code>
|
||||
<code>$config['services'][$replacedService]</code>
|
||||
<code>$data</code>
|
||||
<code>$factory</code>
|
||||
<code>$factory</code>
|
||||
<code>$key</code>
|
||||
<code>$key</code>
|
||||
<code>$name</code>
|
||||
<code>$newKey</code>
|
||||
<code>$newValue</code>
|
||||
<code>$notIn[]</code>
|
||||
<code>$result</code>
|
||||
<code>$rewritten[$key]</code>
|
||||
<code>$rewritten[$newKey]</code>
|
||||
<code>$rewritten[$newKey][]</code>
|
||||
<code>$serviceInstance</code>
|
||||
<code>$serviceInstance</code>
|
||||
<code>$target</code>
|
||||
<code>$value</code>
|
||||
<code>$value</code>
|
||||
</MixedAssignment>
|
||||
</file>
|
||||
<file src="src/Module.php">
|
||||
<MissingReturnType occurrences="2">
|
||||
<code>init</code>
|
||||
<code>onMergeConfig</code>
|
||||
</MissingReturnType>
|
||||
<UndefinedDocblockClass occurrences="2">
|
||||
<code>ModuleEvent</code>
|
||||
<code>ModuleManager</code>
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Replacements.php">
|
||||
<MixedArgument occurrences="2">
|
||||
<code>$replacement</code>
|
||||
<code>$replacement</code>
|
||||
</MixedArgument>
|
||||
<MixedArgumentTypeCoercion occurrences="3">
|
||||
<code>$original</code>
|
||||
<code>$original</code>
|
||||
<code>$original</code>
|
||||
</MixedArgumentTypeCoercion>
|
||||
<MixedAssignment occurrences="1">
|
||||
<code>$replacement</code>
|
||||
</MixedAssignment>
|
||||
<MixedPropertyTypeCoercion occurrences="3">
|
||||
<code>$this->replacements</code>
|
||||
<code>$this->replacements</code>
|
||||
</MixedPropertyTypeCoercion>
|
||||
</file>
|
||||
<file src="test/AutoloaderTest.php">
|
||||
<InvalidStringClass occurrences="1">
|
||||
<code>new $legacy()</code>
|
||||
</InvalidStringClass>
|
||||
<MissingReturnType occurrences="3">
|
||||
<code>testLegacyClassIsAliasToLaminas</code>
|
||||
<code>testReverseAliasCreated</code>
|
||||
<code>testTypeHint</code>
|
||||
</MissingReturnType>
|
||||
<PossiblyInvalidArgument occurrences="1">
|
||||
<code>testLegacyClassIsAliasToLaminas</code>
|
||||
</PossiblyInvalidArgument>
|
||||
</file>
|
||||
<file src="test/ConfigPostProcessorTest.php">
|
||||
<MissingReturnType occurrences="4">
|
||||
<code>invalidServiceManagerConfiguration</code>
|
||||
<code>testRewritesNestedKeys</code>
|
||||
<code>testServiceManagerServiceInstancesCanBeHandled</code>
|
||||
<code>testWillSkipInvalidConfigurations</code>
|
||||
</MissingReturnType>
|
||||
<MixedArgument occurrences="1">
|
||||
<code>$config</code>
|
||||
</MixedArgument>
|
||||
<MixedAssignment occurrences="2">
|
||||
<code>$config</code>
|
||||
<code>$expected</code>
|
||||
</MixedAssignment>
|
||||
<MixedInferredReturnType occurrences="1">
|
||||
<code>iterable</code>
|
||||
</MixedInferredReturnType>
|
||||
<UnresolvableInclude occurrences="2">
|
||||
<code>require $configLocation</code>
|
||||
<code>require $expectedResultLocation</code>
|
||||
</UnresolvableInclude>
|
||||
</file>
|
||||
<file src="test/ModuleTest.php">
|
||||
<InvalidArgument occurrences="2">
|
||||
<code>$event</code>
|
||||
<code>$moduleManager</code>
|
||||
</InvalidArgument>
|
||||
<MissingReturnType occurrences="2">
|
||||
<code>testInitRegistersListenerWithEventManager</code>
|
||||
<code>testOnMergeConfigProcessesAndReplacesConfigurationPulledFromListener</code>
|
||||
</MissingReturnType>
|
||||
<MixedArgument occurrences="1">
|
||||
<code>$config</code>
|
||||
</MixedArgument>
|
||||
<MixedAssignment occurrences="2">
|
||||
<code>$config</code>
|
||||
<code>$expected</code>
|
||||
</MixedAssignment>
|
||||
<MixedInferredReturnType occurrences="1">
|
||||
<code>iterable</code>
|
||||
</MixedInferredReturnType>
|
||||
<UnresolvableInclude occurrences="2">
|
||||
<code>require $configFile</code>
|
||||
<code>require $expectationsFile</code>
|
||||
</UnresolvableInclude>
|
||||
</file>
|
||||
<file src="test/ReplacementsTest.php">
|
||||
<MissingReturnType occurrences="1">
|
||||
<code>testEdgeCases</code>
|
||||
</MissingReturnType>
|
||||
<MixedInferredReturnType occurrences="1">
|
||||
<code>iterable</code>
|
||||
</MixedInferredReturnType>
|
||||
</file>
|
||||
<file src="test/TestAsset/ConfigPostProcessor/AbstractFactories.php">
|
||||
<UndefinedClass occurrences="4">
|
||||
<code>ConfigAbstractFactory</code>
|
||||
<code>ConfigAbstractFactory</code>
|
||||
<code>InvokableFactory</code>
|
||||
<code>InvokableFactory</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="test/TestAsset/ConfigPostProcessor/CyclicalAliasing.php">
|
||||
<DuplicateArrayKey occurrences="1">
|
||||
<code>'Zend\Db\Adapter\Adapter' => 'ZF\Apigility\DbConnectedAdapter'</code>
|
||||
</DuplicateArrayKey>
|
||||
</file>
|
||||
<file src="test/TestAsset/ConfigPostProcessor/ExpressiveSlimRouterConfig.php">
|
||||
<UndefinedClass occurrences="2">
|
||||
<code>Factory\SlimRouterFactory</code>
|
||||
<code>RouterInterface</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="test/TestAsset/ConfigPostProcessor/LazyServices.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<code>LazyServiceFactory</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="test/TestAsset/ConfigPostProcessor/MwopNetAppConfig.php">
|
||||
<UndefinedClass occurrences="42">
|
||||
<code>CacheItemPoolInterface</code>
|
||||
<code>ConfigFactory</code>
|
||||
<code>ConfigFactory</code>
|
||||
<code>ConfigFactory</code>
|
||||
<code>ConfigFactory</code>
|
||||
<code>ConfigFactory</code>
|
||||
<code>ConfigFactory</code>
|
||||
<code>Csp</code>
|
||||
<code>DisplayPostHandler</code>
|
||||
<code>Engine</code>
|
||||
<code>EventDispatcherInterface</code>
|
||||
<code>Factory\CachePoolFactory</code>
|
||||
<code>Factory\EventDispatcherFactory</code>
|
||||
<code>Factory\MailTransport</code>
|
||||
<code>Factory\PlatesFunctionsDelegator</code>
|
||||
<code>FeedReaderHttpClientInterface</code>
|
||||
<code>Feed\HttpPlugClientFactory</code>
|
||||
<code>Handler\ComicsPageHandler</code>
|
||||
<code>Handler\ComicsPageHandlerFactory</code>
|
||||
<code>Handler\HomePageHandler</code>
|
||||
<code>Handler\HomePageHandlerFactory</code>
|
||||
<code>Handler\PageHandlerFactory</code>
|
||||
<code>Handler\PageHandlerFactory</code>
|
||||
<code>Handler\ResumePageHandler</code>
|
||||
<code>Handler\ResumePageHandler</code>
|
||||
<code>Middleware\ContentSecurityPolicyMiddlewareFactory</code>
|
||||
<code>Middleware\DisplayBlogPostHandlerDelegator</code>
|
||||
<code>Middleware\RedirectAmpPagesMiddleware</code>
|
||||
<code>Middleware\RedirectAmpPagesMiddlewareFactory</code>
|
||||
<code>Middleware\RedirectsMiddleware</code>
|
||||
<code>Middleware\RedirectsMiddleware</code>
|
||||
<code>Middleware\XClacksOverheadMiddleware</code>
|
||||
<code>Middleware\XClacksOverheadMiddleware</code>
|
||||
<code>Middleware\XPoweredByMiddleware</code>
|
||||
<code>Middleware\XPoweredByMiddleware</code>
|
||||
<code>RequestFactory</code>
|
||||
<code>RequestFactoryInterface</code>
|
||||
<code>ResponseFactory</code>
|
||||
<code>ResponseFactoryInterface</code>
|
||||
<code>SessionCachePool</code>
|
||||
<code>SessionCachePool</code>
|
||||
<code>SessionCachePoolFactory</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="test/TestAsset/Replacements/TestClass.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<code>\Zend\Expressive\Router</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="test/TestAsset/Replacements/ZFOAuth2Client.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<code>OAuth2Client</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="test/TestAsset/classes/ConfigListener.php">
|
||||
<MissingReturnType occurrences="1">
|
||||
<code>setMergedConfig</code>
|
||||
</MissingReturnType>
|
||||
</file>
|
||||
<file src="test/TestAsset/classes/EventManager.php">
|
||||
<InvalidArgument occurrences="1">
|
||||
<code>$listener</code>
|
||||
</InvalidArgument>
|
||||
<MissingPropertyType occurrences="1">
|
||||
<code>$listeners</code>
|
||||
</MissingPropertyType>
|
||||
<MissingReturnType occurrences="1">
|
||||
<code>attach</code>
|
||||
</MissingReturnType>
|
||||
<MixedArgument occurrences="1">
|
||||
<code>$this->listeners[$eventName]</code>
|
||||
</MixedArgument>
|
||||
<MixedArrayAccess occurrences="1">
|
||||
<code>$this->listeners[$eventName]</code>
|
||||
</MixedArrayAccess>
|
||||
<MixedArrayAssignment occurrences="1">
|
||||
<code>$this->listeners[$eventName]</code>
|
||||
</MixedArrayAssignment>
|
||||
<MixedInferredReturnType occurrences="1">
|
||||
<code>array</code>
|
||||
</MixedInferredReturnType>
|
||||
<MixedReturnStatement occurrences="1">
|
||||
<code>$this->listeners</code>
|
||||
</MixedReturnStatement>
|
||||
</file>
|
||||
<file src="test/TestAsset/classes/ModuleEvent.php">
|
||||
<MissingPropertyType occurrences="1">
|
||||
<code>$listener</code>
|
||||
</MissingPropertyType>
|
||||
<MixedInferredReturnType occurrences="1">
|
||||
<code>ConfigListener</code>
|
||||
</MixedInferredReturnType>
|
||||
<MixedReturnStatement occurrences="1">
|
||||
<code>$this->listener</code>
|
||||
</MixedReturnStatement>
|
||||
</file>
|
||||
<file src="test/TestAsset/classes/ModuleManager.php">
|
||||
<MixedInferredReturnType occurrences="1">
|
||||
<code>EventManager</code>
|
||||
</MixedInferredReturnType>
|
||||
<MixedReturnStatement occurrences="1">
|
||||
<code>$this->eventManager</code>
|
||||
</MixedReturnStatement>
|
||||
<UndefinedThisPropertyAssignment occurrences="1">
|
||||
<code>$this->eventManager</code>
|
||||
</UndefinedThisPropertyAssignment>
|
||||
<UndefinedThisPropertyFetch occurrences="1">
|
||||
<code>$this->eventManager</code>
|
||||
</UndefinedThisPropertyFetch>
|
||||
</file>
|
||||
</files>
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<psalm
|
||||
totallyTyped="true"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns="https://getpsalm.org/schema/config"
|
||||
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
|
||||
errorBaseline="psalm-baseline.xml"
|
||||
>
|
||||
<projectFiles>
|
||||
<directory name="src"/>
|
||||
<directory name="test"/>
|
||||
<ignoreFiles>
|
||||
<directory name="vendor"/>
|
||||
</ignoreFiles>
|
||||
</projectFiles>
|
||||
|
||||
<issueHandlers>
|
||||
<InternalMethod>
|
||||
<errorLevel type="suppress">
|
||||
<referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::method"/>
|
||||
</errorLevel>
|
||||
<errorLevel type="suppress">
|
||||
<referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::willReturn"/>
|
||||
</errorLevel>
|
||||
<errorLevel type="suppress">
|
||||
<referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::with"/>
|
||||
</errorLevel>
|
||||
</InternalMethod>
|
||||
</issueHandlers>
|
||||
<plugins>
|
||||
<pluginClass class="Psalm\PhpUnitPlugin\Plugin"/>
|
||||
</plugins>
|
||||
</psalm>
|
||||
|
|
@ -1,181 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Laminas\ZendFrameworkBridge;
|
||||
|
||||
use ArrayObject;
|
||||
use Composer\Autoload\ClassLoader;
|
||||
use RuntimeException;
|
||||
|
||||
use function array_values;
|
||||
use function class_alias;
|
||||
use function class_exists;
|
||||
use function explode;
|
||||
use function file_exists;
|
||||
use function getenv;
|
||||
use function interface_exists;
|
||||
use function spl_autoload_register;
|
||||
use function strlen;
|
||||
use function strtr;
|
||||
use function substr;
|
||||
use function trait_exists;
|
||||
|
||||
/**
|
||||
* Alias legacy Zend Framework project classes/interfaces/traits to Laminas equivalents.
|
||||
*/
|
||||
class Autoloader
|
||||
{
|
||||
private const UPSTREAM_COMPOSER_VENDOR_DIRECTORY = __DIR__ . '/../../..';
|
||||
private const LOCAL_COMPOSER_VENDOR_DIRECTORY = __DIR__ . '/../vendor';
|
||||
|
||||
/**
|
||||
* Attach autoloaders for managing legacy ZF artifacts.
|
||||
*
|
||||
* We attach two autoloaders:
|
||||
*
|
||||
* - The first is _prepended_ to handle new classes and add aliases for
|
||||
* legacy classes. PHP expects any interfaces implemented, classes
|
||||
* extended, or traits used when declaring class_alias() to exist and/or
|
||||
* be autoloadable already at the time of declaration. If not, it will
|
||||
* raise a fatal error. This autoloader helps mitigate errors in such
|
||||
* situations.
|
||||
*
|
||||
* - The second is _appended_ in order to create aliases for legacy
|
||||
* classes.
|
||||
*/
|
||||
public static function load()
|
||||
{
|
||||
$loaded = new ArrayObject([]);
|
||||
$classLoader = self::getClassLoader();
|
||||
|
||||
if ($classLoader === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
spl_autoload_register(self::createPrependAutoloader(
|
||||
RewriteRules::namespaceReverse(),
|
||||
$classLoader,
|
||||
$loaded
|
||||
), true, true);
|
||||
|
||||
spl_autoload_register(self::createAppendAutoloader(
|
||||
RewriteRules::namespaceRewrite(),
|
||||
$loaded
|
||||
));
|
||||
}
|
||||
|
||||
private static function getClassLoader(): ?ClassLoader
|
||||
{
|
||||
$composerVendorDirectory = getenv('COMPOSER_VENDOR_DIR');
|
||||
if (is_string($composerVendorDirectory)) {
|
||||
return self::getClassLoaderFromVendorDirectory($composerVendorDirectory);
|
||||
}
|
||||
|
||||
return self::getClassLoaderFromVendorDirectory(self::UPSTREAM_COMPOSER_VENDOR_DIRECTORY)
|
||||
?? self::getClassLoaderFromVendorDirectory(self::LOCAL_COMPOSER_VENDOR_DIRECTORY);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return callable
|
||||
*/
|
||||
private static function createPrependAutoloader(array $namespaces, ClassLoader $classLoader, ArrayObject $loaded)
|
||||
{
|
||||
/**
|
||||
* @param string $class Class name to autoload
|
||||
* @return void
|
||||
*/
|
||||
return static function ($class) use ($namespaces, $classLoader, $loaded) {
|
||||
if (isset($loaded[$class])) {
|
||||
return;
|
||||
}
|
||||
|
||||
$segments = explode('\\', $class);
|
||||
|
||||
$i = 0;
|
||||
$check = '';
|
||||
|
||||
while (isset($segments[$i + 1], $namespaces[$check . $segments[$i] . '\\'])) {
|
||||
$check .= $segments[$i] . '\\';
|
||||
++$i;
|
||||
}
|
||||
|
||||
if ($check === '') {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($classLoader->loadClass($class)) {
|
||||
$legacy = $namespaces[$check]
|
||||
. strtr(substr($class, strlen($check)), [
|
||||
'ApiTools' => 'Apigility',
|
||||
'Mezzio' => 'Expressive',
|
||||
'Laminas' => 'Zend',
|
||||
]);
|
||||
class_alias($class, $legacy);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @return callable
|
||||
*/
|
||||
private static function createAppendAutoloader(array $namespaces, ArrayObject $loaded)
|
||||
{
|
||||
/**
|
||||
* @param string $class Class name to autoload
|
||||
* @return void
|
||||
*/
|
||||
return static function ($class) use ($namespaces, $loaded) {
|
||||
$segments = explode('\\', $class);
|
||||
|
||||
if ($segments[0] === 'ZendService' && isset($segments[1])) {
|
||||
$segments[0] .= '\\' . $segments[1];
|
||||
unset($segments[1]);
|
||||
$segments = array_values($segments);
|
||||
}
|
||||
|
||||
$i = 0;
|
||||
$check = '';
|
||||
|
||||
// We are checking segments of the namespace to match quicker
|
||||
while (isset($segments[$i + 1], $namespaces[$check . $segments[$i] . '\\'])) {
|
||||
$check .= $segments[$i] . '\\';
|
||||
++$i;
|
||||
}
|
||||
|
||||
if ($check === '') {
|
||||
return;
|
||||
}
|
||||
|
||||
$alias = $namespaces[$check]
|
||||
. strtr(substr($class, strlen($check)), [
|
||||
'Apigility' => 'ApiTools',
|
||||
'Expressive' => 'Mezzio',
|
||||
'Zend' => 'Laminas',
|
||||
'AbstractZendServer' => 'AbstractZendServer',
|
||||
'ZendServerDisk' => 'ZendServerDisk',
|
||||
'ZendServerShm' => 'ZendServerShm',
|
||||
'ZendMonitor' => 'ZendMonitor',
|
||||
]);
|
||||
|
||||
$loaded[$alias] = true;
|
||||
if (class_exists($alias) || interface_exists($alias) || trait_exists($alias)) {
|
||||
class_alias($alias, $class);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private static function getClassLoaderFromVendorDirectory(string $composerVendorDirectory): ?ClassLoader
|
||||
{
|
||||
$filename = rtrim($composerVendorDirectory, '/') . '/autoload.php';
|
||||
if (!file_exists($filename)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/** @psalm-suppress MixedAssignment */
|
||||
$loader = include $filename;
|
||||
if (!$loader instanceof ClassLoader) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $loader;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,426 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Laminas\ZendFrameworkBridge;
|
||||
|
||||
use function array_intersect_key;
|
||||
use function array_key_exists;
|
||||
use function array_pop;
|
||||
use function in_array;
|
||||
use function is_array;
|
||||
use function is_callable;
|
||||
use function is_int;
|
||||
use function is_string;
|
||||
|
||||
class ConfigPostProcessor
|
||||
{
|
||||
/** @internal */
|
||||
const SERVICE_MANAGER_KEYS_OF_INTEREST = [
|
||||
'aliases' => true,
|
||||
'factories' => true,
|
||||
'invokables' => true,
|
||||
'services' => true,
|
||||
];
|
||||
|
||||
/** @var array String keys => string values */
|
||||
private $exactReplacements = [
|
||||
'zend-expressive' => 'mezzio',
|
||||
'zf-apigility' => 'api-tools',
|
||||
];
|
||||
|
||||
/** @var Replacements */
|
||||
private $replacements;
|
||||
|
||||
/** @var callable[] */
|
||||
private $rulesets;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->replacements = new Replacements();
|
||||
|
||||
/* Define the rulesets for replacements.
|
||||
*
|
||||
* Each ruleset has the following signature:
|
||||
*
|
||||
* @param mixed $value
|
||||
* @param string[] $keys Full nested key hierarchy leading to the value
|
||||
* @return null|callable
|
||||
*
|
||||
* If no match is made, a null is returned, allowing it to fallback to
|
||||
* the next ruleset in the list. If a match is made, a callback is returned,
|
||||
* and that will be used to perform the replacement on the value.
|
||||
*
|
||||
* The callback should have the following signature:
|
||||
*
|
||||
* @param mixed $value
|
||||
* @param string[] $keys
|
||||
* @return mixed The transformed value
|
||||
*/
|
||||
$this->rulesets = [
|
||||
// Exact values
|
||||
function ($value) {
|
||||
return is_string($value) && isset($this->exactReplacements[$value])
|
||||
? [$this, 'replaceExactValue']
|
||||
: null;
|
||||
},
|
||||
|
||||
// Router (MVC applications)
|
||||
// We do not want to rewrite these.
|
||||
function ($value, array $keys) {
|
||||
$key = array_pop($keys);
|
||||
// Only worried about a top-level "router" key.
|
||||
return $key === 'router' && $keys === [] && is_array($value)
|
||||
? [$this, 'noopReplacement']
|
||||
: null;
|
||||
},
|
||||
|
||||
// service- and pluginmanager handling
|
||||
function ($value) {
|
||||
return is_array($value) && array_intersect_key(self::SERVICE_MANAGER_KEYS_OF_INTEREST, $value) !== []
|
||||
? [$this, 'replaceDependencyConfiguration']
|
||||
: null;
|
||||
},
|
||||
|
||||
// Array values
|
||||
function ($value, array $keys) {
|
||||
return $keys !== [] && is_array($value)
|
||||
? [$this, '__invoke']
|
||||
: null;
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string[] $keys Hierarchy of keys, for determining location in
|
||||
* nested configuration.
|
||||
* @return array
|
||||
*/
|
||||
public function __invoke(array $config, array $keys = [])
|
||||
{
|
||||
$rewritten = [];
|
||||
|
||||
foreach ($config as $key => $value) {
|
||||
// Determine new key from replacements
|
||||
$newKey = is_string($key) ? $this->replace($key, $keys) : $key;
|
||||
|
||||
// Keep original values with original key, if the key has changed, but only at the top-level.
|
||||
if (empty($keys) && $newKey !== $key) {
|
||||
$rewritten[$key] = $value;
|
||||
}
|
||||
|
||||
// Perform value replacements, if any
|
||||
$newValue = $this->replace($value, $keys, $newKey);
|
||||
|
||||
// Key does not already exist and/or is not an array value
|
||||
if (! array_key_exists($newKey, $rewritten) || ! is_array($rewritten[$newKey])) {
|
||||
// Do not overwrite existing values with null values
|
||||
$rewritten[$newKey] = array_key_exists($newKey, $rewritten) && null === $newValue
|
||||
? $rewritten[$newKey]
|
||||
: $newValue;
|
||||
continue;
|
||||
}
|
||||
|
||||
// New value is null; nothing to do.
|
||||
if (null === $newValue) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Key already exists as an array value, but $value is not an array
|
||||
if (! is_array($newValue)) {
|
||||
$rewritten[$newKey][] = $newValue;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Key already exists as an array value, and $value is also an array
|
||||
$rewritten[$newKey] = static::merge($rewritten[$newKey], $newValue);
|
||||
}
|
||||
|
||||
return $rewritten;
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform substitutions as needed on an individual value.
|
||||
*
|
||||
* The $key is provided to allow fine-grained selection of rewrite rules.
|
||||
*
|
||||
* @param mixed $value
|
||||
* @param string[] $keys Key hierarchy
|
||||
* @param null|int|string $key
|
||||
* @return mixed
|
||||
*/
|
||||
private function replace($value, array $keys, $key = null)
|
||||
{
|
||||
// Add new key to the list of keys.
|
||||
// We do not need to remove it later, as we are working on a copy of the array.
|
||||
$keys[] = $key;
|
||||
|
||||
// Identify rewrite strategy and perform replacements
|
||||
$rewriteRule = $this->replacementRuleMatch($value, $keys);
|
||||
return $rewriteRule($value, $keys);
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge two arrays together.
|
||||
*
|
||||
* If an integer key exists in both arrays, the value from the second array
|
||||
* will be appended to the first array. If both values are arrays, they are
|
||||
* merged together, else the value of the second array overwrites the one
|
||||
* of the first array.
|
||||
*
|
||||
* Based on zend-stdlib Zend\Stdlib\ArrayUtils::merge
|
||||
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function merge(array $a, array $b)
|
||||
{
|
||||
foreach ($b as $key => $value) {
|
||||
if (! isset($a[$key]) && ! array_key_exists($key, $a)) {
|
||||
$a[$key] = $value;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (null === $value && array_key_exists($key, $a)) {
|
||||
// Leave as-is if value from $b is null
|
||||
continue;
|
||||
}
|
||||
|
||||
if (is_int($key)) {
|
||||
$a[] = $value;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (is_array($value) && is_array($a[$key])) {
|
||||
$a[$key] = static::merge($a[$key], $value);
|
||||
continue;
|
||||
}
|
||||
|
||||
$a[$key] = $value;
|
||||
}
|
||||
|
||||
return $a;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $value
|
||||
* @param null|int|string $key
|
||||
* @return callable Callable to invoke with value
|
||||
*/
|
||||
private function replacementRuleMatch($value, $key = null)
|
||||
{
|
||||
foreach ($this->rulesets as $ruleset) {
|
||||
$result = $ruleset($value, $key);
|
||||
if (is_callable($result)) {
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
return [$this, 'fallbackReplacement'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace a value using the translation table, if the value is a string.
|
||||
*
|
||||
* @param mixed $value
|
||||
* @return mixed
|
||||
*/
|
||||
private function fallbackReplacement($value)
|
||||
{
|
||||
return is_string($value)
|
||||
? $this->replacements->replace($value)
|
||||
: $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace a value matched exactly.
|
||||
*
|
||||
* @param mixed $value
|
||||
* @return mixed
|
||||
*/
|
||||
private function replaceExactValue($value)
|
||||
{
|
||||
return $this->exactReplacements[$value];
|
||||
}
|
||||
|
||||
private function replaceDependencyConfiguration(array $config)
|
||||
{
|
||||
$aliases = isset($config['aliases']) && is_array($config['aliases'])
|
||||
? $this->replaceDependencyAliases($config['aliases'])
|
||||
: [];
|
||||
|
||||
if ($aliases) {
|
||||
$config['aliases'] = $aliases;
|
||||
}
|
||||
|
||||
$config = $this->replaceDependencyInvokables($config);
|
||||
$config = $this->replaceDependencyFactories($config);
|
||||
$config = $this->replaceDependencyServices($config);
|
||||
|
||||
$keys = self::SERVICE_MANAGER_KEYS_OF_INTEREST;
|
||||
foreach ($config as $key => $data) {
|
||||
if (isset($keys[$key])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$config[$key] = is_array($data) ? $this->__invoke($data, [$key]) : $data;
|
||||
}
|
||||
|
||||
return $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rewrite dependency aliases array
|
||||
*
|
||||
* In this case, we want to keep the alias as-is, but rewrite the target.
|
||||
*
|
||||
* We need also provide an additional alias if the alias key is a legacy class.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function replaceDependencyAliases(array $aliases)
|
||||
{
|
||||
foreach ($aliases as $alias => $target) {
|
||||
if (! is_string($alias) || ! is_string($target)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$newTarget = $this->replacements->replace($target);
|
||||
$newAlias = $this->replacements->replace($alias);
|
||||
|
||||
$notIn = [$newTarget];
|
||||
$name = $newTarget;
|
||||
while (isset($aliases[$name])) {
|
||||
$notIn[] = $aliases[$name];
|
||||
$name = $aliases[$name];
|
||||
}
|
||||
|
||||
if ($newAlias === $alias && ! in_array($alias, $notIn, true)) {
|
||||
$aliases[$alias] = $newTarget;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isset($aliases[$newAlias])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (! in_array($newAlias, $notIn, true)) {
|
||||
$aliases[$alias] = $newAlias;
|
||||
$aliases[$newAlias] = $newTarget;
|
||||
}
|
||||
}
|
||||
|
||||
return $aliases;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rewrite dependency invokables array
|
||||
*
|
||||
* In this case, we want to keep the alias as-is, but rewrite the target.
|
||||
*
|
||||
* We need also provide an additional alias if invokable is defined with
|
||||
* an alias which is a legacy class.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function replaceDependencyInvokables(array $config)
|
||||
{
|
||||
if (empty($config['invokables']) || ! is_array($config['invokables'])) {
|
||||
return $config;
|
||||
}
|
||||
|
||||
foreach ($config['invokables'] as $alias => $target) {
|
||||
if (! is_string($alias)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$newTarget = $this->replacements->replace($target);
|
||||
$newAlias = $this->replacements->replace($alias);
|
||||
|
||||
if ($alias === $target || isset($config['aliases'][$newAlias])) {
|
||||
$config['invokables'][$alias] = $newTarget;
|
||||
continue;
|
||||
}
|
||||
|
||||
$config['invokables'][$newAlias] = $newTarget;
|
||||
|
||||
if ($newAlias === $alias) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$config['aliases'][$alias] = $newAlias;
|
||||
|
||||
unset($config['invokables'][$alias]);
|
||||
}
|
||||
|
||||
return $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $value
|
||||
* @return mixed Returns $value verbatim.
|
||||
*/
|
||||
private function noopReplacement($value)
|
||||
{
|
||||
return $value;
|
||||
}
|
||||
|
||||
private function replaceDependencyFactories(array $config)
|
||||
{
|
||||
if (empty($config['factories']) || ! is_array($config['factories'])) {
|
||||
return $config;
|
||||
}
|
||||
|
||||
foreach ($config['factories'] as $service => $factory) {
|
||||
if (! is_string($service)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$replacedService = $this->replacements->replace($service);
|
||||
$factory = is_string($factory) ? $this->replacements->replace($factory) : $factory;
|
||||
$config['factories'][$replacedService] = $factory;
|
||||
|
||||
if ($replacedService === $service) {
|
||||
continue;
|
||||
}
|
||||
|
||||
unset($config['factories'][$service]);
|
||||
if (isset($config['aliases'][$service])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$config['aliases'][$service] = $replacedService;
|
||||
}
|
||||
|
||||
return $config;
|
||||
}
|
||||
|
||||
private function replaceDependencyServices(array $config)
|
||||
{
|
||||
if (empty($config['services']) || ! is_array($config['services'])) {
|
||||
return $config;
|
||||
}
|
||||
|
||||
foreach ($config['services'] as $service => $serviceInstance) {
|
||||
if (! is_string($service)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$replacedService = $this->replacements->replace($service);
|
||||
$serviceInstance = is_array($serviceInstance) ? $this->__invoke($serviceInstance) : $serviceInstance;
|
||||
|
||||
$config['services'][$replacedService] = $serviceInstance;
|
||||
|
||||
if ($service === $replacedService) {
|
||||
continue;
|
||||
}
|
||||
|
||||
unset($config['services'][$service]);
|
||||
|
||||
if (isset($config['aliases'][$service])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$config['aliases'][$service] = $replacedService;
|
||||
}
|
||||
|
||||
return $config;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Laminas\ZendFrameworkBridge;
|
||||
|
||||
use Laminas\ModuleManager\Listener\ConfigMergerInterface;
|
||||
use Laminas\ModuleManager\ModuleEvent;
|
||||
use Laminas\ModuleManager\ModuleManager;
|
||||
|
||||
class Module
|
||||
{
|
||||
/**
|
||||
* Initialize the module.
|
||||
*
|
||||
* Type-hinting deliberately omitted to allow unit testing
|
||||
* without dependencies on packages that do not exist yet.
|
||||
*
|
||||
* @param ModuleManager $moduleManager
|
||||
*/
|
||||
public function init($moduleManager)
|
||||
{
|
||||
$moduleManager
|
||||
->getEventManager()
|
||||
->attach('mergeConfig', [$this, 'onMergeConfig']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform substitutions in the merged configuration.
|
||||
*
|
||||
* Rewrites keys and values matching known ZF classes, namespaces, and
|
||||
* configuration keys to their Laminas equivalents.
|
||||
*
|
||||
* Type-hinting deliberately omitted to allow unit testing
|
||||
* without dependencies on packages that do not exist yet.
|
||||
*
|
||||
* @param ModuleEvent $event
|
||||
*/
|
||||
public function onMergeConfig($event)
|
||||
{
|
||||
/** @var ConfigMergerInterface */
|
||||
$configMerger = $event->getConfigListener();
|
||||
$processor = new ConfigPostProcessor();
|
||||
$configMerger->setMergedConfig(
|
||||
$processor(
|
||||
$configMerger->getMergedConfig($returnAsObject = false)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Laminas\ZendFrameworkBridge;
|
||||
|
||||
use function array_merge;
|
||||
use function str_replace;
|
||||
use function strpos;
|
||||
use function strtr;
|
||||
|
||||
class Replacements
|
||||
{
|
||||
/** @var string[] */
|
||||
private $replacements;
|
||||
|
||||
public function __construct(array $additionalReplacements = [])
|
||||
{
|
||||
$this->replacements = array_merge(
|
||||
require __DIR__ . '/../config/replacements.php',
|
||||
$additionalReplacements
|
||||
);
|
||||
|
||||
// Provide multiple variants of strings containing namespace separators
|
||||
foreach ($this->replacements as $original => $replacement) {
|
||||
if (false === strpos($original, '\\')) {
|
||||
continue;
|
||||
}
|
||||
$this->replacements[str_replace('\\', '\\\\', $original)] = str_replace('\\', '\\\\', $replacement);
|
||||
$this->replacements[str_replace('\\', '\\\\\\\\', $original)] = str_replace('\\', '\\\\\\\\', $replacement);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $value
|
||||
* @return string
|
||||
*/
|
||||
public function replace($value)
|
||||
{
|
||||
return strtr($value, $this->replacements);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Laminas\ZendFrameworkBridge;
|
||||
|
||||
class RewriteRules
|
||||
{
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public static function namespaceRewrite()
|
||||
{
|
||||
return [
|
||||
// Expressive
|
||||
'Zend\\ProblemDetails\\' => 'Mezzio\\ProblemDetails\\',
|
||||
'Zend\\Expressive\\' => 'Mezzio\\',
|
||||
|
||||
// Laminas
|
||||
'Zend\\' => 'Laminas\\',
|
||||
'ZF\\ComposerAutoloading\\' => 'Laminas\\ComposerAutoloading\\',
|
||||
'ZF\\DevelopmentMode\\' => 'Laminas\\DevelopmentMode\\',
|
||||
|
||||
// Apigility
|
||||
'ZF\\Apigility\\' => 'Laminas\\ApiTools\\',
|
||||
'ZF\\' => 'Laminas\\ApiTools\\',
|
||||
|
||||
// ZendXml, API wrappers, zend-http OAuth support, zend-diagnostics, ZendDeveloperTools
|
||||
'ZendXml\\' => 'Laminas\\Xml\\',
|
||||
'ZendOAuth\\' => 'Laminas\\OAuth\\',
|
||||
'ZendDiagnostics\\' => 'Laminas\\Diagnostics\\',
|
||||
'ZendService\\ReCaptcha\\' => 'Laminas\\ReCaptcha\\',
|
||||
'ZendService\\Twitter\\' => 'Laminas\\Twitter\\',
|
||||
'ZendDeveloperTools\\' => 'Laminas\\DeveloperTools\\',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public static function namespaceReverse()
|
||||
{
|
||||
return [
|
||||
// ZendXml, ZendOAuth, ZendDiagnostics, ZendDeveloperTools
|
||||
'Laminas\\Xml\\' => 'ZendXml\\',
|
||||
'Laminas\\OAuth\\' => 'ZendOAuth\\',
|
||||
'Laminas\\Diagnostics\\' => 'ZendDiagnostics\\',
|
||||
'Laminas\\DeveloperTools\\' => 'ZendDeveloperTools\\',
|
||||
|
||||
// Zend Service
|
||||
'Laminas\\ReCaptcha\\' => 'ZendService\\ReCaptcha\\',
|
||||
'Laminas\\Twitter\\' => 'ZendService\\Twitter\\',
|
||||
|
||||
// Zend
|
||||
'Laminas\\' => 'Zend\\',
|
||||
|
||||
// Expressive
|
||||
'Mezzio\\ProblemDetails\\' => 'Zend\\ProblemDetails\\',
|
||||
'Mezzio\\' => 'Zend\\Expressive\\',
|
||||
|
||||
// Laminas to ZfCampus
|
||||
'Laminas\\ComposerAutoloading\\' => 'ZF\\ComposerAutoloading\\',
|
||||
'Laminas\\DevelopmentMode\\' => 'ZF\\DevelopmentMode\\',
|
||||
|
||||
// Apigility
|
||||
'Laminas\\ApiTools\\Admin\\' => 'ZF\\Apigility\\Admin\\',
|
||||
'Laminas\\ApiTools\\Doctrine\\' => 'ZF\\Apigility\\Doctrine\\',
|
||||
'Laminas\\ApiTools\\Documentation\\' => 'ZF\\Apigility\\Documentation\\',
|
||||
'Laminas\\ApiTools\\Example\\' => 'ZF\\Apigility\\Example\\',
|
||||
'Laminas\\ApiTools\\Provider\\' => 'ZF\\Apigility\\Provider\\',
|
||||
'Laminas\\ApiTools\\Welcome\\' => 'ZF\\Apiglity\\Welcome\\',
|
||||
'Laminas\\ApiTools\\' => 'ZF\\',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
<?php
|
||||
|
||||
Laminas\ZendFrameworkBridge\Autoloader::load();
|
||||
|
|
@ -43,7 +43,7 @@
|
|||
"thoughtbot/bourbon": "^7.0",
|
||||
"twbs/bootstrap": "~5.0",
|
||||
"twbs/bootstrap4": "4.6.1",
|
||||
"zurb/foundation": "~6.5"
|
||||
"zurb/foundation": "~6.7.0"
|
||||
},
|
||||
"repositories": [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ namespace ScssPhp\ScssPhp\Block;
|
|||
|
||||
use ScssPhp\ScssPhp\Block;
|
||||
use ScssPhp\ScssPhp\Compiler\Environment;
|
||||
use ScssPhp\ScssPhp\Node\Number;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
|
|
@ -26,7 +27,7 @@ class CallableBlock extends Block
|
|||
public $name;
|
||||
|
||||
/**
|
||||
* @var array|null
|
||||
* @var list<array{string, array|Number|null, bool}>|null
|
||||
*/
|
||||
public $args;
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
namespace ScssPhp\ScssPhp\Block;
|
||||
|
||||
use ScssPhp\ScssPhp\Block;
|
||||
use ScssPhp\ScssPhp\Node\Number;
|
||||
use ScssPhp\ScssPhp\Type;
|
||||
|
||||
/**
|
||||
|
|
@ -26,7 +27,7 @@ class DirectiveBlock extends Block
|
|||
public $name;
|
||||
|
||||
/**
|
||||
* @var string|array|null
|
||||
* @var array|Number|null
|
||||
*/
|
||||
public $value;
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
namespace ScssPhp\ScssPhp\Block;
|
||||
|
||||
use ScssPhp\ScssPhp\Block;
|
||||
use ScssPhp\ScssPhp\Node\Number;
|
||||
use ScssPhp\ScssPhp\Type;
|
||||
|
||||
/**
|
||||
|
|
@ -26,7 +27,7 @@ class EachBlock extends Block
|
|||
public $vars = [];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
* @var array|Number
|
||||
*/
|
||||
public $list;
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
namespace ScssPhp\ScssPhp\Block;
|
||||
|
||||
use ScssPhp\ScssPhp\Block;
|
||||
use ScssPhp\ScssPhp\Node\Number;
|
||||
use ScssPhp\ScssPhp\Type;
|
||||
|
||||
/**
|
||||
|
|
@ -21,7 +22,7 @@ use ScssPhp\ScssPhp\Type;
|
|||
class ElseifBlock extends Block
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
* @var array|Number
|
||||
*/
|
||||
public $cond;
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
namespace ScssPhp\ScssPhp\Block;
|
||||
|
||||
use ScssPhp\ScssPhp\Block;
|
||||
use ScssPhp\ScssPhp\Node\Number;
|
||||
use ScssPhp\ScssPhp\Type;
|
||||
|
||||
/**
|
||||
|
|
@ -26,12 +27,12 @@ class ForBlock extends Block
|
|||
public $var;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
* @var array|Number
|
||||
*/
|
||||
public $start;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
* @var array|Number
|
||||
*/
|
||||
public $end;
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
namespace ScssPhp\ScssPhp\Block;
|
||||
|
||||
use ScssPhp\ScssPhp\Block;
|
||||
use ScssPhp\ScssPhp\Node\Number;
|
||||
use ScssPhp\ScssPhp\Type;
|
||||
|
||||
/**
|
||||
|
|
@ -21,7 +22,7 @@ use ScssPhp\ScssPhp\Type;
|
|||
class IfBlock extends Block
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
* @var array|Number
|
||||
*/
|
||||
public $cond;
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
namespace ScssPhp\ScssPhp\Block;
|
||||
|
||||
use ScssPhp\ScssPhp\Block;
|
||||
use ScssPhp\ScssPhp\Node\Number;
|
||||
use ScssPhp\ScssPhp\Type;
|
||||
|
||||
/**
|
||||
|
|
@ -21,7 +22,7 @@ use ScssPhp\ScssPhp\Type;
|
|||
class MediaBlock extends Block
|
||||
{
|
||||
/**
|
||||
* @var string|array|null
|
||||
* @var string|array|Number|null
|
||||
*/
|
||||
public $value;
|
||||
|
||||
|
|
|
|||
|
|
@ -140,13 +140,28 @@ class Compiler
|
|||
/** @deprecated */
|
||||
public static $Infinity = [Type::T_KEYWORD, 'Infinity'];
|
||||
public static $null = [Type::T_NULL];
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
public static $nullString = [Type::T_STRING, '', []];
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
public static $defaultValue = [Type::T_KEYWORD, ''];
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
public static $selfSelector = [Type::T_SELF];
|
||||
public static $emptyList = [Type::T_LIST, '', []];
|
||||
public static $emptyMap = [Type::T_MAP, [], []];
|
||||
public static $emptyString = [Type::T_STRING, '"', []];
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
public static $with = [Type::T_KEYWORD, 'with'];
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
public static $without = [Type::T_KEYWORD, 'without'];
|
||||
private static $emptyArgumentList = [Type::T_LIST, '', [], []];
|
||||
|
||||
|
|
@ -458,10 +473,33 @@ class Compiler
|
|||
}
|
||||
|
||||
/**
|
||||
* Compile scss
|
||||
* Compiles the provided scss file into CSS.
|
||||
*
|
||||
* @param string $path
|
||||
*
|
||||
* @return CompilationResult
|
||||
*
|
||||
* @throws SassException when the source fails to compile
|
||||
*/
|
||||
public function compileFile($path)
|
||||
{
|
||||
$source = file_get_contents($path);
|
||||
|
||||
if ($source === false) {
|
||||
throw new \RuntimeException('Could not read the file content');
|
||||
}
|
||||
|
||||
return $this->compileString($source, $path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compiles the provided scss source code into CSS.
|
||||
*
|
||||
* If provided, the path is considered to be the path from which the source code comes
|
||||
* from, which will be used to resolve relative imports.
|
||||
*
|
||||
* @param string $source
|
||||
* @param string|null $path
|
||||
* @param string|null $path The path for the source, used to resolve relative imports
|
||||
*
|
||||
* @return CompilationResult
|
||||
*
|
||||
|
|
@ -548,7 +586,7 @@ class Compiler
|
|||
|
||||
$sourceMap = null;
|
||||
|
||||
if (! empty($out) && $this->sourceMap && $this->sourceMap !== self::SOURCE_MAP_NONE) {
|
||||
if (! empty($out) && $this->sourceMap !== self::SOURCE_MAP_NONE && $this->sourceMap) {
|
||||
assert($sourceMapGenerator !== null);
|
||||
$sourceMap = $sourceMapGenerator->generateJson($prefix);
|
||||
$sourceMapUrl = null;
|
||||
|
|
@ -1508,6 +1546,7 @@ class Compiler
|
|||
// start from the root
|
||||
while ($scope->parent && $scope->parent->type !== Type::T_ROOT) {
|
||||
array_unshift($childStash, $scope);
|
||||
\assert($scope->parent !== null);
|
||||
$scope = $scope->parent;
|
||||
}
|
||||
|
||||
|
|
@ -1632,6 +1671,7 @@ class Compiler
|
|||
$parser = $this->parserFactory(__METHOD__);
|
||||
|
||||
if ($parser->parseValue($buffer, $reParsedWith)) {
|
||||
\assert(\is_array($reParsedWith));
|
||||
$withCondition = $reParsedWith;
|
||||
}
|
||||
}
|
||||
|
|
@ -2090,6 +2130,11 @@ class Compiler
|
|||
foreach ($selector as $node) {
|
||||
$compound = '';
|
||||
|
||||
if (!is_array($node)) {
|
||||
$output[] = $node;
|
||||
continue;
|
||||
}
|
||||
|
||||
array_walk_recursive(
|
||||
$node,
|
||||
function ($value, $key) use (&$compound) {
|
||||
|
|
@ -2124,12 +2169,16 @@ class Compiler
|
|||
foreach ($selector as $node) {
|
||||
$compound = '';
|
||||
|
||||
array_walk_recursive(
|
||||
$node,
|
||||
function ($value, $key) use (&$compound) {
|
||||
$compound .= $value;
|
||||
}
|
||||
);
|
||||
if (!is_array($node)) {
|
||||
$compound .= $node;
|
||||
} else {
|
||||
array_walk_recursive(
|
||||
$node,
|
||||
function ($value, $key) use (&$compound) {
|
||||
$compound .= $value;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
if ($this->isImmediateRelationshipCombinator($compound)) {
|
||||
if (\count($output)) {
|
||||
|
|
@ -2885,7 +2934,7 @@ class Compiler
|
|||
{
|
||||
if (isset($child[Parser::SOURCE_LINE])) {
|
||||
$this->sourceIndex = isset($child[Parser::SOURCE_INDEX]) ? $child[Parser::SOURCE_INDEX] : null;
|
||||
$this->sourceLine = isset($child[Parser::SOURCE_LINE]) ? $child[Parser::SOURCE_LINE] : -1;
|
||||
$this->sourceLine = $child[Parser::SOURCE_LINE];
|
||||
$this->sourceColumn = isset($child[Parser::SOURCE_COLUMN]) ? $child[Parser::SOURCE_COLUMN] : -1;
|
||||
} elseif (\is_array($child) && isset($child[1]->sourceLine) && $child[1] instanceof Block) {
|
||||
$this->sourceIndex = $child[1]->sourceIndex;
|
||||
|
|
@ -4529,8 +4578,10 @@ EOL;
|
|||
return $colorName;
|
||||
}
|
||||
|
||||
if (is_numeric($alpha)) {
|
||||
if (\is_int($alpha) || \is_float($alpha)) {
|
||||
$a = new Number($alpha, '');
|
||||
} elseif (is_numeric($alpha)) {
|
||||
$a = new Number((float) $alpha, '');
|
||||
} else {
|
||||
$a = $alpha;
|
||||
}
|
||||
|
|
@ -5667,9 +5718,35 @@ EOL;
|
|||
@trigger_error('Omitting the argument declaration when registering custom function is deprecated and won\'t be supported in ScssPhp 2.0 anymore.', E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
if ($this->reflectCallable($callback)->getNumberOfRequiredParameters() > 1) {
|
||||
@trigger_error('The second argument passed to the callback of custom functions is deprecated and won\'t be supported in ScssPhp 2.0 anymore. Register a callback accepting only 1 parameter instead.', E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
$this->userFunctions[$this->normalizeName($name)] = [$callback, $argumentDeclaration];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \ReflectionFunctionAbstract
|
||||
*/
|
||||
private function reflectCallable(callable $c)
|
||||
{
|
||||
if (\is_object($c) && !$c instanceof \Closure) {
|
||||
$c = [$c, '__invoke'];
|
||||
}
|
||||
|
||||
if (\is_string($c) && false !== strpos($c, '::')) {
|
||||
$c = explode('::', $c, 2);
|
||||
}
|
||||
|
||||
if (\is_array($c)) {
|
||||
return new \ReflectionMethod($c[0], $c[1]);
|
||||
}
|
||||
|
||||
\assert(\is_string($c) || $c instanceof \Closure);
|
||||
|
||||
return new \ReflectionFunction($c);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregister function
|
||||
*
|
||||
|
|
@ -5806,13 +5883,13 @@ EOL;
|
|||
|
||||
if (! \is_null($file)) {
|
||||
if (\is_array($dir)) {
|
||||
$callableDescription = (\is_object($dir[0]) ? \get_class($dir[0]) : $dir[0]).'::'.$dir[1];
|
||||
$callableDescription = (\is_object($dir[0]) ? \get_class($dir[0]) : $dir[0]) . '::' . $dir[1];
|
||||
} elseif ($dir instanceof \Closure) {
|
||||
$r = new \ReflectionFunction($dir);
|
||||
if (false !== strpos($r->name, '{closure}')) {
|
||||
$callableDescription = sprintf('closure{%s:%s}', $r->getFileName(), $r->getStartLine());
|
||||
} elseif ($class = $r->getClosureScopeClass()) {
|
||||
$callableDescription = $class->name.'::'.$r->name;
|
||||
$callableDescription = $class->name . '::' . $r->name;
|
||||
} else {
|
||||
$callableDescription = $r->name;
|
||||
}
|
||||
|
|
@ -5925,15 +6002,15 @@ EOL;
|
|||
private function tryImportPathWithExtensions($path)
|
||||
{
|
||||
$result = array_merge(
|
||||
$this->tryImportPath($path.'.sass'),
|
||||
$this->tryImportPath($path.'.scss')
|
||||
$this->tryImportPath($path . '.sass'),
|
||||
$this->tryImportPath($path . '.scss')
|
||||
);
|
||||
|
||||
if ($result) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
return $this->tryImportPath($path.'.css');
|
||||
return $this->tryImportPath($path . '.css');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -5943,7 +6020,7 @@ EOL;
|
|||
*/
|
||||
private function tryImportPath($path)
|
||||
{
|
||||
$partial = dirname($path).'/_'.basename($path);
|
||||
$partial = dirname($path) . '/_' . basename($path);
|
||||
|
||||
$candidates = [];
|
||||
|
||||
|
|
@ -5969,7 +6046,7 @@ EOL;
|
|||
return null;
|
||||
}
|
||||
|
||||
return $this->checkImportPathConflicts($this->tryImportPathWithExtensions($path.'/index'));
|
||||
return $this->checkImportPathConflicts($this->tryImportPathWithExtensions($path . '/index'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -5984,7 +6061,7 @@ EOL;
|
|||
}
|
||||
|
||||
$normalizedPath = $path;
|
||||
$normalizedRootDirectory = $this->rootDirectory.'/';
|
||||
$normalizedRootDirectory = $this->rootDirectory . '/';
|
||||
|
||||
if (\DIRECTORY_SEPARATOR === '\\') {
|
||||
$normalizedRootDirectory = str_replace('\\', '/', $normalizedRootDirectory);
|
||||
|
|
@ -6371,8 +6448,6 @@ EOL;
|
|||
*/
|
||||
protected function sortNativeFunctionArgs($functionName, $prototypes, $args)
|
||||
{
|
||||
static $parser = null;
|
||||
|
||||
if (! isset($prototypes)) {
|
||||
$keyArgs = [];
|
||||
$posArgs = [];
|
||||
|
|
@ -6526,7 +6601,7 @@ EOL;
|
|||
*
|
||||
* @return array
|
||||
*
|
||||
* @phpstan-param non-empty-list<array{arguments: list<array{0: string, 1: string, 2: array|Number|null}>, rest_argument: string|null}> $prototypes
|
||||
* @phpstan-param non-empty-array<array{arguments: list<array{0: string, 1: string, 2: array|Number|null}>, rest_argument: string|null}> $prototypes
|
||||
* @phpstan-return array{arguments: list<array{0: string, 1: string, 2: array|Number|null}>, rest_argument: string|null}
|
||||
*/
|
||||
private function selectFunctionPrototype(array $prototypes, $positional, array $names)
|
||||
|
|
@ -6984,10 +7059,14 @@ EOL;
|
|||
return static::$null;
|
||||
}
|
||||
|
||||
if (is_numeric($value)) {
|
||||
if (\is_int($value) || \is_float($value)) {
|
||||
return new Number($value, '');
|
||||
}
|
||||
|
||||
if (is_numeric($value)) {
|
||||
return new Number((float) $value, '');
|
||||
}
|
||||
|
||||
if ($value === '') {
|
||||
return static::$emptyString;
|
||||
}
|
||||
|
|
@ -7675,9 +7754,9 @@ EOL;
|
|||
$b = min(1.0 - $w, $b);
|
||||
|
||||
$rgb = $this->toRGB($hue, 100, 50);
|
||||
for($i = 1; $i < 4; $i++) {
|
||||
$rgb[$i] *= (1.0 - $w - $b);
|
||||
$rgb[$i] = round($rgb[$i] + 255 * $w + 0.0001);
|
||||
for ($i = 1; $i < 4; $i++) {
|
||||
$rgb[$i] *= (1.0 - $w - $b);
|
||||
$rgb[$i] = round($rgb[$i] + 255 * $w + 0.0001);
|
||||
}
|
||||
|
||||
return $rgb;
|
||||
|
|
@ -7704,7 +7783,6 @@ EOL;
|
|||
if ((int) $d === 0) {
|
||||
$h = 0;
|
||||
} else {
|
||||
|
||||
if ($red == $max) {
|
||||
$h = 60 * ($green - $blue) / $d;
|
||||
} elseif ($green == $max) {
|
||||
|
|
@ -7714,7 +7792,7 @@ EOL;
|
|||
}
|
||||
}
|
||||
|
||||
return [Type::T_HWB, fmod($h, 360), $min / 255 * 100, 100 - $max / 255 *100];
|
||||
return [Type::T_HWB, fmod($h, 360), $min / 255 * 100, 100 - $max / 255 * 100];
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -7923,7 +8001,13 @@ EOL;
|
|||
$scale = $operation === 'scale';
|
||||
$change = $operation === 'change';
|
||||
|
||||
/** @phpstan-var callable(string, float|int, bool=, bool=): (float|int|null) $getParam */
|
||||
/**
|
||||
* @param string $name
|
||||
* @param float|int $max
|
||||
* @param bool $checkPercent
|
||||
* @param bool $assertPercent
|
||||
* @return float|int|null
|
||||
*/
|
||||
$getParam = function ($name, $max, $checkPercent = false, $assertPercent = false) use (&$kwargs, $scale, $change) {
|
||||
if (!isset($kwargs[$name])) {
|
||||
return null;
|
||||
|
|
@ -8065,7 +8149,7 @@ EOL;
|
|||
protected static $libChangeColor = ['color', 'kwargs...'];
|
||||
protected function libChangeColor($args)
|
||||
{
|
||||
return $this->alterColor($args,'change', function ($base, $alter, $max) {
|
||||
return $this->alterColor($args, 'change', function ($base, $alter, $max) {
|
||||
if ($alter === null) {
|
||||
return $base;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ use ScssPhp\ScssPhp\Util;
|
|||
*
|
||||
* @template-implements \ArrayAccess<int, mixed>
|
||||
*/
|
||||
class Number extends Node implements \ArrayAccess
|
||||
class Number extends Node implements \ArrayAccess, \JsonSerializable
|
||||
{
|
||||
const PRECISION = 10;
|
||||
|
||||
|
|
@ -131,7 +131,7 @@ class Number extends Node implements \ArrayAccess
|
|||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
* @return list<string>
|
||||
*/
|
||||
public function getNumeratorUnits()
|
||||
{
|
||||
|
|
@ -139,13 +139,23 @@ class Number extends Node implements \ArrayAccess
|
|||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
* @return list<string>
|
||||
*/
|
||||
public function getDenominatorUnits()
|
||||
{
|
||||
return $this->denominatorUnits;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
#[\ReturnTypeWillChange]
|
||||
public function jsonSerialize()
|
||||
{
|
||||
// Passing a compiler instance makes the method output a Sass representation instead of a CSS one, supporting full units.
|
||||
return $this->output(new Compiler());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -554,7 +564,7 @@ class Number extends Node implements \ArrayAccess
|
|||
|
||||
try {
|
||||
return $this->coerceUnits($other, function ($num1, $num2) {
|
||||
return round($num1,self::PRECISION) == round($num2, self::PRECISION);
|
||||
return round($num1, self::PRECISION) == round($num2, self::PRECISION);
|
||||
});
|
||||
} catch (SassScriptException $e) {
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,62 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* SCSSPHP
|
||||
*
|
||||
* @copyright 2012-2020 Leaf Corcoran
|
||||
*
|
||||
* @license http://opensource.org/licenses/MIT MIT
|
||||
*
|
||||
* @link http://scssphp.github.io/scssphp
|
||||
*/
|
||||
|
||||
namespace ScssPhp\ScssPhp;
|
||||
|
||||
final class OutputStyle
|
||||
{
|
||||
const EXPANDED = 'expanded';
|
||||
const COMPRESSED = 'compressed';
|
||||
|
||||
/**
|
||||
* Converts a string to an output style.
|
||||
*
|
||||
* Using this method allows to write code which will support both
|
||||
* versions 1.12+ and 2.0 of Scssphp. In 2.0, OutputStyle will be
|
||||
* an enum instead of using string constants.
|
||||
*
|
||||
* @param string $string
|
||||
*
|
||||
* @return self::*
|
||||
*/
|
||||
public static function fromString($string)
|
||||
{
|
||||
switch ($string) {
|
||||
case 'expanded':
|
||||
return self::EXPANDED;
|
||||
|
||||
case 'compressed':
|
||||
return self::COMPRESSED;
|
||||
|
||||
default:
|
||||
throw new \InvalidArgumentException('Invalid output style');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts an output style to a string supported by {@see OutputStyle::fromString()}.
|
||||
*
|
||||
* Using this method allows to write code which will support both
|
||||
* versions 1.12+ and 2.0 of Scssphp. In 2.0, OutputStyle will be
|
||||
* an enum instead of using string constants.
|
||||
* The returned string representation is guaranteed to be compatible
|
||||
* between 1.12 and 2.0.
|
||||
*
|
||||
* @param self::* $outputStyle
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function toString($outputStyle)
|
||||
{
|
||||
return $outputStyle;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
117
plugins/admin/vendor/scssphp/scssphp/src/Parser.php
vendored
117
plugins/admin/vendor/scssphp/scssphp/src/Parser.php
vendored
|
|
@ -273,6 +273,11 @@ class Parser
|
|||
$this->saveEncoding();
|
||||
$this->extractLineNumbers($buffer);
|
||||
|
||||
if ($this->utf8 && !preg_match('//u', $buffer)) {
|
||||
$message = $this->sourceName ? 'Invalid UTF-8 file: ' . $this->sourceName : 'Invalid UTF-8 file';
|
||||
throw new ParserException($message);
|
||||
}
|
||||
|
||||
$this->pushBlock(null); // root block
|
||||
$this->whitespace();
|
||||
$this->pushBlock(null);
|
||||
|
|
@ -305,8 +310,9 @@ class Parser
|
|||
*
|
||||
* @api
|
||||
*
|
||||
* @param string $buffer
|
||||
* @param string|array $out
|
||||
* @param string $buffer
|
||||
* @param mixed $out
|
||||
* @param-out array|Number $out
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -323,6 +329,13 @@ class Parser
|
|||
|
||||
$list = $this->valueList($out);
|
||||
|
||||
if ($this->count !== \strlen($this->buffer)) {
|
||||
$error = $this->parseError('Expected end of value');
|
||||
$message = 'Passing trailing content after the expression when parsing a value is deprecated since Scssphp 1.12.0 and will be an error in 2.0. ' . $error->getMessage();
|
||||
|
||||
@trigger_error($message, E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
$this->restoreEncoding();
|
||||
|
||||
return $list;
|
||||
|
|
@ -333,9 +346,9 @@ class Parser
|
|||
*
|
||||
* @api
|
||||
*
|
||||
* @param string $buffer
|
||||
* @param string|array $out
|
||||
* @param bool $shouldValidate
|
||||
* @param string $buffer
|
||||
* @param array $out
|
||||
* @param bool $shouldValidate
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -383,10 +396,13 @@ class Parser
|
|||
$this->inParens = false;
|
||||
$this->eatWhiteDefault = true;
|
||||
$this->buffer = (string) $buffer;
|
||||
$this->discardComments = true;
|
||||
|
||||
$this->saveEncoding();
|
||||
$this->extractLineNumbers($this->buffer);
|
||||
|
||||
$this->whitespace();
|
||||
|
||||
$isMediaQuery = $this->mediaQueryList($out);
|
||||
|
||||
$this->restoreEncoding();
|
||||
|
|
@ -1240,10 +1256,10 @@ class Parser
|
|||
/**
|
||||
* Assert a parsed part is plain CSS Valid
|
||||
*
|
||||
* @param array|false $parsed
|
||||
* @param array|Number|false $parsed
|
||||
* @param int $startPos
|
||||
*
|
||||
* @return array
|
||||
* @return array|Number
|
||||
*
|
||||
* @throws ParserException
|
||||
*/
|
||||
|
|
@ -1273,10 +1289,10 @@ class Parser
|
|||
/**
|
||||
* Check a parsed element is plain CSS Valid
|
||||
*
|
||||
* @param array $parsed
|
||||
* @param array|Number|string $parsed
|
||||
* @param bool $allowExpression
|
||||
*
|
||||
* @return array|false
|
||||
* @return ($parsed is string ? string : ($parsed is Number ? Number : array|false))
|
||||
*/
|
||||
protected function isPlainCssValidElement($parsed, $allowExpression = false)
|
||||
{
|
||||
|
|
@ -1285,6 +1301,10 @@ class Parser
|
|||
return $parsed;
|
||||
}
|
||||
|
||||
if ($parsed instanceof Number) {
|
||||
return $parsed;
|
||||
}
|
||||
|
||||
if (
|
||||
\in_array($parsed[0], [Type::T_FUNCTION, Type::T_FUNCTION_CALL]) &&
|
||||
!\in_array($parsed[1], [
|
||||
|
|
@ -1678,9 +1698,9 @@ class Parser
|
|||
*/
|
||||
protected function appendComment($comment)
|
||||
{
|
||||
assert($this->env !== null);
|
||||
|
||||
if (! $this->discardComments) {
|
||||
assert($this->env !== null);
|
||||
|
||||
$this->env->comments[] = $comment;
|
||||
}
|
||||
}
|
||||
|
|
@ -2079,8 +2099,9 @@ class Parser
|
|||
/**
|
||||
* Parse directive value list that considers $vars as keyword
|
||||
*
|
||||
* @param array $out
|
||||
* @param mixed $out
|
||||
* @param string|false $endChar
|
||||
* @param-out array|Number $out
|
||||
*
|
||||
* @return bool
|
||||
*
|
||||
|
|
@ -2143,7 +2164,8 @@ class Parser
|
|||
/**
|
||||
* Parse comma separated value list
|
||||
*
|
||||
* @param array $out
|
||||
* @param mixed $out
|
||||
* @param-out array|Number $out
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -2161,10 +2183,11 @@ class Parser
|
|||
* Parse a function call, where externals () are part of the call
|
||||
* and not of the value list
|
||||
*
|
||||
* @param array $out
|
||||
* @param mixed $out
|
||||
* @param bool $mandatoryEnclos
|
||||
* @param null|string $charAfter
|
||||
* @param null|bool $eatWhiteSp
|
||||
* @param-out array|Number $out
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -2200,7 +2223,8 @@ class Parser
|
|||
/**
|
||||
* Parse space separated value list
|
||||
*
|
||||
* @param array $out
|
||||
* @param mixed $out
|
||||
* @param-out array|Number $out
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -2212,10 +2236,11 @@ class Parser
|
|||
/**
|
||||
* Parse generic list
|
||||
*
|
||||
* @param array $out
|
||||
* @param mixed $out
|
||||
* @param string $parseItem The name of the method used to parse items
|
||||
* @param string $delim
|
||||
* @param bool $flatten
|
||||
* @param-out ($flatten is false ? array : array|Number) $out
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -2319,9 +2344,10 @@ class Parser
|
|||
/**
|
||||
* Parse expression
|
||||
*
|
||||
* @param array $out
|
||||
* @param mixed $out
|
||||
* @param bool $listOnly
|
||||
* @param bool $lookForExp
|
||||
* @param-out array|Number $out
|
||||
*
|
||||
* @return bool
|
||||
*
|
||||
|
|
@ -2386,10 +2412,11 @@ class Parser
|
|||
/**
|
||||
* Parse expression specifically checking for lists in parenthesis or brackets
|
||||
*
|
||||
* @param array $out
|
||||
* @param mixed $out
|
||||
* @param int $s
|
||||
* @param string $closingParen
|
||||
* @param string[] $allowedTypes
|
||||
* @param-out array|Number $out
|
||||
*
|
||||
* @return bool
|
||||
*
|
||||
|
|
@ -2448,10 +2475,10 @@ class Parser
|
|||
/**
|
||||
* Parse left-hand side of subexpression
|
||||
*
|
||||
* @param array $lhs
|
||||
* @param int $minP
|
||||
* @param array|Number $lhs
|
||||
* @param int $minP
|
||||
*
|
||||
* @return array
|
||||
* @return array|Number
|
||||
*/
|
||||
protected function expHelper($lhs, $minP)
|
||||
{
|
||||
|
|
@ -2502,7 +2529,8 @@ class Parser
|
|||
/**
|
||||
* Parse value
|
||||
*
|
||||
* @param array $out
|
||||
* @param mixed $out
|
||||
* @param-out array|Number $out
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -2710,7 +2738,8 @@ class Parser
|
|||
/**
|
||||
* Parse parenthesized value
|
||||
*
|
||||
* @param array $out
|
||||
* @param mixed $out
|
||||
* @param-out array|Number $out
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -2782,7 +2811,8 @@ class Parser
|
|||
* Parse function call
|
||||
*
|
||||
* @param string $name
|
||||
* @param array $func
|
||||
* @param mixed $func
|
||||
* @param-out array $func
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -2885,7 +2915,8 @@ class Parser
|
|||
/**
|
||||
* Parse mixin/function definition argument list
|
||||
*
|
||||
* @param array $out
|
||||
* @param mixed $out
|
||||
* @param-out list<array{string, array|Number|null, bool}> $out
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -2947,7 +2978,8 @@ class Parser
|
|||
/**
|
||||
* Parse map
|
||||
*
|
||||
* @param array $out
|
||||
* @param mixed $out
|
||||
* @param-out array $out
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -2989,7 +3021,8 @@ class Parser
|
|||
/**
|
||||
* Parse color
|
||||
*
|
||||
* @param array $out
|
||||
* @param mixed $out
|
||||
* @param-out array $out
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -3015,7 +3048,8 @@ class Parser
|
|||
/**
|
||||
* Parse number with unit
|
||||
*
|
||||
* @param array $unit
|
||||
* @param mixed $unit
|
||||
* @param-out Number $unit
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -3221,11 +3255,12 @@ class Parser
|
|||
* Parse an unbounded string stopped by $end
|
||||
*
|
||||
* @param string $end
|
||||
* @param array $out
|
||||
* @param mixed $out
|
||||
* @param string $nestOpen
|
||||
* @param string $nestClose
|
||||
* @param bool $rtrim
|
||||
* @param string $disallow
|
||||
* @param-out array $out
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -3302,8 +3337,9 @@ class Parser
|
|||
/**
|
||||
* Parser interpolation
|
||||
*
|
||||
* @param string|array $out
|
||||
* @param bool $lookWhite save information about whitespace before and after
|
||||
* @param mixed $out
|
||||
* @param bool $lookWhite save information about whitespace before and after
|
||||
* @param-out array $out
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -3837,7 +3873,8 @@ class Parser
|
|||
/**
|
||||
* Parse a variable
|
||||
*
|
||||
* @param array $out
|
||||
* @param mixed $out
|
||||
* @param-out array{Type::*, string} $out
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -3866,9 +3903,10 @@ class Parser
|
|||
/**
|
||||
* Parse a keyword
|
||||
*
|
||||
* @param string $word
|
||||
* @param bool $eatWhitespace
|
||||
* @param bool $inSelector
|
||||
* @param mixed $word
|
||||
* @param bool $eatWhitespace
|
||||
* @param bool $inSelector
|
||||
* @param-out string $word
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -3984,7 +4022,8 @@ class Parser
|
|||
/**
|
||||
* Parse a url
|
||||
*
|
||||
* @param array $out
|
||||
* @param mixed $out
|
||||
* @param-out array $out
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -3994,10 +4033,10 @@ class Parser
|
|||
$s = $this->count;
|
||||
|
||||
if (
|
||||
($this->string($out) || $this->spaceList($out)) &&
|
||||
($this->string($inner) || $this->spaceList($inner)) &&
|
||||
$this->matchChar(')')
|
||||
) {
|
||||
$out = [Type::T_STRING, '', ['url(', $out, ')']];
|
||||
$out = [Type::T_STRING, '', ['url(', $inner, ')']];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -4040,7 +4079,7 @@ class Parser
|
|||
/**
|
||||
* Strip assignment flag from the list
|
||||
*
|
||||
* @param array $value
|
||||
* @param array|Number $value
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -95,6 +95,9 @@ class Type
|
|||
* @internal
|
||||
*/
|
||||
const T_FOR = 'for';
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
const T_FUNCTION = 'function';
|
||||
/**
|
||||
* @internal
|
||||
|
|
|
|||
|
|
@ -19,5 +19,5 @@ namespace ScssPhp\ScssPhp;
|
|||
*/
|
||||
class Version
|
||||
{
|
||||
const VERSION = '1.11.0';
|
||||
const VERSION = '1.13.0';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
# v1.8.0
|
||||
## 04/21/2025
|
||||
|
||||
1. [](#improved)
|
||||
* Added "version:" to composer.json as it now requires it
|
||||
* Updated to `Tailwind 3` version `3.3.3`
|
||||
* Better autoload instructions
|
||||
* Fixed some `https` links in `README.md` to `https`
|
||||
|
||||
# v1.7.1
|
||||
## 06/14/2023
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
# Grav Devtools Plugin
|
||||
|
||||
The `devtools` is a [Grav](http://github.com/getgrav/grav) Plugin that lets you quickly create a scaffolding for your new plugins and themes. The plugin provides CLI commands that allow for the quick and easy deployment of a sample scaffolding for your new plugin.
|
||||
The `devtools` is a [Grav](https://github.com/getgrav/grav) Plugin that lets you quickly create a scaffolding for your new plugins and themes. The plugin provides CLI commands that allow for the quick and easy deployment of a sample scaffolding for your new plugin.
|
||||
|
||||
# Installation
|
||||
|
||||
## GPM Installation (Preferred)
|
||||
|
||||
The simplest way to install this plugin is via the [Grav Package Manager (GPM)](http://learn.getgrav.org/advanced/grav-gpm). From the root of your Grav install type:
|
||||
The simplest way to install this plugin is via the [Grav Package Manager (GPM)](https://learn.getgrav.org/advanced/grav-gpm). From the root of your Grav install type:
|
||||
|
||||
bin/gpm install devtools
|
||||
|
||||
|
|
@ -65,7 +65,7 @@ Path: /home/johnnyr/webroot/grav-installation/user/themes/mytheme
|
|||
|
||||
There are **three template creation options**
|
||||
|
||||
1. `pure-blank` - This is a very basic blank theme that uses the [Pure CSS framework](http://purecss.io/)
|
||||
1. `pure-blank` - This is a very basic blank theme that uses the [Pure CSS framework](https://purecss.io/)
|
||||
2. `inheritance` - This creates a very basic template with minimal files that inherits a base theme. To find out more about theme inheritance, [check out the subject in more details on the Grav Learn site](https://learn.getgrav.org/themes/customization#theme-inheritance).
|
||||
3. `copy` - This allows you to create a new theme based on an existing theme. This is the simplest way to get started with a new theme by using another theme as the basis.
|
||||
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
name: DevTools
|
||||
slug: devtools
|
||||
type: plugin
|
||||
version: 1.7.1
|
||||
version: 1.8.0
|
||||
description: Plugin and Theme scaffolding utilities
|
||||
icon: cogs
|
||||
author:
|
||||
name: Team Grav
|
||||
email: devs@getgrav.org
|
||||
url: http://getgrav.org
|
||||
url: https://getgrav.org
|
||||
homepage: https://github.com/getgrav/grav-plugin-devtools
|
||||
keywords: devtools, plugin, theme
|
||||
bugs: https://github.com/getgrav/grav-plugin-devtools/issues
|
||||
|
|
|
|||
|
|
@ -280,7 +280,8 @@ class DevToolsCommand extends ConsoleCommand
|
|||
$this->output->writeln('Path: <cyan>' . $component_folder . '</cyan>');
|
||||
$this->output->writeln('');
|
||||
if ($type === 'plugin') {
|
||||
$this->output->writeln('<yellow>Please run `cd ' . $component_folder . '` and `composer update` to initialize the autoloader</yellow>');
|
||||
$this->output->writeln('<red>!!! IMPORTANT: To initialize the autoloader, please run this now:</red>');
|
||||
$this->output->writeln('<yellow>cd ' . $component_folder . ' && composer update </yellow>');
|
||||
$this->output->writeln('');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
"name": "{{ githubid|lower }}/{{ component.name|hyphenize }}",
|
||||
"type": "grav-plugin",
|
||||
"description": "{{ component.description }}",
|
||||
"version": "1.0.0",
|
||||
"keywords": ["plugin"],
|
||||
"homepage": "https://github.com/{{ githubid }}/grav-plugin-{{ component.name|hyphenize }}",
|
||||
"license": "MIT",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
"name": "{{ githubid|lower }}/{{ component.name|hyphenize }}",
|
||||
"type": "grav-plugin",
|
||||
"description": "{{ component.description }}",
|
||||
"version": "1.0.0",
|
||||
"keywords": ["plugin"],
|
||||
"homepage": "https://github.com/{{ githubid }}/grav-plugin-{{ component.name|hyphenize }}",
|
||||
"license": "MIT",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# {{ component.name|titleize }} Theme
|
||||
|
||||
The **{{ component.name|titleize }}** Theme is for [Grav CMS](http://github.com/getgrav/grav). This README.md file should be modified to describe the features, installation, configuration, and general usage of this theme.
|
||||
The **{{ component.name|titleize }}** Theme is for [Grav CMS](https://github.com/getgrav/grav). This README.md file should be modified to describe the features, installation, configuration, and general usage of this theme.
|
||||
|
||||
## Description
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# {{ component.name|titleize }} Theme
|
||||
|
||||
The **{{ component.name|titleize }}** Theme is for [Grav CMS](http://github.com/getgrav/grav). This README.md file should be modified to describe the features, installation, configuration, and general usage of this theme.
|
||||
The **{{ component.name|titleize }}** Theme is for [Grav CMS](https://github.com/getgrav/grav). This README.md file should be modified to describe the features, installation, configuration, and general usage of this theme.
|
||||
|
||||
## Description
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# {{ component.name|titleize }} Theme
|
||||
|
||||
The **{{ component.name|titleize }}** Theme is for [Grav CMS](http://github.com/getgrav/grav). This README.md file should be modified to describe the features, installation, configuration, and general usage of this theme.
|
||||
The **{{ component.name|titleize }}** Theme is for [Grav CMS](https://github.com/getgrav/grav). This README.md file should be modified to describe the features, installation, configuration, and general usage of this theme.
|
||||
|
||||
## Description
|
||||
|
||||
|
|
|
|||
|
|
@ -12,14 +12,14 @@
|
|||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"@tailwindcss/forms": "^0.5.0",
|
||||
"@tailwindcss/typography": "^0.5.2",
|
||||
"alpinejs": "^2.8.2",
|
||||
"browser-sync": "^2.27.7",
|
||||
"@tailwindcss/forms": "^0.5.4",
|
||||
"@tailwindcss/typography": "^0.5.9",
|
||||
"alpinejs": "^3.12.3",
|
||||
"browser-sync": "^2.29.3",
|
||||
"browser-sync-webpack-plugin": "^2.3.0",
|
||||
"laravel-mix": "^6.0.43",
|
||||
"mix-tailwindcss": "^1.3.0",
|
||||
"tailwindcss": "^3.0.18",
|
||||
"tailwindcss": "^3.3.3",
|
||||
"tailwindcss-debug-screens": "^2.2.1"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{% do assets.addJs('theme://dist/js/main' ~ extension ~ '.js', 98) %}
|
||||
{% do assets.addJs('theme://dist/js/main' ~ extension ~ '.js', { loading: 'defer' }) %}
|
||||
{% endblock %}
|
||||
|
||||
{% block assets deferred %}
|
||||
|
|
@ -55,7 +55,7 @@
|
|||
{% block footer %}
|
||||
<div class="footer text-center">
|
||||
<div class="">
|
||||
<p><a href="http://getgrav.org">Grav</a>, by <a href="https://trilby.media">Trilby Media, LLC</a>.</p>
|
||||
<p><a href="https://getgrav.org">Grav</a>, by <a href="https://trilby.media">Trilby Media, LLC</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# {{ component.name|titleize }} Theme
|
||||
|
||||
The **{{ component.name|titleize }}** Theme is for [Grav CMS](http://github.com/getgrav/grav). This README.md file should be modified to describe the features, installation, configuration, and general usage of this theme.
|
||||
The **{{ component.name|titleize }}** Theme is for [Grav CMS](https://github.com/getgrav/grav). This README.md file should be modified to describe the features, installation, configuration, and general usage of this theme.
|
||||
|
||||
## Description
|
||||
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@
|
|||
{% block footer %}
|
||||
<div class="footer text-center">
|
||||
<div class="">
|
||||
<p><a href="http://getgrav.org">Grav</a>, by <a href="https://trilby.media">Trilby Media, LLC</a>.</p>
|
||||
<p><a href="https://getgrav.org">Grav</a>, by <a href="https://trilby.media">Trilby Media, LLC</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,11 @@
|
|||
# v4.2.0
|
||||
## 08/25/2025
|
||||
|
||||
1. [](#new)
|
||||
* PHP 8.4 compatibility
|
||||
1. [](#improved)
|
||||
* Vendor library updates
|
||||
|
||||
# v4.1.2
|
||||
## 01/06/2025
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
name: Email
|
||||
slug: email
|
||||
type: plugin
|
||||
version: 4.1.2
|
||||
version: 4.2.0
|
||||
testing: false
|
||||
description: Enables the emailing system for Grav
|
||||
icon: envelope
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ class Email
|
|||
* @param string|null $charset @deprecated
|
||||
* @return Message
|
||||
*/
|
||||
public function message(string $subject = null, string $body = null, string $contentType = null, string $charset = null): Message
|
||||
public function message(?string $subject = null, ?string $body = null, ?string $contentType = null, ?string $charset = null): Message
|
||||
{
|
||||
$message = new Message();
|
||||
$message->subject($subject);
|
||||
|
|
@ -89,7 +89,7 @@ class Email
|
|||
* @param Envelope|null $envelope
|
||||
* @return int
|
||||
*/
|
||||
public function send(Message $message, Envelope $envelope = null): int
|
||||
public function send(Message $message, ?Envelope $envelope = null): int
|
||||
{
|
||||
try {
|
||||
$sent_msg = $this->transport->send($message->getEmail(), $envelope);
|
||||
|
|
|
|||
61
plugins/email/composer.lock
generated
61
plugins/email/composer.lock
generated
|
|
@ -8,26 +8,29 @@
|
|||
"packages": [
|
||||
{
|
||||
"name": "doctrine/deprecations",
|
||||
"version": "1.1.4",
|
||||
"version": "1.1.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/deprecations.git",
|
||||
"reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9"
|
||||
"reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9",
|
||||
"reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9",
|
||||
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
|
||||
"reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1 || ^8.0"
|
||||
},
|
||||
"conflict": {
|
||||
"phpunit/phpunit": "<=7.5 || >=13"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/coding-standard": "^9 || ^12",
|
||||
"phpstan/phpstan": "1.4.10 || 2.0.3",
|
||||
"doctrine/coding-standard": "^9 || ^12 || ^13",
|
||||
"phpstan/phpstan": "1.4.10 || 2.1.11",
|
||||
"phpstan/phpstan-phpunit": "^1.0 || ^2",
|
||||
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
|
||||
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12",
|
||||
"psr/log": "^1 || ^2 || ^3"
|
||||
},
|
||||
"suggest": {
|
||||
|
|
@ -47,9 +50,9 @@
|
|||
"homepage": "https://www.doctrine-project.org/",
|
||||
"support": {
|
||||
"issues": "https://github.com/doctrine/deprecations/issues",
|
||||
"source": "https://github.com/doctrine/deprecations/tree/1.1.4"
|
||||
"source": "https://github.com/doctrine/deprecations/tree/1.1.5"
|
||||
},
|
||||
"time": "2024-12-07T21:18:45+00:00"
|
||||
"time": "2025-04-07T20:06:18+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/lexer",
|
||||
|
|
@ -970,16 +973,16 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-idn",
|
||||
"version": "v1.31.0",
|
||||
"version": "v1.33.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-idn.git",
|
||||
"reference": "c36586dcf89a12315939e00ec9b4474adcb1d773"
|
||||
"reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773",
|
||||
"reference": "c36586dcf89a12315939e00ec9b4474adcb1d773",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3",
|
||||
"reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -1033,7 +1036,7 @@
|
|||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0"
|
||||
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
|
@ -1044,16 +1047,20 @@
|
|||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/nicolas-grekas",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-09-09T11:45:10+00:00"
|
||||
"time": "2024-09-10T14:38:51+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-normalizer",
|
||||
"version": "v1.31.0",
|
||||
"version": "v1.33.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
|
||||
|
|
@ -1114,7 +1121,7 @@
|
|||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
|
||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
|
@ -1125,6 +1132,10 @@
|
|||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/nicolas-grekas",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
|
|
@ -1134,16 +1145,16 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php80",
|
||||
"version": "v1.31.0",
|
||||
"version": "v1.33.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
|
||||
"reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
|
||||
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
|
||||
"reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -1194,7 +1205,7 @@
|
|||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
|
@ -1205,12 +1216,16 @@
|
|||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/nicolas-grekas",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-09-09T11:45:10+00:00"
|
||||
"time": "2025-01-02T08:10:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/redis-messenger",
|
||||
|
|
|
|||
5
plugins/email/vendor/autoload.php
vendored
5
plugins/email/vendor/autoload.php
vendored
|
|
@ -14,10 +14,7 @@ if (PHP_VERSION_ID < 50600) {
|
|||
echo $err;
|
||||
}
|
||||
}
|
||||
trigger_error(
|
||||
$err,
|
||||
E_USER_ERROR
|
||||
);
|
||||
throw new RuntimeException($err);
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
|
|
|||
|
|
@ -26,12 +26,23 @@ use Composer\Semver\VersionParser;
|
|||
*/
|
||||
class InstalledVersions
|
||||
{
|
||||
/**
|
||||
* @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to
|
||||
* @internal
|
||||
*/
|
||||
private static $selfDir = null;
|
||||
|
||||
/**
|
||||
* @var mixed[]|null
|
||||
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
|
||||
*/
|
||||
private static $installed;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private static $installedIsLocalDir;
|
||||
|
||||
/**
|
||||
* @var bool|null
|
||||
*/
|
||||
|
|
@ -309,6 +320,24 @@ class InstalledVersions
|
|||
{
|
||||
self::$installed = $data;
|
||||
self::$installedByVendor = array();
|
||||
|
||||
// when using reload, we disable the duplicate protection to ensure that self::$installed data is
|
||||
// always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,
|
||||
// so we have to assume it does not, and that may result in duplicate data being returned when listing
|
||||
// all installed packages for example
|
||||
self::$installedIsLocalDir = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private static function getSelfDir()
|
||||
{
|
||||
if (self::$selfDir === null) {
|
||||
self::$selfDir = strtr(__DIR__, '\\', '/');
|
||||
}
|
||||
|
||||
return self::$selfDir;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -325,7 +354,9 @@ class InstalledVersions
|
|||
$copiedLocalDir = false;
|
||||
|
||||
if (self::$canGetVendors) {
|
||||
$selfDir = self::getSelfDir();
|
||||
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
||||
$vendorDir = strtr($vendorDir, '\\', '/');
|
||||
if (isset(self::$installedByVendor[$vendorDir])) {
|
||||
$installed[] = self::$installedByVendor[$vendorDir];
|
||||
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
||||
|
|
@ -333,11 +364,14 @@ class InstalledVersions
|
|||
$required = require $vendorDir.'/composer/installed.php';
|
||||
self::$installedByVendor[$vendorDir] = $required;
|
||||
$installed[] = $required;
|
||||
if (strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
|
||||
if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {
|
||||
self::$installed = $required;
|
||||
$copiedLocalDir = true;
|
||||
self::$installedIsLocalDir = true;
|
||||
}
|
||||
}
|
||||
if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {
|
||||
$copiedLocalDir = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
69
plugins/email/vendor/composer/installed.json
vendored
69
plugins/email/vendor/composer/installed.json
vendored
|
|
@ -2,33 +2,36 @@
|
|||
"packages": [
|
||||
{
|
||||
"name": "doctrine/deprecations",
|
||||
"version": "1.1.4",
|
||||
"version_normalized": "1.1.4.0",
|
||||
"version": "1.1.5",
|
||||
"version_normalized": "1.1.5.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/deprecations.git",
|
||||
"reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9"
|
||||
"reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9",
|
||||
"reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9",
|
||||
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
|
||||
"reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1 || ^8.0"
|
||||
},
|
||||
"conflict": {
|
||||
"phpunit/phpunit": "<=7.5 || >=13"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/coding-standard": "^9 || ^12",
|
||||
"phpstan/phpstan": "1.4.10 || 2.0.3",
|
||||
"doctrine/coding-standard": "^9 || ^12 || ^13",
|
||||
"phpstan/phpstan": "1.4.10 || 2.1.11",
|
||||
"phpstan/phpstan-phpunit": "^1.0 || ^2",
|
||||
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
|
||||
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12",
|
||||
"psr/log": "^1 || ^2 || ^3"
|
||||
},
|
||||
"suggest": {
|
||||
"psr/log": "Allows logging deprecations via PSR-3 logger implementation"
|
||||
},
|
||||
"time": "2024-12-07T21:18:45+00:00",
|
||||
"time": "2025-04-07T20:06:18+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
|
|
@ -44,7 +47,7 @@
|
|||
"homepage": "https://www.doctrine-project.org/",
|
||||
"support": {
|
||||
"issues": "https://github.com/doctrine/deprecations/issues",
|
||||
"source": "https://github.com/doctrine/deprecations/tree/1.1.4"
|
||||
"source": "https://github.com/doctrine/deprecations/tree/1.1.5"
|
||||
},
|
||||
"install-path": "../doctrine/deprecations"
|
||||
},
|
||||
|
|
@ -1006,17 +1009,17 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-idn",
|
||||
"version": "v1.31.0",
|
||||
"version_normalized": "1.31.0.0",
|
||||
"version": "v1.33.0",
|
||||
"version_normalized": "1.33.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-idn.git",
|
||||
"reference": "c36586dcf89a12315939e00ec9b4474adcb1d773"
|
||||
"reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773",
|
||||
"reference": "c36586dcf89a12315939e00ec9b4474adcb1d773",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3",
|
||||
"reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -1026,7 +1029,7 @@
|
|||
"suggest": {
|
||||
"ext-intl": "For best performance"
|
||||
},
|
||||
"time": "2024-09-09T11:45:10+00:00",
|
||||
"time": "2024-09-10T14:38:51+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"thanks": {
|
||||
|
|
@ -1072,7 +1075,7 @@
|
|||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0"
|
||||
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
|
@ -1083,6 +1086,10 @@
|
|||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/nicolas-grekas",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
|
|
@ -1092,8 +1099,8 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-normalizer",
|
||||
"version": "v1.31.0",
|
||||
"version_normalized": "1.31.0.0",
|
||||
"version": "v1.33.0",
|
||||
"version_normalized": "1.33.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
|
||||
|
|
@ -1156,7 +1163,7 @@
|
|||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
|
||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
|
@ -1167,6 +1174,10 @@
|
|||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/nicolas-grekas",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
|
|
@ -1176,23 +1187,23 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php80",
|
||||
"version": "v1.31.0",
|
||||
"version_normalized": "1.31.0.0",
|
||||
"version": "v1.33.0",
|
||||
"version_normalized": "1.33.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
|
||||
"reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
|
||||
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
|
||||
"reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.2"
|
||||
},
|
||||
"time": "2024-09-09T11:45:10+00:00",
|
||||
"time": "2025-01-02T08:10:11+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"thanks": {
|
||||
|
|
@ -1239,7 +1250,7 @@
|
|||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
|
@ -1250,6 +1261,10 @@
|
|||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/nicolas-grekas",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
|
|
|
|||
26
plugins/email/vendor/composer/installed.php
vendored
26
plugins/email/vendor/composer/installed.php
vendored
|
|
@ -3,7 +3,7 @@
|
|||
'name' => 'getgrav/grav-plugin-email',
|
||||
'pretty_version' => 'dev-develop',
|
||||
'version' => 'dev-develop',
|
||||
'reference' => '831784509ec3bbc822c873000d4672112f8f9557',
|
||||
'reference' => 'ae1a8e9e23373a3fd9d6f6b8c05021cde6ad44e4',
|
||||
'type' => 'grav-plugin',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
|
|
@ -11,9 +11,9 @@
|
|||
),
|
||||
'versions' => array(
|
||||
'doctrine/deprecations' => array(
|
||||
'pretty_version' => '1.1.4',
|
||||
'version' => '1.1.4.0',
|
||||
'reference' => '31610dbb31faa98e6b5447b62340826f54fbc4e9',
|
||||
'pretty_version' => '1.1.5',
|
||||
'version' => '1.1.5.0',
|
||||
'reference' => '459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../doctrine/deprecations',
|
||||
'aliases' => array(),
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
'getgrav/grav-plugin-email' => array(
|
||||
'pretty_version' => 'dev-develop',
|
||||
'version' => 'dev-develop',
|
||||
'reference' => '831784509ec3bbc822c873000d4672112f8f9557',
|
||||
'reference' => 'ae1a8e9e23373a3fd9d6f6b8c05021cde6ad44e4',
|
||||
'type' => 'grav-plugin',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
|
|
@ -164,17 +164,17 @@
|
|||
),
|
||||
),
|
||||
'symfony/polyfill-intl-idn' => array(
|
||||
'pretty_version' => 'v1.31.0',
|
||||
'version' => '1.31.0.0',
|
||||
'reference' => 'c36586dcf89a12315939e00ec9b4474adcb1d773',
|
||||
'pretty_version' => 'v1.33.0',
|
||||
'version' => '1.33.0.0',
|
||||
'reference' => '9614ac4d8061dc257ecc64cba1b140873dce8ad3',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-intl-idn',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-intl-normalizer' => array(
|
||||
'pretty_version' => 'v1.31.0',
|
||||
'version' => '1.31.0.0',
|
||||
'pretty_version' => 'v1.33.0',
|
||||
'version' => '1.33.0.0',
|
||||
'reference' => '3833d7255cc303546435cb650316bff708a1c75c',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer',
|
||||
|
|
@ -194,9 +194,9 @@
|
|||
),
|
||||
),
|
||||
'symfony/polyfill-php80' => array(
|
||||
'pretty_version' => 'v1.31.0',
|
||||
'version' => '1.31.0.0',
|
||||
'reference' => '60328e362d4c2c802a54fcbf04f9d3fb892b4cf8',
|
||||
'pretty_version' => 'v1.33.0',
|
||||
'version' => '1.33.0.0',
|
||||
'reference' => '0cc9dd0f17f61d8131e7df6b84bd344899fe2608',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-php80',
|
||||
'aliases' => array(),
|
||||
|
|
|
|||
|
|
@ -19,8 +19,7 @@ if ($issues) {
|
|||
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
|
||||
}
|
||||
}
|
||||
trigger_error(
|
||||
'Composer detected issues in your platform: ' . implode(' ', $issues),
|
||||
E_USER_ERROR
|
||||
throw new \RuntimeException(
|
||||
'Composer detected issues in your platform: ' . implode(' ', $issues)
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue