Skip to content

Commit

Permalink
Merge pull request #6757 from ampproject/remove/sandboxing-filter-opt-in
Browse files Browse the repository at this point in the history
Replace `amp_experimental_sandboxing_enabled` filter with Sandboxing experiment toggle
  • Loading branch information
westonruter authored Dec 6, 2021
2 parents eacd6cf + 4d75dc2 commit bc08455
Show file tree
Hide file tree
Showing 11 changed files with 338 additions and 255 deletions.
4 changes: 2 additions & 2 deletions assets/src/settings-page/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ import { PluginsContextProvider } from '../components/plugins-context-provider';
import { ThemesContextProvider } from '../components/themes-context-provider';
import { SiteScanContextProvider } from '../components/site-scan-context-provider';
import { Welcome } from './welcome';
import { SandboxingLevel } from './sandboxing-level';
import { Sandboxing } from './sandboxing';
import { TemplateModes } from './template-modes';
import { SupportedTemplates } from './supported-templates';
import { SettingsFooter } from './settings-footer';
Expand Down Expand Up @@ -223,7 +223,6 @@ function Root( { appRoot } ) {
<h2 id="advanced-settings">
{ __( 'Advanced Settings', 'amp' ) }
</h2>
<SandboxingLevel focusedSection={ focusedSection } />
<AMPDrawer
heading={ (
<h3>
Expand Down Expand Up @@ -261,6 +260,7 @@ function Root( { appRoot } ) {
>
<Analytics />
</AMPDrawer>
<Sandboxing focusedSection={ focusedSection } />
<PairedUrlStructure focusedSection={ focusedSection } />
<AMPDrawer
className="amp-other-settings"
Expand Down
105 changes: 0 additions & 105 deletions assets/src/settings-page/sandboxing-level.js

This file was deleted.

120 changes: 120 additions & 0 deletions assets/src/settings-page/sandboxing.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
/**
* External dependencies
*/
import PropTypes from 'prop-types';

/**
* WordPress dependencies
*/
import { createInterpolateElement, useContext } from '@wordpress/element';
import { __ } from '@wordpress/i18n';
import { CheckboxControl } from '@wordpress/components';

/**
* Internal dependencies
*/
import { Options } from '../components/options-context-provider';
import { AMPDrawer } from '../components/amp-drawer';
import { STANDARD } from '../common/constants';

/**
* Component rendering the Sandboxing experiment.
*
* @param {Object} props Component props.
* @param {string} props.focusedSection Focused section.
*/
export function Sandboxing( { focusedSection } ) {
const { updateOptions, editedOptions: {
sandboxing_enabled: sandboxingEnabled,
sandboxing_level: sandboxingLevel,
theme_support: themeSupport,
} } = useContext( Options );

if ( STANDARD !== themeSupport ) {
return null;
}

return (
<AMPDrawer
heading={ (
<h3>
{ __( 'Sandboxing (Experimental)', 'amp' ) }
</h3>
) }
hiddenTitle={ __( 'Sandboxing (Experimental)', 'amp' ) }
id="sandboxing"
initialOpen={ 'sandboxing' === focusedSection }
>
<p>
{ __( 'Try out a more flexible AMP by generating pages that use AMP components without requiring AMP validity! By selecting a sandboxing level, you are indicating the minimum degree of sanitization. For example, if you selected the loose level but have a page without any POST form and no custom scripts, it will still be served as valid AMP—the same as if you had selected the strict level.', 'amp' ) }
</p>

<CheckboxControl
className="sandboxing-enabled"
checked={ sandboxingEnabled }
label={ __( 'Enable sandboxing experiment', 'amp' ) }
onChange={
( newChecked ) => {
updateOptions( { sandboxing_enabled: newChecked } );
}
}
/>

{ sandboxingEnabled && (
<ol>
<li>
<input
type="radio"
id="sandboxing-level-1"
checked={ 1 === sandboxingLevel }
onChange={ () => {
updateOptions( { sandboxing_level: 1 } );
} }
/>
<label htmlFor="sandboxing-level-1">
{ createInterpolateElement(
__( '<b>Loose:</b> Do not remove any AMP-invalid markup by default, including custom scripts. CSS processing is disabled.', 'amp' ),
{ b: <strong /> },
) }
</label>
</li>
<li>
<input
type="radio"
id="sandboxing-level-2"
checked={ 2 === sandboxingLevel }
onChange={ () => {
updateOptions( { sandboxing_level: 2 } );
} }
/>
<label htmlFor="sandboxing-level-2">
{ createInterpolateElement(
__( '<b>Moderate:</b> Remove anything invalid AMP except for POST forms, excessive CSS, and other PX-verified markup.', 'amp' ),
{ b: <strong /> },
) }
</label>
</li>
<li>
<input
type="radio"
id="sandboxing-level-3"
checked={ 3 === sandboxingLevel }
onChange={ () => {
updateOptions( { sandboxing_level: 3 } );
} }
/>
<label htmlFor="sandboxing-level-3">
{ createInterpolateElement(
__( '<b>Strict:</b> Require valid AMP, removing all markup that causes validation errors (except for excessive CSS).', 'amp' ),
{ b: <strong /> },
) }
</label>
</li>
</ol>
) }
</AMPDrawer>
);
}
Sandboxing.propTypes = {
focusedSection: PropTypes.string,
};
22 changes: 13 additions & 9 deletions assets/src/settings-page/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ li.error-kept {
}
}

#sandboxing-level .amp-drawer__panel-body-inner,
#sandboxing .amp-drawer__panel-body-inner,
#site-scan .amp-drawer__panel-body-inner,
#site-review .amp-drawer__panel-body-inner,
#plugin-suppression .amp-drawer__panel-body-inner,
Expand Down Expand Up @@ -660,30 +660,34 @@ li.error-kept {
font-size: 0.875rem;
}

/* Sandboxing Level */
#sandboxing-level .amp-drawer__panel-body-inner p {
/* Sandboxing */
#sandboxing .amp-drawer__panel-body-inner p {
font-size: 14px;
margin-top: 0;
}

#sandboxing-level .amp-drawer__panel-body-inner ol {
#sandboxing .sandboxing-enabled {
font-weight: bold;
}

#sandboxing .amp-drawer__panel-body-inner ol {
margin-top: 1.5rem;
margin-left: 0;
}

#sandboxing-level .amp-drawer__panel-body-inner li {
#sandboxing .amp-drawer__panel-body-inner li {
list-style-type: none;
}

#sandboxing-level .amp-drawer__panel-body-inner li:not(:last-child) {
#sandboxing .amp-drawer__panel-body-inner li:not(:last-child) {
margin-bottom: 12px;
}

#sandboxing-level .amp-drawer__panel-body-inner input[type="radio"] {
#sandboxing .amp-drawer__panel-body-inner input[type="radio"] {
margin-right: 12px;
}

#sandboxing-level .amp-drawer__panel-body-inner input[type="radio"],
#sandboxing-level .amp-drawer__panel-body-inner label {
#sandboxing .amp-drawer__panel-body-inner input[type="radio"],
#sandboxing .amp-drawer__panel-body-inner label {
vertical-align: middle;
}
66 changes: 33 additions & 33 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"name": "ampproject/amp-wp",
"type": "wordpress-plugin",
"description": "WordPress plugin for adding AMP support.",
"homepage": "https://github.com/ampproject/amp-wp",
"license": "GPL-2.0-or-later",
"type": "wordpress-plugin",
"homepage": "https://github.com/ampproject/amp-wp",
"require": {
"php": "^5.6 || ^7.0 || ^8.0",
"ext-curl": "*",
Expand Down Expand Up @@ -43,31 +43,14 @@
"ext-intl": "Enables use of idn_to_utf8() to convert punycode domains to UTF-8 for use with an AMP Cache.",
"ext-mbstring": "Used by PHP-CSS-Parser when working with stylesheets."
},
"config": {
"platform": {
"php": "5.6.20"
},
"sort-packages": true
},
"extra": {
"downloads": {
"phpstan": {
"path": "vendor/bin/phpstan",
"type": "phar",
"url": "https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar"
}
},
"patches": {
"phpunit/phpunit-mock-objects": {
"Fix ReflectionParameter warnings on PHP 8": "patches/phpunit-mock-objects.patch"
},
"sabberworm/php-css-parser": {
"1. 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",
"2. 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",
"3. 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"
}
"repositories": [
{
"type": "path",
"url": "./php-css-parser-install-composer-plugin"
}
},
],
"minimum-stability": "dev",
"prefer-stable": true,
"autoload": {
"psr-4": {
"AmpProject\\AmpWP\\": "src/"
Expand All @@ -92,14 +75,31 @@
"docs/includes/register-wp-cli-commands.php"
]
},
"repositories": [
{
"type": "path",
"url": "./php-css-parser-install-composer-plugin"
"config": {
"platform": {
"php": "5.6.20"
},
"sort-packages": true
},
"extra": {
"downloads": {
"phpstan": {
"path": "vendor/bin/phpstan",
"type": "phar",
"url": "https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar"
}
},
"patches": {
"phpunit/phpunit-mock-objects": {
"Fix ReflectionParameter warnings on PHP 8": "patches/phpunit-mock-objects.patch"
},
"sabberworm/php-css-parser": {
"1. 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",
"2. 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",
"3. 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"
}
}
],
"minimum-stability": "dev",
"prefer-stable": true,
},
"scripts": {
"analyze": "if [ -z $TEST_SKIP_PHPSTAN ]; then phpstan --version; phpstan analyze --ansi; fi",
"pre-commit": [
Expand Down
Loading

0 comments on commit bc08455

Please sign in to comment.