Skip to content

Commit 3692aa5

Browse files
author
Hwashiang Yu
committed
MC-4232: Button text draggable triggers the image drop zones
- Updated live-edit to not allow dragging of content - Updated image uploader to not style draggable placeholder unless file extension is correct - Resolved jslint issue in image uploader
1 parent 9a9a039 commit 3692aa5

File tree

3 files changed

+50
-22
lines changed

3 files changed

+50
-22
lines changed

app/code/Magento/PageBuilder/view/adminhtml/web/js/binding/live-edit.js

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/form/element/image-uploader.js

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ define([
5757

5858
this._super();
5959

60-
events.on('image:' + this.id +':assignAfter', this.onAssignedFile.bind(this));
60+
events.on('image:' + this.id + ':assignAfter', this.onAssignedFile.bind(this));
6161

6262
// bind dropzone highlighting using event delegation only once
6363
if (!initializedOnce) {
@@ -95,19 +95,26 @@ define([
9595
* @param {jQuery.event} e
9696
*/
9797
highlightDropzone: function (e) {
98-
var $dropzone = $(e.target).closest(this.dropZone),
98+
var draggedItem = e.originalEvent.dataTransfer.items[0],
99+
$dropzone = $(e.target).closest(this.dropZone),
99100
$otherDropzones = $(this.dropZone).not($dropzone),
100101
isInsideDropzone = !!$dropzone.length;
101102

102-
if (isInsideDropzone) {
103-
$dropzone
104-
.removeClass(this.classes.draggingOutside)
105-
.addClass([this.classes.dragging, this.classes.draggingInside].join(' '));
106-
}
103+
if (draggedItem.kind === 'file' &&
104+
(draggedItem.type === 'image/png' ||
105+
draggedItem.type === 'image/gif' ||
106+
draggedItem.type === 'image/jpg')
107+
) {
108+
if (isInsideDropzone) {
109+
$dropzone
110+
.removeClass(this.classes.draggingOutside)
111+
.addClass([this.classes.dragging, this.classes.draggingInside].join(' '));
112+
}
107113

108-
$otherDropzones
109-
.removeClass(this.classes.draggingInside)
110-
.addClass([this.classes.dragging, this.classes.draggingOutside].join(' '));
114+
$otherDropzones
115+
.removeClass(this.classes.draggingInside)
116+
.addClass([this.classes.dragging, this.classes.draggingOutside].join(' '));
117+
}
111118
},
112119

113120
/**
@@ -178,7 +185,6 @@ define([
178185
*/
179186
updateResponsiveClasses: function () {
180187
var classesToAdd = [],
181-
classConfig,
182188
elementWidth = this.$uploadArea.width(),
183189
modifierClass;
184190

@@ -189,16 +195,17 @@ define([
189195
this.$uploadArea.removeClass(Object.keys(this.elementWidthModifierClasses).join(' '));
190196

191197
for (modifierClass in this.elementWidthModifierClasses) {
192-
if (!this.elementWidthModifierClasses.hasOwnProperty(modifierClass)) {
193-
continue;
194-
}
195-
196-
classConfig = this.elementWidthModifierClasses[modifierClass];
197-
198-
if (classConfig.minWidth && classConfig.maxWidth &&
199-
(classConfig.minWidth <= elementWidth && elementWidth <= classConfig.maxWidth) ||
200-
classConfig.minWidth && !classConfig.maxWidth && classConfig.minWidth <= elementWidth ||
201-
classConfig.maxWidth && !classConfig.minWidth && elementWidth <= classConfig.maxWidth
198+
if (this.elementWidthModifierClasses.hasOwnProperty(modifierClass) && (
199+
this.elementWidthModifierClasses[modifierClass].minWidth &&
200+
this.elementWidthModifierClasses[modifierClass].maxWidth &&
201+
(this.elementWidthModifierClasses[modifierClass].minWidth <= elementWidth &&
202+
elementWidth <= this.elementWidthModifierClasses[modifierClass].maxWidth) ||
203+
this.elementWidthModifierClasses[modifierClass].minWidth &&
204+
!this.elementWidthModifierClasses[modifierClass].maxWidth &&
205+
this.elementWidthModifierClasses[modifierClass].minWidth <= elementWidth ||
206+
this.elementWidthModifierClasses[modifierClass].maxWidth &&
207+
!this.elementWidthModifierClasses[modifierClass].minWidth &&
208+
elementWidth <= this.elementWidthModifierClasses[modifierClass].maxWidth)
202209
) {
203210
classesToAdd.push(modifierClass);
204211
}
@@ -212,7 +219,7 @@ define([
212219
/**
213220
* {@inheritDoc}
214221
*/
215-
hasData: function() {
222+
hasData: function () {
216223
// Some of the components automatically add an empty object if the value is unset.
217224
return this._super() && !$.isEmptyObject(this.value()[0]);
218225
}

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/binding/live-edit.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,15 @@ ko.bindingHandlers.liveEdit = {
123123
event.preventDefault();
124124
};
125125

126+
/**
127+
* Prevent content from being dragged
128+
*
129+
* @param {DragEvent} event
130+
*/
131+
const onDragStart = (event: DragEvent) => {
132+
event.preventDefault();
133+
};
134+
126135
/**
127136
* Input event on element
128137
*/
@@ -139,6 +148,7 @@ ko.bindingHandlers.liveEdit = {
139148
element.addEventListener("keyup", onKeyUp);
140149
element.addEventListener("input", onInput);
141150
element.addEventListener("drop", onDrop);
151+
element.addEventListener("dragstart", onDragStart);
142152

143153
$(element).parent().css("cursor", "text");
144154
handlePlaceholderClass(element);

0 commit comments

Comments
 (0)