codemirror_field-8.x-1.0-rc1/src/Plugin/Field/FieldFormatter/CodemirrorFieldDefaultFormatter.php

src/Plugin/Field/FieldFormatter/CodemirrorFieldDefaultFormatter.php
<?php

namespace Drupal\codemirror_field\Plugin\Field\FieldFormatter;

use Drupal\Component\Utility\Html;
use Drupal\codemirror_field\CodemirrorField;
use Drupal\Core\Field\FormatterBase;
use Drupal\Core\Field\FieldItemListInterface;

/**
 * Plugin implementation of the 'codemirror_field_formatter_default' formatter.
 *
 * @FieldFormatter(
 *   id = "codemirror_field_formatter_default",
 *   label = @Translation("Default"),
 *   field_types = {
 *     "codemirror"
 *   }
 * )
 */
class CodemirrorFieldDefaultFormatter extends FormatterBase {

  /**
   * {@inheritdoc}
   */
  public function viewElements(FieldItemListInterface $items, $langcode) {
    $elements = [];

    $themes_path = CodemirrorField::libPath('/theme');

    foreach ($items as $delta => $item) {

      $field_settings = $item->getFieldDefinition()->getSettings();
      // The display must be always read-only.
      $field_settings['readOnly'] = 'nocursor';

      $mode = $field_settings['mode'];
      $instance_key = 'codemirror-instance-' .
        Html::cleanCssIdentifier($mode)
        . '-' . $delta;

      $element = [
        '#type' => 'textarea',
        '#prefix' => '<div class="codemirror-instance ' . $instance_key . '">',
        '#suffix' => '</div>',
        '#value' => $item->value,
        '#attached' => [
          'drupalSettings' => [
            'codemirror' => [
              $instance_key => [
                'config' => $field_settings,
              ],
              'themes_path' => $themes_path,
            ],
          ],
        ],
      ];

      $dependencies = 'codemirror_field/drupal.codemirror.' . $field_settings['mode'];

      $element['#attached']['library'][] = 'codemirror_field/drupal.codemirror';
      $element['#attached']['library'][] = 'codemirror_field/drupal.codemirror_field';
      $element['#attached']['library'][] = $dependencies;
      $elements[$delta] = $element;
    }

    return $elements;
  }

}

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

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