You are here

class jQueryUiFilter in jQuery UI filter 8.2

Provides a filter to generate jQuery UI accordion and tabs widgets.

Plugin annotation


@Filter(
  id = "jquery_ui_filter",
  module = "jquery_ui_filter",
  title = @Translation("jQuery UI accordion and tabs widgets"),
  type = Drupal\filter\Plugin\FilterInterface::TYPE_MARKUP_LANGUAGE
)

Hierarchy

Expanded class hierarchy of jQueryUiFilter

1 file declares its use of jQueryUiFilter
jQueryUiFilterSettingsForm.php in src/Form/jQueryUiFilterSettingsForm.php
Contains \Drupal\jquery_ui_filter\Form\jQueryUiFilterSettingsForm.

File

src/Plugin/Filter/jQueryUiFilter.php, line 27
Contains \Drupal\jquery_ui_filter\Plugin\Filter\jQueryUiFilter.

Namespace

Drupal\jquery_ui_filter\Plugin\Filter
View source
class jQueryUiFilter extends FilterBase {

  /**
   * Supported jQuery UI widgets.
   *
   * @var array
   */
  public static $widgets = [
    'accordion' => [
      'title' => 'Accordion',
      'api' => 'https://api.jqueryui.com/accordion/',
      'options' => [
        'headerTag' => 'h3',
        'mediaType' => 'screen',
        'scrollTo' => TRUE,
        'scrollToDuration' => 500,
        'scrollToOffset' => 'auto',
      ],
    ],
    'tabs' => [
      'title' => 'Tabs',
      'api' => 'https://api.jqueryui.com/tabs/',
      'options' => [
        'headerTag' => 'h3',
        'mediaType' => 'screen',
        'scrollTo' => TRUE,
        'scrollToDuration' => 500,
        'scrollToOffset' => 'auto',
      ],
    ],
  ];

  /**
   * {@inheritdoc}
   */
  public function process($text, $langcode) {
    $result = new FilterProcessResult($text);

    // Track if widget has been found so that we can attached the
    // jquery_ui_filter library and settings.
    $has_widget = FALSE;
    foreach (self::$widgets as $name => $widget) {
      if (strpos($text, '[' . $name) === FALSE) {
        continue;
      }
      $has_widget = TRUE;

      // Remove block tags around tokens.
      $text = preg_replace('#<(p|div)[^>]*>\\s*(\\[/?' . $name . '[^]]*\\])\\s*</\\1>#', '\\2', $text);

      // Convert opening [token] to opening <div data-ui-*> tag.
      $text = preg_replace_callback('#\\[' . $name . '([^]]*)?\\]#is', function ($match) use ($name) {

        // Set data-ui-* attributes from role and options.
        $attributes = new Attribute([
          'data-ui-role' => $name,
        ]);
        $options = $this
          ->parseOptions($match[1]);
        foreach ($options as $name => $value) {
          $attributes
            ->setAttribute('data-ui-' . $name, $value);
        }
        return "<div{$attributes}>";
      }, $text);

      // Convert closing [/token] to closing </div> tag.
      $text = str_replace('[/' . $name . ']', '</div>', $text);
    }
    if ($has_widget) {
      $result
        ->setAttachments([
        'library' => [
          'jquery_ui_filter/jquery_ui_filter',
        ],
        'drupalSettings' => [
          'jquery_ui_filter' => \Drupal::config('jquery_ui_filter.settings')
            ->get(),
        ],
      ]);
      $result
        ->addCacheableDependency(\Drupal::config('jquery_ui_filter.settings'));
    }
    return $result
      ->setProcessedText($text);
  }

  /**
   * {@inheritdoc}
   */
  public function tips($long = FALSE) {
    if ($long) {
      $html = '<p>' . $this
        ->t('You can create jQuery UI accordion or tabs by inserting  <code>[accordion]</code> or <code>[tabs]</code> wrappers. Examples:') . '</p>';
      $html .= '<ul>';
      foreach (self::$widgets as $name => $widget) {
        $t_args = [
          '@title' => $widget['title'],
          '@name' => $name,
          '@tag' => \Drupal::config('jquery_ui_filter.settings')
            ->get($name . '.options.headerTag') ?: 'h3',
          '@href' => "http://jqueryui.com/demos/{$name}/",
        ];
        $html .= '<li>' . $this
          ->t('Use <code>[@name]</code> and <code>[/@name]</code> with <code>&lt;@tag&gt;</code> header tags to create a jQuery UI <a href="@href">@title</a> widget.', $t_args) . '</li>';
      }
      $html .= '</ul>';
      return $html;
    }
    else {
      return '<p>' . $this
        ->t('You can create jQuery UI accordion or tabs by inserting <code>[accordion]</code> or <code>[tabs]</code> token wrappers.') . '</p>';
    }
  }

  /**
   * {@inheritdoc}
   */
  public function settingsForm(array $form, FormStateInterface $form_state) {
    $form['settings'] = [
      '#markup' => $this
        ->t('See the <a href="@href">jQuery UI filter</a> settings form to modify the accordion and tabs widget\'s global settings', [
        '@href' => Url::fromRoute('jquery_ui_filter.settings')
          ->toString(),
      ]),
    ];
    return $form;
  }

  /**
   * Parse options from an attributes string.
   *
   * @param string $text
   *   A string of options.
   *
   * @return array
   *   An associative array of parsed name/value pairs.
   */
  public function parseOptions($text) {

    // Decode special characters.
    $text = html_entity_decode($text);

    // Convert decode &nbsp; to expected ASCII code 32 character.
    // See: http://stackoverflow.com/questions/6275380/does-html-entity-decode-replaces-nbsp-also-if-not-how-to-replace-it
    $text = str_replace("", ' ', $text);

    // Convert camel case to hyphen delimited because HTML5 lower cases all
    // data-* attributes.
    // See: Drupal.jQueryUiFilter.getOptions.
    $text = strtolower(preg_replace('/([a-z])([A-Z])/', '\\1-\\2', $text));

    // Create a DomElement so that we can parse its attributes as options.
    $html = Html::load('<div ' . $text . ' />');
    $dom_node = $html
      ->getElementsByTagName('div')
      ->item(0);
    $options = [];
    foreach ($dom_node->attributes as $attribute_name => $attribute_node) {

      // Convert empty attributes (ie nothing inside the quotes) to 'true' string.
      $options[$attribute_name] = $attribute_node->nodeValue ?: 'true';
    }
    return $options;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
FilterBase::$provider public property The name of the provider that owns this filter.
FilterBase::$settings public property An associative array containing the configured settings of this filter.
FilterBase::$status public property A Boolean indicating whether this filter is enabled.
FilterBase::$weight public property The weight of this filter compared to others in a filter collection.
FilterBase::calculateDependencies public function Calculates dependencies for the configured plugin. Overrides DependentPluginInterface::calculateDependencies 1
FilterBase::defaultConfiguration public function Gets default configuration for this plugin. Overrides ConfigurableInterface::defaultConfiguration
FilterBase::getConfiguration public function Gets this plugin's configuration. Overrides ConfigurableInterface::getConfiguration
FilterBase::getDescription public function Returns the administrative description for this filter plugin. Overrides FilterInterface::getDescription
FilterBase::getHTMLRestrictions public function Returns HTML allowed by this filter's configuration. Overrides FilterInterface::getHTMLRestrictions 4
FilterBase::getLabel public function Returns the administrative label for this filter plugin. Overrides FilterInterface::getLabel
FilterBase::getType public function Returns the processing type of this filter plugin. Overrides FilterInterface::getType
FilterBase::prepare public function Prepares the text for processing. Overrides FilterInterface::prepare
FilterBase::setConfiguration public function Sets the configuration for this plugin instance. Overrides ConfigurableInterface::setConfiguration 1
FilterBase::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase::__construct 4
FilterInterface::TYPE_HTML_RESTRICTOR constant HTML tag and attribute restricting filters to prevent XSS attacks.
FilterInterface::TYPE_MARKUP_LANGUAGE constant Non-HTML markup language filters that generate HTML.
FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE constant Irreversible transformation filters.
FilterInterface::TYPE_TRANSFORM_REVERSIBLE constant Reversible transformation filters.
jQueryUiFilter::$widgets public static property Supported jQuery UI widgets.
jQueryUiFilter::parseOptions public function Parse options from an attributes string.
jQueryUiFilter::process public function Performs the filter processing. Overrides FilterInterface::process
jQueryUiFilter::settingsForm public function Generates a filter's settings form. Overrides FilterBase::settingsForm
jQueryUiFilter::tips public function Generates a filter's tip. Overrides FilterBase::tips
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.