/** * Add required CSS classes to the attributes. * * @param array $attributes * @param NodeInterface $node * @param array $initialClasses * @return array */ protected function addCssClasses(array $attributes, NodeInterface $node, array $initialClasses = []) { $classNames = $initialClasses; // FIXME: The `dimensionsAreMatchingTargetDimensionValues` method should become part of the NodeInterface if it is used here . if ($node instanceof Node && !$node->dimensionsAreMatchingTargetDimensionValues()) { $classNames[] = 'neos-contentelement-shine-through'; } if ($classNames !== []) { $attributes['class'] = implode(' ', $classNames); } return $attributes; }
/** * Adopts a node from a (possibly) different context to this context * * Checks if a node variant matching the exact dimensions already exists for this context and * return it if found. Otherwise a new node variant for this context is created. * * In case the node already exists in the context but does not match the target dimensions a * new, more specific node is created and returned. * * @param NodeInterface $node The node with a different context. If the context of the given node is the same as this context the operation will have no effect. * @param boolean $recursive If TRUE also adopt all descendant nodes which are non-aggregate * @return NodeInterface A new or existing node that matches this context */ public function adoptNode(NodeInterface $node, $recursive = false) { if ($node->getContext() === $this && $node->dimensionsAreMatchingTargetDimensionValues()) { return $node; } $this->emitBeforeAdoptNode($node, $this, $recursive); $existingNode = $this->getNodeByIdentifier($node->getIdentifier()); if ($existingNode !== null) { if ($existingNode->dimensionsAreMatchingTargetDimensionValues()) { $adoptedNode = $existingNode; } else { $adoptedNode = $existingNode->createVariantForContext($this); } } else { $adoptedNode = $node->createVariantForContext($this); } $this->firstLevelNodeCache->setByIdentifier($adoptedNode->getIdentifier(), $adoptedNode); if ($recursive) { $childNodes = $node->getChildNodes(); /** @var NodeInterface $childNode */ foreach ($childNodes as $childNode) { if (!$childNode->getNodeType()->isAggregate()) { $this->adoptNode($childNode, true); } } } $this->emitAfterAdoptNode($node, $this, $recursive); return $adoptedNode; }