@innovastudio/contentbuilder 1.5.82 → 1.5.84

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@innovastudio/contentbuilder",
3
3
  "type": "module",
4
- "version": "1.5.82",
4
+ "version": "1.5.84",
5
5
  "description": "",
6
6
  "main": "public/contentbuilder/contentbuilder.esm.js",
7
7
  "types": "index.d.ts",
@@ -1108,6 +1108,30 @@ button:focus-visible {
1108
1108
  .is-ui .is-rte-pop.rte-paragraph-options > ul > li > *:not(p) {
1109
1109
  transform: scale(0.8);
1110
1110
  }
1111
+ #_cbhtml .is-rte-pop.rte-paragraph-options > ul > li h1,
1112
+ .is-ui .is-rte-pop.rte-paragraph-options > ul > li h1 {
1113
+ font-size: 2.5rem !important;
1114
+ }
1115
+ #_cbhtml .is-rte-pop.rte-paragraph-options > ul > li h2,
1116
+ .is-ui .is-rte-pop.rte-paragraph-options > ul > li h2 {
1117
+ font-size: 2rem !important;
1118
+ }
1119
+ #_cbhtml .is-rte-pop.rte-paragraph-options > ul > li h3,
1120
+ .is-ui .is-rte-pop.rte-paragraph-options > ul > li h3 {
1121
+ font-size: 1.73rem !important;
1122
+ }
1123
+ #_cbhtml .is-rte-pop.rte-paragraph-options > ul > li h4,
1124
+ .is-ui .is-rte-pop.rte-paragraph-options > ul > li h4 {
1125
+ font-size: 1.5rem !important;
1126
+ }
1127
+ #_cbhtml .is-rte-pop.rte-paragraph-options > ul > li h5,
1128
+ .is-ui .is-rte-pop.rte-paragraph-options > ul > li h5 {
1129
+ font-size: 1.25rem !important;
1130
+ }
1131
+ #_cbhtml .is-rte-pop.rte-paragraph-options > ul > li h6,
1132
+ .is-ui .is-rte-pop.rte-paragraph-options > ul > li h6 {
1133
+ font-size: 1rem !important;
1134
+ }
1111
1135
  #_cbhtml .is-rte-pop.rte-textsetting-options > div,
1112
1136
  .is-ui .is-rte-pop.rte-textsetting-options > div {
1113
1137
  width: 233px;
@@ -5762,7 +5786,7 @@ button:focus-visible {
5762
5786
  background: transparent;
5763
5787
  }
5764
5788
  .is-builder[clean] .is-tool.is-row-tool .row-grideditor svg {
5765
- fill: #000;
5789
+ fill: #000 !important;
5766
5790
  width: 13px;
5767
5791
  height: 13px;
5768
5792
  margin-left: -1px;
@@ -1208,6 +1208,44 @@ const renderQuickAdd = builder => {
1208
1208
  const util = builder.util;
1209
1209
  const builderStuff = builder.builderStuff;
1210
1210
  const dom = builder.dom;
1211
+ let quickAddButtons = ['paragraph', 'headline', 'image', 'list', 'heading1', 'heading2', 'heading3', 'heading4', 'quote', 'preformatted', 'button', 'twobutton', 'map', 'youtube', 'video', 'icon', 'svg', 'table', 'social', 'code', 'spacer']; // default
1212
+
1213
+ if (builder.quickAddButtons) {
1214
+ quickAddButtons = builder.quickAddButtons;
1215
+ }
1216
+ const buttonTemplates = {
1217
+ paragraph: `<button title="${util.out('Paragraph')}" class="add-paragraph"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:12px;height:12px;"><use xlink:href="#icon-align-full"></use></svg></span>${util.out('Paragraph')}</button>`,
1218
+ headline: `<button title="${util.out('Headline')}" class="add-headline"><span style="font-family:serif;display:block;margin:0 0 8px;font-size:11px;">H</span>${util.out('Headline')}</button>`,
1219
+ image: `<button title="${util.out('Image')}" class="add-image"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex ion-image" style="width:14px;height:14px;"><use xlink:href="#ion-image"></use></svg></span>${util.out('Image')}</button>`,
1220
+ list: `<button title="${util.out('List')}" class="add-list"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-list-bullet"></use></svg></span>${util.out('List')}</button>`,
1221
+ heading1: `<button title="${util.out('Heading 1')}" class="add-heading1"><span style="font-family:serif;display:block;margin:0 0 8px;">H1</span>${util.out('Heading 1')}</button>`,
1222
+ heading2: `<button title="${util.out('Heading 2')}" class="add-heading2"><span style="font-family:serif;display:block;margin:0 0 8px;">H2</span>${util.out('Heading 2')}</button>`,
1223
+ heading3: `<button title="${util.out('Heading 3')}" class="add-heading3"><span style="font-family:serif;display:block;margin:0 0 8px;">H3</span>${util.out('Heading 3')}</button>`,
1224
+ heading4: `<button title="${util.out('Heading 4')}" class="add-heading4"><span style="font-family:serif;display:block;margin:0 0 8px;">H4</span>${util.out('Heading 4')}</button>`,
1225
+ quote: `<button title="${util.out('Quote')}" class="add-quote"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#ion-quote"></use></svg></span>${util.out('Quote')}</button>`,
1226
+ preformatted: `<button style="display:none" title="${util.out('Preformatted')}" class="add-preformatted"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#ion-code"></use></svg></span>${util.out('Preformatted')}</button>`,
1227
+ button: `<button title="${util.out('Button')}" class="add-button"><span style="display:block;margin:0 0 8px;"><span style="display:inline-block;border:#a1a1a1 1px solid;background:#f3f3f3;width:10px;height:4px;"></span></span>${util.out('Button')}</button>`,
1228
+ twobutton: `<button title="${util.out('Two Button')}" class="add-twobutton"><span style="display:block;margin:0 0 8px;"><span style="display:inline-block;border:#a1a1a1 1px solid;background:#f3f3f3;width:10px;height:4px;"></span></span>${util.out('Two Button')}</button>`,
1229
+ map: `<button title="${util.out('Map')}" class="add-map"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#ion-location"></use></svg></use></svg></svg></span>${util.out('Map')}</button>`,
1230
+ youtube: `<button title="${util.out('Youtube')}" class="add-youtube"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#ion-social-youtube-outline"></use></svg></use></svg></svg></span>${util.out('Youtube')}</button>`,
1231
+ video: `<button title="${util.out('Video')}" class="add-video"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#ion-ios-play"></use></svg></use></svg></svg></span>${util.out('Video')}</button>`,
1232
+ audio: `<button title="${util.out('Audio')}" class="add-audio"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#ion-volume-medium"></use></svg></use></svg></svg></span>${util.out('Audio')}</button>`,
1233
+ icon: `<button title="${util.out('Icon')}" class="add-icon"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#ion-android-happy"></use></svg></use></svg></svg></span>${util.out('Icon')}</button>`,
1234
+ svg: `<button title="${util.out('SVG')}" class="add-svg"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:18px;height:18px;margin-top:-5px"><use xlink:href="#icon-svg"></use></svg></use></svg></svg></span>${util.out('SVG')}</button>`,
1235
+ table: `<button title="${util.out('Table')}" class="add-table"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:15px;height:15px;"><use xlink:href="#icon-table"></use></svg></use></svg></svg></span>${util.out('Table')}</button>`,
1236
+ social: `<button title="${util.out('Social Links')}" class="add-social"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#ion-social-twitter"></use></svg></use></svg></svg></span>${util.out('Social Links')}</button>`,
1237
+ code: `<button title="${util.out('HTML/JS')}" class="add-code"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-code"></use></svg></use></svg></svg></span>${util.out('HTML/JS')}</button>`,
1238
+ spacer: `<button title="${util.out('Spacer')}" class="add-spacer"><span style="display:block;margin:0 0 8px;"><span style="display:inline-block;background:#eee;width:30px;height:5px;"></span></span>${util.out('Spacer')}</button>`,
1239
+ line: `<button title="${util.out('Line')}" class="add-line"><span style="display:block;margin:0 0 8px;"><span style="display:inline-block;background:#ddd;width:30px;height:2px;"></span></span>${util.out('Line')}</button>`
1240
+ };
1241
+
1242
+ // Filter buttons (backward compatibility)
1243
+ const filteredButtons = quickAddButtons.filter(item => {
1244
+ if (builder.opts.emailMode && item === 'button') return false;
1245
+ if (builder.opts.emailMode && item === 'twobutton') return false;
1246
+ return true;
1247
+ });
1248
+ let buttonsHtml = filteredButtons.map(item => buttonTemplates[item] || '').join('');
1211
1249
  let quickadd = builderStuff.querySelector('.quickadd');
1212
1250
  if (!quickadd) {
1213
1251
  const html = `<div class="is-pop quickadd arrow-right" style="z-index:10003;" tabindex="-1" role="dialog" aria-modal="true" aria-hidden="true">
@@ -1217,34 +1255,11 @@ const renderQuickAdd = builder => {
1217
1255
  <div class="is-pop-tab-item active" data-value="right">${util.out('Add to Right')}</div>
1218
1256
  </div>
1219
1257
  <div style="padding:12px;display:flex;flex-direction:row;flex-flow: wrap;justify-content: center;align-items: center;">
1220
- <button title="${util.out('Paragraph')}" class="add-paragraph"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:12px;height:12px;"><use xlink:href="#icon-align-full"></use></svg></span>${util.out('Paragraph')}</button>
1221
- <button title="${util.out('Headline')}" class="add-headline"><span style="font-family:serif;display:block;margin:0 0 8px;font-size:11px;">H</span>${util.out('Headline')}</button>
1222
- <button title="${util.out('Image')}" class="add-image"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex ion-image" style="width:14px;height:14px;"><use xlink:href="#ion-image"></use></svg></span>${util.out('Image')}</button>
1223
- <button title="${util.out('List')}" class="add-list"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-list-bullet"></use></svg></span>${util.out('List')}</button>
1224
- <button title="${util.out('Heading 1')}" class="add-heading1"><span style="font-family:serif;display:block;margin:0 0 8px;">H1</span>${util.out('Heading 1')}</button>
1225
- <button title="${util.out('Heading 2')}" class="add-heading2"><span style="font-family:serif;display:block;margin:0 0 8px;">H2</span>${util.out('Heading 2')}</button>
1226
- <button title="${util.out('Heading 3')}" class="add-heading3"><span style="font-family:serif;display:block;margin:0 0 8px;">H3</span>${util.out('Heading 3')}</button>
1227
- <button title="${util.out('Heading 4')}" class="add-heading4"><span style="font-family:serif;display:block;margin:0 0 8px;">H4</span>${util.out('Heading 4')}</button>
1228
- <button title="${util.out('Quote')}" class="add-quote"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#ion-quote"></use></svg></span>${util.out('Quote')}</button>
1229
- <button style="display:none" title="${util.out('Preformatted')}" class="add-preformatted"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#ion-code"></use></svg></span>${util.out('Preformatted')}</button>
1230
- ${builder.opts.emailMode ? '' : `<button title="${util.out('Button')}" class="add-button"><span style="display:block;margin:0 0 8px;"><span style="display:inline-block;border:#a1a1a1 1px solid;background:#f3f3f3;width:10px;height:4px;"></span></span>${util.out('Button')}</button>`}
1231
- ${builder.opts.emailMode ? '' : `<button title="${util.out('Two Button')}" class="add-twobutton"><span style="display:block;margin:0 0 8px;"><span style="display:inline-block;border:#a1a1a1 1px solid;background:#f3f3f3;width:10px;height:4px;"></span></span>${util.out('Two Button')}</button>`}
1232
- <button title="${util.out('Map')}" class="add-map"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#ion-location"></use></svg></use></svg></svg></span>${util.out('Map')}</button>
1233
- <button title="${util.out('Youtube')}" class="add-youtube"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#ion-social-youtube-outline"></use></svg></use></svg></svg></span>${util.out('Youtube')}</button>
1234
- <button title="${util.out('Video')}" class="add-video"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#ion-ios-play"></use></svg></use></svg></svg></span>${util.out('Video')}</button>
1235
- <button style="display:none" title="${util.out('Audio')}" class="add-audio"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#ion-volume-medium"></use></svg></use></svg></svg></span>${util.out('Audio')}</button>
1236
- <button title="${util.out('Icon')}" class="add-icon"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#ion-android-happy"></use></svg></use></svg></svg></span>${util.out('Icon')}</button>
1237
- <button title="${util.out('SVG')}" class="add-svg"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:18px;height:18px;margin-top:-5px"><use xlink:href="#icon-svg"></use></svg></use></svg></svg></span>${util.out('SVG')}</button>
1238
- <button title="${util.out('Table')}" class="add-table"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:15px;height:15px;"><use xlink:href="#icon-table"></use></svg></use></svg></svg></span>${util.out('Table')}</button>
1239
- <button title="${util.out('Social Links')}" class="add-social"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#ion-social-twitter"></use></svg></use></svg></svg></span>${util.out('Social Links')}</button>
1240
- <button title="${util.out('HTML/JS')}" class="add-code"><span style="display:block;margin:0 0 8px;"><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-code"></use></svg></use></svg></svg></span>${util.out('HTML/JS')}</button>
1241
- <button title="${util.out('Spacer')}" class="add-spacer"><span style="display:block;margin:0 0 8px;"><span style="display:inline-block;background:#eee;width:30px;height:5px;"></span></span>${util.out('Spacer')}</button>
1242
- <button style="display:none" title="${util.out('Line')}" class="add-line"><span style="display:block;margin:0 0 8px;"><span style="display:inline-block;background:#ddd;width:30px;height:2px;"></span></span>${util.out('Line')}</button>
1243
- <div class="pop-separator"></div>
1244
- <button title="${util.out('More...')}" class="add-more" style="flex-direction:initial;">${util.out('More...')}</button>
1258
+ ${buttonsHtml}
1259
+ <div class="pop-separator" ${builder.noSnippets ? ' style="display:none"' : ''}></div>
1260
+ <button title="${util.out('More...')}" class="add-more" style="flex-direction:initial;${builder.noSnippets ? 'display:none' : ''}">${util.out('More...')}</button>
1245
1261
  </div>
1246
- </div>
1247
- `;
1262
+ </div>`;
1248
1263
  dom.appendHtml(builderStuff, html);
1249
1264
  quickadd = builderStuff.querySelector('.quickadd');
1250
1265
  let tabs = quickadd.querySelectorAll('.is-pop-tab-item');
@@ -1344,7 +1359,7 @@ const renderQuickAdd = builder => {
1344
1359
  util.addContent(html, mode);
1345
1360
  });
1346
1361
  elm = quickadd.querySelector('.add-button');
1347
- if (elm) dom.addEventListener(elm, 'click', () => {
1362
+ dom.addEventListener(elm, 'click', () => {
1348
1363
  const mode = quickadd.getAttribute('data-mode');
1349
1364
  let html = `<div>
1350
1365
  <a href="#" role="button" class="transition-all inline-block whitespace-nowrap cursor-pointer no-underline border-2 border-solid mr-2 mt-2 mb-1 py-2 size-17 px-6 text-black leading-14 rounded border-transparent hover:border-transparent font-normal tracking-wide" style="background-color: rgb(240, 240, 240);">Read More</a>
@@ -1355,7 +1370,7 @@ const renderQuickAdd = builder => {
1355
1370
  util.addContent(html, mode);
1356
1371
  });
1357
1372
  elm = quickadd.querySelector('.add-twobutton');
1358
- if (elm) dom.addEventListener(elm, 'click', () => {
1373
+ dom.addEventListener(elm, 'click', () => {
1359
1374
  const mode = quickadd.getAttribute('data-mode');
1360
1375
  let html = `<div>
1361
1376
  <a href="#" role="button" class="transition-all inline-block whitespace-nowrap cursor-pointer no-underline border-2 border-solid mr-2 mt-2 mb-1 py-2 size-17 px-6 text-black leading-14 rounded border-transparent hover:border-transparent font-normal tracking-wide" style="background-color: rgb(240, 240, 240);">Read More</a>
@@ -51619,20 +51634,20 @@ class RowTool {
51619
51634
  const separator = columnMore.querySelector('.is-separator');
51620
51635
  let nogrid = cell.closest('[nogrid]'); //dom.parentsHasAttribute(col, 'nogrid');
51621
51636
  if (nogrid) {
51622
- btnPrev.style.display = 'none';
51623
- btnNext.style.display = 'none';
51624
- btnUp.style.display = 'none';
51625
- btnDown.style.display = 'none';
51637
+ if (btnPrev) btnPrev.style.display = 'none';
51638
+ if (btnNext) btnNext.style.display = 'none';
51639
+ if (btnUp) btnUp.style.display = 'none';
51640
+ if (btnDown) btnDown.style.display = 'none';
51626
51641
  if (btnIncrease) btnIncrease.style.display = 'none';
51627
51642
  if (btnDecrease) btnDecrease.style.display = 'none';
51628
- btnDuplicate.style.display = 'none';
51629
- btnPrev.setAttribute('disabled', 'disabled');
51630
- btnNext.setAttribute('disabled', 'disabled');
51631
- btnUp.setAttribute('disabled', 'disabled');
51632
- btnDown.setAttribute('disabled', 'disabled');
51633
- btnIncrease.setAttribute('disabled', 'disabled');
51634
- btnDecrease.setAttribute('disabled', 'disabled');
51635
- btnDuplicate.setAttribute('disabled', 'disabled');
51643
+ if (btnDuplicate) btnDuplicate.style.display = 'none';
51644
+ if (btnPrev) btnPrev.setAttribute('disabled', 'disabled');
51645
+ if (btnNext) btnNext.setAttribute('disabled', 'disabled');
51646
+ if (btnUp) btnUp.setAttribute('disabled', 'disabled');
51647
+ if (btnDown) btnDown.setAttribute('disabled', 'disabled');
51648
+ if (btnIncrease) btnIncrease.setAttribute('disabled', 'disabled');
51649
+ if (btnDecrease) btnDecrease.setAttribute('disabled', 'disabled');
51650
+ if (btnDuplicate) btnDuplicate.setAttribute('disabled', 'disabled');
51636
51651
  let btnColHtml = columnMore.querySelector('.cell-html');
51637
51652
  if (btnColHtml) btnColHtml.style.display = '';
51638
51653
  if (cell.getAttribute('data-html')) {
@@ -51642,20 +51657,20 @@ class RowTool {
51642
51657
  this.columnTool.querySelector('.cell-more').setAttribute('disabled', 'disabled');
51643
51658
  }
51644
51659
  } else {
51645
- btnPrev.style.display = '';
51646
- btnNext.style.display = '';
51647
- btnUp.style.display = '';
51648
- btnDown.style.display = '';
51660
+ if (btnPrev) btnPrev.style.display = '';
51661
+ if (btnNext) btnNext.style.display = '';
51662
+ if (btnUp) btnUp.style.display = '';
51663
+ if (btnDown) btnDown.style.display = '';
51649
51664
  if (btnIncrease) btnIncrease.style.display = '';
51650
51665
  if (btnDecrease) btnDecrease.style.display = '';
51651
- btnDuplicate.style.display = '';
51652
- btnPrev.removeAttribute('disabled');
51653
- btnNext.removeAttribute('disabled');
51654
- btnUp.removeAttribute('disabled');
51655
- btnDown.removeAttribute('disabled');
51666
+ if (btnDuplicate) btnDuplicate.style.display = '';
51667
+ if (btnPrev) btnPrev.removeAttribute('disabled');
51668
+ if (btnNext) btnNext.removeAttribute('disabled');
51669
+ if (btnUp) btnUp.removeAttribute('disabled');
51670
+ if (btnDown) btnDown.removeAttribute('disabled');
51656
51671
  if (btnIncrease) btnIncrease.removeAttribute('disabled');
51657
51672
  if (btnDecrease) btnDecrease.removeAttribute('disabled');
51658
- btnDuplicate.removeAttribute('disabled');
51673
+ if (btnDuplicate) btnDuplicate.removeAttribute('disabled');
51659
51674
  let btnColHtml = columnMore.querySelector('.cell-html');
51660
51675
  if (btnColHtml) {
51661
51676
  btnColHtml.style.display = '';
@@ -51669,21 +51684,21 @@ class RowTool {
51669
51684
 
51670
51685
  if (row.childElementCount - num === 1) {
51671
51686
  //-num => minus is-row-tool, is-col-tool, is-rowadd-tool & is-row-overlay
51672
- btnPrev.style.display = 'none';
51673
- btnNext.style.display = 'none';
51687
+ if (btnPrev) btnPrev.style.display = 'none';
51688
+ if (btnNext) btnNext.style.display = 'none';
51674
51689
  if (btnIncrease) btnIncrease.style.display = 'none';
51675
51690
  if (btnDecrease) btnDecrease.style.display = 'none';
51676
- btnPrev.setAttribute('disabled', 'disabled');
51677
- btnNext.setAttribute('disabled', 'disabled');
51691
+ if (btnPrev) btnPrev.setAttribute('disabled', 'disabled');
51692
+ if (btnNext) btnNext.setAttribute('disabled', 'disabled');
51678
51693
  if (btnIncrease) btnIncrease.setAttribute('disabled', 'disabled');
51679
51694
  if (btnDecrease) btnDecrease.setAttribute('disabled', 'disabled');
51680
51695
  } else {
51681
- btnPrev.style.display = '';
51682
- btnNext.style.display = '';
51696
+ if (btnPrev) btnPrev.style.display = '';
51697
+ if (btnNext) btnNext.style.display = '';
51683
51698
  if (btnIncrease) btnIncrease.style.display = '';
51684
51699
  if (btnDecrease) btnDecrease.style.display = '';
51685
- btnPrev.removeAttribute('disabled');
51686
- btnNext.removeAttribute('disabled');
51700
+ if (btnPrev) btnPrev.removeAttribute('disabled');
51701
+ if (btnNext) btnNext.removeAttribute('disabled');
51687
51702
  if (btnIncrease) btnIncrease.removeAttribute('disabled');
51688
51703
  if (btnDecrease) btnDecrease.removeAttribute('disabled');
51689
51704
  }
@@ -51711,18 +51726,18 @@ class RowTool {
51711
51726
  }
51712
51727
  }
51713
51728
  if (cell.classList.contains('column-lock')) {
51714
- btnPrev.style.display = 'none';
51715
- btnNext.style.display = 'none';
51716
- btnUp.style.display = 'none';
51717
- btnDown.style.display = 'none';
51718
- btnIncrease.style.display = 'none';
51719
- btnDecrease.style.display = 'none';
51720
- btnDuplicate.style.display = 'none';
51721
- separator.style.display = 'none';
51722
- btnLock.style.display = 'none';
51729
+ if (btnPrev) btnPrev.style.display = 'none';
51730
+ if (btnNext) btnNext.style.display = 'none';
51731
+ if (btnUp) btnUp.style.display = 'none';
51732
+ if (btnDown) btnDown.style.display = 'none';
51733
+ if (btnIncrease) btnIncrease.style.display = 'none';
51734
+ if (btnDecrease) btnDecrease.style.display = 'none';
51735
+ if (btnDuplicate) btnDuplicate.style.display = 'none';
51736
+ if (separator) separator.style.display = 'none';
51737
+ if (btnLock) btnLock.style.display = 'none';
51723
51738
  } else {
51724
- separator.style.display = '';
51725
- btnLock.style.display = '';
51739
+ if (separator) separator.style.display = '';
51740
+ if (btnLock) btnLock.style.display = '';
51726
51741
  }
51727
51742
  });
51728
51743
  const btnCellRemove = coltool.querySelector('.cell-remove');
@@ -51850,20 +51865,33 @@ class RowTool {
51850
51865
  const util = this.builder.util;
51851
51866
  const dom = this.builder.dom;
51852
51867
  let rowMore = builderStuff.querySelector('.rowmore');
51853
- let htmlbutton = '';
51854
- if (builder.opts.rowHtmlEditor) htmlbutton = `<button type="button" title="${util.out('HTML')}" class="row-html">
51855
- <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')}
51856
- </button>`;
51857
51868
  if (!rowMore) {
51869
+ let rowMoreButtons = ['moveup', 'movedown', 'duplicate', 'html', 'separator', 'lock', 'settings']; // default
51870
+
51871
+ if (builder.rowMoreButtons) {
51872
+ rowMoreButtons = builder.rowMoreButtons;
51873
+ }
51874
+ const buttonTemplates = {
51875
+ moveup: `<button style="flex: 1 1 calc(50% - 10px);" 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>`,
51876
+ movedown: `<button style="flex: 1 1 calc(50% - 10px);" 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>`,
51877
+ duplicate: `<button style="flex: 1 1 calc(50% - 10px);" 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>`,
51878
+ html: `<button style="flex: 1 1 calc(50% - 10px);" type="button" title="${util.out('HTML')}" class="row-html">
51879
+ <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')}
51880
+ </button>`,
51881
+ separator: '<div class="is-separator"></div>',
51882
+ lock: `<button style="flex: 1 1 calc(50% - 10px);" 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>`,
51883
+ settings: `<button style="flex: 1 1 calc(50% - 10px);" type="button" title="${util.out('Settings')}" class="row-settings"><span><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-cog"></use></svg></span>${util.out('Settings')}</button>`
51884
+ };
51885
+
51886
+ // Filter buttons
51887
+ const filteredButtons = rowMoreButtons.filter(item => {
51888
+ if (!builder.opts.rowHtmlEditor && item === 'html') return false;
51889
+ return true;
51890
+ });
51891
+ let buttonsHtml = filteredButtons.map(item => buttonTemplates[item] || '').join('');
51858
51892
  let html = `<div class="is-pop rowmore" style="z-index:10002;" tabindex="-1" role="dialog" aria-modal="true" aria-hidden="true">
51859
51893
  <div style="display:flex;flex-flow:wrap;">
51860
- <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>
51861
- <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>
51862
- <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>
51863
- ${htmlbutton}
51864
- <div class="is-separator"></div>
51865
- <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>
51866
- <button type="button" title="${util.out('Settings')}" class="row-settings"><span><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-cog"></use></svg></span>${util.out('Settings')}</button>
51894
+ ${buttonsHtml}
51867
51895
  </div>
51868
51896
  </div>
51869
51897
  `;
@@ -53326,29 +53354,40 @@ class ColumnTool {
53326
53354
  const dom = this.builder.dom;
53327
53355
  this.grid = new Grid(builder);
53328
53356
  let columnMore = builderStuff.querySelector('.is-pop.columnmore');
53329
- let resizebutton = `
53330
- <button type="button" title="${util.out('Increase')}" class="cell-increase"><span><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-increase"></use></svg></span>${util.out('Increase')}</button>
53331
- <button type="button" title="${util.out('Decrease')}" class="cell-decrease"><span><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-decrease"></use></svg></span>${util.out('Decrease')}</button>
53332
- `;
53333
- let htmlbutton = '';
53334
- if (builder.opts.columnHtmlEditor) htmlbutton = `<button type="button" title="${util.out('HTML')}" class="cell-html">
53335
- <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')}
53336
- </button>`;
53337
53357
  if (!columnMore) {
53358
+ let columnMoreButtons = ['moveleft', 'moveright', 'moveup', 'movedown', 'increase', 'decrease', 'duplicate', 'html', 'separator', 'lock', 'settings']; // default
53359
+
53360
+ if (builder.columnMoreButtons) {
53361
+ columnMoreButtons = builder.columnMoreButtons;
53362
+ }
53363
+ const buttonTemplates = {
53364
+ moveleft: `<button type="button" title="${util.out('Move Left')}" class="cell-prev" style="flex: 1 1 calc(50% - 10px);"><span><svg class="is-icon-flex" style="width:15px;height:15px;"><use xlink:href="#ion-ios-arrow-thin-left"></use></svg></span>${util.out('Move Left')}</button>`,
53365
+ moveright: `<button type="button" title="${util.out('Move Right')}" class="cell-next" style="flex: 1 1 calc(50% - 10px);"><span><svg class="is-icon-flex" style="width:15px;height:15px;"><use xlink:href="#ion-ios-arrow-thin-right"></use></svg></span>${util.out('Move Right')}</button>`,
53366
+ moveup: `<button type="button" title="${util.out('Move Up')}" class="cell-up" style="flex: 1 1 calc(50% - 10px);"><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>`,
53367
+ movedown: `<button type="button" title="${util.out('Move Down')}" class="cell-down" style="flex: 1 1 calc(50% - 10px);"><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>`,
53368
+ increase: `<button type="button" title="${util.out('Increase')}" class="cell-increase" style="flex: 1 1 calc(50% - 10px);"><span><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-increase"></use></svg></span>${util.out('Increase')}</button>`,
53369
+ decrease: `<button type="button" title="${util.out('Decrease')}" class="cell-decrease" style="flex: 1 1 calc(50% - 10px);"><span><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-decrease"></use></svg></span>${util.out('Decrease')}</button>`,
53370
+ duplicate: `<button type="button" title="${util.out('Duplicate')}" class="cell-duplicate" style="flex: 1 1 calc(50% - 10px);"><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>`,
53371
+ html: `<button type="button" title="${util.out('HTML')}" class="cell-html" style="flex: 1 1 calc(50% - 10px);">
53372
+ <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')}
53373
+ </button>`,
53374
+ separator: '<div class="is-separator"></div>',
53375
+ lock: `<button type="button" title="${util.out('Lock')}" class="cell-locking" style="flex: 1 1 calc(50% - 10px);"><span><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-lock"></use></svg></span>${util.out('Lock')}</button>`,
53376
+ settings: `<button type="button" title="${util.out('Settings')}" class="cell-settings" style="flex: 1 1 calc(50% - 10px);"><span><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-cog"></use></svg></span>${util.out('Settings')}</button>`
53377
+ };
53378
+
53379
+ // Filter buttons
53380
+ const filteredButtons = columnMoreButtons.filter(item => {
53381
+ if (!builder.opts.columnHtmlEditor && item === 'html') return false;
53382
+ return true;
53383
+ });
53384
+ let buttonsHtml = filteredButtons.map(item => buttonTemplates[item] || '').join('');
53385
+
53338
53386
  // Refer to .is-col-tool in in rowtool.js
53339
53387
  let html = `
53340
53388
  <div class="is-pop columnmore" tabindex="-1" role="dialog" aria-modal="true" aria-hidden="true">
53341
53389
  <div style="display:flex;flex-flow:wrap;">
53342
- <button type="button" title="${util.out('Move Left')}" class="cell-prev"><span><svg class="is-icon-flex" style="width:15px;height:15px;"><use xlink:href="#ion-ios-arrow-thin-left"></use></svg></span>${util.out('Move Left')}</button>
53343
- <button type="button" title="${util.out('Move Right')}" class="cell-next"><span><svg class="is-icon-flex" style="width:15px;height:15px;"><use xlink:href="#ion-ios-arrow-thin-right"></use></svg></span>${util.out('Move Right')}</button>
53344
- <button type="button" title="${util.out('Move Up')}" class="cell-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>
53345
- <button type="button" title="${util.out('Move Down')}" class="cell-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>
53346
- ${resizebutton}
53347
- <button type="button" title="${util.out('Duplicate')}" class="cell-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>
53348
- ${htmlbutton}
53349
- <div class="is-separator"></div>
53350
- <button type="button" title="${util.out('Lock')}" class="cell-locking"><span><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-lock"></use></svg></span>${util.out('Lock')}</button>
53351
- <button type="button" title="${util.out('Settings')}" class="cell-settings"><span><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-cog"></use></svg></span>${util.out('Settings')}</button>
53390
+ ${buttonsHtml}
53352
53391
  </div>
53353
53392
  </div>
53354
53393
  `;
@@ -60328,6 +60367,24 @@ class ElementTool {
60328
60367
  let elementTool = builderStuff.querySelector('.is-element-tool');
60329
60368
  let elementMore = builderStuff.querySelector('.elmmore');
60330
60369
  if (!elementTool) {
60370
+ let elementMoreButtons = ['moveup', 'movedown', 'duplicate', 'settings']; // default
60371
+
60372
+ if (builder.elementMoreButtons) {
60373
+ elementMoreButtons = builder.elementMoreButtons;
60374
+ }
60375
+ const buttonTemplates = {
60376
+ moveup: `<button type="button" title="${util.out('Move Up')}" class="elm-up" style="flex: 1 1 calc(50% - 10px);"><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>`,
60377
+ movedown: `<button type="button" title="${util.out('Move Down')}" class="elm-down" style="flex: 1 1 calc(50% - 10px);"><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>`,
60378
+ duplicate: `<button type="button" title="${util.out('Duplicate')}" class="elm-duplicate" style="flex: 1 1 calc(50% - 10px);"><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>`,
60379
+ settings: `<button type="button" title="${util.out('Settings')}" class="elm-settings" style="flex: 1 1 calc(50% - 10px);"><span><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-cog"></use></svg></span>${util.out('Settings')}</button>`
60380
+ };
60381
+
60382
+ // Filter buttons
60383
+ const filteredButtons = elementMoreButtons.filter(item => {
60384
+ if (!builder.opts.elementEditor && item === 'settings') return false;
60385
+ return true;
60386
+ });
60387
+ let buttonsHtml = filteredButtons.map(item => buttonTemplates[item] || '').join('');
60331
60388
  let html = `<div class="is-tool is-element-tool">
60332
60389
  <button type="button" tabindex="-1" title="${util.out('Add')}" class="elm-add">
60333
60390
  <svg class="is-icon-flex" style="width:14px;height:14px;color:#111"><use xlink:href="#icon-plus"></use></svg>
@@ -60345,12 +60402,7 @@ class ElementTool {
60345
60402
 
60346
60403
  <div class="is-pop elmmore" style="z-index:10002;" tabindex="-1" role="dialog" aria-modal="true" aria-hidden="true">
60347
60404
  <div style="display:flex;flex-flow:wrap;">
60348
- <button type="button" title="${util.out('Move Up')}" class="elm-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>
60349
- <button type="button" title="${util.out('Move Down')}" class="elm-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>
60350
- <button type="button" title="${util.out('Duplicate')}" class="elm-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>
60351
- ${this.builder.opts.elementEditor ? `
60352
- <button type="button" title="${util.out('Settings')}" class="elm-settings"><span><svg class="is-icon-flex" style="width:13px;height:13px;"><use xlink:href="#icon-cog"></use></svg></span>${util.out('Settings')}</button>
60353
- ` : ''}
60405
+ ${buttonsHtml}
60354
60406
  </div>
60355
60407
  </div>
60356
60408
  `;
@@ -60863,6 +60915,10 @@ class ElementTool {
60863
60915
  }
60864
60916
  if (activeElement && activeElement.classList.contains('ovl') && this.builder.activeIframe) {
60865
60917
  activeElement = this.builder.activeIframe.closest('.embed-responsive');
60918
+ } else if (activeElement && activeElement.classList.contains('ovl')) {
60919
+ if (activeElement.parentNode.querySelector('audio')) {
60920
+ activeElement = activeElement.parentNode;
60921
+ }
60866
60922
  }
60867
60923
  this.builder.activeElement = activeElement;
60868
60924
  if (activeElement) {
@@ -91540,7 +91596,7 @@ class PageSize {
91540
91596
  position: relative;
91541
91597
  flex:none;
91542
91598
  background: #fff;
91543
- /* overflow: hidden;*/
91599
+ overflow: hidden;
91544
91600
  box-shadow: none;
91545
91601
  }
91546
91602
  ${css}