: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
case 'clearCommentCache':
self.clearCommentCache();
clearCommentCache : function(){
var clearCommentCacheData = {
action : 'ctf_feed_saver_manager_clear_comments_cache',
self.ajaxPost(clearCommentCacheData, function(_ref){
if( data === 'success' ){
self.processNotification("commentCacheCleared");
self.processNotification("unkownError");
openDialogBox : function(type, args = []){
icon = self.dialogBoxPopupScreen[type].icon,
heading = self.dialogBoxPopupScreen[type].heading,
description = self.dialogBoxPopupScreen[type].description,
customButtons = self.dialogBoxPopupScreen[type].customButtons;
case "deleteSourceCustomizer":
self.sourceToDelete = args;
heading = heading.replace("#", self.sourceToDelete.username);
self.feedToDelete = args;
heading = heading.replace("#", self.feedToDelete.feed_name);
description : description,
customButtons : customButtons
window.event.stopPropagation();
* Confirm Dialog Box Actions
confirmDialogAction : function(){
switch (self.dialogBox.type) {
case 'deleteSourceCustomizer':
self.selectSourceCustomizer(self.sourceToDelete, true);
self.customizerControlAjaxAction('feedFlyPreview');
self.feedActionDelete([self.feedToDelete.id]);
case 'deleteMultipleFeeds':
self.feedActionDelete(self.feedsSelected);
window.location = self.builderUrl;
case 'unsavedFeedSources':
self.updateFeedTypeAndSourcesCustomizer();
window.open('https://smashballoon.com/pricing/twitter-feed/?utm_source=twitter-free&utm_medium=settings-builder&utm_campaign=multiple-feeds&utm_content=AddNew')
closeConfirmDialog : function(){
this.sourceToDelete = {};
toggleElementTooltip : function(tooltipText, type, align = 'center'){
target = window.event.currentTarget,
tooltip = (target != undefined && target != null) ? document.querySelector('.sb-control-elem-tltp-content') : null;
if(tooltip != null && type == 'show'){
self.tooltip.text = tooltipText;
var position = target.getBoundingClientRect(),
left = position.left + 10,
tooltip.style.left = left + 'px';
tooltip.style.top = top + 'px';
tooltip.style.textAlign = align;
self.tooltip.hover = true;
if(self.tooltip.hoverType != 'inside'){
self.tooltip.hover = false;
hoverTooltip : function(type, hoverType){
this.tooltip.hover = type;
this.tooltip.hoverType = hoverType;
getPostText : function( postText, postID ){
customizerSettings = self.customizerFeedData.settings;
postText = postText.replace(/</g,"<").replace(/>/g,">").replace(/<br>|<br \/>/g, '<br>');
if( self.checkNotEmpty(customizerSettings.textlength) ){
return ( self.expandedCaptions.includes(postID) ? postText : postText.substring( 0, parseInt(customizerSettings.textlength) ) ) +
( postText.length > parseInt( customizerSettings.textlength ) ? ('<a href="#" class="ctf_more" onclick="ctfBuilderToggleCaption('+postID+')">...</a>') : '');
var textLength = !self.checkNotEmpty(customizerSettings.textlength) ? 50 : parseInt(customizerSettings.textlength);
return postText.substring( 0, textLength);
* Loading Bar & Notification
processNotification : function( notificationType ){
notification = self.genericText.notification[ notificationType ];
self.notificationElement = {
type : notification.type,
text : notification.text,
self.notificationElement.shown = "hidden";
checkManualEmpty : function(){
return self.checkNotEmpty(self.appCredentials.access_token) && self.checkNotEmpty(self.appCredentials.access_token_secret);
closeConnectAccountPopup : function(){
self.viewsActive.connectAccountPopup = false;
* Connect Twitter Account Manually
connectManualAccount : function(){
if( self.checkManualEmpty() ){
var connectManualAccountData = {
action : 'ctf_feed_saver_manager_connect_manual_account',
app_name : self.appCredentials.app_name,
consumer_key : self.appCredentials.consumer_key,
consumer_secret : self.appCredentials.consumer_secret,
access_token : self.appCredentials.access_token,
access_token_secret : self.appCredentials.access_token_secret
self.ajaxPost(connectManualAccountData, function(_ref){
if(data['error'] === undefined){
self.accountDetails = data;
self.manualAccountResp = 'success';
self.viewsActive['connectAccountPopup'] = false;
self.manualAccountResp = false;
self.manualAccountResp = 'error';
self.manualAccountResp = false;
self.loadingAjax = false;
* This Will Perform and Ajax Call to see if the List Does Exist
addListIdtoList : function(){
* Search Lists By UserName
searchUserNameList : function(){
searchUserNameListsData = {
action : 'ctf_feed_saver_manager_search_username_lists',
listUserNameInputModel : self.listUserNameInputModel,
self.listUserNameInputModelSearched = self.listUserNameInputModel;
self.ajaxPost(searchUserNameListsData, function(_ref){
if(data !== false && data['error'] === undefined){
self.listUserNameResult = self.createSourcesArray(data);
* Check Twitter List By ID
checkTwitterListById : function(){
action : 'ctf_feed_saver_manager_check_twitter_list_by_id',
listIds : self.listIdInputModel,
self.ajaxPost(checkListByIdData, function(_ref){
if(data !== false && data['error'] === undefined){
data.forEach( function(listItem) {
self.addItemtoList(listItem);
self.listIdInputModel = '';
addItemtoList : function( listItem ){
selectFeedModelCurrent = self.customizerFeedData ? JSON.parse( JSON.stringify( self.selectedFeedModelPopup ) ) : JSON.parse( JSON.stringify( self.selectedFeedModel ) ),
listIdsArray = self.checkNotEmpty( selectFeedModelCurrent.lists ) ? selectFeedModelCurrent.lists.split(',') : [];
if( listIdsArray.includes( listID ) ){
listIdsArray.splice( listIdsArray.indexOf( listID ) , 1 );
listIdsArray.push( listID );
selectFeedModelCurrent.lists = listIdsArray.join(',');
if( self.checkObjectArrayElement(selectFeedModelCurrent.listsObject, listItem, 'id')){
selectFeedModelCurrent.listsObject.splice(selectFeedModelCurrent.listsObject.findIndex(function(el){
return el.id === listItem.id;
selectFeedModelCurrent.listsObject.push( listItem );
if( self.customizerFeedData ){
self.selectedFeedModelPopup = JSON.parse(JSON.stringify(selectFeedModelCurrent));
self.selectedFeedModel = JSON.parse(JSON.stringify(selectFeedModelCurrent));
* Remove Single Item From List
removeSingleItemFromList : function( listItem ){
selectFeedModelCurrent = self.customizerFeedData ? JSON.parse( JSON.stringify( self.selectedFeedModelPopup ) ) : JSON.parse( JSON.stringify( self.selectedFeedModel ) ),
listIdsArray = selectFeedModelCurrent.lists.split(',');
if( listIdsArray.includes( listID ) ){
listIdsArray.splice( listIdsArray.indexOf( listID ) , 1 );
selectFeedModelCurrent.lists = listIdsArray.join(',');
if( self.checkObjectArrayElement(selectFeedModelCurrent.listsObject, listItem, 'id')){
selectFeedModelCurrent.listsObject.splice(selectFeedModelCurrent.listsObject.findIndex(function(el){
return el.id === listItem.id;
if( self.customizerFeedData ){
self.selectedFeedModelPopup = JSON.parse(JSON.stringify(selectFeedModelCurrent));
self.selectedFeedModel = JSON.parse(JSON.stringify(selectFeedModelCurrent));
* Check if Item List is Included
checkListItemIncluded : function(listItem){
selectFeedModelCurrent = self.customizerFeedData ? JSON.parse(JSON.stringify(self.selectedFeedModelPopup)) : JSON.parse(JSON.stringify(self.selectedFeedModel)),
listIdsArray = selectFeedModelCurrent.lists.split(',');
if( self.checkObjectArrayElement(selectFeedModelCurrent.listsObject, listItem, 'id')){
* Deselect & Remove All Lists
removeAllLists : function(){
if( self.customizerFeedData ){
self.selectedFeedModelPopup.lists = '';
self.selectedFeedModelPopup.listsObject = [];
self.selectedFeedModel.lists = '';
self.selectedFeedModel.listsObject = [];
chooseFeedTemplate: function( feedTemplate, iscustomizerPopup = false ) {
self.selectedFeedTemplate = feedTemplate.type;
self.viewsActive.feedTemplateElement = feedTemplate.type;
ctfBuilder.$forceUpdate();
* Checking If there is @ otherwise we add it
printUserNameTwitterHandle : function( userName ){
if( this.checkNotEmpty(userName) ){
return userName[0] == '@' ? userName : '@' + userName;
noticeClickAction : function( action ){
var SectionStyle = self.customizerSidebarBuilder['customize'].sections['customize_posts'];
self.switchCustomizerSection('customize_posts',SectionStyle);
case 'navigateToSettingPage':
window.open(self.adminSettingsURL, '_blank');
printDate : function( postDate){
originalDate = Date.parse(postDate) / 1000,
offsetTimezone = dateOffset.getTimezoneOffset(),
lengths = ["60","60","24","7","4.35","12","10"],
now = dateOffset.getTime() / 1000,
newTime = originalDate + offsetTimezone,
dateFortmat = self.customizerFeedData.settings.dateformat,
'8' : 'l F jS, Y - g:i a',
if(formatsChoices.hasOwnProperty(dateFortmat)){
printDate = date_i18n( formatsChoices[dateFortmat], newTime );
}else if(dateFortmat == 'custom'){
var dateCustom = self.customizerFeedData.settings.datecustom;
printDate = date_i18n( dateCustom , newTime );
var ctf_minute = self.translatedText.ctf_minute,
ctf_hour = self.translatedText.ctf_hour,
ctf_now_str = self.translatedText.ctf_now_str;
difference = now - newTime;
} else if ( difference < (60*60) ) {
printDate = Math.round( difference/60 ) + '' + ctf_minute;
} else if ( difference < (60*60*24) ) {
printDate = Math.round( difference/3600 ) + '' + ctf_hour;
var nowDate = new Date(now * 1000),
newTimeDate = new Date(newTime * 1000);
if( nowDate.getUTCFullYear() > newTimeDate.getUTCFullYear() ){
printDate = date_i18n( 'j M Y' , newTime );
printDate = date_i18n( 'j M' , newTime );
ctaToggleFeatures: function() {
this.freeCtaShowFeatures = !this.freeCtaShowFeatures;