You are here

protected function TransformerRulesManager::defaultRules in Facebook Instant Articles 3.x

Same name and namespace in other branches
  1. 8.2 src/TransformerRulesManager.php \Drupal\fb_instant_articles\TransformerRulesManager::defaultRules()

Return a default set of rules that are sensible for most use cases.

1 call to TransformerRulesManager::defaultRules()
TransformerRulesManager::getRules in src/TransformerRulesManager.php
Get the transformer rules.

File

src/TransformerRulesManager.php, line 64

Class

TransformerRulesManager
Handles loading and altering of Transformer rules.

Namespace

Drupal\fb_instant_articles

Code

protected function defaultRules() {
  return [
    [
      'class' => TextNodeRule::class,
    ],
    [
      'class' => PassThroughRule::class,
      'selector' => 'html',
    ],
    [
      'class' => PassThroughRule::class,
      'selector' => 'head',
    ],
    [
      'class' => PassThroughRule::class,
      'selector' => 'meta',
    ],
    [
      'class' => PassThroughRule::class,
      'selector' => 'body',
    ],
    [
      'class' => PassThroughRule::class,
      'selector' => 'code',
    ],
    [
      'class' => PassThroughRule::class,
      'selector' => 'del',
    ],
    [
      'class' => PassThroughRule::class,
      'selector' => 'span',
    ],
    // The Facebook Transformer doesn't handle nested div's very well, which
    // ends up being a problem when using non-FBIA prefixed fields, b/c fields
    // use a lot of divs. This rule matches div's with a child element,
    // passing them through to continue transforming their children. Note the
    // more specific rule below which will match any div with a non-empty
    // text child node, which will match before this, and start a Paragraph.
    [
      'class' => PassThroughRule::class,
      'selector' => '//div[*]',
    ],
    // Match any div with inline element children and start a paragraph.
    [
      'class' => ParagraphRule::class,
      'selector' => '//div[a|b|strong|i|em]',
    ],
    // Match any div with a child text node that is non-empty of length
    // greater than 0.
    [
      'class' => ParagraphRule::class,
      'selector' => '//div[string-length(normalize-space(text())) > 0]',
    ],
    [
      'class' => ParagraphRule::class,
      'selector' => 'p',
    ],
    [
      'class' => LineBreakRule::class,
      'selector' => 'br',
    ],
    [
      'class' => AnchorRule::class,
      'selector' => 'a',
      'properties' => [
        AnchorRule::PROPERTY_ANCHOR_HREF => [
          'type' => 'string',
          'selector' => 'a',
          'attribute' => 'href',
        ],
        AnchorRule::PROPERTY_ANCHOR_REL => [
          'type' => 'string',
          'selector' => 'a',
          'attribute' => 'rel',
        ],
      ],
    ],
    [
      'class' => BoldRule::class,
      'selector' => 'b',
    ],
    [
      'class' => BoldRule::class,
      'selector' => 'strong',
    ],
    [
      'class' => ItalicRule::class,
      'selector' => 'i',
    ],
    [
      'class' => ItalicRule::class,
      'selector' => 'em',
    ],
    [
      'class' => BlockquoteRule::class,
      'selector' => 'blockquote',
    ],
    [
      'class' => InteractiveRule::class,
      'selector' => 'dl',
      'properties' => [
        InteractiveRule::PROPERTY_IFRAME => [
          'type' => 'element',
          'selector' => 'dl',
        ],
      ],
    ],
    [
      'class' => ImageRule::class,
      'selector' => '//p[img]',
      'properties' => [
        ImageRule::PROPERTY_IMAGE_URL => [
          'type' => 'string',
          'selector' => 'img',
          'attribute' => 'src',
        ],
      ],
    ],
    [
      'class' => ImageRule::class,
      'selector' => 'img',
      'properties' => [
        ImageRule::PROPERTY_IMAGE_URL => [
          'type' => 'string',
          'selector' => 'img',
          'attribute' => 'src',
        ],
      ],
    ],
    [
      'class' => CaptionRule::class,
      'selector' => 'img',
      'properties' => [
        CaptionRule::PROPERTY_DEFAULT => [
          'type' => 'string',
          'selector' => 'img',
          'attribute' => 'alt',
        ],
      ],
    ],
    [
      'class' => ListItemRule::class,
      'selector' => 'li',
    ],
    [
      'class' => ListElementRule::class,
      'selector' => 'ul',
    ],
    [
      'class' => ListElementRule::class,
      'selector' => 'ol',
    ],
    [
      'class' => H1Rule::class,
      'selector' => 'h1',
    ],
    [
      'class' => H1Rule::class,
      'selector' => 'title',
    ],
    [
      'class' => H2Rule::class,
      'selector' => '//h2|//h3|//h4|//h5|//h6',
    ],
    [
      'class' => InteractiveRule::class,
      'selector' => 'iframe',
      'properties' => [
        InteractiveRule::PROPERTY_URL => [
          'type' => 'string',
          'selector' => 'iframe',
          'attribute' => 'src',
        ],
        InteractiveRule::PROPERTY_IFRAME => [
          'type' => 'children',
          'selector' => 'iframe',
        ],
      ],
    ],
    [
      'class' => InteractiveRule::class,
      'selector' => '//p[iframe]',
      'properties' => [
        InteractiveRule::PROPERTY_URL => [
          'type' => 'string',
          'selector' => 'iframe',
          'attribute' => 'src',
        ],
        InteractiveRule::PROPERTY_IFRAME => [
          'type' => 'children',
          'selector' => 'iframe',
        ],
      ],
    ],
    [
      'class' => InteractiveRule::class,
      'selector' => 'div.embed',
      'properties' => [
        InteractiveRule::PROPERTY_IFRAME => [
          'type' => 'children',
          'selector' => 'div.embed',
        ],
      ],
    ],
    [
      'class' => InteractiveRule::class,
      'selector' => 'div.oembed',
      'properties' => [
        InteractiveRule::PROPERTY_IFRAME => [
          'type' => 'children',
          'selector' => 'div.oembed',
        ],
      ],
    ],
    [
      'class' => ImageRule::class,
      'selector' => '//p[a[img]]|//a[img]',
      'properties' => [
        ImageRule::PROPERTY_IMAGE_URL => [
          'type' => 'string',
          'selector' => 'img',
          'attribute' => 'src',
        ],
      ],
    ],
  ];
}