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: action-bar.mjs
((api,_CLICK_,topWindowDoc) => {
[0] Fix | Delete
"use strict";
[1] Fix | Delete
let actionBarPrevEl,
[2] Fix | Delete
clickTimer;
[3] Fix | Delete
const row=doc.tfId('tmpl-builder_row_action').content,
[4] Fix | Delete
column=doc.tfId('tmpl-builder_column_action').content,
[5] Fix | Delete
subrow=doc.tfId('tmpl-builder_subrow_action').content,
[6] Fix | Delete
module=doc.tfId('tmpl-builder_module_action').content,
[7] Fix | Delete
{isFrontend,Registry}=api,
[8] Fix | Delete
showTab=(target,type)=>{
[9] Fix | Delete
let root=target.getRootNode(),
[10] Fix | Delete
tabId = target.dataset.href;
[11] Fix | Delete
if(tabId==='options'){
[12] Fix | Delete
root.querySelector('#'+tabId).classList.add('selected');
[13] Fix | Delete
tabId=root.querySelector('.row_menu .selected');
[14] Fix | Delete
tabId=tabId?.dataset.href || 'grid';
[15] Fix | Delete
}
[16] Fix | Delete
const el=root.querySelector('#'+tabId),
[17] Fix | Delete
grid=root.querySelector('#grid'),
[18] Fix | Delete
cid=root.host.closest('[data-cid]').dataset.cid,
[19] Fix | Delete
hide=tabId === 'grid'?root.querySelector('#row_options'):grid,
[20] Fix | Delete
optionTab=root.querySelector('#options');
[21] Fix | Delete
[22] Fix | Delete
if(el.childElementCount<2){
[23] Fix | Delete
const model=Registry.get(cid);
[24] Fix | Delete
if(model){
[25] Fix | Delete
if (tabId === 'grid') {
[26] Fix | Delete
model.gridMenu(grid);
[27] Fix | Delete
}
[28] Fix | Delete
else{
[29] Fix | Delete
model.optionsTab(el);
[30] Fix | Delete
}
[31] Fix | Delete
}
[32] Fix | Delete
}
[33] Fix | Delete
for(let nav=target.parentNode.children,i=nav.length-1;i>-1;--i){
[34] Fix | Delete
nav[i].classList.toggle('selected',nav[i]===target);
[35] Fix | Delete
}
[36] Fix | Delete
el.classList.add('selected');
[37] Fix | Delete
hide?.classList.remove('selected');
[38] Fix | Delete
if(type!=='click' && optionTab!==null){
[39] Fix | Delete
api.Utils.addViewPortClass(optionTab);
[40] Fix | Delete
}
[41] Fix | Delete
[42] Fix | Delete
},
[43] Fix | Delete
smallBarHover=cid=>{
[44] Fix | Delete
actionBarPrevEl?.classList.remove('tb_current_module') || bodyCl.add('tb_nested_hover');
[45] Fix | Delete
if(cid){
[46] Fix | Delete
actionBarPrevEl= Registry.get(cid).el;
[47] Fix | Delete
actionBarPrevEl.classList.add('tb_current_module');
[48] Fix | Delete
}
[49] Fix | Delete
},
[50] Fix | Delete
smallBarClick=async e=>{
[51] Fix | Delete
e.stopPropagation();
[52] Fix | Delete
const cid=e.target.dataset.cid;
[53] Fix | Delete
if(cid){
[54] Fix | Delete
const currentTarget= e.currentTarget,
[55] Fix | Delete
model=Registry.get(cid),
[56] Fix | Delete
el=model.type==='subrow'?model.el.tfClass('module_subrow')[0]:model.el,
[57] Fix | Delete
actionBar=el.querySelector(':scope>.tb_'+model.type+'_action');
[58] Fix | Delete
await model.edit();
[59] Fix | Delete
if(model.type==='module'){
[60] Fix | Delete
currentTarget.closest('.tb_small_bar')?.classList.remove('tb_small_bar');
[61] Fix | Delete
model.el.classList.remove('tb_small_bar');
[62] Fix | Delete
}
[63] Fix | Delete
el.classList.add('tb_show_action');
[64] Fix | Delete
Themify.triggerEvent(actionBar,'pointerover',{target:actionBar},true);
[65] Fix | Delete
api.ActionBar.disable=api.ActionBar.disableClear=true;
[66] Fix | Delete
smallBarHover(cid);
[67] Fix | Delete
currentTarget.tfOff(_CLICK_,smallBarClick,{passive:true}).remove();
[68] Fix | Delete
setTimeout(()=>{
[69] Fix | Delete
const disable=e=>{
[70] Fix | Delete
if(!e || e.button===0){
[71] Fix | Delete
api.Builder.get().el.tfOff('pointerdown', disable,{passive:true});
[72] Fix | Delete
doc.tfOff('pointerdown', disable,{passive:true});
[73] Fix | Delete
topWindowDoc.tfOff('pointerdown', disable,{passive:true});
[74] Fix | Delete
Themify.off('themify_builder_lightbox_close', disable);
[75] Fix | Delete
setTimeout(()=>{
[76] Fix | Delete
for (let selected = api.Builder.get().el.tfClass('tb_show_action'),i = selected.length - 1; i > -1; --i) {
[77] Fix | Delete
selected[i].classList.remove('tb_show_action');
[78] Fix | Delete
}
[79] Fix | Delete
api.ActionBar.disableClear=api.ActionBar.disable=null;
[80] Fix | Delete
Themify.triggerEvent(e.target,'pointerover',{target:e.target},true);
[81] Fix | Delete
},100);
[82] Fix | Delete
}
[83] Fix | Delete
};
[84] Fix | Delete
api.Builder.get().el.tfOn('pointerdown', disable,{passive:true});
[85] Fix | Delete
doc.tfOn('pointerdown', disable,{passive:true});
[86] Fix | Delete
Themify.on('themify_builder_lightbox_close', disable,true);
[87] Fix | Delete
if(isFrontend){
[88] Fix | Delete
topWindowDoc.tfOn('pointerdown', disable,{passive:true});
[89] Fix | Delete
}
[90] Fix | Delete
},150);
[91] Fix | Delete
}
[92] Fix | Delete
},
[93] Fix | Delete
menuHover=e=>{
[94] Fix | Delete
e.stopPropagation();
[95] Fix | Delete
const m=e.currentTarget,
[96] Fix | Delete
root=m.getRootNode(),
[97] Fix | Delete
target=e.target,
[98] Fix | Delete
inner_menu=target.classList.contains('more') || target.classList.contains('inner_more')?target.tfClass('menu')[0]:null;
[99] Fix | Delete
if (inner_menu || target.classList.contains('inner_more') || target.classList.contains('menu')) {
[100] Fix | Delete
api.Utils.addViewPortClass((inner_menu || target));
[101] Fix | Delete
}
[102] Fix | Delete
if(target.hasAttribute('data-href')){
[103] Fix | Delete
showTab(target);
[104] Fix | Delete
}
[105] Fix | Delete
else {
[106] Fix | Delete
const tab=root.querySelector('.tab');
[107] Fix | Delete
if(tab!==null){
[108] Fix | Delete
for(let nav=m.children,i=nav.length-1;i>-1;--i){
[109] Fix | Delete
nav[i].classList.remove('selected');
[110] Fix | Delete
}
[111] Fix | Delete
tab.classList.remove('selected');
[112] Fix | Delete
}
[113] Fix | Delete
else if(!inner_menu && target.part.contains('nested') && !root.querySelector('.nested_menu')){
[114] Fix | Delete
let el=root.host.closest('[data-cid]'),
[115] Fix | Delete
builder=api.Builder.get().el,
[116] Fix | Delete
ids=[el.dataset.cid],
[117] Fix | Delete
index=0,
[118] Fix | Delete
submenu=createElement('ul','menu nested_menu tf_hide tf_box tf_scrollbar');
[119] Fix | Delete
if(el.classList.contains('tb_show_action')){
[120] Fix | Delete
return;
[121] Fix | Delete
}
[122] Fix | Delete
while(true){
[123] Fix | Delete
el = el.parentNode.closest('[data-cid]');
[124] Fix | Delete
if(!el || !builder.contains(el)){
[125] Fix | Delete
break;
[126] Fix | Delete
}
[127] Fix | Delete
ids.push(el.dataset.cid);
[128] Fix | Delete
}
[129] Fix | Delete
for(let i=0;i<ids.length;++i){
[130] Fix | Delete
let model = Registry.get(ids[i]);
[131] Fix | Delete
if(model.locked!==true){
[132] Fix | Delete
let type=model.type,
[133] Fix | Delete
li = createElement('li','',type==='module'?model.getName():(model.isSubCol?'Sub Column':type)),
[134] Fix | Delete
lvl;
[135] Fix | Delete
if(i===0 && model.isEmpty){
[136] Fix | Delete
return;
[137] Fix | Delete
}
[138] Fix | Delete
if(type==='subrow' || type==='row'){
[139] Fix | Delete
lvl=index-1;
[140] Fix | Delete
}
[141] Fix | Delete
else{
[142] Fix | Delete
if(type==='module'){
[143] Fix | Delete
lvl=index=0;
[144] Fix | Delete
}
[145] Fix | Delete
else {
[146] Fix | Delete
lvl=index;
[147] Fix | Delete
}
[148] Fix | Delete
++index;
[149] Fix | Delete
}
[150] Fix | Delete
li.className='lvl'+lvl;
[151] Fix | Delete
li.dataset.cid=ids[i];
[152] Fix | Delete
if(lvl!==0){
[153] Fix | Delete
li.style.marginInlineStart=(5*lvl)+'px';
[154] Fix | Delete
}
[155] Fix | Delete
submenu.appendChild(li);
[156] Fix | Delete
}
[157] Fix | Delete
}
[158] Fix | Delete
submenu.tfOn(_CLICK_,smallBarClick,{passive:true})
[159] Fix | Delete
.part='menu nested_menu';
[160] Fix | Delete
target.appendChild(submenu);
[161] Fix | Delete
api.Utils.addViewPortClass(submenu);
[162] Fix | Delete
}else if(target.dataset.cid && target.parentNode.classList.contains('nested_menu')){
[163] Fix | Delete
smallBarHover(target.dataset.cid);
[164] Fix | Delete
}
[165] Fix | Delete
}
[166] Fix | Delete
},
[167] Fix | Delete
shadowRootClick=function(e){
[168] Fix | Delete
e.stopPropagation();
[169] Fix | Delete
const action=e.target.closest('[data-action],[part]');
[170] Fix | Delete
if(action){
[171] Fix | Delete
let module=Registry.get(this.host.closest('[data-cid]').dataset.cid),
[172] Fix | Delete
el=module.el,
[173] Fix | Delete
actionName=action.dataset.action || action.part.item(0);
[174] Fix | Delete
if(actionName==='edit' || actionName==='styling' || actionName==='visibility' || actionName==='swap'){
[175] Fix | Delete
if(actionName==='edit' && module.type==='module' && this.querySelector('.swap')?.offsetParent){
[176] Fix | Delete
actionName='editBuilder';
[177] Fix | Delete
}
[178] Fix | Delete
module.edit(actionName);
[179] Fix | Delete
}
[180] Fix | Delete
else if(actionName==='add_col'){
[181] Fix | Delete
const col=new api.Column({},module.type==='subrow');
[182] Fix | Delete
api.undoManager.start('move');
[183] Fix | Delete
api.Drop.column(col.el,el,'right').then(()=>{
[184] Fix | Delete
api.undoManager.end('move');
[185] Fix | Delete
});
[186] Fix | Delete
}
[187] Fix | Delete
else if(actionName==='up' || actionName==='down'){
[188] Fix | Delete
const nextEl= actionName==='up'?el.previousElementSibling:el.nextElementSibling,
[189] Fix | Delete
offset=parseInt(getComputedStyle(doc.querySelector(':root')).getPropertyValue('--tb_toolbar_h'));
[190] Fix | Delete
api.ActionBar.clear();
[191] Fix | Delete
el.classList.add('tb_draggable_item');
[192] Fix | Delete
api.undoManager.start('move');
[193] Fix | Delete
actionName==='up'?nextEl.before(el):nextEl.after(el);
[194] Fix | Delete
Themify.trigger('tb_' + module.type + '_sort', [el]);
[195] Fix | Delete
api.undoManager.end('move');
[196] Fix | Delete
el.classList.remove('tb_draggable_item');
[197] Fix | Delete
api.Utils.scrollTo(el,offset*2-window.scrollY,{behavior:'smooth'});
[198] Fix | Delete
}
[199] Fix | Delete
else if(module[actionName]){
[200] Fix | Delete
module[actionName](actionName==='paste'?e.target.classList.contains('style'):e.target);
[201] Fix | Delete
}
[202] Fix | Delete
}
[203] Fix | Delete
else if(e.target.hasAttribute('data-href')){
[204] Fix | Delete
showTab(e.target,'click');
[205] Fix | Delete
}
[206] Fix | Delete
};
[207] Fix | Delete
[208] Fix | Delete
class Bar extends HTMLElement {
[209] Fix | Delete
connectedCallback () {
[210] Fix | Delete
const tpl=this.constructor._template.cloneNode(true),
[211] Fix | Delete
menu=tpl.querySelector('.dropdown'),
[212] Fix | Delete
parent=this.constructor===ModuleBar?this.parentNode.parentNode:null,
[213] Fix | Delete
isSmall=parent?.offsetWidth <220;
[214] Fix | Delete
if(isSmall===true){
[215] Fix | Delete
menu.classList.add('tb_small_bar');
[216] Fix | Delete
menu.children[~~(menu.childElementCount/2)].after(menu.firstElementChild);
[217] Fix | Delete
}
[218] Fix | Delete
parent?.classList.toggle('tb_small_bar',isSmall);
[219] Fix | Delete
this.attachShadow({ mode:'open'}).appendChild(tpl);
[220] Fix | Delete
menu.tfOn('pointerover',menuHover,{passive:true});
[221] Fix | Delete
this.shadowRoot.tfOn(_CLICK_,shadowRootClick,{passive:true});
[222] Fix | Delete
[223] Fix | Delete
}
[224] Fix | Delete
disconnectedCallback(){
[225] Fix | Delete
const menu=this.shadowRoot.tfOff(_CLICK_,shadowRootClick,{passive:true}).querySelector('.dropdown');
[226] Fix | Delete
menu?.tfOff('pointerover',menuHover,{passive:true})
[227] Fix | Delete
.tfClass('nested_menu')[0]?.tfOff(_CLICK_,smallBarClick,{passive:true});
[228] Fix | Delete
bodyCl.remove('tb_nested_hover');
[229] Fix | Delete
actionBarPrevEl?.classList.remove('tb_current_module');
[230] Fix | Delete
actionBarPrevEl=null;
[231] Fix | Delete
}
[232] Fix | Delete
}
[233] Fix | Delete
class RowBar extends Bar {
[234] Fix | Delete
static _template=row;
[235] Fix | Delete
}
[236] Fix | Delete
class ColumnBar extends Bar {
[237] Fix | Delete
static _template=column;
[238] Fix | Delete
}
[239] Fix | Delete
class SubrowBar extends Bar {
[240] Fix | Delete
static _template=subrow;
[241] Fix | Delete
}
[242] Fix | Delete
class ModuleBar extends Bar {
[243] Fix | Delete
static _template=module;
[244] Fix | Delete
}
[245] Fix | Delete
customElements.define('tb-row-bar', RowBar);
[246] Fix | Delete
customElements.define('tb-column-bar', ColumnBar);
[247] Fix | Delete
customElements.define('tb-subrow-bar', SubrowBar);
[248] Fix | Delete
customElements.define('tb-module-bar', ModuleBar);
[249] Fix | Delete
[250] Fix | Delete
api.ActionBar = {
[251] Fix | Delete
cid:null,
[252] Fix | Delete
disable:null,
[253] Fix | Delete
breadCrumbs:null,
[254] Fix | Delete
disablePosition:null,
[255] Fix | Delete
_init() {
[256] Fix | Delete
const actionBarCss=module.querySelector('style'),//we are rendreing the inline css ONLY in module bar on the page loading
[257] Fix | Delete
fr=createDocumentFragment(),
[258] Fix | Delete
gridCss=row.querySelector('#module_row_grids_style'),
[259] Fix | Delete
formFields=row.querySelector('#module_form_fields_style'),
[260] Fix | Delete
allowedSvg=new Set(['move','pencil','settings','brush','layers','more','save','export','import','files','clipboard','eye','new-window','desktop','tablet','tablet','mobile','help','widgetized']),
[261] Fix | Delete
topHead=topWindowDoc.head;
[262] Fix | Delete
[263] Fix | Delete
fr.appendChild(api.ToolBar.getBaseCss());
[264] Fix | Delete
const svgs=fr.querySelectorAll('#tf_svg symbol');
[265] Fix | Delete
for(let i=svgs.length-1;i>-1;--i){
[266] Fix | Delete
let id=svgs[i].id.replace('tf-ti-','');
[267] Fix | Delete
if(!allowedSvg.has(id)){
[268] Fix | Delete
svgs[i].remove();
[269] Fix | Delete
}
[270] Fix | Delete
}
[271] Fix | Delete
module.prepend(fr.cloneNode(true));
[272] Fix | Delete
fr.appendChild(actionBarCss.cloneNode(true));
[273] Fix | Delete
[274] Fix | Delete
row.prepend(fr.cloneNode(true));
[275] Fix | Delete
[276] Fix | Delete
column.prepend(fr.cloneNode(true));
[277] Fix | Delete
fr.appendChild(formFields.cloneNode(true));
[278] Fix | Delete
[279] Fix | Delete
subrow.prepend(fr,gridCss.cloneNode(true));
[280] Fix | Delete
if(isFrontend){
[281] Fix | Delete
topHead.prepend(formFields.cloneNode(true));
[282] Fix | Delete
}
[283] Fix | Delete
else{
[284] Fix | Delete
topHead.appendChild(formFields.cloneNode(true));
[285] Fix | Delete
}
[286] Fix | Delete
if (api.isGSPage === true) {
[287] Fix | Delete
return;
[288] Fix | Delete
}
[289] Fix | Delete
this.breadCrumbs = createElement('ul','tb_action_breadcrumb');
[290] Fix | Delete
[291] Fix | Delete
Themify.on('themify_builder_ready',()=>{
[292] Fix | Delete
const builder=api.Builder.get().el;
[293] Fix | Delete
[294] Fix | Delete
[295] Fix | Delete
builder.tfOn(_CLICK_, e=>{
[296] Fix | Delete
const target=e.target;
[297] Fix | Delete
if(api.isDocked && target.classList.contains('tb_dragger')){
[298] Fix | Delete
e.preventDefault();
[299] Fix | Delete
e.stopPropagation();
[300] Fix | Delete
api.EdgeDrag.openLightBox(target);
[301] Fix | Delete
return;
[302] Fix | Delete
}
[303] Fix | Delete
if(target.closest('.tb_visibility_hint,.tb_row_info')){
[304] Fix | Delete
const model=Registry.get(target.closest('[data-cid]').dataset.cid);
[305] Fix | Delete
if(target.closest('.tb_visibility_hint')){
[306] Fix | Delete
model.edit('visibility');
[307] Fix | Delete
}
[308] Fix | Delete
else{
[309] Fix | Delete
model.edit().then(lb=>{
[310] Fix | Delete
const cssField=lb.querySelector('.tb_field_group_css .tb_style_toggle.tb_closed');
[311] Fix | Delete
if(cssField){
[312] Fix | Delete
Themify.triggerEvent(cssField, e.type);
[313] Fix | Delete
}
[314] Fix | Delete
})
[315] Fix | Delete
.catch(()=>{
[316] Fix | Delete
[317] Fix | Delete
});
[318] Fix | Delete
}
[319] Fix | Delete
return;
[320] Fix | Delete
}
[321] Fix | Delete
this._click(e);
[322] Fix | Delete
[323] Fix | Delete
})
[324] Fix | Delete
.tfOn('pointerover', e=>{
[325] Fix | Delete
e.stopPropagation();
[326] Fix | Delete
cancelAnimationFrame(this.req);
[327] Fix | Delete
clearTimeout(this.timer);
[328] Fix | Delete
if(e.isTrusted===true){
[329] Fix | Delete
this.req=requestAnimationFrame(()=>{
[330] Fix | Delete
this.timer=setTimeout(()=>{
[331] Fix | Delete
this.hover(e);
[332] Fix | Delete
},0);
[333] Fix | Delete
});
[334] Fix | Delete
}
[335] Fix | Delete
else{
[336] Fix | Delete
this.hover(e);
[337] Fix | Delete
}
[338] Fix | Delete
},{passive: true});
[339] Fix | Delete
if(!Themify.isTouch){
[340] Fix | Delete
builder.tfOn('pointerleave', e=>{
[341] Fix | Delete
if(e.relatedTarget!==e.currentTarget.ownerDocument.body){
[342] Fix | Delete
this.clear();
[343] Fix | Delete
}
[344] Fix | Delete
if (api.isVisual) {
[345] Fix | Delete
api.EdgeDrag.clearTimer(e.clientX,e.clientY);
[346] Fix | Delete
}
[347] Fix | Delete
},{passive: true})
[348] Fix | Delete
.tfOn('dblclick', e=>{
[349] Fix | Delete
const target = e.target,
[350] Fix | Delete
tagName = target.tagName;
[351] Fix | Delete
if(!doc.activeElement.isContentEditable && tagName !== 'INPUT' && tagName !== 'TEXTAREA'){
[352] Fix | Delete
if(tagName==='DIV' &&target.classList.contains('tb_dragger')){
[353] Fix | Delete
api.EdgeDrag.openLightBox(target);
[354] Fix | Delete
}
[355] Fix | Delete
else if(!api.isDocked){
[356] Fix | Delete
const el = target.closest('[data-cid]');
[357] Fix | Delete
if(el){
[358] Fix | Delete
e.preventDefault();
[359] Fix | Delete
const model = Registry.get(el.dataset.cid),
[360] Fix | Delete
actionBar=model.el.tfTag('tb-'+model.type+'-bar')[0];
[361] Fix | Delete
if(model.isEmpty!==true){
[362] Fix | Delete
if(actionBar){
[363] Fix | Delete
if(!actionBar.contains(target)){
[364] Fix | Delete
const editBtn=actionBar.shadowRoot.querySelector('.edit');
[365] Fix | Delete
if(editBtn){
[366] Fix | Delete
Themify.triggerEvent(editBtn,_CLICK_);
[367] Fix | Delete
}
[368] Fix | Delete
}
[369] Fix | Delete
}
[370] Fix | Delete
else{
[371] Fix | Delete
this._click(e);
[372] Fix | Delete
}
[373] Fix | Delete
}
[374] Fix | Delete
}
[375] Fix | Delete
}
[376] Fix | Delete
}
[377] Fix | Delete
});
[378] Fix | Delete
if(!themifyBuilder.disableShortcuts){
[379] Fix | Delete
const canvas = isFrontend ? null : doc.tfId('tb_canvas_block');
[380] Fix | Delete
[381] Fix | Delete
if (canvas === null) {
[382] Fix | Delete
doc.tfOn('keydown', e=>{
[383] Fix | Delete
this.actions(e);
[384] Fix | Delete
});
[385] Fix | Delete
topWindowDoc.tfOn('keydown', e=>{
[386] Fix | Delete
this.actions(e);
[387] Fix | Delete
});
[388] Fix | Delete
} else {
[389] Fix | Delete
canvas.tfOn('keydown', e=>{
[390] Fix | Delete
this.actions(e);
[391] Fix | Delete
});
[392] Fix | Delete
}
[393] Fix | Delete
}
[394] Fix | Delete
}
[395] Fix | Delete
}, true,api.is_builder_ready);
[396] Fix | Delete
},
[397] Fix | Delete
async actions(e) {
[398] Fix | Delete
const target = e.target,
[399] Fix | Delete
tagName = target.tagName;
[400] Fix | Delete
if (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !doc.activeElement.isContentEditable && !api.LightBox.el.contains(target) && (!isFrontend ||!api.activeModel?.el?.contains(doc.activeElement))) {
[401] Fix | Delete
const code = e.code,
[402] Fix | Delete
items = api.Builder.get().el.tfClass('tb_element_clicked');
[403] Fix | Delete
let len = items.length;
[404] Fix | Delete
if (len > 0) {
[405] Fix | Delete
let act=e.action,
[406] Fix | Delete
pasteStyle=true;
[407] Fix | Delete
if(!act){
[408] Fix | Delete
if (code === 'Delete') {
[409] Fix | Delete
act = 'delete';
[410] Fix | Delete
}
[411] Fix | Delete
else if (e.ctrlKey === true || e.metaKey === true) {
[412] Fix | Delete
if (code === 'KeyC') {
[413] Fix | Delete
act = 'copy';
[414] Fix | Delete
}
[415] Fix | Delete
else if (code === 'KeyD') {
[416] Fix | Delete
act = 'duplicate';
[417] Fix | Delete
}
[418] Fix | Delete
else if (code === 'KeyV') {
[419] Fix | Delete
act = 'paste';
[420] Fix | Delete
}
[421] Fix | Delete
}
[422] Fix | Delete
}
[423] Fix | Delete
if(act){
[424] Fix | Delete
if(act==='copy'){
[425] Fix | Delete
len=1;
[426] Fix | Delete
}
[427] Fix | Delete
else if(act==='paste'){
[428] Fix | Delete
pasteStyle = e.shiftKey === true;
[429] Fix | Delete
}
[430] Fix | Delete
if(typeof e.preventDefault==='function'){
[431] Fix | Delete
e.preventDefault();
[432] Fix | Delete
e.stopPropagation();
[433] Fix | Delete
}
[434] Fix | Delete
if(act === 'delete' || act === 'paste'){
[435] Fix | Delete
await api.LightBox.save();
[436] Fix | Delete
}
[437] Fix | Delete
api.undoManager.start(act);
[438] Fix | Delete
const proms=[];
[439] Fix | Delete
for (let i = len - 1; i > -1; --i) {
[440] Fix | Delete
let selected = items[i].closest('[data-cid]');
[441] Fix | Delete
if(selected!==null){
[442] Fix | Delete
let el=Registry.get(selected.dataset.cid);
[443] Fix | Delete
if(el){
[444] Fix | Delete
proms.push(el[act](pasteStyle,true));
[445] Fix | Delete
}
[446] Fix | Delete
}
[447] Fix | Delete
}
[448] Fix | Delete
if (act === 'delete') {
[449] Fix | Delete
this.clear();
[450] Fix | Delete
}
[451] Fix | Delete
try{
[452] Fix | Delete
await Promise.all(proms);
[453] Fix | Delete
}
[454] Fix | Delete
catch (e){
[455] Fix | Delete
[456] Fix | Delete
}
[457] Fix | Delete
api.undoManager.end(act);
[458] Fix | Delete
}
[459] Fix | Delete
}
[460] Fix | Delete
}
[461] Fix | Delete
},
[462] Fix | Delete
columnDragers(el){
[463] Fix | Delete
let col = el.parentNode,
[464] Fix | Delete
items = api.Builder.get().el.querySelectorAll('.tb_hide_drag_left,.tb_hide_drag_right'),
[465] Fix | Delete
left = col.offsetLeft,
[466] Fix | Delete
offset=api.isVisual?3:13;
[467] Fix | Delete
for (let i = items.length - 1; i > -1; --i) {
[468] Fix | Delete
items[i].classList.remove('tb_hide_drag_left', 'tb_hide_drag_right');
[469] Fix | Delete
}
[470] Fix | Delete
if (left<=offset) {
[471] Fix | Delete
col.classList.add('tb_hide_drag_left');
[472] Fix | Delete
}
[473] Fix | Delete
if ((left + col.offsetWidth+offset) >= col.parentNode.offsetWidth) {
[474] Fix | Delete
col.classList.add('tb_hide_drag_right');
[475] Fix | Delete
}
[476] Fix | Delete
},
[477] Fix | Delete
hover(e) {
[478] Fix | Delete
const target=e.target;
[479] Fix | Delete
if (api.isPreview!==true && !bodyCl.contains('tb_start_animate') && this.disable === null && target.id!=='tb_small_toolbar_root') {
[480] Fix | Delete
if (api.isVisual) {
[481] Fix | Delete
api.EdgeDrag.setTimer(target);
[482] Fix | Delete
api.EdgeDrag.clearTimer(e.clientX,e.clientY);
[483] Fix | Delete
}
[484] Fix | Delete
if (this.disablePosition === null) {
[485] Fix | Delete
const el=target.closest('[data-cid]');
[486] Fix | Delete
if(el!==null && !el.classList.contains('tb_active_layout_part')){
[487] Fix | Delete
const cid=el.dataset.cid,
[488] Fix | Delete
model = Registry.get(cid);
[489] Fix | Delete
if(this.cid!==cid){
[490] Fix | Delete
this.clear();
[491] Fix | Delete
if(target.classList.contains('tb_grid_drag')){
[492] Fix | Delete
this.columnDragers(target);
[493] Fix | Delete
}
[494] Fix | Delete
const actionBar=model.type==='module'?el.querySelector(':scope > .tb_'+model.type+'_action'):(target.classList.contains('tb_action_wrap')?target:null);
[495] Fix | Delete
if (actionBar) {
[496] Fix | Delete
this.cid=cid;
[497] Fix | Delete
let slug= model.get('mod_name'),
[498] Fix | Delete
cl='tb_bar',
[499] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function