navigation_plus-1.0.5/src/ModePluginBase.php

src/ModePluginBase.php
<?php

declare(strict_types=1);

namespace Drupal\navigation_plus;

use Drupal\Component\Plugin\PluginBase;
use Drupal\Core\Extension\ModuleExtensionList;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Base class for mode plugins.
 */
abstract class ModePluginBase extends PluginBase implements ModeInterface, ContainerFactoryPluginInterface {

  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static (
      $container,
      $configuration,
      $plugin_id,
      $plugin_definition,
      $container->get('extension.list.module'),
      $container->get('navigation_plus.ui'),
    );
  }

  public function __construct(
    ContainerInterface $container,
    array $configuration,
    $plugin_id,
    $plugin_definition,
    protected ModuleExtensionList $extensionList,
    protected NavigationPlusUi $navigationPlusUi,
  ) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);

    $this->setConfiguration($configuration);
  }

  /**
   * {@inheritdoc}
   */
  public function buildModeButton(): array {
    $mode_state = $this->navigationPlusUi->getMode();
    $mode_id = $this->getPluginId();
    return [
        '#type' => 'inline_template',
        '#template' => "<style>#toggle-{{mode_id}}-mode::before { mask-image: url({{icon_path}}); }</style><a id='toggle-{{mode_id}}-mode' data-mode='{{mode_id}}' data-drupal-tooltip='{{mode}}' data-drupal-tooltip-class='admin-toolbar__tooltip' class='navigation-plus-mode-button toolbar-button toolbar-button--collapsible{{toolbar_state}}' data-index-text='0' data-icon-text='{{icon_text}}' href='javascript:void(0)'><span class='toolbar-button__label'>{{label}}</span></a>",
        '#context' => [
          'mode_id' => $mode_id,
          'label' => $this->label(),
          'icon_
          text' => $this->label(),
          'toolbar_state' => $mode_state === $mode_id ? ' active' : '',
          'mode' => t('@label', ['@label' => $this->label()]),
          'icon_path' => $this->getIconPath(),
        ],
      ];
  }

  /**
   * {@inheritdoc}
   */
  public function label(): string {
    // Cast the label to a string since it is a TranslatableMarkup object.
    return (string) $this->pluginDefinition['label'];
  }

  /**
   * {@inheritdoc}
   */
  public function addAttachments(array &$attachments): void {}

  /**
   * {@inheritdoc}
   */
  public function applies(): bool {
    return TRUE;
  }

  /**
   * {@inheritdoc}
   */
  public function buildToolbar(array &$variables): array {
    return [];
  }

  /**
   * {@inheritdoc}
   */
  public function buildBars(array &$page_top, ModeInterface $mode): void {
    // Optionally add a top or sidebars.
  }

  /**
   * {@inheritdoc}
   */
  public function getSummary(): string|TranslatableMarkup {
    return '';
  }

  /**
   * {@inheritdoc}
   */
  public function getConfiguration() {
    return $this->configuration;
  }

  /**
   * {@inheritdoc}
   */
  public function setConfiguration(array $configuration) {
    $this->configuration = $configuration + $this->defaultConfiguration();
  }

  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    return [];
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc