PluginProbe ʕ •ᴥ•ʔ
Custom Twitter Feeds – A Tweets Widget or X Feed Widget / 2.8.0
Custom Twitter Feeds – A Tweets Widget or X Feed Widget v2.8.0
2.8.0 2.7.0 2.6.1 2.6.0 1.0 1.0.1 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.2 1.2.1 1.2.10 1.2.11 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3 1.4 1.4.1 1.5 1.5.1 1.6 1.6.1 1.7 1.8 1.8.1 1.8.2 1.8.3 1.8.4 2.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1 2.1.1 2.1.2 2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.3.0 2.3.1 2.5.4 2.5.5 trunk
custom-twitter-feeds / js / ctf-admin-scripts.js
custom-twitter-feeds / js Last commit date
admin-notifications.js 3 weeks ago ctf-admin-scripts.js 3 weeks ago ctf-blocks.js 3 weeks ago ctf-scripts.js 3 weeks ago ctf-scripts.min.js 3 weeks ago jquery.matchHeight-min.js 3 weeks ago
ctf-admin-scripts.js
758 lines
1 jQuery(document).ready(function($){
2 // toggle token input fields
3 $ctfConsumerFields = $('.ctf-toggle-consumer'),
4 $ctfAccessFields = $('.ctf-toggle-access'),
5 $ctfHaveOwnTokens = $('#ctf_have_own_tokens');
6
7 // variables for time triggered validator
8 var typingTimer,
9 doneTypingInterval = 1000,
10 $ctfSearchText = $('#ctf-admin #ctf_search_text'),
11 $ctfUserText = $('#ctf-admin #ctf_usertimeline_text'),
12 $ctfSearchError = $('#ctf-admin .ctf_search_error'),
13 $ctfUserError= $('#ctf-admin .ctf_usertimeline_error');
14
15 // hide elements when page loads
16 $ctfSearchError.hide();
17 $ctfUserError.hide();
18
19 // on search text keyup, start timer to trigger validator
20 $ctfSearchText.keyup(function(){
21 clearTimeout(typingTimer);
22 if($ctfSearchText.val){
23 typingTimer = setTimeout(searchValidator, doneTypingInterval);
24 }
25 });
26
27 // on usertimeline text keyup, start timer to trigger validator
28 $ctfUserText.keyup(function(){
29 clearTimeout(typingTimer);
30 if($ctfUserText.val){
31 typingTimer = setTimeout(userValidator, doneTypingInterval);
32 }
33 });
34
35 // validate search input when user is done typing
36 var internationalHashtagRegexString = "[A-z\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC",
37 hashtagRegex = new RegExp("^"+internationalHashtagRegexString+"]"+internationalHashtagRegexString+"0-9_]+$|^#+"+internationalHashtagRegexString+"]"+internationalHashtagRegexString+"0-9_]+$");
38
39 function searchValidator() {
40 var ctfSearch = $ctfSearchText.val();
41
42 if ( ctfSearch.indexOf(',') > -1 || ctfSearch.indexOf(' ') > -1 ){
43 $ctfSearchError.slideDown();
44 } else {
45 $ctfSearchError.slideUp();
46 }
47 }
48
49 // validate screen name input when user is done typing
50 function userValidator(){
51 var ctfUser = $ctfUserText.val();
52
53 if(ctfUser.match(/^@[A-Za-z0-9_]{1,15}$/) || ctfUser.match(/^[A-Za-z0-9_]{1,15}$/)){
54 $ctfUserError.slideUp();
55 } else {
56 $ctfUserError.slideDown();
57 }
58 }
59
60 // search term guide toggle
61 var $ctfToggleSearchGuide = $('#ctf-admin .ctf-toggle-search-guide');
62
63 // hide initially
64 $ctfToggleSearchGuide.closest('h4').next('div').hide();
65
66 // show on click
67 $ctfToggleSearchGuide.on('click',function(){
68 $(this).closest('h4').next('div').slideToggle();
69 });
70
71 // tooltips
72 $('#ctf-admin .ctf-tooltip-link').on('click',function(){
73 $(this).closest('tr, h3, .ctf-tooltip-wrap').find('.ctf-tooltip').slideToggle();
74 });
75
76 // include replies
77 $('.ctf_include_replies_toggle').hide();
78 $('.ctf_include_replies_toggle input').prop('disabled', true);
79
80 function toggleIncludeReplies() {
81 $('.ctf_include_replies_toggle').each(function() {
82 if($(this).closest('td').find('.ctf-feed-settings-radio').is(':checked')) {
83 $(this).slideDown();
84 } else {
85 $(this).slideUp();
86 }
87 });
88 }
89 toggleIncludeReplies();
90
91 $('.ctf-feed-settings-radio').on('change', function() {
92 toggleIncludeReplies();
93
94 if( $('#ctf-admin #ctf_usertimeline_radio').is(':checked') ) {
95 userValidator();
96 // $ctfSearchError.slideUp();
97 } else if( $('#ctf-admin #ctf_search_radio').is(':checked') ) {
98 searchValidator();
99 // $ctfUserError.slideUp();
100 }
101 });
102
103 // color picker
104 var $ctfColorpicker = $('.ctf-colorpicker');
105
106 if($ctfColorpicker.length > 0){
107 $ctfColorpicker.wpColorPicker();
108 }
109
110 // shortcode tooltips
111 var $ctfAdminLabel = $('#ctf-admin label');
112
113 $ctfAdminLabel.on('click',function(){
114 var $sbi_shortcode = $(this).siblings('.ctf_shortcode');
115 if($sbi_shortcode.is(':visible')){
116 $(this).removeClass('ctf_shortcode_visible');
117 $(this).siblings('.ctf_shortcode').css('display','none');
118 } else {
119 $(this).addClass('ctf_shortcode_visible');
120 $(this).siblings('.ctf_shortcode').css('display','block');
121 }
122 });
123
124 $ctfAdminLabel.on('mouseenter mouseleave', function(e) {
125 switch(e.type) {
126 case 'mouseenter':
127 if($(this).siblings('.ctf_shortcode').length > 0 ){
128 $(this).attr('title', 'Click for shortcode option').append('<code class="ctf_shortcode_symbol">[]</code>');
129 }
130 break;
131 case 'mouseleave':
132 $(this).find('.ctf_shortcode_symbol').remove();
133 break;
134 }
135 });
136
137 //Scroll to hash for quick links
138 $('#ctf-admin a').on('click',function() {
139 if(location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
140 var target = $(this.hash);
141 target = target.length ? target : this.hash.slice(1);
142 if(target.length) {
143 $('html,body').animate({
144 scrollTop: target.offset().top
145 }, 500);
146 return false;
147 }
148 }
149 });
150
151 //Mobile width
152 var ctfWidthUnit = $('#ctf-admin #ctf_width_unit').val(),
153 ctfWidth = $('#ctf-admin #ctf_width').val(),
154 $ctfWidthOptions = $('#ctf-admin #ctf_width_options');
155
156 if (typeof ctfWidth !== 'undefined') {
157 //Show initially if a width is set
158 if(ctfWidth.length > 1 && !(ctfWidth == '100' && ctfWidthUnit == '%')) $ctfWidthOptions.show();
159
160 $('#ctf_width, #ctf_width_unit').on('change',function(){
161 ctfWidthUnit = $('#ctf-admin #ctf_width_unit').val(),
162 ctfWidth = $('#ctf-admin #ctf_width').val();
163
164 if(ctfWidth.length < 2 || (ctfWidth == '100' && ctfWidthUnit == '%')) {
165 $ctfWidthOptions.slideUp();
166 } else {
167 $ctfWidthOptions.slideDown();
168 }
169 });
170 }
171
172 // clear cache
173 var $ctfClearCacheButton = $('#ctf-admin #ctf-clear-cache');
174
175 $ctfClearCacheButton.on('click',function(event) {
176 event.preventDefault();
177
178 $('#ctf-clear-cache-success').remove();
179 $(this).prop("disabled",true);
180
181 $.ajax({
182 url : ctf.ajax_url,
183 type : 'post',
184 data : {
185 action : 'ctf_clear_cache_admin',
186 ctf_nonce: ctf.nonce
187 },
188 success : function(data) {
189 $ctfClearCacheButton.prop('disabled',false);
190 if(!data===false) {
191 $ctfClearCacheButton.after('<span id="ctf-clear-cache-success" class="fa fa-check-circle ctf-success"></span>');
192 } else {
193 $ctfClearCacheButton.after('<span>error</span>');
194 }
195 }
196 }); // ajax call
197 }); // clear-cache click
198
199 // clear persistent cache
200 var $ctfClearPersistentCacheButton = $('#ctf-admin #ctf-clear-persistent-cache');
201
202 $ctfClearPersistentCacheButton.on('click',function(event) {
203 event.preventDefault();
204
205 $('#ctf-clear-cache-success').remove();
206 $(this).prop("disabled",true);
207
208 $.ajax({
209 url : ctf.ajax_url,
210 type : 'post',
211 data : {
212 action : 'ctf_clear_persistent_cache'
213 },
214 success : function(data) {
215 $ctfClearPersistentCacheButton.prop('disabled',false);
216 $ctfClearPersistentCacheButton.after('<span id="ctf-clear-cache-success" class="fa fa-check-circle ctf-success"></span>');
217 }
218 }); // ajax call
219 }); // clear-persistent-cache click
220
221 //Pro version notices
222 var ctfUpgradeNote = '<span class="ctf_note"> - <a href="https://smashballoon.com/custom-twitter-feeds/?utm_campaign=twitter-free&utm_source=settings&utm_medium=layout" target="_blank">Available in Pro version</a></span>';
223 $('.ctf_pro').each(function(){
224 var $pro = $(this);
225 if (!$pro.find('.ctf_layout_options_wrap').length) {
226 $pro.find('td').last().append(ctfUpgradeNote);
227 $pro.find('input, select, textarea').attr('disabled', 'true');
228 }
229 });
230 $('#ctf_include_twittercards, #ctf_include_media, #ctf_include_replied_to').prop('disabled', true).prop('checked',false).next('label').css('color', '#999').after(ctfUpgradeNote);
231
232 $('#ctf-admin .ctf-show-pro').closest('span').next('.ctf-pro-options').hide();
233 $('#ctf-admin .ctf-show-pro').on('click',function() {
234 if ($(this).closest('span').next('.ctf-pro-options').is(':visible')) {
235 $(this).closest('span').next('.ctf-pro-options').hide();
236 } else {
237 $(this).closest('span').next('.ctf-pro-options').show();
238 }
239 });
240
241 function ctfUpdateLayoutTypeOptionsDisplay() {
242 setTimeout(function(){
243 jQuery('.ctf_layout_settings').hide();
244 jQuery('.ctf_layout_settings.ctf_layout_type_'+jQuery('.ctf_layout_type:checked').val()).show();
245 }, 1);
246 }
247 ctfUpdateLayoutTypeOptionsDisplay();
248 jQuery('.ctf_layout_type').on('change',ctfUpdateLayoutTypeOptionsDisplay);
249
250 // notices
251
252
253
254 jQuery('#ctf-notice-bar .dismiss').on('click',function(e) {
255 e.preventDefault();
256 jQuery('#ctf-notice-bar').remove();
257 jQuery.ajax({
258 url: ctf.ajax_url,
259 type: 'post',
260 data: {
261 action : 'ctf_lite_dismiss',
262 ctf_nonce: ctf.sb_nonce
263 },
264 success: function (data) {
265 }
266 });
267 });
268
269 jQuery('.ctf_show_gdpr_list').on('click', function(){
270 jQuery(this).closest('div').find('.ctf_gdpr_list').slideToggle();
271 });
272
273 //Selecting a post style
274 jQuery('#ctf_gdpr_setting').on('change', function(){
275 ctfCheckGdprSetting( jQuery(this).val() );
276 });
277 function ctfCheckGdprSetting(option) {
278 if( option == 'yes' ){
279 jQuery('.ctf_gdpr_yes').show();
280 jQuery('.ctf_gdpr_no, .ctf_gdpr_auto').hide();
281 }
282 if( option == 'no' ){
283 jQuery('.ctf_gdpr_no').show();
284 jQuery('.ctf_gdpr_yes, .ctf_gdpr_auto').hide();
285 }
286 if( option == 'auto' ){
287 jQuery('.ctf_gdpr_auto').show();
288 jQuery('.ctf_gdpr_yes, .ctf_gdpr_no').hide();
289 }
290 }
291 ctfCheckGdprSetting();
292
293 // Locator
294 jQuery('.ctf-locator-more').click(function(e) {
295 e.preventDefault();
296 jQuery(this).closest('td').find('.ctf-full-wrap').show();
297 jQuery(this).closest('td').find('.ctf-condensed-wrap').hide();
298 jQuery(this).remove();
299 });
300
301 //Click event for other plugins in menu
302 $('.ctf_get_cff, .ctf_get_sbi, .ctf_get_ctf, .ctf_get_yt').parent().on('click', function(e) {
303 e.preventDefault();
304 // remove the already opened modal
305 jQuery('#ctf-op-modals').remove();
306
307 // prepend the modal wrapper
308 $('#wpbody-content').prepend('<div class="ctf-fb-source-ctn sb-fs-boss ctf-fb-center-boss" id="ctf-op-modals"><i class="fa fa-spinner fa-spin ctf-loader" aria-hidden="true"></i></div>');
309
310 // determine the plugin name
311 var $self = $(this).find('span'),
312 sb_get_plugin = 'twitter';
313
314 if ($self.hasClass('ctf_get_cff')) {
315 sb_get_plugin = 'facebook';
316 } else if ($self.hasClass('ctf_get_sbi')) {
317 sb_get_plugin = 'instagram';
318 } else if ($self.hasClass('ctf_get_yt')) {
319 sb_get_plugin = 'youtube';
320 }
321 // send the ajax request to load plugin name and others data
322 $.ajax({
323 url: ctf.ajax_url,
324 type: 'post',
325 data: {
326 action: 'ctf_other_plugins_modal',
327 plugin: sb_get_plugin,
328 sb_nonce : ctf.sb_nonce,
329
330 },
331 success: function (data) {
332 if (data.success == true) {
333 $('#ctf-op-modals').html(data.data.output);
334 jQuery('body').on('click', '#ctf-op-modals', function(e){
335 if (e.target !== this) return;
336 jQuery('#ctf-op-modals').remove();
337 });
338 jQuery('body').on('click', '.ctf-fb-popup-cls', function(e){
339 jQuery('#ctf-op-modals').remove();
340 });
341 }
342 },
343 error: function (e) {
344 console.log(e);
345 }
346 });
347 });
348 //Close the modal if clicking anywhere outside it
349 jQuery('body').on('click', '.sb_cross_install_modal', function(e){
350 if (e.target !== this) return;
351 jQuery('.sb_cross_install_modal').remove();
352 });
353
354 //Add class to Pro menu item
355 $('.ctf_get_pro').parent().attr({'class':'ctf_get_pro_highlight', 'target':'_blank'});
356
357
358 jQuery('body').on('click', '#ctf_review_consent_yes', function(e) {
359 let reviewStep1 = jQuery('.ctf_review_notice_step_1, .ctf_review_step1_notice');
360 let reviewStep2 = jQuery('.ctf_notice.ctf_review_notice, .rn_step_2');
361
362 reviewStep1.hide();
363 reviewStep2.show();
364
365 $.ajax({
366 url : ctf.ajax_url,
367 type : 'post',
368 data : {
369 action : 'ctf_review_notice_consent_update',
370 consent : 'yes',
371 ctf_nonce: ctf.nonce
372 },
373 success : function(data) {
374 }
375 }); // ajax call
376
377 });
378
379 jQuery('body').on('click', '#ctf_review_consent_no', function(e) {
380 let reviewStep1 = jQuery('.ctf_review_notice_step_1, #ctf-notifications');
381 reviewStep1.hide();
382
383 $.ajax({
384 url : ctfA.ajax_url,
385 type : 'post',
386 data : {
387 action : 'ctf_review_notice_consent_update',
388 consent : 'no',
389 ctf_nonce: ctfA.ctf_nonce
390 },
391 success : function(data) {
392 }
393 }); // ajax call
394
395 });
396
397 $(document).on('click', '#renew-modal-btn', function() {
398 $('.ctf-sb-modal').show();
399 });
400
401 $(document).on('click', '#ctf-sb-close-modal', function() {
402 $('.ctf-sb-modal').hide();
403 });
404 });
405
406 /* global smash_admin, jconfirm, wpCookies, Choices, List */
407
408 (function($) {
409
410 'use strict';
411
412 // Global settings access.
413 var s;
414
415 // Admin object.
416 var SmashAdmin = {
417
418 // Settings.
419 settings: {
420 iconActivate: '<i class="fa fa-toggle-on fa-flip-horizontal" aria-hidden="true"></i>',
421 iconDeactivate: '<i class="fa fa-toggle-on" aria-hidden="true"></i>',
422 iconInstall: '<i class="fa fa-cloud-download" aria-hidden="true"></i>',
423 iconSpinner: '<i class="fa fa-spinner fa-spin" aria-hidden="true"></i>',
424 mediaFrame: false
425 },
426
427 /**
428 * Start the engine.
429 *
430 * @since 1.3.9
431 */
432 init: function() {
433
434 // Settings shortcut.
435 s = this.settings;
436
437 // Document ready.
438 $( document ).ready( SmashAdmin.ready );
439
440 // Addons List.
441 SmashAdmin.initAddons();
442 },
443
444 /**
445 * Document ready.
446 *
447 * @since 1.3.9
448 */
449 ready: function() {
450
451 // Action available for each binding.
452 $( document ).trigger( 'smashReady' );
453 },
454
455 //--------------------------------------------------------------------//
456 // Addons List.
457 //--------------------------------------------------------------------//
458
459 /**
460 * Element bindings for Addons List page.
461 *
462 * @since 1.3.9
463 */
464 initAddons: function() {
465
466 // Some actions have to be delayed to document.ready.
467 $( document ).on( 'smashReady', function() {
468
469 // Only run on the addons page.
470 if ( ! $( '#ctf-admin-addons' ).length ) {
471 return;
472 }
473
474 // Display all addon boxes as the same height.
475 if( $( '#ctf-admin-about .addon-item').length ){
476 $( '#ctf-admin-about .addon-item .details' ).matchHeight( { byrow: false, property: 'height' } );
477 }
478
479 // Addons searching.
480 if ( $('#ctf-admin-addons-list').length ) {
481 var addonSearch = new List( 'ctf-admin-addons-list', {
482 valueNames: [ 'addon-name' ]
483 } );
484
485 $( '#ctf-admin-addons-search' ).on( 'keyup', function () {
486 var searchTerm = $( this ).val(),
487 $heading = $( '#addons-heading' );
488
489 if ( searchTerm ) {
490 $heading.text( ctf_admin_strings.addon_search );
491 }
492 else {
493 $heading.text( $heading.data( 'text' ) );
494 }
495
496 addonSearch.search( searchTerm );
497 } );
498 }
499 });
500
501 // Toggle an addon state.
502 $( document ).on( 'click', '#ctf-admin-addons .addon-item button', function( event ) {
503
504 event.preventDefault();
505
506 if ( $( this ).hasClass( 'disabled' ) ) {
507 return false;
508 }
509
510 SmashAdmin.addonToggle( $( this ) );
511 });
512
513 //Close the modal if clicking anywhere outside it
514 jQuery('body').on('click', '#ctf-op-modals', function(e){
515 if (e.target !== this) return;
516 jQuery('#ctf-op-modals').remove();
517 });
518 jQuery('body').on('click', '.ctf-fb-popup-cls', function(e){
519 jQuery('#ctf-op-modals').remove();
520 });
521
522 //Add class to Pro menu item
523 $('.ctf_get_pro').parent().attr({'class':'ctf_get_pro_highlight', 'target':'_blank'});
524
525 //Click event for other plugins in menu
526 $('.ctf_get_cff, .ctf_get_sbi, .ctf_get_ctf, .ctf_get_yt').parent().on('click', function(e) {
527 e.preventDefault();
528
529 // remove the already opened modal
530 jQuery('#ctf-op-modals').remove();
531
532 // prepend the modal wrapper
533 $('#wpbody-content').prepend('<div class="ctf-fb-source-ctn sb-fs-boss ctf-fb-center-boss" id="ctf-op-modals"><i class="fa fa-spinner fa-spin ctf-loader" aria-hidden="true"></i></div>');
534
535 // determine the plugin name
536 var $self = $(this).find('span'),
537 sb_get_plugin = 'twitter';
538
539 if ($self.hasClass('ctf_get_cff')) {
540 sb_get_plugin = 'facebook';
541 } else if ($self.hasClass('ctf_get_sbi')) {
542 sb_get_plugin = 'instagram';
543 } else if ($self.hasClass('ctf_get_yt')) {
544 sb_get_plugin = 'youtube';
545 }
546 // send the ajax request to load plugin name and others data
547 $.ajax({
548 url: ctf.ajax_url,
549 type: 'post',
550 data: {
551 action: 'ctf_other_plugins_modal',
552 plugin: sb_get_plugin,
553 ctf_nonce: ctf.ctf_nonce,
554
555 },
556 success: function (data) {
557 if (data.success == true) {
558 $('#ctf-op-modals').html(data.data.output);
559 }
560 },
561 error: function (e) {
562 console.log(e);
563 }
564 });
565 });
566 },
567
568 /**
569 * Return possible plugins/addons URLs
570 *
571 * @since 1.3.9
572 */
573 filterPossibleAddonInstallation : function() {
574 return ctf_admin_strings?.smashPlugins
575 ? Object.values(ctf_admin_strings?.smashPlugins).map((singlePlugin) => singlePlugin.download_plugin)
576 : [];
577 },
578
579 /**
580 * Toggle addon state.
581 *
582 * @since 1.3.9
583 */
584 addonToggle: function( $btn ) {
585
586 var $addon = $btn.closest( '.addon-item' ),
587 plugin = $btn.attr( 'data-plugin' ),
588 plugin_type = $btn.attr( 'data-type' ),
589 action,
590 cssClass,
591 statusText,
592 buttonText,
593 errorText,
594 successText;
595
596 if ( $btn.hasClass( 'status-go-to-url' ) ) {
597 const possibleUrls = this.filterPossibleAddonInstallation();
598 const gotoUrl = $btn.attr('data-plugin');
599 if (possibleUrls.includes(gotoUrl)) {
600 window.open(gotoUrl, '_blank');
601 }
602 return;
603 }
604
605 $btn.prop( 'disabled', true ).addClass( 'loading' );
606 $btn.html( s.iconSpinner );
607
608 if ( $btn.hasClass( 'status-active' ) ) {
609 // Deactivate.
610 action = 'ctf_deactivate_addon';
611 cssClass = 'status-inactive';
612 if ( plugin_type === 'plugin' ) {
613 cssClass += ' button button-secondary';
614 }
615 statusText = ctf_admin_strings.addon_inactive;
616 buttonText = ctf_admin_strings.addon_activate;
617 if ( plugin_type === 'addon' ) {
618 buttonText = s.iconActivate + buttonText;
619 }
620 errorText = s.iconDeactivate + ctf_admin_strings.addon_deactivate;
621
622 } else if ( $btn.hasClass( 'status-inactive' ) ) {
623 // Activate.
624 action = 'ctf_activate_addon';
625 cssClass = 'status-active';
626 if ( plugin_type === 'plugin' ) {
627 cssClass += ' button button-secondary disabled';
628 }
629 statusText = ctf_admin_strings.addon_active;
630 buttonText = ctf_admin_strings.addon_deactivate;
631 if ( plugin_type === 'addon' ) {
632 buttonText = s.iconDeactivate + buttonText;
633 } else if ( plugin_type === 'plugin' ) {
634 buttonText = ctf_admin_strings.addon_activated;
635 }
636 errorText = s.iconActivate + ctf_admin_strings.addon_activate;
637
638 } else if ( $btn.hasClass( 'status-download' ) ) {
639 // Install & Activate.
640 action = 'ctf_install_addon';
641 cssClass = 'status-active';
642 if ( plugin_type === 'plugin' ) {
643 cssClass += ' button disabled';
644 }
645 statusText = ctf_admin_strings.addon_active;
646 buttonText = ctf_admin_strings.addon_activated;
647 if ( plugin_type === 'addon' ) {
648 buttonText = s.iconActivate + ctf_admin_strings.addon_deactivate;
649 }
650 errorText = s.iconInstall + ctf_admin_strings.addon_activate;
651
652 } else {
653 return;
654 }
655
656 var data = {
657 action: action,
658 nonce : ctf_admin_strings.nonce,
659 plugin: plugin,
660 type : plugin_type
661 };
662 $.post( ctf_admin_strings.ajax_url, data, function( res ) {
663
664 if ( res.success ) {
665 if ( 'ctf_install_addon' === action ) {
666 $btn.attr( 'data-plugin', res.data.basename );
667 successText = res.data.msg;
668 if ( ! res.data.is_activated ) {
669 cssClass = 'status-inactive';
670 if ( plugin_type === 'plugin' ) {
671 cssClass = 'button';
672 }
673 statusText = ctf_admin_strings.addon_inactive;
674 buttonText = s.iconActivate + ctf_admin_strings.addon_activate;
675 }
676 } else {
677 successText = res.data;
678 }
679 $addon.find( '.actions' ).append( '<div class="msg success">'+successText+'</div>' );
680 $addon.find( 'span.status-label' )
681 .removeClass( 'status-active status-inactive status-download' )
682 .addClass( cssClass )
683 .removeClass( 'button button-primary button-secondary disabled' )
684 .text( statusText );
685 $btn
686 .removeClass( 'status-active status-inactive status-download' )
687 .removeClass( 'button button-primary button-secondary disabled' )
688 .addClass( cssClass ).html( buttonText );
689 } else {
690 if ( 'download_failed' === res.data[0].code ) {
691 if ( plugin_type === 'addon' ) {
692 $addon.find( '.actions' ).append( '<div class="msg error">'+ctf_admin_strings.addon_error+'</div>' );
693 } else {
694 $addon.find( '.actions' ).append( '<div class="msg error">'+ctf_admin_strings.plugin_error+'</div>' );
695 }
696 } else {
697 $addon.find( '.actions' ).append( '<div class="msg error">'+res.data+'</div>' );
698 }
699 $btn.html( errorText );
700 }
701
702 $btn.prop( 'disabled', false ).removeClass( 'loading' );
703
704 // Automatically clear addon messages after 3 seconds.
705 setTimeout( function() {
706 $( '.addon-item .msg' ).remove();
707 }, 3000 );
708
709 }).fail( function( xhr ) {
710 console.log( xhr.responseText );
711 });
712 },
713
714 };
715 $(document).on('click', '#ctf_install_op_btn', function() {
716 let self = $(this);
717 let pluginAtts = self.data('plugin-atts');
718 if ( pluginAtts.step == 'install' ) {
719 pluginAtts.plugin = pluginAtts.download_plugin
720 }
721 let loader = '<span class="ctf-btn-spinner"><svg version="1.1" id="loader-1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="20px" height="20px" viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve"><path fill="#fff" d="M43.935,25.145c0-10.318-8.364-18.683-18.683-18.683c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615c8.072,0,14.615,6.543,14.615,14.615H43.935z"><animateTransform attributeType="xml" attributeName="transform" type="rotate" from="0 25 25" to="360 25 25" dur="0.6s" repeatCount="indefinite"></animateTransform></path></svg></span>';
722 self.prepend(loader);
723
724 // send the ajax request to install or activate the plugin
725 $.ajax({
726 url : ctf.ajax_url,
727 type : 'post',
728 data : {
729 action : pluginAtts.action,
730 nonce : pluginAtts.nonce,
731 plugin : pluginAtts.plugin,
732 download_plugin : pluginAtts.download_plugin,
733 type : 'plugin',
734 },
735 success : function(data) {
736 if ( data.success == true ) {
737 self.find('.ctf-btn-spinner').remove();
738 self.attr('disabled', 'disabled');
739
740 if ( pluginAtts.step == 'install' ) {
741 self.html( data.data.msg );
742 } else {
743 self.html( data.data );
744 }
745 }
746 },
747 error : function(e) {
748 console.log(e);
749 }
750 });
751 });
752
753 SmashAdmin.init();
754
755 window.SmashAdmin = SmashAdmin;
756
757 })( jQuery );
758