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