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/modules
File: base.mjs
(api=> {
[0] Fix | Delete
"use strict";
[1] Fix | Delete
const Clipboard={
[2] Fix | Delete
_key: 'tb_clipboard',
[3] Fix | Delete
async _set(type, content) {
[4] Fix | Delete
const data = JSON.stringify({
[5] Fix | Delete
[type]:content
[6] Fix | Delete
});
[7] Fix | Delete
try{
[8] Fix | Delete
await navigator.clipboard.writeText(data);
[9] Fix | Delete
}
[10] Fix | Delete
catch(e){
[11] Fix | Delete
}
[12] Fix | Delete
localStorage.setItem(this._key, data);//always save for local site,because we don't know on what site user will paste,otherwise on paste will ask the permission even if the site is the same
[13] Fix | Delete
},
[14] Fix | Delete
async _get(type) {
[15] Fix | Delete
let res;
[16] Fix | Delete
try{
[17] Fix | Delete
res=await navigator.clipboard.readText();
[18] Fix | Delete
}
[19] Fix | Delete
catch(e){
[20] Fix | Delete
res=localStorage.getItem(this._key);
[21] Fix | Delete
}
[22] Fix | Delete
if(res){
[23] Fix | Delete
res=JSON.parse(res);
[24] Fix | Delete
}
[25] Fix | Delete
return res?.[type] || false;
[26] Fix | Delete
}
[27] Fix | Delete
};
[28] Fix | Delete
api.Base=class {
[29] Fix | Delete
constructor(fields) {
[30] Fix | Delete
if(fields?.locked===true){
[31] Fix | Delete
this.locked=true;
[32] Fix | Delete
}
[33] Fix | Delete
this.fields = {...this.defaults(), ...fields};
[34] Fix | Delete
}
[35] Fix | Delete
initialize(){
[36] Fix | Delete
const _this=this;
[37] Fix | Delete
_this.fields.element_id??=api.Helper.generateUniqueID();
[38] Fix | Delete
_this.id = _this.fields.element_id;
[39] Fix | Delete
_this.el = createElement();
[40] Fix | Delete
if (_this.type !== 'module') {
[41] Fix | Delete
_this.el.appendChild(doc.tfId('tmpl-builder_' + _this.type + '_item').content.cloneNode(true));
[42] Fix | Delete
}
[43] Fix | Delete
_this.setHtmlAttributes();
[44] Fix | Delete
api.Registry.add(_this);
[45] Fix | Delete
}
[46] Fix | Delete
static getOptions(slug) {
[47] Fix | Delete
return [
[48] Fix | Delete
{
[49] Fix | Delete
id: 'custom_css_'+slug,
[50] Fix | Delete
type: 'custom_css'
[51] Fix | Delete
},
[52] Fix | Delete
{
[53] Fix | Delete
type: 'clickable'
[54] Fix | Delete
}
[55] Fix | Delete
];
[56] Fix | Delete
}
[57] Fix | Delete
async setData(data,dymmy) {
[58] Fix | Delete
api.Helper.clearElementId([data],true);
[59] Fix | Delete
const model=this.type==='module'?api.Module.initModule(data):new (api.Module.getModuleClassName(this.get('mod_name')))(data,this.isSubCol);
[60] Fix | Delete
dymmy.replaceWith(model.el);
[61] Fix | Delete
if (api.isVisual) {
[62] Fix | Delete
return model.reCreate();
[63] Fix | Delete
}
[64] Fix | Delete
api.Utils.runJs(model.el);
[65] Fix | Delete
}
[66] Fix | Delete
get(id) {
[67] Fix | Delete
const _this=this,
[68] Fix | Delete
{type,fields}=_this,
[69] Fix | Delete
mainId=type === 'module' ? 'mod_settings' : 'styling';
[70] Fix | Delete
if (id === 'element_id') {
[71] Fix | Delete
return _this.id;
[72] Fix | Delete
}
[73] Fix | Delete
if (id === 'mod_name') {
[74] Fix | Delete
return type === 'module' ? fields[id] : type;
[75] Fix | Delete
}
[76] Fix | Delete
if (id === 'sizes' || id === 'cols' || id === 'modules' || id === 'mod_settings' || id === 'styling') {
[77] Fix | Delete
return id === 'sizes' || id === 'cols'|| id === 'modules'?fields[id]:fields[mainId];
[78] Fix | Delete
}
[79] Fix | Delete
if(_this.defaults()[id]!==undefined){
[80] Fix | Delete
return fields[id];
[81] Fix | Delete
}
[82] Fix | Delete
if(type==='row' || type==='subrow' || (type==='column' && (id==='grid_class' || id==='grid_width'))){//backward
[83] Fix | Delete
if(id==='grid_class' || id==='grid_width' || id === 'gutter' || id === 'column_alignment' || id === 'column_h' || id === 'desktop_dir' || id === 'tablet_landscape_dir' || id==='tablet_dir' || id==='mobile_dir' || id==='col_tablet_landscape' || id==='col_tablet' || id==='col_mobile'){
[84] Fix | Delete
return fields[id];
[85] Fix | Delete
}
[86] Fix | Delete
}
[87] Fix | Delete
return fields[mainId][id];
[88] Fix | Delete
}
[89] Fix | Delete
set(id, value) {
[90] Fix | Delete
const _this=this,
[91] Fix | Delete
mainId=_this.type === 'module' ? 'mod_settings' : 'styling',
[92] Fix | Delete
fields=_this.fields;
[93] Fix | Delete
if(id === 'cols' || id === 'modules' || id==='sizes' || id === 'mod_settings' || id === 'styling' || id === 'element_id'){
[94] Fix | Delete
if(id!=='sizes' && id !== 'cols' && id !== 'modules'){
[95] Fix | Delete
if(id === 'element_id'){
[96] Fix | Delete
_this.id = value;
[97] Fix | Delete
}
[98] Fix | Delete
else{
[99] Fix | Delete
id=mainId;
[100] Fix | Delete
}
[101] Fix | Delete
}
[102] Fix | Delete
fields[id] = value;
[103] Fix | Delete
}
[104] Fix | Delete
else if(_this.defaults()[id]!==undefined){
[105] Fix | Delete
fields[id] = value;
[106] Fix | Delete
}
[107] Fix | Delete
else{
[108] Fix | Delete
fields[mainId][id] = value;
[109] Fix | Delete
}
[110] Fix | Delete
return _this;
[111] Fix | Delete
}
[112] Fix | Delete
unset(id) {
[113] Fix | Delete
if (id === 'mod_settings' || id === 'styling') {
[114] Fix | Delete
id = this.type === 'module' ? 'mod_settings' : 'styling';
[115] Fix | Delete
}
[116] Fix | Delete
delete this.fields[id];
[117] Fix | Delete
return this;
[118] Fix | Delete
}
[119] Fix | Delete
destroy(){
[120] Fix | Delete
api.Registry.remove(this.id);
[121] Fix | Delete
}
[122] Fix | Delete
setHtmlAttributes() {
[123] Fix | Delete
const attr = this.attributes();
[124] Fix | Delete
attr['data-cid'] = this.id;
[125] Fix | Delete
attr.draggable = true;
[126] Fix | Delete
for (let i in attr) {
[127] Fix | Delete
this.el.setAttribute(i, attr[i]);
[128] Fix | Delete
}
[129] Fix | Delete
}
[130] Fix | Delete
getData() {
[131] Fix | Delete
let data={},
[132] Fix | Delete
type=this.type;
[133] Fix | Delete
//module can be tab or acc which they contains others modules, that is why we can't just copy the module settings,we need to call _getRowSettings
[134] Fix | Delete
if(type==='column' || type==='module'){
[135] Fix | Delete
const selectedRow = this.el.closest('.active_subrow,.module_row' ),
[136] Fix | Delete
rowData = api.Utils.getRowSettings(selectedRow, (selectedRow.classList.contains('active_subrow') ? 'subrow' : 'row'));
[137] Fix | Delete
main:for(let cols=rowData.cols,i=cols.length-1;i>-1;--i){
[138] Fix | Delete
let col=cols[i];
[139] Fix | Delete
if(type==='module'){
[140] Fix | Delete
if(col.modules){
[141] Fix | Delete
for(let j=col.modules.length-1;j>-1;--j){
[142] Fix | Delete
if(col.modules[j].element_id===this.id){
[143] Fix | Delete
data = col.modules[j];
[144] Fix | Delete
break main;
[145] Fix | Delete
}
[146] Fix | Delete
}
[147] Fix | Delete
}
[148] Fix | Delete
}
[149] Fix | Delete
else if(col.element_id===this.id){
[150] Fix | Delete
data = col;
[151] Fix | Delete
break;
[152] Fix | Delete
}
[153] Fix | Delete
}
[154] Fix | Delete
}
[155] Fix | Delete
else{
[156] Fix | Delete
data = api.Utils.getRowSettings(this.el, type);
[157] Fix | Delete
}
[158] Fix | Delete
return data;
[159] Fix | Delete
}
[160] Fix | Delete
fixSafariSrcSet(){
[161] Fix | Delete
if (api.isSafari === true && api.isVisual) {
[162] Fix | Delete
const img = this.el.querySelectorAll('img[srcset]');
[163] Fix | Delete
for(let i=img.length-1;i>-1;--i){// Fix Srcset in safari browser
[164] Fix | Delete
img[i].outerHTML = img[i].outerHTML;
[165] Fix | Delete
}
[166] Fix | Delete
}
[167] Fix | Delete
}
[168] Fix | Delete
visibilityLabel() {
[169] Fix | Delete
if(this.type!=='column'){
[170] Fix | Delete
const _this=this,
[171] Fix | Delete
styling = _this.id === api.activeModel?.id && ThemifyConstructor.clicked === 'visibility' ? api.Forms.serialize('tb_options_visibility') : _this.get('mod_settings');
[172] Fix | Delete
if (styling) {
[173] Fix | Delete
const el=_this.type==='subrow'?_this.el.tfClass('module_subrow')[0]:_this.el,
[174] Fix | Delete
label = el.querySelector(':scope>.tb_visibility_hint'),
[175] Fix | Delete
visiblityVars = {
[176] Fix | Delete
visibility_desktop: i18n.de,
[177] Fix | Delete
visibility_mobile: i18n.mo,
[178] Fix | Delete
visibility_tablet: i18n.ta,
[179] Fix | Delete
visibility_tablet_landscape: i18n.table_landscape,
[180] Fix | Delete
sticky_visibility: i18n.s_v
[181] Fix | Delete
};
[182] Fix | Delete
if (label !== null) {
[183] Fix | Delete
let txt = '';
[184] Fix | Delete
if ('hide_all' === styling.visibility_all) {
[185] Fix | Delete
txt = i18n.h_a;
[186] Fix | Delete
}
[187] Fix | Delete
else {
[188] Fix | Delete
let prefix;
[189] Fix | Delete
for (let i in visiblityVars) {
[190] Fix | Delete
prefix = '' === txt ? '' : ', ';
[191] Fix | Delete
txt += 'hide' === styling[i] ? prefix + visiblityVars[i] : '';
[192] Fix | Delete
}
[193] Fix | Delete
}
[194] Fix | Delete
if (txt !== '') {
[195] Fix | Delete
if(label.tfTag('svg')[0]===undefined){
[196] Fix | Delete
label.appendChild(api.Helper.getIcon('ti-eye'));
[197] Fix | Delete
}
[198] Fix | Delete
let t = label.tfTag('span')[0];
[199] Fix | Delete
if (t === undefined) {
[200] Fix | Delete
label.appendChild(createElement('span','',txt));
[201] Fix | Delete
}else{
[202] Fix | Delete
t.textContent = txt;
[203] Fix | Delete
}
[204] Fix | Delete
label.classList.add('tb_has_visiblity');
[205] Fix | Delete
} else {
[206] Fix | Delete
label.classList.remove('tb_has_visiblity');
[207] Fix | Delete
}
[208] Fix | Delete
}
[209] Fix | Delete
}
[210] Fix | Delete
}
[211] Fix | Delete
}
[212] Fix | Delete
setBreadCrumbs(el) {
[213] Fix | Delete
if(api.isGSPage!==true){
[214] Fix | Delete
el=el.tfClass('tb_action_breadcrumb')[0];
[215] Fix | Delete
if(el!==undefined){
[216] Fix | Delete
el.replaceChildren();
[217] Fix | Delete
if(this.el.isConnected && this.type!=='row'){
[218] Fix | Delete
if(api.LightBox.el.contains(el)){
[219] Fix | Delete
el.tfOn(_CLICK_,e=>{
[220] Fix | Delete
const id=e.target.dataset.id;
[221] Fix | Delete
if(id){
[222] Fix | Delete
e.preventDefault();
[223] Fix | Delete
e.stopPropagation();
[224] Fix | Delete
api.Registry.get(id)?.edit();
[225] Fix | Delete
}
[226] Fix | Delete
});
[227] Fix | Delete
}
[228] Fix | Delete
el.appendChild(this.getBreadCrumbs());
[229] Fix | Delete
}
[230] Fix | Delete
}
[231] Fix | Delete
}
[232] Fix | Delete
}
[233] Fix | Delete
getBreadCrumbs() {
[234] Fix | Delete
const path=[this.id],
[235] Fix | Delete
builder=api.Builder.get().el,
[236] Fix | Delete
f = createDocumentFragment();
[237] Fix | Delete
if(api.isGSPage!==true){
[238] Fix | Delete
let parent=this.el;
[239] Fix | Delete
while(true){
[240] Fix | Delete
parent = parent.parentNode.closest('[data-cid]');
[241] Fix | Delete
if(!parent || !builder.contains(parent)){
[242] Fix | Delete
break;
[243] Fix | Delete
}
[244] Fix | Delete
path.push(parent.dataset.cid);
[245] Fix | Delete
}
[246] Fix | Delete
for(let i=path.length-1;i>-1;--i){
[247] Fix | Delete
let model = api.Registry.get(path[i]);
[248] Fix | Delete
if(model.locked!==true){
[249] Fix | Delete
let type = model.get('mod_name'),
[250] Fix | Delete
item = createElement('span','tb_bread tb_bread_' + type+' tf_inline_b tf_box tf_rel',model.isSubCol===true?'Sub-Column': type);
[251] Fix | Delete
if (this.id === path[i]) {
[252] Fix | Delete
item.className += ' tb_active_bc';
[253] Fix | Delete
}
[254] Fix | Delete
item.dataset.id=path[i];
[255] Fix | Delete
f.appendChild(item);
[256] Fix | Delete
}
[257] Fix | Delete
}
[258] Fix | Delete
}
[259] Fix | Delete
return f;
[260] Fix | Delete
}
[261] Fix | Delete
async duplicate(isMultiple) {
[262] Fix | Delete
if(api.activeModel && this.el.contains(api.activeModel.el)){
[263] Fix | Delete
await api.LightBox.save();
[264] Fix | Delete
}
[265] Fix | Delete
if(isMultiple!==true){
[266] Fix | Delete
api.undoManager.start('duplicate',this.id);
[267] Fix | Delete
}
[268] Fix | Delete
const data=this.getData(),
[269] Fix | Delete
dummy=createElement();
[270] Fix | Delete
[271] Fix | Delete
this.el.after(dummy);
[272] Fix | Delete
await this.setData(data,dummy);
[273] Fix | Delete
api.ModulePageBreak.countModules();
[274] Fix | Delete
if(isMultiple!==true){
[275] Fix | Delete
api.undoManager.end('duplicate');
[276] Fix | Delete
}
[277] Fix | Delete
}
[278] Fix | Delete
async delete(isMultiple) {
[279] Fix | Delete
const activeModel=api.activeModel,
[280] Fix | Delete
isSame=activeModel===this;
[281] Fix | Delete
if (!isSame && activeModel && this.el.contains(activeModel.el)) {
[282] Fix | Delete
await api.LightBox.save();
[283] Fix | Delete
}
[284] Fix | Delete
if(isMultiple!==true && !activeModel?.is_new){
[285] Fix | Delete
api.undoManager.start('delete',this.id);
[286] Fix | Delete
}
[287] Fix | Delete
if (this.type === 'column') {
[288] Fix | Delete
await api.Drop.column(this.el);
[289] Fix | Delete
}
[290] Fix | Delete
else if(this.type==='subrow'){
[291] Fix | Delete
const parent=this.el.parentNode,
[292] Fix | Delete
parentCl=parent.classList;
[293] Fix | Delete
if(parent.childElementCount===1 && (parentCl.contains('tab-content') || parentCl.contains('accordion-content') || parentCl.contains('tb_toggle_1') || parentCl.contains('tb_toggle_2') )){
[294] Fix | Delete
const dummy=createElement();
[295] Fix | Delete
parent.prepend(dummy);
[296] Fix | Delete
api.Drop.row(dummy,'grid',1,false);
[297] Fix | Delete
}
[298] Fix | Delete
}
[299] Fix | Delete
this.destroy();
[300] Fix | Delete
api.ModulePageBreak.countModules();
[301] Fix | Delete
if(isMultiple!==true&& !activeModel?.is_new){
[302] Fix | Delete
api.undoManager.end('delete');
[303] Fix | Delete
}
[304] Fix | Delete
if(isSame){
[305] Fix | Delete
api.LightBox.close();
[306] Fix | Delete
}
[307] Fix | Delete
}
[308] Fix | Delete
async copy() {
[309] Fix | Delete
if (api.activeModel && this.el.contains(api.activeModel.el)) {
[310] Fix | Delete
await api.LightBox.save();
[311] Fix | Delete
}
[312] Fix | Delete
const data = this.getData();
[313] Fix | Delete
// Attach used GS to data
[314] Fix | Delete
if (Object.keys(api.GS.styles).length) {
[315] Fix | Delete
const usedGS = api.GS.findUsedItems(data);
[316] Fix | Delete
if (usedGS?.length) {
[317] Fix | Delete
data.attached_gs = usedGS;
[318] Fix | Delete
}
[319] Fix | Delete
}
[320] Fix | Delete
api.Helper.clearElementId([data]);
[321] Fix | Delete
Clipboard._set(this.type, data);
[322] Fix | Delete
api.ActionBar.clear();
[323] Fix | Delete
}
[324] Fix | Delete
paste(is_style,isMultiple) {
[325] Fix | Delete
return new Promise(async(resolve,reject)=>{
[326] Fix | Delete
await api.LightBox.save();
[327] Fix | Delete
let component = this.get('mod_name'),
[328] Fix | Delete
data = await Clipboard._get(this.type);
[329] Fix | Delete
if (data === false || (is_style && this.type==='module' && component!==data.mod_name)) {
[330] Fix | Delete
TF_Notification.showHide('error',i18n.text_alert_wrong_paste);
[331] Fix | Delete
reject();
[332] Fix | Delete
return;
[333] Fix | Delete
}
[334] Fix | Delete
if (is_style === true) {
[335] Fix | Delete
const stOptions = ThemifyStyles.getStyleOptions(component),
[336] Fix | Delete
k = this.type === 'module' ? 'mod_settings' : 'styling',
[337] Fix | Delete
res = this.getData(),
[338] Fix | Delete
checkIsStyle = i=> {
[339] Fix | Delete
let key = i.includes('_color') ? 'color' : (i.includes('_style') ? 'style' : false),
[340] Fix | Delete
type=stOptions[key]?.type;
[341] Fix | Delete
if (type === 'radio' || i.includes('breakpoint_') || i.includes('_apply_all') ) {
[342] Fix | Delete
return true;
[343] Fix | Delete
}
[344] Fix | Delete
if (key !== false) {
[345] Fix | Delete
key = i.replace('_' + key, '_width');
[346] Fix | Delete
if (type=== 'border') {
[347] Fix | Delete
return true;
[348] Fix | Delete
}
[349] Fix | Delete
}
[350] Fix | Delete
else if (i.includes('_unit')) { //unit
[351] Fix | Delete
key = i.replace(/_unit$/ig, '', '');
[352] Fix | Delete
if (stOptions[key] !== undefined) {
[353] Fix | Delete
return true;
[354] Fix | Delete
}
[355] Fix | Delete
}
[356] Fix | Delete
else if (i.includes('_w') ) { //weight
[357] Fix | Delete
key = i.replace(/_w$/ig, '', '');
[358] Fix | Delete
if (type === 'font_select') {
[359] Fix | Delete
return true;
[360] Fix | Delete
}
[361] Fix | Delete
}
[362] Fix | Delete
return false;
[363] Fix | Delete
};
[364] Fix | Delete
res[k]??= {};
[365] Fix | Delete
for (let i in data[k]) {
[366] Fix | Delete
if (stOptions[i] === undefined && !checkIsStyle(i)) {
[367] Fix | Delete
delete data[k][i];
[368] Fix | Delete
} else {
[369] Fix | Delete
res[k][i] = data[k][i];
[370] Fix | Delete
if (stOptions[i] !== undefined) {
[371] Fix | Delete
if (stOptions[i].isFontColor === true && data[k][stOptions[i].g + '-gradient'] !== undefined) {
[372] Fix | Delete
res[k][stOptions[i].g + '-gradient'] = data[k][stOptions[i].g + '-gradient'];
[373] Fix | Delete
} else {
[374] Fix | Delete
if (stOptions[i].posId !== undefined && data[k][stOptions[i].posId] !== undefined) {
[375] Fix | Delete
res[k][stOptions[i].posId] = data[k][stOptions[i].posId];
[376] Fix | Delete
}
[377] Fix | Delete
if (stOptions[i].repeatId !== undefined && data[k][stOptions[i].repeatId] !== undefined) {
[378] Fix | Delete
res[k][stOptions[i].repeatId] = data[k][stOptions[i].repeatId];
[379] Fix | Delete
}
[380] Fix | Delete
}
[381] Fix | Delete
}
[382] Fix | Delete
}
[383] Fix | Delete
}
[384] Fix | Delete
if (data.used_gs !== undefined) {
[385] Fix | Delete
res.used_gs = data.used_gs;
[386] Fix | Delete
}
[387] Fix | Delete
data = res;
[388] Fix | Delete
delete data.element_id;
[389] Fix | Delete
}
[390] Fix | Delete
if(isMultiple!==true){
[391] Fix | Delete
api.undoManager.start('paste',this.id);
[392] Fix | Delete
}
[393] Fix | Delete
this.setData(data,this.el);
[394] Fix | Delete
api.ModulePageBreak.countModules();
[395] Fix | Delete
resolve();
[396] Fix | Delete
if(isMultiple!==true){
[397] Fix | Delete
api.undoManager.end('paste');
[398] Fix | Delete
}
[399] Fix | Delete
});
[400] Fix | Delete
}
[401] Fix | Delete
async save(box) {
[402] Fix | Delete
await api.LightBox.save();
[403] Fix | Delete
box??= this.el.querySelector('.tb_' + this.type + '_action').getBoundingClientRect();
[404] Fix | Delete
api.LightBox.el.classList.add('tb_save_module_lightbox');
[405] Fix | Delete
const options = {
[406] Fix | Delete
contructor: true,
[407] Fix | Delete
loadMethod: 'html',
[408] Fix | Delete
save: {
[409] Fix | Delete
done: 'save'
[410] Fix | Delete
},
[411] Fix | Delete
data: {
[412] Fix | Delete
['s' + this.type]: {
[413] Fix | Delete
options: [{
[414] Fix | Delete
id: 'item_title_field',
[415] Fix | Delete
type: 'text',
[416] Fix | Delete
label: 'title'
[417] Fix | Delete
}, {
[418] Fix | Delete
id: 'item_layout_save',
[419] Fix | Delete
type: 'checkbox',
[420] Fix | Delete
label: '',
[421] Fix | Delete
options: [{
[422] Fix | Delete
name: 'layout_part',
[423] Fix | Delete
value: 'slayout_part'
[424] Fix | Delete
}],
[425] Fix | Delete
after: '',
[426] Fix | Delete
help: 'Any changes made to a Layout Part are saved and reflected everywhere else they are being used (<a href="https://themify.me/docs/builder#layout-parts" target="_blank">learn more</a>)'
[427] Fix | Delete
}]
[428] Fix | Delete
}
[429] Fix | Delete
}
[430] Fix | Delete
},
[431] Fix | Delete
lb = await api.LightBox.setStandAlone(box.left, box.top).open(options),
[432] Fix | Delete
saveAsLibraryItem = async e => {
[433] Fix | Delete
e.stopPropagation();
[434] Fix | Delete
if ('keydown' !== e.type) {
[435] Fix | Delete
e.preventDefault();
[436] Fix | Delete
}
[437] Fix | Delete
else if (e.code !== 'Enter') {
[438] Fix | Delete
return;
[439] Fix | Delete
}
[440] Fix | Delete
[441] Fix | Delete
api.Spinner.showLoader('show');
[442] Fix | Delete
let settings,
[443] Fix | Delete
type=this.type;
[444] Fix | Delete
if(type==='row'){
[445] Fix | Delete
settings = api.Utils.getRowSettings(this.el, this.type,true);
[446] Fix | Delete
api.Helper.clearElementId([settings], true);
[447] Fix | Delete
}
[448] Fix | Delete
else if(type==='module'){
[449] Fix | Delete
const data=api.Helper.cloneObject(this.get('mod_settings'));
[450] Fix | Delete
this.constructor.builderSave(data);
[451] Fix | Delete
settings = {
[452] Fix | Delete
mod_name: this.get('mod_name'),
[453] Fix | Delete
element_id: api.Helper.generateUniqueID(),
[454] Fix | Delete
mod_settings: data
[455] Fix | Delete
};
[456] Fix | Delete
}
[457] Fix | Delete
const form = api.Forms.serialize(lb),
[458] Fix | Delete
used_gs = api.GS.findUsedItems(settings),
[459] Fix | Delete
is_layout = form.item_layout_save,
[460] Fix | Delete
ajaxData = {
[461] Fix | Delete
action: 'tb_save_custom_item',
[462] Fix | Delete
item_title_field: form.item_title_field,
[463] Fix | Delete
item: JSON.stringify(settings),
[464] Fix | Delete
type: type
[465] Fix | Delete
};
[466] Fix | Delete
if (is_layout) {
[467] Fix | Delete
ajaxData.item_layout_save = 1;
[468] Fix | Delete
}
[469] Fix | Delete
if (used_gs !== false) {
[470] Fix | Delete
ajaxData.usedGS = used_gs;
[471] Fix | Delete
}
[472] Fix | Delete
try {
[473] Fix | Delete
const data = await api.LocalFetch(ajaxData);
[474] Fix | Delete
if (data.status === 'success') {
[475] Fix | Delete
if (is_layout) {
[476] Fix | Delete
await api.Utils.saveCss([settings], '', data.id);
[477] Fix | Delete
}
[478] Fix | Delete
delete data.status;
[479] Fix | Delete
api.MainPanel.el.tfClass('panel_search')[0].value = '';
[480] Fix | Delete
if (is_layout) {
[481] Fix | Delete
const args = {
[482] Fix | Delete
mod_name: 'layout-part',
[483] Fix | Delete
mod_settings: {
[484] Fix | Delete
selected_layout_part: data.post_name
[485] Fix | Delete
}
[486] Fix | Delete
};
[487] Fix | Delete
[488] Fix | Delete
if (ThemifyConstructor.layoutPart.data.length > 0) {
[489] Fix | Delete
ThemifyConstructor.layoutPart.data.push(data);
[490] Fix | Delete
}
[491] Fix | Delete
[492] Fix | Delete
let model,
[493] Fix | Delete
el;
[494] Fix | Delete
if (type=== 'row') {
[495] Fix | Delete
const row = new api.Row({
[496] Fix | Delete
cols: [{
[497] Fix | Delete
grid_class: 'col-full',
[498] Fix | Delete
element_id: api.Helper.generateUniqueID(),
[499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function