: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
getTextHeaderClass : function(){
customizerSettings = self.customizerFeedData.settings,
headerData = self.customizerFeedData.headerData,
headerClass = 'ctf_header_text ',
shouldShowBio = self.checkNotEmpty( self.getHeaderBio() ) ? self.valueIsEnabled( customizerSettings['showbio'] ) : false,
shouldShowInfo = shouldShowBio || self.valueIsEnabled( customizerSettings['showfollowers'] );
headerClass += !shouldShowBio ? 'ctf_no_bio ' : '',
headerClass += !shouldShowInfo ? 'ctf_no_info' : '';
getStoryDelays : function(){
customizerSettings = self.customizerFeedData.settings;
return self.checkNotEmpty( customizerSettings['storiestime'] ) ? Math.max( 500, parseInt( customizerSettings['storiestime']) ) : 5000;
getStoryData : function(){
customizerSettings = self.customizerFeedData.settings,
headerData = self.customizerFeedData.headerData;
if( self.hasOwnNestedProperty(headerData, 'stories') && headerData.stories.length > 0 && self.valueIsEnabled( customizerSettings['stories'] ) ){
return headerData['stories'];
imageChooser : function( settingID ){
var uploader = wp.media({
title : 'Media Uploader',
button:{text : 'Choose Media'},
library: {type: 'image'},
}).on('close',function() {
var selection = uploader.state().get('selection');
if(selection.length != 0){
attachment = selection.first().toJSON();
self.customizerFeedData.settings[settingID] = attachment.url;
//Change Switcher Settings
changeSwitcherSettingValue : function(settingID, onValue, offValue, ajaxAction = false) {
self.customizerFeedData.settings[settingID] = self.customizerFeedData.settings[settingID] == onValue ? offValue : onValue;
if(ajaxAction !== false){
self.customizerControlAjaxAction(ajaxAction);
self.regenerateLayout(settingID);
changeCheckboxListValue : function(settingID, value, ajaxAction = false){
settingValue = self.customizerFeedData.settings[settingID].split(',');
if(!Array.isArray(settingValue)){
settingValue = [settingValue];
if(settingValue.includes(value)){
settingValue.splice(settingValue.indexOf(value),1);
settingValue.push(value);
self.customizerFeedData.settings[settingID] = settingValue.join(',');
changeCheckboxSectionValue : function(settingID, value, ajaxAction = false, checkBoxAction = false){
if(checkBoxAction !== false){
self.customizerFeedData.settings[settingID] = self.customizerFeedData.settings[settingID] == checkBoxAction.options.enabled ? checkBoxAction.options.disabled : checkBoxAction.options.enabled;
var settingValue = self.customizerFeedData.settings[settingID];
if(!Array.isArray(settingValue) && settingID == 'type'){
settingValue = [settingValue];
if(settingValue.includes(value)){
settingValue.splice(settingValue.indexOf(value),1);
settingValue.push(value);
self.processFeedTypesSources( settingValue );
//settingValue = (settingValue.length == 1 && settingID == 'type') ? settingValue[0] : settingValue;
self.customizerFeedData.settings[settingID] = settingValue;
if(ajaxAction !== false){
self.customizerControlAjaxAction(ajaxAction);
checkboxSectionValueExists : function(settingID, value){
var settingValue = self.customizerFeedData.settings[settingID];
return settingValue.includes(value) ? true : false;
* Check Control Condition
checkControlCondition : function(conditionsArray = [], checkExtensionActive = false, checkExtensionActiveDimmed = false){
Object.keys(conditionsArray).map(function(condition, index){
if(conditionsArray[condition].indexOf(self.customizerFeedData.settings[condition]) !== -1)
var extensionCondition = checkExtensionActive != undefined && checkExtensionActive != false ? self.checkExtensionActive(checkExtensionActive) : true,
extensionCondition = checkExtensionActiveDimmed != undefined && checkExtensionActiveDimmed != false && !self.checkExtensionActive(checkExtensionActiveDimmed) ? false : extensionCondition;
return (isConditionTrue == Object.keys(conditionsArray).length) ? ( extensionCondition ) : false;
* Check Color Override Condition
checkControlOverrideColor : function(overrideConditionsArray = []){
overrideConditionsArray.map(function(condition, index){
if(self.checkNotEmpty(self.customizerFeedData.settings[condition]) && self.customizerFeedData.settings[condition].replace(/ /gi,'') != '#'){
return (isConditionTrue >= 1) ? true : false;
isControlShown : function( control ){
if( control.checkViewDisabled != undefined ){
return !self.viewsActive[control.checkViewDisabled];
if( control.checkView != undefined ){
return !self.viewsActive[control.checkView];
if(control.checkExtension != undefined && control.checkExtension != false && !self.checkExtensionActive(control.checkExtension)){
return self.checkExtensionActive(control.checkExtension);
if(control.conditionDimmed != undefined && self.checkControlCondition(control.conditionDimmed) )
return self.checkControlCondition(control.conditionDimmed);
if(control.overrideColorCondition != undefined){
return self.checkControlOverrideColor( control.overrideColorCondition );
return ( control.conditionHide != undefined && control.condition != undefined || control.checkExtension != undefined )
? self.checkControlCondition(control.condition, control.checkExtension)
checkExtensionActive : function(extension){
return self.activeExtensions[extension];
expandSourceInfo : function(sourceId){
self.customizerScreens.sourceExpanded = (self.customizerScreens.sourceExpanded === sourceId) ? null : sourceId;
window.event.stopPropagation()
resetColor: function(controlId){
this.customizerFeedData.settings[controlId] = '';
//Source Active Customizer
isSourceActiveCustomizer : function(source){
Array.isArray(self.customizerFeedData.settings.sources.map) ||
self.customizerFeedData.settings.sources instanceof Object
self.customizerScreens.sourcesChoosed.map(s => s.account_id).includes(source.account_id);
//self.customizerFeedData.settings.sources.map(s => s.account_id).includes(source.account_id);
//Choose Source From Customizer
selectSourceCustomizer : function(source, isRemove = false){
isMultifeed = (self.activeExtensions['multifeed'] !== undefined && self.activeExtensions['multifeed'] == true),
sourcesListMap = Array.isArray(self.customizerFeedData.settings.sources) || self.customizerFeedData.settings.sources instanceof Object ? self.customizerFeedData.settings.sources.map(s => s.account_id) : [];
if(self.customizerScreens.sourcesChoosed.map(s => s.account_id).includes(source.account_id)){
var indexToRemove = self.customizerScreens.sourcesChoosed.findIndex(src => src.account_id === source.account_id);
self.customizerScreens.sourcesChoosed.splice(indexToRemove, 1);
self.customizerFeedData.settings.sources.splice(indexToRemove, 1);
self.customizerScreens.sourcesChoosed.push(source);
self.customizerScreens.sourcesChoosed = (sourcesListMap.includes(source)) ? [] : [source];
ctfBuilder.$forceUpdate();
closeSourceCustomizer : function(){
self.viewsActive['sourcePopup'] = false;
//self.customizerFeedData.settings.sources = self.customizerScreens.sourcesChoosed;
ctfBuilder.$forceUpdate();
customizerFeedTypePrint : function(){
combinedTypes = self.feedTypes.concat(self.advancedFeedTypes);
result = combinedTypes.filter(function(tp){
return tp.type === self.customizerFeedData.settings.feedtype
self.customizerScreens.printedType = result.length > 0 ? result[0] : [];
return result.length > 0 ? true : false;
choosedFeedTypeCustomizer : function(feedType){
var self = this, result = false;
(self.viewsActive.feedTypeElement === null && self.customizerFeedData.settings.feedtype === feedType) ||
(self.viewsActive.feedTypeElement !== null && self.viewsActive.feedTypeElement == feedType)
choosedFeedTemplateCustomizer : function(feedtemplate){
var self = this, result = false;
(self.viewsActive.feedTemplateElement === null && self.customizerFeedData.settings.feedtemplate === feedtemplate) ||
(self.viewsActive.feedTemplateElement !== null && self.viewsActive.feedTemplateElement == feedtemplate)
updateFeedTypeCustomizer : function(){
if (self.viewsActive.feedTypeElement === 'socialwall') {
window.location.href = ctf_builder.pluginsInfo.social_wall.settingsPage;
self.setType( self.viewsActive.feedTypeElement );
self.customizerFeedData.settings.feedtype = self.viewsActive.feedTypeElement;
self.viewsActive.feedTypeElement = null;
self.viewsActive.feedtypesPopup = false;
self.customizerControlAjaxAction('feedFlyPreview');
ctfBuilder.$forceUpdate();
updateInputWidth : function(){
this.customizerScreens.inputNameWidth = ((document.getElementById("ctf-csz-hd-input").value.length + 6) * 8) + 'px';
updateFeedTemplateCustomizer : function(){
self.customizerFeedData.settings.feedtemplate = self.viewsActive.feedTemplateElement != null ? self.viewsActive.feedTemplateElement : self.customizerFeedData.settings.feedtemplate;
self.viewsActive.feedTemplateElement = null;
self.viewsActive.feedtemplatesPopup = false;
self.customizerControlAjaxAction('feedTemplateFlyPreview');
ctfBuilder.$forceUpdate();
customizerFeedTemplatePrint : function(){
result = self.feedTemplates.filter(function(tp){
return tp.type === self.customizerFeedData.settings.feedtemplate
self.customizerScreens.printedTemplate = result.length > 0 ? result[0] : [];
return result.length > 0 ? true : false;
feedPreviewMaker : function(){
//return self.template == null ? null : "<div>" + self.template + "</div>";
customizerStyleMaker : function(){
if(self.customizerSidebarBuilder){
Object.values(self.customizerSidebarBuilder).map( function(tab) {
self.customizerSectionStyle(tab.sections);
return '<style type="text/css">' + self.feedStyle + '</style>';
customizerSectionStyle : function(sections){
Object.values(sections).map(function(section){
Object.values(section.controls).map(function(control){
self.returnControlStyle(control);
if(section.nested_sections){
self.customizerSectionStyle(section.nested_sections);
Object.values(section.nested_sections).map(function(nestedSections){
Object.values(nestedSections.controls).map(function(nestedControl){
if(nestedControl.section){
self.customizerSectionStyle(nestedControl);
returnControlStyle : function( control ){
Object.entries(control.style).map( function(css) {
var condition = control.condition != undefined || control.checkExtension != undefined ? self.checkControlCondition(control.condition, control.checkExtension) : true;
css[1].replace("{{value}}", self.customizerFeedData.settings[control.id]) +
* Customizer Control Ajax
* Some of the customizer controls need to perform Ajax
* Calls in order to update the preview
customizerControlAjaxAction : function( actionType, settingID = false ){
self.templateRender = false;
action : 'ctf_feed_saver_manager_fly_preview',
feedID : self.customizerFeedData.feed_info.id,
previewSettings : self.customizerFeedData.settings,
feedName : self.customizerFeedData.feed_info.feed_name,
self.ajaxPost(previewFeedData, function(_ref){
self.updatedTimeStamp = new Date().getTime();
self.template = String("<div>"+data.feed_html+"</div>");
self.processNotification("previewUpdated");
self.processNotification("unkownError");
jQuery('body').find('.ctf-more').unbind('click')
case 'feedTemplateFlyPreview':
self.templateRender = false;
action : 'ctf_feed_saver_manager_fly_preview',
feedID : self.customizerFeedData.feed_info.id,
previewSettings : self.customizerFeedData.settings,
feedName : self.customizerFeedData.feed_info.feed_name,
isFeedTemplatesPopup : true,
self.ajaxPost(previewFeedData, function(_ref){
self.customizerFeedData.settings = data.customizerDataSettings;
self.updatedTimeStamp = new Date().getTime();
self.template = String("<div>"+data.feed_html+"</div>");
self.processNotification("previewUpdated");
self.setShortcodeGlobalSettings(true)
self.processNotification("unkownError");
case 'feedPreviewRender':
* Ajax Action : Save Feed Settings
saveFeedSettings : function(){
action : 'ctf_feed_saver_manager_builder_update',
feed_id : self.customizerFeedData.feed_info.id,
feed_name : self.customizerFeedData.feed_info.feed_name,
settings : self.customizerFeedData.settings,
selectedFeed : self.selectedFeed,
selectedFeedModel : self.selectedFeedModel,
type : self.getFeedTypeSaver(),
self.ajaxPost(updateFeedData, function(_ref){
if(data && data.success === true){
self.processNotification('feedSaved');
self.customizerFeedDataInitial = self.customizerFeedData;
self.processNotification('feedSavedError');
ctfBuilder.$forceUpdate();
* Ajax Action : Clear Single Feed Cache
* Update Feed Preview Too
clearSingleFeedCache : function(){
action : 'ctf_feed_saver_manager_clear_single_feed_cache',
feedID : self.customizerFeedData.feed_info.id,
previewSettings : self.customizerFeedData.settings,
self.ajaxPost(clearFeedData, function(_ref){
self.processNotification('cacheCleared');
self.processNotification("unkownError");
ctfBuilder.$forceUpdate();
* Clear & Reset Color Override
resetColorOverride : function(settingID){
this.customizerFeedData.settings[settingID] = '';
* Remove Source Form List Multifeed
removeSourceCustomizer : function(type, args = []){
Object.assign(self.customizerScreens.sourcesChoosed,self.customizerFeedData.settings.sources);
self.selectSourceCustomizer(args, true);
ctfBuilder.$forceUpdate();
window.event.stopPropagation();
fieldCustomClickAction : function( clickAction ){