You are here

class LazyFilter in Lazy-load 8.2

Same name and namespace in other branches
  1. 8.3 src/Plugin/Filter/LazyFilter.php \Drupal\lazy\Plugin\Filter\LazyFilter
  2. 8 src/Plugin/Filter/LazyFilter.php \Drupal\lazy\Plugin\Filter\LazyFilter

Provides a filter to lazy-load images.

Plugin annotation


@Filter(
  id = "lazy_filter",
  title = @Translation("Lazy-load images and IFRAMEs via bLazy"),
  description = @Translation("<a href=':url'>Configure options</a>", arguments = {":url" = "/admin/config/content/lazy"}),
  type = Drupal\filter\Plugin\FilterInterface::TYPE_TRANSFORM_REVERSIBLE,
  weight = 20
)

Hierarchy

Expanded class hierarchy of LazyFilter

File

src/Plugin/Filter/LazyFilter.php, line 20

Namespace

Drupal\lazy\Plugin\Filter
View source
class LazyFilter extends FilterBase {

  /**
   * {@inheritdoc}
   */
  public function process($text, $langcode) {
    $config = \Drupal::config('lazy.settings')
      ->get();
    $opt_skipClass = $config['skipClass'];
    $opt_selector = ltrim($config['selector'], '.');
    $opt_tags = $config['alter_tag'];
    $opt_src = $config['src'] !== 'src' ? $config['src'] : 'data-filterlazy-src';
    $opt_placeholderSrc = $config['placeholderSrc'];
    $result = new FilterProcessResult($text);
    $html_dom = Html::load($text);
    $pages = $config['disabled_paths'];
    $path_matches = lazy_disabled_by_path($pages);
    if (!$path_matches) {
      foreach ($opt_tags as $tag => $status) {
        $matches = $html_dom
          ->getElementsByTagName($tag);
        foreach ($matches as $element) {
          $classes = $element
            ->getAttribute('class');
          $classes = $classes !== '' ? explode(' ', $classes) : [];
          $parent_classes = $element->parentNode
            ->getAttribute('class');
          $parent_classes = $parent_classes !== '' ? explode(' ', $parent_classes) : [];
          if (empty($opt_tags[$tag])) {

            // If the `tag` is not enabled remove the bLazy selector class.
            if (($key = array_search($opt_selector, $classes, FALSE)) !== FALSE) {
              unset($classes[$key]);
              $element
                ->setAttribute('class', implode(' ', $classes));
              if (empty($classes)) {
                $element
                  ->removeAttribute('class');
              }
            }
          }
          else {

            // `tag` is enabled. Make sure skipClass is not set before
            // proceeding.
            if (!in_array($opt_skipClass, $classes, FALSE) && !in_array($opt_skipClass, $parent_classes, FALSE)) {
              $classes[] = $opt_selector;
              $classes = array_unique($classes);
              $element
                ->setAttribute('class', implode(' ', $classes));
              $src = $element
                ->getAttribute('src');
              $element
                ->removeAttribute('src');
              $element
                ->setAttribute($opt_src, $src);
              $element
                ->setAttribute('src', $opt_placeholderSrc);
            }
          }
        }
      }
    }
    $result
      ->setProcessedText(Html::serialize($html_dom));
    return $result;
  }

  /**
   * {@inheritdoc}
   */
  public function tips($long = FALSE) {
    $settings = \Drupal::config('lazy.settings');
    $tags = $settings
      ->get('alter_tag');
    $skip = $settings
      ->get('skipClass');
    $options = [
      '%img' => '<img>',
      '%iframe' => '<iframe>',
    ];
    $skip_help = t('If you want certain elements skip lazy-loading, add <code>%class</code> class name.', [
      '%class' => $skip,
    ]);
    if (!empty($tags)) {
      if ($tags['img'] && $tags['iframe']) {
        return t('Lazy-loading is enabled for both %img and %iframe tags.', $options) . ' ' . $skip_help;
      }
      elseif ($tags['img']) {
        return t('Lazy-loading is enabled for %img tags.', $options) . ' ' . $skip_help;
      }
      elseif ($tags['iframe']) {
        return t('Lazy-loading is enabled for %iframe tags.', $options) . ' ' . $skip_help;
      }
    }
    return t('Lazy-loading is not enabled.');
  }

}

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::settingsForm public function Generates a filter's settings form. Overrides FilterInterface::settingsForm 3
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.
LazyFilter::process public function Performs the filter processing. Overrides FilterInterface::process
LazyFilter::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.