self-upgrade
This commit is contained in:
parent
5e30403988
commit
e72000d2e8
40
CHANGELOG.md
40
CHANGELOG.md
@ -1,3 +1,43 @@
|
||||
# v1.7.48
|
||||
## 10/28/2024
|
||||
|
||||
1. [](#new)
|
||||
* New Trait for fetchPriority attribute on images [#3850](https://github.com/getgrav/grav/pull/3850)
|
||||
1. [](#improved)
|
||||
* Fix for #3164. Adds aliases as possible commands during lookup [#3863](https://github.com/getgrav/grav/pull/3863)
|
||||
1. [](#bugfix)
|
||||
* Fix style conflict with Clockwork and tooltips [#3861](https://github.com/getgrav/grav/pull/3861)
|
||||
|
||||
# v1.7.47
|
||||
## 10/23/2024
|
||||
|
||||
1. [](#new)
|
||||
* New `Utils::toAscii()` method
|
||||
* Added support for Clockwork Debugger to allow web UI (requires new `clockwork-web` plugin)
|
||||
1. [](#improved)
|
||||
* Include modular sub-pages in last-modification date computation [#3562](https://github.com/getgrav/grav/pull/3562)
|
||||
* Updated vendor libs to latest versions
|
||||
* Updated JQuery to `3.7.1` [#3787](https://github.com/getgrav/grav/pull/3827)
|
||||
* Updated vendor libraries to latest versions
|
||||
* Support for Fediverse Creator meta tag [#3844](https://github.com/getgrav/grav/pull/3844)
|
||||
1. [](#bugfix)
|
||||
* Fixes deprecated for return type in Filesystem with PHP 8.3.6 [#3831](https://github.com/getgrav/grav/issues/3831)
|
||||
* Fix for `exif_imagtetype()` throwing an exception when file doesn't exist
|
||||
* Fix JSON output comments check with content type [#3859](https://github.com/getgrav/grav/pull/3859)
|
||||
|
||||
# v1.7.46
|
||||
## 05/15/2024
|
||||
|
||||
1. [](#new)
|
||||
* Added a new `Utils::toAscii()` method to remove UTF-8 characters from string
|
||||
1. [](#improved)
|
||||
* Removed unused `symfony/service-contracts` [#3828](https://github.com/getgrav/grav/pull/3828)
|
||||
* Upgraded bundled legacy JQuery to `3.7.1` [#3727](https://github.com/getgrav/grav/pull/3827)
|
||||
* Include modular pages in header `last-modified:` calculation [#3562](https://github.com/getgrav/grav/pull/3562)
|
||||
* Updated vendor libs to latest versions
|
||||
1. [](#bugfix)
|
||||
* Fixed some deprecated issues in Filesystem [#3831](https://github.com/getgrav/grav/issues/3831)
|
||||
|
||||
# v1.7.46
|
||||
## 05/15/2024
|
||||
|
||||
|
@ -70,8 +70,7 @@
|
||||
"phpunit/php-code-coverage": "~9.2",
|
||||
"getgrav/markdowndocs": "^2.0",
|
||||
"codeception/module-asserts": "^1.3",
|
||||
"codeception/module-phpbrowser": "^1.0",
|
||||
"symfony/service-contracts": "*"
|
||||
"codeception/module-phpbrowser": "^1.0"
|
||||
},
|
||||
"replace": {
|
||||
"symfony/polyfill-php72": "*",
|
||||
|
438
composer.lock
generated
438
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@ -1,2 +1,61 @@
|
||||
/** Clockwork Debugger CSS **/
|
||||
.clockwork-badge{position:fixed;z-index:10;bottom:0;left:0;padding:2px 4px;background-color:#eee;border:1px solid #ccc;border-bottom:0;border-left:0;display:flex;align-items:center}.clockwork-badge:hover{width:auto}.clockwork-badge:hover:after{content:'Grav Clockwork debugger enabled. Install Clockwork Browser extension (Chrome or Firefox), open your Developer tools and then select the Clockwork tab.'}.clockwork-badge:after{margin-left:10px;font-family:Monaco,Consolas,"Lucida Console",monospace;font-size:12px;line-height:1.5;color:#666}.clockwork-badge i{display:block;float:left;height:22px;width:22px;min-width:22px;background-size:contain;background-image:url(data:image/png;base64,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)}
|
||||
.clockwork-badge {
|
||||
position: fixed;
|
||||
z-index: 1000; /* Increased z-index for better visibility */
|
||||
bottom: 0; /* Added some spacing from the bottom */
|
||||
left: 0; /* Added some spacing from the left */
|
||||
padding: 5px;
|
||||
background-color: #eee;
|
||||
border: 1px solid #ccc;
|
||||
border-bottom: 0;
|
||||
border-left: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-radius: 0 4px 0 0; /* Rounded top corners */
|
||||
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
|
||||
font-size: 14px;
|
||||
color: #333;
|
||||
transition: background-color 0.3s ease;
|
||||
}
|
||||
|
||||
.clockwork-badge:hover {
|
||||
background-color: #ddd;
|
||||
}
|
||||
|
||||
.clockwork-badge i {
|
||||
display: block;
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
background-size: contain;
|
||||
background-image: url(data:image/png;base64,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);
|
||||
}
|
||||
|
||||
.clockwork-badge .tooltip {
|
||||
display: none; /* Hidden by default */
|
||||
position: absolute;
|
||||
bottom: 35px; /* Position above the badge */
|
||||
left: 0;
|
||||
width: 450px;
|
||||
padding: 20px;
|
||||
background-color: #fff;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
font-size: 16px;
|
||||
color: #666;
|
||||
line-height: 1.5;
|
||||
box-shadow: 0 2px 8px rgba(0,0,0,0.2);
|
||||
z-index: 1001; /* Ensure it appears above other elements */
|
||||
}
|
||||
|
||||
.clockwork-badge:hover .tooltip {
|
||||
display: block; /* Show tooltip on hover */
|
||||
}
|
||||
|
||||
.clockwork-badge .tooltip a {
|
||||
color: #007BFF;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.clockwork-badge .tooltip a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
@ -1,3 +1,37 @@
|
||||
/** Clockwork Debugger JS **/
|
||||
document.addEventListener("DOMContentLoaded",function () {
|
||||
var e=document.createElement("div");e.appendChild(document.createElement("i")),e.className="clockwork-badge",document.body.appendChild(e)});
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
// Directly select the script tag by its id
|
||||
var currentScript = document.getElementById('clockwork-script');
|
||||
|
||||
if (!currentScript) {
|
||||
console.error("Clockwork Debugger: Script tag with id 'clockwork-script' not found.");
|
||||
return;
|
||||
}
|
||||
|
||||
var route = currentScript.getAttribute('data-route') || '/clockwork'; // Default route if not specified
|
||||
|
||||
// Debugging: Log the route to verify
|
||||
console.log("Clockwork Debugger Route:", route);
|
||||
|
||||
// Create the badge container
|
||||
var badge = document.createElement("div");
|
||||
badge.className = "clockwork-badge";
|
||||
badge.setAttribute('aria-label', 'Clockwork Debugger Enabled');
|
||||
badge.setAttribute('role', 'button');
|
||||
|
||||
// Create the icon element
|
||||
var icon = document.createElement("i");
|
||||
badge.appendChild(icon);
|
||||
|
||||
// Create the tooltip element
|
||||
var tooltip = document.createElement("div");
|
||||
tooltip.className = "tooltip";
|
||||
tooltip.innerHTML = `
|
||||
<b>Grav Clockwork Debugger Enabled.</b><br>
|
||||
Install the <b>Clockwork Browser extension</b> (Chrome or Firefox) or use the <b>"Clockwork Web"</b> Grav plugin to <a href="${route}" target="_blank">View Debug Info 🔗</a>.
|
||||
`;
|
||||
badge.appendChild(tooltip);
|
||||
|
||||
// Append the badge to the body
|
||||
document.body.appendChild(badge);
|
||||
});
|
4
system/assets/jquery/jquery-3.x.min.js
vendored
4
system/assets/jquery/jquery-3.x.min.js
vendored
File diff suppressed because one or more lines are too long
@ -1311,6 +1311,17 @@ form:
|
||||
auto: Auto
|
||||
sync: Sync
|
||||
async: Async
|
||||
|
||||
images.defaults.fetchpriority:
|
||||
type: select
|
||||
size: small
|
||||
label: PLUGIN_ADMIN.IMAGES_FETCHPRIORITY
|
||||
help: PLUGIN_ADMIN.IMAGES_FETCHPRIORITY_HELP
|
||||
highlight: auto
|
||||
options:
|
||||
auto: Auto
|
||||
high: High
|
||||
low: Low
|
||||
|
||||
images.seofriendly:
|
||||
type: toggle
|
||||
|
@ -169,6 +169,7 @@ images:
|
||||
defaults:
|
||||
loading: auto # Let browser pick [auto|lazy|eager]
|
||||
decoding: auto # Let browser pick [auto|sync|async]
|
||||
fetchpriority: auto # Let browser pick [auto|high|low]
|
||||
watermark:
|
||||
image: 'system://images/watermark.png' # Path to a watermark image
|
||||
position_y: 'center' # top|center|bottom
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
// Some standard defines
|
||||
define('GRAV', true);
|
||||
define('GRAV_VERSION', '1.7.46');
|
||||
define('GRAV_VERSION', '1.7.48');
|
||||
define('GRAV_SCHEMA', '1.7.0_2020-11-20_1');
|
||||
define('GRAV_TESTING', false);
|
||||
|
||||
|
@ -279,11 +279,7 @@ class Debugger
|
||||
->withHeader('X-Clockwork-Id', $clockworkRequest->id)
|
||||
->withHeader('X-Clockwork-Version', $clockwork::VERSION);
|
||||
|
||||
$grav = Grav::instance();
|
||||
$basePath = $this->grav['base_url_relative'] . $grav['pages']->base();
|
||||
if ($basePath) {
|
||||
$response = $response->withHeader('X-Clockwork-Path', $basePath . '/__clockwork/');
|
||||
}
|
||||
$response = $response->withHeader('X-Clockwork-Path', Utils::url('/__clockwork/'));
|
||||
|
||||
return $response->withHeader('Server-Timing', ServerTiming::fromRequest($clockworkRequest)->value());
|
||||
}
|
||||
@ -307,7 +303,7 @@ class Debugger
|
||||
}
|
||||
|
||||
$id = $matches['id'] ?? null;
|
||||
$direction = $matches['direction'] ?? null;
|
||||
$direction = $matches['direction'] ?? 'latest';
|
||||
$count = $matches['count'] ?? null;
|
||||
|
||||
$storage = $clockwork->getStorage();
|
||||
@ -316,7 +312,7 @@ class Debugger
|
||||
$data = $storage->previous($id, $count);
|
||||
} elseif ($direction === 'next') {
|
||||
$data = $storage->next($id, $count);
|
||||
} elseif ($id === 'latest') {
|
||||
} elseif ($direction === 'latest' || $id === 'latest') {
|
||||
$data = $storage->latest();
|
||||
} else {
|
||||
$data = $storage->find($id);
|
||||
@ -403,8 +399,16 @@ class Debugger
|
||||
|
||||
// Clockwork specific assets
|
||||
if ($this->clockwork) {
|
||||
$assets->addCss('/system/assets/debugger/clockwork.css', ['loading' => 'inline']);
|
||||
$assets->addJs('/system/assets/debugger/clockwork.js', ['loading' => 'inline']);
|
||||
if ($this->config->get('plugins.clockwork-web.enabled')) {
|
||||
$route = Utils::url($this->grav['config']->get('plugins.clockwork-web.route'));
|
||||
} else {
|
||||
$route = 'https://github.com/getgrav/grav-plugin-clockwork-web';
|
||||
}
|
||||
$assets->addCss('/system/assets/debugger/clockwork.css');
|
||||
$assets->addJs('/system/assets/debugger/clockwork.js', [
|
||||
'id' => 'clockwork-script',
|
||||
'data-route' => $route
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
|
@ -49,7 +49,7 @@ class RecursiveDirectoryFilterIterator extends RecursiveFilterIterator
|
||||
*
|
||||
* @return bool true if the current element is acceptable, otherwise false.
|
||||
*/
|
||||
public function accept()
|
||||
public function accept() :bool
|
||||
{
|
||||
/** @var SplFileInfo $file */
|
||||
$file = $this->current();
|
||||
@ -72,7 +72,7 @@ class RecursiveDirectoryFilterIterator extends RecursiveFilterIterator
|
||||
/**
|
||||
* @return RecursiveDirectoryFilterIterator|RecursiveFilterIterator
|
||||
*/
|
||||
public function getChildren()
|
||||
public function getChildren() :RecursiveFilterIterator
|
||||
{
|
||||
/** @var RecursiveDirectoryFilterIterator $iterator */
|
||||
$iterator = $this->getInnerIterator();
|
||||
|
@ -45,7 +45,7 @@ class RecursiveFolderFilterIterator extends \RecursiveFilterIterator
|
||||
*
|
||||
* @return bool true if the current element is acceptable, otherwise false.
|
||||
*/
|
||||
public function accept()
|
||||
public function accept() :bool
|
||||
{
|
||||
/** @var SplFileInfo $current */
|
||||
$current = $this->current();
|
||||
|
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Grav\Common\Media
|
||||
* @author Pedro Moreno https://github.com/pmoreno-rodriguez
|
||||
* @license MIT License; see LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Grav\Common\Media\Traits;
|
||||
|
||||
use Grav\Common\Grav;
|
||||
|
||||
/**
|
||||
* Trait ImageFetchPriorityTrait
|
||||
* @package Grav\Common\Media\Traits
|
||||
*/
|
||||
|
||||
trait ImageFetchPriorityTrait
|
||||
{
|
||||
/**
|
||||
* Allows to set the fetchpriority attribute from Markdown or Twig
|
||||
*
|
||||
* @param string|null $value
|
||||
* @return $this
|
||||
*/
|
||||
public function fetchpriority($value = null)
|
||||
{
|
||||
if (null === $value) {
|
||||
$value = Grav::instance()['config']->get('system.images.defaults.fetchpriority', 'auto');
|
||||
}
|
||||
|
||||
// Validate the provided value (similar to loading and decoding attributes)
|
||||
if ($value !== null && $value !== 'auto') {
|
||||
$this->attributes['fetchpriority'] = $value;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
}
|
@ -179,7 +179,7 @@ class ImageFile extends Image
|
||||
throw new RuntimeException('You need to EXIF PHP Extension to use this function');
|
||||
}
|
||||
|
||||
if (!in_array(exif_imagetype($this->source->getInfos()), [IMAGETYPE_JPEG, IMAGETYPE_TIFF_II, IMAGETYPE_TIFF_MM], true)) {
|
||||
if (!file_exists($this->source->getInfos()) || !in_array(exif_imagetype($this->source->getInfos()), [IMAGETYPE_JPEG, IMAGETYPE_TIFF_II, IMAGETYPE_TIFF_MM], true)) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
@ -16,6 +16,7 @@ use Grav\Common\Media\Interfaces\ImageMediaInterface;
|
||||
use Grav\Common\Media\Interfaces\MediaLinkInterface;
|
||||
use Grav\Common\Media\Traits\ImageLoadingTrait;
|
||||
use Grav\Common\Media\Traits\ImageDecodingTrait;
|
||||
use Grav\Common\Media\Traits\ImageFetchPriorityTrait;
|
||||
use Grav\Common\Media\Traits\ImageMediaTrait;
|
||||
use Grav\Common\Utils;
|
||||
use Gregwar\Image\Image;
|
||||
@ -32,6 +33,7 @@ class ImageMedium extends Medium implements ImageMediaInterface, ImageManipulate
|
||||
use ImageMediaTrait;
|
||||
use ImageLoadingTrait;
|
||||
use ImageDecodingTrait;
|
||||
use ImageFetchPriorityTrait;
|
||||
|
||||
/**
|
||||
* @var mixed|string
|
||||
|
@ -613,7 +613,15 @@ class Page implements PageInterface
|
||||
|
||||
// Set Last-Modified header
|
||||
if ($this->lastModified()) {
|
||||
$last_modified_date = gmdate('D, d M Y H:i:s', $this->modified()) . ' GMT';
|
||||
$last_modified = $this->modified();
|
||||
foreach ($this->children()->modular() as $cpage) {
|
||||
$modular_mtime = $cpage->modified();
|
||||
if ($modular_mtime > $last_modified) {
|
||||
$last_modified = $modular_mtime;
|
||||
}
|
||||
}
|
||||
|
||||
$last_modified_date = gmdate('D, d M Y H:i:s', $last_modified) . ' GMT';
|
||||
$headers['Last-Modified'] = $last_modified_date;
|
||||
}
|
||||
|
||||
@ -1774,7 +1782,7 @@ class Page implements PageInterface
|
||||
'content' => $escape ? htmlspecialchars($value, ENT_QUOTES | ENT_HTML5, 'UTF-8') : $value
|
||||
];
|
||||
|
||||
if ($hasSeparator && !Utils::startsWith($key, ['twitter', 'flattr'])) {
|
||||
if ($hasSeparator && !Utils::startsWith($key, ['twitter', 'flattr','fediverse'])) {
|
||||
$entry['property'] = $key;
|
||||
} else {
|
||||
$entry['name'] = $key;
|
||||
|
@ -1407,14 +1407,13 @@ class Uri
|
||||
*/
|
||||
public function getContentType($short = true)
|
||||
{
|
||||
if (isset($_SERVER['CONTENT_TYPE'])) {
|
||||
$content_type = $_SERVER['CONTENT_TYPE'];
|
||||
$content_type = $_SERVER['CONTENT_TYPE'] ?? $_SERVER['HTTP_CONTENT_TYPE'] ?? $_SERVER['HTTP_ACCEPT'] ?? null;
|
||||
if ($content_type) {
|
||||
if ($short) {
|
||||
return Utils::substrToString($content_type, ';');
|
||||
}
|
||||
return $content_type;
|
||||
}
|
||||
return null;
|
||||
return $content_type;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1888,6 +1888,14 @@ abstract class Utils
|
||||
return $string;
|
||||
}
|
||||
|
||||
public static function toAscii(String $string): String
|
||||
{
|
||||
return strtr(utf8_decode($string),
|
||||
utf8_decode(
|
||||
'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ'),
|
||||
'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy');
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the subnet of an ip with CIDR prefix size
|
||||
*
|
||||
|
@ -57,6 +57,14 @@ class PluginCommandLoader implements CommandLoaderInterface
|
||||
$command = new $command_class();
|
||||
if ($command instanceof Command) {
|
||||
$this->commands[$command->getName()] = $command;
|
||||
|
||||
// If the command has an alias, add that as a possible command name.
|
||||
$aliases = $this->commands[$command->getName()]->getAliases();
|
||||
if (isset($aliases)) {
|
||||
foreach ($aliases as $alias) {
|
||||
$this->commands[$alias] = $command;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -440,7 +440,8 @@ class FlexCollection extends ObjectCollection implements FlexCollectionInterface
|
||||
] + $context
|
||||
);
|
||||
|
||||
if ($debugger->enabled()) {
|
||||
if ($debugger->enabled() &&
|
||||
!($grav['uri']->getContentType() === 'application/json' || $grav['uri']->extension() === 'json')) {
|
||||
$output = "\n<!–– START {$type} collection ––>\n{$output}\n<!–– END {$type} collection ––>\n";
|
||||
}
|
||||
|
||||
|
@ -627,7 +627,8 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface
|
||||
] + $context
|
||||
);
|
||||
|
||||
if ($debugger->enabled()) {
|
||||
if ($debugger->enabled() &&
|
||||
!($grav['uri']->getContentType() === 'application/json' || $grav['uri']->extension() === 'json')) {
|
||||
$name = $this->getKey() . ' (' . $type . ')';
|
||||
$output = "\n<!–– START {$name} object ––>\n{$output}\n<!–– END {$name} object ––>\n";
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
core:
|
||||
grav:
|
||||
version: 1.7.46
|
||||
version: 1.7.48
|
||||
schema: 1.7.0_2020-11-20_1
|
||||
history:
|
||||
- { version: 1.7.16, date: '2021-06-10 14:03:35' }
|
||||
@ -22,3 +22,4 @@ core:
|
||||
- { version: 1.7.46, date: '2024-06-06 14:19:43' }
|
||||
- { version: 1.7.46, date: '2024-06-07 11:58:40' }
|
||||
- { version: 1.7.46, date: '2024-06-07 12:09:35' }
|
||||
- { version: 1.7.48, date: '2025-02-19 15:40:41' }
|
||||
|
Loading…
x
Reference in New Issue
Block a user