@innovastudio/contentbuilder 1.0.87 → 1.0.90

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.
@@ -7056,6 +7056,88 @@ class Dom {
7056
7056
  }
7057
7057
 
7058
7058
  return value;
7059
+ } // execCommand replacement => for general, apply class to current element
7060
+
7061
+
7062
+ execCommandClass(newClassName, classList, currentElement = true) {
7063
+ const selection = this.getSelection();
7064
+ if (!selection) return;
7065
+ const anchorNode = selection.anchorNode;
7066
+
7067
+ if (anchorNode) {
7068
+ const container = anchorNode.nodeType !== Node.TEXT_NODE && anchorNode.nodeType !== Node.COMMENT_NODE ? anchorNode : anchorNode.parentElement;
7069
+ const sameSelection = container && container.innerText === selection.toString();
7070
+ let multi = false;
7071
+ var selectedNodes = [];
7072
+ var sel = rangy.getSelection();
7073
+
7074
+ for (var i = 0; i < sel.rangeCount; ++i) {
7075
+ selectedNodes = selectedNodes.concat(sel.getRangeAt(i).getNodes());
7076
+ }
7077
+
7078
+ const blockElms = ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'pre'];
7079
+ selectedNodes.forEach(item => {
7080
+ if (item.tagName) {
7081
+ const tagName = item.tagName.toLowerCase();
7082
+
7083
+ if (blockElms.indexOf(tagName) !== -1) {
7084
+ multi = true;
7085
+
7086
+ for (let i = 0; i < Object.keys(classList).length; i++) {
7087
+ let className = Object.values(classList)[i];
7088
+ this.removeClass(item, className);
7089
+ }
7090
+
7091
+ if (newClassName !== '') this.addClass(item, newClassName);
7092
+ this.cleanChildrenClass(item, classList);
7093
+ this.cleanUnusedSpan(item); // REVIEW
7094
+ }
7095
+ }
7096
+ });
7097
+ if (multi) return;
7098
+
7099
+ if (currentElement) {
7100
+ this.updateSelectionClass(newClassName, classList, container);
7101
+ } else {
7102
+ if (sameSelection || selection.toString().trim() === '') {
7103
+ this.updateSelectionClass(newClassName, classList, container);
7104
+ }
7105
+ }
7106
+ }
7107
+ }
7108
+
7109
+ updateSelectionClass(newClassName, classList, container) {
7110
+ for (let i = 0; i < Object.keys(classList).length; i++) {
7111
+ let className = Object.values(classList)[i];
7112
+ this.removeClass(container, className);
7113
+ }
7114
+
7115
+ if (newClassName !== '') this.addClass(container, newClassName);
7116
+ this.cleanChildrenClass(container, classList);
7117
+ this.cleanUnusedSpan(container); // REVIEW
7118
+
7119
+ return container;
7120
+ }
7121
+
7122
+ cleanChildrenClass(span, classList) {
7123
+ if (!span.hasChildNodes()) {
7124
+ return;
7125
+ }
7126
+
7127
+ Array.from(span.children).map(element => {
7128
+ for (let i = 0; i < Object.keys(classList).length; i++) {
7129
+ let className = Object.values(classList)[i];
7130
+ this.removeClass(element, className);
7131
+ }
7132
+ }); // Deeper childrens
7133
+
7134
+ const cleanChildrenChildren = Array.from(span.children).map(element => {
7135
+ return this.cleanChildrenClass(element, classList);
7136
+ });
7137
+
7138
+ if (!cleanChildrenChildren || cleanChildrenChildren.length <= 0) {
7139
+ return;
7140
+ }
7059
7141
  } // execCommand replacement => for CLASS
7060
7142
 
7061
7143
 
@@ -7577,6 +7659,18 @@ class Dom {
7577
7659
  if (!cleanChildrenChildren || cleanChildrenChildren.length <= 0) {
7578
7660
  return;
7579
7661
  }
7662
+ }
7663
+
7664
+ addCssClass(elm, className, classes) {
7665
+ this.removeCssClasses(elm, classes);
7666
+ this.addClass(elm, className);
7667
+ }
7668
+
7669
+ removeCssClasses(elm, classes) {
7670
+ for (let i = 0; i < Object.keys(classes).length; i++) {
7671
+ const item = Object.values(classes)[i];
7672
+ this.removeClass(elm, item);
7673
+ }
7580
7674
  } // Clean HTML stuff
7581
7675
 
7582
7676
 
@@ -13056,6 +13150,7 @@ class HtmlUtil {
13056
13150
  const util = this.builder.util;
13057
13151
  const builderStuff = this.builder.builderStuff;
13058
13152
  const viewhtmlnormal = builderStuff.querySelector('.viewhtmlnormal');
13153
+ util.showModal(viewhtmlnormal, true, null, false);
13059
13154
  let iframe = viewhtmlnormal.querySelector('iframe');
13060
13155
  iframe.outerHTML = '<iframe id="ifrHtml" style="width:100%;height:100%;border: none;" src="about:blank"></iframe>'; //clear
13061
13156
 
@@ -13064,7 +13159,6 @@ class HtmlUtil {
13064
13159
  doc.write(this.getIframeHtml()); // use the same html as viewhtmllarger
13065
13160
 
13066
13161
  doc.close();
13067
- util.showModal(viewhtmlnormal, true, null, false);
13068
13162
  }
13069
13163
 
13070
13164
  viewHtmlLarger() {
@@ -13300,6 +13394,7 @@ class HtmlUtil {
13300
13394
  elmNormals = content.querySelectorAll(`.${this.builder.cssClasses.textDecoration.normal}`);
13301
13395
  Array.prototype.forEach.call(elmNormals, elm => {
13302
13396
  let decor = false;
13397
+ if (elm.closest('a')) return;
13303
13398
 
13304
13399
  if (elm.closest(`.${this.builder.cssClasses.textDecoration.underline},.${this.builder.cssClasses.textDecoration.linethrough}`)) {
13305
13400
  decor = true;
@@ -49891,15 +49986,54 @@ class ColumnTool {
49891
49986
  <div id="divCellContent" class="is-tab-content" data-group="cellsettings">
49892
49987
 
49893
49988
  <div style="padding-bottom:3px;">${util.out('Padding')}:</div>
49894
- <div class="div-content-padding">
49895
- <button title="0" class="input-cell-padding" data-command="0">0</button>
49896
- <button title="10" class="input-cell-padding" data-command="10">10</button>
49897
- <button title="20" class="input-cell-padding" data-command="20">20</button>
49898
- <button title="30" class="input-cell-padding" data-command="30">30</button>
49899
- <button title="40" class="input-cell-padding" data-command="40">40</button>
49900
- <button title="50" class="input-cell-padding" data-command="50">50</button>
49901
- <button title="60" class="input-cell-padding" data-command="60">60</button>
49902
- <button title="${util.out('Clear')}" class="input-cell-padding" data-command=""><svg class="is-icon-flex" style="flex:none;width:18px;height:18px;margin-top: 2px;"><use xlink:href="#ion-ios-close-empty"></use></svg></button>
49989
+
49990
+ <div class="div-content-padding-pos" style="align-items:center;${this.builder.useCssClasses ? '' : 'display:none'}">
49991
+ <div style="width:130px">
49992
+ <div style="display: flex;justify-content: center;">
49993
+ <button title="${util.out('Top')}" class="input-cell-padding-pos on" data-command="top">${util.out('Top')}</button>
49994
+ </div>
49995
+ <div style="display: flex;justify-content: center;">
49996
+ <button title="${util.out('Left')}" class="input-cell-padding-pos on" data-command="left">${util.out('Left')}</button>
49997
+ <button title="${util.out('Right')}" class="input-cell-padding-pos on" data-command="right">${util.out('Right')}</button>
49998
+ </div>
49999
+ <div style="display: flex;justify-content: center;">
50000
+ <button title="${util.out('Bottom')}" class="input-cell-padding-pos on" data-command="bottom">${util.out('Bottom')}</button>
50001
+ </div>
50002
+ </div>
50003
+ <button title="${util.out('All')}" class="input-cell-padding-pos" data-command="all">${util.out('All')}</button>
50004
+ <button title="x" class="input-cell-padding-pos" data-command="x" style="width:50px">x</button>
50005
+ <button title="y" class="input-cell-padding-pos" data-command="y" style="width:50px">y</button>
50006
+ </div>
50007
+
50008
+ <div class="div-content-padding" style="flex-flow:wrap;margin-top:7px">
50009
+ <div style="display:flex;flex-flow:wrap;${this.builder.useCssClasses ? 'display:none' : ''}">
50010
+ <button title="0" class="input-cell-padding" data-command="0">0</button>
50011
+ <button title="10" class="input-cell-padding" data-command="10">10</button>
50012
+ <button title="20" class="input-cell-padding" data-command="20">20</button>
50013
+ <button title="30" class="input-cell-padding" data-command="30">30</button>
50014
+ <button title="40" class="input-cell-padding" data-command="40">40</button>
50015
+ <button title="50" class="input-cell-padding" data-command="50">50</button>
50016
+ <button title="60" class="input-cell-padding" data-command="60">60</button>
50017
+ </div>
50018
+
50019
+ <div style="display:flex;flex-flow:wrap;${this.builder.useCssClasses ? '' : 'display:none'}">
50020
+ <button title="0" class="input-cell-padding" data-command="0">0</button>
50021
+ <button title="20" class="input-cell-padding" data-command="1">10</button>
50022
+ <button title="40" class="input-cell-padding" data-command="2">20</button>
50023
+ <button title="60" class="input-cell-padding" data-command="3">30</button>
50024
+ <button title="60" class="input-cell-padding" data-command="4">40</button>
50025
+ <button title="60" class="input-cell-padding" data-command="5">50</button>
50026
+ <button title="60" class="input-cell-padding" data-command="6">60</button>
50027
+ <button title="60" class="input-cell-padding" data-command="7">70</button>
50028
+ <button title="60" class="input-cell-padding" data-command="8">80</button>
50029
+ <button title="60" class="input-cell-padding" data-command="9">90</button>
50030
+ <button title="60" class="input-cell-padding" data-command="10">100</button>
50031
+ <button title="60" class="input-cell-padding" data-command="11">110</button>
50032
+ <button title="60" class="input-cell-padding" data-command="12">120</button>
50033
+ <button title="60" class="input-cell-padding" data-command="14">140</button>
50034
+ <button title="60" class="input-cell-padding" data-command="16">160</button>
50035
+ <button title="${util.out('Clear')}" class="input-cell-padding" data-command=""><svg class="is-icon-flex" style="flex:none;width:18px;height:18px;margin-top: 2px;"><use xlink:href="#ion-ios-close-empty"></use></svg></button>
50036
+ </div>
49903
50037
  </div>
49904
50038
 
49905
50039
  <div style="padding-top:20px;padding-bottom:3px;">${util.out('Height')}:</div>
@@ -49915,22 +50049,28 @@ class ColumnTool {
49915
50049
  </div>
49916
50050
 
49917
50051
  <div style="padding-top:20px;padding-bottom:3px;">${util.out('Content Alignment')}:</div>
49918
- <div class="div-content-position">
49919
- <button class="cmd-content-pos" data-pos="topleft" title="${util.out('Top Left')}" type="button" style=""><svg class="is-icon-flex" style="transform: rotate(315deg);"><use xlink:href="#ion-ios-arrow-thin-up"></use></svg></button>
49920
- <button class="cmd-content-pos" data-pos="topcenter" title="${util.out('Top Center')}" type="button"><svg class="is-icon-flex" style=""><use xlink:href="#ion-ios-arrow-thin-up"></use></svg></button>
49921
- <button class="cmd-content-pos" data-pos="topright" topright="${util.out('Top Right')}" type="button"><svg class="is-icon-flex" style="transform: rotate(45deg);"><use xlink:href="#ion-ios-arrow-thin-up"></use></svg></button>
49922
- </div>
49923
- <div class="div-content-position">
49924
- <button class="cmd-content-pos" data-pos="centerleft" title="${util.out('Center Left')}" type="button"><svg class="is-icon-flex" style=""><use xlink:href="#ion-ios-arrow-thin-left"></use></svg></button>
49925
- <button class="cmd-content-pos" data-pos="center" title="${util.out('Center')}" type="button"><svg class="is-icon-flex" style="width:6px;height:6px;"><use xlink:href="#ion-android-contract"></use></svg></button>
49926
- <button class="cmd-content-pos" data-pos="centerright" title="${util.out('Center Right')}" type="button"><svg class="is-icon-flex" style=""><use xlink:href="#ion-ios-arrow-thin-right"></use></svg></button>
49927
- </div>
49928
- <div class="div-content-position">
49929
- <button class="cmd-content-pos" data-pos="bottomleft" title="${util.out('Bottom Left')}" type="button" style=";"><svg class="is-icon-flex" style="transform: rotate(45deg);"><use xlink:href="#ion-ios-arrow-thin-down"></use></svg></button>
49930
- <button class="cmd-content-pos" data-pos="bottomcenter" title="${util.out('Bottom Center')}" type="button"><svg class="is-icon-flex" style=""><use xlink:href="#ion-ios-arrow-thin-down"></use></svg></button>
49931
- <button class="cmd-content-pos" data-pos="bottomright" title="${util.out('Bottom Right')}" type="button"><svg class="is-icon-flex" style="transform: rotate(315deg);"><use xlink:href="#ion-ios-arrow-thin-down"></use></svg></button>
50052
+ <div style="display:flex;align-items: flex-end;">
50053
+ <div style="width:120px">
50054
+ <div class="div-content-position">
50055
+ <button class="cmd-content-pos" data-pos="topleft" title="${util.out('Top Left')}" type="button" style=""><svg class="is-icon-flex" style="transform: rotate(315deg);"><use xlink:href="#ion-ios-arrow-thin-up"></use></svg></button>
50056
+ <button class="cmd-content-pos" data-pos="topcenter" title="${util.out('Top Center')}" type="button"><svg class="is-icon-flex" style=""><use xlink:href="#ion-ios-arrow-thin-up"></use></svg></button>
50057
+ <button class="cmd-content-pos" data-pos="topright" topright="${util.out('Top Right')}" type="button"><svg class="is-icon-flex" style="transform: rotate(45deg);"><use xlink:href="#ion-ios-arrow-thin-up"></use></svg></button>
50058
+ </div>
50059
+ <div class="div-content-position">
50060
+ <button class="cmd-content-pos" data-pos="centerleft" title="${util.out('Center Left')}" type="button"><svg class="is-icon-flex" style=""><use xlink:href="#ion-ios-arrow-thin-left"></use></svg></button>
50061
+ <button class="cmd-content-pos" data-pos="center" title="${util.out('Center')}" type="button"><svg class="is-icon-flex" style="width:6px;height:6px;"><use xlink:href="#ion-android-contract"></use></svg></button>
50062
+ <button class="cmd-content-pos" data-pos="centerright" title="${util.out('Center Right')}" type="button"><svg class="is-icon-flex" style=""><use xlink:href="#ion-ios-arrow-thin-right"></use></svg></button>
50063
+ </div>
50064
+ <div class="div-content-position">
50065
+ <button class="cmd-content-pos" data-pos="bottomleft" title="${util.out('Bottom Left')}" type="button" style=";"><svg class="is-icon-flex" style="transform: rotate(45deg);"><use xlink:href="#ion-ios-arrow-thin-down"></use></svg></button>
50066
+ <button class="cmd-content-pos" data-pos="bottomcenter" title="${util.out('Bottom Center')}" type="button"><svg class="is-icon-flex" style=""><use xlink:href="#ion-ios-arrow-thin-down"></use></svg></button>
50067
+ <button class="cmd-content-pos" data-pos="bottomright" title="${util.out('Bottom Right')}" type="button"><svg class="is-icon-flex" style="transform: rotate(315deg);"><use xlink:href="#ion-ios-arrow-thin-down"></use></svg></button>
50068
+ </div>
50069
+ </div>
50070
+ <div>
50071
+ <button title="${util.out('Clear')}" class="cmd-content-pos" data-pos=""><svg class="is-icon-flex" style="flex:none;width:18px;height:18px;margin-top: 2px;"><use xlink:href="#ion-ios-close-empty"></use></svg></button>
50072
+ </div>
49932
50073
  </div>
49933
-
49934
50074
  </div>
49935
50075
 
49936
50076
  <div id="divCellClick" class="is-tab-content" data-group="cellsettings">
@@ -50513,6 +50653,36 @@ class ColumnTool {
50513
50653
  this.builder.opts.onChange();
50514
50654
  });
50515
50655
  });
50656
+ elms = cellSettings.querySelectorAll('.input-cell-padding-pos');
50657
+ Array.prototype.forEach.call(elms, elm => {
50658
+ dom$l.addEventListener(elm, 'click', () => {
50659
+ let val = elm.getAttribute('data-command');
50660
+ let ns = this.cellSettings.querySelectorAll('.input-cell-padding-pos');
50661
+ Array.prototype.forEach.call(ns, n => {
50662
+ dom$l.removeClass(n, 'on');
50663
+ });
50664
+
50665
+ if (val === 'all') {
50666
+ dom$l.addClass(this.cellSettings.querySelector('button[data-command="top"]'), 'on');
50667
+ dom$l.addClass(this.cellSettings.querySelector('button[data-command="left"]'), 'on');
50668
+ dom$l.addClass(this.cellSettings.querySelector('button[data-command="right"]'), 'on');
50669
+ dom$l.addClass(this.cellSettings.querySelector('button[data-command="bottom"]'), 'on');
50670
+ } else if (val === 'x') {
50671
+ dom$l.addClass(this.cellSettings.querySelector('button[data-command="left"]'), 'on');
50672
+ dom$l.addClass(this.cellSettings.querySelector('button[data-command="right"]'), 'on');
50673
+ } else if (val === 'y') {
50674
+ dom$l.addClass(this.cellSettings.querySelector('button[data-command="top"]'), 'on');
50675
+ dom$l.addClass(this.cellSettings.querySelector('button[data-command="bottom"]'), 'on');
50676
+ } else {
50677
+ dom$l.addClass(elm, 'on');
50678
+ }
50679
+
50680
+ let btns = this.cellSettings.querySelectorAll('.input-cell-padding');
50681
+ Array.prototype.forEach.call(btns, btn => {
50682
+ dom$l.removeClass(btn, 'on');
50683
+ });
50684
+ });
50685
+ });
50516
50686
  elms = cellSettings.querySelectorAll('.input-cell-padding');
50517
50687
  Array.prototype.forEach.call(elms, elm => {
50518
50688
  dom$l.addEventListener(elm, 'click', () => {
@@ -50523,17 +50693,180 @@ class ColumnTool {
50523
50693
  Array.prototype.forEach.call(ns, n => {
50524
50694
  dom$l.removeClass(n, 'on');
50525
50695
  });
50526
- dom$l.removeClass(cell, 'padding-0');
50527
- dom$l.removeClass(cell, 'padding-10');
50528
- dom$l.removeClass(cell, 'padding-20');
50529
- dom$l.removeClass(cell, 'padding-30');
50530
- dom$l.removeClass(cell, 'padding-40');
50531
- dom$l.removeClass(cell, 'padding-50');
50532
- dom$l.removeClass(cell, 'padding-60');
50533
-
50534
- if (val !== '') {
50535
- dom$l.addClass(cell, 'padding-' + val);
50696
+
50697
+ if (this.builder.useCssClasses) {
50698
+ // Clean old classes
50699
+ dom$l.removeClass(cell, 'padding-0');
50700
+ dom$l.removeClass(cell, 'padding-10');
50701
+ dom$l.removeClass(cell, 'padding-20');
50702
+ dom$l.removeClass(cell, 'padding-30');
50703
+ dom$l.removeClass(cell, 'padding-40');
50704
+ dom$l.removeClass(cell, 'padding-50');
50705
+ dom$l.removeClass(cell, 'padding-60');
50706
+ let command;
50707
+ let btns = this.cellSettings.querySelectorAll('.input-cell-padding-pos.on');
50708
+
50709
+ if (btns.length === 2) {
50710
+ // x or y selected
50711
+ command = btns[0].getAttribute('data-command');
50712
+
50713
+ if (command === 'left') {
50714
+ // x selected
50715
+ let classes = this.builder.cssClasses.padding.left;
50716
+
50717
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50718
+ let className = Object.values(classes)[i];
50719
+ dom$l.removeClass(cell, className);
50720
+ }
50721
+
50722
+ classes = this.builder.cssClasses.padding.right;
50723
+
50724
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50725
+ let className = Object.values(classes)[i];
50726
+ dom$l.removeClass(cell, className);
50727
+ }
50728
+
50729
+ classes = this.builder.cssClasses.padding.x;
50730
+
50731
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50732
+ let className = Object.values(classes)[i];
50733
+ dom$l.removeClass(cell, className);
50734
+ }
50735
+
50736
+ if (val !== '') dom$l.addClass(cell, this.builder.cssClasses.padding.x[`px_${val}`]);
50737
+ } else {
50738
+ // y selected
50739
+ let classes = this.builder.cssClasses.padding.top;
50740
+
50741
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50742
+ let className = Object.values(classes)[i];
50743
+ dom$l.removeClass(cell, className);
50744
+ }
50745
+
50746
+ classes = this.builder.cssClasses.padding.bottom;
50747
+
50748
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50749
+ let className = Object.values(classes)[i];
50750
+ dom$l.removeClass(cell, className);
50751
+ }
50752
+
50753
+ classes = this.builder.cssClasses.padding.y;
50754
+
50755
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50756
+ let className = Object.values(classes)[i];
50757
+ dom$l.removeClass(cell, className);
50758
+ }
50759
+
50760
+ if (val !== '') dom$l.addClass(cell, this.builder.cssClasses.padding.y[`py_${val}`]);
50761
+ }
50762
+ } else if (btns.length === 4) {
50763
+ // all selected
50764
+ let classes = this.builder.cssClasses.padding.top;
50765
+
50766
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50767
+ let className = Object.values(classes)[i];
50768
+ dom$l.removeClass(cell, className);
50769
+ }
50770
+
50771
+ classes = this.builder.cssClasses.padding.bottom;
50772
+
50773
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50774
+ let className = Object.values(classes)[i];
50775
+ dom$l.removeClass(cell, className);
50776
+ }
50777
+
50778
+ classes = this.builder.cssClasses.padding.left;
50779
+
50780
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50781
+ let className = Object.values(classes)[i];
50782
+ dom$l.removeClass(cell, className);
50783
+ }
50784
+
50785
+ classes = this.builder.cssClasses.padding.right;
50786
+
50787
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50788
+ let className = Object.values(classes)[i];
50789
+ dom$l.removeClass(cell, className);
50790
+ }
50791
+
50792
+ classes = this.builder.cssClasses.padding.all;
50793
+
50794
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50795
+ let className = Object.values(classes)[i];
50796
+ dom$l.removeClass(cell, className);
50797
+ }
50798
+
50799
+ classes = this.builder.cssClasses.padding.x;
50800
+
50801
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50802
+ let className = Object.values(classes)[i];
50803
+ dom$l.removeClass(cell, className);
50804
+ }
50805
+
50806
+ classes = this.builder.cssClasses.padding.y;
50807
+
50808
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50809
+ let className = Object.values(classes)[i];
50810
+ dom$l.removeClass(cell, className);
50811
+ }
50812
+
50813
+ if (val !== '') dom$l.addClass(cell, this.builder.cssClasses.padding.all[`p_${val}`]);
50814
+ } else {
50815
+ command = btns[0].getAttribute('data-command');
50816
+
50817
+ if (command === 'top') {
50818
+ let classes = this.builder.cssClasses.padding.top;
50819
+
50820
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50821
+ let className = Object.values(classes)[i];
50822
+ dom$l.removeClass(cell, className);
50823
+ }
50824
+
50825
+ if (val !== '') dom$l.addClass(cell, this.builder.cssClasses.padding.top[`pt_${val}`]);
50826
+ } else if (command === 'bottom') {
50827
+ let classes = this.builder.cssClasses.padding.bottom;
50828
+
50829
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50830
+ let className = Object.values(classes)[i];
50831
+ dom$l.removeClass(cell, className);
50832
+ }
50833
+
50834
+ if (val !== '') dom$l.addClass(cell, this.builder.cssClasses.padding.bottom[`pb_${val}`]);
50835
+ } else if (command === 'left') {
50836
+ let classes = this.builder.cssClasses.padding.left;
50837
+
50838
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50839
+ let className = Object.values(classes)[i];
50840
+ dom$l.removeClass(cell, className);
50841
+ }
50842
+
50843
+ if (val !== '') dom$l.addClass(cell, this.builder.cssClasses.padding.left[`pl_${val}`]);
50844
+ } else if (command === 'right') {
50845
+ let classes = this.builder.cssClasses.padding.right;
50846
+
50847
+ for (let i = 0; i < Object.keys(classes).length; i++) {
50848
+ let className = Object.values(classes)[i];
50849
+ dom$l.removeClass(cell, className);
50850
+ }
50851
+
50852
+ if (val !== '') dom$l.addClass(cell, this.builder.cssClasses.padding.right[`pr_${val}`]);
50853
+ }
50854
+ }
50855
+
50536
50856
  dom$l.addClass(elm, 'on');
50857
+ } else {
50858
+ dom$l.removeClass(cell, 'padding-0');
50859
+ dom$l.removeClass(cell, 'padding-10');
50860
+ dom$l.removeClass(cell, 'padding-20');
50861
+ dom$l.removeClass(cell, 'padding-30');
50862
+ dom$l.removeClass(cell, 'padding-40');
50863
+ dom$l.removeClass(cell, 'padding-50');
50864
+ dom$l.removeClass(cell, 'padding-60');
50865
+
50866
+ if (val !== '') {
50867
+ dom$l.addClass(cell, 'padding-' + val);
50868
+ dom$l.addClass(elm, 'on');
50869
+ }
50537
50870
  } //Trigger Change event
50538
50871
 
50539
50872
 
@@ -50644,65 +50977,152 @@ class ColumnTool {
50644
50977
  this.builder.uo.saveForUndo();
50645
50978
  let val = elm.getAttribute('data-pos');
50646
50979
  let cell = util.cellSelected();
50647
- cell.style.display = 'flex';
50648
- cell.style.flexDirection = 'column';
50649
- let ns = this.cellSettings.querySelectorAll('.cmd-content-pos');
50650
- Array.prototype.forEach.call(ns, n => {
50980
+ const btns = this.cellSettings.querySelectorAll('.cmd-content-pos');
50981
+ Array.prototype.forEach.call(btns, n => {
50651
50982
  dom$l.removeClass(n, 'on');
50652
50983
  });
50653
50984
 
50654
- if (val === 'topleft') {
50655
- cell.style.justifyContent = 'flex-start';
50656
- cell.style.alignItems = 'flex-start';
50657
- dom$l.addClass(elm, 'on');
50658
- }
50985
+ if (this.builder.useCssClasses) {
50986
+ if (val !== '') {
50987
+ let classes = this.builder.cssClasses.display;
50988
+ dom$l.addCssClass(cell, classes.flex, classes);
50989
+ classes = this.builder.cssClasses.flexDirection;
50990
+ dom$l.addCssClass(cell, classes.column, classes);
50991
+
50992
+ if (val === 'topleft') {
50993
+ let classes = this.builder.cssClasses.justifyContent;
50994
+ dom$l.addCssClass(cell, classes.start, classes);
50995
+ classes = this.builder.cssClasses.alignItems;
50996
+ dom$l.addCssClass(cell, classes.start, classes);
50997
+ dom$l.addClass(elm, 'on');
50998
+ }
50659
50999
 
50660
- if (val === 'topcenter') {
50661
- cell.style.justifyContent = 'flex-start';
50662
- cell.style.alignItems = 'center';
50663
- dom$l.addClass(elm, 'on');
50664
- }
51000
+ if (val === 'topcenter') {
51001
+ let classes = this.builder.cssClasses.justifyContent;
51002
+ dom$l.addCssClass(cell, classes.start, classes);
51003
+ classes = this.builder.cssClasses.alignItems;
51004
+ dom$l.addCssClass(cell, classes.center, classes);
51005
+ dom$l.addClass(elm, 'on');
51006
+ }
50665
51007
 
50666
- if (val === 'topright') {
50667
- cell.style.justifyContent = 'flex-start';
50668
- cell.style.alignItems = 'flex-end';
50669
- dom$l.addClass(elm, 'on');
50670
- }
51008
+ if (val === 'topright') {
51009
+ let classes = this.builder.cssClasses.justifyContent;
51010
+ dom$l.addCssClass(cell, classes.start, classes);
51011
+ classes = this.builder.cssClasses.alignItems;
51012
+ dom$l.addCssClass(cell, classes.end, classes);
51013
+ dom$l.addClass(elm, 'on');
51014
+ }
50671
51015
 
50672
- if (val === 'centerleft') {
50673
- cell.style.justifyContent = 'center';
50674
- cell.style.alignItems = 'flex-start';
50675
- dom$l.addClass(elm, 'on');
50676
- }
51016
+ if (val === 'centerleft') {
51017
+ let classes = this.builder.cssClasses.justifyContent;
51018
+ dom$l.addCssClass(cell, classes.center, classes);
51019
+ classes = this.builder.cssClasses.alignItems;
51020
+ dom$l.addCssClass(cell, classes.start, classes);
51021
+ dom$l.addClass(elm, 'on');
51022
+ }
50677
51023
 
50678
- if (val === 'center') {
50679
- cell.style.justifyContent = 'center';
50680
- cell.style.alignItems = 'center';
50681
- dom$l.addClass(elm, 'on');
50682
- }
51024
+ if (val === 'center') {
51025
+ let classes = this.builder.cssClasses.justifyContent;
51026
+ dom$l.addCssClass(cell, classes.center, classes);
51027
+ classes = this.builder.cssClasses.alignItems;
51028
+ dom$l.addCssClass(cell, classes.center, classes);
51029
+ dom$l.addClass(elm, 'on');
51030
+ }
50683
51031
 
50684
- if (val === 'centerright') {
50685
- cell.style.justifyContent = 'center';
50686
- cell.style.alignItems = 'flex-end';
50687
- dom$l.addClass(elm, 'on');
50688
- }
51032
+ if (val === 'centerright') {
51033
+ let classes = this.builder.cssClasses.justifyContent;
51034
+ dom$l.addCssClass(cell, classes.center, classes);
51035
+ classes = this.builder.cssClasses.alignItems;
51036
+ dom$l.addCssClass(cell, classes.end, classes);
51037
+ dom$l.addClass(elm, 'on');
51038
+ }
50689
51039
 
50690
- if (val === 'bottomleft') {
50691
- cell.style.justifyContent = 'flex-end';
50692
- cell.style.alignItems = 'flex-start';
50693
- dom$l.addClass(elm, 'on');
50694
- }
51040
+ if (val === 'bottomleft') {
51041
+ let classes = this.builder.cssClasses.justifyContent;
51042
+ dom$l.addCssClass(cell, classes.end, classes);
51043
+ classes = this.builder.cssClasses.alignItems;
51044
+ dom$l.addCssClass(cell, classes.start, classes);
51045
+ dom$l.addClass(elm, 'on');
51046
+ }
50695
51047
 
50696
- if (val === 'bottomcenter') {
50697
- cell.style.justifyContent = 'flex-end';
50698
- cell.style.alignItems = 'center';
50699
- dom$l.addClass(elm, 'on');
50700
- }
51048
+ if (val === 'bottomcenter') {
51049
+ let classes = this.builder.cssClasses.justifyContent;
51050
+ dom$l.addCssClass(cell, classes.end, classes);
51051
+ classes = this.builder.cssClasses.alignItems;
51052
+ dom$l.addCssClass(cell, classes.center, classes);
51053
+ dom$l.addClass(elm, 'on');
51054
+ }
50701
51055
 
50702
- if (val === 'bottomright') {
50703
- cell.style.justifyContent = 'flex-end';
50704
- cell.style.alignItems = 'flex-end';
50705
- dom$l.addClass(elm, 'on');
51056
+ if (val === 'bottomright') {
51057
+ let classes = this.builder.cssClasses.justifyContent;
51058
+ dom$l.addCssClass(cell, classes.end, classes);
51059
+ classes = this.builder.cssClasses.alignItems;
51060
+ dom$l.addCssClass(cell, classes.end, classes);
51061
+ dom$l.addClass(elm, 'on');
51062
+ }
51063
+ } else {
51064
+ dom$l.removeCssClasses(cell, this.builder.cssClasses.display);
51065
+ dom$l.removeCssClasses(cell, this.builder.cssClasses.flexDirection);
51066
+ dom$l.removeCssClasses(cell, this.builder.cssClasses.justifyContent);
51067
+ dom$l.removeCssClasses(cell, this.builder.cssClasses.alignItems);
51068
+ }
51069
+ } else {
51070
+ cell.style.display = 'flex';
51071
+ cell.style.flexDirection = 'column';
51072
+
51073
+ if (val === 'topleft') {
51074
+ cell.style.justifyContent = 'flex-start';
51075
+ cell.style.alignItems = 'flex-start';
51076
+ dom$l.addClass(elm, 'on');
51077
+ }
51078
+
51079
+ if (val === 'topcenter') {
51080
+ cell.style.justifyContent = 'flex-start';
51081
+ cell.style.alignItems = 'center';
51082
+ dom$l.addClass(elm, 'on');
51083
+ }
51084
+
51085
+ if (val === 'topright') {
51086
+ cell.style.justifyContent = 'flex-start';
51087
+ cell.style.alignItems = 'flex-end';
51088
+ dom$l.addClass(elm, 'on');
51089
+ }
51090
+
51091
+ if (val === 'centerleft') {
51092
+ cell.style.justifyContent = 'center';
51093
+ cell.style.alignItems = 'flex-start';
51094
+ dom$l.addClass(elm, 'on');
51095
+ }
51096
+
51097
+ if (val === 'center') {
51098
+ cell.style.justifyContent = 'center';
51099
+ cell.style.alignItems = 'center';
51100
+ dom$l.addClass(elm, 'on');
51101
+ }
51102
+
51103
+ if (val === 'centerright') {
51104
+ cell.style.justifyContent = 'center';
51105
+ cell.style.alignItems = 'flex-end';
51106
+ dom$l.addClass(elm, 'on');
51107
+ }
51108
+
51109
+ if (val === 'bottomleft') {
51110
+ cell.style.justifyContent = 'flex-end';
51111
+ cell.style.alignItems = 'flex-start';
51112
+ dom$l.addClass(elm, 'on');
51113
+ }
51114
+
51115
+ if (val === 'bottomcenter') {
51116
+ cell.style.justifyContent = 'flex-end';
51117
+ cell.style.alignItems = 'center';
51118
+ dom$l.addClass(elm, 'on');
51119
+ }
51120
+
51121
+ if (val === 'bottomright') {
51122
+ cell.style.justifyContent = 'flex-end';
51123
+ cell.style.alignItems = 'flex-end';
51124
+ dom$l.addClass(elm, 'on');
51125
+ }
50706
51126
  } //Trigger Change event
50707
51127
 
50708
51128
 
@@ -57269,6 +57689,62 @@ class Preferences {
57269
57689
 
57270
57690
  }
57271
57691
 
57692
+ class ColorClassPicker {
57693
+ constructor(opts = {}) {
57694
+ let defaults = {
57695
+ onPick: function () {},
57696
+ color: '',
57697
+ colors: ['bg-gray-50', 'bg-gray-100', 'bg-gray-200', 'bg-gray-300', 'bg-gray-400', 'bg-gray-500', 'bg-gray-600', 'bg-gray-700', 'bg-gray-800', 'bg-gray-900', 'bg-red-50', 'bg-red-100', 'bg-red-200', 'bg-red-300', 'bg-red-400', 'bg-red-500', 'bg-red-600', 'bg-red-700', 'bg-red-800', 'bg-red-900', 'bg-orange-50', 'bg-orange-100', 'bg-orange-200', 'bg-orange-300', 'bg-orange-400', 'bg-orange-500', 'bg-orange-600', 'bg-orange-700', 'bg-orange-800', 'bg-orange-900', 'bg-amber-50', 'bg-amber-100', 'bg-amber-200', 'bg-amber-300', 'bg-amber-400', 'bg-amber-500', 'bg-amber-600', 'bg-amber-700', 'bg-amber-800', 'bg-amber-900', 'bg-yellow-50', 'bg-yellow-100', 'bg-yellow-200', 'bg-yellow-300', 'bg-yellow-400', 'bg-yellow-500', 'bg-yellow-600', 'bg-yellow-700', 'bg-yellow-800', 'bg-yellow-900', 'bg-lime-50', 'bg-lime-100', 'bg-lime-200', 'bg-lime-300', 'bg-lime-400', 'bg-lime-500', 'bg-lime-600', 'bg-lime-700', 'bg-lime-800', 'bg-lime-900', 'bg-green-50', 'bg-green-100', 'bg-green-200', 'bg-green-300', 'bg-green-400', 'bg-green-500', 'bg-green-600', 'bg-green-700', 'bg-green-800', 'bg-green-900', 'bg-emerald-50', 'bg-emerald-100', 'bg-emerald-200', 'bg-emerald-300', 'bg-emerald-400', 'bg-emerald-500', 'bg-emerald-600', 'bg-emerald-700', 'bg-emerald-800', 'bg-emerald-900', 'bg-teal-50', 'bg-teal-100', 'bg-teal-200', 'bg-teal-300', 'bg-teal-400', 'bg-teal-500', 'bg-teal-600', 'bg-teal-700', 'bg-teal-800', 'bg-teal-900', 'bg-cyan-50', 'bg-cyan-100', 'bg-cyan-200', 'bg-cyan-300', 'bg-cyan-400', 'bg-cyan-500', 'bg-cyan-600', 'bg-cyan-700', 'bg-cyan-800', 'bg-cyan-900', 'bg-sky-50', 'bg-sky-100', 'bg-sky-200', 'bg-sky-300', 'bg-sky-400', 'bg-sky-500', 'bg-sky-600', 'bg-sky-700', 'bg-sky-800', 'bg-sky-900', 'bg-blue-50', 'bg-blue-100', 'bg-blue-200', 'bg-blue-300', 'bg-blue-400', 'bg-blue-500', 'bg-blue-600', 'bg-blue-700', 'bg-blue-800', 'bg-blue-900', 'bg-indigo-50', 'bg-indigo-100', 'bg-indigo-200', 'bg-indigo-300', 'bg-indigo-400', 'bg-indigo-500', 'bg-indigo-600', 'bg-indigo-700', 'bg-indigo-800', 'bg-indigo-900', 'bg-violet-50', 'bg-violet-100', 'bg-violet-200', 'bg-violet-300', 'bg-violet-400', 'bg-violet-500', 'bg-violet-600', 'bg-violet-700', 'bg-violet-800', 'bg-violet-900', 'bg-purple-50', 'bg-purple-100', 'bg-purple-200', 'bg-purple-300', 'bg-purple-400', 'bg-purple-500', 'bg-purple-600', 'bg-purple-700', 'bg-purple-800', 'bg-purple-900', 'bg-fuchsia-50', 'bg-fuchsia-100', 'bg-fuchsia-200', 'bg-fuchsia-300', 'bg-fuchsia-400', 'bg-fuchsia-500', 'bg-fuchsia-600', 'bg-fuchsia-700', 'bg-fuchsia-800', 'bg-fuchsia-900', 'bg-pink-50', 'bg-pink-100', 'bg-pink-200', 'bg-pink-300', 'bg-pink-400', 'bg-pink-500', 'bg-pink-600', 'bg-pink-700', 'bg-pink-800', 'bg-pink-900', 'bg-rose-50', 'bg-rose-100', 'bg-rose-200', 'bg-rose-300', 'bg-rose-400', 'bg-rose-500', 'bg-rose-600', 'bg-rose-700', 'bg-rose-800', 'bg-rose-900'],
57698
+ renderOn: '',
57699
+ stuffPlacement: '#_cbhtml',
57700
+ lang: []
57701
+ };
57702
+ this.opts = Object.assign(this, defaults, opts);
57703
+ let builderStuff = document.querySelector(this.opts.stuffPlacement);
57704
+
57705
+ if (!builderStuff) {
57706
+ builderStuff = document.createElement('div');
57707
+ builderStuff.id = '_cbhtml';
57708
+ builderStuff.className = 'is-ui';
57709
+ document.body.appendChild(builderStuff);
57710
+ }
57711
+
57712
+ this.builderStuff = builderStuff;
57713
+ const modal = new Modal({
57714
+ stuffPlacement: this.opts.stuffPlacement
57715
+ });
57716
+ this.modal = modal;
57717
+ let pickcolor = document.querySelector('.pickcolorclass');
57718
+
57719
+ if (!pickcolor) {
57720
+ let html = `<div class="is-modal pickcolorclass">
57721
+ <div class="is-modal-content" style="padding: 12px;max-width:1000px;">
57722
+ <div class="is-modal-bar is-draggable"></div>
57723
+ <div>
57724
+ <div class="color-list clearfix"></div>
57725
+
57726
+ </div>
57727
+ </div>
57728
+ </div>`;
57729
+ builderStuff.insertAdjacentHTML('beforeend', html);
57730
+ pickcolor = document.querySelector('.pickcolorclass');
57731
+ }
57732
+
57733
+ const divList = pickcolor.querySelector('.color-list');
57734
+ let s = '';
57735
+
57736
+ for (let i = 0; i < this.opts.colors.length; i++) {
57737
+ let className = this.opts.colors[i];
57738
+ s += `<div class="${className}" style="width:60px;height:30px;"></div>`;
57739
+ }
57740
+
57741
+ s = `<div style="display:flex;flex-flow:wrap;width:450px;height:300px;flex-direction:column;">${s}</div>`;
57742
+ divList.innerHTML = s;
57743
+ this.modal.show(pickcolor, false, null, false);
57744
+ }
57745
+
57746
+ }
57747
+
57272
57748
  const dom$5 = new Dom();
57273
57749
 
57274
57750
  class Rte {
@@ -59318,103 +59794,168 @@ class Rte {
59318
59794
  let num = btn.getAttribute('data-value');
59319
59795
  util.restoreSelection(); //a must
59320
59796
 
59321
- let elm;
59797
+ this.builder.uo.saveForUndo();
59322
59798
 
59323
- try {
59324
- let curr;
59799
+ if (this.builder.useCssClasses) {
59800
+ const selection = dom$5.getSelection();
59801
+ if (!selection) return;
59802
+ const anchorNode = selection.anchorNode;
59803
+ let container;
59325
59804
 
59326
- if (window.getSelection) {
59327
- curr = window.getSelection().getRangeAt(0).commonAncestorContainer;
59805
+ if (anchorNode) {
59806
+ container = anchorNode.nodeType !== Node.TEXT_NODE && anchorNode.nodeType !== Node.COMMENT_NODE ? anchorNode : anchorNode.parentElement;
59807
+ }
59328
59808
 
59329
- if (curr.nodeType === 3) {
59330
- //text node
59331
- elm = curr.parentNode;
59332
- } else {
59333
- elm = curr;
59809
+ if (!container) return; // ex. when selecting an icon
59810
+
59811
+ let newClassName;
59812
+ const classes = this.builder.cssClasses.leading;
59813
+
59814
+ if (num === '') {
59815
+ // clean
59816
+ newClassName = '';
59817
+ } else if (num === '+' || num === '-') {
59818
+ for (let i = 0; i < Object.keys(classes).length; i++) {
59819
+ let className = Object.values(classes)[i];
59820
+
59821
+ if (dom$5.hasClass(container, className)) {
59822
+ if (num === '+') {
59823
+ if (i + 1 === Object.keys(classes).length) return;
59824
+ newClassName = Object.values(classes)[i + 1];
59825
+ break;
59826
+ } else if (num === '-') {
59827
+ if (i - 1 < 0) return;
59828
+ newClassName = Object.values(classes)[i - 1];
59829
+ break;
59830
+ }
59831
+ }
59334
59832
  }
59335
- } else if (document.selection) {
59336
- curr = document.selection.createRange();
59337
- elm = document.selection.createRange().parentElement();
59338
- }
59339
- } catch (e) {
59340
- if (this.builder.activeIcon) {
59341
- // If icon is selected, the selection will not be a text selection
59342
- elm = this.builder.activeIcon;
59343
59833
  } else {
59344
- return;
59834
+ if (num === '1') {
59835
+ newClassName = classes.leading_10;
59836
+ } else if (num === '1.2') {
59837
+ newClassName = classes.leading_12;
59838
+ } else if (num === '1.4') {
59839
+ newClassName = classes.leading_14;
59840
+ } else if (num === '1.6') {
59841
+ newClassName = classes.leading_16;
59842
+ } else if (num === '1.8') {
59843
+ newClassName = classes.leading_18;
59844
+ } else if (num === '2') {
59845
+ newClassName = classes.leading_20;
59846
+ } else if (num === '2.2') {
59847
+ newClassName = classes.leading_22;
59848
+ }
59345
59849
  }
59346
- } // If icon is selected
59347
59850
 
59851
+ if (!newClassName) {
59852
+ if (num === '+') {
59853
+ newClassName = classes.leading_16;
59854
+ } else if (num === '-') {
59855
+ newClassName = classes.leading_14;
59856
+ }
59857
+ }
59348
59858
 
59349
- if (this.builder.activeIcon) {
59350
- elm = this.builder.activeIcon;
59351
- } // Find block element (line-height only works on block element)
59859
+ dom$5.execCommandClass(newClassName, classes);
59860
+ } else {
59861
+ let elm;
59352
59862
 
59863
+ try {
59864
+ let curr;
59353
59865
 
59354
- let element = elm;
59866
+ if (window.getSelection) {
59867
+ curr = window.getSelection().getRangeAt(0).commonAncestorContainer;
59355
59868
 
59356
- while (element) {
59357
- if (element.tagName === 'BODY' || element.tagName === 'HTML') return false;
59869
+ if (curr.nodeType === 3) {
59870
+ //text node
59871
+ elm = curr.parentNode;
59872
+ } else {
59873
+ elm = curr;
59874
+ }
59875
+ } else if (document.selection) {
59876
+ curr = document.selection.createRange();
59877
+ elm = document.selection.createRange().parentElement();
59878
+ }
59879
+ } catch (e) {
59880
+ if (this.builder.activeIcon) {
59881
+ // If icon is selected, the selection will not be a text selection
59882
+ elm = this.builder.activeIcon;
59883
+ } else {
59884
+ return;
59885
+ }
59886
+ } // If icon is selected
59358
59887
 
59359
- if (window.getComputedStyle(element).getPropertyValue('display') !== 'inline') {
59360
- elm = element;
59361
- break;
59362
- }
59363
59888
 
59364
- element = element.parentNode;
59365
- } // var text = dom.getSelected();
59889
+ if (this.builder.activeIcon) {
59890
+ elm = this.builder.activeIcon;
59891
+ } // Find block element (line-height only works on block element)
59892
+
59893
+
59894
+ let element = elm;
59895
+
59896
+ while (element) {
59897
+ if (element.tagName === 'BODY' || element.tagName === 'HTML') return false;
59898
+
59899
+ if (window.getComputedStyle(element).getPropertyValue('display') !== 'inline') {
59900
+ elm = element;
59901
+ break;
59902
+ }
59366
59903
 
59904
+ element = element.parentNode;
59905
+ } // var text = dom.getSelected();
59906
+ // let currentLineHeight = Number(window.getComputedStyle(elm).getPropertyValue('line-height').match(/\d+/)[0]);
59367
59907
 
59368
- this.builder.uo.saveForUndo(); // let currentLineHeight = Number(window.getComputedStyle(elm).getPropertyValue('line-height').match(/\d+/)[0]);
59369
59908
 
59370
- let isInPx = false;
59371
- let currentLineHeight = elm.style.lineHeight;
59909
+ let isInPx = false;
59910
+ let currentLineHeight = elm.style.lineHeight;
59372
59911
 
59373
- if (currentLineHeight) {
59374
- if (currentLineHeight.indexOf('px') === -1) {
59375
- currentLineHeight = parseFloat(currentLineHeight);
59912
+ if (currentLineHeight) {
59913
+ if (currentLineHeight.indexOf('px') === -1) {
59914
+ currentLineHeight = parseFloat(currentLineHeight);
59915
+ } else {
59916
+ isInPx = true;
59917
+ }
59376
59918
  } else {
59377
59919
  isInPx = true;
59378
59920
  }
59379
- } else {
59380
- isInPx = true;
59381
- }
59382
59921
 
59383
- if (isInPx) {
59384
- let fontSize = Number(window.getComputedStyle(elm).getPropertyValue('font-size').match(/\d+/)[0]);
59385
- currentLineHeight = Number(window.getComputedStyle(elm).getPropertyValue('line-height').match(/\d+/)[0]);
59922
+ if (isInPx) {
59923
+ let fontSize = Number(window.getComputedStyle(elm).getPropertyValue('font-size').match(/\d+/)[0]);
59924
+ currentLineHeight = Number(window.getComputedStyle(elm).getPropertyValue('line-height').match(/\d+/)[0]);
59386
59925
 
59387
- if (fontSize > currentLineHeight) {
59388
- currentLineHeight = fontSize / currentLineHeight;
59389
- } else if (fontSize < currentLineHeight) {
59390
- currentLineHeight = currentLineHeight / fontSize;
59391
- } else {
59392
- currentLineHeight = 1;
59926
+ if (fontSize > currentLineHeight) {
59927
+ currentLineHeight = fontSize / currentLineHeight;
59928
+ } else if (fontSize < currentLineHeight) {
59929
+ currentLineHeight = currentLineHeight / fontSize;
59930
+ } else {
59931
+ currentLineHeight = 1;
59932
+ }
59393
59933
  }
59394
- }
59395
59934
 
59396
- let lineheight;
59935
+ let lineheight;
59397
59936
 
59398
- if (num === '+') {
59399
- lineheight = currentLineHeight + 0.1;
59400
- } else if (num === '-') {
59401
- lineheight = currentLineHeight - 0.1;
59402
- if (lineheight < 0.2) lineheight = 0.2; // prevent very small number
59403
- } else if (num === '') {
59404
- lineheight = '';
59405
- } else {
59406
- lineheight = num;
59407
- }
59408
- /** mod by Jack */
59409
- //elm.style.lineHeight = lineheight;
59937
+ if (num === '+') {
59938
+ lineheight = currentLineHeight + 0.1;
59939
+ } else if (num === '-') {
59940
+ lineheight = currentLineHeight - 0.1;
59941
+ if (lineheight < 0.2) lineheight = 0.2; // prevent very small number
59942
+ } else if (num === '') {
59943
+ lineheight = '';
59944
+ } else {
59945
+ lineheight = num;
59946
+ }
59947
+ /** mod by Jack */
59948
+ //elm.style.lineHeight = lineheight;
59410
59949
 
59411
59950
 
59412
- dom$5.doFunction(elm, function (theEl) {
59413
- // apply to block element only
59414
- if (window.getComputedStyle(theEl).getPropertyValue('display') !== 'inline') {
59415
- theEl.style.lineHeight = lineheight;
59416
- }
59417
- }, true); //save selection
59951
+ dom$5.doFunction(elm, function (theEl) {
59952
+ // apply to block element only
59953
+ if (window.getComputedStyle(theEl).getPropertyValue('display') !== 'inline') {
59954
+ theEl.style.lineHeight = lineheight;
59955
+ }
59956
+ }, true);
59957
+ } //save selection
59958
+
59418
59959
 
59419
59960
  util.saveSelection();
59420
59961
  this.getState(); //Trigger Change event
@@ -59435,60 +59976,118 @@ class Rte {
59435
59976
  let num = btn.getAttribute('data-value');
59436
59977
  util.restoreSelection(); //a must
59437
59978
 
59438
- let elm;
59979
+ this.builder.uo.saveForUndo();
59439
59980
 
59440
- try {
59441
- let curr;
59981
+ if (this.builder.useCssClasses) {
59982
+ const selection = dom$5.getSelection();
59983
+ if (!selection) return;
59984
+ const anchorNode = selection.anchorNode;
59985
+ let container;
59442
59986
 
59443
- if (window.getSelection) {
59444
- curr = window.getSelection().getRangeAt(0).commonAncestorContainer;
59987
+ if (anchorNode) {
59988
+ container = anchorNode.nodeType !== Node.TEXT_NODE && anchorNode.nodeType !== Node.COMMENT_NODE ? anchorNode : anchorNode.parentElement;
59989
+ }
59445
59990
 
59446
- if (curr.nodeType === 3) {
59447
- //text node
59448
- elm = curr.parentNode;
59449
- } else {
59450
- elm = curr;
59991
+ if (!container) return; // ex. when selecting an icon
59992
+
59993
+ let newClassName;
59994
+ const classes = this.builder.cssClasses.tracking;
59995
+
59996
+ if (num === '') {
59997
+ // clean
59998
+ newClassName = '';
59999
+ } else if (num === '+' || num === '-') {
60000
+ for (let i = 0; i < Object.keys(classes).length; i++) {
60001
+ let className = Object.values(classes)[i];
60002
+
60003
+ if (dom$5.hasClass(container, className)) {
60004
+ if (num === '+') {
60005
+ if (i + 1 === Object.keys(classes).length) return;
60006
+ newClassName = Object.values(classes)[i + 1];
60007
+ break;
60008
+ } else if (num === '-') {
60009
+ if (i - 1 < 0) return;
60010
+ newClassName = Object.values(classes)[i - 1];
60011
+ break;
60012
+ }
60013
+ }
60014
+ }
60015
+ } else {
60016
+ if (num === '1') {
60017
+ newClassName = classes.tracking_025;
60018
+ }
60019
+
60020
+ if (num === '2') {
60021
+ newClassName = classes.tracking_050;
59451
60022
  }
59452
- } else if (document.selection) {
59453
- curr = document.selection.createRange();
59454
- elm = document.selection.createRange().parentElement();
59455
60023
  }
59456
- } catch (e) {
60024
+
60025
+ if (!newClassName) {
60026
+ if (num === '+') {
60027
+ newClassName = classes.tracking_025;
60028
+ } else if (num === '-') {
60029
+ newClassName = classes.tracking__025;
60030
+ }
60031
+ }
60032
+
60033
+ if (newClassName === classes.tracking_000) newClassName = ''; // clear for normal tracking
60034
+
60035
+ dom$5.execCommandClass(newClassName, classes);
60036
+ } else {
60037
+ let elm;
60038
+
60039
+ try {
60040
+ let curr;
60041
+
60042
+ if (window.getSelection) {
60043
+ curr = window.getSelection().getRangeAt(0).commonAncestorContainer;
60044
+
60045
+ if (curr.nodeType === 3) {
60046
+ //text node
60047
+ elm = curr.parentNode;
60048
+ } else {
60049
+ elm = curr;
60050
+ }
60051
+ } else if (document.selection) {
60052
+ curr = document.selection.createRange();
60053
+ elm = document.selection.createRange().parentElement();
60054
+ }
60055
+ } catch (e) {
60056
+ if (this.builder.activeIcon) {
60057
+ // If icon is selected, the selection will not be a text selection
60058
+ elm = this.builder.activeIcon;
60059
+ } else {
60060
+ return;
60061
+ }
60062
+ } // If icon is selected
60063
+
60064
+
59457
60065
  if (this.builder.activeIcon) {
59458
- // If icon is selected, the selection will not be a text selection
59459
60066
  elm = this.builder.activeIcon;
59460
- } else {
59461
- return;
59462
60067
  }
59463
- } // If icon is selected
59464
60068
 
60069
+ let currentLetterSpacing = parseInt(window.getComputedStyle(elm).getPropertyValue('letter-spacing'));
60070
+ if (isNaN(currentLetterSpacing)) currentLetterSpacing = 0;
60071
+ let letterspacing;
59465
60072
 
59466
- if (this.builder.activeIcon) {
59467
- elm = this.builder.activeIcon;
59468
- } // var text = dom.getSelected();
59469
-
60073
+ if (num === '+') {
60074
+ letterspacing = currentLetterSpacing + 1 + 'px';
60075
+ } else if (num === '-') {
60076
+ letterspacing = currentLetterSpacing - 1 + 'px';
60077
+ } else if (num === '') {
60078
+ letterspacing = '';
60079
+ } else {
60080
+ letterspacing = num + 'px';
60081
+ }
60082
+ /** mod by Jack */
60083
+ //elm.style.letterSpacing = letterspacing;
59470
60084
 
59471
- this.builder.uo.saveForUndo();
59472
- let currentLetterSpacing = parseInt(window.getComputedStyle(elm).getPropertyValue('letter-spacing'));
59473
- if (isNaN(currentLetterSpacing)) currentLetterSpacing = 0;
59474
- let letterspacing;
59475
-
59476
- if (num === '+') {
59477
- letterspacing = currentLetterSpacing + 1 + 'px';
59478
- } else if (num === '-') {
59479
- letterspacing = currentLetterSpacing - 1 + 'px';
59480
- } else if (num === '') {
59481
- letterspacing = '';
59482
- } else {
59483
- letterspacing = num + 'px';
59484
- }
59485
- /** mod by Jack */
59486
- //elm.style.letterSpacing = letterspacing;
59487
60085
 
60086
+ dom$5.doFunction(elm, function (theEl) {
60087
+ theEl.style.letterSpacing = letterspacing;
60088
+ }, true);
60089
+ } //save selection
59488
60090
 
59489
- dom$5.doFunction(elm, function (theEl) {
59490
- theEl.style.letterSpacing = letterspacing;
59491
- }, true); //save selection
59492
60091
 
59493
60092
  util.saveSelection();
59494
60093
  this.getState(); //Trigger Change event
@@ -62579,9 +63178,227 @@ class ContentBuilder {
62579
63178
  capitalize: 'capitalize',
62580
63179
  normal: 'normal-case'
62581
63180
  },
63181
+ tracking: {
63182
+ tracking__100: 'tracking--100',
63183
+ tracking__075: 'tracking--75',
63184
+ tracking__050: 'tracking-tighter',
63185
+ tracking__025: 'tracking-tight',
63186
+ tracking_000: 'tracking-normal',
63187
+ tracking_025: 'tracking-wide',
63188
+ tracking_050: 'tracking-wider',
63189
+ tracking_075: 'tracking-75',
63190
+ tracking_100: 'tracking-widest',
63191
+ tracking_125: 'tracking-125',
63192
+ tracking_150: 'tracking-150',
63193
+ tracking_175: 'tracking-175',
63194
+ tracking_200: 'tracking-200',
63195
+ tracking_225: 'tracking-225',
63196
+ tracking_250: 'tracking-250',
63197
+ tracking_275: 'tracking-275',
63198
+ tracking_300: 'tracking-300',
63199
+ tracking_325: 'tracking-325',
63200
+ tracking_350: 'tracking-350',
63201
+ tracking_375: 'tracking-375',
63202
+ tracking_400: 'tracking-400',
63203
+ tracking_425: 'tracking-425',
63204
+ tracking_450: 'tracking-450',
63205
+ tracking_475: 'tracking-475',
63206
+ tracking_500: 'tracking-500'
63207
+ },
63208
+ leading: {
63209
+ leading_5: 'leading-05',
63210
+ leading_6: 'leading-06',
63211
+ leading_7: 'leading-07',
63212
+ leading_8: 'leading-08',
63213
+ leading_9: 'leading-09',
63214
+ leading_10: 'leading-none',
63215
+ leading_11: 'leading-11',
63216
+ leading_12: 'leading-12',
63217
+ leading_125: 'leading-tight',
63218
+ leading_13: 'leading-13',
63219
+ leading_1375: 'leading-snug',
63220
+ leading_14: 'leading-14',
63221
+ leading_15: 'leading-normal',
63222
+ leading_16: 'leading-16',
63223
+ leading_1625: 'leading-relaxed',
63224
+ leading_17: 'leading-17',
63225
+ leading_18: 'leading-18',
63226
+ leading_19: 'leading-19',
63227
+ leading_20: 'leading-loose',
63228
+ leading_21: 'leading-21',
63229
+ leading_22: 'leading-22',
63230
+ leading_23: 'leading-23',
63231
+ leading_24: 'leading-24',
63232
+ leading_25: 'leading-25',
63233
+ leading_26: 'leading-26',
63234
+ leading_27: 'leading-27',
63235
+ leading_28: 'leading-28',
63236
+ leading_29: 'leading-29',
63237
+ leading_30: 'leading-30'
63238
+ },
63239
+ padding: {
63240
+ all: {
63241
+ p_0: 'p-0',
63242
+ p_1: 'p-1',
63243
+ p_2: 'p-2',
63244
+ p_3: 'p-3',
63245
+ p_4: 'p-4',
63246
+ p_5: 'p-5',
63247
+ p_6: 'p-6',
63248
+ p_7: 'p-7',
63249
+ p_8: 'p-8',
63250
+ p_9: 'p-9',
63251
+ p_10: 'p-10',
63252
+ p_11: 'p-11',
63253
+ p_12: 'p-12',
63254
+ p_14: 'p-14',
63255
+ p_16: 'p-16',
63256
+ p_20: 'p-20'
63257
+ },
63258
+ x: {
63259
+ px_0: 'px-0',
63260
+ px_1: 'px-1',
63261
+ px_2: 'px-2',
63262
+ px_3: 'px-3',
63263
+ px_4: 'px-4',
63264
+ px_5: 'px-5',
63265
+ px_6: 'px-6',
63266
+ px_7: 'px-7',
63267
+ px_8: 'px-8',
63268
+ px_9: 'px-9',
63269
+ px_10: 'px-10',
63270
+ px_11: 'px-11',
63271
+ px_12: 'px-12',
63272
+ px_14: 'px-14',
63273
+ px_16: 'px-16',
63274
+ px_20: 'px-20'
63275
+ },
63276
+ y: {
63277
+ py_0: 'py-0',
63278
+ py_1: 'py-1',
63279
+ py_2: 'py-2',
63280
+ py_3: 'py-3',
63281
+ py_4: 'py-4',
63282
+ py_5: 'py-5',
63283
+ py_6: 'py-6',
63284
+ py_7: 'py-7',
63285
+ py_8: 'py-8',
63286
+ py_9: 'py-9',
63287
+ py_10: 'py-10',
63288
+ py_11: 'py-11',
63289
+ py_12: 'py-12',
63290
+ py_14: 'py-14',
63291
+ py_16: 'py-16',
63292
+ py_20: 'py-20'
63293
+ },
63294
+ top: {
63295
+ pt_0: 'pt-0',
63296
+ pt_1: 'pt-1',
63297
+ pt_2: 'pt-2',
63298
+ pt_3: 'pt-3',
63299
+ pt_4: 'pt-4',
63300
+ pt_5: 'pt-5',
63301
+ pt_6: 'pt-6',
63302
+ pt_7: 'pt-7',
63303
+ pt_8: 'pt-8',
63304
+ pt_9: 'pt-9',
63305
+ pt_10: 'pt-10',
63306
+ pt_11: 'pt-11',
63307
+ pt_12: 'pt-12',
63308
+ pt_14: 'pt-14',
63309
+ pt_16: 'pt-16',
63310
+ pt_20: 'pt-20'
63311
+ },
63312
+ right: {
63313
+ pr_0: 'pr-0',
63314
+ pr_1: 'pr-1',
63315
+ pr_2: 'pr-2',
63316
+ pr_3: 'pr-3',
63317
+ pr_4: 'pr-4',
63318
+ pr_5: 'pr-5',
63319
+ pr_6: 'pr-6',
63320
+ pr_7: 'pr-7',
63321
+ pr_8: 'pr-8',
63322
+ pr_9: 'pr-9',
63323
+ pr_10: 'pr-10',
63324
+ pr_11: 'pr-11',
63325
+ pr_12: 'pr-12',
63326
+ pr_14: 'pr-14',
63327
+ pr_16: 'pr-16',
63328
+ pr_20: 'pr-20'
63329
+ },
63330
+ bottom: {
63331
+ pb_0: 'pb-0',
63332
+ pb_1: 'pb-1',
63333
+ pb_2: 'pb-2',
63334
+ pb_3: 'pb-3',
63335
+ pb_4: 'pb-4',
63336
+ pb_5: 'pb-5',
63337
+ pb_6: 'pb-6',
63338
+ pb_7: 'pb-7',
63339
+ pb_8: 'pb-8',
63340
+ pb_9: 'pb-9',
63341
+ pb_10: 'pb-10',
63342
+ pb_11: 'pb-11',
63343
+ pb_12: 'pb-12',
63344
+ pb_14: 'pb-14',
63345
+ pb_16: 'pb-16',
63346
+ pb_20: 'pb-20'
63347
+ },
63348
+ left: {
63349
+ pl_0: 'pl-0',
63350
+ pl_1: 'pl-1',
63351
+ pl_2: 'pl-2',
63352
+ pl_3: 'pl-3',
63353
+ pl_4: 'pl-4',
63354
+ pl_5: 'pl-5',
63355
+ pl_6: 'pl-6',
63356
+ pl_7: 'pl-7',
63357
+ pl_8: 'pl-8',
63358
+ pl_9: 'pl-9',
63359
+ pl_10: 'pl-10',
63360
+ pl_11: 'pl-11',
63361
+ pl_12: 'pl-12',
63362
+ pl_14: 'pl-14',
63363
+ pl_16: 'pl-16',
63364
+ pl_20: 'pl-20'
63365
+ }
63366
+ },
62582
63367
  extend: {
62583
63368
  superscript: 'sup',
62584
63369
  subscript: 'sub'
63370
+ },
63371
+ display: {
63372
+ flex: 'flex',
63373
+ block: 'block',
63374
+ inline: 'inline',
63375
+ inline_block: 'inline-block'
63376
+ },
63377
+ flexDirection: {
63378
+ row: 'flex-row',
63379
+ column: 'flex-col',
63380
+ row_reverse: 'flex-row-reverse',
63381
+ column_reverse: 'flex-col-reverse'
63382
+ },
63383
+ flexWrap: {
63384
+ wrap: 'flex-wrap',
63385
+ nowrap: 'flex-nowrap',
63386
+ wrap_reverse: 'flex-wrap-reverse'
63387
+ },
63388
+ justifyContent: {
63389
+ start: 'justify-start',
63390
+ end: 'justify-end',
63391
+ center: 'justify-center',
63392
+ between: 'justify-between',
63393
+ around: 'justify-around',
63394
+ evenly: 'justify-evenly'
63395
+ },
63396
+ alignItems: {
63397
+ start: 'items-start',
63398
+ end: 'items-end',
63399
+ center: 'items-center',
63400
+ baseline: 'items-baseline',
63401
+ stretch: 'items-stretch'
62585
63402
  }
62586
63403
  },
62587
63404
  useCssClasses: false
@@ -63433,6 +64250,10 @@ class ContentBuilder {
63433
64250
  new Dropdown(element, opts);
63434
64251
  }
63435
64252
 
64253
+ colorClassPicker() {
64254
+ return new ColorClassPicker();
64255
+ }
64256
+
63436
64257
  destroy() {
63437
64258
  document.removeEventListener('click', this.doDocumentClick, false);
63438
64259
  document.removeEventListener('keydown', this.doDocumentKeydown, false);