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
File: themify-builder-app.mjs
((body,topBody,bodyCl,topWindow) => {
[0] Fix | Delete
"use strict";
[1] Fix | Delete
let _jsModulePrms=null,
[2] Fix | Delete
_stylePrms=null;
[3] Fix | Delete
if(!Themify.builder_url){
[4] Fix | Delete
const baseUrl = new URL( doc.currentScript.src );
[5] Fix | Delete
baseUrl.search = '';
[6] Fix | Delete
baseUrl.pathname = baseUrl.pathname.replace('components.min.js', '');
[7] Fix | Delete
Themify.builder_url=baseUrl.toString().replace('js/editor/build/','');
[8] Fix | Delete
}
[9] Fix | Delete
window.tb_app = {
[10] Fix | Delete
breakpointsReverse: Object.keys(themify_vars.breakpoints).reverse(),
[11] Fix | Delete
isGSPage : bodyCl.contains('gs_post'),
[12] Fix | Delete
isVisual:topWindow !== window,//can be changed, in the frontend can be toggle backend mode
[13] Fix | Delete
isFrontend:false,//can't be changed init once, in backend false, in the frontend true
[14] Fix | Delete
activeBreakPoint: 'desktop',
[15] Fix | Delete
activeModel: null,
[16] Fix | Delete
isDocked: false,
[17] Fix | Delete
zoomMeta: false,
[18] Fix | Delete
isPreview: false,
[19] Fix | Delete
scrollTo: false,
[20] Fix | Delete
is_builder_ready:null,
[21] Fix | Delete
isSafari: /^((?!chrome|android).)*safari/i.test(navigator.userAgent),
[22] Fix | Delete
styleData:{},
[23] Fix | Delete
jsModuleLoaded(){
[24] Fix | Delete
if(_jsModulePrms===null){
[25] Fix | Delete
this.inlineEditor=this.isFrontend=this.isVisual;
[26] Fix | Delete
const url = Themify.builder_url+'js/editor/',
[27] Fix | Delete
allPromisses = [Themify.loadJs(Themify.url+'js/admin/notification',!!window.TF_Notification)],
[28] Fix | Delete
addons=themifyBuilder.addons,
[29] Fix | Delete
componentUrl=url + 'lazy-components/';
[30] Fix | Delete
this.componentsURL = componentUrl;
[31] Fix | Delete
if(addons){
[32] Fix | Delete
for(let addonUrl in addons){
[33] Fix | Delete
allPromisses.push(Themify.loadJs(addonUrl,null,addons[addonUrl]));
[34] Fix | Delete
}
[35] Fix | Delete
}
[36] Fix | Delete
if(this.isFrontend){
[37] Fix | Delete
allPromisses.push(
[38] Fix | Delete
Themify.loadJs(url+'frontend/themify-builder-inline-editing'),
[39] Fix | Delete
Themify.loadJs('image-resize',!!window.ThemifyImageResize),
[40] Fix | Delete
Themify.loadJs(componentUrl+'correct-col-paddings')
[41] Fix | Delete
);
[42] Fix | Delete
//allPromisses.push(Themify.loadJs(moduleUrl+'tree'));
[43] Fix | Delete
}
[44] Fix | Delete
if(!Themify.isTouch){
[45] Fix | Delete
setTimeout(()=>{
[46] Fix | Delete
Themify.loadJs(componentUrl + 'right-click');
[47] Fix | Delete
// Themify.loadJs(componentUrl + 'drop-files');
[48] Fix | Delete
},1000);
[49] Fix | Delete
}
[50] Fix | Delete
allPromisses[0].then(()=>{
[51] Fix | Delete
TF_Notification.init().then(root=>{
[52] Fix | Delete
if (this.isFrontend) {
[53] Fix | Delete
topBody.appendChild(root);
[54] Fix | Delete
}
[55] Fix | Delete
});
[56] Fix | Delete
});
[57] Fix | Delete
_jsModulePrms= Promise.all(allPromisses).then(()=>{
[58] Fix | Delete
ThemifyConstructor.init();
[59] Fix | Delete
setTimeout(()=>{
[60] Fix | Delete
Themify.loadJs(componentUrl+'offline');
[61] Fix | Delete
localStorage.removeItem('tb_visual_templates');
[62] Fix | Delete
localStorage.removeItem('tb_form_templates_');
[63] Fix | Delete
setInterval(()=>{Registry.observer();},15000);
[64] Fix | Delete
},10000);
[65] Fix | Delete
});
[66] Fix | Delete
}
[67] Fix | Delete
return _jsModulePrms;
[68] Fix | Delete
},
[69] Fix | Delete
loadJson(){
[70] Fix | Delete
if(_stylePrms===null){
[71] Fix | Delete
const fetchArgs={
[72] Fix | Delete
method: 'GET'
[73] Fix | Delete
},
[74] Fix | Delete
prms=[];
[75] Fix | Delete
for(let files=themifyBuilder.style_json,i=files.length-1;i>-1;--i){
[76] Fix | Delete
prms.push(new Promise(async (resolve,reject)=>{
[77] Fix | Delete
try{
[78] Fix | Delete
const f=new URL(files[i]),
[79] Fix | Delete
origin=window.location.origin;
[80] Fix | Delete
if(f.origin!==origin){
[81] Fix | Delete
f.origin=origin;
[82] Fix | Delete
}
[83] Fix | Delete
const res=await Themify.fetch('', null, fetchArgs,f.toString() );
[84] Fix | Delete
Object.assign(this.styleData,res);
[85] Fix | Delete
resolve();
[86] Fix | Delete
}
[87] Fix | Delete
catch(e){
[88] Fix | Delete
reject(e);
[89] Fix | Delete
}
[90] Fix | Delete
}));
[91] Fix | Delete
}
[92] Fix | Delete
_stylePrms=Promise.all(prms);
[93] Fix | Delete
}
[94] Fix | Delete
return _stylePrms;
[95] Fix | Delete
},
[96] Fix | Delete
LocalFetch(data,type,params){
[97] Fix | Delete
data.nonce=themifyBuilder.nonce;
[98] Fix | Delete
if(!data.bid){
[99] Fix | Delete
let builder=this.Builder?.get(),
[100] Fix | Delete
bid=builder?.post_id || builder?.id || themifyBuilder.post_ID || '';
[101] Fix | Delete
if(bid==='' || isNaN(bid)){
[102] Fix | Delete
builder=this.Builder?.get(0);
[103] Fix | Delete
bid=builder?.post_id || builder?.id|| '';
[104] Fix | Delete
}
[105] Fix | Delete
data.bid=bid;
[106] Fix | Delete
}
[107] Fix | Delete
if(!this.isFrontend){
[108] Fix | Delete
data.admin=1;
[109] Fix | Delete
}
[110] Fix | Delete
Themify.trigger('tb_filter_fetch',data);
[111] Fix | Delete
return Themify.fetch(data,type,params);
[112] Fix | Delete
},
[113] Fix | Delete
getColClass(){//backward compatibility
[114] Fix | Delete
return { //deprecated,don't use it need for backward compatibility
[115] Fix | Delete
1: ['col-full'],
[116] Fix | Delete
2: ['col4-2', 'col4-2'],
[117] Fix | Delete
3: ['col3-1', 'col3-1', 'col3-1'],
[118] Fix | Delete
4: ['col4-1', 'col4-1', 'col4-1', 'col4-1'],
[119] Fix | Delete
5: ['col5-1', 'col5-1', 'col5-1', 'col5-1', 'col5-1'],
[120] Fix | Delete
6: ['col6-1', 'col6-1', 'col6-1', 'col6-1', 'col6-1', 'col6-1'],
[121] Fix | Delete
1_2: ['col3-1', 'col3-2'],
[122] Fix | Delete
2_1: ['col3-2', 'col3-1'],
[123] Fix | Delete
1_3: ['col4-1', 'col4-3'],
[124] Fix | Delete
3_1: ['col4-3', 'col4-1'],
[125] Fix | Delete
1_1_2: ['col4-1', 'col4-1', 'col4-2'],
[126] Fix | Delete
1_2_1: ['col4-1', 'col4-2', 'col4-1'],
[127] Fix | Delete
2_1_1: ['col4-2', 'col4-1', 'col4-1']
[128] Fix | Delete
};
[129] Fix | Delete
},
[130] Fix | Delete
getColClassValues(){//backward compatibility
[131] Fix | Delete
return Array.from(new Set([].concat.apply([], Object.values(this.getColClass()))));
[132] Fix | Delete
}
[133] Fix | Delete
};
[134] Fix | Delete
const api = tb_app;
[135] Fix | Delete
[136] Fix | Delete
api.breakpointsReverse.push('desktop');
[137] Fix | Delete
Themify.upload_url=themifyBuilder.upload_url;
[138] Fix | Delete
api.jsModuleLoaded();
[139] Fix | Delete
api.loadJson();
[140] Fix | Delete
[141] Fix | Delete
api.Helper={
[142] Fix | Delete
correctBuilderData(rows){
[143] Fix | Delete
if(!rows || !Array.isArray(rows)){
[144] Fix | Delete
rows=rows?Object.values(rows):[];
[145] Fix | Delete
}
[146] Fix | Delete
for(let i=rows.length-1;i>-1;--i){
[147] Fix | Delete
let r=rows[i];
[148] Fix | Delete
if(r){
[149] Fix | Delete
let {styling:rowSt,cols}=r;
[150] Fix | Delete
if(rowSt!==undefined && (!rowSt || Array.isArray(rowSt))){
[151] Fix | Delete
r.styling={};
[152] Fix | Delete
}
[153] Fix | Delete
if(cols){
[154] Fix | Delete
if(!Array.isArray(cols)){
[155] Fix | Delete
cols=r.cols=Object.values(cols);
[156] Fix | Delete
}
[157] Fix | Delete
for(let j=cols.length-1;j>-1;--j){
[158] Fix | Delete
let col=cols[j];
[159] Fix | Delete
if(col){
[160] Fix | Delete
let {styling,modules}=col;
[161] Fix | Delete
if(styling!==undefined && (!styling || Array.isArray(styling))){
[162] Fix | Delete
col.styling={};
[163] Fix | Delete
}
[164] Fix | Delete
if(modules){
[165] Fix | Delete
modules=this.correctBuilderData(modules);
[166] Fix | Delete
}
[167] Fix | Delete
}
[168] Fix | Delete
else{
[169] Fix | Delete
cols.splice(j, 1);
[170] Fix | Delete
}
[171] Fix | Delete
}
[172] Fix | Delete
}
[173] Fix | Delete
}
[174] Fix | Delete
else{
[175] Fix | Delete
rows.splice(i, 1);
[176] Fix | Delete
}
[177] Fix | Delete
}
[178] Fix | Delete
return rows;
[179] Fix | Delete
},
[180] Fix | Delete
cloneDom(el,remove) {
[181] Fix | Delete
if (el === null) {
[182] Fix | Delete
return el;
[183] Fix | Delete
}
[184] Fix | Delete
if (el[0] !== undefined) {
[185] Fix | Delete
el = el[0];
[186] Fix | Delete
}
[187] Fix | Delete
if(el.nodeType===Node.TEXT_NODE){
[188] Fix | Delete
return el.cloneNode(true);
[189] Fix | Delete
}
[190] Fix | Delete
const node = remove===true?el:el.cloneNode(true);
[191] Fix | Delete
if (api.isVisual) {
[192] Fix | Delete
//after cloning dom the video is playing in bg
[193] Fix | Delete
const v = node.tfTag('video');
[194] Fix | Delete
if (v.length > 0) {
[195] Fix | Delete
for (let i = v.length - 1; i > -1; --i) {
[196] Fix | Delete
v[i].pause();
[197] Fix | Delete
}
[198] Fix | Delete
}
[199] Fix | Delete
for (let items = node.tfClass('tb_dragger'), i = items.length - 1; i > -1; --i) {
[200] Fix | Delete
items[i].remove();
[201] Fix | Delete
}
[202] Fix | Delete
for (let items = Themify.selectWithParent('[contenteditable]', node), i = items.length - 1; i > -1; --i) {
[203] Fix | Delete
items[i].contentEditable=false;
[204] Fix | Delete
items[i].closest('.tb_editor_on')?.classList.remove('tb_editor_on', 'tb_editor_clicked');
[205] Fix | Delete
}
[206] Fix | Delete
for (let items = Themify.selectWithParent('[draggable]', node), i = items.length - 1; i > -1; --i) {
[207] Fix | Delete
items[i].setAttribute('draggable', 'true');
[208] Fix | Delete
}
[209] Fix | Delete
}
[210] Fix | Delete
for (let items = node.tfClass('tb_action_wrap'), i = items.length - 1; i > -1; --i) {
[211] Fix | Delete
let item=items[i];
[212] Fix | Delete
item.replaceChildren();
[213] Fix | Delete
item.removeAttribute('id');
[214] Fix | Delete
item.removeAttribute('style');
[215] Fix | Delete
}
[216] Fix | Delete
for (let items = node.querySelectorAll('.tb_del_btn,.tb_add_btn'), i = items.length - 1; i > -1; --i) {
[217] Fix | Delete
items[i].replaceChildren();
[218] Fix | Delete
}
[219] Fix | Delete
const uiItems=node.querySelectorAll('.tb_editor_on,.tb_element_clicked,.tb_selected_img,.tb_editor_clicked,.tb_hide_drag_col_right,.tb_hide_drag_left,.tb_hide_drag_right,.tb_drag_one_column,.tb_drag_side_column,.tb_draggable_item,.tb_column_drag_inner,.tb_active_action_bar,.compact-mode,.tf_dragger_negative');
[220] Fix | Delete
for (let i = uiItems.length - 1; i > -1; --i) {
[221] Fix | Delete
uiItems[i].classList.remove( 'tb_element_clicked','tb_editor_on','tb_selected_img','tb_editor_clicked', 'tb_hide_drag_col_right','tb_hide_drag_left','tb_hide_drag_right', 'tb_drag_one_column', 'tb_drag_side_column', 'tb_draggable_item', 'tb_column_drag_inner','tb_active_action_bar','compact-mode','tf_dragger_negative');
[222] Fix | Delete
}
[223] Fix | Delete
for (let items = node.querySelectorAll('[data-drag-w],[data-pos]'), i = items.length - 1; i > -1; --i) {
[224] Fix | Delete
items[i].removeAttribute('data-drag-w');
[225] Fix | Delete
items[i].removeAttribute('data-pos');
[226] Fix | Delete
}
[227] Fix | Delete
node.classList.remove('tb_selected_img', 'tb_element_clicked','tb_editor_on','tb_editor_clicked', 'tb_hide_drag_col_right','tb_hide_drag_left','tb_hide_drag_right', 'tb_drag_one_column', 'tb_drag_side_column', 'tb_draggable_item', 'tb_column_drag_inner','tb_active_action_bar','compact-mode','tf_dragger_negative');
[228] Fix | Delete
node.removeAttribute('data-drag-w');
[229] Fix | Delete
node.removeAttribute('data-pos');
[230] Fix | Delete
return node;
[231] Fix | Delete
},
[232] Fix | Delete
cloneObject(obj){
[233] Fix | Delete
return obj?JSON.parse(JSON.stringify(obj)):{};
[234] Fix | Delete
},
[235] Fix | Delete
compareObject(oldSettings,newSetting){
[236] Fix | Delete
if(oldSettings && newSetting){
[237] Fix | Delete
const size1=oldSettings.hasOwnProperty('length')?oldSettings.length:Object.keys(oldSettings).length,
[238] Fix | Delete
size2=newSetting.hasOwnProperty('length')?newSetting.length:Object.keys(newSetting).length;
[239] Fix | Delete
if(size1===size2){
[240] Fix | Delete
if(size1>0){
[241] Fix | Delete
for(let i in oldSettings){
[242] Fix | Delete
if(newSetting[i]===undefined){
[243] Fix | Delete
return true;
[244] Fix | Delete
}
[245] Fix | Delete
if(oldSettings[i]!==null && typeof oldSettings[i] === 'object'){
[246] Fix | Delete
if(typeof newSetting[i]!=='object' || this.compareObject(oldSettings[i],newSetting[i])){
[247] Fix | Delete
return true;
[248] Fix | Delete
}
[249] Fix | Delete
}
[250] Fix | Delete
else if(newSetting[i]!=oldSettings[i] || (typeof newSetting[i]==='object' && typeof oldSettings[i]!=='object')){
[251] Fix | Delete
return true;
[252] Fix | Delete
}
[253] Fix | Delete
}
[254] Fix | Delete
}
[255] Fix | Delete
}
[256] Fix | Delete
else{
[257] Fix | Delete
return true;
[258] Fix | Delete
}
[259] Fix | Delete
}
[260] Fix | Delete
else{
[261] Fix | Delete
return true;
[262] Fix | Delete
}
[263] Fix | Delete
return false;
[264] Fix | Delete
},
[265] Fix | Delete
isImageUrl(link) {
[266] Fix | Delete
if (!link) {
[267] Fix | Delete
return false;
[268] Fix | Delete
}
[269] Fix | Delete
const parts = link.split('?')[0].split('.');
[270] Fix | Delete
return ['jpg', 'jpeg', 'tiff', 'png', 'gif', 'bmp', 'svg', 'svgz','webp','apng'].includes(parts[parts.length - 1]);
[271] Fix | Delete
},
[272] Fix | Delete
limitString(str, limit=120) {
[273] Fix | Delete
let new_str = '';
[274] Fix | Delete
if (str !== '' && str !== undefined) {
[275] Fix | Delete
const tmp = createElement();
[276] Fix | Delete
tmp.innerHTML = str;
[277] Fix | Delete
str = tmp.textContent; // strip html tags
[278] Fix | Delete
new_str = str.length > limit ? (str.substr(0, limit)+'...') : str;
[279] Fix | Delete
}
[280] Fix | Delete
return new_str;
[281] Fix | Delete
},
[282] Fix | Delete
loadJsZip(){
[283] Fix | Delete
return Themify.loadJs('https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js',!!window.JSZip,false);
[284] Fix | Delete
},
[285] Fix | Delete
toRGBA(v){
[286] Fix | Delete
return ThemifyStyles.toRGBA(v);
[287] Fix | Delete
},
[288] Fix | Delete
getIcon(icon, cl) {
[289] Fix | Delete
const fontello_prefix=themifyBuilder.fontello_prefix;
[290] Fix | Delete
if (typeof fontello_prefix!== 'undefined') {
[291] Fix | Delete
const fontello_regex = new RegExp(themifyBuilder.fontello_use_suffix ? fontello_prefix + '$' : '^' + fontello_prefix);
[292] Fix | Delete
if (fontello_regex.test(icon)) {
[293] Fix | Delete
return createElement('i',icon);
[294] Fix | Delete
}
[295] Fix | Delete
}
[296] Fix | Delete
icon = 'tf-' + icon.trim().replace(' ', '-');
[297] Fix | Delete
let classes = 'tf_fa ' + icon;
[298] Fix | Delete
if (cl) {
[299] Fix | Delete
classes += ' ' + cl;
[300] Fix | Delete
}
[301] Fix | Delete
const svg = createElementNS('',classes);
[302] Fix | Delete
svg.appendChild(createElementNS('use',{href:'#' + icon}));
[303] Fix | Delete
return svg;
[304] Fix | Delete
},
[305] Fix | Delete
getLottie(arr,sel){
[306] Fix | Delete
if(arr.path && arr.seg){
[307] Fix | Delete
let json={
[308] Fix | Delete
path:arr.path,
[309] Fix | Delete
seg:arr.seg
[310] Fix | Delete
},
[311] Fix | Delete
lottie=createElement('tf-lottie'),
[312] Fix | Delete
tmpl=createElement('template');
[313] Fix | Delete
if(arr.st){
[314] Fix | Delete
json.st=arr.st;
[315] Fix | Delete
}
[316] Fix | Delete
if(arr.sp && arr.sp!=1){
[317] Fix | Delete
json.sp=arr.sp;
[318] Fix | Delete
}
[319] Fix | Delete
if(arr.dir){
[320] Fix | Delete
json.dir=arr.dir;
[321] Fix | Delete
}
[322] Fix | Delete
if(arr.fid){
[323] Fix | Delete
json.fid=arr.fid;
[324] Fix | Delete
}
[325] Fix | Delete
if(arr.r && arr.r!=='svg'){
[326] Fix | Delete
json.r=arr.r;
[327] Fix | Delete
}
[328] Fix | Delete
if(arr.count>1){
[329] Fix | Delete
json.count=arr.count;
[330] Fix | Delete
}
[331] Fix | Delete
if(sel){
[332] Fix | Delete
json.sel=sel;
[333] Fix | Delete
}
[334] Fix | Delete
if(!arr.lp){
[335] Fix | Delete
json={actions:json,loop:1};
[336] Fix | Delete
}
[337] Fix | Delete
tmpl.innerHTML=JSON.stringify(json);
[338] Fix | Delete
lottie.appendChild(tmpl);
[339] Fix | Delete
return lottie;
[340] Fix | Delete
}
[341] Fix | Delete
return tb_createDocumentFragment();
[342] Fix | Delete
},
[343] Fix | Delete
getColor(el) {
[344] Fix | Delete
let v = el.value;
[345] Fix | Delete
if (v !== '') {
[346] Fix | Delete
if (el.getAttribute('data-tfminicolors-initialized') !== null) {
[347] Fix | Delete
v = jQuery(el).tfminicolors('rgbaString');
[348] Fix | Delete
} else {
[349] Fix | Delete
const opacity = el.dataset.opacity;
[350] Fix | Delete
if (opacity !== '' && opacity !== null) {
[351] Fix | Delete
v = ThemifyStyles.toRGBA(v + '_' + opacity);
[352] Fix | Delete
}
[353] Fix | Delete
}
[354] Fix | Delete
}
[355] Fix | Delete
return v;
[356] Fix | Delete
},
[357] Fix | Delete
getBreakpointName(bp){
[358] Fix | Delete
return api.ToolBar.el.querySelector('.breakpoint-'+bp+' span').textContent;
[359] Fix | Delete
},
[360] Fix | Delete
generateUniqueID() {
[361] Fix | Delete
const uid=(Math.random().toString(36).substr(2, 4) + (new Date().getUTCMilliseconds()).toString()).substr(0, 7);
[362] Fix | Delete
return Registry.get(uid)?this.generateUniqueID():uid;
[363] Fix | Delete
},
[364] Fix | Delete
clearElementId(data, _new) {
[365] Fix | Delete
for (let i=data.length-1;i>-1;--i) {
[366] Fix | Delete
let item=data[i],
[367] Fix | Delete
opt = item.styling || item.mod_settings;
[368] Fix | Delete
if (_new === true) {
[369] Fix | Delete
item.element_id = this.generateUniqueID();
[370] Fix | Delete
} else {
[371] Fix | Delete
delete item.element_id;
[372] Fix | Delete
}
[373] Fix | Delete
if (opt !== undefined) {
[374] Fix | Delete
const customCss=opt.custom_css_id;
[375] Fix | Delete
if (customCss !== undefined && customCss !== '') {
[376] Fix | Delete
let j = 1;
[377] Fix | Delete
while (true) {
[378] Fix | Delete
let id = j!==1?(customCss+'-'+j):customCss;
[379] Fix | Delete
if (!doc.tfId(id)?.closest('.module_row')) {
[380] Fix | Delete
opt.custom_css_id = id;
[381] Fix | Delete
break;
[382] Fix | Delete
}
[383] Fix | Delete
++j;
[384] Fix | Delete
}
[385] Fix | Delete
}
[386] Fix | Delete
[387] Fix | Delete
let nested=opt.content_accordion || opt.tab_content_tab,
[388] Fix | Delete
bulder=opt.builder_content;
[389] Fix | Delete
if (bulder !== undefined) {
[390] Fix | Delete
if(typeof bulder === 'string'){
[391] Fix | Delete
bulder=JSON.parse(bulder);
[392] Fix | Delete
}
[393] Fix | Delete
this.clearElementId(bulder, true);
[394] Fix | Delete
opt.builder_content = bulder;
[395] Fix | Delete
}
[396] Fix | Delete
if(nested){
[397] Fix | Delete
for (let j=nested.length-1;j>-1;--j) {
[398] Fix | Delete
let bulder=nested[j].builder_content;
[399] Fix | Delete
if(bulder){
[400] Fix | Delete
if(typeof bulder === 'string'){
[401] Fix | Delete
bulder=JSON.parse(bulder);
[402] Fix | Delete
}
[403] Fix | Delete
this.clearElementId(bulder, true);
[404] Fix | Delete
nested[j].builder_content = bulder;
[405] Fix | Delete
}
[406] Fix | Delete
}
[407] Fix | Delete
}
[408] Fix | Delete
}
[409] Fix | Delete
if (item.cols !== undefined) {
[410] Fix | Delete
this.clearElementId(item.cols, _new);
[411] Fix | Delete
} else if (item.modules !== undefined) {
[412] Fix | Delete
this.clearElementId(item.modules, _new);
[413] Fix | Delete
}
[414] Fix | Delete
}
[415] Fix | Delete
},
[416] Fix | Delete
async codeMirror(el,mode,conf={}){
[417] Fix | Delete
try{
[418] Fix | Delete
conf.isDarkMode=api.isDarked;
[419] Fix | Delete
await topWindow.Themify.loadJs(Themify.url+'js/admin/modules/codemirror/codemirror',!!topWindow.ThemifyCodeMiror);
[420] Fix | Delete
const obj=new topWindow.ThemifyCodeMiror(el,mode,conf);
[421] Fix | Delete
await obj.run();
[422] Fix | Delete
return obj;
[423] Fix | Delete
}
[424] Fix | Delete
catch(e){
[425] Fix | Delete
return null;
[426] Fix | Delete
}
[427] Fix | Delete
},
[428] Fix | Delete
async gzip(data){
[429] Fix | Delete
if(!window.CompressionStream || themifyBuilder.gzip_disabled){
[430] Fix | Delete
throw 'err';
[431] Fix | Delete
}
[432] Fix | Delete
const byteArray = new TextEncoder().encode(data),
[433] Fix | Delete
cs = new CompressionStream('gzip'),
[434] Fix | Delete
writer = cs.writable.getWriter();
[435] Fix | Delete
writer.write(byteArray);
[436] Fix | Delete
writer.close();
[437] Fix | Delete
const res=await (new Response(cs.readable)).arrayBuffer();
[438] Fix | Delete
return btoa(String.fromCharCode(...new Uint8Array(res)));
[439] Fix | Delete
}
[440] Fix | Delete
};
[441] Fix | Delete
[442] Fix | Delete
[443] Fix | Delete
api.Registry={
[444] Fix | Delete
items : new Map,
[445] Fix | Delete
_events : new Map,
[446] Fix | Delete
observer(){
[447] Fix | Delete
for(let [id,model] of this.items){
[448] Fix | Delete
if(!model.el.isConnected){
[449] Fix | Delete
this.remove(id);
[450] Fix | Delete
}
[451] Fix | Delete
}
[452] Fix | Delete
},
[453] Fix | Delete
add(item) {
[454] Fix | Delete
this.items.set(item.id, item);
[455] Fix | Delete
return this;
[456] Fix | Delete
},
[457] Fix | Delete
get(id) {
[458] Fix | Delete
return this.items.get(id) || null;
[459] Fix | Delete
},
[460] Fix | Delete
remove(id,db=true) {
[461] Fix | Delete
const model = this.get(id);
[462] Fix | Delete
if (model) {
[463] Fix | Delete
model.el.remove();
[464] Fix | Delete
if(db===true){
[465] Fix | Delete
this.items.delete(id);
[466] Fix | Delete
this._events.delete(id);
[467] Fix | Delete
}
[468] Fix | Delete
}
[469] Fix | Delete
return this;
[470] Fix | Delete
},
[471] Fix | Delete
destroy() {
[472] Fix | Delete
for(let v of this.items){
[473] Fix | Delete
this.get(v[0])?.el.remove();
[474] Fix | Delete
}
[475] Fix | Delete
this.items.clear();
[476] Fix | Delete
this._events.clear();
[477] Fix | Delete
return this;
[478] Fix | Delete
},
[479] Fix | Delete
on(id, ev, f) {
[480] Fix | Delete
if(f!==undefined){
[481] Fix | Delete
const events=this._events.get(id) || {};
[482] Fix | Delete
events[ev]??=[];
[483] Fix | Delete
events[ev].push(f);
[484] Fix | Delete
this._events.set(id, events);
[485] Fix | Delete
}
[486] Fix | Delete
return this;
[487] Fix | Delete
},
[488] Fix | Delete
off(id, ev,f) {
[489] Fix | Delete
const events=this._events.get(id);
[490] Fix | Delete
if(events!==undefined){
[491] Fix | Delete
if(!ev){
[492] Fix | Delete
this._events.delete(id);
[493] Fix | Delete
}
[494] Fix | Delete
else if(events[ev]!==undefined){
[495] Fix | Delete
if(f){
[496] Fix | Delete
for(let i=events[ev].length-1;i>-1;--i){
[497] Fix | Delete
if(events[ev][i]===f){
[498] Fix | Delete
events[ev].splice(i, 1);
[499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function