Skip to content

Commit bf0e66c

Browse files
authored
Merge pull request #554 from magento/514_5_content-snapshot-category-admin-page
User sees content snapshot on Category Page in Admin Panel - Add accessibility support for stage overlay
2 parents 79c5241 + 133c6ea commit bf0e66c

File tree

7 files changed

+140
-63
lines changed

7 files changed

+140
-63
lines changed

app/code/Magento/PageBuilder/view/adminhtml/ui_component/category_form.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717
</item>
1818
</item>
1919
</argument>
20+
<settings>
21+
<additionalClasses>
22+
<class name="admin__field-wide admin__field-page-builder">true</class>
23+
</additionalClasses>
24+
</settings>
2025
</field>
2126
</fieldset>
2227
</form>

app/code/Magento/PageBuilder/view/adminhtml/web/css/source/_common.less

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -48,35 +48,3 @@
4848
display: none !important;
4949
}
5050
}
51-
52-
//
53-
// Category Description
54-
// ---------------------------------------------
55-
56-
.catalog-category-edit {
57-
.admin__fieldset {
58-
> .admin__field {
59-
&[data-index="description"] {
60-
> .admin__field-label {
61-
text-align: left;
62-
63-
label {
64-
span {
65-
&:before {
66-
left: 0;
67-
}
68-
}
69-
}
70-
}
71-
72-
> .admin__field-control {
73-
float: right;
74-
75-
button.action-default {
76-
float: right;
77-
}
78-
}
79-
}
80-
}
81-
}
82-
}

app/code/Magento/PageBuilder/view/adminhtml/web/css/source/_config.less

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,35 @@
4545
}
4646
}
4747
}
48+
49+
50+
//
51+
// Page Builder full width field
52+
// _____________________________________________
53+
54+
55+
.admin__fieldset {
56+
> .admin__field.admin__field-wide.admin__field-page-builder[class]:not(.admin__field-option) {
57+
> .admin__field-label {
58+
margin-bottom: @indent__xs;
59+
margin-top: @indent__xs;
60+
min-height: 32px;
61+
62+
span[data-config-scope] {
63+
&:before {
64+
left: 0;
65+
}
66+
}
67+
}
68+
}
69+
}
70+
71+
.admin__field-wide.admin__field-page-builder {
72+
margin-bottom: 32px;
73+
74+
button.action-default {
75+
position: absolute;
76+
right: 0;
77+
top: @indent__xs;
78+
}
79+
}

app/code/Magento/PageBuilder/view/adminhtml/web/css/source/_page-builder.less

Lines changed: 44 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
// */
55

66
@border-size: 2px;
7+
@wysiwyg-overlay-background: rgba(0, 120, 249, 0.08);
8+
@wysiwyg-overlay-border: #4181E4;
79

810
.pagebuilder-header {
11+
display: none;
912
opacity: 0;
1013
text-align: right;
1114

@@ -20,6 +23,7 @@
2023
}
2124

2225
&.visible {
26+
display: block;
2327
opacity: 1;
2428
visibility: visible;
2529
}
@@ -67,6 +71,7 @@
6771
background: @color-very-dark-grayish-orange;
6872
border: none;
6973
border-bottom: 1px solid @color-brownie-almost;
74+
display: block;
7075
left: 150px;
7176
opacity: 0;
7277
padding: 0;
@@ -93,11 +98,13 @@
9398
&.visible {
9499
opacity: 1;
95100
visibility: visible;
101+
display: block;
96102
}
97103
}
98104

99105
.pagebuilder-canvas {
100106
padding-top: 30px;
107+
padding-bottom: 120px;
101108
}
102109

103110
.pagebuilder-panel-wrapper {
@@ -139,27 +146,45 @@
139146
}
140147
}
141148

142-
.page-builder-wysiwyg-wrapper {
143-
position: relative;
144149

145-
.pagebuilder-wysiwyg-overlay {
146-
display: none;
147-
height: 0;
148-
left: 0;
149-
position: absolute;
150-
top: 0;
151-
visibility: hidden;
152-
width: 0;
150+
.pagebuilder-wysiwyg-overlay {
151+
display: none;
152+
height: 0;
153+
left: -1px;
154+
position: absolute;
155+
top: -1px;
156+
visibility: hidden;
157+
width: 0;
153158

154-
&.active {
155-
cursor: pointer;
156-
display: block;
157-
height: 100%;
158-
visibility: visible;
159-
width: 100%;
160-
z-index: @z-index-2;
161-
}
159+
&.visible {
160+
-moz-transition: .175s ease-in-out;
161+
-webkit-transition: .175s ease-in-out;
162+
border: 2px solid transparent;
163+
border-radius: 2px;
164+
cursor: pointer;
165+
display: block;
166+
height: calc(~"100% + 2px");
167+
transform: translateY(-2px);
168+
transition: .175s ease-in-out;
169+
visibility: visible;
170+
width: calc(~"100% + 2px");
171+
z-index: @z-index-2;
162172
}
173+
174+
&._hover {
175+
background-color: @wysiwyg-overlay-background;
176+
border-color: @wysiwyg-overlay-border;
177+
transform: translateY(0);
178+
}
179+
180+
._keyfocus & {
181+
opacity: 1;
182+
transform: translateY(0);
183+
}
184+
}
185+
186+
.pagebuilder-wysiwyg-wrapper {
187+
position: relative;
163188
}
164189

165190
.pagebuilder-wysiwyg-wrapper.pagebuilder-transition-out .pagebuilder-stage-wrapper {
@@ -192,17 +217,13 @@
192217
}
193218

194219
.pagebuilder-stage {
195-
-moz-transition: margin-left .35s ease-in-out;
196220
-moz-user-select: none;
197221
-ms-user-select: none;
198222
-o-user-select: none;
199-
-webkit-transition: margin-left .35s ease-in-out;
200223
-webkit-user-select: none;
201224
font-size: 0;
202-
margin-left: 170px;
203225
min-height: 200px;
204226
padding: 0;
205-
transition: margin-left .35s ease-in-out;
206227
user-select: none;
207228

208229
&.stage-full-screen {
@@ -238,7 +259,7 @@
238259
-moz-transition: opacity .75s ease-in-out, visibility .75s ease-in-out;
239260
-webkit-transition: opacity .75s ease-in-out, visibility .75s ease-in-out;
240261
opacity: 0;
241-
padding-bottom: 120px;
262+
padding-top: 8px;
242263
transition: opacity .75s ease-in-out, visibility .75s ease-in-out;
243264
visibility: hidden;
244265

app/code/Magento/PageBuilder/view/adminhtml/web/css/source/_panel.less

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
transition: opacity .75s ease-in-out, visibility .75s ease-in-out;
5959
visibility: hidden;
6060
width: 150px;
61+
display: none;
6162

6263
&.no-position-sticky {
6364
top: 0;
@@ -66,6 +67,7 @@
6667
&.visible {
6768
opacity: 1;
6869
visibility: visible;
70+
display: block;
6971

7072
&.sticky-top {
7173
position: fixed;

app/code/Magento/PageBuilder/view/adminhtml/web/js/form/element/wysiwyg.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ define([
2424
transitionOut: false,
2525
elementSelector: '> textarea',
2626
stageSelector: '.pagebuilder-stage-wrapper',
27+
overlaySelector: '.pagebuilder-wysiwyg-overlay',
28+
overlayMouseover: false,
2729
pageBuilder: false,
2830
visiblePageBuilder: false,
2931
isComponentInitialized: false,
@@ -118,6 +120,22 @@ define([
118120
domObserver.disableNode(node);
119121
},
120122

123+
/**
124+
* Changes tabindex and content editable on stage elements
125+
*/
126+
toggleFocusableElements: function () {
127+
var pageBuilderSelector = '#' + this.pageBuilder.id,
128+
editableSelector = ' [contenteditable]',
129+
focusableSelector = ' :focusable:not(' + this.overlaySelector + ')',
130+
mediaSelector = pageBuilderSelector + ' iframe,' + pageBuilderSelector + ' video',
131+
tabIndexValue = this.pageBuilder.isFullScreen() ? '0' : '-1',
132+
editableValue = this.pageBuilder.isFullScreen();
133+
134+
$(pageBuilderSelector + editableSelector).attr('contenteditable', editableValue);
135+
$(pageBuilderSelector + focusableSelector).attr('tabindex', tabIndexValue).blur();
136+
$(mediaSelector).attr('tabindex', tabIndexValue);
137+
},
138+
121139
/**
122140
* Determine if the current instance is within a modal
123141
*
@@ -134,6 +152,26 @@ define([
134152
}
135153
},
136154

155+
/**
156+
* Overlay MouseOver
157+
*/
158+
onOverlayMouseOver: function () {
159+
if (!this.overlayMouseover && !$(this.overlaySelector).hasClass('_hover')) {
160+
$(this.overlaySelector).addClass('_hover');
161+
}
162+
this.overlayMouseover = true;
163+
},
164+
165+
/**
166+
* Overlay MouseOut
167+
*/
168+
onOverlayMouseOut: function () {
169+
if (this.overlayMouseover && $(this.overlaySelector).hasClass('_hover')) {
170+
$(this.overlaySelector).removeClass('_hover');
171+
}
172+
this.overlayMouseover = false;
173+
},
174+
137175
/**
138176
* Toggle Page Builder full screen mode
139177
*/
@@ -163,6 +201,10 @@ define([
163201

164202
events.on('stage:' + id + ':masterFormatRenderAfter', function (args) {
165203
this.value(args.value);
204+
205+
if (this.wysiwygConfigData()['pagebuilder_content_snapshot']) {
206+
this.toggleFocusableElements();
207+
}
166208
}.bind(this));
167209

168210
events.on('stage:' + id + ':fullScreenModeChangeAfter', function (args) {
@@ -213,6 +255,10 @@ define([
213255
/* eslint-enable max-depth */
214256
}
215257
}
258+
259+
if (this.wysiwygConfigData()['pagebuilder_content_snapshot']) {
260+
this.toggleFocusableElements();
261+
}
216262
}.bind(this));
217263

218264
// Wait until the stage is rendered and full screen mode is activated

app/code/Magento/PageBuilder/view/adminhtml/web/template/form/element/wysiwyg.html

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,29 @@
55
*/
66
-->
77

8-
<div visible="visible" css="{'_disabled': disabled}" class="page-builder-wysiwyg-wrapper">
8+
<div visible="visible" css="{'_disabled': disabled}">
99
<button if="wysiwygConfigData()['pagebuilder_button'] || wysiwygConfigData()['pagebuilder_content_snapshot']"
1010
type="button"
1111
class="action-default action"
1212
ko-disabled="disabled"
13-
click="pageBuilderEditButtonClick.bind($data)">
13+
click="pageBuilderEditButtonClick.bind($data)"
14+
event="{ mouseover: onOverlayMouseOver, mouseout: onOverlayMouseOut }, mouseoverBubble: false">
1415
<span translate="pageBuilderEditButtonText" />
1516
</button>
1617
<if args="isComponentInitialized">
1718
<div visible="visiblePageBuilder"
1819
class="pagebuilder-wysiwyg-wrapper"
1920
css="{'pagebuilder-transition-in': wysiwygConfigData()['pagebuilder_button'] && !wysiwygConfigData()['pagebuilder_content_snapshot'], 'trigger-transition': transition, 'pagebuilder-transition-out': transitionOut}">
20-
<with args="pageBuilder">
21+
<div if="wysiwygConfigData()['pagebuilder_content_snapshot']"
22+
class="pagebuilder-wysiwyg-overlay"
23+
click="pageBuilderEditButtonClick.bind($data)"
24+
css="'visible': !pageBuilder.isFullScreen()"
25+
event="{ mouseover: onOverlayMouseOver, mouseout: onOverlayMouseOut }, mouseoverBubble: false"
26+
tabindex="0">
27+
</div>
28+
<with args="pageBuilder">
2129
<render />
2230
</with>
2331
</div>
2432
</if>
25-
<div if="wysiwygConfigData()['pagebuilder_content_snapshot']"
26-
class="pagebuilder-wysiwyg-overlay"
27-
click="pageBuilderEditButtonClick.bind($data)"
28-
css="'active': !pageBuilder.isFullScreen()">
29-
</div>
3033
</div>

0 commit comments

Comments
 (0)