@innovastudio/contentbox 1.5.32 → 1.5.34

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@innovastudio/contentbox",
3
3
  "type": "module",
4
- "version": "1.5.32",
4
+ "version": "1.5.34",
5
5
  "description": "",
6
6
  "main": "public/contentbox/contentbox.esm.js",
7
7
  "files": [
@@ -46,7 +46,7 @@
46
46
  "webpack-dev-server": "^4.0.0"
47
47
  },
48
48
  "dependencies": {
49
- "@innovastudio/contentbuilder": "^1.4.23",
49
+ "@innovastudio/contentbuilder": "^1.4.26",
50
50
  "js-beautify": "^1.14.0"
51
51
  }
52
52
  }
@@ -12781,11 +12781,13 @@ class EditBox {
12781
12781
 
12782
12782
  activeModule.setAttribute('data-html', encodeURIComponent(hidModuleCode.value)); //Save Settings (original)
12783
12783
 
12784
- activeModule.setAttribute('data-settings', encodeURIComponent(hidModuleSettings.value)); //Render (programmatically)
12784
+ activeModule.setAttribute('data-settings', encodeURIComponent(hidModuleSettings.value));
12785
+ let html = hidModuleCode.value;
12786
+ html = html.replace(/{id}/g, dom$l.uniqueId()); //Render (programmatically)
12785
12787
 
12786
12788
  let range = document.createRange();
12787
12789
  activeModule.innerHTML = '';
12788
- activeModule.appendChild(range.createContextualFragment(hidModuleCode.value)); // We use createContextualFragment so that embedded javascript code (code block) will be executed
12790
+ activeModule.appendChild(range.createContextualFragment(html)); // We use createContextualFragment so that embedded javascript code (code block) will be executed
12789
12791
  //Trigger Render event
12790
12792
 
12791
12793
  this.builder.settings.onRender(); //Trigger Change event
@@ -73110,6 +73112,7 @@ class ColumnTool {
73110
73112
  const util = this.builder.util;
73111
73113
  const builderStuff = this.builder.builderStuff;
73112
73114
  this.util = util;
73115
+ this.builderStuff = builderStuff;
73113
73116
  const dom = this.builder.dom;
73114
73117
  this.dom = dom;
73115
73118
  let columnMore = builderStuff.querySelector('.is-pop.columnmore');
@@ -73218,9 +73221,6 @@ class ColumnTool {
73218
73221
  <button title="${util.out('Desktop')}" class="input-device on" data-value="" style="width:40px;height:25px;">
73219
73222
  <svg class="is-icon-flex" style="width:16px;height:16px"><use xlink:href="#icon-device-desktop"></use></svg>
73220
73223
  </button>
73221
- <!--<button title="${util.out('Laptop/Tablet (Landscape)')}" class="input-device" data-value="md" style="width:40px;height:25px;">
73222
- <svg class="is-icon-flex" style="width:19px;height:19px;"><use xlink:href="#icon-device-laptop"></use></svg>
73223
- </button>-->
73224
73224
  <button title="${util.out('Laptop/Tablet (Landscape)')}" class="input-device" data-value="md" style="width:40px;height:25px;">
73225
73225
  <svg class="is-icon-flex" style="width:16px;height:16px;transform:rotate(-90deg)"><use xlink:href="#icon-device-tablet"></use></svg>
73226
73226
  </button>
@@ -73411,6 +73411,21 @@ class ColumnTool {
73411
73411
 
73412
73412
  <div style="padding:0;margin-top:25px;">
73413
73413
 
73414
+ <div class="div-target" style="display: flex;justify-content: flex-end;padding: 5px 0 0;">
73415
+ <button title="${util.out('Desktop')}" class="input-device on" data-value="" style="width:40px;height:25px;">
73416
+ <svg class="is-icon-flex" style="width:16px;height:16px"><use xlink:href="#icon-device-desktop"></use></svg>
73417
+ </button>
73418
+ <button title="${util.out('Laptop/Tablet (Landscape)')}" class="input-device" data-value="md" style="width:40px;height:25px;">
73419
+ <svg class="is-icon-flex" style="width:16px;height:16px;transform:rotate(-90deg)"><use xlink:href="#icon-device-tablet"></use></svg>
73420
+ </button>
73421
+ <button title="${util.out('Tablet (Portrait)')}" class="input-device" data-value="sm" style="width:40px;height:25px;">
73422
+ <svg class="is-icon-flex" style="width:16px;height:16px"><use xlink:href="#icon-device-tablet"></use></svg>
73423
+ </button>
73424
+ <button title="${util.out('Mobile')}" class="input-device" data-value="xs" style="width:40px;height:25px;">
73425
+ <svg class="is-icon-flex" style="width:13px;height:13px"><use xlink:href="#icon-device-mobile"></use></svg>
73426
+ </button>
73427
+ </div>
73428
+
73414
73429
  <div style="padding-bottom:3px;">${util.out('Scale')}:</div>
73415
73430
  <div style="padding-top:4px">
73416
73431
  <input type="range" min="100" max="500" value="0" class="image-scale-slider is-rangeslider">
@@ -75029,6 +75044,25 @@ class ColumnTool {
75029
75044
  btnHidden.classList.add('on'); //Trigger Change event
75030
75045
 
75031
75046
  this.builder.opts.onChange();
75047
+ }); // Responsive Image Adjust
75048
+
75049
+ btns = this.imageAdjust.querySelectorAll('.input-device');
75050
+ btns.forEach(btn => {
75051
+ btn.addEventListener('click', () => {
75052
+ let elms = this.imageAdjust.querySelectorAll('.input-device');
75053
+ elms.forEach(elm => {
75054
+ elm.classList.remove('on');
75055
+ });
75056
+ btn.classList.add('on');
75057
+ const modal = builderStuff.querySelector('.is-modal.content-preview');
75058
+
75059
+ if (!modal.classList.contains('active')) {
75060
+ this.builder.openPreview();
75061
+ }
75062
+
75063
+ this.realtimeImageAdjust();
75064
+ this.readImageAdjust(this.builder.elementSelected, this.useTarget);
75065
+ });
75032
75066
  });
75033
75067
  }
75034
75068
 
@@ -75296,9 +75330,8 @@ class ColumnTool {
75296
75330
  if (btn) btn.setAttribute('data-focus', true);
75297
75331
  }
75298
75332
 
75299
- openImageAdjust(elm, btn, useTarget) {
75300
- if (useTarget) this.useTarget = true;else this.useTarget = false; //Current value
75301
-
75333
+ readImageAdjust(elm, useTarget) {
75334
+ //Current value
75302
75335
  const imageAdjust = this.imageAdjust;
75303
75336
  const inpImageScaleSlider = imageAdjust.querySelector('.image-scale-slider');
75304
75337
  const inpImageHorSlider = imageAdjust.querySelector('.image-hor-slider');
@@ -75306,6 +75339,7 @@ class ColumnTool {
75306
75339
  inpImageScaleSlider.value = 100;
75307
75340
  inpImageHorSlider.value = 0;
75308
75341
  inpImageVertSlider.value = 0;
75342
+ inpImageScaleSlider.disabled = false;
75309
75343
 
75310
75344
  if (useTarget) {
75311
75345
  inpImageHorSlider.value = 50;
@@ -75384,16 +75418,79 @@ class ColumnTool {
75384
75418
  } //elementSelected
75385
75419
 
75386
75420
 
75387
- this.builder.elementSelected = elm; //Show modal
75421
+ this.builder.elementSelected = elm;
75422
+ }
75423
+
75424
+ openImageAdjust(elm, btn, useTarget) {
75425
+ if (useTarget) this.useTarget = true;else this.useTarget = false;
75426
+ const divTarget = this.imageAdjust.querySelector('.div-target');
75427
+
75428
+ if (useTarget) {
75429
+ divTarget.style.display = 'flex';
75430
+ } else {
75431
+ divTarget.style.display = 'none';
75432
+ }
75388
75433
 
75389
- imageAdjust.style.zIndex = '10005';
75390
- this.util.showModal(imageAdjust, false, () => {
75434
+ const modal = this.builderStuff.querySelector('.is-modal.content-preview');
75435
+ let elms = this.imageAdjust.querySelectorAll('.input-device');
75436
+ elms.forEach(elm => {
75437
+ elm.classList.remove('on');
75438
+ });
75439
+
75440
+ if (!modal.classList.contains('active')) {
75441
+ this.imageAdjust.querySelector('.input-device[data-value=""]').classList.add('on');
75442
+ }
75443
+
75444
+ this.readImageAdjust(elm, useTarget); //Show modal
75445
+
75446
+ this.imageAdjust.style.zIndex = '10005';
75447
+ this.util.showModal(this.imageAdjust, false, () => {
75391
75448
  if (btn) {
75392
75449
  btn.removeAttribute('data-focus');
75393
75450
  btn.focus();
75394
75451
  }
75395
75452
  });
75396
75453
  if (btn) btn.setAttribute('data-focus', true);
75454
+ this.realtimeImageAdjust(true);
75455
+ }
75456
+
75457
+ realtimeImageAdjust(initialOpen) {
75458
+ if (initialOpen) {
75459
+ const builderStuff = this.builder.builderStuff;
75460
+ const modal = builderStuff.querySelector('.is-modal.content-preview.active');
75461
+
75462
+ if (modal) {
75463
+ let elms = this.imageAdjust.querySelectorAll('.input-device');
75464
+ elms.forEach(elm => {
75465
+ elm.classList.remove('on');
75466
+ });
75467
+
75468
+ if (modal.classList.contains('is-screen-1920')) {
75469
+ this.imageAdjust.querySelector('.input-device[data-value=""]').classList.add('on');
75470
+ } else if (modal.classList.contains('is-screen-1440')) {
75471
+ this.imageAdjust.querySelector('.input-device[data-value=""]').classList.add('on');
75472
+ } else if (modal.classList.contains('is-screen-1024')) {
75473
+ this.imageAdjust.querySelector('.input-device[data-value="md"]').classList.add('on');
75474
+ } else if (modal.classList.contains('is-screen-768')) {
75475
+ this.imageAdjust.querySelector('.input-device[data-value="sm"]').classList.add('on');
75476
+ } else if (modal.classList.contains('is-screen-375')) {
75477
+ this.imageAdjust.querySelector('.input-device[data-value="xs"]').classList.add('on');
75478
+ }
75479
+ }
75480
+ }
75481
+
75482
+ let divTarget = this.imageAdjust.querySelector('.div-target');
75483
+ let target = this.builder.responsive.readTarget(divTarget); // Live Preview Sync
75484
+
75485
+ if (target === 'xs') {
75486
+ if (!initialOpen) this.builder.livePreview.resizePreview(375);
75487
+ } else if (target === 'sm') {
75488
+ if (!initialOpen) this.builder.livePreview.resizePreview(768);
75489
+ } else if (target === 'md') {
75490
+ if (!initialOpen) this.builder.livePreview.resizePreview(1024);
75491
+ } else {
75492
+ if (!initialOpen) this.builder.livePreview.resizePreview(1920);
75493
+ }
75397
75494
  }
75398
75495
 
75399
75496
  resetImage(elm) {
@@ -91576,7 +91673,28 @@ class LivePreview {
91576
91673
  if (!this.builder.doc.querySelector('.is-wrapper')) {
91577
91674
  // ContentBuilder
91578
91675
  if (this.builder.previewURL) {
91579
- iframe.src = this.builder.previewURL + '?' + Math.floor(Date.now() / 1000);
91676
+ if (this.builder.livePreviewAlwaysReload) {
91677
+ iframe.src = this.builder.previewURL + '?' + Math.floor(Date.now() / 1000);
91678
+ } else {
91679
+ let iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
91680
+
91681
+ if (iframeDocument) {
91682
+ if (iframeDocument.body.innerHTML === '') {
91683
+ iframe.src = this.builder.previewURL + '?' + Math.floor(Date.now() / 1000);
91684
+ } else {
91685
+ // sync. html
91686
+ let html = this.builder.html();
91687
+ let container = iframeDocument.querySelector('.container');
91688
+ if (!container) container = iframeDocument.querySelector('.is-container');
91689
+
91690
+ if (container) {
91691
+ container.innerHTML = html;
91692
+ } else {
91693
+ iframe.src = this.builder.previewURL + '?' + Math.floor(Date.now() / 1000);
91694
+ }
91695
+ }
91696
+ }
91697
+ }
91580
91698
  } else {
91581
91699
  try {
91582
91700
  this.writeHtml(iframe);
@@ -91584,7 +91702,92 @@ class LivePreview {
91584
91702
  }
91585
91703
  }
91586
91704
  } else {
91587
- iframe.src = this.builder.previewURL + '?' + Math.floor(Date.now() / 1000);
91705
+ // ContentBox
91706
+ if (this.builder.livePreviewAlwaysReload) {
91707
+ iframe.src = this.builder.previewURL + '?' + Math.floor(Date.now() / 1000);
91708
+ } else {
91709
+ let iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
91710
+
91711
+ if (iframeDocument) {
91712
+ if (iframeDocument.body.innerHTML === '') {
91713
+ iframe.src = this.builder.previewURL + '?' + Math.floor(Date.now() / 1000);
91714
+ } else {
91715
+ // sync. html
91716
+ let html = localStorage.getItem('preview-html');
91717
+ let wrapper = iframeDocument.querySelector('.is-wrapper');
91718
+ wrapper.innerHTML = html; // sync. styles
91719
+ // let mainCss = localStorage.getItem('preview-maincss');
91720
+ // let sectionCss = localStorage.getItem('preview-sectioncss');
91721
+
91722
+ let elms = iframeDocument.querySelectorAll('link');
91723
+ let links = this.builder.doc.getElementsByTagName('link');
91724
+ Array.from(links).map(link => {
91725
+ let href = link.href.toLowerCase();
91726
+
91727
+ if (href.indexOf('/basetype-') !== -1 || href.indexOf('/type-') !== -1) {
91728
+ // check
91729
+ let exist = false;
91730
+ elms.forEach(elm => {
91731
+ let elmHref = elm.href.toLowerCase();
91732
+
91733
+ if (elmHref) {
91734
+ if (elmHref.indexOf('/basetype-') !== -1 || elmHref.indexOf('/type-') !== -1) {
91735
+ if (href === elmHref) {
91736
+ exist = true;
91737
+ }
91738
+ }
91739
+ }
91740
+ });
91741
+
91742
+ if (!exist) {
91743
+ // clone is needed, otherwise, parent resource may dissapear when loading on iframe
91744
+ const clone = link.cloneNode(true);
91745
+ iframeDocument.head.appendChild(clone); // ADD
91746
+ }
91747
+ }
91748
+ });
91749
+ elms.forEach(elm => {
91750
+ let href = elm.href.toLowerCase();
91751
+
91752
+ if (href.indexOf('/basetype-') !== -1 || href.indexOf('/type-') !== -1) {
91753
+ // check
91754
+ let exist = false;
91755
+ Array.from(links).map(link => {
91756
+ let elmHref = link.href.toLowerCase();
91757
+
91758
+ if (elmHref) {
91759
+ if (elmHref.indexOf('/basetype-') !== -1 || elmHref.indexOf('/type-') !== -1) {
91760
+ if (href === elmHref) {
91761
+ exist = true;
91762
+ }
91763
+ }
91764
+ }
91765
+ });
91766
+
91767
+ if (!exist) {
91768
+ iframeDocument.head.removeChild(elm); // REMOVE
91769
+ }
91770
+ }
91771
+ }); // reload box js
91772
+
91773
+ elms = iframeDocument.querySelectorAll('script');
91774
+ elms.forEach(elm => {
91775
+ let src = elm.getAttribute('src');
91776
+
91777
+ if (src) {
91778
+ if (src.indexOf('box-flex.js') !== -1 || src.indexOf('box.js') !== -1) {
91779
+ elm.parentElement.removeChild(elm);
91780
+ let scriptElm = document.createElement('script');
91781
+ scriptElm.setAttribute('src', src);
91782
+ iframeDocument.body.appendChild(scriptElm);
91783
+ }
91784
+ }
91785
+ });
91786
+ }
91787
+ } else {
91788
+ iframe.src = this.builder.previewURL + '?' + Math.floor(Date.now() / 1000);
91789
+ }
91790
+ }
91588
91791
  }
91589
91792
 
91590
91793
  iframe.onload = () => {
@@ -91719,6 +91922,7 @@ class ContentBuilder {
91719
91922
  // onPreviewClose: ()=>{},
91720
91923
  previewStyle: 'top:auto;bottom:50px;left:50px;right:auto;',
91721
91924
  livePreviewOpen: false,
91925
+ livePreviewAlwaysReload: false,
91722
91926
  scriptPath: '',
91723
91927
  // Deprecated
91724
91928
  // Old way:
@@ -99823,14 +100027,12 @@ class AnimateScroll {
99823
100027
  this.clickContent();
99824
100028
  }, 30);
99825
100029
  }; //Extend onChange
100030
+ // let old2 = this.builder.settings.onChange;
100031
+ // this.builder.settings.onChange = ()=>{
100032
+ // old2.call(this);
100033
+ // this.builder.editor.livePreview.previewRefresh();
100034
+ // };
99826
100035
 
99827
-
99828
- let old2 = this.builder.settings.onChange;
99829
-
99830
- this.builder.settings.onChange = () => {
99831
- old2.call(this);
99832
- this.builder.editor.livePreview.previewRefresh();
99833
- };
99834
100036
  }
99835
100037
 
99836
100038
  openPreview() {