@innovastudio/contentbox 1.1.8 → 1.1.11

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.
@@ -1667,6 +1667,21 @@ class SideBar {
1667
1667
  var googleFonts = result[0].googleFonts;
1668
1668
  var contentCss = result[0].contentCss;
1669
1669
  var contentClass = result[0].contentClass;
1670
+
1671
+ //To Tailwind
1672
+ if (framework == 'tailwind') {
1673
+ html = html.replace(new RegExp(' container', 'g'), ' container');
1674
+ html = html.replace(new RegExp('row clearfix', 'g'), 'flex flex-col md:flex-row');
1675
+ html = html.replace(new RegExp('column full', 'g'), 'w-full px-4');
1676
+ html = html.replace(new RegExp('column half', 'g'), 'w-full md:w-6/12 px-4');
1677
+ html = html.replace(new RegExp('column third', 'g'), 'w-full md:w-4/12 px-4');
1678
+ html = html.replace(new RegExp('column fourth', 'g'), 'w-full md:w-3/12 px-4');
1679
+ html = html.replace(new RegExp('column fifth', 'g'), 'w-full md:w-2/12 px-4'); //not needed
1680
+ html = html.replace(new RegExp('column sixth', 'g'), 'w-full md:w-2/12 px-4');
1681
+ html = html.replace(new RegExp('column two-third', 'g'), 'w-full md:w-8/12 px-4');
1682
+ html = html.replace(new RegExp('column two-fourth', 'g'), 'w-full md:w-9/12 px-4');
1683
+ html = html.replace(new RegExp('column two-sixth', 'g'), 'w-full md:w-10/12 px-4');
1684
+ }
1670
1685
 
1671
1686
  //To Bootstrap
1672
1687
  if (framework == 'bootstrap') {
@@ -8042,7 +8057,7 @@ class EditBox {
8042
8057
  this.builder = builder;
8043
8058
  this.builderStuff = this.builder.builderStuff;
8044
8059
  const builderStuff = this.builderStuff;
8045
- let html = '' + '<div id="divBoxTool">' + '<form id="form-upload-cover" data-tooltip-top data-title="' + out('Background Image') + '" target="frame-upload-cover" method="post" action="' + this.builder.coverImageHandler + '" enctype="multipart/form-data" style="position:relative;width:40px;height:40px;display:inline-block;float:left;background: rgb(90, 156, 38);">' + '<div style="width:40px;height:40px;overflow:hidden;">' + '<div style="position:absolute;width:100%;height:100%;"><svg class="is-icon-flex" style="position: absolute;top: 12px;left: 12px;fill:rgb(255,255,255);"><use xlink:href="#ion-image"></use></svg></div>' + '<input type="file" title="' + out('Background Image') + '" id="fileCover" name="fileCover" accept="image/*" style="position:absolute;top:-30px;left:0;width:100%;height:80px;opacity: 0;cursor: pointer;"/>' + '</div>' + '<input id="hidcustomval" name="hidcustomval" type="hidden" value="" />' + '<iframe id="frame-upload-cover" name="frame-upload-cover" src="about:blank" style="width:1px;height:1px;position:absolute;top:0;right:-100000px"></iframe>' + '</form>' + '<button id="btnEditBox" data-tooltip-top data-title="' + out('Box Settings') + '" title="' + out('Box Settings') + '"><svg class="is-icon-flex"><use xlink:href="#ion-wrench"></use></svg></button>' + '<button id="btnEditModule" data-tooltip-top data-title="' + out('Module Settings') + '" title="' + out('Module Settings') + '"><svg class="is-icon-flex"><use xlink:href="#ion-ios-gear"></use></svg></button>' + '</div>' + '' + '<div class="is-modal editmodule">' + '<div style="max-width:900px;height:570px;padding:0;box-sizing:border-box;position:relative;">' + '<div class="is-modal-bar is-draggable" style="position: absolute;top: 0;left: 0;width: 100%;z-index:1;">' + out('Module Settings') + '</div>' + '<iframe style="position: absolute;top: 0;left: 0;width:100%;height:100%;border:none;border-bottom:60px solid transparent;border-top:40px solid transparent;margin:0;box-sizing:border-box;" src="about:blank"></iframe>' + '<input id="hidModuleCode" type="hidden" />' + '<input id="hidModuleSettings" type="hidden" />' + '<button class="input-ok classic" style="height:60px;position:absolute;left:0;bottom:0;">' + out('Ok') + '</button>' + '</div>' + '</div>' + '' + '<div class="is-modal editcustomcode">' + '<div style="max-width:900px;height:570px;padding:0;box-sizing:border-box;position:relative;">' + '<div class="is-modal-bar is-draggable" style="position: absolute;top: 0;left: 0;width: 100%;z-index:1;">' + out('Custom Code (Javascript Allowed)') + '</div>' + '<textarea id="txtBoxCustomCode" class="inptxt" style="background: #fff;position: absolute;top: 0;left: 0;width:100%;height:100%;border:none;border-bottom:60px solid transparent;border-top:40px solid transparent;box-sizing:border-box;"></textarea>' + '<input id="hidBoxCustomCode" type="hidden" />' + '<button class="cell-html-larger" style="width:35px;height:35px;position:absolute;right:0;top:0;background:transparent;z-index:2;"><svg class="is-icon-flex" style="width:19px;height:19px;fill:rgb(170, 170, 170);"><use xlink:href="#ion-arrow-expand"></use></svg></button>' + '<button class="input-ok classic" style="height:60px;position:absolute;left:0;bottom:0;">' + out('Ok') + '</button>' + '</div>' + '</div>' + '<div class="is-modal editbox">' + '<div class="is-modal-content" style="max-width:380px;min-height:300px;padding:0">' + '<div class="is-modal-bar is-draggable">' + out('Box Settings') + '</div>' + '<div class="is-tabs clearfix" style="padding-top:37px;">' + '<a id="tabBoxGeneral" href="" data-content="divBoxGeneral" class="active">' + out('General') + '</a>' + '<a id="tabBoxContentContainer" href="" data-content="divBoxContentContainer">' + out('Content') + '</a>' + '<a id="tabBoxContentText" href="" data-content="divBoxContentText">' + out('Text') + '</a>' + '<a id="tabBoxImage" href="" data-content="divBoxImage">' + out('Image') + '</a>' + '<a id="tabBoxAnimate" href="" data-content="divBoxAnimate">' + out('Animate') + '</a>' + '<a id="tabBoxClick" href="" data-content="divBoxClick">' + out('On Click') + '</a>' + '</div>' + '<div id="divBoxGeneral" class="is-tab-content" data-group="boxsettings" style="display:flex;padding-top:0">' + '<div id="divBoxSize">' + '<div style="padding-top:20px;padding-bottom: 3px;">' + out('Box Size') + ':</div>' + '<div style="display:flex">' + '<button title="' + out('Decrease') + '" class="cmd-box-smaller" style="width:40px;">-</button>' + '<button title="' + out('Increase') + '" class="cmd-box-larger" style="width:40px;border-left:none">+</button>' + '<br style="clear:both">' + '</div>' + '</div>' + '<div id="divContentSize">' + '<div style="padding-top:20px;padding-bottom: 3px;">' + out('Content Size') + ':</div>' + '<div style="display: flex;flex-direction: row;flex-wrap: wrap;">' + '<input class="inp-box-size" type="text" style="width:80px;height:35px;text-align:center;font-size:12px;" />' + '<button class="cmd-box-size" data-value="440" style="width:40px;border-left:none">440</button>' + '<button class="cmd-box-size" data-value="500" style="width:40px;border-left:none">500</button>' + '<button class="cmd-box-size" data-value="640" style="width:40px;border-left:none">640</button>' + '<button class="cmd-box-size" data-value="760" style="width:40px;border-left:none">760</button>' + '<button class="cmd-box-size" data-value="800" style="width:40px;border-top:none">800</button>' + '<button class="cmd-box-size" data-value="860" style="width:40px;border-top:none">860</button>' + '<button class="cmd-box-size" data-value="940" style="width:40px;border-top:none">940</button>' + '<button class="cmd-box-size" data-value="1000" style="width:40px;border-top:none;border-left:none">1020</button>' + '<button class="cmd-box-size" data-value="1100" style="width:40px;border-top:none;border-left:none">1100</button>' + '<button class="cmd-box-size" data-value="1200" style="width:40px;border-top:none;border-left:none">1200</button>' + '<button class="cmd-box-size" data-value="1400" style="width:40px;border-top:none;border-left:none">1400</button>' + '<button title="' + out('Clear') + '" class="cmd-box-size" data-value=""><svg class="is-icon-flex" style="width:10px;height:10px;"><use xlink:href="#icon-clean"></use></svg></button>' + '<button title="' + out('Decrease') + '" class="cmd-box-size" data-value="-" style="width:40px;border-top:none;border-left:none">-</button>' + '<button title="' + out('Increase') + '"class="cmd-box-size" data-value="+" style="width:40px;border-top:none;border-left:none">+</button>' + '<br style="clear:both">' + '</div>' + '</div>' + '<div id="divBoxBackgroundColor">' + '<div style="padding-top:20px;padding-bottom: 3px;">' + out('Background Color') + ':</div>' + '<div style="display:flex;">' + '<button title="' + out('Background Color') + '" class="input-box-bgcolor is-btn-color" style="margin-right:15px"></button>' + '<button title="' + out('Gradient') + '" class="input-box-gradient classic" data-value="+">' + out('Gradient') + '</button>' + '</div>' + '<div style="padding-top:20px;padding-bottom: 3px;">' + out('Background Image') + ':</div>' + '<div style="height:auto">' + '<div style="display:flex;align-items:flex-end;">' + '<div class="box-bgimage-preview"></div>' + '<label class="label-box-bgimage-grayscale label-checkbox" for="chkBoxBgImageGrayscale" style="margin:0;margin-left:8px;margin-bottom:5px;"><input id="chkBoxBgImageGrayscale" class="chk-box-bgimage-grayscale" type="checkbox" /> ' + out('Grayscale') + '</label>' + '</div>' + '<div style="display:flex;align-items: flex-end;">' + '<button title="' + out('Image') + '" class="input-box-bgimage">' + '<svg class="is-icon-flex"><use xlink:href="#ion-image"></use></svg>' + '<span>' + out('Image') + '</span>' + '</button>' + '<button title="' + out('Remove') + '" class="input-box-bgremove"><svg class="is-icon-flex" style="width:11px;height:11px;"><use xlink:href="#icon-clean"></use></svg></button>' + '<button title="' + out('Adjust') + '" class="input-box-bgimageadjust"><svg class="is-icon-flex"><use xlink:href="#ion-wrench"></use></svg></button>' + '</div>' + '</div>' + '</div>' + '<div id="divBoxPickPhoto" class="is-settings" style="padding-top:20px">' + '<button class="cmd-box-pickphoto" data-value="" style="width:100%"><svg class="is-icon-flex" style=""><use xlink:href="#ion-image"></use></svg></button>' + '</div>' + '<div style="display:flex;justify-content:flex-end;">' + '<button title="' + out('Add Text') + '" class="cmd-box-addtext" style="display:none;margin-top:20px;"><svg class="is-icon-flex" style="width:11px;height:11px;"><use xlink:href="#ion-android-add"></use></svg> <span>' + out('Text') + '</span></button>' + '<button title="' + out('Remove Text') + '" class="cmd-box-removetext" style="display:none;margin-top:20px;"><svg class="is-icon-flex" style="width:11px;height:11px;"><use xlink:href="#icon-clean"></use></svg> <span>' + out('Clear') + '</span></button>' + '</div>' + '<p id="divNoBoxSettings" style="text-align: center;display:none;">' + out('This box has no available settings.') + '</p>' + '</div>' + '<div id="divBoxClick" class="is-tab-content" data-group="boxsettings" style="padding-top:0">' + '<label for="inpBoxLinkSource" style="display:block;padding-top:20px;">' + out('Open') + ':</label>' + '<div class="image-src" style="display:flex">' + '<input id="inpBoxLinkSource" class="input-src" type="text" style="height:38px">' + '<button title="' + out('Select') + '" class="input-select" style="flex:none;width:40px;height:38px;background:transparent;"><svg class="is-icon-flex"><use xlink:href="#ion-more"></use></svg></button>' + '<div class="image-larger5" style="position: relative; flex: 0 0 auto; width: 40px; height: 38px; box-shadow: rgba(0, 0, 0, 0.32) 0px 3px 6px -6px;">' + '<form class="form-upload-larger" target="frameTargetBoxLinkUpload" method="post" action="' + this.builder.largerImageHandler + '" enctype="multipart/form-data" style="position:absolute;top:0;left:0;width:100%;height:100%;">' + '<input id="hidRefId5" name="hidRefId" type="hidden" value="">' + '<svg class="is-icon-flex" style="position: absolute;top: 10px;left: 15px;"><use xlink:href="#ion-image"></use></svg>' + '<input title="' + out('Select') + '" id="fileImage5" name="fileImage" type="file" accept="image/*,video/mp4" style="position:absolute;top:-30px;left:0;width:100%;height:80px;opacity: 0;cursor: pointer;">' + '</form>' + '<iframe id="frameTargetBoxLinkUpload" name="frameTargetBoxLinkUpload" src="about:blank" style="width:1px;height:1px;position:absolute;top:0;right:-100000px"></iframe>' + '</div>' + '</div>' + '<div style="padding-top:20px">' + '<button class="cmd-box-testclick">' + out('Test') + '</button>' + '</div>' + '</div>';
8060
+ let html = '' + '<div id="divBoxTool">' + '<form id="form-upload-cover" data-tooltip-top data-title="' + out('Background Image') + '" target="frame-upload-cover" method="post" action="' + this.builder.coverImageHandler + '" enctype="multipart/form-data" style="position:relative;width:40px;height:40px;display:inline-block;float:left;background: rgb(90, 156, 38);">' + '<div style="width:40px;height:40px;overflow:hidden;">' + '<div style="position:absolute;width:100%;height:100%;"><svg class="is-icon-flex" style="position: absolute;top: 12px;left: 12px;fill:rgb(255,255,255);"><use xlink:href="#ion-image"></use></svg></div>' + '<input type="file" title="' + out('Background Image') + '" id="fileCover" name="fileCover" accept="image/*" style="position:absolute;top:-30px;left:0;width:100%;height:80px;opacity: 0;cursor: pointer;"/>' + '</div>' + '<input id="hidcustomval" name="hidcustomval" type="hidden" value="" />' + '<iframe id="frame-upload-cover" name="frame-upload-cover" src="about:blank" style="width:1px;height:1px;position:absolute;top:0;right:-100000px"></iframe>' + '</form>' + '<button id="btnEditBox" data-tooltip-top data-title="' + out('Box Settings') + '" title="' + out('Box Settings') + '"><svg class="is-icon-flex"><use xlink:href="#ion-wrench"></use></svg></button>' + '<button id="btnEditModule" data-tooltip-top data-title="' + out('Module Settings') + '" title="' + out('Module Settings') + '"><svg class="is-icon-flex"><use xlink:href="#ion-ios-gear"></use></svg></button>' + '</div>' + '' + '<div class="is-modal editmodule">' + '<div style="max-width:900px;height:570px;padding:0;box-sizing:border-box;position:relative;">' + '<div class="is-modal-bar is-draggable" style="position: absolute;top: 0;left: 0;width: 100%;z-index:1;">' + out('Module Settings') + '</div>' + '<iframe style="position: absolute;top: 0;left: 0;width:100%;height:100%;border:none;border-bottom:60px solid transparent;border-top:40px solid transparent;margin:0;box-sizing:border-box;" src="about:blank"></iframe>' + '<input id="hidModuleCode" type="hidden" />' + '<input id="hidModuleSettings" type="hidden" />' + '<button class="input-ok classic" style="height:60px;position:absolute;left:0;bottom:0;">' + out('Ok') + '</button>' + '</div>' + '</div>' + '' + '<div class="is-modal editcustomcode">' + '<div style="max-width:900px;height:570px;padding:0;box-sizing:border-box;position:relative;">' + '<div class="is-modal-bar is-draggable" style="position: absolute;top: 0;left: 0;width: 100%;z-index:1;">' + out('Custom Code (Javascript Allowed)') + '</div>' + '<textarea id="txtBoxCustomCode" class="inptxt" style="background: #fff;position: absolute;top: 0;left: 0;width:100%;height:100%;border:none;border-bottom:60px solid transparent;border-top:40px solid transparent;box-sizing:border-box;"></textarea>' + '<input id="hidBoxCustomCode" type="hidden" />' + '<button class="cell-html-larger" style="width:35px;height:35px;position:absolute;right:0;top:0;background:transparent;z-index:2;"><svg class="is-icon-flex" style="width:19px;height:19px;fill:rgb(170, 170, 170);"><use xlink:href="#ion-arrow-expand"></use></svg></button>' + '<button class="input-ok classic" style="height:60px;position:absolute;left:0;bottom:0;">' + out('Ok') + '</button>' + '</div>' + '</div>' + '<div class="is-modal editbox">' + '<div class="is-modal-content" style="max-width:380px;min-height:300px;padding:0">' + '<div class="is-modal-bar is-draggable">' + out('Box Settings') + '</div>' + '<div class="is-tabs clearfix" style="padding-top:37px;">' + '<a id="tabBoxGeneral" href="" data-content="divBoxGeneral" class="active">' + out('General') + '</a>' + '<a id="tabBoxContentContainer" href="" data-content="divBoxContentContainer">' + out('Content') + '</a>' + '<a id="tabBoxContentText" href="" data-content="divBoxContentText">' + out('Text') + '</a>' + '<a id="tabBoxImage" href="" data-content="divBoxImage">' + out('Image') + '</a>' + '<a id="tabBoxAnimate" href="" data-content="divBoxAnimate">' + out('Animate') + '</a>' + '<a id="tabBoxClick" href="" data-content="divBoxClick">' + out('On Click') + '</a>' + '</div>' + '<div id="divBoxGeneral" class="is-tab-content" data-group="boxsettings" style="display:flex;padding-top:0">' + '<div id="divBoxSize">' + '<div style="padding-top:20px;padding-bottom: 3px;">' + out('Box Size') + ':</div>' + '<div style="display:flex">' + '<button title="' + out('Decrease') + '" class="cmd-box-smaller" style="width:40px;">-</button>' + '<button title="' + out('Increase') + '" class="cmd-box-larger" style="width:40px;border-left:none">+</button>' + '<br style="clear:both">' + '</div>' + '</div>' + '<div id="divContentSize">' + '<div style="padding-top:20px;padding-bottom: 3px;">' + out('Content Size') + ': &nbsp;<span class="val-box-size" style="font-size:12px"></span></div>' + '<div style="display: flex;flex-direction: row;flex-wrap: wrap;">' + '<input class="inp-box-size" type="text" style="display:none;width:80px;height:35px;text-align:center;font-size:12px;" />' + '<button class="cmd-box-size" data-value="500" style="width:40px;border-left:none">500</button>' + '<button class="cmd-box-size" data-value="600" style="width:40px;border-left:none">600</button>' + '<button class="cmd-box-size" data-value="700" style="width:40px;border-left:none">700</button>' + '<button class="cmd-box-size" data-value="800" style="width:40px;border-top:none">800</button>' + '<button class="cmd-box-size" data-value="900" style="width:40px;border-top:none">900</button>' + '<button class="cmd-box-size" data-value="1000" style="width:40px;border-top:none;border-left:none">1000</button>' + '<button class="cmd-box-size" data-value="1100" style="width:40px;border-top:none;border-left:none">1100</button>' + '<button class="cmd-box-size" data-value="1200" style="width:40px;border-top:none;border-left:none">1200</button>' + '<button class="cmd-box-size" data-value="1300" style="width:40px;border-top:none;border-left:none">1300</button>' + '<button class="cmd-box-size" data-value="1400" style="width:40px;border-top:none;border-left:none">1400</button>' + '<button class="cmd-box-size" data-value="1500" style="width:40px;border-top:none;border-left:none">1500</button>' + '<button class="cmd-box-size" data-value="1600" style="width:40px;border-top:none;border-left:none">1600</button>' + '<button class="cmd-box-size" data-value="1800" style="width:40px;border-top:none;border-left:none">1800</button>' + '<button title="' + out('Clear') + '" class="cmd-box-size" data-value=""><svg class="is-icon-flex" style="width:10px;height:10px;"><use xlink:href="#icon-clean"></use></svg></button>' + '<button title="' + out('Decrease') + '" class="cmd-box-size" data-value="-" style="width:40px;border-top:none;border-left:none">-</button>' + '<button title="' + out('Increase') + '"class="cmd-box-size" data-value="+" style="width:40px;border-top:none;border-left:none">+</button>' + '<br style="clear:both">' + '</div>' + '</div>' + '<div id="divBoxBackgroundColor">' + '<div style="padding-top:20px;padding-bottom: 3px;">' + out('Background Color') + ':</div>' + '<div style="display:flex;">' + '<button title="' + out('Background Color') + '" class="input-box-bgcolor is-btn-color" style="margin-right:15px"></button>' + '<button title="' + out('Gradient') + '" class="input-box-gradient classic" data-value="+">' + out('Gradient') + '</button>' + '</div>' + '<div style="padding-top:20px;padding-bottom: 3px;">' + out('Background Image') + ':</div>' + '<div style="height:auto">' + '<div style="display:flex;align-items:flex-end;">' + '<div class="box-bgimage-preview"></div>' + '<label class="label-box-bgimage-grayscale label-checkbox" for="chkBoxBgImageGrayscale" style="margin:0;margin-left:8px;margin-bottom:5px;"><input id="chkBoxBgImageGrayscale" class="chk-box-bgimage-grayscale" type="checkbox" /> ' + out('Grayscale') + '</label>' + '</div>' + '<div style="display:flex;align-items: flex-end;">' + '<button title="' + out('Image') + '" class="input-box-bgimage">' + '<svg class="is-icon-flex"><use xlink:href="#ion-image"></use></svg>' + '<span>' + out('Image') + '</span>' + '</button>' + '<button title="' + out('Remove') + '" class="input-box-bgremove"><svg class="is-icon-flex" style="width:11px;height:11px;"><use xlink:href="#icon-clean"></use></svg></button>' + '<button title="' + out('Adjust') + '" class="input-box-bgimageadjust"><svg class="is-icon-flex"><use xlink:href="#ion-wrench"></use></svg></button>' + '</div>' + '</div>' + '</div>' + '<div id="divBoxPickPhoto" class="is-settings" style="padding-top:20px">' + '<button class="cmd-box-pickphoto" data-value="" style="width:100%"><svg class="is-icon-flex" style=""><use xlink:href="#ion-image"></use></svg></button>' + '</div>' + '<div style="display:flex;justify-content:flex-end;">' + '<button title="' + out('Add Text') + '" class="cmd-box-addtext" style="display:none;margin-top:20px;"><svg class="is-icon-flex" style="width:11px;height:11px;"><use xlink:href="#ion-android-add"></use></svg> <span>' + out('Text') + '</span></button>' + '<button title="' + out('Remove Text') + '" class="cmd-box-removetext" style="display:none;margin-top:20px;"><svg class="is-icon-flex" style="width:11px;height:11px;"><use xlink:href="#icon-clean"></use></svg> <span>' + out('Clear') + '</span></button>' + '</div>' + '<p id="divNoBoxSettings" style="text-align: center;display:none;">' + out('This box has no available settings.') + '</p>' + '</div>' + '<div id="divBoxClick" class="is-tab-content" data-group="boxsettings" style="padding-top:0">' + '<label for="inpBoxLinkSource" style="display:block;padding-top:20px;">' + out('Open') + ':</label>' + '<div class="image-src" style="display:flex">' + '<input id="inpBoxLinkSource" class="input-src" type="text" style="height:38px">' + '<button title="' + out('Select') + '" class="input-select" style="flex:none;width:40px;height:38px;background:transparent;"><svg class="is-icon-flex"><use xlink:href="#ion-more"></use></svg></button>' + '<div class="image-larger5" style="position: relative; flex: 0 0 auto; width: 40px; height: 38px; box-shadow: rgba(0, 0, 0, 0.32) 0px 3px 6px -6px;">' + '<form class="form-upload-larger" target="frameTargetBoxLinkUpload" method="post" action="' + this.builder.largerImageHandler + '" enctype="multipart/form-data" style="position:absolute;top:0;left:0;width:100%;height:100%;">' + '<input id="hidRefId5" name="hidRefId" type="hidden" value="">' + '<svg class="is-icon-flex" style="position: absolute;top: 10px;left: 15px;"><use xlink:href="#ion-image"></use></svg>' + '<input title="' + out('Select') + '" id="fileImage5" name="fileImage" type="file" accept="image/*,video/mp4" style="position:absolute;top:-30px;left:0;width:100%;height:80px;opacity: 0;cursor: pointer;">' + '</form>' + '<iframe id="frameTargetBoxLinkUpload" name="frameTargetBoxLinkUpload" src="about:blank" style="width:1px;height:1px;position:absolute;top:0;right:-100000px"></iframe>' + '</div>' + '</div>' + '<div style="padding-top:20px">' + '<button class="cmd-box-testclick">' + out('Test') + '</button>' + '</div>' + '</div>';
8046
8061
  html += '<div id="divBoxContentText" class="is-tab-content" data-group="boxsettings" style="padding-top:0">' + '<div style="display:flex;flex-direction: column;">' + '<div style="padding-top:20px;padding-bottom: 3px;">' + out('Text Style') + ':</div>' + '<div style="display:flex">' + '<button title="' + out('Light') + '" class="cmd-box-textcolor" data-value="light">' + out('Light') + '</button>' + '<button title="' + out('Dark') + '" class="cmd-box-textcolor" data-value="dark" style="border-left:none;">' + out('Dark') + '</button>' + '<br style="clear:both">' + '</div>' + '</div>' + '<div style="padding-top:20px;">' + '<label for="chkOptimizeTextSize" style="margin:0;"><input id="chkOptimizeTextSize" type="checkbox" /> ' + out('Optimize text sizes on large screen.') + '</label>' + '</div>' + '<div id="divContainerTransparency" style="display:flex;flex-direction: column;">' + '<div style="padding-top:20px;padding-bottom: 3px;">' + out('Transparency') + ':</div>' + '<div style="display:flex">' + '<button title="' + out('Increase') + '" class="cmd-box-textopacity" data-value="+" style="width:40px"> + </button>' + '<button title="' + out('Decrease') + '" class="cmd-box-textopacity" data-value="-" style="width:40px;border-left:none;"> - </button>' + '<button title="' + out('Not Set') + '" class="cmd-box-textopacity" data-value="" style="border-left:none;">' + out('Not Set') + '</button>' + '<br style="clear:both">' + '</div>' + '</div>' + '<div id="divContainerTextAlign" style="display:flex;flex-direction: column;">' + '<div style="padding-top:20px;padding-bottom: 3px;">Align:</div>' + '<div style="display:flex">' + '<button title="' + out('Align Left') + '" class="cmd-box-textalign" data-value="left" style="width:40px"><svg class="is-icon-flex" style="fill:rgba(0, 0, 0, 0.8);width:13px;height:13px;"><use xlink:href="#icon-align-left"></use></svg></button>' + '<button title="' + out('Align Center') + '" class="cmd-box-textalign" data-value="center" style="width:40px;border-left:none;"><svg class="is-icon-flex" style="fill:rgba(0, 0, 0, 0.8);width:13px;height:13px;"><use xlink:href="#icon-align-center"></use></svg></button>' + '<button title="' + out('Align Right') + '" class="cmd-box-textalign" data-value="right" style="width:40px;border-left:none;"><svg class="is-icon-flex" style="fill:rgba(0, 0, 0, 0.8);width:13px;height:13px;"><use xlink:href="#icon-align-right"></use></svg></button>' + '<button title="' + out('Align Full') + '" class="cmd-box-textalign" data-value="justify" style="width:40px;border-left:none;"><svg class="is-icon-flex" style="fill:rgba(0, 0, 0, 0.8);width:13px;height:13px;"><use xlink:href="#icon-align-full"></use></svg></button>' + '<br style="clear:both">' + '</div>' + '</div>' + (this.builder.settings.enableContentStyle ? '<div style="display:flex;flex-direction: column;">' + '<div style="padding-top:20px;padding-bottom: 3px;">' + out('Typography') + ':</div>' + '<div style="display:flex">' + '<button title="' + out('Change Style') + '" class="cmd-box-typography" data-value="+"> ' + out('Change Style') + ' </button>' + '<br style="clear:both">' + '</div>' + '</div>' : '') + '</div>' + '<div id="divBoxContentContainer" class="is-tab-content" data-group="boxsettings" style="padding-top:0">' + '<div style="padding-top:10px;">' + '<label for="chkParallaxContent" style="margin:0;"><input id="chkParallaxContent" type="checkbox" /> ' + out('Parallax') + '</label>' + '</div>' + '<div style="padding-top:10px;">' + '<label for="chkFadeContent" style="margin:0;"><input id="chkFadeContent" type="checkbox" /> ' + out('Fade') + '</label>' + '</div>' + '<div style="display:flex;flex-direction: row;">' + '<div style="display:flex;flex-direction: column;margin-right:20px;">' + '<div style="padding-top:13px;padding-bottom: 3px;">' + out('Position') + ':</div>' + '<div style="display:flex">' + '<button title="' + out('Top Left') + '" class="cmd-box-content-pos" data-value="topleft" style="width:40px;">&#8598;</button>' + '<button title="' + out('Top Center') + '" class="cmd-box-content-pos" data-value="topcenter" style="width:40px;border-left:none;">&#8593;</button>' + '<button title="' + out('Top Right') + '" class="cmd-box-content-pos" data-value="topright" style="width:40px;border-left:none;">&#8599;</button>' + '</div>' + '<div style="display:flex">' + '<button title="' + out('Middle Left') + '" class="cmd-box-content-pos" data-value="middleleft" style="width:40px;border-top:none;">&#8592;</button>' + '<button title="' + out('Middle Center') + '" class="cmd-box-content-pos" data-value="middlecenter" style="width:40px;border-left:none;border-top:none;">&#9737;</button>' + '<button title="' + out('Middle Right') + '" class="cmd-box-content-pos" data-value="middleright" style="width:40px;border-left:none;border-top:none;">&#8594;</button>' + '</div>' + '<div style="display:flex">' + '<button title="' + out('Bottom Left') + '" class="cmd-box-content-pos" data-value="bottomleft" style="width:40px;border-top:none;">&#8601;</button>' + '<button title="' + out('Bottom Center') + '" class="cmd-box-content-pos" data-value="bottomcenter" style="width:40px;border-left:none;border-top:none;">&#8595;</button>' + '<button title="' + out('Bottom Right') + '" class="cmd-box-content-pos" data-value="bottomright" style="width:40px;border-left:none;border-top:none;">&#8600;</button>' + '</div>' + '</div>' + '<div style="display:flex;flex-direction: column;">' + '<div style="padding-top:20px;padding-bottom: 1px;">' + out('Height') + ':</div>' + '<div style="display: flex;flex-direction: row;flex-wrap: wrap;">' + '<button title="' + out('Auto') + '" class="cmd-content-height" data-value="" style="width:60px">Auto</button>' + '<button title="' + out('Full') + '" class="cmd-content-height" data-value="100" style="width:40px">Full</button>' + '</div>' + '<div class="div-content-justify">' + '<div style="padding-top:10px;padding-bottom: 1px;">' + out('Justify') + ':</div>' + '<div style="display: flex;flex-direction: row;flex-wrap: wrap;">' + '<button title="' + out('Top') + '" class="cmd-content-justify" data-value="flex-start" style="width:40px"><svg class="is-icon-flex" style="width:14px;height:14px;"><use xlink:href="#icon-arrow-bar-to-up"></use></svg></button>' + '<button title="' + out('Bottom') + '" class="cmd-content-justify" data-value="flex-end" style="width:40px"><svg class="is-icon-flex" style="width:14px;height:14px;"><use xlink:href="#icon-arrow-bar-to-down"></use></svg></button>' + '<button title="' + out('Space Between') + '" class="cmd-content-justify" data-value="space-between" style="width:40px"><svg class="is-icon-flex" style="width:14px;height:14px;"><use xlink:href="#icon-space-between"></use></svg></button>' + '</div>' + '</div>' + '</div>' + '</div>' + '<div style="display:flex;flex-direction: column;">' + '<div style="padding-top:20px;padding-bottom: 3px;">' + out('Vertical Adjustment') + ':</div>' + '<div style="display:flex">' + '<button title="' + out('Decrease') + '" class="cmd-box-content-edge-y" data-value="-" style="width:40px;">-</button>' + '<button title="' + out('Increase') + '" class="cmd-box-content-edge-y" data-value="+" style="width:40px;border-left:none;">+</button>' + '<button title="' + out('Not Set') + '" class="cmd-box-content-edge-y" data-value="" style="display:none;width:40px;border-left:none;min-width:100px;">' + out('Not Set') + '</button>' + '</div>' + '</div>' + '<div style="display:flex;flex-direction: column;">' + '<div style="padding-top:20px;padding-bottom: 3px;">' + out('Horizontal Adjustment') + ':</div>' + '<div style="display:flex">' + '<button title="' + out('Decrease') + '" class="cmd-box-content-edge-x" data-value="-" style="width:40px;">-</button>' + '<button title="' + out('Increase') + '" class="cmd-box-content-edge-x" data-value="+" style="width:40px;border-left:none;">+</button>' + '<button title="' + out('Not Set') + '" class="cmd-box-content-edge-x" data-value="" style="display:none;width:40px;border-left:none;min-width:100px;">' + out('Not Set') + '</button>' + '</div>' + '</div>' + '<div style="padding-top:13px;">' + '<label for="chkAutofitContent" style="margin:0;"><input id="chkAutofitContent" type="checkbox" /> ' + out('Autofit Content on Mobile') + '</label>' + '</div>' + '</div>' + '<div id="divBoxImage" class="is-tab-content" data-group="boxsettings" style="padding-top:0">' + (this.builder.settings.onCoverImageSelectClick != null ? '<div style="padding-top:20px;">' + '<button class="cmd-box-selectasset" style="width:120px;">' + out('Select Image') + '</button>' + '</div>' + '<div style="padding-top:20px;">' + '<label for="chkAnimateBg" style="margin:0;"><input id="chkAnimateBg" type="checkbox" /> ' + out('Ken Burns Effect') + '</label>' + '</div>' : '<div style="padding-top:20px;">' + '<label for="chkAnimateBg" style="margin:0;"><input id="chkAnimateBg" type="checkbox" /> ' + out('Ken Burns Effect') + '</label>' + '</div>') + '<div style="padding-top:10px;">' + '<label for="chkParallaxBg" style="margin:0;"><input id="chkParallaxBg" type="checkbox" /> ' + out('Parallax') + ' & ' + out('Scale') + '</label>' + '</div>' + '<div style="padding-top:10px;">' + '<label for="chkParallaxBg2" style="margin:0;"><input id="chkParallaxBg2" type="checkbox" /> ' + out('Parallax') + '</label>' + '</div>' + '<div style="padding-top:20px;padding-bottom: 3px;">' + out('Overlay Color') + ':</div>' + '<div style="display:flex;">' + '<button title="' + out('Overlay Color') + '" class="input-box-overlaycolor is-btn-color" style="margin-right:15px"></button>' + '</div>' + '<div style="display:flex;flex-direction: column;">' + '<div style="padding-top:20px;padding-bottom: 3px;">' + out('Overlay Transparency') + ':</div>' + '<div style="display:flex">' + '<button title="' + out('Increase') + '" class="cmd-box-overlayopacity" data-value="+" style="width:40px;">+</button>' + '<button title="' + out('Decrease') + '" class="cmd-box-overlayopacity" data-value="-" style="width:40px;border-left:none;">-</button>' + '<button title="' + out('None') + '" class="cmd-box-overlayopacity" data-value="0" style="border-left:none;min-width:100px;">' + out('None') + '</button>' + '</div>' + '</div>' + '</div>' + '<div id="divBoxAnimate" class="is-tab-content" data-group="boxsettings" style="padding-top:0">' + '<div style="display:flex;flex-direction: column;">' + '<select class="cmd-box-animate">' + '<option value="">' + out('None') + '</option>' + '<option value="is-pulse">pulse</option>' + '<option value="is-bounceIn">bounceIn</option>' + '<option value="is-fadeIn">fadeIn</option>' + '<option value="is-fadeInDown">fadeInDown</option>' + '<option value="is-fadeInLeft">fadeInLeft</option>' + '<option value="is-fadeInRight">fadeInRight</option>' + '<option value="is-fadeInUp">fadeInUp</option>' + '<option value="is-flipInX">flipInX</option>' + '<option value="is-flipInY">flipInY</option>' + '<option value="is-slideInUp">slideInUp</option>' + '<option value="is-slideInDown">slideInDown</option>' + '<option value="is-slideInLeft">slideInLeft</option>' + '<option value="is-slideInRight">slideInRight</option>' + '<option value="is-zoomIn">zoomIn</option>' + '</select>' + '<label for="chkAnimOnce" style="margin:10px 0 0;"><input id="chkAnimOnce" type="checkbox" /> ' + out('Once') + '</label>' + '</div>' + '<div>' + '<label style="padding-top:20px;">' + out('Delay') + ': ' + '<select class="cmd-box-animatedelay" style="margin-top:3px;">' + '<option value="">' + out('None') + '</option>' + '<option value="delay-0ms">0s</option>' + '<option value="delay-100ms">100ms</option>' + '<option value="delay-200ms">200ms</option>' + '<option value="delay-300ms">300ms</option>' + '<option value="delay-400ms">400ms</option>' + '<option value="delay-500ms">500ms</option>' + '<option value="delay-600ms">600ms</option>' + '<option value="delay-700ms">700ms</option>' + '<option value="delay-800ms">800ms</option>' + '<option value="delay-900ms">900ms</option>' + '<option value="delay-1000ms">1000ms</option>' + '<option value="delay-1100ms">1100ms</option>' + '<option value="delay-1200ms">1200ms</option>' + '<option value="delay-1300ms">1300ms</option>' + '<option value="delay-1400ms">1400ms</option>' + '<option value="delay-1500ms">1500ms</option>' + '<option value="delay-1600ms">1600ms</option>' + '<option value="delay-1700ms">1700ms</option>' + '<option value="delay-1800ms">1800ms</option>' + '<option value="delay-1900ms">1900ms</option>' + '<option value="delay-2000ms">2000ms</option>' + '<option value="delay-2100ms">2100ms</option>' + '<option value="delay-2200ms">2200ms</option>' + '<option value="delay-2300ms">2300ms</option>' + '<option value="delay-2400ms">2400ms</option>' + '<option value="delay-2500ms">2500ms</option>' + '<option value="delay-2600ms">2600ms</option>' + '<option value="delay-2700ms">2700ms</option>' + '<option value="delay-2800ms">2800ms</option>' + '<option value="delay-2900ms">2900ms</option>' + '<option value="delay-3000ms">3000ms</option>' + '</select></label>' + '</div>' + '<div style="padding-top:20px">' + '<button class="cmd-box-animate-test" style="width:100%">' + out('Test') + '</button>' + '</div>' + '</div>' + '</div>' + '</div>' + '' + '<div class="is-modal pickphoto">' + '<div style="max-width:1000px;height:570px;padding:0;box-sizing:border-box;position:relative;">' + '<div class="is-modal-bar is-draggable" style="position: absolute;top: 0;left: 0;width: 100%;z-index:1;">' + out('Photos') + '</div>' + '<iframe style="position: absolute;top: 0;left: 0;width:100%;height:100%;border:none;border-top:40px solid transparent;margin:0;box-sizing:border-box;" src="about:blank"></iframe>' + '</div>' + '</div>' + '';
8047
8062
  dom$H.appendHtml(builderStuff, html); // Box Tool
8048
8063
 
@@ -8226,7 +8241,8 @@ class EditBox {
8226
8241
  container.style.maxWidth = '';
8227
8242
  dom$H.addClass(container, 'is-content-none'); //new
8228
8243
 
8229
- modalEditBox.querySelector('.inp-box-size').value = ''; //Trigger Change event
8244
+ modalEditBox.querySelector('.inp-box-size').value = '';
8245
+ modalEditBox.querySelector('.val-box-size').innerHTML = ''; //Trigger Change event
8230
8246
 
8231
8247
  this.builder.settings.onChange();
8232
8248
  return;
@@ -8252,13 +8268,16 @@ class EditBox {
8252
8268
 
8253
8269
  if (val <= 300) val = 300;
8254
8270
  if (val >= 2700) val = 2700;
8255
- }
8271
+ } // container.style.maxWidth = val +'px';
8272
+
8273
+
8274
+ container.style.maxWidth = ''; //remove inline style
8256
8275
 
8257
- container.style.maxWidth = val + 'px';
8258
8276
  dom$H.addClass(container, 'is-content-' + val); //new
8259
8277
  // dom.addClass(container, 'v2'); //new
8260
8278
 
8261
- modalEditBox.querySelector('.inp-box-size').value = val; //Trigger Change event
8279
+ modalEditBox.querySelector('.inp-box-size').value = val;
8280
+ modalEditBox.querySelector('.val-box-size').innerHTML = val; //Trigger Change event
8262
8281
 
8263
8282
  this.builder.settings.onChange();
8264
8283
  });
@@ -9489,6 +9508,9 @@ class EditBox {
9489
9508
  if (container) {
9490
9509
  let maxWidth = parseInt(container.style.maxWidth);
9491
9510
  if (!isNaN(maxWidth)) inpBoxSize.value = parseInt(container.style.maxWidth);
9511
+ modalEditBox.querySelector('.val-box-size').innerHTML = '';
9512
+ maxWidth = parseInt(window.getComputedStyle(container, null).getPropertyValue('max-width'));
9513
+ if (!isNaN(maxWidth)) modalEditBox.querySelector('.val-box-size').innerHTML = maxWidth;
9492
9514
  } // Animate Box
9493
9515
 
9494
9516
 
@@ -17427,6 +17449,88 @@ class Dom {
17427
17449
  }
17428
17450
 
17429
17451
  return value;
17452
+ } // execCommand replacement => for general, apply class to current element
17453
+
17454
+
17455
+ execCommandClass(newClassName, classList, currentElement = true) {
17456
+ const selection = this.getSelection();
17457
+ if (!selection) return;
17458
+ const anchorNode = selection.anchorNode;
17459
+
17460
+ if (anchorNode) {
17461
+ const container = anchorNode.nodeType !== Node.TEXT_NODE && anchorNode.nodeType !== Node.COMMENT_NODE ? anchorNode : anchorNode.parentElement;
17462
+ const sameSelection = container && container.innerText === selection.toString();
17463
+ let multi = false;
17464
+ var selectedNodes = [];
17465
+ var sel = rangy.getSelection();
17466
+
17467
+ for (var i = 0; i < sel.rangeCount; ++i) {
17468
+ selectedNodes = selectedNodes.concat(sel.getRangeAt(i).getNodes());
17469
+ }
17470
+
17471
+ const blockElms = ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'pre'];
17472
+ selectedNodes.forEach(item => {
17473
+ if (item.tagName) {
17474
+ const tagName = item.tagName.toLowerCase();
17475
+
17476
+ if (blockElms.indexOf(tagName) !== -1) {
17477
+ multi = true;
17478
+
17479
+ for (let i = 0; i < Object.keys(classList).length; i++) {
17480
+ let className = Object.values(classList)[i];
17481
+ this.removeClass(item, className);
17482
+ }
17483
+
17484
+ if (newClassName !== '') this.addClass(item, newClassName);
17485
+ this.cleanChildrenClass(item, classList);
17486
+ this.cleanUnusedSpan(item); // REVIEW
17487
+ }
17488
+ }
17489
+ });
17490
+ if (multi) return;
17491
+
17492
+ if (currentElement) {
17493
+ this.updateSelectionClass(newClassName, classList, container);
17494
+ } else {
17495
+ if (sameSelection || selection.toString().trim() === '') {
17496
+ this.updateSelectionClass(newClassName, classList, container);
17497
+ }
17498
+ }
17499
+ }
17500
+ }
17501
+
17502
+ updateSelectionClass(newClassName, classList, container) {
17503
+ for (let i = 0; i < Object.keys(classList).length; i++) {
17504
+ let className = Object.values(classList)[i];
17505
+ this.removeClass(container, className);
17506
+ }
17507
+
17508
+ if (newClassName !== '') this.addClass(container, newClassName);
17509
+ this.cleanChildrenClass(container, classList);
17510
+ this.cleanUnusedSpan(container); // REVIEW
17511
+
17512
+ return container;
17513
+ }
17514
+
17515
+ cleanChildrenClass(span, classList) {
17516
+ if (!span.hasChildNodes()) {
17517
+ return;
17518
+ }
17519
+
17520
+ Array.from(span.children).map(element => {
17521
+ for (let i = 0; i < Object.keys(classList).length; i++) {
17522
+ let className = Object.values(classList)[i];
17523
+ this.removeClass(element, className);
17524
+ }
17525
+ }); // Deeper childrens
17526
+
17527
+ const cleanChildrenChildren = Array.from(span.children).map(element => {
17528
+ return this.cleanChildrenClass(element, classList);
17529
+ });
17530
+
17531
+ if (!cleanChildrenChildren || cleanChildrenChildren.length <= 0) {
17532
+ return;
17533
+ }
17430
17534
  } // execCommand replacement => for CLASS
17431
17535
 
17432
17536
 
@@ -23427,6 +23531,7 @@ class HtmlUtil {
23427
23531
  const util = this.builder.util;
23428
23532
  const builderStuff = this.builder.builderStuff;
23429
23533
  const viewhtmlnormal = builderStuff.querySelector('.viewhtmlnormal');
23534
+ util.showModal(viewhtmlnormal, true, null, false);
23430
23535
  let iframe = viewhtmlnormal.querySelector('iframe');
23431
23536
  iframe.outerHTML = '<iframe id="ifrHtml" style="width:100%;height:100%;border: none;" src="about:blank"></iframe>'; //clear
23432
23537
 
@@ -23435,7 +23540,6 @@ class HtmlUtil {
23435
23540
  doc.write(this.getIframeHtml()); // use the same html as viewhtmllarger
23436
23541
 
23437
23542
  doc.close();
23438
- util.showModal(viewhtmlnormal, true, null, false);
23439
23543
  }
23440
23544
 
23441
23545
  viewHtmlLarger() {
@@ -60262,15 +60366,54 @@ class ColumnTool {
60262
60366
  <div id="divCellContent" class="is-tab-content" data-group="cellsettings">
60263
60367
 
60264
60368
  <div style="padding-bottom:3px;">${util.out('Padding')}:</div>
60265
- <div class="div-content-padding">
60266
- <button title="0" class="input-cell-padding" data-command="0">0</button>
60267
- <button title="10" class="input-cell-padding" data-command="10">10</button>
60268
- <button title="20" class="input-cell-padding" data-command="20">20</button>
60269
- <button title="30" class="input-cell-padding" data-command="30">30</button>
60270
- <button title="40" class="input-cell-padding" data-command="40">40</button>
60271
- <button title="50" class="input-cell-padding" data-command="50">50</button>
60272
- <button title="60" class="input-cell-padding" data-command="60">60</button>
60273
- <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>
60369
+
60370
+ <div class="div-content-padding-pos" style="align-items:center;${this.builder.useCssClasses ? '' : 'display:none'}">
60371
+ <div style="width:130px">
60372
+ <div style="display: flex;justify-content: center;">
60373
+ <button title="${util.out('Top')}" class="input-cell-padding-pos on" data-command="top">${util.out('Top')}</button>
60374
+ </div>
60375
+ <div style="display: flex;justify-content: center;">
60376
+ <button title="${util.out('Left')}" class="input-cell-padding-pos on" data-command="left">${util.out('Left')}</button>
60377
+ <button title="${util.out('Right')}" class="input-cell-padding-pos on" data-command="right">${util.out('Right')}</button>
60378
+ </div>
60379
+ <div style="display: flex;justify-content: center;">
60380
+ <button title="${util.out('Bottom')}" class="input-cell-padding-pos on" data-command="bottom">${util.out('Bottom')}</button>
60381
+ </div>
60382
+ </div>
60383
+ <button title="${util.out('All')}" class="input-cell-padding-pos" data-command="all">${util.out('All')}</button>
60384
+ <button title="x" class="input-cell-padding-pos" data-command="x" style="width:50px">x</button>
60385
+ <button title="y" class="input-cell-padding-pos" data-command="y" style="width:50px">y</button>
60386
+ </div>
60387
+
60388
+ <div class="div-content-padding" style="flex-flow:wrap">
60389
+ <div style="display:flex;flex-flow:wrap;${this.builder.useCssClasses ? 'display:none' : ''}">
60390
+ <button title="0" class="input-cell-padding" data-command="0">0</button>
60391
+ <button title="10" class="input-cell-padding" data-command="10">10</button>
60392
+ <button title="20" class="input-cell-padding" data-command="20">20</button>
60393
+ <button title="30" class="input-cell-padding" data-command="30">30</button>
60394
+ <button title="40" class="input-cell-padding" data-command="40">40</button>
60395
+ <button title="50" class="input-cell-padding" data-command="50">50</button>
60396
+ <button title="60" class="input-cell-padding" data-command="60">60</button>
60397
+ </div>
60398
+
60399
+ <div style="display:flex;flex-flow:wrap;${this.builder.useCssClasses ? '' : 'display:none'}">
60400
+ <button title="0" class="input-cell-padding" data-command="0">0</button>
60401
+ <button title="20" class="input-cell-padding" data-command="1">10</button>
60402
+ <button title="40" class="input-cell-padding" data-command="2">20</button>
60403
+ <button title="60" class="input-cell-padding" data-command="3">30</button>
60404
+ <button title="60" class="input-cell-padding" data-command="4">40</button>
60405
+ <button title="60" class="input-cell-padding" data-command="5">50</button>
60406
+ <button title="60" class="input-cell-padding" data-command="6">60</button>
60407
+ <button title="60" class="input-cell-padding" data-command="7">70</button>
60408
+ <button title="60" class="input-cell-padding" data-command="8">80</button>
60409
+ <button title="60" class="input-cell-padding" data-command="9">90</button>
60410
+ <button title="60" class="input-cell-padding" data-command="10">100</button>
60411
+ <button title="60" class="input-cell-padding" data-command="11">110</button>
60412
+ <button title="60" class="input-cell-padding" data-command="12">120</button>
60413
+ <button title="60" class="input-cell-padding" data-command="14">140</button>
60414
+ <button title="60" class="input-cell-padding" data-command="16">160</button>
60415
+ <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>
60416
+ </div>
60274
60417
  </div>
60275
60418
 
60276
60419
  <div style="padding-top:20px;padding-bottom:3px;">${util.out('Height')}:</div>
@@ -60884,6 +61027,36 @@ class ColumnTool {
60884
61027
  this.builder.opts.onChange();
60885
61028
  });
60886
61029
  });
61030
+ elms = cellSettings.querySelectorAll('.input-cell-padding-pos');
61031
+ Array.prototype.forEach.call(elms, elm => {
61032
+ dom$l.addEventListener(elm, 'click', () => {
61033
+ let val = elm.getAttribute('data-command');
61034
+ let ns = this.cellSettings.querySelectorAll('.input-cell-padding-pos');
61035
+ Array.prototype.forEach.call(ns, n => {
61036
+ dom$l.removeClass(n, 'on');
61037
+ });
61038
+
61039
+ if (val === 'all') {
61040
+ dom$l.addClass(this.cellSettings.querySelector('button[data-command="top"]'), 'on');
61041
+ dom$l.addClass(this.cellSettings.querySelector('button[data-command="left"]'), 'on');
61042
+ dom$l.addClass(this.cellSettings.querySelector('button[data-command="right"]'), 'on');
61043
+ dom$l.addClass(this.cellSettings.querySelector('button[data-command="bottom"]'), 'on');
61044
+ } else if (val === 'x') {
61045
+ dom$l.addClass(this.cellSettings.querySelector('button[data-command="left"]'), 'on');
61046
+ dom$l.addClass(this.cellSettings.querySelector('button[data-command="right"]'), 'on');
61047
+ } else if (val === 'y') {
61048
+ dom$l.addClass(this.cellSettings.querySelector('button[data-command="top"]'), 'on');
61049
+ dom$l.addClass(this.cellSettings.querySelector('button[data-command="bottom"]'), 'on');
61050
+ } else {
61051
+ dom$l.addClass(elm, 'on');
61052
+ }
61053
+
61054
+ let btns = this.cellSettings.querySelectorAll('.input-cell-padding');
61055
+ Array.prototype.forEach.call(btns, btn => {
61056
+ dom$l.removeClass(btn, 'on');
61057
+ });
61058
+ });
61059
+ });
60887
61060
  elms = cellSettings.querySelectorAll('.input-cell-padding');
60888
61061
  Array.prototype.forEach.call(elms, elm => {
60889
61062
  dom$l.addEventListener(elm, 'click', () => {
@@ -60894,17 +61067,180 @@ class ColumnTool {
60894
61067
  Array.prototype.forEach.call(ns, n => {
60895
61068
  dom$l.removeClass(n, 'on');
60896
61069
  });
60897
- dom$l.removeClass(cell, 'padding-0');
60898
- dom$l.removeClass(cell, 'padding-10');
60899
- dom$l.removeClass(cell, 'padding-20');
60900
- dom$l.removeClass(cell, 'padding-30');
60901
- dom$l.removeClass(cell, 'padding-40');
60902
- dom$l.removeClass(cell, 'padding-50');
60903
- dom$l.removeClass(cell, 'padding-60');
60904
-
60905
- if (val !== '') {
60906
- dom$l.addClass(cell, 'padding-' + val);
61070
+
61071
+ if (this.builder.useCssClasses) {
61072
+ // Clean old classes
61073
+ dom$l.removeClass(cell, 'padding-0');
61074
+ dom$l.removeClass(cell, 'padding-10');
61075
+ dom$l.removeClass(cell, 'padding-20');
61076
+ dom$l.removeClass(cell, 'padding-30');
61077
+ dom$l.removeClass(cell, 'padding-40');
61078
+ dom$l.removeClass(cell, 'padding-50');
61079
+ dom$l.removeClass(cell, 'padding-60');
61080
+ let command;
61081
+ let btns = this.cellSettings.querySelectorAll('.input-cell-padding-pos.on');
61082
+
61083
+ if (btns.length === 2) {
61084
+ // x or y selected
61085
+ command = btns[0].getAttribute('data-command');
61086
+
61087
+ if (command === 'left') {
61088
+ // x selected
61089
+ let classes = this.builder.cssClasses.padding.left;
61090
+
61091
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61092
+ let className = Object.values(classes)[i];
61093
+ dom$l.removeClass(cell, className);
61094
+ }
61095
+
61096
+ classes = this.builder.cssClasses.padding.right;
61097
+
61098
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61099
+ let className = Object.values(classes)[i];
61100
+ dom$l.removeClass(cell, className);
61101
+ }
61102
+
61103
+ classes = this.builder.cssClasses.padding.x;
61104
+
61105
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61106
+ let className = Object.values(classes)[i];
61107
+ dom$l.removeClass(cell, className);
61108
+ }
61109
+
61110
+ if (val !== '') dom$l.addClass(cell, this.builder.cssClasses.padding.x[`px_${val}`]);
61111
+ } else {
61112
+ // y selected
61113
+ let classes = this.builder.cssClasses.padding.top;
61114
+
61115
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61116
+ let className = Object.values(classes)[i];
61117
+ dom$l.removeClass(cell, className);
61118
+ }
61119
+
61120
+ classes = this.builder.cssClasses.padding.bottom;
61121
+
61122
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61123
+ let className = Object.values(classes)[i];
61124
+ dom$l.removeClass(cell, className);
61125
+ }
61126
+
61127
+ classes = this.builder.cssClasses.padding.y;
61128
+
61129
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61130
+ let className = Object.values(classes)[i];
61131
+ dom$l.removeClass(cell, className);
61132
+ }
61133
+
61134
+ if (val !== '') dom$l.addClass(cell, this.builder.cssClasses.padding.y[`py_${val}`]);
61135
+ }
61136
+ } else if (btns.length === 4) {
61137
+ // all selected
61138
+ let classes = this.builder.cssClasses.padding.top;
61139
+
61140
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61141
+ let className = Object.values(classes)[i];
61142
+ dom$l.removeClass(cell, className);
61143
+ }
61144
+
61145
+ classes = this.builder.cssClasses.padding.bottom;
61146
+
61147
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61148
+ let className = Object.values(classes)[i];
61149
+ dom$l.removeClass(cell, className);
61150
+ }
61151
+
61152
+ classes = this.builder.cssClasses.padding.left;
61153
+
61154
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61155
+ let className = Object.values(classes)[i];
61156
+ dom$l.removeClass(cell, className);
61157
+ }
61158
+
61159
+ classes = this.builder.cssClasses.padding.right;
61160
+
61161
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61162
+ let className = Object.values(classes)[i];
61163
+ dom$l.removeClass(cell, className);
61164
+ }
61165
+
61166
+ classes = this.builder.cssClasses.padding.all;
61167
+
61168
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61169
+ let className = Object.values(classes)[i];
61170
+ dom$l.removeClass(cell, className);
61171
+ }
61172
+
61173
+ classes = this.builder.cssClasses.padding.x;
61174
+
61175
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61176
+ let className = Object.values(classes)[i];
61177
+ dom$l.removeClass(cell, className);
61178
+ }
61179
+
61180
+ classes = this.builder.cssClasses.padding.y;
61181
+
61182
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61183
+ let className = Object.values(classes)[i];
61184
+ dom$l.removeClass(cell, className);
61185
+ }
61186
+
61187
+ if (val !== '') dom$l.addClass(cell, this.builder.cssClasses.padding.all[`p_${val}`]);
61188
+ } else {
61189
+ command = btns[0].getAttribute('data-command');
61190
+
61191
+ if (command === 'top') {
61192
+ let classes = this.builder.cssClasses.padding.top;
61193
+
61194
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61195
+ let className = Object.values(classes)[i];
61196
+ dom$l.removeClass(cell, className);
61197
+ }
61198
+
61199
+ if (val !== '') dom$l.addClass(cell, this.builder.cssClasses.padding.top[`pt_${val}`]);
61200
+ } else if (command === 'bottom') {
61201
+ let classes = this.builder.cssClasses.padding.bottom;
61202
+
61203
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61204
+ let className = Object.values(classes)[i];
61205
+ dom$l.removeClass(cell, className);
61206
+ }
61207
+
61208
+ if (val !== '') dom$l.addClass(cell, this.builder.cssClasses.padding.bottom[`pb_${val}`]);
61209
+ } else if (command === 'left') {
61210
+ let classes = this.builder.cssClasses.padding.left;
61211
+
61212
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61213
+ let className = Object.values(classes)[i];
61214
+ dom$l.removeClass(cell, className);
61215
+ }
61216
+
61217
+ if (val !== '') dom$l.addClass(cell, this.builder.cssClasses.padding.left[`pl_${val}`]);
61218
+ } else if (command === 'right') {
61219
+ let classes = this.builder.cssClasses.padding.right;
61220
+
61221
+ for (let i = 0; i < Object.keys(classes).length; i++) {
61222
+ let className = Object.values(classes)[i];
61223
+ dom$l.removeClass(cell, className);
61224
+ }
61225
+
61226
+ if (val !== '') dom$l.addClass(cell, this.builder.cssClasses.padding.right[`pr_${val}`]);
61227
+ }
61228
+ }
61229
+
60907
61230
  dom$l.addClass(elm, 'on');
61231
+ } else {
61232
+ dom$l.removeClass(cell, 'padding-0');
61233
+ dom$l.removeClass(cell, 'padding-10');
61234
+ dom$l.removeClass(cell, 'padding-20');
61235
+ dom$l.removeClass(cell, 'padding-30');
61236
+ dom$l.removeClass(cell, 'padding-40');
61237
+ dom$l.removeClass(cell, 'padding-50');
61238
+ dom$l.removeClass(cell, 'padding-60');
61239
+
61240
+ if (val !== '') {
61241
+ dom$l.addClass(cell, 'padding-' + val);
61242
+ dom$l.addClass(elm, 'on');
61243
+ }
60908
61244
  } //Trigger Change event
60909
61245
 
60910
61246
 
@@ -69689,103 +70025,168 @@ class Rte {
69689
70025
  let num = btn.getAttribute('data-value');
69690
70026
  util.restoreSelection(); //a must
69691
70027
 
69692
- let elm;
70028
+ this.builder.uo.saveForUndo();
69693
70029
 
69694
- try {
69695
- let curr;
70030
+ if (this.builder.useCssClasses) {
70031
+ const selection = dom$5.getSelection();
70032
+ if (!selection) return;
70033
+ const anchorNode = selection.anchorNode;
70034
+ let container;
69696
70035
 
69697
- if (window.getSelection) {
69698
- curr = window.getSelection().getRangeAt(0).commonAncestorContainer;
70036
+ if (anchorNode) {
70037
+ container = anchorNode.nodeType !== Node.TEXT_NODE && anchorNode.nodeType !== Node.COMMENT_NODE ? anchorNode : anchorNode.parentElement;
70038
+ }
69699
70039
 
69700
- if (curr.nodeType === 3) {
69701
- //text node
69702
- elm = curr.parentNode;
69703
- } else {
69704
- elm = curr;
70040
+ if (!container) return; // ex. when selecting an icon
70041
+
70042
+ let newClassName;
70043
+ const classes = this.builder.cssClasses.leading;
70044
+
70045
+ if (num === '') {
70046
+ // clean
70047
+ newClassName = '';
70048
+ } else if (num === '+' || num === '-') {
70049
+ for (let i = 0; i < Object.keys(classes).length; i++) {
70050
+ let className = Object.values(classes)[i];
70051
+
70052
+ if (dom$5.hasClass(container, className)) {
70053
+ if (num === '+') {
70054
+ if (i + 1 === Object.keys(classes).length) return;
70055
+ newClassName = Object.values(classes)[i + 1];
70056
+ break;
70057
+ } else if (num === '-') {
70058
+ if (i - 1 < 0) return;
70059
+ newClassName = Object.values(classes)[i - 1];
70060
+ break;
70061
+ }
70062
+ }
69705
70063
  }
69706
- } else if (document.selection) {
69707
- curr = document.selection.createRange();
69708
- elm = document.selection.createRange().parentElement();
69709
- }
69710
- } catch (e) {
69711
- if (this.builder.activeIcon) {
69712
- // If icon is selected, the selection will not be a text selection
69713
- elm = this.builder.activeIcon;
69714
70064
  } else {
69715
- return;
70065
+ if (num === '1') {
70066
+ newClassName = classes.leading_10;
70067
+ } else if (num === '1.2') {
70068
+ newClassName = classes.leading_12;
70069
+ } else if (num === '1.4') {
70070
+ newClassName = classes.leading_14;
70071
+ } else if (num === '1.6') {
70072
+ newClassName = classes.leading_16;
70073
+ } else if (num === '1.8') {
70074
+ newClassName = classes.leading_18;
70075
+ } else if (num === '2') {
70076
+ newClassName = classes.leading_20;
70077
+ } else if (num === '2.2') {
70078
+ newClassName = classes.leading_22;
70079
+ }
69716
70080
  }
69717
- } // If icon is selected
69718
70081
 
70082
+ if (!newClassName) {
70083
+ if (num === '+') {
70084
+ newClassName = classes.leading_16;
70085
+ } else if (num === '-') {
70086
+ newClassName = classes.leading_14;
70087
+ }
70088
+ }
69719
70089
 
69720
- if (this.builder.activeIcon) {
69721
- elm = this.builder.activeIcon;
69722
- } // Find block element (line-height only works on block element)
70090
+ dom$5.execCommandClass(newClassName, classes);
70091
+ } else {
70092
+ let elm;
69723
70093
 
70094
+ try {
70095
+ let curr;
69724
70096
 
69725
- let element = elm;
70097
+ if (window.getSelection) {
70098
+ curr = window.getSelection().getRangeAt(0).commonAncestorContainer;
69726
70099
 
69727
- while (element) {
69728
- if (element.tagName === 'BODY' || element.tagName === 'HTML') return false;
70100
+ if (curr.nodeType === 3) {
70101
+ //text node
70102
+ elm = curr.parentNode;
70103
+ } else {
70104
+ elm = curr;
70105
+ }
70106
+ } else if (document.selection) {
70107
+ curr = document.selection.createRange();
70108
+ elm = document.selection.createRange().parentElement();
70109
+ }
70110
+ } catch (e) {
70111
+ if (this.builder.activeIcon) {
70112
+ // If icon is selected, the selection will not be a text selection
70113
+ elm = this.builder.activeIcon;
70114
+ } else {
70115
+ return;
70116
+ }
70117
+ } // If icon is selected
69729
70118
 
69730
- if (window.getComputedStyle(element).getPropertyValue('display') !== 'inline') {
69731
- elm = element;
69732
- break;
69733
- }
69734
70119
 
69735
- element = element.parentNode;
69736
- } // var text = dom.getSelected();
70120
+ if (this.builder.activeIcon) {
70121
+ elm = this.builder.activeIcon;
70122
+ } // Find block element (line-height only works on block element)
70123
+
70124
+
70125
+ let element = elm;
69737
70126
 
70127
+ while (element) {
70128
+ if (element.tagName === 'BODY' || element.tagName === 'HTML') return false;
69738
70129
 
69739
- this.builder.uo.saveForUndo(); // let currentLineHeight = Number(window.getComputedStyle(elm).getPropertyValue('line-height').match(/\d+/)[0]);
70130
+ if (window.getComputedStyle(element).getPropertyValue('display') !== 'inline') {
70131
+ elm = element;
70132
+ break;
70133
+ }
70134
+
70135
+ element = element.parentNode;
70136
+ } // var text = dom.getSelected();
70137
+ // let currentLineHeight = Number(window.getComputedStyle(elm).getPropertyValue('line-height').match(/\d+/)[0]);
69740
70138
 
69741
- let isInPx = false;
69742
- let currentLineHeight = elm.style.lineHeight;
69743
70139
 
69744
- if (currentLineHeight) {
69745
- if (currentLineHeight.indexOf('px') === -1) {
69746
- currentLineHeight = parseFloat(currentLineHeight);
70140
+ let isInPx = false;
70141
+ let currentLineHeight = elm.style.lineHeight;
70142
+
70143
+ if (currentLineHeight) {
70144
+ if (currentLineHeight.indexOf('px') === -1) {
70145
+ currentLineHeight = parseFloat(currentLineHeight);
70146
+ } else {
70147
+ isInPx = true;
70148
+ }
69747
70149
  } else {
69748
70150
  isInPx = true;
69749
70151
  }
69750
- } else {
69751
- isInPx = true;
69752
- }
69753
70152
 
69754
- if (isInPx) {
69755
- let fontSize = Number(window.getComputedStyle(elm).getPropertyValue('font-size').match(/\d+/)[0]);
69756
- currentLineHeight = Number(window.getComputedStyle(elm).getPropertyValue('line-height').match(/\d+/)[0]);
70153
+ if (isInPx) {
70154
+ let fontSize = Number(window.getComputedStyle(elm).getPropertyValue('font-size').match(/\d+/)[0]);
70155
+ currentLineHeight = Number(window.getComputedStyle(elm).getPropertyValue('line-height').match(/\d+/)[0]);
69757
70156
 
69758
- if (fontSize > currentLineHeight) {
69759
- currentLineHeight = fontSize / currentLineHeight;
69760
- } else if (fontSize < currentLineHeight) {
69761
- currentLineHeight = currentLineHeight / fontSize;
69762
- } else {
69763
- currentLineHeight = 1;
70157
+ if (fontSize > currentLineHeight) {
70158
+ currentLineHeight = fontSize / currentLineHeight;
70159
+ } else if (fontSize < currentLineHeight) {
70160
+ currentLineHeight = currentLineHeight / fontSize;
70161
+ } else {
70162
+ currentLineHeight = 1;
70163
+ }
69764
70164
  }
69765
- }
69766
70165
 
69767
- let lineheight;
70166
+ let lineheight;
69768
70167
 
69769
- if (num === '+') {
69770
- lineheight = currentLineHeight + 0.1;
69771
- } else if (num === '-') {
69772
- lineheight = currentLineHeight - 0.1;
69773
- if (lineheight < 0.2) lineheight = 0.2; // prevent very small number
69774
- } else if (num === '') {
69775
- lineheight = '';
69776
- } else {
69777
- lineheight = num;
69778
- }
69779
- /** mod by Jack */
69780
- //elm.style.lineHeight = lineheight;
70168
+ if (num === '+') {
70169
+ lineheight = currentLineHeight + 0.1;
70170
+ } else if (num === '-') {
70171
+ lineheight = currentLineHeight - 0.1;
70172
+ if (lineheight < 0.2) lineheight = 0.2; // prevent very small number
70173
+ } else if (num === '') {
70174
+ lineheight = '';
70175
+ } else {
70176
+ lineheight = num;
70177
+ }
70178
+ /** mod by Jack */
70179
+ //elm.style.lineHeight = lineheight;
69781
70180
 
69782
70181
 
69783
- dom$5.doFunction(elm, function (theEl) {
69784
- // apply to block element only
69785
- if (window.getComputedStyle(theEl).getPropertyValue('display') !== 'inline') {
69786
- theEl.style.lineHeight = lineheight;
69787
- }
69788
- }, true); //save selection
70182
+ dom$5.doFunction(elm, function (theEl) {
70183
+ // apply to block element only
70184
+ if (window.getComputedStyle(theEl).getPropertyValue('display') !== 'inline') {
70185
+ theEl.style.lineHeight = lineheight;
70186
+ }
70187
+ }, true);
70188
+ } //save selection
70189
+
69789
70190
 
69790
70191
  util.saveSelection();
69791
70192
  this.getState(); //Trigger Change event
@@ -69806,60 +70207,118 @@ class Rte {
69806
70207
  let num = btn.getAttribute('data-value');
69807
70208
  util.restoreSelection(); //a must
69808
70209
 
69809
- let elm;
70210
+ this.builder.uo.saveForUndo();
69810
70211
 
69811
- try {
69812
- let curr;
70212
+ if (this.builder.useCssClasses) {
70213
+ const selection = dom$5.getSelection();
70214
+ if (!selection) return;
70215
+ const anchorNode = selection.anchorNode;
70216
+ let container;
69813
70217
 
69814
- if (window.getSelection) {
69815
- curr = window.getSelection().getRangeAt(0).commonAncestorContainer;
70218
+ if (anchorNode) {
70219
+ container = anchorNode.nodeType !== Node.TEXT_NODE && anchorNode.nodeType !== Node.COMMENT_NODE ? anchorNode : anchorNode.parentElement;
70220
+ }
69816
70221
 
69817
- if (curr.nodeType === 3) {
69818
- //text node
69819
- elm = curr.parentNode;
69820
- } else {
69821
- elm = curr;
70222
+ if (!container) return; // ex. when selecting an icon
70223
+
70224
+ let newClassName;
70225
+ const classes = this.builder.cssClasses.tracking;
70226
+
70227
+ if (num === '') {
70228
+ // clean
70229
+ newClassName = '';
70230
+ } else if (num === '+' || num === '-') {
70231
+ for (let i = 0; i < Object.keys(classes).length; i++) {
70232
+ let className = Object.values(classes)[i];
70233
+
70234
+ if (dom$5.hasClass(container, className)) {
70235
+ if (num === '+') {
70236
+ if (i + 1 === Object.keys(classes).length) return;
70237
+ newClassName = Object.values(classes)[i + 1];
70238
+ break;
70239
+ } else if (num === '-') {
70240
+ if (i - 1 < 0) return;
70241
+ newClassName = Object.values(classes)[i - 1];
70242
+ break;
70243
+ }
70244
+ }
70245
+ }
70246
+ } else {
70247
+ if (num === '1') {
70248
+ newClassName = classes.tracking_025;
70249
+ }
70250
+
70251
+ if (num === '2') {
70252
+ newClassName = classes.tracking_050;
69822
70253
  }
69823
- } else if (document.selection) {
69824
- curr = document.selection.createRange();
69825
- elm = document.selection.createRange().parentElement();
69826
70254
  }
69827
- } catch (e) {
70255
+
70256
+ if (!newClassName) {
70257
+ if (num === '+') {
70258
+ newClassName = classes.tracking_025;
70259
+ } else if (num === '-') {
70260
+ newClassName = classes.tracking__025;
70261
+ }
70262
+ }
70263
+
70264
+ if (newClassName === classes.tracking_000) newClassName = ''; // clear for normal tracking
70265
+
70266
+ dom$5.execCommandClass(newClassName, classes);
70267
+ } else {
70268
+ let elm;
70269
+
70270
+ try {
70271
+ let curr;
70272
+
70273
+ if (window.getSelection) {
70274
+ curr = window.getSelection().getRangeAt(0).commonAncestorContainer;
70275
+
70276
+ if (curr.nodeType === 3) {
70277
+ //text node
70278
+ elm = curr.parentNode;
70279
+ } else {
70280
+ elm = curr;
70281
+ }
70282
+ } else if (document.selection) {
70283
+ curr = document.selection.createRange();
70284
+ elm = document.selection.createRange().parentElement();
70285
+ }
70286
+ } catch (e) {
70287
+ if (this.builder.activeIcon) {
70288
+ // If icon is selected, the selection will not be a text selection
70289
+ elm = this.builder.activeIcon;
70290
+ } else {
70291
+ return;
70292
+ }
70293
+ } // If icon is selected
70294
+
70295
+
69828
70296
  if (this.builder.activeIcon) {
69829
- // If icon is selected, the selection will not be a text selection
69830
70297
  elm = this.builder.activeIcon;
69831
- } else {
69832
- return;
69833
70298
  }
69834
- } // If icon is selected
69835
70299
 
70300
+ let currentLetterSpacing = parseInt(window.getComputedStyle(elm).getPropertyValue('letter-spacing'));
70301
+ if (isNaN(currentLetterSpacing)) currentLetterSpacing = 0;
70302
+ let letterspacing;
69836
70303
 
69837
- if (this.builder.activeIcon) {
69838
- elm = this.builder.activeIcon;
69839
- } // var text = dom.getSelected();
70304
+ if (num === '+') {
70305
+ letterspacing = currentLetterSpacing + 1 + 'px';
70306
+ } else if (num === '-') {
70307
+ letterspacing = currentLetterSpacing - 1 + 'px';
70308
+ } else if (num === '') {
70309
+ letterspacing = '';
70310
+ } else {
70311
+ letterspacing = num + 'px';
70312
+ }
70313
+ /** mod by Jack */
70314
+ //elm.style.letterSpacing = letterspacing;
69840
70315
 
69841
70316
 
69842
- this.builder.uo.saveForUndo();
69843
- let currentLetterSpacing = parseInt(window.getComputedStyle(elm).getPropertyValue('letter-spacing'));
69844
- if (isNaN(currentLetterSpacing)) currentLetterSpacing = 0;
69845
- let letterspacing;
69846
-
69847
- if (num === '+') {
69848
- letterspacing = currentLetterSpacing + 1 + 'px';
69849
- } else if (num === '-') {
69850
- letterspacing = currentLetterSpacing - 1 + 'px';
69851
- } else if (num === '') {
69852
- letterspacing = '';
69853
- } else {
69854
- letterspacing = num + 'px';
69855
- }
69856
- /** mod by Jack */
69857
- //elm.style.letterSpacing = letterspacing;
69858
-
70317
+ dom$5.doFunction(elm, function (theEl) {
70318
+ theEl.style.letterSpacing = letterspacing;
70319
+ }, true);
70320
+ } //save selection
69859
70321
 
69860
- dom$5.doFunction(elm, function (theEl) {
69861
- theEl.style.letterSpacing = letterspacing;
69862
- }, true); //save selection
69863
70322
 
69864
70323
  util.saveSelection();
69865
70324
  this.getState(); //Trigger Change event
@@ -72950,6 +73409,192 @@ class ContentBuilder {
72950
73409
  capitalize: 'capitalize',
72951
73410
  normal: 'normal-case'
72952
73411
  },
73412
+ tracking: {
73413
+ tracking__100: 'tracking--100',
73414
+ tracking__075: 'tracking--75',
73415
+ tracking__050: 'tracking-tighter',
73416
+ tracking__025: 'tracking-tight',
73417
+ tracking_000: 'tracking-normal',
73418
+ tracking_025: 'tracking-wide',
73419
+ tracking_050: 'tracking-wider',
73420
+ tracking_075: 'tracking-75',
73421
+ tracking_100: 'tracking-widest',
73422
+ tracking_125: 'tracking-125',
73423
+ tracking_150: 'tracking-150',
73424
+ tracking_175: 'tracking-175',
73425
+ tracking_200: 'tracking-200',
73426
+ tracking_225: 'tracking-225',
73427
+ tracking_250: 'tracking-250',
73428
+ tracking_275: 'tracking-275',
73429
+ tracking_300: 'tracking-300',
73430
+ tracking_325: 'tracking-325',
73431
+ tracking_350: 'tracking-350',
73432
+ tracking_375: 'tracking-375',
73433
+ tracking_400: 'tracking-400',
73434
+ tracking_425: 'tracking-425',
73435
+ tracking_450: 'tracking-450',
73436
+ tracking_475: 'tracking-475',
73437
+ tracking_500: 'tracking-500'
73438
+ },
73439
+ leading: {
73440
+ leading_5: 'leading-05',
73441
+ leading_6: 'leading-06',
73442
+ leading_7: 'leading-07',
73443
+ leading_8: 'leading-08',
73444
+ leading_9: 'leading-09',
73445
+ leading_10: 'leading-none',
73446
+ leading_11: 'leading-11',
73447
+ leading_12: 'leading-12',
73448
+ leading_125: 'leading-tight',
73449
+ leading_13: 'leading-13',
73450
+ leading_1375: 'leading-snug',
73451
+ leading_14: 'leading-14',
73452
+ leading_15: 'leading-normal',
73453
+ leading_16: 'leading-16',
73454
+ leading_1625: 'leading-relaxed',
73455
+ leading_17: 'leading-17',
73456
+ leading_18: 'leading-18',
73457
+ leading_19: 'leading-19',
73458
+ leading_20: 'leading-loose',
73459
+ leading_21: 'leading-21',
73460
+ leading_22: 'leading-22',
73461
+ leading_23: 'leading-23',
73462
+ leading_24: 'leading-24',
73463
+ leading_25: 'leading-25',
73464
+ leading_26: 'leading-26',
73465
+ leading_27: 'leading-27',
73466
+ leading_28: 'leading-28',
73467
+ leading_29: 'leading-29',
73468
+ leading_30: 'leading-30'
73469
+ },
73470
+ padding: {
73471
+ all: {
73472
+ p_0: 'p-0',
73473
+ p_1: 'p-1',
73474
+ p_2: 'p-2',
73475
+ p_3: 'p-3',
73476
+ p_4: 'p-4',
73477
+ p_5: 'p-5',
73478
+ p_6: 'p-6',
73479
+ p_7: 'p-7',
73480
+ p_8: 'p-8',
73481
+ p_9: 'p-9',
73482
+ p_10: 'p-10',
73483
+ p_11: 'p-11',
73484
+ p_12: 'p-12',
73485
+ p_14: 'p-14',
73486
+ p_16: 'p-16',
73487
+ p_20: 'p-20'
73488
+ },
73489
+ x: {
73490
+ px_0: 'px-0',
73491
+ px_1: 'px-1',
73492
+ px_2: 'px-2',
73493
+ px_3: 'px-3',
73494
+ px_4: 'px-4',
73495
+ px_5: 'px-5',
73496
+ px_6: 'px-6',
73497
+ px_7: 'px-7',
73498
+ px_8: 'px-8',
73499
+ px_9: 'px-9',
73500
+ px_10: 'px-10',
73501
+ px_11: 'px-11',
73502
+ px_12: 'px-12',
73503
+ px_14: 'px-14',
73504
+ px_16: 'px-16',
73505
+ px_20: 'px-20'
73506
+ },
73507
+ y: {
73508
+ py_0: 'py-0',
73509
+ py_1: 'py-1',
73510
+ py_2: 'py-2',
73511
+ py_3: 'py-3',
73512
+ py_4: 'py-4',
73513
+ py_5: 'py-5',
73514
+ py_6: 'py-6',
73515
+ py_7: 'py-7',
73516
+ py_8: 'py-8',
73517
+ py_9: 'py-9',
73518
+ py_10: 'py-10',
73519
+ py_11: 'py-11',
73520
+ py_12: 'py-12',
73521
+ py_14: 'py-14',
73522
+ py_16: 'py-16',
73523
+ py_20: 'py-20'
73524
+ },
73525
+ top: {
73526
+ pt_0: 'pt-0',
73527
+ pt_1: 'pt-1',
73528
+ pt_2: 'pt-2',
73529
+ pt_3: 'pt-3',
73530
+ pt_4: 'pt-4',
73531
+ pt_5: 'pt-5',
73532
+ pt_6: 'pt-6',
73533
+ pt_7: 'pt-7',
73534
+ pt_8: 'pt-8',
73535
+ pt_9: 'pt-9',
73536
+ pt_10: 'pt-10',
73537
+ pt_11: 'pt-11',
73538
+ pt_12: 'pt-12',
73539
+ pt_14: 'pt-14',
73540
+ pt_16: 'pt-16',
73541
+ pt_20: 'pt-20'
73542
+ },
73543
+ right: {
73544
+ pr_0: 'pr-0',
73545
+ pr_1: 'pr-1',
73546
+ pr_2: 'pr-2',
73547
+ pr_3: 'pr-3',
73548
+ pr_4: 'pr-4',
73549
+ pr_5: 'pr-5',
73550
+ pr_6: 'pr-6',
73551
+ pr_7: 'pr-7',
73552
+ pr_8: 'pr-8',
73553
+ pr_9: 'pr-9',
73554
+ pr_10: 'pr-10',
73555
+ pr_11: 'pr-11',
73556
+ pr_12: 'pr-12',
73557
+ pr_14: 'pr-14',
73558
+ pr_16: 'pr-16',
73559
+ pr_20: 'pr-20'
73560
+ },
73561
+ bottom: {
73562
+ pb_0: 'pb-0',
73563
+ pb_1: 'pb-1',
73564
+ pb_2: 'pb-2',
73565
+ pb_3: 'pb-3',
73566
+ pb_4: 'pb-4',
73567
+ pb_5: 'pb-5',
73568
+ pb_6: 'pb-6',
73569
+ pb_7: 'pb-7',
73570
+ pb_8: 'pb-8',
73571
+ pb_9: 'pb-9',
73572
+ pb_10: 'pb-10',
73573
+ pb_11: 'pb-11',
73574
+ pb_12: 'pb-12',
73575
+ pb_14: 'pb-14',
73576
+ pb_16: 'pb-16',
73577
+ pb_20: 'pb-20'
73578
+ },
73579
+ left: {
73580
+ pl_0: 'pl-0',
73581
+ pl_1: 'pl-1',
73582
+ pl_2: 'pl-2',
73583
+ pl_3: 'pl-3',
73584
+ pl_4: 'pl-4',
73585
+ pl_5: 'pl-5',
73586
+ pl_6: 'pl-6',
73587
+ pl_7: 'pl-7',
73588
+ pl_8: 'pl-8',
73589
+ pl_9: 'pl-9',
73590
+ pl_10: 'pl-10',
73591
+ pl_11: 'pl-11',
73592
+ pl_12: 'pl-12',
73593
+ pl_14: 'pl-14',
73594
+ pl_16: 'pl-16',
73595
+ pl_20: 'pl-20'
73596
+ }
73597
+ },
72953
73598
  extend: {
72954
73599
  superscript: 'sup',
72955
73600
  subscript: 'sub'
@@ -73026,6 +73671,11 @@ class ContentBuilder {
73026
73671
  this.opts.cols = ['col-md-1', 'col-md-2', 'col-md-3', 'col-md-4', 'col-md-5', 'col-md-6', 'col-md-7', 'col-md-8', 'col-md-9', 'col-md-10', 'col-md-11', 'col-md-12'];
73027
73672
  this.opts.colequal = [];
73028
73673
  this.opts.colsizes = [];
73674
+ } else if (this.opts.framework === 'tailwind') {
73675
+ this.opts.row = 'flex flex-col md:flex-row';
73676
+ this.opts.cols = ['w-full md:w-1/12 px-4', 'w-full md:w-2/12 px-4', 'w-full md:w-3/12 px-4', 'w-full md:w-4/12 px-4', 'w-full md:w-5/12 px-4', 'w-full md:w-6/12 px-4', 'w-full md:w-7/12 px-4', 'w-full md:w-8/12 px-4', 'w-full md:w-9/12 px-4', 'w-full md:w-10/12 px-4', 'w-full md:w-11/12 px-4', 'w-full px-4'];
73677
+ this.opts.colequal = [];
73678
+ this.opts.colsizes = [];
73029
73679
  } else if (this.opts.framework === 'foundation') {
73030
73680
  this.opts.row = 'row';
73031
73681
  this.opts.cols = ['large-1 columns', 'large-2 columns', 'large-3 columns', 'large-4 columns', 'large-5 columns', 'large-6 columns', 'large-7 columns', 'large-8 columns', 'large-9 columns', 'large-10 columns', 'large-11 columns', 'large-12 columns'];
@@ -73746,10 +74396,10 @@ class ContentBuilder {
73746
74396
  }
73747
74397
  }
73748
74398
 
73749
- this.builder.cleanHtmlFormatting = true;
74399
+ this.cleanHtmlFormatting = true;
73750
74400
  let outputHtml = htmlutil.readHtml(area); //for view=false
73751
74401
 
73752
- this.builder.cleanHtmlFormatting = false;
74402
+ this.cleanHtmlFormatting = false;
73753
74403
  return outputHtml;
73754
74404
  } // ContentBox
73755
74405