@wordpress/block-library 7.3.10 → 7.3.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/avatar/hooks.js +2 -2
- package/build/avatar/hooks.js.map +1 -1
- package/build/columns/index.js +3 -1
- package/build/columns/index.js.map +1 -1
- package/build/comment-author-name/edit.js +3 -3
- package/build/comment-author-name/edit.js.map +1 -1
- package/build/comment-author-name/index.js +0 -4
- package/build/comment-author-name/index.js.map +1 -1
- package/build/comment-date/edit.js +4 -4
- package/build/comment-date/edit.js.map +1 -1
- package/build/comment-date/index.js +0 -4
- package/build/comment-date/index.js.map +1 -1
- package/build/comment-edit-link/index.js +0 -4
- package/build/comment-edit-link/index.js.map +1 -1
- package/build/comment-reply-link/index.js +0 -4
- package/build/comment-reply-link/index.js.map +1 -1
- package/build/comments-query-loop/edit.js +10 -2
- package/build/comments-query-loop/edit.js.map +1 -1
- package/build/gallery/gap-styles.js +14 -4
- package/build/gallery/gap-styles.js.map +1 -1
- package/build/image/edit.js +5 -56
- package/build/image/edit.js.map +1 -1
- package/build/image/image.js +4 -15
- package/build/image/image.js.map +1 -1
- package/build/latest-posts/edit.js +30 -4
- package/build/latest-posts/edit.js.map +1 -1
- package/build/media-text/edit.js +0 -1
- package/build/media-text/edit.js.map +1 -1
- package/build/navigation/edit/index.js +81 -80
- package/build/navigation/edit/index.js.map +1 -1
- package/build/post-comments/edit.js +12 -33
- package/build/post-comments/edit.js.map +1 -1
- package/build/post-comments-form/edit.js +46 -25
- package/build/post-comments-form/edit.js.map +1 -1
- package/build/post-comments-form/form.js +48 -0
- package/build/post-comments-form/form.js.map +1 -0
- package/build-module/avatar/hooks.js +2 -2
- package/build-module/avatar/hooks.js.map +1 -1
- package/build-module/columns/index.js +3 -1
- package/build-module/columns/index.js.map +1 -1
- package/build-module/comment-author-name/edit.js +3 -3
- package/build-module/comment-author-name/edit.js.map +1 -1
- package/build-module/comment-author-name/index.js +0 -4
- package/build-module/comment-author-name/index.js.map +1 -1
- package/build-module/comment-date/edit.js +4 -4
- package/build-module/comment-date/edit.js.map +1 -1
- package/build-module/comment-date/index.js +0 -4
- package/build-module/comment-date/index.js.map +1 -1
- package/build-module/comment-edit-link/index.js +0 -4
- package/build-module/comment-edit-link/index.js.map +1 -1
- package/build-module/comment-reply-link/index.js +0 -4
- package/build-module/comment-reply-link/index.js.map +1 -1
- package/build-module/comments-query-loop/edit.js +10 -2
- package/build-module/comments-query-loop/edit.js.map +1 -1
- package/build-module/gallery/gap-styles.js +14 -4
- package/build-module/gallery/gap-styles.js.map +1 -1
- package/build-module/image/edit.js +4 -52
- package/build-module/image/edit.js.map +1 -1
- package/build-module/image/image.js +5 -16
- package/build-module/image/image.js.map +1 -1
- package/build-module/latest-posts/edit.js +29 -5
- package/build-module/latest-posts/edit.js.map +1 -1
- package/build-module/media-text/edit.js +0 -1
- package/build-module/media-text/edit.js.map +1 -1
- package/build-module/navigation/edit/index.js +81 -80
- package/build-module/navigation/edit/index.js.map +1 -1
- package/build-module/post-comments/edit.js +12 -34
- package/build-module/post-comments/edit.js.map +1 -1
- package/build-module/post-comments-form/edit.js +47 -28
- package/build-module/post-comments-form/edit.js.map +1 -1
- package/build-module/post-comments-form/form.js +39 -0
- package/build-module/post-comments-form/form.js.map +1 -0
- package/build-style/editor-rtl.css +3 -0
- package/build-style/editor.css +3 -0
- package/build-style/navigation/style-rtl.css +3 -0
- package/build-style/navigation/style.css +3 -0
- package/build-style/post-comments-form/editor-rtl.css +3 -0
- package/build-style/post-comments-form/editor.css +3 -0
- package/build-style/style-rtl.css +3 -0
- package/build-style/style.css +3 -0
- package/package.json +7 -7
- package/src/avatar/hooks.js +9 -6
- package/src/columns/block.json +3 -1
- package/src/comment-author-name/block.json +0 -4
- package/src/comment-author-name/edit.js +3 -12
- package/src/comment-date/block.json +0 -4
- package/src/comment-date/edit.js +10 -14
- package/src/comment-date/index.php +0 -3
- package/src/comment-edit-link/block.json +0 -4
- package/src/comment-reply-link/block.json +0 -4
- package/src/comments-query-loop/edit.js +24 -4
- package/src/cover/index.php +9 -6
- package/src/gallery/gap-styles.js +21 -6
- package/src/gallery/index.php +24 -4
- package/src/image/edit.js +0 -44
- package/src/image/image.js +3 -14
- package/src/latest-posts/edit.js +27 -2
- package/src/media-text/edit.js +0 -1
- package/src/navigation/edit/index.js +140 -143
- package/src/navigation/style.scss +3 -0
- package/src/post-comments/edit.js +13 -42
- package/src/post-comments-form/edit.js +65 -59
- package/src/post-comments-form/editor.scss +4 -0
- package/src/post-comments-form/form.js +43 -0
- package/src/post-template/index.php +15 -3
package/src/media-text/edit.js
CHANGED
|
@@ -549,6 +549,144 @@ function Navigation( {
|
|
|
549
549
|
} );
|
|
550
550
|
}, [ clientId, ref ] );
|
|
551
551
|
|
|
552
|
+
const isResponsive = 'never' !== overlayMenu;
|
|
553
|
+
|
|
554
|
+
const overlayMenuPreviewClasses = classnames(
|
|
555
|
+
'wp-block-navigation__overlay-menu-preview',
|
|
556
|
+
{ open: overlayMenuPreview }
|
|
557
|
+
);
|
|
558
|
+
|
|
559
|
+
const stylingInspectorControls = (
|
|
560
|
+
<InspectorControls>
|
|
561
|
+
{ hasSubmenuIndicatorSetting && (
|
|
562
|
+
<PanelBody title={ __( 'Display' ) }>
|
|
563
|
+
{ isResponsive && (
|
|
564
|
+
<Button
|
|
565
|
+
className={ overlayMenuPreviewClasses }
|
|
566
|
+
onClick={ () => {
|
|
567
|
+
setOverlayMenuPreview( ! overlayMenuPreview );
|
|
568
|
+
} }
|
|
569
|
+
>
|
|
570
|
+
{ hasIcon && <OverlayMenuIcon /> }
|
|
571
|
+
{ ! hasIcon && <span>{ __( 'Menu' ) }</span> }
|
|
572
|
+
</Button>
|
|
573
|
+
) }
|
|
574
|
+
{ overlayMenuPreview && (
|
|
575
|
+
<ToggleControl
|
|
576
|
+
label={ __( 'Show icon button' ) }
|
|
577
|
+
help={ __(
|
|
578
|
+
'Configure the visual appearance of the button opening the overlay menu.'
|
|
579
|
+
) }
|
|
580
|
+
onChange={ ( value ) =>
|
|
581
|
+
setAttributes( { hasIcon: value } )
|
|
582
|
+
}
|
|
583
|
+
checked={ hasIcon }
|
|
584
|
+
/>
|
|
585
|
+
) }
|
|
586
|
+
<h3>{ __( 'Overlay Menu' ) }</h3>
|
|
587
|
+
<ToggleGroupControl
|
|
588
|
+
label={ __( 'Configure overlay menu' ) }
|
|
589
|
+
value={ overlayMenu }
|
|
590
|
+
help={ __(
|
|
591
|
+
'Collapses the navigation options in a menu icon opening an overlay.'
|
|
592
|
+
) }
|
|
593
|
+
onChange={ ( value ) =>
|
|
594
|
+
setAttributes( { overlayMenu: value } )
|
|
595
|
+
}
|
|
596
|
+
isBlock
|
|
597
|
+
hideLabelFromVision
|
|
598
|
+
>
|
|
599
|
+
<ToggleGroupControlOption
|
|
600
|
+
value="never"
|
|
601
|
+
label={ __( 'Off' ) }
|
|
602
|
+
/>
|
|
603
|
+
<ToggleGroupControlOption
|
|
604
|
+
value="mobile"
|
|
605
|
+
label={ __( 'Mobile' ) }
|
|
606
|
+
/>
|
|
607
|
+
<ToggleGroupControlOption
|
|
608
|
+
value="always"
|
|
609
|
+
label={ __( 'Always' ) }
|
|
610
|
+
/>
|
|
611
|
+
</ToggleGroupControl>
|
|
612
|
+
{ hasSubmenus && (
|
|
613
|
+
<>
|
|
614
|
+
<h3>{ __( 'Submenus' ) }</h3>
|
|
615
|
+
<ToggleControl
|
|
616
|
+
checked={ openSubmenusOnClick }
|
|
617
|
+
onChange={ ( value ) => {
|
|
618
|
+
setAttributes( {
|
|
619
|
+
openSubmenusOnClick: value,
|
|
620
|
+
...( value && {
|
|
621
|
+
showSubmenuIcon: true,
|
|
622
|
+
} ), // Make sure arrows are shown when we toggle this on.
|
|
623
|
+
} );
|
|
624
|
+
} }
|
|
625
|
+
label={ __( 'Open on click' ) }
|
|
626
|
+
/>
|
|
627
|
+
|
|
628
|
+
<ToggleControl
|
|
629
|
+
checked={ showSubmenuIcon }
|
|
630
|
+
onChange={ ( value ) => {
|
|
631
|
+
setAttributes( {
|
|
632
|
+
showSubmenuIcon: value,
|
|
633
|
+
} );
|
|
634
|
+
} }
|
|
635
|
+
disabled={ attributes.openSubmenusOnClick }
|
|
636
|
+
label={ __( 'Show arrow' ) }
|
|
637
|
+
/>
|
|
638
|
+
</>
|
|
639
|
+
) }
|
|
640
|
+
</PanelBody>
|
|
641
|
+
) }
|
|
642
|
+
{ hasColorSettings && (
|
|
643
|
+
<PanelColorSettings
|
|
644
|
+
__experimentalHasMultipleOrigins
|
|
645
|
+
__experimentalIsRenderedInSidebar
|
|
646
|
+
title={ __( 'Color' ) }
|
|
647
|
+
initialOpen={ false }
|
|
648
|
+
colorSettings={ [
|
|
649
|
+
{
|
|
650
|
+
value: textColor.color,
|
|
651
|
+
onChange: setTextColor,
|
|
652
|
+
label: __( 'Text' ),
|
|
653
|
+
},
|
|
654
|
+
{
|
|
655
|
+
value: backgroundColor.color,
|
|
656
|
+
onChange: setBackgroundColor,
|
|
657
|
+
label: __( 'Background' ),
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
value: overlayTextColor.color,
|
|
661
|
+
onChange: setOverlayTextColor,
|
|
662
|
+
label: __( 'Submenu & overlay text' ),
|
|
663
|
+
},
|
|
664
|
+
{
|
|
665
|
+
value: overlayBackgroundColor.color,
|
|
666
|
+
onChange: setOverlayBackgroundColor,
|
|
667
|
+
label: __( 'Submenu & overlay background' ),
|
|
668
|
+
},
|
|
669
|
+
] }
|
|
670
|
+
>
|
|
671
|
+
{ enableContrastChecking && (
|
|
672
|
+
<>
|
|
673
|
+
<ContrastChecker
|
|
674
|
+
backgroundColor={ detectedBackgroundColor }
|
|
675
|
+
textColor={ detectedColor }
|
|
676
|
+
/>
|
|
677
|
+
<ContrastChecker
|
|
678
|
+
backgroundColor={
|
|
679
|
+
detectedOverlayBackgroundColor
|
|
680
|
+
}
|
|
681
|
+
textColor={ detectedOverlayColor }
|
|
682
|
+
/>
|
|
683
|
+
</>
|
|
684
|
+
) }
|
|
685
|
+
</PanelColorSettings>
|
|
686
|
+
) }
|
|
687
|
+
</InspectorControls>
|
|
688
|
+
);
|
|
689
|
+
|
|
552
690
|
// If the block has inner blocks, but no menu id, then these blocks are either:
|
|
553
691
|
// - inserted via a pattern.
|
|
554
692
|
// - inserted directly via Code View (or otherwise).
|
|
@@ -559,6 +697,7 @@ function Navigation( {
|
|
|
559
697
|
if ( hasUnsavedBlocks ) {
|
|
560
698
|
return (
|
|
561
699
|
<TagName { ...blockProps }>
|
|
700
|
+
{ stylingInspectorControls }
|
|
562
701
|
<ResponsiveWrapper
|
|
563
702
|
id={ clientId }
|
|
564
703
|
onToggle={ setResponsiveMenuVisibility }
|
|
@@ -624,13 +763,6 @@ function Navigation( {
|
|
|
624
763
|
? CustomPlaceholder
|
|
625
764
|
: Placeholder;
|
|
626
765
|
|
|
627
|
-
const isResponsive = 'never' !== overlayMenu;
|
|
628
|
-
|
|
629
|
-
const overlayMenuPreviewClasses = classnames(
|
|
630
|
-
'wp-block-navigation__overlay-menu-preview',
|
|
631
|
-
{ open: overlayMenuPreview }
|
|
632
|
-
);
|
|
633
|
-
|
|
634
766
|
if ( isPlaceholder ) {
|
|
635
767
|
return (
|
|
636
768
|
<TagName { ...blockProps }>
|
|
@@ -668,142 +800,7 @@ function Navigation( {
|
|
|
668
800
|
</ToolbarGroup>
|
|
669
801
|
) }
|
|
670
802
|
</BlockControls>
|
|
671
|
-
|
|
672
|
-
{ hasSubmenuIndicatorSetting && (
|
|
673
|
-
<PanelBody title={ __( 'Display' ) }>
|
|
674
|
-
{ isResponsive && (
|
|
675
|
-
<Button
|
|
676
|
-
className={ overlayMenuPreviewClasses }
|
|
677
|
-
onClick={ () => {
|
|
678
|
-
setOverlayMenuPreview(
|
|
679
|
-
! overlayMenuPreview
|
|
680
|
-
);
|
|
681
|
-
} }
|
|
682
|
-
>
|
|
683
|
-
{ hasIcon && <OverlayMenuIcon /> }
|
|
684
|
-
{ ! hasIcon && (
|
|
685
|
-
<span>{ __( 'Menu' ) }</span>
|
|
686
|
-
) }
|
|
687
|
-
</Button>
|
|
688
|
-
) }
|
|
689
|
-
{ overlayMenuPreview && (
|
|
690
|
-
<ToggleControl
|
|
691
|
-
label={ __( 'Show icon button' ) }
|
|
692
|
-
help={ __(
|
|
693
|
-
'Configure the visual appearance of the button opening the overlay menu.'
|
|
694
|
-
) }
|
|
695
|
-
onChange={ ( value ) =>
|
|
696
|
-
setAttributes( { hasIcon: value } )
|
|
697
|
-
}
|
|
698
|
-
checked={ hasIcon }
|
|
699
|
-
/>
|
|
700
|
-
) }
|
|
701
|
-
<h3>{ __( 'Overlay Menu' ) }</h3>
|
|
702
|
-
<ToggleGroupControl
|
|
703
|
-
label={ __( 'Configure overlay menu' ) }
|
|
704
|
-
value={ overlayMenu }
|
|
705
|
-
help={ __(
|
|
706
|
-
'Collapses the navigation options in a menu icon opening an overlay.'
|
|
707
|
-
) }
|
|
708
|
-
onChange={ ( value ) =>
|
|
709
|
-
setAttributes( { overlayMenu: value } )
|
|
710
|
-
}
|
|
711
|
-
isBlock
|
|
712
|
-
hideLabelFromVision
|
|
713
|
-
>
|
|
714
|
-
<ToggleGroupControlOption
|
|
715
|
-
value="never"
|
|
716
|
-
label={ __( 'Off' ) }
|
|
717
|
-
/>
|
|
718
|
-
<ToggleGroupControlOption
|
|
719
|
-
value="mobile"
|
|
720
|
-
label={ __( 'Mobile' ) }
|
|
721
|
-
/>
|
|
722
|
-
<ToggleGroupControlOption
|
|
723
|
-
value="always"
|
|
724
|
-
label={ __( 'Always' ) }
|
|
725
|
-
/>
|
|
726
|
-
</ToggleGroupControl>
|
|
727
|
-
{ hasSubmenus && (
|
|
728
|
-
<>
|
|
729
|
-
<h3>{ __( 'Submenus' ) }</h3>
|
|
730
|
-
<ToggleControl
|
|
731
|
-
checked={ openSubmenusOnClick }
|
|
732
|
-
onChange={ ( value ) => {
|
|
733
|
-
setAttributes( {
|
|
734
|
-
openSubmenusOnClick: value,
|
|
735
|
-
...( value && {
|
|
736
|
-
showSubmenuIcon: true,
|
|
737
|
-
} ), // Make sure arrows are shown when we toggle this on.
|
|
738
|
-
} );
|
|
739
|
-
} }
|
|
740
|
-
label={ __( 'Open on click' ) }
|
|
741
|
-
/>
|
|
742
|
-
|
|
743
|
-
<ToggleControl
|
|
744
|
-
checked={ showSubmenuIcon }
|
|
745
|
-
onChange={ ( value ) => {
|
|
746
|
-
setAttributes( {
|
|
747
|
-
showSubmenuIcon: value,
|
|
748
|
-
} );
|
|
749
|
-
} }
|
|
750
|
-
disabled={
|
|
751
|
-
attributes.openSubmenusOnClick
|
|
752
|
-
}
|
|
753
|
-
label={ __( 'Show arrow' ) }
|
|
754
|
-
/>
|
|
755
|
-
</>
|
|
756
|
-
) }
|
|
757
|
-
</PanelBody>
|
|
758
|
-
) }
|
|
759
|
-
{ hasColorSettings && (
|
|
760
|
-
<PanelColorSettings
|
|
761
|
-
__experimentalHasMultipleOrigins
|
|
762
|
-
__experimentalIsRenderedInSidebar
|
|
763
|
-
title={ __( 'Color' ) }
|
|
764
|
-
initialOpen={ false }
|
|
765
|
-
colorSettings={ [
|
|
766
|
-
{
|
|
767
|
-
value: textColor.color,
|
|
768
|
-
onChange: setTextColor,
|
|
769
|
-
label: __( 'Text' ),
|
|
770
|
-
},
|
|
771
|
-
{
|
|
772
|
-
value: backgroundColor.color,
|
|
773
|
-
onChange: setBackgroundColor,
|
|
774
|
-
label: __( 'Background' ),
|
|
775
|
-
},
|
|
776
|
-
{
|
|
777
|
-
value: overlayTextColor.color,
|
|
778
|
-
onChange: setOverlayTextColor,
|
|
779
|
-
label: __( 'Submenu & overlay text' ),
|
|
780
|
-
},
|
|
781
|
-
{
|
|
782
|
-
value: overlayBackgroundColor.color,
|
|
783
|
-
onChange: setOverlayBackgroundColor,
|
|
784
|
-
label: __( 'Submenu & overlay background' ),
|
|
785
|
-
},
|
|
786
|
-
] }
|
|
787
|
-
>
|
|
788
|
-
{ enableContrastChecking && (
|
|
789
|
-
<>
|
|
790
|
-
<ContrastChecker
|
|
791
|
-
backgroundColor={
|
|
792
|
-
detectedBackgroundColor
|
|
793
|
-
}
|
|
794
|
-
textColor={ detectedColor }
|
|
795
|
-
/>
|
|
796
|
-
<ContrastChecker
|
|
797
|
-
backgroundColor={
|
|
798
|
-
detectedOverlayBackgroundColor
|
|
799
|
-
}
|
|
800
|
-
textColor={ detectedOverlayColor }
|
|
801
|
-
/>
|
|
802
|
-
</>
|
|
803
|
-
) }
|
|
804
|
-
</PanelColorSettings>
|
|
805
|
-
) }
|
|
806
|
-
</InspectorControls>
|
|
803
|
+
{ stylingInspectorControls }
|
|
807
804
|
{ isEntityAvailable && (
|
|
808
805
|
<InspectorControls __experimentalGroup="advanced">
|
|
809
806
|
{ hasResolvedCanUserUpdateNavigationMenu &&
|
|
@@ -299,6 +299,9 @@ button.wp-block-navigation-item__content {
|
|
|
299
299
|
font-size: inherit;
|
|
300
300
|
font-family: inherit;
|
|
301
301
|
line-height: inherit;
|
|
302
|
+
font-style: inherit;
|
|
303
|
+
font-weight: inherit;
|
|
304
|
+
text-transform: inherit;
|
|
302
305
|
|
|
303
306
|
// Buttons default to center alignment. This becomes visible
|
|
304
307
|
// when a menu item label is long enough to wrap.
|
|
@@ -16,11 +16,14 @@ import {
|
|
|
16
16
|
import { __, sprintf } from '@wordpress/i18n';
|
|
17
17
|
import { useSelect } from '@wordpress/data';
|
|
18
18
|
import { useEntityProp, store as coreStore } from '@wordpress/core-data';
|
|
19
|
-
|
|
20
|
-
__experimentalUseDisabled as useDisabled,
|
|
21
|
-
useInstanceId,
|
|
22
|
-
} from '@wordpress/compose';
|
|
19
|
+
|
|
23
20
|
import { createInterpolateElement } from '@wordpress/element';
|
|
21
|
+
import { __experimentalUseDisabled as useDisabled } from '@wordpress/compose';
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Internal dependencies
|
|
25
|
+
*/
|
|
26
|
+
import CommentsForm from '../post-comments-form/form';
|
|
24
27
|
|
|
25
28
|
export default function PostCommentsEdit( {
|
|
26
29
|
attributes: { textAlign },
|
|
@@ -54,7 +57,7 @@ export default function PostCommentsEdit( {
|
|
|
54
57
|
let warning = __(
|
|
55
58
|
'Post Comments block: This is just a placeholder, not a real comment. The final styling may differ because it also depends on the current theme. For better compatibility with the Block Editor, please consider replacing this block with the "Comments Query Loop" block.'
|
|
56
59
|
);
|
|
57
|
-
let
|
|
60
|
+
let showPlaceholder = true;
|
|
58
61
|
|
|
59
62
|
if ( ! isSiteEditor && 'open' !== commentStatus ) {
|
|
60
63
|
if ( 'closed' === commentStatus ) {
|
|
@@ -65,7 +68,7 @@ export default function PostCommentsEdit( {
|
|
|
65
68
|
),
|
|
66
69
|
postType
|
|
67
70
|
);
|
|
68
|
-
|
|
71
|
+
showPlaceholder = false;
|
|
69
72
|
} else if ( ! postTypeSupportsComments ) {
|
|
70
73
|
warning = sprintf(
|
|
71
74
|
/* translators: 1: Post type (i.e. "post", "page") */
|
|
@@ -74,10 +77,10 @@ export default function PostCommentsEdit( {
|
|
|
74
77
|
),
|
|
75
78
|
postType
|
|
76
79
|
);
|
|
77
|
-
|
|
80
|
+
showPlaceholder = false;
|
|
78
81
|
} else if ( 'open' !== defaultCommentStatus ) {
|
|
79
82
|
warning = __( 'Post Comments block: Comments are not enabled.' );
|
|
80
|
-
|
|
83
|
+
showPlaceholder = false;
|
|
81
84
|
}
|
|
82
85
|
}
|
|
83
86
|
|
|
@@ -89,8 +92,6 @@ export default function PostCommentsEdit( {
|
|
|
89
92
|
|
|
90
93
|
const disabledRef = useDisabled();
|
|
91
94
|
|
|
92
|
-
const textareaId = useInstanceId( PostCommentsEdit );
|
|
93
|
-
|
|
94
95
|
return (
|
|
95
96
|
<>
|
|
96
97
|
<BlockControls group="block">
|
|
@@ -105,7 +106,7 @@ export default function PostCommentsEdit( {
|
|
|
105
106
|
<div { ...blockProps }>
|
|
106
107
|
<Warning>{ warning }</Warning>
|
|
107
108
|
|
|
108
|
-
{
|
|
109
|
+
{ showPlaceholder && (
|
|
109
110
|
<div
|
|
110
111
|
className="wp-block-post-comments__placeholder"
|
|
111
112
|
ref={ disabledRef }
|
|
@@ -238,37 +239,7 @@ export default function PostCommentsEdit( {
|
|
|
238
239
|
</div>
|
|
239
240
|
</div>
|
|
240
241
|
|
|
241
|
-
<
|
|
242
|
-
<h3 className="comment-reply-title">
|
|
243
|
-
{ __( 'Leave a Reply' ) }
|
|
244
|
-
</h3>
|
|
245
|
-
|
|
246
|
-
<form className="comment-form" noValidate>
|
|
247
|
-
<p className="comment-form-comment">
|
|
248
|
-
<label
|
|
249
|
-
htmlFor={ `comment-${ textareaId }` }
|
|
250
|
-
>
|
|
251
|
-
{ __( 'Comment' ) }{ ' ' }
|
|
252
|
-
<span className="required">*</span>
|
|
253
|
-
</label>
|
|
254
|
-
<textarea
|
|
255
|
-
id={ `comment-${ textareaId }` }
|
|
256
|
-
name="comment"
|
|
257
|
-
cols="45"
|
|
258
|
-
rows="8"
|
|
259
|
-
required
|
|
260
|
-
/>
|
|
261
|
-
</p>
|
|
262
|
-
<p className="form-submit wp-block-button">
|
|
263
|
-
<input
|
|
264
|
-
name="submit"
|
|
265
|
-
type="submit"
|
|
266
|
-
className="submit wp-block-button__link"
|
|
267
|
-
value={ __( 'Post Comment' ) }
|
|
268
|
-
/>
|
|
269
|
-
</p>
|
|
270
|
-
</form>
|
|
271
|
-
</div>
|
|
242
|
+
<CommentsForm />
|
|
272
243
|
</div>
|
|
273
244
|
) }
|
|
274
245
|
</div>
|
|
@@ -11,13 +11,17 @@ import {
|
|
|
11
11
|
BlockControls,
|
|
12
12
|
Warning,
|
|
13
13
|
useBlockProps,
|
|
14
|
+
store as blockEditorStore,
|
|
14
15
|
} from '@wordpress/block-editor';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
import { Button } from '@wordpress/components';
|
|
17
|
+
import { useEntityProp, store as coreStore } from '@wordpress/core-data';
|
|
18
|
+
import { __, _x, sprintf } from '@wordpress/i18n';
|
|
19
|
+
import { useSelect } from '@wordpress/data';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Internal dependencies
|
|
23
|
+
*/
|
|
24
|
+
import CommentsForm from './form';
|
|
21
25
|
|
|
22
26
|
export default function PostCommentsFormEdit( {
|
|
23
27
|
attributes,
|
|
@@ -26,7 +30,7 @@ export default function PostCommentsFormEdit( {
|
|
|
26
30
|
} ) {
|
|
27
31
|
const { textAlign } = attributes;
|
|
28
32
|
const { postId, postType } = context;
|
|
29
|
-
const [ commentStatus ] = useEntityProp(
|
|
33
|
+
const [ commentStatus, setCommentStatus ] = useEntityProp(
|
|
30
34
|
'postType',
|
|
31
35
|
postType,
|
|
32
36
|
'comment_status',
|
|
@@ -38,11 +42,59 @@ export default function PostCommentsFormEdit( {
|
|
|
38
42
|
} ),
|
|
39
43
|
} );
|
|
40
44
|
|
|
41
|
-
const
|
|
45
|
+
const isSiteEditor = postType === undefined || postId === undefined;
|
|
46
|
+
|
|
47
|
+
const { defaultCommentStatus } = useSelect(
|
|
48
|
+
( select ) =>
|
|
49
|
+
select( blockEditorStore ).getSettings()
|
|
50
|
+
.__experimentalDiscussionSettings
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
const postTypeSupportsComments = useSelect( ( select ) =>
|
|
54
|
+
postType
|
|
55
|
+
? !! select( coreStore ).getPostType( postType )?.supports.comments
|
|
56
|
+
: false
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
let warning = false;
|
|
60
|
+
let actions;
|
|
61
|
+
let showPlaceholder = true;
|
|
42
62
|
|
|
43
|
-
|
|
63
|
+
if ( ! isSiteEditor && 'open' !== commentStatus ) {
|
|
64
|
+
if ( 'closed' === commentStatus ) {
|
|
65
|
+
warning = __(
|
|
66
|
+
'Post Comments Form block: Comments are not enabled for this item.'
|
|
67
|
+
);
|
|
44
68
|
|
|
45
|
-
|
|
69
|
+
actions = [
|
|
70
|
+
<Button
|
|
71
|
+
key="enableComments"
|
|
72
|
+
onClick={ () => setCommentStatus( 'open' ) }
|
|
73
|
+
variant="primary"
|
|
74
|
+
>
|
|
75
|
+
{ _x(
|
|
76
|
+
'Enable comments',
|
|
77
|
+
'action that affects the current post'
|
|
78
|
+
) }
|
|
79
|
+
</Button>,
|
|
80
|
+
];
|
|
81
|
+
showPlaceholder = false;
|
|
82
|
+
} else if ( ! postTypeSupportsComments ) {
|
|
83
|
+
warning = sprintf(
|
|
84
|
+
/* translators: 1: Post type (i.e. "post", "page") */
|
|
85
|
+
__(
|
|
86
|
+
'Post Comments Form block: Comments are not enabled for this post type (%s).'
|
|
87
|
+
),
|
|
88
|
+
postType
|
|
89
|
+
);
|
|
90
|
+
showPlaceholder = false;
|
|
91
|
+
} else if ( 'open' !== defaultCommentStatus ) {
|
|
92
|
+
warning = __(
|
|
93
|
+
'Post Comments Form block: Comments are not enabled.'
|
|
94
|
+
);
|
|
95
|
+
showPlaceholder = false;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
46
98
|
|
|
47
99
|
return (
|
|
48
100
|
<>
|
|
@@ -55,57 +107,11 @@ export default function PostCommentsFormEdit( {
|
|
|
55
107
|
/>
|
|
56
108
|
</BlockControls>
|
|
57
109
|
<div { ...blockProps }>
|
|
58
|
-
{
|
|
59
|
-
<Warning>
|
|
60
|
-
{ __(
|
|
61
|
-
'Post Comments Form block: comments are not enabled for this post type.'
|
|
62
|
-
) }
|
|
63
|
-
</Warning>
|
|
110
|
+
{ warning && (
|
|
111
|
+
<Warning actions={ actions }>{ warning }</Warning>
|
|
64
112
|
) }
|
|
65
113
|
|
|
66
|
-
{
|
|
67
|
-
<Warning>
|
|
68
|
-
{ sprintf(
|
|
69
|
-
/* translators: 1: Post type (i.e. "post", "page") */
|
|
70
|
-
__(
|
|
71
|
-
'Post Comments Form block: comments to this %s are not allowed.'
|
|
72
|
-
),
|
|
73
|
-
postType
|
|
74
|
-
) }
|
|
75
|
-
</Warning>
|
|
76
|
-
) }
|
|
77
|
-
|
|
78
|
-
{ ( 'open' === commentStatus || isInSiteEditor ) && (
|
|
79
|
-
<div>
|
|
80
|
-
<h3>{ __( 'Leave a Reply' ) }</h3>
|
|
81
|
-
<form
|
|
82
|
-
noValidate
|
|
83
|
-
className="comment-form"
|
|
84
|
-
ref={ disabledFormRef }
|
|
85
|
-
>
|
|
86
|
-
<p>
|
|
87
|
-
<label htmlFor={ `comment-${ instanceId }` }>
|
|
88
|
-
{ __( 'Comment' ) }
|
|
89
|
-
</label>
|
|
90
|
-
<textarea
|
|
91
|
-
id={ `comment-${ instanceId }` }
|
|
92
|
-
name="comment"
|
|
93
|
-
cols="45"
|
|
94
|
-
rows="8"
|
|
95
|
-
/>
|
|
96
|
-
</p>
|
|
97
|
-
<p>
|
|
98
|
-
<input
|
|
99
|
-
name="submit"
|
|
100
|
-
className="submit wp-block-button__link"
|
|
101
|
-
label={ __( 'Post Comment' ) }
|
|
102
|
-
value={ __( 'Post Comment' ) }
|
|
103
|
-
readOnly
|
|
104
|
-
/>
|
|
105
|
-
</p>
|
|
106
|
-
</form>
|
|
107
|
-
</div>
|
|
108
|
-
) }
|
|
114
|
+
{ showPlaceholder ? <CommentsForm /> : null }
|
|
109
115
|
</div>
|
|
110
116
|
</>
|
|
111
117
|
);
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __ } from '@wordpress/i18n';
|
|
5
|
+
import {
|
|
6
|
+
__experimentalUseDisabled as useDisabled,
|
|
7
|
+
useInstanceId,
|
|
8
|
+
} from '@wordpress/compose';
|
|
9
|
+
|
|
10
|
+
const CommentsForm = () => {
|
|
11
|
+
const disabledFormRef = useDisabled();
|
|
12
|
+
const instanceId = useInstanceId( CommentsForm );
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<div className="comment-respond">
|
|
16
|
+
<h3 className="comment-reply-title">{ __( 'Leave a Reply' ) }</h3>
|
|
17
|
+
<form noValidate className="comment-form" ref={ disabledFormRef }>
|
|
18
|
+
<p>
|
|
19
|
+
<label htmlFor={ `comment-${ instanceId }` }>
|
|
20
|
+
{ __( 'Comment' ) }
|
|
21
|
+
</label>
|
|
22
|
+
<textarea
|
|
23
|
+
id={ `comment-${ instanceId }` }
|
|
24
|
+
name="comment"
|
|
25
|
+
cols="45"
|
|
26
|
+
rows="8"
|
|
27
|
+
/>
|
|
28
|
+
</p>
|
|
29
|
+
<p className="form-submit wp-block-button">
|
|
30
|
+
<input
|
|
31
|
+
name="submit"
|
|
32
|
+
type="submit"
|
|
33
|
+
className="submit wp-block-button__link"
|
|
34
|
+
label={ __( 'Post Comment' ) }
|
|
35
|
+
value={ __( 'Post Comment' ) }
|
|
36
|
+
/>
|
|
37
|
+
</p>
|
|
38
|
+
</form>
|
|
39
|
+
</div>
|
|
40
|
+
);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export default CommentsForm;
|
|
@@ -82,17 +82,29 @@ function render_block_core_post_template( $attributes, $content, $block ) {
|
|
|
82
82
|
$content = '';
|
|
83
83
|
while ( $query->have_posts() ) {
|
|
84
84
|
$query->the_post();
|
|
85
|
+
|
|
86
|
+
// Get an instance of the current Post Template block.
|
|
87
|
+
$block_instance = $block->parsed_block;
|
|
88
|
+
|
|
89
|
+
// Set the block name to one that does not correspond to an existing registered block.
|
|
90
|
+
// This ensures that for the inner instances of the Post Template block, we do not render any block supports.
|
|
91
|
+
$block_instance['blockName'] = 'core/null';
|
|
92
|
+
|
|
93
|
+
// Render the inner blocks of the Post Template block with `dynamic` set to `false` to prevent calling
|
|
94
|
+
// `render_callback` and ensure that no wrapper markup is included.
|
|
85
95
|
$block_content = (
|
|
86
96
|
new WP_Block(
|
|
87
|
-
$
|
|
97
|
+
$block_instance,
|
|
88
98
|
array(
|
|
89
99
|
'postType' => get_post_type(),
|
|
90
100
|
'postId' => get_the_ID(),
|
|
91
101
|
)
|
|
92
102
|
)
|
|
93
103
|
)->render( array( 'dynamic' => false ) );
|
|
94
|
-
|
|
95
|
-
|
|
104
|
+
|
|
105
|
+
// Wrap the render inner blocks in a `li` element with the appropriate post classes.
|
|
106
|
+
$post_classes = implode( ' ', get_post_class( 'wp-block-post' ) );
|
|
107
|
+
$content .= '<li class="' . esc_attr( $post_classes ) . '">' . $block_content . '</li>';
|
|
96
108
|
}
|
|
97
109
|
|
|
98
110
|
wp_reset_postdata();
|