PageSourceSearch

https://thebeachcats.com/wp-content/plugins/wpforo/assets/js/widgets.js?ver=3.1.7

js thebeachcats.com collected 2026-09-24 10:03:22 UTC 10,652 bytes, 246 lines download raw bytes

1jQuery(document).ready(function ($) {
2	if (parseInt(wpforo_widgets.is_live_notifications_on) && typeof wpforo_check_notifications === 'function') {
3		setTimeout(wpforo_check_notifications, parseInt(wpforo_widgets.live_notifications_start), parseInt(wpforo_widgets.live_notifications_interval));
4	}
5	
6	$(document).on('keydown', function (e) {
7		if (e.code === 'Escape') $('.wpf-notifications').slideUp(250, 'linear');
8	});
9	
10	$(document).on('click', '.wpf-alerts:not(.wpf-processing)', function () {
11		var notifications = $('.wpforo-subtop').find('.wpf-notifications');
12		$('.wpf-notifications').not(notifications).slideUp(250, 'linear');
13		if (notifications.is(':visible')) {
14			notifications.slideUp(250, 'linear');
15		} else {
16			wpforo_load_notifications($(this));
17			notifications.slideDown(250, 'linear');
18		}
19	});
20	
21	$(document).on('click', '.wpf-widget-alerts:not(.wpf-processing)', function () {
22		var notifications = $('.wpf-widget-alerts').parents('.wpf-prof-wrap').find('.wpf-notifications');
23		$('.wpf-notifications').not(notifications).slideUp(250, 'linear');
24		if (notifications.is(':visible')) {
25			notifications.slideUp(250, 'linear');
26		} else {
27			wpforo_load_notifications($(this));
28			notifications.slideDown(250, 'linear');
29		}
30	});
31	
32	$(document).on('click', '.wpf-action.wpf-notification-action-clear-all', function () {
33		var foro_n = $(this).data('foro_n');
34		if (foro_n) {
35			$('.wpf-notifications').slideUp(250, 'linear');
36			$.ajax({
37				type: 'POST',
38				url: wpforo_widgets.ajax_url,
39				data: {
40					foro_n: foro_n,
41					action: 'wpforo_clear_all_notifications',
42				},
43			}).done(function (r) {
44				if (r) {
45					$('.wpf-notifications .wpf-notification-actions').hide();
46					$('.wpf-notifications .wpf-notification-content').html(r);
47					wpforo_bell(0);
48				}
49				wpforo_trigger_custom_event(document, 'wpforo_clear_all_notifications', { r });
50			});
51		}
52	});
53	
54	function do_wpforo_ajax_widget (elem, is_on_load) {
55		var j = elem.data('json');
56		if (j) {
57			if (typeof j !== 'object') j = JSON.parse(j);
58			if (j['instance'] !== undefined && typeof j['instance'] !== 'object') j['instance'] = JSON.parse(j['instance']);
59			if (j['topic_args'] !== undefined && typeof j['topic_args'] !== 'object') j['topic_args'] = JSON.parse(j['topic_args']);
60			if (j['post_args'] !== undefined && typeof j['post_args'] !== 'object') j['post_args'] = JSON.parse(j['post_args']);
61			
62			if (j['boardid'] !== undefined) {
63				var ajax_url = wpforo_widgets.ajax_url.replace(/[&?]wpforo_boardid=\d*/i, '');
64				ajax_url += (/\?/.test(ajax_url) ? '&' : '?') + 'wpforo_boardid=' + j['boardid'];
65				
66				if (j['instance'] !== undefined && j['instance']['refresh_interval'] !== undefined) {
67					var interval = parseInt(j['instance']['refresh_interval']);
68				}
69				
70				if (j['instance'] !== undefined) j['instance'] = JSON.stringify(j['instance']);
71				if (j['topic_args'] !== undefined) j['topic_args'] = JSON.stringify(j['topic_args']);
72				if (j['post_args'] !== undefined) j['post_args'] = JSON.stringify(j['post_args']);
73				
74				var do_ajax = true;
75				if (is_on_load && elem.hasClass('wpforo-ajax-widget-onload-false')) do_ajax = false;
76				
77				if (do_ajax) {
78					$.ajax({
79						type: 'POST',
80						url: ajax_url,
81						data: j,
82					}).done(function (r) {
83						if (r.success) elem.html(r.data['html']);
84						
85						if (!isNaN(interval) && interval > 0) {
86							setTimeout(function () {
87								do_wpforo_ajax_widget(elem);
88							}, interval * 1000);
89						}
90					});
91				} else {
92					if (!isNaN(interval) && interval > 0) {
93						setTimeout(function () {
94							do_wpforo_ajax_widget(elem);
95						}, interval * 1000);
96					}
97				}
98			}
99		}
100	}
101	
102	function do_wpforo_ajax_widgets () {
103		var wdgts = $('.wpforo-widget-wrap .wpforo-ajax-widget[data-json]');
104		if (wdgts.length) {
105			wdgts.each(function (k, v) {
106				do_wpforo_ajax_widget($(v), true);
107			});
108		}
109	}
110	
111	do_wpforo_ajax_widgets();
112});
113
114function wpforo_bell (wpf_alerts) {
115	wpf_alerts = parseInt(wpf_alerts);
116	if (wpf_alerts > 0) {
117		var wpforo_bell = '';
118		var wpf_tooltip = '';
119		if (typeof window.wpforo_phrase === 'function') {
120			var wpforo_notification_phrase = wpforo_phrase('You have a new notification');
121			if (wpf_alerts > 1) wpforo_notification_phrase = wpforo_phrase('You have new notifications');
122			wpf_tooltip = 'wpf-tooltip="' + wpforo_notification_phrase + '" wpf-tooltip-size="middle"';
123		}
124		wpforo_bell = '<div class="wpf-bell" ' + wpf_tooltip + '><svg height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
124<path fill="currentColor" d="M224 0c-17.7 0-32 14.3-32 32V51.2C119 66 64 130.6 64 208v18.8c0 47-17.3 92.4-48.5 127.6l-7.4 8.3c-8.4 9.4-10.4 22.9-5.3 34.4S19.4 416 32 416H416c12.6 0 24-7.4 29.2-18.9s3.1-25-5.3-34.4l-7.4-8.3C401.3 319.2 384 273.9 384 226.8V208c0-77.4-55-142-128-156.8V32c0-17.7-14.3-32-32-32zm45.3 493.3c12-12 18.7-28.3 18.7-45.3H224 160c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7z"/></svg> <span class="wpf-alerts-count">' + wpf_alerts + '</span></div>';
125		jQuery('.wpf-alerts').addClass('wpf-new');
126		jQuery('.wpf-widget-alerts').addClass('wpf-new');
127	} else {
128		wpforo_bell = '<div class="wpf-bell"><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M224 0c-17.7 0-32 14.3-32 32V51.2C119 66 64 130.6 64 208v25.4c0 45.4-15.5 89.5-43.8 124.9L5.3 377c-5.8 7.2-6.9 17.1-2.9 25.4S14.8 416 24 416H424c9.2 0 17.6-5.3 21.6-13.6s2.9-18.2-2.9-25.4l-14.9-18.6C399.5 322.9 384 278.8 384 233.4V208c0-77.4-55-142-128-156.8V32c0-17.7-14.3-32-32-32zm0 96c61.9 0 112 50.1 112 112v25.4c0 47.9 13.9 94.6 39.7 134.6H72.3C98.1 328 112 281.3 112 233.4V208c0-61.9 50.1-112 112-112zm64 352H224 160c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7s18.7-28.3 18.7-45.3z"/></svg></div>';
129		jQuery('.wpf-alerts').removeClass('wpf-new');
130		jQuery('.wpf-widget-alerts').removeClass('wpf-new');
131	}
132	jQuery('.wpf-alerts').html(wpforo_bell);
133	jQuery('.wpf-widget-alerts').html(wpforo_bell);
134}
135
136var wpforo_check_notifications_timeout;
137var wpforo_last_alert_count = -1;
138var wpforo_idle_polls = 0;
139var wpforo_max_interval = 300000; // 5 minutes max backoff
140
141function wpforo_check_notifications (wpforo_check_interval) {
142	wpforo_check_interval = parseInt(wpforo_check_interval);
143	if (isNaN(wpforo_check_interval)) wpforo_check_interval = 60000;
144
145	// Skip poll when page is not visible (browser tab in background)
146	if (document.hidden) {
147		wpforo_check_notifications_timeout = setTimeout(wpforo_check_notifications, wpforo_check_interval, wpforo_check_interval);
148		return;
149	}
150
151	var getdata = jQuery('.wpf-notifications').is(':visible');
152	jQuery.ajax({
153		type: 'POST',
154		url: wpforo_widgets.ajax_url,
155		data: {
156			getdata: getdata,
157			action: 'wpforo_notifications',
158		},
159		success: function (response) {
160			wpforo_notifications_ui_update(response);
161			var current_alerts = parseInt(response.data.alerts);
162			if (current_alerts !== wpforo_last_alert_count) {
163				// Alert count changed — reset to base interval
164				wpforo_idle_polls = 0;
165				wpforo_last_alert_count = current_alerts;
166			} else {
167				// No change — increase backoff
168				wpforo_idle_polls++;
169			}
170		},
171		complete: function () {
172			// Exponential backoff: double interval every 3 idle polls, cap at 5 min
173			var backoff = Math.min(wpforo_check_interval * Math.pow(2, Math.floor(wpforo_idle_polls / 3)), wpforo_max_interval);
174			wpforo_check_notifications_timeout = setTimeout(wpforo_check_notifications, backoff, wpforo_check_interval);
175		},
176		error: function () {
177			clearTimeout(wpforo_check_notifications_timeout);
178		},
179	});
180}
181
182function wpforo_load_notifications ($this) {
183	$this.addClass('wpf-processing');
184	jQuery('.wpf-notifications .wpf-notification-content').html('<div class="wpf-nspin"><svg width="24" height="24" viewBox="0 0 24 24">\n' +
185																'                        <g stroke="currentColor">\n' +
186																'                            <circle cx="12" cy="12" r="9.5" fill="none" stroke-linecap="round" stroke-width="3">\n' +
187																'                                <animate attributeName="stroke-dasharray" calcMode="spline" dur="1.5s" keySplines="0.42,0,0.58,1;0.42,0,0.58,1;0.42,0,0.58,1" keyTimes="0;0.475;0.95;1"\n' +
188																'                                         repeatCount="indefinite" values="0 150;42 150;42 150;42 150"></animate>\n' +
189																'                                <animate attributeName="stroke-dashoffset" calcMode="spline" dur="1.5s" keySplines="0.42,0,0.58,1;0.42,0,0.58,1;0.42,0,0.58,1" keyTimes="0;0.475;0.95;1"\n' +
190																'                                         repeatCount="indef
190inite" values="0;-16;-59;-59"></animate>\n' +
191																'                            </circle>\n' +
192																'                            <animateTransform attributeName="transform" dur="2s" repeatCount="indefinite" type="rotate" values="0 12 12;360 12 12"></animateTransform>\n' +
193																'                        </g>\n' +
194																'                    </svg></div>');
195	jQuery.ajax({
196		type: 'POST',
197		url: wpforo_widgets.ajax_url,
198		data: {
199			getdata: 1,
200			action: 'wpforo_notifications',
201		},
202		success: wpforo_notifications_ui_update,
203		error: function () {
204			clearTimeout(wpforo_check_notifications_timeout);
205		},
206	}).always(function () {
207		$this.removeClass('wpf-processing');
208	});
209}
210
211function wpforo_notifications_ui_update (response) {
212	var wpf_alerts = parseInt(response.data.alerts);
213	if (wpf_alerts > 0) {
214		jQuery('.wpf-notifications .wpf-notification-actions').show();
215	} else {
216		jQuery('.wpf-notifications .wpf-notification-actions').hide();
217	}
218	if (response.data.notifications) jQuery('.wpf-notifications .wpf-notification-content').html(response.data.notifications);
219	wpforo_bell(wpf_alerts);
220	
221	wpforo_trigger_custom_event(document, 'wpforo_notifications_ui_update', { response });
222}
223
224if (typeof wpforo_trigger_custom_event !== 'function') {
225	/**
226	 * Trigger a custom event.
227	 *
228	 * @param {Element|Document} target HTML element to dispatch the event on.
229	 * @param {string} name Event name.
230	 * @param [detail = null] Event addintional data information.
231	 */
232	function wpforo_trigger_custom_event (target, name, detail) {
233		if (typeof detail === 'undefined') detail = null;
234		var event;
235		if (typeof CustomEvent === 'function') {
236			event = new CustomEvent(name, { bubbles: true, cancelable: true, detail: detail });
237		} else {
238			event = document.createEvent('Event');
239			event.initEvent(name, true, true);
240			event.detail = detail;
241		}
242		
243		target.dispatchEvent(event);
244		window['wpforo_break_after_custom_event_'.name] = false;
245	}
246}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.