Version Description
Download this release
Release Info
| Developer | diegoquinteiro |
| Plugin | |
| Version | 2.2 |
| Comparing to | |
| See all releases | |
Code changes from version 2.1 to 2.2
- class-instant-articles-dom-transform-filter-runner.php +0 -51
- dom-transform-filters/class-instant-articles-dom-transform-filter-address.php +0 -77
- dom-transform-filters/class-instant-articles-dom-transform-filter-blockquote.php +0 -121
- dom-transform-filters/class-instant-articles-dom-transform-filter-emptyelements.php +0 -207
- dom-transform-filters/class-instant-articles-dom-transform-filter-heading.php +0 -78
- dom-transform-filters/class-instant-articles-dom-transform-filter-image.php +0 -151
- dom-transform-filters/class-instant-articles-dom-transform-filter-ordered-list.php +0 -77
- dom-transform-filters/class-instant-articles-dom-transform-filter-table.php +0 -83
- dom-transform-filters/class-instant-articles-dom-transform-filter-unordered-list.php +0 -77
- dom-transform-filters/class-instant-articles-dom-transform-filter-video.php +0 -80
- dom-transform-filters/class-instant-articles-dom-transform-filter.php +0 -111
- facebook-instant-articles.php +1 -1
- readme.txt +2 -2
- settings/template-settings-info.php +2 -2
- template.php +0 -124
- vendor/autoload.php +1 -1
- vendor/composer/autoload_real.php +3 -3
- vendor/composer/installed.json +6 -6
- vendor/facebook/facebook-instant-articles-sdk-php/src/Facebook/InstantArticles/Elements/AnimatedGIF.php +1 -1
- vendor/facebook/facebook-instant-articles-sdk-php/src/Facebook/InstantArticles/Elements/InstantArticle.php +2 -2
- vendor/facebook/facebook-instant-articles-sdk-php/tests/Facebook/InstantArticles/Elements/Validators/TypeTest.php +5 -5
- vendor/facebook/facebook-instant-articles-sdk-php/tests/Facebook/InstantArticles/Transformer/Rules/PullquoteRuleTest.php +102 -0
class-instant-articles-dom-transform-filter-runner.php
DELETED
|
@@ -1,51 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* Class for handling registrating and execution of the DOM transformation filters
|
| 5 |
-
*
|
| 6 |
-
* @since 0.1
|
| 7 |
-
*/
|
| 8 |
-
class Instant_Articles_DOM_Transform_Filter_Runner {
|
| 9 |
-
|
| 10 |
-
/** @var array Our array for keeping the classnames of the DOM transformation filters */
|
| 11 |
-
protected static $_stack = array();
|
| 12 |
-
|
| 13 |
-
/**
|
| 14 |
-
* Register a DOM transformation filter class
|
| 15 |
-
*
|
| 16 |
-
* @since 0.1
|
| 17 |
-
* @param string $className The name of a class that extends Instant_Articles_DOM_Transform_Filter
|
| 18 |
-
* @param int $priority Optional. Used to specify the order in which the filters are executed.
|
| 19 |
-
* Default 10. Lower numbers correspond with earlier execution, and filters
|
| 20 |
-
* with the same priority are executed in the order in which they were added.
|
| 21 |
-
*/
|
| 22 |
-
static function register( $className, $priority = 10 ) {
|
| 23 |
-
if ( ! is_array( self::$_stack[ $priority ] ) ) {
|
| 24 |
-
self::$_stack[ $priority ] = array();
|
| 25 |
-
}
|
| 26 |
-
if ( ! in_array( $className, self::$_stack[ $priority ], true ) && is_subclass_of( $className, 'Instant_Articles_DOM_Transform_Filter' ) ) {
|
| 27 |
-
self::$_stack[ $priority ][] = $className;
|
| 28 |
-
}
|
| 29 |
-
}
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
/**
|
| 33 |
-
* Run all the registered DOM tranformation filters
|
| 34 |
-
*
|
| 35 |
-
* @since 0.1
|
| 36 |
-
* @param DOMDocument $DOMDocument The DOMDocument we are working on
|
| 37 |
-
* @param int $post_id The current post ID
|
| 38 |
-
* @return DOMDocument The modified DOMDocument
|
| 39 |
-
*/
|
| 40 |
-
static function run( $DOMDocument, $post_id ) {
|
| 41 |
-
ksort( self::$_stack );
|
| 42 |
-
foreach ( self::$_stack as $priority => $filters ) {
|
| 43 |
-
foreach ( $filters as $className ) {
|
| 44 |
-
$obj = new $className( $DOMDocument, $post_id );
|
| 45 |
-
$obj->run();
|
| 46 |
-
}
|
| 47 |
-
}
|
| 48 |
-
return $DOMDocument;
|
| 49 |
-
}
|
| 50 |
-
|
| 51 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dom-transform-filters/class-instant-articles-dom-transform-filter-address.php
DELETED
|
@@ -1,77 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* Instant Articles DOM Transformation Filter for Address elements
|
| 5 |
-
*
|
| 6 |
-
* @since 0.1
|
| 7 |
-
*/
|
| 8 |
-
class Instant_Articles_DOM_Transform_Filter_Address extends Instant_Articles_DOM_Transform_Filter {
|
| 9 |
-
|
| 10 |
-
/**
|
| 11 |
-
* Run the transformation
|
| 12 |
-
*
|
| 13 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 14 |
-
*
|
| 15 |
-
* @since 0.1
|
| 16 |
-
* @return DOMDocument
|
| 17 |
-
*/
|
| 18 |
-
public function run() {
|
| 19 |
-
|
| 20 |
-
$DOMNodeList = $this->_DOMDocument->getElementsByTagName( 'address' );
|
| 21 |
-
|
| 22 |
-
// Transform all nodes found
|
| 23 |
-
$this->_transform_elements( $DOMNodeList );
|
| 24 |
-
|
| 25 |
-
return $this->_DOMDocument;
|
| 26 |
-
|
| 27 |
-
}
|
| 28 |
-
|
| 29 |
-
/**
|
| 30 |
-
* Build a DOMDocumentFragment for the element
|
| 31 |
-
*
|
| 32 |
-
* @since 0.1
|
| 33 |
-
* @return DOMDocumentFragment The fragment ready to be inserted into the DOM
|
| 34 |
-
*/
|
| 35 |
-
protected function _build_fragment( $properties ) {
|
| 36 |
-
|
| 37 |
-
$DOMDocumentFragment = $this->_DOMDocument->createDocumentFragment();
|
| 38 |
-
|
| 39 |
-
$element = $this->_DOMDocument->createElement( 'p' );
|
| 40 |
-
while ( $properties->childNodes->length ) {
|
| 41 |
-
$element->appendChild( $properties->childNodes->item( 0 ) );
|
| 42 |
-
}
|
| 43 |
-
|
| 44 |
-
$DOMDocumentFragment->appendChild( $element );
|
| 45 |
-
|
| 46 |
-
return $DOMDocumentFragment;
|
| 47 |
-
}
|
| 48 |
-
|
| 49 |
-
/**
|
| 50 |
-
* Find the element properties
|
| 51 |
-
*
|
| 52 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 53 |
-
*
|
| 54 |
-
* @since 0.1
|
| 55 |
-
* @param $DOMNode $DOMNode The original domnode
|
| 56 |
-
* @return stdClass The element properties used for building the new fragment
|
| 57 |
-
*/
|
| 58 |
-
protected function get_properties( $DOMNode ) {
|
| 59 |
-
|
| 60 |
-
$properties = new stdClass;
|
| 61 |
-
|
| 62 |
-
$properties->childNodes = $DOMNode->childNodes;
|
| 63 |
-
|
| 64 |
-
/**
|
| 65 |
-
* Filter the video element properties
|
| 66 |
-
*
|
| 67 |
-
* @since 0.1
|
| 68 |
-
* @param object $properties The element properties
|
| 69 |
-
* @param int $post_id The post ID of the current post
|
| 70 |
-
*/
|
| 71 |
-
$properties = apply_filters( 'instant_articles_address_properties', $properties, $this->_post_id );
|
| 72 |
-
|
| 73 |
-
return $properties;
|
| 74 |
-
|
| 75 |
-
}
|
| 76 |
-
|
| 77 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dom-transform-filters/class-instant-articles-dom-transform-filter-blockquote.php
DELETED
|
@@ -1,121 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* Instant Articles DOM Transformation Filter for Blockquotes
|
| 5 |
-
*
|
| 6 |
-
* @since 0.1
|
| 7 |
-
*/
|
| 8 |
-
class Instant_Articles_DOM_Transform_Filter_Blockquote extends Instant_Articles_DOM_Transform_Filter {
|
| 9 |
-
|
| 10 |
-
/**
|
| 11 |
-
* Run the transformation
|
| 12 |
-
*
|
| 13 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 14 |
-
*
|
| 15 |
-
* @since 0.1
|
| 16 |
-
* @return DOMDocument
|
| 17 |
-
*/
|
| 18 |
-
public function run() {
|
| 19 |
-
|
| 20 |
-
$DOMNodeList = $this->_DOMDocument->getElementsByTagName( 'blockquote' );
|
| 21 |
-
|
| 22 |
-
// Transform all nodes found
|
| 23 |
-
$this->_transform_elements( $DOMNodeList );
|
| 24 |
-
|
| 25 |
-
return $this->_DOMDocument;
|
| 26 |
-
|
| 27 |
-
}
|
| 28 |
-
|
| 29 |
-
/**
|
| 30 |
-
* Build a DOMDocumentFragment for the element
|
| 31 |
-
*
|
| 32 |
-
* @since 0.1
|
| 33 |
-
* @return DOMDocumentFragment The fragment ready to be inserted into the DOM
|
| 34 |
-
*/
|
| 35 |
-
protected function _build_fragment( $properties ) {
|
| 36 |
-
|
| 37 |
-
$DOMDocumentFragment = $this->_DOMDocument->createDocumentFragment();
|
| 38 |
-
|
| 39 |
-
$quoteContainerType = 'blockquote';
|
| 40 |
-
if ( strlen( $properties->cite ) ) {
|
| 41 |
-
$quoteContainerType = 'aside';
|
| 42 |
-
}
|
| 43 |
-
|
| 44 |
-
$quoteContainer = $this->_DOMDocument->createElement( $quoteContainerType );
|
| 45 |
-
$quoteContainer->appendChild( $this->_DOMDocument->createTextNode( $properties->quote ) );
|
| 46 |
-
|
| 47 |
-
if ( is_a( $properties->childNodes, 'DOMNodeList' ) ) {
|
| 48 |
-
foreach( $properties->childNodes as $pNode ) {
|
| 49 |
-
$newNode = $this->_DOMDocument->createElement( 'p' );
|
| 50 |
-
$newNode->appendChild( $this->_DOMDocument->createTextNode( trim( $pNode->nodeValue ) ) );
|
| 51 |
-
$quoteContainer->appendChild( $newNode );
|
| 52 |
-
}
|
| 53 |
-
}
|
| 54 |
-
|
| 55 |
-
if ( strlen( $properties->cite ) ) {
|
| 56 |
-
$citeNode = $this->_DOMDocument->createElement( 'cite' );
|
| 57 |
-
$citeNode->appendChild( $this->_DOMDocument->createTextNode( $properties->cite ) );
|
| 58 |
-
$quoteContainer->appendChild( $citeNode );
|
| 59 |
-
}
|
| 60 |
-
|
| 61 |
-
$DOMDocumentFragment->appendChild( $quoteContainer );
|
| 62 |
-
|
| 63 |
-
return $DOMDocumentFragment;
|
| 64 |
-
}
|
| 65 |
-
|
| 66 |
-
/**
|
| 67 |
-
* Find the element properties
|
| 68 |
-
*
|
| 69 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 70 |
-
*
|
| 71 |
-
* @since 0.1
|
| 72 |
-
* @param $DOMNode $DOMNode The original domnode
|
| 73 |
-
* @return stdClass The element properties used for building the new fragment
|
| 74 |
-
*/
|
| 75 |
-
protected function get_properties( $DOMNode ) {
|
| 76 |
-
|
| 77 |
-
$properties = new stdClass;
|
| 78 |
-
|
| 79 |
-
$properties->quote = $DOMNode->nodeValue;
|
| 80 |
-
$properties->cite = '';
|
| 81 |
-
$properties->childNodes = null;
|
| 82 |
-
|
| 83 |
-
$cite = $DOMNode->getAttribute( 'cite' );
|
| 84 |
-
if ( strlen( $cite ) ) {
|
| 85 |
-
$properties->cite = $cite;
|
| 86 |
-
}
|
| 87 |
-
|
| 88 |
-
$citeNodeList = $DOMNode->getElementsByTagName( 'cite' );
|
| 89 |
-
if ( $citeNodeList->length ) {
|
| 90 |
-
$citeNode = $citeNodeList->item( 0 );
|
| 91 |
-
if ( strlen( $citeNode->nodeValue ) ) {
|
| 92 |
-
$properties->cite = $citeNode->nodeValue;
|
| 93 |
-
}
|
| 94 |
-
while ( $citeNodeList->length ) {
|
| 95 |
-
$citeNode = $citeNodeList->item( 0 );
|
| 96 |
-
$citeNode->parentNode->removeChild( $citeNode );
|
| 97 |
-
}
|
| 98 |
-
}
|
| 99 |
-
|
| 100 |
-
$pNodeList = $DOMNode->getElementsByTagName( 'p' );
|
| 101 |
-
if ( 1 === $pNodeList->length ) {
|
| 102 |
-
$properties->quote = $pNodeList->item( 0 )->nodeValue;
|
| 103 |
-
} elseif ( $pNodeList->length ) {
|
| 104 |
-
$properties->quote = '';
|
| 105 |
-
$properties->childNodes = $pNodeList;
|
| 106 |
-
}
|
| 107 |
-
|
| 108 |
-
/**
|
| 109 |
-
* Filter the blockquote element properties
|
| 110 |
-
*
|
| 111 |
-
* @since 0.1
|
| 112 |
-
* @param object $properties The element properties
|
| 113 |
-
* @param int $post_id The post ID of the current post
|
| 114 |
-
*/
|
| 115 |
-
$properties = apply_filters( 'instant_articles_blockquote_properties', $properties, $this->_post_id );
|
| 116 |
-
|
| 117 |
-
return $properties;
|
| 118 |
-
|
| 119 |
-
}
|
| 120 |
-
|
| 121 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dom-transform-filters/class-instant-articles-dom-transform-filter-emptyelements.php
DELETED
|
@@ -1,207 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* Instant Articles DOM Transformation Filter for empty elements
|
| 5 |
-
*
|
| 6 |
-
* @since 0.1
|
| 7 |
-
*/
|
| 8 |
-
class Instant_Articles_DOM_Transform_Filter_Emptyelements extends Instant_Articles_DOM_Transform_Filter {
|
| 9 |
-
|
| 10 |
-
// Elements excluded from checking: img, iframe, html, head, body, base, br, hr, link, meta, meter, script, audio, video, map, canvas, col, data, embed, input, keygen, menuitem, object, output, param, progress, source, textarea, track
|
| 11 |
-
protected $_checkTagNames = array(
|
| 12 |
-
'a',
|
| 13 |
-
'abbr',
|
| 14 |
-
'address',
|
| 15 |
-
'article',
|
| 16 |
-
'aside',
|
| 17 |
-
'b',
|
| 18 |
-
'bdi',
|
| 19 |
-
'bdo',
|
| 20 |
-
'blockquote',
|
| 21 |
-
'button',
|
| 22 |
-
'caption',
|
| 23 |
-
'cite',
|
| 24 |
-
'code',
|
| 25 |
-
'colgroup',
|
| 26 |
-
'datalist',
|
| 27 |
-
'dd',
|
| 28 |
-
'del',
|
| 29 |
-
'details',
|
| 30 |
-
'dfn',
|
| 31 |
-
'dialog',
|
| 32 |
-
'div',
|
| 33 |
-
'dl',
|
| 34 |
-
'dt',
|
| 35 |
-
'em',
|
| 36 |
-
'fieldset',
|
| 37 |
-
'figcaption',
|
| 38 |
-
'figure',
|
| 39 |
-
'footer',
|
| 40 |
-
'form',
|
| 41 |
-
'h1',
|
| 42 |
-
'h2',
|
| 43 |
-
'h3',
|
| 44 |
-
'h4',
|
| 45 |
-
'h5',
|
| 46 |
-
'h6',
|
| 47 |
-
'header',
|
| 48 |
-
'hgroup',
|
| 49 |
-
'i',
|
| 50 |
-
'ins',
|
| 51 |
-
'kbd',
|
| 52 |
-
'label',
|
| 53 |
-
'legend',
|
| 54 |
-
'li ',
|
| 55 |
-
'main',
|
| 56 |
-
'map',
|
| 57 |
-
'mark',
|
| 58 |
-
'menu',
|
| 59 |
-
'nav',
|
| 60 |
-
'noscript',
|
| 61 |
-
'ol',
|
| 62 |
-
'optgroup',
|
| 63 |
-
'option',
|
| 64 |
-
'p',
|
| 65 |
-
'pre',
|
| 66 |
-
'q',
|
| 67 |
-
'rb',
|
| 68 |
-
'rp',
|
| 69 |
-
'rt',
|
| 70 |
-
'rtc',
|
| 71 |
-
'ruby',
|
| 72 |
-
's',
|
| 73 |
-
'samp',
|
| 74 |
-
'section',
|
| 75 |
-
'select',
|
| 76 |
-
'small',
|
| 77 |
-
'span',
|
| 78 |
-
'strong',
|
| 79 |
-
'style',
|
| 80 |
-
'sub',
|
| 81 |
-
'summary',
|
| 82 |
-
'sup',
|
| 83 |
-
'table',
|
| 84 |
-
'tbody',
|
| 85 |
-
'td',
|
| 86 |
-
'template',
|
| 87 |
-
'tfoot',
|
| 88 |
-
'th',
|
| 89 |
-
'thead',
|
| 90 |
-
'time',
|
| 91 |
-
'title',
|
| 92 |
-
'tr',
|
| 93 |
-
'u',
|
| 94 |
-
'ul',
|
| 95 |
-
'var',
|
| 96 |
-
'wbr',
|
| 97 |
-
);
|
| 98 |
-
|
| 99 |
-
/**
|
| 100 |
-
* Run the transformation
|
| 101 |
-
*
|
| 102 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 103 |
-
*
|
| 104 |
-
* @since 0.1
|
| 105 |
-
* @return DOMDocument
|
| 106 |
-
*/
|
| 107 |
-
public function run() {
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
$xpathQuery = '//' . implode( ' | //', $this->_checkTagNames );;
|
| 111 |
-
|
| 112 |
-
$xpath = new DOMXpath( $this->_DOMDocument );
|
| 113 |
-
$DOMNodeList = $xpath->query( $xpathQuery );
|
| 114 |
-
|
| 115 |
-
// Filter out empty elements
|
| 116 |
-
$this->_filter_empty_elements( $DOMNodeList );
|
| 117 |
-
|
| 118 |
-
return $this->_DOMDocument;
|
| 119 |
-
|
| 120 |
-
}
|
| 121 |
-
|
| 122 |
-
/**
|
| 123 |
-
* Remove all empty elements
|
| 124 |
-
*
|
| 125 |
-
* @param DOMNodeList $DOMNodeList The list of all elements we are checking
|
| 126 |
-
* @return DOMNodeList The modified list of all remaining elements
|
| 127 |
-
*/
|
| 128 |
-
protected function _filter_empty_elements( DOMNodeList $DOMNodeList ) {
|
| 129 |
-
|
| 130 |
-
$NodeListIndex = 0;
|
| 131 |
-
|
| 132 |
-
// We might reduce $DOMNodeList->length during the loop
|
| 133 |
-
for ( $NodeListIndex = 0; $NodeListIndex < $DOMNodeList->length; ++$NodeListIndex ) {
|
| 134 |
-
|
| 135 |
-
$DOMNode = $DOMNodeList->item( $NodeListIndex );
|
| 136 |
-
|
| 137 |
-
if ( ! isset( $DOMNode->nodeName ) || ! in_array( $DOMNode->nodeName, $this->_checkTagNames, true ) ) {
|
| 138 |
-
continue;
|
| 139 |
-
}
|
| 140 |
-
|
| 141 |
-
// Climb up to make sure we’re not in an Instant Article element (which should have proper handling elsewhere)
|
| 142 |
-
$parentNode = $DOMNode;
|
| 143 |
-
while ( isset( $parentNode->nodeName ) && $parentNode->nodeName != 'body' ) {
|
| 144 |
-
if ( 'figure' == $parentNode->nodeName && false !== strpos( $parentNode->getAttribute( 'class' ), 'op-' ) ) {
|
| 145 |
-
// We found an element that’s likely to be an Instant Article element
|
| 146 |
-
continue 2;
|
| 147 |
-
}
|
| 148 |
-
$parentNode = $parentNode->parentNode;
|
| 149 |
-
}
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
// Check all childnodes first
|
| 153 |
-
if ( is_a( $DOMNode, 'DOMElement' ) && isset( $DOMNode->childNodes ) && is_a( $DOMNode->childNodes, 'DOMNodeList' ) ) {
|
| 154 |
-
$this->_filter_empty_elements( $DOMNode->childNodes );
|
| 155 |
-
}
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
if ( isset( $DOMNode->nodeValue ) && '' == trim( $DOMNode->nodeValue ) ) {
|
| 159 |
-
|
| 160 |
-
if ( ! isset( $DOMNode->childNodes ) || is_null( $DOMNode->childNodes ) || ( is_a( $DOMNode->childNodes, 'DOMNodeList' ) && ! $DOMNode->childNodes->length ) ) {
|
| 161 |
-
|
| 162 |
-
// If the element is an empty node, remove it. But we must have a parentNode to remove a node
|
| 163 |
-
if ( is_a( $DOMNode->parentNode, 'DOMElement' ) ) {
|
| 164 |
-
$DOMNode->parentNode->removeChild( $DOMNode );
|
| 165 |
-
}
|
| 166 |
-
}
|
| 167 |
-
|
| 168 |
-
}
|
| 169 |
-
|
| 170 |
-
}
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
return $DOMNodeList;
|
| 174 |
-
}
|
| 175 |
-
|
| 176 |
-
/**
|
| 177 |
-
* Find the element properties
|
| 178 |
-
*
|
| 179 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 180 |
-
*
|
| 181 |
-
* @since 0.1
|
| 182 |
-
* @param $DOMNode $DOMNode The original domnode
|
| 183 |
-
* @return stdClass The element properties used for building the new fragment
|
| 184 |
-
*/
|
| 185 |
-
protected function get_properties( $DOMNode ) {
|
| 186 |
-
|
| 187 |
-
$properties = new stdClass;
|
| 188 |
-
return $properties;
|
| 189 |
-
|
| 190 |
-
}
|
| 191 |
-
|
| 192 |
-
/**
|
| 193 |
-
* Build a DOMDocumentFragment for the image element
|
| 194 |
-
*
|
| 195 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 196 |
-
*
|
| 197 |
-
* @since 0.1
|
| 198 |
-
* @return DOMDocumentFragment|false The fragment ready to be inserted into the DOM. False if no replacement should happen.
|
| 199 |
-
*/
|
| 200 |
-
protected function _build_fragment( $properties) {
|
| 201 |
-
return false;
|
| 202 |
-
}
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
}
|
| 206 |
-
|
| 207 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dom-transform-filters/class-instant-articles-dom-transform-filter-heading.php
DELETED
|
@@ -1,78 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* Instant Articles DOM Transformation Filter for headings
|
| 5 |
-
*
|
| 6 |
-
* @since 0.1
|
| 7 |
-
*/
|
| 8 |
-
class Instant_Articles_DOM_Transform_Filter_Heading extends Instant_Articles_DOM_Transform_Filter {
|
| 9 |
-
|
| 10 |
-
/**
|
| 11 |
-
* Run the transformation
|
| 12 |
-
*
|
| 13 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 14 |
-
*
|
| 15 |
-
* @since 0.1
|
| 16 |
-
* @return DOMDocument
|
| 17 |
-
*/
|
| 18 |
-
public function run() {
|
| 19 |
-
|
| 20 |
-
$xpath = new DOMXpath( $this->_DOMDocument );
|
| 21 |
-
$DOMNodeList = $xpath->query( "//h3 | //h4 | //h5 | //h6" );
|
| 22 |
-
|
| 23 |
-
// Transform all nodes found
|
| 24 |
-
$this->_transform_elements( $DOMNodeList );
|
| 25 |
-
|
| 26 |
-
return $this->_DOMDocument;
|
| 27 |
-
|
| 28 |
-
}
|
| 29 |
-
|
| 30 |
-
/**
|
| 31 |
-
* Build a DOMDocumentFragment for the element
|
| 32 |
-
*
|
| 33 |
-
* @since 0.1
|
| 34 |
-
* @return DOMDocumentFragment The fragment ready to be inserted into the DOM
|
| 35 |
-
*/
|
| 36 |
-
protected function _build_fragment( $properties ) {
|
| 37 |
-
|
| 38 |
-
$DOMDocumentFragment = $this->_DOMDocument->createDocumentFragment();
|
| 39 |
-
$h = $this->_DOMDocument->createElement( 'h2' );
|
| 40 |
-
|
| 41 |
-
for ( $i = 0; $i < $properties->childNodes->length; ++$i ) {
|
| 42 |
-
$h->appendChild( $properties->childNodes->item( $i ) );
|
| 43 |
-
}
|
| 44 |
-
|
| 45 |
-
$DOMDocumentFragment->appendChild( $h );
|
| 46 |
-
|
| 47 |
-
return $DOMDocumentFragment;
|
| 48 |
-
}
|
| 49 |
-
|
| 50 |
-
/**
|
| 51 |
-
* Find the element properties
|
| 52 |
-
*
|
| 53 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 54 |
-
*
|
| 55 |
-
* @since 0.1
|
| 56 |
-
* @param $DOMNode $DOMNode The original domnode
|
| 57 |
-
* @return stdClass The element properties used for building the new fragment
|
| 58 |
-
*/
|
| 59 |
-
protected function get_properties( $DOMNode ) {
|
| 60 |
-
|
| 61 |
-
$properties = new stdClass;
|
| 62 |
-
|
| 63 |
-
$properties->childNodes = $DOMNode->childNodes;
|
| 64 |
-
|
| 65 |
-
/**
|
| 66 |
-
* Filter the ol element properties
|
| 67 |
-
*
|
| 68 |
-
* @since 0.1
|
| 69 |
-
* @param object $properties The element properties
|
| 70 |
-
* @param int $post_id The post ID of the current post
|
| 71 |
-
*/
|
| 72 |
-
$properties = apply_filters( 'instant_articles_heading_properties', $properties, $this->_post_id );
|
| 73 |
-
|
| 74 |
-
return $properties;
|
| 75 |
-
|
| 76 |
-
}
|
| 77 |
-
|
| 78 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dom-transform-filters/class-instant-articles-dom-transform-filter-image.php
DELETED
|
@@ -1,151 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* Instant Articles DOM Transformation Filter for Images
|
| 5 |
-
*
|
| 6 |
-
* @since 0.1
|
| 7 |
-
*/
|
| 8 |
-
class Instant_Articles_DOM_Transform_Filter_Image extends Instant_Articles_DOM_Transform_Filter {
|
| 9 |
-
|
| 10 |
-
/**
|
| 11 |
-
* Run the transformation
|
| 12 |
-
*
|
| 13 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 14 |
-
*
|
| 15 |
-
* @since 0.1
|
| 16 |
-
* @return DOMDocument
|
| 17 |
-
*/
|
| 18 |
-
public function run() {
|
| 19 |
-
|
| 20 |
-
$DOMNodeList = $this->_DOMDocument->getElementsByTagName( 'img' );
|
| 21 |
-
|
| 22 |
-
// Filter out multiple uses of single images
|
| 23 |
-
$this->_filter_multiple_uses( $DOMNodeList );
|
| 24 |
-
|
| 25 |
-
// Transform all images left
|
| 26 |
-
$this->_transform_elements( $DOMNodeList );
|
| 27 |
-
|
| 28 |
-
return $this->_DOMDocument;
|
| 29 |
-
|
| 30 |
-
}
|
| 31 |
-
|
| 32 |
-
/**
|
| 33 |
-
* The Instant Articles spec says we can only use each image once.
|
| 34 |
-
*
|
| 35 |
-
* @param DOMNodeList $DOMNodeList the list of images in the document
|
| 36 |
-
* @return DOMNodeList The modified list of images in the document
|
| 37 |
-
*/
|
| 38 |
-
protected function _filter_multiple_uses( DOMNodeList $DOMNodeList ) {
|
| 39 |
-
|
| 40 |
-
$used_images = array();
|
| 41 |
-
|
| 42 |
-
$NodeListIndex = 0;
|
| 43 |
-
|
| 44 |
-
// We’ll increase $NodeListIndex and/or reduce $DOMNodeList->length
|
| 45 |
-
while ( $NodeListIndex < $DOMNodeList->length ) {
|
| 46 |
-
|
| 47 |
-
$DOMNode = $DOMNodeList->item( $NodeListIndex );
|
| 48 |
-
|
| 49 |
-
$src = $DOMNode->getAttribute( 'src' );
|
| 50 |
-
|
| 51 |
-
// See how far up the tree we can go
|
| 52 |
-
$removeDOMNode = $DOMNode;
|
| 53 |
-
while ( 'body' != $removeDOMNode->parentNode->nodeName && 1 === $removeDOMNode->parentNode->childNodes->length ) {
|
| 54 |
-
$removeDOMNode = $removeDOMNode->parentNode;
|
| 55 |
-
}
|
| 56 |
-
|
| 57 |
-
// If the image is used already, remove it
|
| 58 |
-
if ( in_array( $src, $used_images, true ) ) {
|
| 59 |
-
// Please note that when we remove the node, $DOMNodeList->length is n-1. Our $NodeListIndex will thus point to the next item in the list.
|
| 60 |
-
$removeDOMNode->parentNode->removeChild( $removeDOMNode );
|
| 61 |
-
}
|
| 62 |
-
|
| 63 |
-
// Add the src to the stack so we can check for multiple uses later
|
| 64 |
-
$used_images[] = $src;
|
| 65 |
-
|
| 66 |
-
++$NodeListIndex;
|
| 67 |
-
|
| 68 |
-
}
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
return $DOMNodeList;
|
| 72 |
-
}
|
| 73 |
-
|
| 74 |
-
/**
|
| 75 |
-
* Build a DOMDocumentFragment for the image element
|
| 76 |
-
*
|
| 77 |
-
* @since 0.1
|
| 78 |
-
* @return DOMDocumentFragment The fragment ready to be inserted into the DOM
|
| 79 |
-
*/
|
| 80 |
-
protected function _build_fragment( $properties) {
|
| 81 |
-
|
| 82 |
-
$DOMDocumentFragment = $this->_DOMDocument->createDocumentFragment();
|
| 83 |
-
$figure = $this->_DOMDocument->createElement( 'figure' );
|
| 84 |
-
$img = $this->_DOMDocument->createElement( 'img' );
|
| 85 |
-
$img->setAttribute( 'src', $properties->img->url );
|
| 86 |
-
|
| 87 |
-
$figure->appendChild( $img );
|
| 88 |
-
$DOMDocumentFragment->appendChild( $figure );
|
| 89 |
-
|
| 90 |
-
return $DOMDocumentFragment;
|
| 91 |
-
}
|
| 92 |
-
|
| 93 |
-
/**
|
| 94 |
-
* Find the element properties
|
| 95 |
-
*
|
| 96 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 97 |
-
*
|
| 98 |
-
* @since 0.1
|
| 99 |
-
* @param $DOMNode $DOMNode The original domnode
|
| 100 |
-
* @return stdClass The element properties used for building the new fragment
|
| 101 |
-
*/
|
| 102 |
-
protected function get_properties( $DOMNode ) {
|
| 103 |
-
|
| 104 |
-
$src = $DOMNode->getAttribute( 'src' );
|
| 105 |
-
if ( function_exists( 'wpcom_vip_attachment_url_to_postid' ) ) {
|
| 106 |
-
$attachment_id = wpcom_vip_attachment_url_to_postid( $src );
|
| 107 |
-
} else {
|
| 108 |
-
$attachment_id = attachment_url_to_postid( $src );
|
| 109 |
-
}
|
| 110 |
-
|
| 111 |
-
$properties = new stdClass;
|
| 112 |
-
$properties->img = new stdClass;
|
| 113 |
-
|
| 114 |
-
/* Try to use WP internals to get an image of the recommended size. Fallback to use the URL from the original img src in the post. */
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
if ( $attachment_id ) {
|
| 118 |
-
// The recommended resolution is 2048x2048 pixels.
|
| 119 |
-
$img_props = wp_get_attachment_image_src( $attachment_id, array( 2048, 2048 ) ); // Returns an array (url, width, height), or false, if no image is available.
|
| 120 |
-
} else {
|
| 121 |
-
$imagesize = getimagesize( $src );
|
| 122 |
-
if ( is_array( $imagesize ) ) {
|
| 123 |
-
$img_props = array( $src, $imagesize[0], $imagesize[1] );
|
| 124 |
-
}
|
| 125 |
-
}
|
| 126 |
-
if ( is_array( $img_props ) ) {
|
| 127 |
-
list( $properties->img->url, $properties->img->width, $properties->img->height ) = $img_props;
|
| 128 |
-
} else {
|
| 129 |
-
$properties->img->url = $src;
|
| 130 |
-
$properties->img->width = '';
|
| 131 |
-
$properties->img->height = '';
|
| 132 |
-
}
|
| 133 |
-
|
| 134 |
-
/**
|
| 135 |
-
* Filter the image properties
|
| 136 |
-
*
|
| 137 |
-
* @since 0.1
|
| 138 |
-
* @param object $img_props The element properties
|
| 139 |
-
* @param int $post_id The post ID of the current post
|
| 140 |
-
* @param int $attachment_id The attachment ID (post ID) to the image (if reverse lookup from url to postid worked)
|
| 141 |
-
*/
|
| 142 |
-
$properties = apply_filters( 'instant_articles_image_properties', $properties, $this->_post_id, $attachment_id );
|
| 143 |
-
|
| 144 |
-
return $properties;
|
| 145 |
-
|
| 146 |
-
}
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
}
|
| 150 |
-
|
| 151 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dom-transform-filters/class-instant-articles-dom-transform-filter-ordered-list.php
DELETED
|
@@ -1,77 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* Instant Articles DOM Transformation Filter for ordered List
|
| 5 |
-
*
|
| 6 |
-
* @since 0.1
|
| 7 |
-
*/
|
| 8 |
-
class Instant_Articles_DOM_Transform_Filter_Ordered_List extends Instant_Articles_DOM_Transform_Filter {
|
| 9 |
-
|
| 10 |
-
/**
|
| 11 |
-
* Run the transformation
|
| 12 |
-
*
|
| 13 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 14 |
-
*
|
| 15 |
-
* @since 0.1
|
| 16 |
-
* @return DOMDocument
|
| 17 |
-
*/
|
| 18 |
-
public function run() {
|
| 19 |
-
|
| 20 |
-
$DOMNodeList = $this->_DOMDocument->getElementsByTagName( 'ol' );
|
| 21 |
-
|
| 22 |
-
// Transform all nodes found
|
| 23 |
-
$this->_transform_elements( $DOMNodeList );
|
| 24 |
-
|
| 25 |
-
return $this->_DOMDocument;
|
| 26 |
-
|
| 27 |
-
}
|
| 28 |
-
|
| 29 |
-
/**
|
| 30 |
-
* Build a DOMDocumentFragment for the element
|
| 31 |
-
*
|
| 32 |
-
* @since 0.1
|
| 33 |
-
* @return DOMDocumentFragment The fragment ready to be inserted into the DOM
|
| 34 |
-
*/
|
| 35 |
-
protected function _build_fragment( $properties ) {
|
| 36 |
-
|
| 37 |
-
$DOMDocumentFragment = $this->_DOMDocument->createDocumentFragment();
|
| 38 |
-
$ol = $this->_DOMDocument->createElement( 'ol' );
|
| 39 |
-
|
| 40 |
-
for ( $i = 0; $i < $properties->childNodes->length; ++$i ) {
|
| 41 |
-
$ol->appendChild( $properties->childNodes->item( $i ) );
|
| 42 |
-
}
|
| 43 |
-
|
| 44 |
-
$DOMDocumentFragment->appendChild( $ol );
|
| 45 |
-
|
| 46 |
-
return $DOMDocumentFragment;
|
| 47 |
-
}
|
| 48 |
-
|
| 49 |
-
/**
|
| 50 |
-
* Find the element properties
|
| 51 |
-
*
|
| 52 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 53 |
-
*
|
| 54 |
-
* @since 0.1
|
| 55 |
-
* @param $DOMNode $DOMNode The original domnode
|
| 56 |
-
* @return stdClass The element properties used for building the new fragment
|
| 57 |
-
*/
|
| 58 |
-
protected function get_properties( $DOMNode ) {
|
| 59 |
-
|
| 60 |
-
$properties = new stdClass;
|
| 61 |
-
|
| 62 |
-
$properties->childNodes = $DOMNode->childNodes;
|
| 63 |
-
|
| 64 |
-
/**
|
| 65 |
-
* Filter the ol element properties
|
| 66 |
-
*
|
| 67 |
-
* @since 0.1
|
| 68 |
-
* @param object $properties The element properties
|
| 69 |
-
* @param int $post_id The post ID of the current post
|
| 70 |
-
*/
|
| 71 |
-
$properties = apply_filters( 'instant_articles_ol_properties', $properties, $this->_post_id );
|
| 72 |
-
|
| 73 |
-
return $properties;
|
| 74 |
-
|
| 75 |
-
}
|
| 76 |
-
|
| 77 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dom-transform-filters/class-instant-articles-dom-transform-filter-table.php
DELETED
|
@@ -1,83 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* Instant Articles DOM Transformation Filter for Tables
|
| 5 |
-
*
|
| 6 |
-
* @since 0.1
|
| 7 |
-
*/
|
| 8 |
-
class Instant_Articles_DOM_Transform_Filter_Table extends Instant_Articles_DOM_Transform_Filter {
|
| 9 |
-
|
| 10 |
-
/**
|
| 11 |
-
* Run the transformation
|
| 12 |
-
*
|
| 13 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 14 |
-
*
|
| 15 |
-
* @since 0.1
|
| 16 |
-
* @return DOMDocument
|
| 17 |
-
*/
|
| 18 |
-
public function run() {
|
| 19 |
-
|
| 20 |
-
$DOMNodeList = $this->_DOMDocument->getElementsByTagName( 'table' );
|
| 21 |
-
|
| 22 |
-
// Transform all nodes found
|
| 23 |
-
$this->_transform_elements( $DOMNodeList );
|
| 24 |
-
|
| 25 |
-
return $this->_DOMDocument;
|
| 26 |
-
|
| 27 |
-
}
|
| 28 |
-
|
| 29 |
-
/**
|
| 30 |
-
* Build a DOMDocumentFragment for the element
|
| 31 |
-
*
|
| 32 |
-
* @since 0.1
|
| 33 |
-
* @return DOMDocumentFragment|false The fragment ready to be inserted into the DOM. False if no replacement should happen.
|
| 34 |
-
*/
|
| 35 |
-
protected function _build_fragment( $properties ) {
|
| 36 |
-
|
| 37 |
-
if ( ! is_a( $properties->table, 'DOMElement' ) ) {
|
| 38 |
-
return false;
|
| 39 |
-
}
|
| 40 |
-
|
| 41 |
-
$DOMDocumentFragment = $this->_DOMDocument->createDocumentFragment();
|
| 42 |
-
|
| 43 |
-
$figure = $this->_DOMDocument->createElement( 'figure' );
|
| 44 |
-
$figure->setAttribute( 'class', 'op-interactive' );
|
| 45 |
-
$DOMDocumentFragment->appendChild( $figure );
|
| 46 |
-
|
| 47 |
-
$iframe = $this->_DOMDocument->createElement( 'iframe' );
|
| 48 |
-
$figure->appendChild( $iframe );
|
| 49 |
-
|
| 50 |
-
$iframe->appendChild( $properties->table );
|
| 51 |
-
|
| 52 |
-
return $DOMDocumentFragment;
|
| 53 |
-
}
|
| 54 |
-
|
| 55 |
-
/**
|
| 56 |
-
* Find the element properties
|
| 57 |
-
*
|
| 58 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 59 |
-
*
|
| 60 |
-
* @since 0.1
|
| 61 |
-
* @param $DOMNode $DOMNode The original domnode
|
| 62 |
-
* @return stdClass The element properties used for building the new fragment
|
| 63 |
-
*/
|
| 64 |
-
protected function get_properties( $DOMNode ) {
|
| 65 |
-
|
| 66 |
-
$properties = new stdClass;
|
| 67 |
-
|
| 68 |
-
$properties->table = clone $DOMNode;
|
| 69 |
-
|
| 70 |
-
/**
|
| 71 |
-
* Filter the blockquote element properties
|
| 72 |
-
*
|
| 73 |
-
* @since 0.1
|
| 74 |
-
* @param object $properties The element properties
|
| 75 |
-
* @param int $post_id The post ID of the current post
|
| 76 |
-
*/
|
| 77 |
-
$properties = apply_filters( 'instant_articles_table_properties', $properties, $this->_post_id );
|
| 78 |
-
|
| 79 |
-
return $properties;
|
| 80 |
-
|
| 81 |
-
}
|
| 82 |
-
|
| 83 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dom-transform-filters/class-instant-articles-dom-transform-filter-unordered-list.php
DELETED
|
@@ -1,77 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* Instant Articles DOM Transformation Filter for Unordered List
|
| 5 |
-
*
|
| 6 |
-
* @since 0.1
|
| 7 |
-
*/
|
| 8 |
-
class Instant_Articles_DOM_Transform_Filter_Unordered_List extends Instant_Articles_DOM_Transform_Filter {
|
| 9 |
-
|
| 10 |
-
/**
|
| 11 |
-
* Run the transformation
|
| 12 |
-
*
|
| 13 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 14 |
-
*
|
| 15 |
-
* @since 0.1
|
| 16 |
-
* @return DOMDocument
|
| 17 |
-
*/
|
| 18 |
-
public function run() {
|
| 19 |
-
|
| 20 |
-
$DOMNodeList = $this->_DOMDocument->getElementsByTagName( 'ul' );
|
| 21 |
-
|
| 22 |
-
// Transform all nodes found
|
| 23 |
-
$this->_transform_elements( $DOMNodeList );
|
| 24 |
-
|
| 25 |
-
return $this->_DOMDocument;
|
| 26 |
-
|
| 27 |
-
}
|
| 28 |
-
|
| 29 |
-
/**
|
| 30 |
-
* Build a DOMDocumentFragment for the element
|
| 31 |
-
*
|
| 32 |
-
* @since 0.1
|
| 33 |
-
* @return DOMDocumentFragment The fragment ready to be inserted into the DOM
|
| 34 |
-
*/
|
| 35 |
-
protected function _build_fragment( $properties ) {
|
| 36 |
-
|
| 37 |
-
$DOMDocumentFragment = $this->_DOMDocument->createDocumentFragment();
|
| 38 |
-
$ul = $this->_DOMDocument->createElement( 'ul' );
|
| 39 |
-
|
| 40 |
-
for ( $i = 0; $i < $properties->childNodes->length; ++$i ) {
|
| 41 |
-
$ul->appendChild( $properties->childNodes->item( $i ) );
|
| 42 |
-
}
|
| 43 |
-
|
| 44 |
-
$DOMDocumentFragment->appendChild( $ul );
|
| 45 |
-
|
| 46 |
-
return $DOMDocumentFragment;
|
| 47 |
-
}
|
| 48 |
-
|
| 49 |
-
/**
|
| 50 |
-
* Find the element properties
|
| 51 |
-
*
|
| 52 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 53 |
-
*
|
| 54 |
-
* @since 0.1
|
| 55 |
-
* @param $DOMNode $DOMNode The original domnode
|
| 56 |
-
* @return stdClass The element properties used for building the new fragment
|
| 57 |
-
*/
|
| 58 |
-
protected function get_properties( $DOMNode ) {
|
| 59 |
-
|
| 60 |
-
$properties = new stdClass;
|
| 61 |
-
|
| 62 |
-
$properties->childNodes = $DOMNode->childNodes;
|
| 63 |
-
|
| 64 |
-
/**
|
| 65 |
-
* Filter the ul element properties
|
| 66 |
-
*
|
| 67 |
-
* @since 0.1
|
| 68 |
-
* @param object $properties The element properties
|
| 69 |
-
* @param int $post_id The post ID of the current post
|
| 70 |
-
*/
|
| 71 |
-
$properties = apply_filters( 'instant_articles_ul_properties', $properties, $this->_post_id );
|
| 72 |
-
|
| 73 |
-
return $properties;
|
| 74 |
-
|
| 75 |
-
}
|
| 76 |
-
|
| 77 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dom-transform-filters/class-instant-articles-dom-transform-filter-video.php
DELETED
|
@@ -1,80 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* Instant Articles DOM Transformation Filter for Videos
|
| 5 |
-
*
|
| 6 |
-
* @since 0.1
|
| 7 |
-
*/
|
| 8 |
-
class Instant_Articles_DOM_Transform_Filter_Video extends Instant_Articles_DOM_Transform_Filter {
|
| 9 |
-
|
| 10 |
-
/**
|
| 11 |
-
* Run the transformation
|
| 12 |
-
*
|
| 13 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 14 |
-
*
|
| 15 |
-
* @since 0.1
|
| 16 |
-
* @return DOMDocument The modified DOMDocument
|
| 17 |
-
*/
|
| 18 |
-
public function run() {
|
| 19 |
-
|
| 20 |
-
$DOMNodeList = $this->_DOMDocument->getElementsByTagName( 'video' );
|
| 21 |
-
|
| 22 |
-
// Transform all nodes found
|
| 23 |
-
$this->_transform_elements( $DOMNodeList );
|
| 24 |
-
|
| 25 |
-
return $this->_DOMDocument;
|
| 26 |
-
|
| 27 |
-
}
|
| 28 |
-
|
| 29 |
-
/**
|
| 30 |
-
* Build a DOMDocumentFragment for the element
|
| 31 |
-
*
|
| 32 |
-
* @since 0.1
|
| 33 |
-
* @return DOMDocumentFragment The fragment ready to be inserted into the DOM
|
| 34 |
-
*/
|
| 35 |
-
protected function _build_fragment( $properties ) {
|
| 36 |
-
|
| 37 |
-
$DOMDocumentFragment = $this->_DOMDocument->createDocumentFragment();
|
| 38 |
-
|
| 39 |
-
$wrapper = $this->_DOMDocument->createElement( 'figure' );
|
| 40 |
-
$video = $this->_DOMDocument->createElement( 'video' );
|
| 41 |
-
$wrapper->appendChild( $video );
|
| 42 |
-
|
| 43 |
-
foreach ( $properties->childNodes as $childNode ) {
|
| 44 |
-
$video->appendChild( $childNode );
|
| 45 |
-
}
|
| 46 |
-
|
| 47 |
-
$DOMDocumentFragment->appendChild( $wrapper );
|
| 48 |
-
|
| 49 |
-
return $DOMDocumentFragment;
|
| 50 |
-
}
|
| 51 |
-
|
| 52 |
-
/**
|
| 53 |
-
* Find the element properties
|
| 54 |
-
*
|
| 55 |
-
* Implements the abstract method from Instant_Articles_DOM_Transform_Filter
|
| 56 |
-
*
|
| 57 |
-
* @since 0.1
|
| 58 |
-
* @param $DOMNode $DOMNode The original domnode
|
| 59 |
-
* @return stdClass The element properties used for building the new fragment
|
| 60 |
-
*/
|
| 61 |
-
protected function get_properties( $DOMNode ) {
|
| 62 |
-
|
| 63 |
-
$properties = new stdClass;
|
| 64 |
-
|
| 65 |
-
$properties->childNodes = $DOMNode->childNodes;
|
| 66 |
-
|
| 67 |
-
/**
|
| 68 |
-
* Filter the video element properties
|
| 69 |
-
*
|
| 70 |
-
* @since 0.1
|
| 71 |
-
* @param object $properties The element properties
|
| 72 |
-
* @param int $post_id The post ID of the current post
|
| 73 |
-
*/
|
| 74 |
-
$properties = apply_filters( 'instant_articles_video_properties', $properties, $this->_post_id );
|
| 75 |
-
|
| 76 |
-
return $properties;
|
| 77 |
-
|
| 78 |
-
}
|
| 79 |
-
|
| 80 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dom-transform-filters/class-instant-articles-dom-transform-filter.php
DELETED
|
@@ -1,111 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* Instant Articles DOM Transformation Filter
|
| 5 |
-
*
|
| 6 |
-
* @since 0.1
|
| 7 |
-
*/
|
| 8 |
-
abstract class Instant_Articles_DOM_Transform_Filter {
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
protected $_DOMDocument;
|
| 12 |
-
protected $_post_id;
|
| 13 |
-
|
| 14 |
-
/**
|
| 15 |
-
* Constructor
|
| 16 |
-
*
|
| 17 |
-
* @since 0.1
|
| 18 |
-
* @param DOMDocument $DOMDocument The DOMDocument object we will be working on.
|
| 19 |
-
* @param int $post_id The WP post ID to the current post
|
| 20 |
-
*/
|
| 21 |
-
function __construct( $DOMDocument, $post_id ) {
|
| 22 |
-
$this->_DOMDocument = $DOMDocument;
|
| 23 |
-
$this->_post_id = $post_id;
|
| 24 |
-
}
|
| 25 |
-
|
| 26 |
-
/**
|
| 27 |
-
* Run the transformation
|
| 28 |
-
*
|
| 29 |
-
* @since 0.1
|
| 30 |
-
* @return DOMDocument THe transformed DOM document.
|
| 31 |
-
*/
|
| 32 |
-
abstract public function run();
|
| 33 |
-
|
| 34 |
-
/**
|
| 35 |
-
* Dispatch each element in the nodelist to the transformer
|
| 36 |
-
*
|
| 37 |
-
* Note that we work directly on the DOMNodeList itself. Objects are passed by ref.
|
| 38 |
-
*
|
| 39 |
-
* @since 0.1
|
| 40 |
-
* @param DOMNodeList $DOMNodeList List of images
|
| 41 |
-
* @return DOMNodeList The DOMNodeList. If you want to chain.
|
| 42 |
-
*/
|
| 43 |
-
protected function _transform_elements( DOMNodeList $DOMNodeList ) {
|
| 44 |
-
|
| 45 |
-
// A foreach won’t work as we are changing the elements
|
| 46 |
-
for ( $i = 0; $i < $DOMNodeList->length; ++$i ) {
|
| 47 |
-
$origLength = $DOMNodeList->length;
|
| 48 |
-
|
| 49 |
-
$this->_transform_element( $DOMNodeList->item( $i ) );
|
| 50 |
-
|
| 51 |
-
if ( $origLength !== $DOMNodeList->length ) {
|
| 52 |
-
// The element is replaced by an element of another type and is no longer in the nodelist
|
| 53 |
-
--$i;
|
| 54 |
-
}
|
| 55 |
-
}
|
| 56 |
-
|
| 57 |
-
return $DOMNodeList;
|
| 58 |
-
}
|
| 59 |
-
|
| 60 |
-
/**
|
| 61 |
-
* Transform an element
|
| 62 |
-
*
|
| 63 |
-
* Note that we work directly on the DOMNode itself. Objects are passed by ref.
|
| 64 |
-
*
|
| 65 |
-
* @since 0.1
|
| 66 |
-
* @param DOMNode $DOMNode The original DOM node
|
| 67 |
-
* @return DOMNode The tranformed DOMNode. If you want to chain.
|
| 68 |
-
*/
|
| 69 |
-
protected function _transform_element( DOMNode $DOMNode ) {
|
| 70 |
-
|
| 71 |
-
// See how far up the tree we can go.
|
| 72 |
-
$replaceNode = $DOMNode;
|
| 73 |
-
while ( 'body' != $replaceNode->parentNode->nodeName && 1 === $replaceNode->parentNode->childNodes->length ) {
|
| 74 |
-
$replaceNode = $replaceNode->parentNode;
|
| 75 |
-
}
|
| 76 |
-
// If we can’t go all the way to the top, we bail.
|
| 77 |
-
if ( 'body' != $replaceNode->parentNode->nodeName ) {
|
| 78 |
-
return $DOMNode;
|
| 79 |
-
}
|
| 80 |
-
|
| 81 |
-
$properties = $this->get_properties( $DOMNode );
|
| 82 |
-
$DOMDocumentFragment = $this->_build_fragment( $properties );
|
| 83 |
-
|
| 84 |
-
if ( is_a( $DOMDocumentFragment, 'DOMDocumentFragment' ) ) {
|
| 85 |
-
$replaceNode->parentNode->replaceChild( $DOMDocumentFragment, $replaceNode );
|
| 86 |
-
}
|
| 87 |
-
|
| 88 |
-
return $DOMNode;
|
| 89 |
-
}
|
| 90 |
-
|
| 91 |
-
/**
|
| 92 |
-
* Find the element properties
|
| 93 |
-
*
|
| 94 |
-
* @since 0.1
|
| 95 |
-
* @param $DOMNode $DOMNode The original domnode
|
| 96 |
-
* @return Object The properties we need to build the new fragment
|
| 97 |
-
*/
|
| 98 |
-
abstract protected function get_properties( $DOMNode );
|
| 99 |
-
|
| 100 |
-
/**
|
| 101 |
-
* Build the new fragment
|
| 102 |
-
*
|
| 103 |
-
* @since 0.1
|
| 104 |
-
* @param Object $properties The properties we need for this element
|
| 105 |
-
* @return DOMDocumentFragment|false The fragment ready to be inserted into the DOM. False if no replacement should happen.
|
| 106 |
-
*/
|
| 107 |
-
abstract protected function _build_fragment( $DOMNode );
|
| 108 |
-
|
| 109 |
-
}
|
| 110 |
-
|
| 111 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
facebook-instant-articles.php
CHANGED
|
@@ -4,7 +4,7 @@
|
|
| 4 |
* Description: Add support for Instant Articles for Facebook to your WordPress site.
|
| 5 |
* Author: Automattic, Dekode, Facebook
|
| 6 |
* Author URI: https://vip.wordpress.com/plugins/instant-articles/
|
| 7 |
-
* Version: 2.
|
| 8 |
* Text Domain: instant-articles
|
| 9 |
* License: GPLv2
|
| 10 |
* License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 4 |
* Description: Add support for Instant Articles for Facebook to your WordPress site.
|
| 5 |
* Author: Automattic, Dekode, Facebook
|
| 6 |
* Author URI: https://vip.wordpress.com/plugins/instant-articles/
|
| 7 |
+
* Version: 2.2
|
| 8 |
* Text Domain: instant-articles
|
| 9 |
* License: GPLv2
|
| 10 |
* License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
readme.txt
CHANGED
|
@@ -3,11 +3,11 @@ Contributors: trrine, olethomas, bjornjohansen, dekode, automattic, facebook
|
|
| 3 |
Tags: instant articles, facebook, mobile
|
| 4 |
Requires at least: 4.3
|
| 5 |
Tested up to: 4.5
|
| 6 |
-
Stable tag: 2.
|
| 7 |
License: GPLv2 or later
|
| 8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 9 |
|
| 10 |
-
Enable
|
| 11 |
|
| 12 |
== Description ==
|
| 13 |
|
| 3 |
Tags: instant articles, facebook, mobile
|
| 4 |
Requires at least: 4.3
|
| 5 |
Tested up to: 4.5
|
| 6 |
+
Stable tag: 2.2
|
| 7 |
License: GPLv2 or later
|
| 8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 9 |
|
| 10 |
+
Enable Instant Articles for Facebook on your WordPress site.
|
| 11 |
|
| 12 |
== Description ==
|
| 13 |
|
settings/template-settings-info.php
CHANGED
|
@@ -16,7 +16,7 @@
|
|
| 16 |
<?php if ( isset( $fb_page_settings['page_id'] ) && ! empty ( $fb_page_settings['page_id'] ) ) : ?>
|
| 17 |
Claim your URL
|
| 18 |
<a
|
| 19 |
-
href="https://www.facebook.com/<?php echo absint( $fb_page_settings['page_id'] ); ?>/settings/?tab=instant_articles" target="_blank">here</a>.
|
| 20 |
<?php endif; ?>
|
| 21 |
<li>Install the Pages Manager app to preview your articles and styles on <a href="http://itunes.apple.com/app/facebook-pages-manager/id514643583?ls=1&mt=8&ign-mscache=1" target="_blank">iOS</a> or <a href="https://play.google.com/store/apps/details?id=com.facebook.pages.app" target="_blank">Android</a>.
|
| 22 |
<li>Create a style template for your articles, using the Style Editor. Be sure to provide the name of the template you want to use in the Plugin Configuration settings below.
|
|
@@ -25,7 +25,7 @@
|
|
| 25 |
<?php if ( isset( $fb_page_settings['page_id'] ) && ! empty ( $fb_page_settings['page_id'] ) ) : ?>
|
| 26 |
<li>
|
| 27 |
<a
|
| 28 |
-
href="https://www.facebook.com/<?php echo absint( $fb_page_settings['page_id'] ); ?>/settings/?tab=instant_articles" target="_blank">Submit your articles for review</a>.
|
| 29 |
</li>
|
| 30 |
<?php else : ?>
|
| 31 |
<li>Submit your articles for review.</li>
|
| 16 |
<?php if ( isset( $fb_page_settings['page_id'] ) && ! empty ( $fb_page_settings['page_id'] ) ) : ?>
|
| 17 |
Claim your URL
|
| 18 |
<a
|
| 19 |
+
href="https://www.facebook.com/<?php echo absint( $fb_page_settings['page_id'] ); ?>/settings/?tab=instant_articles#URL" target="_blank">here</a>.
|
| 20 |
<?php endif; ?>
|
| 21 |
<li>Install the Pages Manager app to preview your articles and styles on <a href="http://itunes.apple.com/app/facebook-pages-manager/id514643583?ls=1&mt=8&ign-mscache=1" target="_blank">iOS</a> or <a href="https://play.google.com/store/apps/details?id=com.facebook.pages.app" target="_blank">Android</a>.
|
| 22 |
<li>Create a style template for your articles, using the Style Editor. Be sure to provide the name of the template you want to use in the Plugin Configuration settings below.
|
| 25 |
<?php if ( isset( $fb_page_settings['page_id'] ) && ! empty ( $fb_page_settings['page_id'] ) ) : ?>
|
| 26 |
<li>
|
| 27 |
<a
|
| 28 |
+
href="https://www.facebook.com/<?php echo absint( $fb_page_settings['page_id'] ); ?>/settings/?tab=instant_articles#Setup-Step2" target="_blank">Submit your articles for review</a>.
|
| 29 |
</li>
|
| 30 |
<?php else : ?>
|
| 31 |
<li>Submit your articles for review.</li>
|
template.php
DELETED
|
@@ -1,124 +0,0 @@
|
|
| 1 |
-
<!doctype html>
|
| 2 |
-
<html lang="<?php echo esc_attr( get_bloginfo( 'language' ) ); ?>" prefix="op: http://media.facebook.com/op#">
|
| 3 |
-
<head>
|
| 4 |
-
<meta charset="<?php echo esc_attr( get_option( 'blog_charset' ) ); ?>">
|
| 5 |
-
<link rel="canonical" href="<?php echo esc_url( $this->get_canonical_url() ); ?>">
|
| 6 |
-
<meta property="op:markup_version" content="v1.0">
|
| 7 |
-
<meta property="fb:article_style" content="<?php echo esc_attr( $this->get_article_style() ); ?>">
|
| 8 |
-
|
| 9 |
-
<?php
|
| 10 |
-
/**
|
| 11 |
-
* Fires in the head element of each article
|
| 12 |
-
*
|
| 13 |
-
* @since 0.1
|
| 14 |
-
*
|
| 15 |
-
* @param Instant_Articles_Post $ia_post The current article object
|
| 16 |
-
*/
|
| 17 |
-
do_action( 'instant_articles_article_head', $this );
|
| 18 |
-
?>
|
| 19 |
-
</head>
|
| 20 |
-
|
| 21 |
-
<body>
|
| 22 |
-
<article>
|
| 23 |
-
<header>
|
| 24 |
-
<!-- The cover -->
|
| 25 |
-
<?php $cover_media = $this->get_cover_media(); ?>
|
| 26 |
-
<?php if ( 'image' === $cover_media->type ) : ?>
|
| 27 |
-
<figure>
|
| 28 |
-
<img src="<?php echo esc_url( $cover_media->src ); ?>" />
|
| 29 |
-
<?php if ( strlen( $cover_media->caption ) ) : ?>
|
| 30 |
-
<figcaption><?php echo esc_html( $cover_media->caption ); ?></figcaption>
|
| 31 |
-
<?php endif; ?>
|
| 32 |
-
</figure>
|
| 33 |
-
<?php elseif ( 'video' === $cover_media->type ) : ?>
|
| 34 |
-
<figure>
|
| 35 |
-
<video>
|
| 36 |
-
<source src="<?php echo esc_url( $cover_media->src ); ?>" type="<?php echo esc_attr( $cover_media->mime_type ); ?>" />
|
| 37 |
-
</video>
|
| 38 |
-
</figure>
|
| 39 |
-
<?php elseif ( 'slideshow' === $cover_media->type ) : ?>
|
| 40 |
-
<figure class="op-slideshow">
|
| 41 |
-
<?php foreach ( $cover_media->items as $item ) : ?>
|
| 42 |
-
<figure>
|
| 43 |
-
<img src="<?php echo esc_url( $item->src ); ?>" />
|
| 44 |
-
</figure>
|
| 45 |
-
<?php endforeach; ?>
|
| 46 |
-
</figure>
|
| 47 |
-
<?php endif; ?>
|
| 48 |
-
|
| 49 |
-
<h1><?php echo esc_html( $this->get_the_title() ); ?></h1>
|
| 50 |
-
|
| 51 |
-
<?php if ( $this->has_subtitle() ) : ?>
|
| 52 |
-
<h2><?php echo esc_html( $this->get_the_subtitle() ); ?></h2>
|
| 53 |
-
<?php endif; ?>
|
| 54 |
-
|
| 55 |
-
<!-- The date and time when your article was originally published -->
|
| 56 |
-
<time class="op-published" datetime="<?php echo esc_attr( $this->get_the_pubdate_iso() ); ?>"><?php echo esc_html( $this->get_the_pubdate() ); ?></time>
|
| 57 |
-
|
| 58 |
-
<!-- The date and time when your article was last updated -->
|
| 59 |
-
<time class="op-modified" datetime="<?php echo esc_attr( $this->get_the_moddate_iso() ); ?>"><?php echo esc_html( $this->get_the_moddate() ); ?></time>
|
| 60 |
-
|
| 61 |
-
<!-- The authors of your article -->
|
| 62 |
-
<?php $authors = $this->get_the_authors(); ?>
|
| 63 |
-
<?php if ( is_array( $authors ) && count( $authors ) ) : ?>
|
| 64 |
-
<?php foreach ( $authors as $author ) : ?>
|
| 65 |
-
<address>
|
| 66 |
-
<?php
|
| 67 |
-
$attributes = '';
|
| 68 |
-
if ( strlen( $author->user_url ) ) {
|
| 69 |
-
$attributes = ' href="' . esc_url( $author->user_url ) . '"';
|
| 70 |
-
|
| 71 |
-
if ( isset( $author->role_contribution ) && strlen( $author->role_contribution ) ) {
|
| 72 |
-
$attributes .= ' title="' . esc_attr( $author->role_contribution ) . '"';
|
| 73 |
-
}
|
| 74 |
-
|
| 75 |
-
if ( isset( $author->user_url_rel ) && strlen( $author->user_url_rel ) ) {
|
| 76 |
-
$attributes .= ' rel="' . esc_attr( $author->user_url_rel ) . '"';
|
| 77 |
-
}
|
| 78 |
-
}
|
| 79 |
-
?>
|
| 80 |
-
<a<?php echo $attributes; ?>>
|
| 81 |
-
<?php echo esc_html( $author->display_name ); ?>
|
| 82 |
-
</a>
|
| 83 |
-
<?php if ( strlen( $author->bio ) ) : ?>
|
| 84 |
-
<?php echo esc_html( $author->bio ); ?>
|
| 85 |
-
<?php endif; ?>
|
| 86 |
-
</address>
|
| 87 |
-
<?php endforeach; ?>
|
| 88 |
-
<?php endif; ?>
|
| 89 |
-
|
| 90 |
-
<?php if ( $kicker_text = $this->get_the_kicker() ) : ?>
|
| 91 |
-
<!-- A kicker for your article -->
|
| 92 |
-
<h3 class="op-kicker"><?php echo esc_html( $kicker_text); ?></h3>
|
| 93 |
-
<?php endif; ?>
|
| 94 |
-
|
| 95 |
-
<?php
|
| 96 |
-
/**
|
| 97 |
-
* Fires in the header element of each article
|
| 98 |
-
*
|
| 99 |
-
* @since 0.1
|
| 100 |
-
*
|
| 101 |
-
* @param Instant_Articles_Post $ia_post The current article object
|
| 102 |
-
*/
|
| 103 |
-
do_action( 'instant_articles_article_header', $this );
|
| 104 |
-
?>
|
| 105 |
-
|
| 106 |
-
</header>
|
| 107 |
-
|
| 108 |
-
<!-- Article body goes here -->
|
| 109 |
-
<?php echo $this->get_the_content(); ?>
|
| 110 |
-
|
| 111 |
-
<footer>
|
| 112 |
-
<?php if ( $footer_credits = $this->get_the_footer_credits( ) ) : ?>
|
| 113 |
-
<!-- Credits for your article -->
|
| 114 |
-
<aside><?php echo esc_html( $footer_credits ); ?></aside>
|
| 115 |
-
<?php endif; ?>
|
| 116 |
-
|
| 117 |
-
<?php if ( $footer_copyright = $this->get_the_footer_copyright( ) ) : ?>
|
| 118 |
-
<!-- Copyright details for your article -->
|
| 119 |
-
<small><?php echo esc_html ( $footer_copyright ); ?></small>
|
| 120 |
-
<?php endif; ?>
|
| 121 |
-
</footer>
|
| 122 |
-
</article>
|
| 123 |
-
</body>
|
| 124 |
-
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/autoload.php
CHANGED
|
@@ -4,4 +4,4 @@
|
|
| 4 |
|
| 5 |
require_once __DIR__ . '/composer' . '/autoload_real.php';
|
| 6 |
|
| 7 |
-
return
|
| 4 |
|
| 5 |
require_once __DIR__ . '/composer' . '/autoload_real.php';
|
| 6 |
|
| 7 |
+
return ComposerAutoloaderInit7e80597e4b240da0b6349cef6380896e::getLoader();
|
vendor/composer/autoload_real.php
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
|
| 3 |
// autoload_real.php @generated by Composer
|
| 4 |
|
| 5 |
-
class
|
| 6 |
{
|
| 7 |
private static $loader;
|
| 8 |
|
|
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit3e565f617e78b30946ba0a1809aa93f8
|
|
| 19 |
return self::$loader;
|
| 20 |
}
|
| 21 |
|
| 22 |
-
spl_autoload_register(array('
|
| 23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
| 24 |
-
spl_autoload_unregister(array('
|
| 25 |
|
| 26 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
| 27 |
foreach ($map as $namespace => $path) {
|
| 2 |
|
| 3 |
// autoload_real.php @generated by Composer
|
| 4 |
|
| 5 |
+
class ComposerAutoloaderInit7e80597e4b240da0b6349cef6380896e
|
| 6 |
{
|
| 7 |
private static $loader;
|
| 8 |
|
| 19 |
return self::$loader;
|
| 20 |
}
|
| 21 |
|
| 22 |
+
spl_autoload_register(array('ComposerAutoloaderInit7e80597e4b240da0b6349cef6380896e', 'loadClassLoader'), true, true);
|
| 23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
| 24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit7e80597e4b240da0b6349cef6380896e', 'loadClassLoader'));
|
| 25 |
|
| 26 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
| 27 |
foreach ($map as $namespace => $path) {
|
vendor/composer/installed.json
CHANGED
|
@@ -145,17 +145,17 @@
|
|
| 145 |
},
|
| 146 |
{
|
| 147 |
"name": "facebook/facebook-instant-articles-sdk-php",
|
| 148 |
-
"version": "v1.0.
|
| 149 |
-
"version_normalized": "1.0.
|
| 150 |
"source": {
|
| 151 |
"type": "git",
|
| 152 |
"url": "https://github.com/facebook/facebook-instant-articles-sdk-php.git",
|
| 153 |
-
"reference": "
|
| 154 |
},
|
| 155 |
"dist": {
|
| 156 |
"type": "zip",
|
| 157 |
-
"url": "https://api.github.com/repos/facebook/facebook-instant-articles-sdk-php/zipball/
|
| 158 |
-
"reference": "
|
| 159 |
"shasum": ""
|
| 160 |
},
|
| 161 |
"require": {
|
|
@@ -167,7 +167,7 @@
|
|
| 167 |
"require-dev": {
|
| 168 |
"phpunit/phpunit": "^4.8"
|
| 169 |
},
|
| 170 |
-
"time": "2016-04-
|
| 171 |
"type": "library",
|
| 172 |
"installation-source": "dist",
|
| 173 |
"autoload": {
|
| 145 |
},
|
| 146 |
{
|
| 147 |
"name": "facebook/facebook-instant-articles-sdk-php",
|
| 148 |
+
"version": "v1.0.1",
|
| 149 |
+
"version_normalized": "1.0.1.0",
|
| 150 |
"source": {
|
| 151 |
"type": "git",
|
| 152 |
"url": "https://github.com/facebook/facebook-instant-articles-sdk-php.git",
|
| 153 |
+
"reference": "1d5414a1f5070c0fde586a7465ef6a6d70749598"
|
| 154 |
},
|
| 155 |
"dist": {
|
| 156 |
"type": "zip",
|
| 157 |
+
"url": "https://api.github.com/repos/facebook/facebook-instant-articles-sdk-php/zipball/1d5414a1f5070c0fde586a7465ef6a6d70749598",
|
| 158 |
+
"reference": "1d5414a1f5070c0fde586a7465ef6a6d70749598",
|
| 159 |
"shasum": ""
|
| 160 |
},
|
| 161 |
"require": {
|
| 167 |
"require-dev": {
|
| 168 |
"phpunit/phpunit": "^4.8"
|
| 169 |
},
|
| 170 |
+
"time": "2016-04-12 00:21:58",
|
| 171 |
"type": "library",
|
| 172 |
"installation-source": "dist",
|
| 173 |
"autoload": {
|
vendor/facebook/facebook-instant-articles-sdk-php/src/Facebook/InstantArticles/Elements/AnimatedGIF.php
CHANGED
|
@@ -9,7 +9,7 @@
|
|
| 9 |
namespace Facebook\InstantArticles\Elements;
|
| 10 |
|
| 11 |
/**
|
| 12 |
-
* An
|
| 13 |
* Also consider to use one of the other media types for an article:
|
| 14 |
* <ul>
|
| 15 |
* <li>@see Audio</li>
|
| 9 |
namespace Facebook\InstantArticles\Elements;
|
| 10 |
|
| 11 |
/**
|
| 12 |
+
* An AnimatedGIF
|
| 13 |
* Also consider to use one of the other media types for an article:
|
| 14 |
* <ul>
|
| 15 |
* <li>@see Audio</li>
|
vendor/facebook/facebook-instant-articles-sdk-php/src/Facebook/InstantArticles/Elements/InstantArticle.php
CHANGED
|
@@ -33,7 +33,7 @@ use Facebook\InstantArticles\Validators\Type;
|
|
| 33 |
*/
|
| 34 |
class InstantArticle extends Element
|
| 35 |
{
|
| 36 |
-
const CURRENT_VERSION = '1.0.
|
| 37 |
|
| 38 |
/**
|
| 39 |
* The meta properties that are used on <head>
|
|
@@ -193,7 +193,7 @@ class InstantArticle extends Element
|
|
| 193 |
array(
|
| 194 |
Ad::getClassName(),
|
| 195 |
Analytics::getClassName(),
|
| 196 |
-
|
| 197 |
Audio::getClassName(),
|
| 198 |
Blockquote::getClassName(),
|
| 199 |
Image::getClassName(),
|
| 33 |
*/
|
| 34 |
class InstantArticle extends Element
|
| 35 |
{
|
| 36 |
+
const CURRENT_VERSION = '1.0.1';
|
| 37 |
|
| 38 |
/**
|
| 39 |
* The meta properties that are used on <head>
|
| 193 |
array(
|
| 194 |
Ad::getClassName(),
|
| 195 |
Analytics::getClassName(),
|
| 196 |
+
AnimatedGIF::getClassName(),
|
| 197 |
Audio::getClassName(),
|
| 198 |
Blockquote::getClassName(),
|
| 199 |
Image::getClassName(),
|
vendor/facebook/facebook-instant-articles-sdk-php/tests/Facebook/InstantArticles/Elements/Validators/TypeTest.php
CHANGED
|
@@ -12,7 +12,7 @@ use Facebook\InstantArticles\Elements\Caption;
|
|
| 12 |
use Facebook\InstantArticles\Elements\Image;
|
| 13 |
use Facebook\InstantArticles\Elements\Video;
|
| 14 |
use Facebook\InstantArticles\Elements\InstantArticle;
|
| 15 |
-
use Facebook\InstantArticles\Elements\
|
| 16 |
use Facebook\InstantArticles\Elements\Element;
|
| 17 |
use Facebook\InstantArticles\Validators\Type;
|
| 18 |
|
|
@@ -136,7 +136,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
|
|
| 136 |
public function testIsInInheritance()
|
| 137 |
{
|
| 138 |
$result = Type::is(
|
| 139 |
-
|
| 140 |
array(
|
| 141 |
Image::getClassName()
|
| 142 |
)
|
|
@@ -147,7 +147,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
|
|
| 147 |
public function testIsNotInInheritance()
|
| 148 |
{
|
| 149 |
$result = Type::is(
|
| 150 |
-
|
| 151 |
array(
|
| 152 |
Video::getClassName()
|
| 153 |
)
|
|
@@ -159,7 +159,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
|
|
| 159 |
{
|
| 160 |
try {
|
| 161 |
$result = Type::enforce(
|
| 162 |
-
|
| 163 |
array(
|
| 164 |
Video::getClassName()
|
| 165 |
)
|
|
@@ -223,7 +223,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
|
|
| 223 |
public function testIsArrayInInheritance()
|
| 224 |
{
|
| 225 |
$result = Type::isArrayOf(
|
| 226 |
-
array(Image::create(),
|
| 227 |
Image::getClassName()
|
| 228 |
);
|
| 229 |
$this->assertTrue($result);
|
| 12 |
use Facebook\InstantArticles\Elements\Image;
|
| 13 |
use Facebook\InstantArticles\Elements\Video;
|
| 14 |
use Facebook\InstantArticles\Elements\InstantArticle;
|
| 15 |
+
use Facebook\InstantArticles\Elements\AnimatedGIF;
|
| 16 |
use Facebook\InstantArticles\Elements\Element;
|
| 17 |
use Facebook\InstantArticles\Validators\Type;
|
| 18 |
|
| 136 |
public function testIsInInheritance()
|
| 137 |
{
|
| 138 |
$result = Type::is(
|
| 139 |
+
AnimatedGIF::create(),
|
| 140 |
array(
|
| 141 |
Image::getClassName()
|
| 142 |
)
|
| 147 |
public function testIsNotInInheritance()
|
| 148 |
{
|
| 149 |
$result = Type::is(
|
| 150 |
+
AnimatedGIF::create(),
|
| 151 |
array(
|
| 152 |
Video::getClassName()
|
| 153 |
)
|
| 159 |
{
|
| 160 |
try {
|
| 161 |
$result = Type::enforce(
|
| 162 |
+
AnimatedGIF::create(),
|
| 163 |
array(
|
| 164 |
Video::getClassName()
|
| 165 |
)
|
| 223 |
public function testIsArrayInInheritance()
|
| 224 |
{
|
| 225 |
$result = Type::isArrayOf(
|
| 226 |
+
array(Image::create(), AnimatedGIF::create()),
|
| 227 |
Image::getClassName()
|
| 228 |
);
|
| 229 |
$this->assertTrue($result);
|
vendor/facebook/facebook-instant-articles-sdk-php/tests/Facebook/InstantArticles/Transformer/Rules/PullquoteRuleTest.php
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Copyright (c) 2016-present, Facebook, Inc.
|
| 4 |
+
* All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* This source code is licensed under the license found in the
|
| 7 |
+
* LICENSE file in the root directory of this source tree.
|
| 8 |
+
*/
|
| 9 |
+
namespace Facebook\InstantArticles\Transformer\Rules;
|
| 10 |
+
|
| 11 |
+
use Facebook\InstantArticles\Transformer\Rules\PullquoteRule;
|
| 12 |
+
use Facebook\InstantArticles\Transformer\Rules\PullquoteCiteRule;
|
| 13 |
+
use Facebook\InstantArticles\Transformer\Transformer;
|
| 14 |
+
use Facebook\InstantArticles\Elements\InstantArticle;
|
| 15 |
+
|
| 16 |
+
class PullquoteRuleTest extends \PHPUnit_Framework_TestCase
|
| 17 |
+
{
|
| 18 |
+
public function setUp()
|
| 19 |
+
{
|
| 20 |
+
\Logger::configure(
|
| 21 |
+
array(
|
| 22 |
+
'rootLogger' => array(
|
| 23 |
+
'appenders' => array('facebook-instantarticles-transformer')
|
| 24 |
+
),
|
| 25 |
+
'appenders' => array(
|
| 26 |
+
'facebook-instantarticles-transformer' => array(
|
| 27 |
+
'class' => 'LoggerAppenderConsole',
|
| 28 |
+
'threshold' => 'INFO',
|
| 29 |
+
'layout' => array(
|
| 30 |
+
'class' => 'LoggerLayoutSimple'
|
| 31 |
+
)
|
| 32 |
+
)
|
| 33 |
+
)
|
| 34 |
+
)
|
| 35 |
+
);
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
public function testTransformPullquote()
|
| 39 |
+
{
|
| 40 |
+
$transformer_rules =
|
| 41 |
+
'{
|
| 42 |
+
"rules" :
|
| 43 |
+
[
|
| 44 |
+
{
|
| 45 |
+
"class": "TextNodeRule"
|
| 46 |
+
},
|
| 47 |
+
{
|
| 48 |
+
"class": "ItalicRule",
|
| 49 |
+
"selector": "em"
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"class": "ParagraphRule",
|
| 53 |
+
"selector": "p"
|
| 54 |
+
},
|
| 55 |
+
{
|
| 56 |
+
"class": "PassThroughRule",
|
| 57 |
+
"selector": "div.field-quote > p"
|
| 58 |
+
},
|
| 59 |
+
{
|
| 60 |
+
"class": "PassThroughRule",
|
| 61 |
+
"selector" : "div.field-quote"
|
| 62 |
+
},
|
| 63 |
+
{
|
| 64 |
+
"class" : "PullquoteRule",
|
| 65 |
+
"selector" : "blockquote.pull-quote"
|
| 66 |
+
},
|
| 67 |
+
{
|
| 68 |
+
"class" : "PullquoteCiteRule",
|
| 69 |
+
"selector" : "div.field-quote-author"
|
| 70 |
+
}
|
| 71 |
+
]
|
| 72 |
+
}';
|
| 73 |
+
|
| 74 |
+
$html =
|
| 75 |
+
'<blockquote class="pull-quote">'.
|
| 76 |
+
'<div class="field-quote">'.
|
| 77 |
+
'<p>Here is a fancy pull quote for the <em>world</em> to see it all.</p>'.
|
| 78 |
+
'</div>'.
|
| 79 |
+
'<div class="field-quote-author">Matthew Oliveira</div>'.
|
| 80 |
+
'</blockquote>';
|
| 81 |
+
|
| 82 |
+
$expected =
|
| 83 |
+
"<aside>Here is a fancy pull quote for the <i>world</i> to see it all.".
|
| 84 |
+
"<cite>Matthew Oliveira</cite>".
|
| 85 |
+
"</aside>\n";
|
| 86 |
+
|
| 87 |
+
$instant_article = InstantArticle::create();
|
| 88 |
+
$transformer = new Transformer();
|
| 89 |
+
$transformer->loadRules($transformer_rules);
|
| 90 |
+
|
| 91 |
+
$document = new \DOMDocument();
|
| 92 |
+
$document->loadXML($html);
|
| 93 |
+
|
| 94 |
+
$transformer->transform($instant_article, $document);
|
| 95 |
+
|
| 96 |
+
$pullquote = $instant_article->getChildren()[0];
|
| 97 |
+
$result = $pullquote->render('', true)."\n";
|
| 98 |
+
|
| 99 |
+
$this->assertEquals($expected, $result);
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
}
|
