@innovastudio/contentbuilder 1.3.86 → 1.4.0

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.
Files changed (62) hide show
  1. package/package.json +1 -1
  2. package/public/contentbuilder/contentbuilder.css +132 -71
  3. package/public/contentbuilder/contentbuilder.esm.js +1701 -738
  4. package/public/contentbuilder/contentbuilder.min.js +8 -8
  5. package/public/contentbuilder/lang/en.js +8 -1
  6. package/public/contentbuilder/lang/fr.js +8 -1
  7. package/public/contentbuilder/themes/colored-blue.css +9 -4
  8. package/public/contentbuilder/themes/colored-blue2.css +9 -4
  9. package/public/contentbuilder/themes/colored-blue3.css +9 -4
  10. package/public/contentbuilder/themes/colored-blue4.css +9 -4
  11. package/public/contentbuilder/themes/colored-blue5.css +9 -4
  12. package/public/contentbuilder/themes/colored-blue6.css +9 -4
  13. package/public/contentbuilder/themes/colored-blue7.css +9 -4
  14. package/public/contentbuilder/themes/colored-blue8.css +9 -4
  15. package/public/contentbuilder/themes/colored-dark.css +9 -4
  16. package/public/contentbuilder/themes/colored-darkblue.css +9 -4
  17. package/public/contentbuilder/themes/colored-gray.css +9 -4
  18. package/public/contentbuilder/themes/colored-green.css +9 -4
  19. package/public/contentbuilder/themes/colored-green2.css +9 -4
  20. package/public/contentbuilder/themes/colored-green3.css +9 -4
  21. package/public/contentbuilder/themes/colored-green4.css +9 -4
  22. package/public/contentbuilder/themes/colored-green5.css +9 -4
  23. package/public/contentbuilder/themes/colored-magenta.css +9 -4
  24. package/public/contentbuilder/themes/colored-orange.css +9 -4
  25. package/public/contentbuilder/themes/colored-orange2.css +9 -4
  26. package/public/contentbuilder/themes/colored-orange3.css +9 -4
  27. package/public/contentbuilder/themes/colored-pink.css +9 -4
  28. package/public/contentbuilder/themes/colored-pink2.css +9 -4
  29. package/public/contentbuilder/themes/colored-pink3.css +9 -4
  30. package/public/contentbuilder/themes/colored-pink4.css +9 -4
  31. package/public/contentbuilder/themes/colored-purple.css +9 -4
  32. package/public/contentbuilder/themes/colored-purple2.css +9 -4
  33. package/public/contentbuilder/themes/colored-red.css +9 -4
  34. package/public/contentbuilder/themes/colored-red2.css +9 -4
  35. package/public/contentbuilder/themes/colored-red3.css +9 -4
  36. package/public/contentbuilder/themes/colored-red4.css +9 -4
  37. package/public/contentbuilder/themes/colored-red5.css +9 -4
  38. package/public/contentbuilder/themes/colored-yellow.css +9 -4
  39. package/public/contentbuilder/themes/colored-yellow2.css +9 -4
  40. package/public/contentbuilder/themes/dark-blue.css +15 -4
  41. package/public/contentbuilder/themes/dark-blue2.css +15 -4
  42. package/public/contentbuilder/themes/dark-blue3.css +15 -4
  43. package/public/contentbuilder/themes/dark-gray.css +15 -4
  44. package/public/contentbuilder/themes/dark-pink.css +15 -4
  45. package/public/contentbuilder/themes/dark-purple.css +15 -4
  46. package/public/contentbuilder/themes/dark-red.css +15 -4
  47. package/public/contentbuilder/themes/dark.css +15 -4
  48. package/public/contentbuilder/themes/light-blue.css +9 -4
  49. package/public/contentbuilder/themes/light-blue2.css +9 -4
  50. package/public/contentbuilder/themes/light-blue3.css +9 -4
  51. package/public/contentbuilder/themes/light-cyan.css +9 -4
  52. package/public/contentbuilder/themes/light-gray.css +9 -4
  53. package/public/contentbuilder/themes/light-gray2.css +9 -4
  54. package/public/contentbuilder/themes/light-gray3.css +9 -4
  55. package/public/contentbuilder/themes/light-green.css +9 -4
  56. package/public/contentbuilder/themes/light-pink.css +9 -4
  57. package/public/contentbuilder/themes/light-pink2.css +9 -4
  58. package/public/contentbuilder/themes/light-purple.css +9 -4
  59. package/public/contentbuilder/themes/light-purple2.css +9 -4
  60. package/public/contentbuilder/themes/light-red.css +9 -4
  61. package/public/contentbuilder/themes/light-yellow.css +9 -4
  62. package/public/contentbuilder/themes/light-yellow2.css +9 -4
@@ -14683,7 +14683,7 @@ var loader = {
14683
14683
  __getMonacoInstance: __getMonacoInstance
14684
14684
  };
14685
14685
 
14686
- const dom$h = new Dom();
14686
+ const dom$j = new Dom();
14687
14687
  let hash$1 = {};
14688
14688
  class HtmlUtil {
14689
14689
  constructor(builder) {
@@ -14731,28 +14731,28 @@ class HtmlUtil {
14731
14731
  </div>
14732
14732
 
14733
14733
  `;
14734
- dom$h.appendHtml(builderStuff, html);
14734
+ dom$j.appendHtml(builderStuff, html);
14735
14735
  viewhtml = builderStuff.querySelector('.viewhtml');
14736
14736
  let viewhtmlmonaco = builderStuff.querySelector('.viewhtmlmonaco');
14737
14737
  let viewhtmlexternal = builderStuff.querySelector('.viewhtmlexternal');
14738
14738
  let elm = viewhtml.querySelector('.input-ok');
14739
- dom$h.addEventListener(elm, 'click', () => {
14739
+ dom$j.addEventListener(elm, 'click', () => {
14740
14740
  this.applyHtml(viewhtml);
14741
14741
  });
14742
14742
  elm = viewhtml.querySelector('.input-cancel');
14743
- dom$h.addEventListener(elm, 'click', () => {
14743
+ dom$j.addEventListener(elm, 'click', () => {
14744
14744
  this.builder.hideModal(viewhtml);
14745
14745
  });
14746
14746
  elm = viewhtmlmonaco.querySelector('.input-ok');
14747
- dom$h.addEventListener(elm, 'click', () => {
14747
+ dom$j.addEventListener(elm, 'click', () => {
14748
14748
  this.applyHtml(viewhtmlmonaco);
14749
14749
  });
14750
14750
  elm = viewhtmlmonaco.querySelector('.input-cancel');
14751
- dom$h.addEventListener(elm, 'click', () => {
14751
+ dom$j.addEventListener(elm, 'click', () => {
14752
14752
  this.builder.hideModal(viewhtmlmonaco);
14753
14753
  });
14754
14754
  elm = viewhtmlexternal.querySelector('.input-ok');
14755
- dom$h.addEventListener(elm, 'click', () => {
14755
+ dom$j.addEventListener(elm, 'click', () => {
14756
14756
  const source = document.querySelector('textarea[data-source-active]');
14757
14757
  const selectorOk = source.getAttribute('data-source-ok');
14758
14758
  source.removeAttribute('data-source-active');
@@ -14762,7 +14762,7 @@ class HtmlUtil {
14762
14762
  this.builder.hideModal(viewhtmlexternal);
14763
14763
  });
14764
14764
  elm = viewhtmlexternal.querySelector('.input-cancel');
14765
- dom$h.addEventListener(elm, 'click', () => {
14765
+ dom$j.addEventListener(elm, 'click', () => {
14766
14766
  const source = document.querySelector('textarea[data-source-active]');
14767
14767
  const selectorCancel = source.getAttribute('data-source-cancel');
14768
14768
  source.removeAttribute('data-source-active');
@@ -15049,7 +15049,7 @@ class HtmlUtil {
15049
15049
 
15050
15050
  this.builder.cleanHtmlFormatting = false; //Change to row selection
15051
15051
 
15052
- dom$h.removeClass(row, 'row-outline');
15052
+ dom$j.removeClass(row, 'row-outline');
15053
15053
  }
15054
15054
 
15055
15055
  if (mode === 'full') {
@@ -15294,112 +15294,116 @@ class HtmlUtil {
15294
15294
 
15295
15295
  _builder.removeAttribute('data-sort');
15296
15296
 
15297
- dom$h.removeClass(_builder, 'builder-active');
15298
- const rows = dom$h.elementChildren(_builder);
15297
+ dom$j.removeClass(_builder, 'builder-active');
15298
+ const rows = dom$j.elementChildren(_builder);
15299
15299
  rows.forEach(row => {
15300
- const cols = dom$h.elementChildren(row);
15300
+ const cols = dom$j.elementChildren(row);
15301
15301
  cols.forEach(col => {
15302
15302
  col.style.cursor = '';
15303
15303
  });
15304
15304
  });
15305
15305
  }); // cleanup cursor from drag to resize columns
15306
15306
 
15307
- const rows = dom$h.elementChildren(tmp);
15307
+ const rows = dom$j.elementChildren(tmp);
15308
15308
  rows.forEach(row => {
15309
15309
  row.style.cursor = ''; //if tmp is row html, then this is a column
15310
15310
 
15311
- const cols = dom$h.elementChildren(row);
15311
+ const cols = dom$j.elementChildren(row);
15312
15312
  cols.forEach(col => {
15313
15313
  col.style.cursor = '';
15314
15314
  });
15315
15315
  });
15316
15316
  let elms = tmp.querySelectorAll('.sortable-chosen');
15317
- dom$h.removeClasses(elms, 'sortable-chosen');
15317
+ dom$j.removeClasses(elms, 'sortable-chosen');
15318
15318
  elms = tmp.querySelectorAll('.sortable-ghost');
15319
- dom$h.removeClasses(elms, 'sortable-ghost');
15319
+ dom$j.removeClasses(elms, 'sortable-ghost');
15320
15320
  elms = tmp.querySelectorAll('.elm-active');
15321
- dom$h.removeClasses(elms, 'elm-active');
15321
+ dom$j.removeClasses(elms, 'elm-active');
15322
15322
  elms = tmp.querySelectorAll('.elm-inspected');
15323
- dom$h.removeClasses(elms, 'elm-inspected');
15323
+ dom$j.removeClasses(elms, 'elm-inspected');
15324
15324
  elms = tmp.querySelectorAll('.cell-active');
15325
- dom$h.removeClasses(elms, 'cell-active');
15325
+ dom$j.removeClasses(elms, 'cell-active');
15326
15326
  elms = tmp.querySelectorAll('.row-active');
15327
- dom$h.removeClasses(elms, 'row-active');
15327
+ dom$j.removeClasses(elms, 'row-active');
15328
15328
  elms = tmp.querySelectorAll('.row-outline');
15329
- dom$h.removeClasses(elms, 'row-outline');
15329
+ dom$j.removeClasses(elms, 'row-outline');
15330
15330
  elms = tmp.querySelectorAll('.is-builder');
15331
- dom$h.removeClasses(elms, 'is-builder');
15331
+ dom$j.removeClasses(elms, 'is-builder');
15332
15332
  elms = tmp.querySelectorAll('.row-outline');
15333
- dom$h.removeClasses(elms, 'row-outline');
15333
+ dom$j.removeClasses(elms, 'row-outline');
15334
15334
  elms = tmp.querySelectorAll('[data-click]');
15335
- dom$h.removeAttributes(elms, 'data-click');
15335
+ dom$j.removeAttributes(elms, 'data-click');
15336
15336
  elms = tmp.querySelectorAll('[contenteditable]');
15337
- dom$h.removeAttributes(elms, 'contenteditable');
15337
+ dom$j.removeAttributes(elms, 'contenteditable');
15338
15338
  elms = tmp.querySelectorAll('[draggridoutline]');
15339
- dom$h.removeAttributes(elms, 'draggridoutline');
15339
+ dom$j.removeAttributes(elms, 'draggridoutline');
15340
15340
  elms = tmp.querySelectorAll('[between-blocks-left]');
15341
- dom$h.removeAttributes(elms, 'between-blocks-left');
15341
+ dom$j.removeAttributes(elms, 'between-blocks-left');
15342
15342
  elms = tmp.querySelectorAll('[between-blocks-center]');
15343
- dom$h.removeAttributes(elms, 'between-blocks-center');
15343
+ dom$j.removeAttributes(elms, 'between-blocks-center');
15344
15344
  elms = tmp.querySelectorAll('[hideelementhighlight]');
15345
- dom$h.removeAttributes(elms, 'hideelementhighlight');
15345
+ dom$j.removeAttributes(elms, 'hideelementhighlight');
15346
15346
  elms = tmp.querySelectorAll('[data-module-active]');
15347
- dom$h.removeAttributes(elms, 'data-module-active');
15347
+ dom$j.removeAttributes(elms, 'data-module-active');
15348
15348
  elms = tmp.querySelectorAll('[draggable]');
15349
- dom$h.removeAttributes(elms, 'draggable');
15349
+ dom$j.removeAttributes(elms, 'draggable');
15350
15350
  elms = tmp.querySelectorAll('[data-animated]');
15351
- dom$h.removeAttributes(elms, 'data-animated');
15351
+ dom$j.removeAttributes(elms, 'data-animated');
15352
15352
  elms = tmp.querySelectorAll('[data-saveforundo]');
15353
- dom$h.removeAttributes(elms, 'data-saveforundo');
15353
+ dom$j.removeAttributes(elms, 'data-saveforundo');
15354
15354
  elms = tmp.querySelectorAll('[hidesnippetaddtool]');
15355
- dom$h.removeAttributes(elms, 'hidesnippetaddtool');
15355
+ dom$j.removeAttributes(elms, 'hidesnippetaddtool');
15356
15356
  elms = tmp.querySelectorAll('[gray]');
15357
- dom$h.removeAttributes(elms, 'gray');
15357
+ dom$j.removeAttributes(elms, 'gray');
15358
15358
  elms = tmp.querySelectorAll('[rowoutline]');
15359
- dom$h.removeAttributes(elms, 'rowoutline');
15359
+ dom$j.removeAttributes(elms, 'rowoutline');
15360
15360
  elms = tmp.querySelectorAll('[hidecolumntool]');
15361
- dom$h.removeAttributes(elms, 'hidecolumntool');
15361
+ dom$j.removeAttributes(elms, 'hidecolumntool');
15362
15362
  elms = tmp.querySelectorAll('[grayoutline]');
15363
- dom$h.removeAttributes(elms, 'grayoutline');
15363
+ dom$j.removeAttributes(elms, 'grayoutline');
15364
15364
  elms = tmp.querySelectorAll('[hideoutline]');
15365
- dom$h.removeAttributes(elms, 'hideoutline');
15365
+ dom$j.removeAttributes(elms, 'hideoutline');
15366
15366
  elms = tmp.querySelectorAll('[leftrowtool]');
15367
- dom$h.removeAttributes(elms, 'leftrowtool');
15367
+ dom$j.removeAttributes(elms, 'leftrowtool');
15368
15368
  elms = tmp.querySelectorAll('[minimal]');
15369
- dom$h.removeAttributes(elms, 'minimal');
15369
+ dom$j.removeAttributes(elms, 'minimal');
15370
15370
  elms = tmp.querySelectorAll('[clean]');
15371
- dom$h.removeAttributes(elms, 'clean');
15371
+ dom$j.removeAttributes(elms, 'clean');
15372
15372
  elms = tmp.querySelectorAll('[grideditor]');
15373
- dom$h.removeAttributes(elms, 'grideditor');
15373
+ dom$j.removeAttributes(elms, 'grideditor');
15374
15374
  elms = tmp.querySelectorAll('[gridoutline]');
15375
- dom$h.removeAttributes(elms, 'gridoutline');
15376
- dom$h.removeElements(tmp.querySelectorAll('.is-row-tool'));
15377
- dom$h.removeElements(tmp.querySelectorAll('.is-col-tool'));
15378
- dom$h.removeElements(tmp.querySelectorAll('.is-rowadd-tool'));
15379
- dom$h.removeElements(tmp.querySelectorAll('.ovl'));
15380
- dom$h.removeElements(tmp.querySelectorAll('.row-add-initial')); //Extra cleaning
15375
+ dom$j.removeAttributes(elms, 'gridoutline');
15376
+ dom$j.removeElements(tmp.querySelectorAll('.is-row-tool'));
15377
+ dom$j.removeElements(tmp.querySelectorAll('.is-col-tool'));
15378
+ dom$j.removeElements(tmp.querySelectorAll('.is-rowadd-tool'));
15379
+ dom$j.removeElements(tmp.querySelectorAll('.ovl'));
15380
+ dom$j.removeElements(tmp.querySelectorAll('.row-add-initial')); //Extra cleaning
15381
15381
 
15382
15382
  elms = tmp.querySelectorAll('.aos-init');
15383
- dom$h.removeClasses(elms, 'aos-init');
15383
+ dom$j.removeClasses(elms, 'aos-init');
15384
15384
  elms = tmp.querySelectorAll('.aos-animate');
15385
- dom$h.removeClasses(elms, 'aos-animate');
15385
+ dom$j.removeClasses(elms, 'aos-animate');
15386
15386
  elms = tmp.querySelectorAll('.skrollable');
15387
- dom$h.removeClasses(elms, 'skrollable');
15387
+ dom$j.removeClasses(elms, 'skrollable');
15388
15388
  elms = tmp.querySelectorAll('.skrollable-after');
15389
- dom$h.removeClasses(elms, 'skrollable-after');
15389
+ dom$j.removeClasses(elms, 'skrollable-after');
15390
15390
  elms = tmp.querySelectorAll('.skrollable-before');
15391
- dom$h.removeClasses(elms, 'skrollable-before');
15391
+ dom$j.removeClasses(elms, 'skrollable-before');
15392
15392
  elms = tmp.querySelectorAll('.skrollable-between');
15393
- dom$h.removeClasses(elms, 'skrollable-between');
15393
+ dom$j.removeClasses(elms, 'skrollable-between');
15394
15394
  elms = tmp.querySelectorAll('.is-inview');
15395
- dom$h.removeClasses(elms, 'is-inview');
15395
+ dom$j.removeClasses(elms, 'is-inview');
15396
15396
  let emptyclasses = tmp.querySelectorAll('[class=""]');
15397
15397
  Array.prototype.forEach.call(emptyclasses, emptyclass => {
15398
15398
  emptyclass.removeAttribute('class');
15399
15399
  });
15400
- dom$h.removeEmptyStyle(tmp);
15400
+ let unusedOverlays = tmp.querySelectorAll('.is-row-overlay');
15401
+ Array.prototype.forEach.call(unusedOverlays, unusedOverlay => {
15402
+ if (!unusedOverlay.hasAttribute('style')) unusedOverlay.parentNode.removeChild(unusedOverlay);
15403
+ });
15404
+ dom$j.removeEmptyStyle(tmp);
15401
15405
  elms = tmp.querySelectorAll('[data-keep]');
15402
- dom$h.removeAttributes(elms, 'data-keep'); //Backward compatible: cleanup button <span contenteditable="false"><a contenteditable="true">button</a></span>
15406
+ dom$j.removeAttributes(elms, 'data-keep'); //Backward compatible: cleanup button <span contenteditable="false"><a contenteditable="true">button</a></span>
15403
15407
 
15404
15408
  let links = tmp.querySelectorAll('a');
15405
15409
  Array.prototype.forEach.call(links, link => {
@@ -15415,77 +15419,77 @@ class HtmlUtil {
15415
15419
  //ContentBox
15416
15420
  // Remove dummy DIV after last section
15417
15421
  let elms = tmp.querySelectorAll('.is-dummy');
15418
- dom$h.removeElements(elms);
15422
+ dom$j.removeElements(elms);
15419
15423
  elms = tmp.querySelectorAll('[data-scroll]');
15420
- dom$h.removeAttributes(elms, 'data-scroll');
15424
+ dom$j.removeAttributes(elms, 'data-scroll');
15421
15425
  elms = tmp.querySelectorAll('[data-scroll-once]');
15422
- dom$h.removeAttributes(elms, 'data-scroll-once');
15426
+ dom$j.removeAttributes(elms, 'data-scroll-once');
15423
15427
 
15424
15428
  if (this.builder.shortenOutput) {
15425
15429
  elms = tmp.querySelectorAll('[data-noedit]');
15426
- dom$h.removeAttributes(elms, 'data-noedit');
15430
+ dom$j.removeAttributes(elms, 'data-noedit');
15427
15431
  elms = tmp.querySelectorAll('[data-module]');
15428
- dom$h.removeAttributes(elms, 'data-module');
15432
+ dom$j.removeAttributes(elms, 'data-module');
15429
15433
  elms = tmp.querySelectorAll('[data-module-desc]');
15430
- dom$h.removeAttributes(elms, 'data-module-desc');
15434
+ dom$j.removeAttributes(elms, 'data-module-desc');
15431
15435
  elms = tmp.querySelectorAll('[data-dialog-width]');
15432
- dom$h.removeAttributes(elms, 'data-dialog-width');
15436
+ dom$j.removeAttributes(elms, 'data-dialog-width');
15433
15437
  elms = tmp.querySelectorAll('[data-dialog-height]');
15434
- dom$h.removeAttributes(elms, 'data-dialog-height');
15438
+ dom$j.removeAttributes(elms, 'data-dialog-height');
15435
15439
  elms = tmp.querySelectorAll('[data-html]');
15436
- dom$h.removeAttributes(elms, 'data-html');
15440
+ dom$j.removeAttributes(elms, 'data-html');
15437
15441
  elms = tmp.querySelectorAll('[data-settings]');
15438
- dom$h.removeAttributes(elms, 'data-settings');
15442
+ dom$j.removeAttributes(elms, 'data-settings');
15439
15443
  elms = tmp.querySelectorAll('[data-html-1]');
15440
- dom$h.removeAttributes(elms, 'data-html-1');
15444
+ dom$j.removeAttributes(elms, 'data-html-1');
15441
15445
  elms = tmp.querySelectorAll('[data-html-2]');
15442
- dom$h.removeAttributes(elms, 'data-html-2');
15446
+ dom$j.removeAttributes(elms, 'data-html-2');
15443
15447
  elms = tmp.querySelectorAll('[data-html-3]');
15444
- dom$h.removeAttributes(elms, 'data-html-3');
15448
+ dom$j.removeAttributes(elms, 'data-html-3');
15445
15449
  elms = tmp.querySelectorAll('[data-html-4]');
15446
- dom$h.removeAttributes(elms, 'data-html-4');
15450
+ dom$j.removeAttributes(elms, 'data-html-4');
15447
15451
  elms = tmp.querySelectorAll('[data-html-5]');
15448
- dom$h.removeAttributes(elms, 'data-html-5');
15452
+ dom$j.removeAttributes(elms, 'data-html-5');
15449
15453
  elms = tmp.querySelectorAll('[data-html-6]');
15450
- dom$h.removeAttributes(elms, 'data-html-6');
15454
+ dom$j.removeAttributes(elms, 'data-html-6');
15451
15455
  elms = tmp.querySelectorAll('[data-html-7]');
15452
- dom$h.removeAttributes(elms, 'data-html-7');
15456
+ dom$j.removeAttributes(elms, 'data-html-7');
15453
15457
  elms = tmp.querySelectorAll('[data-html-8]');
15454
- dom$h.removeAttributes(elms, 'data-html-8');
15458
+ dom$j.removeAttributes(elms, 'data-html-8');
15455
15459
  elms = tmp.querySelectorAll('[data-html-9]');
15456
- dom$h.removeAttributes(elms, 'data-html-9');
15460
+ dom$j.removeAttributes(elms, 'data-html-9');
15457
15461
  elms = tmp.querySelectorAll('[data-html-10]');
15458
- dom$h.removeAttributes(elms, 'data-html-10');
15462
+ dom$j.removeAttributes(elms, 'data-html-10');
15459
15463
  elms = tmp.querySelectorAll('[data-html-12]');
15460
- dom$h.removeAttributes(elms, 'data-html-12');
15464
+ dom$j.removeAttributes(elms, 'data-html-12');
15461
15465
  elms = tmp.querySelectorAll('[data-html-13]');
15462
- dom$h.removeAttributes(elms, 'data-html-13');
15466
+ dom$j.removeAttributes(elms, 'data-html-13');
15463
15467
  elms = tmp.querySelectorAll('[data-html-14]');
15464
- dom$h.removeAttributes(elms, 'data-html-14');
15468
+ dom$j.removeAttributes(elms, 'data-html-14');
15465
15469
  elms = tmp.querySelectorAll('[data-html-15]');
15466
- dom$h.removeAttributes(elms, 'data-html-15');
15470
+ dom$j.removeAttributes(elms, 'data-html-15');
15467
15471
  elms = tmp.querySelectorAll('[data-html-16]');
15468
- dom$h.removeAttributes(elms, 'data-html-16');
15472
+ dom$j.removeAttributes(elms, 'data-html-16');
15469
15473
  elms = tmp.querySelectorAll('[data-html-17]');
15470
- dom$h.removeAttributes(elms, 'data-html-17');
15474
+ dom$j.removeAttributes(elms, 'data-html-17');
15471
15475
  elms = tmp.querySelectorAll('[data-html-18]');
15472
- dom$h.removeAttributes(elms, 'data-html-18');
15476
+ dom$j.removeAttributes(elms, 'data-html-18');
15473
15477
  elms = tmp.querySelectorAll('[data-html-19]');
15474
- dom$h.removeAttributes(elms, 'data-html-19');
15478
+ dom$j.removeAttributes(elms, 'data-html-19');
15475
15479
  elms = tmp.querySelectorAll('[data-html-20]');
15476
- dom$h.removeAttributes(elms, 'data-html-20');
15480
+ dom$j.removeAttributes(elms, 'data-html-20');
15477
15481
  elms = tmp.querySelectorAll('[data-html-21]');
15478
- dom$h.removeAttributes(elms, 'data-html-21');
15482
+ dom$j.removeAttributes(elms, 'data-html-21');
15479
15483
  elms = tmp.querySelectorAll('[data-html-21]');
15480
- dom$h.removeAttributes(elms, 'data-html-21');
15484
+ dom$j.removeAttributes(elms, 'data-html-21');
15481
15485
  elms = tmp.querySelectorAll('[data-html-22]');
15482
- dom$h.removeAttributes(elms, 'data-html-22');
15486
+ dom$j.removeAttributes(elms, 'data-html-22');
15483
15487
  elms = tmp.querySelectorAll('[data-html-23]');
15484
- dom$h.removeAttributes(elms, 'data-html-23');
15488
+ dom$j.removeAttributes(elms, 'data-html-23');
15485
15489
  elms = tmp.querySelectorAll('[data-html-24]');
15486
- dom$h.removeAttributes(elms, 'data-html-24');
15490
+ dom$j.removeAttributes(elms, 'data-html-24');
15487
15491
  elms = tmp.querySelectorAll('[data-html-25]');
15488
- dom$h.removeAttributes(elms, 'data-html-25');
15492
+ dom$j.removeAttributes(elms, 'data-html-25');
15489
15493
  } // cleaning
15490
15494
 
15491
15495
 
@@ -15500,23 +15504,23 @@ class HtmlUtil {
15500
15504
  });
15501
15505
  elms = tmp.querySelectorAll('.is-animated');
15502
15506
  Array.prototype.forEach.call(elms, elm => {
15503
- dom$h.removeClass(elm, 'animated');
15504
- dom$h.removeClass(elm, 'pulse');
15505
- dom$h.removeClass(elm, 'bounceIn');
15506
- dom$h.removeClass(elm, 'fadeIn');
15507
- dom$h.removeClass(elm, 'fadeOut'); //new
15508
-
15509
- dom$h.removeClass(elm, 'fadeInDown');
15510
- dom$h.removeClass(elm, 'fadeInLeft');
15511
- dom$h.removeClass(elm, 'fadeInRight');
15512
- dom$h.removeClass(elm, 'fadeInUp');
15513
- dom$h.removeClass(elm, 'flipInX');
15514
- dom$h.removeClass(elm, 'flipInY');
15515
- dom$h.removeClass(elm, 'slideInUp');
15516
- dom$h.removeClass(elm, 'slideInDown');
15517
- dom$h.removeClass(elm, 'slideInLeft');
15518
- dom$h.removeClass(elm, 'slideInRight');
15519
- dom$h.removeClass(elm, 'zoomIn');
15507
+ dom$j.removeClass(elm, 'animated');
15508
+ dom$j.removeClass(elm, 'pulse');
15509
+ dom$j.removeClass(elm, 'bounceIn');
15510
+ dom$j.removeClass(elm, 'fadeIn');
15511
+ dom$j.removeClass(elm, 'fadeOut'); //new
15512
+
15513
+ dom$j.removeClass(elm, 'fadeInDown');
15514
+ dom$j.removeClass(elm, 'fadeInLeft');
15515
+ dom$j.removeClass(elm, 'fadeInRight');
15516
+ dom$j.removeClass(elm, 'fadeInUp');
15517
+ dom$j.removeClass(elm, 'flipInX');
15518
+ dom$j.removeClass(elm, 'flipInY');
15519
+ dom$j.removeClass(elm, 'slideInUp');
15520
+ dom$j.removeClass(elm, 'slideInDown');
15521
+ dom$j.removeClass(elm, 'slideInLeft');
15522
+ dom$j.removeClass(elm, 'slideInRight');
15523
+ dom$j.removeClass(elm, 'zoomIn');
15520
15524
  elm.style.animationDelay = '';
15521
15525
  elm.style.transitionDelay = '';
15522
15526
  elm.style.transitionDuration = '';
@@ -15530,39 +15534,39 @@ class HtmlUtil {
15530
15534
 
15531
15535
  elms = tmp.querySelectorAll('.is-appeared');
15532
15536
  Array.prototype.forEach.call(elms, elm => {
15533
- dom$h.removeClass(elm, 'is-appeared');
15537
+ dom$j.removeClass(elm, 'is-appeared');
15534
15538
  });
15535
15539
  elms = tmp.querySelectorAll('.box-active');
15536
15540
  Array.prototype.forEach.call(elms, elm => {
15537
- dom$h.removeClass(elm, 'box-active');
15541
+ dom$j.removeClass(elm, 'box-active');
15538
15542
  });
15539
15543
  elms = tmp.querySelectorAll('.section-active');
15540
15544
  Array.prototype.forEach.call(elms, elm => {
15541
- dom$h.removeClass(elm, 'section-active');
15545
+ dom$j.removeClass(elm, 'section-active');
15542
15546
  });
15543
15547
  elms = tmp.querySelectorAll('.section-select');
15544
15548
  Array.prototype.forEach.call(elms, elm => {
15545
- dom$h.removeClass(elm, 'section-select');
15549
+ dom$j.removeClass(elm, 'section-select');
15546
15550
  });
15547
15551
  elms = tmp.querySelectorAll('.box-select');
15548
15552
  Array.prototype.forEach.call(elms, elm => {
15549
- dom$h.removeClass(elm, 'box-select');
15553
+ dom$j.removeClass(elm, 'box-select');
15550
15554
  });
15551
15555
  elms = tmp.querySelectorAll('.is-section-tool');
15552
- dom$h.removeElements(elms);
15556
+ dom$j.removeElements(elms);
15553
15557
  elms = tmp.querySelectorAll('.is-box-tool');
15554
- dom$h.removeElements(elms);
15558
+ dom$j.removeElements(elms);
15555
15559
  elms = tmp.querySelectorAll('.is-section-info');
15556
- dom$h.removeElements(elms);
15560
+ dom$j.removeElements(elms);
15557
15561
  var html_content = '';
15558
15562
  var html_footer = '';
15559
15563
  var html_others = ''; // Apply behavior on each row
15560
15564
 
15561
- const sections = dom$h.elementChildren(tmp);
15565
+ const sections = dom$j.elementChildren(tmp);
15562
15566
  sections.forEach(section => {
15563
15567
  let currentSection = section;
15564
15568
 
15565
- if (dom$h.hasClass(currentSection, 'is-section')) {
15569
+ if (dom$j.hasClass(currentSection, 'is-section')) {
15566
15570
  var secclass = ''; // var secstyle = '';
15567
15571
 
15568
15572
  if (currentSection.getAttribute('class')) secclass = ' class="' + currentSection.getAttribute('class') + '"'; // if (currentSection.getAttribute('style')) secstyle = ' style="' + currentSection.getAttribute('style') + '"';
@@ -15604,69 +15608,69 @@ class HtmlUtil {
15604
15608
 
15605
15609
  if (this.builder.shortenOutput) {
15606
15610
  elms = tmp.querySelectorAll('[data-noedit]');
15607
- dom$h.removeAttributes(elms, 'data-noedit');
15611
+ dom$j.removeAttributes(elms, 'data-noedit');
15608
15612
  elms = tmp.querySelectorAll('[data-module]');
15609
- dom$h.removeAttributes(elms, 'data-module');
15613
+ dom$j.removeAttributes(elms, 'data-module');
15610
15614
  elms = tmp.querySelectorAll('[data-module-desc]');
15611
- dom$h.removeAttributes(elms, 'data-module-desc');
15615
+ dom$j.removeAttributes(elms, 'data-module-desc');
15612
15616
  elms = tmp.querySelectorAll('[data-dialog-width]');
15613
- dom$h.removeAttributes(elms, 'data-dialog-width');
15617
+ dom$j.removeAttributes(elms, 'data-dialog-width');
15614
15618
  elms = tmp.querySelectorAll('[data-dialog-height]');
15615
- dom$h.removeAttributes(elms, 'data-dialog-height');
15619
+ dom$j.removeAttributes(elms, 'data-dialog-height');
15616
15620
  elms = tmp.querySelectorAll('[data-html]');
15617
- dom$h.removeAttributes(elms, 'data-html');
15621
+ dom$j.removeAttributes(elms, 'data-html');
15618
15622
  elms = tmp.querySelectorAll('[data-settings]');
15619
- dom$h.removeAttributes(elms, 'data-settings');
15623
+ dom$j.removeAttributes(elms, 'data-settings');
15620
15624
  elms = tmp.querySelectorAll('[data-html-1]');
15621
- dom$h.removeAttributes(elms, 'data-html-1');
15625
+ dom$j.removeAttributes(elms, 'data-html-1');
15622
15626
  elms = tmp.querySelectorAll('[data-html-2]');
15623
- dom$h.removeAttributes(elms, 'data-html-2');
15627
+ dom$j.removeAttributes(elms, 'data-html-2');
15624
15628
  elms = tmp.querySelectorAll('[data-html-3]');
15625
- dom$h.removeAttributes(elms, 'data-html-3');
15629
+ dom$j.removeAttributes(elms, 'data-html-3');
15626
15630
  elms = tmp.querySelectorAll('[data-html-4]');
15627
- dom$h.removeAttributes(elms, 'data-html-4');
15631
+ dom$j.removeAttributes(elms, 'data-html-4');
15628
15632
  elms = tmp.querySelectorAll('[data-html-5]');
15629
- dom$h.removeAttributes(elms, 'data-html-5');
15633
+ dom$j.removeAttributes(elms, 'data-html-5');
15630
15634
  elms = tmp.querySelectorAll('[data-html-6]');
15631
- dom$h.removeAttributes(elms, 'data-html-6');
15635
+ dom$j.removeAttributes(elms, 'data-html-6');
15632
15636
  elms = tmp.querySelectorAll('[data-html-7]');
15633
- dom$h.removeAttributes(elms, 'data-html-7');
15637
+ dom$j.removeAttributes(elms, 'data-html-7');
15634
15638
  elms = tmp.querySelectorAll('[data-html-8]');
15635
- dom$h.removeAttributes(elms, 'data-html-8');
15639
+ dom$j.removeAttributes(elms, 'data-html-8');
15636
15640
  elms = tmp.querySelectorAll('[data-html-9]');
15637
- dom$h.removeAttributes(elms, 'data-html-9');
15641
+ dom$j.removeAttributes(elms, 'data-html-9');
15638
15642
  elms = tmp.querySelectorAll('[data-html-10]');
15639
- dom$h.removeAttributes(elms, 'data-html-10');
15643
+ dom$j.removeAttributes(elms, 'data-html-10');
15640
15644
  elms = tmp.querySelectorAll('[data-html-12]');
15641
- dom$h.removeAttributes(elms, 'data-html-12');
15645
+ dom$j.removeAttributes(elms, 'data-html-12');
15642
15646
  elms = tmp.querySelectorAll('[data-html-13]');
15643
- dom$h.removeAttributes(elms, 'data-html-13');
15647
+ dom$j.removeAttributes(elms, 'data-html-13');
15644
15648
  elms = tmp.querySelectorAll('[data-html-14]');
15645
- dom$h.removeAttributes(elms, 'data-html-14');
15649
+ dom$j.removeAttributes(elms, 'data-html-14');
15646
15650
  elms = tmp.querySelectorAll('[data-html-15]');
15647
- dom$h.removeAttributes(elms, 'data-html-15');
15651
+ dom$j.removeAttributes(elms, 'data-html-15');
15648
15652
  elms = tmp.querySelectorAll('[data-html-16]');
15649
- dom$h.removeAttributes(elms, 'data-html-16');
15653
+ dom$j.removeAttributes(elms, 'data-html-16');
15650
15654
  elms = tmp.querySelectorAll('[data-html-17]');
15651
- dom$h.removeAttributes(elms, 'data-html-17');
15655
+ dom$j.removeAttributes(elms, 'data-html-17');
15652
15656
  elms = tmp.querySelectorAll('[data-html-18]');
15653
- dom$h.removeAttributes(elms, 'data-html-18');
15657
+ dom$j.removeAttributes(elms, 'data-html-18');
15654
15658
  elms = tmp.querySelectorAll('[data-html-19]');
15655
- dom$h.removeAttributes(elms, 'data-html-19');
15659
+ dom$j.removeAttributes(elms, 'data-html-19');
15656
15660
  elms = tmp.querySelectorAll('[data-html-20]');
15657
- dom$h.removeAttributes(elms, 'data-html-20');
15661
+ dom$j.removeAttributes(elms, 'data-html-20');
15658
15662
  elms = tmp.querySelectorAll('[data-html-21]');
15659
- dom$h.removeAttributes(elms, 'data-html-21');
15663
+ dom$j.removeAttributes(elms, 'data-html-21');
15660
15664
  elms = tmp.querySelectorAll('[data-html-21]');
15661
- dom$h.removeAttributes(elms, 'data-html-21');
15665
+ dom$j.removeAttributes(elms, 'data-html-21');
15662
15666
  elms = tmp.querySelectorAll('[data-html-22]');
15663
- dom$h.removeAttributes(elms, 'data-html-22');
15667
+ dom$j.removeAttributes(elms, 'data-html-22');
15664
15668
  elms = tmp.querySelectorAll('[data-html-23]');
15665
- dom$h.removeAttributes(elms, 'data-html-23');
15669
+ dom$j.removeAttributes(elms, 'data-html-23');
15666
15670
  elms = tmp.querySelectorAll('[data-html-24]');
15667
- dom$h.removeAttributes(elms, 'data-html-24');
15671
+ dom$j.removeAttributes(elms, 'data-html-24');
15668
15672
  elms = tmp.querySelectorAll('[data-html-25]');
15669
- dom$h.removeAttributes(elms, 'data-html-25');
15673
+ dom$j.removeAttributes(elms, 'data-html-25');
15670
15674
  }
15671
15675
 
15672
15676
  html = tmp.innerHTML.trim();
@@ -22045,7 +22049,7 @@ _extends(Remove, {
22045
22049
  Sortable.mount(new AutoScrollPlugin());
22046
22050
  Sortable.mount(Remove, Revert);
22047
22051
 
22048
- const dom$g = new Dom();
22052
+ const dom$i = new Dom();
22049
22053
 
22050
22054
  class Select {
22051
22055
  constructor(dropDown) {
@@ -22070,14 +22074,14 @@ class Select {
22070
22074
  this.toggle(false);
22071
22075
  dropDown.dispatchEvent(new Event('change'));
22072
22076
  toggler.focus();
22073
- let elms = dom$g.elementChildren(menu);
22077
+ let elms = dom$i.elementChildren(menu);
22074
22078
  elms.forEach(elm => {
22075
- dom$g.removeClass(elm, 'selected');
22079
+ dom$i.removeClass(elm, 'selected');
22076
22080
  });
22077
22081
  let optionselected = menu.querySelector('[data-value="' + val + '"]');
22078
22082
 
22079
22083
  if (optionselected) {
22080
- dom$g.addClass(optionselected, 'selected');
22084
+ dom$i.addClass(optionselected, 'selected');
22081
22085
  }
22082
22086
  };
22083
22087
 
@@ -22132,7 +22136,7 @@ class Select {
22132
22136
  let optionselected = menu.querySelector('[data-value="' + this.value + '"]');
22133
22137
 
22134
22138
  if (optionselected) {
22135
- dom$g.addClass(optionselected, 'selected');
22139
+ dom$i.addClass(optionselected, 'selected');
22136
22140
  optionselected.focus();
22137
22141
  }
22138
22142
 
@@ -55578,424 +55582,6 @@ class Element$1 {
55578
55582
 
55579
55583
  }
55580
55584
 
55581
- class RowTool {
55582
- constructor(builder) {
55583
- this.builder = builder;
55584
- const util = this.builder.util;
55585
- this.util = util;
55586
- const builderStuff = this.builder.builderStuff;
55587
- const dom = this.builder.dom;
55588
- this.dom = dom;
55589
- this.grid = new Grid(builder);
55590
- let rowMore = builderStuff.querySelector('.rowmore');
55591
- let htmlbutton = '';
55592
- if (builder.opts.rowHtmlEditor) htmlbutton = `<button type="button" title="${util.out('HTML')}" class="row-html">
55593
- <span><svg class="is-icon-flex" style="margin-right:-3px;width:12px;height:12px;"><use xlink:href="#ion-ios-arrow-left"></use></svg><svg class="is-icon-flex" style="margin-left:-2px;width:12px;height:12px;"><use xlink:href="#ion-ios-arrow-right"></use></svg></span>${util.out('HTML')}
55594
- </button>`;
55595
-
55596
- if (!rowMore) {
55597
- let html = `<div class="is-pop rowmore" style="z-index:10002;" tabindex="-1" role="dialog" aria-modal="true" aria-hidden="true">
55598
- <div style="display:flex;flex-flow:wrap;">
55599
- <button type="button" title="${util.out('Move Up')}" class="row-up"><span><svg class="is-icon-flex" style="width:15px;height:15px;"><use xlink:href="#ion-ios-arrow-thin-up"></use></svg></span>${util.out('Move Up')}</button>
55600
- <button type="button" title="${util.out('Move Down')}" class="row-down"><span><svg class="is-icon-flex" style="width:15px;height:15px;"><use xlink:href="#ion-ios-arrow-thin-down"></use></svg></span>${util.out('Move Down')}</button>
55601
- <button type="button" title="${util.out('Duplicate')}" class="row-duplicate"><span><svg class="is-icon-flex" style="width:12px;height:12px;"><use xlink:href="#ion-ios-photos-outline"></use></svg></span>${util.out('Duplicate')}</button>
55602
- ${htmlbutton}
55603
- </div>
55604
- </div>`;
55605
- dom.appendHtml(builderStuff, html);
55606
- rowMore = builderStuff.querySelector('.rowmore');
55607
- let elm = rowMore.querySelector('.row-up');
55608
- if (elm) dom.addEventListener(elm, 'click', () => {
55609
- this.grid.moveRowUp(); // util.clearControls();
55610
- });
55611
- elm = rowMore.querySelector('.row-down');
55612
- if (elm) dom.addEventListener(elm, 'click', () => {
55613
- this.grid.moveRowDown(); // util.clearControls();
55614
- });
55615
- elm = rowMore.querySelector('.row-duplicate');
55616
- if (elm) dom.addEventListener(elm, 'click', () => {
55617
- this.grid.duplicateRow(); // this.rowMore.style.display = '';
55618
-
55619
- util.hidePop(rowMore); //Hide Column tool (new!)
55620
-
55621
- util.hideColumnTool();
55622
- util.clearControls();
55623
- });
55624
- elm = rowMore.querySelector('.row-html');
55625
- if (elm) dom.addEventListener(elm, 'click', () => {
55626
- // const cell = util.cellSelected();
55627
- // if(!cell) return;
55628
- let row;
55629
- let cell = util.cellSelected();
55630
-
55631
- if (cell) {
55632
- row = cell.parentNode;
55633
- } else {
55634
- row = util.rowSelected();
55635
- }
55636
-
55637
- if (!row) return;
55638
- const htmlutil = new HtmlUtil(builder);
55639
- htmlutil.view('row');
55640
- });
55641
- }
55642
-
55643
- this.rowMore = rowMore; // // Click anywhere will hide Column tool
55644
- // document.addEventListener('mousedown', (e) => {
55645
- // e = e || window.event;
55646
- // var target = e.target || e.srcElement;
55647
- // if(rowMore.style.display === 'flex'){
55648
- // let a = dom.parentsHasClass(target, 'rowmore');
55649
- // let b = dom.parentsHasClass(target, 'row-more');
55650
- // if(a||b) {
55651
- // return;
55652
- // }
55653
- // else {
55654
- // // rowMore.style.display = '';
55655
- // util.hidePop(rowMore);
55656
- // }
55657
- // }
55658
- // });
55659
- }
55660
-
55661
- render(row) {
55662
- const dom = this.dom;
55663
- const util = this.builder.util;
55664
- const builderStuff = this.builder.builderStuff;
55665
- let rowMore = this.rowMore;
55666
- let rowtool = row.querySelector('.is-row-tool');
55667
-
55668
- if (!rowtool) {
55669
- let html = `<div class="is-tool is-row-tool">
55670
- <div title="${util.out('Move')}" role="button" tabindex="-1" class="row-handle" style="width:100%;cursor:move;text-align:center;"><svg class="is-icon-flex"><use xlink:href="#ion-move"></use></svg></div>
55671
- <button type="button" tabindex="-1" title="${util.out('More')}" class="row-more"><svg class="is-icon-flex"><use xlink:href="#ion-more"></use></svg></button>
55672
- <button type="button" tabindex="-1" title="${util.out('Grid Editor')}" class="row-grideditor"><svg class="is-icon-flex"><use xlink:href="#ion-grid"></use></svg></button>
55673
- <button type="button" tabindex="-1" title="${util.out('Delete')}" class="row-remove"><svg class="is-icon-flex"><use xlink:href="#ion-ios-close-empty"></use></svg></button>
55674
- </div>
55675
- <div class="is-tool is-col-tool">
55676
- <button type="button" tabindex="-1" title="${util.out('Add')}" class="cell-add"><svg class="is-icon-flex"><use xlink:href="#ion-ios-plus-empty"></use></svg></button>
55677
- <button type="button" tabindex="-1" title="${util.out('More')}" class="cell-more"><svg class="is-icon-flex"><use xlink:href="#ion-more"></use></svg></button>
55678
- <button type="button" tabindex="-1" title="${util.out('Delete')}" class="cell-remove"><svg class="is-icon-flex" style="margin-left:-1px"><use xlink:href="#ion-ios-close-empty"></use></svg></button>
55679
- </div>
55680
- `;
55681
- dom.appendHtml(row, html);
55682
- rowtool = row.querySelector('.is-row-tool'); // Prepare for tooltip
55683
-
55684
- let elms = rowtool.querySelectorAll('[title]');
55685
- Array.prototype.forEach.call(elms, elm => {
55686
- elm.setAttribute('data-title', elm.getAttribute('title'));
55687
-
55688
- if (!this.builder.iframe) {
55689
- this.builder.tooltip.set(elm, 5, 3);
55690
- } else {
55691
- this.builder.tooltip.set(elm, 5, 3, true);
55692
- }
55693
- });
55694
- let coltool = row.querySelector('.is-col-tool'); // Prepare for tooltip
55695
-
55696
- elms = coltool.querySelectorAll('[title]');
55697
- Array.prototype.forEach.call(elms, elm => {
55698
- elm.setAttribute('data-title', elm.getAttribute('title'));
55699
-
55700
- if (!this.builder.iframe) {
55701
- this.builder.tooltip.set(elm, 5, 3);
55702
- } else {
55703
- this.builder.tooltip.set(elm, 5, 3, true);
55704
- }
55705
- }); // Check for backward compatibility
55706
-
55707
- let marginLeft = window.getComputedStyle(coltool, null).getPropertyValue('margin-left');
55708
-
55709
- if (parseInt(marginLeft) === 0) {
55710
- this.builder.backwardCompatible();
55711
- }
55712
-
55713
- const btnCellAdd = coltool.querySelector('.cell-add');
55714
- if (btnCellAdd) dom.addEventListener(btnCellAdd, 'click', () => {
55715
- let cell = util.cellSelected();
55716
- if (!cell) return;
55717
- let quickadd = this.builder.builderStuff.querySelector('.is-pop.quickadd');
55718
- let tabs = quickadd.querySelector('.is-pop-tabs');
55719
- tabs.style.display = 'flex';
55720
- let top, left;
55721
-
55722
- if (!this.builder.iframe) {
55723
- top = btnCellAdd.getBoundingClientRect().top + window.pageYOffset;
55724
- left = btnCellAdd.getBoundingClientRect().left + window.pageXOffset;
55725
- } else {
55726
- let adjY = this.builder.iframe.getBoundingClientRect().top + window.pageYOffset;
55727
- let adjX = this.builder.iframe.getBoundingClientRect().left + window.pageXOffset;
55728
- top = btnCellAdd.getBoundingClientRect().top + adjY + 10;
55729
- left = btnCellAdd.getBoundingClientRect().left + adjX + 5;
55730
- } // quickadd.style.display = 'flex';
55731
-
55732
-
55733
- util.showPop(quickadd, false, btnCellAdd); //const w = quickadd.offsetWidth; //to get value, element must not hidden (display:none). So set display:flex before this.
55734
- //const h = quickadd.offsetHeight;
55735
-
55736
- quickadd.style.top = top + 35 + 'px';
55737
- quickadd.style.left = left + 'px';
55738
- dom.removeClass(quickadd, 'arrow-bottom');
55739
- dom.removeClass(quickadd, 'arrow-left');
55740
- dom.removeClass(quickadd, 'arrow-right');
55741
- dom.removeClass(quickadd, 'center');
55742
- dom.removeClass(quickadd, 'right');
55743
- dom.addClass(quickadd, 'arrow-top');
55744
- dom.addClass(quickadd, 'left');
55745
- let val = quickadd.querySelector('.active').getAttribute('data-value');
55746
-
55747
- if (val === 'left') {
55748
- quickadd.setAttribute('data-mode', 'cell-left');
55749
- } else {
55750
- quickadd.setAttribute('data-mode', 'cell-right');
55751
- }
55752
- });
55753
- const btnCellMore = coltool.querySelector('.cell-more');
55754
- if (btnCellMore) dom.addEventListener(btnCellMore, 'click', () => {
55755
- let cell = util.cellSelected();
55756
- if (!cell) return;
55757
- let top, left;
55758
-
55759
- if (!this.builder.iframe) {
55760
- top = btnCellMore.getBoundingClientRect().top + window.pageYOffset;
55761
- left = btnCellMore.getBoundingClientRect().left + window.pageXOffset;
55762
- } else {
55763
- let adjY = this.builder.iframe.getBoundingClientRect().top + window.pageYOffset;
55764
- let adjX = this.builder.iframe.getBoundingClientRect().left + window.pageXOffset;
55765
- top = btnCellMore.getBoundingClientRect().top + adjY;
55766
- left = btnCellMore.getBoundingClientRect().left + adjX;
55767
- }
55768
-
55769
- const columnMore = builderStuff.querySelector('.columnmore'); // columnMore.style.display = 'flex';
55770
-
55771
- util.showPop(columnMore, false, btnCellMore); //const w = columnMore.offsetWidth; //to get value, element must not hidden (display:none). So set display:flex before this.
55772
- //const h = columnMore.offsetHeight;
55773
-
55774
- columnMore.style.top = top + 35 + 'px';
55775
- columnMore.style.left = left - 7 + 'px';
55776
- dom.removeClass(columnMore, 'arrow-bottom');
55777
- dom.removeClass(columnMore, 'arrow-left');
55778
- dom.removeClass(columnMore, 'arrow-right');
55779
- dom.removeClass(columnMore, 'center');
55780
- dom.removeClass(columnMore, 'right');
55781
- dom.addClass(columnMore, 'arrow-top');
55782
- dom.addClass(columnMore, 'left');
55783
- const btnCellLocking = columnMore.querySelector('.cell-locking');
55784
-
55785
- if (cell.hasAttribute('data-noedit')) {
55786
- dom.addClass(btnCellLocking, 'on'); // btnCellLocking.innerHTML = '<svg class="is-icon-flex"><use xlink:href="#icon-lock"></use></svg>';
55787
- } else {
55788
- dom.removeClass(btnCellLocking, 'on'); // btnCellLocking.innerHTML = '<svg class="is-icon-flex"><use xlink:href="#icon-lock-off"></use></svg>';
55789
- }
55790
- });
55791
- const btnCellRemove = coltool.querySelector('.cell-remove');
55792
- if (btnCellRemove) dom.addEventListener(btnCellRemove, 'click', () => {
55793
- const grid = new Grid(this.builder);
55794
- grid.removeColumn();
55795
- util.clearControls();
55796
- });
55797
- let btnGridEditor = rowtool.querySelector('.row-grideditor');
55798
- if (btnGridEditor) dom.addEventListener(btnGridEditor, 'click', () => {
55799
- const grideditor = builderStuff.querySelector('.grideditor');
55800
-
55801
- if (dom.hasClass(grideditor, 'active')) {
55802
- dom.removeClass(grideditor, 'active');
55803
- const builders = document.querySelectorAll(this.builder.opts.container);
55804
- Array.prototype.forEach.call(builders, builder => {
55805
- builder.removeAttribute('grideditor');
55806
- });
55807
- } else {
55808
- // dom.addClass(grideditor, 'active');
55809
- this.util.showModal(grideditor, false, () => {
55810
- btnGridEditor.removeAttribute('data-focus');
55811
- btnGridEditor.focus();
55812
- });
55813
- btnGridEditor.setAttribute('data-focus', true);
55814
- const builders = document.querySelectorAll(this.builder.opts.container);
55815
- Array.prototype.forEach.call(builders, builder => {
55816
- builder.setAttribute('grideditor', '');
55817
- }); // Grid Editor Status
55818
- // On/off outline button
55819
-
55820
- const btnGridOutline = grideditor.querySelector('.grid-outline');
55821
- const container = document.querySelector(this.builder.opts.container); // get one
55822
-
55823
- if (container.hasAttribute('gridoutline')) {
55824
- dom.addClass(btnGridOutline, 'on');
55825
- } else {
55826
- dom.removeClass(btnGridOutline, 'on');
55827
- } // On/off lock button
55828
-
55829
-
55830
- const btnCellLocking = grideditor.querySelector('.cell-locking');
55831
- let cell = util.cellSelected();
55832
-
55833
- if (cell) {
55834
- if (cell.hasAttribute('data-noedit')) {
55835
- dom.addClass(btnCellLocking, 'on');
55836
- } else {
55837
- dom.removeClass(btnCellLocking, 'on');
55838
- }
55839
- } else {
55840
- dom.removeClass(btnCellLocking, 'on');
55841
- }
55842
- }
55843
- });
55844
- const btnMore = rowtool.querySelector('.row-more');
55845
- if (btnMore) dom.addEventListener(btnMore, 'click', () => {
55846
- let row;
55847
- let cell = util.cellSelected();
55848
-
55849
- if (cell) {
55850
- row = cell.parentNode;
55851
- } else {
55852
- row = util.rowSelected();
55853
- }
55854
-
55855
- if (!row) return; //Change to row selection
55856
-
55857
- dom.removeClass(row, 'row-outline'); //Hide Column tool (new!)
55858
-
55859
- util.hideColumnTool(); // const top = btnMore.getBoundingClientRect().top + window.pageYOffset;
55860
- // const left = btnMore.getBoundingClientRect().left + window.pageXOffset;
55861
-
55862
- let top, left;
55863
-
55864
- if (!this.builder.iframe) {
55865
- top = btnMore.getBoundingClientRect().top + window.pageYOffset;
55866
- left = btnMore.getBoundingClientRect().left + window.pageXOffset;
55867
- } else {
55868
- let adjY = this.builder.iframe.getBoundingClientRect().top + window.pageYOffset;
55869
- let adjX = this.builder.iframe.getBoundingClientRect().left + window.pageXOffset;
55870
- top = btnMore.getBoundingClientRect().top + adjY;
55871
- left = btnMore.getBoundingClientRect().left + adjX;
55872
- } // rowMore.style.display = 'flex';
55873
-
55874
-
55875
- util.showPop(rowMore, false, btnMore); //const w = rowMore.offsetWidth; //to get value, element must not hidden (display:none). So set display:flex before this.
55876
- //const h = rowMore.offsetHeight;
55877
-
55878
- rowMore.style.top = top - 8 + 'px';
55879
- dom.removeClass(rowMore, 'arrow-bottom');
55880
- dom.removeClass(rowMore, 'arrow-left');
55881
- dom.removeClass(rowMore, 'arrow-right');
55882
- dom.removeClass(rowMore, 'center');
55883
- dom.removeClass(rowMore, 'right');
55884
- dom.removeClass(rowMore, 'left');
55885
-
55886
- if (this.builder.opts.rowTool === 'right') {
55887
- rowMore.style.left = left - rowMore.offsetWidth - 10 + 'px';
55888
- dom.addClass(rowMore, 'arrow-right');
55889
- dom.addClass(rowMore, 'left');
55890
- } else {
55891
- rowMore.style.left = left + 35 + 'px';
55892
- dom.addClass(rowMore, 'arrow-left');
55893
- dom.addClass(rowMore, 'left');
55894
- }
55895
-
55896
- let btnRowHtml = rowMore.querySelector('.row-html');
55897
- let btnRowDuplicate = rowMore.querySelector('.row-duplicate');
55898
-
55899
- if (row.querySelector('[data-html]')) {
55900
- if (btnRowHtml) btnRowHtml.style.display = 'none';
55901
- if (btnRowDuplicate) btnRowDuplicate.style.display = 'none';
55902
- } else {
55903
- if (btnRowHtml) btnRowHtml.style.display = '';
55904
- if (btnRowDuplicate) btnRowDuplicate.style.display = '';
55905
- }
55906
- });
55907
- let elm = rowtool.querySelector('.row-remove');
55908
- if (elm) dom.addEventListener(elm, 'click', () => {
55909
- this.grid.removeRow();
55910
- util.clearControls();
55911
- });
55912
- }
55913
- }
55914
-
55915
- }
55916
-
55917
- class RowAddTool {
55918
- constructor(builder) {
55919
- this.builder = builder;
55920
- const dom = this.builder.dom;
55921
- this.dom = dom;
55922
- }
55923
-
55924
- render(row) {
55925
- const dom = this.dom;
55926
- const util = this.builder.util;
55927
- const quickadd = renderQuickAdd(this.builder);
55928
- let rowaddtool = row.querySelector('.is-rowadd-tool');
55929
-
55930
- if (!rowaddtool) {
55931
- const html = `<div class="is-rowadd-tool" style="height:0">
55932
- <button type="button" tabindex="-1" title="${util.out('Add')}" title="${util.out('Add')}" style="outline:none;line-height:1;margin:0;padding:0;cursor:pointer;background-color:rgba(255,255,255,0.9);"><svg class="is-icon-flex" style="fill:rgba(0, 0, 0, 0.8);width:17px;height:17px;"><use xlink:href="#ion-ios-plus-empty"></use></svg></button>
55933
- </div>`;
55934
- dom.appendHtml(row, html);
55935
- rowaddtool = row.querySelector('.is-rowadd-tool'); // Prepare for tooltip
55936
-
55937
- let elms = rowaddtool.querySelectorAll('[title]');
55938
- Array.prototype.forEach.call(elms, elm => {
55939
- elm.setAttribute('data-title', elm.getAttribute('title'));
55940
-
55941
- if (!this.builder.iframe) {
55942
- this.builder.tooltip.set(elm, 5, 3);
55943
- } else {
55944
- this.builder.tooltip.set(elm, 5, 3, true);
55945
- }
55946
- });
55947
- }
55948
-
55949
- let btnRowAdd = rowaddtool.querySelector('button');
55950
- dom.addEventListener(btnRowAdd, 'click', () => {
55951
- let tabs = quickadd.querySelector('.is-pop-tabs');
55952
- tabs.style.display = 'none';
55953
- const viewportHeight = window.innerHeight;
55954
- let top, left;
55955
-
55956
- if (!this.builder.iframe) {
55957
- top = btnRowAdd.getBoundingClientRect().top;
55958
- left = btnRowAdd.getBoundingClientRect().left;
55959
- } else {
55960
- let adjY = this.builder.iframe.getBoundingClientRect().top;
55961
- let adjX = this.builder.iframe.getBoundingClientRect().left;
55962
- top = btnRowAdd.getBoundingClientRect().top + adjY;
55963
- left = btnRowAdd.getBoundingClientRect().left + adjX;
55964
- } // quickadd.style.display = 'flex';
55965
-
55966
-
55967
- util.showPop(quickadd, false, btnRowAdd);
55968
- const w = quickadd.offsetWidth; //to get value, element must not hidden (display:none). So set display:flex before this.
55969
-
55970
- const h = quickadd.offsetHeight;
55971
-
55972
- if (viewportHeight - top > h) {
55973
- quickadd.style.top = top + window.pageYOffset + 27 + 'px';
55974
- quickadd.style.left = left - w / 2 + 7 + 'px';
55975
- dom.removeClass(quickadd, 'arrow-bottom');
55976
- dom.removeClass(quickadd, 'arrow-right');
55977
- dom.removeClass(quickadd, 'arrow-left');
55978
- dom.removeClass(quickadd, 'center');
55979
- dom.addClass(quickadd, 'arrow-top');
55980
- dom.addClass(quickadd, 'center');
55981
- } else {
55982
- quickadd.style.top = top + window.pageYOffset - h - 8 + 'px';
55983
- quickadd.style.left = left - w / 2 + 7 + 'px';
55984
- dom.removeClass(quickadd, 'arrow-top');
55985
- dom.removeClass(quickadd, 'arrow-right');
55986
- dom.removeClass(quickadd, 'arrow-left');
55987
- dom.removeClass(quickadd, 'center');
55988
- dom.addClass(quickadd, 'arrow-bottom');
55989
- dom.addClass(quickadd, 'center');
55990
- }
55991
-
55992
- quickadd.setAttribute('data-mode', 'row');
55993
- return false;
55994
- });
55995
- }
55996
-
55997
- }
55998
-
55999
55585
  class Modal {
56000
55586
  constructor(opts = {}) {
56001
55587
  let defaults = {
@@ -57781,6 +57367,939 @@ var parseGradient = function (regExpLib, input) {
57781
57367
  return result;
57782
57368
  };
57783
57369
 
57370
+ class RowTool {
57371
+ constructor(builder) {
57372
+ this.builder = builder;
57373
+ const util = this.builder.util;
57374
+ this.util = util;
57375
+ const builderStuff = this.builder.builderStuff;
57376
+ const dom = this.builder.dom;
57377
+ this.dom = dom;
57378
+ this.grid = new Grid(builder);
57379
+ let rowMore = builderStuff.querySelector('.rowmore');
57380
+ let htmlbutton = '';
57381
+ if (builder.opts.rowHtmlEditor) htmlbutton = `<button type="button" title="${util.out('HTML')}" class="row-html">
57382
+ <span><svg class="is-icon-flex" style="margin-right:-3px;width:12px;height:12px;"><use xlink:href="#ion-ios-arrow-left"></use></svg><svg class="is-icon-flex" style="margin-left:-2px;width:12px;height:12px;"><use xlink:href="#ion-ios-arrow-right"></use></svg></span>${util.out('HTML')}
57383
+ </button>`;
57384
+
57385
+ if (!rowMore) {
57386
+ let html = `<div class="is-pop rowmore" style="z-index:10002;" tabindex="-1" role="dialog" aria-modal="true" aria-hidden="true">
57387
+ <div style="display:flex;flex-flow:wrap;">
57388
+ <button type="button" title="${util.out('Move Up')}" class="row-up"><span><svg class="is-icon-flex" style="width:15px;height:15px;"><use xlink:href="#ion-ios-arrow-thin-up"></use></svg></span>${util.out('Move Up')}</button>
57389
+ <button type="button" title="${util.out('Move Down')}" class="row-down"><span><svg class="is-icon-flex" style="width:15px;height:15px;"><use xlink:href="#ion-ios-arrow-thin-down"></use></svg></span>${util.out('Move Down')}</button>
57390
+ <button type="button" title="${util.out('Duplicate')}" class="row-duplicate"><span><svg class="is-icon-flex" style="width:12px;height:12px;"><use xlink:href="#ion-ios-photos-outline"></use></svg></span>${util.out('Duplicate')}</button>
57391
+ ${htmlbutton}
57392
+ <div class="is-separator"></div>
57393
+ <button type="button" title="${util.out('Lock')}" class="row-locking"><span><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-lock"></use></svg></span>${util.out('Lock')}</button>
57394
+ <button type="button" title="${util.out('Settings')}" class="row-settings"><span><svg class="is-icon-flex" style="width:12px;height:12px;"><use xlink:href="#ion-ios-gear"></use></svg></span>${util.out('Settings')}</button>
57395
+ </div>
57396
+ </div>
57397
+
57398
+ <div class="is-modal rowsettings" tabindex="-1" role="dialog" aria-modal="true" aria-hidden="true">
57399
+ <div class="is-modal-content">
57400
+ <div class="is-modal-bar is-draggable">
57401
+ ${util.out('Row Settings')}
57402
+ <button class="is-modal-close" title="${util.out('Close')}" tabindex="-1">&#10005;</button>
57403
+ </div>
57404
+
57405
+ <div style="padding:0;margin-top:35px;">
57406
+
57407
+ <div class="is-tabs" data-group="rowsettings">
57408
+ <a title="${util.out('General')}" id="tabRowGeneral" href="#" data-content="divRowGeneral" class="active">${util.out('General')}</a>
57409
+ <a title="${util.out('More')}" id="tabRowMore" href="#" data-content="divRowMore">${util.out('More')}</a>
57410
+ </div>
57411
+ <div id="divRowGeneral" class="is-tab-content active" data-group="rowsettings" style="display:flex" tabindex="-1">
57412
+
57413
+ <div style="padding-bottom: 3px;">${util.out('Background Color')}:</div>
57414
+ <div style="display:flex;">
57415
+ <button title="${util.out('Background Color')}" class="input-row-bgcolor is-btn-color" style="margin-right:15px"></button>
57416
+ <button title="${util.out('Gradient')}" class="input-row-gradient classic" data-value="+"> ${util.out('Gradient')} </button>
57417
+ </div>
57418
+
57419
+ <div style="padding-top:20px;padding-bottom: 3px;">${util.out('Background Image')}:</div>
57420
+ <div>
57421
+ <div class="cell-bgimage-preview"></div>
57422
+ <div style="display: flex">
57423
+ <button title="${util.out('Image')}" class="input-cell-bgimage">
57424
+ <svg class="is-icon-flex"><use xlink:href="#ion-image"></use></svg>
57425
+ <span>${util.out('Image')}</span>
57426
+ </button>
57427
+ <button title="${util.out('Select')}" class="input-select"><svg class="is-icon-flex"><use xlink:href="#ion-more"></use></svg></button>
57428
+ <button title="${util.out('Remove')}" class="input-row-bgremove"><svg class="is-icon-flex" style="width:11px;height:11px;"><use xlink:href="#icon-clean"></use></svg></button>
57429
+ <button title="${util.out('Adjust')}" class="input-row-bgimageadjust" style="width:40px"><svg class="is-icon-flex"><use xlink:href="#ion-wrench"></use></svg></button>
57430
+ </div>
57431
+ </div>
57432
+
57433
+ <div style="padding:30px 0 10px;">
57434
+ <label class="label-row-grayscale label-checkbox" for="chkRowGrayscale"><input id="chkRowGrayscale" class="chk-row-grayscale" type="checkbox" /> ${util.out('Grayscale')}</label>
57435
+ </div>
57436
+
57437
+ <div class="is-separator"></div>
57438
+
57439
+ <div class="div-target" style="display: flex;justify-content: flex-end;padding: 5px 0 0;">
57440
+ <button title="${util.out('Desktop')}" class="input-device on" data-value="" style="width:40px;height:25px;">
57441
+ <svg class="is-icon-flex" style="width:16px;height:16px"><use xlink:href="#icon-device-desktop"></use></svg>
57442
+ </button>
57443
+ <button title="${util.out('Tablet')}" class="input-device" data-value="sm" style="width:40px;height:25px;">
57444
+ <svg class="is-icon-flex" style="width:16px;height:16px"><use xlink:href="#icon-device-tablet"></use></svg>
57445
+ </button>
57446
+ <button title="${util.out('Mobile')}" class="input-device" data-value="xs" style="width:40px;height:25px;">
57447
+ <svg class="is-icon-flex" style="width:13px;height:13px"><use xlink:href="#icon-device-mobile"></use></svg>
57448
+ </button>
57449
+ </div>
57450
+
57451
+ <div style="padding-top:0;padding-bottom:3px;">${util.out('Visibility')}:</div>
57452
+ <div class="div-visibility" style="display:flex;">
57453
+ <button title="${util.out('Visible')}" class="input-visible on" data-value="sm" style="width:100px;height:34px;">
57454
+ <svg class="is-icon-flex" style="width:16px;height:16px"><use xlink:href="#icon-eye"></use></svg>
57455
+ <span>${util.out('Visible')}</span>
57456
+ </button>
57457
+ <button title="${util.out('Hidden')}" class="input-hidden" data-value="xs" style="width:100px;height:34px;">
57458
+ <svg class="is-icon-flex" style="width:16px;height:16px"><use xlink:href="#icon-eye-off"></use></svg>
57459
+ <span>${util.out('Hidden')}</span>
57460
+ </button>
57461
+ </div>
57462
+
57463
+ </div>
57464
+
57465
+ <div id="divRowMore" class="is-tab-content" data-group="rowsettings" tabindex="-1">
57466
+
57467
+ <label for="inpRowId">${util.out('Add Row ID')}:</label>
57468
+ <div>
57469
+ <input id="inpRowId" class="input-row-id" type="text" onkeypress="return /[0-9a-zA-Z_]/i.test(event.key)" style="height:38px">
57470
+ </div>
57471
+
57472
+ <label for="inpRowCssClasses" style="padding:20px 0 3px;">${util.out('Add Css Classes')}:</label>
57473
+ <div>
57474
+ <input id="inpRowCssClasses" class="input-row-classes" type="text" style="height:38px">
57475
+ </div>
57476
+
57477
+ </div>
57478
+
57479
+ </div>
57480
+
57481
+ </div>
57482
+ </div>
57483
+
57484
+ `;
57485
+ dom.appendHtml(builderStuff, html);
57486
+ rowMore = builderStuff.querySelector('.rowmore');
57487
+ const rowSettings = builderStuff.querySelector('.is-modal.rowsettings');
57488
+ const imageSource = document.querySelector('.is-modal.imagesource');
57489
+ const imageAdjust = document.querySelector('.is-modal.imageadjust');
57490
+ const imageAdjust2 = document.querySelector('.is-modal.imageadjust2');
57491
+ this.rowSettings = rowSettings;
57492
+ this.imageSource = imageSource;
57493
+ this.imageAdjust = imageAdjust;
57494
+ this.imageAdjust2 = imageAdjust2;
57495
+ this.divRowGeneral = builderStuff.querySelector('#divRowGeneral'); // Open Row Settings
57496
+
57497
+ let elm = rowMore.querySelector('.row-settings');
57498
+ if (elm) dom.addEventListener(elm, 'click', () => {
57499
+ const row = this.rowOverlay();
57500
+ if (!row) return;
57501
+ this.readRowStyles(row); //save selection
57502
+
57503
+ util.saveSelection();
57504
+ util.showModal(rowSettings, false, () => {
57505
+ let rtetool = builderStuff.querySelector('.is-rte-tool');
57506
+
57507
+ if (rtetool.style.display === 'flex') {
57508
+ // means text selection
57509
+ util.restoreSelection();
57510
+ }
57511
+ }); // this.rowMore.style.display = '';
57512
+
57513
+ util.hidePop(this.rowMore);
57514
+ }); // Row Background color
57515
+
57516
+ let btnRowBgColor = rowSettings.querySelector('.input-row-bgcolor');
57517
+ btnRowBgColor.addEventListener('click', e => {
57518
+ this.builder.uo.saveForUndo(true); // checkLater = true
57519
+
57520
+ let elm = e.target;
57521
+ this.builder.colorPicker.open(color => {
57522
+ const row = this.rowOverlay();
57523
+ if (!row) return;
57524
+ row.style.backgroundColor = color;
57525
+ elm.style.backgroundColor = color; // preview
57526
+ //Trigger Change event
57527
+
57528
+ this.builder.opts.onChange();
57529
+ }, rowSettings.querySelector('.input-row-bgcolor').style.backgroundColor, () => {
57530
+ btnRowBgColor.removeAttribute('data-focus');
57531
+ btnRowBgColor.focus();
57532
+ });
57533
+ btnRowBgColor.setAttribute('data-focus', true);
57534
+ }); // Row Background Image
57535
+
57536
+ const btnRowBgImage = rowSettings.querySelector('.input-cell-bgimage');
57537
+ if (btnRowBgImage) dom.addEventListener(btnRowBgImage, 'click', () => {
57538
+ const row = this.rowOverlay();
57539
+ if (!row) return; //Get current value
57540
+
57541
+ let imgUrl = '';
57542
+
57543
+ if (row.style.backgroundImage) {
57544
+ if (row.style.backgroundImage.indexOf('url(') !== -1) {
57545
+ imgUrl = row.style.backgroundImage.slice(4, -1).replace(/["']/g, '');
57546
+ }
57547
+ }
57548
+
57549
+ this.builder.colTool.openImagePicker(imgUrl, url => {
57550
+ const row = this.rowOverlay();
57551
+ if (!row) return;
57552
+ this.builder.uo.saveForUndo();
57553
+ row.style.backgroundImage = `url("${url}")`;
57554
+ row.style.backgroundSize = 'cover';
57555
+ row.style.backgroundRepeat = 'no-repeat';
57556
+ const div = rowSettings.querySelector('.cell-bgimage-preview');
57557
+ const btnImageAdjust = this.rowSettings.querySelector('.input-row-bgimageadjust');
57558
+ const btnImageRemove = this.rowSettings.querySelector('.input-row-bgremove');
57559
+ btnImageAdjust.style.display = 'none';
57560
+ btnImageRemove.style.display = 'none';
57561
+
57562
+ if (url !== '') {
57563
+ div.innerHTML = `<img src="${url}">`;
57564
+ btnImageAdjust.style.display = 'flex';
57565
+ btnImageRemove.style.display = 'flex';
57566
+ } else {
57567
+ div.innerHTML = '';
57568
+ } //Trigger Change event
57569
+
57570
+
57571
+ this.builder.opts.onChange();
57572
+ }, btnRowBgImage);
57573
+ }); // Row Background Image Adjust
57574
+
57575
+ const btnImageAdjust = rowSettings.querySelector('.input-row-bgimageadjust');
57576
+ if (btnImageAdjust) dom.addEventListener(btnImageAdjust, 'click', () => {
57577
+ const row = this.rowOverlay();
57578
+ if (!row) return;
57579
+ this.builder.colTool.openImageAdjust(row, btnImageAdjust);
57580
+ });
57581
+ elm = rowSettings.querySelector('.input-row-bgremove');
57582
+ if (elm) dom.addEventListener(elm, 'click', () => {
57583
+ const row = this.rowOverlay();
57584
+ if (!row) return;
57585
+ this.builder.uo.saveForUndo();
57586
+ row.style.backgroundImage = '';
57587
+ row.style.backgroundSize = '';
57588
+ row.style.backgroundRepeat = '';
57589
+ row.style.backgroundPosition = '';
57590
+ const div = rowSettings.querySelector('.cell-bgimage-preview');
57591
+ const btnImageAdjust = this.rowSettings.querySelector('.input-row-bgimageadjust');
57592
+ const btnImageRemove = this.rowSettings.querySelector('.input-row-bgremove');
57593
+ btnImageAdjust.style.display = 'none';
57594
+ btnImageRemove.style.display = 'none';
57595
+ div.innerHTML = ''; //Trigger Change event
57596
+
57597
+ this.builder.opts.onChange();
57598
+ }); // Row Background Image Open Asset
57599
+
57600
+ if (!this.builder.opts.onImageSelectClick && this.builder.opts.imageselect === '') {
57601
+ this.divRowGeneral.querySelector('.input-select').style.display = 'none';
57602
+ }
57603
+
57604
+ const btnRowBgImageOpenAsset = this.divRowGeneral.querySelector('.input-select');
57605
+ this.builder.renderSelectAsset(btnRowBgImageOpenAsset, 'image', url => {
57606
+ const row = this.rowOverlay();
57607
+ if (!row) return;
57608
+ this.builder.uo.saveForUndo();
57609
+ row.style.backgroundImage = `url("${url}")`;
57610
+ row.style.backgroundSize = 'cover';
57611
+ row.style.backgroundRepeat = 'no-repeat';
57612
+ const div = rowSettings.querySelector('.cell-bgimage-preview');
57613
+ const btnImageAdjust = this.rowSettings.querySelector('.input-row-bgimageadjust');
57614
+ const btnImageRemove = this.rowSettings.querySelector('.input-row-bgremove');
57615
+ btnImageAdjust.style.display = 'none';
57616
+ btnImageRemove.style.display = 'none';
57617
+
57618
+ if (url !== '') {
57619
+ div.innerHTML = `<img src="${url}">`;
57620
+ btnImageAdjust.style.display = 'flex';
57621
+ btnImageRemove.style.display = 'flex';
57622
+ } else {
57623
+ div.innerHTML = '';
57624
+ } //Trigger Change event
57625
+
57626
+
57627
+ this.builder.opts.onChange();
57628
+ }); // Background gradient
57629
+
57630
+ const gradientPicker = new GradientPicker({
57631
+ colors: this.builder.colors,
57632
+ gradientcolors: this.builder.opts.gradientcolors,
57633
+ lang: this.builder.opts.lang
57634
+ });
57635
+ let btnRowGradient = rowSettings.querySelector('.input-row-gradient');
57636
+ btnRowGradient.addEventListener('click', () => {
57637
+ this.builder.uo.saveForUndo(true); // checkLater = true
57638
+
57639
+ const row = this.rowOverlay();
57640
+ if (!row) return;
57641
+ gradientPicker.open(row, () => {
57642
+ const btnImageAdjust = this.rowSettings.querySelector('.input-row-bgimageadjust');
57643
+ btnImageAdjust.style.display = 'none';
57644
+ const btnImageRemove = this.rowSettings.querySelector('.input-row-bgremove');
57645
+ btnImageRemove.style.display = 'none';
57646
+ const div = this.rowSettings.querySelector('.cell-bgimage-preview');
57647
+ div.innerHTML = '';
57648
+ const inpSrc = this.imageSource.querySelector('.input-src');
57649
+ inpSrc.value = ''; //Trigger Change event
57650
+
57651
+ this.builder.opts.onChange();
57652
+ }, isChanged => {
57653
+
57654
+ btnRowGradient.removeAttribute('data-focus');
57655
+ btnRowGradient.focus();
57656
+ });
57657
+ btnRowGradient.setAttribute('data-focus', true);
57658
+ });
57659
+ const chkRowGrayscale = rowSettings.querySelector('.chk-row-grayscale');
57660
+ chkRowGrayscale.addEventListener('click', () => {
57661
+ this.builder.uo.saveForUndo();
57662
+ const row = this.rowOverlay();
57663
+ if (!row) return;
57664
+
57665
+ if (chkRowGrayscale.checked) {
57666
+ row.style.filter = 'grayscale(1)';
57667
+ } else {
57668
+ if (row.style.filter) {
57669
+ row.style.filter = row.style.filter.replace('grayscale(1)', '');
57670
+ }
57671
+ } //Trigger Change event
57672
+
57673
+
57674
+ this.builder.opts.onChange();
57675
+ }); // Responsive Visibility
57676
+
57677
+ let btns = this.rowSettings.querySelectorAll('.input-device');
57678
+ btns.forEach(btn => {
57679
+ btn.addEventListener('click', () => {
57680
+ let row = util.rowSelected();
57681
+ if (!row) return;
57682
+ let elms = this.rowSettings.querySelectorAll('.input-device');
57683
+ elms.forEach(elm => {
57684
+ elm.classList.remove('on');
57685
+ });
57686
+ btn.classList.add('on');
57687
+ this.realtimeVisibility(row);
57688
+ });
57689
+ });
57690
+ let btnVisible = this.rowSettings.querySelector('.input-visible');
57691
+ let btnHidden = this.rowSettings.querySelector('.input-hidden');
57692
+ btnVisible.addEventListener('click', () => {
57693
+ let row = util.rowSelected();
57694
+ if (!row) return;
57695
+ row.classList.remove('hideonmobile');
57696
+ let divTarget = this.rowSettings.querySelector('.div-target');
57697
+ let target = this.builder.responsive.readTarget(divTarget);
57698
+
57699
+ if (target === 'xs') {
57700
+ row.classList.remove('xs-hidden');
57701
+ } else if (target === 'sm') {
57702
+ row.classList.remove('sm-hidden');
57703
+ } else if (target === '') {
57704
+ row.classList.remove('desktop-hidden');
57705
+ }
57706
+
57707
+ btnVisible.classList.add('on');
57708
+ btnHidden.classList.remove('on');
57709
+ });
57710
+ btnHidden.addEventListener('click', () => {
57711
+ let row = util.rowSelected();
57712
+ if (!row) return;
57713
+ row.classList.remove('hideonmobile');
57714
+ let divTarget = this.rowSettings.querySelector('.div-target');
57715
+ let target = this.builder.responsive.readTarget(divTarget);
57716
+
57717
+ if (target === 'xs') {
57718
+ row.classList.add('xs-hidden');
57719
+ } else if (target === 'sm') {
57720
+ row.classList.add('sm-hidden');
57721
+ } else if (target === '') {
57722
+ row.classList.add('desktop-hidden');
57723
+ }
57724
+
57725
+ btnVisible.classList.remove('on');
57726
+ btnHidden.classList.add('on');
57727
+ }); //More
57728
+
57729
+ let inpRowId = rowSettings.querySelector('.input-row-id');
57730
+ inpRowId.addEventListener('change', () => {
57731
+ let row = util.rowSelected();
57732
+ if (!row) return;
57733
+ this.builder.uo.saveForUndo();
57734
+
57735
+ if (inpRowId.value !== '') {
57736
+ row.setAttribute('id', inpRowId.value);
57737
+ } else {
57738
+ row.removeAttribute('id');
57739
+ } //Trigger Change event
57740
+
57741
+
57742
+ this.builder.opts.onChange();
57743
+ });
57744
+ let inpRowCssClasses = rowSettings.querySelector('.input-row-classes');
57745
+ inpRowCssClasses.addEventListener('change', () => {
57746
+ let row = util.rowSelected();
57747
+ if (!row) return;
57748
+ this.builder.uo.saveForUndo();
57749
+ let arrCurrentClasses = [];
57750
+ let currentClasses = row.getAttribute('data-class');
57751
+ if (currentClasses) arrCurrentClasses = currentClasses.split(' ');
57752
+ let arrNewClasses = [];
57753
+ let newClasses = inpRowCssClasses.value;
57754
+ arrNewClasses = newClasses.split(' ');
57755
+ arrCurrentClasses.forEach(item => {
57756
+ if (!arrNewClasses.includes(item)) {
57757
+ row.classList.remove(item);
57758
+ }
57759
+ });
57760
+ arrNewClasses.forEach(item => {
57761
+ if (item !== '') row.classList.add(item);
57762
+ }); // save
57763
+
57764
+ row.setAttribute('data-class', newClasses);
57765
+ if (row.getAttribute('data-class') === '') row.removeAttribute('data-class'); //Trigger Change event
57766
+
57767
+ this.builder.opts.onChange();
57768
+ }); //-----------------
57769
+
57770
+ elm = rowMore.querySelector('.row-up');
57771
+ if (elm) dom.addEventListener(elm, 'click', () => {
57772
+ this.grid.moveRowUp(); // util.clearControls();
57773
+ });
57774
+ elm = rowMore.querySelector('.row-down');
57775
+ if (elm) dom.addEventListener(elm, 'click', () => {
57776
+ this.grid.moveRowDown(); // util.clearControls();
57777
+ });
57778
+ elm = rowMore.querySelector('.row-duplicate');
57779
+ if (elm) dom.addEventListener(elm, 'click', () => {
57780
+ this.grid.duplicateRow(); // this.rowMore.style.display = '';
57781
+
57782
+ util.hidePop(rowMore); //Hide Column tool (new!)
57783
+
57784
+ util.hideColumnTool();
57785
+ util.clearControls();
57786
+ });
57787
+ elm = rowMore.querySelector('.row-html');
57788
+ if (elm) dom.addEventListener(elm, 'click', () => {
57789
+ // const cell = util.cellSelected();
57790
+ // if(!cell) return;
57791
+ let row;
57792
+ let cell = util.cellSelected();
57793
+
57794
+ if (cell) {
57795
+ row = cell.parentNode;
57796
+ } else {
57797
+ row = util.rowSelected();
57798
+ }
57799
+
57800
+ if (!row) return;
57801
+ const htmlutil = new HtmlUtil(builder);
57802
+ htmlutil.view('row');
57803
+ }); // Lock/Unlock Row
57804
+
57805
+ const btnRowLocking = rowMore.querySelector('.row-locking');
57806
+ if (btnRowLocking) dom.addEventListener(btnRowLocking, 'click', e => {
57807
+ let row = util.rowSelected();
57808
+ if (!row) return;
57809
+ let currentLocking = false;
57810
+ let elms = row.querySelectorAll('[data-noedit]');
57811
+ elms.forEach(elm => {
57812
+ if (!elm.hasAttribute('data-html')) {
57813
+ currentLocking = true;
57814
+ }
57815
+ });
57816
+
57817
+ if (!currentLocking) {
57818
+ Array.from(row.children).map(cell => {
57819
+ if (cell.classList.contains('is-row-tool')) return;
57820
+ if (cell.classList.contains('is-col-tool')) return;
57821
+ if (cell.classList.contains('is-rowadd-tool')) return;
57822
+ if (cell.classList.contains('is-row-overlay')) return;
57823
+ cell.setAttribute('data-noedit', '');
57824
+ cell.contentEditable = false;
57825
+ this.util.clearActiveElement(true);
57826
+ this.builder.colTool.showHideLockIndicator(cell);
57827
+ this.builder.element.applyBehavior(cell);
57828
+ });
57829
+ dom.addClass(btnRowLocking, 'on');
57830
+ } else {
57831
+ Array.from(row.children).map(cell => {
57832
+ if (cell.classList.contains('is-row-tool')) return;
57833
+ if (cell.classList.contains('is-col-tool')) return;
57834
+ if (cell.classList.contains('is-rowadd-tool')) return;
57835
+ if (cell.classList.contains('is-row-overlay')) return;
57836
+ cell.removeAttribute('data-noedit');
57837
+ cell.contentEditable = true;
57838
+ this.builder.colTool.showHideLockIndicator(cell);
57839
+ this.builder.element.applyBehavior(cell);
57840
+ });
57841
+ dom.removeClass(btnRowLocking, 'on');
57842
+ }
57843
+
57844
+ util.hidePop(rowMore);
57845
+ e.preventDefault();
57846
+ });
57847
+ }
57848
+
57849
+ this.rowMore = rowMore; // // Click anywhere will hide Column tool
57850
+ // document.addEventListener('mousedown', (e) => {
57851
+ // e = e || window.event;
57852
+ // var target = e.target || e.srcElement;
57853
+ // if(rowMore.style.display === 'flex'){
57854
+ // let a = dom.parentsHasClass(target, 'rowmore');
57855
+ // let b = dom.parentsHasClass(target, 'row-more');
57856
+ // if(a||b) {
57857
+ // return;
57858
+ // }
57859
+ // else {
57860
+ // // rowMore.style.display = '';
57861
+ // util.hidePop(rowMore);
57862
+ // }
57863
+ // }
57864
+ // });
57865
+ }
57866
+
57867
+ realtimeVisibility(row) {
57868
+ let divTarget = this.rowSettings.querySelector('.div-target');
57869
+ let divVisibility = this.rowSettings.querySelector('.div-visibility');
57870
+ let target = this.builder.responsive.readTarget(divTarget);
57871
+ let valVisibility = this.builder.responsive.getVisibility(row, target);
57872
+ this.builder.responsive.showVisibility(divVisibility, valVisibility);
57873
+ }
57874
+
57875
+ render(row) {
57876
+ const dom = this.dom;
57877
+ const util = this.builder.util;
57878
+ const builderStuff = this.builder.builderStuff;
57879
+ let rowMore = this.rowMore;
57880
+ let rowtool = row.querySelector('.is-row-tool');
57881
+
57882
+ if (!rowtool) {
57883
+ let html = `<div class="is-tool is-row-tool">
57884
+ <div title="${util.out('Move')}" role="button" tabindex="-1" class="row-handle" style="width:100%;cursor:move;text-align:center;"><svg class="is-icon-flex"><use xlink:href="#ion-move"></use></svg></div>
57885
+ <button type="button" tabindex="-1" title="${util.out('More')}" class="row-more"><svg class="is-icon-flex"><use xlink:href="#ion-more"></use></svg></button>
57886
+ <button type="button" tabindex="-1" title="${util.out('Grid Editor')}" class="row-grideditor"><svg class="is-icon-flex"><use xlink:href="#ion-grid"></use></svg></button>
57887
+ <button type="button" tabindex="-1" title="${util.out('Delete')}" class="row-remove"><svg class="is-icon-flex"><use xlink:href="#ion-ios-close-empty"></use></svg></button>
57888
+ </div>
57889
+ <div class="is-tool is-col-tool">
57890
+ <button type="button" tabindex="-1" title="${util.out('Add')}" class="cell-add"><svg class="is-icon-flex"><use xlink:href="#ion-ios-plus-empty"></use></svg></button>
57891
+ <button type="button" tabindex="-1" title="${util.out('More')}" class="cell-more"><svg class="is-icon-flex"><use xlink:href="#ion-more"></use></svg></button>
57892
+ <button type="button" tabindex="-1" title="${util.out('Delete')}" class="cell-remove"><svg class="is-icon-flex" style="margin-left:-1px"><use xlink:href="#ion-ios-close-empty"></use></svg></button>
57893
+ </div>
57894
+ `;
57895
+ dom.appendHtml(row, html);
57896
+ rowtool = row.querySelector('.is-row-tool'); // Prepare for tooltip
57897
+
57898
+ let elms = rowtool.querySelectorAll('[title]');
57899
+ Array.prototype.forEach.call(elms, elm => {
57900
+ elm.setAttribute('data-title', elm.getAttribute('title'));
57901
+
57902
+ if (!this.builder.iframe) {
57903
+ this.builder.tooltip.set(elm, 5, 3);
57904
+ } else {
57905
+ this.builder.tooltip.set(elm, 5, 3, true);
57906
+ }
57907
+ });
57908
+ let coltool = row.querySelector('.is-col-tool'); // Prepare for tooltip
57909
+
57910
+ elms = coltool.querySelectorAll('[title]');
57911
+ Array.prototype.forEach.call(elms, elm => {
57912
+ elm.setAttribute('data-title', elm.getAttribute('title'));
57913
+
57914
+ if (!this.builder.iframe) {
57915
+ this.builder.tooltip.set(elm, 5, 3);
57916
+ } else {
57917
+ this.builder.tooltip.set(elm, 5, 3, true);
57918
+ }
57919
+ }); // Check for backward compatibility
57920
+
57921
+ let marginLeft = window.getComputedStyle(coltool, null).getPropertyValue('margin-left');
57922
+
57923
+ if (parseInt(marginLeft) === 0) {
57924
+ this.builder.backwardCompatible();
57925
+ }
57926
+
57927
+ const btnCellAdd = coltool.querySelector('.cell-add');
57928
+ if (btnCellAdd) dom.addEventListener(btnCellAdd, 'click', () => {
57929
+ let cell = util.cellSelected();
57930
+ if (!cell) return;
57931
+ let quickadd = this.builder.builderStuff.querySelector('.is-pop.quickadd');
57932
+ let tabs = quickadd.querySelector('.is-pop-tabs');
57933
+ tabs.style.display = 'flex';
57934
+ let top, left;
57935
+
57936
+ if (!this.builder.iframe) {
57937
+ top = btnCellAdd.getBoundingClientRect().top + window.pageYOffset;
57938
+ left = btnCellAdd.getBoundingClientRect().left + window.pageXOffset;
57939
+ } else {
57940
+ let adjY = this.builder.iframe.getBoundingClientRect().top + window.pageYOffset;
57941
+ let adjX = this.builder.iframe.getBoundingClientRect().left + window.pageXOffset;
57942
+ top = btnCellAdd.getBoundingClientRect().top + adjY + 10;
57943
+ left = btnCellAdd.getBoundingClientRect().left + adjX + 5;
57944
+ } // quickadd.style.display = 'flex';
57945
+
57946
+
57947
+ util.showPop(quickadd, false, btnCellAdd); //const w = quickadd.offsetWidth; //to get value, element must not hidden (display:none). So set display:flex before this.
57948
+ //const h = quickadd.offsetHeight;
57949
+
57950
+ quickadd.style.top = top + 35 + 'px';
57951
+ quickadd.style.left = left + 'px';
57952
+ dom.removeClass(quickadd, 'arrow-bottom');
57953
+ dom.removeClass(quickadd, 'arrow-left');
57954
+ dom.removeClass(quickadd, 'arrow-right');
57955
+ dom.removeClass(quickadd, 'center');
57956
+ dom.removeClass(quickadd, 'right');
57957
+ dom.addClass(quickadd, 'arrow-top');
57958
+ dom.addClass(quickadd, 'left');
57959
+ let val = quickadd.querySelector('.active').getAttribute('data-value');
57960
+
57961
+ if (val === 'left') {
57962
+ quickadd.setAttribute('data-mode', 'cell-left');
57963
+ } else {
57964
+ quickadd.setAttribute('data-mode', 'cell-right');
57965
+ }
57966
+ });
57967
+ const btnCellMore = coltool.querySelector('.cell-more');
57968
+ if (btnCellMore) dom.addEventListener(btnCellMore, 'click', () => {
57969
+ let cell = util.cellSelected();
57970
+ if (!cell) return;
57971
+ let top, left;
57972
+
57973
+ if (!this.builder.iframe) {
57974
+ top = btnCellMore.getBoundingClientRect().top + window.pageYOffset;
57975
+ left = btnCellMore.getBoundingClientRect().left + window.pageXOffset;
57976
+ } else {
57977
+ let adjY = this.builder.iframe.getBoundingClientRect().top + window.pageYOffset;
57978
+ let adjX = this.builder.iframe.getBoundingClientRect().left + window.pageXOffset;
57979
+ top = btnCellMore.getBoundingClientRect().top + adjY;
57980
+ left = btnCellMore.getBoundingClientRect().left + adjX;
57981
+ }
57982
+
57983
+ const columnMore = builderStuff.querySelector('.columnmore'); // columnMore.style.display = 'flex';
57984
+
57985
+ util.showPop(columnMore, false, btnCellMore); //const w = columnMore.offsetWidth; //to get value, element must not hidden (display:none). So set display:flex before this.
57986
+ //const h = columnMore.offsetHeight;
57987
+
57988
+ columnMore.style.top = top + 35 + 'px';
57989
+ columnMore.style.left = left - 7 + 'px';
57990
+ dom.removeClass(columnMore, 'arrow-bottom');
57991
+ dom.removeClass(columnMore, 'arrow-left');
57992
+ dom.removeClass(columnMore, 'arrow-right');
57993
+ dom.removeClass(columnMore, 'center');
57994
+ dom.removeClass(columnMore, 'right');
57995
+ dom.addClass(columnMore, 'arrow-top');
57996
+ dom.addClass(columnMore, 'left');
57997
+ const btnCellLocking = columnMore.querySelector('.cell-locking');
57998
+
57999
+ if (cell.hasAttribute('data-noedit')) {
58000
+ dom.addClass(btnCellLocking, 'on'); // btnCellLocking.innerHTML = '<svg class="is-icon-flex"><use xlink:href="#icon-lock"></use></svg>';
58001
+ } else {
58002
+ dom.removeClass(btnCellLocking, 'on'); // btnCellLocking.innerHTML = '<svg class="is-icon-flex"><use xlink:href="#icon-lock-off"></use></svg>';
58003
+ }
58004
+ });
58005
+ const btnCellRemove = coltool.querySelector('.cell-remove');
58006
+ if (btnCellRemove) dom.addEventListener(btnCellRemove, 'click', () => {
58007
+ const grid = new Grid(this.builder);
58008
+ grid.removeColumn();
58009
+ util.clearControls();
58010
+ });
58011
+ let btnGridEditor = rowtool.querySelector('.row-grideditor');
58012
+ if (btnGridEditor) dom.addEventListener(btnGridEditor, 'click', () => {
58013
+ const grideditor = builderStuff.querySelector('.grideditor');
58014
+
58015
+ if (dom.hasClass(grideditor, 'active')) {
58016
+ dom.removeClass(grideditor, 'active');
58017
+ const builders = document.querySelectorAll(this.builder.opts.container);
58018
+ Array.prototype.forEach.call(builders, builder => {
58019
+ builder.removeAttribute('grideditor');
58020
+ });
58021
+ } else {
58022
+ // dom.addClass(grideditor, 'active');
58023
+ this.util.showModal(grideditor, false, () => {
58024
+ btnGridEditor.removeAttribute('data-focus');
58025
+ btnGridEditor.focus();
58026
+ });
58027
+ btnGridEditor.setAttribute('data-focus', true);
58028
+ const builders = document.querySelectorAll(this.builder.opts.container);
58029
+ Array.prototype.forEach.call(builders, builder => {
58030
+ builder.setAttribute('grideditor', '');
58031
+ }); // Grid Editor Status
58032
+ // On/off outline button
58033
+
58034
+ const btnGridOutline = grideditor.querySelector('.grid-outline');
58035
+ const container = document.querySelector(this.builder.opts.container); // get one
58036
+
58037
+ if (container.hasAttribute('gridoutline')) {
58038
+ dom.addClass(btnGridOutline, 'on');
58039
+ } else {
58040
+ dom.removeClass(btnGridOutline, 'on');
58041
+ } // On/off lock button
58042
+
58043
+
58044
+ const btnCellLocking = grideditor.querySelector('.cell-locking');
58045
+ let cell = util.cellSelected();
58046
+
58047
+ if (cell) {
58048
+ if (cell.hasAttribute('data-noedit')) {
58049
+ dom.addClass(btnCellLocking, 'on');
58050
+ } else {
58051
+ dom.removeClass(btnCellLocking, 'on');
58052
+ }
58053
+ } else {
58054
+ dom.removeClass(btnCellLocking, 'on');
58055
+ }
58056
+ }
58057
+ });
58058
+ const btnMore = rowtool.querySelector('.row-more');
58059
+ if (btnMore) dom.addEventListener(btnMore, 'click', () => {
58060
+ let row;
58061
+ let cell = util.cellSelected();
58062
+
58063
+ if (cell) {
58064
+ row = cell.parentNode;
58065
+ } else {
58066
+ row = util.rowSelected();
58067
+ }
58068
+
58069
+ if (!row) return; //Change to row selection
58070
+
58071
+ dom.removeClass(row, 'row-outline'); //Hide Column tool (new!)
58072
+
58073
+ util.hideColumnTool(); // const top = btnMore.getBoundingClientRect().top + window.pageYOffset;
58074
+ // const left = btnMore.getBoundingClientRect().left + window.pageXOffset;
58075
+
58076
+ let top, left;
58077
+
58078
+ if (!this.builder.iframe) {
58079
+ top = btnMore.getBoundingClientRect().top + window.pageYOffset;
58080
+ left = btnMore.getBoundingClientRect().left + window.pageXOffset;
58081
+ } else {
58082
+ let adjY = this.builder.iframe.getBoundingClientRect().top + window.pageYOffset;
58083
+ let adjX = this.builder.iframe.getBoundingClientRect().left + window.pageXOffset;
58084
+ top = btnMore.getBoundingClientRect().top + adjY;
58085
+ left = btnMore.getBoundingClientRect().left + adjX;
58086
+ } // rowMore.style.display = 'flex';
58087
+
58088
+
58089
+ util.showPop(rowMore, false, btnMore); //const w = rowMore.offsetWidth; //to get value, element must not hidden (display:none). So set display:flex before this.
58090
+ //const h = rowMore.offsetHeight;
58091
+
58092
+ rowMore.style.top = top - 8 + 'px';
58093
+ dom.removeClass(rowMore, 'arrow-bottom');
58094
+ dom.removeClass(rowMore, 'arrow-left');
58095
+ dom.removeClass(rowMore, 'arrow-right');
58096
+ dom.removeClass(rowMore, 'center');
58097
+ dom.removeClass(rowMore, 'right');
58098
+ dom.removeClass(rowMore, 'left');
58099
+
58100
+ if (this.builder.opts.rowTool === 'right') {
58101
+ rowMore.style.left = left - rowMore.offsetWidth - 10 + 'px';
58102
+ dom.addClass(rowMore, 'arrow-right');
58103
+ dom.addClass(rowMore, 'left');
58104
+ } else {
58105
+ rowMore.style.left = left + 35 + 'px';
58106
+ dom.addClass(rowMore, 'arrow-left');
58107
+ dom.addClass(rowMore, 'left');
58108
+ }
58109
+
58110
+ let btnRowHtml = rowMore.querySelector('.row-html');
58111
+ let btnRowDuplicate = rowMore.querySelector('.row-duplicate');
58112
+
58113
+ if (row.querySelector('[data-html]')) {
58114
+ if (btnRowHtml) btnRowHtml.style.display = 'none';
58115
+ if (btnRowDuplicate) btnRowDuplicate.style.display = 'none';
58116
+ } else {
58117
+ if (btnRowHtml) btnRowHtml.style.display = '';
58118
+ if (btnRowDuplicate) btnRowDuplicate.style.display = '';
58119
+ }
58120
+
58121
+ let currentLocking = false;
58122
+ let elms = row.querySelectorAll('[data-noedit]');
58123
+ elms.forEach(elm => {
58124
+ if (!elm.hasAttribute('data-html')) {
58125
+ currentLocking = true;
58126
+ }
58127
+ });
58128
+ const btnRowLocking = rowMore.querySelector('.row-locking');
58129
+
58130
+ if (currentLocking) {
58131
+ dom.addClass(btnRowLocking, 'on');
58132
+ } else {
58133
+ dom.removeClass(btnRowLocking, 'on');
58134
+ }
58135
+ });
58136
+ let elm = rowtool.querySelector('.row-remove');
58137
+ if (elm) dom.addEventListener(elm, 'click', () => {
58138
+ this.grid.removeRow();
58139
+ util.clearControls();
58140
+ });
58141
+ }
58142
+ }
58143
+
58144
+ readRowStyles(row) {
58145
+ this.util.clearActiveElement(); // Background color
58146
+
58147
+ let s = row.style.backgroundColor;
58148
+ let btn = this.rowSettings.querySelector('.input-row-bgcolor');
58149
+ if (s) btn.style.backgroundColor = s;else btn.style.backgroundColor = 'transparent';
58150
+ let imgUrl = '';
58151
+ const div = this.rowSettings.querySelector('.cell-bgimage-preview');
58152
+ const btnImageAdjust = this.rowSettings.querySelector('.input-row-bgimageadjust');
58153
+ btnImageAdjust.style.display = 'none';
58154
+ const btnImageRemove = this.rowSettings.querySelector('.input-row-bgremove');
58155
+ btnImageRemove.style.display = 'none';
58156
+
58157
+ if (row.style.backgroundImage) {
58158
+ if (row.style.backgroundImage.indexOf('url(') !== -1) {
58159
+ imgUrl = row.style.backgroundImage.slice(4, -1).replace(/["']/g, '');
58160
+ div.innerHTML = `<img src="${imgUrl}">`;
58161
+ btnImageAdjust.style.display = 'flex';
58162
+ btnImageRemove.style.display = 'flex';
58163
+ } else {
58164
+ div.innerHTML = '';
58165
+ }
58166
+ } else {
58167
+ div.innerHTML = '';
58168
+ }
58169
+
58170
+ const chkRowGrayscale = this.rowSettings.querySelector('.chk-row-grayscale');
58171
+ chkRowGrayscale.checked = false;
58172
+
58173
+ if (row.style.filter) {
58174
+ if (row.style.filter.indexOf('grayscale') !== -1) {
58175
+ chkRowGrayscale.checked = true;
58176
+ }
58177
+ }
58178
+
58179
+ let actualRow = row.parentNode; // row is actually row overlay
58180
+
58181
+ this.realtimeVisibility(actualRow); //More
58182
+
58183
+ let inpRowId = this.rowSettings.querySelector('.input-row-id');
58184
+ inpRowId.value = '';
58185
+ const rowId = actualRow.getAttribute('id');
58186
+
58187
+ if (rowId) {
58188
+ inpRowId.value = rowId;
58189
+ }
58190
+
58191
+ let inpRowClasses = this.rowSettings.querySelector('.input-row-classes');
58192
+ inpRowClasses.value = '';
58193
+ const classes = actualRow.getAttribute('data-class');
58194
+ inpRowClasses.value = classes;
58195
+ }
58196
+
58197
+ rowOverlay() {
58198
+ // let row;
58199
+ // let cell = util.cellSelected();
58200
+ // if(cell) {
58201
+ // row = cell.parentNode;
58202
+ // } else {
58203
+ // row = util.rowSelected();
58204
+ // }
58205
+ // if(!row) return;
58206
+ let row = this.util.rowSelected();
58207
+ if (!row) return false;
58208
+ let rowOverlay = row.querySelector('.is-row-overlay');
58209
+
58210
+ if (!rowOverlay) {
58211
+ this.dom.appendHtml(row, '<div class="is-row-overlay"></div>');
58212
+ rowOverlay = row.querySelector('.is-row-overlay');
58213
+ }
58214
+
58215
+ row.classList.add('relative');
58216
+ return rowOverlay;
58217
+ }
58218
+
58219
+ }
58220
+
58221
+ class RowAddTool {
58222
+ constructor(builder) {
58223
+ this.builder = builder;
58224
+ const dom = this.builder.dom;
58225
+ this.dom = dom;
58226
+ }
58227
+
58228
+ render(row) {
58229
+ const dom = this.dom;
58230
+ const util = this.builder.util;
58231
+ const quickadd = renderQuickAdd(this.builder);
58232
+ let rowaddtool = row.querySelector('.is-rowadd-tool');
58233
+
58234
+ if (!rowaddtool) {
58235
+ const html = `<div class="is-rowadd-tool" style="height:0">
58236
+ <button type="button" tabindex="-1" title="${util.out('Add')}" title="${util.out('Add')}" style="outline:none;line-height:1;margin:0;padding:0;cursor:pointer;background-color:rgba(255,255,255,0.9);"><svg class="is-icon-flex" style="fill:rgba(0, 0, 0, 0.8);width:17px;height:17px;"><use xlink:href="#ion-ios-plus-empty"></use></svg></button>
58237
+ </div>`;
58238
+ dom.appendHtml(row, html);
58239
+ rowaddtool = row.querySelector('.is-rowadd-tool'); // Prepare for tooltip
58240
+
58241
+ let elms = rowaddtool.querySelectorAll('[title]');
58242
+ Array.prototype.forEach.call(elms, elm => {
58243
+ elm.setAttribute('data-title', elm.getAttribute('title'));
58244
+
58245
+ if (!this.builder.iframe) {
58246
+ this.builder.tooltip.set(elm, 5, 3);
58247
+ } else {
58248
+ this.builder.tooltip.set(elm, 5, 3, true);
58249
+ }
58250
+ });
58251
+ }
58252
+
58253
+ let btnRowAdd = rowaddtool.querySelector('button');
58254
+ dom.addEventListener(btnRowAdd, 'click', () => {
58255
+ let tabs = quickadd.querySelector('.is-pop-tabs');
58256
+ tabs.style.display = 'none';
58257
+ const viewportHeight = window.innerHeight;
58258
+ let top, left;
58259
+
58260
+ if (!this.builder.iframe) {
58261
+ top = btnRowAdd.getBoundingClientRect().top;
58262
+ left = btnRowAdd.getBoundingClientRect().left;
58263
+ } else {
58264
+ let adjY = this.builder.iframe.getBoundingClientRect().top;
58265
+ let adjX = this.builder.iframe.getBoundingClientRect().left;
58266
+ top = btnRowAdd.getBoundingClientRect().top + adjY;
58267
+ left = btnRowAdd.getBoundingClientRect().left + adjX;
58268
+ } // quickadd.style.display = 'flex';
58269
+
58270
+
58271
+ util.showPop(quickadd, false, btnRowAdd);
58272
+ const w = quickadd.offsetWidth; //to get value, element must not hidden (display:none). So set display:flex before this.
58273
+
58274
+ const h = quickadd.offsetHeight;
58275
+
58276
+ if (viewportHeight - top > h) {
58277
+ quickadd.style.top = top + window.pageYOffset + 27 + 'px';
58278
+ quickadd.style.left = left - w / 2 + 7 + 'px';
58279
+ dom.removeClass(quickadd, 'arrow-bottom');
58280
+ dom.removeClass(quickadd, 'arrow-right');
58281
+ dom.removeClass(quickadd, 'arrow-left');
58282
+ dom.removeClass(quickadd, 'center');
58283
+ dom.addClass(quickadd, 'arrow-top');
58284
+ dom.addClass(quickadd, 'center');
58285
+ } else {
58286
+ quickadd.style.top = top + window.pageYOffset - h - 8 + 'px';
58287
+ quickadd.style.left = left - w / 2 + 7 + 'px';
58288
+ dom.removeClass(quickadd, 'arrow-top');
58289
+ dom.removeClass(quickadd, 'arrow-right');
58290
+ dom.removeClass(quickadd, 'arrow-left');
58291
+ dom.removeClass(quickadd, 'center');
58292
+ dom.addClass(quickadd, 'arrow-bottom');
58293
+ dom.addClass(quickadd, 'center');
58294
+ }
58295
+
58296
+ quickadd.setAttribute('data-mode', 'row');
58297
+ return false;
58298
+ });
58299
+ }
58300
+
58301
+ }
58302
+
57784
58303
  class ColumnTool {
57785
58304
  constructor(builder) {
57786
58305
  this.builder = builder;
@@ -57850,6 +58369,7 @@ class ColumnTool {
57850
58369
  ${this.builder.useLightbox ? `
57851
58370
  <a title="${util.out('On Click')}" id="tabCellClick" href="#" data-content="divCellClick">${util.out('On Click')}</a>
57852
58371
  ` : ''}
58372
+ <a title="${util.out('More')}" id="tabCellMore" href="#" data-content="divCellMore">${util.out('More')}</a>
57853
58373
  </div>
57854
58374
  <div id="divCellGeneral" class="is-tab-content active" data-group="cellsettings" style="display:flex" tabindex="-1">
57855
58375
 
@@ -57869,7 +58389,7 @@ class ColumnTool {
57869
58389
  </button>
57870
58390
  <button title="${util.out('Select')}" class="input-select"><svg class="is-icon-flex"><use xlink:href="#ion-more"></use></svg></button>
57871
58391
  <button title="${util.out('Remove')}" class="input-cell-bgremove"><svg class="is-icon-flex" style="width:11px;height:11px;"><use xlink:href="#icon-clean"></use></svg></button>
57872
- <button title="${util.out('Adjust')}" class="input-cell-bgimageadjust"><svg class="is-icon-flex"><use xlink:href="#ion-wrench"></use></svg></button>
58392
+ <button title="${util.out('Adjust')}" class="input-cell-bgimageadjust" style="width:40px"><svg class="is-icon-flex"><use xlink:href="#ion-wrench"></use></svg></button>
57873
58393
  </div>
57874
58394
  </div>
57875
58395
 
@@ -58046,10 +58566,26 @@ class ColumnTool {
58046
58566
  <p>${util.out('You can test the On-Click action on page if you lock the column by clicking the lock button')} <svg class="is-icon-flex"><use xlink:href="#icon-lock"></use></svg>.</p>
58047
58567
 
58048
58568
  </div>
58569
+
58570
+ <div id="divCellMore" class="is-tab-content" data-group="cellsettings" tabindex="-1">
58571
+
58572
+ <label for="inpCellId">${util.out('Add Column ID')}:</label>
58573
+ <div>
58574
+ <input id="inpCellId" class="input-cell-id" type="text" onkeypress="return /[0-9a-zA-Z_]/i.test(event.key)" style="height:38px">
58575
+ </div>
58576
+
58577
+ <label for="inpCellCssClasses" style="padding:20px 0 3px;">${util.out('Add Css Classes')}:</label>
58578
+ <div>
58579
+ <input id="inpCellCssClasses" class="input-cell-classes" type="text" style="height:38px">
58580
+ </div>
58581
+
58582
+ </div>
58583
+
58049
58584
 
58050
58585
  </div>
58051
58586
 
58052
58587
  </div>
58588
+
58053
58589
  </div>
58054
58590
 
58055
58591
  <div class="is-modal imageadjust" tabindex="-1" role="dialog" aria-modal="true" aria-hidden="true">
@@ -58338,6 +58874,47 @@ class ColumnTool {
58338
58874
  }); // this.columnMore.style.display = '';
58339
58875
 
58340
58876
  util.hidePop(this.columnMore);
58877
+ }); //More
58878
+
58879
+ let inpCellId = cellSettings.querySelector('.input-cell-id');
58880
+ inpCellId.addEventListener('change', () => {
58881
+ let cell = util.cellSelected();
58882
+ if (!cell) return;
58883
+ this.builder.uo.saveForUndo();
58884
+
58885
+ if (inpCellId.value !== '') {
58886
+ cell.setAttribute('id', inpCellId.value);
58887
+ } else {
58888
+ cell.removeAttribute('id');
58889
+ } //Trigger Change event
58890
+
58891
+
58892
+ this.builder.opts.onChange();
58893
+ });
58894
+ let inpCellCssClasses = cellSettings.querySelector('.input-cell-classes');
58895
+ inpCellCssClasses.addEventListener('change', () => {
58896
+ let cell = util.cellSelected();
58897
+ if (!cell) return;
58898
+ this.builder.uo.saveForUndo();
58899
+ let arrCurrentClasses = [];
58900
+ let currentClasses = cell.getAttribute('data-class');
58901
+ if (currentClasses) arrCurrentClasses = currentClasses.split(' ');
58902
+ let arrNewClasses = [];
58903
+ let newClasses = inpCellCssClasses.value;
58904
+ arrNewClasses = newClasses.split(' ');
58905
+ arrCurrentClasses.forEach(item => {
58906
+ if (!arrNewClasses.includes(item)) {
58907
+ cell.classList.remove(item);
58908
+ }
58909
+ });
58910
+ arrNewClasses.forEach(item => {
58911
+ if (item !== '') cell.classList.add(item);
58912
+ }); // save
58913
+
58914
+ cell.setAttribute('data-class', newClasses);
58915
+ if (cell.getAttribute('data-class') === '') cell.removeAttribute('data-class'); //Trigger Change event
58916
+
58917
+ this.builder.opts.onChange();
58341
58918
  }); // Column Background color
58342
58919
 
58343
58920
  let btnCellBgColor = cellSettings.querySelector('.input-cell-bgcolor');
@@ -58412,6 +58989,7 @@ class ColumnTool {
58412
58989
  cell.style.backgroundImage = '';
58413
58990
  cell.style.backgroundSize = '';
58414
58991
  cell.style.backgroundRepeat = '';
58992
+ cell.style.backgroundPosition = '';
58415
58993
  const div = cellSettings.querySelector('.cell-bgimage-preview');
58416
58994
  const btnImageAdjust = this.cellSettings.querySelector('.input-cell-bgimageadjust');
58417
58995
  const btnImageRemove = this.cellSettings.querySelector('.input-cell-bgremove');
@@ -59766,7 +60344,20 @@ class ColumnTool {
59766
60344
  dom.addClass(btn, 'on');
59767
60345
  }
59768
60346
 
59769
- this.realtimeVisibility(cell);
60347
+ this.realtimeVisibility(cell); //More
60348
+
60349
+ let inpCellId = this.cellSettings.querySelector('.input-cell-id');
60350
+ inpCellId.value = '';
60351
+ const rowId = cell.getAttribute('id');
60352
+
60353
+ if (rowId) {
60354
+ inpCellId.value = rowId;
60355
+ }
60356
+
60357
+ let inpCellClasses = this.cellSettings.querySelector('.input-cell-classes');
60358
+ inpCellClasses.value = '';
60359
+ const classes = cell.getAttribute('data-class');
60360
+ inpCellClasses.value = classes;
59770
60361
  }
59771
60362
 
59772
60363
  realtimeVisibility(cell) {
@@ -59904,9 +60495,15 @@ class ColumnTool {
59904
60495
  inpImageHorSlider.value = 50;
59905
60496
  inpImageVertSlider.value = 60;
59906
60497
  inpImageScaleSlider.value = 0;
60498
+
60499
+ if (elm.classList.contains('cell-active') || elm.classList.contains('is-row-overlay')) {
60500
+ inpImageHorSlider.value = 0;
60501
+ inpImageVertSlider.value = 0;
60502
+ }
60503
+
59907
60504
  elm.style.backgroundPositionX = '';
59908
60505
  elm.style.backgroundPositionY = '';
59909
- elm.style.backgroundSize = ''; // Clean unused
60506
+ elm.style.backgroundSize = 'cover'; // Clean unused
59910
60507
 
59911
60508
  elm.style.left = '';
59912
60509
  elm.style.top = '';
@@ -60418,7 +61015,7 @@ class ColumnTool {
60418
61015
 
60419
61016
  }
60420
61017
 
60421
- const dom$f = new Dom();
61018
+ const dom$h = new Dom();
60422
61019
 
60423
61020
  class ELementStyleEditor {
60424
61021
  constructor(builder) {
@@ -60451,21 +61048,21 @@ class ELementStyleEditor {
60451
61048
  </div>
60452
61049
  </div>
60453
61050
  `;
60454
- dom$f.appendHtml(builderStuff, html);
61051
+ dom$h.appendHtml(builderStuff, html);
60455
61052
  modalStyles = builderStuff.querySelector('.editstyles');
60456
61053
  let btn = modalStyles.querySelector('.is-modal-close');
60457
- dom$f.addEventListener(btn, 'click', () => {
60458
- dom$f.removeClass(modalStyles, 'active');
61054
+ dom$h.addEventListener(btn, 'click', () => {
61055
+ dom$h.removeClass(modalStyles, 'active');
60459
61056
  var panel = this.builderStuff.querySelector('.is-side.elementstyles'); // if all close
60460
61057
 
60461
- if (!dom$f.hasClass(panel, 'active')) {
61058
+ if (!dom$h.hasClass(panel, 'active')) {
60462
61059
  let elms = document.querySelectorAll('[data-saveforundo]');
60463
61060
  Array.prototype.forEach.call(elms, elm => {
60464
61061
  elm.removeAttribute('data-saveforundo');
60465
61062
  });
60466
61063
  elms = document.querySelectorAll('.elm-inspected');
60467
61064
  Array.prototype.forEach.call(elms, elm => {
60468
- dom$f.removeClass(elm, 'elm-inspected');
61065
+ dom$h.removeClass(elm, 'elm-inspected');
60469
61066
  });
60470
61067
  }
60471
61068
  });
@@ -60476,29 +61073,29 @@ class ELementStyleEditor {
60476
61073
 
60477
61074
  let bElmActive = false;
60478
61075
 
60479
- if (dom$f.hasClass(elm, 'elm-active')) {
61076
+ if (dom$h.hasClass(elm, 'elm-active')) {
60480
61077
  bElmActive = true;
60481
61078
  }
60482
61079
 
60483
61080
  let bCellActive = false;
60484
61081
 
60485
- if (dom$f.hasClass(elm, 'elm-active')) {
61082
+ if (dom$h.hasClass(elm, 'elm-active')) {
60486
61083
  bCellActive = true;
60487
61084
  }
60488
61085
 
60489
61086
  let bRowActive = false;
60490
61087
 
60491
- if (dom$f.hasClass(elm, 'row-active')) {
61088
+ if (dom$h.hasClass(elm, 'row-active')) {
60492
61089
  bRowActive = true;
60493
61090
  }
60494
61091
 
60495
61092
  elm.setAttribute('class', val); //update
60496
61093
  //builder classes
60497
61094
 
60498
- if (bElmActive) dom$f.addClass(elm, 'elm-active');
60499
- if (bCellActive) dom$f.addClass(elm, 'cell-active');
60500
- if (bRowActive) dom$f.addClass(elm, 'row-active');
60501
- dom$f.addClass(elm, 'elm-inspected'); //Trigger Change event
61095
+ if (bElmActive) dom$h.addClass(elm, 'elm-active');
61096
+ if (bCellActive) dom$h.addClass(elm, 'cell-active');
61097
+ if (bRowActive) dom$h.addClass(elm, 'row-active');
61098
+ dom$h.addClass(elm, 'elm-inspected'); //Trigger Change event
60502
61099
 
60503
61100
  this.builder.opts.onChange();
60504
61101
  });
@@ -60514,10 +61111,10 @@ class ELementStyleEditor {
60514
61111
  }
60515
61112
 
60516
61113
  toggleStyleEditor() {
60517
- if (!dom$f.hasClass(this.modalStyles, 'active')) {
60518
- dom$f.addClass(this.modalStyles, 'active');
61114
+ if (!dom$h.hasClass(this.modalStyles, 'active')) {
61115
+ dom$h.addClass(this.modalStyles, 'active');
60519
61116
  } else {
60520
- dom$f.removeClass(this.modalStyles, 'active');
61117
+ dom$h.removeClass(this.modalStyles, 'active');
60521
61118
  }
60522
61119
  }
60523
61120
 
@@ -60538,9 +61135,9 @@ class ELementStyleEditor {
60538
61135
 
60539
61136
  }
60540
61137
 
60541
- const dom$e = new Dom();
61138
+ const dom$g = new Dom();
60542
61139
 
60543
- class ElementBoxStyles {
61140
+ class ElementGeneralStyles {
60544
61141
  constructor(builder) {
60545
61142
  this.builder = builder;
60546
61143
  const util = this.builder.util;
@@ -60548,120 +61145,66 @@ class ElementBoxStyles {
60548
61145
  this.util = util;
60549
61146
  this.builderStuff = builderStuff;
60550
61147
  const elementStyleEditor = new ELementStyleEditor(builder);
60551
- let panelStuff = builderStuff.querySelector('#divElementBox');
61148
+ let panelStuff = builderStuff.querySelector('#divElementGeneral');
60552
61149
  this.panelStuff = panelStuff;
60553
61150
  const html = `
60554
- <div class="is-settings">
60555
- <div class="is-label">${util.out('Background Color')}:</div>
61151
+ <div class="is-settings" style="width: 100%">
61152
+ <div class="is-label" style="margin:0 0 3px">${util.out('Background Color')}:</div>
60556
61153
  <div>
60557
61154
  <button title="${util.out('Background Color')}" class="input-elm-bgcolor is-btn-color" style="margin-right:15px"></button>
60558
61155
  <button title="${util.out('Gradient')}" class="input-elm-gradient classic" data-value="+"> ${util.out('Gradient')} </button>
60559
61156
  </div>
60560
61157
  </div>
60561
61158
 
60562
- <div style="margin-top: 25px;font-weight:bold;width:100%;">${util.out('Dimension')}</div>
60563
-
60564
- <div class="is-settings" style="width:110px">
60565
- <div><label for="inpElmWidth">${util.out('Width')}:</label></div>
60566
- <div style="display:flex">
60567
- <input type="text" id="inpElmWidth" value="" style="width:45px"/>
60568
- <select id="inpElmWidthUnit"">
60569
- <option value="px">px</option>
60570
- <option value="em">em</option>
60571
- <option value="vw">vw</option>
60572
- <option value="vh">vh</option>
60573
- <option value="%">%</option>
60574
- </select>
60575
- </div>
60576
- </div>
60577
- <div class="is-settings" style="width:110px;">
60578
- <div><label for="inpElmHeight">${util.out('Height')}:</label></div>
60579
- <div style="display:flex">
60580
- <input type="text" id="inpElmHeight" value="" style="width:45px"/>
60581
- <select id="inpElmHeightUnit"">
60582
- <option value="px">px</option>
60583
- <option value="em">em</option>
60584
- <option value="vw">vw</option>
60585
- <option value="vh">vh</option>
60586
- <option value="%">%</option>
60587
- </select>
60588
- </div>
60589
- </div>
60590
- <div class="is-settings" style="width:110px;">
60591
- <div><label for="inpElmMaxWidth">${util.out('Max Width')}:</label></div>
60592
- <div style="display:flex">
60593
- <input type="text" id="inpElmMaxWidth" value="" style="width:45px"/>
60594
- <select id="inpElmMaxWidthUnit"">
60595
- <option value="px">px</option>
60596
- <option value="em">em</option>
60597
- <option value="vw">vw</option>
60598
- <option value="vh">vh</option>
60599
- <option value="%">%</option>
60600
- </select>
60601
- </div>
60602
- </div>
60603
- <div class="is-settings" style="width:110px;">
60604
- <div><label for="inpElmMaxHeight">${util.out('Max Height')}:</label></div>
60605
- <div style="display:flex">
60606
- <input type="text" id="inpElmMaxHeight" value="" style="width:45px"/>
60607
- <select id="inpElmMaxHeightUnit"">
60608
- <option value="px">px</option>
60609
- <option value="em">em</option>
60610
- <option value="vw">vw</option>
60611
- <option value="vh">vh</option>
60612
- <option value="%">%</option>
60613
- </select>
60614
- </div>
60615
- </div>
60616
- <div class="is-settings" style="width:110px;">
60617
- <div><label for="inpElmMinWidth">${util.out('Min Width')}:</label></div>
60618
- <div style="display:flex">
60619
- <input type="text" id="inpElmMinWidth" value="" style="width:45px"/>
60620
- <select id="inpElmMinWidthUnit"">
60621
- <option value="px">px</option>
60622
- <option value="em">em</option>
60623
- <option value="vw">vw</option>
60624
- <option value="vh">vh</option>
60625
- <option value="%">%</option>
60626
- </select>
61159
+ <div style="padding-top:20px;padding-bottom: 3px;">${util.out('Background Image')}:</div>
61160
+ <div class="is-settings" style="width: 100%">
61161
+ <div class="elm-bgimage-preview"></div>
61162
+ <div style="display: flex">
61163
+ <button title="${util.out('Image')}" class="input-elm-bgimage">
61164
+ <svg class="is-icon-flex"><use xlink:href="#ion-image"></use></svg>
61165
+ <span style="margin-left: 5px;">${util.out('Image')}</span>
61166
+ </button>
61167
+ <button title="${util.out('Select')}" class="input-select"><svg class="is-icon-flex"><use xlink:href="#ion-more"></use></svg></button>
61168
+ <button title="${util.out('Remove')}" class="input-elm-bgremove"><svg class="is-icon-flex" style="width:11px;height:11px;"><use xlink:href="#icon-clean"></use></svg></button>
61169
+ <button title="${util.out('Adjust')}" class="input-elm-bgimageadjust" style="width:40px"><svg class="is-icon-flex" style="width:13px;height:13px;flex:none"><use xlink:href="#ion-wrench"></use></svg></button>
60627
61170
  </div>
60628
61171
  </div>
60629
- <div class="is-settings" style="width:110px;">
60630
- <div><label for="inpElmMinHeight">${util.out('Min Height')}:</label></div>
60631
- <div style="display:flex">
60632
- <input type="text" id="inpElmMinHeight" value="" style="width:45px"/>
60633
- <select id="inpElmMinHeightUnit"">
60634
- <option value="px">px</option>
60635
- <option value="em">em</option>
60636
- <option value="vw">vw</option>
60637
- <option value="vh">vh</option>
60638
- <option value="%">%</option>
60639
- </select>
60640
- </div>
61172
+
61173
+ <div class="is-settings" style="padding-top:20px;width: 100%">
61174
+ <label class="label-elm-grayscale label-checkbox" for="chkElmGrayscale"><input id="chkElmGrayscale" class="chk-elm-grayscale" type="checkbox" /> ${util.out('Grayscale')}</label>
60641
61175
  </div>
60642
-
60643
- <div class="is-settings" style="width:110px;">
60644
- <div>${util.out('Overflow x')}:</div>
60645
- <div>
60646
- <select id="inpElmOverflowX"">
60647
- <option value=""></option>
60648
- <option value="auto">Auto</option>
60649
- <option value="hidden">Hidden</option>
60650
- </select>
61176
+
61177
+ <div class="is-separator" style="margin-top:28px;margin-bottom:5px;"></div>
61178
+
61179
+ <div class="is-settings" style="padding-top:0;margin-top:0;width: 100%">
61180
+ <div class="div-target" style="display: flex;justify-content: flex-end;padding: 5px 0 0;">
61181
+ <button title="${util.out('Desktop')}" class="input-device on" data-value="" style="width:40px;height:25px;">
61182
+ <svg class="is-icon-flex" style="width:16px;height:16px;flex:none"><use xlink:href="#icon-device-desktop"></use></svg>
61183
+ </button>
61184
+ <button title="${util.out('Tablet')}" class="input-device" data-value="sm" style="width:40px;height:25px;">
61185
+ <svg class="is-icon-flex" style="width:16px;height:16px;flex:none"><use xlink:href="#icon-device-tablet"></use></svg>
61186
+ </button>
61187
+ <button title="${util.out('Mobile')}" class="input-device" data-value="xs" style="width:40px;height:25px;">
61188
+ <svg class="is-icon-flex" style="width:13px;height:13px;flex:none"><use xlink:href="#icon-device-mobile"></use></svg>
61189
+ </button>
60651
61190
  </div>
60652
- </div>
60653
- <div class="is-settings" style="width:110px;">
60654
- <div>${util.out('Overflow y')}:</div>
60655
- <div>
60656
- <select id="inpElmOverflowY"">
60657
- <option value=""></option>
60658
- <option value="auto">Auto</option>
60659
- <option value="hidden">Hidden</option>
60660
- </select>
61191
+
61192
+ <div style="padding-top:0;padding-bottom:3px;">${util.out('Visibility')}:</div>
61193
+ <div class="div-visibility" style="display:flex;">
61194
+ <button title="${util.out('Visible')}" class="input-visible on" data-value="sm" style="width:100px;height:34px;">
61195
+ <svg class="is-icon-flex" style="width:16px;height:16px"><use xlink:href="#icon-eye"></use></svg>
61196
+ <span>${util.out('Visible')}</span>
61197
+ </button>
61198
+ <button title="${util.out('Hidden')}" class="input-hidden" data-value="xs" style="width:100px;height:34px;">
61199
+ <svg class="is-icon-flex" style="width:16px;height:16px"><use xlink:href="#icon-eye-off"></use></svg>
61200
+ <span>${util.out('Hidden')}</span>
61201
+ </button>
60661
61202
  </div>
60662
61203
  </div>
61204
+
61205
+
60663
61206
  `;
60664
- dom$e.appendHtml(panelStuff, html); // Background color
61207
+ dom$g.appendHtml(panelStuff, html); // Background color
60665
61208
 
60666
61209
  let btnElmBgColor = panelStuff.querySelector('.input-elm-bgcolor');
60667
61210
  btnElmBgColor.addEventListener('click', e => {
@@ -60704,7 +61247,331 @@ class ElementBoxStyles {
60704
61247
  btnElmGradient.focus();
60705
61248
  });
60706
61249
  btnElmGradient.setAttribute('data-focus', true);
60707
- }); // Others
61250
+ }); // Elm Background Image
61251
+
61252
+ const btnElmBgImage = panelStuff.querySelector('.input-elm-bgimage');
61253
+ if (btnElmBgImage) dom$g.addEventListener(btnElmBgImage, 'click', () => {
61254
+ const elm = this.builder.inspectedElement; //Get current value
61255
+
61256
+ let imgUrl = '';
61257
+
61258
+ if (elm.style.backgroundImage) {
61259
+ if (elm.style.backgroundImage.indexOf('url(') !== -1) {
61260
+ imgUrl = elm.style.backgroundImage.slice(4, -1).replace(/["']/g, '');
61261
+ }
61262
+ }
61263
+
61264
+ this.builder.colTool.openImagePicker(imgUrl, url => {
61265
+ this.builder.uo.saveForUndo();
61266
+ const elm = this.builder.inspectedElement;
61267
+ this.builder.uo.saveForUndo();
61268
+ elm.style.backgroundImage = `url("${url}")`;
61269
+ elm.style.backgroundSize = 'cover';
61270
+ elm.style.backgroundRepeat = 'no-repeat';
61271
+ const div = panelStuff.querySelector('.elm-bgimage-preview');
61272
+ const btnImageAdjust = this.panelStuff.querySelector('.input-elm-bgimageadjust');
61273
+ const btnImageRemove = this.panelStuff.querySelector('.input-elm-bgremove');
61274
+ btnImageAdjust.style.display = 'none';
61275
+ btnImageRemove.style.display = 'none';
61276
+
61277
+ if (url !== '') {
61278
+ div.innerHTML = `<img src="${url}">`;
61279
+ btnImageAdjust.style.display = 'flex';
61280
+ btnImageRemove.style.display = 'flex';
61281
+ } else {
61282
+ div.innerHTML = '';
61283
+ }
61284
+
61285
+ elementStyleEditor.refresh(); //Trigger Change event
61286
+
61287
+ this.builder.opts.onChange();
61288
+ }, btnElmBgImage);
61289
+ }); // Elm Background Image Adjust
61290
+
61291
+ const btnImageAdjust = panelStuff.querySelector('.input-elm-bgimageadjust');
61292
+ if (btnImageAdjust) dom$g.addEventListener(btnImageAdjust, 'click', () => {
61293
+ const elm = this.builder.inspectedElement;
61294
+ this.builder.colTool.openImageAdjust(elm, btnImageAdjust);
61295
+ });
61296
+ const btnImageRemove = panelStuff.querySelector('.input-elm-bgremove');
61297
+ if (btnImageRemove) dom$g.addEventListener(btnImageRemove, 'click', () => {
61298
+ const elm = this.builder.inspectedElement;
61299
+ this.builder.uo.saveForUndo();
61300
+ elm.style.backgroundImage = '';
61301
+ elm.style.backgroundSize = '';
61302
+ elm.style.backgroundRepeat = '';
61303
+ elm.style.backgroundPosition = '';
61304
+ const div = panelStuff.querySelector('.elm-bgimage-preview');
61305
+ const btnImageAdjust = this.panelStuff.querySelector('.input-elm-bgimageadjust');
61306
+ const btnImageRemove = this.panelStuff.querySelector('.input-elm-bgremove');
61307
+ btnImageAdjust.style.display = 'none';
61308
+ btnImageRemove.style.display = 'none';
61309
+ div.innerHTML = '';
61310
+ elementStyleEditor.refresh(); //Trigger Change event
61311
+
61312
+ this.builder.opts.onChange();
61313
+ }); // Elm Background Image Open Asset
61314
+
61315
+ if (!this.builder.opts.onImageSelectClick && this.builder.opts.imageselect === '') {
61316
+ panelStuff.querySelector('.input-select').style.display = 'none';
61317
+ }
61318
+
61319
+ const btnElmBgImageOpenAsset = panelStuff.querySelector('.input-select');
61320
+ this.builder.renderSelectAsset(btnElmBgImageOpenAsset, 'image', url => {
61321
+ const elm = this.builder.inspectedElement;
61322
+ this.builder.uo.saveForUndo();
61323
+ elm.style.backgroundImage = `url("${url}")`;
61324
+ elm.style.backgroundSize = 'cover';
61325
+ elm.style.backgroundRepeat = 'no-repeat';
61326
+ const div = panelStuff.querySelector('.elm-bgimage-preview');
61327
+ const btnImageAdjust = this.panelStuff.querySelector('.input-elm-bgimageadjust');
61328
+ const btnImageRemove = this.panelStuff.querySelector('.input-elm-bgremove');
61329
+ btnImageAdjust.style.display = 'none';
61330
+ btnImageRemove.style.display = 'none';
61331
+
61332
+ if (url !== '') {
61333
+ div.innerHTML = `<img src="${url}">`;
61334
+ btnImageAdjust.style.display = 'flex';
61335
+ btnImageRemove.style.display = 'flex';
61336
+ } else {
61337
+ div.innerHTML = '';
61338
+ }
61339
+
61340
+ elementStyleEditor.refresh(); //Trigger Change event
61341
+
61342
+ this.builder.opts.onChange();
61343
+ });
61344
+ const chkElmGrayscale = panelStuff.querySelector('.chk-elm-grayscale');
61345
+ chkElmGrayscale.addEventListener('click', () => {
61346
+ this.builder.uo.saveForUndo();
61347
+ const elm = this.builder.inspectedElement;
61348
+
61349
+ if (chkElmGrayscale.checked) {
61350
+ elm.style.filter = 'grayscale(1)';
61351
+ } else {
61352
+ if (elm.style.filter) {
61353
+ elm.style.filter = elm.style.filter.replace('grayscale(1)', '');
61354
+ }
61355
+ }
61356
+
61357
+ elementStyleEditor.refresh(); //Trigger Change event
61358
+
61359
+ this.builder.opts.onChange();
61360
+ }); // Responsive Visibility
61361
+
61362
+ let btns = panelStuff.querySelectorAll('.input-device');
61363
+ btns.forEach(btn => {
61364
+ btn.addEventListener('click', () => {
61365
+ const elm = this.builder.inspectedElement;
61366
+ let elms = panelStuff.querySelectorAll('.input-device');
61367
+ elms.forEach(elm => {
61368
+ elm.classList.remove('on');
61369
+ });
61370
+ btn.classList.add('on');
61371
+ this.realtimeVisibility(elm);
61372
+ });
61373
+ });
61374
+ let btnVisible = panelStuff.querySelector('.input-visible');
61375
+ let btnHidden = panelStuff.querySelector('.input-hidden');
61376
+ btnVisible.addEventListener('click', () => {
61377
+ const elm = this.builder.inspectedElement;
61378
+ elm.classList.remove('hideonmobile');
61379
+ let divTarget = panelStuff.querySelector('.div-target');
61380
+ let target = this.builder.responsive.readTarget(divTarget);
61381
+
61382
+ if (target === 'xs') {
61383
+ elm.classList.remove('xs-hidden');
61384
+ } else if (target === 'sm') {
61385
+ elm.classList.remove('sm-hidden');
61386
+ } else if (target === '') {
61387
+ elm.classList.remove('desktop-hidden');
61388
+ }
61389
+
61390
+ btnVisible.classList.add('on');
61391
+ btnHidden.classList.remove('on');
61392
+ });
61393
+ btnHidden.addEventListener('click', () => {
61394
+ const elm = this.builder.inspectedElement;
61395
+ elm.classList.remove('hideonmobile');
61396
+ let divTarget = panelStuff.querySelector('.div-target');
61397
+ let target = this.builder.responsive.readTarget(divTarget);
61398
+
61399
+ if (target === 'xs') {
61400
+ elm.classList.add('xs-hidden');
61401
+ } else if (target === 'sm') {
61402
+ elm.classList.add('sm-hidden');
61403
+ } else if (target === '') {
61404
+ elm.classList.add('desktop-hidden');
61405
+ }
61406
+
61407
+ btnVisible.classList.remove('on');
61408
+ btnHidden.classList.add('on');
61409
+ });
61410
+ }
61411
+
61412
+ readElementStyles(elm) {
61413
+ let panelStuff = this.panelStuff; // Background color
61414
+
61415
+ let s = elm.style.backgroundColor;
61416
+ let btn = panelStuff.querySelector('.input-elm-bgcolor');
61417
+ if (s) btn.style.backgroundColor = s;else btn.style.backgroundColor = 'transparent'; // Background image
61418
+
61419
+ let imgUrl = '';
61420
+ const div = panelStuff.querySelector('.elm-bgimage-preview');
61421
+ const btnImageAdjust = panelStuff.querySelector('.input-elm-bgimageadjust');
61422
+ btnImageAdjust.style.display = 'none';
61423
+ const btnImageRemove = panelStuff.querySelector('.input-elm-bgremove');
61424
+ btnImageRemove.style.display = 'none';
61425
+
61426
+ if (elm.style.backgroundImage) {
61427
+ if (elm.style.backgroundImage.indexOf('url(') !== -1) {
61428
+ imgUrl = elm.style.backgroundImage.slice(4, -1).replace(/["']/g, '');
61429
+ div.innerHTML = `<img src="${imgUrl}">`;
61430
+ btnImageAdjust.style.display = 'flex';
61431
+ btnImageRemove.style.display = 'flex';
61432
+ } else {
61433
+ div.innerHTML = '';
61434
+ }
61435
+ } else {
61436
+ div.innerHTML = '';
61437
+ }
61438
+
61439
+ const chkRowGrayscale = panelStuff.querySelector('.chk-elm-grayscale');
61440
+ chkRowGrayscale.checked = false;
61441
+
61442
+ if (elm.style.filter) {
61443
+ if (elm.style.filter.indexOf('grayscale') !== -1) {
61444
+ chkRowGrayscale.checked = true;
61445
+ }
61446
+ }
61447
+
61448
+ this.realtimeVisibility(elm);
61449
+ }
61450
+
61451
+ realtimeVisibility(row) {
61452
+ let divTarget = this.panelStuff.querySelector('.div-target');
61453
+ let divVisibility = this.panelStuff.querySelector('.div-visibility');
61454
+ let target = this.builder.responsive.readTarget(divTarget);
61455
+ let valVisibility = this.builder.responsive.getVisibility(row, target);
61456
+ this.builder.responsive.showVisibility(divVisibility, valVisibility);
61457
+ }
61458
+
61459
+ }
61460
+
61461
+ const dom$f = new Dom();
61462
+
61463
+ class ElementBoxStyles {
61464
+ constructor(builder) {
61465
+ this.builder = builder;
61466
+ const util = this.builder.util;
61467
+ const builderStuff = this.builder.builderStuff;
61468
+ this.util = util;
61469
+ this.builderStuff = builderStuff;
61470
+ const elementStyleEditor = new ELementStyleEditor(builder);
61471
+ let panelStuff = builderStuff.querySelector('#divElementBox');
61472
+ this.panelStuff = panelStuff;
61473
+ const html = `
61474
+ <div class="is-settings" style="width:110px">
61475
+ <div><label for="inpElmWidth">${util.out('Width')}:</label></div>
61476
+ <div style="display:flex">
61477
+ <input type="text" id="inpElmWidth" value="" style="width:45px"/>
61478
+ <select id="inpElmWidthUnit"">
61479
+ <option value="px">px</option>
61480
+ <option value="em">em</option>
61481
+ <option value="vw">vw</option>
61482
+ <option value="vh">vh</option>
61483
+ <option value="%">%</option>
61484
+ </select>
61485
+ </div>
61486
+ </div>
61487
+ <div class="is-settings" style="width:110px;">
61488
+ <div><label for="inpElmHeight">${util.out('Height')}:</label></div>
61489
+ <div style="display:flex">
61490
+ <input type="text" id="inpElmHeight" value="" style="width:45px"/>
61491
+ <select id="inpElmHeightUnit"">
61492
+ <option value="px">px</option>
61493
+ <option value="em">em</option>
61494
+ <option value="vw">vw</option>
61495
+ <option value="vh">vh</option>
61496
+ <option value="%">%</option>
61497
+ </select>
61498
+ </div>
61499
+ </div>
61500
+ <div class="is-settings" style="width:110px;">
61501
+ <div><label for="inpElmMaxWidth">${util.out('Max Width')}:</label></div>
61502
+ <div style="display:flex">
61503
+ <input type="text" id="inpElmMaxWidth" value="" style="width:45px"/>
61504
+ <select id="inpElmMaxWidthUnit"">
61505
+ <option value="px">px</option>
61506
+ <option value="em">em</option>
61507
+ <option value="vw">vw</option>
61508
+ <option value="vh">vh</option>
61509
+ <option value="%">%</option>
61510
+ </select>
61511
+ </div>
61512
+ </div>
61513
+ <div class="is-settings" style="width:110px;">
61514
+ <div><label for="inpElmMaxHeight">${util.out('Max Height')}:</label></div>
61515
+ <div style="display:flex">
61516
+ <input type="text" id="inpElmMaxHeight" value="" style="width:45px"/>
61517
+ <select id="inpElmMaxHeightUnit"">
61518
+ <option value="px">px</option>
61519
+ <option value="em">em</option>
61520
+ <option value="vw">vw</option>
61521
+ <option value="vh">vh</option>
61522
+ <option value="%">%</option>
61523
+ </select>
61524
+ </div>
61525
+ </div>
61526
+ <div class="is-settings" style="width:110px;">
61527
+ <div><label for="inpElmMinWidth">${util.out('Min Width')}:</label></div>
61528
+ <div style="display:flex">
61529
+ <input type="text" id="inpElmMinWidth" value="" style="width:45px"/>
61530
+ <select id="inpElmMinWidthUnit"">
61531
+ <option value="px">px</option>
61532
+ <option value="em">em</option>
61533
+ <option value="vw">vw</option>
61534
+ <option value="vh">vh</option>
61535
+ <option value="%">%</option>
61536
+ </select>
61537
+ </div>
61538
+ </div>
61539
+ <div class="is-settings" style="width:110px;">
61540
+ <div><label for="inpElmMinHeight">${util.out('Min Height')}:</label></div>
61541
+ <div style="display:flex">
61542
+ <input type="text" id="inpElmMinHeight" value="" style="width:45px"/>
61543
+ <select id="inpElmMinHeightUnit"">
61544
+ <option value="px">px</option>
61545
+ <option value="em">em</option>
61546
+ <option value="vw">vw</option>
61547
+ <option value="vh">vh</option>
61548
+ <option value="%">%</option>
61549
+ </select>
61550
+ </div>
61551
+ </div>
61552
+
61553
+ <div class="is-settings" style="width:110px;">
61554
+ <div>${util.out('Overflow x')}:</div>
61555
+ <div>
61556
+ <select id="inpElmOverflowX"">
61557
+ <option value=""></option>
61558
+ <option value="auto">Auto</option>
61559
+ <option value="hidden">Hidden</option>
61560
+ </select>
61561
+ </div>
61562
+ </div>
61563
+ <div class="is-settings" style="width:110px;">
61564
+ <div>${util.out('Overflow y')}:</div>
61565
+ <div>
61566
+ <select id="inpElmOverflowY"">
61567
+ <option value=""></option>
61568
+ <option value="auto">Auto</option>
61569
+ <option value="hidden">Hidden</option>
61570
+ </select>
61571
+ </div>
61572
+ </div>
61573
+ `;
61574
+ dom$f.appendHtml(panelStuff, html); // Others
60708
61575
 
60709
61576
  let inpElmMaxWidth = panelStuff.querySelector('#inpElmMaxWidth');
60710
61577
  inpElmMaxWidth.addEventListener('click', () => {
@@ -60945,17 +61812,13 @@ class ElementBoxStyles {
60945
61812
  }
60946
61813
 
60947
61814
  readElementStyles(elm) {
60948
- let panelStuff = this.panelStuff; // Background color
60949
-
60950
- let s = elm.style.backgroundColor;
60951
- let btn = panelStuff.querySelector('.input-elm-bgcolor');
60952
- if (s) btn.style.backgroundColor = s;else btn.style.backgroundColor = 'transparent'; // Max Width
61815
+ let panelStuff = this.panelStuff; // Max Width
60953
61816
 
60954
61817
  const inpElmMaxWidth = panelStuff.querySelector('#inpElmMaxWidth');
60955
61818
  const inpElmMaxWidthUnit = panelStuff.querySelector('#inpElmMaxWidthUnit');
60956
61819
  inpElmMaxWidth.value = '';
60957
61820
  inpElmMaxWidthUnit.value = 'px';
60958
- s = elm.style.maxWidth;
61821
+ let s = elm.style.maxWidth;
60959
61822
  let nMaxWidth = parseInt(s);
60960
61823
 
60961
61824
  if (!isNaN(nMaxWidth)) {
@@ -61064,7 +61927,7 @@ class ElementBoxStyles {
61064
61927
 
61065
61928
  }
61066
61929
 
61067
- const dom$d = new Dom();
61930
+ const dom$e = new Dom();
61068
61931
 
61069
61932
  class ElementSpacingStyles {
61070
61933
  constructor(builder) {
@@ -61206,7 +62069,7 @@ class ElementSpacingStyles {
61206
62069
  </div>
61207
62070
  </div>
61208
62071
  `;
61209
- dom$d.appendHtml(panelStuff, html); // Margin
62072
+ dom$e.appendHtml(panelStuff, html); // Margin
61210
62073
 
61211
62074
  let inpElmMarginLeft = panelStuff.querySelector('#inpElmMarginLeft');
61212
62075
  inpElmMarginLeft.addEventListener('click', () => {
@@ -61524,9 +62387,9 @@ class ElementSpacingStyles {
61524
62387
  let elm = this.builder.inspectedElement;
61525
62388
 
61526
62389
  if (chkResetMarginLeft.checked) {
61527
- dom$d.addClass(elm, 'margin-left-1024-reset');
62390
+ dom$e.addClass(elm, 'margin-left-1024-reset');
61528
62391
  } else {
61529
- dom$d.removeClass(elm, 'margin-left-1024-reset');
62392
+ dom$e.removeClass(elm, 'margin-left-1024-reset');
61530
62393
  }
61531
62394
 
61532
62395
  elementStyleEditor.refresh(); //Trigger Change event
@@ -61539,9 +62402,9 @@ class ElementSpacingStyles {
61539
62402
  let elm = this.builder.inspectedElement;
61540
62403
 
61541
62404
  if (chkResetMarginRight.checked) {
61542
- dom$d.addClass(elm, 'margin-right-1024-reset');
62405
+ dom$e.addClass(elm, 'margin-right-1024-reset');
61543
62406
  } else {
61544
- dom$d.removeClass(elm, 'margin-right-1024-reset');
62407
+ dom$e.removeClass(elm, 'margin-right-1024-reset');
61545
62408
  }
61546
62409
 
61547
62410
  elementStyleEditor.refresh(); //Trigger Change event
@@ -61704,13 +62567,13 @@ class ElementSpacingStyles {
61704
62567
  } // Responsive Positioning
61705
62568
 
61706
62569
 
61707
- if (dom$d.hasClass(elm, 'margin-left-1024-reset')) {
62570
+ if (dom$e.hasClass(elm, 'margin-left-1024-reset')) {
61708
62571
  panelStuff.querySelector('#chkResetMarginLeft').checked = true;
61709
62572
  } else {
61710
62573
  panelStuff.querySelector('#chkResetMarginLeft').checked = false;
61711
62574
  }
61712
62575
 
61713
- if (dom$d.hasClass(elm, 'margin-right-1024-reset')) {
62576
+ if (dom$e.hasClass(elm, 'margin-right-1024-reset')) {
61714
62577
  panelStuff.querySelector('#chkResetMarginRight').checked = true;
61715
62578
  } else {
61716
62579
  panelStuff.querySelector('#chkResetMarginRight').checked = false;
@@ -61719,7 +62582,7 @@ class ElementSpacingStyles {
61719
62582
 
61720
62583
  }
61721
62584
 
61722
- const dom$c = new Dom();
62585
+ const dom$d = new Dom();
61723
62586
 
61724
62587
  class ElementBorderStyles {
61725
62588
  constructor(builder) {
@@ -61840,7 +62703,7 @@ class ElementBorderStyles {
61840
62703
  </div>
61841
62704
  </div>
61842
62705
  `;
61843
- dom$c.appendHtml(panelStuff, html); // Border color
62706
+ dom$d.appendHtml(panelStuff, html); // Border color
61844
62707
 
61845
62708
  let btnElmBorderColor = panelStuff.querySelector('.input-elm-bordercolor');
61846
62709
  btnElmBorderColor.addEventListener('click', e => {
@@ -62461,7 +63324,7 @@ class ElementBorderStyles {
62461
63324
 
62462
63325
  }
62463
63326
 
62464
- const dom$b = new Dom();
63327
+ const dom$c = new Dom();
62465
63328
 
62466
63329
  class ElementTextStyles {
62467
63330
  constructor(builder) {
@@ -62603,7 +63466,7 @@ class ElementTextStyles {
62603
63466
  </div>
62604
63467
  </div>
62605
63468
  `;
62606
- dom$b.appendHtml(panelStuff, html);
63469
+ dom$c.appendHtml(panelStuff, html);
62607
63470
  const htmlmodal = `
62608
63471
  <div class="is-modal pickfontfamily" tabindex="-1" role="dialog" aria-modal="true" aria-hidden="true">
62609
63472
  <div class="is-modal-content">
@@ -62614,7 +63477,7 @@ class ElementTextStyles {
62614
63477
  </div>
62615
63478
  </div>
62616
63479
  `;
62617
- dom$b.appendHtml(builderStuff, htmlmodal);
63480
+ dom$c.appendHtml(builderStuff, htmlmodal);
62618
63481
  const fontModal = builderStuff.querySelector('.is-modal.pickfontfamily'); // Text color
62619
63482
 
62620
63483
  let btnElmTextColor = panelStuff.querySelector('.input-elm-color');
@@ -62720,8 +63583,8 @@ class ElementTextStyles {
62720
63583
  const arrSizes = this.builder.opts.fontSizeClassValues;
62721
63584
 
62722
63585
  for (var i = 0; i <= arrSizes.length - 1; i++) {
62723
- if (dom$b.hasClass(elm, 'size-' + arrSizes[i])) {
62724
- dom$b.removeClass(elm, 'size-' + arrSizes[i]);
63586
+ if (dom$c.hasClass(elm, 'size-' + arrSizes[i])) {
63587
+ dom$c.removeClass(elm, 'size-' + arrSizes[i]);
62725
63588
  }
62726
63589
  }
62727
63590
 
@@ -62871,9 +63734,9 @@ class ElementTextStyles {
62871
63734
  f = f.trim().toLowerCase();
62872
63735
 
62873
63736
  if (f === fontname && f !== '') {
62874
- dom$b.addClass(e, 'on');
63737
+ dom$c.addClass(e, 'on');
62875
63738
  } else {
62876
- dom$b.removeClass(e, 'on');
63739
+ dom$c.removeClass(e, 'on');
62877
63740
  }
62878
63741
  }); //Select active font
62879
63742
 
@@ -62888,7 +63751,7 @@ class ElementTextStyles {
62888
63751
  } else {
62889
63752
  if (iframeDocument) {
62890
63753
  [].forEach.call(iframeDocument.querySelectorAll('#divFontList > li'), e => {
62891
- dom$b.removeClass(e, 'on');
63754
+ dom$c.removeClass(e, 'on');
62892
63755
  });
62893
63756
  }
62894
63757
  }
@@ -63010,7 +63873,7 @@ class ElementTextStyles {
63010
63873
 
63011
63874
  }
63012
63875
 
63013
- const dom$a = new Dom();
63876
+ const dom$b = new Dom();
63014
63877
 
63015
63878
  class ElementCornerStyles {
63016
63879
  constructor(builder) {
@@ -63062,7 +63925,7 @@ class ElementCornerStyles {
63062
63925
  </div>
63063
63926
  </div>
63064
63927
  `;
63065
- dom$a.appendHtml(panelStuff, html);
63928
+ dom$b.appendHtml(panelStuff, html);
63066
63929
  const inpElmBorderRadius = panelStuff.querySelector('#inpElmBorderRadius');
63067
63930
  inpElmBorderRadius.addEventListener('click', () => {
63068
63931
  this.builder.uo.saveForUndo();
@@ -63205,7 +64068,7 @@ class ElementCornerStyles {
63205
64068
 
63206
64069
  }
63207
64070
 
63208
- const dom$9 = new Dom();
64071
+ const dom$a = new Dom();
63209
64072
 
63210
64073
  class ElementShadowStyles {
63211
64074
  constructor(builder) {
@@ -63281,7 +64144,7 @@ class ElementShadowStyles {
63281
64144
  </div>
63282
64145
  </div>
63283
64146
  `;
63284
- dom$9.appendHtml(panelStuff, html); // Shadow color
64147
+ dom$a.appendHtml(panelStuff, html); // Shadow color
63285
64148
 
63286
64149
  let btnElmShadowColor = panelStuff.querySelector('.input-elm-shadowcolor');
63287
64150
  btnElmShadowColor.addEventListener('click', () => {
@@ -63472,7 +64335,7 @@ class ElementShadowStyles {
63472
64335
 
63473
64336
  }
63474
64337
 
63475
- const dom$8 = new Dom();
64338
+ const dom$9 = new Dom();
63476
64339
 
63477
64340
  class ElementDisplayStyles {
63478
64341
  constructor(builder) {
@@ -63570,7 +64433,7 @@ class ElementDisplayStyles {
63570
64433
  </div>
63571
64434
  </div>
63572
64435
  `;
63573
- dom$8.appendHtml(panelStuff, html);
64436
+ dom$9.appendHtml(panelStuff, html);
63574
64437
  const inpElmDisplay = panelStuff.querySelector('#inpElmDisplay');
63575
64438
  inpElmDisplay.addEventListener('change', () => {
63576
64439
  this.builder.uo.saveForUndo();
@@ -63663,7 +64526,7 @@ class ElementDisplayStyles {
63663
64526
 
63664
64527
  }
63665
64528
 
63666
- const dom$7 = new Dom();
64529
+ const dom$8 = new Dom();
63667
64530
 
63668
64531
  class ElementPositionStyles {
63669
64532
  constructor(builder) {
@@ -63758,7 +64621,7 @@ class ElementPositionStyles {
63758
64621
  </div>
63759
64622
  </div>
63760
64623
  `;
63761
- dom$7.appendHtml(panelStuff, html);
64624
+ dom$8.appendHtml(panelStuff, html);
63762
64625
  const inpElmPosition = panelStuff.querySelector('#inpElmPosition');
63763
64626
  inpElmPosition.addEventListener('change', () => {
63764
64627
  this.builder.uo.saveForUndo();
@@ -64002,7 +64865,7 @@ class ElementPositionStyles {
64002
64865
 
64003
64866
  }
64004
64867
 
64005
- const dom$6 = new Dom();
64868
+ const dom$7 = new Dom();
64006
64869
 
64007
64870
  class ElementEffectStyles {
64008
64871
  constructor(builder) {
@@ -64082,7 +64945,7 @@ class ElementEffectStyles {
64082
64945
  </div>
64083
64946
  </div>
64084
64947
  `;
64085
- dom$6.appendHtml(panelStuff, html);
64948
+ dom$7.appendHtml(panelStuff, html);
64086
64949
  const inpElmOpacity = panelStuff.querySelector('#inpElmOpacity');
64087
64950
  inpElmOpacity.addEventListener('click', () => {
64088
64951
  this.builder.uo.saveForUndo();
@@ -64557,7 +65420,7 @@ class ElementEffectStyles {
64557
65420
 
64558
65421
  }
64559
65422
 
64560
- const dom$5 = new Dom();
65423
+ const dom$6 = new Dom();
64561
65424
 
64562
65425
  class ElementAttributeStyles {
64563
65426
  constructor(builder) {
@@ -64633,7 +65496,7 @@ class ElementAttributeStyles {
64633
65496
  </div>
64634
65497
  </div>
64635
65498
  `;
64636
- dom$5.appendHtml(panelStuff, html);
65499
+ dom$6.appendHtml(panelStuff, html);
64637
65500
  let inps = panelStuff.querySelectorAll('#inpElmAttr1,#inpElmAttr2,#inpElmAttr3,#inpElmAttr4,#inpElmAttr5,#inpElmAttrVal1,#inpElmAttrVal2,#inpElmAttrVal3,#inpElmAttrVal4,#inpElmAttrVal5');
64638
65501
  Array.prototype.forEach.call(inps, inp => {
64639
65502
  inp.addEventListener('click', () => {
@@ -64701,6 +65564,93 @@ class ElementAttributeStyles {
64701
65564
 
64702
65565
  }
64703
65566
 
65567
+ const dom$5 = new Dom();
65568
+
65569
+ class ElementMoreStyles {
65570
+ constructor(builder) {
65571
+ this.builder = builder;
65572
+ const util = this.builder.util;
65573
+ const builderStuff = this.builder.builderStuff;
65574
+ this.util = util;
65575
+ this.builderStuff = builderStuff;
65576
+ let panelStuff = builderStuff.querySelector('#divElementMore');
65577
+ this.panelStuff = panelStuff;
65578
+ const html = `
65579
+
65580
+ <div class="is-settings" style="width:100%;margin-bottom:9px;">
65581
+ <div>${util.out('Add Element ID')}:</div>
65582
+ <div>
65583
+ <input type="text" id="inpElmId" value="" style="width:100%"/>
65584
+ </div>
65585
+ </div>
65586
+
65587
+ <div class="is-settings" style="width:100%;margin-bottom:9px;">
65588
+ <div>${util.out('Add Css Classes')}:</div>
65589
+ <div>
65590
+ <input type="text" id="inpElmCssClasses" value="" style="width:100%"/>
65591
+ </div>
65592
+ </div>
65593
+
65594
+ `;
65595
+ dom$5.appendHtml(panelStuff, html);
65596
+ const inpElmId = panelStuff.querySelector('#inpElmId');
65597
+ inpElmId.addEventListener('change', () => {
65598
+ let elm = this.builder.inspectedElement;
65599
+ this.builder.uo.saveForUndo();
65600
+
65601
+ if (inpElmId.value !== '') {
65602
+ elm.setAttribute('id', inpElmId.value);
65603
+ } else {
65604
+ elm.removeAttribute('id');
65605
+ } //Trigger Change event
65606
+
65607
+
65608
+ this.builder.opts.onChange();
65609
+ });
65610
+ const inpElmCssClasses = panelStuff.querySelector('#inpElmCssClasses');
65611
+ inpElmCssClasses.addEventListener('change', () => {
65612
+ let elm = this.builder.inspectedElement;
65613
+ this.builder.uo.saveForUndo();
65614
+ let arrCurrentClasses = [];
65615
+ let currentClasses = elm.getAttribute('data-class');
65616
+ if (currentClasses) arrCurrentClasses = currentClasses.split(' ');
65617
+ let arrNewClasses = [];
65618
+ let newClasses = inpElmCssClasses.value;
65619
+ arrNewClasses = newClasses.split(' ');
65620
+ arrCurrentClasses.forEach(item => {
65621
+ if (!arrNewClasses.includes(item)) {
65622
+ elm.classList.remove(item);
65623
+ }
65624
+ });
65625
+ arrNewClasses.forEach(item => {
65626
+ if (item !== '') elm.classList.add(item);
65627
+ }); // save
65628
+
65629
+ elm.setAttribute('data-class', newClasses);
65630
+ if (elm.getAttribute('data-class') === '') elm.removeAttribute('data-class'); //Trigger Change event
65631
+
65632
+ this.builder.opts.onChange();
65633
+ });
65634
+ }
65635
+
65636
+ readElementStyles(elm) {
65637
+ let panelStuff = this.panelStuff;
65638
+ const inpElmId = panelStuff.querySelector('#inpElmId');
65639
+ inpElmId.value = '';
65640
+ const rowId = elm.getAttribute('id');
65641
+
65642
+ if (rowId) {
65643
+ inpElmId.value = rowId;
65644
+ }
65645
+
65646
+ const inpElmCssClasses = panelStuff.querySelector('#inpElmCssClasses');
65647
+ inpElmCssClasses.value = '';
65648
+ const classes = elm.getAttribute('data-class');
65649
+ inpElmCssClasses.value = classes;
65650
+ }
65651
+
65652
+ }
65653
+
64704
65654
  const dom$4 = new Dom();
64705
65655
 
64706
65656
  class ElementAnimationStyles {
@@ -64977,24 +65927,29 @@ class ElementPanel {
64977
65927
  <div style="width:100%;height:100%;overflow-y:auto;overflow-x:hidden;position:absolute;top:0px;left:0px;box-sizing:border-box;border-top:100px solid transparent;padding:0px;">
64978
65928
 
64979
65929
  <div class="is-tabs" data-group="element" style="padding-right:0;padding-bottom:0;">
64980
- <a title="${util.out('Box')}" id="tabElementBox" href="" data-content="divElementBox" class="active">${util.out('Box')}</a>
65930
+ <a title="${util.out('General')}" id="tabElementGeneral" href="" data-content="divElementGeneral" class="active">${util.out('General')}</a>
65931
+ <a title="${util.out('Box')}" id="tabElementBox" href="" data-content="divElementBox">${util.out('Box')}</a>
64981
65932
  <a title="${util.out('Spacing')}" id="tabElementSpacing" href="" data-content="divElementSpacing">${util.out('Spacing')}</a>
64982
- <a title="${util.out('Border')}" id="tabElementBorder" href="" data-content="divElementBorder">${util.out('Border')}</a>
64983
65933
  <a title="${util.out('Text')}" id="tabElementText" href="" data-content="divElementText">${util.out('Text')}</a>
64984
- <a title="${util.out('More')}" id="tabElementMore" data-menu="divElementMore" href=""><svg class="is-icon-flex" style="width:15px;height:15px;"><use xlink:href="#ion-more"></use></svg></a>
65934
+ <a title="${util.out('More')}" id="tabElementMore" data-menu="divElementMoreItems" href=""><svg class="is-icon-flex" style="width:15px;height:15px;"><use xlink:href="#ion-more"></use></svg></a>
64985
65935
  </div>
64986
65936
 
64987
- <ul id="divElementMore" class="is-tabs-more" data-group="element" tabindex="-1" aria-modal="true" aria-hidden="true">
65937
+ <ul id="divElementMoreItems" style="top: 50px;left: 140px;" class="is-tabs-more" data-group="element" tabindex="-1" aria-modal="true" aria-hidden="true">
65938
+ <li title="${util.out('Border')}" id="tabElementBorder" data-content="divElementBorder" tabindex="0">${util.out('Border')}</li>
64988
65939
  <li title="${util.out('Corners')}" id="tabElementCorner" data-content="divElementCorner" tabindex="0">${util.out('Corners')}</li>
64989
65940
  <li title="${util.out('Shadow')}" id="tabElementShadow" data-content="divElementShadow" tabindex="0">${util.out('Shadow')}</li>
64990
65941
  <li title="${util.out('Display')}" id="tabElementDisplay" data-content="divElementDisplay" tabindex="0">${util.out('Display')}</li>
64991
65942
  <li title="${util.out('Position')}" id="tabElementPosition" data-content="divElementPosition" tabindex="0">${util.out('Position')}</li>
64992
65943
  <li title="${util.out('Effects')}" id="tabElementEffect" data-content="divElementEffect" tabindex="0">${util.out('Effects')}</li>
64993
- <li title="${util.out('Attributes')}" id="tabElementAttribute" data-content="divElementAttribute" tabindex="0">${util.out('Attributes')}</li>
65944
+ <li style="display:none" title="${util.out('Attributes')}" id="tabElementAttribute" data-content="divElementAttribute" tabindex="0">${util.out('Attributes')}</li>
64994
65945
  ${this.builder.opts.elementAnimate === true ? `<li title="${util.out('Animation')}" id="tabElementAnimation" data-content="divElementAnimation" tabindex="0">${util.out('Animation')}</li>` : ''}
65946
+ <li title="${util.out('More')}" id="tabElementMore" data-content="divElementMore" tabindex="0">${util.out('More')}</li>
64995
65947
  </ul>
64996
65948
 
64997
- <div id="divElementBox" class="is-tab-content active" tabindex="-1" data-group="element" style="display:flex;flex-flow:wrap;padding:12px 20px;">
65949
+ <div id="divElementGeneral" class="is-tab-content active" tabindex="-1" data-group="element" style="display:flex;flex-flow:wrap;padding:12px 20px;">
65950
+ </div>
65951
+
65952
+ <div id="divElementBox" class="is-tab-content active" tabindex="-1" data-group="element" style="display:none;flex-flow:wrap;padding:12px 20px;">
64998
65953
  </div>
64999
65954
 
65000
65955
  <div id="divElementSpacing" class="is-tab-content" tabindex="-1" data-group="element" style="display:none;flex-flow:wrap;padding:12px 20px;">
@@ -65027,6 +65982,8 @@ class ElementPanel {
65027
65982
  <div id="divElementAnimation" class="is-tab-content" tabindex="-1" data-group="element" style="display:none;flex-flow:wrap;padding:12px 20px;">
65028
65983
  </div>
65029
65984
 
65985
+ <div id="divElementMore" class="is-tab-content" tabindex="-1" data-group="element" style="display:none;flex-flow:wrap;padding:12px 20px;">
65986
+ </div>
65030
65987
  </div>
65031
65988
  </div>
65032
65989
  `;
@@ -65046,6 +66003,8 @@ class ElementPanel {
65046
66003
  this.panel = panel;
65047
66004
  const elementBoxStyles = new ElementBoxStyles(builder);
65048
66005
  this.elementBoxStyles = elementBoxStyles;
66006
+ const elementGeneralStyles = new ElementGeneralStyles(builder);
66007
+ this.elementGeneralStyles = elementGeneralStyles;
65049
66008
  const elementSpacingStyles = new ElementSpacingStyles(builder);
65050
66009
  this.elementSpacingStyles = elementSpacingStyles;
65051
66010
  const elementBorderStyles = new ElementBorderStyles(builder);
@@ -65064,6 +66023,8 @@ class ElementPanel {
65064
66023
  this.elementEffectStyles = elementEffectStyles;
65065
66024
  const elementAttributeStyles = new ElementAttributeStyles(builder);
65066
66025
  this.elementAttributeStyles = elementAttributeStyles;
66026
+ const elementMoreStyles = new ElementMoreStyles(builder);
66027
+ this.elementMoreStyles = elementMoreStyles;
65067
66028
  const elementAnimationStyles = new ElementAnimationStyles(builder);
65068
66029
  this.elementAnimationStyles = elementAnimationStyles;
65069
66030
  }
@@ -65075,6 +66036,7 @@ class ElementPanel {
65075
66036
  }
65076
66037
 
65077
66038
  inspect(elm) {
66039
+ this.elementGeneralStyles.readElementStyles(elm);
65078
66040
  this.elementBoxStyles.readElementStyles(elm);
65079
66041
  this.elementSpacingStyles.readElementStyles(elm);
65080
66042
  this.elementBorderStyles.readElementStyles(elm);
@@ -65085,6 +66047,7 @@ class ElementPanel {
65085
66047
  this.elementPositionStyles.readElementStyles(elm);
65086
66048
  this.elementEffectStyles.readElementStyles(elm);
65087
66049
  this.elementAttributeStyles.readElementStyles(elm);
66050
+ this.elementMoreStyles.readElementStyles(elm);
65088
66051
  this.elementAnimationStyles.readElementStyles(elm);
65089
66052
  let panel = this.panel;
65090
66053
  let elms = this.builder.doc.querySelectorAll('[data-saveforundo]');