Version 1
[yaffs-website] / web / core / modules / contextual / src / Element / ContextualLinksPlaceholder.php
diff --git a/web/core/modules/contextual/src/Element/ContextualLinksPlaceholder.php b/web/core/modules/contextual/src/Element/ContextualLinksPlaceholder.php
new file mode 100644 (file)
index 0000000..2fba8db
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+
+namespace Drupal\contextual\Element;
+
+use Drupal\Core\Template\Attribute;
+use Drupal\Core\Render\Element\RenderElement;
+use Drupal\Component\Utility\SafeMarkup;
+
+/**
+ * Provides a contextual_links_placeholder element.
+ *
+ * @RenderElement("contextual_links_placeholder")
+ */
+class ContextualLinksPlaceholder extends RenderElement {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getInfo() {
+    $class = get_class($this);
+    return [
+      '#pre_render' => [
+        [$class, 'preRenderPlaceholder'],
+      ],
+      '#id' => NULL,
+    ];
+  }
+
+  /**
+   * Pre-render callback: Renders a contextual links placeholder into #markup.
+   *
+   * Renders an empty (hence invisible) placeholder div with a data-attribute
+   * that contains an identifier ("contextual id"), which allows the JavaScript
+   * of the drupal.contextual-links library to dynamically render contextual
+   * links.
+   *
+   * @param array $element
+   *   A structured array with #id containing a "contextual id".
+   *
+   * @return array
+   *   The passed-in element with a contextual link placeholder in '#markup'.
+   *
+   * @see _contextual_links_to_id()
+   */
+  public static function preRenderPlaceholder(array $element) {
+    $element['#markup'] = SafeMarkup::format('<div@attributes></div>', ['@attributes' => new Attribute(['data-contextual-id' => $element['#id']])]);
+
+    return $element;
+  }
+
+}