Skip to content

Commit 21295b7

Browse files
committed
Designer mode not working fix.
Keep element selected while using move up/down buttons. Don't try to drop dragged element to void elements like img/input etc. Vertical position calculation fix for proper before/after drop position when moving dragged element. If element has property set as inline style change it inline instead of saving to css to fix issues like font size/family change not working when the element is edited with the inline text editor and then from properties panel.
1 parent b25d368 commit 21295b7

File tree

1 file changed

+53
-10
lines changed

1 file changed

+53
-10
lines changed

libs/builder/builder.js

Lines changed: 53 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1171,6 +1171,8 @@ Vvveb.Builder = {
11711171
$(node).parent().before(node);
11721172
}
11731173

1174+
Vvveb.Builder.selectNode(node);
1175+
11741176
newParent = node.parentNode;
11751177
newNextSibling = node.nextSibling;
11761178

@@ -1201,6 +1203,8 @@ Vvveb.Builder = {
12011203
$(node).parent().after(node);
12021204
}
12031205

1206+
Vvveb.Builder.selectNode(node);
1207+
12041208
newParent = node.parentNode;
12051209
newNextSibling = node.nextSibling;
12061210

@@ -1292,9 +1296,9 @@ Vvveb.Builder = {
12921296
self.highlightEl = target = $(event.target);
12931297
var offset = target.offset();
12941298
var height = target.outerHeight();
1295-
var halfHeight = Math.max(height / 2, 50);
1299+
var halfHeight = Math.max(height / 2, 5);
12961300
var width = target.outerWidth();
1297-
var halfWidth = Math.max(width / 2, 50);
1301+
var halfWidth = Math.max(width / 2, 5);
12981302
var prepend = true;
12991303

13001304
var x = event.originalEvent.x;
@@ -1370,16 +1374,40 @@ Vvveb.Builder = {
13701374
if (self.isDragging)
13711375
{
13721376
var parent = self.highlightEl;
1377+
let parentTagName = parent[0].tagName.toLowerCase();
1378+
1379+
let noChildren = {
1380+
input: true,
1381+
textarea: true,
1382+
img: true,
1383+
iframe: true,
1384+
embed: true,
1385+
col: true,
1386+
area: true,
1387+
hr: true,
1388+
br: true,
1389+
wbr: true
1390+
};
13731391

13741392
try {
1375-
if ((offset.top < (y - halfHeight)) || (offset.left < (x - halfWidth)))
1393+
if ((offset.top < (event.originalEvent.pageY - halfHeight)) || (offset.left < (x - halfWidth)))
13761394
{
1395+
if (noChildren[parentTagName]) {
1396+
self.dragElement.insertAfter(parent);
1397+
} else {
13771398
self.dragElement.appendTo(parent);
1399+
}
1400+
13781401
prepend = true;
13791402
} else
13801403
{
1381-
prepend = false;
1404+
if (noChildren[parentTagName]) {
1405+
self.dragElement.insertBefore(parent);
1406+
} else {
13821407
self.dragElement.prependTo(parent);
1408+
}
1409+
1410+
prepend = false;
13831411
};
13841412

13851413
if (self.designerMode)
@@ -1569,10 +1597,16 @@ Vvveb.Builder = {
15691597
self.isDragging = true;
15701598
$("#section-actions, #highlight-name, #select-box").hide();
15711599

1572-
self.selectedEl.addClass("is-dragged");
1573-
node = self.selectedEl.get(0);
15741600

1575-
self.dragElement = $(Vvveb.dragHtml);
1601+
if (self.designerMode) {
1602+
self.dragElement = self.selectedEl;
1603+
} else {
1604+
self.selectedEl.css("position", "" ).css("top", "" ).css("left", "" );
1605+
self.selectedEl.addClass("is-dragged");
1606+
self.dragElement = $(Vvveb.dragHtml);
1607+
}
1608+
1609+
node = self.selectedEl.get(0);
15761610

15771611
self.dragMoveMutation = {type: 'move',
15781612
target: node,
@@ -2338,7 +2372,7 @@ Vvveb.Gui = {
23382372

23392373
setDesignerMode : function () {
23402374
//aria-pressed attribute is updated after action is called and we check for false instead of true
2341-
var designerMode = this.attributes["aria-pressed"].value != "true";
2375+
var designerMode = this.attributes["aria-pressed"].value == "true";
23422376
Vvveb.Builder.setDesignerMode(designerMode);
23432377
},
23442378
//layout
@@ -2505,11 +2539,20 @@ Vvveb.StyleManager = {
25052539
return selector.reverse().join(" > ");
25062540
},
25072541

2508-
setStyle: function (element, styleProp, value) {
2542+
setStyle: function(element, styleProp, value) {
25092543
if (typeof(element) == "string") {
25102544
selector = element;
25112545
} else {
2512-
selector = this.getSelectorForElement(element.get(0));
2546+
let node = element.get(0);
2547+
2548+
//if propert is set with inline style attribute then override it and don't save to css
2549+
//inline text editor sets properties like font-size inline that can't be later overriten from css
2550+
if (node.style && node.style[styleProp]) {
2551+
node.style[styleProp] = value;
2552+
return element;
2553+
}
2554+
2555+
selector = this.getSelectorForElement(node);
25132556
}
25142557

25152558
media = $("#canvas").hasClass("tablet") ? "tablet" : $("#canvas").hasClass("mobile") ? "mobile" : "desktop";

0 commit comments

Comments
 (0)