Commit 55ae7875 authored by Mohammad Khaledi's avatar Mohammad Khaledi Committed by ynx
Browse files

LCH-3652 | Remove extra container dialog-off-canvas-main-canvas.

parent 53e039c4
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -104,6 +104,12 @@ services:
    tags:
      - { name: event_subscriber }

  acquia_contenthub.page.theme_wrapper.view_subscriber:
    class: Drupal\acquia_contenthub\EventSubscriber\View\RemovePageThemeWrapperSubscriber
    arguments: ['@class_resolver', '@current_route_match', '%main_content_renderers%']
    tags:
      - { name: event_subscriber }

  cache.acquia_contenthub:
    class: Drupal\Core\Cache\CacheBackendInterface
    tags:
+56 −0
Original line number Diff line number Diff line
<?php

namespace Drupal\acquia_contenthub\EventSubscriber\View;

use Drupal\Core\EventSubscriber\MainContentViewSubscriber;
use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class RemovePageThemeWrapperSubscriber extends MainContentViewSubscriber {

  public static function getSubscribedEvents() {
    $events = [];
    $events[KernelEvents::VIEW][] = ['onViewRenderArray', 10];
    return $events;
  }

  public function onViewRenderArray(GetResponseForControllerResultEvent $event) {
    $request = $event->getRequest();

    if ($request->attributes->all()['_route'] === 'acquia_contenthub.content_entity_display.entity') {
      parent::onViewRenderArray($event);

      $event->getResponse()->setContent(
        self::removeSurroundingMarkup('dialog-off-canvas-main-canvas', $event->getResponse()->getContent())
      );
    }
  }

  private static function removeSurroundingMarkup(string $class_selector, string $input): string {
    $doc = new \DOMDocument();
    $doc->preserveWhiteSpace = FALSE;
    $doc->loadHTML($input);
    $entries = (new \DOMXPath($doc))->query("//div[contains(concat(' ', normalize-space(@class), ' '), ' ${class_selector} ')]");

    foreach ($entries as $node) {
      if (!$node->parentNode) {
        continue;
      }

      $child_nodes = [];

      foreach ($node->childNodes as $ch_node) {
        $child_nodes[] = $ch_node;
      }

      foreach ($child_nodes as $ch_node) {
        $node->parentNode->insertBefore($ch_node, $node);
      }

      $node->parentNode->removeChild($node);
    }

    return $doc->saveHTML();
  }

}