Instant Articles for WP - Version 4.0.6

Version Description

Download this release

Release Info

Developer diegoquinteiro
Plugin Icon 128x128 Instant Articles for WP
Version 4.0.6
Comparing to
See all releases

Code changes from version 4.0.5 to 4.0.6

CHANGELOG.md CHANGED
@@ -1,6 +1,16 @@
1
  ## Change Log
2
 
3
- ### 4.0.5 (2017/08/24 19:07 +00:00)
 
 
 
 
 
 
 
 
 
 
4
  - [#750](https://github.com/automattic/facebook-instant-articles-wp/pull/750) Fix query limit and escaping on AMP generation (@diegoquinteiro)
5
 
6
  ### 4.0.4 (2017/07/27 20:14 +00:00)
1
  ## Change Log
2
 
3
+ ### 4.0.6 (2017/12/04 00:26 +00:00)
4
+ - [#814](https://github.com/automattic/facebook-instant-articles-wp/pull/814) Add default rule for Twitter blockquote (@pestevez)
5
+ - [#806](https://github.com/automattic/facebook-instant-articles-wp/pull/806) Clarify requirement of site connection in README (@pestevez)
6
+ - [#798](https://github.com/automattic/facebook-instant-articles-wp/pull/798) remove article rescrape code (@timjacobi)
7
+ - [#777](https://github.com/automattic/facebook-instant-articles-wp/pull/777) update instructions (@timjacobi)
8
+ - [#778](https://github.com/automattic/facebook-instant-articles-wp/pull/778) Add label definitions (@timjacobi)
9
+ - [#792](https://github.com/automattic/facebook-instant-articles-wp/pull/792) Change meta box and readme so user doesn't think IAs are actually submitted to Facebook (@timjacobi)
10
+ - [#797](https://github.com/automattic/facebook-instant-articles-wp/pull/797) Display error message if meta box can't be loaded (@timjacobi)
11
+ - [#775](https://github.com/automattic/facebook-instant-articles-wp/pull/775) Adds caching to instant_articles_embed_oembed_html (@emrikol)
12
+
13
+ ### 4.0.5 (2017/08/24 19:08 +00:00)
14
  - [#750](https://github.com/automattic/facebook-instant-articles-wp/pull/750) Fix query limit and escaping on AMP generation (@diegoquinteiro)
15
 
16
  ### 4.0.4 (2017/07/27 20:14 +00:00)
LABELS.md ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## Labels
2
+ ### bug
3
+ A general bug in the plugin that needs to be fixed
4
+ ### compat: wordpress.com
5
+ An incompatibility between the plugin and wordpress.com
6
+ ### compat: 3rd party
7
+ An incompatibility between the plugin and another 3rd party plugin
8
+ ### documentation
9
+ Incomplete or misleading information in the official documentation
10
+ ### enhancement/feature request
11
+ Something that is currently not supported but requested by one or more users
12
+ ### help wanted
13
+ An issue for which the contributors look for help from the community
14
+ ### missing rule
15
+ A transformation rule that should be added
16
+ ### more info needed
17
+ The author of the issue has provided insufficient information
18
+ ### transformation
19
+ An bug in the transformation which is not related to a missing rule
README.md CHANGED
@@ -39,6 +39,12 @@ Facebook requires a minimum number of articles in your feed before they will rev
39
 
40
  More likely than not, this is because there is markup in the body of your post that is not mapped to a recognized Instant Article component. On the “Edit Post” screen for your post, look for additional information about the *transformed* output shown within the **Facebook Instant Articles** module located at the bottom of the screen.
41
 
 
 
 
 
 
 
42
  **In the Instant Articles module for my post, what does the “This post was transformed into an Instant Article with some warnings” message mean?**
43
 
44
  When transforming your post into an Instant Article, this plugin will show warnings when it encounters content which might not be valid when published to Facebook. When you see this message, it is recommended to resolve each warning individually.
@@ -57,7 +63,7 @@ You can propose popular transformer rules to be included in the plugin by [sugge
57
 
58
  **How do I post articles to Instant Articles after plugin is installed?**
59
 
60
- You can re-publish existing articles (simply edit + save) or post new articles in order to submit them to Instant Articles. After you have 10 articles added, you will be able to submit them for review.
61
 
62
  **How do I change the feed slug/URL if I'm using the RSS integration?**
63
 
39
 
40
  More likely than not, this is because there is markup in the body of your post that is not mapped to a recognized Instant Article component. On the “Edit Post” screen for your post, look for additional information about the *transformed* output shown within the **Facebook Instant Articles** module located at the bottom of the screen.
41
 
42
+ **Why doesn't my post appear in the list of Instant Articles in the publisher tools?**
43
+ Your posts are imported to your library when they are shared on Facebook for the first time.
44
+
45
+ Alternatively, you can trigger a manual scrape by pasting your URL on our [Share Debugger](http://developers.facebook.com/tools/debug)
46
+
47
+ Only Instant Articles with URLs in [domains you have claimed](https://developers.facebook.com/docs/instant-articles/guides/publishertools#connect) will show up in the Publishing Tools section.
48
  **In the Instant Articles module for my post, what does the “This post was transformed into an Instant Article with some warnings” message mean?**
49
 
50
  When transforming your post into an Instant Article, this plugin will show warnings when it encounters content which might not be valid when published to Facebook. When you see this message, it is recommended to resolve each warning individually.
63
 
64
  **How do I post articles to Instant Articles after plugin is installed?**
65
 
66
+ In order to import your posts to your Instant Articles library on Facebook you need to [Connect Your Site](https://developers.facebook.com/docs/instant-articles/guides/publishertools#connect) first. Then either share your posts on your page or use the [Sharing Debugger](https://developers.intern.facebook.com/tools/debug/sharing/) to scrape them. After you have 10 articles imported, you will be able to submit them for review.
67
 
68
  **How do I change the feed slug/URL if I'm using the RSS integration?**
69
 
embeds.php CHANGED
@@ -24,31 +24,48 @@ remove_all_filters( 'embed_oembed_html' );
24
  */
25
  function instant_articles_embed_oembed_html( $html, $url, $attr, $post_id ) {
26
 
27
- if ( ! class_exists( 'WP_oEmbed' ) ) {
28
- include_once( ABSPATH . WPINC . '/class-oembed.php' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  }
30
 
31
- // Instead of checking all possible URL variants, use the provider list from WP_oEmbed.
32
- $wp_oembed = new WP_oEmbed();
33
- $provider_url = $wp_oembed->get_provider( $url );
34
-
35
- $provider_name = false;
36
- if ( false !== strpos( $provider_url, 'instagram.com' ) ) {
37
- $provider_name = 'instagram';
38
- } elseif ( false !== strpos( $provider_url, 'twitter.com' ) ) {
39
- $provider_name = 'twitter';
40
- } elseif ( false !== strpos( $provider_url, 'youtube.com' ) ) {
41
- $provider_name = 'youtube';
42
- } elseif( false !== strpos( $provider_url, 'vimeo.com' ) ) {
43
- $provider_name = 'vimeo';
44
- } elseif( false !== strpos( $provider_url, 'vine.co' ) ) {
45
- $provider_name = 'vine';
46
- } elseif( false !== strpos( $provider_url, 'facebook.com' ) ) {
47
- $provider_name = 'facebook';
48
  }
49
 
50
- $provider_name = apply_filters( 'instant_articles_social_embed_type', $provider_name, $url );
51
-
52
  if ( $provider_name ) {
53
  $html = instant_articles_embed_get_html( $provider_name, $html, $url, $attr, $post_id );
54
  }
24
  */
25
  function instant_articles_embed_oembed_html( $html, $url, $attr, $post_id ) {
26
 
27
+ $cache_key = md5( $url . ':instant_articles_oembed_provider' );
28
+ $provider_name = get_transient( $cache_key );
29
+
30
+ if ( false === $provider_name ) {
31
+ if ( ! class_exists( 'WP_oEmbed' ) ) {
32
+ include_once( ABSPATH . WPINC . '/class-oembed.php' );
33
+ }
34
+
35
+ // Instead of checking all possible URL variants, use the provider list from WP_oEmbed.
36
+ $wp_oembed = new WP_oEmbed();
37
+ $provider_url = $wp_oembed->get_provider( $url );
38
+
39
+ $provider_name = false;
40
+ if ( false !== strpos( $provider_url, 'instagram.com' ) ) {
41
+ $provider_name = 'instagram';
42
+ } elseif ( false !== strpos( $provider_url, 'twitter.com' ) ) {
43
+ $provider_name = 'twitter';
44
+ } elseif ( false !== strpos( $provider_url, 'youtube.com' ) ) {
45
+ $provider_name = 'youtube';
46
+ } elseif( false !== strpos( $provider_url, 'vimeo.com' ) ) {
47
+ $provider_name = 'vimeo';
48
+ } elseif( false !== strpos( $provider_url, 'vine.co' ) ) {
49
+ $provider_name = 'vine';
50
+ } elseif( false !== strpos( $provider_url, 'facebook.com' ) ) {
51
+ $provider_name = 'facebook';
52
+ }
53
+
54
+ $provider_name = apply_filters( 'instant_articles_social_embed_type', $provider_name, $url );
55
+
56
+ if ( false === $provider_name ) {
57
+ // We cannot properly cache `false`, so let's use a different value we can check for.
58
+ set_transient( $cache_key, 'no_provider', HOUR_IN_SECONDS * 12 );
59
+ } else {
60
+ set_transient( $cache_key, $provider_name );
61
+ }
62
  }
63
 
64
+ // Change cacheable `'no_provider'` to `false`.
65
+ if ( 'no_provider' === $provider_name ) {
66
+ $provider_name = false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  }
68
 
 
 
69
  if ( $provider_name ) {
70
  $html = instant_articles_embed_get_html( $provider_name, $html, $url, $attr, $post_id );
71
  }
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: 4.0.5
8
  * Text Domain: instant-articles
9
  * License: GPLv2
10
  * License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -68,7 +68,7 @@ if ( version_compare( PHP_VERSION, '5.4', '<' ) ) {
68
 
69
  defined( 'ABSPATH' ) || die( 'Shame on you' );
70
 
71
- define( 'IA_PLUGIN_VERSION', '4.0.5' );
72
  define( 'IA_PLUGIN_PATH_FULL', __FILE__ );
73
  define( 'IA_PLUGIN_PATH', plugin_basename( __FILE__ ) );
74
  define( 'IA_PLUGIN_FILE_BASENAME', pathinfo( __FILE__, PATHINFO_FILENAME ) );
@@ -419,44 +419,6 @@ if ( version_compare( PHP_VERSION, '5.4', '<' ) ) {
419
 
420
  Instant_Articles_Wizard::init();
421
 
422
- function rescrape_article( $post_id, $post ) {
423
- $adapter = new Instant_Articles_Post( $post );
424
- $old_slugs = get_post_meta( $post_id, '_wp_old_slug' );
425
- if ( $adapter->should_submit_post() ) {
426
- try {
427
- $client = Facebook\HttpClients\HttpClientsFactory::createHttpClient( null );
428
- $url_encoded = urlencode($adapter->get_canonical_url());
429
- $client->send(
430
- "https://graph.facebook.com/?id=$url_encoded&scrape=true",
431
- 'POST',
432
- '',
433
- array(),
434
- 60
435
- );
436
- foreach ( $old_slugs as $slug ) {
437
- $clone_post = clone $post;
438
- $clone_post->post_name = $slug;
439
- $clone_adapter = new Instant_Articles_Post( $clone_post );
440
-
441
- $url_encoded = urlencode($clone_adapter->get_canonical_url());
442
- $client->send(
443
- "https://graph.facebook.com/?id=$url_encoded&scrape=true",
444
- 'POST',
445
- '',
446
- array(),
447
- 60
448
- );
449
- }
450
- } catch ( Exception $e ) {
451
- Logger::getLogger( 'instantarticles-wp-plugin' )->error(
452
- 'Unable to submit article.',
453
- $e->getTraceAsString()
454
- );
455
- }
456
- }
457
- }
458
- add_action( 'save_post', 'rescrape_article', 999, 2 );
459
-
460
  function invalidate_post_transformation_info_cache( $post_id, $post ) {
461
  // These post metas are caches on the calculations made to decide if
462
  // a post is in good state to be converted to an Instant Article or not
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: 4.0.6
8
  * Text Domain: instant-articles
9
  * License: GPLv2
10
  * License URI: http://www.gnu.org/licenses/gpl-2.0.html
68
 
69
  defined( 'ABSPATH' ) || die( 'Shame on you' );
70
 
71
+ define( 'IA_PLUGIN_VERSION', '4.0.6' );
72
  define( 'IA_PLUGIN_PATH_FULL', __FILE__ );
73
  define( 'IA_PLUGIN_PATH', plugin_basename( __FILE__ ) );
74
  define( 'IA_PLUGIN_FILE_BASENAME', pathinfo( __FILE__, PATHINFO_FILENAME ) );
419
 
420
  Instant_Articles_Wizard::init();
421
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
422
  function invalidate_post_transformation_info_cache( $post_id, $post ) {
423
  // These post metas are caches on the calculations made to decide if
424
  // a post is in good state to be converted to an Instant Article or not
meta-box/class-instant-articles-meta-box.php CHANGED
@@ -10,7 +10,6 @@
10
  use Facebook\InstantArticles\Client\Client;
11
  use Facebook\InstantArticles\Client\InstantArticleStatus;
12
  use Facebook\InstantArticles\Client\ServerMessage;
13
- use Facebook\Exceptions\FacebookResponseException;
14
 
15
  /**
16
  * Class responsible for drawing the meta box on the post edit page
@@ -91,26 +90,31 @@ class Instant_Articles_Meta_Box {
91
  $ajax_nonce = wp_create_nonce( "instant-articles-force-submit-" . $post_id );
92
  $post = get_post( $post_id );
93
  $adapter = new Instant_Articles_Post( $post );
94
- $article = $adapter->to_instant_article();
95
- $canonical_url = $adapter->get_canonical_url();
96
- $published = ( 'publish' === $post->post_status );
97
- $dev_mode = false;
98
- $force_submit = get_post_meta( $post_id, IA_PLUGIN_FORCE_SUBMIT_KEY, true );
99
- $instant_articles_should_submit_post_filter = apply_filters( 'instant_articles_should_submit_post', true, $adapter );
100
-
101
- Instant_Articles_Wizard::menu_items();
102
- $settings_page_href = Instant_Articles_Wizard::get_url();
103
-
104
- $publishing_settings = Instant_Articles_Option_Publishing::get_option_decoded();
105
- $publish_with_warnings = isset( $publishing_settings[ 'publish_with_warnings' ] ) ? $publishing_settings[ 'publish_with_warnings' ] : false;
106
- $fb_page_settings = Instant_Articles_Option_FB_Page::get_option_decoded();
107
- $publishing_settings = Instant_Articles_Option_Publishing::get_option_decoded();
108
-
109
- $dev_mode = isset( $publishing_settings['dev_mode'] )
110
- ? ( $publishing_settings['dev_mode'] ? true : false )
111
- : false;
112
-
113
- include( dirname( __FILE__ ) . '/meta-box-template.php' );
 
 
 
 
 
114
 
115
  die();
116
  }
10
  use Facebook\InstantArticles\Client\Client;
11
  use Facebook\InstantArticles\Client\InstantArticleStatus;
12
  use Facebook\InstantArticles\Client\ServerMessage;
 
13
 
14
  /**
15
  * Class responsible for drawing the meta box on the post edit page
90
  $ajax_nonce = wp_create_nonce( "instant-articles-force-submit-" . $post_id );
91
  $post = get_post( $post_id );
92
  $adapter = new Instant_Articles_Post( $post );
93
+
94
+ try {
95
+ $article = $adapter->to_instant_article();
96
+ $canonical_url = $adapter->get_canonical_url();
97
+ $published = ( 'publish' === $post->post_status );
98
+ $dev_mode = false;
99
+ $force_submit = get_post_meta( $post_id, IA_PLUGIN_FORCE_SUBMIT_KEY, true );
100
+ $instant_articles_should_submit_post_filter = apply_filters( 'instant_articles_should_submit_post', true, $adapter );
101
+
102
+ Instant_Articles_Wizard::menu_items();
103
+ $settings_page_href = Instant_Articles_Wizard::get_url();
104
+
105
+ $publishing_settings = Instant_Articles_Option_Publishing::get_option_decoded();
106
+ $publish_with_warnings = isset( $publishing_settings[ 'publish_with_warnings' ] ) ? $publishing_settings[ 'publish_with_warnings' ] : false;
107
+ $fb_page_settings = Instant_Articles_Option_FB_Page::get_option_decoded();
108
+ $publishing_settings = Instant_Articles_Option_Publishing::get_option_decoded();
109
+
110
+ $dev_mode = isset( $publishing_settings['dev_mode'] )
111
+ ? ( $publishing_settings['dev_mode'] ? true : false )
112
+ : false;
113
+
114
+ include( dirname( __FILE__ ) . '/meta-box-template.php' );
115
+ } catch (Exception $e) {
116
+ include( dirname( __FILE__ ) . '/meta-box-error.php' );
117
+ }
118
 
119
  die();
120
  }
meta-box/meta-box-error.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Facebook Instant Articles for WP.
4
+ * This source code is licensed under the license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @package default
8
+ */
9
+ ?>
10
+ <p>An unkown error occurred while transforming the article. Please verify your rules configuration is correct.</p>
meta-box/meta-box-template.php CHANGED
@@ -22,7 +22,7 @@ use Facebook\InstantArticles\Client\ServerMessage;
22
  <p>
23
  <b>
24
  <span class="dashicons dashicons-yes"></span>
25
- This post will be available as an Instant Article.
26
  </b>
27
  </p>
28
  <hr>
@@ -30,7 +30,7 @@ use Facebook\InstantArticles\Client\ServerMessage;
30
  <p>
31
  <b>
32
  <span class="dashicons dashicons-no-alt"></span>
33
- This post will not be submitted to Instant Articles due to a rule created in your site.
34
  </b>
35
  </p>
36
  <hr>
@@ -38,7 +38,7 @@ use Facebook\InstantArticles\Client\ServerMessage;
38
  <p>
39
  <b>
40
  <span class="dashicons dashicons-media-document"></span>
41
- This post will be submitted to Instant Articles once it is published.
42
  </b>
43
  </p>
44
  <hr>
@@ -46,7 +46,7 @@ use Facebook\InstantArticles\Client\ServerMessage;
46
  <p>
47
  <b>
48
  <span class="dashicons dashicons-no-alt"></span>
49
- This post will not be submitted to Instant Articles because it is missing a title.
50
  </b>
51
  </p>
52
  <hr>
@@ -54,7 +54,7 @@ use Facebook\InstantArticles\Client\ServerMessage;
54
  <p>
55
  <b>
56
  <span class="dashicons dashicons-no-alt"></span>
57
- This post will not be submitted to Instant Articles because it is missing content.
58
  </b>
59
  </p>
60
  <hr>
@@ -71,7 +71,7 @@ use Facebook\InstantArticles\Client\ServerMessage;
71
  <p>
72
  <b>
73
  <span class="dashicons dashicons-no-alt"></span>
74
- This post will not be submitted to Instant Articles because the transformation raised some warnings.
75
  </b>
76
  </p>
77
  <hr>
22
  <p>
23
  <b>
24
  <span class="dashicons dashicons-yes"></span>
25
+ This post will be available as Instant Article once it is shared on Facebook.
26
  </b>
27
  </p>
28
  <hr>
30
  <p>
31
  <b>
32
  <span class="dashicons dashicons-no-alt"></span>
33
+ This post will not be available as Instant Article due to a rule created in your site.
34
  </b>
35
  </p>
36
  <hr>
38
  <p>
39
  <b>
40
  <span class="dashicons dashicons-media-document"></span>
41
+ This post will be available as Instant Article once it is published and shared on Facebook.
42
  </b>
43
  </p>
44
  <hr>
46
  <p>
47
  <b>
48
  <span class="dashicons dashicons-no-alt"></span>
49
+ This post will not be available as Instant Article because it is missing a title.
50
  </b>
51
  </p>
52
  <hr>
54
  <p>
55
  <b>
56
  <span class="dashicons dashicons-no-alt"></span>
57
+ This post will not be available as Instant Article because it is missing content.
58
  </b>
59
  </p>
60
  <hr>
71
  <p>
72
  <b>
73
  <span class="dashicons dashicons-no-alt"></span>
74
+ This post will not be available as Instant Article because the transformation raised some warnings.
75
  </b>
76
  </p>
77
  <hr>
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: trrine, olethomas, bjornjohansen, dekode, automattic, facebook
3
  Tags: instant articles, facebook, mobile
4
  Requires at least: 4.3
5
  Tested up to: 4.8
6
- Stable tag: 4.0.5
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -86,7 +86,17 @@ Usually simply visiting the permalinks settings page in the WordPress dashboard
86
  == Changelog ==
87
  ## Change Log
88
 
89
- ### 4.0.5 (2017/08/24 19:07 +00:00)
 
 
 
 
 
 
 
 
 
 
90
  - [#750](https://github.com/automattic/facebook-instant-articles-wp/pull/750) Fix query limit and escaping on AMP generation (@diegoquinteiro)
91
 
92
  ### 4.0.4 (2017/07/27 20:14 +00:00)
3
  Tags: instant articles, facebook, mobile
4
  Requires at least: 4.3
5
  Tested up to: 4.8
6
+ Stable tag: 4.0.6
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
86
  == Changelog ==
87
  ## Change Log
88
 
89
+ ### 4.0.6 (2017/12/04 00:26 +00:00)
90
+ - [#814](https://github.com/automattic/facebook-instant-articles-wp/pull/814) Add default rule for Twitter blockquote (@pestevez)
91
+ - [#806](https://github.com/automattic/facebook-instant-articles-wp/pull/806) Clarify requirement of site connection in README (@pestevez)
92
+ - [#798](https://github.com/automattic/facebook-instant-articles-wp/pull/798) remove article rescrape code (@timjacobi)
93
+ - [#777](https://github.com/automattic/facebook-instant-articles-wp/pull/777) update instructions (@timjacobi)
94
+ - [#778](https://github.com/automattic/facebook-instant-articles-wp/pull/778) Add label definitions (@timjacobi)
95
+ - [#792](https://github.com/automattic/facebook-instant-articles-wp/pull/792) Change meta box and readme so user doesn't think IAs are actually submitted to Facebook (@timjacobi)
96
+ - [#797](https://github.com/automattic/facebook-instant-articles-wp/pull/797) Display error message if meta box can't be loaded (@timjacobi)
97
+ - [#775](https://github.com/automattic/facebook-instant-articles-wp/pull/775) Adds caching to instant_articles_embed_oembed_html (@emrikol)
98
+
99
+ ### 4.0.5 (2017/08/24 19:08 +00:00)
100
  - [#750](https://github.com/automattic/facebook-instant-articles-wp/pull/750) Fix query limit and escaping on AMP generation (@diegoquinteiro)
101
 
102
  ### 4.0.4 (2017/07/27 20:14 +00:00)
rules-configuration.json CHANGED
@@ -143,6 +143,23 @@
143
  ]
144
  }
145
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
  }, {
147
  "class": "IgnoreRule",
148
  "selector" : "script"
143
  ]
144
  }
145
  }
146
+ }, {
147
+ "class": "InteractiveRule",
148
+ "selector" : "blockquote.twitter-tweet",
149
+ "properties" : {
150
+ "interactive.iframe" : {
151
+ "type" : "multiple",
152
+ "children": [
153
+ {
154
+ "type": "element",
155
+ "selector": "blockquote"
156
+ }, {
157
+ "type": "next-sibling-element-of",
158
+ "selector": "blockquote"
159
+ }
160
+ ]
161
+ }
162
+ }
163
  }, {
164
  "class": "IgnoreRule",
165
  "selector" : "script"
vendor/composer/installed.json CHANGED
@@ -31,86 +31,6 @@
31
  "php"
32
  ]
33
  },
34
- {
35
- "name": "squizlabs/php_codesniffer",
36
- "version": "2.9.1",
37
- "version_normalized": "2.9.1.0",
38
- "source": {
39
- "type": "git",
40
- "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
41
- "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62"
42
- },
43
- "dist": {
44
- "type": "zip",
45
- "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62",
46
- "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62",
47
- "shasum": ""
48
- },
49
- "require": {
50
- "ext-simplexml": "*",
51
- "ext-tokenizer": "*",
52
- "ext-xmlwriter": "*",
53
- "php": ">=5.1.2"
54
- },
55
- "require-dev": {
56
- "phpunit/phpunit": "~4.0"
57
- },
58
- "time": "2017-05-22 02:43:20",
59
- "bin": [
60
- "scripts/phpcs",
61
- "scripts/phpcbf"
62
- ],
63
- "type": "library",
64
- "extra": {
65
- "branch-alias": {
66
- "dev-master": "2.x-dev"
67
- }
68
- },
69
- "installation-source": "dist",
70
- "autoload": {
71
- "classmap": [
72
- "CodeSniffer.php",
73
- "CodeSniffer/CLI.php",
74
- "CodeSniffer/Exception.php",
75
- "CodeSniffer/File.php",
76
- "CodeSniffer/Fixer.php",
77
- "CodeSniffer/Report.php",
78
- "CodeSniffer/Reporting.php",
79
- "CodeSniffer/Sniff.php",
80
- "CodeSniffer/Tokens.php",
81
- "CodeSniffer/Reports/",
82
- "CodeSniffer/Tokenizers/",
83
- "CodeSniffer/DocGenerators/",
84
- "CodeSniffer/Standards/AbstractPatternSniff.php",
85
- "CodeSniffer/Standards/AbstractScopeSniff.php",
86
- "CodeSniffer/Standards/AbstractVariableSniff.php",
87
- "CodeSniffer/Standards/IncorrectPatternException.php",
88
- "CodeSniffer/Standards/Generic/Sniffs/",
89
- "CodeSniffer/Standards/MySource/Sniffs/",
90
- "CodeSniffer/Standards/PEAR/Sniffs/",
91
- "CodeSniffer/Standards/PSR1/Sniffs/",
92
- "CodeSniffer/Standards/PSR2/Sniffs/",
93
- "CodeSniffer/Standards/Squiz/Sniffs/",
94
- "CodeSniffer/Standards/Zend/Sniffs/"
95
- ]
96
- },
97
- "notification-url": "https://packagist.org/downloads/",
98
- "license": [
99
- "BSD-3-Clause"
100
- ],
101
- "authors": [
102
- {
103
- "name": "Greg Sherwood",
104
- "role": "lead"
105
- }
106
- ],
107
- "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
108
- "homepage": "http://www.squizlabs.com/php-codesniffer",
109
- "keywords": [
110
- "phpcs",
111
- "standards"
112
- ]
113
- },
114
  {
115
  "name": "facebook/facebook-instant-articles-sdk-extensions-in-php",
116
  "version": "v0.1.1",
@@ -163,6 +83,61 @@
163
  "sdk"
164
  ]
165
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
166
  {
167
  "name": "facebook/graph-sdk",
168
  "version": "5.6.0",
@@ -223,61 +198,6 @@
223
  "sdk"
224
  ]
225
  },
226
- {
227
- "name": "symfony/css-selector",
228
- "version": "v2.8.25",
229
- "version_normalized": "2.8.25.0",
230
- "source": {
231
- "type": "git",
232
- "url": "https://github.com/symfony/css-selector.git",
233
- "reference": "ba3204654efa779691fac9e948a96b4a7067e4ab"
234
- },
235
- "dist": {
236
- "type": "zip",
237
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/ba3204654efa779691fac9e948a96b4a7067e4ab",
238
- "reference": "ba3204654efa779691fac9e948a96b4a7067e4ab",
239
- "shasum": ""
240
- },
241
- "require": {
242
- "php": ">=5.3.9"
243
- },
244
- "time": "2017-05-01 14:31:55",
245
- "type": "library",
246
- "extra": {
247
- "branch-alias": {
248
- "dev-master": "2.8-dev"
249
- }
250
- },
251
- "installation-source": "dist",
252
- "autoload": {
253
- "psr-4": {
254
- "Symfony\\Component\\CssSelector\\": ""
255
- },
256
- "exclude-from-classmap": [
257
- "/Tests/"
258
- ]
259
- },
260
- "notification-url": "https://packagist.org/downloads/",
261
- "license": [
262
- "MIT"
263
- ],
264
- "authors": [
265
- {
266
- "name": "Jean-François Simon",
267
- "email": "jeanfrancois.simon@sensiolabs.com"
268
- },
269
- {
270
- "name": "Fabien Potencier",
271
- "email": "fabien@symfony.com"
272
- },
273
- {
274
- "name": "Symfony Community",
275
- "homepage": "https://symfony.com/contributors"
276
- }
277
- ],
278
- "description": "Symfony CssSelector Component",
279
- "homepage": "https://symfony.com"
280
- },
281
  {
282
  "name": "facebook/facebook-instant-articles-sdk-php",
283
  "version": "v1.6.2",
@@ -331,6 +251,86 @@
331
  "sdk"
332
  ]
333
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
334
  {
335
  "name": "wp-coding-standards/wpcs",
336
  "version": "0.12.0",
31
  "php"
32
  ]
33
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  {
35
  "name": "facebook/facebook-instant-articles-sdk-extensions-in-php",
36
  "version": "v0.1.1",
83
  "sdk"
84
  ]
85
  },
86
+ {
87
+ "name": "symfony/css-selector",
88
+ "version": "v2.8.25",
89
+ "version_normalized": "2.8.25.0",
90
+ "source": {
91
+ "type": "git",
92
+ "url": "https://github.com/symfony/css-selector.git",
93
+ "reference": "ba3204654efa779691fac9e948a96b4a7067e4ab"
94
+ },
95
+ "dist": {
96
+ "type": "zip",
97
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/ba3204654efa779691fac9e948a96b4a7067e4ab",
98
+ "reference": "ba3204654efa779691fac9e948a96b4a7067e4ab",
99
+ "shasum": ""
100
+ },
101
+ "require": {
102
+ "php": ">=5.3.9"
103
+ },
104
+ "time": "2017-05-01 14:31:55",
105
+ "type": "library",
106
+ "extra": {
107
+ "branch-alias": {
108
+ "dev-master": "2.8-dev"
109
+ }
110
+ },
111
+ "installation-source": "dist",
112
+ "autoload": {
113
+ "psr-4": {
114
+ "Symfony\\Component\\CssSelector\\": ""
115
+ },
116
+ "exclude-from-classmap": [
117
+ "/Tests/"
118
+ ]
119
+ },
120
+ "notification-url": "https://packagist.org/downloads/",
121
+ "license": [
122
+ "MIT"
123
+ ],
124
+ "authors": [
125
+ {
126
+ "name": "Jean-François Simon",
127
+ "email": "jeanfrancois.simon@sensiolabs.com"
128
+ },
129
+ {
130
+ "name": "Fabien Potencier",
131
+ "email": "fabien@symfony.com"
132
+ },
133
+ {
134
+ "name": "Symfony Community",
135
+ "homepage": "https://symfony.com/contributors"
136
+ }
137
+ ],
138
+ "description": "Symfony CssSelector Component",
139
+ "homepage": "https://symfony.com"
140
+ },
141
  {
142
  "name": "facebook/graph-sdk",
143
  "version": "5.6.0",
198
  "sdk"
199
  ]
200
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
201
  {
202
  "name": "facebook/facebook-instant-articles-sdk-php",
203
  "version": "v1.6.2",
251
  "sdk"
252
  ]
253
  },
254
+ {
255
+ "name": "squizlabs/php_codesniffer",
256
+ "version": "2.9.1",
257
+ "version_normalized": "2.9.1.0",
258
+ "source": {
259
+ "type": "git",
260
+ "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
261
+ "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62"
262
+ },
263
+ "dist": {
264
+ "type": "zip",
265
+ "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62",
266
+ "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62",
267
+ "shasum": ""
268
+ },
269
+ "require": {
270
+ "ext-simplexml": "*",
271
+ "ext-tokenizer": "*",
272
+ "ext-xmlwriter": "*",
273
+ "php": ">=5.1.2"
274
+ },
275
+ "require-dev": {
276
+ "phpunit/phpunit": "~4.0"
277
+ },
278
+ "time": "2017-05-22 02:43:20",
279
+ "bin": [
280
+ "scripts/phpcs",
281
+ "scripts/phpcbf"
282
+ ],
283
+ "type": "library",
284
+ "extra": {
285
+ "branch-alias": {
286
+ "dev-master": "2.x-dev"
287
+ }
288
+ },
289
+ "installation-source": "dist",
290
+ "autoload": {
291
+ "classmap": [
292
+ "CodeSniffer.php",
293
+ "CodeSniffer/CLI.php",
294
+ "CodeSniffer/Exception.php",
295
+ "CodeSniffer/File.php",
296
+ "CodeSniffer/Fixer.php",
297
+ "CodeSniffer/Report.php",
298
+ "CodeSniffer/Reporting.php",
299
+ "CodeSniffer/Sniff.php",
300
+ "CodeSniffer/Tokens.php",
301
+ "CodeSniffer/Reports/",
302
+ "CodeSniffer/Tokenizers/",
303
+ "CodeSniffer/DocGenerators/",
304
+ "CodeSniffer/Standards/AbstractPatternSniff.php",
305
+ "CodeSniffer/Standards/AbstractScopeSniff.php",
306
+ "CodeSniffer/Standards/AbstractVariableSniff.php",
307
+ "CodeSniffer/Standards/IncorrectPatternException.php",
308
+ "CodeSniffer/Standards/Generic/Sniffs/",
309
+ "CodeSniffer/Standards/MySource/Sniffs/",
310
+ "CodeSniffer/Standards/PEAR/Sniffs/",
311
+ "CodeSniffer/Standards/PSR1/Sniffs/",
312
+ "CodeSniffer/Standards/PSR2/Sniffs/",
313
+ "CodeSniffer/Standards/Squiz/Sniffs/",
314
+ "CodeSniffer/Standards/Zend/Sniffs/"
315
+ ]
316
+ },
317
+ "notification-url": "https://packagist.org/downloads/",
318
+ "license": [
319
+ "BSD-3-Clause"
320
+ ],
321
+ "authors": [
322
+ {
323
+ "name": "Greg Sherwood",
324
+ "role": "lead"
325
+ }
326
+ ],
327
+ "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
328
+ "homepage": "http://www.squizlabs.com/php-codesniffer",
329
+ "keywords": [
330
+ "phpcs",
331
+ "standards"
332
+ ]
333
+ },
334
  {
335
  "name": "wp-coding-standards/wpcs",
336
  "version": "0.12.0",