/**
*
* Credits
*
* Plugin-Name: Akismet Anti-Spam
* Plugin-URI: https://akismet.com/
* Author: Automattic
* Author URI: https://automattic.com/wordpress-plugins/
* License: GPLv2 or later
* Text Domain: akismet
*
*/
jQuery(function($) {
/**
* Init site preview function.
*/
window.mainwp_preview_init_event = function () {
let mshotRemovalTimer = null;
let mshotSecondTryTimer = null
let mshotThirdTryTimer = null
let mshotEnabledLinkSelector = 'td span.mainwp-preview-item';
// Show a preview image of the hovered URL.
$('.mainwp-with-preview-table').on('click', mshotEnabledLinkSelector, function () {
clearTimeout(mshotRemovalTimer);
if ($('.mainwp-preview-mshot').length > 0) {
if ($('.mainwp-preview-mshot:first').data('link') == this) {
// The preview is already showing for this link.
return;
}
else {
// A new link is being hovered, so remove the old preview.
$('.mainwp-preview-mshot').remove();
}
}
clearTimeout(mshotSecondTryTimer);
clearTimeout(mshotThirdTryTimer);
let thisHref = $(this).attr('preview-site-url');
let mShot = $('
 + ')
');
mShot.data('link', this);
let offset = $(this).offset();
mShot.offset({
left: Math.min($(window).width() - 475, offset.left + $(this).width() + 10), // Keep it on the screen if the link is near the edge of the window.
top: offset.top + ($(this).height() / 2) - 101 // 101 = top offset of the arrow plus the top border thickness
});
// These retries appear to be superfluous if .mshot-image has already loaded, but it's because mShots
// can return a "Generating thumbnail..." image if it doesn't have a thumbnail ready, so we need
// to retry to see if we can get the newly generated thumbnail.
mshotSecondTryTimer = setTimeout(function () {
mShot.find('.mshot-image').attr('src', mainwp_preview_mshot_url(thisHref, 2));
}, 6000);
mshotThirdTryTimer = setTimeout(function () {
mShot.find('.mshot-image').attr('src', mainwp_preview_mshot_url(thisHref, 3));
}, 12000);
$('body').append(mShot);
}).on('mouseover', 'tr', function () {
// When the mouse hovers over a row, begin preloading mshots for links.
let linksToPreloadMshotsFor = $(this).find(mshotEnabledLinkSelector);
linksToPreloadMshotsFor.each(function () {
// Don't attempt to preload an mshot for a single link twice. Browser caching should cover this, but in case of
// race conditions, save a flag locally when we've begun trying to preload one.
if (!$(this).data('mainwp-preview-mshot-preloaded')) {
mainwp_preview_preload_mshot($(this).attr('preview-site-url'));
$(this).data('mainwp-preview-mshot-preloaded', true);
}
});
});
$(document).on('mouseup', function () {
if ($('.mainwp-preview-mshot').length > 0) {
mshotRemovalTimer = setTimeout(function () {
clearTimeout(mshotSecondTryTimer);
clearTimeout(mshotThirdTryTimer);
$('.mainwp-preview-mshot').remove();
}, 100);
}
});
};
// init preview.
mainwp_preview_init_event();
/**
* Generate an mShot URL if given a link URL.
*
* @param string linkUrl
* @param int retry If retrying a request, the number of the retry.
* @return string The mShot URL;
*/
function mainwp_preview_mshot_url(linkUrl, retry) {
let mshotUrl = '//s0.wp.com/mshots/v1/' + encodeURIComponent(linkUrl) + '?w=900';
if (retry) {
mshotUrl += '&r=' + encodeURIComponent(retry);
}
return mshotUrl;
}
/**
* Begin loading an mShot preview of a link.
*
* @param string linkUrl
*/
function mainwp_preview_preload_mshot(linkUrl) {
let img = new Image();
img.src = mainwp_preview_mshot_url(linkUrl);
}
});