Version 1
[yaffs-website] / web / core / modules / block_place / block_place.module
diff --git a/web/core/modules/block_place/block_place.module b/web/core/modules/block_place/block_place.module
new file mode 100644 (file)
index 0000000..7fe86a6
--- /dev/null
@@ -0,0 +1,84 @@
+<?php
+
+/**
+ * @file
+ * Controls the placement of blocks from all pages.
+ */
+
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Url;
+
+/**
+ * Implements hook_help().
+ */
+function block_place_help($route_name, RouteMatchInterface $route_match) {
+  switch ($route_name) {
+    case 'help.page.block_place':
+      $output = '<h3>' . t('About') . '</h3>';
+      $output .= '<p>' . t('The Place Blocks module allows you to place blocks from every page. For more information, see the <a href=":blocks-documentation">online documentation for the Place Blocks module</a>.', [':blocks-documentation' => 'https://www.drupal.org/documentation/modules/block_place/']) . '</p>';
+      $output .= '<h3>' . t('Uses') . '</h3>';
+      $output .= '<p>' . t('Block placement is specific to each theme on your site. This module allows you to place blocks in the context of your content pages.') . '</p>';
+      return $output;
+  }
+}
+
+/**
+ * Implements hook_toolbar().
+ */
+function block_place_toolbar() {
+  // Link to the current page with a query parameter.
+  $query = \Drupal::request()->query->all();
+  $wrapper_class = '';
+  $status_class = '';
+  $description = '';
+  if (isset($query['block-place'])) {
+    $status_class = 'active';
+    $wrapper_class = 'is-active';
+    $description = t('Exit Place block mode.');
+    unset($query['block-place']);
+    unset($query['destination']);
+  }
+  else {
+    $status_class = 'inactive';
+    $description = t('Show regions to Place blocks.');
+    $query['block-place'] = '1';
+    // Setting destination is both a work-around for the toolbar "Back to site"
+    // link in escapeAdmin.js and used for the destination after picking a
+    // block.
+    $query['destination'] = Url::fromRoute('<current>')->toString();
+  }
+
+  // Remove on Admin routes.
+  $admin_route = \Drupal::service('router.admin_context')->isAdminRoute();
+  // Remove on Block Demo page.
+  $admin_demo = \Drupal::routeMatch()->getRouteName() === 'block.admin_demo';
+  $access = (\Drupal::currentUser()->hasPermission('administer blocks') && !$admin_route && !$admin_demo);
+
+  // The 'Place Block' tab is a simple link, with no corresponding tray.
+  $items['block_place'] = [
+    '#cache' => [
+      'contexts' => ['user.permissions', 'url.query_args'],
+    ],
+    '#type' => 'toolbar_item',
+    'tab' => [
+      '#access' => $access,
+      '#type' => 'link',
+      '#title' => t('Place block'),
+      '#url' => Url::fromRoute('<current>', [], ['query' => $query]),
+      '#attributes' => [
+        'title' => $description,
+        'class' => ['toolbar-icon', 'toolbar-icon-place-block-' . $status_class],
+      ],
+    ],
+    '#wrapper_attributes' => [
+      'class' => ['toolbar-tab', 'block-place-toolbar-tab', $wrapper_class],
+    ],
+    '#weight' => 100,
+    '#attached' => [
+      'library' => [
+        'block_place/drupal.block_place.icons',
+      ],
+   ],
+  ];
+  return $items;
+}