Full Site Editing - Version 0.2.2

Version Description

  • Posts List Block - fixes Edit link to only display for users with appropriate permissions.
Download this release

Release Info

Developer get_dave
Plugin Icon wp plugin Full Site Editing
Version 0.2.2
Comparing to
See all releases

Code changes from version 0.2.1 to 0.2.2

full-site-editing-plugin.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Plugin Name: Full Site Editing
4
  * Description: Enhances your page creation workflow within the Block Editor.
5
- * Version: 0.2.1
6
  * Author: Automattic
7
  * Author URI: https://automattic.com/wordpress-plugins/
8
  * License: GPLv2 or later
@@ -18,7 +18,7 @@
18
  *
19
  * @var string
20
  */
21
- define( 'A8C_FSE_VERSION', '0.2.1' );
22
 
23
  /**
24
  * Load Full Site Editing.
2
  /**
3
  * Plugin Name: Full Site Editing
4
  * Description: Enhances your page creation workflow within the Block Editor.
5
+ * Version: 0.2.2
6
  * Author: Automattic
7
  * Author URI: https://automattic.com/wordpress-plugins/
8
  * License: GPLv2 or later
18
  *
19
  * @var string
20
  */
21
+ define( 'A8C_FSE_VERSION', '0.2.2' );
22
 
23
  /**
24
  * Load Full Site Editing.
full-site-editing/blocks/site-title/edit.js ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import classNames from 'classnames';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { __ } from '@wordpress/i18n';
10
+ import { withNotices } from '@wordpress/components';
11
+ import { PlainText } from '@wordpress/editor';
12
+ import apiFetch from '@wordpress/api-fetch';
13
+ import { withSelect } from '@wordpress/data';
14
+ import { compose } from '@wordpress/compose';
15
+ import { Component, Fragment } from '@wordpress/element';
16
+
17
+ class SiteTitleEdit extends Component {
18
+ state = {
19
+ title: __( 'Site title loading…' ),
20
+ initialTitle: '',
21
+ };
22
+
23
+ componentDidMount() {
24
+ const { noticeOperations } = this.props;
25
+
26
+ return apiFetch( { path: '/wp/v2/settings' } )
27
+ .then( ( { title } ) => this.setState( { initialTitle: title, title } ) )
28
+ .catch( ( { message } ) => noticeOperations.createErrorNotice( message ) );
29
+ }
30
+
31
+ componentDidUpdate( prevProps ) {
32
+ const { title, initialTitle } = this.state;
33
+ const { shouldUpdateSiteOption, noticeOperations, isSelected } = this.props;
34
+
35
+ const titleUnchanged = title && title.trim() === initialTitle.trim();
36
+ const titleIsEmpty = ! title || title.trim().length === 0;
37
+
38
+ // Reset to initial value if user de-selects the block with an empty value.
39
+ if ( ! isSelected && prevProps.isSelected && titleIsEmpty ) {
40
+ this.revertTitle();
41
+ }
42
+
43
+ // Don't do anything further if we shouldn't update the site option or the value is unchanged.
44
+ if ( ! shouldUpdateSiteOption || titleUnchanged ) {
45
+ return;
46
+ }
47
+
48
+ if ( ! prevProps.shouldUpdateSiteOption && shouldUpdateSiteOption ) {
49
+ apiFetch( { path: '/wp/v2/settings', method: 'POST', data: { title } } )
50
+ .then( () => this.updateInitialTitle() )
51
+ .catch( ( { message } ) => {
52
+ noticeOperations.createErrorNotice( message );
53
+ this.revertTitle();
54
+ } );
55
+ }
56
+ }
57
+
58
+ revertTitle = () => this.setState( { title: this.state.initialTitle } );
59
+
60
+ updateInitialTitle = () => this.setState( { initialTitle: this.state.title } );
61
+
62
+ render() {
63
+ const { title } = this.state;
64
+ const { className, noticeUI } = this.props;
65
+
66
+ return (
67
+ <Fragment>
68
+ { noticeUI }
69
+ <PlainText
70
+ className={ classNames( 'site-title', className ) }
71
+ value={ title }
72
+ onChange={ value => this.setState( { title: value } ) }
73
+ placeholder={ __( 'Site Title' ) }
74
+ aria-label={ __( 'Site Title' ) }
75
+ />
76
+ </Fragment>
77
+ );
78
+ }
79
+ }
80
+
81
+ export default compose( [
82
+ withSelect( select => {
83
+ const { isSavingPost, isPublishingPost, isAutosavingPost, isCurrentPostPublished } = select(
84
+ 'core/editor'
85
+ );
86
+ return {
87
+ shouldUpdateSiteOption:
88
+ ( ( isSavingPost() && isCurrentPostPublished() ) || isPublishingPost() ) &&
89
+ ! isAutosavingPost(),
90
+ };
91
+ } ),
92
+ withNotices,
93
+ ] )( SiteTitleEdit );
full-site-editing/blocks/site-title/index.js ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { registerBlockType } from '@wordpress/blocks';
5
+ import { __ } from '@wordpress/i18n';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import edit from './edit';
11
+ import './style.scss';
12
+
13
+ registerBlockType( 'a8c/site-title', {
14
+ title: __( 'Site Title' ),
15
+ description: __( 'Your site title.' ),
16
+ icon: 'layout',
17
+ category: 'layout',
18
+ supports: {
19
+ html: false,
20
+ multiple: false,
21
+ reusable: false,
22
+ },
23
+ edit,
24
+ save: () => null,
25
+ } );
full-site-editing/blocks/site-title/index.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Render site title block.
4
+ *
5
+ * @package full-site-editing
6
+ */
7
+ /**
8
+ * Renders the site title and allows for editing in the full site editor.
9
+ *
10
+ * @param array $attributes Block attributes.
11
+ * @param string $content Block content.
12
+ * @return string
13
+ */
14
+ function render_site_title_block( $attributes, $content ) {
15
+ ob_start();
16
+
17
+ $class = 'site-title wp-block-a8c-site-title';
18
+ if ( isset( $attributes['className'] ) ) {
19
+ $class .= ' ' . $attributes['className'];
20
+ }
21
+
22
+ ?>
23
+ <h1 class="<?php echo esc_attr( $class ); ?>">
24
+ <a href=<?php echo get_home_url(); ?>><?php echo get_bloginfo( 'name' ); ?></a>
25
+ </h1>
26
+ <!-- a8c:site-title -->
27
+ <?php
28
+ return ob_get_clean();
29
+ }
30
+
full-site-editing/blocks/site-title/style.scss ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .block-editor .wp-block-a8c-site-title {
2
+ &, &:focus {
3
+ display: inline;
4
+ color: #111111;
5
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
6
+ font-size: 1.125em;
7
+ font-weight: normal;
8
+ letter-spacing: -0.02em;
9
+ line-height: 1.2;
10
+ margin: 0;
11
+ }
12
+ }
lib/feature-flags/feature-flags.php DELETED
@@ -1,116 +0,0 @@
1
- <?php
2
- /**
3
- * Feature flags file.
4
- *
5
- * @package full-site-editing
6
- */
7
-
8
- /**
9
- * Class A8C_Full_Site_Editing_Feature_Flags
10
- */
11
- class A8C_Full_Site_Editing_Feature_Flags {
12
- /**
13
- * Class instance.
14
- *
15
- * @var A8C_Full_Site_Editing_Feature_Flags
16
- */
17
- private static $instance = null;
18
-
19
- /**
20
- * Feature flags.
21
- *
22
- * @var array
23
- */
24
- private $flags = [];
25
-
26
- /**
27
- * Parameter and cookie name for storing/retrieving the feature flags.
28
- *
29
- * @var string
30
- */
31
- const FEATURE_FLAGS = 'fse_feature_flags';
32
-
33
- /**
34
- * A8C_Full_Site_Editing_Feature_Flags constructor.
35
- */
36
- private function __construct() {
37
- $this->set_flags();
38
- }
39
-
40
- /**
41
- * Creates instance.
42
- *
43
- * @return A8C_Full_Site_Editing_Feature_Flags
44
- */
45
- public static function get_instance() {
46
- if ( is_null( self::$instance ) ) {
47
- self::$instance = new self();
48
- }
49
-
50
- return self::$instance;
51
- }
52
-
53
- /**
54
- * Get the feature flags.
55
- *
56
- * @return array
57
- */
58
- public function get_flags() {
59
- return $this->flags;
60
- }
61
-
62
- /**
63
- * Check if a feature flag is enabled.
64
- *
65
- * @param string $flag_name Feature flag.
66
- * @return boolean
67
- */
68
- public function is_enabled( $flag_name ) {
69
- if ( ! isset( $flag_name, $this->flags[ $flag_name ] ) ) {
70
- return false;
71
- }
72
-
73
- return (boolean) $this->flags[ $flag_name ];
74
- }
75
-
76
- /**
77
- * Set the feature flags based on GET parameter or cookie value.
78
- */
79
- private function set_flags() {
80
- $flags = null;
81
-
82
- $has_flags_param = isset( $_GET[ self::FEATURE_FLAGS ] );
83
- $has_flags_cookie = isset( $_COOKIE[ self::FEATURE_FLAGS ] );
84
-
85
- // Remove all of the flag values when empty parameter is passed.
86
- if ( $has_flags_param && empty( $_GET[ self::FEATURE_FLAGS ] ) ) {
87
- setcookie( self::FEATURE_FLAGS, '', time() - 3600 );
88
- $this->flags = [];
89
- return;
90
- }
91
-
92
- if ( $has_flags_param ) {
93
- setcookie( self::FEATURE_FLAGS, $_GET[ self::FEATURE_FLAGS ] );
94
- $flags = $_GET[ self::FEATURE_FLAGS ];
95
- } else if ( $has_flags_cookie ) {
96
- $flags = $_COOKIE[ self::FEATURE_FLAGS ];
97
- }
98
-
99
- if ( empty( $flags ) ) {
100
- $this->flags = [];
101
- return;
102
- }
103
-
104
- // Feature flags are represented as a string of comma-separated feature flag names.
105
- // For example: "flag1,flag2,-flag3" (leading "-" denotes that the given flag is disabled).
106
- foreach ( explode( ',', $flags ) as $flag ) {
107
- $flag = trim( $flag );
108
- $is_enabled = '-' !== $flag[0];
109
-
110
- // Strip "-" for disabled flags to obtain the correct name
111
- $name = $is_enabled ? $flag : substr( $flag, 1 );
112
-
113
- $this->flags[ $name ] = $is_enabled;
114
- }
115
- }
116
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posts-list-block/templates/post-item.php CHANGED
@@ -31,9 +31,11 @@
31
  <span class="a8c-posts-list-item__author"><?php echo esc_html_x( 'by', 'designating the post author (eg: by John Doe', 'full-site-editing' ); ?>
32
  <?php the_author_posts_link(); ?>
33
  </span>
34
- <span class="a8c-posts-list-item__edit-link">
35
- <a href="<?php echo esc_attr( get_edit_post_link() ); ?>"><?php esc_html_e( 'Edit', 'full-site-editing' ); ?></a>
36
- </span>
 
 
37
  </div>
38
 
39
  <div class="a8c-posts-list-item__excerpt">
31
  <span class="a8c-posts-list-item__author"><?php echo esc_html_x( 'by', 'designating the post author (eg: by John Doe', 'full-site-editing' ); ?>
32
  <?php the_author_posts_link(); ?>
33
  </span>
34
+ <?php if ( current_user_can( 'edit_posts' ) ) : ?>
35
+ <span class="a8c-posts-list-item__edit-link">
36
+ <a href="<?php echo esc_attr( get_edit_post_link() ); ?>"><?php esc_html_e( 'Edit', 'full-site-editing' ); ?></a>
37
+ </span>
38
+ <?php endif ?>
39
  </div>
40
 
41
  <div class="a8c-posts-list-item__excerpt">
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: alexislloyd, allancole, automattic, codebykat, copons, dmsnell, ge
3
  Tags: block, blocks, editor, gutenberg, page
4
  Requires at least: 5.0
5
  Tested up to: 5.2
6
- Stable tag: 0.2
7
  Requires PHP: 5.6.20
8
  License: GPLv2 or later
9
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
@@ -40,8 +40,16 @@ This plugin is experimental, so we don't provide any support for it outside of w
40
 
41
  == Changelog ==
42
 
 
 
 
 
43
  = 0.2.1 =
44
- * Bug fix with sub-locales.
 
 
 
 
45
 
46
  = 0.2 =
47
  * Bug fixes and performance improvements.
3
  Tags: block, blocks, editor, gutenberg, page
4
  Requires at least: 5.0
5
  Tested up to: 5.2
6
+ Stable tag: 0.2.2
7
  Requires PHP: 5.6.20
8
  License: GPLv2 or later
9
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
40
 
41
  == Changelog ==
42
 
43
+ = 0.2.2 =
44
+
45
+ * Posts List Block - fixes Edit link to only display for users with appropriate permissions.
46
+
47
  = 0.2.1 =
48
+
49
+ * Starter Page Templates - bug fix with sub-locales.
50
+ * Starter Page Templates - fix momentum scrolling on Modal on iOS.
51
+ * Starter Page Templates - improve comprehension of Templates listing by forcing 2col layout on small viewports.
52
+ * Starter Page Templates - introduced version constant for cache busting purposes.
53
 
54
  = 0.2 =
55
  * Bug fixes and performance improvements.