editor_advanced_image-8.x-2.x-dev/js/ckeditor5_plugins/editorAdvancedImage/src/ui/EditorAdvancedImageFormView.js

js/ckeditor5_plugins/editorAdvancedImage/src/ui/EditorAdvancedImageFormView.js
/**
 * @module editor_advanced_image/editorAdvancedImage/ui/EditorAdvancedImageFormView
 */

import {
  ButtonView,
  LabeledFieldView,
  LabelView,
  View,
  createLabeledInputText,
  FormHeaderView,
} from "ckeditor5/src/ui";
import { KeystrokeHandler } from "ckeditor5/src/utils";
import { icons } from "ckeditor5/src/core";

/**
 * A class rendering Editor Advanced Image form view.
 *
 * @extends module:ui/view~View
 *
 * @internal
 */
export default class EditorAdvancedImageFormView extends View {
  /**
   * @inheritdoc
   */
  constructor(locale, options) {
    super(locale);

    this.options = options;

    /**
     * A collection of child views in the form.
     *
     * @readonly
     * @type {module:ui/viewcollection~ViewCollection}
     */
    this.children = this.createCollection();

    /**
     * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.
     *
     * @readonly
     * @member {module:utils/keystrokehandler~KeystrokeHandler}
     */
    this.keystrokes = new KeystrokeHandler();

    /**
     * The Class attribute input.
     *
     * @member {module:ui/labeledfield/labeledfieldview~LabeledFieldView} #classAttrInput
     */
    this.classAttrInput = this._createLabeledInputView(
      "CSS classes",
      "List of CSS classes to be added to the image, separated by spaces.",
    );

    /**
     * The Title attribute input .
     *
     * @member {module:ui/labeledfield/labeledfieldview~LabeledFieldView} #titleAttrInput
     */
    this.titleAttrInput = this._createLabeledInputView(
      "Title",
      "Populates the title attribute of the image, usually shown as a small tooltip on hover.",
    );

    /**
     * The ID attribute input .
     *
     * @member {module:ui/labeledfield/labeledfieldview~LabeledFieldView} #idAttrInput
     */
    this.idAttrInput = this._createLabeledInputView(
      "ID",
      "Usually used to linking to this content using a https://en.wikipedia.org/wiki/Fragment_identifier. Must be unique on the page.",
    );

    /**
     * A button used to submit the form.
     *
     * @member {module:ui/button/buttonview~ButtonView} #saveButtonView
     */
    this.saveButtonView = this._createButton(
      Drupal.t("Save"),
      icons.check,
      "ck-button-save",
      "save",
    );

    /**
     * A button used to cancel the form.
     *
     * @member {module:ui/button/buttonview~ButtonView} #cancelButtonView
     */
    this.cancelButtonView = this._createButton(
      Drupal.t("Cancel"),
      icons.cancel,
      "ck-button-cancel",
      "cancel",
    );

    // Form header.
    this.children.add(
      new FormHeaderView(locale, {
        label: this.t("Editor Advanced Image"),
      }),
    );

    // Properties Form Panel (ID, Class, Title) Input(s) row.
    // ------------------------------------------------
    this.children.add(
      this._createRowView([this._createLabelView("Properties")]),
    );

    // Add each inputs only if the attribute is allowed.
    // The "class" input.
    if (this.options.allowedAttributes.includes("class")) {
      this.children.add(this._createRowView([this.classAttrInput]));
    }

    // The "title" input.
    if (this.options.allowedAttributes.includes("title")) {
      this.children.add(this._createRowView([this.titleAttrInput]));
    }

    // The "id" input.
    if (this.options.allowedAttributes.includes("id")) {
      this.children.add(this._createRowView([this.idAttrInput]));
    }

    // Actions (Save & Cancel). row.
    // ------------------------------------------------
    this.children.add(
      this._createRowView(
        [this.saveButtonView, this.cancelButtonView],
        ["ck-table-form__action-row"],
      ),
    );

    this.setTemplate({
      tag: "form",
      attributes: {
        class: ["ck", "ck-form", "ck-editor-advanced-image"],
        // https://github.com/ckeditor/ckeditor5-link/issues/90 & https://github.com/ckeditor/ckeditor5-image/issues/40
        tabindex: "-1",
      },
      children: this.children,
    });
  }

  /**
   * @inheritdoc
   */
  destroy() {
    super.destroy();

    this.keystrokes.destroy();
  }

  /**
   * Creates a label.
   *
   * @returns {module:ui/label/labelview~LabelView}
   *   Labeled view instance.
   *
   * @private
   */
  _createLabelView(text) {
    const label = new LabelView(this.locale);
    label.text = Drupal.t(text);
    return label;
  }

  /**
   * Creates the button view.
   *
   * @param {String} label
   *   The button label
   * @param {String} icon
   *   The button's icon.
   * @param {String} className
   *   The additional button CSS class name.
   * @param {String} [eventName]
   *   The event name that the ButtonView#execute event will be delegated to.
   * @returns {module:ui/button/buttonview~ButtonView}
   *   The button view instance.
   *
   * @private
   */
  _createButton(label, icon, className, eventName) {
    const button = new ButtonView(this.locale);

    button.set({
      label,
      icon,
      withText: true,
    });

    button.extendTemplate({
      attributes: {
        class: className,
      },
    });

    if (eventName) {
      button.delegate("execute").to(this, eventName);
    }

    return button;
  }

  /**
   * Creates an input with a label.
   *
   * @returns {module:ui/labeledfield/labeledfieldview~LabeledFieldView}
   *   Labeled field view instance.
   *
   * @private
   */
  _createLabeledInputView(label, infoText) {
    const labeledInput = new LabeledFieldView(
      this.locale,
      createLabeledInputText,
    );

    labeledInput.label = Drupal.t(label);
    labeledInput.infoText = Drupal.t(infoText);

    return labeledInput;
  }

  /**
   * Creates a complex Row View.
   *
   * @returns {module:ui/view~View}
   *   The Row view.
   *
   * @private
   */
  _createRowView(children, classes) {
    const view = new View();
    view.setTemplate({
      tag: "div",
      attributes: {
        class: ["ck", "ck-form__row", classes !== undefined ? classes : ""],
      },
      children,
    });

    return view;
  }
}

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

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