@wordpress/block-library 9.35.1-next.dc3f6d3c1.0 → 9.36.1-next.6deb34194.0
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/CHANGELOG.md +2 -0
- package/build/accordion/view.js +46 -4
- package/build/accordion/view.js.map +2 -2
- package/build/accordion-heading/block.json +1 -1
- package/build/accordion-heading/deprecated.js +1 -1
- package/build/accordion-heading/deprecated.js.map +2 -2
- package/build/accordion-panel/block.json +1 -1
- package/build/audio/index.js +13 -10
- package/build/audio/index.js.map +3 -3
- package/build/avatar/edit.js +13 -38
- package/build/avatar/edit.js.map +2 -2
- package/build/breadcrumbs/block.json +3 -2
- package/build/breadcrumbs/edit.js +18 -18
- package/build/breadcrumbs/edit.js.map +2 -2
- package/build/button/index.js +14 -11
- package/build/button/index.js.map +3 -3
- package/build/code/index.js +10 -7
- package/build/code/index.js.map +3 -3
- package/build/comments-pagination-numbers/block.json +7 -0
- package/build/cover/edit/block-controls.js +37 -3
- package/build/cover/edit/block-controls.js.map +3 -3
- package/build/cover/edit/cover-placeholder.js +0 -1
- package/build/cover/edit/cover-placeholder.js.map +2 -2
- package/build/cover/edit/embed-video-url-input.js +83 -0
- package/build/cover/edit/embed-video-url-input.js.map +7 -0
- package/build/cover/edit/index.js +60 -0
- package/build/cover/edit/index.js.map +2 -2
- package/build/cover/embed-video-utils.js +151 -0
- package/build/cover/embed-video-utils.js.map +7 -0
- package/build/cover/index.js +11 -5
- package/build/cover/index.js.map +3 -3
- package/build/cover/save.js +12 -0
- package/build/cover/save.js.map +2 -2
- package/build/cover/shared.js +3 -0
- package/build/cover/shared.js.map +2 -2
- package/build/details/index.js +10 -7
- package/build/details/index.js.map +3 -3
- package/build/file/index.js +15 -15
- package/build/file/index.js.map +3 -3
- package/build/freeform/block.json +1 -1
- package/build/gallery/edit.js +1 -3
- package/build/gallery/edit.js.map +2 -2
- package/build/gallery/transforms.js +7 -3
- package/build/gallery/transforms.js.map +2 -2
- package/build/heading/index.js +10 -7
- package/build/heading/index.js.map +3 -3
- package/build/html/modal.js +141 -121
- package/build/html/modal.js.map +3 -3
- package/build/image/edit.js +0 -1
- package/build/image/edit.js.map +2 -2
- package/build/image/image.js +0 -1
- package/build/image/image.js.map +2 -2
- package/build/image/index.js +19 -19
- package/build/image/index.js.map +3 -3
- package/build/index.js +9 -3
- package/build/index.js.map +2 -2
- package/build/list-item/index.js +9 -7
- package/build/list-item/index.js.map +3 -3
- package/build/math/block.json +28 -1
- package/build/math/edit.js +17 -2
- package/build/math/edit.js.map +2 -2
- package/build/media-text/index.js +16 -9
- package/build/media-text/index.js.map +3 -3
- package/build/media-text/media-container.js +0 -2
- package/build/media-text/media-container.js.map +2 -2
- package/build/missing/block.json +1 -1
- package/build/missing/edit.js +2 -2
- package/build/missing/edit.js.map +1 -1
- package/build/more/index.js +10 -7
- package/build/more/index.js.map +3 -3
- package/build/navigation-link/edit.js +36 -11
- package/build/navigation-link/edit.js.map +2 -2
- package/build/navigation-link/index.js +12 -9
- package/build/navigation-link/index.js.map +3 -3
- package/build/navigation-submenu/index.js +12 -9
- package/build/navigation-submenu/index.js.map +3 -3
- package/build/page-list-item/edit.js +4 -3
- package/build/page-list-item/edit.js.map +2 -2
- package/build/paragraph/deprecated-attributes.js +68 -0
- package/build/paragraph/deprecated-attributes.js.map +7 -0
- package/build/paragraph/edit.js +2 -0
- package/build/paragraph/edit.js.map +3 -3
- package/build/paragraph/index.js +10 -7
- package/build/paragraph/index.js.map +3 -3
- package/build/pattern/block.json +1 -1
- package/build/post-title/edit.js +6 -4
- package/build/post-title/edit.js.map +2 -2
- package/build/preformatted/index.js +10 -7
- package/build/preformatted/index.js.map +3 -3
- package/build/pullquote/index.js +12 -12
- package/build/pullquote/index.js.map +3 -3
- package/build/search/index.js +15 -17
- package/build/search/index.js.map +3 -3
- package/build/social-link/index.js +12 -9
- package/build/social-link/index.js.map +3 -3
- package/build/template-part/edit/index.js +37 -7
- package/build/template-part/edit/index.js.map +2 -2
- package/build/template-part/edit/utils/get-template-part-icon.js +9 -4
- package/build/template-part/edit/utils/get-template-part-icon.js.map +3 -3
- package/build/template-part/edit/utils/hooks.js +2 -3
- package/build/template-part/edit/utils/hooks.js.map +2 -2
- package/build/term-count/index.js +1 -0
- package/build/term-count/index.js.map +2 -2
- package/build/term-name/index.js +1 -0
- package/build/term-name/index.js.map +2 -2
- package/build/verse/index.js +10 -7
- package/build/verse/index.js.map +3 -3
- package/build/video/index.js +13 -10
- package/build/video/index.js.map +3 -3
- package/build-module/accordion/view.js +46 -4
- package/build-module/accordion/view.js.map +2 -2
- package/build-module/accordion-heading/block.json +1 -1
- package/build-module/accordion-heading/deprecated.js +1 -1
- package/build-module/accordion-heading/deprecated.js.map +2 -2
- package/build-module/accordion-panel/block.json +1 -1
- package/build-module/audio/index.js +13 -10
- package/build-module/audio/index.js.map +2 -2
- package/build-module/avatar/edit.js +13 -38
- package/build-module/avatar/edit.js.map +2 -2
- package/build-module/breadcrumbs/block.json +3 -2
- package/build-module/breadcrumbs/edit.js +18 -18
- package/build-module/breadcrumbs/edit.js.map +2 -2
- package/build-module/button/index.js +14 -11
- package/build-module/button/index.js.map +2 -2
- package/build-module/code/index.js +10 -7
- package/build-module/code/index.js.map +2 -2
- package/build-module/comments-pagination-numbers/block.json +7 -0
- package/build-module/cover/edit/block-controls.js +27 -3
- package/build-module/cover/edit/block-controls.js.map +2 -2
- package/build-module/cover/edit/cover-placeholder.js +0 -1
- package/build-module/cover/edit/cover-placeholder.js.map +2 -2
- package/build-module/cover/edit/embed-video-url-input.js +67 -0
- package/build-module/cover/edit/embed-video-url-input.js.map +7 -0
- package/build-module/cover/edit/index.js +61 -0
- package/build-module/cover/edit/index.js.map +2 -2
- package/build-module/cover/embed-video-utils.js +122 -0
- package/build-module/cover/embed-video-utils.js.map +7 -0
- package/build-module/cover/index.js +11 -5
- package/build-module/cover/index.js.map +2 -2
- package/build-module/cover/save.js +13 -0
- package/build-module/cover/save.js.map +2 -2
- package/build-module/cover/shared.js +2 -0
- package/build-module/cover/shared.js.map +2 -2
- package/build-module/details/index.js +10 -7
- package/build-module/details/index.js.map +2 -2
- package/build-module/file/index.js +15 -15
- package/build-module/file/index.js.map +2 -2
- package/build-module/freeform/block.json +1 -1
- package/build-module/gallery/edit.js +1 -3
- package/build-module/gallery/edit.js.map +2 -2
- package/build-module/gallery/transforms.js +7 -3
- package/build-module/gallery/transforms.js.map +2 -2
- package/build-module/heading/index.js +10 -7
- package/build-module/heading/index.js.map +2 -2
- package/build-module/html/modal.js +143 -122
- package/build-module/html/modal.js.map +2 -2
- package/build-module/image/edit.js +0 -1
- package/build-module/image/edit.js.map +2 -2
- package/build-module/image/image.js +0 -1
- package/build-module/image/image.js.map +2 -2
- package/build-module/image/index.js +19 -19
- package/build-module/image/index.js.map +2 -2
- package/build-module/index.js +9 -3
- package/build-module/index.js.map +2 -2
- package/build-module/list-item/index.js +9 -7
- package/build-module/list-item/index.js.map +2 -2
- package/build-module/math/block.json +28 -1
- package/build-module/math/edit.js +18 -3
- package/build-module/math/edit.js.map +2 -2
- package/build-module/media-text/index.js +16 -9
- package/build-module/media-text/index.js.map +2 -2
- package/build-module/media-text/media-container.js +0 -2
- package/build-module/media-text/media-container.js.map +2 -2
- package/build-module/missing/block.json +1 -1
- package/build-module/missing/edit.js +2 -2
- package/build-module/missing/edit.js.map +1 -1
- package/build-module/more/index.js +10 -7
- package/build-module/more/index.js.map +2 -2
- package/build-module/navigation-link/edit.js +37 -12
- package/build-module/navigation-link/edit.js.map +2 -2
- package/build-module/navigation-link/index.js +12 -9
- package/build-module/navigation-link/index.js.map +2 -2
- package/build-module/navigation-submenu/index.js +12 -9
- package/build-module/navigation-submenu/index.js.map +2 -2
- package/build-module/page-list-item/edit.js +4 -3
- package/build-module/page-list-item/edit.js.map +2 -2
- package/build-module/paragraph/deprecated-attributes.js +37 -0
- package/build-module/paragraph/deprecated-attributes.js.map +7 -0
- package/build-module/paragraph/edit.js +2 -0
- package/build-module/paragraph/edit.js.map +2 -2
- package/build-module/paragraph/index.js +10 -7
- package/build-module/paragraph/index.js.map +2 -2
- package/build-module/pattern/block.json +1 -1
- package/build-module/post-title/edit.js +6 -4
- package/build-module/post-title/edit.js.map +2 -2
- package/build-module/preformatted/index.js +10 -7
- package/build-module/preformatted/index.js.map +2 -2
- package/build-module/pullquote/index.js +12 -12
- package/build-module/pullquote/index.js.map +2 -2
- package/build-module/search/index.js +15 -17
- package/build-module/search/index.js.map +2 -2
- package/build-module/social-link/index.js +12 -9
- package/build-module/social-link/index.js.map +2 -2
- package/build-module/template-part/edit/index.js +37 -7
- package/build-module/template-part/edit/index.js.map +2 -2
- package/build-module/template-part/edit/utils/get-template-part-icon.js +10 -4
- package/build-module/template-part/edit/utils/get-template-part-icon.js.map +2 -2
- package/build-module/template-part/edit/utils/hooks.js +2 -3
- package/build-module/template-part/edit/utils/hooks.js.map +2 -2
- package/build-module/term-count/index.js +1 -0
- package/build-module/term-count/index.js.map +2 -2
- package/build-module/term-name/index.js +1 -0
- package/build-module/term-name/index.js.map +2 -2
- package/build-module/verse/index.js +10 -7
- package/build-module/verse/index.js.map +2 -2
- package/build-module/video/index.js +13 -10
- package/build-module/video/index.js.map +2 -2
- package/build-style/accordion/style-rtl.css +3 -0
- package/build-style/accordion/style.css +3 -0
- package/build-style/accordion-heading/style-rtl.css +2 -19
- package/build-style/accordion-heading/style.css +2 -19
- package/build-style/accordion-item/style-rtl.css +0 -7
- package/build-style/accordion-item/style.css +0 -7
- package/build-style/accordion-panel/style-rtl.css +1 -4
- package/build-style/accordion-panel/style.css +1 -4
- package/build-style/classic-rtl.css +24 -0
- package/build-style/classic.css +24 -0
- package/build-style/common-rtl.css +4 -4
- package/build-style/common.css +4 -0
- package/build-style/cover/style-rtl.css +47 -0
- package/build-style/cover/style.css +47 -0
- package/build-style/editor-rtl.css +11 -13
- package/build-style/editor.css +11 -13
- package/build-style/html/editor-rtl.css +11 -13
- package/build-style/html/editor.css +11 -13
- package/build-style/style-rtl.css +59 -33
- package/build-style/style.css +59 -29
- package/build-style/verse/style-rtl.css +2 -0
- package/build-style/verse/style.css +2 -0
- package/package.json +40 -38
- package/src/accordion/style.scss +4 -0
- package/src/accordion/view.js +60 -3
- package/src/accordion-heading/block.json +1 -1
- package/src/accordion-heading/deprecated.js +1 -1
- package/src/accordion-heading/style.scss +2 -38
- package/src/accordion-item/index.php +1 -0
- package/src/accordion-item/style.scss +2 -9
- package/src/accordion-panel/block.json +1 -1
- package/src/accordion-panel/style.scss +1 -5
- package/src/audio/index.js +14 -10
- package/src/avatar/edit.js +68 -83
- package/src/breadcrumbs/block.json +3 -2
- package/src/breadcrumbs/edit.js +18 -18
- package/src/breadcrumbs/index.php +103 -93
- package/src/button/index.js +15 -11
- package/src/classic.scss +38 -0
- package/src/code/index.js +11 -7
- package/src/comments-pagination-numbers/block.json +7 -0
- package/src/common.scss +4 -0
- package/src/cover/edit/block-controls.js +26 -2
- package/src/cover/edit/cover-placeholder.js +0 -1
- package/src/cover/edit/embed-video-url-input.js +74 -0
- package/src/cover/edit/index.js +81 -0
- package/src/cover/embed-video-utils.js +196 -0
- package/src/cover/index.js +12 -5
- package/src/cover/index.php +106 -0
- package/src/cover/save.js +14 -0
- package/src/cover/shared.js +1 -0
- package/src/cover/style.scss +47 -0
- package/src/details/index.js +11 -7
- package/src/file/index.js +16 -15
- package/src/freeform/block.json +1 -1
- package/src/gallery/edit.js +4 -3
- package/src/gallery/transforms.js +6 -2
- package/src/heading/index.js +11 -7
- package/src/html/editor.scss +10 -15
- package/src/html/modal.js +54 -30
- package/src/image/edit.js +0 -1
- package/src/image/image.js +0 -1
- package/src/image/index.js +20 -19
- package/src/image/index.php +1 -0
- package/src/index.js +9 -3
- package/src/list-item/index.js +10 -7
- package/src/math/block.json +28 -1
- package/src/math/edit.js +18 -3
- package/src/media-text/index.js +17 -9
- package/src/media-text/media-container.js +0 -2
- package/src/missing/block.json +1 -1
- package/src/missing/edit.js +2 -2
- package/src/more/index.js +11 -7
- package/src/navigation-link/edit.js +72 -26
- package/src/navigation-link/index.js +13 -9
- package/src/navigation-submenu/index.js +13 -9
- package/src/page-list/index.php +3 -4
- package/src/page-list-item/edit.js +4 -3
- package/src/paragraph/deprecated-attributes.js +45 -0
- package/src/paragraph/edit.js +2 -0
- package/src/paragraph/index.js +11 -7
- package/src/pattern/block.json +1 -1
- package/src/post-title/edit.js +8 -4
- package/src/post-title/index.php +1 -1
- package/src/preformatted/index.js +11 -7
- package/src/pullquote/index.js +13 -12
- package/src/search/index.js +15 -16
- package/src/social-link/index.js +13 -9
- package/src/style.scss +1 -0
- package/src/template-part/edit/index.js +44 -6
- package/src/template-part/edit/utils/get-template-part-icon.js +23 -4
- package/src/template-part/edit/utils/hooks.js +2 -4
- package/src/term-count/index.js +1 -0
- package/src/term-name/index.js +1 -0
- package/src/verse/index.js +11 -7
- package/src/verse/style.scss +4 -0
- package/src/video/index.js +14 -10
- package/tsconfig.tsbuildinfo +1 -1
package/src/media-text/index.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { __ } from '@wordpress/i18n';
|
|
5
5
|
import { mediaAndText as icon } from '@wordpress/icons';
|
|
6
|
+
import { privateApis as blocksPrivateApis } from '@wordpress/blocks';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Internal dependencies
|
|
@@ -13,6 +14,9 @@ import edit from './edit';
|
|
|
13
14
|
import metadata from './block.json';
|
|
14
15
|
import save from './save';
|
|
15
16
|
import transforms from './transforms';
|
|
17
|
+
import { unlock } from '../lock-unlock';
|
|
18
|
+
|
|
19
|
+
const { fieldsKey, formKey } = unlock( blocksPrivateApis );
|
|
16
20
|
|
|
17
21
|
const { name } = metadata;
|
|
18
22
|
|
|
@@ -50,16 +54,17 @@ export const settings = {
|
|
|
50
54
|
deprecated,
|
|
51
55
|
};
|
|
52
56
|
|
|
53
|
-
if ( window.
|
|
54
|
-
settings
|
|
57
|
+
if ( window.__experimentalContentOnlyInspectorFields ) {
|
|
58
|
+
settings[ fieldsKey ] = [
|
|
55
59
|
{
|
|
60
|
+
id: 'media',
|
|
56
61
|
label: __( 'Media' ),
|
|
57
|
-
type: '
|
|
58
|
-
shownByDefault: true,
|
|
62
|
+
type: 'media',
|
|
59
63
|
mapping: {
|
|
60
64
|
id: 'mediaId',
|
|
61
65
|
type: 'mediaType',
|
|
62
|
-
|
|
66
|
+
url: 'mediaUrl',
|
|
67
|
+
link: 'mediaLink',
|
|
63
68
|
},
|
|
64
69
|
args: {
|
|
65
70
|
allowedTypes: [ 'image', 'video' ],
|
|
@@ -67,16 +72,19 @@ if ( window.__experimentalContentOnlyPatternInsertion ) {
|
|
|
67
72
|
},
|
|
68
73
|
},
|
|
69
74
|
{
|
|
75
|
+
id: 'link',
|
|
70
76
|
label: __( 'Link' ),
|
|
71
|
-
type: '
|
|
72
|
-
shownByDefault: false,
|
|
77
|
+
type: 'link',
|
|
73
78
|
mapping: {
|
|
74
|
-
|
|
79
|
+
url: 'href',
|
|
75
80
|
rel: 'rel',
|
|
76
|
-
|
|
81
|
+
linkTarget: 'linkTarget',
|
|
77
82
|
},
|
|
78
83
|
},
|
|
79
84
|
];
|
|
85
|
+
settings[ formKey ] = {
|
|
86
|
+
fields: [ 'media' ],
|
|
87
|
+
};
|
|
80
88
|
}
|
|
81
89
|
|
|
82
90
|
export const init = () => initBlock( { name, metadata, settings } );
|
|
@@ -61,7 +61,6 @@ function ToolbarEditButton( {
|
|
|
61
61
|
mediaId={ mediaId }
|
|
62
62
|
mediaURL={ mediaUrl }
|
|
63
63
|
allowedTypes={ ALLOWED_MEDIA_TYPES }
|
|
64
|
-
accept="image/*,video/*"
|
|
65
64
|
onSelect={ onSelectMedia }
|
|
66
65
|
onToggleFeaturedImage={ toggleUseFeaturedImage }
|
|
67
66
|
useFeaturedImage={ useFeaturedImage }
|
|
@@ -91,7 +90,6 @@ function PlaceholderContainer( {
|
|
|
91
90
|
} }
|
|
92
91
|
className={ className }
|
|
93
92
|
onSelect={ onSelectMedia }
|
|
94
|
-
accept="image/*,video/*"
|
|
95
93
|
onToggleFeaturedImage={ toggleUseFeaturedImage }
|
|
96
94
|
allowedTypes={ ALLOWED_MEDIA_TYPES }
|
|
97
95
|
onError={ onUploadError }
|
package/src/missing/block.json
CHANGED
package/src/missing/edit.js
CHANGED
|
@@ -66,12 +66,12 @@ export default function MissingEdit( { attributes, clientId } ) {
|
|
|
66
66
|
) {
|
|
67
67
|
if ( hasHTMLBlock ) {
|
|
68
68
|
messageHTML = __(
|
|
69
|
-
'It appears you are trying to use the deprecated Classic block. You can leave this block intact, convert its content to a Custom HTML block, or remove it entirely. Alternatively, you can
|
|
69
|
+
'It appears you are trying to use the deprecated Classic block. You can leave this block intact, convert its content to a Custom HTML block, or remove it entirely. Alternatively, if you have unsaved changes, you can save them and refresh to use the Classic block.'
|
|
70
70
|
);
|
|
71
71
|
actions.push( convertToHtmlButton );
|
|
72
72
|
} else {
|
|
73
73
|
messageHTML = __(
|
|
74
|
-
'It appears you are trying to use the deprecated Classic block. You can leave this block intact, or remove it entirely. Alternatively, you can
|
|
74
|
+
'It appears you are trying to use the deprecated Classic block. You can leave this block intact, or remove it entirely. Alternatively, if you have unsaved changes, you can save them and refresh to use the Classic block.'
|
|
75
75
|
);
|
|
76
76
|
}
|
|
77
77
|
} else if ( hasContent && hasHTMLBlock ) {
|
package/src/more/index.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { more as icon } from '@wordpress/icons';
|
|
5
5
|
import { __ } from '@wordpress/i18n';
|
|
6
|
+
import { privateApis as blocksPrivateApis } from '@wordpress/blocks';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Internal dependencies
|
|
@@ -12,6 +13,9 @@ import edit from './edit';
|
|
|
12
13
|
import metadata from './block.json';
|
|
13
14
|
import save from './save';
|
|
14
15
|
import transforms from './transforms';
|
|
16
|
+
import { unlock } from '../lock-unlock';
|
|
17
|
+
|
|
18
|
+
const { fieldsKey, formKey } = unlock( blocksPrivateApis );
|
|
15
19
|
|
|
16
20
|
const { name } = metadata;
|
|
17
21
|
|
|
@@ -36,17 +40,17 @@ export const settings = {
|
|
|
36
40
|
save,
|
|
37
41
|
};
|
|
38
42
|
|
|
39
|
-
if ( window.
|
|
40
|
-
settings
|
|
43
|
+
if ( window.__experimentalContentOnlyInspectorFields ) {
|
|
44
|
+
settings[ fieldsKey ] = [
|
|
41
45
|
{
|
|
46
|
+
id: 'customText',
|
|
42
47
|
label: __( 'Content' ),
|
|
43
|
-
type: '
|
|
44
|
-
shownByDefault: true,
|
|
45
|
-
mapping: {
|
|
46
|
-
value: 'customText',
|
|
47
|
-
},
|
|
48
|
+
type: 'richtext',
|
|
48
49
|
},
|
|
49
50
|
];
|
|
51
|
+
settings[ formKey ] = {
|
|
52
|
+
fields: [ 'customText' ],
|
|
53
|
+
};
|
|
50
54
|
}
|
|
51
55
|
|
|
52
56
|
export const init = () => initBlock( { name, metadata, settings } );
|
|
@@ -30,7 +30,7 @@ import { useState, useEffect, useRef, useCallback } from '@wordpress/element';
|
|
|
30
30
|
import { decodeEntities } from '@wordpress/html-entities';
|
|
31
31
|
import { link as linkIcon, addSubmenu } from '@wordpress/icons';
|
|
32
32
|
import { store as coreStore } from '@wordpress/core-data';
|
|
33
|
-
import { useMergeRefs,
|
|
33
|
+
import { useMergeRefs, useInstanceId } from '@wordpress/compose';
|
|
34
34
|
|
|
35
35
|
/**
|
|
36
36
|
* Internal dependencies
|
|
@@ -213,8 +213,11 @@ export default function NavigationLinkEdit( {
|
|
|
213
213
|
const itemLabelPlaceholder = __( 'Add label…' );
|
|
214
214
|
const ref = useRef();
|
|
215
215
|
const linkUIref = useRef();
|
|
216
|
-
|
|
217
|
-
|
|
216
|
+
// A link is "new" only if it has an undefined label
|
|
217
|
+
// After the link is created, even if no label is provided, it's set to an empty string.
|
|
218
|
+
const isNewLink = useRef( label === undefined );
|
|
219
|
+
// Track whether we should focus the submenu appender when closing the link UI
|
|
220
|
+
const shouldSelectSubmenuAppenderOnClose = useRef( false );
|
|
218
221
|
|
|
219
222
|
const {
|
|
220
223
|
isAtMaxNesting,
|
|
@@ -223,6 +226,7 @@ export default function NavigationLinkEdit( {
|
|
|
223
226
|
hasChildren,
|
|
224
227
|
validateLinkStatus,
|
|
225
228
|
parentBlockClientId,
|
|
229
|
+
isSubmenu,
|
|
226
230
|
} = useSelect(
|
|
227
231
|
( select ) => {
|
|
228
232
|
const {
|
|
@@ -267,6 +271,7 @@ export default function NavigationLinkEdit( {
|
|
|
267
271
|
hasChildren: !! getBlockCount( clientId ),
|
|
268
272
|
validateLinkStatus: enableLinkStatusValidation,
|
|
269
273
|
parentBlockClientId: parentBlockId,
|
|
274
|
+
isSubmenu: parentBlockName === 'core/navigation-submenu',
|
|
270
275
|
};
|
|
271
276
|
},
|
|
272
277
|
[ clientId, maxNestingLevel ]
|
|
@@ -314,7 +319,7 @@ export default function NavigationLinkEdit( {
|
|
|
314
319
|
// If we leave focus on this block, then when we close the link without creating a link, focus will
|
|
315
320
|
// be lost during the new block selection process.
|
|
316
321
|
useEffect( () => {
|
|
317
|
-
if ( isNewLink.current && isSelected
|
|
322
|
+
if ( isNewLink.current && isSelected ) {
|
|
318
323
|
selectBlock( parentBlockClientId );
|
|
319
324
|
}
|
|
320
325
|
}, [] ); // eslint-disable-line react-hooks/exhaustive-deps
|
|
@@ -333,20 +338,46 @@ export default function NavigationLinkEdit( {
|
|
|
333
338
|
transformToSubmenu,
|
|
334
339
|
] );
|
|
335
340
|
|
|
336
|
-
//
|
|
341
|
+
// Handle link UI when a new link is created
|
|
337
342
|
useEffect( () => {
|
|
338
|
-
// We
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
343
|
+
// We know if a link was just created from our link UI if
|
|
344
|
+
// 1. isNewLink.current is true
|
|
345
|
+
// 2. url has a value
|
|
346
|
+
// 3. isLinkOpen is true
|
|
347
|
+
if ( ! isNewLink.current || ! url || ! isLinkOpen ) {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
// Ensure this only runs once
|
|
352
|
+
isNewLink.current = false;
|
|
353
|
+
|
|
354
|
+
// We just created a link and the block is now selected.
|
|
355
|
+
// If the label looks like a URL, focus and select the label text.
|
|
356
|
+
if ( isURL( prependHTTP( label ) ) && /^.+\.[a-z]+/.test( label ) ) {
|
|
346
357
|
// Focus and select the label text.
|
|
347
358
|
selectLabelText();
|
|
359
|
+
} else {
|
|
360
|
+
// If the link was just created, we want to select the block so the inspector controls
|
|
361
|
+
// are accurate.
|
|
362
|
+
selectBlock( clientId, null );
|
|
363
|
+
|
|
364
|
+
// Edge case: When the created link is the first child of a submenu, the focus will have
|
|
365
|
+
// originated from the add submenu toolbar button. In this case, we need to return focus
|
|
366
|
+
// to the submenu appender if the user closes the link ui using the keyboard.
|
|
367
|
+
// Check if this is the first and only child of a newly created submenu.
|
|
368
|
+
if ( isSubmenu ) {
|
|
369
|
+
const parentBlocks = getBlocks( parentBlockClientId );
|
|
370
|
+
// If this is the only child, then this is a new submenu.
|
|
371
|
+
// Set the flag to select the submenu appender when the link ui is closed.
|
|
372
|
+
if (
|
|
373
|
+
parentBlocks.length === 1 &&
|
|
374
|
+
parentBlocks[ 0 ].clientId === clientId
|
|
375
|
+
) {
|
|
376
|
+
shouldSelectSubmenuAppenderOnClose.current = true;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
348
379
|
}
|
|
349
|
-
}, [
|
|
380
|
+
}, [ url, isLinkOpen, isNewLink, label ] );
|
|
350
381
|
|
|
351
382
|
/**
|
|
352
383
|
* Focus the Link label text and select it.
|
|
@@ -444,23 +475,20 @@ export default function NavigationLinkEdit( {
|
|
|
444
475
|
}
|
|
445
476
|
);
|
|
446
477
|
|
|
447
|
-
|
|
448
|
-
! url ||
|
|
478
|
+
const needsValidLink =
|
|
479
|
+
( ! url && ! ( hasUrlBinding && isBoundEntityAvailable ) ) ||
|
|
449
480
|
isInvalid ||
|
|
450
481
|
isDraft ||
|
|
451
|
-
( hasUrlBinding && ! isBoundEntityAvailable )
|
|
452
|
-
|
|
482
|
+
( hasUrlBinding && ! isBoundEntityAvailable );
|
|
483
|
+
|
|
484
|
+
if ( needsValidLink ) {
|
|
453
485
|
blockProps.onClick = () => {
|
|
454
486
|
setIsLinkOpen( true );
|
|
455
487
|
};
|
|
456
488
|
}
|
|
457
489
|
|
|
458
490
|
const classes = clsx( 'wp-block-navigation-item__content', {
|
|
459
|
-
'wp-block-navigation-link__placeholder':
|
|
460
|
-
! url ||
|
|
461
|
-
isInvalid ||
|
|
462
|
-
isDraft ||
|
|
463
|
-
( hasUrlBinding && ! isBoundEntityAvailable ),
|
|
491
|
+
'wp-block-navigation-link__placeholder': needsValidLink,
|
|
464
492
|
} );
|
|
465
493
|
|
|
466
494
|
const missingText = getMissingText( type );
|
|
@@ -589,9 +617,27 @@ export default function NavigationLinkEdit( {
|
|
|
589
617
|
// Don't remove if binding exists (even if entity is unavailable) so user can fix it.
|
|
590
618
|
if ( ! url && ! hasUrlBinding ) {
|
|
591
619
|
onReplace( [] );
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
620
|
+
return;
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
// Edge case: If this is the first child of a new submenu, focus the submenu's appender
|
|
624
|
+
if (
|
|
625
|
+
shouldSelectSubmenuAppenderOnClose.current
|
|
626
|
+
) {
|
|
627
|
+
shouldSelectSubmenuAppenderOnClose.current = false;
|
|
628
|
+
|
|
629
|
+
// The appender is the next sibling in the DOM after the current block
|
|
630
|
+
if (
|
|
631
|
+
listItemRef.current?.nextElementSibling
|
|
632
|
+
) {
|
|
633
|
+
const appenderButton =
|
|
634
|
+
listItemRef.current.nextElementSibling.querySelector(
|
|
635
|
+
'.block-editor-button-block-appender'
|
|
636
|
+
);
|
|
637
|
+
if ( appenderButton ) {
|
|
638
|
+
appenderButton.focus();
|
|
639
|
+
}
|
|
640
|
+
}
|
|
595
641
|
}
|
|
596
642
|
} }
|
|
597
643
|
anchor={ popoverAnchor }
|
|
@@ -5,6 +5,7 @@ import { _x, __ } from '@wordpress/i18n';
|
|
|
5
5
|
import { customLink as linkIcon } from '@wordpress/icons';
|
|
6
6
|
import { InnerBlocks } from '@wordpress/block-editor';
|
|
7
7
|
import { addFilter } from '@wordpress/hooks';
|
|
8
|
+
import { privateApis as blocksPrivateApis } from '@wordpress/blocks';
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* Internal dependencies
|
|
@@ -15,6 +16,9 @@ import edit from './edit';
|
|
|
15
16
|
import save from './save';
|
|
16
17
|
import { enhanceNavigationLinkVariations } from './hooks';
|
|
17
18
|
import transforms from './transforms';
|
|
19
|
+
import { unlock } from '../lock-unlock';
|
|
20
|
+
|
|
21
|
+
const { fieldsKey, formKey } = unlock( blocksPrivateApis );
|
|
18
22
|
|
|
19
23
|
const { name } = metadata;
|
|
20
24
|
|
|
@@ -89,20 +93,17 @@ export const settings = {
|
|
|
89
93
|
transforms,
|
|
90
94
|
};
|
|
91
95
|
|
|
92
|
-
if ( window.
|
|
93
|
-
settings
|
|
96
|
+
if ( window.__experimentalContentOnlyInspectorFields ) {
|
|
97
|
+
settings[ fieldsKey ] = [
|
|
94
98
|
{
|
|
99
|
+
id: 'label',
|
|
95
100
|
label: __( 'Label' ),
|
|
96
|
-
type: '
|
|
97
|
-
shownByDefault: true,
|
|
98
|
-
mapping: {
|
|
99
|
-
value: 'label',
|
|
100
|
-
},
|
|
101
|
+
type: 'richtext',
|
|
101
102
|
},
|
|
102
103
|
{
|
|
104
|
+
id: 'link',
|
|
103
105
|
label: __( 'Link' ),
|
|
104
|
-
type: '
|
|
105
|
-
shownByDefault: false,
|
|
106
|
+
type: 'link',
|
|
106
107
|
mapping: {
|
|
107
108
|
href: 'url',
|
|
108
109
|
rel: 'rel',
|
|
@@ -110,6 +111,9 @@ if ( window.__experimentalContentOnlyPatternInsertion ) {
|
|
|
110
111
|
},
|
|
111
112
|
},
|
|
112
113
|
];
|
|
114
|
+
settings[ formKey ] = {
|
|
115
|
+
fields: [ 'label' ],
|
|
116
|
+
};
|
|
113
117
|
}
|
|
114
118
|
|
|
115
119
|
export const init = () => {
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { page, addSubmenu } from '@wordpress/icons';
|
|
5
5
|
import { _x, __ } from '@wordpress/i18n';
|
|
6
|
+
import { privateApis as blocksPrivateApis } from '@wordpress/blocks';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Internal dependencies
|
|
@@ -12,6 +13,9 @@ import metadata from './block.json';
|
|
|
12
13
|
import edit from './edit';
|
|
13
14
|
import save from './save';
|
|
14
15
|
import transforms from './transforms';
|
|
16
|
+
import { unlock } from '../lock-unlock';
|
|
17
|
+
|
|
18
|
+
const { fieldsKey, formKey } = unlock( blocksPrivateApis );
|
|
15
19
|
|
|
16
20
|
const { name } = metadata;
|
|
17
21
|
|
|
@@ -48,20 +52,17 @@ export const settings = {
|
|
|
48
52
|
transforms,
|
|
49
53
|
};
|
|
50
54
|
|
|
51
|
-
if ( window.
|
|
52
|
-
settings
|
|
55
|
+
if ( window.__experimentalContentOnlyInspectorFields ) {
|
|
56
|
+
settings[ fieldsKey ] = [
|
|
53
57
|
{
|
|
58
|
+
id: 'label',
|
|
54
59
|
label: __( 'Label' ),
|
|
55
|
-
type: '
|
|
56
|
-
shownByDefault: true,
|
|
57
|
-
mapping: {
|
|
58
|
-
value: 'label',
|
|
59
|
-
},
|
|
60
|
+
type: 'richtext',
|
|
60
61
|
},
|
|
61
62
|
{
|
|
63
|
+
id: 'link',
|
|
62
64
|
label: __( 'Link' ),
|
|
63
|
-
type: '
|
|
64
|
-
shownByDefault: false,
|
|
65
|
+
type: 'link',
|
|
65
66
|
mapping: {
|
|
66
67
|
href: 'url',
|
|
67
68
|
rel: 'rel',
|
|
@@ -69,6 +70,9 @@ if ( window.__experimentalContentOnlyPatternInsertion ) {
|
|
|
69
70
|
},
|
|
70
71
|
},
|
|
71
72
|
];
|
|
73
|
+
settings[ formKey ] = {
|
|
74
|
+
fields: [ 'label' ],
|
|
75
|
+
};
|
|
72
76
|
}
|
|
73
77
|
|
|
74
78
|
export const init = () => initBlock( { name, metadata, settings } );
|
package/src/page-list/index.php
CHANGED
|
@@ -192,8 +192,7 @@ function block_core_page_list_render_nested_page_list( $open_submenus_on_click,
|
|
|
192
192
|
$css_class .= ' menu-item-home';
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
$title =
|
|
196
|
-
$title = $title ? $title : __( '(no title)' );
|
|
195
|
+
$title = $page['title'] ? $page['title'] : __( '(no title)' );
|
|
197
196
|
|
|
198
197
|
$aria_label = sprintf(
|
|
199
198
|
/* translators: Accessibility text. %s: Parent page title. */
|
|
@@ -204,10 +203,10 @@ function block_core_page_list_render_nested_page_list( $open_submenus_on_click,
|
|
|
204
203
|
$markup .= '<li class="wp-block-pages-list__item' . esc_attr( $css_class ) . '"' . $style_attribute . '>';
|
|
205
204
|
|
|
206
205
|
if ( isset( $page['children'] ) && $is_navigation_child && $open_submenus_on_click ) {
|
|
207
|
-
$markup .= '<button aria-label="' . esc_attr( $aria_label ) . '" class="' . esc_attr( $navigation_child_content_class ) . ' wp-block-navigation-submenu__toggle" aria-expanded="false">' .
|
|
206
|
+
$markup .= '<button aria-label="' . esc_attr( $aria_label ) . '" class="' . esc_attr( $navigation_child_content_class ) . ' wp-block-navigation-submenu__toggle" aria-expanded="false">' . wp_kses_post( $title ) .
|
|
208
207
|
'</button><span class="wp-block-page-list__submenu-icon wp-block-navigation__submenu-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" aria-hidden="true" focusable="false"><path d="M1.50002 4L6.00002 8L10.5 4" stroke-width="1.5"></path></svg></span>';
|
|
209
208
|
} else {
|
|
210
|
-
$markup .= '<a class="wp-block-pages-list__item__link' . esc_attr( $navigation_child_content_class ) . '" href="' . esc_url( $page['link'] ) . '"' . $aria_current . '>' . $title . '</a>';
|
|
209
|
+
$markup .= '<a class="wp-block-pages-list__item__link' . esc_attr( $navigation_child_content_class ) . '" href="' . esc_url( $page['link'] ) . '"' . $aria_current . '>' . wp_kses_post( $title ) . '</a>';
|
|
211
210
|
}
|
|
212
211
|
|
|
213
212
|
if ( isset( $page['children'] ) ) {
|
|
@@ -8,7 +8,8 @@ import clsx from 'clsx';
|
|
|
8
8
|
import { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';
|
|
9
9
|
import { useSelect } from '@wordpress/data';
|
|
10
10
|
import { store as coreStore } from '@wordpress/core-data';
|
|
11
|
-
import {
|
|
11
|
+
import { RawHTML } from '@wordpress/element';
|
|
12
|
+
import { safeHTML } from '@wordpress/dom';
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* Internal dependencies
|
|
@@ -68,7 +69,7 @@ export default function PageListItemEdit( { context, attributes } ) {
|
|
|
68
69
|
className="wp-block-navigation-item__content wp-block-navigation-submenu__toggle"
|
|
69
70
|
aria-expanded="false"
|
|
70
71
|
>
|
|
71
|
-
{
|
|
72
|
+
<RawHTML>{ safeHTML( label ) }</RawHTML>
|
|
72
73
|
</button>
|
|
73
74
|
<span className="wp-block-page-list__submenu-icon wp-block-navigation__submenu-icon">
|
|
74
75
|
<ItemSubmenuIcon />
|
|
@@ -81,7 +82,7 @@ export default function PageListItemEdit( { context, attributes } ) {
|
|
|
81
82
|
} ) }
|
|
82
83
|
href={ link }
|
|
83
84
|
>
|
|
84
|
-
{
|
|
85
|
+
<RawHTML>{ safeHTML( title ) }</RawHTML>
|
|
85
86
|
</a>
|
|
86
87
|
) }
|
|
87
88
|
{ hasChildren && (
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useEvent } from '@wordpress/compose';
|
|
5
|
+
import { useEffect, useRef } from '@wordpress/element';
|
|
6
|
+
import deprecated from '@wordpress/deprecated';
|
|
7
|
+
import { useDispatch } from '@wordpress/data';
|
|
8
|
+
import { store as blockEditorStore } from '@wordpress/block-editor';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* If a plugin is still using the old align attribute, we need to migrate its value
|
|
12
|
+
* to the new style.typography.textAlign attribute.
|
|
13
|
+
*
|
|
14
|
+
* @param {string?} align Align attribute value.
|
|
15
|
+
* @param {Object?} style Style attribute value.
|
|
16
|
+
* @param {(Object) => void} setAttributes Updater function for block attributes.
|
|
17
|
+
*/
|
|
18
|
+
export default function useDeprecatedAlign( align, style, setAttributes ) {
|
|
19
|
+
const { __unstableMarkNextChangeAsNotPersistent } =
|
|
20
|
+
useDispatch( blockEditorStore );
|
|
21
|
+
const updateStyleWithAlign = useEvent( () => {
|
|
22
|
+
deprecated( 'align attribute in paragraph block', {
|
|
23
|
+
alternative: 'style.typography.textAlign',
|
|
24
|
+
since: '7.0',
|
|
25
|
+
} );
|
|
26
|
+
__unstableMarkNextChangeAsNotPersistent();
|
|
27
|
+
setAttributes( {
|
|
28
|
+
style: {
|
|
29
|
+
...style,
|
|
30
|
+
typography: {
|
|
31
|
+
...style?.typography,
|
|
32
|
+
textAlign: align,
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
} );
|
|
36
|
+
} );
|
|
37
|
+
const lastUpdatedAlignRef = useRef();
|
|
38
|
+
useEffect( () => {
|
|
39
|
+
if ( align === lastUpdatedAlignRef.current ) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
lastUpdatedAlignRef.current = align;
|
|
43
|
+
updateStyleWithAlign();
|
|
44
|
+
}, [ align, updateStyleWithAlign ] );
|
|
45
|
+
}
|
package/src/paragraph/edit.js
CHANGED
|
@@ -26,6 +26,7 @@ import { formatLtr } from '@wordpress/icons';
|
|
|
26
26
|
* Internal dependencies
|
|
27
27
|
*/
|
|
28
28
|
import { useOnEnter } from './use-enter';
|
|
29
|
+
import useDeprecatedAlign from './deprecated-attributes';
|
|
29
30
|
|
|
30
31
|
function ParagraphRTLControl( { direction, setDirection } ) {
|
|
31
32
|
return (
|
|
@@ -110,6 +111,7 @@ function ParagraphBlock( {
|
|
|
110
111
|
} ) {
|
|
111
112
|
const { content, direction, dropCap, placeholder, style } = attributes;
|
|
112
113
|
const textAlign = style?.typography?.textAlign;
|
|
114
|
+
useDeprecatedAlign( attributes.align, style, setAttributes );
|
|
113
115
|
const blockProps = useBlockProps( {
|
|
114
116
|
ref: useOnEnter( { clientId, content } ),
|
|
115
117
|
className: clsx( {
|
package/src/paragraph/index.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { __ } from '@wordpress/i18n';
|
|
5
5
|
import { paragraph as icon } from '@wordpress/icons';
|
|
6
|
+
import { privateApis as blocksPrivateApis } from '@wordpress/blocks';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Internal dependencies
|
|
@@ -14,6 +15,9 @@ import metadata from './block.json';
|
|
|
14
15
|
import save from './save';
|
|
15
16
|
import transforms from './transforms';
|
|
16
17
|
import variations from './variations';
|
|
18
|
+
import { unlock } from '../lock-unlock';
|
|
19
|
+
|
|
20
|
+
const { fieldsKey, formKey } = unlock( blocksPrivateApis );
|
|
17
21
|
|
|
18
22
|
const { name } = metadata;
|
|
19
23
|
|
|
@@ -58,17 +62,17 @@ export const settings = {
|
|
|
58
62
|
variations,
|
|
59
63
|
};
|
|
60
64
|
|
|
61
|
-
if ( window.
|
|
62
|
-
settings
|
|
65
|
+
if ( window.__experimentalContentOnlyInspectorFields ) {
|
|
66
|
+
settings[ fieldsKey ] = [
|
|
63
67
|
{
|
|
68
|
+
id: 'content',
|
|
64
69
|
label: __( 'Content' ),
|
|
65
|
-
type: '
|
|
66
|
-
shownByDefault: true,
|
|
67
|
-
mapping: {
|
|
68
|
-
value: 'content',
|
|
69
|
-
},
|
|
70
|
+
type: 'richtext',
|
|
70
71
|
},
|
|
71
72
|
];
|
|
73
|
+
settings[ formKey ] = {
|
|
74
|
+
fields: [ 'content' ],
|
|
75
|
+
};
|
|
72
76
|
}
|
|
73
77
|
|
|
74
78
|
export const init = () => initBlock( { name, metadata, settings } );
|
package/src/pattern/block.json
CHANGED
package/src/post-title/edit.js
CHANGED
|
@@ -86,7 +86,7 @@ export default function PostTitleEdit( {
|
|
|
86
86
|
titleElement = userCanEdit ? (
|
|
87
87
|
<PlainText
|
|
88
88
|
tagName={ TagName }
|
|
89
|
-
placeholder={ __( '
|
|
89
|
+
placeholder={ __( '(no title)' ) }
|
|
90
90
|
value={ rawTitle }
|
|
91
91
|
onChange={ setTitle }
|
|
92
92
|
__experimentalVersion={ 2 }
|
|
@@ -96,7 +96,9 @@ export default function PostTitleEdit( {
|
|
|
96
96
|
) : (
|
|
97
97
|
<TagName
|
|
98
98
|
{ ...blockProps }
|
|
99
|
-
dangerouslySetInnerHTML={ {
|
|
99
|
+
dangerouslySetInnerHTML={ {
|
|
100
|
+
__html: fullTitle?.rendered || __( '(no title)' ),
|
|
101
|
+
} }
|
|
100
102
|
/>
|
|
101
103
|
);
|
|
102
104
|
}
|
|
@@ -109,7 +111,9 @@ export default function PostTitleEdit( {
|
|
|
109
111
|
href={ link }
|
|
110
112
|
target={ linkTarget }
|
|
111
113
|
rel={ rel }
|
|
112
|
-
placeholder={
|
|
114
|
+
placeholder={
|
|
115
|
+
! rawTitle.length ? __( '(no title)' ) : null
|
|
116
|
+
}
|
|
113
117
|
value={ rawTitle }
|
|
114
118
|
onChange={ setTitle }
|
|
115
119
|
__experimentalVersion={ 2 }
|
|
@@ -124,7 +128,7 @@ export default function PostTitleEdit( {
|
|
|
124
128
|
rel={ rel }
|
|
125
129
|
onClick={ ( event ) => event.preventDefault() }
|
|
126
130
|
dangerouslySetInnerHTML={ {
|
|
127
|
-
__html: fullTitle?.rendered,
|
|
131
|
+
__html: fullTitle?.rendered || __( '(no title)' ),
|
|
128
132
|
} }
|
|
129
133
|
/>
|
|
130
134
|
</TagName>
|