@innovastudio/contentbox 1.6.37 → 1.6.39

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@innovastudio/contentbox",
3
3
  "type": "module",
4
- "version": "1.6.37",
4
+ "version": "1.6.39",
5
5
  "description": "",
6
6
  "main": "public/contentbox/contentbox.esm.js",
7
7
  "files": [
@@ -52,7 +52,7 @@
52
52
  "ws": "^8.13.0"
53
53
  },
54
54
  "dependencies": {
55
- "@innovastudio/contentbuilder": "^1.5.17",
55
+ "@innovastudio/contentbuilder": "^1.5.24",
56
56
  "js-beautify": "^1.14.0"
57
57
  }
58
58
  }
@@ -43148,6 +43148,7 @@ const renderSnippetPanel = (builder, snippetOpen) => {
43148
43148
  obj.destroy();
43149
43149
  }
43150
43150
  });
43151
+ builder.sortableOnCanvas = [];
43151
43152
  }
43152
43153
  if (builder.sortableOnPage) builder.sortableOnPage.destroy();
43153
43154
  let dummies = builder.doc.querySelectorAll('.block-dummy');
@@ -78220,26 +78221,37 @@ class RowTool {
78220
78221
  if (btnCellAdd) dom.addEventListener(btnCellAdd, 'click', () => {
78221
78222
  let cell = util.cellSelected();
78222
78223
  if (!cell) return;
78224
+ const viewportHeight = window.innerHeight;
78225
+ const newPos = util.getElementPosition(btnCellAdd);
78226
+ let top = newPos.top;
78227
+ let left = newPos.left;
78223
78228
  renderQuickAdd(this.builder);
78224
78229
  let quickadd = this.builder.builderStuff.querySelector('.is-pop.quickadd');
78225
78230
  let tabs = quickadd.querySelector('.is-pop-tabs');
78226
78231
  tabs.style.display = 'flex';
78227
- const newPos = util.getElementPosition(btnCellAdd);
78228
- let top = newPos.top + window.pageYOffset;
78229
- let left = newPos.left + window.pageXOffset;
78230
- if (this.builder.iframe) {
78231
- left = left + 3;
78232
- }
78233
78232
  util.showPop(quickadd, false, btnCellAdd);
78234
- quickadd.style.top = top + 35 + 'px';
78235
- quickadd.style.left = left + 'px';
78236
- dom.removeClass(quickadd, 'arrow-bottom');
78237
- dom.removeClass(quickadd, 'arrow-left');
78238
- dom.removeClass(quickadd, 'arrow-right');
78239
- dom.removeClass(quickadd, 'center');
78240
- dom.removeClass(quickadd, 'right');
78241
- dom.addClass(quickadd, 'arrow-top');
78242
- dom.addClass(quickadd, 'left');
78233
+ const h = quickadd.offsetHeight;
78234
+ if (viewportHeight - top > h) {
78235
+ // pop bottom
78236
+ quickadd.style.top = top + window.pageYOffset + 35 + 'px';
78237
+ quickadd.style.left = left + 'px';
78238
+ dom.removeClass(quickadd, 'arrow-bottom');
78239
+ dom.removeClass(quickadd, 'arrow-right');
78240
+ dom.removeClass(quickadd, 'arrow-left');
78241
+ dom.removeClass(quickadd, 'center');
78242
+ dom.addClass(quickadd, 'arrow-top');
78243
+ dom.addClass(quickadd, 'left');
78244
+ } else {
78245
+ // pop top
78246
+ quickadd.style.top = top + window.pageYOffset - h - 8 + 'px';
78247
+ quickadd.style.left = left + 'px';
78248
+ dom.removeClass(quickadd, 'arrow-top');
78249
+ dom.removeClass(quickadd, 'arrow-right');
78250
+ dom.removeClass(quickadd, 'arrow-left');
78251
+ dom.removeClass(quickadd, 'center');
78252
+ dom.addClass(quickadd, 'arrow-bottom');
78253
+ dom.addClass(quickadd, 'left');
78254
+ }
78243
78255
  let val = quickadd.querySelector('.active').getAttribute('data-value');
78244
78256
  if (val === 'left') {
78245
78257
  quickadd.setAttribute('data-mode', 'cell-left');
@@ -78279,21 +78291,38 @@ class RowTool {
78279
78291
  if (btnCellMore) dom.addEventListener(btnCellMore, 'click', () => {
78280
78292
  let cell = util.cellSelected();
78281
78293
  if (!cell) return;
78294
+ const viewportHeight = window.innerHeight;
78282
78295
  const newPos = util.getElementPosition(btnCellMore);
78283
- let top = newPos.top + window.pageYOffset;
78284
- let left = newPos.left + window.pageXOffset;
78296
+ let top = newPos.top;
78297
+ let left = newPos.left;
78285
78298
  this.builder.colTool.renderColMore();
78286
78299
  const columnMore = builderStuff.querySelector('.columnmore');
78287
- util.showPop(columnMore, false, btnCellMore);
78288
- columnMore.style.top = top + 35 + 'px';
78289
- columnMore.style.left = left - 7 + 'px';
78290
- dom.removeClass(columnMore, 'arrow-bottom');
78291
- dom.removeClass(columnMore, 'arrow-left');
78292
- dom.removeClass(columnMore, 'arrow-right');
78293
- dom.removeClass(columnMore, 'center');
78294
- dom.removeClass(columnMore, 'right');
78295
- dom.addClass(columnMore, 'arrow-top');
78296
- dom.addClass(columnMore, 'left');
78300
+ setTimeout(() => {
78301
+ // give delay after renderColMore()
78302
+ util.showPop(columnMore, false, btnCellMore);
78303
+ const h = columnMore.offsetHeight;
78304
+ if (viewportHeight - top > h) {
78305
+ columnMore.style.top = top + window.pageYOffset + 35 + 'px';
78306
+ columnMore.style.left = left - 7 + 'px';
78307
+ dom.removeClass(columnMore, 'arrow-bottom');
78308
+ dom.removeClass(columnMore, 'arrow-right');
78309
+ dom.removeClass(columnMore, 'arrow-left');
78310
+ dom.removeClass(columnMore, 'center');
78311
+ dom.removeClass(columnMore, 'right');
78312
+ dom.addClass(columnMore, 'arrow-top');
78313
+ dom.addClass(columnMore, 'left');
78314
+ } else {
78315
+ columnMore.style.top = top + window.pageYOffset - h - 8 + 'px';
78316
+ columnMore.style.left = left - 7 + 'px';
78317
+ dom.removeClass(columnMore, 'arrow-top');
78318
+ dom.removeClass(columnMore, 'arrow-right');
78319
+ dom.removeClass(columnMore, 'arrow-left');
78320
+ dom.removeClass(columnMore, 'center');
78321
+ dom.removeClass(columnMore, 'right');
78322
+ dom.addClass(columnMore, 'arrow-bottom');
78323
+ dom.addClass(columnMore, 'left');
78324
+ }
78325
+ }, 0);
78297
78326
  const btnCellLocking = columnMore.querySelector('.cell-locking');
78298
78327
  if (cell.hasAttribute('data-noedit')) {
78299
78328
  dom.addClass(btnCellLocking, 'on');
@@ -78447,32 +78476,67 @@ class RowTool {
78447
78476
 
78448
78477
  //Hide Column tool (new!)
78449
78478
  util.hideColumnTool();
78479
+
78480
+ /*
78450
78481
  const newPos = util.getElementPosition(btnMore);
78451
78482
  let top = newPos.top + window.pageYOffset;
78452
78483
  let left = newPos.left + window.pageXOffset;
78453
- this.renderRowMore();
78484
+ this.renderRowMore();
78454
78485
  const rowMore = this.rowMore;
78455
-
78456
- // rowMore.style.display = 'flex';
78486
+ // rowMore.style.display = 'flex';
78457
78487
  util.showPop(rowMore, false, btnMore);
78458
78488
  //const w = rowMore.offsetWidth; //to get value, element must not hidden (display:none). So set display:flex before this.
78459
78489
  //const h = rowMore.offsetHeight;
78460
- rowMore.style.top = top - 8 + 'px';
78461
- dom.removeClass(rowMore, 'arrow-bottom');
78462
- dom.removeClass(rowMore, 'arrow-left');
78463
- dom.removeClass(rowMore, 'arrow-right');
78464
- dom.removeClass(rowMore, 'center');
78465
- dom.removeClass(rowMore, 'right');
78466
- dom.removeClass(rowMore, 'left');
78467
- if (this.builder.opts.rowTool === 'right') {
78468
- rowMore.style.left = left - rowMore.offsetWidth - 10 + 'px';
78469
- dom.addClass(rowMore, 'arrow-right');
78470
- dom.addClass(rowMore, 'left');
78471
- } else {
78472
- rowMore.style.left = left + 35 + 'px';
78473
- dom.addClass(rowMore, 'arrow-left');
78474
- dom.addClass(rowMore, 'left');
78475
- }
78490
+ rowMore.style.top = (top - 8) + 'px';
78491
+ dom.removeClass(rowMore,'arrow-bottom');
78492
+ dom.removeClass(rowMore,'arrow-left');
78493
+ dom.removeClass(rowMore,'arrow-right');
78494
+ dom.removeClass(rowMore,'center');
78495
+ dom.removeClass(rowMore,'right');
78496
+ dom.removeClass(rowMore,'left');
78497
+ if(this.builder.opts.rowTool === 'right') {
78498
+
78499
+ rowMore.style.left = (left - rowMore.offsetWidth - 10) + 'px';
78500
+ dom.addClass(rowMore,'arrow-right');
78501
+ dom.addClass(rowMore,'left');
78502
+ } else {
78503
+ rowMore.style.left = (left + 35) + 'px';
78504
+ dom.addClass(rowMore,'arrow-left');
78505
+ dom.addClass(rowMore,'left');
78506
+ }
78507
+ */
78508
+
78509
+ const viewportHeight = window.innerHeight;
78510
+ const newPos = util.getElementPosition(btnMore);
78511
+ let top = newPos.top;
78512
+ let left = newPos.left;
78513
+ this.renderRowMore();
78514
+ const rowMore = this.rowMore;
78515
+ setTimeout(() => {
78516
+ // give delay after renderRowMore()
78517
+ util.showPop(rowMore, false, btnMore);
78518
+ const h = rowMore.offsetHeight;
78519
+ dom.removeClass(rowMore, 'arrow-bottom');
78520
+ dom.removeClass(rowMore, 'arrow-left');
78521
+ dom.removeClass(rowMore, 'arrow-right');
78522
+ dom.removeClass(rowMore, 'center');
78523
+ dom.removeClass(rowMore, 'right');
78524
+ dom.removeClass(rowMore, 'left');
78525
+ if (this.builder.opts.rowTool === 'right') {
78526
+ rowMore.style.left = left - rowMore.offsetWidth - 10 + 'px';
78527
+ dom.addClass(rowMore, 'arrow-right');
78528
+ dom.addClass(rowMore, 'left');
78529
+ } else {
78530
+ rowMore.style.left = left + 35 + 'px';
78531
+ dom.addClass(rowMore, 'arrow-left');
78532
+ dom.addClass(rowMore, 'left');
78533
+ }
78534
+ if (viewportHeight - top > h) {
78535
+ rowMore.style.top = top + window.pageYOffset - 8 + 'px';
78536
+ } else {
78537
+ rowMore.style.top = top + window.pageYOffset - h + btnMore.offsetHeight + 'px';
78538
+ }
78539
+ }, 0);
78476
78540
  let btnRowHtml = rowMore.querySelector('.row-html');
78477
78541
  let btnRowDuplicate = rowMore.querySelector('.row-duplicate');
78478
78542
  if (row.querySelector('[data-html]')) {
@@ -91350,9 +91414,25 @@ class Rte {
91350
91414
  // Reset Zoom
91351
91415
  const btnResetZoom = builderStuff.querySelector('.reset-zoom');
91352
91416
  btnResetZoom.addEventListener('click', () => {
91417
+ this.rteZoomSlider.value = 100;
91353
91418
  this.builder.opts.zoom = 1;
91354
91419
  localStorage.setItem('_zoom', 1); // Save
91355
91420
 
91421
+ // setZoomOnControl
91422
+ if (this.builder.isContentBox) {
91423
+ const wrapper = this.builder.doc.querySelector(this.builder.opts.page);
91424
+ this.builder.setZoomOnControl(wrapper);
91425
+ } else if (this.builder.canvas && !this.builder.isContentBox && this.builder.docContainer) {
91426
+ // freeform
91427
+ const docContainer = this.builder.doc.querySelector(this.builder.docContainer);
91428
+ this.builder.setZoomOnControl(docContainer);
91429
+ } else {
91430
+ const builders = this.builder.doc.querySelectorAll(this.builder.opts.container);
91431
+ builders.forEach(builder => {
91432
+ this.builder.setZoomOnControl(builder);
91433
+ });
91434
+ }
91435
+
91356
91436
  // setZoomOnArea
91357
91437
  this.builder.setZoomOnArea();
91358
91438
  });
@@ -99475,7 +99555,6 @@ class ContentStuff$1 {
99475
99555
  display:flex;
99476
99556
  }
99477
99557
 
99478
-
99479
99558
  .row-outline .is-rowadd-tool,
99480
99559
  .row-active .is-rowadd-tool {
99481
99560
  display:block;
@@ -99884,6 +99963,12 @@ class ContentStuff$1 {
99884
99963
  /*padding: 0 2px 4px !important;*/
99885
99964
  z-index: 1 !important;
99886
99965
  }
99966
+
99967
+ /* Row Lock will hide row tool */
99968
+ .row-lock .is-row-tool,
99969
+ .row-lock .is-rowadd-tool {
99970
+ display: none !important;
99971
+ }
99887
99972
 
99888
99973
  div[data-html] {
99889
99974
  min-height: 70px;
@@ -107343,7 +107428,7 @@ class Common {
107343
107428
 
107344
107429
  if (topTouched && bottomTouched) {
107345
107430
  block.style.top = 0;
107346
- block.style.bottom = 0;
107431
+ if (!block.classList.contains('height-auto')) block.style.bottom = 0; // height-auto should not have bottom=0
107347
107432
  block.style.height = '';
107348
107433
  }
107349
107434
  if (leftTouched && rightTouched) {
@@ -107352,13 +107437,21 @@ class Common {
107352
107437
  block.style.width = '';
107353
107438
  }
107354
107439
  if (bottomTouched && !topTouched) {
107355
- block.style.bottom = 0;
107440
+ if (!block.classList.contains('height-auto')) block.style.bottom = 0; // height-auto should not have bottom=0
107356
107441
  block.style.height = '';
107357
107442
  }
107358
107443
  if (rightTouched && !leftTouched) {
107359
107444
  block.style.right = 0;
107360
107445
  block.style.width = '';
107361
107446
  }
107447
+
107448
+ // reset
107449
+ setTimeout(() => {
107450
+ this.horizontalRulerTop.removeAttribute('data-topTouched');
107451
+ this.horizontalRulerBottom.removeAttribute('data-bottomTouched');
107452
+ this.verticalRulerLeft.removeAttribute('data-leftTouched');
107453
+ this.verticalRulerRight.removeAttribute('data-rightTouched');
107454
+ }, 10);
107362
107455
  }
107363
107456
  applyPixels(block) {
107364
107457
  const zoom = this.zoom;
@@ -108590,6 +108683,8 @@ class Resizable {
108590
108683
  this.doc.addEventListener('mouseup', this.handleResizeEnd);
108591
108684
  this.doc.addEventListener('touchmove', this.handleResizeMove);
108592
108685
  this.doc.addEventListener('touchend', this.handleResizeEnd);
108686
+ document.addEventListener('mouseup', this.handleResizeEnd); // in iframe, mouseup can be triggered outside the iframe (during resizing)
108687
+ document.addEventListener('touchend', this.handleResizeEnd);
108593
108688
  }
108594
108689
  handleResizeMove(event) {
108595
108690
  if (this.isResizing) {
@@ -108640,6 +108735,8 @@ class Resizable {
108640
108735
  this.doc.removeEventListener('mouseup', this.handleResizeEnd);
108641
108736
  this.doc.removeEventListener('touchmove', this.handleResizeMove);
108642
108737
  this.doc.removeEventListener('touchend', this.handleResizeEnd);
108738
+ document.removeEventListener('mouseup', this.handleResizeEnd); // in iframe, mouseup can be triggered outside the iframe (during resizing)
108739
+ document.removeEventListener('touchend', this.handleResizeEnd);
108643
108740
  this.ruler.hideRulers();
108644
108741
  }
108645
108742
  resizeTopLeft(deltaX, deltaY) {
@@ -109060,8 +109157,12 @@ class Draggable {
109060
109157
  target.setAttribute('data-starty', y);
109061
109158
 
109062
109159
  // reset (from applyPercentage bottomTouched)
109063
- target.style.height = target.offsetHeight + 'px';
109064
- target.style.bottom = '';
109160
+ if (target.style.bottom) {
109161
+ if (!target.classList.contains('height-auto')) {
109162
+ target.style.height = target.offsetHeight + 'px';
109163
+ }
109164
+ target.style.bottom = '';
109165
+ }
109065
109166
  this.common.applyPixels(target);
109066
109167
  });
109067
109168
  this.clickedBlock = this.common.getSelectedBlock();
@@ -109184,6 +109285,15 @@ class Draggable {
109184
109285
  if (this.onChange) this.onChange();
109185
109286
  }
109186
109287
  handleSelect(event) {
109288
+ if (!this.doc.querySelector(this.selector + '.active')) {
109289
+ // Make the current scrollbar state (visible or not) to stay during the block select (drag or resize)
109290
+ let scrollbar = this.doc.documentElement.scrollHeight > this.doc.documentElement.clientHeight;
109291
+ if (!scrollbar) {
109292
+ this.doc.body.style.overflowY = 'hidden';
109293
+ } else {
109294
+ this.doc.body.style.overflowY = 'scroll';
109295
+ }
109296
+ }
109187
109297
  const element = event.target;
109188
109298
  if (element.classList.contains('rotate-handle')) return;
109189
109299
  const block = element.closest(this.selector);
@@ -109233,6 +109343,9 @@ class Draggable {
109233
109343
  this.doc.querySelectorAll(this.selector + '.active').forEach(elm => elm.classList.remove('active'));
109234
109344
  this.doc.querySelectorAll('.block-active').forEach(elm => elm.classList.remove('block-active'));
109235
109345
  if (this.onSelectClear) this.onSelectClear();
109346
+
109347
+ // Return back the scrollbar state when clicking on page (not block)
109348
+ this.doc.body.style.overflowY = ''; // see handleSelect()
109236
109349
  }
109237
109350
 
109238
109351
  // Check if multiple selection occurs. If so, add 'multi' class to hide all the handles
@@ -113448,6 +113561,59 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
113448
113561
  }
113449
113562
  });
113450
113563
 
113564
+ // Canvas Mode
113565
+ const copyBlock = e => {
113566
+ const docContainer = this.doc.querySelector(this.docContainer);
113567
+ if ((e.ctrlKey || e.metaKey) && e.which === 67) {
113568
+ //CTRL-C
113569
+ const activeBlock = docContainer.querySelector('.is-block.active'); // always get .cloned
113570
+ if (activeBlock) {
113571
+ this.copyBlock = activeBlock;
113572
+ }
113573
+ }
113574
+ };
113575
+ const pasteBlock = e => {
113576
+ const docContainer = this.doc.querySelector(this.docContainer);
113577
+ if ((e.ctrlKey || e.metaKey) && e.which === 86) {
113578
+ //CTRL-V
113579
+
113580
+ const box = docContainer.querySelector('.is-box.box-select'); // always get .cloned
113581
+ let block = this.copyBlock;
113582
+ if (box && block) {
113583
+ if (document.querySelector('.is-modal.active:not(.is-modal-content)')) return;
113584
+ const focusedElement = e.target;
113585
+ const isEditable = focusedElement.tagName === 'INPUT' || focusedElement.tagName === 'TEXTAREA' || focusedElement.hasAttribute('contenteditable');
113586
+ if (isEditable) return;
113587
+ this.uo.saveForUndo();
113588
+ let block = this.copyBlock;
113589
+ const builder = block.querySelector(this.container);
113590
+ let html = '';
113591
+ if (builder) {
113592
+ html = this.readHtml(builder);
113593
+ }
113594
+ let clonedDiv = block.cloneNode(true);
113595
+ clonedDiv.style.top = '20%';
113596
+ clonedDiv.style.left = '20%';
113597
+ if (builder) {
113598
+ const cloneBuilder = clonedDiv.querySelector(this.container);
113599
+ cloneBuilder.innerHTML = '';
113600
+ box.appendChild(clonedDiv);
113601
+ const range = document.createRange();
113602
+ cloneBuilder.appendChild(range.createContextualFragment(html));
113603
+ this.applyBehaviorOn(cloneBuilder);
113604
+ cloneBuilder.click();
113605
+ } else {
113606
+ block.parentNode.appendChild(clonedDiv);
113607
+ }
113608
+ block.classList.remove('active');
113609
+ this.doc.querySelectorAll('.clone').forEach(elm => elm.parentNode.removeChild(elm));
113610
+ this.doc.querySelectorAll('.cloned').forEach(elm => elm.classList.remove('cloned'));
113611
+ this.eb.refresh();
113612
+ this.opts.onChange();
113613
+ }
113614
+ }
113615
+ };
113616
+
113451
113617
  // SHIFT + Right Clidk to Zoom In
113452
113618
  if (this.canvas && !this.isContentBox && this.docContainer && !this.iframe) {
113453
113619
  //--- see loadHtml ---
@@ -113519,53 +113685,41 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
113519
113685
  document.addEventListener('keydown', e => {
113520
113686
  if ((e.ctrlKey || e.metaKey) && e.which === 67) {
113521
113687
  //CTRL-C
113522
- const activeBlock = docContainer.querySelector('.is-block.active'); // always get .cloned
113523
- if (activeBlock) {
113524
- this.copyBlock = activeBlock;
113525
- }
113688
+ copyBlock(e);
113526
113689
  }
113527
113690
  });
113528
113691
  document.addEventListener('keydown', e => {
113529
113692
  if ((e.ctrlKey || e.metaKey) && e.which === 86) {
113530
113693
  //CTRL-V
113531
-
113532
- const box = docContainer.querySelector('.is-box.box-select'); // always get .cloned
113533
- let block = this.copyBlock;
113534
- if (box && block) {
113535
- if (document.querySelector('.is-modal.active:not(.is-modal-content)')) return;
113536
- const focusedElement = e.target;
113537
- const isEditable = focusedElement.tagName === 'INPUT' || focusedElement.tagName === 'TEXTAREA' || focusedElement.hasAttribute('contenteditable');
113538
- if (isEditable) return;
113539
- this.uo.saveForUndo();
113540
- let block = this.copyBlock;
113541
- const builder = block.querySelector(this.container);
113542
- let html = '';
113543
- if (builder) {
113544
- html = this.readHtml(builder);
113545
- }
113546
- let clonedDiv = block.cloneNode(true);
113547
- clonedDiv.style.top = '20%';
113548
- clonedDiv.style.left = '20%';
113549
- if (builder) {
113550
- const cloneBuilder = clonedDiv.querySelector(this.container);
113551
- cloneBuilder.innerHTML = '';
113552
- box.appendChild(clonedDiv);
113553
- const range = document.createRange();
113554
- cloneBuilder.appendChild(range.createContextualFragment(html));
113555
- this.applyBehaviorOn(cloneBuilder);
113556
- cloneBuilder.click();
113557
- } else {
113558
- block.parentNode.appendChild(clonedDiv);
113559
- }
113560
- block.classList.remove('active');
113561
- this.doc.querySelectorAll('.clone').forEach(elm => elm.parentNode.removeChild(elm));
113562
- this.doc.querySelectorAll('.cloned').forEach(elm => elm.classList.remove('cloned'));
113563
- this.eb.refresh();
113564
- this.opts.onChange();
113565
- }
113694
+ pasteBlock(e);
113566
113695
  }
113567
113696
  });
113568
113697
  }
113698
+ if (this.canvas && this.isContentBox) {
113699
+ // Copy & Paste Block
113700
+ document.addEventListener('keydown', e => {
113701
+ if ((e.ctrlKey || e.metaKey) && e.which === 67) {
113702
+ copyBlock(e);
113703
+ }
113704
+ });
113705
+ document.addEventListener('keydown', e => {
113706
+ if ((e.ctrlKey || e.metaKey) && e.which === 86) {
113707
+ pasteBlock(e);
113708
+ }
113709
+ });
113710
+ if (this.iframe) {
113711
+ this.doc.addEventListener('keydown', e => {
113712
+ if ((e.ctrlKey || e.metaKey) && e.which === 67) {
113713
+ copyBlock(e);
113714
+ }
113715
+ });
113716
+ this.doc.addEventListener('keydown', e => {
113717
+ if ((e.ctrlKey || e.metaKey) && e.which === 86) {
113718
+ pasteBlock(e);
113719
+ }
113720
+ });
113721
+ }
113722
+ }
113569
113723
  let previousWidth = this.win.innerWidth;
113570
113724
  let timer;
113571
113725
  const debounce = (func, delay) => {
@@ -117883,13 +118037,14 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
117883
118037
  boxes = this.doc.querySelectorAll(this.blockContainer);
117884
118038
  }
117885
118039
  boxes.forEach(box => {
117886
- box.insertAdjacentHTML('afterbegin', `
117887
- <div class="is-block block-dummy" style="top: 0%; left: 0%; width: 100%; height: 20%;background:#eee;opacity:0"></div>
117888
- <div class="is-block block-dummy" style="top: 20%; left: 0%; width: 100%; height: 20%;background:#eee;opacity:0"></div>
117889
- <div class="is-block block-dummy" style="top: 40%; left: 0%; width: 100%; height: 20%;background:#eee;opacity:0"></div>
117890
- <div class="is-block block-dummy" style="top: 60%; left: 0%; width: 100%; height: 20%;background:#eee;opacity:0"></div>
117891
- <div class="is-block block-dummy" style="top: 80%; left: 0%; width: 100%; height: 20%;background:#eee;opacity:0"></div>
117892
- `);
118040
+ // box.insertAdjacentHTML('afterbegin', `
118041
+ // <div class="is-block block-dummy" style="top: 0%; left: 0%; width: 100%; height: 20%;background:#eee;opacity:0"></div>
118042
+ // <div class="is-block block-dummy" style="top: 20%; left: 0%; width: 100%; height: 20%;background:#eee;opacity:0"></div>
118043
+ // <div class="is-block block-dummy" style="top: 40%; left: 0%; width: 100%; height: 20%;background:#eee;opacity:0"></div>
118044
+ // <div class="is-block block-dummy" style="top: 60%; left: 0%; width: 100%; height: 20%;background:#eee;opacity:0"></div>
118045
+ // <div class="is-block block-dummy" style="top: 80%; left: 0%; width: 100%; height: 20%;background:#eee;opacity:0"></div>
118046
+ // `);
118047
+
117893
118048
  const obj = new Sortable(box, {
117894
118049
  scroll: true,
117895
118050
  group: 'shared',
@@ -117987,9 +118142,11 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
117987
118142
  bw = '540px';
117988
118143
  }
117989
118144
  }
118145
+ let containerClass = ''; // container's 'size-18 leading-14' is not for print
118146
+ if (this.isContentBox) containerClass = ' size-18 leading-14';
117990
118147
  const blockTemplate = `
117991
118148
  <div class="is-block block-steady height-auto" data-new-dummy="1" style="top: 20%; left: 20%; width: ${bw};">
117992
- <div class="is-container container-new">
118149
+ <div class="is-container container-new${containerClass}">
117993
118150
  [%CONTENT%]
117994
118151
  </div>
117995
118152
  </div>
@@ -118039,9 +118196,11 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
118039
118196
  bw = '540px';
118040
118197
  }
118041
118198
  }
118199
+ let containerClass = ''; // container's 'size-18 leading-14' is not for print
118200
+ if (this.isContentBox) containerClass = ' size-18 leading-14';
118042
118201
  const blockTemplate = `
118043
118202
  <div class="is-block block-steady height-auto" data-new-dummy="1" style="top: 20%; left: 20%; width: ${bw};">
118044
- <div class="is-container container-new">
118203
+ <div class="is-container container-new${containerClass}">
118045
118204
  [%CONTENT%]
118046
118205
  </div>
118047
118206
  </div>
@@ -118077,6 +118236,7 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
118077
118236
  });
118078
118237
  let dummies = this.doc.querySelectorAll('.block-dummy');
118079
118238
  dummies.forEach(elm => elm.parentNode.removeChild(elm));
118239
+ this.sortableOnCanvas = [];
118080
118240
  }
118081
118241
  if (this.sortableOnPage) this.sortableOnPage.destroy();
118082
118242
  }
@@ -118294,6 +118454,7 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
118294
118454
  });
118295
118455
  let dummies = this.doc.querySelectorAll('.block-dummy');
118296
118456
  dummies.forEach(elm => elm.parentNode.removeChild(elm));
118457
+ this.sortableOnCanvas = [];
118297
118458
  }
118298
118459
  if (this.sortableOnPage) this.sortableOnPage.destroy();
118299
118460
  }
@@ -133571,6 +133732,8 @@ class Section {
133571
133732
  this.builder.activeBox = section.querySelector('.box-select');
133572
133733
  }
133573
133734
 
133735
+ if (this.builder.eb) this.builder.eb.refresh(); // freeform
133736
+
133574
133737
  this.builder.onRender();
133575
133738
  this.builder.onChange();
133576
133739
  }
@@ -145384,7 +145547,7 @@ class ContentBox {
145384
145547
  assetRefresh: false,
145385
145548
  slider: '',
145386
145549
  navbar: false,
145387
- screenMode: 'desktop',
145550
+ screenMode: 'fullview',
145388
145551
  onRender: function () {},
145389
145552
  onChange: function () {},
145390
145553
  // onImageBrowseClick: function () { },
@@ -145454,7 +145617,7 @@ class ContentBox {
145454
145617
  toolbar: 'top',
145455
145618
  toolbarDisplay: 'auto',
145456
145619
  toolbarAddSnippetButton: false,
145457
- paste: 'html-without-styles',
145620
+ paste: 'text',
145458
145621
  builderMode: '',
145459
145622
  rowcolOutline: true,
145460
145623
  elementSelection: true,
@@ -148817,6 +148980,7 @@ Add an image for each feature.`, 'Create a new block showcasing a photo gallery
148817
148980
  this.editor = new ContentBuilder({
148818
148981
  controlPanel: this.settings.controlPanel,
148819
148982
  canvas: this.settings.canvas,
148983
+ docContainer: this.settings.wrapper,
148820
148984
  consoleLog: this.settings.consoleLog,
148821
148985
  isContentBox: true,
148822
148986
  speechTranscribeUrl: this.settings.speechTranscribeUrl,
@@ -149285,10 +149449,14 @@ Add an image for each feature.`, 'Create a new block showcasing a photo gallery
149285
149449
  display: none !important;
149286
149450
  }
149287
149451
  .hard-select .box-select {
149288
- outline: #00da89 1px solid;
149289
- outline-offset: -1px;
149290
- z-index: 1;
149452
+ outline: #00da89 1px solid;
149453
+ outline-offset: -1px;
149454
+ z-index: 1;
149291
149455
  }
149456
+ .hard-select .box-select.box-canvas {
149457
+ outline: #ff9fda 1px solid;
149458
+ }
149459
+
149292
149460
  .hard-select .box-select .is-box-tool {
149293
149461
  display: flex !important;
149294
149462
  }