@innovastudio/contentbuilder 1.3.11 → 1.3.12

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,7 +1,7 @@
1
1
  {
2
2
  "name": "@innovastudio/contentbuilder",
3
3
  "type": "module",
4
- "version": "1.3.11",
4
+ "version": "1.3.12",
5
5
  "description": "",
6
6
  "main": "public/contentbuilder/contentbuilder.esm.js",
7
7
  "files": [
@@ -813,7 +813,7 @@ button:focus {
813
813
  font-weight: bold;
814
814
  text-transform: uppercase;
815
815
  line-height: 2;
816
- padding: 8px 0 2px;
816
+ padding: 6px 0 1px;
817
817
  text-align: center;
818
818
  }
819
819
  #_cbhtml .is-rte-pop .is-label.separator,
@@ -935,6 +935,7 @@ button:focus {
935
935
  margin: 1px;
936
936
  box-shadow: none;
937
937
  background: transparent;
938
+ font-size: 12px;
938
939
  }
939
940
  #_cbhtml .is-rte-pop.rte-textsetting-options button.on,
940
941
  .is-ui .is-rte-pop.rte-textsetting-options button.on {
@@ -957,7 +958,7 @@ button:focus {
957
958
  height: 0;
958
959
  }
959
960
  to {
960
- height: 288px;
961
+ height: 370px;
961
962
  }
962
963
  }
963
964
  #_cbhtml .is-rte-pop.rte-textsetting-options.deactive,
@@ -965,6 +966,44 @@ button:focus {
965
966
  animation-name: textsetting-slide-in;
966
967
  }
967
968
  @keyframes textsetting-slide-in {
969
+ from {
970
+ height: 370px;
971
+ }
972
+ to {
973
+ height: 0;
974
+ }
975
+ }
976
+ #_cbhtml .is-rte-pop.rte-textsetting-options.simple .label-fontweight,
977
+ #_cbhtml .is-rte-pop.rte-textsetting-options.simple .rte-fontweight-options,
978
+ .is-ui .is-rte-pop.rte-textsetting-options.simple .label-fontweight,
979
+ .is-ui .is-rte-pop.rte-textsetting-options.simple .rte-fontweight-options {
980
+ display: none !important;
981
+ }
982
+ #_cbhtml .is-rte-pop.rte-textsetting-options.simple .is-label,
983
+ .is-ui .is-rte-pop.rte-textsetting-options.simple .is-label {
984
+ padding: 8px 0 2px;
985
+ }
986
+ #_cbhtml .is-rte-pop.rte-textsetting-options.simple .is-label.separator,
987
+ .is-ui .is-rte-pop.rte-textsetting-options.simple .is-label.separator {
988
+ margin-top: 5px;
989
+ }
990
+ #_cbhtml .is-rte-pop.rte-textsetting-options.simple.active,
991
+ .is-ui .is-rte-pop.rte-textsetting-options.simple.active {
992
+ animation-name: textsetting2-slide-out;
993
+ }
994
+ #_cbhtml .is-rte-pop.rte-textsetting-options.simple.deactive,
995
+ .is-ui .is-rte-pop.rte-textsetting-options.simple.deactive {
996
+ animation-name: textsetting2-slide-in;
997
+ }
998
+ @keyframes textsetting2-slide-out {
999
+ from {
1000
+ height: 0;
1001
+ }
1002
+ to {
1003
+ height: 288px;
1004
+ }
1005
+ }
1006
+ @keyframes textsetting2-slide-in {
968
1007
  from {
969
1008
  height: 288px;
970
1009
  }
@@ -14567,6 +14567,7 @@ class HtmlUtil {
14567
14567
  automaticLayout: true,
14568
14568
  contextmenu: false,
14569
14569
  fontSize: 13,
14570
+ wordWrap: true,
14570
14571
  scrollbar: {
14571
14572
  useShadows: false,
14572
14573
  vertical: 'visible',
@@ -14639,6 +14640,7 @@ class HtmlUtil {
14639
14640
  automaticLayout: true,
14640
14641
  contextmenu: false,
14641
14642
  fontSize: 13,
14643
+ wordWrap: true,
14642
14644
  scrollbar: {
14643
14645
  useShadows: false,
14644
14646
  vertical: 'visible',
@@ -65868,7 +65870,7 @@ class Rte {
65868
65870
  <div class="rte-color-picker-area"></div>
65869
65871
  </div>
65870
65872
 
65871
- <div class="rte-textsetting-options is-rte-pop" tabindex="-1" role="dialog" aria-modal="true" aria-hidden="true">
65873
+ <div class="rte-textsetting-options ${this.builder.simpleTextSettings ? 'simple' : ''} is-rte-pop" tabindex="-1" role="dialog" aria-modal="true" aria-hidden="true">
65872
65874
  <div>
65873
65875
  <div class="is-label">${util.out('Font Size')}</div>
65874
65876
  <div class="rte-fontsize-options" style="display: flex;flex-flow: wrap;">
@@ -65878,6 +65880,19 @@ class Rte {
65878
65880
  <button title="${util.out('Increase')}" data-value="+" style="font-size:13px">+</button>
65879
65881
  <button title="${util.out('Clear')}" data-value=""><svg class="is-icon-flex" style="width:18px;height:18px;margin-top: 2px;"><use xlink:href="#ion-ios-close-empty"></use></svg></button>
65880
65882
  </div>
65883
+ <div class="is-label separator label-fontweight">${util.out('Font Weight')}</div>
65884
+ <div class="rte-fontweight-options" style="display: flex;flex-flow: wrap;">
65885
+ <button title="100" data-value="100">100</button>
65886
+ <button title="200" data-value="200">200</button>
65887
+ <button title="300" data-value="300">300</button>
65888
+ <button title="400" data-value="400">400</button>
65889
+ <button title="500" data-value="500">500</button>
65890
+ <button title="600" data-value="600">600</button>
65891
+ <button title="700" data-value="700">700</button>
65892
+ <button title="800" data-value="800">800</button>
65893
+ <button title="900" data-value="900">900</button>
65894
+ <button title="${util.out('Clear')}" data-value=""><svg class="is-icon-flex" style="width:18px;height:18px;margin-top: 2px;"><use xlink:href="#ion-ios-close-empty"></use></svg></button>
65895
+ </div>
65881
65896
  <div class="is-label separator">${util.out('Line Spacing')}</div>
65882
65897
  <div class="rte-lineheight-options" style="display: flex;flex-flow: wrap;">
65883
65898
  <button title="1" data-value="1">1</button>
@@ -67048,82 +67063,7 @@ class Rte {
67048
67063
  const h = pop.offsetHeight;
67049
67064
 
67050
67065
  if (!dom.hasClass(pop, 'active')) {
67051
- // Get realtime status
67052
- const elm = this.builder.activeElement;
67053
- let btns = pop.querySelectorAll('.rte-fontsize-options button');
67054
- Array.prototype.forEach.call(btns, btn => {
67055
- btn.classList.remove('on'); // clear selection
67056
- });
67057
- const arrSizes = this.builder.opts.fontSizeClassValues;
67058
-
67059
- for (var i = 0; i <= arrSizes.length - 1; i++) {
67060
- if (dom.hasClass(elm, 'size-' + arrSizes[i])) {
67061
- // Get current class
67062
- const btns = pop.querySelectorAll('.rte-fontsize-options button');
67063
- Array.prototype.forEach.call(btns, btn => {
67064
- let num = btn.getAttribute('data-value');
67065
-
67066
- if (parseInt(num) === arrSizes[i]) {
67067
- btn.classList.add('on');
67068
- }
67069
- });
67070
- }
67071
- }
67072
-
67073
- btns = pop.querySelectorAll('.rte-lineheight-options button');
67074
- Array.prototype.forEach.call(btns, btn => {
67075
- btn.classList.remove('on'); // clear selection
67076
- });
67077
- let classes = this.builder.cssClasses.leading;
67078
-
67079
- for (let i = 0; i < Object.keys(classes).length; i++) {
67080
- let className = Object.values(classes)[i];
67081
-
67082
- if (dom.hasClass(elm, className)) {
67083
- const btns = pop.querySelectorAll('.rte-lineheight-options button');
67084
- Array.prototype.forEach.call(btns, btn => {
67085
- let num = btn.getAttribute('data-value');
67086
- let val;
67087
- if (className === classes.leading_10) val = '1';
67088
- if (className === classes.leading_12) val = '1.2';
67089
- if (className === classes.leading_14) val = '1.4';
67090
- if (className === classes.leading_16) val = '1.6';
67091
- if (className === classes.leading_18) val = '1.8';
67092
- if (className === classes.leading_20) val = '2';
67093
- if (className === classes.leading_22) val = '2.2';
67094
-
67095
- if (num === val) {
67096
- btn.classList.add('on');
67097
- }
67098
- });
67099
- }
67100
- }
67101
-
67102
- btns = pop.querySelectorAll('.rte-letterspacing-options button');
67103
- Array.prototype.forEach.call(btns, btn => {
67104
- btn.classList.remove('on'); // clear selection
67105
- });
67106
- classes = this.builder.cssClasses.tracking;
67107
-
67108
- for (let i = 0; i < Object.keys(classes).length; i++) {
67109
- let className = Object.values(classes)[i];
67110
-
67111
- if (dom.hasClass(elm, className)) {
67112
- const btns = pop.querySelectorAll('.rte-letterspacing-options button');
67113
- Array.prototype.forEach.call(btns, btn => {
67114
- let num = btn.getAttribute('data-value');
67115
- let val;
67116
- if (className === classes.tracking_025) val = '1';
67117
- if (className === classes.tracking_050) val = '2';
67118
-
67119
- if (num === val) {
67120
- btn.classList.add('on');
67121
- }
67122
- });
67123
- }
67124
- } // /Get realtime status
67125
-
67126
-
67066
+ this.getTextSettingsState();
67127
67067
  this.util.showRtePop(pop, () => {
67128
67068
  if (this.builder.opts.toolbar === 'left') {
67129
67069
  pop.style.top = top - h / 2 + 20 + 'px';
@@ -67922,15 +67862,47 @@ class Rte {
67922
67862
  }
67923
67863
  }); //save selection
67924
67864
 
67925
- util.saveSelection();
67926
- this.getState(); //Trigger Change event
67865
+ util.saveSelection(); // this.getState();
67866
+
67867
+ this.getTextSettingsState(); //Trigger Change event
67927
67868
 
67928
67869
  this.builder.opts.onChange(); // if(this.builder.isTouchSupport) { //prevent keyboard open
67929
67870
  // const btnFocus = this.rteTool.querySelector('button');
67930
67871
  // btnFocus.focus();
67931
67872
  // }
67873
+ // btn.focus();
67874
+ });
67875
+ }); // Font Weight (new execCommand)
67932
67876
 
67933
- btn.focus();
67877
+ btns = rteTextSettingOptions.querySelectorAll('.rte-fontweight-options button');
67878
+ Array.prototype.forEach.call(btns, btn => {
67879
+ dom.addEventListener(btn, 'click', () => {
67880
+ // old 9135
67881
+ let num = btn.getAttribute('data-value');
67882
+ util.restoreSelection(); //a must
67883
+
67884
+ this.builder.uo.saveForUndo();
67885
+ const btns = rteTextSettingOptions.querySelectorAll('.rte-fontweight-options button');
67886
+ Array.prototype.forEach.call(btns, btn => {
67887
+ btn.classList.remove('on'); // clear selection
67888
+ });
67889
+ dom.execCommand('font-weight', num, (ok, container) => {
67890
+ if (this.builder.useCssClasses) {
67891
+ if (container) {
67892
+ this.applyClassFontWeight(container, num);
67893
+ }
67894
+ }
67895
+ }); //save selection
67896
+
67897
+ util.saveSelection();
67898
+ this.getState();
67899
+ this.getTextSettingsState(); //Trigger Change event
67900
+
67901
+ this.builder.opts.onChange(); // if(this.builder.isTouchSupport) { //prevent keyboard open
67902
+ // const btnFocus = this.rteTool.querySelector('button');
67903
+ // btnFocus.focus();
67904
+ // }
67905
+ // btn.focus();
67934
67906
  });
67935
67907
  }); // Line Height
67936
67908
 
@@ -68006,6 +67978,9 @@ class Rte {
68006
67978
  }
68007
67979
  }
68008
67980
 
67981
+ const elm = dom.getParentBlock(container);
67982
+ if (elm) elm.style.lineHeight = ''; // Clean inline style
67983
+
68009
67984
  dom.execCommandClass(newClassName, classes, true, 'block');
68010
67985
  } else {
68011
67986
  let elm;
@@ -68107,15 +68082,15 @@ class Rte {
68107
68082
  } //save selection
68108
68083
 
68109
68084
 
68110
- util.saveSelection();
68111
- this.getState(); //Trigger Change event
68085
+ util.saveSelection(); // this.getState();
68086
+
68087
+ this.getTextSettingsState(); //Trigger Change event
68112
68088
 
68113
68089
  this.builder.opts.onChange(); // if(this.builder.isTouchSupport) { //prevent keyboard open
68114
68090
  // const btnFocus = this.rteTool.querySelector('button');
68115
68091
  // btnFocus.focus();
68116
68092
  // }
68117
-
68118
- btn.focus();
68093
+ // btn.focus();
68119
68094
  });
68120
68095
  }); // Letter Spacing
68121
68096
 
@@ -68184,6 +68159,8 @@ class Rte {
68184
68159
  }
68185
68160
 
68186
68161
  if (this.builder.activeElement) this.builder.activeElement.style.letterSpacing = '';
68162
+ container.style.letterSpacing = ''; // Clean inline style
68163
+
68187
68164
  if (newClassName === classes.tracking_000) newClassName = ''; // clear for normal tracking
68188
68165
 
68189
68166
  dom.execCommandClass(newClassName, classes);
@@ -68243,15 +68220,15 @@ class Rte {
68243
68220
  } //save selection
68244
68221
 
68245
68222
 
68246
- util.saveSelection();
68247
- this.getState(); //Trigger Change event
68223
+ util.saveSelection(); // this.getState();
68224
+
68225
+ this.getTextSettingsState(); //Trigger Change event
68248
68226
 
68249
68227
  this.builder.opts.onChange(); // if(this.builder.isTouchSupport) { //prevent keyboard open
68250
68228
  // const btnFocus = this.rteTool.querySelector('button');
68251
68229
  // btnFocus.focus();
68252
68230
  // }
68253
-
68254
- btn.focus();
68231
+ // btn.focus();
68255
68232
  });
68256
68233
  }); // -----------------------------
68257
68234
  // Click anywhere will hide Column tool
@@ -68682,6 +68659,45 @@ class Rte {
68682
68659
  dom.cleanClassSize(elm, classname); // dom.cleanUnusedSpan(elm); // will remove empty spans that makes selection changes
68683
68660
  }
68684
68661
 
68662
+ applyClassFontWeight(elm, num) {
68663
+ const dom = this.dom;
68664
+ let classes = this.builder.cssClasses.fontWeight;
68665
+
68666
+ for (let i = 0; i < Object.keys(classes).length; i++) {
68667
+ let className = Object.values(classes)[i];
68668
+
68669
+ if (dom.hasClass(elm, className)) {
68670
+ dom.removeClass(elm, className);
68671
+ }
68672
+
68673
+ dom.doFunction(elm, theEl => {
68674
+ if (dom.hasClass(theEl, className)) {
68675
+ dom.removeClass(theEl, className);
68676
+ }
68677
+ }, true);
68678
+ }
68679
+
68680
+ let classname = '';
68681
+ if (num === '100') classname = this.builder.cssClasses.fontWeight.thin;
68682
+ if (num === '200') classname = this.builder.cssClasses.fontWeight.extralight;
68683
+ if (num === '300') classname = this.builder.cssClasses.fontWeight.light;
68684
+ if (num === '400') classname = this.builder.cssClasses.fontWeight.normal;
68685
+ if (num === '500') classname = this.builder.cssClasses.fontWeight.medium;
68686
+ if (num === '600') classname = this.builder.cssClasses.fontWeight.semibold;
68687
+ if (num === '700') classname = this.builder.cssClasses.fontWeight.bold;
68688
+ if (num === '800') classname = this.builder.cssClasses.fontWeight.extrabold;
68689
+ if (num === '900') classname = this.builder.cssClasses.fontWeight.black;
68690
+
68691
+ if (classname === '') ; else {
68692
+ dom.addClass(elm, classname);
68693
+ }
68694
+
68695
+ dom.doFunction(elm, function (theEl) {
68696
+ theEl.style.fontWeight = '';
68697
+ }, true);
68698
+ dom.cleanClassSize(elm, classname); // dom.cleanUnusedSpan(elm); // will remove empty spans that makes selection changes
68699
+ }
68700
+
68685
68701
  click(col) {
68686
68702
  const dom = this.dom;
68687
68703
  let elm = this.builder.inspectedElement;
@@ -68933,6 +68949,138 @@ class Rte {
68933
68949
  }
68934
68950
  }
68935
68951
 
68952
+ getTextSettingsState() {
68953
+ const dom = this.dom;
68954
+ const pop = this.rteTextSettingOptions; // Get realtime status
68955
+
68956
+ const selection = dom.getSelection();
68957
+ if (!selection) return;
68958
+ const anchorNode = selection.anchorNode;
68959
+ let container;
68960
+
68961
+ if (anchorNode) {
68962
+ container = anchorNode.nodeType !== Node.TEXT_NODE && anchorNode.nodeType !== Node.COMMENT_NODE ? anchorNode : anchorNode.parentElement;
68963
+ }
68964
+
68965
+ let btns = pop.querySelectorAll('.rte-fontsize-options button');
68966
+ Array.prototype.forEach.call(btns, btn => {
68967
+ btn.classList.remove('on'); // clear selection
68968
+ });
68969
+
68970
+ if (container) {
68971
+ const arrSizes = this.builder.opts.fontSizeClassValues;
68972
+
68973
+ for (let i = 0; i <= arrSizes.length - 1; i++) {
68974
+ if (dom.hasClass(container, 'size-' + arrSizes[i])) {
68975
+ // Get current class
68976
+ const btns = pop.querySelectorAll('.rte-fontsize-options button');
68977
+ Array.prototype.forEach.call(btns, btn => {
68978
+ let num = btn.getAttribute('data-value');
68979
+
68980
+ if (parseInt(num) === arrSizes[i]) {
68981
+ btn.classList.add('on');
68982
+ }
68983
+ });
68984
+ }
68985
+ }
68986
+ }
68987
+
68988
+ btns = pop.querySelectorAll('.rte-fontweight-options button');
68989
+ Array.prototype.forEach.call(btns, btn => {
68990
+ btn.classList.remove('on'); // clear selection
68991
+ });
68992
+
68993
+ if (container) {
68994
+ let classes = this.builder.cssClasses.fontWeight;
68995
+
68996
+ for (let i = 0; i < Object.keys(classes).length; i++) {
68997
+ let className = Object.values(classes)[i];
68998
+
68999
+ if (dom.hasClass(container, className)) {
69000
+ const btns = pop.querySelectorAll('.rte-fontweight-options button');
69001
+ Array.prototype.forEach.call(btns, btn => {
69002
+ let num = btn.getAttribute('data-value');
69003
+ let val;
69004
+ if (className === classes.thin) val = '100';
69005
+ if (className === classes.extralight) val = '200';
69006
+ if (className === classes.light) val = '300';
69007
+ if (className === classes.normal) val = '400';
69008
+ if (className === classes.medium) val = '500';
69009
+ if (className === classes.semibold) val = '600';
69010
+ if (className === classes.bold) val = '700';
69011
+ if (className === classes.extrabold) val = '800';
69012
+ if (className === classes.black) val = '900';
69013
+
69014
+ if (num === val) {
69015
+ btn.classList.add('on');
69016
+ }
69017
+ });
69018
+ }
69019
+ }
69020
+ }
69021
+
69022
+ btns = pop.querySelectorAll('.rte-lineheight-options button');
69023
+ Array.prototype.forEach.call(btns, btn => {
69024
+ btn.classList.remove('on'); // clear selection
69025
+ });
69026
+ const block = dom.getParentBlock(container);
69027
+
69028
+ if (block) {
69029
+ let classes = this.builder.cssClasses.leading;
69030
+
69031
+ for (let i = 0; i < Object.keys(classes).length; i++) {
69032
+ let className = Object.values(classes)[i];
69033
+
69034
+ if (dom.hasClass(block, className)) {
69035
+ const btns = pop.querySelectorAll('.rte-lineheight-options button');
69036
+ Array.prototype.forEach.call(btns, btn => {
69037
+ let num = btn.getAttribute('data-value');
69038
+ let val;
69039
+ if (className === classes.leading_10) val = '1';
69040
+ if (className === classes.leading_12) val = '1.2';
69041
+ if (className === classes.leading_14) val = '1.4';
69042
+ if (className === classes.leading_16) val = '1.6';
69043
+ if (className === classes.leading_18) val = '1.8';
69044
+ if (className === classes.leading_20) val = '2';
69045
+ if (className === classes.leading_22) val = '2.2';
69046
+
69047
+ if (num === val) {
69048
+ btn.classList.add('on');
69049
+ }
69050
+ });
69051
+ }
69052
+ }
69053
+ }
69054
+
69055
+ btns = pop.querySelectorAll('.rte-letterspacing-options button');
69056
+ Array.prototype.forEach.call(btns, btn => {
69057
+ btn.classList.remove('on'); // clear selection
69058
+ });
69059
+
69060
+ if (container) {
69061
+ let classes = this.builder.cssClasses.tracking;
69062
+
69063
+ for (let i = 0; i < Object.keys(classes).length; i++) {
69064
+ let className = Object.values(classes)[i];
69065
+
69066
+ if (dom.hasClass(container, className)) {
69067
+ const btns = pop.querySelectorAll('.rte-letterspacing-options button');
69068
+ Array.prototype.forEach.call(btns, btn => {
69069
+ let num = btn.getAttribute('data-value');
69070
+ let val;
69071
+ if (className === classes.tracking_025) val = '1';
69072
+ if (className === classes.tracking_050) val = '2';
69073
+
69074
+ if (num === val) {
69075
+ btn.classList.add('on');
69076
+ }
69077
+ });
69078
+ }
69079
+ }
69080
+ } // /Get realtime status
69081
+
69082
+ }
69083
+
68936
69084
  getIconsStyle() {
68937
69085
  let css = `
68938
69086
  html, body {height:100%}
@@ -73815,7 +73963,8 @@ class ContentBuilder {
73815
73963
  },
73816
73964
  useCssClasses: true,
73817
73965
  useButtonPlugin: false,
73818
- enableDragResize: true
73966
+ enableDragResize: true,
73967
+ simpleTextSettings: true
73819
73968
  }; // obj.preserveSelection = true; (can be set programmatically) to prevent click that clears selection on external custom modal.
73820
73969
 
73821
73970
  this.opts = Object.assign(this, defaults, opts);