Instant Articles for WP - Version 3.2.3

Version Description

Download this release

Release Info

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

Code changes from version 3.1.4 to 3.2.3

Files changed (123) hide show
  1. class-instant-articles-post.php +4 -36
  2. class-instant-articles-publisher.php +11 -2
  3. compat.php +8 -6
  4. compat/class-instant-articles-playbuzz.php +27 -0
  5. compat/playbuzz-rules-configuration.json +23 -0
  6. css/instant-articles-meta-box.css +6 -0
  7. css/instant-articles-settings-wizard.css +0 -3
  8. css/instant-articles-wizard.css +15 -6
  9. facebook-instant-articles.php +2 -2
  10. feed-template.php +5 -0
  11. js/instant-articles-meta-box.js +14 -0
  12. js/instant-articles-wizard.js +5 -6
  13. meta-box/class-instant-articles-meta-box.php +38 -4
  14. meta-box/meta-box-template.php +22 -1
  15. readme.txt +18 -1
  16. rules-configuration.json +49 -3
  17. vendor/autoload.php +1 -1
  18. vendor/composer/autoload_files.php +1 -1
  19. vendor/composer/autoload_psr4.php +1 -1
  20. vendor/composer/autoload_real.php +7 -7
  21. vendor/composer/autoload_static.php +6 -6
  22. vendor/composer/installed.json +78 -78
  23. vendor/facebook/facebook-instant-articles-sdk-php/composer.json +0 -47
  24. vendor/facebook/facebook-instant-articles-sdk-php/composer.lock +0 -1245
  25. vendor/facebook/facebook-instant-articles-sdk-php/src/Facebook/InstantArticles/Transformer/Getters/ElementGetter.php +1 -1
  26. vendor/facebook/facebook-instant-articles-sdk-php/src/Facebook/InstantArticles/Transformer/Rules/InstantArticleRule.php +0 -1
  27. vendor/facebook/facebook-instant-articles-sdk-php/src/Facebook/InstantArticles/Transformer/Rules/TimeRule.php +0 -1
  28. vendor/facebook/facebook-instant-articles-sdk-php/tests/Facebook/InstantArticles/Elements/SocialEmbedTest.php +0 -96
  29. vendor/facebook/facebook-instant-articles-sdk-php/tests/Facebook/InstantArticles/Transformer/CMS/WPTransformerTest.php +0 -98
  30. vendor/facebook/facebook-instant-articles-sdk-php/tests/Facebook/InstantArticles/Transformer/CMS/wp-ia.xml +0 -202
  31. vendor/facebook/facebook-instant-articles-sdk-php/tests/Facebook/InstantArticles/Transformer/CMS/wp-rules.json +0 -606
  32. vendor/facebook/facebook-instant-articles-sdk-php/tests/Facebook/InstantArticles/Transformer/CMS/wp.html +0 -221
  33. vendor/facebook/facebook-instant-articles-sdk-php/tests/Facebook/InstantArticles/Transformer/wp-rules.json +0 -270
  34. vendor/facebook/{php-sdk-v4 → graph-sdk}/LICENSE +0 -0
  35. vendor/facebook/{php-sdk-v4 → graph-sdk}/composer.json +4 -3
  36. vendor/facebook/graph-sdk/phpcs.xml.dist +7 -0
  37. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Authentication/AccessToken.php +0 -0
  38. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Authentication/AccessTokenMetadata.php +0 -0
  39. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Authentication/OAuth2Client.php +0 -0
  40. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookAuthenticationException.php +0 -0
  41. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookAuthorizationException.php +0 -0
  42. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookClientException.php +0 -0
  43. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookOtherException.php +0 -0
  44. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookResponseException.php +0 -0
  45. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookResumableUploadException.php +0 -0
  46. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookSDKException.php +0 -0
  47. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookServerException.php +0 -0
  48. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookThrottleException.php +0 -0
  49. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Facebook.php +2 -2
  50. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FacebookApp.php +0 -0
  51. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FacebookBatchRequest.php +0 -2
  52. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FacebookBatchResponse.php +0 -0
  53. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FacebookClient.php +0 -0
  54. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FacebookRequest.php +0 -0
  55. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FacebookResponse.php +0 -0
  56. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FileUpload/FacebookFile.php +0 -0
  57. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FileUpload/FacebookResumableUploader.php +0 -0
  58. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FileUpload/FacebookTransferChunk.php +0 -0
  59. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FileUpload/FacebookVideo.php +0 -0
  60. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FileUpload/Mimetypes.php +0 -0
  61. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/Birthday.php +0 -0
  62. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/Collection.php +0 -0
  63. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphAchievement.php +0 -1
  64. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphAlbum.php +0 -0
  65. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphApplication.php +0 -0
  66. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphCoverPhoto.php +0 -0
  67. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphEdge.php +0 -0
  68. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphEvent.php +0 -0
  69. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphGroup.php +0 -0
  70. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphList.php +0 -0
  71. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphLocation.php +0 -0
  72. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphNode.php +0 -0
  73. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphNodeFactory.php +0 -0
  74. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphObject.php +0 -0
  75. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphObjectFactory.php +0 -0
  76. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphPage.php +22 -0
  77. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphPicture.php +0 -0
  78. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphSessionInfo.php +0 -0
  79. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphUser.php +0 -0
  80. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Helpers/FacebookCanvasHelper.php +0 -0
  81. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Helpers/FacebookJavaScriptHelper.php +0 -0
  82. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Helpers/FacebookPageTabHelper.php +0 -0
  83. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Helpers/FacebookRedirectLoginHelper.php +0 -0
  84. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Helpers/FacebookSignedRequestFromInputHelper.php +0 -0
  85. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Http/GraphRawResponse.php +1 -1
  86. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Http/RequestBodyInterface.php +0 -0
  87. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Http/RequestBodyMultipart.php +0 -0
  88. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Http/RequestBodyUrlEncoded.php +0 -0
  89. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/HttpClients/FacebookCurl.php +0 -0
  90. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/HttpClients/FacebookCurlHttpClient.php +0 -0
  91. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/HttpClients/FacebookGuzzleHttpClient.php +0 -0
  92. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/HttpClients/FacebookHttpClientInterface.php +0 -0
  93. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/HttpClients/FacebookStream.php +0 -0
  94. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/HttpClients/FacebookStreamHttpClient.php +0 -0
  95. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/HttpClients/HttpClientsFactory.php +0 -0
  96. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/HttpClients/certs/DigiCertHighAssuranceEVRootCA.pem +0 -0
  97. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PersistentData/FacebookMemoryPersistentDataHandler.php +0 -0
  98. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PersistentData/FacebookSessionPersistentDataHandler.php +0 -0
  99. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PersistentData/PersistentDataFactory.php +0 -0
  100. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PersistentData/PersistentDataInterface.php +0 -0
  101. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PseudoRandomString/McryptPseudoRandomStringGenerator.php +0 -0
  102. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PseudoRandomString/OpenSslPseudoRandomStringGenerator.php +0 -0
  103. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PseudoRandomString/PseudoRandomStringGeneratorFactory.php +11 -3
  104. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PseudoRandomString/PseudoRandomStringGeneratorInterface.php +0 -0
  105. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PseudoRandomString/PseudoRandomStringGeneratorTrait.php +0 -0
  106. vendor/facebook/graph-sdk/src/Facebook/PseudoRandomString/RandomBytesPseudoRandomStringGenerator.php +59 -0
  107. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PseudoRandomString/UrandomPseudoRandomStringGenerator.php +0 -0
  108. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/SignedRequest.php +0 -0
  109. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Url/FacebookUrlDetectionHandler.php +0 -0
  110. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Url/FacebookUrlManipulator.php +0 -0
  111. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Url/UrlDetectionInterface.php +0 -0
  112. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/autoload.php +0 -0
  113. vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/polyfills.php +0 -0
  114. vendor/symfony/css-selector/Parser/Reader.php +0 -2
  115. wizard/class-instant-articles-option-publishing.php +4 -4
  116. wizard/class-instant-articles-wizard.php +95 -66
  117. wizard/templates/app-setup-template.php +5 -5
  118. wizard/templates/overview-template.php +1 -1
  119. wizard/templates/page-selection-template.php +3 -5
  120. wizard/templates/review-submission-template.php +53 -19
  121. wizard/templates/style-selection-template.php +3 -3
  122. wizard/templates/wizard-template.php +11 -8
  123. wpcom-helper.php +50 -0
class-instant-articles-post.php CHANGED
@@ -86,12 +86,13 @@ class Instant_Articles_Post {
86
  $title = $this->_post->post_title;
87
 
88
  /**
89
- * Apply the default filter 'the_title' for the post tite.
90
  *
91
  * @since 3.1
92
  * @param string $title The current post title.
 
93
  */
94
- $title = apply_filters( 'the_title', $title);
95
 
96
  /**
97
  * Filter the post title for use in instant articles.
@@ -682,40 +683,7 @@ class Instant_Articles_Post {
682
  $this->instant_article->withStyle( 'default' );
683
  }
684
 
685
- $libxml_previous_state = libxml_use_internal_errors( true );
686
- $document = new DOMDocument( '1.0', get_option( 'blog_charset' ) );
687
- $content = $this->get_the_content();
688
-
689
- // DOMDocument isn’t handling encodings too well, so let’s help it a little.
690
- if ( function_exists( 'mb_convert_encoding' ) ) {
691
- $content = mb_convert_encoding( $content, 'HTML-ENTITIES', get_option( 'blog_charset' ) );
692
- } else {
693
- $content = htmlspecialchars_decode( utf8_decode( htmlentities( $content, ENT_COMPAT, 'utf-8', false ) ) );
694
- }
695
-
696
- $result = $document->loadHTML( '<!doctype html><html><body>' . $content . '</body></html>' );
697
-
698
- // We need to make sure that scripts use absolute URLs and not relative URLs.
699
- $scripts = $document->getElementsByTagName('script');
700
- if ( ! empty( $scripts ) ) {
701
- foreach ( $scripts as $script ){
702
- $src = $script->getAttribute( 'src' );
703
- $explode_src = parse_url( $src );
704
- if ( is_array( $explode_src ) && empty( $explode_src['scheme'] ) && ! empty( $explode_src['host'] ) && ! empty( $explode_src['path'] ) ) {
705
- $src = 'https://' . $explode_src['host'] . $explode_src['path'];
706
- }
707
- $script->setAttribute( 'src' , $src );
708
- }
709
- }
710
-
711
- libxml_clear_errors();
712
- libxml_use_internal_errors( $libxml_previous_state );
713
-
714
- $document = apply_filters( 'instant_articles_parsed_document', $document );
715
-
716
- if ( $result ) {
717
- $transformer->transform( $this->instant_article, $document );
718
- }
719
 
720
  $this->add_ads_from_settings();
721
  $this->add_analytics_from_settings();
86
  $title = $this->_post->post_title;
87
 
88
  /**
89
+ * Apply the default filter 'the_title' for the post title.
90
  *
91
  * @since 3.1
92
  * @param string $title The current post title.
93
+ * @param int $id The current post ID.
94
  */
95
+ $title = apply_filters( 'the_title', $title, $this->_post->ID );
96
 
97
  /**
98
  * Filter the post title for use in instant articles.
683
  $this->instant_article->withStyle( 'default' );
684
  }
685
 
686
+ $transformer->transformString( $this->instant_article, $this->get_the_content(), get_option( 'blog_charset' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
687
 
688
  $this->add_ads_from_settings();
689
  $this->add_analytics_from_settings();
class-instant-articles-publisher.php CHANGED
@@ -21,6 +21,7 @@ class Instant_Articles_Publisher {
21
  * Key to store the submission status ID on meta data
22
  */
23
  const SUBMISSION_ID_KEY = 'instant_articles_submission_id';
 
24
 
25
  /**
26
  * Inits publisher.
@@ -56,6 +57,11 @@ class Instant_Articles_Publisher {
56
  // Transform the post to an Instant Article.
57
  $adapter = new Instant_Articles_Post( $post );
58
 
 
 
 
 
 
59
  $article = $adapter->to_instant_article();
60
 
61
  // Skip empty articles or articles missing title.
@@ -71,6 +77,7 @@ class Instant_Articles_Publisher {
71
  $fb_app_settings = Instant_Articles_Option_FB_App::get_option_decoded();
72
  $fb_page_settings = Instant_Articles_Option_FB_Page::get_option_decoded();
73
  $publishing_settings = Instant_Articles_Option_Publishing::get_option_decoded();
 
74
 
75
  $dev_mode = isset( $publishing_settings['dev_mode'] )
76
  ? ( $publishing_settings['dev_mode'] ? true : false )
@@ -99,12 +106,14 @@ class Instant_Articles_Publisher {
99
 
100
  // Don't process if contains warnings and blocker flag for transformation warnings is turned on.
101
  if ( count( $adapter->transformer->getWarnings() ) > 0
102
- && isset( $publishing_settings['block_publish_with_warnings'] )
103
- && $publishing_settings['block_publish_with_warnings'] ) {
 
104
 
105
  // Unpublishes if already published
106
  $client->removeArticle( $article->getCanonicalURL() );
107
  delete_post_meta( $post_id, self::SUBMISSION_ID_KEY );
 
108
  return;
109
  }
110
 
21
  * Key to store the submission status ID on meta data
22
  */
23
  const SUBMISSION_ID_KEY = 'instant_articles_submission_id';
24
+ const FORCE_SUBMIT_KEY = 'instant_articles_force_submit';
25
 
26
  /**
27
  * Inits publisher.
57
  // Transform the post to an Instant Article.
58
  $adapter = new Instant_Articles_Post( $post );
59
 
60
+ // Allow to disable post submit via filter
61
+ if ( false === apply_filters( 'instant_articles_should_submit_post', true, $adapter ) ) {
62
+ return;
63
+ }
64
+
65
  $article = $adapter->to_instant_article();
66
 
67
  // Skip empty articles or articles missing title.
77
  $fb_app_settings = Instant_Articles_Option_FB_App::get_option_decoded();
78
  $fb_page_settings = Instant_Articles_Option_FB_Page::get_option_decoded();
79
  $publishing_settings = Instant_Articles_Option_Publishing::get_option_decoded();
80
+ $force_submit = get_post_meta( $post_id, self::FORCE_SUBMIT_KEY, true );
81
 
82
  $dev_mode = isset( $publishing_settings['dev_mode'] )
83
  ? ( $publishing_settings['dev_mode'] ? true : false )
106
 
107
  // Don't process if contains warnings and blocker flag for transformation warnings is turned on.
108
  if ( count( $adapter->transformer->getWarnings() ) > 0
109
+ && ( ! isset( $publishing_settings[ 'publish_with_warnings' ] ) || ! $publishing_settings[ 'publish_with_warnings' ] )
110
+ && ( ! $force_submit )
111
+ ) {
112
 
113
  // Unpublishes if already published
114
  $client->removeArticle( $article->getCanonicalURL() );
115
  delete_post_meta( $post_id, self::SUBMISSION_ID_KEY );
116
+
117
  return;
118
  }
119
 
compat.php CHANGED
@@ -7,11 +7,6 @@
7
  * @package default
8
  */
9
 
10
- if ( !function_exists( 'is_plugin_active' ) ) {
11
- require_once ( ABSPATH . '/wp-admin/includes/plugin.php' );
12
- }
13
-
14
-
15
  // Load compat layer for Co-Authors Plus.
16
  if ( function_exists( 'get_coauthors' ) && ! defined( 'CAP_IA_COMPAT' ) ) {
17
  include( dirname( __FILE__ ) . '/compat/class-instant-articles-co-authors-plus.php' );
@@ -41,8 +36,15 @@ if ( defined( 'JETPACK__VERSION' ) ) {
41
  }
42
 
43
  // Load support for Get The Image plugin
44
- if ( is_plugin_active( 'get-the-image/get-the-image.php' ) ) {
45
  include( dirname( __FILE__ ) . '/compat/class-instant-articles-get-the-image.php' );
46
  $gti = new Instant_Articles_Get_The_Image;
47
  $gti->init();
48
  }
 
 
 
 
 
 
 
7
  * @package default
8
  */
9
 
 
 
 
 
 
10
  // Load compat layer for Co-Authors Plus.
11
  if ( function_exists( 'get_coauthors' ) && ! defined( 'CAP_IA_COMPAT' ) ) {
12
  include( dirname( __FILE__ ) . '/compat/class-instant-articles-co-authors-plus.php' );
36
  }
37
 
38
  // Load support for Get The Image plugin
39
+ if ( function_exists( 'get_the_image' ) ) {
40
  include( dirname( __FILE__ ) . '/compat/class-instant-articles-get-the-image.php' );
41
  $gti = new Instant_Articles_Get_The_Image;
42
  $gti->init();
43
  }
44
+
45
+ // Load support for Playbuzz plugin
46
+ if ( function_exists( 'playbuzz_settings_link' ) ) {
47
+ include( dirname( __FILE__ ) . '/compat/class-instant-articles-playbuzz.php' );
48
+ $playbuzz = new Instant_Articles_Playbuzz;
49
+ $playbuzz->init();
50
+ }
compat/class-instant-articles-playbuzz.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Support class for Playbuzz
5
+ *
6
+ * @since 3.1.1
7
+ *
8
+ */
9
+ class Instant_Articles_Playbuzz {
10
+
11
+ /**
12
+ * Init the compat layer
13
+ *
14
+ */
15
+ function init() {
16
+ add_filter( 'instant_articles_transformer_rules_loaded', array( 'Instant_Articles_Playbuzz', 'transformer_loaded' ) );
17
+ }
18
+
19
+ public static function transformer_loaded( $transformer ) {
20
+ // Appends more rules to transformer
21
+ $file_path = plugin_dir_path( __FILE__ ) . 'playbuzz-rules-configuration.json';
22
+ $configuration = file_get_contents( $file_path );
23
+ $transformer->loadRules( $configuration );
24
+
25
+ return $transformer;
26
+ }
27
+ }
compat/playbuzz-rules-configuration.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "rules": [{
3
+ "class" : "IgnoreRule",
4
+ "selector": "//p/script[contains(@src,'playbuzz')]"
5
+ }, {
6
+ "class": "InteractiveRule",
7
+ "selector" : "div.pb_feed",
8
+ "properties" : {
9
+ "interactive.iframe" : {
10
+ "type" : "multiple",
11
+ "children": [{
12
+ "type": "fragment",
13
+ "fragment": "<script type='text/javascript' src='//cdn.playbuzz.com/widget/feed.js'></script>"
14
+ }, {
15
+ "type": "element",
16
+ "selector": "div.pb_feed"
17
+ }
18
+ ]
19
+ }
20
+ }
21
+ }
22
+ ]
23
+ }
css/instant-articles-meta-box.css CHANGED
@@ -1,3 +1,9 @@
 
 
 
 
 
 
1
  .instant-articles-messages {
2
  margin-left: 15px;
3
  margin-top: 0px;
1
+ .instant-articles-dev-mode-indicator {
2
+ float: right;
3
+ text-decoration: none;
4
+ font-size: smaller;
5
+ }
6
+
7
  .instant-articles-messages {
8
  margin-left: 15px;
9
  margin-top: 0px;
css/instant-articles-settings-wizard.css DELETED
@@ -1,3 +0,0 @@
1
- .instant-articles-inline-form input[name='submit'] {
2
- display: inline;
3
- }
 
 
 
css/instant-articles-wizard.css CHANGED
@@ -350,18 +350,27 @@ a.instant-articles-button {
350
  font-weight: bold;
351
  }
352
  .instant-articles-advanced-settings {
353
- text-decoration: none;
354
  font-weight: bold;
355
  margin-top: 20px;
356
- display: block;
357
  }
358
- .instant-articles-advanced-settings:active,
359
- .instant-articles-advanced-settings:focus {
 
 
360
  outline: none;
361
  box-shadow: none;
362
  }
363
-
364
- .instant-articles-wizard-advanced-settings-box {
 
 
 
 
 
 
 
 
 
365
  display: none;
366
  }
367
 
350
  font-weight: bold;
351
  }
352
  .instant-articles-advanced-settings {
 
353
  font-weight: bold;
354
  margin-top: 20px;
 
355
  }
356
+ .instant-articles-wizard-toggle a,
357
+ .instant-articles-wizard-toggle a:active,
358
+ .instant-articles-wizard-toggle a:focus {
359
+ text-decoration: none;
360
  outline: none;
361
  box-shadow: none;
362
  }
363
+ .instant-articles-wizard-toggle-opened::before {
364
+ content: "▼ ";
365
+ }
366
+ .instant-articles-wizard-toggle-closed::before {
367
+ content: "▶︎ ";
368
+ }
369
+ .instant-articles-advanced-settings[data-state='opened'] .instant-articles-wizard-toggle-closed {
370
+ display: none;
371
+ }
372
+ .instant-articles-advanced-settings[data-state='closed'] .instant-articles-wizard-toggle-opened,
373
+ .instant-articles-advanced-settings[data-state='closed'] + .instant-articles-wizard-advanced-settings-box {
374
  display: none;
375
  }
376
 
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: 3.1.3
8
  * Text Domain: instant-articles
9
  * License: GPLv2
10
  * License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -61,7 +61,7 @@ if ( version_compare( PHP_VERSION, '5.4', '<' ) ) {
61
 
62
  defined( 'ABSPATH' ) || die( 'Shame on you' );
63
 
64
- define( 'IA_PLUGIN_VERSION', '3.1' );
65
  define( 'IA_PLUGIN_PATH_FULL', __FILE__ );
66
  define( 'IA_PLUGIN_PATH', plugin_basename( __FILE__ ) );
67
  define( 'IA_PLUGIN_FILE_BASENAME', pathinfo( __FILE__, PATHINFO_FILENAME ) );
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: 3.2.2
8
  * Text Domain: instant-articles
9
  * License: GPLv2
10
  * License URI: http://www.gnu.org/licenses/gpl-2.0.html
61
 
62
  defined( 'ABSPATH' ) || die( 'Shame on you' );
63
 
64
+ define( 'IA_PLUGIN_VERSION', '3.2.2' );
65
  define( 'IA_PLUGIN_PATH_FULL', __FILE__ );
66
  define( 'IA_PLUGIN_PATH', plugin_basename( __FILE__ ) );
67
  define( 'IA_PLUGIN_FILE_BASENAME', pathinfo( __FILE__, PATHINFO_FILENAME ) );
feed-template.php CHANGED
@@ -21,6 +21,11 @@ $last_modified = null;
21
  <?php
22
  $instant_article_post = new Instant_Articles_Post( get_post( get_the_id() ) );
23
 
 
 
 
 
 
24
  // If we’re OK with a limited post set: Do not include posts with empty content -- FB will complain.
25
  if ( defined( 'INSTANT_ARTICLES_LIMIT_POSTS' ) && INSTANT_ARTICLES_LIMIT_POSTS && ! strlen( trim( $instant_article_post->get_the_content() ) ) ) {
26
  continue;
21
  <?php
22
  $instant_article_post = new Instant_Articles_Post( get_post( get_the_id() ) );
23
 
24
+ // Allow to disable post submit via filter
25
+ if ( false === apply_filters( 'instant_articles_should_submit_post', true, $instant_article_post ) ) {
26
+ continue;
27
+ }
28
+
29
  // If we’re OK with a limited post set: Do not include posts with empty content -- FB will complain.
30
  if ( defined( 'INSTANT_ARTICLES_LIMIT_POSTS' ) && INSTANT_ARTICLES_LIMIT_POSTS && ! strlen( trim( $instant_article_post->get_the_content() ) ) ) {
31
  continue;
js/instant-articles-meta-box.js CHANGED
@@ -1,3 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
1
  function instant_articles_load_meta_box ( post_ID ) {
2
  jQuery( document ).ready( function( $ ) {
3
  var data = {
@@ -6,6 +17,9 @@ function instant_articles_load_meta_box ( post_ID ) {
6
  };
7
  jQuery.post( ajaxurl, data, function(response) {
8
  jQuery( '#instant_article_meta_box .inside' ).html( response );
 
 
 
9
  }, 'html' );
10
  jQuery( '#instant_article_meta_box' ).delegate( '.instant-articles-toggle-debug', 'click', function () {
11
  jQuery( '#instant_article_meta_box' ).toggleClass( 'instant-articles-show-debug' );
1
+ function instant_articles_force_submit ( post_ID ) {
2
+ var data = {
3
+ 'action': 'instant_articles_force_submit',
4
+ 'post_ID': post_ID,
5
+ 'force': jQuery( '#instant_articles_force_submit' ).is( ':checked' ),
6
+ 'security': jQuery( '#instant_articles_force_submit' ).attr( 'data-security' )
7
+ };
8
+ jQuery.post( ajaxurl, data, function(response) {
9
+ instant_articles_load_meta_box( post_ID );
10
+ });
11
+ }
12
  function instant_articles_load_meta_box ( post_ID ) {
13
  jQuery( document ).ready( function( $ ) {
14
  var data = {
17
  };
18
  jQuery.post( ajaxurl, data, function(response) {
19
  jQuery( '#instant_article_meta_box .inside' ).html( response );
20
+ jQuery( '#instant_articles_force_submit').click( function () {
21
+ instant_articles_force_submit( post_ID );
22
+ } );
23
  }, 'html' );
24
  jQuery( '#instant_article_meta_box' ).delegate( '.instant-articles-toggle-debug', 'click', function () {
25
  jQuery( '#instant_article_meta_box' ).toggleClass( 'instant-articles-show-debug' );
js/instant-articles-wizard.js CHANGED
@@ -122,15 +122,14 @@ function instant_articles_wizard_bind_events () {
122
  jQuery( document ).ready( function () {
123
  instant_articles_wizard_bind_events();
124
 
125
- jQuery( '.instant-articles-wizard-toggle' ).on( 'click', function () {
126
- var text = jQuery( this ).text();
127
- if ( text.indexOf( '' ) !== -1 ) {
128
- text = text.replace( '', '' );
129
  }
130
  else {
131
- text = text.replace( '', '' );
132
  }
133
- jQuery( this ).text( text ).next().slideToggle();
134
  return false;
135
  });
136
  });
122
  jQuery( document ).ready( function () {
123
  instant_articles_wizard_bind_events();
124
 
125
+ jQuery( '.instant-articles-wizard-toggle a' ).on( 'click', function () {
126
+ $advancedSettingsContainer = jQuery( '.instant-articles-advanced-settings' );
127
+ if ( $advancedSettingsContainer.attr( 'data-state') === 'closed' ) {
128
+ $advancedSettingsContainer.attr( 'data-state', 'opened' );
129
  }
130
  else {
131
+ $advancedSettingsContainer.attr( 'data-state', 'closed' );
132
  }
 
133
  return false;
134
  });
135
  });
meta-box/class-instant-articles-meta-box.php CHANGED
@@ -28,6 +28,10 @@ class Instant_Articles_Meta_Box {
28
  'wp_ajax_instant_articles_meta_box',
29
  array( 'Instant_Articles_Meta_Box', 'render_meta_box' )
30
  );
 
 
 
 
31
  }
32
 
33
  /**
@@ -38,7 +42,9 @@ class Instant_Articles_Meta_Box {
38
  'instant_article_meta_box',
39
  'Facebook Instant Articles',
40
  array( 'Instant_Articles_Meta_Box', 'render_meta_box_loader' ),
41
- 'post',
 
 
42
  'normal',
43
  'default'
44
  );
@@ -60,27 +66,54 @@ class Instant_Articles_Meta_Box {
60
  /**
61
  * Renderer for the Metabox.
62
  */
63
- public static function render_meta_box() {
64
- $post_id = intval( filter_input( INPUT_POST, 'post_ID' ) );
65
 
66
  if ( ! current_user_can( 'edit_post', $post_id ) ) {
67
  wp_die( -1, 403 );
68
  }
69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  $post = get_post( $post_id );
71
  $adapter = new Instant_Articles_Post( $post );
72
  $article = $adapter->to_instant_article();
73
  $canonical_url = $adapter->get_canonical_url();
74
  $submission_status = null;
75
  $published = 'publish' === $post->post_status;
 
 
 
76
 
77
  Instant_Articles_Wizard::menu_items();
78
  $settings_page_href = Instant_Articles_Wizard::get_url();
79
 
 
 
80
  if ( $published ) {
81
  try {
82
  $fb_app_settings = Instant_Articles_Option_FB_App::get_option_decoded();
83
  $fb_page_settings = Instant_Articles_Option_FB_Page::get_option_decoded();
 
 
 
 
 
84
 
85
  if ( isset( $fb_app_settings['app_id'] )
86
  && isset( $fb_app_settings['app_secret'] )
@@ -91,7 +124,8 @@ class Instant_Articles_Meta_Box {
91
  $fb_app_settings['app_id'],
92
  $fb_app_settings['app_secret'],
93
  $fb_page_settings['page_access_token'],
94
- $fb_page_settings['page_id']
 
95
  );
96
 
97
  $submission_status_id = get_post_meta( $post_id, Instant_Articles_Publisher::SUBMISSION_ID_KEY, true );
28
  'wp_ajax_instant_articles_meta_box',
29
  array( 'Instant_Articles_Meta_Box', 'render_meta_box' )
30
  );
31
+ add_action(
32
+ 'wp_ajax_instant_articles_force_submit',
33
+ array( 'Instant_Articles_Meta_Box', 'force_submit' )
34
+ );
35
  }
36
 
37
  /**
42
  'instant_article_meta_box',
43
  'Facebook Instant Articles',
44
  array( 'Instant_Articles_Meta_Box', 'render_meta_box_loader' ),
45
+
46
+ /** This filter is defined in facebook-instant-articles.php. */
47
+ apply_filters( 'instant_articles_post_types', array( 'post' ) ),
48
  'normal',
49
  'default'
50
  );
66
  /**
67
  * Renderer for the Metabox.
68
  */
69
+ public static function force_submit() {
70
+ $post_id = intval( $_POST[ 'post_ID' ] );
71
 
72
  if ( ! current_user_can( 'edit_post', $post_id ) ) {
73
  wp_die( -1, 403 );
74
  }
75
 
76
+ check_ajax_referer( 'instant-articles-force-submit-' . $post_id, 'security' );
77
+ $force = sanitize_text_field( $_POST[ 'force' ] ) === 'true';
78
+ update_post_meta( $post_id, Instant_Articles_Publisher::FORCE_SUBMIT_KEY, $force );
79
+ Instant_Articles_Publisher::submit_article( $post_id, get_post( $post_id ) );
80
+ }
81
+
82
+ /**
83
+ * Renderer for the Metabox.
84
+ */
85
+ public static function render_meta_box() {
86
+ $post_id = intval( $_POST[ 'post_ID' ] );
87
+
88
+ if ( !current_user_can( 'edit_post', $post_id ) ) {
89
+ wp_die( -1, 403 );
90
+ }
91
+
92
+ $ajax_nonce = wp_create_nonce( "instant-articles-force-submit-" . $post_id );
93
  $post = get_post( $post_id );
94
  $adapter = new Instant_Articles_Post( $post );
95
  $article = $adapter->to_instant_article();
96
  $canonical_url = $adapter->get_canonical_url();
97
  $submission_status = null;
98
  $published = 'publish' === $post->post_status;
99
+ $dev_mode = false;
100
+ $force_submit = get_post_meta( $post_id, Instant_Articles_Publisher::FORCE_SUBMIT_KEY, true );
101
+ $should_submit_post = apply_filters( 'instant_articles_should_submit_post', true, $adapter );
102
 
103
  Instant_Articles_Wizard::menu_items();
104
  $settings_page_href = Instant_Articles_Wizard::get_url();
105
 
106
+ $publishing_settings = Instant_Articles_Option_Publishing::get_option_decoded();
107
+ $publish_with_warnings = $publishing_settings[ 'publish_with_warnings' ];
108
  if ( $published ) {
109
  try {
110
  $fb_app_settings = Instant_Articles_Option_FB_App::get_option_decoded();
111
  $fb_page_settings = Instant_Articles_Option_FB_Page::get_option_decoded();
112
+ $publishing_settings = Instant_Articles_Option_Publishing::get_option_decoded();
113
+
114
+ $dev_mode = isset( $publishing_settings['dev_mode'] )
115
+ ? ( $publishing_settings['dev_mode'] ? true : false )
116
+ : false;
117
 
118
  if ( isset( $fb_app_settings['app_id'] )
119
  && isset( $fb_app_settings['app_secret'] )
124
  $fb_app_settings['app_id'],
125
  $fb_app_settings['app_secret'],
126
  $fb_page_settings['page_access_token'],
127
+ $fb_page_settings['page_id'],
128
+ $dev_mode
129
  );
130
 
131
  $submission_status_id = get_post_meta( $post_id, Instant_Articles_Publisher::SUBMISSION_ID_KEY, true );
meta-box/meta-box-template.php CHANGED
@@ -11,7 +11,21 @@ use Facebook\InstantArticles\Client\InstantArticleStatus;
11
  use Facebook\InstantArticles\Client\ServerMessage;
12
  ?>
13
 
14
- <?php if ( ! $published ) : ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  <p>
16
  <b>
17
  <span class="dashicons dashicons-media-document"></span>
@@ -163,6 +177,13 @@ use Facebook\InstantArticles\Client\ServerMessage;
163
  </li>
164
  <?php endforeach; ?>
165
  </ul>
 
 
 
 
 
 
 
166
 
167
  <?php else : ?>
168
  <p>
11
  use Facebook\InstantArticles\Client\ServerMessage;
12
  ?>
13
 
14
+ <?php if ( $dev_mode ) : ?>
15
+ <a href="<?php echo esc_url( $settings_page_href ); ?>" class="instant-articles-dev-mode-indicator">
16
+ <span class="dashicons dashicons-admin-tools"></span>
17
+ Development Mode
18
+ </a>
19
+ <?php endif; ?>
20
+
21
+ <?php if ( ! $should_submit_post ) : ?>
22
+ <p>
23
+ <b>
24
+ <span class="dashicons dashicons-no-alt"></span>
25
+ This post will not be submitted to Instant Articles due to a rule created in your site.
26
+ </b>
27
+ </p>
28
+ <?php elseif ( ! $published ) : ?>
29
  <p>
30
  <b>
31
  <span class="dashicons dashicons-media-document"></span>
177
  </li>
178
  <?php endforeach; ?>
179
  </ul>
180
+ <?php if ( ! $publish_with_warnings ) : ?>
181
+ <hr />
182
+ <p>
183
+ <input type="checkbox" id="instant_articles_force_submit" data-security="<?php echo $ajax_nonce; ?>" <?php checked( $force_submit , 1 ); ?> />
184
+ Submit this article even with warnings
185
+ </p>
186
+ <?php endif; ?>
187
 
188
  <?php else : ?>
189
  <p>
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.6
6
- Stable tag: 3.1.3
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -85,6 +85,23 @@ Usually simply visiting the permalinks settings page in the WordPress dashboard
85
 
86
  == Changelog ==
87
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  = 3.1.3 =
89
  * Fix for expiring token issue
90
  * Fix missing icons
3
  Tags: instant articles, facebook, mobile
4
  Requires at least: 4.3
5
  Tested up to: 4.6
6
+ Stable tag: 3.2.2
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
85
 
86
  == Changelog ==
87
 
88
+ = 3.2 =
89
+ * Adds development mode support to post meta box (props simonengelhardt)
90
+ * Adds rule configuration for Instagram blockquotes (props everton-rosario)
91
+ * Adds rules for galleries (props everton-rosario)
92
+ * Migrates some unit tests (props everton-rosario)
93
+ * Switches to Facebook Graph SDK (props everton-rosario)
94
+ * Improves token invalidation flow (props everton-rosario)
95
+ * Fixes use of `the_title` filter (props srtfisher)
96
+ * Improves encoding handling (props yssk22)
97
+ * Adds post type filter to the post meta box (props technosailor)
98
+ * Adds Playbuzz support (props everton-rosario)
99
+ * Rename SDK getter to avert apocalypse (props diegoquinteiro)
100
+ * Wizard copy improvements (props demoive)
101
+ * Fixes issue with captions (props everton-rosario)
102
+ * Adds publication block for articles with transformation warnings (props everton-rosario)
103
+ * Fix https src attribute on some scripts (props goldenapples)
104
+
105
  = 3.1.3 =
106
  * Fix for expiring token issue
107
  * Fix missing icons
rules-configuration.json CHANGED
@@ -120,6 +120,26 @@
120
  }, {
121
  "class": "H2Rule",
122
  "selector" : "h3,h4,h5,h6"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  }, {
124
  "class": "InteractiveRule",
125
  "selector" : "iframe",
@@ -397,8 +417,10 @@
397
  }, {
398
  "class": "CaptionRule",
399
  "selector" : "figcaption"
400
- },
401
- {
 
 
402
  "class": "ImageRule",
403
  "selector" : "figure",
404
  "properties" : {
@@ -424,5 +446,29 @@
424
  "attribute": "type"
425
  }
426
  }
427
- }]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
428
  }
120
  }, {
121
  "class": "H2Rule",
122
  "selector" : "h3,h4,h5,h6"
123
+ }, {
124
+ "class": "InteractiveRule",
125
+ "selector" : "blockquote.instagram-media",
126
+ "properties" : {
127
+ "interactive.iframe" : {
128
+ "type" : "multiple",
129
+ "children": [
130
+ {
131
+ "type": "element",
132
+ "selector": "blockquote"
133
+ }, {
134
+ "type": "next-sibling-element-of",
135
+ "selector": "blockquote"
136
+ }
137
+ ]
138
+ }
139
+ }
140
+ }, {
141
+ "class": "IgnoreRule",
142
+ "selector" : "script"
143
  }, {
144
  "class": "InteractiveRule",
145
  "selector" : "iframe",
417
  }, {
418
  "class": "CaptionRule",
419
  "selector" : "figcaption"
420
+ }, {
421
+ "class": "CaptionRule",
422
+ "selector" : "p.wp-caption-text"
423
+ }, {
424
  "class": "ImageRule",
425
  "selector" : "figure",
426
  "properties" : {
446
  "attribute": "type"
447
  }
448
  }
449
+ }, {
450
+ "class" : "PassThroughRule",
451
+ "selector" : "div.vce-gallery-big"
452
+ }, {
453
+ "class" : "PassThroughRule",
454
+ "selector" : "div.vce-gallery-small"
455
+ }, {
456
+ "class" : "IgnoreRule",
457
+ "selector" : "div.vce-gallery-slider"
458
+ }, {
459
+ "class": "SlideshowImageRule",
460
+ "selector" : "div.big-gallery-item",
461
+ "properties" : {
462
+ "image.url" : {
463
+ "type" : "string",
464
+ "selector" : "img",
465
+ "attribute": "src"
466
+ },
467
+ "caption.title" : {
468
+ "type" : "string",
469
+ "selector" : "figcaption.wp-caption-text"
470
+ }
471
+ }
472
+ }
473
+ ]
474
  }
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit337744729a91b1fdea5f68820e3d1dfe::getLoader();
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInitfa8bfc5d2717dd9298c7d3347cfeea3b::getLoader();
vendor/composer/autoload_files.php CHANGED
@@ -6,5 +6,5 @@ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
- '7e702cccdb9dd904f2ccf22e5f37abae' => $vendorDir . '/facebook/php-sdk-v4/src/Facebook/polyfills.php',
10
  );
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
+ 'c65d09b6820da036953a371c8c73a9b1' => $vendorDir . '/facebook/graph-sdk/src/Facebook/polyfills.php',
10
  );
vendor/composer/autoload_psr4.php CHANGED
@@ -8,5 +8,5 @@ $baseDir = dirname($vendorDir);
8
  return array(
9
  'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'),
10
  'Facebook\\InstantArticles\\' => array($vendorDir . '/facebook/facebook-instant-articles-sdk-php/src/Facebook/InstantArticles'),
11
- 'Facebook\\' => array($vendorDir . '/facebook/php-sdk-v4/src/Facebook'),
12
  );
8
  return array(
9
  'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'),
10
  'Facebook\\InstantArticles\\' => array($vendorDir . '/facebook/facebook-instant-articles-sdk-php/src/Facebook/InstantArticles'),
11
+ 'Facebook\\' => array($vendorDir . '/facebook/graph-sdk/src/Facebook'),
12
  );
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit337744729a91b1fdea5f68820e3d1dfe
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit337744729a91b1fdea5f68820e3d1dfe
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit337744729a91b1fdea5f68820e3d1dfe', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit337744729a91b1fdea5f68820e3d1dfe', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInit337744729a91b1fdea5f68820e3d1dfe::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
@@ -48,19 +48,19 @@ class ComposerAutoloaderInit337744729a91b1fdea5f68820e3d1dfe
48
  $loader->register(true);
49
 
50
  if ($useStaticLoader) {
51
- $includeFiles = Composer\Autoload\ComposerStaticInit337744729a91b1fdea5f68820e3d1dfe::$files;
52
  } else {
53
  $includeFiles = require __DIR__ . '/autoload_files.php';
54
  }
55
  foreach ($includeFiles as $fileIdentifier => $file) {
56
- composerRequire337744729a91b1fdea5f68820e3d1dfe($fileIdentifier, $file);
57
  }
58
 
59
  return $loader;
60
  }
61
  }
62
 
63
- function composerRequire337744729a91b1fdea5f68820e3d1dfe($fileIdentifier, $file)
64
  {
65
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
66
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInitfa8bfc5d2717dd9298c7d3347cfeea3b
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInitfa8bfc5d2717dd9298c7d3347cfeea3b', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInitfa8bfc5d2717dd9298c7d3347cfeea3b', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInitfa8bfc5d2717dd9298c7d3347cfeea3b::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
48
  $loader->register(true);
49
 
50
  if ($useStaticLoader) {
51
+ $includeFiles = Composer\Autoload\ComposerStaticInitfa8bfc5d2717dd9298c7d3347cfeea3b::$files;
52
  } else {
53
  $includeFiles = require __DIR__ . '/autoload_files.php';
54
  }
55
  foreach ($includeFiles as $fileIdentifier => $file) {
56
+ composerRequirefa8bfc5d2717dd9298c7d3347cfeea3b($fileIdentifier, $file);
57
  }
58
 
59
  return $loader;
60
  }
61
  }
62
 
63
+ function composerRequirefa8bfc5d2717dd9298c7d3347cfeea3b($fileIdentifier, $file)
64
  {
65
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
66
  require $file;
vendor/composer/autoload_static.php CHANGED
@@ -4,10 +4,10 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit337744729a91b1fdea5f68820e3d1dfe
8
  {
9
  public static $files = array (
10
- '7e702cccdb9dd904f2ccf22e5f37abae' => __DIR__ . '/..' . '/facebook/php-sdk-v4/src/Facebook/polyfills.php',
11
  );
12
 
13
  public static $prefixLengthsPsr4 = array (
@@ -33,7 +33,7 @@ class ComposerStaticInit337744729a91b1fdea5f68820e3d1dfe
33
  ),
34
  'Facebook\\' =>
35
  array (
36
- 0 => __DIR__ . '/..' . '/facebook/php-sdk-v4/src/Facebook',
37
  ),
38
  );
39
 
@@ -122,9 +122,9 @@ class ComposerStaticInit337744729a91b1fdea5f68820e3d1dfe
122
  public static function getInitializer(ClassLoader $loader)
123
  {
124
  return \Closure::bind(function () use ($loader) {
125
- $loader->prefixLengthsPsr4 = ComposerStaticInit337744729a91b1fdea5f68820e3d1dfe::$prefixLengthsPsr4;
126
- $loader->prefixDirsPsr4 = ComposerStaticInit337744729a91b1fdea5f68820e3d1dfe::$prefixDirsPsr4;
127
- $loader->classMap = ComposerStaticInit337744729a91b1fdea5f68820e3d1dfe::$classMap;
128
 
129
  }, null, ClassLoader::class);
130
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInitfa8bfc5d2717dd9298c7d3347cfeea3b
8
  {
9
  public static $files = array (
10
+ 'c65d09b6820da036953a371c8c73a9b1' => __DIR__ . '/..' . '/facebook/graph-sdk/src/Facebook/polyfills.php',
11
  );
12
 
13
  public static $prefixLengthsPsr4 = array (
33
  ),
34
  'Facebook\\' =>
35
  array (
36
+ 0 => __DIR__ . '/..' . '/facebook/graph-sdk/src/Facebook',
37
  ),
38
  );
39
 
122
  public static function getInitializer(ClassLoader $loader)
123
  {
124
  return \Closure::bind(function () use ($loader) {
125
+ $loader->prefixLengthsPsr4 = ComposerStaticInitfa8bfc5d2717dd9298c7d3347cfeea3b::$prefixLengthsPsr4;
126
+ $loader->prefixDirsPsr4 = ComposerStaticInitfa8bfc5d2717dd9298c7d3347cfeea3b::$prefixDirsPsr4;
127
+ $loader->classMap = ComposerStaticInitfa8bfc5d2717dd9298c7d3347cfeea3b::$classMap;
128
 
129
  }, null, ClassLoader::class);
130
  }
vendor/composer/installed.json CHANGED
@@ -1,49 +1,72 @@
1
  [
2
  {
3
- "name": "apache/log4php",
4
- "version": "2.3.0",
5
- "version_normalized": "2.3.0.0",
6
  "source": {
7
  "type": "git",
8
- "url": "https://git-wip-us.apache.org/repos/asf/logging-log4php.git",
9
- "reference": "8c6df2481cd68d0d211d38f700406c5f0a9de0c2"
 
 
 
 
 
 
10
  },
11
  "require": {
12
- "php": ">=5.2.7"
13
  },
14
- "time": "2012-10-26 09:13:25",
15
  "type": "library",
16
- "installation-source": "source",
 
 
 
 
 
17
  "autoload": {
18
- "classmap": [
19
- "src/main/php/"
 
 
 
20
  ]
21
  },
22
  "notification-url": "https://packagist.org/downloads/",
23
  "license": [
24
- "Apache-2.0"
25
  ],
26
- "description": "A versatile logging framework for PHP",
27
- "homepage": "http://logging.apache.org/log4php/",
28
- "keywords": [
29
- "log",
30
- "logging",
31
- "php"
32
- ]
 
 
 
 
 
 
 
 
 
33
  },
34
  {
35
- "name": "facebook/php-sdk-v4",
36
- "version": "5.3.1",
37
- "version_normalized": "5.3.1.0",
38
  "source": {
39
  "type": "git",
40
  "url": "https://github.com/facebook/php-graph-sdk.git",
41
- "reference": "7ed1ecdae6a5b2f8b8f60e132d06594b39b16fb1"
42
  },
43
  "dist": {
44
  "type": "zip",
45
- "url": "https://api.github.com/repos/facebook/php-graph-sdk/zipball/7ed1ecdae6a5b2f8b8f60e132d06594b39b16fb1",
46
- "reference": "7ed1ecdae6a5b2f8b8f60e132d06594b39b16fb1",
47
  "shasum": ""
48
  },
49
  "require": {
@@ -55,9 +78,10 @@
55
  "phpunit/phpunit": "~4.0"
56
  },
57
  "suggest": {
58
- "guzzlehttp/guzzle": "Allows for implementation of the Guzzle HTTP client"
 
59
  },
60
- "time": "2016-08-09 11:32:26",
61
  "type": "library",
62
  "extra": {
63
  "branch-alias": {
@@ -80,90 +104,66 @@
80
  "authors": [
81
  {
82
  "name": "Facebook",
83
- "homepage": "https://github.com/facebook/facebook-php-sdk-v4/contributors"
84
  }
85
  ],
86
  "description": "Facebook SDK for PHP",
87
- "homepage": "https://github.com/facebook/facebook-php-sdk-v4",
88
  "keywords": [
89
  "facebook",
90
  "sdk"
91
- ],
92
- "abandoned": "facebook/graph-sdk"
93
  },
94
  {
95
- "name": "symfony/css-selector",
96
- "version": "v2.8.11",
97
- "version_normalized": "2.8.11.0",
98
  "source": {
99
  "type": "git",
100
- "url": "https://github.com/symfony/css-selector.git",
101
- "reference": "71c8c3a04c126300c37089b1baa7c6322dfb845f"
102
- },
103
- "dist": {
104
- "type": "zip",
105
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/71c8c3a04c126300c37089b1baa7c6322dfb845f",
106
- "reference": "71c8c3a04c126300c37089b1baa7c6322dfb845f",
107
- "shasum": ""
108
  },
109
  "require": {
110
- "php": ">=5.3.9"
111
  },
112
- "time": "2016-09-06 10:55:00",
113
  "type": "library",
114
- "extra": {
115
- "branch-alias": {
116
- "dev-master": "2.8-dev"
117
- }
118
- },
119
- "installation-source": "dist",
120
  "autoload": {
121
- "psr-4": {
122
- "Symfony\\Component\\CssSelector\\": ""
123
- },
124
- "exclude-from-classmap": [
125
- "/Tests/"
126
  ]
127
  },
128
  "notification-url": "https://packagist.org/downloads/",
129
  "license": [
130
- "MIT"
131
- ],
132
- "authors": [
133
- {
134
- "name": "Jean-François Simon",
135
- "email": "jeanfrancois.simon@sensiolabs.com"
136
- },
137
- {
138
- "name": "Fabien Potencier",
139
- "email": "fabien@symfony.com"
140
- },
141
- {
142
- "name": "Symfony Community",
143
- "homepage": "https://symfony.com/contributors"
144
- }
145
  ],
146
- "description": "Symfony CssSelector Component",
147
- "homepage": "https://symfony.com"
 
 
 
 
 
148
  },
149
  {
150
  "name": "facebook/facebook-instant-articles-sdk-php",
151
- "version": "v1.5.0",
152
- "version_normalized": "1.5.0.0",
153
  "source": {
154
  "type": "git",
155
  "url": "https://github.com/facebook/facebook-instant-articles-sdk-php.git",
156
- "reference": "e7ba342acea3106a83210196c952fbbed0f0fe30"
157
  },
158
  "dist": {
159
  "type": "zip",
160
- "url": "https://api.github.com/repos/facebook/facebook-instant-articles-sdk-php/zipball/e7ba342acea3106a83210196c952fbbed0f0fe30",
161
- "reference": "e7ba342acea3106a83210196c952fbbed0f0fe30",
162
  "shasum": ""
163
  },
164
  "require": {
165
  "apache/log4php": "2.3.0",
166
- "facebook/php-sdk-v4": "~5.0",
167
  "php": "^5.4 || ^7.0",
168
  "symfony/css-selector": "2.8.*"
169
  },
@@ -172,7 +172,7 @@
172
  "phpunit/phpunit": "^4.8",
173
  "squizlabs/php_codesniffer": "^2.6.0"
174
  },
175
- "time": "2016-08-26 13:55:03",
176
  "type": "library",
177
  "installation-source": "dist",
178
  "autoload": {
1
  [
2
  {
3
+ "name": "symfony/css-selector",
4
+ "version": "v2.8.14",
5
+ "version_normalized": "2.8.14.0",
6
  "source": {
7
  "type": "git",
8
+ "url": "https://github.com/symfony/css-selector.git",
9
+ "reference": "981abbbd6ba49af338a98490cbe29e7f39ca9fa9"
10
+ },
11
+ "dist": {
12
+ "type": "zip",
13
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/981abbbd6ba49af338a98490cbe29e7f39ca9fa9",
14
+ "reference": "981abbbd6ba49af338a98490cbe29e7f39ca9fa9",
15
+ "shasum": ""
16
  },
17
  "require": {
18
+ "php": ">=5.3.9"
19
  },
20
+ "time": "2016-11-03 07:52:58",
21
  "type": "library",
22
+ "extra": {
23
+ "branch-alias": {
24
+ "dev-master": "2.8-dev"
25
+ }
26
+ },
27
+ "installation-source": "dist",
28
  "autoload": {
29
+ "psr-4": {
30
+ "Symfony\\Component\\CssSelector\\": ""
31
+ },
32
+ "exclude-from-classmap": [
33
+ "/Tests/"
34
  ]
35
  },
36
  "notification-url": "https://packagist.org/downloads/",
37
  "license": [
38
+ "MIT"
39
  ],
40
+ "authors": [
41
+ {
42
+ "name": "Jean-François Simon",
43
+ "email": "jeanfrancois.simon@sensiolabs.com"
44
+ },
45
+ {
46
+ "name": "Fabien Potencier",
47
+ "email": "fabien@symfony.com"
48
+ },
49
+ {
50
+ "name": "Symfony Community",
51
+ "homepage": "https://symfony.com/contributors"
52
+ }
53
+ ],
54
+ "description": "Symfony CssSelector Component",
55
+ "homepage": "https://symfony.com"
56
  },
57
  {
58
+ "name": "facebook/graph-sdk",
59
+ "version": "5.4.2",
60
+ "version_normalized": "5.4.2.0",
61
  "source": {
62
  "type": "git",
63
  "url": "https://github.com/facebook/php-graph-sdk.git",
64
+ "reference": "2839246e971aef150650196acbb46d47e5207370"
65
  },
66
  "dist": {
67
  "type": "zip",
68
+ "url": "https://api.github.com/repos/facebook/php-graph-sdk/zipball/2839246e971aef150650196acbb46d47e5207370",
69
+ "reference": "2839246e971aef150650196acbb46d47e5207370",
70
  "shasum": ""
71
  },
72
  "require": {
78
  "phpunit/phpunit": "~4.0"
79
  },
80
  "suggest": {
81
+ "guzzlehttp/guzzle": "Allows for implementation of the Guzzle HTTP client",
82
+ "paragonie/random_compat": "Provides a better CSPRNG option in PHP 5"
83
  },
84
+ "time": "2016-11-15 14:34:16",
85
  "type": "library",
86
  "extra": {
87
  "branch-alias": {
104
  "authors": [
105
  {
106
  "name": "Facebook",
107
+ "homepage": "https://github.com/facebook/php-graph-sdk/contributors"
108
  }
109
  ],
110
  "description": "Facebook SDK for PHP",
111
+ "homepage": "https://github.com/facebook/php-graph-sdk",
112
  "keywords": [
113
  "facebook",
114
  "sdk"
115
+ ]
 
116
  },
117
  {
118
+ "name": "apache/log4php",
119
+ "version": "2.3.0",
120
+ "version_normalized": "2.3.0.0",
121
  "source": {
122
  "type": "git",
123
+ "url": "https://git-wip-us.apache.org/repos/asf/logging-log4php.git",
124
+ "reference": "8c6df2481cd68d0d211d38f700406c5f0a9de0c2"
 
 
 
 
 
 
125
  },
126
  "require": {
127
+ "php": ">=5.2.7"
128
  },
129
+ "time": "2012-10-26 09:13:25",
130
  "type": "library",
131
+ "installation-source": "source",
 
 
 
 
 
132
  "autoload": {
133
+ "classmap": [
134
+ "src/main/php/"
 
 
 
135
  ]
136
  },
137
  "notification-url": "https://packagist.org/downloads/",
138
  "license": [
139
+ "Apache-2.0"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  ],
141
+ "description": "A versatile logging framework for PHP",
142
+ "homepage": "http://logging.apache.org/log4php/",
143
+ "keywords": [
144
+ "log",
145
+ "logging",
146
+ "php"
147
+ ]
148
  },
149
  {
150
  "name": "facebook/facebook-instant-articles-sdk-php",
151
+ "version": "v1.5.2",
152
+ "version_normalized": "1.5.2.0",
153
  "source": {
154
  "type": "git",
155
  "url": "https://github.com/facebook/facebook-instant-articles-sdk-php.git",
156
+ "reference": "563726feebd4c3a0132d33bb5b946d4b460a9fa7"
157
  },
158
  "dist": {
159
  "type": "zip",
160
+ "url": "https://api.github.com/repos/facebook/facebook-instant-articles-sdk-php/zipball/563726feebd4c3a0132d33bb5b946d4b460a9fa7",
161
+ "reference": "563726feebd4c3a0132d33bb5b946d4b460a9fa7",
162
  "shasum": ""
163
  },
164
  "require": {
165
  "apache/log4php": "2.3.0",
166
+ "facebook/graph-sdk": "~5.0",
167
  "php": "^5.4 || ^7.0",
168
  "symfony/css-selector": "2.8.*"
169
  },
172
  "phpunit/phpunit": "^4.8",
173
  "squizlabs/php_codesniffer": "^2.6.0"
174
  },
175
+ "time": "2016-10-07 18:26:43",
176
  "type": "library",
177
  "installation-source": "dist",
178
  "autoload": {
vendor/facebook/facebook-instant-articles-sdk-php/composer.json DELETED
@@ -1,47 +0,0 @@
1
- {
2
- "name": "facebook/facebook-instant-articles-sdk-php",
3
- "description": "Facebook Instant Articles SDK for PHP",
4
- "keywords": ["facebook", "sdk", "instant", "articles"],
5
- "type": "library",
6
- "homepage": "https://github.com/facebook/facebook-instant-articles-sdk-php",
7
- "license": "proprietary",
8
- "authors": [{
9
- "name": "Facebook",
10
- "homepage": "https://github.com/facebook/facebook-instant-articles-sdk-php/contributors"
11
- }],
12
- "require": {
13
- "php": "^5.4 || ^7.0",
14
- "symfony/css-selector": "2.8.*",
15
- "facebook/php-sdk-v4": "~5.0",
16
- "apache/log4php": "2.3.0"
17
- },
18
- "require-dev": {
19
- "fzaninotto/faker": "^1.6.0",
20
- "phpunit/phpunit": "^4.8",
21
- "squizlabs/php_codesniffer": "^2.6.0"
22
- },
23
- "autoload": {
24
- "psr-4": {
25
- "Facebook\\InstantArticles\\": "src/Facebook/InstantArticles/"
26
- }
27
- },
28
- "autoload-dev": {
29
- "psr-4": {
30
- "Facebook\\InstantArticles\\": "tests/Facebook/InstantArticles/"
31
- }
32
- },
33
- "scripts": {
34
- "all": [
35
- "@cs",
36
- "@test"
37
- ],
38
- "cs": [
39
- "composer install",
40
- "phpcbf --standard=phpcs.xml -p || phpcs --standard=phpcs.xml -p"
41
- ],
42
- "test": [
43
- "composer install",
44
- "phpunit"
45
- ]
46
- }
47
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/facebook/facebook-instant-articles-sdk-php/composer.lock DELETED
@@ -1,1245 +0,0 @@
1
- {
2
- "_readme": [
3
- "This file locks the dependencies of your project to a known state",
4
- "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
5
- "This file is @generated automatically"
6
- ],
7
- "hash": "1cb48da59b04851b1ddcce5ac4a16e91",
8
- "content-hash": "e47809dbb41d3cf5a6049a4db9fe2301",
9
- "packages": [
10
- {
11
- "name": "apache/log4php",
12
- "version": "2.3.0",
13
- "source": {
14
- "type": "git",
15
- "url": "https://git-wip-us.apache.org/repos/asf/logging-log4php.git",
16
- "reference": "8c6df2481cd68d0d211d38f700406c5f0a9de0c2"
17
- },
18
- "require": {
19
- "php": ">=5.2.7"
20
- },
21
- "type": "library",
22
- "autoload": {
23
- "classmap": [
24
- "src/main/php/"
25
- ]
26
- },
27
- "notification-url": "https://packagist.org/downloads/",
28
- "license": [
29
- "Apache-2.0"
30
- ],
31
- "description": "A versatile logging framework for PHP",
32
- "homepage": "http://logging.apache.org/log4php/",
33
- "keywords": [
34
- "log",
35
- "logging",
36
- "php"
37
- ],
38
- "time": "2012-10-26 09:13:25"
39
- },
40
- {
41
- "name": "facebook/php-sdk-v4",
42
- "version": "5.2.0",
43
- "source": {
44
- "type": "git",
45
- "url": "https://github.com/facebook/facebook-php-sdk-v4.git",
46
- "reference": "c60fba1fe1de62db1e0776d32fc2fb778189459c"
47
- },
48
- "dist": {
49
- "type": "zip",
50
- "url": "https://api.github.com/repos/facebook/facebook-php-sdk-v4/zipball/c60fba1fe1de62db1e0776d32fc2fb778189459c",
51
- "reference": "c60fba1fe1de62db1e0776d32fc2fb778189459c",
52
- "shasum": ""
53
- },
54
- "require": {
55
- "php": "^5.4|^7.0"
56
- },
57
- "require-dev": {
58
- "guzzlehttp/guzzle": "~5.0",
59
- "mockery/mockery": "~0.8",
60
- "phpunit/phpunit": "~4.0"
61
- },
62
- "suggest": {
63
- "guzzlehttp/guzzle": "Allows for implementation of the Guzzle HTTP client"
64
- },
65
- "type": "library",
66
- "extra": {
67
- "branch-alias": {
68
- "dev-master": "5.x-dev"
69
- }
70
- },
71
- "autoload": {
72
- "psr-4": {
73
- "Facebook\\": "src/Facebook/"
74
- },
75
- "files": [
76
- "src/Facebook/polyfills.php"
77
- ]
78
- },
79
- "notification-url": "https://packagist.org/downloads/",
80
- "license": [
81
- "Facebook Platform"
82
- ],
83
- "authors": [
84
- {
85
- "name": "Facebook",
86
- "homepage": "https://github.com/facebook/facebook-php-sdk-v4/contributors"
87
- }
88
- ],
89
- "description": "Facebook SDK for PHP",
90
- "homepage": "https://github.com/facebook/facebook-php-sdk-v4",
91
- "keywords": [
92
- "facebook",
93
- "sdk"
94
- ],
95
- "time": "2016-05-18 22:04:36"
96
- },
97
- {
98
- "name": "symfony/css-selector",
99
- "version": "v2.8.7",
100
- "source": {
101
- "type": "git",
102
- "url": "https://github.com/symfony/css-selector.git",
103
- "reference": "9a0b2649328297fb6acd0c823789d92efcbd36ad"
104
- },
105
- "dist": {
106
- "type": "zip",
107
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/9a0b2649328297fb6acd0c823789d92efcbd36ad",
108
- "reference": "9a0b2649328297fb6acd0c823789d92efcbd36ad",
109
- "shasum": ""
110
- },
111
- "require": {
112
- "php": ">=5.3.9"
113
- },
114
- "type": "library",
115
- "extra": {
116
- "branch-alias": {
117
- "dev-master": "2.8-dev"
118
- }
119
- },
120
- "autoload": {
121
- "psr-4": {
122
- "Symfony\\Component\\CssSelector\\": ""
123
- },
124
- "exclude-from-classmap": [
125
- "/Tests/"
126
- ]
127
- },
128
- "notification-url": "https://packagist.org/downloads/",
129
- "license": [
130
- "MIT"
131
- ],
132
- "authors": [
133
- {
134
- "name": "Jean-François Simon",
135
- "email": "jeanfrancois.simon@sensiolabs.com"
136
- },
137
- {
138
- "name": "Fabien Potencier",
139
- "email": "fabien@symfony.com"
140
- },
141
- {
142
- "name": "Symfony Community",
143
- "homepage": "https://symfony.com/contributors"
144
- }
145
- ],
146
- "description": "Symfony CssSelector Component",
147
- "homepage": "https://symfony.com",
148
- "time": "2016-06-06 11:11:27"
149
- }
150
- ],
151
- "packages-dev": [
152
- {
153
- "name": "doctrine/instantiator",
154
- "version": "1.0.5",
155
- "source": {
156
- "type": "git",
157
- "url": "https://github.com/doctrine/instantiator.git",
158
- "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
159
- },
160
- "dist": {
161
- "type": "zip",
162
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
163
- "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
164
- "shasum": ""
165
- },
166
- "require": {
167
- "php": ">=5.3,<8.0-DEV"
168
- },
169
- "require-dev": {
170
- "athletic/athletic": "~0.1.8",
171
- "ext-pdo": "*",
172
- "ext-phar": "*",
173
- "phpunit/phpunit": "~4.0",
174
- "squizlabs/php_codesniffer": "~2.0"
175
- },
176
- "type": "library",
177
- "extra": {
178
- "branch-alias": {
179
- "dev-master": "1.0.x-dev"
180
- }
181
- },
182
- "autoload": {
183
- "psr-4": {
184
- "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
185
- }
186
- },
187
- "notification-url": "https://packagist.org/downloads/",
188
- "license": [
189
- "MIT"
190
- ],
191
- "authors": [
192
- {
193
- "name": "Marco Pivetta",
194
- "email": "ocramius@gmail.com",
195
- "homepage": "http://ocramius.github.com/"
196
- }
197
- ],
198
- "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
199
- "homepage": "https://github.com/doctrine/instantiator",
200
- "keywords": [
201
- "constructor",
202
- "instantiate"
203
- ],
204
- "time": "2015-06-14 21:17:01"
205
- },
206
- {
207
- "name": "fzaninotto/faker",
208
- "version": "v1.6.0",
209
- "source": {
210
- "type": "git",
211
- "url": "https://github.com/fzaninotto/Faker.git",
212
- "reference": "44f9a286a04b80c76a4e5fb7aad8bb539b920123"
213
- },
214
- "dist": {
215
- "type": "zip",
216
- "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/44f9a286a04b80c76a4e5fb7aad8bb539b920123",
217
- "reference": "44f9a286a04b80c76a4e5fb7aad8bb539b920123",
218
- "shasum": ""
219
- },
220
- "require": {
221
- "php": "^5.3.3|^7.0"
222
- },
223
- "require-dev": {
224
- "ext-intl": "*",
225
- "phpunit/phpunit": "~4.0",
226
- "squizlabs/php_codesniffer": "~1.5"
227
- },
228
- "type": "library",
229
- "extra": {
230
- "branch-alias": []
231
- },
232
- "autoload": {
233
- "psr-4": {
234
- "Faker\\": "src/Faker/"
235
- }
236
- },
237
- "notification-url": "https://packagist.org/downloads/",
238
- "license": [
239
- "MIT"
240
- ],
241
- "authors": [
242
- {
243
- "name": "François Zaninotto"
244
- }
245
- ],
246
- "description": "Faker is a PHP library that generates fake data for you.",
247
- "keywords": [
248
- "data",
249
- "faker",
250
- "fixtures"
251
- ],
252
- "time": "2016-04-29 12:21:54"
253
- },
254
- {
255
- "name": "phpdocumentor/reflection-docblock",
256
- "version": "2.0.4",
257
- "source": {
258
- "type": "git",
259
- "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
260
- "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
261
- },
262
- "dist": {
263
- "type": "zip",
264
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
265
- "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
266
- "shasum": ""
267
- },
268
- "require": {
269
- "php": ">=5.3.3"
270
- },
271
- "require-dev": {
272
- "phpunit/phpunit": "~4.0"
273
- },
274
- "suggest": {
275
- "dflydev/markdown": "~1.0",
276
- "erusev/parsedown": "~1.0"
277
- },
278
- "type": "library",
279
- "extra": {
280
- "branch-alias": {
281
- "dev-master": "2.0.x-dev"
282
- }
283
- },
284
- "autoload": {
285
- "psr-0": {
286
- "phpDocumentor": [
287
- "src/"
288
- ]
289
- }
290
- },
291
- "notification-url": "https://packagist.org/downloads/",
292
- "license": [
293
- "MIT"
294
- ],
295
- "authors": [
296
- {
297
- "name": "Mike van Riel",
298
- "email": "mike.vanriel@naenius.com"
299
- }
300
- ],
301
- "time": "2015-02-03 12:10:50"
302
- },
303
- {
304
- "name": "phpspec/prophecy",
305
- "version": "v1.6.1",
306
- "source": {
307
- "type": "git",
308
- "url": "https://github.com/phpspec/prophecy.git",
309
- "reference": "58a8137754bc24b25740d4281399a4a3596058e0"
310
- },
311
- "dist": {
312
- "type": "zip",
313
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0",
314
- "reference": "58a8137754bc24b25740d4281399a4a3596058e0",
315
- "shasum": ""
316
- },
317
- "require": {
318
- "doctrine/instantiator": "^1.0.2",
319
- "php": "^5.3|^7.0",
320
- "phpdocumentor/reflection-docblock": "^2.0|^3.0.2",
321
- "sebastian/comparator": "^1.1",
322
- "sebastian/recursion-context": "^1.0"
323
- },
324
- "require-dev": {
325
- "phpspec/phpspec": "^2.0"
326
- },
327
- "type": "library",
328
- "extra": {
329
- "branch-alias": {
330
- "dev-master": "1.6.x-dev"
331
- }
332
- },
333
- "autoload": {
334
- "psr-0": {
335
- "Prophecy\\": "src/"
336
- }
337
- },
338
- "notification-url": "https://packagist.org/downloads/",
339
- "license": [
340
- "MIT"
341
- ],
342
- "authors": [
343
- {
344
- "name": "Konstantin Kudryashov",
345
- "email": "ever.zet@gmail.com",
346
- "homepage": "http://everzet.com"
347
- },
348
- {
349
- "name": "Marcello Duarte",
350
- "email": "marcello.duarte@gmail.com"
351
- }
352
- ],
353
- "description": "Highly opinionated mocking framework for PHP 5.3+",
354
- "homepage": "https://github.com/phpspec/prophecy",
355
- "keywords": [
356
- "Double",
357
- "Dummy",
358
- "fake",
359
- "mock",
360
- "spy",
361
- "stub"
362
- ],
363
- "time": "2016-06-07 08:13:47"
364
- },
365
- {
366
- "name": "phpunit/php-code-coverage",
367
- "version": "2.2.4",
368
- "source": {
369
- "type": "git",
370
- "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
371
- "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
372
- },
373
- "dist": {
374
- "type": "zip",
375
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
376
- "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
377
- "shasum": ""
378
- },
379
- "require": {
380
- "php": ">=5.3.3",
381
- "phpunit/php-file-iterator": "~1.3",
382
- "phpunit/php-text-template": "~1.2",
383
- "phpunit/php-token-stream": "~1.3",
384
- "sebastian/environment": "^1.3.2",
385
- "sebastian/version": "~1.0"
386
- },
387
- "require-dev": {
388
- "ext-xdebug": ">=2.1.4",
389
- "phpunit/phpunit": "~4"
390
- },
391
- "suggest": {
392
- "ext-dom": "*",
393
- "ext-xdebug": ">=2.2.1",
394
- "ext-xmlwriter": "*"
395
- },
396
- "type": "library",
397
- "extra": {
398
- "branch-alias": {
399
- "dev-master": "2.2.x-dev"
400
- }
401
- },
402
- "autoload": {
403
- "classmap": [
404
- "src/"
405
- ]
406
- },
407
- "notification-url": "https://packagist.org/downloads/",
408
- "license": [
409
- "BSD-3-Clause"
410
- ],
411
- "authors": [
412
- {
413
- "name": "Sebastian Bergmann",
414
- "email": "sb@sebastian-bergmann.de",
415
- "role": "lead"
416
- }
417
- ],
418
- "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
419
- "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
420
- "keywords": [
421
- "coverage",
422
- "testing",
423
- "xunit"
424
- ],
425
- "time": "2015-10-06 15:47:00"
426
- },
427
- {
428
- "name": "phpunit/php-file-iterator",
429
- "version": "1.4.1",
430
- "source": {
431
- "type": "git",
432
- "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
433
- "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0"
434
- },
435
- "dist": {
436
- "type": "zip",
437
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
438
- "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
439
- "shasum": ""
440
- },
441
- "require": {
442
- "php": ">=5.3.3"
443
- },
444
- "type": "library",
445
- "extra": {
446
- "branch-alias": {
447
- "dev-master": "1.4.x-dev"
448
- }
449
- },
450
- "autoload": {
451
- "classmap": [
452
- "src/"
453
- ]
454
- },
455
- "notification-url": "https://packagist.org/downloads/",
456
- "license": [
457
- "BSD-3-Clause"
458
- ],
459
- "authors": [
460
- {
461
- "name": "Sebastian Bergmann",
462
- "email": "sb@sebastian-bergmann.de",
463
- "role": "lead"
464
- }
465
- ],
466
- "description": "FilterIterator implementation that filters files based on a list of suffixes.",
467
- "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
468
- "keywords": [
469
- "filesystem",
470
- "iterator"
471
- ],
472
- "time": "2015-06-21 13:08:43"
473
- },
474
- {
475
- "name": "phpunit/php-text-template",
476
- "version": "1.2.1",
477
- "source": {
478
- "type": "git",
479
- "url": "https://github.com/sebastianbergmann/php-text-template.git",
480
- "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
481
- },
482
- "dist": {
483
- "type": "zip",
484
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
485
- "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
486
- "shasum": ""
487
- },
488
- "require": {
489
- "php": ">=5.3.3"
490
- },
491
- "type": "library",
492
- "autoload": {
493
- "classmap": [
494
- "src/"
495
- ]
496
- },
497
- "notification-url": "https://packagist.org/downloads/",
498
- "license": [
499
- "BSD-3-Clause"
500
- ],
501
- "authors": [
502
- {
503
- "name": "Sebastian Bergmann",
504
- "email": "sebastian@phpunit.de",
505
- "role": "lead"
506
- }
507
- ],
508
- "description": "Simple template engine.",
509
- "homepage": "https://github.com/sebastianbergmann/php-text-template/",
510
- "keywords": [
511
- "template"
512
- ],
513
- "time": "2015-06-21 13:50:34"
514
- },
515
- {
516
- "name": "phpunit/php-timer",
517
- "version": "1.0.8",
518
- "source": {
519
- "type": "git",
520
- "url": "https://github.com/sebastianbergmann/php-timer.git",
521
- "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260"
522
- },
523
- "dist": {
524
- "type": "zip",
525
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260",
526
- "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260",
527
- "shasum": ""
528
- },
529
- "require": {
530
- "php": ">=5.3.3"
531
- },
532
- "require-dev": {
533
- "phpunit/phpunit": "~4|~5"
534
- },
535
- "type": "library",
536
- "autoload": {
537
- "classmap": [
538
- "src/"
539
- ]
540
- },
541
- "notification-url": "https://packagist.org/downloads/",
542
- "license": [
543
- "BSD-3-Clause"
544
- ],
545
- "authors": [
546
- {
547
- "name": "Sebastian Bergmann",
548
- "email": "sb@sebastian-bergmann.de",
549
- "role": "lead"
550
- }
551
- ],
552
- "description": "Utility class for timing",
553
- "homepage": "https://github.com/sebastianbergmann/php-timer/",
554
- "keywords": [
555
- "timer"
556
- ],
557
- "time": "2016-05-12 18:03:57"
558
- },
559
- {
560
- "name": "phpunit/php-token-stream",
561
- "version": "1.4.8",
562
- "source": {
563
- "type": "git",
564
- "url": "https://github.com/sebastianbergmann/php-token-stream.git",
565
- "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da"
566
- },
567
- "dist": {
568
- "type": "zip",
569
- "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da",
570
- "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da",
571
- "shasum": ""
572
- },
573
- "require": {
574
- "ext-tokenizer": "*",
575
- "php": ">=5.3.3"
576
- },
577
- "require-dev": {
578
- "phpunit/phpunit": "~4.2"
579
- },
580
- "type": "library",
581
- "extra": {
582
- "branch-alias": {
583
- "dev-master": "1.4-dev"
584
- }
585
- },
586
- "autoload": {
587
- "classmap": [
588
- "src/"
589
- ]
590
- },
591
- "notification-url": "https://packagist.org/downloads/",
592
- "license": [
593
- "BSD-3-Clause"
594
- ],
595
- "authors": [
596
- {
597
- "name": "Sebastian Bergmann",
598
- "email": "sebastian@phpunit.de"
599
- }
600
- ],
601
- "description": "Wrapper around PHP's tokenizer extension.",
602
- "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
603
- "keywords": [
604
- "tokenizer"
605
- ],
606
- "time": "2015-09-15 10:49:45"
607
- },
608
- {
609
- "name": "phpunit/phpunit",
610
- "version": "4.8.26",
611
- "source": {
612
- "type": "git",
613
- "url": "https://github.com/sebastianbergmann/phpunit.git",
614
- "reference": "fc1d8cd5b5de11625979125c5639347896ac2c74"
615
- },
616
- "dist": {
617
- "type": "zip",
618
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fc1d8cd5b5de11625979125c5639347896ac2c74",
619
- "reference": "fc1d8cd5b5de11625979125c5639347896ac2c74",
620
- "shasum": ""
621
- },
622
- "require": {
623
- "ext-dom": "*",
624
- "ext-json": "*",
625
- "ext-pcre": "*",
626
- "ext-reflection": "*",
627
- "ext-spl": "*",
628
- "php": ">=5.3.3",
629
- "phpspec/prophecy": "^1.3.1",
630
- "phpunit/php-code-coverage": "~2.1",
631
- "phpunit/php-file-iterator": "~1.4",
632
- "phpunit/php-text-template": "~1.2",
633
- "phpunit/php-timer": "^1.0.6",
634
- "phpunit/phpunit-mock-objects": "~2.3",
635
- "sebastian/comparator": "~1.1",
636
- "sebastian/diff": "~1.2",
637
- "sebastian/environment": "~1.3",
638
- "sebastian/exporter": "~1.2",
639
- "sebastian/global-state": "~1.0",
640
- "sebastian/version": "~1.0",
641
- "symfony/yaml": "~2.1|~3.0"
642
- },
643
- "suggest": {
644
- "phpunit/php-invoker": "~1.1"
645
- },
646
- "bin": [
647
- "phpunit"
648
- ],
649
- "type": "library",
650
- "extra": {
651
- "branch-alias": {
652
- "dev-master": "4.8.x-dev"
653
- }
654
- },
655
- "autoload": {
656
- "classmap": [
657
- "src/"
658
- ]
659
- },
660
- "notification-url": "https://packagist.org/downloads/",
661
- "license": [
662
- "BSD-3-Clause"
663
- ],
664
- "authors": [
665
- {
666
- "name": "Sebastian Bergmann",
667
- "email": "sebastian@phpunit.de",
668
- "role": "lead"
669
- }
670
- ],
671
- "description": "The PHP Unit Testing framework.",
672
- "homepage": "https://phpunit.de/",
673
- "keywords": [
674
- "phpunit",
675
- "testing",
676
- "xunit"
677
- ],
678
- "time": "2016-05-17 03:09:28"
679
- },
680
- {
681
- "name": "phpunit/phpunit-mock-objects",
682
- "version": "2.3.8",
683
- "source": {
684
- "type": "git",
685
- "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
686
- "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
687
- },
688
- "dist": {
689
- "type": "zip",
690
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
691
- "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
692
- "shasum": ""
693
- },
694
- "require": {
695
- "doctrine/instantiator": "^1.0.2",
696
- "php": ">=5.3.3",
697
- "phpunit/php-text-template": "~1.2",
698
- "sebastian/exporter": "~1.2"
699
- },
700
- "require-dev": {
701
- "phpunit/phpunit": "~4.4"
702
- },
703
- "suggest": {
704
- "ext-soap": "*"
705
- },
706
- "type": "library",
707
- "extra": {
708
- "branch-alias": {
709
- "dev-master": "2.3.x-dev"
710
- }
711
- },
712
- "autoload": {
713
- "classmap": [
714
- "src/"
715
- ]
716
- },
717
- "notification-url": "https://packagist.org/downloads/",
718
- "license": [
719
- "BSD-3-Clause"
720
- ],
721
- "authors": [
722
- {
723
- "name": "Sebastian Bergmann",
724
- "email": "sb@sebastian-bergmann.de",
725
- "role": "lead"
726
- }
727
- ],
728
- "description": "Mock Object library for PHPUnit",
729
- "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
730
- "keywords": [
731
- "mock",
732
- "xunit"
733
- ],
734
- "time": "2015-10-02 06:51:40"
735
- },
736
- {
737
- "name": "sebastian/comparator",
738
- "version": "1.2.0",
739
- "source": {
740
- "type": "git",
741
- "url": "https://github.com/sebastianbergmann/comparator.git",
742
- "reference": "937efb279bd37a375bcadf584dec0726f84dbf22"
743
- },
744
- "dist": {
745
- "type": "zip",
746
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22",
747
- "reference": "937efb279bd37a375bcadf584dec0726f84dbf22",
748
- "shasum": ""
749
- },
750
- "require": {
751
- "php": ">=5.3.3",
752
- "sebastian/diff": "~1.2",
753
- "sebastian/exporter": "~1.2"
754
- },
755
- "require-dev": {
756
- "phpunit/phpunit": "~4.4"
757
- },
758
- "type": "library",
759
- "extra": {
760
- "branch-alias": {
761
- "dev-master": "1.2.x-dev"
762
- }
763
- },
764
- "autoload": {
765
- "classmap": [
766
- "src/"
767
- ]
768
- },
769
- "notification-url": "https://packagist.org/downloads/",
770
- "license": [
771
- "BSD-3-Clause"
772
- ],
773
- "authors": [
774
- {
775
- "name": "Jeff Welch",
776
- "email": "whatthejeff@gmail.com"
777
- },
778
- {
779
- "name": "Volker Dusch",
780
- "email": "github@wallbash.com"
781
- },
782
- {
783
- "name": "Bernhard Schussek",
784
- "email": "bschussek@2bepublished.at"
785
- },
786
- {
787
- "name": "Sebastian Bergmann",
788
- "email": "sebastian@phpunit.de"
789
- }
790
- ],
791
- "description": "Provides the functionality to compare PHP values for equality",
792
- "homepage": "http://www.github.com/sebastianbergmann/comparator",
793
- "keywords": [
794
- "comparator",
795
- "compare",
796
- "equality"
797
- ],
798
- "time": "2015-07-26 15:48:44"
799
- },
800
- {
801
- "name": "sebastian/diff",
802
- "version": "1.4.1",
803
- "source": {
804
- "type": "git",
805
- "url": "https://github.com/sebastianbergmann/diff.git",
806
- "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e"
807
- },
808
- "dist": {
809
- "type": "zip",
810
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
811
- "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e",
812
- "shasum": ""
813
- },
814
- "require": {
815
- "php": ">=5.3.3"
816
- },
817
- "require-dev": {
818
- "phpunit/phpunit": "~4.8"
819
- },
820
- "type": "library",
821
- "extra": {
822
- "branch-alias": {
823
- "dev-master": "1.4-dev"
824
- }
825
- },
826
- "autoload": {
827
- "classmap": [
828
- "src/"
829
- ]
830
- },
831
- "notification-url": "https://packagist.org/downloads/",
832
- "license": [
833
- "BSD-3-Clause"
834
- ],
835
- "authors": [
836
- {
837
- "name": "Kore Nordmann",
838
- "email": "mail@kore-nordmann.de"
839
- },
840
- {
841
- "name": "Sebastian Bergmann",
842
- "email": "sebastian@phpunit.de"
843
- }
844
- ],
845
- "description": "Diff implementation",
846
- "homepage": "https://github.com/sebastianbergmann/diff",
847
- "keywords": [
848
- "diff"
849
- ],
850
- "time": "2015-12-08 07:14:41"
851
- },
852
- {
853
- "name": "sebastian/environment",
854
- "version": "1.3.7",
855
- "source": {
856
- "type": "git",
857
- "url": "https://github.com/sebastianbergmann/environment.git",
858
- "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716"
859
- },
860
- "dist": {
861
- "type": "zip",
862
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4e8f0da10ac5802913afc151413bc8c53b6c2716",
863
- "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716",
864
- "shasum": ""
865
- },
866
- "require": {
867
- "php": ">=5.3.3"
868
- },
869
- "require-dev": {
870
- "phpunit/phpunit": "~4.4"
871
- },
872
- "type": "library",
873
- "extra": {
874
- "branch-alias": {
875
- "dev-master": "1.3.x-dev"
876
- }
877
- },
878
- "autoload": {
879
- "classmap": [
880
- "src/"
881
- ]
882
- },
883
- "notification-url": "https://packagist.org/downloads/",
884
- "license": [
885
- "BSD-3-Clause"
886
- ],
887
- "authors": [
888
- {
889
- "name": "Sebastian Bergmann",
890
- "email": "sebastian@phpunit.de"
891
- }
892
- ],
893
- "description": "Provides functionality to handle HHVM/PHP environments",
894
- "homepage": "http://www.github.com/sebastianbergmann/environment",
895
- "keywords": [
896
- "Xdebug",
897
- "environment",
898
- "hhvm"
899
- ],
900
- "time": "2016-05-17 03:18:57"
901
- },
902
- {
903
- "name": "sebastian/exporter",
904
- "version": "1.2.2",
905
- "source": {
906
- "type": "git",
907
- "url": "https://github.com/sebastianbergmann/exporter.git",
908
- "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
909
- },
910
- "dist": {
911
- "type": "zip",
912
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
913
- "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
914
- "shasum": ""
915
- },
916
- "require": {
917
- "php": ">=5.3.3",
918
- "sebastian/recursion-context": "~1.0"
919
- },
920
- "require-dev": {
921
- "ext-mbstring": "*",
922
- "phpunit/phpunit": "~4.4"
923
- },
924
- "type": "library",
925
- "extra": {
926
- "branch-alias": {
927
- "dev-master": "1.3.x-dev"
928
- }
929
- },
930
- "autoload": {
931
- "classmap": [
932
- "src/"
933
- ]
934
- },
935
- "notification-url": "https://packagist.org/downloads/",
936
- "license": [
937
- "BSD-3-Clause"
938
- ],
939
- "authors": [
940
- {
941
- "name": "Jeff Welch",
942
- "email": "whatthejeff@gmail.com"
943
- },
944
- {
945
- "name": "Volker Dusch",
946
- "email": "github@wallbash.com"
947
- },
948
- {
949
- "name": "Bernhard Schussek",
950
- "email": "bschussek@2bepublished.at"
951
- },
952
- {
953
- "name": "Sebastian Bergmann",
954
- "email": "sebastian@phpunit.de"
955
- },
956
- {
957
- "name": "Adam Harvey",
958
- "email": "aharvey@php.net"
959
- }
960
- ],
961
- "description": "Provides the functionality to export PHP variables for visualization",
962
- "homepage": "http://www.github.com/sebastianbergmann/exporter",
963
- "keywords": [
964
- "export",
965
- "exporter"
966
- ],
967
- "time": "2016-06-17 09:04:28"
968
- },
969
- {
970
- "name": "sebastian/global-state",
971
- "version": "1.1.1",
972
- "source": {
973
- "type": "git",
974
- "url": "https://github.com/sebastianbergmann/global-state.git",
975
- "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
976
- },
977
- "dist": {
978
- "type": "zip",
979
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
980
- "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
981
- "shasum": ""
982
- },
983
- "require": {
984
- "php": ">=5.3.3"
985
- },
986
- "require-dev": {
987
- "phpunit/phpunit": "~4.2"
988
- },
989
- "suggest": {
990
- "ext-uopz": "*"
991
- },
992
- "type": "library",
993
- "extra": {
994
- "branch-alias": {
995
- "dev-master": "1.0-dev"
996
- }
997
- },
998
- "autoload": {
999
- "classmap": [
1000
- "src/"
1001
- ]
1002
- },
1003
- "notification-url": "https://packagist.org/downloads/",
1004
- "license": [
1005
- "BSD-3-Clause"
1006
- ],
1007
- "authors": [
1008
- {
1009
- "name": "Sebastian Bergmann",
1010
- "email": "sebastian@phpunit.de"
1011
- }
1012
- ],
1013
- "description": "Snapshotting of global state",
1014
- "homepage": "http://www.github.com/sebastianbergmann/global-state",
1015
- "keywords": [
1016
- "global state"
1017
- ],
1018
- "time": "2015-10-12 03:26:01"
1019
- },
1020
- {
1021
- "name": "sebastian/recursion-context",
1022
- "version": "1.0.2",
1023
- "source": {
1024
- "type": "git",
1025
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
1026
- "reference": "913401df809e99e4f47b27cdd781f4a258d58791"
1027
- },
1028
- "dist": {
1029
- "type": "zip",
1030
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791",
1031
- "reference": "913401df809e99e4f47b27cdd781f4a258d58791",
1032
- "shasum": ""
1033
- },
1034
- "require": {
1035
- "php": ">=5.3.3"
1036
- },
1037
- "require-dev": {
1038
- "phpunit/phpunit": "~4.4"
1039
- },
1040
- "type": "library",
1041
- "extra": {
1042
- "branch-alias": {
1043
- "dev-master": "1.0.x-dev"
1044
- }
1045
- },
1046
- "autoload": {
1047
- "classmap": [
1048
- "src/"
1049
- ]
1050
- },
1051
- "notification-url": "https://packagist.org/downloads/",
1052
- "license": [
1053
- "BSD-3-Clause"
1054
- ],
1055
- "authors": [
1056
- {
1057
- "name": "Jeff Welch",
1058
- "email": "whatthejeff@gmail.com"
1059
- },
1060
- {
1061
- "name": "Sebastian Bergmann",
1062
- "email": "sebastian@phpunit.de"
1063
- },
1064
- {
1065
- "name": "Adam Harvey",
1066
- "email": "aharvey@php.net"
1067
- }
1068
- ],
1069
- "description": "Provides functionality to recursively process PHP variables",
1070
- "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
1071
- "time": "2015-11-11 19:50:13"
1072
- },
1073
- {
1074
- "name": "sebastian/version",
1075
- "version": "1.0.6",
1076
- "source": {
1077
- "type": "git",
1078
- "url": "https://github.com/sebastianbergmann/version.git",
1079
- "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
1080
- },
1081
- "dist": {
1082
- "type": "zip",
1083
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
1084
- "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
1085
- "shasum": ""
1086
- },
1087
- "type": "library",
1088
- "autoload": {
1089
- "classmap": [
1090
- "src/"
1091
- ]
1092
- },
1093
- "notification-url": "https://packagist.org/downloads/",
1094
- "license": [
1095
- "BSD-3-Clause"
1096
- ],
1097
- "authors": [
1098
- {
1099
- "name": "Sebastian Bergmann",
1100
- "email": "sebastian@phpunit.de",
1101
- "role": "lead"
1102
- }
1103
- ],
1104
- "description": "Library that helps with managing the version number of Git-hosted PHP projects",
1105
- "homepage": "https://github.com/sebastianbergmann/version",
1106
- "time": "2015-06-21 13:59:46"
1107
- },
1108
- {
1109
- "name": "squizlabs/php_codesniffer",
1110
- "version": "2.6.1",
1111
- "source": {
1112
- "type": "git",
1113
- "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
1114
- "reference": "fb72ed32f8418db5e7770be1653e62e0d6f5dd3d"
1115
- },
1116
- "dist": {
1117
- "type": "zip",
1118
- "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/fb72ed32f8418db5e7770be1653e62e0d6f5dd3d",
1119
- "reference": "fb72ed32f8418db5e7770be1653e62e0d6f5dd3d",
1120
- "shasum": ""
1121
- },
1122
- "require": {
1123
- "ext-simplexml": "*",
1124
- "ext-tokenizer": "*",
1125
- "ext-xmlwriter": "*",
1126
- "php": ">=5.1.2"
1127
- },
1128
- "require-dev": {
1129
- "phpunit/phpunit": "~4.0"
1130
- },
1131
- "bin": [
1132
- "scripts/phpcs",
1133
- "scripts/phpcbf"
1134
- ],
1135
- "type": "library",
1136
- "extra": {
1137
- "branch-alias": {
1138
- "dev-master": "2.x-dev"
1139
- }
1140
- },
1141
- "autoload": {
1142
- "classmap": [
1143
- "CodeSniffer.php",
1144
- "CodeSniffer/CLI.php",
1145
- "CodeSniffer/Exception.php",
1146
- "CodeSniffer/File.php",
1147
- "CodeSniffer/Fixer.php",
1148
- "CodeSniffer/Report.php",
1149
- "CodeSniffer/Reporting.php",
1150
- "CodeSniffer/Sniff.php",
1151
- "CodeSniffer/Tokens.php",
1152
- "CodeSniffer/Reports/",
1153
- "CodeSniffer/Tokenizers/",
1154
- "CodeSniffer/DocGenerators/",
1155
- "CodeSniffer/Standards/AbstractPatternSniff.php",
1156
- "CodeSniffer/Standards/AbstractScopeSniff.php",
1157
- "CodeSniffer/Standards/AbstractVariableSniff.php",
1158
- "CodeSniffer/Standards/IncorrectPatternException.php",
1159
- "CodeSniffer/Standards/Generic/Sniffs/",
1160
- "CodeSniffer/Standards/MySource/Sniffs/",
1161
- "CodeSniffer/Standards/PEAR/Sniffs/",
1162
- "CodeSniffer/Standards/PSR1/Sniffs/",
1163
- "CodeSniffer/Standards/PSR2/Sniffs/",
1164
- "CodeSniffer/Standards/Squiz/Sniffs/",
1165
- "CodeSniffer/Standards/Zend/Sniffs/"
1166
- ]
1167
- },
1168
- "notification-url": "https://packagist.org/downloads/",
1169
- "license": [
1170
- "BSD-3-Clause"
1171
- ],
1172
- "authors": [
1173
- {
1174
- "name": "Greg Sherwood",
1175
- "role": "lead"
1176
- }
1177
- ],
1178
- "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
1179
- "homepage": "http://www.squizlabs.com/php-codesniffer",
1180
- "keywords": [
1181
- "phpcs",
1182
- "standards"
1183
- ],
1184
- "time": "2016-05-30 22:24:32"
1185
- },
1186
- {
1187
- "name": "symfony/yaml",
1188
- "version": "v2.8.7",
1189
- "source": {
1190
- "type": "git",
1191
- "url": "https://github.com/symfony/yaml.git",
1192
- "reference": "815fabf3f48c7d1df345a69d1ad1a88f59757b34"
1193
- },
1194
- "dist": {
1195
- "type": "zip",
1196
- "url": "https://api.github.com/repos/symfony/yaml/zipball/815fabf3f48c7d1df345a69d1ad1a88f59757b34",
1197
- "reference": "815fabf3f48c7d1df345a69d1ad1a88f59757b34",
1198
- "shasum": ""
1199
- },
1200
- "require": {
1201
- "php": ">=5.3.9"
1202
- },
1203
- "type": "library",
1204
- "extra": {
1205
- "branch-alias": {
1206
- "dev-master": "2.8-dev"
1207
- }
1208
- },
1209
- "autoload": {
1210
- "psr-4": {
1211
- "Symfony\\Component\\Yaml\\": ""
1212
- },
1213
- "exclude-from-classmap": [
1214
- "/Tests/"
1215
- ]
1216
- },
1217
- "notification-url": "https://packagist.org/downloads/",
1218
- "license": [
1219
- "MIT"
1220
- ],
1221
- "authors": [
1222
- {
1223
- "name": "Fabien Potencier",
1224
- "email": "fabien@symfony.com"
1225
- },
1226
- {
1227
- "name": "Symfony Community",
1228
- "homepage": "https://symfony.com/contributors"
1229
- }
1230
- ],
1231
- "description": "Symfony Yaml Component",
1232
- "homepage": "https://symfony.com",
1233
- "time": "2016-06-06 11:11:27"
1234
- }
1235
- ],
1236
- "aliases": [],
1237
- "minimum-stability": "stable",
1238
- "stability-flags": [],
1239
- "prefer-stable": false,
1240
- "prefer-lowest": false,
1241
- "platform": {
1242
- "php": "^5.4 || ^7.0"
1243
- },
1244
- "platform-dev": []
1245
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/facebook/facebook-instant-articles-sdk-php/src/Facebook/InstantArticles/Transformer/Getters/ElementGetter.php CHANGED
@@ -53,7 +53,7 @@ class ElementGetter extends AbstractGetter
53
  public function get($node)
54
  {
55
  $elements = self::findAll($node, $this->selector);
56
- if (!empty($elements)) {
57
  Transformer::markAsProcessed($elements->item(0));
58
  return Transformer::cloneNode($elements->item(0));
59
  }
53
  public function get($node)
54
  {
55
  $elements = self::findAll($node, $this->selector);
56
+ if (!empty($elements) && property_exists($elements, 'length') && $elements->length !== 0) {
57
  Transformer::markAsProcessed($elements->item(0));
58
  return Transformer::cloneNode($elements->item(0));
59
  }
vendor/facebook/facebook-instant-articles-sdk-php/src/Facebook/InstantArticles/Transformer/Rules/InstantArticleRule.php CHANGED
@@ -44,7 +44,6 @@ class InstantArticleRule extends ConfigurationSelectorRule
44
  );
45
 
46
  return $canonical_rule;
47
-
48
  }
49
 
50
  public function apply($transformer, $instant_article, $node)
44
  );
45
 
46
  return $canonical_rule;
 
47
  }
48
 
49
  public function apply($transformer, $instant_article, $node)
vendor/facebook/facebook-instant-articles-sdk-php/src/Facebook/InstantArticles/Transformer/Rules/TimeRule.php CHANGED
@@ -44,7 +44,6 @@ class TimeRule extends ConfigurationSelectorRule
44
  }
45
 
46
  return $time_rule;
47
-
48
  }
49
 
50
  public function apply($transformer, $header, $node)
44
  }
45
 
46
  return $time_rule;
 
47
  }
48
 
49
  public function apply($transformer, $header, $node)
vendor/facebook/facebook-instant-articles-sdk-php/tests/Facebook/InstantArticles/Elements/SocialEmbedTest.php DELETED
@@ -1,96 +0,0 @@
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\Elements;
10
-
11
- class SocialEmbedTest extends \PHPUnit_Framework_TestCase
12
- {
13
- public function testRenderEmpty()
14
- {
15
- $social_embed = SocialEmbed::create();
16
-
17
- $expected = '';
18
-
19
- $rendered = $social_embed->render();
20
- $this->assertEquals($expected, $rendered);
21
- }
22
-
23
- public function testRenderBasic()
24
- {
25
- $social_embed =
26
- SocialEmbed::create()
27
- ->withSource('http://foo.com');
28
-
29
- $expected =
30
- '<figure class="op-interactive">'.
31
- '<iframe src="http://foo.com"></iframe>'.
32
- '</figure>';
33
-
34
- $rendered = $social_embed->render();
35
- $this->assertEquals($expected, $rendered);
36
- }
37
-
38
- public function testRenderBasicWithCaption()
39
- {
40
- $social_embed =
41
- SocialEmbed::create()
42
- ->withSource('http://foo.com')
43
- ->withCaption(
44
- Caption::create()
45
- ->appendText('Some caption to the embed')
46
- );
47
-
48
- $expected =
49
- '<figure class="op-interactive">'.
50
- '<iframe src="http://foo.com"></iframe>'.
51
- '<figcaption>Some caption to the embed</figcaption>'.
52
- '</figure>';
53
-
54
- $rendered = $social_embed->render();
55
- $this->assertEquals($expected, $rendered);
56
- }
57
-
58
- public function testRenderInline()
59
- {
60
- $inline =
61
- '<h1>Some custom code</h1>'.
62
- '<script>alert("test & more test");</script>';
63
-
64
- $social_embed =
65
- SocialEmbed::create()
66
- ->withHTML($inline);
67
-
68
- $expected =
69
- '<figure class="op-interactive">'.
70
- '<iframe>'.
71
- '<h1>Some custom code</h1>'.
72
- '<script>alert("test & more test");</script>'.
73
- '</iframe>'.
74
- '</figure>';
75
-
76
- $rendered = $social_embed->render();
77
- $this->assertEquals($expected, $rendered);
78
- }
79
-
80
- public function testRenderWithWidthAndHeight()
81
- {
82
- $social_embed =
83
- SocialEmbed::create()
84
- ->withSource('http://foo.com')
85
- ->withWidth(640)
86
- ->withHeight(480);
87
-
88
- $expected =
89
- '<figure class="op-interactive">'.
90
- '<iframe src="http://foo.com" width="640" height="480"></iframe>'.
91
- '</figure>';
92
-
93
- $rendered = $social_embed->render();
94
- $this->assertEquals($expected, $rendered);
95
- }
96
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/facebook/facebook-instant-articles-sdk-php/tests/Facebook/InstantArticles/Transformer/CMS/WPTransformerTest.php DELETED
@@ -1,98 +0,0 @@
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\CMS;
10
-
11
- use Facebook\InstantArticles\Transformer\Transformer;
12
- use Facebook\InstantArticles\Elements\InstantArticle;
13
- use Facebook\InstantArticles\Elements\Header;
14
- use Facebook\InstantArticles\Elements\Time;
15
- use Facebook\InstantArticles\Elements\Author;
16
-
17
- class WPTransformerTest extends \PHPUnit_Framework_TestCase
18
- {
19
- protected function setUp()
20
- {
21
- \Logger::configure(
22
- [
23
- 'rootLogger' => [
24
- 'appenders' => ['facebook-instantarticles-transformer']
25
- ],
26
- 'appenders' => [
27
- 'facebook-instantarticles-transformer' => [
28
- 'class' => 'LoggerAppenderConsole',
29
- 'threshold' => 'INFO',
30
- 'layout' => [
31
- 'class' => 'LoggerLayoutSimple'
32
- ]
33
- ]
34
- ]
35
- ]
36
- );
37
- }
38
-
39
- public function testTransformerLikeWPContent()
40
- {
41
- $json_file = file_get_contents(__DIR__ . '/wp-rules.json');
42
-
43
- $instant_article = InstantArticle::create();
44
- $transformer = new Transformer();
45
- $transformer->loadRules($json_file);
46
-
47
- $html_file = file_get_contents(__DIR__ . '/wp.html');
48
-
49
- libxml_use_internal_errors(true);
50
- $document = new \DOMDocument();
51
- $document->loadHTML($html_file);
52
- libxml_use_internal_errors(false);
53
-
54
- $instant_article
55
- ->withCanonicalURL('http://localhost/article')
56
- ->withHeader(
57
- Header::create()
58
- ->withTitle('Peace on <b>earth</b>')
59
- ->addAuthor(Author::create()->withName('bill'))
60
- ->withPublishTime(Time::create(Time::PUBLISHED)->withDatetime(
61
- \DateTime::createFromFormat(
62
- 'j-M-Y G:i:s',
63
- '12-Apr-2016 19:46:51'
64
- )
65
- ))
66
- );
67
-
68
- $transformer->transform($instant_article, $document);
69
- $instant_article->addMetaProperty('op:generator:version', '1.0.0');
70
- $instant_article->addMetaProperty('op:generator:transformer:version', '1.0.0');
71
- $result = $instant_article->render('', true)."\n";
72
- $expected = file_get_contents(__DIR__ . '/wp-ia.xml');
73
-
74
- $this->assertEquals($expected, $result);
75
- // there must be 3 warnings related to <img> inside <li> that is not supported by IA
76
- // And 1 warning related to the getter
77
- $this->assertEquals(4, count($transformer->getWarnings()));
78
- }
79
-
80
- public function testTitleTransformedWithBold()
81
- {
82
- $transformer = new Transformer();
83
- $json_file = file_get_contents(__DIR__ . '/wp-rules.json');
84
- $transformer->loadRules($json_file);
85
-
86
- $title_html_string = '<?xml encoding="utf-8" ?><h1>Title <b>in bold</b></h1>';
87
-
88
- libxml_use_internal_errors(true);
89
- $document = new \DOMDocument();
90
- $document->loadHtml($title_html_string);
91
- libxml_use_internal_errors(false);
92
-
93
- $header = Header::create();
94
- $transformer->transform($header, $document);
95
-
96
- $this->assertEquals('<h1>Title <b>in bold</b></h1>', $header->getTitle()->render());
97
- }
98
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/facebook/facebook-instant-articles-sdk-php/tests/Facebook/InstantArticles/Transformer/CMS/wp-ia.xml DELETED
@@ -1,202 +0,0 @@
1
- <html>
2
- <head>
3
- <link rel="canonical" href="http://localhost/article"/>
4
- <meta charset="utf-8"/>
5
- <meta property="op:generator" content="facebook-instant-articles-sdk-php"/>
6
- <meta property="op:generator:version" content="1.0.0"/>
7
- <meta property="op:generator:transformer" content="facebook-instant-articles-sdk-php"/>
8
- <meta property="op:generator:transformer:version" content="1.0.0"/>
9
- <meta property="op:markup_version" content="v1.0"/>
10
- </head>
11
- <body>
12
- <article>
13
- <header>
14
- <h1>Peace on &lt;b&gt;earth&lt;/b&gt;</h1>
15
- <time class="op-published" datetime="2016-04-12T19:46:51+00:00">April 12th, 7:46pm</time>
16
- <address><a>bill</a></address>
17
- </header>
18
- <p>Yes, peace is good for everybody!<br/>
19
- Man kind.</p>
20
- <figure>
21
- <img src="http://example.com/image0.jpg"/>
22
- </figure>
23
- <p>Some text after img.</p>
24
- <p>Some text before img</p>
25
- <figure>
26
- <img src="http://example.com/image1.jpg"/>
27
- </figure>
28
- <p>Some text before img</p>
29
- <figure>
30
- <img src="http://example.com/image2.jpg"/>
31
- </figure>
32
- <p> and some after img.</p>
33
- <figure class="op-interactive">
34
- <iframe src="http://example.com/0/" class="no-margin" width="300" height="200"></iframe>
35
- </figure>
36
- <p>Some text before iframe</p>
37
- <figure class="op-interactive">
38
- <iframe src="http://example.com/1/" class="no-margin" width="300" height="200"></iframe>
39
- </figure>
40
- <figure class="op-interactive">
41
- <iframe src="http://example.com/2/" class="no-margin" width="300" height="200"></iframe>
42
- </figure>
43
- <p> some after iframe.</p>
44
- <p>Some text before iframe</p>
45
- <figure class="op-interactive">
46
- <iframe src="http://example.com/3/" class="no-margin" width="300" height="200"></iframe>
47
- </figure>
48
- <p> and some after iframe.</p>
49
- <figure class="op-interactive">
50
- <iframe src="http://example.com/loose/with_url" class="no-margin" width="300" height="200"></iframe>
51
- </figure>
52
- <figure class="op-interactive">
53
- <iframe class="no-margin">
54
- <div>
55
- <h1>Iframe loose without url</h1>
56
- </div>
57
- </iframe>
58
- </figure>
59
- <figure class="op-interactive">
60
- <iframe class="no-margin">
61
- <div>
62
- <h1>some embed here</h1>
63
- </div>
64
- </iframe>
65
- </figure>
66
- <figure class="op-interactive">
67
- <iframe class="no-margin">
68
- <div>
69
- <h1>some embed here</h1>
70
- </div>
71
- </iframe>
72
- </figure>
73
- <figure class="op-interactive">
74
- <iframe class="no-margin">
75
- <div>some content</div>
76
- <script>alert('hi & hello to you @ testing!');</script></iframe>
77
- </figure>
78
- <figure class="op-interactive">
79
- <iframe src="http://example.com/4/" class="no-margin" width="300" height="200"></iframe>
80
- </figure>
81
- <figure class="op-interactive">
82
- <iframe class="no-margin">
83
- <div>some content</div>
84
- <script>alert('hi & hello to you @ testing!');</script></iframe>
85
- </figure>
86
- <figure class="op-interactive">
87
- <iframe src="http://example.com/4/" class="no-margin" width="300" height="200"></iframe>
88
- </figure>
89
- <figure class="op-interactive">
90
- <iframe class="no-margin">
91
- <div>some content</div>
92
- <script>alert('hi & hello to you @ testing!');</script></iframe>
93
- </figure>
94
- <figure class="op-interactive">
95
- <iframe class="no-margin" height="200">
96
- <table width="200" height="200">
97
- <thead><td>header 1</td>
98
- <td>header 2</td>
99
- </thead>
100
- <tbody>
101
- <tr><td>Line 1 column 1</td>
102
- <td>Line 1 column 2</td>
103
- </tr>
104
- <tr><td>Line 2 column 1</td>
105
- <td>Line 2 column 2</td>
106
- </tr>
107
- </tbody>
108
- </table>
109
- </iframe>
110
- </figure>
111
- <ul>
112
- <li>Some text on li before img</li>
113
- <li>Some text on li before imgand after img</li>
114
- <li>Some text after img</li>
115
- </ul>
116
- <figure class="op-slideshow">
117
- <figure>
118
- <img src="http://example.com/img0.jpg"/>
119
- </figure>
120
- <figure>
121
- <img src="http://example.com/img1.jpg"/>
122
- </figure>
123
- <figure>
124
- <img src="http://example.com/img2.jpg"/>
125
- <figcaption>Image 2</figcaption>
126
- </figure>
127
- <figure>
128
- <img src="http://example.com/img3.jpg"/>
129
- <figcaption>Image 3</figcaption>
130
- </figure>
131
- <figure>
132
- <img src="http://example.com/img4.jpg"/>
133
- </figure>
134
- </figure>
135
- <figure class="op-slideshow">
136
- <figure>
137
- <img src="http://example.com/img1.jpg"/>
138
- <figcaption> Image 1 </figcaption>
139
- </figure>
140
- <figure>
141
- <img src="http://example.com/img2.jpg"/>
142
- <figcaption> Image 2 </figcaption>
143
- </figure>
144
- <figure>
145
- <img src="http://example.com/img3.jpg"/>
146
- <figcaption> Image 3 </figcaption>
147
- </figure>
148
- </figure>
149
- <figure class="op-interactive">
150
- <iframe class="no-margin">
151
- <blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);">
152
- <div style="padding:8px;">
153
- <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:62.5% 0; text-align:center; width:100%;">
154
- <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div>
155
- </div>
156
- <p style=" margin:8px 0 0 0; padding:0 4px;">
157
- <a href="https://www.instagram.com/p/BAXbKP1POQe/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">📸 @natthaponwuttipetch</a>
158
- </p>
159
- <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">
160
- A photo posted by Ann Hathairat Vidhyaphum (@annvidh) on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2016-01-10T16:56:06+00:00">Jan 10, 2016 at 8:56am PST</time></p>
161
- </div>
162
- </blockquote>
163
- <script async="" defer="defer" src="//platform.instagram.com/en_US/embeds.js"></script>
164
- </iframe>
165
- </figure>
166
- <figure>
167
- <img src="http://example.com/img.jpg"/>
168
- <figcaption>blue eyes</figcaption>
169
- </figure>
170
- <figure class="op-interactive">
171
- <iframe class="no-margin">
172
- <h1>Sibling content</h1>
173
- <div>sibling body</div></iframe>
174
- </figure>
175
- <p>Standard paragraph that <b>shouldn't</b> lie within the interactive block.</p>
176
- <figure class="op-interactive">
177
- <iframe class="no-margin">
178
- <p>Extra markup</p>
179
- <div class="fb-post" data-href="https://www.facebook.com/some-page/posts/some-post"></div>
180
- </iframe>
181
- </figure>
182
- <figure class="op-slideshow">
183
- <figure>
184
- <img src="http://example.com/konservnye-banki-osobenno-lyubyat-yaponcy-810x471.jpg"/>
185
- <figcaption>Caption Img 1</figcaption>
186
- </figure>
187
- <figure>
188
- <img src="http://example.com/a-vot-chto-vnutri.jpg"/>
189
- <figcaption>Alternative text </figcaption>
190
- </figure>
191
- <figure>
192
- <img src="http://example.com/brelok-s-bezopasnostyu-vsegda-s-soboj.jpg"/>
193
- <figcaption>Caption img 3</figcaption>
194
- </figure>
195
- </figure>
196
- <figure>
197
- <img src="http://example.com/image.jpg"/>
198
- <figcaption>caption</figcaption>
199
- </figure>
200
- </article>
201
- </body>
202
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/facebook/facebook-instant-articles-sdk-php/tests/Facebook/InstantArticles/Transformer/CMS/wp-rules.json DELETED
@@ -1,606 +0,0 @@
1
- {
2
- "rules":
3
- [{
4
- "class": "TextNodeRule"
5
- }, {
6
- "class": "PassThroughRule",
7
- "selector": "html"
8
- }, {
9
- "class": "PassThroughRule",
10
- "selector": "head"
11
- }, {
12
- "class": "PassThroughRule",
13
- "selector": "body"
14
- }, {
15
- "class": "PassThroughRule",
16
- "selector" : "code"
17
- },{
18
- "class": "PassThroughRule",
19
- "selector" : "del"
20
- },{
21
- "class": "PassThroughRule",
22
- "selector" : "mark"
23
- }, {
24
- "class": "PassThroughRule",
25
- "selector" : "span"
26
- }, {
27
- "class": "ParagraphRule",
28
- "selector": "p"
29
- }, {
30
- "class": "LineBreakRule",
31
- "selector": "br"
32
- }, {
33
- "class": "AnchorRule",
34
- "selector": "a",
35
- "properties": {
36
- "anchor.href": {
37
- "type": "string",
38
- "selector": "a",
39
- "attribute": "href"
40
- },
41
- "anchor.rel": {
42
- "type": "string",
43
- "selector": "a",
44
- "attribute": "rel"
45
- }
46
- }
47
- }, {
48
- "class": "BoldRule",
49
- "selector": "b"
50
- }, {
51
- "class": "BoldRule",
52
- "selector": "strong"
53
- }, {
54
- "class": "ItalicRule",
55
- "selector": "i"
56
- }, {
57
- "class": "ItalicRule",
58
- "selector": "em"
59
- }, {
60
- "class": "BlockquoteRule",
61
- "selector": "blockquote"
62
- }, {
63
- "class": "PassThroughRule",
64
- "selector": "blockquote p"
65
- }, {
66
- "class": "ImageInsideParagraphRule",
67
- "selector": "img",
68
- "properties": {
69
- "image.url": {
70
- "type": "string",
71
- "selector": "img",
72
- "attribute": "src"
73
- }
74
- }
75
- },{
76
- "class": "ImageRule",
77
- "selector": "img",
78
- "properties": {
79
- "image.url": {
80
- "type": "string",
81
- "selector": "img",
82
- "attribute": "src"
83
- }
84
- }
85
- }, {
86
- "class": "ListItemRule",
87
- "selector" : "li"
88
- }, {
89
- "class": "ListElementRule",
90
- "selector" : "ul"
91
- }, {
92
- "class": "ListElementRule",
93
- "selector" : "ol"
94
- }, {
95
- "class": "BlockquoteRule",
96
- "selector" : "blockquote"
97
- }, {
98
- "class": "H1Rule",
99
- "selector" : "h1",
100
- "properties" : {
101
- "h1.class" : {
102
- "type" : "string",
103
- "selector" : "link",
104
- "attribute": "class"
105
- }
106
- }
107
- }, {
108
- "class": "H1Rule",
109
- "selector" : "title"
110
- }, {
111
- "class": "H2Rule",
112
- "selector" : "h2",
113
- "properties" : {
114
- "h2.class" : {
115
- "type" : "string",
116
- "selector" : "link",
117
- "attribute": "class"
118
- }
119
- }
120
- }, {
121
- "class": "H2Rule",
122
- "selector" : "h3,h4,h5,h6"
123
- }, {
124
- "class": "InteractiveRule",
125
- "selector" : "blockquote.instagram-media",
126
- "properties" : {
127
- "interactive.iframe" : {
128
- "type" : "multiple",
129
- "children": [
130
- {
131
- "type": "element",
132
- "selector": "blockquote"
133
- }, {
134
- "type": "next-sibling-element-of",
135
- "selector": "blockquote"
136
- }
137
- ]
138
- }
139
- }
140
- }, {
141
- "class": "InteractiveRule",
142
- "selector" : "iframe",
143
- "properties" : {
144
- "interactive.url" : {
145
- "type" : "string",
146
- "selector" : "iframe",
147
- "attribute": "src"
148
- },
149
- "interactive.width" : {
150
- "type" : "int",
151
- "selector" : "iframe",
152
- "attribute": "width"
153
- },
154
- "interactive.height" : {
155
- "type" : "int",
156
- "selector" : "iframe",
157
- "attribute": "height"
158
- },
159
- "interactive.iframe" : {
160
- "type" : "children",
161
- "selector" : "iframe"
162
- }
163
- }
164
- }, {
165
- "class": "InteractiveRule",
166
- "selector" : "div.embed",
167
- "properties" : {
168
- "interactive.iframe" : {
169
- "type" : "children",
170
- "selector" : "div.embed"
171
- },
172
- "interactive.height" : {
173
- "type" : "int",
174
- "selector" : "iframe",
175
- "attribute": "height"
176
- },
177
- "interactive.width" : {
178
- "type" : "int",
179
- "selector" : "iframe",
180
- "attribute": "width"
181
- }
182
- }
183
- }, {
184
- "class": "InteractiveRule",
185
- "selector" : "div.interactive",
186
- "properties" : {
187
- "interactive.iframe" : {
188
- "type" : "children",
189
- "selector" : "div.interactive"
190
- },
191
- "interactive.height" : {
192
- "type" : "int",
193
- "selector" : "iframe",
194
- "attribute": "height"
195
- },
196
- "interactive.width" : {
197
- "type" : "int",
198
- "selector" : "iframe",
199
- "attribute": "width"
200
- }
201
- }
202
- }, {
203
- "class": "InteractiveRule",
204
- "selector" : "//div[@class='embed' and iframe]",
205
- "properties" : {
206
- "interactive.url" : {
207
- "type" : "string",
208
- "selector" : "iframe",
209
- "attribute": "src"
210
- },
211
- "interactive.iframe" : {
212
- "type" : "children",
213
- "selector" : "iframe",
214
- "attribute": "src"
215
- },
216
- "interactive.width" : {
217
- "type" : "int",
218
- "selector" : "iframe",
219
- "attribute": "width"
220
- },
221
- "interactive.height" : {
222
- "type" : "int",
223
- "selector" : "iframe",
224
- "attribute": "height"
225
- }
226
- }
227
- }, {
228
- "class": "InteractiveRule",
229
- "selector" : "//div[@class='interactive' and iframe]",
230
- "properties" : {
231
- "interactive.url" : {
232
- "type" : "string",
233
- "selector" : "iframe",
234
- "attribute": "src"
235
- },
236
- "interactive.iframe" : {
237
- "type" : "children",
238
- "selector" : "iframe"
239
- },
240
- "interactive.height" : {
241
- "type" : "int",
242
- "selector" : "iframe",
243
- "attribute": "height"
244
- },
245
- "interactive.width" : {
246
- "type" : "int",
247
- "selector" : "iframe",
248
- "attribute": "width"
249
- }
250
- }
251
- }, {
252
- "class": "InteractiveRule",
253
- "selector" : "table",
254
- "properties" : {
255
- "interactive.iframe" : {
256
- "type" : "element",
257
- "selector" : "table"
258
- },
259
- "interactive.height" : {
260
- "type" : "int",
261
- "selector" : "table",
262
- "attribute": "height"
263
- },
264
- "interactive.width" : {
265
- "type" : "int",
266
- "selector" : "iframe",
267
- "attribute": "width"
268
- }
269
- }
270
- }, {
271
- "class": "InteractiveRule",
272
- "selector" : "div.fb-post",
273
- "properties" : {
274
- "interactive.iframe" : {
275
- "type": "multiple",
276
- "children": [
277
- {
278
- "type": "fragment",
279
- "fragment": "<p>Extra markup</p>"
280
- },
281
- {
282
- "type" : "element",
283
- "selector" : "div.fb-post"
284
- }
285
- ]
286
- }
287
- }
288
- }, {
289
- "class": "InteractiveInsideParagraphRule",
290
- "selector" : "iframe",
291
- "properties" : {
292
- "interactive.url" : {
293
- "type" : "string",
294
- "selector" : "iframe",
295
- "attribute": "src"
296
- },
297
- "interactive.height" : {
298
- "type" : "int",
299
- "selector" : "iframe",
300
- "attribute": "height"
301
- },
302
- "interactive.width" : {
303
- "type" : "int",
304
- "selector" : "iframe",
305
- "attribute": "width"
306
- }
307
- }
308
- },{
309
- "class": "InteractiveInsideParagraphRule",
310
- "selector" : "div.embed",
311
- "properties" : {
312
- "interactive.iframe" : {
313
- "type" : "children",
314
- "selector" : "div.embed"
315
- },
316
- "interactive.height" : {
317
- "type" : "int",
318
- "selector" : "iframe",
319
- "attribute": "height"
320
- },
321
- "interactive.width" : {
322
- "type" : "int",
323
- "selector" : "iframe",
324
- "attribute": "width"
325
- }
326
- }
327
- }, {
328
- "class": "InteractiveInsideParagraphRule",
329
- "selector" : "div.interactive",
330
- "properties" : {
331
- "interactive.iframe" : {
332
- "type" : "children",
333
- "selector" : "div.interactive"
334
- },
335
- "interactive.height" : {
336
- "type" : "int",
337
- "selector" : "iframe",
338
- "attribute": "height"
339
- },
340
- "interactive.width" : {
341
- "type" : "int",
342
- "selector" : "iframe",
343
- "attribute": "width"
344
- }
345
- }
346
- }, {
347
- "class": "InteractiveInsideParagraphRule",
348
- "selector" : "//div[@class='embed' and iframe]",
349
- "properties" : {
350
- "interactive.url" : {
351
- "type" : "string",
352
- "selector" : "iframe",
353
- "attribute": "src"
354
- },
355
- "interactive.iframe" : {
356
- "type" : "children",
357
- "selector" : "iframe",
358
- "attribute": "src"
359
- },
360
- "interactive.width" : {
361
- "type" : "int",
362
- "selector" : "iframe",
363
- "attribute": "width"
364
- },
365
- "interactive.height" : {
366
- "type" : "int",
367
- "selector" : "iframe",
368
- "attribute": "height"
369
- }
370
- }
371
- }, {
372
- "class": "InteractiveInsideParagraphRule",
373
- "selector" : "//div[@class='interactive' and iframe]",
374
- "properties" : {
375
- "interactive.url" : {
376
- "type" : "string",
377
- "selector" : "iframe",
378
- "attribute": "src"
379
- },
380
- "interactive.iframe" : {
381
- "type" : "children",
382
- "selector" : "iframe",
383
- "attribute": "src"
384
- },
385
- "interactive.height" : {
386
- "type" : "int",
387
- "selector" : "iframe",
388
- "attribute": "height"
389
- },
390
- "interactive.width" : {
391
- "type" : "int",
392
- "selector" : "iframe",
393
- "attribute": "width"
394
- }
395
- }
396
- }, {
397
- "class": "InteractiveInsideParagraphRule",
398
- "selector" : "table",
399
- "properties" : {
400
- "interactive.iframe" : {
401
- "type" : "element",
402
- "selector" : "table"
403
- },
404
- "interactive.height" : {
405
- "type" : "int",
406
- "selector" : "table",
407
- "attribute": "height"
408
- },
409
- "interactive.width" : {
410
- "type" : "int",
411
- "selector" : "table",
412
- "attribute": "width"
413
- }
414
- }
415
- }, {
416
- "class": "SlideshowImageRule",
417
- "selector" : "figure",
418
- "properties" : {
419
- "image.url" : {
420
- "type" : "string",
421
- "selector" : "img",
422
- "attribute": "src"
423
- },
424
- "caption.title" : {
425
- "type" : "string",
426
- "selector" : "figcaption"
427
- }
428
- }
429
- }, {
430
- "class": "SlideshowRule",
431
- "selector" : "div.gallery"
432
- }, {
433
- "class": "CaptionRule",
434
- "selector" : "figcaption"
435
- }, {
436
- "class": "CaptionRule",
437
- "selector" : "p.wp-caption-text"
438
- }, {
439
- "class": "ImageRule",
440
- "selector" : "figure",
441
- "properties" : {
442
- "image.url" : {
443
- "type" : "string",
444
- "selector" : "img",
445
- "attribute": "src"
446
- }
447
- }
448
- }, {
449
- "class": "VideoRule",
450
- "selector" : "div.wp-video",
451
- "containsChild": "video",
452
- "properties" : {
453
- "video.url" : {
454
- "type" : "string",
455
- "selector" : "source",
456
- "attribute": "src"
457
- },
458
- "video.type" : {
459
- "type" : "string",
460
- "selector" : "source",
461
- "attribute": "type"
462
- }
463
- }
464
- },
465
-
466
-
467
-
468
- {
469
- "class" : "IgnoreRule",
470
- "selector" : "p.jetpack-slideshow-noscript"
471
- },
472
- {
473
- "class": "CaptionRule",
474
- "selector" : "div.wp-caption-text"
475
- },
476
- {
477
- "class" : "PassThroughRule",
478
- "selector" : "div.gallery-row"
479
- },
480
- {
481
- "class" : "PassThroughRule",
482
- "selector" : "div.tiled-gallery p"
483
- },
484
- {
485
- "class" : "PassThroughRule",
486
- "selector" : "div.gallery-row p"
487
- },
488
- {
489
- "class" : "PassThroughRule",
490
- "selector" : "div.gallery-group p"
491
- },
492
- {
493
- "class" : "PassThroughRule",
494
- "selector" : "div.gallery-group"
495
- },
496
- {
497
- "class": "ImageRule",
498
- "selector" : "div.wp-caption",
499
- "properties" : {
500
- "image.url" : {
501
- "type" : "string",
502
- "selector" : "img",
503
- "attribute": "src"
504
- }
505
- }
506
- },
507
- {
508
- "class": "SlideshowImageRule",
509
- "selector" : "div.tiled-gallery-item",
510
- "properties" : {
511
- "image.url" : {
512
- "type" : "string",
513
- "selector" : "img",
514
- "attribute": "data-orig-file"
515
- },
516
- "caption.title" : {
517
- "type" : "string",
518
- "selector" : "div.tiled-gallery-caption"
519
- }
520
- }
521
- },
522
- {
523
- "class": "SlideshowRule",
524
- "selector" : "div.tiled-gallery"
525
- },
526
- {
527
- "class": "SlideshowRule",
528
- "selector" : "div.tiled-gallery"
529
- },
530
- {
531
- "class": "Compat\\JetpackSlideshowRule",
532
- "selector" : "div.jetpack-slideshow",
533
- "properties": {
534
- "jetpack.data-gallery": {
535
- "type": "json",
536
- "selector": "div.jetpack-slideshow",
537
- "attribute": "data-gallery"
538
- }
539
- }
540
- },
541
- {
542
- "class": "CaptionRule",
543
- "selector" : "div.tiled-gallery-caption"
544
- },
545
- {
546
- "class" : "PassThroughRule",
547
- "selector" : "div.vce-gallery-big"
548
- },
549
- {
550
- "class" : "PassThroughRule",
551
- "selector" : "div.vce-gallery-small"
552
- },
553
- {
554
- "class" : "IgnoreRule",
555
- "selector" : "div.vce-gallery-slider"
556
- },
557
- {
558
- "class": "SlideshowImageRule",
559
- "selector" : "div.big-gallery-item",
560
- "properties" : {
561
- "image.url" : {
562
- "type" : "string",
563
- "selector" : "img",
564
- "attribute": "src"
565
- },
566
- "caption.title" : {
567
- "type" : "string",
568
- "selector" : "figcaption.wp-caption-text"
569
- }
570
- }
571
- },
572
-
573
-
574
- {
575
- "class": "ImageInsideParagraphRule",
576
- "selector": "figure.wp-caption",
577
- "properties": {
578
- "image.url": {
579
- "type": "string",
580
- "selector": "img",
581
- "attribute": "src"
582
- }
583
- }
584
- },
585
-
586
- {
587
- "class": "InteractiveRule",
588
- "selector" : "iframe.sibling",
589
- "properties" : {
590
- "interactive.iframe" : {
591
- "type" : "multiple",
592
- "children": [
593
- {
594
- "type": "children",
595
- "selector": "iframe"
596
- }, {
597
- "type": "next-sibling-element-of",
598
- "selector": "iframe",
599
- "sibling.selector": "script"
600
- }
601
- ]
602
- }
603
- }
604
- }
605
- ]
606
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/facebook/facebook-instant-articles-sdk-php/tests/Facebook/InstantArticles/Transformer/CMS/wp.html DELETED
@@ -1,221 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <body>
4
- <p>Yes, peace is good for everybody!<br>
5
- Man kind.</p>
6
- <p><img src="http://example.com/image0.jpg" />Some text after img.</p>
7
- <p>Some text before img<img src="http://example.com/image1.jpg" /></p>
8
- <p>Some text before img<img src="http://example.com/image2.jpg" /> and some after img.</p>
9
- <p><iframe width="300" height="200" src="http://example.com/0/"/></p>
10
- <p>Some text before iframe<iframe width="300" height="200" src="http://example.com/1/"/></p>
11
- <p><iframe width="300" height="200" src="http://example.com/2/"></iframe> some after iframe.</p>
12
- <p>Some text before iframe<iframe width="300" height="200" src="http://example.com/3/"/> and some after iframe.</p>
13
- <iframe width="300" height="200" src="http://example.com/loose/with_url"></iframe>
14
- <iframe>
15
- <div>
16
- <h1>Iframe loose without url</h1>
17
- </div>
18
- </iframe>
19
- <div class="embed">
20
- <div>
21
- <h1>some embed here</h1>
22
- </div>
23
- </div>
24
- <div class="interactive">
25
- <div>
26
- <h1>some embed here</h1>
27
- </div>
28
- </div>
29
- <div class="interactive">
30
- <iframe>
31
- <div>some content</div>
32
- <script>alert('hi & hello to you @ testing!');</script>
33
- </iframe>
34
- </div>
35
- <div class="interactive">
36
- <iframe width="300" height="200" src="http://example.com/4/"></iframe>
37
- </div>
38
- <div class="interactive">
39
- <iframe>
40
- <div>some content</div>
41
- <script>alert('hi & hello to you @ testing!');</script>
42
- </iframe>
43
- </div>
44
- <div class="embed">
45
- <iframe width="300" height="200" src="http://example.com/4/"></iframe>
46
- </div>
47
- <div class="embed">
48
- <iframe>
49
- <div>some content</div>
50
- <script>alert('hi & hello to you @ testing!');</script>
51
- </iframe>
52
- </div>
53
- <table width="200" height="200">
54
- <thead>
55
- <td>header 1</td>
56
- <td>header 2</td>
57
- </thead>
58
- <tbody>
59
- <tr>
60
- <td>Line 1 column 1</td>
61
- <td>Line 1 column 2</td>
62
- </tr>
63
- <tr>
64
- <td>Line 2 column 1</td>
65
- <td>Line 2 column 2</td>
66
- </tr>
67
- </tbody>
68
- </table>
69
- <ul>
70
- <li>Some text on li before img<img src="http://example.com/image.jpg" width="600" height="360"/></li>
71
- <li>Some text on li before img<img src="http://example.com/image.jpg" width="600" height="360"/>and after img</li>
72
- <li><img src="http://example.com/image.jpg" width="600" height="360"/>Some text after img</li>
73
- </ul>
74
- <p class="jetpack-slideshow-noscript robots-nocontent">This slideshow requires JavaScript.</p>
75
- <div
76
- class="slideshow-window jetpack-slideshow slideshow-black"
77
- data-trans="fade" data-autostart="1"
78
- data-gallery="[{&quot;src&quot;:&quot;http:\/\/example.com/img0.jpg&quot;,&quot;id&quot;:&quot;434&quot;,&quot;title&quot;:&quot;img0&quot;,&quot;alt&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;itemprop&quot;:&quot;image&quot;},{&quot;src&quot;:&quot;http:\/\/example.com\/img1.jpg&quot;,&quot;id&quot;:&quot;474&quot;,&quot;title&quot;:&quot;img1&quot;,&quot;alt&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;itemprop&quot;:&quot;image&quot;},{&quot;src&quot;:&quot;http:\/\/example.com\/img2.jpg&quot;,&quot;id&quot;:&quot;470&quot;,&quot;title&quot;:&quot;img2&quot;,&quot;alt&quot;:&quot;&quot;,&quot;caption&quot;:&quot;Image 2&quot;,&quot;itemprop&quot;:&quot;image&quot;},{&quot;src&quot;:&quot;http:\/\/example.com\/img3.jpg&quot;,&quot;id&quot;:&quot;466&quot;,&quot;title&quot;:&quot;Image 3&quot;,&quot;alt&quot;:&quot;&quot;,&quot;caption&quot;:&quot;Image 3&quot;,&quot;itemprop&quot;:&quot;image&quot;},{&quot;src&quot;:&quot;http:\/\/example.com\/img4.jpg&quot;,&quot;id&quot;:&quot;462&quot;,&quot;title&quot;:&quot;img4&quot;,&quot;alt&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;itemprop&quot;:&quot;image&quot;}]"
79
- itemscope itemtype="http://schema.org/ImageGallery">
80
- </div>
81
-
82
- <div class="tiled-gallery type-rectangular tiled-gallery-unresized" >
83
- <div class="gallery-row">
84
- <div class="gallery-group images-1">
85
- <div class="tiled-gallery-item tiled-gallery-item-large">
86
- <a href="http://www.diegoquinteiro.com/15-razoes-para-ser-contra-o-impeachment/forum/">
87
- <meta itemprop="width" content="318">
88
- <meta itemprop="height" content="211">
89
- <img data-orig-file="http://example.com/img1.jpg"
90
- data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Forum" data-image-description="" data-medium-file="http://http://example.com/img1.jpg" data-large-file="http://example.com/img1.jpg" src="http://example.com/img1.jpg?resize=318%2C211"
91
- width="318" height="211" data-original-width="318" data-original-height="211" title="Forum" alt="riots" style="width: 318px; height: 211px;" />
92
- </a>
93
- <div class="tiled-gallery-caption" itemprop="caption description"> Image 1 </div>
94
- </p>
95
- </div>
96
- </p>
97
- </div>
98
- <p> <!-- close group -->
99
- <div class="gallery-group images-2">
100
- <div class="tiled-gallery-item tiled-gallery-item-small" itemprop="associatedMedia">
101
- <a href="http://example.com/link" border="0" itemprop="url">
102
- <meta itemprop="width" content="174">
103
- <meta itemprop="height" content="109">
104
- <img data-attachment-id="519" data-orig-file="http://example.com/img2.jpg" data-orig-size="2078,1310" data-comments-opened="" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Chaplin &#8211; Fábrica" data-image-description="" data-medium-file="http://example.com/img2.jpg" data-large-file="http://example.com/img2.jpg" src="http://example.com/img2.jpg?resize=174%2C109" width="174" height="109" data-original-width="174" data-original-height="109" itemprop="http://schema.org/image" title="Image Title" alt="chaplin" style="width: 174px; height: 109px;" />
105
- </a>
106
- <div class="tiled-gallery-caption" itemprop="caption description"> Image 2 </div>
107
- </p>
108
- </div>
109
- <div class="tiled-gallery-item tiled-gallery-item-small" itemprop="associatedMedia">
110
- <a href="http://example.com/link" border="0" itemprop="url">
111
- <meta itemprop="width" content="174">
112
- <meta itemprop="height" content="98">
113
- <img data-attachment-id="532" data-orig-file="http://example.com/img3.jpg" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="highlight image" data-image-description="" data-medium-file="http://www.diegoquinteiro.com/wp-content/uploads/2016/06/highlight-image-300x169.jpg" data-large-file="http://www.diegoquinteiro.com/wp-content/uploads/2016/06/highlight-image-1024x576.jpg" src="http://i1.wp.com/www.diegoquinteiro.com/wp-content/uploads/2016/06/highlight-image.jpg?resize=174%2C98" width="174" height="98" data-original-width="174" data-original-height="98" itemprop="http://schema.org/image" title="highlight image" alt="Dog cat" style="width: 174px; height: 98px;" />
114
- </a>
115
- <div class="tiled-gallery-caption" itemprop="caption description"> Image 3 </div>
116
- </p>
117
- </div>
118
- </p>
119
- </div>
120
- <p> <!-- close group -->
121
- </div>
122
- <p> <!-- close row -->
123
- </div>
124
- <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);">
125
- <div style="padding:8px;">
126
- <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:62.5% 0; text-align:center; width:100%;">
127
- <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div>
128
- </div>
129
- <p style=" margin:8px 0 0 0; padding:0 4px;">
130
- <a href="https://www.instagram.com/p/BAXbKP1POQe/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">📸 @natthaponwuttipetch</a>
131
- </p>
132
- <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">
133
- A photo posted by Ann Hathairat Vidhyaphum (@annvidh) on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2016-01-10T16:56:06+00:00">Jan 10, 2016 at 8:56am PST</time>
134
- </p>
135
- </div>
136
- </blockquote>
137
- <script async defer src="//platform.instagram.com/en_US/embeds.js"></script>
138
- <p>
139
- <figure style="width: 1280px" class="wp-caption alignnone">
140
- <img src="http://example.com/img.jpg" width="1280" height="740" class />
141
- <br />
142
- <figcaption class="wp-caption-text">blue eyes</figcaption>
143
- </figure>
144
- </p>
145
- <iframe class="sibling">
146
- <h1>Sibling content</h1>
147
- <div>sibling body</div></iframe>
148
- <script src="//sibling.com/brother.js"></script>
149
- <p>Standard paragraph that <b>shouldn't</b> lie within the interactive block.</p>
150
- <div class="fb-post" data-href="https://www.facebook.com/some-page/posts/some-post"></div>
151
-
152
- <div id="gallery-3" class="vce-gallery gallery galleryid-15219 gallery-columns-3 gallery-size-vce-lay-b">
153
- <div class="vce-gallery-big">
154
- <div class="big-gallery-item item-0">
155
- <div class="gallery-icon">
156
- <a href="http://example.com/konservnye-banki-osobenno-lyubyat-yaponcy.jpg"><img width="810" height="471" src="http://example.com/konservnye-banki-osobenno-lyubyat-yaponcy-810x471.jpg" class="attachment-vce-lay-a size-vce-lay-a" alt="Caption Img 1" srcset="http://example.com/konservnye-banki-osobenno-lyubyat-yaponcy-810x471.jpg 810w, http://example.com/konservnye-banki-osobenno-lyubyat-yaponcy-300x174.jpg 300w, http://example.com/konservnye-banki-osobenno-lyubyat-yaponcy-768x447.jpg 768w, http://example.com/konservnye-banki-osobenno-lyubyat-yaponcy.jpg 860w" sizes="(max-width: 810px) 100vw, 810px"></a>
157
- </div>
158
- <figcaption class="wp-caption-text gallery-caption">Caption Img 1</figcaption>
159
- </div>
160
- <div class="big-gallery-item item-1" style="display:none;">
161
- <div class="gallery-icon">
162
- <a href="http://example.com/a-vot-chto-vnutri.jpg">
163
- <img width="699" height="443" src="http://example.com/a-vot-chto-vnutri.jpg" class="attachment-vce-lay-a size-vce-lay-a" alt="Alternative text" srcset="http://example.com/a-vot-chto-vnutri.jpg 699w, http://example.com/a-vot-chto-vnutri-300x190.jpg 300w" sizes="(max-width: 699px) 100vw, 699px">
164
- </a>
165
- </div>
166
- <figcaption class="wp-caption-text gallery-caption">Alternative text </figcaption>
167
- </div>
168
- <div class="big-gallery-item item-2" style="display:none;">
169
- <div class="gallery-icon">
170
- <a href="http://example.com/brelok-s-bezopasnostyu-vsegda-s-soboj.jpg">
171
- <img width="700" height="467" src="http://example.com/brelok-s-bezopasnostyu-vsegda-s-soboj.jpg" class="attachment-vce-lay-a size-vce-lay-a" alt="Caption img 3" srcset="http://example.com/brelok-s-bezopasnostyu-vsegda-s-soboj.jpg 700w, http://example.com/brelok-s-bezopasnostyu-vsegda-s-soboj-300x200.jpg 300w" sizes="(max-width: 700px) 100vw, 700px">
172
- </a>
173
- </div>
174
- <figcaption class="wp-caption-text gallery-caption">Caption img 3</figcaption>
175
- </div>
176
- </div>
177
- <div class="vce-gallery-slider owl-carousel owl-theme owl-loaded owl-text-select-on" data-columns="3">
178
- <div class="owl-stage-outer">
179
- <div class="owl-stage" style="transform: translate3d(-761px, 0px, 0px); transition: 0s; width: 3551.34px;">
180
- <div class="owl-item active" style="width: 252.667px; margin-right: 1px;">
181
- <figure class="gallery-item" data-item="0">
182
- <div class="gallery-icon landscape">
183
- <a href="http://example.com/konservnye-banki-osobenno-lyubyat-yaponcy.jpg"><img width="375" height="195" src="http://example.com/konservnye-banki-osobenno-lyubyat-yaponcy-375x195.jpg" class="attachment-vce-lay-b size-vce-lay-b" alt="Caption Img 1"></a>
184
- </div>
185
- </figure>
186
- </div>
187
- <div class="owl-item active" style="width: 252.667px; margin-right: 1px;">
188
- <figure class="gallery-item" data-item="1">
189
- <div class="gallery-icon landscape">
190
- <a href="http://example.com/a-vot-chto-vnutri.jpg"><img width="375" height="195" src="http://example.com/a-vot-chto-vnutri-375x195.jpg" class="attachment-vce-lay-b size-vce-lay-b" alt="Alternative text"></a>
191
- </div>
192
- </figure>
193
- </div>
194
- <div class="owl-item active" style="width: 252.667px; margin-right: 1px;">
195
- <figure class="gallery-item" data-item="2">
196
- <div class="gallery-icon landscape">
197
- <a href="http://example.com/brelok-s-bezopasnostyu-vsegda-s-soboj.jpg"><img width="375" height="195" src="http://example.com/brelok-s-bezopasnostyu-vsegda-s-soboj-375x195.jpg" class="attachment-vce-lay-b size-vce-lay-b" alt="Caption img 3"></a>
198
- </div>
199
- </figure>
200
- </div>
201
- </div>
202
- </div>
203
- <div class="owl-controls">
204
- <div class="owl-nav">
205
- <div class="owl-prev" style=""><i class="fa fa-angle-left"></i></div>
206
- <div class="owl-next" style=""><i class="fa fa-angle-right"></i></div>
207
- </div>
208
- <div class="owl-dots" style="">
209
- <div class="owl-dot active"><span></span></div>
210
- <div class="owl-dot"><span></span></div>
211
- <div class="owl-dot"><span></span></div>
212
- </div>
213
- </div>
214
- </div>
215
- </div>
216
- <div id="attachment_22553" style="width: 800px" class="wp-caption alignnone">
217
- <img class="wp-image-22553 size-large" src="http://example.com/image.jpg" alt="alt text" width="800" height="552" srcset="http://example.com/image-800.jpg 800w, http://example.com/image-400.jpg 400w, http://example.com/image-768.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" />
218
- <p class="wp-caption-text">caption</p>
219
- </div>
220
- </body>
221
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/facebook/facebook-instant-articles-sdk-php/tests/Facebook/InstantArticles/Transformer/wp-rules.json DELETED
@@ -1,270 +0,0 @@
1
- {
2
- "rules":
3
- [{
4
- "class": "TextNodeRule"
5
- }, {
6
- "class": "PassThroughRule",
7
- "selector": "html"
8
- }, {
9
- "class": "PassThroughRule",
10
- "selector": "head"
11
- }, {
12
- "class": "PassThroughRule",
13
- "selector": "body"
14
- }, {
15
- "class": "PassThroughRule",
16
- "selector" : "code"
17
- },{
18
- "class": "PassThroughRule",
19
- "selector" : "del"
20
- }, {
21
- "class": "PassThroughRule",
22
- "selector" : "span"
23
- }, {
24
- "class": "ParagraphRule",
25
- "selector": "p"
26
- }, {
27
- "class": "LineBreakRule",
28
- "selector": "br"
29
- }, {
30
- "class": "AnchorRule",
31
- "selector": "a",
32
- "properties": {
33
- "anchor.href": {
34
- "type": "string",
35
- "selector": "a",
36
- "attribute": "href"
37
- },
38
- "anchor.rel": {
39
- "type": "string",
40
- "selector": "a",
41
- "attribute": "rel"
42
- }
43
- }
44
- }, {
45
- "class": "BoldRule",
46
- "selector": "b"
47
- }, {
48
- "class": "BoldRule",
49
- "selector": "strong"
50
- }, {
51
- "class": "ItalicRule",
52
- "selector": "i"
53
- }, {
54
- "class": "ItalicRule",
55
- "selector": "em"
56
- }, {
57
- "class": "BlockquoteRule",
58
- "selector": "blockquote"
59
- }, {
60
- "class": "PassThroughRule",
61
- "selector": "blockquote p"
62
- }, {
63
- "class": "ImageRule",
64
- "selector": "//p[img]",
65
- "properties": {
66
- "image.url": {
67
- "type": "string",
68
- "selector": "img",
69
- "attribute": "src"
70
- }
71
- }
72
- },{
73
- "class": "ImageRule",
74
- "selector": "img",
75
- "properties": {
76
- "image.url": {
77
- "type": "string",
78
- "selector": "img",
79
- "attribute": "src"
80
- }
81
- }
82
- }, {
83
- "class": "ListItemRule",
84
- "selector" : "li"
85
- }, {
86
- "class": "ListElementRule",
87
- "selector" : "ul"
88
- }, {
89
- "class": "ListElementRule",
90
- "selector" : "ol"
91
- }, {
92
- "class": "BlockquoteRule",
93
- "selector" : "blockquote"
94
- }, {
95
- "class": "H1Rule",
96
- "selector" : "h1",
97
- "properties" : {
98
- "h1.class" : {
99
- "type" : "string",
100
- "selector" : "link",
101
- "attribute": "class"
102
- }
103
- }
104
- }, {
105
- "class": "H1Rule",
106
- "selector" : "title"
107
- }, {
108
- "class": "H2Rule",
109
- "selector" : "h2",
110
- "properties" : {
111
- "h2.class" : {
112
- "type" : "string",
113
- "selector" : "link",
114
- "attribute": "class"
115
- }
116
- }
117
- }, {
118
- "class": "H2Rule",
119
- "selector" : "h3,h4,h5,h6"
120
- }, {
121
- "class": "SocialEmbedRule",
122
- "selector" : "iframe",
123
- "properties" : {
124
- "socialembed.url" : {
125
- "type" : "string",
126
- "selector" : "iframe",
127
- "attribute": "src"
128
- },
129
- "socialembed.iframe" : {
130
- "type" : "children",
131
- "selector" : "iframe"
132
- },
133
- "socialembed.caption" : {
134
- "type" : "element",
135
- "selector" : "figcaption"
136
- }
137
- }
138
- }, {
139
- "class": "SocialEmbedRule",
140
- "selector" : "//p[iframe]",
141
- "properties" : {
142
- "socialembed.url" : {
143
- "type" : "string",
144
- "selector" : "iframe",
145
- "attribute": "src"
146
- },
147
- "socialembed.iframe" : {
148
- "type" : "children",
149
- "selector" : "iframe"
150
- },
151
- "socialembed.caption" : {
152
- "type" : "element",
153
- "selector" : "figcaption"
154
- }
155
- }
156
- }, {
157
- "class": "SocialEmbedRule",
158
- "selector" : "div.embed",
159
- "properties" : {
160
- "socialembed.iframe" : {
161
- "type" : "children",
162
- "selector" : "div.embed"
163
- }
164
- }
165
- }, {
166
- "class": "InteractiveRule",
167
- "selector" : "div.interactive",
168
- "properties" : {
169
- "interactive.iframe" : {
170
- "type" : "children",
171
- "selector" : "div.interactive"
172
- },
173
- "interactive.height" : {
174
- "type" : "int",
175
- "selector" : "iframe",
176
- "attribute": "height"
177
- },
178
- "interactive.iframe" : {
179
- "type" : "children",
180
- "selector" : "iframe"
181
- }
182
- }
183
- }, {
184
- "class": "SocialEmbedRule",
185
- "selector" : "//div[@class='embed' and iframe]",
186
- "properties" : {
187
- "socialembed.url" : {
188
- "type" : "string",
189
- "selector" : "iframe",
190
- "attribute": "src"
191
- }
192
- }
193
- }, {
194
- "class": "InteractiveRule",
195
- "selector" : "//div[@class='interactive' and iframe]",
196
- "properties" : {
197
- "interactive.url" : {
198
- "type" : "string",
199
- "selector" : "iframe",
200
- "attribute": "src"
201
- }
202
- }
203
- }, {
204
- "class": "ImageRule",
205
- "selector": "//p[a[img]]|//a[img]",
206
- "properties": {
207
- "image.url": {
208
- "type": "string",
209
- "selector": "img",
210
- "attribute": "src"
211
- }
212
- }
213
- }, {
214
- "class": "SlideshowImageRule",
215
- "selector" : "figure",
216
- "properties" : {
217
- "image.url" : {
218
- "type" : "string",
219
- "selector" : "img",
220
- "attribute": "src"
221
- },
222
- "caption.title" : {
223
- "type" : "string",
224
- "selector" : "figcaption"
225
- }
226
- }
227
- }, {
228
- "class": "SlideshowRule",
229
- "selector" : "div.gallery"
230
- }, {
231
- "class": "CaptionRule",
232
- "selector" : "figcaption"
233
- },
234
- {
235
- "class": "ImageRule",
236
- "selector" : "figure",
237
- "properties" : {
238
- "image.url" : {
239
- "type" : "string",
240
- "selector" : "img",
241
- "attribute": "src"
242
- }
243
- }
244
- }, {
245
- "class": "VideoRule",
246
- "selector" : "div.wp-video",
247
- "containsChild": "video",
248
- "properties" : {
249
- "video.url" : {
250
- "type" : "string",
251
- "selector" : "source",
252
- "attribute": "src"
253
- },
254
- "video.type" : {
255
- "type" : "string",
256
- "selector" : "source",
257
- "attribute": "type"
258
- }
259
- }
260
- }, {
261
- "class": "InteractiveRule",
262
- "selector" : "table",
263
- "properties" : {
264
- "interactive.iframe" : {
265
- "type" : "element",
266
- "selector" : "table"
267
- }
268
- }
269
- }]
270
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/facebook/{php-sdk-v4 → graph-sdk}/LICENSE RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/composer.json RENAMED
@@ -1,14 +1,14 @@
1
  {
2
- "name": "facebook/php-sdk-v4",
3
  "description": "Facebook SDK for PHP",
4
  "keywords": ["facebook", "sdk"],
5
  "type": "library",
6
- "homepage": "https://github.com/facebook/facebook-php-sdk-v4",
7
  "license": "Facebook Platform",
8
  "authors": [
9
  {
10
  "name": "Facebook",
11
- "homepage": "https://github.com/facebook/facebook-php-sdk-v4/contributors"
12
  }
13
  ],
14
  "require": {
@@ -20,6 +20,7 @@
20
  "guzzlehttp/guzzle": "~5.0"
21
  },
22
  "suggest": {
 
23
  "guzzlehttp/guzzle": "Allows for implementation of the Guzzle HTTP client"
24
  },
25
  "autoload": {
1
  {
2
+ "name": "facebook/graph-sdk",
3
  "description": "Facebook SDK for PHP",
4
  "keywords": ["facebook", "sdk"],
5
  "type": "library",
6
+ "homepage": "https://github.com/facebook/php-graph-sdk",
7
  "license": "Facebook Platform",
8
  "authors": [
9
  {
10
  "name": "Facebook",
11
+ "homepage": "https://github.com/facebook/php-graph-sdk/contributors"
12
  }
13
  ],
14
  "require": {
20
  "guzzlehttp/guzzle": "~5.0"
21
  },
22
  "suggest": {
23
+ "paragonie/random_compat": "Provides a better CSPRNG option in PHP 5",
24
  "guzzlehttp/guzzle": "Allows for implementation of the Guzzle HTTP client"
25
  },
26
  "autoload": {
vendor/facebook/graph-sdk/phpcs.xml.dist ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <ruleset>
3
+ <file>src/</file>
4
+ <file>tests/</file>
5
+ <arg value="spn" />
6
+ <rule ref="PSR2" />
7
+ </ruleset>
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Authentication/AccessToken.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Authentication/AccessTokenMetadata.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Authentication/OAuth2Client.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookAuthenticationException.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookAuthorizationException.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookClientException.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookOtherException.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookResponseException.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookResumableUploadException.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookSDKException.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookServerException.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Exceptions/FacebookThrottleException.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Facebook.php RENAMED
@@ -53,12 +53,12 @@ class Facebook
53
  /**
54
  * @const string Version number of the Facebook PHP SDK.
55
  */
56
- const VERSION = '5.3.1';
57
 
58
  /**
59
  * @const string Default Graph API version for requests.
60
  */
61
- const DEFAULT_GRAPH_VERSION = 'v2.7';
62
 
63
  /**
64
  * @const string The name of the environment variable that contains the app ID.
53
  /**
54
  * @const string Version number of the Facebook PHP SDK.
55
  */
56
+ const VERSION = '5.4.2';
57
 
58
  /**
59
  * @const string Default Graph API version for requests.
60
  */
61
+ const DEFAULT_GRAPH_VERSION = 'v2.8';
62
 
63
  /**
64
  * @const string The name of the environment variable that contains the app ID.
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FacebookApp.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FacebookBatchRequest.php RENAMED
@@ -168,8 +168,6 @@ class FacebookBatchRequest extends FacebookRequest implements IteratorAggregate,
168
 
169
  /**
170
  * Prepares the requests to be sent as a batch request.
171
- *
172
- * @return string
173
  */
174
  public function prepareRequestsForBatch()
175
  {
168
 
169
  /**
170
  * Prepares the requests to be sent as a batch request.
 
 
171
  */
172
  public function prepareRequestsForBatch()
173
  {
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FacebookBatchResponse.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FacebookClient.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FacebookRequest.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FacebookResponse.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FileUpload/FacebookFile.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FileUpload/FacebookResumableUploader.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FileUpload/FacebookTransferChunk.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FileUpload/FacebookVideo.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/FileUpload/Mimetypes.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/Birthday.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/Collection.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphAchievement.php RENAMED
@@ -28,7 +28,6 @@ namespace Facebook\GraphNodes;
28
  *
29
  * @package Facebook
30
  */
31
-
32
  class GraphAchievement extends GraphNode
33
  {
34
  /**
28
  *
29
  * @package Facebook
30
  */
 
31
  class GraphAchievement extends GraphNode
32
  {
33
  /**
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphAlbum.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphApplication.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphCoverPhoto.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphEdge.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphEvent.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphGroup.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphList.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphLocation.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphNode.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphNodeFactory.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphObject.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphObjectFactory.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphPage.php RENAMED
@@ -37,6 +37,8 @@ class GraphPage extends GraphNode
37
  'best_page' => '\Facebook\GraphNodes\GraphPage',
38
  'global_brand_parent_page' => '\Facebook\GraphNodes\GraphPage',
39
  'location' => '\Facebook\GraphNodes\GraphLocation',
 
 
40
  ];
41
 
42
  /**
@@ -99,6 +101,26 @@ class GraphPage extends GraphNode
99
  return $this->getField('location');
100
  }
101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  /**
103
  * Returns the page access token for the admin user.
104
  *
37
  'best_page' => '\Facebook\GraphNodes\GraphPage',
38
  'global_brand_parent_page' => '\Facebook\GraphNodes\GraphPage',
39
  'location' => '\Facebook\GraphNodes\GraphLocation',
40
+ 'cover' => '\Facebook\GraphNodes\GraphCoverPhoto',
41
+ 'picture' => '\Facebook\GraphNodes\GraphPicture',
42
  ];
43
 
44
  /**
101
  return $this->getField('location');
102
  }
103
 
104
+ /**
105
+ * Returns CoverPhoto of the Page.
106
+ *
107
+ * @return GraphCoverPhoto|null
108
+ */
109
+ public function getCover()
110
+ {
111
+ return $this->getField('cover');
112
+ }
113
+
114
+ /**
115
+ * Returns Picture of the Page.
116
+ *
117
+ * @return GraphPicture|null
118
+ */
119
+ public function getPicture()
120
+ {
121
+ return $this->getField('picture');
122
+ }
123
+
124
  /**
125
  * Returns the page access token for the admin user.
126
  *
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphPicture.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphSessionInfo.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/GraphNodes/GraphUser.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Helpers/FacebookCanvasHelper.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Helpers/FacebookJavaScriptHelper.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Helpers/FacebookPageTabHelper.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Helpers/FacebookRedirectLoginHelper.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Helpers/FacebookSignedRequestFromInputHelper.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Http/GraphRawResponse.php RENAMED
@@ -129,7 +129,7 @@ class GraphRawResponse
129
  if (strpos($line, ': ') === false) {
130
  $this->setHttpResponseCodeFromHeader($line);
131
  } else {
132
- list($key, $value) = explode(': ', $line);
133
  $this->headers[$key] = $value;
134
  }
135
  }
129
  if (strpos($line, ': ') === false) {
130
  $this->setHttpResponseCodeFromHeader($line);
131
  } else {
132
+ list($key, $value) = explode(': ', $line, 2);
133
  $this->headers[$key] = $value;
134
  }
135
  }
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Http/RequestBodyInterface.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Http/RequestBodyMultipart.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Http/RequestBodyUrlEncoded.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/HttpClients/FacebookCurl.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/HttpClients/FacebookCurlHttpClient.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/HttpClients/FacebookGuzzleHttpClient.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/HttpClients/FacebookHttpClientInterface.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/HttpClients/FacebookStream.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/HttpClients/FacebookStreamHttpClient.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/HttpClients/HttpClientsFactory.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/HttpClients/certs/DigiCertHighAssuranceEVRootCA.pem RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PersistentData/FacebookMemoryPersistentDataHandler.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PersistentData/FacebookSessionPersistentDataHandler.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PersistentData/PersistentDataFactory.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PersistentData/PersistentDataInterface.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PseudoRandomString/McryptPseudoRandomStringGenerator.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PseudoRandomString/OpenSslPseudoRandomStringGenerator.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PseudoRandomString/PseudoRandomStringGeneratorFactory.php RENAMED
@@ -38,7 +38,7 @@ class PseudoRandomStringGeneratorFactory
38
  *
39
  * @param PseudoRandomStringGeneratorInterface|string|null $generator
40
  *
41
- * @throws InvalidArgumentException If the pseudo random string generator must be set to "mcrypt", "openssl", or "urandom", or be an instance of Facebook\PseudoRandomString\PseudoRandomStringGeneratorInterface.
42
  *
43
  * @return PseudoRandomStringGeneratorInterface
44
  */
@@ -52,6 +52,9 @@ class PseudoRandomStringGeneratorFactory
52
  return $generator;
53
  }
54
 
 
 
 
55
  if ('mcrypt' === $generator) {
56
  return new McryptPseudoRandomStringGenerator();
57
  }
@@ -62,7 +65,7 @@ class PseudoRandomStringGeneratorFactory
62
  return new UrandomPseudoRandomStringGenerator();
63
  }
64
 
65
- throw new InvalidArgumentException('The pseudo random string generator must be set to "mcrypt", "openssl", or "urandom", or be an instance of Facebook\PseudoRandomString\PseudoRandomStringGeneratorInterface');
66
  }
67
 
68
  /**
@@ -74,8 +77,13 @@ class PseudoRandomStringGeneratorFactory
74
  */
75
  private static function detectDefaultPseudoRandomStringGenerator()
76
  {
 
 
 
 
 
77
  // Since openssl_random_pseudo_bytes() can sometimes return non-cryptographically
78
- // secure pseudo-random strings (in rare cases), we check for mcrypt_create_iv() first.
79
  if (function_exists('mcrypt_create_iv')) {
80
  return new McryptPseudoRandomStringGenerator();
81
  }
38
  *
39
  * @param PseudoRandomStringGeneratorInterface|string|null $generator
40
  *
41
+ * @throws InvalidArgumentException If the pseudo random string generator must be set to "random_bytes", "mcrypt", "openssl", or "urandom", or be an instance of Facebook\PseudoRandomString\PseudoRandomStringGeneratorInterface.
42
  *
43
  * @return PseudoRandomStringGeneratorInterface
44
  */
52
  return $generator;
53
  }
54
 
55
+ if ('random_bytes' === $generator) {
56
+ return new RandomBytesPseudoRandomStringGenerator();
57
+ }
58
  if ('mcrypt' === $generator) {
59
  return new McryptPseudoRandomStringGenerator();
60
  }
65
  return new UrandomPseudoRandomStringGenerator();
66
  }
67
 
68
+ throw new InvalidArgumentException('The pseudo random string generator must be set to "random_bytes", "mcrypt", "openssl", or "urandom", or be an instance of Facebook\PseudoRandomString\PseudoRandomStringGeneratorInterface');
69
  }
70
 
71
  /**
77
  */
78
  private static function detectDefaultPseudoRandomStringGenerator()
79
  {
80
+ // Check for PHP 7's CSPRNG first to keep mcrypt deprecation messages from appearing in PHP 7.1.
81
+ if (function_exists('random_bytes')) {
82
+ return new RandomBytesPseudoRandomStringGenerator();
83
+ }
84
+
85
  // Since openssl_random_pseudo_bytes() can sometimes return non-cryptographically
86
+ // secure pseudo-random strings (in rare cases), we check for mcrypt_create_iv() next.
87
  if (function_exists('mcrypt_create_iv')) {
88
  return new McryptPseudoRandomStringGenerator();
89
  }
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PseudoRandomString/PseudoRandomStringGeneratorInterface.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PseudoRandomString/PseudoRandomStringGeneratorTrait.php RENAMED
File without changes
vendor/facebook/graph-sdk/src/Facebook/PseudoRandomString/RandomBytesPseudoRandomStringGenerator.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2016 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\PseudoRandomString;
25
+
26
+ use Facebook\Exceptions\FacebookSDKException;
27
+
28
+ class RandomBytesPseudoRandomStringGenerator implements PseudoRandomStringGeneratorInterface
29
+ {
30
+ use PseudoRandomStringGeneratorTrait;
31
+
32
+ /**
33
+ * @const string The error message when generating the string fails.
34
+ */
35
+ const ERROR_MESSAGE = 'Unable to generate a cryptographically secure pseudo-random string from random_bytes(). ';
36
+
37
+ /**
38
+ * @throws FacebookSDKException
39
+ */
40
+ public function __construct()
41
+ {
42
+ if (!function_exists('random_bytes')) {
43
+ throw new FacebookSDKException(
44
+ static::ERROR_MESSAGE .
45
+ 'The function random_bytes() does not exist.'
46
+ );
47
+ }
48
+ }
49
+
50
+ /**
51
+ * @inheritdoc
52
+ */
53
+ public function getPseudoRandomString($length)
54
+ {
55
+ $this->validateLength($length);
56
+
57
+ return $this->binToHex(random_bytes($length), $length);
58
+ }
59
+ }
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/PseudoRandomString/UrandomPseudoRandomStringGenerator.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/SignedRequest.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Url/FacebookUrlDetectionHandler.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Url/FacebookUrlManipulator.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/Url/UrlDetectionInterface.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/autoload.php RENAMED
File without changes
vendor/facebook/{php-sdk-v4 → graph-sdk}/src/Facebook/polyfills.php RENAMED
File without changes
vendor/symfony/css-selector/Parser/Reader.php CHANGED
@@ -118,8 +118,6 @@ class Reader
118
  $this->position += $length;
119
  }
120
 
121
- /**
122
- */
123
  public function moveToEnd()
124
  {
125
  $this->position = $this->length;
118
  $this->position += $length;
119
  }
120
 
 
 
121
  public function moveToEnd()
122
  {
123
  $this->position = $this->length;
wizard/class-instant-articles-option-publishing.php CHANGED
@@ -43,16 +43,16 @@ class Instant_Articles_Option_Publishing extends Instant_Articles_Option {
43
  'label' => '',
44
  'render' => 'textarea',
45
  'placeholder' => '{ "rules": [{ "class": "BoldRule", "selector": "span.bold" }, ... ] }',
46
- 'description' => 'Read more about <a href="https://github.com/facebook/facebook-instant-articles-sdk-php/blob/master/docs/QuickStart.md#custom-transformer-rules" target="_blank">defining your own custom rules</a> to extend/override the <a href="https://github.com/Automattic/facebook-instant-articles-wp/blob/master/rules-configuration.json" target="_blank">built-in ruleset</a>. If you\'ve defined a common rule which you think this plugin should include by default, <a href="https://github.com/Automattic/facebook-instant-articles-wp/issues/new" target="_blank">tell us about it</a>!',
47
  'default' => '',
48
  ),
49
 
50
- 'block_publish_with_warnings' => array(
51
  'label' => 'Transformation warnings',
52
- 'description' => 'Articles won\'t be available as Instant Articles if transformation process contains warnings. Note: All warnings should be fixed in order to have them available as Instant Articles.',
53
  'render' => 'checkbox',
54
  'default' => false,
55
- 'checkbox_label' => 'Don\'t publish with warnings',
56
  ),
57
  );
58
 
43
  'label' => '',
44
  'render' => 'textarea',
45
  'placeholder' => '{ "rules": [{ "class": "BoldRule", "selector": "span.bold" }, ... ] }',
46
+ 'description' => 'Read more about <a href="https://developers.facebook.com/docs/instant-articles/sdk/transformer-rules" target="_blank">defining your own custom rules</a> to extend/override the <a href="https://github.com/Automattic/facebook-instant-articles-wp/blob/master/rules-configuration.json" target="_blank">built-in ruleset</a>. If you\'ve defined a common rule which you think this plugin should include by default, <a href="https://github.com/Automattic/facebook-instant-articles-wp/issues/new" target="_blank">tell us about it</a>!',
47
  'default' => '',
48
  ),
49
 
50
+ 'publish_with_warnings' => array(
51
  'label' => 'Transformation warnings',
52
+ 'description' => 'With this option disabled, articles which contain warnings in their transformation process won\'t be available as Instant Articles by default this can be overridden on individual articles. Note: It is recommended that all transformation warnings be fixed.',
53
  'render' => 'checkbox',
54
  'default' => false,
55
+ 'checkbox_label' => 'Publish articles containing warnings',
56
  ),
57
  );
58
 
wizard/class-instant-articles-wizard.php CHANGED
@@ -173,14 +173,14 @@ class Instant_Articles_Wizard {
173
  $fb_app_settings = Instant_Articles_Option_FB_App::get_option_decoded();
174
  $fb_page_settings = Instant_Articles_Option_FB_Page::get_option_decoded();
175
 
176
- $client = Client::create(
177
- $fb_app_settings[ 'app_id' ],
178
- $fb_app_settings[ 'app_secret' ],
179
- $fb_page_settings[ 'page_access_token' ],
180
- $fb_page_settings[ 'page_id' ]
181
- );
182
-
183
  try {
 
 
 
 
 
 
 
184
  // Bulk upload articles for review
185
  $articles_for_review = Instant_Articles_Wizard_Review_Submission::getArticlesForReview();
186
  foreach ( $articles_for_review as $post ) {
@@ -236,72 +236,101 @@ class Instant_Articles_Wizard {
236
  wp_die( esc_html( 'You do not have sufficient permissions to access this page.' ) );
237
  }
238
 
239
- // Read options (they are used on the templates)
240
- $current_state = Instant_Articles_Wizard_State::get_current_state();
241
- $fb_page_settings = Instant_Articles_Option_FB_Page::get_option_decoded();
242
- $fb_app_settings = Instant_Articles_Option_FB_App::get_option_decoded();
243
- $fb_helper = new Instant_Articles_Wizard_FB_Helper();
244
- $settings_url = self::get_url();
245
-
246
- // Handle redirection from Login flow
247
- // ----------------------------------
248
- // Only during STATE_APP_SETUP
249
- if ( $current_state === Instant_Articles_Wizard_State::STATE_APP_SETUP ) {
250
- $user_access_token = $fb_helper->get_fb_access_token();
251
- $permissions = $fb_helper->get_fb_permissions( $user_access_token );
252
-
253
- // Trigger transition if all needed permissions are granted
254
- if ( $user_access_token && isset( $permissions[ 'pages_manage_instant_articles' ] ) && isset( $permissions[ 'pages_show_list' ] ) ) {
255
- Instant_Articles_Wizard_State::do_transition( Instant_Articles_Wizard_State::STATE_PAGE_SELECTION, array(
256
- 'app_id' => $fb_app_settings[ 'app_id' ],
257
- 'app_secret' => $fb_app_settings[ 'app_secret' ],
258
- 'user_access_token' => $user_access_token->getValue()
259
- ) );
260
- // Override step
261
- $current_state = Instant_Articles_Wizard_State::get_current_state();
262
- }
263
- }
264
- // ----------------------------------
265
-
266
- // Handle redirection from Login flow
267
- // ----------------------------------
268
- // Only during STATE_PAGE_SELECTION
269
- if ( $current_state === Instant_Articles_Wizard_State::STATE_PAGE_SELECTION ) {
270
  $fb_helper = new Instant_Articles_Wizard_FB_Helper();
271
- try {
272
- $pages = $fb_helper->get_pages();
273
- } catch ( Facebook\Exceptions\FacebookSDKException $e ) {
274
- // If we couldn't fetch the pages, revert to the App setup
275
- Instant_Articles_Wizard_State::do_transition( Instant_Articles_Wizard_State::STATE_APP_SETUP );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
276
  }
277
- }
278
-
279
- // Grabs the current configured style
280
- // ----------------------------------
281
- // Only during STATE_STYLE_SELECTION
282
- if ( $current_state === Instant_Articles_Wizard_State::STATE_STYLE_SELECTION ) {
283
- $settings_style = Instant_Articles_Option_Styles::get_option_decoded();
284
- if ( isset( $settings_style['article_style'] ) && ! empty( $settings_style['article_style'] ) ) {
285
- $article_style = $settings_style['article_style'];
286
- } else {
287
- $article_style = 'default';
 
 
288
  }
289
- }
290
- // ----------------------------------
291
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
292
 
293
- // Check submission status
294
- // ----------------------------------
295
- // Only during STATE_REVIEW_SUBMISSION
296
- if ( $current_state === Instant_Articles_Wizard_State::STATE_REVIEW_SUBMISSION ) {
297
- $review_submission_status = Instant_Articles_Wizard_Review_Submission::getReviewSubmissionStatus();
298
- if ( $review_submission_status === Instant_Articles_Wizard_Review_Submission::STATUS_NOT_SUBMITTED ) {
299
- $articles_for_review = Instant_Articles_Wizard_Review_Submission::getArticlesForReview();
 
 
 
 
300
  }
301
  }
302
- // ----------------------------------
303
-
304
- include( dirname( __FILE__ ) . '/templates/wizard-template.php' );
305
  }
306
 
307
  }
173
  $fb_app_settings = Instant_Articles_Option_FB_App::get_option_decoded();
174
  $fb_page_settings = Instant_Articles_Option_FB_Page::get_option_decoded();
175
 
 
 
 
 
 
 
 
176
  try {
177
+ $client = Client::create(
178
+ $fb_app_settings[ 'app_id' ],
179
+ $fb_app_settings[ 'app_secret' ],
180
+ $fb_page_settings[ 'page_access_token' ],
181
+ $fb_page_settings[ 'page_id' ]
182
+ );
183
+
184
  // Bulk upload articles for review
185
  $articles_for_review = Instant_Articles_Wizard_Review_Submission::getArticlesForReview();
186
  foreach ( $articles_for_review as $post ) {
236
  wp_die( esc_html( 'You do not have sufficient permissions to access this page.' ) );
237
  }
238
 
239
+ try {
240
+ // Read options (they are used on the templates)
241
+ $current_state = Instant_Articles_Wizard_State::get_current_state();
242
+ $fb_page_settings = Instant_Articles_Option_FB_Page::get_option_decoded();
243
+ $fb_app_settings = Instant_Articles_Option_FB_App::get_option_decoded();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
  $fb_helper = new Instant_Articles_Wizard_FB_Helper();
245
+ $settings_url = self::get_url();
246
+
247
+ // Handle redirection from Login flow
248
+ // ----------------------------------
249
+ // Only during STATE_APP_SETUP
250
+ if ( $current_state === Instant_Articles_Wizard_State::STATE_APP_SETUP ) {
251
+ $user_access_token = $fb_helper->get_fb_access_token();
252
+ $permissions = $fb_helper->get_fb_permissions( $user_access_token );
253
+
254
+ // Trigger transition if all needed permissions are granted
255
+ if ( $user_access_token && isset( $permissions[ 'pages_manage_instant_articles' ] ) && isset( $permissions[ 'pages_show_list' ] ) ) {
256
+ Instant_Articles_Wizard_State::do_transition( Instant_Articles_Wizard_State::STATE_PAGE_SELECTION, array(
257
+ 'app_id' => $fb_app_settings[ 'app_id' ],
258
+ 'app_secret' => $fb_app_settings[ 'app_secret' ],
259
+ 'user_access_token' => $user_access_token->getValue()
260
+ ) );
261
+ // Override step
262
+ $current_state = Instant_Articles_Wizard_State::get_current_state();
263
+ }
264
  }
265
+ // ----------------------------------
266
+
267
+ // Handle redirection from Login flow
268
+ // ----------------------------------
269
+ // Only during STATE_PAGE_SELECTION
270
+ if ( $current_state === Instant_Articles_Wizard_State::STATE_PAGE_SELECTION ) {
271
+ $fb_helper = new Instant_Articles_Wizard_FB_Helper();
272
+ try {
273
+ $pages = $fb_helper->get_pages();
274
+ } catch ( Exception $e ) {
275
+ // If we couldn't fetch the pages, revert to the App setup
276
+ Instant_Articles_Wizard_State::do_transition( Instant_Articles_Wizard_State::STATE_APP_SETUP );
277
+ }
278
  }
 
 
279
 
280
+ // Grabs the current configured style
281
+ // ----------------------------------
282
+ // Only during STATE_STYLE_SELECTION
283
+ if ( $current_state === Instant_Articles_Wizard_State::STATE_STYLE_SELECTION ) {
284
+ $settings_style = Instant_Articles_Option_Styles::get_option_decoded();
285
+ if ( isset( $settings_style['article_style'] ) && ! empty( $settings_style['article_style'] ) ) {
286
+ $article_style = $settings_style['article_style'];
287
+ } else {
288
+ $article_style = 'default';
289
+ }
290
+ }
291
+ // ----------------------------------
292
+
293
+
294
+ // Check submission status
295
+ // ----------------------------------
296
+ // Only during STATE_REVIEW_SUBMISSION
297
+ if ( $current_state === Instant_Articles_Wizard_State::STATE_REVIEW_SUBMISSION ) {
298
+ $review_submission_status = Instant_Articles_Wizard_Review_Submission::getReviewSubmissionStatus();
299
+
300
+ if ( $review_submission_status === Instant_Articles_Wizard_Review_Submission::STATUS_NOT_SUBMITTED ) {
301
+ $articles_for_review = Instant_Articles_Wizard_Review_Submission::getArticlesForReview();
302
+
303
+ // Map to Instant_Articles_Post instances
304
+ $instant_articles_for_review = array_map( function ( $article ) {
305
+ $instant_articles_post = new Instant_Articles_Post( $article );
306
+ // Call transformation to load warnings
307
+ $instant_articles_post->to_instant_article();
308
+ return $instant_articles_post;
309
+ }, $articles_for_review );
310
+
311
+ // Filter articles with warnings and not forced
312
+ $instant_articles_with_warnings = array_filter( $instant_articles_for_review, function ( $article ) {
313
+ $has_warnings = ( count( $article->transformer->getWarnings() ) > 0 );
314
+ $force_submit = get_post_meta( $article->get_the_id(), Instant_Articles_Publisher::FORCE_SUBMIT_KEY, true );
315
+ return $has_warnings && ! $force_submit;
316
+ } );
317
+ }
318
+ }
319
+ // ----------------------------------
320
 
321
+ include( dirname( __FILE__ ) . '/templates/wizard-template.php' );
322
+ } catch (Exception $e) {
323
+ if ( Instant_Articles_Wizard_State::get_current_state() !== Instant_Articles_Wizard_State::STATE_APP_SETUP ) {
324
+ // Restarts the wizard
325
+ Instant_Articles_Wizard_State::do_transition( Instant_Articles_Wizard_State::STATE_APP_SETUP );
326
+ echo '<div class="error settings-error notice is-dismissible"><p><strong>'.
327
+ esc_html(
328
+ 'Error processing your request. Check server log for more details. Setup and login again to renew Application credentials. Error message: ' .
329
+ $e->getMessage()
330
+ ) . '</strong></p></div>';
331
+ Instant_Articles_Wizard::render( $ajax, true );
332
  }
333
  }
 
 
 
334
  }
335
 
336
  }
wizard/templates/app-setup-template.php CHANGED
@@ -12,7 +12,7 @@
12
  <!-- Step 1: grab your App ID and App Secret -->
13
  <div class="instant-articles-card">
14
  <div class="instant-articles-card-title">
15
- <h3>Log In with Your Developers App and Facebook Account</h3>
16
  <div class="instant-articles-card-title-right">
17
  <span class="instant-articles-card-title-step">Step 1 of 2</span>
18
  </div>
@@ -23,11 +23,11 @@
23
 
24
  <p>You'll need to log in with your Facebook Developers App ID to connect your plugin to the Facebook Page you'll use to publish your Instant Articles.</p>
25
 
26
- <p><strong>Already have an App ID and Secret?</strong> Just enter them to the right.</p>
27
 
28
  <p><strong>Need to create one?</strong></p>
29
 
30
- <p>Click on the 'Get App ID' button below to begin the process of getting your App ID and Secret. This will open the App set up page in a new tab. Then, follow these steps:</p>
31
 
32
  <ol>
33
  <li>Click on the green '+ Add a New App' button in the upper right corner of the page.</li>
@@ -37,10 +37,10 @@
37
  <li>Click '+Add Platform' at the bottom of the page and select 'Website.'</li>
38
  <li>Under both the 'App Domains' in the main section and 'Site URL' in the 'Website' section, enter this domain: <b><?php echo esc_url( self::get_admin_url() ); ?></b></li>
39
  <li>Click 'Save Changes' in the lower right corner.</li>
40
- <li>Select 'Show' to see your App Secret. Copy your App ID and Secret and enter them to the right.</li>
41
  </ol>
42
 
43
- <p><strong>Need more help?</strong> <a href="https://developers.facebook.com/docs/instant-articles/wordpress-quickstart#appid" target="_blank">See detailed instructions on setting up your App ID in our documentation</a>.</p>
44
 
45
  <a class="instant-articles-button" href="https://developers.facebook.com/apps" target="_blank">
46
  Get App ID
12
  <!-- Step 1: grab your App ID and App Secret -->
13
  <div class="instant-articles-card">
14
  <div class="instant-articles-card-title">
15
+ <h3>Log In With Your Developers App and Facebook Account</h3>
16
  <div class="instant-articles-card-title-right">
17
  <span class="instant-articles-card-title-step">Step 1 of 2</span>
18
  </div>
23
 
24
  <p>You'll need to log in with your Facebook Developers App ID to connect your plugin to the Facebook Page you'll use to publish your Instant Articles.</p>
25
 
26
+ <p><strong>Already have an App ID and App Secret?</strong> Just enter them to the right.</p>
27
 
28
  <p><strong>Need to create one?</strong></p>
29
 
30
+ <p>Click on the 'Get App ID' button below to begin the process of getting your App ID and App Secret. This will open the app set up page in a new tab. Then, follow these steps:</p>
31
 
32
  <ol>
33
  <li>Click on the green '+ Add a New App' button in the upper right corner of the page.</li>
37
  <li>Click '+Add Platform' at the bottom of the page and select 'Website.'</li>
38
  <li>Under both the 'App Domains' in the main section and 'Site URL' in the 'Website' section, enter this domain: <b><?php echo esc_url( self::get_admin_url() ); ?></b></li>
39
  <li>Click 'Save Changes' in the lower right corner.</li>
40
+ <li>Select 'Show' to see your App Secret. Copy your App ID and App Secret and enter them to the right.</li>
41
  </ol>
42
 
43
+ <p>For more detailed instructions on setting up your App ID, <a href="https://developers.facebook.com/docs/instant-articles/wordpress-quickstart#appid" target="_blank">check out the docs</a>.</p>
44
 
45
  <a class="instant-articles-button" href="https://developers.facebook.com/apps" target="_blank">
46
  Get App ID
wizard/templates/overview-template.php CHANGED
@@ -15,7 +15,7 @@
15
  <div class="instant-articles-card-step">
16
  <img src="<?php echo esc_url( plugin_dir_url( __FILE__ ) ); ?>../../assets/key@2x.png">
17
  <h4>Set Up and Log In</h4>
18
- <p>If you don't have one already, set up your Facebook Developers App. Then log in to connect your plugin.</p>
19
  </div>
20
  <div class="instant-articles-card-step">
21
  <img src="<?php echo esc_url( plugin_dir_url( __FILE__ ) ); ?>../../assets/connect@2x.png">
15
  <div class="instant-articles-card-step">
16
  <img src="<?php echo esc_url( plugin_dir_url( __FILE__ ) ); ?>../../assets/key@2x.png">
17
  <h4>Set Up and Log In</h4>
18
+ <p>If you don't have one already, set up your Facebook Developers App. This will allow you to log in and connect your plugin.</p>
19
  </div>
20
  <div class="instant-articles-card-step">
21
  <img src="<?php echo esc_url( plugin_dir_url( __FILE__ ) ); ?>../../assets/connect@2x.png">
wizard/templates/page-selection-template.php CHANGED
@@ -43,12 +43,10 @@
43
  <img class="instant-articles-page-img" src="<?php echo esc_attr( $page[ 'page_picture' ] ) ?>"/>
44
  <label>
45
  <?php echo esc_html( $page[ 'page_name' ] ) ?>
46
- <?php if ( $page[ 'supports_instant_articles' ] ) : ?>
47
- <span class="page-enabled">✔ Enabled</span>
48
- <?php else : ?>
49
  <span class="page-not-enabled">
50
- This page has not been signed up yet.
51
- <a href="https://www.facebook.com/instant_articles/signup?redirect_uri=<?php echo urlencode( $settings_url ) ?>&page_id=<?php echo urlencode( $page[ 'page_id' ] ) ?>">Sign Up</a>.
52
  </span>
53
  <?php endif; ?>
54
  </label>
43
  <img class="instant-articles-page-img" src="<?php echo esc_attr( $page[ 'page_picture' ] ) ?>"/>
44
  <label>
45
  <?php echo esc_html( $page[ 'page_name' ] ) ?>
46
+ <?php if ( ! $page[ 'supports_instant_articles' ] ) : ?>
 
 
47
  <span class="page-not-enabled">
48
+ First, <a href="https://www.facebook.com/instant_articles/signup?redirect_uri=<?php echo rawurlencode( $settings_url ) ?>&page_id=<?php echo rawurlencode( $page[ 'page_id' ] ) ?>">sign up</a>
49
+ this Page to access the Instant Articles tools through Facebook. Then select it here.
50
  </span>
51
  <?php endif; ?>
52
  </label>
wizard/templates/review-submission-template.php CHANGED
@@ -46,28 +46,62 @@ switch ( $review_submission_status ) :
46
 
47
  case Instant_Articles_Wizard_Review_Submission::STATUS_NOT_SUBMITTED : ?>
48
 
49
- <?php if ( count($articles_for_review) >= Instant_Articles_Wizard_Review_Submission::MIN_ARTICLES ) : ?>
50
- <div class="instant-articles-card">
51
- <div class="instant-articles-card-title">
52
- <h3>Submit for Review</h3>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  </div>
54
- <div class="instant-articles-card-content">
55
- <div class="instant-articles-card-content-box instant-articles-card-content-full">
56
- <p>
57
- The Instant Articles team will review a sample batch of your Instant Articles before you can begin to publish.
58
- Click the 'Submit for Review" button below to send the last <?php echo esc_html( Instant_Articles_Wizard_Review_Submission::MIN_ARTICLES ); ?>
59
- articles you've published to the team for review.
60
- </p>
61
- <p>
62
- It will take us 2 business days to complete the review.
63
- Once we've had a chance to take a look, we'll let you know if you're ready to start publishing or if you need to make some updates.
64
- </p>
65
- <button id="instant-articles-wizard-submit-for-review" class="instant-articles-button instant-articles-button-highlight">
66
- <label>Submit for Review</label>
67
- </button>
 
 
 
 
 
 
68
  </div>
69
  </div>
70
- </div>
71
  <?php else: ?>
72
  <div class="instant-articles-card">
73
  <div class="instant-articles-card-title">
46
 
47
  case Instant_Articles_Wizard_Review_Submission::STATUS_NOT_SUBMITTED : ?>
48
 
49
+ <?php if ( count( $articles_for_review ) >= Instant_Articles_Wizard_Review_Submission::MIN_ARTICLES ) : ?>
50
+ <?php if ( count( $instant_articles_with_warnings ) > 0 ) : ?>
51
+ <div class="instant-articles-card">
52
+ <div class="instant-articles-card-title">
53
+ <h3>Submit for Review</h3>
54
+ </div>
55
+ <div class="instant-articles-card-content">
56
+ <div class="instant-articles-card-content-box instant-articles-card-content-full">
57
+ <p>
58
+ In order to begin publishing Instant Articles, our team needs to review a sample
59
+ batch of <?php echo esc_html( Instant_Articles_Wizard_Review_Submission::MIN_ARTICLES ); ?> of your Instant Articles.
60
+ </p>
61
+ <p>
62
+ The plugin tried to automatically transform your last <?php echo esc_html( Instant_Articles_Wizard_Review_Submission::MIN_ARTICLES ); ?>
63
+ posts into Instant Articles as a sample to submit for review, but some of these posts contained elements the plugin didn't know how to convert.
64
+ </p>
65
+ <p>
66
+ Before submitting for review, you'll need to handle the warnings on these articles by looking at the "Instant Articles" box on the post edit screen:
67
+ </p>
68
+ <ul>
69
+ <?php foreach ($instant_articles_with_warnings as $article): ?>
70
+ <li><?php edit_post_link( $article->get_the_title(), '- ', '', $article->get_the_id() ); ?> </li>
71
+ <?php endforeach; ?>
72
+ </ul>
73
+ <p>
74
+ Once you've handled these warnings, please return to this page and click the 'Submit for Review" button below.
75
+ </p>
76
+ <button id="instant-articles-wizard-submit-for-review" class="instant-articles-button-disabled instant-articles-button instant-articles-button-highlight">
77
+ <label>Submit for Review</label>
78
+ </button>
79
+ </div>
80
+ </div>
81
  </div>
82
+ <?php else: ?>
83
+ <div class="instant-articles-card">
84
+ <div class="instant-articles-card-title">
85
+ <h3>Submit for Review</h3>
86
+ </div>
87
+ <div class="instant-articles-card-content">
88
+ <div class="instant-articles-card-content-box instant-articles-card-content-full">
89
+ <p>
90
+ The Instant Articles team will review a sample batch of your Instant Articles before you can begin to publish.
91
+ Click the 'Submit for Review" button below to send the last <?php echo esc_html( Instant_Articles_Wizard_Review_Submission::MIN_ARTICLES ); ?>
92
+ articles you've published to the team for review.
93
+ </p>
94
+ <p>
95
+ It will take us 2 business days to complete the review.
96
+ Once we've had a chance to take a look, we'll let you know if you're ready to start publishing or if you need to make some updates.
97
+ </p>
98
+ <button id="instant-articles-wizard-submit-for-review" class="instant-articles-button instant-articles-button-highlight">
99
+ <label>Submit for Review</label>
100
+ </button>
101
+ </div>
102
  </div>
103
  </div>
104
+ <?php endif; ?>
105
  <?php else: ?>
106
  <div class="instant-articles-card">
107
  <div class="instant-articles-card-title">
wizard/templates/style-selection-template.php CHANGED
@@ -40,12 +40,12 @@
40
  <div class="instant-articles-card-content-box instant-articles-card-content-full">
41
  <p>
42
  Customize the look and feel of your articles with one or more unique styles.
43
- Try to make your Instant Articles look as much like your mobile web articles as possible
44
- and be sure to upload your publication or blog's logo.
45
  <a href="https://developers.facebook.com/docs/instant-articles/guides/design" target="_blank">Learn more in our design guidelines</a>.
46
  </p>
47
  <p>
48
- Want to preview your style? Download Facebook Pages Manager on your
49
  <a href="https://itunes.apple.com/us/app/facebook-pages-manager/id514643583?mt=8" target="_blank">iPhone</a>
50
  or
51
  <a href="https://play.google.com/store/apps/details?id=com.facebook.pages.app" target="_blank">Android</a>
40
  <div class="instant-articles-card-content-box instant-articles-card-content-full">
41
  <p>
42
  Customize the look and feel of your articles with one or more unique styles.
43
+ Try to have design consistency between your Instant Articles and mobile
44
+ web articles and also ensure you upload your publication or blog's logo.
45
  <a href="https://developers.facebook.com/docs/instant-articles/guides/design" target="_blank">Learn more in our design guidelines</a>.
46
  </p>
47
  <p>
48
+ Want to preview how your articles will look? Download Facebook Pages Manager on your
49
  <a href="https://itunes.apple.com/us/app/facebook-pages-manager/id514643583?mt=8" target="_blank">iPhone</a>
50
  or
51
  <a href="https://play.google.com/store/apps/details?id=com.facebook.pages.app" target="_blank">Android</a>
wizard/templates/wizard-template.php CHANGED
@@ -98,15 +98,18 @@
98
 
99
  <?php if ( ! $ajax ) : ?>
100
  </div>
 
101
  <?php if ( count( get_settings_errors() ) !== 0 ) : ?>
102
- <a class="instant-articles-advanced-settings instant-articles-wizard-toggle" href="#">▼ Advanced Settings</a>
103
- <div class="instant-articles-wizard-advanced-settings-box" style="display: block;">
104
- <?php include( dirname( __FILE__ ) . '/advanced-template.php' ); ?>
105
- </div>
106
  <?php else: ?>
107
- <a class="instant-articles-advanced-settings instant-articles-wizard-toggle" href="#">► Advanced Settings</a>
108
- <div class="instant-articles-wizard-advanced-settings-box" style="display: none;">
109
- <?php include( dirname( __FILE__ ) . '/advanced-template.php' ); ?>
110
- </div>
111
  <?php endif; ?>
 
 
 
 
 
 
 
 
112
  <?php endif; ?>
98
 
99
  <?php if ( ! $ajax ) : ?>
100
  </div>
101
+
102
  <?php if ( count( get_settings_errors() ) !== 0 ) : ?>
103
+ <p class="instant-articles-advanced-settings" data-state="opened">
 
 
 
104
  <?php else: ?>
105
+ <p class="instant-articles-advanced-settings" data-state="closed">
 
 
 
106
  <?php endif; ?>
107
+
108
+ <span class="instant-articles-wizard-toggle instant-articles-wizard-toggle-closed">Already set up? <a href="#">Open Advanced Settings now</a></span>
109
+ <span class="instant-articles-wizard-toggle instant-articles-wizard-toggle-opened"><a href="#">Close Advanced Settings</a></span>
110
+ </p>
111
+
112
+ <div class="instant-articles-wizard-advanced-settings-box">
113
+ <?php include( dirname( __FILE__ ) . '/advanced-template.php' ); ?>
114
+ </div>
115
  <?php endif; ?>
wpcom-helper.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Wrap the wpcom tracking pixel to comply with the FBIA spec
4
+ // https://developers.facebook.com/docs/instant-articles/reference/analytics
5
+ function wpcom_fbia_stats_pixel() {
6
+ global $post;
7
+
8
+ if ( ! defined( 'INSTANT_ARTICLES_SLUG' ) ) {
9
+ return;
10
+ }
11
+
12
+ if ( ! is_feed( INSTANT_ARTICLES_SLUG ) ) {
13
+ return;
14
+ }
15
+
16
+ // Stop wpcom adding the tracking pixel
17
+ remove_filter( 'the_content', 'add_bug_to_feed', 100 );
18
+
19
+ add_filter( 'the_content', '_wpcom_fbia_stats_pixel', 100 );
20
+
21
+ }
22
+ add_action( 'template_redirect', 'wpcom_fbia_stats_pixel' );
23
+
24
+ function _wpcom_fbia_stats_pixel( $content ) {
25
+ global $post, $current_blog;
26
+
27
+ if ( ! is_feed() ) {
28
+ return $content;
29
+ }
30
+
31
+ $hostname = isset( $_SERVER['HTTP_HOST'] ) ? sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ) : ''; // input var okay
32
+
33
+ $url = 'https://pixel.wp.com/b.gif?host=' . $hostname . '&blog=' . $current_blog->blog_id . '&post=' . $post->ID . '&subd=' . str_replace( '.wordpress.com', '', $current_blog->domain ) . '&ref=&feed=1';
34
+
35
+ $fbia_pixel = '
36
+ <figure class="op-tracker">
37
+ <iframe>
38
+ <script>
39
+ var x = new Image(); x.src = "' . esc_js( $url ) . '&rand=" +Math.random();
40
+ </script>
41
+ </iframe>
42
+ </figure>';
43
+
44
+ return $content . $fbia_pixel;
45
+
46
+ }
47
+
48
+ // make sure these function run in wp.com environment where `plugins_loaded` is already fired when loading the plugin
49
+ add_action( 'after_setup_theme', 'instant_articles_load_textdomain' );
50
+ add_action( 'after_setup_theme', 'instant_articles_load_compat' );