1<?php 2declare( strict_types = 1 ); 3 4namespace Wikimedia\Parsoid\Html2Wt\DOMHandlers; 5 6use DOMElement; 7use DOMNode; 8use Wikimedia\Parsoid\Html2Wt\SerializerState; 9use Wikimedia\Parsoid\Utils\WTUtils; 10 11class LinkHandler extends DOMHandler { 12 13 public function __construct() { 14 parent::__construct( false ); 15 } 16 17 /** @inheritDoc */ 18 public function handle( 19 DOMElement $node, SerializerState $state, bool $wrapperUnmodified = false 20 ): ?DOMNode { 21 $state->serializer->linkHandler( $node ); 22 return $node->nextSibling; 23 } 24 25 /** @inheritDoc */ 26 public function before( DOMElement $node, DOMNode $otherNode, SerializerState $state ): array { 27 // sol-transparent link nodes are the only thing on their line. 28 // But, don't force separators wrt to its parent (body, p, list, td, etc.) 29 if ( $otherNode !== $node->parentNode 30 && WTUtils::isSolTransparentLink( $node ) && !WTUtils::isRedirectLink( $node ) 31 && !WTUtils::isEncapsulationWrapper( $node ) 32 ) { 33 return [ 'min' => 1 ]; 34 } else { 35 return []; 36 } 37 } 38 39 /** @inheritDoc */ 40 public function after( DOMElement $node, DOMNode $otherNode, SerializerState $state ): array { 41 // sol-transparent link nodes are the only thing on their line 42 // But, don't force separators wrt to its parent (body, p, list, td, etc.) 43 if ( $otherNode !== $node->parentNode 44 && WTUtils::isSolTransparentLink( $node ) && !WTUtils::isRedirectLink( $node ) 45 && !WTUtils::isEncapsulationWrapper( $node ) 46 ) { 47 return [ 'min' => 1 ]; 48 } else { 49 return []; 50 } 51 } 52 53} 54