From cfd5d9e209d52b1d6ce18029da21e27aa2deb227 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Mon, 5 Oct 2020 18:44:59 -0600 Subject: [PATCH 1/3] improved compatibility --- system/src/Grav/Common/Helpers/Excerpts.php | 53 +++++++++++++++++---- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/system/src/Grav/Common/Helpers/Excerpts.php b/system/src/Grav/Common/Helpers/Excerpts.php index f07c3aa5a..95e2b143a 100644 --- a/system/src/Grav/Common/Helpers/Excerpts.php +++ b/system/src/Grav/Common/Helpers/Excerpts.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Helpers * - * @copyright Copyright (C) 2015 - 2019 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (C) 2015 - 2020 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -32,7 +32,7 @@ class Excerpts $excerpt = static::processLinkExcerpt($excerpt, $page, 'image'); $excerpt['element']['attributes']['src'] = $excerpt['element']['attributes']['href']; - unset ($excerpt['element']['attributes']['href']); + unset($excerpt['element']['attributes']['href']); $excerpt = static::processImageExcerpt($excerpt, $page); @@ -43,6 +43,26 @@ class Excerpts return $html; } + /** + * Process Grav page link URL from HTML tag + * + * @param string $html HTML tag e.g. `Page Link` + * @param PageInterface|null $page Page, defaults to the current page object + * @return string Returns final HTML string + */ + public static function processLinkHtml($html, PageInterface $page = null) + { + $excerpt = static::getExcerptFromHtml($html, 'a'); + + $original_href = $excerpt['element']['attributes']['href']; + $excerpt = static::processLinkExcerpt($excerpt, $page, 'link'); + $excerpt['element']['attributes']['data-href'] = $original_href; + + $html = static::getHtmlFromExcerpt($excerpt); + + return $html; + } + /** * Get an Excerpt array from a chunk of HTML * @@ -52,22 +72,35 @@ class Excerpts */ public static function getExcerptFromHtml($html, $tag) { - $doc = new \DOMDocument(); - $doc->loadHTML($html); - $images = $doc->getElementsByTagName($tag); - $excerpt = null; + $doc = new \DOMDocument('1.0', 'UTF-8'); + $internalErrors = libxml_use_internal_errors(true); + $doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8')); + libxml_use_internal_errors($internalErrors); - foreach ($images as $image) { + $elements = $doc->getElementsByTagName($tag); + $excerpt = null; + $inner = []; + + /** @var \DOMElement $element */ + foreach ($elements as $element) { $attributes = []; - foreach ($image->attributes as $name => $value) { + foreach ($element->attributes as $name => $value) { $attributes[$name] = $value->value; } $excerpt = [ 'element' => [ - 'name' => $image->tagName, + 'name' => $element->tagName, 'attributes' => $attributes ] ]; + + foreach ($element->childNodes as $node) { + $inner[] = $doc->saveHTML($node); + } + + $excerpt = array_merge_recursive($excerpt, ['element' => ['text' => implode('', $inner)]]); + + } return $excerpt; @@ -95,7 +128,7 @@ class Excerpts if (isset($element['text'])) { $html .= '>'; - $html .= $element['text']; + $html .= is_array($element['text']) ? static::getHtmlFromExcerpt(['element' => $element['text']]) : $element['text']; $html .= ''; } else { $html .= ' />'; From 9d870b2c45e50d1ecd165606ca2fe5223e5ffa05 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Tue, 6 Oct 2020 16:06:10 -0600 Subject: [PATCH 2/3] Backported folder::countChildren() from 1.7 --- system/src/Grav/Common/Filesystem/Folder.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/system/src/Grav/Common/Filesystem/Folder.php b/system/src/Grav/Common/Filesystem/Folder.php index 3196b65bd..781c9d3e3 100644 --- a/system/src/Grav/Common/Filesystem/Folder.php +++ b/system/src/Grav/Common/Filesystem/Folder.php @@ -508,4 +508,19 @@ abstract class Folder return $include_target ? @rmdir($folder) : true; } + + /** + * Does a directory contain children + * + * @param string $directory + * @return int|false + */ + public static function countChildren($directory) { + if (!is_dir($directory)) { + return false; + } + $directories = glob($directory . '/*', GLOB_ONLYDIR); + + return count($directories); + } } From 8d65c5c2c0e847322c76751cbfab611ca48d7746 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Wed, 7 Oct 2020 17:25:32 -0600 Subject: [PATCH 3/3] prepare for release --- CHANGELOG.md | 9 +++++++-- system/defines.php | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11745dc96..ee062db54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,18 @@ # v1.6.28 -## mm/dd/2020 +## 10/07/2020 1. [](#new) * Back-ported twig `{% cache %}` tag from Grav 1.7 * Back-ported `Utils::fullPath()` helper function from Grav 1.7 - * Back-ported `{{ svg_image() }}` Twig function from Grav .17 + * Back-ported `{{ svg_image() }}` Twig function from Grav 1.7 + * Back-ported `Folder::countChildren()` function from Grav 1.7 1. [](#improved) * Use new `{{ theme_var() }}` enhanced logic from Grav 1.7 + * Improved `Excerpts` class with fixes and functionality from Grav 1.7 * Ensure `onBlueprintCreated()` is initialized first + * Do not cache default `404` error page + * Composer update of vendor libraries + * Switched `Caddyfile` to use new Caddy2 syntax + improved usability 1. [](#bugfix) * Fixed Referer reference during GPM calls. * Fixed fatal error with toggled lists diff --git a/system/defines.php b/system/defines.php index 1c16e52f1..bf60f1542 100644 --- a/system/defines.php +++ b/system/defines.php @@ -8,7 +8,7 @@ // Some standard defines define('GRAV', true); -define('GRAV_VERSION', '1.6.27'); +define('GRAV_VERSION', '1.6.28'); define('GRAV_TESTING', false); define('DS', '/');