PluginProbe
aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder / 2.13.1
aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder v2.13.1
2.13.0 2.13.1 2.12.0 2.11.1 2.11.0 2.10.0 2.9.0 2.7.4 2.7.5 2.7.6 2.7.7 2.8.0 2.8.1 2.9.1 trunk 1.0 1.0-beta1 1.0-beta2 1.0-beta3 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.1.2 All 80 releases
← All changes | includes/controls/mask.php +47 -34 2.9.02.13.1 View file →
@@ -32,9 +32,9 @@
32 32 'xPositionUnitMobile' => 'px',
33 33 'xPosition' => '',
34 34 'xPositionTablet' => '0',
35 35 'xPositionMobile' => '0',
36 - 'yPositionUnit' => '0',
36 + 'yPositionUnit' => 'px',
37 37 'yPositionUnitTablet' => 'px',
38 38 'yPositionUnitMobile' => 'px',
39 39 'yPosition' => '0',
40 40 'yPositionTablet' => '0',
@@ -70,60 +70,73 @@
70 70 $value = wp_parse_args( $attribute_value, $default_attar_value );
71 71
72 72 $css = [];
73 73
74 - /**
75 - * Generated CSS
76 - * css property
77 - * mask-image
78 - * mask-size
79 - * mask-position
80 - * mask-repeat
81 - */
82 -
83 - if ( $value['mask'] ) {
74 + // Base mask defaults — desktop only. Tablet/mobile calls must NOT re-state these
75 + // because filter_responsive_styles would incorrectly emit them in media queries when
76 + // the user's desktop setting differs (e.g. desktop position: top left → tablet would
77 + // wrongly reset to center center).
78 + if ( $value['mask'] && '' === $device ) {
84 79 if ( 'custom' === $value['maskShape'] ) {
85 80 $css['mask-image'] = 'url(' . $value['customMaskShape'] . ')';
86 81 } else {
87 82 $css['mask-image'] = 'url(' . ABLOCKS_ROOT_URL . '/assets/images/mask-shapes/' . $value['maskShape'] . '.svg)';
88 83 }
84 + $css['-webkit-mask-image'] = $css['mask-image'];
89 85 $css['mask-size'] = 'contain';
86 + $css['-webkit-mask-size'] = 'contain';
90 87 $css['mask-position'] = 'center center';
88 + $css['-webkit-mask-position'] = 'center center';
91 89 $css['mask-repeat'] = 'no-repeat';
90 + $css['-webkit-mask-repeat'] = 'no-repeat';
92 91 }
93 92
94 - if ( $value[ 'maskSize' . $device ] && 'custom' !== $value[ 'maskSize' . $device ] ) {
95 - $css['mask-size'] = $value[ 'maskSize' . $device ];
93 + // Device-specific overrides. Read through device_member(): a custom
94 + // breakpoint (or the generator's value-less probe suffix) has no key of
95 + // its own in the control's defaults, and indexing it directly is what
96 + // produced "Undefined array key …" notices on every page.
97 + $mask_size = self::device_member( $value, 'maskSize', $device );
98 + $mask_position = self::device_member( $value, 'maskPosition', $device );
99 + $mask_repeat = self::device_member( $value, 'maskRepeat', $device );
100 +
101 + // Device-specific size: named value (contain / cover)
102 + if ( $mask_size && 'custom' !== $mask_size ) {
103 + $css['mask-size'] = $mask_size;
104 + $css['-webkit-mask-size'] = $css['mask-size'];
96 105 }
97 106
98 - if (
99 - $value[ 'maskSize' . $device ] &&
100 - 'custom' === $value[ 'maskSize' . $device ] &&
101 - $value[ 'scaleUnit' . $device ]
102 - ) {
103 - $css['mask-size'] = $value[ 'scale' . $device ] . $value[ 'scaleUnit' . $device ];
107 + // Device-specific size: custom px/em/% value
108 + $scale_unit = self::device_member( $value, 'scaleUnit', $device );
109 + if ( $mask_size && 'custom' === $mask_size && $scale_unit ) {
110 + $css['mask-size'] = self::device_member( $value, 'scale', $device ) . $scale_unit;
111 + $css['-webkit-mask-size'] = $css['mask-size'];
104 112 }
105 113
106 - if (
107 - 'custom' === $value[ 'maskPosition' . $device ] &&
108 - $value[ 'xPosition' . $device ] &&
109 - $value[ 'xPositionUnit' . $device ]
110 - ) {
111 - $css['-webkit-mask-position-x'] = $value[ 'xPosition' . $device ] . $value[ 'xPositionUnit' . $device ];
112 - $css['-webkit-mask-position-y'] = $value[ 'yPosition' . $device ] . $value[ 'yPositionUnit' . $device ];
114 + // Device-specific position: named value (e.g. top left, center center)
115 + if ( $mask_position && 'custom' !== $mask_position ) {
116 + $css['mask-position'] = $mask_position;
117 + $css['-webkit-mask-position'] = $css['mask-position'];
113 118 }
114 119
115 - if (
116 - 'custom' === $value[ 'maskPosition' . $device ] &&
117 - $value[ 'yPosition' . $device ] &&
118 - $value[ 'yPositionUnit' . $device ]
119 - ) {
120 - $css['-webkit-mask-position-y'] = $value[ 'yPosition' . $device ] . $value[ 'yPositionUnit' . $device ];
120 + // Device-specific position: custom X Y values
121 + // Use !== '' rather than truthy so a value of '0' is not skipped.
122 + if ( 'custom' === $mask_position ) {
123 + $x_pos = self::device_member( $value, 'xPosition', $device );
124 + $y_pos = self::device_member( $value, 'yPosition', $device );
125 + $x_val = '' !== $x_pos ? $x_pos : '0';
126 + $y_val = '' !== $y_pos ? $y_pos : '0';
127 + $x_unit = self::device_member( $value, 'xPositionUnit', $device );
128 + $y_unit = self::device_member( $value, 'yPositionUnit', $device );
129 + $css['mask-position'] = $x_val . $x_unit . ' ' . $y_val . $y_unit;
130 + $css['-webkit-mask-position'] = $css['mask-position'];
121 131 }
122 132
123 - if ( $value[ 'maskRepeat' . $device ] ) {
124 - $css['mask-repeat'] = $value[ 'maskRepeat' . $device ];
133 + // Device-specific repeat override
134 + if ( $mask_repeat ) {
135 + $css['mask-repeat'] = $mask_repeat;
136 + $css['-webkit-mask-repeat'] = $css['mask-repeat'];
125 137 }
138 +
126 139 return $css;
127 140 }
128 141
129 142