PluginProbe
WebberZone Top 10 — Popular Posts / 4.5.2
WebberZone Top 10 — Popular Posts v4.5.2
4.5.2 4.5.1 4.5.0 4.4.3 4.4.2 4.4.1 4.4.0 4.3.4 4.3.3 4.3.2 4.3.1 4.3.0 trunk 1.0 1.0.1 1.1 1.2 1.3 1.4 1.4.1 1.5 1.5.1 1.5.2 1.5.3 1.6 All 118 releases
top-10 / includes / frontend / blocks / src / post-count / components / padding-control.js

padding-control.js in WebberZone Top 10 — Popular Posts 4.5.2, at includes/frontend/blocks/src/post-count/components/padding-control.js

132 lines 3.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { Button } from '@wordpress/components';
2 import { __ } from '@wordpress/i18n';
3 import { useState } from '@wordpress/element';
4 import UnitControl from './unit-control';
5 import { LinkIcon, UnlinkIcon } from './icons';
6
7 const PaddingControl = ( { attributes, setAttributes } ) => {
8 const {
9 svgPaddingValues = [ 0, 0, 0, 0 ], // Default values for top, right, bottom, left
10 svgPaddingUnits = [ 'px', 'px', 'px', 'px' ], // Default units for top, right, bottom, left
11 } = attributes;
12
13 const [ isPaddingLinked, setIsPaddingLinked ] = useState( false );
14
15 const handlePaddingChange = ( value, index ) => {
16 const newPaddingValues = [ ...svgPaddingValues ];
17 if ( isPaddingLinked ) {
18 newPaddingValues.fill( value );
19 } else {
20 newPaddingValues[ index ] = value;
21 }
22 setAttributes( { svgPaddingValues: newPaddingValues } );
23 };
24
25 const handleUnitChange = ( unit, index ) => {
26 const newPaddingUnits = [ ...svgPaddingUnits ];
27 if ( isPaddingLinked ) {
28 newPaddingUnits.fill( unit );
29 } else {
30 newPaddingUnits[ index ] = unit;
31 }
32 setAttributes( { svgPaddingUnits: newPaddingUnits } );
33 };
34
35 const togglePaddingLink = () => {
36 const newIsPaddingLinked = ! isPaddingLinked;
37 setIsPaddingLinked( newIsPaddingLinked );
38 if ( ! newIsPaddingLinked ) {
39 const value =
40 svgPaddingValues[ 0 ] ||
41 svgPaddingValues[ 1 ] ||
42 svgPaddingValues[ 2 ] ||
43 svgPaddingValues[ 3 ] ||
44 0;
45 setAttributes( {
46 svgPaddingValues: [ value, value, value, value ],
47 svgPaddingUnits: [
48 svgPaddingUnits[ 0 ],
49 svgPaddingUnits[ 0 ],
50 svgPaddingUnits[ 0 ],
51 svgPaddingUnits[ 0 ],
52 ],
53 } );
54 }
55 };
56
57 return (
58 <>
59 <div
60 style={ {
61 display: 'flex',
62 alignItems: 'center',
63 } }
64 >
65 <span>{ __( 'Padding', 'top-10' ) }</span>
66 <Button
67 onClick={ togglePaddingLink }
68 variant="secondary"
69 style={ {
70 marginLeft: '10px',
71 padding: '0px',
72 border: 0,
73 boxShadow: 'none',
74 } }
75 title={
76 isPaddingLinked
77 ? __( 'Unlink Padding', 'top-10' )
78 : __( 'Link Padding', 'top-10' )
79 }
80 >
81 <span
82 dangerouslySetInnerHTML={ {
83 __html: isPaddingLinked ? LinkIcon : UnlinkIcon,
84 } }
85 />
86 </Button>
87 </div>
88 { isPaddingLinked ? (
89 <UnitControl
90 label={ __( 'Padding', 'top-10' ) }
91 value={ svgPaddingValues[ 0 ] }
92 unit={ svgPaddingUnits[ 0 ] }
93 onValueChange={ ( value ) =>
94 handlePaddingChange( value, 0 )
95 }
96 onUnitChange={ ( unit ) => handleUnitChange( unit, 0 ) }
97 />
98 ) : (
99 <div
100 style={ {
101 display: 'grid',
102 gridTemplateColumns: '1fr 1fr',
103 gap: '5px',
104 } }
105 >
106 { [
107 { index: 0, label: __( 'Top', 'top-10' ) },
108 { index: 1, label: __( 'Right', 'top-10' ) },
109 { index: 2, label: __( 'Bottom', 'top-10' ) },
110 { index: 3, label: __( 'Left', 'top-10' ) },
111 ].map( ( { index, label } ) => (
112 <UnitControl
113 key={ index }
114 label={ label }
115 value={ svgPaddingValues[ index ] }
116 unit={ svgPaddingUnits[ index ] }
117 onValueChange={ ( value ) =>
118 handlePaddingChange( value, index )
119 }
120 onUnitChange={ ( unit ) =>
121 handleUnitChange( unit, index )
122 }
123 />
124 ) ) }
125 </div>
126 ) }
127 </>
128 );
129 };
130
131 export default PaddingControl;
132