wp-liveticker/scripts/wp-liveticker2.js

97 lines
2.4 KiB
JavaScript

function WPLT2() {
}
/**
* Initialize WP-Liveticker 2 JS component.
*/
WPLT2.init = function () {
// Get ticker elements
WPLT2.ticker = jQuery("ul.wplt2-ticker-ajax").map(function () {
return {s: jQuery(this).data('wplt2Ticker'), e: this};
});
WPLT2.widgets = jQuery("ul.wplt2-widget-ajax").map(function () {
return {s: jQuery(this).data('wplt2Ticker'), e: this};
});
// Extract AJAX settings.
WPLT2.ajaxURL = ajax_object.ajax_url;
WPLT2.nonce = ajax_object.nonce;
WPLT2.pollInterval = ajax_object.poll_interval;
// Trigger update, if necessary.
if ((WPLT2.ticker.length > 0 || WPLT2.widgets.length) && WPLT2.pollInterval > 0) {
setTimeout(WPLT2.update, WPLT2.pollInterval);
}
};
/**
* Update liveticker on current page via AJAX call.
*/
WPLT2.update = function () {
// Extract ticker-slug, limit and timestamp of last poll.
const updateReq = jQuery.merge(
jQuery.map(WPLT2.ticker, function (e, i) {
return {s: e.s, l: jQuery(e.e).data('wplt2Limit'), t: jQuery(e.e).data('wplt2Last')};
}),
jQuery.map(WPLT2.widgets, function (e, i) {
return {w: e.s, l: jQuery(e.e).data('wplt2Limit'), t: jQuery(e.e).data('wplt2Last')};
})
);
// Issue AJAX request.
jQuery.post(
WPLT2.ajaxURL,
{
'action' : 'wplt2_update-ticks',
'_ajax_nonce': WPLT2.nonce,
'update' : updateReq
},
function (res) {
try {
const update = JSON.parse(res);
if (update) {
jQuery.each(update, function (i, u) {
jQuery.each(WPLT2.ticker, function (j, t) {
if (t.s === u.s) {
WPLT2.updateHTML(t.e, u.h, u.t);
}
});
jQuery.each(WPLT2.widgets, function (j, t) {
if (t.s === u.w) {
WPLT2.updateHTML(t.e, u.h, u.t);
}
});
});
}
// Re-trigger update.
setTimeout(WPLT2.update, WPLT2.pollInterval);
} catch (e) {
console.warn('WP-Liveticker 2 AJAX update failed, stopping automatic updates.')
}
}
);
};
/**
* Do actual update of HTML code.
*
* @param e The element.
* @param h The new HTML code.
* @param t Timestamp of update.
*/
WPLT2.updateHTML = function(e, h, t) {
// Prepend HTML of new ticks.
jQuery(e).prepend(h);
// Remove tail, if limit is set.
const l = jQuery(e).data('wplt2Limit');
if (l > 0) {
jQuery(e).find('li').slice(l).remove();
}
// Update last poll timestamp.
jQuery(e).data('wplt2Last', t);
};
jQuery(document).ready(function ($) {
// Trigger periodic update of livetickers.
WPLT2.init();
});