: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
api.Module=class extends api.Base {
if(fields.mod_settings!==undefined){
fields.mod_settings=ThemifyStyles.convertPreset(fields.mod_name,fields.mod_settings);
static getSettingsName(slug){
return this.getModuleName(slug);
static getModuleName(slug){
return themifyBuilder.modules[slug]?.name || slug;
static getModuleClassName(slug){
let className=slug.split('-');
for(let i=0;i<className.length;++i){
className[i]=className[i].charAt(0).toUpperCase() + className[i].slice(1);
className=className.join('');
if(slug!=='row' && slug!=='column' && slug!=='subrow'){
className='Module'+className;
static initModule(fields){
const className=this.getModuleClassName(fields.mod_name);
return className?(new className(fields)):new api.Module(fields);
return this.getModuleClassName(slug)?.default() || {};
return createElement('','tb_holder tf_box tf_rel tf_w');
static getModuleTitle(value,key){
return this._setEditableContent(createElement('h3','module-title'),key,value);
static setEditableContent(el,key,value,editor,repeat,index){
const dataset=el.dataset;
el.contentEditable=false;
if(editor!==undefined && editor!==''){
if(value!==undefined && value!==''){
else if(value!==undefined && value!==''){
static _setEditableContent(el,key,value,editor,repeat,index){
return this.setEditableContent(el,key,value,editor,repeat,index);
static setEditableImage(el,name,wKey,hKey,data,repeat,index){
const dataset=el.dataset;
if(wKey!=='' && wKey!==undefined){
if(hKey!=='' && hKey!==undefined){
if(name!=='' && name!==undefined){
static async loadBackendLightbox(type){
const isLoaded=!!window.TB_BuilderContentLightbox;
api.Spinner.showLoader();
Themify.loadCss(Themify.builder_url + 'css/editor/components/builder-content-lightbox'),
Themify.loadJs(api.componentsURL +'builder-content-lightbox',window.TB_BuilderContentLightbox)
if(!isLoaded && type!=='preload'){
api.Spinner.showLoader('hide');
api.ActionBar.disable = true;
api.Spinner.showLoader();
Themify.loadCss(Themify.builder_url + 'css/editor/components/layout-part','tb_layout_part_ui',null,doc.tfId('themify-builder-admin-ui-css').nextElementSibling),
Themify.loadJs(api.componentsURL + 'layout-part')
Themify.trigger('tb_layout_edit');
let className=this.get('mod_name').split('-');
for(let i=0;i<className.length;++i){
className[i]=className[i].charAt(0).toUpperCase() + className[i].slice(1);
className=className.join('');
const item=new api[className](this.id);
item.edit().finally(()=>{
api.ActionBar.disable = null;
api.LayoutPart.item=item;
api.Spinner.showLoader('error');
api.ActionBar.disable = null;
return api.Helper.getIcon('ti-' + this.getIcon());
backendLivePreview(settings) {
const img=this.getImage(settings),
iconEl=this.el.tfClass('tb_img_wrap')[0].firstElementChild,
excerptText=this.getExcerpt(settings),
excerpt=this.el.tfClass('module_excerpt')[0];
if(typeof excerptText==='string'){
excerpt.innerHTML=excerptText;
excerpt.replaceChildren(excerptText);
iconEl.replaceWith(api.Helper.getIcon('ti-' + this.getIcon()));
const slug=this.get('mod_name');
return themifyBuilder.modules[slug]?.icon || '';
return api.Module.getModuleName(this.get('mod_name'));
return this.preview?'live':'ajax';
// for instant live preview
return api.Module.getDefault(this.get('mod_name'));
data = this.get('mod_settings');
if ((data.visibility_all === 'hide_all' || data.visibility_desktop === 'hide' || data.visibility_tablet === 'hide' || data.visibility_tablet_landscape === 'hide' || data.visibility_mobile === 'hide')) {
args.class += ' tb_visibility_hidden';
args.class += ' tb_module_front';
if (data.custom_css_id !== undefined && data.custom_css_id !== '') {
args.id = data.custom_css_id;
const slug=this.get('mod_name'),
fr=createDocumentFragment(),
module=createElement('','tb_disabled_module module module-'+slug+' tb_'+this.id),
modName=createElement('span',api.isVisual?'tb_data_mod_name tf_overflow tf_textc tf_abs_t tf_hide':'module_name',slug),
msg=createElement('span','tb_empty_msg tf_textc',i18n.emptym);
module.append(modName,msg);
const moduleLabel=createElement('','module_label tf_overflow tf_h'),
imgWrap=createElement('','tb_img_wrap');
imgWrap.appendChild(api.Helper.getIcon('ti-na'));
moduleLabel.append(imgWrap,modName,createElement('em','module_excerpt',this.getExcerpt()),msg);
module.appendChild(moduleLabel);
fr.append(createElement('','tb_action_wrap tb_module_action tf_abs_t tf_box tf_hide'),module);
api.Builder.get().emptyModules.add(slug);
const fr=createDocumentFragment(),
module=createElement('','module'),
moduleLabel=createElement('','module_label tf_overflow tf_h'),
imgWrap=createElement('','tb_img_wrap'),
excerpt=createElement('em','module_excerpt'),
excerptText=this.getExcerpt();
imgWrap.appendChild(this.getImage());
if(typeof excerptText==='string'){
excerpt.innerHTML=excerptText;
excerpt.replaceChildren(excerptText);
moduleLabel.append(imgWrap,createElement('','module_name',this.getName()),excerpt);
module.append(moduleLabel,createElement('','tf_plus_icon tb_column_btn_plus tb_disable_sorting'));
fr.append(createElement('','tb_action_wrap tb_module_action tf_abs_t tf_box tf_hide'),module,createElement('','tb_visibility_hint tf_overflow tf_abs_t tf_hide'));
if(themifyBuilder.modules[this.get('mod_name')]!==undefined){
static builderSave(settings){
super.builderSave(settings);
static cleanBuilderType(builder,rowType='subrow'){
const moduleClassName=this.getModuleClassName,
for (let i = items.length - 1; i > -1; --i) {
fields = item.styling || item.mod_settings;
item.element_id??=api.Helper.generateUniqueID();
let slug = item.mod_name || (item.cols ? type : 'column');
moduleClassName(slug)?.builderSave(fields);
if(Object.keys(fields).length===0){
delete item.mod_settings;
if(item.cols || item.modules || item.mod_name){
item.element_id??=api.Helper.generateUniqueID();
if(item.cols.length===1 && !item.cols[0].modules?.length && (!item.cols[0].styling || Object.keys(item.cols[0].styling).length===0)){
loop(item.cols,'subrow');
if (item.modules?.length>0) {
loop(item.modules,'subrow');
static clearSliderOptions(settings,all){
for(let sl=['slider_thumbs','effect_slider','speed_opt_slider','wrap_slider','show_nav_slider','show_arrow_slider','show_arrow_buttons_vertical','touch_swipe','left_margin_slider','right_margin_slider','height_slider','auto_scroll_opt_slider'],i=sl.length-1;i>-1;--i){
slider=settings.effect_slider || 'scroll';
if(settings.effect_slider==='scroll'){
delete settings.effect_slider;
if(settings.wrap_slider==='yes'){
delete settings.wrap_slider;
if(settings.show_nav_slider==='yes'){
delete settings.show_nav_slider;
if(settings.height_slider==='variable'){
delete settings.height_slider;
if(settings.speed_opt_slider==='normal' || settings.speed_opt_slider?.toString()==='1'){
delete settings.speed_opt_slider;
if(settings.scroll_opt_slider?.toString()==='1'){
delete settings.scroll_opt_slider;
if(settings.show_arrow_slider==='no'){
delete settings.show_arrow_buttons_vertical;
delete settings.show_arrow_slider;
if(slider!=='scroll' && slider!=='coverflow' && slider!=='continuously'){
delete settings.visible_opt_slider;
delete settings.tab_visible_opt_slider;
delete settings.mob_visible_opt_slider;
delete settings.scroll_opt_slider;
if(slider==='continuously'){
delete settings.auto_scroll_opt_slider;
if(settings.mob_visible_opt_slider && settings.tab_visible_opt_slider && ~~settings.mob_visible_opt_slider===~~settings.tab_visible_opt_slider){
delete settings.mob_visible_opt_slider;
if(settings.visible_opt_slider && settings.tab_visible_opt_slider && ~~settings.visible_opt_slider===~~settings.tab_visible_opt_slider){
delete settings.tab_visible_opt_slider;
if(!settings.auto_scroll_opt_slider || settings.auto_scroll_opt_slider==='off'){
delete settings.pause_on_hover_slider;
delete settings.play_pause_control;
delete settings.auto_scroll_opt_slider;
if(settings.pause_on_hover_slider==='resume'){
delete settings.pause_on_hover_slider;
if(settings.play_pause_control==='no'){
delete settings.play_pause_control;