-
Notifications
You must be signed in to change notification settings - Fork 4.3k
/
Copy pathdeprecated.js
121 lines (114 loc) · 2.73 KB
/
deprecated.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/**
* External dependencies
*/
import clsx from 'clsx';
/**
* WordPress dependencies
*/
import { InnerBlocks, useBlockProps } from '@wordpress/block-editor';
/**
* The specific handling by `className` below is needed because `itemsJustification`
* was introduced in https://github.com/WordPress/gutenberg/pull/28980/files and wasn't
* declared in block.json.
*
* @param {Object} attributes Block's attributes.
*/
const migrateWithLayout = ( attributes ) => {
if ( !! attributes.layout ) {
return attributes;
}
const { className } = attributes;
// Matches classes with `items-justified-` prefix.
const prefix = `items-justified-`;
const justifiedItemsRegex = new RegExp( `\\b${ prefix }[^ ]*[ ]?\\b`, 'g' );
const newAttributes = {
...attributes,
className: className?.replace( justifiedItemsRegex, '' ).trim(),
};
/**
* Add `layout` prop only if `justifyContent` is defined, for backwards
* compatibility. In other cases the block's default layout will be used.
* Also noting that due to the missing attribute, it's possible for a block
* to have more than one of `justified` classes.
*/
const justifyContent = className
?.match( justifiedItemsRegex )?.[ 0 ]
?.trim();
if ( justifyContent ) {
Object.assign( newAttributes, {
layout: {
type: 'flex',
justifyContent: justifyContent.slice( prefix.length ),
},
} );
}
return newAttributes;
};
// Social Links block deprecations.
const deprecated = [
// V1. Remove CSS variable use for colors.
{
attributes: {
iconColor: {
type: 'string',
},
customIconColor: {
type: 'string',
},
iconColorValue: {
type: 'string',
},
iconBackgroundColor: {
type: 'string',
},
customIconBackgroundColor: {
type: 'string',
},
iconBackgroundColorValue: {
type: 'string',
},
openInNewTab: {
type: 'boolean',
default: false,
},
size: {
type: 'string',
},
},
providesContext: {
openInNewTab: 'openInNewTab',
},
supports: {
align: [ 'left', 'center', 'right' ],
anchor: true,
},
migrate: migrateWithLayout,
save: ( props ) => {
const {
attributes: {
iconBackgroundColorValue,
iconColorValue,
itemsJustification,
size,
},
} = props;
const className = clsx( size, {
'has-icon-color': iconColorValue,
'has-icon-background-color': iconBackgroundColorValue,
[ `items-justified-${ itemsJustification }` ]:
itemsJustification,
} );
const style = {
'--wp--social-links--icon-color': iconColorValue,
'--wp--social-links--icon-background-color':
iconBackgroundColorValue,
};
return (
<ul { ...useBlockProps.save( { className, style } ) }>
<InnerBlocks.Content />
</ul>
);
},
},
];
export default deprecated;