@innovastudio/contentbox 1.6.48 → 1.6.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1159,8 +1159,7 @@ class SideBar {
1159
1159
  this.closeSidebar(); // Close all modeless dialogs
1160
1160
 
1161
1161
  if (this.builder.editbox) this.builder.editbox.close();
1162
- if (this.builder.editsection) this.builder.editsection.close();
1163
- this.builder.animateScroll.close(); // Close anim side panel
1162
+ if (this.builder.editsection) this.builder.editsection.close(); // this.builder.animateScroll.close(); // Close anim side panel
1164
1163
 
1165
1164
  if (toggle) return;
1166
1165
  let panelId = btn.getAttribute('data-content');
@@ -13095,18 +13094,20 @@ class PanelBox {
13095
13094
  </div>
13096
13095
 
13097
13096
  <div class="div-boxcanvas">
13098
- <div class="breakpoint-list"></div>
13099
13097
 
13100
13098
  <div class="adjustboxheight">
13101
13099
  <div class="label mt-3">${out('Height')}:</div>
13102
- <div class="group">
13100
+ <div class="group" style="margin-top:5px">
13101
+ <button title="${out('Fixed')}" data-boxheight="set" style="width:75px">${out('Fixed')}</button>
13103
13102
  <button title="${out('Decrease')}" data-boxheight="-"><svg><use xlink:href="#icon-minus"></use></svg></button>
13104
13103
  <button title="${out('Increase')}" data-boxheight="+"><svg><use xlink:href="#icon-plus2"></use></svg></button>
13105
13104
  <button title="${out('Clear')}" data-boxheight=""><svg><use xlink:href="#icon-eraser"></use></svg></button>
13106
13105
  </div>
13107
13106
  </div>
13108
13107
 
13109
- <label class="label checkbox mt-3">
13108
+ <div class="breakpoint-list"></div>
13109
+
13110
+ <label class="label checkbox mt-4" style="margin-bottom:15px">
13110
13111
  <input type="checkbox" class="chk-auto-layout" />
13111
13112
  <span>${out('Auto Layout on Mobile')}</span>
13112
13113
  </label>
@@ -13539,6 +13540,8 @@ class PanelBox {
13539
13540
  newHeight = currentHeight + 50;
13540
13541
  } else if (s === '-') {
13541
13542
  newHeight = currentHeight - 50;
13543
+ } else if (s === 'set') {
13544
+ newHeight = currentHeight;
13542
13545
  } else {
13543
13546
  newHeight = '';
13544
13547
  }
@@ -13556,7 +13559,14 @@ class PanelBox {
13556
13559
  box.removeAttribute('data--h-' + breakpoint);
13557
13560
  } else {
13558
13561
  box.removeAttribute('data--h', newHeight);
13559
- }
13562
+ } // const attributes = box.attributes;
13563
+ // for (let i = 0; i < attributes.length; i++) {
13564
+ // const attributeName = attributes[i].name;
13565
+ // if (attributeName.includes('data--h-')) {
13566
+ // box.removeAttribute(attributeName);
13567
+ // }
13568
+ // }
13569
+
13560
13570
 
13561
13571
  box.style.height = '';
13562
13572
  }
@@ -13920,6 +13930,9 @@ class PanelBox {
13920
13930
  if (attributeName.includes('data--h-')) {
13921
13931
  let val = attributeName.replace('data--h-', '');
13922
13932
  if (!breakpoints.includes(val)) breakpoints.push(val);
13933
+ } else if (attributeName === 'data--h') {
13934
+ let val = 'default';
13935
+ if (!breakpoints.includes(val)) breakpoints.push(val);
13923
13936
  }
13924
13937
  }
13925
13938
 
@@ -13933,7 +13946,7 @@ class PanelBox {
13933
13946
  for (let i = 0; i < attributes.length; i++) {
13934
13947
  const attributeName = attributes[i].name;
13935
13948
 
13936
- if (attributeName.includes('data--h-')) {
13949
+ if (attributeName.includes('data--h')) {
13937
13950
  attributesToRemove.push(attributeName);
13938
13951
  }
13939
13952
  }
@@ -13952,19 +13965,22 @@ class PanelBox {
13952
13965
  if (!activeBox) return;
13953
13966
  const breakpoints = this.getBreakpoints(activeBox);
13954
13967
  breakpoints.forEach(item => {
13955
- s += `<button data-breakpoint="${item}" style="width:60px">${item}px</button>`;
13968
+ if (item === 'default') {
13969
+ s += `<button data-breakpoint="1920" style="width:60px">${out('default')}</button>`;
13970
+ } else {
13971
+ s += `<button data-breakpoint="${item}" style="width:60px">${item}px</button>`;
13972
+ }
13956
13973
  });
13957
13974
 
13958
13975
  if (s !== '') {
13959
13976
  this.breakpointList.innerHTML = `
13960
13977
 
13961
- <div class="label">${out('Breakpoints')}:</div>
13978
+ <!--<div class="label mt-1">${out('Breakpoints')}:</div>-->
13962
13979
 
13963
13980
  <div class="flex">
13964
13981
  <div class="mr-2">
13965
13982
  <div class="group breakpoint-buttons" style="width:auto;display:inline-flex;max-width:135px">
13966
13983
  ${s}
13967
- <button data-breakpoint="1920" style="width:60px">${out('default')}</button>
13968
13984
  </div>
13969
13985
  </div>
13970
13986
  <div>
@@ -15560,8 +15576,17 @@ class PanelBlock {
15560
15576
 
15561
15577
  blockOverlay() {
15562
15578
  let block = this.builder.controlpanel.activeBlock;
15563
- if (!block) return false;
15564
- let blockOverlay = block.querySelector('.is-block-overlay');
15579
+ if (!block) return false; // let blockOverlay = block.querySelector('.is-block-overlay');
15580
+
15581
+ let children = block.children;
15582
+ let blockOverlay = null;
15583
+
15584
+ for (let i = 0; i < children.length; i++) {
15585
+ if (children[i].classList.contains('is-block-overlay')) {
15586
+ blockOverlay = children[i];
15587
+ break;
15588
+ }
15589
+ }
15565
15590
 
15566
15591
  if (!blockOverlay) {
15567
15592
  block.insertAdjacentHTML('beforeend', '<div class="is-block-overlay"></div>');
@@ -17531,13 +17556,25 @@ class PanelColumn {
17531
17556
  activeColumn.classList.add('xs-hidden');
17532
17557
  } else if (target === 'sm') {
17533
17558
  activeColumn.classList.add('sm-hidden');
17534
- activeColumn.parentNode.classList.add('sm-autofit');
17559
+ activeColumn.parentNode.classList.add('sm-autofit'); // hide all others smaller than tablet portrait
17560
+
17561
+ activeColumn.classList.add('xs-hidden');
17535
17562
  } else if (target === 'md') {
17536
17563
  activeColumn.classList.add('md-hidden');
17537
- activeColumn.parentNode.classList.add('md-autofit');
17564
+ activeColumn.parentNode.classList.add('md-autofit'); // hide all others smaller than tablet landscape
17565
+
17566
+ activeColumn.classList.add('sm-hidden');
17567
+ activeColumn.parentNode.classList.add('sm-autofit');
17568
+ activeColumn.classList.add('xs-hidden');
17538
17569
  } else if (target === '') {
17539
17570
  activeColumn.classList.add('desktop-hidden');
17540
- activeColumn.parentNode.classList.add('desktop-autofit');
17571
+ activeColumn.parentNode.classList.add('desktop-autofit'); // hide all others smaller than desktop
17572
+
17573
+ activeColumn.classList.add('md-hidden');
17574
+ activeColumn.parentNode.classList.add('md-autofit');
17575
+ activeColumn.classList.add('sm-hidden');
17576
+ activeColumn.parentNode.classList.add('sm-autofit');
17577
+ activeColumn.classList.add('xs-hidden');
17541
17578
  }
17542
17579
  }
17543
17580
 
@@ -17881,6 +17918,23 @@ class PanelRow {
17881
17918
  let screenMode = this.builder.screenMode;
17882
17919
  if (screenMode === 'desktop') prefix = 'desktop-items-';else if (screenMode === 'tablet-landscape') prefix = 'md-items-';else if (screenMode === 'tablet') prefix = 'sm-items-';else if (screenMode === 'mobile') prefix = 'xs-items-';
17883
17920
 
17921
+ if (this.builder.doc.body.hasAttribute('data-breakpoint')) {
17922
+ const breakpoint = this.builder.doc.body.getAttribute('data-breakpoint');
17923
+
17924
+ if (breakpoint <= 760) {
17925
+ prefix = 'xs-items-';
17926
+ } else if (760 < breakpoint && breakpoint <= 970) {
17927
+ prefix = 'sm-items-';
17928
+ } else if (970 < breakpoint && breakpoint <= 1280) {
17929
+ prefix = 'md-items-';
17930
+ } else if (1280 < breakpoint && breakpoint <= 1920) {
17931
+ prefix = 'desktop-items-';
17932
+ } else {
17933
+ // 1920<breakpoint
17934
+ prefix = 'desktop-items-';
17935
+ }
17936
+ }
17937
+
17884
17938
  for (let j = 1; j <= 6; j++) {
17885
17939
  activeRow.classList.remove(prefix + j);
17886
17940
  }
@@ -18144,13 +18198,25 @@ class PanelRow {
18144
18198
  activeRow.classList.add('xs-hidden');
18145
18199
  } else if (target === 'sm') {
18146
18200
  activeRow.classList.add('sm-hidden');
18147
- activeRow.parentNode.classList.add('sm-autofit');
18201
+ activeRow.parentNode.classList.add('sm-autofit'); // hide all others smaller than tablet portrait
18202
+
18203
+ activeRow.classList.add('xs-hidden');
18148
18204
  } else if (target === 'md') {
18149
18205
  activeRow.classList.add('md-hidden');
18150
- activeRow.parentNode.classList.add('md-autofit');
18206
+ activeRow.parentNode.classList.add('md-autofit'); // hide all others smaller than tablet landscape
18207
+
18208
+ activeRow.classList.add('sm-hidden');
18209
+ activeRow.parentNode.classList.add('sm-autofit');
18210
+ activeRow.classList.add('xs-hidden');
18151
18211
  } else if (target === '') {
18152
18212
  activeRow.classList.add('desktop-hidden');
18153
- activeRow.parentNode.classList.add('desktop-autofit');
18213
+ activeRow.parentNode.classList.add('desktop-autofit'); // hide all others smaller than desktop
18214
+
18215
+ activeRow.classList.add('md-hidden');
18216
+ activeRow.parentNode.classList.add('md-autofit');
18217
+ activeRow.classList.add('sm-hidden');
18218
+ activeRow.parentNode.classList.add('sm-autofit');
18219
+ activeRow.classList.add('xs-hidden');
18154
18220
  }
18155
18221
  }
18156
18222
 
@@ -22307,7 +22373,6 @@ class BlockOptions {
22307
22373
 
22308
22374
  <div class="panel-pop unit-1" tabIndex="-1" aria-hidden="true">
22309
22375
  <button title="px">px</button>
22310
- <button title="px">%</button>
22311
22376
  <button title="vw">vw</button>
22312
22377
  <button title="vw">vh</button>
22313
22378
  <button title="em">em</button>
@@ -22487,8 +22552,17 @@ class BlockOptions {
22487
22552
 
22488
22553
  blockOverlay() {
22489
22554
  let block = this.builder.controlpanel.activeBlock;
22490
- if (!block) return false;
22491
- let blockOverlay = block.querySelector('.is-block-overlay');
22555
+ if (!block) return false; // let blockOverlay = block.querySelector('.is-block-overlay');
22556
+
22557
+ let children = block.children;
22558
+ let blockOverlay = null;
22559
+
22560
+ for (let i = 0; i < children.length; i++) {
22561
+ if (children[i].classList.contains('is-block-overlay')) {
22562
+ blockOverlay = children[i];
22563
+ break;
22564
+ }
22565
+ }
22492
22566
 
22493
22567
  if (!blockOverlay) {
22494
22568
  block.insertAdjacentHTML('beforeend', '<div class="is-block-overlay"></div>');
@@ -23881,38 +23955,45 @@ class Element$2 {
23881
23955
  }
23882
23956
 
23883
23957
  parseStyle(element, property) {
23884
- const styleValue = element.style[property];
23885
- const match = styleValue.match(/^([0-9.]+)(px|vw|vh|em|rem|pt|vmin|vmax|%)$/);
23886
-
23887
- if (property === 'line-height') {
23888
- // line-height can have no unit, ex: 1, 1.4, etc
23889
- if (match) {
23890
- const numericValue = match[1];
23891
- const unit = match[2];
23892
- return {
23893
- value: numericValue,
23894
- unit
23895
- };
23896
- } else {
23897
- return {
23898
- value: styleValue,
23899
- unit: ''
23900
- };
23901
- }
23902
- } else {
23903
- if (match) {
23904
- const numericValue = match[1];
23905
- const unit = match[2];
23906
- return {
23907
- value: numericValue,
23908
- unit
23909
- };
23958
+ try {
23959
+ const styleValue = element.style[property];
23960
+ const match = styleValue.match(/^([0-9.]+)(px|vw|vh|em|rem|pt|vmin|vmax|%)$/);
23961
+
23962
+ if (property === 'line-height') {
23963
+ // line-height can have no unit, ex: 1, 1.4, etc
23964
+ if (match) {
23965
+ const numericValue = match[1];
23966
+ const unit = match[2];
23967
+ return {
23968
+ value: numericValue,
23969
+ unit
23970
+ };
23971
+ } else {
23972
+ return {
23973
+ value: styleValue,
23974
+ unit: ''
23975
+ };
23976
+ }
23910
23977
  } else {
23911
- return {
23912
- value: '',
23913
- unit: 'px'
23914
- };
23978
+ if (match) {
23979
+ const numericValue = match[1];
23980
+ const unit = match[2];
23981
+ return {
23982
+ value: numericValue,
23983
+ unit
23984
+ };
23985
+ } else {
23986
+ return {
23987
+ value: '',
23988
+ unit: 'px'
23989
+ };
23990
+ }
23915
23991
  }
23992
+ } catch (e) {
23993
+ return {
23994
+ value: '',
23995
+ unit: 'px'
23996
+ };
23916
23997
  }
23917
23998
  }
23918
23999
 
@@ -24111,13 +24192,25 @@ class Element$2 {
24111
24192
  elm.classList.add('xs-hidden');
24112
24193
  } else if (target === 'sm') {
24113
24194
  elm.classList.add('sm-hidden');
24114
- elm.parentNode.classList.add('sm-autofit');
24195
+ elm.parentNode.classList.add('sm-autofit'); // hide all others smaller than tablet portrait
24196
+
24197
+ elm.classList.add('xs-hidden');
24115
24198
  } else if (target === 'md') {
24116
24199
  elm.classList.add('md-hidden');
24117
- elm.parentNode.classList.add('md-autofit');
24200
+ elm.parentNode.classList.add('md-autofit'); // hide all others smaller than tablet landscape
24201
+
24202
+ elm.classList.add('sm-hidden');
24203
+ elm.parentNode.classList.add('sm-autofit');
24204
+ elm.classList.add('xs-hidden');
24118
24205
  } else if (target === '') {
24119
24206
  elm.classList.add('desktop-hidden');
24120
- elm.parentNode.classList.add('desktop-autofit');
24207
+ elm.parentNode.classList.add('desktop-autofit'); // hide all others smaller than desktop
24208
+
24209
+ elm.classList.add('md-hidden');
24210
+ elm.parentNode.classList.add('md-autofit');
24211
+ elm.classList.add('sm-hidden');
24212
+ elm.parentNode.classList.add('sm-autofit');
24213
+ elm.classList.add('xs-hidden');
24121
24214
  }
24122
24215
  }
24123
24216
 
@@ -24238,16 +24331,19 @@ class Shadow {
24238
24331
  });
24239
24332
  const btnCleanShadow = dialog.querySelector('.btn-clean-shadow');
24240
24333
  btnCleanShadow.addEventListener('click', () => {
24334
+ this.builder.editor.saveForUndo();
24241
24335
  let elm = this.builder.controlpanel.objDialogElement.inspectedElement;
24242
24336
 
24243
24337
  if (elm) {
24244
24338
  elm.style.boxShadow = '';
24339
+ this.builder.controlpanel.objDialogElement.refresh();
24245
24340
  } else {
24246
24341
  elm = this.builder.controlpanel.objDialogBlockOptions.blockOverlay();
24247
24342
  if (elm) elm.style.boxShadow = '';
24343
+ this.getState();
24248
24344
  }
24249
24345
 
24250
- this.builder.controlpanel.objDialogElement.refresh();
24346
+ this.builder.onChange();
24251
24347
  }); // Adjustments
24252
24348
 
24253
24349
  const inpAdjustX = dialog.querySelector('.inp-shadow-x');
@@ -107680,10 +107776,14 @@ class Common {
107680
107776
  applyPercentage(block) {
107681
107777
  const zoom = this.zoom;
107682
107778
  const rect = this.getRect(block);
107683
- const container = block.closest('.box-canvas');
107779
+ let container = block.closest('.box-canvas');
107780
+ if (block.parentNode.closest(this.selector)) {
107781
+ // block is in group
107782
+ container = block.parentNode.closest(this.selector);
107783
+ }
107684
107784
  const containerRect = this.getRect(container); // if container has top/left
107685
107785
 
107686
- this.horizontalRulerTop = container.querySelector('.h-ruler-top');
107786
+ this.horizontalRulerTop = container.querySelector('.h-ruler-top'); // no rulers in group
107687
107787
  this.horizontalRulerBottom = container.querySelector('.h-ruler-bottom');
107688
107788
  this.horizontalRulerMiddle = container.querySelector('.h-ruler-middle');
107689
107789
  this.verticalRulerLeft = container.querySelector('.v-ruler-left');
@@ -107695,10 +107795,10 @@ class Common {
107695
107795
  let bottomTouched = false;
107696
107796
  let leftTouched = false;
107697
107797
  let rightTouched = false;
107698
- if (this.horizontalRulerTop.hasAttribute('data-topTouched')) topTouched = true;
107699
- if (this.horizontalRulerBottom.hasAttribute('data-bottomTouched')) bottomTouched = true;
107700
- if (this.verticalRulerLeft.hasAttribute('data-leftTouched')) leftTouched = true;
107701
- if (this.verticalRulerRight.hasAttribute('data-rightTouched')) rightTouched = true;
107798
+ if (this.horizontalRulerTop && this.horizontalRulerTop.hasAttribute('data-topTouched')) topTouched = true;
107799
+ if (this.horizontalRulerBottom && this.horizontalRulerBottom.hasAttribute('data-bottomTouched')) bottomTouched = true;
107800
+ if (this.verticalRulerLeft && this.verticalRulerLeft.hasAttribute('data-leftTouched')) leftTouched = true;
107801
+ if (this.verticalRulerRight && this.verticalRulerRight.hasAttribute('data-rightTouched')) rightTouched = true;
107702
107802
  let isChildBlock = false;
107703
107803
  if (block.parentNode.matches(this.selector)) {
107704
107804
  // child block
@@ -107777,10 +107877,10 @@ class Common {
107777
107877
 
107778
107878
  // reset
107779
107879
  setTimeout(() => {
107780
- this.horizontalRulerTop.removeAttribute('data-topTouched');
107781
- this.horizontalRulerBottom.removeAttribute('data-bottomTouched');
107782
- this.verticalRulerLeft.removeAttribute('data-leftTouched');
107783
- this.verticalRulerRight.removeAttribute('data-rightTouched');
107880
+ if (this.horizontalRulerTop) this.horizontalRulerTop.removeAttribute('data-topTouched');
107881
+ if (this.horizontalRulerBottom) this.horizontalRulerBottom.removeAttribute('data-bottomTouched');
107882
+ if (this.verticalRulerLeft) this.verticalRulerLeft.removeAttribute('data-leftTouched');
107883
+ if (this.verticalRulerRight) this.verticalRulerRight.removeAttribute('data-rightTouched');
107784
107884
  }, 10);
107785
107885
  }
107786
107886
  applyPixels(block) {
@@ -108278,6 +108378,8 @@ class Ruler {
108278
108378
  this.rulerRight = null;
108279
108379
  }
108280
108380
  updateRulers(block) {
108381
+ if (block.parentNode.closest(this.selector)) return; // block is in group
108382
+
108281
108383
  const container = block.closest('.box-canvas');
108282
108384
  this.horizontalRulerTop = container.querySelector('.h-ruler-top');
108283
108385
  this.horizontalRulerBottom = container.querySelector('.h-ruler-bottom');
@@ -108302,6 +108404,8 @@ class Ruler {
108302
108404
  this.rulerRight = null;
108303
108405
  this.elements = container.querySelectorAll(this.selector);
108304
108406
  this.elements.forEach(element => {
108407
+ if (element.parentNode.closest(this.selector)) return; // block is in group
108408
+
108305
108409
  if (!this.doc.body.contains(element)) return; // in case element removed (eg. unGroup, block deleted)
108306
108410
 
108307
108411
  if (block.contains(element)) return; // In case of group moving
@@ -108980,7 +109084,6 @@ class Resizable {
108980
109084
  }
108981
109085
 
108982
109086
  this.target = event.target.parentNode; // block
108983
-
108984
109087
  this.clonedTarget = this.doc.querySelector(this.selector + '.cloned');
108985
109088
  event.preventDefault();
108986
109089
  event.stopPropagation();
@@ -108999,6 +109102,8 @@ class Resizable {
108999
109102
  this.startX = touch.clientX;
109000
109103
  this.startY = touch.clientY;
109001
109104
  }
109105
+ this.target.style.transition = ''; // prevent anim/delay while dragging (in case a block has animation transition)
109106
+ if (this.clonedTarget) this.clonedTarget.style.transition = '';
109002
109107
 
109003
109108
  //Initial
109004
109109
  this.initialWidth = parseFloat(getComputedStyle(this.target).width);
@@ -109485,6 +109590,7 @@ class Draggable {
109485
109590
  const y = startY - rect.top + containerRect.top;
109486
109591
  target.setAttribute('data-startx', x);
109487
109592
  target.setAttribute('data-starty', y);
109593
+ target.style.transition = ''; // prevent anim/delay while dragging (in case a block has animation transition)
109488
109594
 
109489
109595
  // reset (from applyPercentage bottomTouched)
109490
109596
  if (target.style.bottom) {
@@ -109561,33 +109667,35 @@ class Draggable {
109561
109667
  updateBlockStyle(target) {
109562
109668
  // Block placement should must not 50% outside the container
109563
109669
  const container = target.closest('.box-canvas');
109564
- let containerHeight = container.offsetHeight;
109565
- let containerWidth = container.offsetWidth;
109566
- /*
109567
- if(target.offsetTop + target.offsetHeight>=containerHeight) {
109568
- target.style.top = containerHeight-target.offsetHeight +'px';
109569
- }
109570
- if(target.offsetTop<=0) {
109670
+ if (!target.parentNode.closest('.is-group')) {
109671
+ let containerHeight = container.offsetHeight;
109672
+ let containerWidth = container.offsetWidth;
109673
+ /*
109674
+ if(target.offsetTop + target.offsetHeight>=containerHeight) {
109675
+ target.style.top = containerHeight-target.offsetHeight +'px';
109676
+ }
109677
+ if(target.offsetTop<=0) {
109678
+ target.style.top = '0px';
109679
+ }
109680
+ if(target.offsetLeft + target.offsetWidth>=åcontainerWidth) {
109681
+ target.style.left = (containerWidth-target.offsetWidth) +'px';
109682
+ }
109683
+ if(target.offsetLeft<=0) {
109684
+ target.style.left = '0px';
109685
+ }
109686
+ */
109687
+ if (target.offsetTop + target.offsetHeight <= target.offsetHeight / 2) {
109571
109688
  target.style.top = '0px';
109572
- }
109573
- if(target.offsetLeft + target.offsetWidth>=åcontainerWidth) {
109574
- target.style.left = (containerWidth-target.offsetWidth) +'px';
109575
- }
109576
- if(target.offsetLeft<=0) {
109689
+ }
109690
+ if (containerHeight - target.offsetTop <= target.offsetHeight / 2) {
109691
+ target.style.top = containerHeight - target.offsetHeight + 'px';
109692
+ }
109693
+ if (target.offsetLeft + target.offsetWidth <= target.offsetWidth / 2) {
109577
109694
  target.style.left = '0px';
109578
- }
109579
- */
109580
- if (target.offsetTop + target.offsetHeight <= target.offsetHeight / 2) {
109581
- target.style.top = '0px';
109582
- }
109583
- if (containerHeight - target.offsetTop <= target.offsetHeight / 2) {
109584
- target.style.top = containerHeight - target.offsetHeight + 'px';
109585
- }
109586
- if (target.offsetLeft + target.offsetWidth <= target.offsetWidth / 2) {
109587
- target.style.left = '0px';
109588
- }
109589
- if (containerWidth - target.offsetLeft <= target.offsetWidth / 2) {
109590
- target.style.left = containerWidth - target.offsetWidth + 'px';
109695
+ }
109696
+ if (containerWidth - target.offsetLeft <= target.offsetWidth / 2) {
109697
+ target.style.left = containerWidth - target.offsetWidth + 'px';
109698
+ }
109591
109699
  }
109592
109700
 
109593
109701
  // Replace with ruler's alignment
@@ -113959,6 +114067,9 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
113959
114067
  let clonedDiv = block.cloneNode(true);
113960
114068
  clonedDiv.style.top = '20%';
113961
114069
  clonedDiv.style.left = '20%';
114070
+ clonedDiv.style.transform = ''; // clear anim
114071
+ clonedDiv.style.transition = '';
114072
+ clonedDiv.style.opacity = '';
113962
114073
  if (builder) {
113963
114074
  const cloneBuilder = clonedDiv.querySelector(this.container);
113964
114075
  cloneBuilder.innerHTML = '';
@@ -113968,7 +114079,7 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
113968
114079
  this.applyBehaviorOn(cloneBuilder);
113969
114080
  cloneBuilder.click();
113970
114081
  } else {
113971
- block.parentNode.appendChild(clonedDiv);
114082
+ box.appendChild(clonedDiv);
113972
114083
  }
113973
114084
  block.classList.remove('active');
113974
114085
  this.doc.querySelectorAll('.clone').forEach(elm => elm.parentNode.removeChild(elm));
@@ -119029,6 +119140,23 @@ class AnimateScroll {
119029
119140
  this.builderStuff = builderStuff;
119030
119141
  let html = `
119031
119142
  <style>
119143
+
119144
+ .is-modal.animatescroll {
119145
+ width: 370px !important;
119146
+ height: 85vh !important;
119147
+ top: 10vh !important;
119148
+ bottom: auto !important;
119149
+ left: auto !important;
119150
+ right: 90px !important;
119151
+ z-index: 10002 !important;
119152
+ font-size: 12px;
119153
+ max-height: 1006px;
119154
+ }
119155
+ .animatescroll .is-modal-bar {
119156
+ font-size: 12px !important;
119157
+ }
119158
+
119159
+
119032
119160
  #_cbhtml .is-side.animatescroll,
119033
119161
  .is-ui .is-side.animatescroll {
119034
119162
  width: 370px;
@@ -119075,7 +119203,7 @@ class AnimateScroll {
119075
119203
  position: absolute;
119076
119204
  top: 0;
119077
119205
  box-sizing: border-box;
119078
- border-top: transparent 245px solid !important;
119206
+ border-top: transparent 208px solid !important;
119079
119207
  }
119080
119208
  #divEnterAnim, #divLeaveAnim, #divAnimSettings {
119081
119209
  border-top: transparent 55px solid !important;
@@ -119163,7 +119291,7 @@ class AnimateScroll {
119163
119291
  }
119164
119292
 
119165
119293
  .div-anim-settings,.div-wizard-settings{
119166
- height: calc(100vh - 34px)
119294
+ height: 100%;
119167
119295
  }
119168
119296
  .div-wizard-settings{
119169
119297
  padding: 10px 15px 0 18px !important;
@@ -119174,19 +119302,23 @@ class AnimateScroll {
119174
119302
  }
119175
119303
  </style>
119176
119304
 
119177
- <div class="is-side animatescroll" style="display: block;" tabindex="-1" role="dialog" aria-modal="true" aria-hidden="true">
119178
-
119179
- <div class="side-title">${out('Animation')}</div>
119180
-
119181
- <button tabindex="-1" title="${out('Close')}" class="is-side-close" style="z-index:2;background:transparent;width:25px;height:25px;position:absolute;top:10px;right:13px;box-sizing:border-box;padding:0;line-height:25px;font-size: 12px;text-align:center;cursor:pointer;box-shadow:none;"><svg class="is-icon-flex" style="width:25px;height:25px;"><use xlink:href="#ion-ios-close-empty"></use></svg></button>
119305
+ <div class="is-modal is-modal-content animatescroll keep-selection" tabindex="-1" role="dialog" aria-modal="true" aria-hidden="true">
119306
+ <div class="is-modal-bar is-draggable" draggable="">
119307
+ <span>${out('Animation')}</span>
119308
+ <button class="is-modal-close" tabindex="-1" title="${out('Close')}">
119309
+ <svg class="is-icon-flex" style="width:23px;height:23px;"><use xlink:href="#ion-ios-close-empty"></use></svg>
119310
+ </button>
119311
+ </div>
119312
+ <div style="position:absolute;box-sizing:border-box;top:0;left:0;width:100%;height:100%;border-top:transparent 35px solid;overflow-y:hidden;overflow-x:auto;">
119182
119313
 
119183
- <button tabindex="-1" title="${out('Edit')}" class="cmd-anim-edit" style="z-index:3;width:25px;height:25px;position:absolute;top:64px;right:13px;box-sizing:border-box;padding:0;line-height:25px;font-size: 12px;text-align:center;cursor:pointer;box-shadow:none;"><svg class="is-icon-flex"><use xlink:href="#icon-pencil"></use></svg></button>
119314
+ <button tabindex="-1" title="${out('Edit')}" class="cmd-anim-edit" style="z-index:3;width:25px;height:25px;position:absolute;top:30px;right:13px;box-sizing:border-box;padding:0;line-height:25px;font-size: 12px;text-align:center;cursor:pointer;box-shadow:none;"><svg class="is-icon-flex"><use xlink:href="#icon-pencil"></use></svg></button>
119184
119315
 
119185
119316
  <div class="div-anim-settings" style="display:none">
119186
119317
 
119187
119318
  <div class="div-anim-apply-to" style="padding:18px 10px 22px 18px;z-index:2;position:relative;">
119188
119319
  <div class="anim-label" style="margin-bottom:5px">${out('Apply To')}:</div>
119189
- <div class="flex-wrap">
119320
+ <div class="flex-wrap" style="height:70px">
119321
+ <button title="${out('Block')}" class="cmd-target on" data-command="target" data-value="block">${out('Block')}</button>
119190
119322
  <button title="${out('Element')}" class="cmd-target on" data-command="target" data-value="element">${out('Element')}</button>
119191
119323
  <button title="${out('Column')}" class="cmd-target" data-command="target" data-value="column">${out('Column')}</button>
119192
119324
  <button title="${out('Row')}" class="cmd-target" data-command="target" data-value="row">${out('Row')}</button>
@@ -119961,7 +120093,7 @@ class AnimateScroll {
119961
120093
  </button>
119962
120094
  </div>
119963
120095
 
119964
- <div class="anim-preset-list" style="height: calc(100vh - 97px);
120096
+ <div class="anim-preset-list" style="height: calc(100% - 63px);
119965
120097
  overflow: auto;
119966
120098
  width: 347px;">
119967
120099
  <div style="display:flex;
@@ -120015,14 +120147,15 @@ class AnimateScroll {
120015
120147
 
120016
120148
  </div>
120017
120149
  `;
120018
- dom$2.appendHtml(builderStuff, html);
120019
- const modalAnimateScroll = builderStuff.querySelector('.is-side.animatescroll');
120150
+ dom$2.appendHtml(builderStuff, html); // const modalAnimateScroll = builderStuff.querySelector('.is-side.animatescroll');
120151
+
120152
+ const modalAnimateScroll = builderStuff.querySelector('.is-modal.animatescroll');
120020
120153
  this.modalAnimateScroll = modalAnimateScroll;
120021
120154
  const divEnterAnim = modalAnimateScroll.querySelector('#divEnterAnim');
120022
120155
  this.divEnterAnim = divEnterAnim;
120023
120156
  const divLeaveAnim = modalAnimateScroll.querySelector('#divLeaveAnim');
120024
120157
  this.divLeaveAnim = divLeaveAnim;
120025
- const btnClose = modalAnimateScroll.querySelector('.is-side-close');
120158
+ const btnClose = modalAnimateScroll.querySelector('.is-modal-close');
120026
120159
  btnClose.addEventListener('click', () => {
120027
120160
  this.close();
120028
120161
  });
@@ -121514,7 +121647,7 @@ class AnimateScroll {
121514
121647
  if (activeCol) section = activeCol.closest('.is-section');
121515
121648
  let elms; // elms = section.querySelectorAll('*');
121516
121649
 
121517
- elms = document.querySelectorAll('[data-bottom-top],[data-center],[data-center-bottom],[data-100-top],[data-50-top],[data-top],[data-top-bottom],[data-center-top],[data--300-bottom],[data--150-bottom],[data--50-bottom],[data-bottom],[data-100-bottom],[data-150-bottom],[data-400-bottom],' + '[data--400-bottom],[data--200-bottom],[data--100-bottom],[data-50-bottom],[data-200-bottom],[data-300-bottom],' + '[data-in],[data-in-150],[data-in-300],' + '[data-cen--150],[data-cen],[data-cen-150],[data-out--300],[data-out--150],[data-out]' + '[data-t],[data-t-100],[data-t-200],[data-t-300],[data-t-400],' + '[data-t-500],[data-t-600],[data-t-700],[data-t-800],[data-t-900],[data-t-1000],' + '[data-t-1100],[data-t-1200],[data-t-1300],[data-t-1400],[data-t-1500],[data-t-1600],' + '[data-t-1700],[data-t-1800],[data-t-1900],[data-t-2000],[data-t-2100],[data-t-2200],' + '[data-t-2300],[data-t-2400],[data-t-2500],[data-t-2600],[data-t-2700],[data-t-2800]');
121650
+ elms = section.querySelectorAll('[data-bottom-top],[data-center],[data-center-bottom],[data-100-top],[data-50-top],[data-top],[data-top-bottom],[data-center-top],[data--300-bottom],[data--150-bottom],[data--50-bottom],[data-bottom],[data-100-bottom],[data-150-bottom],[data-400-bottom],' + '[data--400-bottom],[data--200-bottom],[data--100-bottom],[data-50-bottom],[data-200-bottom],[data-300-bottom],' + '[data-in],[data-in-150],[data-in-300],' + '[data-cen--150],[data-cen],[data-cen-150],[data-out--300],[data-out--150],[data-out]' + '[data-t],[data-t-100],[data-t-200],[data-t-300],[data-t-400],' + '[data-t-500],[data-t-600],[data-t-700],[data-t-800],[data-t-900],[data-t-1000],' + '[data-t-1100],[data-t-1200],[data-t-1300],[data-t-1400],[data-t-1500],[data-t-1600],' + '[data-t-1700],[data-t-1800],[data-t-1900],[data-t-2000],[data-t-2100],[data-t-2200],' + '[data-t-2300],[data-t-2400],[data-t-2500],[data-t-2600],[data-t-2700],[data-t-2800]');
121518
121651
  elms.forEach(elm => {
121519
121652
  elm.removeAttribute('data-center');
121520
121653
  elm.removeAttribute('data-center-top');
@@ -121549,20 +121682,21 @@ class AnimateScroll {
121549
121682
  elm.removeAttribute('data-hidden-onstart');
121550
121683
  elm.style.transform = '';
121551
121684
  elm.style.transition = '';
121552
- elm.style.opacity = ''; // console.log(elm)
121685
+ elm.style.opacity = '';
121686
+ this.restart(); // console.log(elm)
121553
121687
  });
121554
121688
  elms = section.querySelectorAll('.is-animated');
121555
121689
  elms.forEach(elm => {
121556
121690
  // if(elm.classList.contains('is-overlay-bg')) return;
121557
121691
  this.cleanupBasic(elm);
121558
121692
  this.cleanupDelay(elm);
121559
- });
121560
- setTimeout(() => {
121561
- // if (this.builder.win.skrollrr) {
121562
- // this.builder.win.skrollrr.refresh();
121563
- // }
121564
- this.restart();
121565
- }, 30); // Refresh
121693
+ }); // setTimeout(()=>{
121694
+ // // if (this.builder.win.skrollrr) {
121695
+ // // this.builder.win.skrollrr.refresh();
121696
+ // // }
121697
+ // this.restart();
121698
+ // },30);
121699
+ // Refresh
121566
121700
 
121567
121701
  this.builder.settings.onRender();
121568
121702
  }
@@ -121617,9 +121751,28 @@ class AnimateScroll {
121617
121751
  const addPreset = box => {
121618
121752
  let index = start;
121619
121753
  const chkPresetAnimOnce = this.modalAnimateScroll.querySelector('#chkPresetAnimOnce');
121620
- const rows = box.querySelectorAll('.is-container > div');
121621
- rows.forEach(row => {
121622
- const cols = this.builder.editor.dom.elementChildren(row);
121754
+ const rows = box.querySelectorAll('.is-container > div, .is-block .is-block-overlay');
121755
+ rows.forEach(elm => {
121756
+ if (elm.classList.contains('is-block-overlay') && !elm.closest('clone')) {
121757
+ if (elm.querySelector('.is-container')) return;
121758
+ elm.style.transition = 'none';
121759
+ elm.classList.add('is-animated');
121760
+
121761
+ if (chkPresetAnimOnce.checked) {
121762
+ elm.classList.add('once');
121763
+ } else {
121764
+ elm.classList.remove('once');
121765
+ } // elm.classList.add('is-fadeInUp');
121766
+ // process(elm, index);
121767
+
121768
+
121769
+ elm.classList.add(presetName);
121770
+ if (index !== 0) elm.classList.add(`delay-${index * delay}ms`);
121771
+ elm.classList.remove('is-inview');
121772
+ index++;
121773
+ }
121774
+
121775
+ const cols = this.builder.editor.dom.elementChildren(elm);
121623
121776
  cols.forEach(col => {
121624
121777
  if (col.innerText.trim() === '' && !col.querySelector('img') && !col.querySelector('iframe') && !col.querySelector('video') && !col.querySelector('audio') && !col.querySelector('i')) return;
121625
121778
  col.style.transition = 'none'; // this.cleanupBasic(col);
@@ -121639,8 +121792,8 @@ class AnimateScroll {
121639
121792
  if (index !== 0) col.classList.add(`delay-${index * delay}ms`);
121640
121793
  col.classList.remove('is-inview');
121641
121794
  index++;
121642
- }); // row.setAttribute('data-bottom-top', 'transform: translateY(125px)');
121643
- // row.setAttribute('data-center', 'transform: translateY(0px)');
121795
+ }); // elm.setAttribute('data-bottom-top', 'transform: translateY(125px)');
121796
+ // elm.setAttribute('data-center', 'transform: translateY(0px)');
121644
121797
  });
121645
121798
  start++;
121646
121799
  };
@@ -121692,6 +121845,12 @@ class AnimateScroll {
121692
121845
  }
121693
121846
 
121694
121847
  restart() {
121848
+ if (this.builder.controlpanel.activeBlock && this.builder.editor.activeElement) {
121849
+ // cannot handle editable block
121850
+ if (this.builder.win.pageReRender) this.builder.win.pageReRender();
121851
+ return;
121852
+ }
121853
+
121695
121854
  this.noRead = true; // Save selection
121696
121855
 
121697
121856
  let target = this.getTarget();
@@ -121700,6 +121859,7 @@ class AnimateScroll {
121700
121859
  if (this.builder.editor.activeElement) this.builder.editor.activeElement.setAttribute('data-save-element', '1');
121701
121860
  if (this.builder.activeBox) this.builder.activeBox.setAttribute('data-save-box', '1');
121702
121861
  if (this.builder.activeSection) this.builder.activeSection.setAttribute('data-save-section', '1');
121862
+ if (this.builder.controlpanel.activeBlock) this.builder.controlpanel.activeBlock.setAttribute('data-save-block', '1');
121703
121863
  this.builder.markScrollTarget(this.builder.activeSection); //--- Same as undo/redo process ---
121704
121864
 
121705
121865
  const wrapper = this.builder.wrapperEl;
@@ -121775,6 +121935,14 @@ class AnimateScroll {
121775
121935
  this.builder.activeSection = section;
121776
121936
  }
121777
121937
 
121938
+ let block = this.builder.doc.querySelector('[data-save-block]');
121939
+
121940
+ if (block) {
121941
+ block.classList.add('active');
121942
+ block.removeAttribute('data-save-block');
121943
+ this.builder.controlpanel.activeBlock = block;
121944
+ }
121945
+
121778
121946
  setTimeout(() => {
121779
121947
  this.noRead = false;
121780
121948
  }, 100);
@@ -121835,10 +122003,34 @@ class AnimateScroll {
121835
122003
  }
121836
122004
 
121837
122005
  clickContent() {
122006
+ // Show hide buttons
122007
+ let btns = this.modalAnimateScroll.querySelectorAll('.cmd-target');
122008
+ btns.forEach(btn => btn.style.display = 'none');
122009
+ let activeElement = this.builder.editor.inspectedElement;
122010
+ let block = this.getBlock();
122011
+ btns.forEach(btn => {
122012
+ if (block) {
122013
+ let s = btn.getAttribute('data-value');
122014
+
122015
+ if (s === 'block' || s === 'box' || s === 'section' || s === 'overlay' || s === 'bg') {
122016
+ btn.style.display = '';
122017
+ }
122018
+ } else if (activeElement) {
122019
+ let s = btn.getAttribute('data-value');
122020
+
122021
+ if (s !== 'block') {
122022
+ btn.style.display = '';
122023
+ }
122024
+ } else {
122025
+ let s = btn.getAttribute('data-value');
122026
+
122027
+ if (s === 'box' || s === 'section' || s === 'overlay' || s === 'bg') {
122028
+ btn.style.display = '';
122029
+ }
122030
+ }
122031
+ });
121838
122032
  let elms = this.modalAnimateScroll.querySelectorAll('.cmd-target');
121839
- elms.forEach(elm => {
121840
- elm.classList.remove('on');
121841
- }); // Dynamically choose target based on selected element
122033
+ elms.forEach(elm => elm.classList.remove('on')); // Dynamically choose target based on selected element
121842
122034
 
121843
122035
  let currentTarget = this.readTarget();
121844
122036
 
@@ -121867,11 +122059,23 @@ class AnimateScroll {
121867
122059
  } else if (currentTarget.name === 'section') {
121868
122060
  const btn = this.modalAnimateScroll.querySelector('.cmd-target[data-value=section]');
121869
122061
  btn.classList.add('on');
122062
+ } else if (currentTarget.name === 'block') {
122063
+ const btn = this.modalAnimateScroll.querySelector('.cmd-target[data-value=block]');
122064
+ btn.classList.add('on');
121870
122065
  }
121871
122066
  } else {
121872
- // no animation on the selected element
121873
- const btn = this.modalAnimateScroll.querySelector('.cmd-target[data-value=element]');
121874
- btn.classList.add('on');
122067
+ // let block = this.getBlock();
122068
+ if (block) {
122069
+ const btn = this.modalAnimateScroll.querySelector('.cmd-target[data-value=block]');
122070
+ btn.classList.add('on');
122071
+ } else if (activeElement) {
122072
+ // no animation on the selected element
122073
+ const btn = this.modalAnimateScroll.querySelector('.cmd-target[data-value=element]');
122074
+ btn.classList.add('on');
122075
+ } else {
122076
+ const btn = this.modalAnimateScroll.querySelector('.cmd-target[data-value=box]');
122077
+ btn.classList.add('on');
122078
+ }
121875
122079
  }
121876
122080
 
121877
122081
  this.read();
@@ -123228,17 +123432,41 @@ class AnimateScroll {
123228
123432
  if (section) activeElement = section;
123229
123433
  }
123230
123434
 
123435
+ if (target === 'block') {
123436
+ const block = this.getBlock();
123437
+ if (block) activeElement = block;
123438
+ }
123439
+
123231
123440
  return {
123232
123441
  'element': activeElement ? activeElement : false,
123233
123442
  'name': target ? target : false
123234
123443
  };
123235
123444
  }
123236
123445
 
123446
+ getBlock() {
123447
+ let block = this.builder.doc.querySelector('.is-block.active');
123448
+ if (!block) return false;
123449
+
123450
+ if (block.classList.contains('editable')) {
123451
+ return false;
123452
+ } else {
123453
+ return block;
123454
+ }
123455
+ }
123456
+
123237
123457
  readTarget(s) {
123238
123458
  if (!s) {
123239
123459
  // element (inspectedElement first)
123240
123460
  let activeElement = this.builder.editor.inspectedElement; // if(!activeElement) return false;
123241
123461
 
123462
+ let block = this.getBlock(); // if(block && !activeElement) {
123463
+ // return this.readTarget('block');
123464
+ // }
123465
+
123466
+ if (block) {
123467
+ return this.readTarget('block');
123468
+ }
123469
+
123242
123470
  if (!activeElement) {
123243
123471
  return this.readTarget('bg');
123244
123472
  }
@@ -123282,6 +123510,10 @@ class AnimateScroll {
123282
123510
  } else {
123283
123511
  let activeElement;
123284
123512
 
123513
+ if (s === 'block') {
123514
+ activeElement = this.getBlock();
123515
+ }
123516
+
123285
123517
  if (s === 'element') {
123286
123518
  activeElement = this.builder.editor.activeElement;
123287
123519
  }
@@ -123323,6 +123555,7 @@ class AnimateScroll {
123323
123555
  }
123324
123556
 
123325
123557
  if (!activeElement) {
123558
+ if (s === 'block') return this.readTarget('box');
123326
123559
  if (s === 'element') return this.readTarget('column');
123327
123560
  if (s === 'column') return this.readTarget('row');
123328
123561
  if (s === 'row') return this.readTarget('container');
@@ -123367,6 +123600,7 @@ class AnimateScroll {
123367
123600
  'name': s
123368
123601
  };
123369
123602
  } else {
123603
+ if (s === 'block') return this.readTarget('box');
123370
123604
  if (s === 'element') return this.readTarget('column');
123371
123605
  if (s === 'column') return this.readTarget('row');
123372
123606
  if (s === 'row') return this.readTarget('container');
@@ -123461,6 +123695,7 @@ class AnimateScroll {
123461
123695
  if (modalEditBox) modalEditBox.style.display = '';
123462
123696
  const modalEditSection = this.builderStuff.querySelector('.editsection');
123463
123697
  if (modalEditSection) modalEditSection.style.display = '';
123698
+ localStorage.setItem('_animationmodal', '1');
123464
123699
  }
123465
123700
 
123466
123701
  close() {
@@ -123468,6 +123703,7 @@ class AnimateScroll {
123468
123703
 
123469
123704
  this.builder.doc.body.classList.remove('selection-only');
123470
123705
  document.body.classList.remove('selection-only');
123706
+ localStorage.removeItem('_animationmodal');
123471
123707
  }
123472
123708
 
123473
123709
  }
@@ -124112,6 +124348,7 @@ class Timeline {
124112
124348
  <div class="flex-wrap">
124113
124349
  <div class="flex-wrap" style="margin-right:15px;width: 120px;">
124114
124350
  <select class="input-target">
124351
+ <option value="block">${out('Block')}</option>
124115
124352
  <option value="element">${out('Element')}</option>
124116
124353
  <option value="column">${out('Column')}</option>
124117
124354
  <option value="row">${out('Row')}</option>
@@ -124677,9 +124914,40 @@ class Timeline {
124677
124914
  }
124678
124915
 
124679
124916
  clickContent() {
124680
- let inpTarget = this.modalTimeline.querySelector('.input-target');
124681
- inpTarget.value = 'element'; // default
124682
- // Dynamically choose target based on selected element
124917
+ let inpTarget = this.modalTimeline.querySelector('.input-target'); // inpTarget.value = 'element'; // default
124918
+ // Show/hide target options
124919
+
124920
+ let options = inpTarget.querySelectorAll('option');
124921
+ options.forEach(opt => opt.style.display = 'none');
124922
+ let activeElement = this.builder.editor.inspectedElement;
124923
+ let block = this.getBlock();
124924
+ options.forEach(opt => {
124925
+ if (block) {
124926
+ let s = opt.getAttribute('value');
124927
+
124928
+ if (s === 'block' || s === 'box' || s === 'section' || s === 'overlay' || s === 'bg') {
124929
+ opt.style.display = '';
124930
+ }
124931
+
124932
+ inpTarget.value = 'block'; // default
124933
+ } else if (activeElement) {
124934
+ let s = opt.getAttribute('value');
124935
+
124936
+ if (s !== 'block') {
124937
+ opt.style.display = '';
124938
+ }
124939
+
124940
+ inpTarget.value = 'element'; // default
124941
+ } else {
124942
+ let s = opt.getAttribute('value');
124943
+
124944
+ if (s === 'box' || s === 'section' || s === 'overlay' || s === 'bg') {
124945
+ opt.style.display = '';
124946
+ }
124947
+
124948
+ inpTarget.value = 'box'; // default
124949
+ }
124950
+ }); // Dynamically choose target based on selected element
124683
124951
 
124684
124952
  let currentTarget = this.readTarget();
124685
124953
 
@@ -124700,12 +124968,17 @@ class Timeline {
124700
124968
  inpTarget.value = 'box';
124701
124969
  } else if (currentTarget.name === 'section') {
124702
124970
  inpTarget.value = 'section';
124703
- }
124971
+ } else if (currentTarget.name === 'block') {
124972
+ inpTarget.value = 'block';
124973
+ } // this.read();
124704
124974
 
124705
- this.read();
124706
- } else {
124707
- this.clearSettings();
124708
124975
  }
124976
+ /*else {
124977
+ this.clearSettings();
124978
+ }*/
124979
+
124980
+
124981
+ this.read();
124709
124982
  }
124710
124983
 
124711
124984
  clearSettings() {
@@ -125900,16 +126173,39 @@ class Timeline {
125900
126173
  if (section) activeElement = section;
125901
126174
  }
125902
126175
 
126176
+ if (target === 'block') {
126177
+ const block = this.getBlock();
126178
+ if (block) activeElement = block;
126179
+ }
126180
+
125903
126181
  return {
125904
126182
  'element': activeElement ? activeElement : false,
125905
126183
  'name': target ? target : false
125906
126184
  };
125907
126185
  }
125908
126186
 
126187
+ getBlock() {
126188
+ let block = this.builder.doc.querySelector('.is-block.active');
126189
+ if (!block) return false;
126190
+
126191
+ if (block.classList.contains('editable')) {
126192
+ return false;
126193
+ } else {
126194
+ return block;
126195
+ }
126196
+ }
126197
+
125909
126198
  readTarget(s) {
125910
126199
  if (!s) {
125911
126200
  // element (inspectedElement first)
125912
126201
  let activeElement = this.builder.editor.inspectedElement;
126202
+ let block = this.getBlock(); // if(block && !activeElement) {
126203
+ // return this.readTarget('block');
126204
+ // }
126205
+
126206
+ if (block) {
126207
+ return this.readTarget('block');
126208
+ }
125913
126209
 
125914
126210
  if (!activeElement) {
125915
126211
  return this.readTarget('bg');
@@ -125946,6 +126242,10 @@ class Timeline {
125946
126242
  } else {
125947
126243
  let activeElement;
125948
126244
 
126245
+ if (s === 'block') {
126246
+ activeElement = this.getBlock();
126247
+ }
126248
+
125949
126249
  if (s === 'element') {
125950
126250
  activeElement = this.builder.editor.activeElement;
125951
126251
  }
@@ -125987,6 +126287,7 @@ class Timeline {
125987
126287
  }
125988
126288
 
125989
126289
  if (!activeElement) {
126290
+ if (s === 'block') return this.readTarget('box');
125990
126291
  if (s === 'element') return this.readTarget('column');
125991
126292
  if (s === 'column') return this.readTarget('row');
125992
126293
  if (s === 'row') return this.readTarget('container');
@@ -126023,6 +126324,7 @@ class Timeline {
126023
126324
  'name': s
126024
126325
  };
126025
126326
  } else {
126327
+ if (s === 'block') return this.readTarget('box');
126026
126328
  if (s === 'element') return this.readTarget('column');
126027
126329
  if (s === 'column') return this.readTarget('row');
126028
126330
  if (s === 'row') return this.readTarget('container');
@@ -134307,11 +134609,20 @@ class Section {
134307
134609
  if (target === 'xs') {
134308
134610
  section.classList.add('xs-hidden');
134309
134611
  } else if (target === 'sm') {
134310
- section.classList.add('sm-hidden');
134612
+ section.classList.add('sm-hidden'); // hide all others smaller than tablet portrait
134613
+
134614
+ section.classList.add('xs-hidden');
134311
134615
  } else if (target === 'md') {
134312
- section.classList.add('md-hidden');
134616
+ section.classList.add('md-hidden'); // hide all others smaller than tablet landscape
134617
+
134618
+ section.classList.add('sm-hidden');
134619
+ section.classList.add('xs-hidden');
134313
134620
  } else if (target === '') {
134314
- section.classList.add('desktop-hidden');
134621
+ section.classList.add('desktop-hidden'); // hide all others smaller than desktop
134622
+
134623
+ section.classList.add('md-hidden');
134624
+ section.classList.add('sm-hidden');
134625
+ section.classList.add('xs-hidden');
134315
134626
  }
134316
134627
  }
134317
134628
 
@@ -145491,7 +145802,7 @@ class IframePanel {
145491
145802
 
145492
145803
  if (hasPin) {
145493
145804
  setTimeout(() => {
145494
- this.builder.scrollToMarkedTarget(); // This runs pageReRender()
145805
+ this.builder.scrollToMarkedTarget(false); // false => no need to run pageReRender(), because box/flex.js alwasy run it on resizing
145495
145806
  }, 300);
145496
145807
  } // Sync with external buttons
145497
145808
 
@@ -145549,7 +145860,7 @@ class IframePanel {
145549
145860
 
145550
145861
  if (hasPin) {
145551
145862
  setTimeout(() => {
145552
- this.builder.scrollToMarkedTarget(); // This runs pageReRender()
145863
+ this.builder.scrollToMarkedTarget(false); // false => no need to run pageReRender(), because box/flex.js alwasy run it on resizing
145553
145864
  }, 300);
145554
145865
  } // Sync with external buttons
145555
145866
 
@@ -150400,6 +150711,15 @@ Add an image for each feature.`, 'Create a new block showcasing a photo gallery
150400
150711
  z-index:1;
150401
150712
  }
150402
150713
 
150714
+ /* Group color */
150715
+ .block-active,
150716
+ .is-group.active {
150717
+ background-color: #81ffd538;
150718
+ }
150719
+ .block-active .is-block {
150720
+ outline: #51e1b2a3 2px solid;
150721
+ outline-offset: 2px;
150722
+ }
150403
150723
 
150404
150724
  i.bi, i.icon { display: inline-flex; }
150405
150725
 
@@ -151253,6 +151573,23 @@ Add an image for each feature.`, 'Create a new block showcasing a photo gallery
151253
151573
  }
151254
151574
  }, 300);
151255
151575
  if (this.eb) this.eb.refresh(); // freeform
151576
+
151577
+ if (localStorage.getItem('_animationmodal') != null) {
151578
+ const box = this.wrapperEl.querySelector('.is-box');
151579
+ const section = this.wrapperEl.querySelector('.is-section');
151580
+
151581
+ if (box) {
151582
+ box.classList.add('box-select');
151583
+ this.activeBox = box;
151584
+ }
151585
+
151586
+ if (section) {
151587
+ section.classList.add('section-select');
151588
+ this.activeSection = section;
151589
+ }
151590
+
151591
+ this.animateScroll.edit();
151592
+ }
151256
151593
  } // pageSetup
151257
151594
 
151258
151595
 
@@ -152901,8 +153238,12 @@ Add an image for each feature.`, 'Create a new block showcasing a photo gallery
152901
153238
  if (element) element.classList.add('scroll-target');
152902
153239
  }
152903
153240
 
152904
- scrollToMarkedTarget() {
152905
- if (this.win.pageReRender) this.win.pageReRender();
153241
+ scrollToMarkedTarget(reRender = true) {
153242
+ // used by: addIdea, section.js, iframerpanel.js (reRender=false, during resize)
153243
+ if (this.win.pageReRender && reRender) {
153244
+ this.win.pageReRender();
153245
+ }
153246
+
152906
153247
  let scrollTarget = this.doc.querySelector('.scroll-target');
152907
153248
 
152908
153249
  if (scrollTarget) {