@innovastudio/contentbox 1.2.2 → 1.2.3

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@innovastudio/contentbox",
3
- "version": "1.2.2",
3
+ "version": "1.2.3",
4
4
  "description": "",
5
5
  "main": "public/contentbox/contentbox.esm.js",
6
6
  "files": [
@@ -39,7 +39,7 @@
39
39
  "webpack-dev-server": "^4.0.0"
40
40
  },
41
41
  "dependencies": {
42
- "@innovastudio/contentbuilder": "^1.1.5",
42
+ "@innovastudio/contentbuilder": "^1.1.7",
43
43
  "axios": "^0.21.4",
44
44
  "cors": "^2.8.5",
45
45
  "express": "^4.17.1",
@@ -14967,6 +14967,11 @@ class Util {
14967
14967
  } // LATER: auto scroll
14968
14968
  // LATER: If image, then it needs time to load (resulting incorrect position), so hide element tool.
14969
14969
 
14970
+ }
14971
+
14972
+ if (this.builder.useCssClasses) {
14973
+ let builderActive = document.querySelector('.builder-active');
14974
+ if (builderActive) dom.contentReformat(builderActive, this.builder.cssClasses);
14970
14975
  } // Call onChange
14971
14976
 
14972
14977
 
@@ -15195,6 +15200,11 @@ class Util {
15195
15200
 
15196
15201
  columnTool = document.querySelector('.is-column-tool');
15197
15202
  columnTool.className = columnTool.className.replace('active', '');
15203
+ }
15204
+
15205
+ if (this.builder.useCssClasses) {
15206
+ let builderActive = document.querySelector('.builder-active');
15207
+ if (builderActive) dom.contentReformat(builderActive, this.builder.cssClasses);
15198
15208
  } // Call onChange
15199
15209
 
15200
15210
 
@@ -18188,39 +18198,6 @@ class Dom {
18188
18198
  if (!removeEmptyStyleChildren || removeEmptyStyleChildren.length <= 0) {
18189
18199
  return;
18190
18200
  }
18191
- }
18192
-
18193
- cleanEmptySpans(area) {
18194
- let spans = area.querySelectorAll('span');
18195
- const filter = Array.prototype.filter;
18196
- let children = filter.call(spans, element => {
18197
- return element.attributes.length === 0;
18198
- }); // Remove empty spans
18199
-
18200
- if (children && children.length > 0) {
18201
- children.forEach(element => {
18202
- element.outerHTML = element.innerHTML;
18203
- });
18204
- } // Remove spans which have empty content
18205
-
18206
-
18207
- spans = area.querySelectorAll('span');
18208
- filter.call(spans, element => {
18209
- if (element.innerHTML === '') {
18210
- element.parentNode.removeChild(element);
18211
- }
18212
- }); // Recheck
18213
-
18214
- spans = area.querySelectorAll('span');
18215
- children = filter.call(spans, element => {
18216
- return element.attributes.length === 0;
18217
- });
18218
-
18219
- if (children && children.length > 0) {
18220
- this.cleanEmptySpans(area);
18221
- } else {
18222
- return;
18223
- }
18224
18201
  } // Font Size stuff
18225
18202
 
18226
18203
 
@@ -18297,7 +18274,7 @@ class Dom {
18297
18274
  }
18298
18275
  });
18299
18276
  });
18300
- this.cleanUnusedSpan(elm); // causes lost selection
18277
+ this.cleanUnusedSpan(elm); // REVIEW (causes lost selection)
18301
18278
  }
18302
18279
 
18303
18280
  cleanSelection(selection) {
@@ -18309,40 +18286,148 @@ class Dom {
18309
18286
  selection.selectAllChildren(span);
18310
18287
  this.cleanElement(span);
18311
18288
  }
18312
-
18289
+ /*
18313
18290
  cleanUnusedSpan(span) {
18314
- if (!span.hasChildNodes()) {
18315
- return;
18316
- } // Direct children with no style
18317
-
18318
-
18319
- const children = Array.from(span.children).filter(element => {
18320
- if (element.getAttribute('style') === '' || element.style === null) {
18321
- element.removeAttribute('style');
18291
+ if (!span.hasChildNodes()) {
18292
+ return;
18293
+ }
18294
+ // Direct children with no style
18295
+ const children = Array.from(span.children).filter((element) => {
18296
+ if (element.getAttribute('style') === '' || element.style === null) {
18297
+ element.removeAttribute('style');
18298
+ }
18299
+ let unused = ( element.attributes.length === 0 || (element.attributes.length === 1 && element.hasAttribute('data-keep')));
18300
+ return (element.nodeName.toLowerCase() === 'span' && unused);
18301
+ });
18302
+ if (children && children.length > 0) {
18303
+ children.forEach((element) => {
18304
+ const text = document.createTextNode(element.textContent);
18305
+ element.parentElement.replaceChild(text, element);
18306
+ });
18307
+ return;
18308
+ }
18309
+ // Deeper childrens
18310
+ const cleanUnusedSpanChildren = Array.from(span.children).map((element) => {
18311
+ return this.cleanUnusedSpan(element);
18312
+ });
18313
+ if (!cleanUnusedSpanChildren || cleanUnusedSpanChildren.length <= 0) {
18314
+ return;
18322
18315
  }
18316
+ }
18317
+ */
18323
18318
 
18324
- let unused = element.attributes.length === 0 || element.attributes.length === 1 && element.hasAttribute('data-keep');
18325
- return element.nodeName.toLowerCase() === 'span' && unused;
18326
- });
18319
+
18320
+ cleanUnusedSpan(area) {
18321
+ let spans = area.querySelectorAll('span');
18322
+ const filter = Array.prototype.filter;
18323
+ let children = filter.call(spans, element => {
18324
+ return element.attributes.length === 0;
18325
+ }); // Remove empty spans
18327
18326
 
18328
18327
  if (children && children.length > 0) {
18329
18328
  children.forEach(element => {
18330
- const text = document.createTextNode(element.textContent);
18331
- element.parentElement.replaceChild(text, element);
18329
+ element.outerHTML = element.innerHTML;
18332
18330
  });
18333
- return;
18334
- } // Deeper childrens
18331
+ } // Remove spans which have empty content
18332
+
18335
18333
 
18334
+ spans = area.querySelectorAll('span');
18335
+ filter.call(spans, element => {
18336
+ if (element.innerHTML === '') {
18337
+ element.parentNode.removeChild(element);
18338
+ }
18339
+ }); // Recheck
18336
18340
 
18337
- const cleanUnusedSpanChildren = Array.from(span.children).map(element => {
18338
- return this.cleanUnusedSpan(element);
18341
+ spans = area.querySelectorAll('span');
18342
+ children = filter.call(spans, element => {
18343
+ return element.attributes.length === 0;
18339
18344
  });
18340
18345
 
18341
- if (!cleanUnusedSpanChildren || cleanUnusedSpanChildren.length <= 0) {
18346
+ if (children && children.length > 0) {
18347
+ this.cleanUnusedSpan(area);
18348
+ } else {
18342
18349
  return;
18343
18350
  }
18344
18351
  }
18345
18352
 
18353
+ contentReformat(area, cssClasses) {
18354
+ this.replaceTag(area, 'b', cssClasses.fontWeight.defaultBold);
18355
+ this.replaceTag(area, 'i', cssClasses.fontStyle.italic);
18356
+ this.replaceTag(area, 'u', cssClasses.textDecoration.underline);
18357
+ this.replaceTag(area, 'strike', cssClasses.textDecoration.linethrough);
18358
+ this.replaceInline(area, 'font-weight', 'normal', cssClasses.fontWeight.defaultBold);
18359
+ this.replaceInline(area, 'font-weight', 'bold', cssClasses.fontWeight.defaultBold);
18360
+ this.replaceInline(area, 'font-weight', '600', cssClasses.fontWeight.semibold);
18361
+ this.replaceInline(area, 'text-align', 'left', cssClasses.textAlign.left);
18362
+ this.replaceInline(area, 'text-align', 'right', cssClasses.textAlign.right);
18363
+ this.replaceInline(area, 'text-align', 'center', cssClasses.textAlign.center);
18364
+ this.replaceInline(area, 'text-align', 'justify', cssClasses.textAlign.justify);
18365
+ this.replaceInline(area, 'display', 'flex', cssClasses.display.flex);
18366
+ this.replaceInline(area, 'justiify-content', 'flex-start', cssClasses.justifyContent.start);
18367
+ this.replaceInline(area, 'justiify-content', 'flex-end', cssClasses.justifyContent.end);
18368
+ this.replaceInline(area, 'justiify-content', 'center', cssClasses.justifyContent.center);
18369
+ this.replaceInline(area, 'justiify-content', 'space-between', cssClasses.justifyContent.between);
18370
+ this.replaceInline(area, 'flex-direction', 'column', cssClasses.flexDirection.column);
18371
+ this.replaceInline(area, 'flex-direction', 'row', cssClasses.flexDirection.row);
18372
+ this.replaceInline(area, 'align-items', 'flex-start', cssClasses.alignItems.start);
18373
+ this.replaceInline(area, 'align-items', 'flex-end', cssClasses.alignItems.end);
18374
+ this.replaceInline(area, 'align-items', 'center', cssClasses.alignItems.center);
18375
+ this.replaceInline(area, 'text-transform', 'uppercase', cssClasses.textTransform.uppercase);
18376
+ this.replaceInline(area, 'text-transform', 'lowercase', cssClasses.textTransform.lowercase);
18377
+ this.replaceInline(area, 'text-transform', 'none', cssClasses.textTransform.normal);
18378
+ this.replaceInline(area, 'line-height', '1', cssClasses.leading.leading_10);
18379
+ this.replaceInline(area, 'line-height', '1.1', cssClasses.leading.leading_11);
18380
+ this.replaceInline(area, 'line-height', '1.2', cssClasses.leading.leading_12);
18381
+ this.replaceInline(area, 'line-height', '1.25', cssClasses.leading.leading_125);
18382
+ this.replaceInline(area, 'line-height', '1.3', cssClasses.leading.leading_13);
18383
+ this.replaceInline(area, 'line-height', '1.375', cssClasses.leading.leading_1375);
18384
+ this.replaceInline(area, 'line-height', '1.4', cssClasses.leading.leading_14);
18385
+ this.replaceInline(area, 'line-height', '1.5', cssClasses.leading.leading_15);
18386
+ this.replaceInline(area, 'line-height', '1.6', cssClasses.leading.leading_16);
18387
+ this.replaceInline(area, 'line-height', '1.625', cssClasses.leading.leading_1625);
18388
+ this.replaceInline(area, 'line-height', '1.7', cssClasses.leading.leading_17);
18389
+ this.replaceInline(area, 'line-height', '1.8', cssClasses.leading.leading_18);
18390
+ this.replaceInline(area, 'line-height', '1.9', cssClasses.leading.leading_19);
18391
+ this.replaceInline(area, 'line-height', '2', cssClasses.leading.leading_20);
18392
+ this.replaceInline(area, 'line-height', '2.1', cssClasses.leading.leading_21);
18393
+ this.replaceInline(area, 'line-height', '2.2', cssClasses.leading.leading_22);
18394
+ }
18395
+
18396
+ replaceTag(area, tag, className) {
18397
+ let elms = area.querySelectorAll(tag);
18398
+ const filter = Array.prototype.filter;
18399
+ let children = filter.call(elms, element => {
18400
+ return element.attributes.length === 0;
18401
+ });
18402
+
18403
+ if (children && children.length > 0) {
18404
+ children.forEach(element => {
18405
+ const span = document.createElement('span');
18406
+ span.setAttribute('class', className);
18407
+ span.innerHTML = element.innerHTML;
18408
+ element.outerHTML = span.outerHTML;
18409
+ });
18410
+ }
18411
+ }
18412
+
18413
+ replaceInline(builder, css, value, className) {
18414
+ let elms = builder.querySelectorAll('*');
18415
+ elms.forEach(elm => {
18416
+ if (css === 'justiify-content') {
18417
+ /*
18418
+ For some reason, cannot use elm.style[css] for 'justify-content'
18419
+ */
18420
+ if (elm.style.justifyContent === `${value}`) {
18421
+ this.addClass(elm, className);
18422
+ elm.style.justifyContent = '';
18423
+ }
18424
+ } else if (elm.style[css] === `${value}`) {
18425
+ this.addClass(elm, className);
18426
+ elm.style[css] = '';
18427
+ }
18428
+ });
18429
+ }
18430
+
18346
18431
  }
18347
18432
 
18348
18433
  var js$1 = {exports: {}};
@@ -23912,7 +23997,7 @@ class HtmlUtil {
23912
23997
  } // Clean unused spans
23913
23998
 
23914
23999
 
23915
- dom$I.cleanUnusedSpan(content);
24000
+ dom$I.cleanUnusedSpan(content); // REVIEW
23916
24001
  }
23917
24002
 
23918
24003
  const util = this.builder.util;
@@ -76567,12 +76652,6 @@ class ContentBuilder {
76567
76652
  defaultBold: 'font-semibold',
76568
76653
  defaultNormal: 'font-light'
76569
76654
  },
76570
- textAlign: {
76571
- left: 'text-left',
76572
- center: 'text-center',
76573
- right: 'text-right',
76574
- justify: 'text-justify'
76575
- },
76576
76655
  fontStyle: {
76577
76656
  italic: 'italic',
76578
76657
  normal: 'not-italic'
@@ -76778,6 +76857,12 @@ class ContentBuilder {
76778
76857
  superscript: 'sup',
76779
76858
  subscript: 'sub'
76780
76859
  },
76860
+ textAlign: {
76861
+ left: 'text-left',
76862
+ center: 'text-center',
76863
+ right: 'text-right',
76864
+ justify: 'text-justify'
76865
+ },
76781
76866
  display: {
76782
76867
  flex: 'flex',
76783
76868
  block: 'block',
@@ -76811,7 +76896,7 @@ class ContentBuilder {
76811
76896
  stretch: 'items-stretch'
76812
76897
  }
76813
76898
  },
76814
- useCssClasses: false,
76899
+ useCssClasses: true,
76815
76900
  useButtonPlugin: false
76816
76901
  }; // obj.preserveSelection = true; (can be set programmatically) to prevent click that clears selection on external custom modal.
76817
76902
 
@@ -77309,6 +77394,8 @@ class ContentBuilder {
77309
77394
  const builders = document.querySelectorAll(this.opts.container);
77310
77395
  Array.prototype.forEach.call(builders, builder => {
77311
77396
  this.applyBehaviorOn(builder); // includes setZoomOnControl
77397
+
77398
+ this.contentReformatOn(builder);
77312
77399
  }); // Call onRender to indicate content is ready for editing (applyBehavior has been applied)
77313
77400
 
77314
77401
  this.opts.onRender();
@@ -77316,6 +77403,10 @@ class ContentBuilder {
77316
77403
  } // applyBehavior
77317
77404
 
77318
77405
 
77406
+ contentReformatOn(builder) {
77407
+ if (this.opts.useCssClasses) dom$J.contentReformat(builder, this.opts.cssClasses);
77408
+ }
77409
+
77319
77410
  applyBehaviorOn(builder) {
77320
77411
  const util = this.util; //Make absolute
77321
77412
 
@@ -80861,7 +80952,6 @@ class ContentBox {
80861
80952
  undoContainerOnly: false,
80862
80953
  absolutePath: false,
80863
80954
  maxEmbedImageWidth: 1600,
80864
- useCssClasses: false,
80865
80955
  zoom: 0.6,
80866
80956
  contentStyleWithSample: false,
80867
80957
  contentSizes: [300, 320, 340, 360, 380, 400, 420, 440, 460, 480, 500, 520, 540, 560, 580, 600, 620, 640, 660, 680, 700, 720, 740, 760, 780, 800, 820, 840, 860, 880, 900, 920, 940, 960, 970, 980, 1000, 1020, 1040, 1050, 1060, 1080, 1100, 1120, 1140, 1160, 1180, 1200, 1220, 1240, 1260, 1280, 1300, 1320, 1340, 1360, 1380, 1400, 1420, 1440, 1460, 1480, 1500, 1520, 1540, 1560, 1580, 1600, 1620, 1640, 1660, 1680, 1700, 1720, 1740, 1760, 1780, 1800, 1820, 1840, 1860, 1880, 1900, 1920, 1940, 1960, 1980, 2000, 2020, 2040, 2060, 2080, 2100, 2120, 2140, 2160, 2180, 2200, 2220, 2240, 2260, 2280, 2300, 2320, 2340, 2360, 2380, 2400, 2420, 2440, 2460, 2480, 2500, 2520, 2540, 2560, 2580, 2600, 2620, 2640, 2660, 2680, 2700],
@@ -82812,6 +82902,8 @@ class ContentBox {
82812
82902
  }
82813
82903
  },
82814
82904
  cssInBody: false,
82905
+ useCssClasses: true,
82906
+ useButtonPlugin: false,
82815
82907
 
82816
82908
  /* Old Version (backward compatible) */
82817
82909
  onAddSectionOpen: function () {},
@@ -83037,6 +83129,7 @@ class ContentBox {
83037
83129
  undoContainerOnly: this.settings.undoContainerOnly,
83038
83130
  absolutePath: this.settings.absolutePath,
83039
83131
  useCssClasses: this.settings.useCssClasses,
83132
+ useButtonPlugin: this.settings.useButtonPlugin,
83040
83133
  zoom: this.settings.zoom,
83041
83134
  onZoomStart: () => {
83042
83135
  // const wrapper = this.wrapperEl;