You are here

trait TextBaseTrait in Webform 8.5

Same name and namespace in other branches
  1. 6.x src/Plugin/WebformElement/TextBaseTrait.php \Drupal\webform\Plugin\WebformElement\TextBaseTrait

Text base trait contains methods that are applicable to any text elements.

Hierarchy

File

src/Plugin/WebformElement/TextBaseTrait.php, line 8

Namespace

Drupal\webform\Plugin\WebformElement
View source
trait TextBaseTrait {

  /**
   * Build counter widget used by text elements and other element.
   *
   * @param string $name
   *   Property name prefix.
   * @param string $title
   *   Property title prefix.
   *
   * @return array
   *   A renderable array containing a counter configuration form.
   *
   * @see \Drupal\webform\Plugin\WebformElement\TextBase::form
   * @see \Drupal\webform\Plugin\WebformElement\OptionsBase::form
   */
  public function buildCounterForm($name = '', $title = NULL) {
    if ($title === NULL) {
      $title = $this
        ->t('Counter');
    }
    $t_args = [
      '@title' => $title,
    ];
    $build[$name . 'counter_type'] = [
      '#type' => 'select',
      '#title' => $title,
      '#description' => $this
        ->t('Limit entered value to a maximum number of characters or words.'),
      '#empty_option' => $this
        ->t('- None -'),
      '#options' => [
        'character' => $this
          ->t('Characters'),
        'word' => $this
          ->t('Words'),
      ],
    ];
    $build['counter_container'] = $this
      ->getFormInlineContainer();
    $build['counter_container']['#states'] = [
      'invisible' => [
        ':input[name="properties[' . $name . 'counter_type]"]' => [
          'value' => '',
        ],
      ],
    ];
    $build['counter_container'][$name . 'counter_minimum'] = [
      '#type' => 'number',
      '#title' => $this
        ->t('@title minimum', $t_args),
      '#min' => 1,
      '#states' => [
        'required' => [
          ':input[name="properties[' . $name . 'counter_type]"]' => [
            '!value' => '',
          ],
          ':input[name="properties[' . $name . 'counter_maximum]"]' => [
            'value' => '',
          ],
        ],
      ],
    ];
    $build['counter_container'][$name . 'counter_maximum'] = [
      '#type' => 'number',
      '#title' => $this
        ->t('@title maximum', $t_args),
      '#min' => 1,
      '#states' => [
        'required' => [
          ':input[name="properties[' . $name . 'counter_type]"]' => [
            '!value' => '',
          ],
          ':input[name="properties[' . $name . 'counter_minimum]"]' => [
            'value' => '',
          ],
        ],
      ],
    ];
    $build['counter_message_container'] = [
      '#type' => 'container',
      '#states' => [
        'invisible' => [
          ':input[name="properties[' . $name . 'counter_type]"]' => [
            'value' => '',
          ],
        ],
      ],
    ];
    $build['counter_message_container'][$name . 'counter_minimum_message'] = [
      '#type' => 'textfield',
      '#title' => $this
        ->t('@title minimum message', $t_args),
      '#description' => $this
        ->t('Defaults to: %value', [
        '%value' => $this
          ->t('%d characters/word(s) entered'),
      ]),
      '#states' => [
        'visible' => [
          ':input[name="properties[' . $name . 'counter_minimum]"]' => [
            '!value' => '',
          ],
          ':input[name="properties[' . $name . 'counter_maximum]"]' => [
            'value' => '',
          ],
        ],
      ],
    ];
    $build['counter_message_container'][$name . 'counter_maximum_message'] = [
      '#type' => 'textfield',
      '#title' => $this
        ->t('@title maximum message', $t_args),
      '#description' => $this
        ->t('Defaults to: %value', [
        '%value' => $this
          ->t('%d characters/word(s) remaining'),
      ]),
      '#states' => [
        'visible' => [
          ':input[name="properties[' . $name . 'counter_maximum]"]' => [
            '!value' => '',
          ],
        ],
      ],
    ];
    if ($this->librariesManager
      ->isExcluded('jquery.textcounter')) {
      $build[$name . 'counter_type']['#access'] = FALSE;
      $build[$name . 'counter_container']['#access'] = FALSE;
      $build[$name . 'counter_message_container']['#access'] = FALSE;
    }
    return $build;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
TextBaseTrait::buildCounterForm public function Build counter widget used by text elements and other element.