AMP for WordPress - Version 2.0.6

Version Description

Download this release

Release Info

Developer westonruter
Plugin Icon 128x128 AMP for WordPress
Version 2.0.6
Comparing to
See all releases

Code changes from version 2.0.5 to 2.0.6

amp.php CHANGED
@@ -5,7 +5,7 @@
5
  * Plugin URI: https://amp-wp.org
6
  * Author: AMP Project Contributors
7
  * Author URI: https://github.com/ampproject/amp-wp/graphs/contributors
8
- * Version: 2.0.5
9
  * License: GPLv2 or later
10
  * Requires at least: 4.9
11
  * Requires PHP: 5.6
@@ -15,7 +15,7 @@
15
 
16
  define( 'AMP__FILE__', __FILE__ );
17
  define( 'AMP__DIR__', dirname( __FILE__ ) );
18
- define( 'AMP__VERSION', '2.0.5' );
19
 
20
  /**
21
  * Errors encountered while loading the plugin.
5
  * Plugin URI: https://amp-wp.org
6
  * Author: AMP Project Contributors
7
  * Author URI: https://github.com/ampproject/amp-wp/graphs/contributors
8
+ * Version: 2.0.6
9
  * License: GPLv2 or later
10
  * Requires at least: 4.9
11
  * Requires PHP: 5.6
15
 
16
  define( 'AMP__FILE__', __FILE__ );
17
  define( 'AMP__DIR__', dirname( __FILE__ ) );
18
+ define( 'AMP__VERSION', '2.0.6' );
19
 
20
  /**
21
  * Errors encountered while loading the plugin.
includes/amp-helper-functions.php CHANGED
@@ -409,8 +409,8 @@ function amp_add_frontend_actions() {
409
  function amp_is_available() {
410
  global $pagenow, $wp_query;
411
 
412
- // Short-circuit for admin requests or requests to non-frontend pages.
413
- if ( is_admin() || in_array( $pagenow, [ 'wp-login.php', 'wp-signup.php', 'wp-activate.php', 'repair.php' ], true ) ) {
414
  return false;
415
  }
416
 
409
  function amp_is_available() {
410
  global $pagenow, $wp_query;
411
 
412
+ // Short-circuit for cron, CLI, admin requests or requests to non-frontend pages.
413
+ if ( wp_doing_cron() || ( defined( 'WP_CLI' ) && WP_CLI ) || is_admin() || in_array( $pagenow, [ 'wp-login.php', 'wp-signup.php', 'wp-activate.php', 'repair.php' ], true ) ) {
414
  return false;
415
  }
416
 
includes/embeds/class-amp-base-embed-handler.php CHANGED
@@ -97,7 +97,7 @@ abstract class AMP_Base_Embed_Handler {
97
  implode(
98
  '',
99
  array_map(
100
- function ( $attr_name ) {
101
  return sprintf( '(?=[^>]*?%1$s="(?P<%1$s>[^"]+)")?', preg_quote( $attr_name, '/' ) );
102
  },
103
  $attribute_names
@@ -109,4 +109,46 @@ abstract class AMP_Base_Embed_Handler {
109
  }
110
  return wp_array_slice_assoc( $matches, $attribute_names );
111
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  }
97
  implode(
98
  '',
99
  array_map(
100
+ static function ( $attr_name ) {
101
  return sprintf( '(?=[^>]*?%1$s="(?P<%1$s>[^"]+)")?', preg_quote( $attr_name, '/' ) );
102
  },
103
  $attribute_names
109
  }
110
  return wp_array_slice_assoc( $matches, $attribute_names );
111
  }
112
+
113
+ /**
114
+ * Get all child elements of the specified element.
115
+ *
116
+ * @since 2.0.6
117
+ *
118
+ * @param DOMElement $node Element.
119
+ * @return DOMElement[] Array of child elements for specified element.
120
+ */
121
+ protected function get_child_elements( DOMElement $node ) {
122
+ return array_filter(
123
+ iterator_to_array( $node->childNodes ),
124
+ static function ( DOMNode $child ) {
125
+ return $child instanceof DOMElement;
126
+ }
127
+ );
128
+ }
129
+
130
+ /**
131
+ * Replace an element's parent with itself if the parent is a <p> tag which has no attributes and has no other children.
132
+ *
133
+ * This usually happens while `wpautop()` processes the element.
134
+ *
135
+ * @since 2.0.6
136
+ * @see AMP_Tag_And_Attribute_Sanitizer::remove_node()
137
+ *
138
+ * @param DOMElement $node Node.
139
+ */
140
+ protected function unwrap_p_element( DOMElement $node ) {
141
+ $parent_node = $node->parentNode;
142
+ if (
143
+ $parent_node instanceof DOMElement
144
+ &&
145
+ 'p' === $parent_node->tagName
146
+ &&
147
+ false === $parent_node->hasAttributes()
148
+ &&
149
+ 1 === count( $this->get_child_elements( $parent_node ) )
150
+ ) {
151
+ $parent_node->parentNode->replaceChild( $node, $parent_node );
152
+ }
153
+ }
154
  }
includes/embeds/class-amp-facebook-embed-handler.php CHANGED
@@ -13,6 +13,21 @@ use AmpProject\Dom\Document;
13
  * @internal
14
  */
15
  class AMP_Facebook_Embed_Handler extends AMP_Base_Embed_Handler {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  /**
17
  * Default height.
18
  *
@@ -38,14 +53,57 @@ class AMP_Facebook_Embed_Handler extends AMP_Base_Embed_Handler {
38
  * Registers embed.
39
  */
40
  public function register_embed() {
41
- // Not implemented.
42
  }
43
 
44
  /**
45
  * Unregisters embed.
46
  */
47
  public function unregister_embed() {
48
- // Not implemented.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  }
50
 
51
  /**
@@ -54,6 +112,14 @@ class AMP_Facebook_Embed_Handler extends AMP_Base_Embed_Handler {
54
  * @param Document $dom DOM.
55
  */
56
  public function sanitize_raw_embeds( Document $dom ) {
 
 
 
 
 
 
 
 
57
  $nodes = $dom->getElementsByTagName( $this->sanitize_tag );
58
  $num_nodes = $nodes->length;
59
 
13
  * @internal
14
  */
15
  class AMP_Facebook_Embed_Handler extends AMP_Base_Embed_Handler {
16
+
17
+ /**
18
+ * URL pattern.
19
+ *
20
+ * @var string
21
+ */
22
+ const URL_PATTERN = '#https?://(www\.)?facebook\.com/.*#i';
23
+
24
+ /**
25
+ * Default width.
26
+ *
27
+ * @var int
28
+ */
29
+ protected $DEFAULT_WIDTH = 600;
30
+
31
  /**
32
  * Default height.
33
  *
53
  * Registers embed.
54
  */
55
  public function register_embed() {
56
+ wp_embed_register_handler( $this->amp_tag, self::URL_PATTERN, [ $this, 'oembed' ], -1 );
57
  }
58
 
59
  /**
60
  * Unregisters embed.
61
  */
62
  public function unregister_embed() {
63
+ wp_embed_unregister_handler( $this->amp_tag, -1 );
64
+ }
65
+
66
+ /**
67
+ * WordPress oEmbed rendering callback.
68
+ *
69
+ * @param array $matches URL pattern matches.
70
+ * @param array $attr Matched attributes.
71
+ * @param string $url Matched URL.
72
+ * @return string HTML markup for rendered embed.
73
+ */
74
+ public function oembed( $matches, $attr, $url ) {
75
+ return $this->render( [ 'url' => $url ] );
76
+ }
77
+
78
+ /**
79
+ * Gets the rendered embed markup.
80
+ *
81
+ * @param array $args Embed rendering arguments.
82
+ * @return string HTML markup for rendered embed.
83
+ */
84
+ public function render( $args ) {
85
+ $args = wp_parse_args(
86
+ $args,
87
+ [
88
+ 'url' => false,
89
+ ]
90
+ );
91
+
92
+ if ( empty( $args['url'] ) ) {
93
+ return '';
94
+ }
95
+
96
+ $this->did_convert_elements = true;
97
+
98
+ return AMP_HTML_Utils::build_tag(
99
+ $this->amp_tag,
100
+ [
101
+ 'data-href' => $args['url'],
102
+ 'layout' => 'responsive',
103
+ 'width' => $this->args['width'],
104
+ 'height' => $this->args['height'],
105
+ ]
106
+ );
107
  }
108
 
109
  /**
112
  * @param Document $dom DOM.
113
  */
114
  public function sanitize_raw_embeds( Document $dom ) {
115
+ // If there were any previous embeds in the DOM that were wrapped by `wpautop()`, unwrap them.
116
+ $embed_nodes = $dom->xpath->query( "//p/{$this->amp_tag}" );
117
+ if ( $embed_nodes->length ) {
118
+ foreach ( $embed_nodes as $embed_node ) {
119
+ $this->unwrap_p_element( $embed_node );
120
+ }
121
+ }
122
+
123
  $nodes = $dom->getElementsByTagName( $this->sanitize_tag );
124
  $num_nodes = $nodes->length;
125
 
includes/sanitizers/class-amp-base-sanitizer.php CHANGED
@@ -321,6 +321,7 @@ abstract class AMP_Base_Sanitizer {
321
  $attributes['style'] = $this->reassemble_style_string( $styles );
322
  }
323
  $attributes['layout'] = 'fill';
 
324
  return $attributes;
325
  }
326
 
321
  $attributes['style'] = $this->reassemble_style_string( $styles );
322
  }
323
  $attributes['layout'] = 'fill';
324
+ unset( $attributes['height'], $attributes['width'] );
325
  return $attributes;
326
  }
327
 
includes/sanitizers/class-amp-core-theme-sanitizer.php CHANGED
@@ -130,7 +130,6 @@ class AMP_Core_Theme_Sanitizer extends AMP_Base_Sanitizer {
130
  ],
131
  'add_twentynineteen_masthead_styles' => [],
132
  'adjust_twentynineteen_images' => [],
133
- 'accept_remove_moz_document_at_rule' => [],
134
  ];
135
 
136
  // Twenty Seventeen.
@@ -289,27 +288,6 @@ class AMP_Core_Theme_Sanitizer extends AMP_Base_Sanitizer {
289
  return [];
290
  }
291
 
292
- /**
293
- * Accept the removal of `@-moz-document` at-rules.
294
- *
295
- * This is temporary with the hope that the at-rule will become allowed in AMP.
296
- *
297
- * @since 2.0.1
298
- * @link https://github.com/ampproject/amp-wp/issues/5302
299
- * @link https://github.com/ampproject/amphtml/issues/26406
300
- */
301
- public static function accept_remove_moz_document_at_rule() {
302
- AMP_Validation_Error_Taxonomy::accept_validation_errors(
303
- [
304
- AMP_Style_Sanitizer::CSS_SYNTAX_INVALID_AT_RULE => [
305
- [
306
- 'at_rule' => '-moz-document',
307
- ],
308
- ],
309
- ]
310
- );
311
- }
312
-
313
  /**
314
  * Adds extra theme support arguments on the fly.
315
  *
130
  ],
131
  'add_twentynineteen_masthead_styles' => [],
132
  'adjust_twentynineteen_images' => [],
 
133
  ];
134
 
135
  // Twenty Seventeen.
288
  return [];
289
  }
290
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
291
  /**
292
  * Adds extra theme support arguments on the fly.
293
  *
includes/sanitizers/class-amp-iframe-sanitizer.php CHANGED
@@ -234,7 +234,7 @@ class AMP_Iframe_Sanitizer extends AMP_Base_Sanitizer {
234
  *
235
  * @type string $src IFrame URL - Empty if HTTPS required per $this->args['require_https_src']
236
  * @type int $width <iframe> width attribute - Set to numeric value if px or %
237
- * @type int $height <iframe> width attribute - Set to numeric value if px or %
238
  * @type string $sandbox <iframe> `sandbox` attribute - Pass along if found; default to value of self::SANDBOX_DEFAULTS
239
  * @type string $class <iframe> `class` attribute - Pass along if found
240
  * @type string $sizes <iframe> `sizes` attribute - Pass along if found
234
  *
235
  * @type string $src IFrame URL - Empty if HTTPS required per $this->args['require_https_src']
236
  * @type int $width <iframe> width attribute - Set to numeric value if px or %
237
+ * @type int $height <iframe> height attribute - Set to numeric value if px or %
238
  * @type string $sandbox <iframe> `sandbox` attribute - Pass along if found; default to value of self::SANDBOX_DEFAULTS
239
  * @type string $class <iframe> `class` attribute - Pass along if found
240
  * @type string $sizes <iframe> `sizes` attribute - Pass along if found
includes/sanitizers/class-amp-link-sanitizer.php CHANGED
@@ -140,6 +140,23 @@ class AMP_Link_Sanitizer extends AMP_Base_Sanitizer {
140
  }
141
  }
142
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  /**
144
  * Process element.
145
  *
@@ -154,6 +171,11 @@ class AMP_Link_Sanitizer extends AMP_Base_Sanitizer {
154
  return;
155
  }
156
 
 
 
 
 
 
157
  // Gather the rel values that were attributed to the element.
158
  // Note that links and forms may both have this attribute.
159
  // See <https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel>.
140
  }
141
  }
142
 
143
+ /**
144
+ * Check if element is descendant of a template element.
145
+ *
146
+ * @param DOMElement $node Node.
147
+ * @return bool Descendant of template.
148
+ */
149
+ private function is_descendant_of_template_element( DOMElement $node ) {
150
+ while ( $node instanceof DOMElement ) {
151
+ $parent = $node->parentNode;
152
+ if ( $parent instanceof DOMElement && Tag::TEMPLATE === $parent->tagName ) {
153
+ return true;
154
+ }
155
+ $node = $parent;
156
+ }
157
+ return false;
158
+ }
159
+
160
  /**
161
  * Process element.
162
  *
171
  return;
172
  }
173
 
174
+ // Skip links with template variables.
175
+ if ( preg_match( '/{{[^}]+?}}/', $url ) && $this->is_descendant_of_template_element( $element ) ) {
176
+ return;
177
+ }
178
+
179
  // Gather the rel values that were attributed to the element.
180
  // Note that links and forms may both have this attribute.
181
  // See <https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel>.
includes/sanitizers/class-amp-style-sanitizer.php CHANGED
@@ -381,15 +381,6 @@ class AMP_Style_Sanitizer extends AMP_Base_Sanitizer {
381
  * @return bool Returns true if the plugin's forked version of PHP-CSS-Parser is loaded by Composer.
382
  */
383
  public static function has_required_php_css_parser() {
384
- $has_required_methods = (
385
- method_exists( 'Sabberworm\CSS\CSSList\Document', 'splice' )
386
- &&
387
- method_exists( 'Sabberworm\CSS\CSSList\Document', 'replace' )
388
- );
389
- if ( ! $has_required_methods ) {
390
- return false;
391
- }
392
-
393
  $reflection = new ReflectionClass( 'Sabberworm\CSS\OutputFormat' );
394
 
395
  $has_output_format_extensions = (
@@ -1570,7 +1561,7 @@ class AMP_Style_Sanitizer extends AMP_Base_Sanitizer {
1570
  $parsed = null;
1571
  $cache_key = null;
1572
  $cached = true;
1573
- $cache_group = 'amp-parsed-stylesheet-v33'; // This should be bumped whenever the PHP-CSS-Parser is updated or parsed format is updated.
1574
  $use_transients = $this->should_use_transient_caching();
1575
 
1576
  $cache_impacting_options = array_merge(
@@ -1743,7 +1734,7 @@ class AMP_Style_Sanitizer extends AMP_Base_Sanitizer {
1743
  );
1744
  $viewport_rules = $parsed_stylesheet['viewport_rules'];
1745
 
1746
- if ( ! empty( $parsed_stylesheet['css_document'] ) && method_exists( $css_list, 'replace' ) ) {
1747
  /**
1748
  * CSS Doc.
1749
  *
@@ -1751,10 +1742,7 @@ class AMP_Style_Sanitizer extends AMP_Base_Sanitizer {
1751
  */
1752
  $css_document = $parsed_stylesheet['css_document'];
1753
 
1754
- // Work around bug in \Sabberworm\CSS\CSSList\CSSList::replace() when array keys are not 0-based.
1755
- $css_list->setContents( array_values( $css_list->getContents() ) );
1756
-
1757
- $css_list->replace( $item, $css_document->getContents() );
1758
  } else {
1759
  $css_list->remove( $item );
1760
  }
@@ -1762,6 +1750,32 @@ class AMP_Style_Sanitizer extends AMP_Base_Sanitizer {
1762
  return compact( 'validation_results', 'imported_font_urls', 'viewport_rules' );
1763
  }
1764
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1765
  /**
1766
  * Create validated CSS document.
1767
  *
@@ -2138,7 +2152,24 @@ class AMP_Style_Sanitizer extends AMP_Base_Sanitizer {
2138
  $this->process_css_declaration_block( $css_item, $css_list, $options )
2139
  );
2140
  } elseif ( $css_item instanceof AtRuleBlockList ) {
2141
- if ( ! in_array( $css_item->atRuleName(), $options['allowed_at_rules'], true ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2142
  $error = [
2143
  'code' => self::CSS_SYNTAX_INVALID_AT_RULE,
2144
  'at_rule' => $css_item->atRuleName(),
@@ -2702,13 +2733,12 @@ class AMP_Style_Sanitizer extends AMP_Base_Sanitizer {
2702
  );
2703
  $important_ruleset->setRules( $importants );
2704
 
2705
- $i = array_search( $ruleset, $css_list->getContents(), true );
2706
- if ( false !== $i && method_exists( $css_list, 'splice' ) ) {
2707
- $css_list->splice( $i + 1, 0, [ $important_ruleset ] );
2708
- } else {
2709
- $css_list->append( $important_ruleset );
2710
  }
2711
-
2712
  return $results;
2713
  }
2714
 
381
  * @return bool Returns true if the plugin's forked version of PHP-CSS-Parser is loaded by Composer.
382
  */
383
  public static function has_required_php_css_parser() {
 
 
 
 
 
 
 
 
 
384
  $reflection = new ReflectionClass( 'Sabberworm\CSS\OutputFormat' );
385
 
386
  $has_output_format_extensions = (
1561
  $parsed = null;
1562
  $cache_key = null;
1563
  $cached = true;
1564
+ $cache_group = 'amp-parsed-stylesheet-v34'; // This should be bumped whenever the PHP-CSS-Parser is updated or parsed format is updated.
1565
  $use_transients = $this->should_use_transient_caching();
1566
 
1567
  $cache_impacting_options = array_merge(
1734
  );
1735
  $viewport_rules = $parsed_stylesheet['viewport_rules'];
1736
 
1737
+ if ( ! empty( $parsed_stylesheet['css_document'] ) ) {
1738
  /**
1739
  * CSS Doc.
1740
  *
1742
  */
1743
  $css_document = $parsed_stylesheet['css_document'];
1744
 
1745
+ $this->replace_inside_css_list( $css_list, $item, $css_document->getContents() );
 
 
 
1746
  } else {
1747
  $css_list->remove( $item );
1748
  }
1750
  return compact( 'validation_results', 'imported_font_urls', 'viewport_rules' );
1751
  }
1752
 
1753
+ /**
1754
+ * Replace an item inside of a CSSList.
1755
+ *
1756
+ * This is being used instead of `CSSList::splice()` because it uses `array_splice()` which does not work properly
1757
+ * if the array keys are not sequentially indexed from 0, which happens when `CSSList::remove()` is employed.
1758
+ *
1759
+ * @see CSSList::splice()
1760
+ * @see CSSList::replace()
1761
+ * @see CSSList::remove()
1762
+ *
1763
+ * @param CSSList $css_list CSS list.
1764
+ * @param AtRule|RuleSet|CSSList $old_item Old item.
1765
+ * @param AtRule[]|RuleSet[]|CSSList[] $new_items New item(s). If empty, the old item is simply removed.
1766
+ * @return bool Whether the replacement was successful.
1767
+ */
1768
+ private function replace_inside_css_list( CSSList $css_list, $old_item, $new_items = [] ) {
1769
+ $contents = array_values( $css_list->getContents() ); // Required to obtain the offset instead of the index.
1770
+ $offset = array_search( $old_item, $contents, true );
1771
+ if ( false !== $offset ) {
1772
+ array_splice( $contents, $offset, 1, $new_items );
1773
+ $css_list->setContents( $contents );
1774
+ return true;
1775
+ }
1776
+ return false;
1777
+ }
1778
+
1779
  /**
1780
  * Create validated CSS document.
1781
  *
2152
  $this->process_css_declaration_block( $css_item, $css_list, $options )
2153
  );
2154
  } elseif ( $css_item instanceof AtRuleBlockList ) {
2155
+ if (
2156
+ '-moz-document' === $css_item->atRuleName()
2157
+ &&
2158
+ 'url-prefix()' === $css_item->atRuleArgs()
2159
+ &&
2160
+ in_array( 'supports', $options['allowed_at_rules'], true )
2161
+ ) {
2162
+ // Replace `@-moz-document url-prefix()` with `@supports (-moz-appearance:meterbar)` as an alternative
2163
+ // way to provide Firefox-specific style rules. This is a workaround since @-moz-document is not
2164
+ // yet allowed in AMP, and this use of @supports is another recognized Firefox-specific CSS hack,
2165
+ // per <http://browserhacks.com/#hack-8e9b5504d9fda44ec75169381b3c3157>.
2166
+ // For adding @-moz-document to AMP, see <https://github.com/ampproject/amphtml/issues/26406>.
2167
+ $new_css_item = new AtRuleBlockList( 'supports', '(-moz-appearance:meterbar)' );
2168
+ $new_css_item->setContents( $css_item->getContents() );
2169
+ $this->replace_inside_css_list( $css_list, $css_item, [ $new_css_item ] );
2170
+ $css_item = $new_css_item; // To process_css_list below.
2171
+ $sanitized = false;
2172
+ } elseif ( ! in_array( $css_item->atRuleName(), $options['allowed_at_rules'], true ) ) {
2173
  $error = [
2174
  'code' => self::CSS_SYNTAX_INVALID_AT_RULE,
2175
  'at_rule' => $css_item->atRuleName(),
2733
  );
2734
  $important_ruleset->setRules( $importants );
2735
 
2736
+ $contents = array_values( $css_list->getContents() ); // Ensure keys are 0-indexed and sequential.
2737
+ $offset = array_search( $ruleset, $contents, true );
2738
+ if ( false !== $offset ) {
2739
+ array_splice( $contents, $offset + 1, 0, [ $important_ruleset ] );
2740
+ $css_list->setContents( $contents );
2741
  }
 
2742
  return $results;
2743
  }
2744
 
includes/sanitizers/class-amp-tag-and-attribute-sanitizer.php CHANGED
@@ -1312,7 +1312,7 @@ class AMP_Tag_And_Attribute_Sanitizer extends AMP_Base_Sanitizer {
1312
  $allow_fluid = Layout::FLUID === $layout_attr;
1313
  $allow_auto = true;
1314
 
1315
- $input_width = new CssLength( $node->getAttribute( Attribute::WIDTH ) );
1316
  $input_width->validate( $allow_auto, $allow_fluid );
1317
  if ( ! $input_width->isValid() ) {
1318
  return [
@@ -1321,7 +1321,7 @@ class AMP_Tag_And_Attribute_Sanitizer extends AMP_Base_Sanitizer {
1321
  ];
1322
  }
1323
 
1324
- $input_height = new CssLength( $node->getAttribute( Attribute::HEIGHT ) );
1325
  $input_height->validate( $allow_auto, $allow_fluid );
1326
  if ( ! $input_height->isValid() ) {
1327
  return [
1312
  $allow_fluid = Layout::FLUID === $layout_attr;
1313
  $allow_auto = true;
1314
 
1315
+ $input_width = new CssLength( $node->hasAttribute( Attribute::WIDTH ) ? $node->getAttribute( Attribute::WIDTH ) : null );
1316
  $input_width->validate( $allow_auto, $allow_fluid );
1317
  if ( ! $input_width->isValid() ) {
1318
  return [
1321
  ];
1322
  }
1323
 
1324
+ $input_height = new CssLength( $node->hasAttribute( Attribute::HEIGHT ) ? $node->getAttribute( Attribute::HEIGHT ) : null );
1325
  $input_height->validate( $allow_auto, $allow_fluid );
1326
  if ( ! $input_height->isValid() ) {
1327
  return [
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: google, xwp, automattic, westonruter, albertomedina, schlessera, s
3
  Tags: amp, mobile, optimization, accelerated mobile pages, framework, components, blocks, performance, ux, seo, official
4
  Requires at least: 4.9
5
  Tested up to: 5.5
6
- Stable tag: 2.0.5
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
  Requires PHP: 5.6
3
  Tags: amp, mobile, optimization, accelerated mobile pages, framework, components, blocks, performance, ux, seo, official
4
  Requires at least: 4.9
5
  Tested up to: 5.5
6
+ Stable tag: 2.0.6
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
  Requires PHP: 5.6
src/Admin/ReaderThemes.php CHANGED
@@ -384,8 +384,11 @@ final class ReaderThemes {
384
  }
385
 
386
  if ( null === $this->can_install_themes ) {
387
- if ( ! class_exists( 'WP_Upgrader' ) ) {
388
  require_once ABSPATH . 'wp-admin/includes/file.php';
 
 
 
389
  require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
390
  }
391
 
384
  }
385
 
386
  if ( null === $this->can_install_themes ) {
387
+ if ( ! function_exists( 'request_filesystem_credentials' ) ) {
388
  require_once ABSPATH . 'wp-admin/includes/file.php';
389
+ }
390
+
391
+ if ( ! class_exists( 'WP_Upgrader' ) ) {
392
  require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
393
  }
394
 
src/PluginSuppression.php CHANGED
@@ -45,6 +45,18 @@ final class PluginSuppression implements Service, Registerable {
45
  */
46
  private $callback_reflection;
47
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  /**
49
  * Instantiate the plugin suppression service.
50
  *
@@ -63,6 +75,18 @@ final class PluginSuppression implements Service, Registerable {
63
  add_filter( 'amp_default_options', [ $this, 'filter_default_options' ] );
64
  add_filter( 'amp_options_updating', [ $this, 'sanitize_options' ], 10, 2 );
65
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  // When a Reader theme is selected and an AMP request is being made, start suppressing as early as possible.
67
  // This can be done because we know it is an AMP page due to the query parameter, but it also _has_ to be done
68
  // specifically for the case of accessing the AMP Customizer (in which customize.php is requested with the query
@@ -426,11 +450,22 @@ final class PluginSuppression implements Service, Registerable {
426
  $registry = WP_Block_Type_Registry::get_instance();
427
 
428
  foreach ( $registry->get_all_registered() as $block_type ) {
429
- if ( ! $block_type->is_dynamic() || ! $this->is_callback_plugin_suppressed( $block_type->render_callback, $suppressed_plugins ) ) {
430
  continue;
431
  }
432
- unset( $block_type->script, $block_type->style );
433
- $block_type->render_callback = '__return_empty_string';
 
 
 
 
 
 
 
 
 
 
 
434
  }
435
  }
436
 
45
  */
46
  private $callback_reflection;
47
 
48
+ /**
49
+ * Original render callbacks for blocks.
50
+ *
51
+ * Populated via the `register_block_type_args` filter at the moment the block is first registered. This is useful
52
+ * to detect a suppressed plugin's blocks which had their `render_callback` wrapped by another function before
53
+ * plugin suppression is started at the `wp` action.
54
+ *
55
+ * @see gutenberg_current_parsed_block_tracking()
56
+ * @var array
57
+ */
58
+ private $original_block_render_callbacks = [];
59
+
60
  /**
61
  * Instantiate the plugin suppression service.
62
  *
75
  add_filter( 'amp_default_options', [ $this, 'filter_default_options' ] );
76
  add_filter( 'amp_options_updating', [ $this, 'sanitize_options' ], 10, 2 );
77
 
78
+ add_filter(
79
+ 'register_block_type_args',
80
+ function ( $props, $block_name ) {
81
+ if ( isset( $props['render_callback'] ) ) {
82
+ $this->original_block_render_callbacks[ $block_name ] = $props['render_callback'];
83
+ }
84
+ return $props;
85
+ },
86
+ ~PHP_INT_MAX,
87
+ 2
88
+ );
89
+
90
  // When a Reader theme is selected and an AMP request is being made, start suppressing as early as possible.
91
  // This can be done because we know it is an AMP page due to the query parameter, but it also _has_ to be done
92
  // specifically for the case of accessing the AMP Customizer (in which customize.php is requested with the query
450
  $registry = WP_Block_Type_Registry::get_instance();
451
 
452
  foreach ( $registry->get_all_registered() as $block_type ) {
453
+ if ( ! $block_type->is_dynamic() ) {
454
  continue;
455
  }
456
+
457
+ if (
458
+ $this->is_callback_plugin_suppressed( $block_type->render_callback, $suppressed_plugins )
459
+ ||
460
+ (
461
+ isset( $this->original_block_render_callbacks[ $block_type->name ] )
462
+ &&
463
+ $this->is_callback_plugin_suppressed( $this->original_block_render_callbacks[ $block_type->name ], $suppressed_plugins )
464
+ )
465
+ ) {
466
+ unset( $block_type->script, $block_type->style );
467
+ $block_type->render_callback = '__return_empty_string';
468
+ }
469
  }
470
  }
471
 
vendor/ampproject/common/src/CssLength.php CHANGED
@@ -77,7 +77,7 @@ final class CssLength
77
  */
78
  public function __construct($attrValue)
79
  {
80
- if ((! isset($attrValue) || '' === $attrValue)) {
81
  $this->isValid = true;
82
  return;
83
  }
@@ -94,6 +94,10 @@ final class CssLength
94
  */
95
  public function validate($allowAuto, $allowFluid)
96
  {
 
 
 
 
97
  if (self::AUTO === $this->attrValue) {
98
  $this->isAuto = true;
99
  $this->isValid = $allowAuto;
77
  */
78
  public function __construct($attrValue)
79
  {
80
+ if (null === $attrValue) {
81
  $this->isValid = true;
82
  return;
83
  }
94
  */
95
  public function validate($allowAuto, $allowFluid)
96
  {
97
+ if ($this->isValid()) {
98
+ return;
99
+ }
100
+
101
  if (self::AUTO === $this->attrValue) {
102
  $this->isAuto = true;
103
  $this->isValid = $allowAuto;
vendor/ampproject/optimizer/src/Transformer/ServerSideRendering.php CHANGED
@@ -298,14 +298,16 @@ final class ServerSideRendering implements Transformer
298
  {
299
  $ampLayout = $this->parseLayout($element->getAttribute(Attribute::LAYOUT));
300
 
301
- $inputWidth = new CssLength($element->getAttribute(Attribute::WIDTH));
 
302
  $inputWidth->validate(/* $allowAuto */ true, /* $allowFluid */ false);
303
  if (! $inputWidth->isValid()) {
304
  $errors->add(Error\CannotPerformServerSideRendering::fromInvalidInputWidth($element));
305
  return false;
306
  }
307
 
308
- $inputHeight = new CssLength($element->getAttribute(Attribute::HEIGHT));
 
309
  $inputHeight->validate(/* $allowAuto */ true, /* $allowFluid */ $ampLayout === Layout::FLUID);
310
  if (! $inputHeight->isValid()) {
311
  $errors->add(Error\CannotPerformServerSideRendering::fromInvalidInputHeight($element));
298
  {
299
  $ampLayout = $this->parseLayout($element->getAttribute(Attribute::LAYOUT));
300
 
301
+ $attrWidth = $element->hasAttribute(Attribute::WIDTH) ? $element->getAttribute(Attribute::WIDTH) : null;
302
+ $inputWidth = new CssLength($attrWidth);
303
  $inputWidth->validate(/* $allowAuto */ true, /* $allowFluid */ false);
304
  if (! $inputWidth->isValid()) {
305
  $errors->add(Error\CannotPerformServerSideRendering::fromInvalidInputWidth($element));
306
  return false;
307
  }
308
 
309
+ $attrHeight = $element->hasAttribute(Attribute::HEIGHT) ? $element->getAttribute(Attribute::HEIGHT) : null;
310
+ $inputHeight = new CssLength($attrHeight);
311
  $inputHeight->validate(/* $allowAuto */ true, /* $allowFluid */ $ampLayout === Layout::FLUID);
312
  if (! $inputHeight->isValid()) {
313
  $errors->add(Error\CannotPerformServerSideRendering::fromInvalidInputHeight($element));
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInitef5b406761369129e13a89adef847c33::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit8adc6c3f07deecf522940444140aed37::getLoader();
vendor/composer/ClassLoader.php CHANGED
@@ -37,8 +37,8 @@ namespace Composer\Autoload;
37
  *
38
  * @author Fabien Potencier <fabien@symfony.com>
39
  * @author Jordi Boggiano <j.boggiano@seld.be>
40
- * @see http://www.php-fig.org/psr/psr-0/
41
- * @see http://www.php-fig.org/psr/psr-4/
42
  */
43
  class ClassLoader
44
  {
37
  *
38
  * @author Fabien Potencier <fabien@symfony.com>
39
  * @author Jordi Boggiano <j.boggiano@seld.be>
40
+ * @see https://www.php-fig.org/psr/psr-0/
41
+ * @see https://www.php-fig.org/psr/psr-4/
42
  */
43
  class ClassLoader
44
  {
vendor/composer/InstalledVersions.php ADDED
@@ -0,0 +1,278 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Composer;
4
+
5
+ use Composer\Semver\VersionParser;
6
+
7
+
8
+
9
+
10
+
11
+
12
+ class InstalledVersions
13
+ {
14
+ private static $installed = array (
15
+ 'root' =>
16
+ array (
17
+ 'pretty_version' => '2.0.x-dev',
18
+ 'version' => '2.0.9999999.9999999-dev',
19
+ 'aliases' =>
20
+ array (
21
+ ),
22
+ 'reference' => '2acc034f6591038b6ebdc5a7d45f89ebd814d1b8',
23
+ 'name' => 'ampproject/amp-wp',
24
+ ),
25
+ 'versions' =>
26
+ array (
27
+ 'ampproject/amp-wp' =>
28
+ array (
29
+ 'pretty_version' => '2.0.x-dev',
30
+ 'version' => '2.0.9999999.9999999-dev',
31
+ 'aliases' =>
32
+ array (
33
+ ),
34
+ 'reference' => '2acc034f6591038b6ebdc5a7d45f89ebd814d1b8',
35
+ ),
36
+ 'ampproject/common' =>
37
+ array (
38
+ 'pretty_version' => '2.0.x-dev',
39
+ 'version' => '2.0.9999999.9999999-dev',
40
+ 'aliases' =>
41
+ array (
42
+ ),
43
+ 'reference' => '9ae4d10f085d41c46ae00ee0c32db2f96165a877',
44
+ ),
45
+ 'ampproject/optimizer' =>
46
+ array (
47
+ 'pretty_version' => '2.0.x-dev',
48
+ 'version' => '2.0.9999999.9999999-dev',
49
+ 'aliases' =>
50
+ array (
51
+ ),
52
+ 'reference' => 'd4658dac3e58a9377314cb340f8cafe3b892d06f',
53
+ ),
54
+ 'fasterimage/fasterimage' =>
55
+ array (
56
+ 'pretty_version' => 'v1.5.0',
57
+ 'version' => '1.5.0.0',
58
+ 'aliases' =>
59
+ array (
60
+ ),
61
+ 'reference' => '42d125a15dc124520aff2157bbed9a4b2d4f310a',
62
+ ),
63
+ 'grogy/php-parallel-lint' =>
64
+ array (
65
+ 'replaced' =>
66
+ array (
67
+ 0 => '*',
68
+ ),
69
+ ),
70
+ 'jakub-onderka/php-parallel-lint' =>
71
+ array (
72
+ 'replaced' =>
73
+ array (
74
+ 0 => '*',
75
+ ),
76
+ ),
77
+ 'php-parallel-lint/php-parallel-lint' =>
78
+ array (
79
+ 'pretty_version' => 'v1.2.0',
80
+ 'version' => '1.2.0.0',
81
+ 'aliases' =>
82
+ array (
83
+ ),
84
+ 'reference' => '474f18bc6cc6aca61ca40bfab55139de614e51ca',
85
+ ),
86
+ 'sabberworm/php-css-parser' =>
87
+ array (
88
+ 'pretty_version' => 'dev-master',
89
+ 'version' => 'dev-master',
90
+ 'aliases' =>
91
+ array (
92
+ 0 => '9999999-dev',
93
+ ),
94
+ 'reference' => 'bfdd976',
95
+ ),
96
+ 'willwashburn/stream' =>
97
+ array (
98
+ 'pretty_version' => 'v1.0.0',
99
+ 'version' => '1.0.0.0',
100
+ 'aliases' =>
101
+ array (
102
+ ),
103
+ 'reference' => '345b3062493e3899d987dbdd1fec1c13ee28c903',
104
+ ),
105
+ ),
106
+ );
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+ public static function getInstalledPackages()
115
+ {
116
+ return array_keys(self::$installed['versions']);
117
+ }
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+ public static function isInstalled($packageName)
128
+ {
129
+ return isset(self::$installed['versions'][$packageName]);
130
+ }
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+ public static function satisfies(VersionParser $parser, $packageName, $constraint)
146
+ {
147
+ $constraint = $parser->parseConstraints($constraint);
148
+ $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
149
+
150
+ return $provided->matches($constraint);
151
+ }
152
+
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+ public static function getVersionRanges($packageName)
163
+ {
164
+ if (!isset(self::$installed['versions'][$packageName])) {
165
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
166
+ }
167
+
168
+ $ranges = array();
169
+ if (isset(self::$installed['versions'][$packageName]['pretty_version'])) {
170
+ $ranges[] = self::$installed['versions'][$packageName]['pretty_version'];
171
+ }
172
+ if (array_key_exists('aliases', self::$installed['versions'][$packageName])) {
173
+ $ranges = array_merge($ranges, self::$installed['versions'][$packageName]['aliases']);
174
+ }
175
+ if (array_key_exists('replaced', self::$installed['versions'][$packageName])) {
176
+ $ranges = array_merge($ranges, self::$installed['versions'][$packageName]['replaced']);
177
+ }
178
+ if (array_key_exists('provided', self::$installed['versions'][$packageName])) {
179
+ $ranges = array_merge($ranges, self::$installed['versions'][$packageName]['provided']);
180
+ }
181
+
182
+ return implode(' || ', $ranges);
183
+ }
184
+
185
+
186
+
187
+
188
+
189
+ public static function getVersion($packageName)
190
+ {
191
+ if (!isset(self::$installed['versions'][$packageName])) {
192
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
193
+ }
194
+
195
+ if (!isset(self::$installed['versions'][$packageName]['version'])) {
196
+ return null;
197
+ }
198
+
199
+ return self::$installed['versions'][$packageName]['version'];
200
+ }
201
+
202
+
203
+
204
+
205
+
206
+ public static function getPrettyVersion($packageName)
207
+ {
208
+ if (!isset(self::$installed['versions'][$packageName])) {
209
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
210
+ }
211
+
212
+ if (!isset(self::$installed['versions'][$packageName]['pretty_version'])) {
213
+ return null;
214
+ }
215
+
216
+ return self::$installed['versions'][$packageName]['pretty_version'];
217
+ }
218
+
219
+
220
+
221
+
222
+
223
+ public static function getReference($packageName)
224
+ {
225
+ if (!isset(self::$installed['versions'][$packageName])) {
226
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
227
+ }
228
+
229
+ if (!isset(self::$installed['versions'][$packageName]['reference'])) {
230
+ return null;
231
+ }
232
+
233
+ return self::$installed['versions'][$packageName]['reference'];
234
+ }
235
+
236
+
237
+
238
+
239
+
240
+ public static function getRootPackage()
241
+ {
242
+ return self::$installed['root'];
243
+ }
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+ public static function getRawData()
252
+ {
253
+ return self::$installed;
254
+ }
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+ public static function reload($data)
275
+ {
276
+ self::$installed = $data;
277
+ }
278
+ }
vendor/composer/autoload_classmap.php CHANGED
@@ -208,6 +208,7 @@ return array(
208
  'AmpProject\\Role' => $vendorDir . '/ampproject/common/src/Role.php',
209
  'AmpProject\\RuntimeVersion' => $vendorDir . '/ampproject/common/src/RuntimeVersion.php',
210
  'AmpProject\\Tag' => $vendorDir . '/ampproject/common/src/Tag.php',
 
211
  'FasterImage\\Exception\\InvalidImageException' => $vendorDir . '/fasterimage/fasterimage/src/FasterImage/Exception/InvalidImageException.php',
212
  'FasterImage\\ExifParser' => $vendorDir . '/fasterimage/fasterimage/src/FasterImage/ExifParser.php',
213
  'FasterImage\\FasterImage' => $vendorDir . '/fasterimage/fasterimage/src/FasterImage/FasterImage.php',
@@ -251,7 +252,6 @@ return array(
251
  'Sabberworm\\CSS\\Comment\\Comment' => $vendorDir . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Comment/Comment.php',
252
  'Sabberworm\\CSS\\Comment\\Commentable' => $vendorDir . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Comment/Commentable.php',
253
  'Sabberworm\\CSS\\OutputFormat' => $vendorDir . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/OutputFormat.php',
254
- 'Sabberworm\\CSS\\OutputFormatter' => $vendorDir . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/OutputFormat.php',
255
  'Sabberworm\\CSS\\Parser' => $vendorDir . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parser.php',
256
  'Sabberworm\\CSS\\Parsing\\OutputException' => $vendorDir . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parsing/OutputException.php',
257
  'Sabberworm\\CSS\\Parsing\\ParserState' => $vendorDir . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parsing/ParserState.php',
208
  'AmpProject\\Role' => $vendorDir . '/ampproject/common/src/Role.php',
209
  'AmpProject\\RuntimeVersion' => $vendorDir . '/ampproject/common/src/RuntimeVersion.php',
210
  'AmpProject\\Tag' => $vendorDir . '/ampproject/common/src/Tag.php',
211
+ 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
212
  'FasterImage\\Exception\\InvalidImageException' => $vendorDir . '/fasterimage/fasterimage/src/FasterImage/Exception/InvalidImageException.php',
213
  'FasterImage\\ExifParser' => $vendorDir . '/fasterimage/fasterimage/src/FasterImage/ExifParser.php',
214
  'FasterImage\\FasterImage' => $vendorDir . '/fasterimage/fasterimage/src/FasterImage/FasterImage.php',
252
  'Sabberworm\\CSS\\Comment\\Comment' => $vendorDir . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Comment/Comment.php',
253
  'Sabberworm\\CSS\\Comment\\Commentable' => $vendorDir . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Comment/Commentable.php',
254
  'Sabberworm\\CSS\\OutputFormat' => $vendorDir . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/OutputFormat.php',
 
255
  'Sabberworm\\CSS\\Parser' => $vendorDir . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parser.php',
256
  'Sabberworm\\CSS\\Parsing\\OutputException' => $vendorDir . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parsing/OutputException.php',
257
  'Sabberworm\\CSS\\Parsing\\ParserState' => $vendorDir . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parsing/ParserState.php',
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInitef5b406761369129e13a89adef847c33
6
  {
7
  private static $loader;
8
 
@@ -22,15 +22,17 @@ class ComposerAutoloaderInitef5b406761369129e13a89adef847c33
22
  return self::$loader;
23
  }
24
 
25
- spl_autoload_register(array('ComposerAutoloaderInitef5b406761369129e13a89adef847c33', 'loadClassLoader'), true, true);
 
 
26
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
27
- spl_autoload_unregister(array('ComposerAutoloaderInitef5b406761369129e13a89adef847c33', 'loadClassLoader'));
28
 
29
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
  if ($useStaticLoader) {
31
- require_once __DIR__ . '/autoload_static.php';
32
 
33
- call_user_func(\Composer\Autoload\ComposerStaticInitef5b406761369129e13a89adef847c33::getInitializer($loader));
34
  } else {
35
  $map = require __DIR__ . '/autoload_namespaces.php';
36
  foreach ($map as $namespace => $path) {
@@ -51,19 +53,19 @@ class ComposerAutoloaderInitef5b406761369129e13a89adef847c33
51
  $loader->register(true);
52
 
53
  if ($useStaticLoader) {
54
- $includeFiles = Composer\Autoload\ComposerStaticInitef5b406761369129e13a89adef847c33::$files;
55
  } else {
56
  $includeFiles = require __DIR__ . '/autoload_files.php';
57
  }
58
  foreach ($includeFiles as $fileIdentifier => $file) {
59
- composerRequireef5b406761369129e13a89adef847c33($fileIdentifier, $file);
60
  }
61
 
62
  return $loader;
63
  }
64
  }
65
 
66
- function composerRequireef5b406761369129e13a89adef847c33($fileIdentifier, $file)
67
  {
68
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
69
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit8adc6c3f07deecf522940444140aed37
6
  {
7
  private static $loader;
8
 
22
  return self::$loader;
23
  }
24
 
25
+ require __DIR__ . '/platform_check.php';
26
+
27
+ spl_autoload_register(array('ComposerAutoloaderInit8adc6c3f07deecf522940444140aed37', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
29
+ spl_autoload_unregister(array('ComposerAutoloaderInit8adc6c3f07deecf522940444140aed37', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
+ require __DIR__ . '/autoload_static.php';
34
 
35
+ call_user_func(\Composer\Autoload\ComposerStaticInit8adc6c3f07deecf522940444140aed37::getInitializer($loader));
36
  } else {
37
  $map = require __DIR__ . '/autoload_namespaces.php';
38
  foreach ($map as $namespace => $path) {
53
  $loader->register(true);
54
 
55
  if ($useStaticLoader) {
56
+ $includeFiles = Composer\Autoload\ComposerStaticInit8adc6c3f07deecf522940444140aed37::$files;
57
  } else {
58
  $includeFiles = require __DIR__ . '/autoload_files.php';
59
  }
60
  foreach ($includeFiles as $fileIdentifier => $file) {
61
+ composerRequire8adc6c3f07deecf522940444140aed37($fileIdentifier, $file);
62
  }
63
 
64
  return $loader;
65
  }
66
  }
67
 
68
+ function composerRequire8adc6c3f07deecf522940444140aed37($fileIdentifier, $file)
69
  {
70
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
71
  require $file;
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInitef5b406761369129e13a89adef847c33
8
  {
9
  public static $files = array (
10
  '6f5653f9af3eab04254ad2c7f20515c8' => __DIR__ . '/../..' . '/back-compat/back-compat.php',
@@ -256,6 +256,7 @@ class ComposerStaticInitef5b406761369129e13a89adef847c33
256
  'AmpProject\\Role' => __DIR__ . '/..' . '/ampproject/common/src/Role.php',
257
  'AmpProject\\RuntimeVersion' => __DIR__ . '/..' . '/ampproject/common/src/RuntimeVersion.php',
258
  'AmpProject\\Tag' => __DIR__ . '/..' . '/ampproject/common/src/Tag.php',
 
259
  'FasterImage\\Exception\\InvalidImageException' => __DIR__ . '/..' . '/fasterimage/fasterimage/src/FasterImage/Exception/InvalidImageException.php',
260
  'FasterImage\\ExifParser' => __DIR__ . '/..' . '/fasterimage/fasterimage/src/FasterImage/ExifParser.php',
261
  'FasterImage\\FasterImage' => __DIR__ . '/..' . '/fasterimage/fasterimage/src/FasterImage/FasterImage.php',
@@ -299,7 +300,6 @@ class ComposerStaticInitef5b406761369129e13a89adef847c33
299
  'Sabberworm\\CSS\\Comment\\Comment' => __DIR__ . '/..' . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Comment/Comment.php',
300
  'Sabberworm\\CSS\\Comment\\Commentable' => __DIR__ . '/..' . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Comment/Commentable.php',
301
  'Sabberworm\\CSS\\OutputFormat' => __DIR__ . '/..' . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/OutputFormat.php',
302
- 'Sabberworm\\CSS\\OutputFormatter' => __DIR__ . '/..' . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/OutputFormat.php',
303
  'Sabberworm\\CSS\\Parser' => __DIR__ . '/..' . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parser.php',
304
  'Sabberworm\\CSS\\Parsing\\OutputException' => __DIR__ . '/..' . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parsing/OutputException.php',
305
  'Sabberworm\\CSS\\Parsing\\ParserState' => __DIR__ . '/..' . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parsing/ParserState.php',
@@ -338,9 +338,9 @@ class ComposerStaticInitef5b406761369129e13a89adef847c33
338
  public static function getInitializer(ClassLoader $loader)
339
  {
340
  return \Closure::bind(function () use ($loader) {
341
- $loader->prefixLengthsPsr4 = ComposerStaticInitef5b406761369129e13a89adef847c33::$prefixLengthsPsr4;
342
- $loader->prefixDirsPsr4 = ComposerStaticInitef5b406761369129e13a89adef847c33::$prefixDirsPsr4;
343
- $loader->classMap = ComposerStaticInitef5b406761369129e13a89adef847c33::$classMap;
344
 
345
  }, null, ClassLoader::class);
346
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit8adc6c3f07deecf522940444140aed37
8
  {
9
  public static $files = array (
10
  '6f5653f9af3eab04254ad2c7f20515c8' => __DIR__ . '/../..' . '/back-compat/back-compat.php',
256
  'AmpProject\\Role' => __DIR__ . '/..' . '/ampproject/common/src/Role.php',
257
  'AmpProject\\RuntimeVersion' => __DIR__ . '/..' . '/ampproject/common/src/RuntimeVersion.php',
258
  'AmpProject\\Tag' => __DIR__ . '/..' . '/ampproject/common/src/Tag.php',
259
+ 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
260
  'FasterImage\\Exception\\InvalidImageException' => __DIR__ . '/..' . '/fasterimage/fasterimage/src/FasterImage/Exception/InvalidImageException.php',
261
  'FasterImage\\ExifParser' => __DIR__ . '/..' . '/fasterimage/fasterimage/src/FasterImage/ExifParser.php',
262
  'FasterImage\\FasterImage' => __DIR__ . '/..' . '/fasterimage/fasterimage/src/FasterImage/FasterImage.php',
300
  'Sabberworm\\CSS\\Comment\\Comment' => __DIR__ . '/..' . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Comment/Comment.php',
301
  'Sabberworm\\CSS\\Comment\\Commentable' => __DIR__ . '/..' . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Comment/Commentable.php',
302
  'Sabberworm\\CSS\\OutputFormat' => __DIR__ . '/..' . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/OutputFormat.php',
 
303
  'Sabberworm\\CSS\\Parser' => __DIR__ . '/..' . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parser.php',
304
  'Sabberworm\\CSS\\Parsing\\OutputException' => __DIR__ . '/..' . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parsing/OutputException.php',
305
  'Sabberworm\\CSS\\Parsing\\ParserState' => __DIR__ . '/..' . '/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parsing/ParserState.php',
338
  public static function getInitializer(ClassLoader $loader)
339
  {
340
  return \Closure::bind(function () use ($loader) {
341
+ $loader->prefixLengthsPsr4 = ComposerStaticInit8adc6c3f07deecf522940444140aed37::$prefixLengthsPsr4;
342
+ $loader->prefixDirsPsr4 = ComposerStaticInit8adc6c3f07deecf522940444140aed37::$prefixDirsPsr4;
343
+ $loader->classMap = ComposerStaticInit8adc6c3f07deecf522940444140aed37::$classMap;
344
 
345
  }, null, ClassLoader::class);
346
  }
vendor/composer/installed.json CHANGED
@@ -1,386 +1,409 @@
1
- [
2
- {
3
- "name": "ampproject/common",
4
- "version": "2.0.x-dev",
5
- "version_normalized": "2.0.9999999.9999999-dev",
6
- "dist": {
7
- "type": "path",
8
- "url": "lib/common",
9
- "reference": "68d6534c512a0ebcd6b3fed94131d4b1738d929a"
10
- },
11
- "require": {
12
- "ext-dom": "*",
13
- "ext-iconv": "*",
14
- "ext-json": "*",
15
- "ext-libxml": "*",
16
- "php": "^5.6 || ^7.0",
17
- "php-parallel-lint/php-parallel-lint": "^1.2"
18
- },
19
- "require-dev": {
20
- "civicrm/composer-downloads-plugin": "^2.1",
21
- "dealerdirect/phpcodesniffer-composer-installer": "0.7.0",
22
- "phpcompatibility/phpcompatibility-wp": "2.1.0",
23
- "roave/security-advisories": "dev-master",
24
- "sirbrillig/phpcs-variable-analysis": "2.8.3",
25
- "squizlabs/php_codesniffer": "^3"
26
- },
27
- "suggest": {
28
- "ext-mbstring": "Used by Dom\\Document to convert encoding to UTF-8 if needed."
29
- },
30
- "type": "library",
31
- "extra": {
32
- "downloads": {
33
- "phpstan": {
34
- "url": "https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar",
35
- "path": "vendor/bin/phpstan",
36
- "type": "phar"
 
 
37
  }
38
- }
39
- },
40
- "installation-source": "dist",
41
- "autoload": {
42
- "psr-4": {
43
- "AmpProject\\": "src/"
44
- }
45
- },
46
- "autoload-dev": {
47
- "psr-4": {
48
- "AmpProject\\Tests\\": "tests/src/"
49
- }
50
- },
51
- "scripts": {
52
- "cbf": [
53
- "phpcbf"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  ],
55
- "cs": [
56
- "if [ -z $TEST_SKIP_PHPCS ]; then phpcs; fi"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  ],
58
- "lint": [
59
- "if [ -z $TEST_SKIP_LINTING ]; then parallel-lint -j 10 --colors --exclude vendor .; fi"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  ],
61
- "test": [
62
- "@lint",
63
- "@unit",
64
- "@cs",
65
- "@analyze"
 
 
 
66
  ],
67
- "analyze": [
68
- "if [ -z $TEST_SKIP_PHPSTAN ]; then phpstan --version; phpstan analyze --ansi; fi"
 
 
 
 
 
 
 
 
69
  ],
70
- "unit": [
71
- "if [ -z $TEST_SKIP_PHPUNIT ]; then phpunit --colors=always; fi"
72
- ]
73
- },
74
- "license": [
75
- "MIT"
76
- ],
77
- "description": "PHP library with common base functionality for AMP integrations.",
78
- "transport-options": {
79
- "symlink": true,
80
- "relative": true
81
- }
82
- },
83
- {
84
- "name": "ampproject/optimizer",
85
- "version": "2.0.x-dev",
86
- "version_normalized": "2.0.9999999.9999999-dev",
87
- "dist": {
88
- "type": "path",
89
- "url": "lib/optimizer",
90
- "reference": "3c1c51d680d561801981294086d13be509327cc4"
91
- },
92
- "require": {
93
- "ampproject/common": "*",
94
- "ext-dom": "*",
95
- "ext-iconv": "*",
96
- "ext-libxml": "*",
97
- "php": "^5.6 || ^7.0",
98
- "php-parallel-lint/php-parallel-lint": "^1.2"
99
- },
100
- "require-dev": {
101
- "civicrm/composer-downloads-plugin": "^2.1",
102
- "dealerdirect/phpcodesniffer-composer-installer": "0.7.0",
103
- "ext-zip": "*",
104
- "phpcompatibility/phpcompatibility-wp": "2.1.0",
105
- "roave/security-advisories": "dev-master",
106
- "sirbrillig/phpcs-variable-analysis": "2.8.3",
107
- "squizlabs/php_codesniffer": "^3"
108
- },
109
- "suggest": {
110
- "ext-json": "Provides native implementation of json_encode()/json_decode()."
111
- },
112
- "type": "library",
113
- "extra": {
114
- "downloads": {
115
- "phpstan": {
116
- "url": "https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar",
117
- "path": "vendor/bin/phpstan",
118
- "type": "phar"
 
 
 
 
 
 
 
119
  }
120
- }
121
- },
122
- "installation-source": "dist",
123
- "autoload": {
124
- "psr-4": {
125
- "AmpProject\\Optimizer\\": "src/"
126
- }
127
- },
128
- "autoload-dev": {
129
- "psr-4": {
130
- "AmpProject\\Optimizer\\Tests\\": "tests/src/"
131
- }
132
- },
133
- "scripts": {
134
- "cbf": [
135
- "phpcbf"
136
  ],
137
- "cs": [
138
- "if [ -z $TEST_SKIP_PHPCS ]; then phpcs; fi"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
  ],
140
- "lint": [
141
- "if [ -z $TEST_SKIP_LINTING ]; then parallel-lint -j 10 --colors --exclude vendor .; fi"
 
 
142
  ],
143
- "post-update-cmd": [
144
- "@update-test-specs",
145
- "bin/sync-amp-runtime-local-fallback-resources.php"
 
 
 
146
  ],
147
- "test": [
148
- "@lint",
149
- "@unit",
150
- "@cs",
151
- "@analyze"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
152
  ],
153
- "analyze": [
154
- "if [ -z $TEST_SKIP_PHPSTAN ]; then phpstan --version; phpstan analyze --ansi; fi"
 
 
 
155
  ],
156
- "unit": [
157
- "if [ -z $TEST_SKIP_PHPUNIT ]; then phpunit --colors=always; fi"
 
 
 
 
 
158
  ],
159
- "update-test-specs": [
160
- "rm -rf tests/spec && bin/sync-amp-toolbox-test-suite.php"
161
- ]
162
- },
163
- "license": [
164
- "MIT"
165
- ],
166
- "description": "PHP library for optimizing AMP pages.",
167
- "transport-options": {
168
- "symlink": true,
169
- "relative": true
170
  }
171
- },
172
- {
173
- "name": "fasterimage/fasterimage",
174
- "version": "v1.5.0",
175
- "version_normalized": "1.5.0.0",
176
- "source": {
177
- "type": "git",
178
- "url": "https://github.com/willwashburn/fasterimage.git",
179
- "reference": "42d125a15dc124520aff2157bbed9a4b2d4f310a"
180
- },
181
- "dist": {
182
- "type": "zip",
183
- "url": "https://api.github.com/repos/willwashburn/fasterimage/zipball/42d125a15dc124520aff2157bbed9a4b2d4f310a",
184
- "reference": "42d125a15dc124520aff2157bbed9a4b2d4f310a",
185
- "shasum": ""
186
- },
187
- "require": {
188
- "php": ">=5.4.0",
189
- "willwashburn/stream": ">=1.0"
190
- },
191
- "require-dev": {
192
- "php-coveralls/php-coveralls": "^2.1",
193
- "php-mock/php-mock-phpunit": "^2.3",
194
- "phpunit/phpunit": "~6.0"
195
- },
196
- "time": "2019-05-25T14:33:33+00:00",
197
- "type": "library",
198
- "installation-source": "dist",
199
- "autoload": {
200
- "classmap": [
201
- "src"
202
- ]
203
- },
204
- "notification-url": "https://packagist.org/downloads/",
205
- "license": [
206
- "MIT"
207
- ],
208
- "authors": [
209
- {
210
- "name": "Will Washburn",
211
- "email": "will@tailwindapp.com"
212
- },
213
- {
214
- "name": "Weston Ruter"
215
- }
216
- ],
217
- "description": "FasterImage finds the size or type of a set of images given their uris by fetching as little as needed, in parallel. Originally ported by Tom Moor.",
218
- "homepage": "https://github.com/willwashburn/fasterimage",
219
- "keywords": [
220
- "fast image",
221
- "faster image",
222
- "fasterimage",
223
- "fastimage",
224
- "getimagesize",
225
- "image size",
226
- "parallel"
227
- ]
228
- },
229
- {
230
- "name": "php-parallel-lint/php-parallel-lint",
231
- "version": "v1.2.0",
232
- "version_normalized": "1.2.0.0",
233
- "source": {
234
- "type": "git",
235
- "url": "https://github.com/php-parallel-lint/PHP-Parallel-Lint.git",
236
- "reference": "474f18bc6cc6aca61ca40bfab55139de614e51ca"
237
- },
238
- "dist": {
239
- "type": "zip",
240
- "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/474f18bc6cc6aca61ca40bfab55139de614e51ca",
241
- "reference": "474f18bc6cc6aca61ca40bfab55139de614e51ca",
242
- "shasum": ""
243
- },
244
- "require": {
245
- "ext-json": "*",
246
- "php": ">=5.4.0"
247
- },
248
- "replace": {
249
- "grogy/php-parallel-lint": "*",
250
- "jakub-onderka/php-parallel-lint": "*"
251
- },
252
- "require-dev": {
253
- "nette/tester": "^1.3 || ^2.0",
254
- "php-parallel-lint/php-console-highlighter": "~0.3",
255
- "squizlabs/php_codesniffer": "~3.0"
256
- },
257
- "suggest": {
258
- "php-parallel-lint/php-console-highlighter": "Highlight syntax in code snippet"
259
- },
260
- "time": "2020-04-04T12:18:32+00:00",
261
- "bin": [
262
- "parallel-lint"
263
- ],
264
- "type": "library",
265
- "installation-source": "dist",
266
- "autoload": {
267
- "classmap": [
268
- "./"
269
- ]
270
- },
271
- "notification-url": "https://packagist.org/downloads/",
272
- "license": [
273
- "BSD-2-Clause"
274
- ],
275
- "authors": [
276
- {
277
- "name": "Jakub Onderka",
278
- "email": "ahoj@jakubonderka.cz"
279
- }
280
- ],
281
- "description": "This tool check syntax of PHP files about 20x faster than serial check.",
282
- "homepage": "https://github.com/php-parallel-lint/PHP-Parallel-Lint"
283
- },
284
- {
285
- "name": "sabberworm/php-css-parser",
286
- "version": "dev-master",
287
- "version_normalized": "9999999-dev",
288
- "source": {
289
- "type": "git",
290
- "url": "https://github.com/sabberworm/PHP-CSS-Parser.git",
291
- "reference": "bfdd976"
292
- },
293
- "dist": {
294
- "type": "zip",
295
- "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/bfdd976",
296
- "reference": "bfdd976",
297
- "shasum": ""
298
- },
299
- "require": {
300
- "php": ">=5.3.2"
301
- },
302
- "require-dev": {
303
- "codacy/coverage": "^1.4",
304
- "phpunit/phpunit": "^4.8.36"
305
- },
306
- "time": "2020-07-21T18:39:46+00:00",
307
- "type": "library",
308
- "extra": {
309
- "patches_applied": {
310
- "Add additional validation for size unit <https://github.com/sabberworm/PHP-CSS-Parser/pull/193>": "patches/php-css-parser-pull-193.patch",
311
- "Validate name-start code points for identifier <https://github.com/sabberworm/PHP-CSS-Parser/pull/185>": "patches/php-css-parser-pull-185.patch",
312
- "Fix parsing CSS selectors which contain commas <https://github.com/westonruter/PHP-CSS-Parser/pull/1>": "patches/php-css-parser-commit-10a2501.patch"
313
- }
314
- },
315
- "installation-source": "source",
316
- "autoload": {
317
- "psr-4": {
318
- "Sabberworm\\CSS\\": "lib/Sabberworm/CSS/"
319
- }
320
- },
321
- "license": [
322
- "MIT"
323
- ],
324
- "authors": [
325
- {
326
- "name": "Raphael Schweikert"
327
- }
328
- ],
329
- "description": "Parser for CSS Files written in PHP",
330
- "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser",
331
- "keywords": [
332
- "css",
333
- "parser",
334
- "stylesheet"
335
- ]
336
- },
337
- {
338
- "name": "willwashburn/stream",
339
- "version": "v1.0.0",
340
- "version_normalized": "1.0.0.0",
341
- "source": {
342
- "type": "git",
343
- "url": "https://github.com/willwashburn/stream.git",
344
- "reference": "345b3062493e3899d987dbdd1fec1c13ee28c903"
345
- },
346
- "dist": {
347
- "type": "zip",
348
- "url": "https://api.github.com/repos/willwashburn/stream/zipball/345b3062493e3899d987dbdd1fec1c13ee28c903",
349
- "reference": "345b3062493e3899d987dbdd1fec1c13ee28c903",
350
- "shasum": ""
351
- },
352
- "require": {
353
- "php": ">=5.4.0"
354
- },
355
- "require-dev": {
356
- "mockery/mockery": "~0.9",
357
- "phpunit/phpunit": "~4.0"
358
- },
359
- "time": "2016-03-15T10:54:35+00:00",
360
- "type": "library",
361
- "installation-source": "dist",
362
- "autoload": {
363
- "psr-4": {
364
- "WillWashburn\\": "src/"
365
- }
366
- },
367
- "notification-url": "https://packagist.org/downloads/",
368
- "license": [
369
- "MIT"
370
- ],
371
- "authors": [
372
- {
373
- "name": "Will Washburn",
374
- "email": "will.washburn@gmail.com"
375
- }
376
- ],
377
- "description": "model a sequence of data elements made available over time ",
378
- "homepage": "https://github.com/willwashburn/stream",
379
- "keywords": [
380
- "peek",
381
- "read",
382
- "stream",
383
- "streamable"
384
- ]
385
- }
386
- ]
1
+ {
2
+ "packages": [
3
+ {
4
+ "name": "ampproject/common",
5
+ "version": "2.0.x-dev",
6
+ "version_normalized": "2.0.9999999.9999999-dev",
7
+ "dist": {
8
+ "type": "path",
9
+ "url": "lib/common",
10
+ "reference": "9ae4d10f085d41c46ae00ee0c32db2f96165a877"
11
+ },
12
+ "require": {
13
+ "ext-dom": "*",
14
+ "ext-iconv": "*",
15
+ "ext-json": "*",
16
+ "ext-libxml": "*",
17
+ "php": "^5.6 || ^7.0",
18
+ "php-parallel-lint/php-parallel-lint": "^1.2"
19
+ },
20
+ "require-dev": {
21
+ "civicrm/composer-downloads-plugin": "^2.1",
22
+ "dealerdirect/phpcodesniffer-composer-installer": "0.7.0",
23
+ "phpcompatibility/phpcompatibility-wp": "2.1.0",
24
+ "roave/security-advisories": "dev-master",
25
+ "sirbrillig/phpcs-variable-analysis": "2.8.3",
26
+ "squizlabs/php_codesniffer": "^3"
27
+ },
28
+ "suggest": {
29
+ "ext-mbstring": "Used by Dom\\Document to convert encoding to UTF-8 if needed."
30
+ },
31
+ "type": "library",
32
+ "extra": {
33
+ "downloads": {
34
+ "phpstan": {
35
+ "url": "https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar",
36
+ "path": "vendor/bin/phpstan",
37
+ "type": "phar"
38
+ }
39
  }
40
+ },
41
+ "installation-source": "dist",
42
+ "autoload": {
43
+ "psr-4": {
44
+ "AmpProject\\": "src/"
45
+ }
46
+ },
47
+ "autoload-dev": {
48
+ "psr-4": {
49
+ "AmpProject\\Tests\\": "tests/src/"
50
+ }
51
+ },
52
+ "scripts": {
53
+ "cbf": [
54
+ "phpcbf"
55
+ ],
56
+ "cs": [
57
+ "if [ -z $TEST_SKIP_PHPCS ]; then phpcs; fi"
58
+ ],
59
+ "lint": [
60
+ "if [ -z $TEST_SKIP_LINTING ]; then parallel-lint -j 10 --colors --exclude vendor .; fi"
61
+ ],
62
+ "test": [
63
+ "@lint",
64
+ "@unit",
65
+ "@cs",
66
+ "@analyze"
67
+ ],
68
+ "analyze": [
69
+ "if [ -z $TEST_SKIP_PHPSTAN ]; then phpstan --version; phpstan analyze --ansi; fi"
70
+ ],
71
+ "unit": [
72
+ "if [ -z $TEST_SKIP_PHPUNIT ]; then phpunit --colors=always; fi"
73
+ ]
74
+ },
75
+ "license": [
76
+ "MIT"
77
  ],
78
+ "description": "PHP library with common base functionality for AMP integrations.",
79
+ "transport-options": {
80
+ "symlink": true,
81
+ "relative": true
82
+ },
83
+ "install-path": "../ampproject/common"
84
+ },
85
+ {
86
+ "name": "ampproject/optimizer",
87
+ "version": "2.0.x-dev",
88
+ "version_normalized": "2.0.9999999.9999999-dev",
89
+ "dist": {
90
+ "type": "path",
91
+ "url": "lib/optimizer",
92
+ "reference": "d4658dac3e58a9377314cb340f8cafe3b892d06f"
93
+ },
94
+ "require": {
95
+ "ampproject/common": "*",
96
+ "ext-dom": "*",
97
+ "ext-iconv": "*",
98
+ "ext-libxml": "*",
99
+ "php": "^5.6 || ^7.0",
100
+ "php-parallel-lint/php-parallel-lint": "^1.2"
101
+ },
102
+ "require-dev": {
103
+ "civicrm/composer-downloads-plugin": "^2.1",
104
+ "dealerdirect/phpcodesniffer-composer-installer": "0.7.0",
105
+ "ext-zip": "*",
106
+ "phpcompatibility/phpcompatibility-wp": "2.1.0",
107
+ "roave/security-advisories": "dev-master",
108
+ "sirbrillig/phpcs-variable-analysis": "2.8.3",
109
+ "squizlabs/php_codesniffer": "^3"
110
+ },
111
+ "suggest": {
112
+ "ext-json": "Provides native implementation of json_encode()/json_decode()."
113
+ },
114
+ "type": "library",
115
+ "extra": {
116
+ "downloads": {
117
+ "phpstan": {
118
+ "url": "https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar",
119
+ "path": "vendor/bin/phpstan",
120
+ "type": "phar"
121
+ }
122
+ }
123
+ },
124
+ "installation-source": "dist",
125
+ "autoload": {
126
+ "psr-4": {
127
+ "AmpProject\\Optimizer\\": "src/"
128
+ }
129
+ },
130
+ "autoload-dev": {
131
+ "psr-4": {
132
+ "AmpProject\\Optimizer\\Tests\\": "tests/src/"
133
+ }
134
+ },
135
+ "scripts": {
136
+ "cbf": [
137
+ "phpcbf"
138
+ ],
139
+ "cs": [
140
+ "if [ -z $TEST_SKIP_PHPCS ]; then phpcs; fi"
141
+ ],
142
+ "lint": [
143
+ "if [ -z $TEST_SKIP_LINTING ]; then parallel-lint -j 10 --colors --exclude vendor .; fi"
144
+ ],
145
+ "post-update-cmd": [
146
+ "@update-test-specs",
147
+ "bin/sync-amp-runtime-local-fallback-resources.php"
148
+ ],
149
+ "test": [
150
+ "@lint",
151
+ "@unit",
152
+ "@cs",
153
+ "@analyze"
154
+ ],
155
+ "analyze": [
156
+ "if [ -z $TEST_SKIP_PHPSTAN ]; then phpstan --version; phpstan analyze --ansi; fi"
157
+ ],
158
+ "unit": [
159
+ "if [ -z $TEST_SKIP_PHPUNIT ]; then phpunit --colors=always; fi"
160
+ ],
161
+ "update-test-specs": [
162
+ "rm -rf tests/spec && bin/sync-amp-toolbox-test-suite.php"
163
+ ]
164
+ },
165
+ "license": [
166
+ "MIT"
167
  ],
168
+ "description": "PHP library for optimizing AMP pages.",
169
+ "transport-options": {
170
+ "symlink": true,
171
+ "relative": true
172
+ },
173
+ "install-path": "../ampproject/optimizer"
174
+ },
175
+ {
176
+ "name": "fasterimage/fasterimage",
177
+ "version": "v1.5.0",
178
+ "version_normalized": "1.5.0.0",
179
+ "source": {
180
+ "type": "git",
181
+ "url": "https://github.com/willwashburn/fasterimage.git",
182
+ "reference": "42d125a15dc124520aff2157bbed9a4b2d4f310a"
183
+ },
184
+ "dist": {
185
+ "type": "zip",
186
+ "url": "https://api.github.com/repos/willwashburn/fasterimage/zipball/42d125a15dc124520aff2157bbed9a4b2d4f310a",
187
+ "reference": "42d125a15dc124520aff2157bbed9a4b2d4f310a",
188
+ "shasum": ""
189
+ },
190
+ "require": {
191
+ "php": ">=5.4.0",
192
+ "willwashburn/stream": ">=1.0"
193
+ },
194
+ "require-dev": {
195
+ "php-coveralls/php-coveralls": "^2.1",
196
+ "php-mock/php-mock-phpunit": "^2.3",
197
+ "phpunit/phpunit": "~6.0"
198
+ },
199
+ "time": "2019-05-25T14:33:33+00:00",
200
+ "type": "library",
201
+ "installation-source": "dist",
202
+ "autoload": {
203
+ "classmap": [
204
+ "src"
205
+ ]
206
+ },
207
+ "notification-url": "https://packagist.org/downloads/",
208
+ "license": [
209
+ "MIT"
210
  ],
211
+ "authors": [
212
+ {
213
+ "name": "Will Washburn",
214
+ "email": "will@tailwindapp.com"
215
+ },
216
+ {
217
+ "name": "Weston Ruter"
218
+ }
219
  ],
220
+ "description": "FasterImage finds the size or type of a set of images given their uris by fetching as little as needed, in parallel. Originally ported by Tom Moor.",
221
+ "homepage": "https://github.com/willwashburn/fasterimage",
222
+ "keywords": [
223
+ "fast image",
224
+ "faster image",
225
+ "fasterimage",
226
+ "fastimage",
227
+ "getimagesize",
228
+ "image size",
229
+ "parallel"
230
  ],
231
+ "support": {
232
+ "issues": "https://github.com/willwashburn/fasterimage/issues",
233
+ "source": "https://github.com/willwashburn/fasterimage/tree/master"
234
+ },
235
+ "install-path": "../fasterimage/fasterimage"
236
+ },
237
+ {
238
+ "name": "php-parallel-lint/php-parallel-lint",
239
+ "version": "v1.2.0",
240
+ "version_normalized": "1.2.0.0",
241
+ "source": {
242
+ "type": "git",
243
+ "url": "https://github.com/php-parallel-lint/PHP-Parallel-Lint.git",
244
+ "reference": "474f18bc6cc6aca61ca40bfab55139de614e51ca"
245
+ },
246
+ "dist": {
247
+ "type": "zip",
248
+ "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/474f18bc6cc6aca61ca40bfab55139de614e51ca",
249
+ "reference": "474f18bc6cc6aca61ca40bfab55139de614e51ca",
250
+ "shasum": ""
251
+ },
252
+ "require": {
253
+ "ext-json": "*",
254
+ "php": ">=5.4.0"
255
+ },
256
+ "replace": {
257
+ "grogy/php-parallel-lint": "*",
258
+ "jakub-onderka/php-parallel-lint": "*"
259
+ },
260
+ "require-dev": {
261
+ "nette/tester": "^1.3 || ^2.0",
262
+ "php-parallel-lint/php-console-highlighter": "~0.3",
263
+ "squizlabs/php_codesniffer": "~3.0"
264
+ },
265
+ "suggest": {
266
+ "php-parallel-lint/php-console-highlighter": "Highlight syntax in code snippet"
267
+ },
268
+ "time": "2020-04-04T12:18:32+00:00",
269
+ "bin": [
270
+ "parallel-lint"
271
+ ],
272
+ "type": "library",
273
+ "installation-source": "dist",
274
+ "autoload": {
275
+ "classmap": [
276
+ "./"
277
+ ]
278
+ },
279
+ "notification-url": "https://packagist.org/downloads/",
280
+ "license": [
281
+ "BSD-2-Clause"
282
+ ],
283
+ "authors": [
284
+ {
285
+ "name": "Jakub Onderka",
286
+ "email": "ahoj@jakubonderka.cz"
287
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
288
  ],
289
+ "description": "This tool check syntax of PHP files about 20x faster than serial check.",
290
+ "homepage": "https://github.com/php-parallel-lint/PHP-Parallel-Lint",
291
+ "support": {
292
+ "issues": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/issues",
293
+ "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/master"
294
+ },
295
+ "install-path": "../php-parallel-lint/php-parallel-lint"
296
+ },
297
+ {
298
+ "name": "sabberworm/php-css-parser",
299
+ "version": "dev-master",
300
+ "version_normalized": "dev-master",
301
+ "source": {
302
+ "type": "git",
303
+ "url": "https://github.com/sabberworm/PHP-CSS-Parser.git",
304
+ "reference": "bfdd976"
305
+ },
306
+ "dist": {
307
+ "type": "zip",
308
+ "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/bfdd976",
309
+ "reference": "bfdd976",
310
+ "shasum": ""
311
+ },
312
+ "require": {
313
+ "php": ">=5.3.2"
314
+ },
315
+ "require-dev": {
316
+ "codacy/coverage": "^1.4",
317
+ "phpunit/phpunit": "^4.8.36"
318
+ },
319
+ "time": "2020-10-31T09:42:15+00:00",
320
+ "default-branch": true,
321
+ "type": "library",
322
+ "extra": {
323
+ "patches_applied": {
324
+ "Add additional validation for size unit <https://github.com/sabberworm/PHP-CSS-Parser/pull/193>": "https://github.com/sabberworm/PHP-CSS-Parser/compare/3bc5ded67d77a52b81608cfc97f23b1bb0678e2f%5E...468da3441945e9c1bf402a3340b1d8326723f7d9.patch",
325
+ "Validate name-start code points for identifier <https://github.com/sabberworm/PHP-CSS-Parser/pull/185>": "https://github.com/sabberworm/PHP-CSS-Parser/compare/d42b64793f2edaffeb663c63e9de79069cdc0831%5E...113df5d55e94e21c6402021dfa959924941d4c29.patch",
326
+ "Fix parsing CSS selectors which contain commas <https://github.com/westonruter/PHP-CSS-Parser/pull/1>": "https://github.com/westonruter/PHP-CSS-Parser/compare/master...10a2501c119abafced3e4014aa3c0a3453a86f67.patch"
327
+ }
328
+ },
329
+ "installation-source": "source",
330
+ "autoload": {
331
+ "psr-4": {
332
+ "Sabberworm\\CSS\\": "lib/Sabberworm/CSS/"
333
+ }
334
+ },
335
+ "license": [
336
+ "MIT"
337
  ],
338
+ "authors": [
339
+ {
340
+ "name": "Raphael Schweikert"
341
+ }
342
  ],
343
+ "description": "Parser for CSS Files written in PHP",
344
+ "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser",
345
+ "keywords": [
346
+ "css",
347
+ "parser",
348
+ "stylesheet"
349
  ],
350
+ "install-path": "../sabberworm/php-css-parser"
351
+ },
352
+ {
353
+ "name": "willwashburn/stream",
354
+ "version": "v1.0.0",
355
+ "version_normalized": "1.0.0.0",
356
+ "source": {
357
+ "type": "git",
358
+ "url": "https://github.com/willwashburn/stream.git",
359
+ "reference": "345b3062493e3899d987dbdd1fec1c13ee28c903"
360
+ },
361
+ "dist": {
362
+ "type": "zip",
363
+ "url": "https://api.github.com/repos/willwashburn/stream/zipball/345b3062493e3899d987dbdd1fec1c13ee28c903",
364
+ "reference": "345b3062493e3899d987dbdd1fec1c13ee28c903",
365
+ "shasum": ""
366
+ },
367
+ "require": {
368
+ "php": ">=5.4.0"
369
+ },
370
+ "require-dev": {
371
+ "mockery/mockery": "~0.9",
372
+ "phpunit/phpunit": "~4.0"
373
+ },
374
+ "time": "2016-03-15T10:54:35+00:00",
375
+ "type": "library",
376
+ "installation-source": "dist",
377
+ "autoload": {
378
+ "psr-4": {
379
+ "WillWashburn\\": "src/"
380
+ }
381
+ },
382
+ "notification-url": "https://packagist.org/downloads/",
383
+ "license": [
384
+ "MIT"
385
  ],
386
+ "authors": [
387
+ {
388
+ "name": "Will Washburn",
389
+ "email": "will.washburn@gmail.com"
390
+ }
391
  ],
392
+ "description": "model a sequence of data elements made available over time ",
393
+ "homepage": "https://github.com/willwashburn/stream",
394
+ "keywords": [
395
+ "peek",
396
+ "read",
397
+ "stream",
398
+ "streamable"
399
  ],
400
+ "support": {
401
+ "issues": "https://github.com/willwashburn/stream/issues",
402
+ "source": "https://github.com/willwashburn/stream/tree/master"
403
+ },
404
+ "install-path": "../willwashburn/stream"
 
 
 
 
 
 
405
  }
406
+ ],
407
+ "dev": false,
408
+ "dev-package-names": []
409
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/composer/installed.php ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php return array (
2
+ 'root' =>
3
+ array (
4
+ 'pretty_version' => '2.0.x-dev',
5
+ 'version' => '2.0.9999999.9999999-dev',
6
+ 'aliases' =>
7
+ array (
8
+ ),
9
+ 'reference' => '2acc034f6591038b6ebdc5a7d45f89ebd814d1b8',
10
+ 'name' => 'ampproject/amp-wp',
11
+ ),
12
+ 'versions' =>
13
+ array (
14
+ 'ampproject/amp-wp' =>
15
+ array (
16
+ 'pretty_version' => '2.0.x-dev',
17
+ 'version' => '2.0.9999999.9999999-dev',
18
+ 'aliases' =>
19
+ array (
20
+ ),
21
+ 'reference' => '2acc034f6591038b6ebdc5a7d45f89ebd814d1b8',
22
+ ),
23
+ 'ampproject/common' =>
24
+ array (
25
+ 'pretty_version' => '2.0.x-dev',
26
+ 'version' => '2.0.9999999.9999999-dev',
27
+ 'aliases' =>
28
+ array (
29
+ ),
30
+ 'reference' => '9ae4d10f085d41c46ae00ee0c32db2f96165a877',
31
+ ),
32
+ 'ampproject/optimizer' =>
33
+ array (
34
+ 'pretty_version' => '2.0.x-dev',
35
+ 'version' => '2.0.9999999.9999999-dev',
36
+ 'aliases' =>
37
+ array (
38
+ ),
39
+ 'reference' => 'd4658dac3e58a9377314cb340f8cafe3b892d06f',
40
+ ),
41
+ 'fasterimage/fasterimage' =>
42
+ array (
43
+ 'pretty_version' => 'v1.5.0',
44
+ 'version' => '1.5.0.0',
45
+ 'aliases' =>
46
+ array (
47
+ ),
48
+ 'reference' => '42d125a15dc124520aff2157bbed9a4b2d4f310a',
49
+ ),
50
+ 'grogy/php-parallel-lint' =>
51
+ array (
52
+ 'replaced' =>
53
+ array (
54
+ 0 => '*',
55
+ ),
56
+ ),
57
+ 'jakub-onderka/php-parallel-lint' =>
58
+ array (
59
+ 'replaced' =>
60
+ array (
61
+ 0 => '*',
62
+ ),
63
+ ),
64
+ 'php-parallel-lint/php-parallel-lint' =>
65
+ array (
66
+ 'pretty_version' => 'v1.2.0',
67
+ 'version' => '1.2.0.0',
68
+ 'aliases' =>
69
+ array (
70
+ ),
71
+ 'reference' => '474f18bc6cc6aca61ca40bfab55139de614e51ca',
72
+ ),
73
+ 'sabberworm/php-css-parser' =>
74
+ array (
75
+ 'pretty_version' => 'dev-master',
76
+ 'version' => 'dev-master',
77
+ 'aliases' =>
78
+ array (
79
+ 0 => '9999999-dev',
80
+ ),
81
+ 'reference' => 'bfdd976',
82
+ ),
83
+ 'willwashburn/stream' =>
84
+ array (
85
+ 'pretty_version' => 'v1.0.0',
86
+ 'version' => '1.0.0.0',
87
+ 'aliases' =>
88
+ array (
89
+ ),
90
+ 'reference' => '345b3062493e3899d987dbdd1fec1c13ee28c903',
91
+ ),
92
+ ),
93
+ );
vendor/composer/platform_check.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // platform_check.php @generated by Composer
4
+
5
+ $issues = array();
6
+
7
+ if (!(PHP_VERSION_ID >= 50600)) {
8
+ $issues[] = 'Your Composer dependencies require a PHP version ">= 5.6.0". You are running ' . PHP_VERSION . '.';
9
+ }
10
+
11
+ if ($issues) {
12
+ if (!headers_sent()) {
13
+ header('HTTP/1.1 500 Internal Server Error');
14
+ }
15
+ if (!ini_get('display_errors')) {
16
+ if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
17
+ fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
18
+ } elseif (!headers_sent()) {
19
+ echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
20
+ }
21
+ }
22
+ trigger_error(
23
+ 'Composer detected issues in your platform: ' . implode(' ', $issues),
24
+ E_USER_ERROR
25
+ );
26
+ }