Strip the `loading` attribute from smileys for AMP output
authorAlexander Ebert <ebert@woltlab.com>
Wed, 16 Jun 2021 12:00:24 +0000 (14:00 +0200)
committerAlexander Ebert <ebert@woltlab.com>
Wed, 16 Jun 2021 12:00:24 +0000 (14:00 +0200)
See #4290

wcfsetup/install/files/lib/data/smiley/Smiley.class.php
wcfsetup/install/files/lib/system/html/output/node/HtmlOutputNodeImg.class.php

index 20bc1a772666bf1f3b96632a77e8f7a09a519b0a..4518cca9c78871c9cfa23a8283eb8b8ec709049b 100644 (file)
@@ -128,9 +128,10 @@ class Smiley extends DatabaseObject implements ITitledObject
      * Returns the html code to render the smiley.
      *
      * @param string $class (additional) class(es) of the smiley element
+     * @param bool $isAmp
      * @return  string
      */
-    public function getHtml($class = '')
+    public function getHtml($class = '', $isAmp = false)
     {
         $srcset = ($this->smileyPath2x) ? ' srcset="' . StringUtil::encodeHTML($this->getURL2x()) . ' 2x"' : '';
         $height = ($this->getHeight()) ? ' height="' . $this->getHeight() . '"' : '';
@@ -139,6 +140,8 @@ class Smiley extends DatabaseObject implements ITitledObject
             $class = ' ' . $class;
         }
 
-        return '<img src="' . StringUtil::encodeHTML($this->getURL()) . '" alt="' . StringUtil::encodeHTML($this->smileyCode) . '" title="' . WCF::getLanguage()->get($this->smileyTitle) . '" class="smiley' . $class . '"' . $srcset . $height . $width . ' loading="eager">';
+        $loading = ($isAmp) ? '' : ' loading="eager"';
+
+        return '<img src="' . StringUtil::encodeHTML($this->getURL()) . '" alt="' . StringUtil::encodeHTML($this->smileyCode) . '" title="' . WCF::getLanguage()->get($this->smileyTitle) . '" class="smiley' . $class . '"' . $srcset . $height . $width . $loading . '>';
     }
 }
index 72e1968c69601b8022eeb0e428d8dd87cd61c151..b2091371808153612ace2f09cc9c4def98179d6c 100644 (file)
@@ -36,6 +36,8 @@ class HtmlOutputNodeImg extends AbstractHtmlOutputNode
      */
     public function process(array $elements, AbstractHtmlNodeProcessor $htmlNodeProcessor)
     {
+        $isAmp = ($htmlNodeProcessor instanceof AmpHtmlOutputNodeProcessor);
+
         /** @var \DOMElement $element */
         foreach ($elements as $element) {
             $class = $element->getAttribute('class');
@@ -50,7 +52,7 @@ class HtmlOutputNodeImg extends AbstractHtmlOutputNode
                 } else {
                     // Ensure that the smiley's HTML is up to date.
                     $doc = new \DOMDocument();
-                    $doc->loadHTML($smiley->getHtml());
+                    $doc->loadHTML($smiley->getHtml('', $isAmp));
                     $smileyNode = $element->ownerDocument->importNode($doc->getElementsByTagName('img')->item(0), true);
                     $element->parentNode->replaceChild($smileyNode, $element);
                 }