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;
+  }
+
+}