Loading acquia_contenthub.services.yml +8 −2 Original line number Diff line number Diff line Loading @@ -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: Loading src/EventSubscriber/View/RemovePageThemeWrapperSubscriber.php 0 → 100644 +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(); } } Loading
acquia_contenthub.services.yml +8 −2 Original line number Diff line number Diff line Loading @@ -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: Loading
src/EventSubscriber/View/RemovePageThemeWrapperSubscriber.php 0 → 100644 +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(); } }