@innovastudio/contentbuilder 1.1.5 → 1.1.8

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.
@@ -4513,6 +4513,11 @@ class Util {
4513
4513
  } // LATER: auto scroll
4514
4514
  // LATER: If image, then it needs time to load (resulting incorrect position), so hide element tool.
4515
4515
 
4516
+ }
4517
+
4518
+ if (this.builder.useCssClasses) {
4519
+ let builderActive = document.querySelector('.builder-active');
4520
+ if (builderActive) dom.contentReformat(builderActive, this.builder.cssClasses);
4516
4521
  } // Call onChange
4517
4522
 
4518
4523
 
@@ -4741,6 +4746,11 @@ class Util {
4741
4746
 
4742
4747
  columnTool = document.querySelector('.is-column-tool');
4743
4748
  columnTool.className = columnTool.className.replace('active', '');
4749
+ }
4750
+
4751
+ if (this.builder.useCssClasses) {
4752
+ let builderActive = document.querySelector('.builder-active');
4753
+ if (builderActive) dom.contentReformat(builderActive, this.builder.cssClasses);
4744
4754
  } // Call onChange
4745
4755
 
4746
4756
 
@@ -7734,39 +7744,6 @@ class Dom {
7734
7744
  if (!removeEmptyStyleChildren || removeEmptyStyleChildren.length <= 0) {
7735
7745
  return;
7736
7746
  }
7737
- }
7738
-
7739
- cleanEmptySpans(area) {
7740
- let spans = area.querySelectorAll('span');
7741
- const filter = Array.prototype.filter;
7742
- let children = filter.call(spans, element => {
7743
- return element.attributes.length === 0;
7744
- }); // Remove empty spans
7745
-
7746
- if (children && children.length > 0) {
7747
- children.forEach(element => {
7748
- element.outerHTML = element.innerHTML;
7749
- });
7750
- } // Remove spans which have empty content
7751
-
7752
-
7753
- spans = area.querySelectorAll('span');
7754
- filter.call(spans, element => {
7755
- if (element.innerHTML === '') {
7756
- element.parentNode.removeChild(element);
7757
- }
7758
- }); // Recheck
7759
-
7760
- spans = area.querySelectorAll('span');
7761
- children = filter.call(spans, element => {
7762
- return element.attributes.length === 0;
7763
- });
7764
-
7765
- if (children && children.length > 0) {
7766
- this.cleanEmptySpans(area);
7767
- } else {
7768
- return;
7769
- }
7770
7747
  } // Font Size stuff
7771
7748
 
7772
7749
 
@@ -7843,7 +7820,7 @@ class Dom {
7843
7820
  }
7844
7821
  });
7845
7822
  });
7846
- this.cleanUnusedSpan(elm); // causes lost selection
7823
+ this.cleanUnusedSpan(elm); // REVIEW (causes lost selection)
7847
7824
  }
7848
7825
 
7849
7826
  cleanSelection(selection) {
@@ -7855,40 +7832,148 @@ class Dom {
7855
7832
  selection.selectAllChildren(span);
7856
7833
  this.cleanElement(span);
7857
7834
  }
7858
-
7835
+ /*
7859
7836
  cleanUnusedSpan(span) {
7860
- if (!span.hasChildNodes()) {
7861
- return;
7862
- } // Direct children with no style
7863
-
7864
-
7865
- const children = Array.from(span.children).filter(element => {
7866
- if (element.getAttribute('style') === '' || element.style === null) {
7867
- element.removeAttribute('style');
7837
+ if (!span.hasChildNodes()) {
7838
+ return;
7839
+ }
7840
+ // Direct children with no style
7841
+ const children = Array.from(span.children).filter((element) => {
7842
+ if (element.getAttribute('style') === '' || element.style === null) {
7843
+ element.removeAttribute('style');
7844
+ }
7845
+ let unused = ( element.attributes.length === 0 || (element.attributes.length === 1 && element.hasAttribute('data-keep')));
7846
+ return (element.nodeName.toLowerCase() === 'span' && unused);
7847
+ });
7848
+ if (children && children.length > 0) {
7849
+ children.forEach((element) => {
7850
+ const text = document.createTextNode(element.textContent);
7851
+ element.parentElement.replaceChild(text, element);
7852
+ });
7853
+ return;
7854
+ }
7855
+ // Deeper childrens
7856
+ const cleanUnusedSpanChildren = Array.from(span.children).map((element) => {
7857
+ return this.cleanUnusedSpan(element);
7858
+ });
7859
+ if (!cleanUnusedSpanChildren || cleanUnusedSpanChildren.length <= 0) {
7860
+ return;
7868
7861
  }
7862
+ }
7863
+ */
7869
7864
 
7870
- let unused = element.attributes.length === 0 || element.attributes.length === 1 && element.hasAttribute('data-keep');
7871
- return element.nodeName.toLowerCase() === 'span' && unused;
7872
- });
7865
+
7866
+ cleanUnusedSpan(area) {
7867
+ let spans = area.querySelectorAll('span');
7868
+ const filter = Array.prototype.filter;
7869
+ let children = filter.call(spans, element => {
7870
+ return element.attributes.length === 0;
7871
+ }); // Remove empty spans
7873
7872
 
7874
7873
  if (children && children.length > 0) {
7875
7874
  children.forEach(element => {
7876
- const text = document.createTextNode(element.textContent);
7877
- element.parentElement.replaceChild(text, element);
7875
+ element.outerHTML = element.innerHTML;
7878
7876
  });
7879
- return;
7880
- } // Deeper childrens
7877
+ } // Remove spans which have empty content
7878
+
7881
7879
 
7880
+ spans = area.querySelectorAll('span');
7881
+ filter.call(spans, element => {
7882
+ if (element.innerHTML === '') {
7883
+ element.parentNode.removeChild(element);
7884
+ }
7885
+ }); // Recheck
7882
7886
 
7883
- const cleanUnusedSpanChildren = Array.from(span.children).map(element => {
7884
- return this.cleanUnusedSpan(element);
7887
+ spans = area.querySelectorAll('span');
7888
+ children = filter.call(spans, element => {
7889
+ return element.attributes.length === 0;
7885
7890
  });
7886
7891
 
7887
- if (!cleanUnusedSpanChildren || cleanUnusedSpanChildren.length <= 0) {
7892
+ if (children && children.length > 0) {
7893
+ this.cleanUnusedSpan(area);
7894
+ } else {
7888
7895
  return;
7889
7896
  }
7890
7897
  }
7891
7898
 
7899
+ contentReformat(area, cssClasses) {
7900
+ this.replaceTag(area, 'b', cssClasses.fontWeight.defaultBold);
7901
+ this.replaceTag(area, 'i', cssClasses.fontStyle.italic);
7902
+ this.replaceTag(area, 'u', cssClasses.textDecoration.underline);
7903
+ this.replaceTag(area, 'strike', cssClasses.textDecoration.linethrough);
7904
+ this.replaceInline(area, 'font-weight', 'normal', cssClasses.fontWeight.defaultBold);
7905
+ this.replaceInline(area, 'font-weight', 'bold', cssClasses.fontWeight.defaultBold);
7906
+ this.replaceInline(area, 'font-weight', '600', cssClasses.fontWeight.semibold);
7907
+ this.replaceInline(area, 'text-align', 'left', cssClasses.textAlign.left);
7908
+ this.replaceInline(area, 'text-align', 'right', cssClasses.textAlign.right);
7909
+ this.replaceInline(area, 'text-align', 'center', cssClasses.textAlign.center);
7910
+ this.replaceInline(area, 'text-align', 'justify', cssClasses.textAlign.justify);
7911
+ this.replaceInline(area, 'display', 'flex', cssClasses.display.flex);
7912
+ this.replaceInline(area, 'justiify-content', 'flex-start', cssClasses.justifyContent.start);
7913
+ this.replaceInline(area, 'justiify-content', 'flex-end', cssClasses.justifyContent.end);
7914
+ this.replaceInline(area, 'justiify-content', 'center', cssClasses.justifyContent.center);
7915
+ this.replaceInline(area, 'justiify-content', 'space-between', cssClasses.justifyContent.between);
7916
+ this.replaceInline(area, 'flex-direction', 'column', cssClasses.flexDirection.column);
7917
+ this.replaceInline(area, 'flex-direction', 'row', cssClasses.flexDirection.row);
7918
+ this.replaceInline(area, 'align-items', 'flex-start', cssClasses.alignItems.start);
7919
+ this.replaceInline(area, 'align-items', 'flex-end', cssClasses.alignItems.end);
7920
+ this.replaceInline(area, 'align-items', 'center', cssClasses.alignItems.center);
7921
+ this.replaceInline(area, 'text-transform', 'uppercase', cssClasses.textTransform.uppercase);
7922
+ this.replaceInline(area, 'text-transform', 'lowercase', cssClasses.textTransform.lowercase);
7923
+ this.replaceInline(area, 'text-transform', 'none', cssClasses.textTransform.normal);
7924
+ this.replaceInline(area, 'line-height', '1', cssClasses.leading.leading_10);
7925
+ this.replaceInline(area, 'line-height', '1.1', cssClasses.leading.leading_11);
7926
+ this.replaceInline(area, 'line-height', '1.2', cssClasses.leading.leading_12);
7927
+ this.replaceInline(area, 'line-height', '1.25', cssClasses.leading.leading_125);
7928
+ this.replaceInline(area, 'line-height', '1.3', cssClasses.leading.leading_13);
7929
+ this.replaceInline(area, 'line-height', '1.375', cssClasses.leading.leading_1375);
7930
+ this.replaceInline(area, 'line-height', '1.4', cssClasses.leading.leading_14);
7931
+ this.replaceInline(area, 'line-height', '1.5', cssClasses.leading.leading_15);
7932
+ this.replaceInline(area, 'line-height', '1.6', cssClasses.leading.leading_16);
7933
+ this.replaceInline(area, 'line-height', '1.625', cssClasses.leading.leading_1625);
7934
+ this.replaceInline(area, 'line-height', '1.7', cssClasses.leading.leading_17);
7935
+ this.replaceInline(area, 'line-height', '1.8', cssClasses.leading.leading_18);
7936
+ this.replaceInline(area, 'line-height', '1.9', cssClasses.leading.leading_19);
7937
+ this.replaceInline(area, 'line-height', '2', cssClasses.leading.leading_20);
7938
+ this.replaceInline(area, 'line-height', '2.1', cssClasses.leading.leading_21);
7939
+ this.replaceInline(area, 'line-height', '2.2', cssClasses.leading.leading_22);
7940
+ }
7941
+
7942
+ replaceTag(area, tag, className) {
7943
+ let elms = area.querySelectorAll(tag);
7944
+ const filter = Array.prototype.filter;
7945
+ let children = filter.call(elms, element => {
7946
+ return element.attributes.length === 0;
7947
+ });
7948
+
7949
+ if (children && children.length > 0) {
7950
+ children.forEach(element => {
7951
+ const span = document.createElement('span');
7952
+ span.setAttribute('class', className);
7953
+ span.innerHTML = element.innerHTML;
7954
+ element.outerHTML = span.outerHTML;
7955
+ });
7956
+ }
7957
+ }
7958
+
7959
+ replaceInline(builder, css, value, className) {
7960
+ let elms = builder.querySelectorAll('*');
7961
+ elms.forEach(elm => {
7962
+ if (css === 'justiify-content') {
7963
+ /*
7964
+ For some reason, cannot use elm.style[css] for 'justify-content'
7965
+ */
7966
+ if (elm.style.justifyContent === `${value}`) {
7967
+ this.addClass(elm, className);
7968
+ elm.style.justifyContent = '';
7969
+ }
7970
+ } else if (elm.style[css] === `${value}`) {
7971
+ this.addClass(elm, className);
7972
+ elm.style[css] = '';
7973
+ }
7974
+ });
7975
+ }
7976
+
7892
7977
  }
7893
7978
 
7894
7979
  var js$1 = {exports: {}};
@@ -13458,7 +13543,7 @@ class HtmlUtil {
13458
13543
  } // Clean unused spans
13459
13544
 
13460
13545
 
13461
- dom$I.cleanUnusedSpan(content);
13546
+ dom$I.cleanUnusedSpan(content); // REVIEW
13462
13547
  }
13463
13548
 
13464
13549
  const util = this.builder.util;
@@ -66113,12 +66198,6 @@ class ContentBuilder {
66113
66198
  defaultBold: 'font-semibold',
66114
66199
  defaultNormal: 'font-light'
66115
66200
  },
66116
- textAlign: {
66117
- left: 'text-left',
66118
- center: 'text-center',
66119
- right: 'text-right',
66120
- justify: 'text-justify'
66121
- },
66122
66201
  fontStyle: {
66123
66202
  italic: 'italic',
66124
66203
  normal: 'not-italic'
@@ -66192,6 +66271,34 @@ class ContentBuilder {
66192
66271
  leading_29: 'leading-29',
66193
66272
  leading_30: 'leading-30'
66194
66273
  },
66274
+ opacity: {
66275
+ opacity_0: 'opacity-0',
66276
+ opacity_2: 'opacity-2',
66277
+ opacity_4: 'opacity-4',
66278
+ opacity_5: 'opacity-5',
66279
+ opacity_6: 'opacity-6',
66280
+ opacity_8: 'opacity-8',
66281
+ opacity_10: 'opacity-10',
66282
+ opacity_12: 'opacity-12',
66283
+ opacity_15: 'opacity-15',
66284
+ opacity_20: 'opacity-20',
66285
+ opacity_25: 'opacity-25',
66286
+ opacity_30: 'opacity-30',
66287
+ opacity_35: 'opacity-35',
66288
+ opacity_40: 'opacity-40',
66289
+ opacity_45: 'opacity-45',
66290
+ opacity_50: 'opacity-50',
66291
+ opacity_55: 'opacity-55',
66292
+ opacity_60: 'opacity-60',
66293
+ opacity_65: 'opacity-65',
66294
+ opacity_70: 'opacity-70',
66295
+ opacity_75: 'opacity-75',
66296
+ opacity_80: 'opacity-80',
66297
+ opacity_85: 'opacity-85',
66298
+ opacity_90: 'opacity-90',
66299
+ opacity_95: 'opacity-95',
66300
+ opacity_100: 'opacity-100'
66301
+ },
66195
66302
  padding: {
66196
66303
  all: {
66197
66304
  p_0: 'p-0',
@@ -66324,6 +66431,12 @@ class ContentBuilder {
66324
66431
  superscript: 'sup',
66325
66432
  subscript: 'sub'
66326
66433
  },
66434
+ textAlign: {
66435
+ left: 'text-left',
66436
+ center: 'text-center',
66437
+ right: 'text-right',
66438
+ justify: 'text-justify'
66439
+ },
66327
66440
  display: {
66328
66441
  flex: 'flex',
66329
66442
  block: 'block',
@@ -66357,7 +66470,7 @@ class ContentBuilder {
66357
66470
  stretch: 'items-stretch'
66358
66471
  }
66359
66472
  },
66360
- useCssClasses: false,
66473
+ useCssClasses: true,
66361
66474
  useButtonPlugin: false
66362
66475
  }; // obj.preserveSelection = true; (can be set programmatically) to prevent click that clears selection on external custom modal.
66363
66476
 
@@ -66855,6 +66968,8 @@ class ContentBuilder {
66855
66968
  const builders = document.querySelectorAll(this.opts.container);
66856
66969
  Array.prototype.forEach.call(builders, builder => {
66857
66970
  this.applyBehaviorOn(builder); // includes setZoomOnControl
66971
+
66972
+ this.contentReformatOn(builder);
66858
66973
  }); // Call onRender to indicate content is ready for editing (applyBehavior has been applied)
66859
66974
 
66860
66975
  this.opts.onRender();
@@ -66862,6 +66977,10 @@ class ContentBuilder {
66862
66977
  } // applyBehavior
66863
66978
 
66864
66979
 
66980
+ contentReformatOn(builder) {
66981
+ if (this.opts.useCssClasses) dom.contentReformat(builder, this.opts.cssClasses);
66982
+ }
66983
+
66865
66984
  applyBehaviorOn(builder) {
66866
66985
  const util = this.util; //Make absolute
66867
66986