Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/Template/AttributeArray.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Core/Template/AttributeArray.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,101 @@ +<?php + +namespace Drupal\Core\Template; + +use Drupal\Component\Utility\Html; + +/** + * A class that defines a type of Attribute that can be added to as an array. + * + * To use with Attribute, the array must be specified. + * Correct: + * @code + * $attributes = new Attribute(); + * $attributes['class'] = array(); + * $attributes['class'][] = 'cat'; + * @endcode + * Incorrect: + * @code + * $attributes = new Attribute(); + * $attributes['class'][] = 'cat'; + * @endcode + * + * @see \Drupal\Core\Template\Attribute + */ +class AttributeArray extends AttributeValueBase implements \ArrayAccess, \IteratorAggregate { + + /** + * Ensures empty array as a result of array_filter will not print '$name=""'. + * + * @see \Drupal\Core\Template\AttributeArray::__toString() + * @see \Drupal\Core\Template\AttributeValueBase::render() + */ + const RENDER_EMPTY_ATTRIBUTE = FALSE; + + /** + * {@inheritdoc} + */ + public function offsetGet($offset) { + return $this->value[$offset]; + } + + /** + * {@inheritdoc} + */ + public function offsetSet($offset, $value) { + if (isset($offset)) { + $this->value[$offset] = $value; + } + else { + $this->value[] = $value; + } + } + + /** + * {@inheritdoc} + */ + public function offsetUnset($offset) { + unset($this->value[$offset]); + } + + /** + * {@inheritdoc} + */ + public function offsetExists($offset) { + return isset($this->value[$offset]); + } + + /** + * Implements the magic __toString() method. + */ + public function __toString() { + // Filter out any empty values before printing. + $this->value = array_unique(array_filter($this->value)); + return Html::escape(implode(' ', $this->value)); + } + + /** + * {@inheritdoc} + */ + public function getIterator() { + return new \ArrayIterator($this->value); + } + + /** + * Exchange the array for another one. + * + * @see ArrayObject::exchangeArray + * + * @param array $input + * The array input to replace the internal value. + * + * @return array + * The old array value. + */ + public function exchangeArray($input) { + $old = $this->value; + $this->value = $input; + return $old; + } + +}