@innovastudio/contentbox 1.6.91 → 1.6.93
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.
@@ -13193,6 +13193,11 @@ class PanelBox {
|
|
13193
13193
|
<button title="${out('Increase')}" data-content-size="+"><svg><use xlink:href="#icon-plus2"></use></svg></button>
|
13194
13194
|
</div>
|
13195
13195
|
|
13196
|
+
<label class="label checkbox mt-3" style="margin-bottom:15px">
|
13197
|
+
<input type="checkbox" class="chk-lock-contentsize" />
|
13198
|
+
<span>${out('Lock Content Size')}</span>
|
13199
|
+
</label>
|
13200
|
+
|
13196
13201
|
<div class="flex">
|
13197
13202
|
<div class="mr-4">
|
13198
13203
|
<div class="label mt-2">${out('Position')}:</div>
|
@@ -13729,6 +13734,11 @@ class PanelBox {
|
|
13729
13734
|
chkParallax.addEventListener('click', () => {
|
13730
13735
|
let isParallax = chkParallax.checked;
|
13731
13736
|
this.box.parallaxContent(isParallax);
|
13737
|
+
});
|
13738
|
+
const chkLockContentSize = panel.querySelector('.chk-lock-contentsize');
|
13739
|
+
chkLockContentSize.addEventListener('click', () => {
|
13740
|
+
let isLockContentSize = chkLockContentSize.checked;
|
13741
|
+
this.box.lockContentSize(isLockContentSize);
|
13732
13742
|
}); // Text
|
13733
13743
|
|
13734
13744
|
const btnTextAlign = panel.querySelectorAll('[data-align]');
|
@@ -14285,6 +14295,16 @@ class PanelBox {
|
|
14285
14295
|
chkParallax.checked = true;
|
14286
14296
|
}
|
14287
14297
|
}
|
14298
|
+
} // Lock Content Size
|
14299
|
+
|
14300
|
+
|
14301
|
+
const chkLockContentSize = panel.querySelector('.chk-lock-contentsize');
|
14302
|
+
chkLockContentSize.checked = false;
|
14303
|
+
|
14304
|
+
if (container) {
|
14305
|
+
if (container.classList.contains('v3')) {
|
14306
|
+
chkLockContentSize.checked = true;
|
14307
|
+
}
|
14288
14308
|
} // Text Color
|
14289
14309
|
|
14290
14310
|
|
@@ -27883,10 +27903,10 @@ const renderQuickAdd = builder => {
|
|
27883
27903
|
elm = quickadd.querySelector('.add-video');
|
27884
27904
|
dom.addEventListener(elm, 'click', () => {
|
27885
27905
|
const mode = quickadd.getAttribute('data-mode');
|
27886
|
-
let html = `<video style="width: 100%;" loop="" autoplay="">
|
27906
|
+
let html = `<video style="width: 100%;" loop="" playsinline="" muted="" autoplay="">
|
27887
27907
|
<source src="${builder.opts.snippetPath}example.mp4" type="video/mp4"></video>`;
|
27888
27908
|
if (builder.opts.snippetSampleVideo) {
|
27889
|
-
html = `<video style="width: 100%;" loop="" autoplay="">
|
27909
|
+
html = `<video style="width: 100%;" loop="" playsinline="" muted="" autoplay="">
|
27890
27910
|
<source src="${builder.opts.snippetSampleVideo}" type="video/mp4"></video>`;
|
27891
27911
|
}
|
27892
27912
|
util.addContent(html, mode);
|
@@ -31723,15 +31743,15 @@ class Util$1 {
|
|
31723
31743
|
} else {
|
31724
31744
|
newelement.click();
|
31725
31745
|
}
|
31726
|
-
const builderStuff = this.builder.builderStuff;
|
31727
|
-
let quickadd = builderStuff.querySelector('.quickadd');
|
31728
|
-
this.hidePop(quickadd);
|
31729
31746
|
|
31730
31747
|
// LATER: auto scroll
|
31731
31748
|
|
31732
31749
|
// LATER: If image, then it needs time to load (resulting incorrect position), so hide element tool.
|
31733
31750
|
}
|
31734
31751
|
|
31752
|
+
const builderStuff = this.builder.builderStuff;
|
31753
|
+
let quickadd = builderStuff.querySelector('.quickadd');
|
31754
|
+
if (quickadd) this.hidePop(quickadd);
|
31735
31755
|
if (this.builder.useCssClasses) {
|
31736
31756
|
let builderActive = this.builder.doc.querySelector('.builder-active');
|
31737
31757
|
if (builderActive) dom.contentReformat(builderActive, this.builder.cssClasses);
|
@@ -41026,6 +41046,16 @@ class HtmlUtil {
|
|
41026
41046
|
imgUrl = convertMediaUrl(imgUrl);
|
41027
41047
|
elm.setAttribute('href', `${imgUrl}`);
|
41028
41048
|
}
|
41049
|
+
if (elm.tagName.toLowerCase() === 'a') {
|
41050
|
+
//lightbox
|
41051
|
+
let s = elm.getAttribute('href');
|
41052
|
+
let extension = s.split('.').pop().split('?')[0].split('#')[0]; //
|
41053
|
+
extension = extension.toLowerCase();
|
41054
|
+
if (extension === 'jpg' || extension === 'jpeg' || extension === 'png' || extension === 'gif' || extension === 'webm' || extension === 'webp' || extension === 'mp4' || extension === 'mp3') {
|
41055
|
+
let mediaUrl = convertMediaUrl(s);
|
41056
|
+
elm.setAttribute('href', `${mediaUrl}`);
|
41057
|
+
}
|
41058
|
+
}
|
41029
41059
|
}
|
41030
41060
|
});
|
41031
41061
|
}
|
@@ -44265,6 +44295,7 @@ const renderSnippetPanel = (builder, snippetOpen) => {
|
|
44265
44295
|
block.offsetWidth / 2;
|
44266
44296
|
let x = (snippetX - block.offsetWidth / 2 - rectContainer.left) / docContainer.offsetWidth * 100;
|
44267
44297
|
let y = (snippetY - block.offsetHeight / 2 - rectContainer.top) / docContainer.offsetHeight * 100;
|
44298
|
+
if (y < 0) y = 15; // if block is not fully loaded, block height may be incorrect (y can be negative). Adjust to 15%.
|
44268
44299
|
block.style.top = y + '%';
|
44269
44300
|
block.style.left = x + '%';
|
44270
44301
|
block.removeAttribute('data-new-dummy');
|
@@ -72780,28 +72811,33 @@ class Image$1 {
|
|
72780
72811
|
if (this.builder.moveable) this.builder.moveable.updateRect();
|
72781
72812
|
const movControlBox = document.querySelector('.moveable-control-box');
|
72782
72813
|
if (movControlBox && !this.builder.hideImageResizer) movControlBox.style.display = 'block';
|
72783
|
-
|
72784
|
-
|
72785
|
-
|
72786
|
-
|
72787
|
-
|
72788
|
-
|
72789
|
-
|
72790
|
-
|
72791
|
-
|
72792
|
-
|
72793
|
-
|
72814
|
+
|
72815
|
+
/*
|
72816
|
+
const handleImageToolClickOut = e =>{
|
72817
|
+
let elm = e.target;
|
72818
|
+
if(!elm) return;
|
72819
|
+
if(!elm.closest('#divImageResizer') && !elm.closest('#divImageTool') &&
|
72820
|
+
!elm.closest('.is-modal') && !elm.closest('.keep-selection') &&
|
72821
|
+
!elm.closest('.sl-wrapper') && !elm.closest('.sl-overlay') && !elm.closest('.sl-close') &&
|
72822
|
+
!elm.closest('img')) { // click outside
|
72823
|
+
|
72824
|
+
// hide
|
72825
|
+
this.hideImageTool();
|
72826
|
+
document.removeEventListener('click', handleImageToolClickOut);
|
72827
|
+
if(this.builder.iframeDocument) {
|
72828
|
+
this.builder.doc.removeEventListener('click', handleImageToolClickOut);
|
72829
|
+
}
|
72830
|
+
this.builder.handleImageToolClickOut_=false;
|
72794
72831
|
}
|
72795
|
-
this.builder.handleImageToolClickOut_ = false;
|
72796
|
-
}
|
72797
72832
|
};
|
72798
|
-
if
|
72799
|
-
|
72800
|
-
|
72801
|
-
|
72802
|
-
|
72803
|
-
|
72833
|
+
if(!this.builder.handleImageToolClickOut_) {
|
72834
|
+
document.addEventListener('click', handleImageToolClickOut);
|
72835
|
+
if(this.builder.iframeDocument) {
|
72836
|
+
this.builder.doc.addEventListener('click', handleImageToolClickOut);
|
72837
|
+
}
|
72838
|
+
this.builder.handleImageToolClickOut_=true;
|
72804
72839
|
}
|
72840
|
+
*/
|
72805
72841
|
} else {
|
72806
72842
|
let imageResizer = this.imageResizer;
|
72807
72843
|
imageResizer.style.display = 'none';
|
@@ -72815,6 +72851,28 @@ class Image$1 {
|
|
72815
72851
|
const movControlBox = document.querySelector('.moveable-control-box');
|
72816
72852
|
if (movControlBox) movControlBox.style.display = 'none';
|
72817
72853
|
}
|
72854
|
+
const handleImageToolClickOut = e => {
|
72855
|
+
let elm = e.target;
|
72856
|
+
if (!elm) return;
|
72857
|
+
if (!elm.closest('#divImageResizer') && !elm.closest('#divImageTool') && !elm.closest('.is-modal') && !elm.closest('.keep-selection') && !elm.closest('.sl-wrapper') && !elm.closest('.sl-overlay') && !elm.closest('.sl-close') && !elm.closest('img')) {
|
72858
|
+
// click outside
|
72859
|
+
|
72860
|
+
// hide
|
72861
|
+
this.hideImageTool();
|
72862
|
+
document.removeEventListener('click', handleImageToolClickOut);
|
72863
|
+
if (this.builder.iframeDocument) {
|
72864
|
+
this.builder.doc.removeEventListener('click', handleImageToolClickOut);
|
72865
|
+
}
|
72866
|
+
this.builder.handleImageToolClickOut_ = false;
|
72867
|
+
}
|
72868
|
+
};
|
72869
|
+
if (!this.builder.handleImageToolClickOut_) {
|
72870
|
+
document.addEventListener('click', handleImageToolClickOut);
|
72871
|
+
if (this.builder.iframeDocument) {
|
72872
|
+
this.builder.doc.addEventListener('click', handleImageToolClickOut);
|
72873
|
+
}
|
72874
|
+
this.builder.handleImageToolClickOut_ = true;
|
72875
|
+
}
|
72818
72876
|
if (this.builder.canvas) ; else {
|
72819
72877
|
let prog = false;
|
72820
72878
|
if (e.screenX && e.screenX !== 0 && e.screenY && e.screenY !== 0) ; else {
|
@@ -73168,7 +73226,7 @@ class ButtonEditor {
|
|
73168
73226
|
<div class="flex flex-row" style="margin:15px 0 0">
|
73169
73227
|
<div class="flex flex-col" style="margin-right: 40px;">
|
73170
73228
|
<div>
|
73171
|
-
<span>${util.out('Border
|
73229
|
+
<span>${util.out('Border Style')}</span>:
|
73172
73230
|
</div>
|
73173
73231
|
<div class="flex flex-row flex-wrap" style="margin-top:5px">
|
73174
73232
|
<button title="${util.out('Transparent')}" data-command="transparent" class="border-color-command" style="margin-right:4px">${util.out('Transparent')}</button>
|
@@ -73358,7 +73416,7 @@ class ButtonEditor {
|
|
73358
73416
|
|
73359
73417
|
<div class="flex flex-col" style="margin:15px 0 0">
|
73360
73418
|
<div>
|
73361
|
-
<span>${util.out('Border
|
73419
|
+
<span>${util.out('Border Style')}</span>:
|
73362
73420
|
</div>
|
73363
73421
|
<div class="flex flex-row flex-wrap" style="margin-top:5px">
|
73364
73422
|
<button title="${util.out('Transparent')}" data-command="transparent" class="border-color-hover-command" style="margin-right:4px">${util.out('Transparent')}</button>
|
@@ -76954,6 +77012,12 @@ class Video {
|
|
76954
77012
|
} else {
|
76955
77013
|
inpAutoplay.checked = false;
|
76956
77014
|
}
|
77015
|
+
const inpMuted = videoModal.querySelector('.input-video-muted');
|
77016
|
+
if (video.hasAttribute('muted')) {
|
77017
|
+
inpMuted.checked = true;
|
77018
|
+
} else {
|
77019
|
+
inpMuted.checked = false;
|
77020
|
+
}
|
76957
77021
|
util.showModal(videoModal, true, () => {
|
76958
77022
|
btn.removeAttribute('data-focus');
|
76959
77023
|
btn.focus();
|
@@ -76997,6 +77061,9 @@ class Video {
|
|
76997
77061
|
<label style="display:block;margin-top:5px;">
|
76998
77062
|
<input class="input-video-autoplay" id="__input_video_autoplay" type="checkbox" /> ${util.out('Autoplay')}
|
76999
77063
|
</label>
|
77064
|
+
<label style="display:block;margin-top:5px;">
|
77065
|
+
<input class="input-video-muted" id="__input_video_muted" type="checkbox" /> ${util.out('Muted')}
|
77066
|
+
</label>
|
77000
77067
|
|
77001
77068
|
<div style="text-align:right;margin-top:14px;">
|
77002
77069
|
<button title="${util.out('Cancel')}" class="input-cancel classic-secondary">${util.out('Cancel')}</button>
|
@@ -77075,6 +77142,11 @@ class Video {
|
|
77075
77142
|
} else {
|
77076
77143
|
video.removeAttribute('autoplay');
|
77077
77144
|
}
|
77145
|
+
if (videoModal.querySelector('.input-video-muted').checked) {
|
77146
|
+
video.setAttribute('muted', '');
|
77147
|
+
} else {
|
77148
|
+
video.removeAttribute('muted');
|
77149
|
+
}
|
77078
77150
|
if (videoModal.querySelector('.input-url').value !== '') {
|
77079
77151
|
let url = videoModal.querySelector('.input-url').value;
|
77080
77152
|
let source = video.querySelector('source');
|
@@ -77726,8 +77798,8 @@ class RowTool {
|
|
77726
77798
|
const builderStuff = this.builder.builderStuff;
|
77727
77799
|
let rowtool = row.querySelector('.is-row-tool');
|
77728
77800
|
if (!rowtool) {
|
77729
|
-
let html = `<div class="is-tool is-row-tool">
|
77730
|
-
<div title="${util.out('Move')}" role="button" tabindex="-1" class="row-handle" style="width:100%;cursor:move;text-align:center;"><svg class="is-icon-flex"><use xlink:href="#ion-move"></use></svg></div>
|
77801
|
+
let html = `<div class="is-tool is-row-tool" style="${!this.builder.rowTool && this.builder.rowTool !== '' ? 'display:none;' : ''}">
|
77802
|
+
<div title="${util.out('Move')}" role="button" tabindex="-1" class="row-handle" style="${this.builder.rowHandle ? '' : 'display:none;'}width:100%;cursor:move;text-align:center;"><svg class="is-icon-flex"><use xlink:href="#ion-move"></use></svg></div>
|
77731
77803
|
<button type="button" tabindex="-1" title="${util.out('More')}" class="row-more"><svg class="is-icon-flex"><use xlink:href="#ion-more"></use></svg></button>
|
77732
77804
|
<button type="button" tabindex="-1" title="${util.out('Grid Editor')}" class="row-grideditor"><svg class="is-icon-flex"><use xlink:href="#ion-grid"></use></svg></button>
|
77733
77805
|
<button type="button" tabindex="-1" title="${util.out('Delete')}" class="row-remove"><svg class="is-icon-flex"><use xlink:href="#ion-ios-close-empty"></use></svg></button>
|
@@ -89900,6 +89972,10 @@ class ColorPicker {
|
|
89900
89972
|
const poppicker = builderStuff.querySelector('.pop-picker');
|
89901
89973
|
poppicker.style.display = 'flex';
|
89902
89974
|
poppicker.style.opacity = 0;
|
89975
|
+
if (this.opts.colors.length <= 21) poppicker.style.height = '360px'; // 3 lines
|
89976
|
+
else if (this.opts.colors.length > 21 && this.opts.colors.length <= 28) poppicker.style.height = '390px'; // 4 lines
|
89977
|
+
else if (this.opts.colors.length > 28) poppicker.style.height = '420px'; // 5 lines
|
89978
|
+
|
89903
89979
|
const pickr = Pickr.create({
|
89904
89980
|
el: '._pop-colpick',
|
89905
89981
|
theme: 'nano',
|
@@ -93788,6 +93864,10 @@ class Rte {
|
|
93788
93864
|
btnRteColor.forEach(btn => {
|
93789
93865
|
btn.addEventListener('click', () => {
|
93790
93866
|
const pop = this.rteColorPicker;
|
93867
|
+
const numOfColors = this.builder.colors.length;
|
93868
|
+
if (numOfColors > 21 && numOfColors <= 28) pop.classList.add('_4lines'); // 4 lines
|
93869
|
+
else if (numOfColors > 28) pop.classList.add('_5lines'); // 5 lines
|
93870
|
+
|
93791
93871
|
if (!dom.hasClass(pop, 'active')) {
|
93792
93872
|
this.util.showRtePop(pop, () => {
|
93793
93873
|
const top = btn.getBoundingClientRect().top;
|
@@ -94717,15 +94797,15 @@ class Rte {
|
|
94717
94797
|
activeCol = this.builder.activeCol;
|
94718
94798
|
spans = activeCol.querySelectorAll('span');
|
94719
94799
|
Array.prototype.forEach.call(spans, span => {
|
94720
|
-
let attr = span.
|
94800
|
+
let attr = span.hasAttribute('data-keep');
|
94721
94801
|
if (!attr) {
|
94722
94802
|
span.outerHTML = span.innerHTML;
|
94723
94803
|
}
|
94724
94804
|
});
|
94725
94805
|
Array.prototype.forEach.call(spans, span => {
|
94726
|
-
let attr = span.
|
94806
|
+
let attr = span.hasAttribute('data-keep');
|
94727
94807
|
if (attr) {
|
94728
|
-
|
94808
|
+
span.removeAttribute('data-keep');
|
94729
94809
|
}
|
94730
94810
|
});
|
94731
94811
|
this.getState();
|
@@ -108468,8 +108548,6 @@ Important: Do not change the 'div.is-container' element!
|
|
108468
108548
|
}
|
108469
108549
|
}
|
108470
108550
|
|
108471
|
-
// import RecordRTC from 'recordrtc';
|
108472
|
-
// import Recorder from 'opus-recorder'; // Using Recorder
|
108473
108551
|
const dom$i = new Dom();
|
108474
108552
|
class Dictation {
|
108475
108553
|
constructor(opts = {}, builder) {
|
@@ -108817,6 +108895,9 @@ class Dictation {
|
|
108817
108895
|
dom$i.appendHtml(builderStuff, html);
|
108818
108896
|
const modalCommand = builderStuff.querySelector('.page-command');
|
108819
108897
|
this.modalCommand = modalCommand;
|
108898
|
+
new Draggable$2({
|
108899
|
+
selector: '.is-modal.page-command .is-draggable'
|
108900
|
+
});
|
108820
108901
|
const modalCommandList = builderStuff.querySelector('.commandlist');
|
108821
108902
|
this.modalCommandList = modalCommandList;
|
108822
108903
|
const modalConfig = builderStuff.querySelector('.commandconfig');
|
@@ -115298,6 +115379,8 @@ class Editable {
|
|
115298
115379
|
this.handleEditStart = this.handleEditStart.bind(this);
|
115299
115380
|
this.handleMouseClick = this.handleMouseClick.bind(this);
|
115300
115381
|
this.handleTouchStart = this.handleTouchStart.bind(this);
|
115382
|
+
this.handleMouseDown = this.handleMouseDown.bind(this);
|
115383
|
+
this.handleMouseUp = this.handleMouseUp.bind(this);
|
115301
115384
|
this.setup();
|
115302
115385
|
}
|
115303
115386
|
setup() {
|
@@ -115306,6 +115389,7 @@ class Editable {
|
|
115306
115389
|
element.addEventListener('touchstart', this.handleTouchStart, {
|
115307
115390
|
passive: false
|
115308
115391
|
});
|
115392
|
+
element.addEventListener('mousedown', this.handleMouseDown);
|
115309
115393
|
});
|
115310
115394
|
}
|
115311
115395
|
refresh() {
|
@@ -115313,23 +115397,49 @@ class Editable {
|
|
115313
115397
|
this.elements.forEach(element => {
|
115314
115398
|
element.removeEventListener('dblclick', this.handleEditStart);
|
115315
115399
|
element.removeEventListener('touchstart', this.handleTouchStart);
|
115400
|
+
element.removeEventListener('mousedown', this.handleMouseDown);
|
115316
115401
|
});
|
115317
115402
|
this.elements.forEach(element => {
|
115318
115403
|
element.addEventListener('dblclick', this.handleEditStart);
|
115319
115404
|
element.addEventListener('touchstart', this.handleTouchStart, {
|
115320
115405
|
passive: false
|
115321
115406
|
});
|
115407
|
+
element.addEventListener('mousedown', this.handleMouseDown);
|
115322
115408
|
});
|
115323
115409
|
}
|
115410
|
+
handleMouseDown(event) {
|
115411
|
+
const currentTarget = event.currentTarget;
|
115412
|
+
this.lastClickTime = false;
|
115413
|
+
if (!currentTarget.classList.contains('active')) return;
|
115414
|
+
if (currentTarget.classList.contains('editable')) return;
|
115415
|
+
currentTarget.addEventListener('mouseup', this.handleMouseUp);
|
115416
|
+
const now = new Date().getTime();
|
115417
|
+
this.lastClickTime = now;
|
115418
|
+
}
|
115419
|
+
handleMouseUp(event) {
|
115420
|
+
if (!this.lastClickTime) return;
|
115421
|
+
const currentTarget = event.currentTarget;
|
115422
|
+
currentTarget.removeEventListener('mouseup', this.handleMouseUp);
|
115423
|
+
const now = new Date().getTime();
|
115424
|
+
const lastClickTime = this.lastClickTime || now;
|
115425
|
+
const timeDiff = now - lastClickTime;
|
115426
|
+
if (timeDiff < 300 && timeDiff > 0) {
|
115427
|
+
// Less than 300ms since the last touch, enable editing
|
115428
|
+
this.handleEditStart(event);
|
115429
|
+
}
|
115430
|
+
this.lastClickTime = now;
|
115431
|
+
}
|
115324
115432
|
destroy(element) {
|
115325
115433
|
if (element) {
|
115326
115434
|
element.removeEventListener('dblclick', this.handleEditStart);
|
115327
115435
|
element.removeEventListener('touchstart', this.handleTouchStart);
|
115436
|
+
element.removeEventListener('mousedown', this.handleMouseDown);
|
115328
115437
|
} else {
|
115329
115438
|
this.elements = this.doc.querySelectorAll(this.selector);
|
115330
115439
|
this.elements.forEach(element => {
|
115331
115440
|
element.removeEventListener('dblclick', this.handleEditStart);
|
115332
115441
|
element.removeEventListener('touchstart', this.handleTouchStart);
|
115442
|
+
element.removeEventListener('mousedown', this.handleMouseDown);
|
115333
115443
|
});
|
115334
115444
|
}
|
115335
115445
|
}
|
@@ -115642,6 +115752,8 @@ class EditableBlocks {
|
|
115642
115752
|
target.style.zIndex = newZIndex;
|
115643
115753
|
}
|
115644
115754
|
selectStart(block) {
|
115755
|
+
if (block.classList.contains('editable')) return; // do not proceed if in editing mode
|
115756
|
+
|
115645
115757
|
if (block.classList.contains('is-shape')) return; // do not clone if block is shape
|
115646
115758
|
|
115647
115759
|
if (!this.clone) return;
|
@@ -117853,6 +117965,7 @@ class ContentBuilder {
|
|
117853
117965
|
outlineMode: '',
|
117854
117966
|
toolStyle: '',
|
117855
117967
|
outlineStyle: '',
|
117968
|
+
rowHandle: true,
|
117856
117969
|
snippetAddTool: true,
|
117857
117970
|
elementTool: true,
|
117858
117971
|
elementHighlight: true,
|
@@ -120626,7 +120739,118 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
|
|
120626
120739
|
// let outlineStyle = localStorage.getItem('_outlinestyle');
|
120627
120740
|
// this.preferences.setOutlineStyle(outlineStyle);
|
120628
120741
|
// }
|
120629
|
-
if (this.preferences) this.preferences.initBuilder(builder);
|
120742
|
+
if (this.preferences) this.preferences.initBuilder(builder);else {
|
120743
|
+
const setColumnTool = hidecolumntool => {
|
120744
|
+
const builders = this.doc.querySelectorAll(this.opts.container);
|
120745
|
+
if (hidecolumntool) {
|
120746
|
+
Array.prototype.forEach.call(builders, builder => {
|
120747
|
+
builder.setAttribute('hidecolumntool', '');
|
120748
|
+
});
|
120749
|
+
} else {
|
120750
|
+
Array.prototype.forEach.call(builders, builder => {
|
120751
|
+
builder.removeAttribute('hidecolumntool');
|
120752
|
+
});
|
120753
|
+
}
|
120754
|
+
};
|
120755
|
+
setColumnTool(!this.columnTool);
|
120756
|
+
const setElementTool = hideelementtool => {
|
120757
|
+
const builderStuff = this.builderStuff;
|
120758
|
+
if (hideelementtool) {
|
120759
|
+
builderStuff.setAttribute('hideelementtool', '');
|
120760
|
+
} else {
|
120761
|
+
builderStuff.removeAttribute('hideelementtool', '');
|
120762
|
+
}
|
120763
|
+
if (this.iframe) {
|
120764
|
+
const contentStuff = this.contentStuff;
|
120765
|
+
if (hideelementtool) {
|
120766
|
+
contentStuff.setAttribute('hideelementtool', '');
|
120767
|
+
} else {
|
120768
|
+
contentStuff.removeAttribute('hideelementtool', '');
|
120769
|
+
}
|
120770
|
+
}
|
120771
|
+
};
|
120772
|
+
setElementTool(!this.elementTool);
|
120773
|
+
const setOutline = hideoutline => {
|
120774
|
+
const builders = this.doc.querySelectorAll(this.opts.container);
|
120775
|
+
Array.prototype.forEach.call(builders, builder => {
|
120776
|
+
if (hideoutline) {
|
120777
|
+
builder.setAttribute('hideoutline', '');
|
120778
|
+
} else {
|
120779
|
+
builder.removeAttribute('hideoutline');
|
120780
|
+
}
|
120781
|
+
});
|
120782
|
+
};
|
120783
|
+
setOutline(!this.rowcolOutline);
|
120784
|
+
const setOutlineStyle = outlineStyle => {
|
120785
|
+
const builders = this.doc.querySelectorAll(this.opts.container);
|
120786
|
+
Array.prototype.forEach.call(builders, builder => {
|
120787
|
+
if (outlineStyle === 'grayoutline') {
|
120788
|
+
builder.setAttribute('grayoutline', '');
|
120789
|
+
} else {
|
120790
|
+
builder.removeAttribute('grayoutline');
|
120791
|
+
}
|
120792
|
+
});
|
120793
|
+
};
|
120794
|
+
setOutlineStyle(this.outlineStyle);
|
120795
|
+
const setElementHighlight = hideelementhighlight => {
|
120796
|
+
const builders = this.doc.querySelectorAll(this.opts.container);
|
120797
|
+
Array.prototype.forEach.call(builders, builder => {
|
120798
|
+
if (hideelementhighlight) {
|
120799
|
+
builder.setAttribute('hideelementhighlight', '');
|
120800
|
+
} else {
|
120801
|
+
builder.removeAttribute('hideelementhighlight', '');
|
120802
|
+
}
|
120803
|
+
});
|
120804
|
+
};
|
120805
|
+
setElementHighlight(!this.elementHighlight);
|
120806
|
+
const setToolStyle = toolStyle => {
|
120807
|
+
const builderStuff = this.builderStuff;
|
120808
|
+
if (toolStyle === 'gray') {
|
120809
|
+
builderStuff.setAttribute('gray', '');
|
120810
|
+
} else {
|
120811
|
+
builderStuff.removeAttribute('gray', '');
|
120812
|
+
}
|
120813
|
+
if (this.iframe) {
|
120814
|
+
const contentStuff = this.contentStuff;
|
120815
|
+
if (toolStyle === 'gray') {
|
120816
|
+
contentStuff.setAttribute('gray', '');
|
120817
|
+
} else {
|
120818
|
+
contentStuff.removeAttribute('gray', '');
|
120819
|
+
}
|
120820
|
+
}
|
120821
|
+
const builders = this.doc.querySelectorAll(this.opts.container);
|
120822
|
+
Array.prototype.forEach.call(builders, builder => {
|
120823
|
+
if (toolStyle === 'gray') {
|
120824
|
+
builder.setAttribute('gray', '');
|
120825
|
+
} else {
|
120826
|
+
builder.removeAttribute('gray');
|
120827
|
+
}
|
120828
|
+
});
|
120829
|
+
};
|
120830
|
+
setToolStyle(this.toolStyle);
|
120831
|
+
const setSnippetAddTool = hidesnippetaddtool => {
|
120832
|
+
const builders = this.doc.querySelectorAll(this.opts.container);
|
120833
|
+
Array.prototype.forEach.call(builders, builder => {
|
120834
|
+
if (hidesnippetaddtool) {
|
120835
|
+
builder.setAttribute('hidesnippetaddtool', '');
|
120836
|
+
} else {
|
120837
|
+
builder.removeAttribute('hidesnippetaddtool', '');
|
120838
|
+
}
|
120839
|
+
});
|
120840
|
+
};
|
120841
|
+
setSnippetAddTool(!this.snippetAddTool);
|
120842
|
+
const setRowToolPosition = rowTool => {
|
120843
|
+
const builders = this.doc.querySelectorAll(this.opts.container);
|
120844
|
+
Array.prototype.forEach.call(builders, builder => {
|
120845
|
+
if (rowTool === 'right') {
|
120846
|
+
builder.removeAttribute('leftrowtool');
|
120847
|
+
} else {
|
120848
|
+
builder.setAttribute('leftrowtool', '');
|
120849
|
+
}
|
120850
|
+
});
|
120851
|
+
};
|
120852
|
+
setRowToolPosition(this.rowTool);
|
120853
|
+
}
|
120630
120854
|
|
120631
120855
|
// Apply behavior on each row
|
120632
120856
|
const rows = this.dom.elementChildren(builder);
|
@@ -122895,8 +123119,8 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
|
|
122895
123119
|
*/
|
122896
123120
|
src = this.viewFileUrl + '?url=' + src;
|
122897
123121
|
}
|
122898
|
-
const width =
|
122899
|
-
const height = 512;
|
123122
|
+
const width = this.ai_width; //768;
|
123123
|
+
const height = this.ai_height; //512;
|
122900
123124
|
const img = new Image();
|
122901
123125
|
img.src = src;
|
122902
123126
|
img.crossOrigin = 'anonymous';
|
@@ -122928,6 +123152,47 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
|
|
122928
123152
|
callback(result.url);
|
122929
123153
|
};
|
122930
123154
|
}
|
123155
|
+
getOrientation(width, height) {
|
123156
|
+
const aspectRatio = width / height;
|
123157
|
+
const predefinedRatios = [{
|
123158
|
+
ratio: '1:1',
|
123159
|
+
value: 1 / 1
|
123160
|
+
}, {
|
123161
|
+
ratio: '4:5',
|
123162
|
+
value: 4 / 5
|
123163
|
+
}, {
|
123164
|
+
ratio: '2:3',
|
123165
|
+
value: 2 / 3
|
123166
|
+
}, {
|
123167
|
+
ratio: '9:16',
|
123168
|
+
value: 9 / 16
|
123169
|
+
}, {
|
123170
|
+
ratio: '4:7',
|
123171
|
+
value: 4 / 7
|
123172
|
+
}, {
|
123173
|
+
ratio: '5:4',
|
123174
|
+
value: 5 / 4
|
123175
|
+
}, {
|
123176
|
+
ratio: '3:2',
|
123177
|
+
value: 3 / 2
|
123178
|
+
}, {
|
123179
|
+
ratio: '16:9',
|
123180
|
+
value: 16 / 9
|
123181
|
+
}, {
|
123182
|
+
ratio: '7:4',
|
123183
|
+
value: 7 / 4
|
123184
|
+
}];
|
123185
|
+
let closestRatio = predefinedRatios[0].ratio;
|
123186
|
+
let smallestDifference = Math.abs(aspectRatio - predefinedRatios[0].value);
|
123187
|
+
for (let i = 1; i < predefinedRatios.length; i++) {
|
123188
|
+
const difference = Math.abs(aspectRatio - predefinedRatios[i].value);
|
123189
|
+
if (difference < smallestDifference) {
|
123190
|
+
smallestDifference = difference;
|
123191
|
+
closestRatio = predefinedRatios[i].ratio;
|
123192
|
+
}
|
123193
|
+
}
|
123194
|
+
return closestRatio;
|
123195
|
+
}
|
122931
123196
|
async generateImage(prompt, callback) {
|
122932
123197
|
this.controller = new AbortController(); // Create a new AbortController
|
122933
123198
|
this.signal = this.controller.signal; // Get a new signal object
|
@@ -122937,12 +123202,82 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
|
|
122937
123202
|
let steps = this.imageSteps || 25;
|
122938
123203
|
let guidance = this.imageGuidance || 7.5;
|
122939
123204
|
let scheduler = this.imageScheduler || 'dpmsolver++';
|
123205
|
+
let width = 768;
|
123206
|
+
let height = 512;
|
123207
|
+
if (this.activeImage) {
|
123208
|
+
// check selected image dimension
|
123209
|
+
const activeImage = this.activeImage;
|
123210
|
+
const w = activeImage.offsetWidth;
|
123211
|
+
const h = activeImage.offsetHeight;
|
123212
|
+
const ratio = this.getOrientation(w, h);
|
123213
|
+
if (model === 'flux-schnell') {
|
123214
|
+
if (ratio === '1:1') {
|
123215
|
+
width = 1024;
|
123216
|
+
height = 1024;
|
123217
|
+
} else if (ratio === '4:5') {
|
123218
|
+
width = 768;
|
123219
|
+
height = 960;
|
123220
|
+
} else if (ratio === '2:3') {
|
123221
|
+
width = 768;
|
123222
|
+
height = 1152;
|
123223
|
+
} else if (ratio === '9:16') {
|
123224
|
+
width = 720;
|
123225
|
+
height = 1280;
|
123226
|
+
} else if (ratio === '4:7') {
|
123227
|
+
width = 512;
|
123228
|
+
height = 896;
|
123229
|
+
} else if (ratio === '5:4') {
|
123230
|
+
width = 960;
|
123231
|
+
height = 768;
|
123232
|
+
} else if (ratio === '3:2') {
|
123233
|
+
width = 1152;
|
123234
|
+
height = 768;
|
123235
|
+
} else if (ratio === '16:9') {
|
123236
|
+
width = 1280;
|
123237
|
+
height = 720;
|
123238
|
+
} else if (ratio === '7:4') {
|
123239
|
+
width = 896;
|
123240
|
+
height = 512;
|
123241
|
+
}
|
123242
|
+
} else {
|
123243
|
+
if (ratio === '1:1') {
|
123244
|
+
width = 512;
|
123245
|
+
height = 512;
|
123246
|
+
} else if (ratio === '4:5') {
|
123247
|
+
width = 512;
|
123248
|
+
height = 640;
|
123249
|
+
} else if (ratio === '2:3') {
|
123250
|
+
width = 512;
|
123251
|
+
height = 768;
|
123252
|
+
} else if (ratio === '9:16') {
|
123253
|
+
width = 576;
|
123254
|
+
height = 1024;
|
123255
|
+
} else if (ratio === '4:7') {
|
123256
|
+
width = 512;
|
123257
|
+
height = 896;
|
123258
|
+
} else if (ratio === '5:4') {
|
123259
|
+
width = 640;
|
123260
|
+
height = 512;
|
123261
|
+
} else if (ratio === '3:2') {
|
123262
|
+
width = 768;
|
123263
|
+
height = 512;
|
123264
|
+
} else if (ratio === '16:9') {
|
123265
|
+
width = 1024;
|
123266
|
+
height = 576;
|
123267
|
+
} else if (ratio === '7:4') {
|
123268
|
+
width = 896;
|
123269
|
+
height = 512;
|
123270
|
+
}
|
123271
|
+
}
|
123272
|
+
}
|
123273
|
+
this.ai_width = width;
|
123274
|
+
this.ai_height = height;
|
122940
123275
|
const messages = {
|
122941
123276
|
model,
|
122942
123277
|
prompt: prompt,
|
122943
123278
|
negative_prompt,
|
122944
|
-
width:
|
122945
|
-
height:
|
123279
|
+
width: this.ai_width,
|
123280
|
+
height: this.ai_height,
|
122946
123281
|
steps,
|
122947
123282
|
guidance,
|
122948
123283
|
scheduler,
|
@@ -122968,10 +123303,15 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
|
|
122968
123303
|
return;
|
122969
123304
|
}
|
122970
123305
|
const imageUrl = result.url;
|
122971
|
-
if (this.
|
122972
|
-
|
122973
|
-
} else {
|
123306
|
+
if (this.activeImage) {
|
123307
|
+
// selectable image on content doesn't need tp be upscaled
|
122974
123308
|
callback(imageUrl);
|
123309
|
+
} else {
|
123310
|
+
if (this.imageAutoUpscale) {
|
123311
|
+
this.upscaleImage(imageUrl, callback);
|
123312
|
+
} else {
|
123313
|
+
callback(imageUrl);
|
123314
|
+
}
|
122975
123315
|
}
|
122976
123316
|
} catch (error) {
|
122977
123317
|
if (error.name === 'AbortError') ; else {
|
@@ -123635,18 +123975,21 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
|
|
123635
123975
|
}
|
123636
123976
|
|
123637
123977
|
if (this.dom.textSelection()) {
|
123638
|
-
if (e.keyCode ===
|
123978
|
+
if (e.keyCode === 38) {
|
123639
123979
|
// Up arrow
|
123640
123980
|
this.util.saveSelection();
|
123641
|
-
} else if (e.keyCode ===
|
123981
|
+
} else if (e.keyCode === 40) {
|
123642
123982
|
// Down arrow
|
123643
123983
|
this.util.saveSelection();
|
123644
|
-
} else if (e.keyCode ===
|
123984
|
+
} else if (e.keyCode === 37) {
|
123645
123985
|
// Left arrow
|
123646
123986
|
this.util.saveSelection();
|
123647
|
-
} else if (e.keyCode ===
|
123987
|
+
} else if (e.keyCode === 39) {
|
123648
123988
|
// Right arrow
|
123649
123989
|
this.util.saveSelection();
|
123990
|
+
} else if (e.keyCode === 13) {
|
123991
|
+
// Enter
|
123992
|
+
this.util.saveSelection();
|
123650
123993
|
}
|
123651
123994
|
}
|
123652
123995
|
|
@@ -138817,6 +139160,18 @@ class Box {
|
|
138817
139160
|
this.builder.onChange();
|
138818
139161
|
}
|
138819
139162
|
|
139163
|
+
lockContentSize(isLock) {
|
139164
|
+
this.builder.editor.saveForUndo();
|
139165
|
+
let activeBox = this.builder.activeBox;
|
139166
|
+
let container = activeBox.querySelector('.is-builder');
|
139167
|
+
|
139168
|
+
if (isLock) {
|
139169
|
+
container.classList.add('v3');
|
139170
|
+
} else {
|
139171
|
+
container.classList.remove('v3');
|
139172
|
+
}
|
139173
|
+
}
|
139174
|
+
|
138820
139175
|
parallaxContent(isParallax) {
|
138821
139176
|
this.builder.editor.saveForUndo();
|
138822
139177
|
let activeBox = this.builder.activeBox;
|
@@ -154981,6 +155336,7 @@ class ContentBox {
|
|
154981
155336
|
rowTool: 'right',
|
154982
155337
|
toolStyle: '',
|
154983
155338
|
outlineStyle: '',
|
155339
|
+
rowHandle: true,
|
154984
155340
|
snippetAddTool: true,
|
154985
155341
|
mobileSimpleEdit: false,
|
154986
155342
|
clearPreferences: false,
|
@@ -158537,6 +158893,7 @@ Add an image for each feature.`, 'Create a new block showcasing a photo gallery
|
|
158537
158893
|
rowTool: this.settings.rowTool,
|
158538
158894
|
toolStyle: this.settings.toolStyle,
|
158539
158895
|
outlineStyle: this.settings.outlineStyle,
|
158896
|
+
rowHandle: this.settings.rowHandle,
|
158540
158897
|
snippetAddTool: this.settings.snippetAddTool,
|
158541
158898
|
mobileSimpleEdit: this.settings.mobileSimpleEdit,
|
158542
158899
|
clearPreferences: this.settings.clearPreferences,
|
@@ -160273,65 +160630,93 @@ Add an image for each feature.`, 'Create a new block showcasing a photo gallery
|
|
160273
160630
|
|
160274
160631
|
|
160275
160632
|
boxRender() {
|
160633
|
+
if (!this.linksWithClickListeners) {
|
160634
|
+
this.linksWithClickListeners = new Set();
|
160635
|
+
}
|
160636
|
+
|
160637
|
+
const links = this.wrapperEl.querySelectorAll('.is-box .is-overlay a'); // eg. slider links
|
160638
|
+
|
160639
|
+
links.forEach(link => {
|
160640
|
+
let url = link.getAttribute('href');
|
160641
|
+
|
160642
|
+
if (url.indexOf('#') === 0 || link.classList.contains('glightbox')) ; else {
|
160643
|
+
if (!this.linksWithClickListeners.has(link)) {
|
160644
|
+
link.addEventListener('click', e => {
|
160645
|
+
// Will go to the link
|
160646
|
+
const answer = window.confirm(out('Do you really want to leave?')); // Cancel the navigation and stay on the same page
|
160647
|
+
|
160648
|
+
if (!answer) {
|
160649
|
+
e.preventDefault();
|
160650
|
+
}
|
160651
|
+
|
160652
|
+
e.stopImmediatePropagation();
|
160653
|
+
});
|
160654
|
+
this.linksWithClickListeners.add(link); // Mark the listener as added
|
160655
|
+
}
|
160656
|
+
}
|
160657
|
+
});
|
160276
160658
|
const navbar = this.doc.querySelector('.is-section-navbar');
|
160277
160659
|
|
160278
160660
|
if (navbar) {
|
160279
160661
|
const links = navbar.querySelectorAll('a');
|
160280
160662
|
links.forEach(link => {
|
160281
|
-
|
160282
|
-
|
160283
|
-
|
160284
|
-
|
160285
|
-
if (url
|
160286
|
-
|
160287
|
-
|
160288
|
-
|
160289
|
-
|
160290
|
-
|
160291
|
-
|
160292
|
-
|
160293
|
-
|
160294
|
-
|
160295
|
-
|
160296
|
-
if (
|
160297
|
-
|
160663
|
+
if (!this.linksWithClickListeners.has(link)) {
|
160664
|
+
link.addEventListener('click', e => {
|
160665
|
+
let url = link.getAttribute('href');
|
160666
|
+
|
160667
|
+
if (url) {
|
160668
|
+
if (url.indexOf('#') === 0) {
|
160669
|
+
// Will go to bookmark
|
160670
|
+
if (url.indexOf('#section') === 0) {
|
160671
|
+
let num = url.replace('#section', '');
|
160672
|
+
|
160673
|
+
if (!isNaN(parseInt(num))) {
|
160674
|
+
let sections = this.doc.querySelectorAll('.is-section');
|
160675
|
+
let gotoSection;
|
160676
|
+
let x = 0;
|
160677
|
+
sections.forEach(function (section) {
|
160678
|
+
if (!dom.hasClass(section, 'is-section-navbar')) {
|
160679
|
+
if (x === num - 1) {
|
160680
|
+
gotoSection = section;
|
160681
|
+
}
|
160682
|
+
|
160683
|
+
x++;
|
160298
160684
|
}
|
160685
|
+
});
|
160299
160686
|
|
160300
|
-
|
160687
|
+
if (gotoSection) {
|
160688
|
+
this.scrollTo(gotoSection);
|
160301
160689
|
}
|
160302
|
-
});
|
160303
160690
|
|
160304
|
-
|
160305
|
-
this.scrollTo(gotoSection);
|
160691
|
+
e.preventDefault();
|
160306
160692
|
}
|
160693
|
+
} else {
|
160694
|
+
try {
|
160695
|
+
let bookmark = this.doc.querySelector(url);
|
160307
160696
|
|
160308
|
-
|
160309
|
-
|
160310
|
-
|
160311
|
-
|
160312
|
-
|
160313
|
-
|
160314
|
-
if (bookmark) {
|
160315
|
-
this.scrollTo(bookmark);
|
160316
|
-
e.preventDefault();
|
160697
|
+
if (bookmark) {
|
160698
|
+
this.scrollTo(bookmark);
|
160699
|
+
e.preventDefault();
|
160700
|
+
}
|
160701
|
+
} catch (e) {// Do Nothing
|
160317
160702
|
}
|
160318
|
-
} catch (e) {// Do Nothing
|
160319
160703
|
}
|
160704
|
+
} else {
|
160705
|
+
// Prevent to go to the link
|
160706
|
+
if (e.target.closest('#is-menu-toggle')) return;
|
160707
|
+
e.preventDefault();
|
160708
|
+
e.stopImmediatePropagation();
|
160320
160709
|
}
|
160321
160710
|
} else {
|
160322
|
-
|
160323
|
-
|
160324
|
-
|
160325
|
-
|
160326
|
-
|
160327
|
-
} else {
|
160328
|
-
if (link.closest('.is-menu-search')) ; else {
|
160329
|
-
if (!e.target.getAttribute('href')) return;
|
160330
|
-
e.preventDefault();
|
160331
|
-
e.stopImmediatePropagation();
|
160711
|
+
if (link.closest('.is-menu-search')) ; else {
|
160712
|
+
if (!e.target.getAttribute('href')) return;
|
160713
|
+
e.preventDefault();
|
160714
|
+
e.stopImmediatePropagation();
|
160715
|
+
}
|
160332
160716
|
}
|
160333
|
-
}
|
160334
|
-
|
160717
|
+
});
|
160718
|
+
this.linksWithClickListeners.add(link); // Mark the listener as added
|
160719
|
+
}
|
160335
160720
|
});
|
160336
160721
|
}
|
160337
160722
|
} // box
|
@@ -160498,7 +160883,7 @@ Add an image for each feature.`, 'Create a new block showcasing a photo gallery
|
|
160498
160883
|
'</div>');
|
160499
160884
|
*/
|
160500
160885
|
|
160501
|
-
dom.appendHtml(box, '<div class="is-box-tool" data-tool="1">' + '<button type="button" class="is-cover-upload" tabindex="-1" data-tooltip-top data-title="' + out('
|
160886
|
+
dom.appendHtml(box, '<div class="is-box-tool" data-tool="1">' + '<button type="button" class="is-cover-upload" tabindex="-1" data-tooltip-top data-title="' + out('Upload Background') + '" title="' + out('Upload Background') + '" style="background:rgb(78 170 57)"><svg class="is-icon-flex" style="position: absolute;top: 9px;left: 9px;fill:rgb(255,255,255);"><use xlink:href="#ion-image"></use></svg></button>' + '<button type="button" class="is-select-image" tabindex="-1" data-tooltip-top data-title="' + out('Select Background') + '" title="' + out('Select Background') + '" style="background:rgb(251 173 27)"><svg class="is-icon-flex" style="color:#fff;width:17px;height:17px;"><use style="color: #fff;" xlink:href="#icon-folder2"></use></svg></button>' + '<button type="button" class="is-box-edit" tabindex="-1" 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 type="button" class="is-module-edit" tabindex="-1" data-tooltip-top data-title="' + out('Module Settings') + '" title="' + out('Module Settings') + '" style="background:rgb(135 116 215)"><svg class="is-icon-flex"><use xlink:href="#ion-ios-gear"></use></svg></button>' + '</div>');
|
160502
160887
|
let info = box.querySelector('.is-box-info');
|
160503
160888
|
if (info) info.parentNode.removeChild(info);
|
160504
160889
|
|