: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
self.viewsActive[viewName] = (self.viewsActive[viewName] == false ) ? true : false;
if(viewName === 'feedtypesPopup'){
self.viewsActive.feedTypeElement = null;
self.selectedFeedPopup = JSON.parse(JSON.stringify(self.selectedFeed));
if(viewName === 'extensionsPopupElement' && self.customizerFeedData !== undefined){
//self.activateView('feedtypesPopup');
if(viewName == 'editName'){
document.getElementById("ctf-csz-hd-input").focus();
if(viewName == 'embedPopup' && ajaxAction == true){
if((viewName == 'sourcePopup' || viewName == 'sourcePopupType') && sourcePopupType == 'creationRedirect'){
self.$refs.addSourceRef.processIFConnect()
ctfBuilder.$forceUpdate();
* Show/Hide View or Redirect to plugin dashboard page
activateViewOrRedirect: function(viewName, pluginName, plugin) {
if ( plugin.installed && plugin.activated ) {
window.location = plugin.dashboard_permalink;
self.viewsActive[viewName] = (self.viewsActive[viewName] == false ) ? true : false;
if(viewName == 'installPluginPopup'){
self.viewsActive.installPluginModal = pluginName;
ctfBuilder.$forceUpdate();
var overlay = document.querySelectorAll("sb-fs-boss");
if (overlay.length > 0) {
document.getElementById("wpbody-content").prepend(overlay[0]);
* Check if View is Active
checkActiveView : function(viewName){
return this.viewsActive[viewName];
* Check if Control Is active
checkActiveControl : function(controlId, enabled){
return self.customizerFeedData.settings[controlId] === enabled || self.customizerFeedData.settings[controlId] === enabled.toString();
* Switch & Change Feed Screens
switchScreen: function(screenType, screenName){
this.viewsActive[screenType] = screenName;
ctfBuilder.$forceUpdate();
* Check if Value is Empty
checkNotEmpty : function(value){
return value != false && value != null && value != undefined && value.replace(/ /gi,'') != '';
* Check if Value exists in Array Object
checkObjectArrayElement : function(objectArray, object, byWhat){
var objectResult = objectArray.filter(function(elem){
return elem[byWhat] == object[byWhat];
return (objectResult.length > 0) ? true : false;
* Check if Data Setting is Enabled
valueIsEnabled : function(value){
return value == 1 || value == true || value == 'true' || value == 'on';
* @return jsonObject / Boolean
jsonParse : function(jsonString){
return JSON.parse(jsonString);
ajaxPost : function(data, callback){
data['nonce'] = self.nonce;
self.$http.post(self.ajaxHandler,data).then(callback);
* Check if Object has Nested Property
hasOwnNestedProperty : function(obj,propertyPath) {
if (!propertyPath){return false;}var properties = propertyPath.split('.');
for (var i = 0; i < properties.length; i++) {
var prop = properties[i];
if (!obj || !obj.hasOwnProperty(prop)) {
feedListPagination : function(type){
currentPage = self.feedPagination.currentPage,
pagesNumber = self.feedPagination.pagesNumber;
if((currentPage != 1 && type == 'prev') || (currentPage < pagesNumber && type == 'next')){
self.feedPagination.currentPage = (type == 'next') ?
(currentPage < pagesNumber ? (parseInt(currentPage) + 1) : pagesNumber) :
(currentPage > 1 ? (parseInt(currentPage) - 1) : 1);
action : 'ctf_feed_saver_manager_get_feed_list_page',
page : self.feedPagination.currentPage
self.ajaxPost(postData, function(_ref){
ctfBuilder.$forceUpdate();
chooseFeedType : function(feedTypeEl, iscustomizerPopup = false){
feedAllowedTypes = self.feedTypes.map( element => element['type'] );
if(feedAllowedTypes.includes(feedTypeEl.type)){
self.selectedFeed.push(feedTypeEl.type);
self.viewsActive.extensionsPopupElement = feedTypeEl.type;
if( self.customizerFeedData !== undefined){
self.viewsActive['feedtypesPopup'] = false;
ctfBuilder.$forceUpdate();
selectFeedTypePopup : function( feedTypeEl ){
feedAllowedTypes = self.feedTypes.map( element => element['type'] );
if(feedAllowedTypes.includes(feedTypeEl.type)){
self.selectedFeedPopup = [];
self.selectedFeedPopup.push(feedTypeEl.type);
self.viewsActive.extensionsPopupElement = feedTypeEl.type;
* Check Selected Feed Type
checkFeedTypeSelect : function( feedTypeEl ){
if(self.customizerFeedData){
return self.selectedFeedPopup.includes(feedTypeEl.type) && feedTypeEl.type != 'socialwall'
return self.selectedFeed.includes(feedTypeEl.type) && feedTypeEl.type != 'socialwall'
* Confirm Add Feed Type Poup
addFeedTypePopup : function(){
self.selectedFeed = self.selectedFeedPopup;
self.selectedFeed = self.selectedFeed.filter((element, index) => {
return self.selectedFeed.indexOf(element) === index;
self.activateView('feedtypesPopup');
if( self.customizerFeedData ){
self.activateView('feedtypesCustomizerPopup');
* Returns The Selected Feeds Type
getCustomizerSelectedFeedsType : function(){
customizerSettings = self.customizerFeedData.settings;
switch (customizerSettings.type) {
return ['mentionstimeline'];
self.feedTypes.forEach( function(feed) {
if(self.checkNotEmpty( self.selectedFeedModel[feed.type])){
feedTypes.push( feed.type );
checkMultipleFeedType : function(){
return this.selectedFeed.length > 1;
* Check if Feed Type Source is Active
checkMultipleFeedTypeActive : function(feedTypeID){
if(self.customizerFeedData){
return self.selectedFeedPopup.length >= 1 && self.selectedFeedPopup.includes(feedTypeID);
return self.selectedFeed.length >= 1 && self.selectedFeed.includes(feedTypeID);
* Check if Feed Type Source is Active
checkMultipleFeedTypeActiveCustomizer : function(feedTypeID){
return this.customizerFeedData.settings.type == feedTypeID || ( this.customizerFeedData.settings.type == 'mixed' && this.checkFeedTypeHasSources(feedTypeID) );
* Check if Feed Type Has Sources
checkFeedTypeHasSources : function(feedTypeID){
return self.checkNotEmpty(self.customizerFeedData.settings.screenname) && self.customizerFeedData.settings.screenname !== undefined && self.createSourcesArray(self.customizerFeedData.settings.screenname).length > 0;
return self.checkNotEmpty(self.customizerFeedData.settings.hashtag) && self.customizerFeedData.settings.hashtag !== undefined && self.createSourcesArray(self.customizerFeedData.settings.hashtag).length > 0;
return self.customizerFeedData.settings.home !== undefined && self.valueIsEnabled(self.customizerFeedData.settings.home);
return self.checkNotEmpty(self.customizerFeedData.settings.search) && self.customizerFeedData.settings.search !== undefined && self.createSourcesArray(self.customizerFeedData.settings.search).length > 0;
return self.customizerFeedData.settings.mentions !== undefined && self.valueIsEnabled(self.customizerFeedData.settings.mentions);
return self.checkNotEmpty(self.customizerFeedData.settings.lists_info) && self.customizerFeedData.settings.lists_info !== undefined && self.jsonParse(self.customizerFeedData.settings.lists_info) !== false && Object.keys(self.jsonParse(self.customizerFeedData.settings.lists_info)).length > 0;
return self.checkNotEmpty(self.customizerFeedData.settings.lists) && self.customizerFeedData.settings.lists !== undefined && self.createSourcesArray(self.customizerFeedData.settings.lists).length > 0;
* Toggle the Feed Types in Popup
openFeedTypesPopupCustomizer : function(){
self.selectedFeedPopup = JSON.parse(JSON.stringify(self.selectedFeed));
self.selectedFeedModelPopup = JSON.parse(JSON.stringify(self.selectedFeedModel));
self.activateView('feedtypesCustomizerPopup');
* Toggle the Feed Types in Popup
toggleFeedTypesChooserPopup : function(){
self.activateView('feedtypesCustomizerPopup');
self.activateView('feedtypesPopup');
* Toggle the Feed Types With Sources Popup
toggleFeedTypesSourcesPopup : function(){
self.activateView('sourcesListPopup');
if( self.customizerFeedData ){
self.activateView('feedtypesCustomizerPopup');
updateFeedTypeAndSourcesCustomizer : function(){
feedTypes = Object.entries(self.selectSourceScreen.multipleTypes);
self.selectedFeedModel = JSON.parse(JSON.stringify(self.selectedFeedModelPopup));
feedTypes.forEach( function(element) {
var feedTypeID = element[0];
if( !self.selectedFeed.includes(feedTypeID) ){
var settingName = feedTypeID == 'usertimeline' ? 'screenname' : feedTypeID,
settingValue = ( feedTypeID !== 'hometimeline' && feedTypeID !== 'mentionstimeline' ) ? '' : 'false';
self.customizerFeedData.settings[settingName] = '';
if(feedTypeID == 'lists'){
self.customizerFeedData.settings['lists_info'] = [];
if(feedTypeID == 'hometimeline'){
self.customizerFeedData.settings.home = true;
if(feedTypeID == 'mentionstimeline'){
self.customizerFeedData.settings.metions = true;
self.applyFeedTypePopup();
self.customizerControlAjaxAction('feedFlyPreview');
self.activateView('feedtypesCustomizerPopup');
cancelFeedTypeAndSourcesCustomizer : function(){
if( JSON.stringify(self.selectedFeedModelPopup) === JSON.stringify(self.selectedFeedModel) ){
self.viewsActive['feedtypesPopup'] = false;
self.viewsActive['feedtypesCustomizerPopup'] = false;
self.openDialogBox('unsavedFeedSources');
* If max number of source types are added (3)
maxTypesAdded : function(){
if ( true /* is free version */ ) {
return this.selectedFeed.length >= 6;
* Check if Feed Type Source is Active
removeFeedTypeSource : function(feedTypeID){
if(self.selectedFeed.length > 1){
if(self.customizerFeedData){
var settingName = feedTypeID == 'usertimeline' ? 'screenname' : feedTypeID,
settingValue = ( feedTypeID !== 'hometimeline' && feedTypeID !== 'mentionstimeline' ) ? '' : false;
self.selectedFeedModelPopup[feedTypeID] = settingValue;