Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/wp-conte.../plugins/themify-.../js/editor/componen...
File: drag.mjs
((api,body,topBody,bodyCl,topWindowDoc) => {
[0] Fix | Delete
"use strict";
[1] Fix | Delete
const {isFrontend,Registry,ActionBar,ToolBar}=api;
[2] Fix | Delete
api.Drag = context => {
[3] Fix | Delete
if (api.isGSPage === true) {
[4] Fix | Delete
return;
[5] Fix | Delete
}
[6] Fix | Delete
let clicked;
[7] Fix | Delete
context.tfOn('pointerdown', e => {
[8] Fix | Delete
if (e.button === 0 && !api.isPreview && !e.target.closest('.tb_dragger,.tb_disable_sorting,.tb_editor_on')) {
[9] Fix | Delete
clicked = e.target;
[10] Fix | Delete
if (clicked.classList.contains('tb_grid_drag')) {
[11] Fix | Delete
clicked=null;
[12] Fix | Delete
const obj=new api.columnResize();
[13] Fix | Delete
obj.start(e);
[14] Fix | Delete
}
[15] Fix | Delete
else if(clicked.tagName.indexOf('TB-')===0){//is our shadow dom event
[16] Fix | Delete
clicked=e.composedPath()[0];
[17] Fix | Delete
if(clicked.closest('.tab')){
[18] Fix | Delete
clicked=null;
[19] Fix | Delete
}
[20] Fix | Delete
}
[21] Fix | Delete
} else {
[22] Fix | Delete
clicked = null;
[23] Fix | Delete
}
[24] Fix | Delete
}, {
[25] Fix | Delete
passive: true
[26] Fix | Delete
})
[27] Fix | Delete
.tfOn('dragstart', function (e) {
[28] Fix | Delete
if(api.isPreview===true){
[29] Fix | Delete
return;
[30] Fix | Delete
}
[31] Fix | Delete
if(!clicked || e.target.nodeType === Node.TEXT_NODE){
[32] Fix | Delete
e.preventDefault();
[33] Fix | Delete
clicked = null;
[34] Fix | Delete
return;
[35] Fix | Delete
}
[36] Fix | Delete
let target = e.target.closest('[draggable]');
[37] Fix | Delete
if(api.activeBreakPoint !== 'desktop' && target){
[38] Fix | Delete
target=target.closest('.module_column');
[39] Fix | Delete
}
[40] Fix | Delete
if(!target || (api.activeBreakPoint !== 'desktop' && target.classList.contains('active_module'))){
[41] Fix | Delete
e.preventDefault();
[42] Fix | Delete
clicked = null;
[43] Fix | Delete
return;
[44] Fix | Delete
}
[45] Fix | Delete
let targetCl = target.classList,
[46] Fix | Delete
isRow = targetCl.contains('module_row'),
[47] Fix | Delete
isRowSort = isRow,
[48] Fix | Delete
isColumnMove = !isRow && targetCl.contains('module_column');
[49] Fix | Delete
if (!isRow && !isColumnMove) {
[50] Fix | Delete
isRow = targetCl.contains('page_break_module') || targetCl.contains('predesigned_row') || targetCl.contains('tb_item_row');
[51] Fix | Delete
}
[52] Fix | Delete
clicked = null;
[53] Fix | Delete
e.stopImmediatePropagation();
[54] Fix | Delete
[55] Fix | Delete
let ghostClone,
[56] Fix | Delete
ghostCloneH,
[57] Fix | Delete
holder = null,
[58] Fix | Delete
type = isRow ? 'row' : (isColumnMove ? 'column_move' : (targetCl.contains('tb_grid') ? 'column' : 'module')),
[59] Fix | Delete
cl = [type],
[60] Fix | Delete
y = 0,
[61] Fix | Delete
x = 0,
[62] Fix | Delete
prevItem,
[63] Fix | Delete
isDropped,
[64] Fix | Delete
scrollInterval,
[65] Fix | Delete
scrollEl,
[66] Fix | Delete
isScrolling = null,
[67] Fix | Delete
scrollKoef,
[68] Fix | Delete
scrollStep,
[69] Fix | Delete
scrollReq,
[70] Fix | Delete
topScroll = [ToolBar.el.getRootNode().host, topWindowDoc.tfId('tb_fixed_bottom_scroll')],
[71] Fix | Delete
builder = api.Builder.get().el,
[72] Fix | Delete
classItems=[topBody],
[73] Fix | Delete
ghost = createElement('','tb_sortable_helper tf_box tf_overflow');
[74] Fix | Delete
const _FRAME_ = 5,
[75] Fix | Delete
onDragScroll = id => {
[76] Fix | Delete
scrollReq=requestAnimationFrame(()=>{
[77] Fix | Delete
let top=scrollStep * scrollKoef,
[78] Fix | Delete
scrollY=scrollEl.scrollY??scrollEl.scrollTop;
[79] Fix | Delete
if(id === 'tb_main_toolbar_root' || id === 'wpadminbar'){
[80] Fix | Delete
top*=-1;
[81] Fix | Delete
}
[82] Fix | Delete
scrollEl.scroll({
[83] Fix | Delete
top:scrollY+top,
[84] Fix | Delete
behavior: 'instant'
[85] Fix | Delete
});
[86] Fix | Delete
onDragScroll(id);
[87] Fix | Delete
});
[88] Fix | Delete
},
[89] Fix | Delete
dragScrollEnter=function () {
[90] Fix | Delete
clearInterval(scrollInterval);
[91] Fix | Delete
scrollKoef = 5;
[92] Fix | Delete
scrollInterval = setInterval(() => {
[93] Fix | Delete
if (scrollKoef < 51) {
[94] Fix | Delete
scrollKoef += 5;
[95] Fix | Delete
} else {
[96] Fix | Delete
clearInterval(scrollInterval);
[97] Fix | Delete
scrollInterval = null;
[98] Fix | Delete
}
[99] Fix | Delete
}, 1200);
[100] Fix | Delete
prevItem = null;
[101] Fix | Delete
[102] Fix | Delete
if (holder !== null) {
[103] Fix | Delete
holder.style.display = 'none';
[104] Fix | Delete
}
[105] Fix | Delete
for (let items = builder.querySelectorAll('[data-pos]'), i = items.length - 1; i > -1; --i) {
[106] Fix | Delete
items[i].removeAttribute('data-pos');
[107] Fix | Delete
}
[108] Fix | Delete
if (isScrolling === null) {
[109] Fix | Delete
isScrolling = true;
[110] Fix | Delete
onDragScroll(this.id);
[111] Fix | Delete
}
[112] Fix | Delete
},
[113] Fix | Delete
dragScrollLeave=()=>{
[114] Fix | Delete
clearInterval(scrollInterval);
[115] Fix | Delete
cancelAnimationFrame(scrollReq);
[116] Fix | Delete
isScrolling = scrollInterval =scrollKoef=scrollReq= null;
[117] Fix | Delete
},
[118] Fix | Delete
dragScroll = off => {
[119] Fix | Delete
if (off === true) {
[120] Fix | Delete
for (let i = topScroll.length - 1; i > -1; --i) {
[121] Fix | Delete
topScroll[i].tfOff('dragenter', dragScrollEnter, {passive: true})
[122] Fix | Delete
.tfOff('dragleave', dragScrollLeave, {passive: true});
[123] Fix | Delete
}
[124] Fix | Delete
if (isRow && api.isVisual) {
[125] Fix | Delete
ToolBar.zoom({item: ToolBar.el.querySelector('[data-zoom="100"]')});
[126] Fix | Delete
}
[127] Fix | Delete
dragScrollLeave();
[128] Fix | Delete
topScroll = scrollStep=scrollEl= null;
[129] Fix | Delete
return;
[130] Fix | Delete
}
[131] Fix | Delete
scrollStep=1;
[132] Fix | Delete
if (!isFrontend) {
[133] Fix | Delete
scrollEl = ToolBar.el.getRootNode().host.closest('.interface-interface-skeleton__content') || doc.tfClass('edit-post-layout__content')[0];
[134] Fix | Delete
scrollStep /= 2;
[135] Fix | Delete
}
[136] Fix | Delete
if (!scrollEl) {
[137] Fix | Delete
scrollEl = api.activeBreakPoint === 'desktop' ? window : topWindow;
[138] Fix | Delete
}
[139] Fix | Delete
if (scrollEl) {
[140] Fix | Delete
if (isRow && api.isVisual) {
[141] Fix | Delete
ToolBar.zoom({item: ToolBar.el.querySelector('[data-zoom="50"]')});
[142] Fix | Delete
}
[143] Fix | Delete
for (let i = topScroll.length - 1; i > -1; --i) {
[144] Fix | Delete
topScroll[i].tfOn('dragenter', dragScrollEnter, {passive: true})
[145] Fix | Delete
.tfOn('dragleave', dragScrollLeave, {passive: true});
[146] Fix | Delete
}
[147] Fix | Delete
}
[148] Fix | Delete
},
[149] Fix | Delete
reject = e => {
[150] Fix | Delete
e.dataTransfer.dropEffect = e.dataTransfer.effectAllowed = 'none';
[151] Fix | Delete
prevItem?.removeAttribute('data-pos');
[152] Fix | Delete
if (holder !== null) {
[153] Fix | Delete
holder.style.display = 'none';
[154] Fix | Delete
}
[155] Fix | Delete
},
[156] Fix | Delete
onDragOver = e=> {
[157] Fix | Delete
e.preventDefault();
[158] Fix | Delete
e.stopImmediatePropagation();
[159] Fix | Delete
let {target:dragged,clientY,clientX} = e;
[160] Fix | Delete
if (ghostClone) {
[161] Fix | Delete
ghostClone.style.top = (clientY - ghostCloneH) + 'px';
[162] Fix | Delete
}
[163] Fix | Delete
if (!dragged || isScrolling !== null || dragged === target || !builder.contains(dragged) || (type === 'module' && dragged.classList.contains('module_row'))) {
[164] Fix | Delete
reject(e);
[165] Fix | Delete
return;
[166] Fix | Delete
}
[167] Fix | Delete
[168] Fix | Delete
if (holder !== null && (dragged === holder ||dragged.classList.contains('tb_sortable_placeholder'))) {
[169] Fix | Delete
return;
[170] Fix | Delete
}
[171] Fix | Delete
e.dataTransfer.effectAllowed = 'move';
[172] Fix | Delete
if (y === 0 || x === 0 || (clientY - y) > _FRAME_ || (y - clientY) > _FRAME_ || (clientX - x) > _FRAME_ || (x - clientX) > _FRAME_) {
[173] Fix | Delete
y = clientY;
[174] Fix | Delete
x = clientX;
[175] Fix | Delete
const rect = dragged.getBoundingClientRect();
[176] Fix | Delete
let side = (((y - rect.top) / rect.height) > .5) ? 'bottom' : 'top';
[177] Fix | Delete
if (isColumnMove === true) {
[178] Fix | Delete
let inner,
[179] Fix | Delete
cl=dragged.classList;
[180] Fix | Delete
if(cl.contains('row_inner') || cl.contains('module_subrow')){
[181] Fix | Delete
inner=dragged;
[182] Fix | Delete
dragged=inner.tfClass('module_column')[0];
[183] Fix | Delete
side=null;
[184] Fix | Delete
}
[185] Fix | Delete
else if (cl.contains('tb_col_side')) {
[186] Fix | Delete
side = cl[1].replace('tb_col_side_', '');
[187] Fix | Delete
dragged = dragged.parentNode;
[188] Fix | Delete
inner = dragged.parentNode;
[189] Fix | Delete
} else if (cl.contains('module_column')) {
[190] Fix | Delete
side = (((x - rect.left) / rect.width) > .5) ? 'right' : 'left';
[191] Fix | Delete
inner = dragged.parentNode;
[192] Fix | Delete
} else {
[193] Fix | Delete
return;
[194] Fix | Delete
}
[195] Fix | Delete
let w = inner.dataset.dragW,
[196] Fix | Delete
_area = dragged.dataset.dragArea;
[197] Fix | Delete
if (!w || !_area) {
[198] Fix | Delete
const computed = getComputedStyle(inner);
[199] Fix | Delete
if (!w) {
[200] Fix | Delete
const c=inner.closest('[data-cid]');
[201] Fix | Delete
if(!c){
[202] Fix | Delete
return;
[203] Fix | Delete
}
[204] Fix | Delete
const inner_w = inner.offsetWidth;
[205] Fix | Delete
let gutter=Registry.get(c.dataset.cid).getSizes('gutter');
[206] Fix | Delete
gutter=gutter?ThemifyStyles.getGutterValue(gutter):'';
[207] Fix | Delete
if (!gutter) {
[208] Fix | Delete
gutter = computed.getPropertyValue('--colg');
[209] Fix | Delete
}
[210] Fix | Delete
let gutterUnit = gutter.replace(parseFloat(gutter).toString(), '') || '%';
[211] Fix | Delete
gutter = parseFloat(gutter);
[212] Fix | Delete
if (gutter === 0) {
[213] Fix | Delete
w = 'none';
[214] Fix | Delete
} else {
[215] Fix | Delete
if (gutterUnit === '%') {
[216] Fix | Delete
w = parseFloat(parseFloat((inner_w * gutter) / 100).toFixed(2)).toString();
[217] Fix | Delete
} else if (gutterUnit === 'em') {
[218] Fix | Delete
w = gutter * parseFloat(computed.getPropertyValue('font-size'));
[219] Fix | Delete
} else {
[220] Fix | Delete
w = gutter;
[221] Fix | Delete
}
[222] Fix | Delete
}
[223] Fix | Delete
inner.dataset.dragW=w;
[224] Fix | Delete
for (let cols = inner.children, i = cols.length - 1; i > -1; --i) {
[225] Fix | Delete
if(cols[i].classList.contains('module_column')){
[226] Fix | Delete
for (let sides = cols[i].children, j = sides.length - 1; j > -1; --j) {
[227] Fix | Delete
let side=sides[j],
[228] Fix | Delete
st=side.style;
[229] Fix | Delete
if (side.classList.contains('tb_col_side')) {
[230] Fix | Delete
st.marginLeft=st.marginRight='';
[231] Fix | Delete
let p = side.classList.contains('tb_col_side_right') ? '50' : '-50';
[232] Fix | Delete
st.width = w === 'none' ? '' : (w + 'px');
[233] Fix | Delete
st.transform = w === 'none' ? 'translateX(' + p + '%)' : '';
[234] Fix | Delete
[235] Fix | Delete
let left=side.getBoundingClientRect().left;
[236] Fix | Delete
if(left<0){
[237] Fix | Delete
st.marginLeft='10px';
[238] Fix | Delete
}
[239] Fix | Delete
else if(left>=doc.documentElement.clientWidth){
[240] Fix | Delete
st.marginRight='10px';
[241] Fix | Delete
}
[242] Fix | Delete
}
[243] Fix | Delete
}
[244] Fix | Delete
}
[245] Fix | Delete
}
[246] Fix | Delete
}
[247] Fix | Delete
if (!_area) {
[248] Fix | Delete
_area = computed.getPropertyValue('--area');
[249] Fix | Delete
if (!_area) {
[250] Fix | Delete
_area = '1';
[251] Fix | Delete
} else {
[252] Fix | Delete
_area = _area.split('" "');
[253] Fix | Delete
for (let i = _area.length - 1; i > -1; --i) {
[254] Fix | Delete
let r = _area[i].replaceAll('"', '').split(' ');
[255] Fix | Delete
r = Array.from(new Set(r));
[256] Fix | Delete
_area[i] = r.join(' ');
[257] Fix | Delete
}
[258] Fix | Delete
_area = '"' + _area.join('" "') + '"';
[259] Fix | Delete
}
[260] Fix | Delete
inner.dataset.dragArea= _area;
[261] Fix | Delete
}
[262] Fix | Delete
}
[263] Fix | Delete
if(side===null){
[264] Fix | Delete
return;
[265] Fix | Delete
}
[266] Fix | Delete
cl=dragged.classList;//dragged maybe changed
[267] Fix | Delete
if (_area !== '1' && !cl.contains('tb_drag_side_column') && !cl.contains('tb_drag_one_column')) {
[268] Fix | Delete
const colArea = getComputedStyle(dragged).getPropertyValue('grid-area').split('/')[0].replace('"', '').trim();
[269] Fix | Delete
if (api.activeBreakPoint!=='desktop' && !_area.includes(colArea + ' ') && !_area.includes(' ' + colArea)) {
[270] Fix | Delete
cl.add('tb_drag_one_column');
[271] Fix | Delete
} else {
[272] Fix | Delete
cl.add('tb_drag_side_column');
[273] Fix | Delete
}
[274] Fix | Delete
}
[275] Fix | Delete
if (cl.contains('tb_drag_one_column')) {
[276] Fix | Delete
side = (((y - rect.top) / rect.height) > .5) ? 'right' : 'left';
[277] Fix | Delete
}
[278] Fix | Delete
}
[279] Fix | Delete
if (dragged !== topScroll[0] && dragged !== topScroll[1]) {
[280] Fix | Delete
if (!ghostClone && isColumnMove === false) {
[281] Fix | Delete
const cl=dragged.classList;
[282] Fix | Delete
if(cl.contains('tb_active_builder')){
[283] Fix | Delete
dragged=side==='top'?dragged.firstElementChild:dragged.lastElementChild.previousElementSibling;
[284] Fix | Delete
}
[285] Fix | Delete
else{
[286] Fix | Delete
if (cl.contains('module_column')) {
[287] Fix | Delete
dragged = dragged.tfClass('tb_holder')[0];
[288] Fix | Delete
if (!dragged) {
[289] Fix | Delete
reject(e);
[290] Fix | Delete
return;
[291] Fix | Delete
}
[292] Fix | Delete
}
[293] Fix | Delete
else if (cl.contains('tb_dragger')) {
[294] Fix | Delete
dragged = dragged.parentNode;
[295] Fix | Delete
}
[296] Fix | Delete
if (dragged.classList.contains('tb_holder') && dragged.childElementCount > 0) {
[297] Fix | Delete
dragged = side === 'top' && dragged.firstChild !== target ? dragged.firstChild : dragged.lastChild;
[298] Fix | Delete
if (dragged === target) {
[299] Fix | Delete
reject(e);
[300] Fix | Delete
return;
[301] Fix | Delete
}
[302] Fix | Delete
}
[303] Fix | Delete
}
[304] Fix | Delete
}
[305] Fix | Delete
if (prevItem && prevItem !== dragged) {
[306] Fix | Delete
if (isColumnMove === false) {
[307] Fix | Delete
const sibling = side === 'top' ? dragged.previousSibling : dragged.nextElementSibling;
[308] Fix | Delete
if (sibling === prevItem) {
[309] Fix | Delete
const prevPos = sibling.dataset.pos;
[310] Fix | Delete
if ((side === 'top' && prevPos === 'bottom') || (side === 'bottom' && prevPos === 'top')) {
[311] Fix | Delete
return;
[312] Fix | Delete
}
[313] Fix | Delete
}
[314] Fix | Delete
}
[315] Fix | Delete
prevItem.removeAttribute('data-pos');
[316] Fix | Delete
}
[317] Fix | Delete
if (dragged.dataset.pos !== side) {
[318] Fix | Delete
dragged.dataset.pos=side;
[319] Fix | Delete
if (holder !== null) {
[320] Fix | Delete
holder.style.display = '';
[321] Fix | Delete
if (dragged.classList.contains('tb_holder')) {
[322] Fix | Delete
dragged.appendChild(holder);
[323] Fix | Delete
} else {
[324] Fix | Delete
side === 'top' ? dragged.before(holder) : dragged.after(holder);
[325] Fix | Delete
}
[326] Fix | Delete
}
[327] Fix | Delete
}
[328] Fix | Delete
prevItem = dragged;
[329] Fix | Delete
}
[330] Fix | Delete
}
[331] Fix | Delete
},
[332] Fix | Delete
onDragStart = function (e) {
[333] Fix | Delete
Themify.trigger('disableInline');
[334] Fix | Delete
e.stopImmediatePropagation();
[335] Fix | Delete
classItems.push(api.MainPanel.el,ToolBar.el.getRootNode().host);
[336] Fix | Delete
for(let i=classItems.length-1;i>-1;--i){
[337] Fix | Delete
classItems[i].classList.add('tb_start_animate', 'tb_drag_start', 'tb_drag_' + cl[0]);
[338] Fix | Delete
if(cl[1]){
[339] Fix | Delete
classItems[i].classList.add(cl[1]);
[340] Fix | Delete
}
[341] Fix | Delete
}
[342] Fix | Delete
api.SmallPanel.hide();
[343] Fix | Delete
ActionBar.clear();
[344] Fix | Delete
ActionBar.disable=true;
[345] Fix | Delete
this.classList.add('tb_draggable_item');
[346] Fix | Delete
if (isColumnMove === true) {
[347] Fix | Delete
this.parentNode.classList.add('tb_column_drag_inner');
[348] Fix | Delete
const innsers = builder.querySelectorAll('.row_inner,.module_subrow');
[349] Fix | Delete
for (let i = innsers.length - 1; i > -1; --i) {
[350] Fix | Delete
let childs = innsers[i].children,
[351] Fix | Delete
w = innsers[i].getBoundingClientRect().width - 5;
[352] Fix | Delete
[353] Fix | Delete
for (let j = childs.length - 1; j > -1; --j) {
[354] Fix | Delete
if (childs[j].classList.contains('module_column') && (childs[j].offsetWidth + childs[j].offsetLeft) < w) {
[355] Fix | Delete
childs[j].classList.add('tb_hide_drag_col_right');
[356] Fix | Delete
}
[357] Fix | Delete
}
[358] Fix | Delete
}
[359] Fix | Delete
}
[360] Fix | Delete
dragScroll();
[361] Fix | Delete
if (ghostClone) {
[362] Fix | Delete
ghostClone.style.top = e.clientY + 'px';
[363] Fix | Delete
}
[364] Fix | Delete
},
[365] Fix | Delete
mouseEvent = e => {
[366] Fix | Delete
e.stopImmediatePropagation();
[367] Fix | Delete
},
[368] Fix | Delete
onDrop = async e=> {
[369] Fix | Delete
if (e.target) {
[370] Fix | Delete
e.preventDefault();
[371] Fix | Delete
e.stopImmediatePropagation();
[372] Fix | Delete
}
[373] Fix | Delete
isDropped = true;
[374] Fix | Delete
let dropped = e.target || e;
[375] Fix | Delete
if (dropped.classList.contains('module_column') || dropped.classList.contains('tb_col_side')) {
[376] Fix | Delete
dropped = isColumnMove ? dropped.closest('.module_column') : dropped.querySelector('[data-pos]');
[377] Fix | Delete
}
[378] Fix | Delete
else if (isColumnMove) {
[379] Fix | Delete
dropped = null;
[380] Fix | Delete
for (let items = doc.tfClass('tb_column_drag_inner'), i = items.length - 1; i > -1; --i) {
[381] Fix | Delete
items[i].classList.remove('tb_column_drag_inner');
[382] Fix | Delete
}
[383] Fix | Delete
}
[384] Fix | Delete
else if(dropped.classList.contains('tb_active_builder')){
[385] Fix | Delete
const row=dropped.firstElementChild;
[386] Fix | Delete
dropped=row.dataset.pos?row:dropped.lastElementChild.previousElementSibling;
[387] Fix | Delete
}
[388] Fix | Delete
else if (dropped.classList.contains('tb_dragger')) {
[389] Fix | Delete
dropped = dropped.closest('[draggable]');
[390] Fix | Delete
}
[391] Fix | Delete
if (dropped === holder || dropped.classList.contains('tb_sortable_placeholder')) {
[392] Fix | Delete
dropped = dropped?.closest('.tb_active_builder')?.querySelector('[data-pos]');
[393] Fix | Delete
if (dropped?.classList.contains('tb_sortable_placeholder')) {
[394] Fix | Delete
dropped = dropped.closest('.tb_holder');
[395] Fix | Delete
}
[396] Fix | Delete
}
[397] Fix | Delete
if (!dropped || (type === 'module' && dropped.classList.contains('module_row'))) {
[398] Fix | Delete
target.classList.remove('tb_draggable_item');
[399] Fix | Delete
return;
[400] Fix | Delete
}
[401] Fix | Delete
let draggedRow=target.closest('.module_row'),
[402] Fix | Delete
isSort= draggedRow!==null,
[403] Fix | Delete
dragged = isSort?target:target.cloneNode(true),
[404] Fix | Delete
side = dropped.dataset.pos;
[405] Fix | Delete
[406] Fix | Delete
[407] Fix | Delete
holder?.remove();
[408] Fix | Delete
if(dragged===dropped){
[409] Fix | Delete
target.classList.remove('tb_draggable_item');
[410] Fix | Delete
return;
[411] Fix | Delete
}
[412] Fix | Delete
api.undoManager.start('move');
[413] Fix | Delete
target.classList.remove('tb_draggable_item');//don't change position,should be after undomanager start,need for undo
[414] Fix | Delete
const builderEditSlug=api.isVisual?undefined:window.TB_BuilderContentLightbox?.getActiveEl()?.manager.get('mod_name');
[415] Fix | Delete
if(!isSort){
[416] Fix | Delete
dragged.style.display='none';
[417] Fix | Delete
}
[418] Fix | Delete
else if(dragged.classList.contains('active_subrow')){
[419] Fix | Delete
const parent=dragged.parentNode,
[420] Fix | Delete
parentCl=parent.classList;
[421] Fix | Delete
if(parent.childElementCount===1 && (parentCl.contains('tab-content') || parentCl.contains('accordion-content'))){
[422] Fix | Delete
const dummy=createElement();
[423] Fix | Delete
parent.prepend(dummy);
[424] Fix | Delete
api.Drop.row(dummy,'grid',1,false);
[425] Fix | Delete
}
[426] Fix | Delete
}
[427] Fix | Delete
[428] Fix | Delete
if (!dropped.classList.contains('tb_holder')) {
[429] Fix | Delete
if (!isColumnMove) {
[430] Fix | Delete
const parentCl=dropped.parentNode.classList;
[431] Fix | Delete
if(type==='module' && (parentCl.contains('tab-content') || parentCl.contains('accordion-content')|| ( (builderEditSlug==='accordion' || builderEditSlug==='tab') && !dragged.classList.contains('active_subrow') && !dropped.closest('.module_subrow')))){
[432] Fix | Delete
const subrow=new api.Subrow({cols:[{}]});
[433] Fix | Delete
subrow.el.tfClass('tb_holder')[0].appendChild(dragged);
[434] Fix | Delete
side === 'top' ?dropped.before(subrow.el):dropped.after(subrow.el);
[435] Fix | Delete
}
[436] Fix | Delete
else{
[437] Fix | Delete
side === 'top' ?dropped.before(dragged):dropped.after(dragged);
[438] Fix | Delete
}
[439] Fix | Delete
}
[440] Fix | Delete
}
[441] Fix | Delete
else {
[442] Fix | Delete
dropped.appendChild(dragged);
[443] Fix | Delete
}
[444] Fix | Delete
if(isColumnMove || isSort){
[445] Fix | Delete
if(isColumnMove){
[446] Fix | Delete
await api.Drop.column(dragged, dropped, side);
[447] Fix | Delete
}
[448] Fix | Delete
Themify.trigger('tb_' + type + '_sort', [dragged]);
[449] Fix | Delete
api.Utils.onResize(true);
[450] Fix | Delete
api.undoManager.end('move');
[451] Fix | Delete
}
[452] Fix | Delete
else{//new element: dragged element will be replaced
[453] Fix | Delete
//
[454] Fix | Delete
//row,module
[455] Fix | Delete
let dropType=targetCl.contains('tb_grid')?'grid':(targetCl.contains('page_break_module')?'pagebreak':'predesign'),
[456] Fix | Delete
slug=target.dataset.slug,
[457] Fix | Delete
dropHandler=dropType==='grid'?'row':type;
[458] Fix | Delete
if(target.dataset.type){
[459] Fix | Delete
dropType=target.dataset.type;
[460] Fix | Delete
if(dropHandler==='row' && targetCl.contains('library_item')){
[461] Fix | Delete
dropType='library';
[462] Fix | Delete
}
[463] Fix | Delete
}
[464] Fix | Delete
try{
[465] Fix | Delete
await api.Drop[dropHandler](dragged,dropType,slug);
[466] Fix | Delete
Themify.trigger('tb_' + type + '_sort', [dragged]);
[467] Fix | Delete
if(dropHandler==='module' && dropType !== 'part' && dropType !== 'module'){
[468] Fix | Delete
api.undoManager.clear('move');
[469] Fix | Delete
}
[470] Fix | Delete
else{
[471] Fix | Delete
api.undoManager.end('move');
[472] Fix | Delete
}
[473] Fix | Delete
}catch (e) {
[474] Fix | Delete
api.undoManager.clear('move');
[475] Fix | Delete
}
[476] Fix | Delete
}
[477] Fix | Delete
};
[478] Fix | Delete
[479] Fix | Delete
if (targetCl.contains('active_subrow')) {
[480] Fix | Delete
cl.push('tb_drag_subrow');
[481] Fix | Delete
}
[482] Fix | Delete
if (isRowSort) {
[483] Fix | Delete
bodyCl.add('tb_drag_row');
[484] Fix | Delete
if (!api.isVisual) {
[485] Fix | Delete
ghostClone = ghost.cloneNode();
[486] Fix | Delete
ghost.style.opacity = 0;
[487] Fix | Delete
const b = target.getBoundingClientRect();
[488] Fix | Delete
ghostClone.style.width = b.width + 'px';
[489] Fix | Delete
ghostClone.style.left = b.left + 'px';
[490] Fix | Delete
ghostClone.innerHTML = 'Row';
[491] Fix | Delete
body.appendChild(ghostClone);
[492] Fix | Delete
ghostCloneH = ghostClone.offsetHeight / 2;
[493] Fix | Delete
}else{
[494] Fix | Delete
ghost.innerHTML = 'Row';
[495] Fix | Delete
}
[496] Fix | Delete
}
[497] Fix | Delete
else if (type === 'module' || isColumnMove) {
[498] Fix | Delete
if (isColumnMove || targetCl.contains('active_subrow')) {
[499] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function