PluginProbe ʕ •ᴥ•ʔ
Download Manager / 3.3.65
Download Manager v3.3.65
3.3.66 3.3.65 3.3.64 3.3.63 3.3.62 3.3.61 3.3.60 3.3.59 3.3.58 3.3.57 3.3.56 trunk 2.1.3 2.3.0 2.5.96 2.5.97 2.6.2 2.6.96 2.8.3 2.9.99 3.0.4 3.1.05 3.1.07 3.1.08 3.1.11 3.1.12 3.1.14 3.1.17 3.1.18 3.1.22 3.1.23 3.1.24 3.1.25 3.1.26 3.1.27 3.1.28 3.2.04 3.2.13 3.2.14 3.2.16 3.2.18 3.2.19 3.2.21 3.2.22 3.2.23 3.2.24 3.2.25 3.2.27 3.2.28 3.2.29 3.2.30 3.2.31 3.2.32 3.2.33 3.2.34 3.2.35 3.2.37 3.2.38 3.2.39 3.2.40 3.2.41 3.2.42 3.2.43 3.2.44 3.2.45 3.2.46 3.2.47 3.2.48 3.2.49 3.2.50 3.2.51 3.2.52 3.2.53 3.2.54 3.2.55 3.2.56 3.2.57 3.2.58 3.2.59 3.2.60 3.2.61 3.2.63 3.2.64 3.2.65 3.2.66 3.2.67 3.2.68 3.2.69 3.2.70 3.2.71 3.2.72 3.2.73 3.2.74 3.2.75 3.2.76 3.2.77 3.2.78 3.2.79 3.2.80 3.2.81 3.2.82 3.2.83 3.2.84 3.2.85 3.2.86 3.2.87 3.2.88 3.2.89 3.2.90 3.2.91 3.2.92 3.2.93 3.2.94 3.2.95 3.2.96 3.2.97 3.2.98 3.2.99 3.3.00 3.3.01 3.3.02 3.3.03 3.3.04 3.3.05 3.3.06 3.3.07 3.3.08 3.3.09 3.3.10 3.3.11 3.3.12 3.3.13 3.3.14 3.3.15 3.3.16 3.3.17 3.3.18 3.3.19 3.3.20 3.3.21 3.3.22 3.3.23 3.3.24 3.3.25 3.3.26 3.3.27 3.3.28 3.3.29 3.3.30 3.3.31 3.3.32 3.3.33 3.3.34 3.3.35 3.3.36 3.3.37 3.3.38 3.3.39 3.3.40 3.3.41 3.3.42 3.3.43 3.3.44 3.3.45 3.3.46 3.3.47 3.3.48 3.3.49 3.3.50 3.3.51 3.3.52 3.3.53 3.3.54 3.3.55
download-manager / assets / js / blocker.js
download-manager / assets / js Last commit date
ads 8 months ago control 8 months ago img 10 years ago blocker.js 2 weeks ago blocker.min.js 2 weeks ago embed.js 5 years ago embed.min.js 7 months ago front.js 1 week ago front.min.js 1 week ago jquery-ui-timepicker-addon.js 10 years ago jquery-ui-timepicker-addon.min.js 7 months ago jquery.dataTables.min.js 1 year ago jquery.validate.js 7 months ago jquery.validate.min.js 2 weeks ago jqueryFileTree.js 5 years ago jqueryFileTree.min.js 7 months ago overwatch.js 7 months ago overwatch.min.js 7 months ago password-strength.js 2 years ago password-strength.min.js 7 months ago simple-scrollbar.js 7 months ago simple-scrollbar.min.js 7 months ago simplebar.js 6 years ago validator.min.js 9 years ago vue.js 9 months ago vue.min.js 9 months ago wpdm-admin.js 2 weeks ago wpdm-admin.min.js 2 weeks ago wpdm.js 6 months ago wpdm.min.js 6 months ago
blocker.js
120 lines
1 async function detectAdblock({ timeoutMs = 2500 } = {}) {
2 // 0) Optional: neutral bait that your CSS won't hide by accident
3 ensureBait();
4
5 // 1) Control: should NEVER be blocked
6 const controlOk = await loadScript(wpdm_url.site+'wp-content/plugins/download-manager/assets/js/control/ping.js', timeoutMs);
7
8 // 2) Decoy: LIKELY to be blocked by ad-block lists
9 const decoyOk = await loadScript(wpdm_url.site+'wp-content/plugins/download-manager/assets/js/ads/adserver.js', timeoutMs);
10
11 // 3) Bait: if your styles/extensions hide ad-like selectors
12 const baitHidden = isBaitHidden();
13
14 // Decide:
15 // - If control fails, environment is flaky/CSP — don't claim adblock.
16 // - If control passes AND decoy fails -> likely adblock.
17 // - BaitHidden is a weak signal, used only to strengthen confidence.
18 const likelyAdblock = controlOk && !decoyOk;
19 return {
20 isAdblock: likelyAdblock || (likelyAdblock && baitHidden),
21 details: { controlOk, decoyOk, baitHidden }
22 };
23 }
24
25 function loadScript(src, timeoutMs) {
26 return new Promise((resolve) => {
27 const s = document.createElement('script');
28 s.src = src + (src.includes('?') ? '&' : '?') + 'v=' + Date.now();
29 s.async = true;
30
31 let settled = false;
32 const done = (ok) => { if (!settled) { settled = true; resolve(ok); } };
33
34 const timer = setTimeout(() => done(false), timeoutMs);
35 s.onload = () => { clearTimeout(timer); done(true); };
36 s.onerror = () => { clearTimeout(timer); done(false); };
37
38 // If a blocker removes the element outright, we still have the timeout fallback
39 document.head.appendChild(s);
40 });
41 }
42
43 function ensureBait() {
44 if (document.getElementById('__ad_bait__')) return;
45 const bait = document.createElement('div');
46 bait.id = '__ad_bait__';
47 bait.className = 'ads ad ad-banner adsbox ad-wrapper';
48 Object.assign(bait.style, {
49 position: 'absolute',
50 left: '-9999px',
51 top: '-9999px',
52 width: '1px',
53 height: '1px',
54 pointerEvents: 'none'
55 });
56 document.body.appendChild(bait);
57 }
58
59 function isBaitHidden() {
60 const el = document.getElementById('__ad_bait__');
61 if (!el) return false;
62 const cs = getComputedStyle(el);
63 const hidden =
64 el.offsetParent === null ||
65 cs.display === 'none' ||
66 cs.visibility === 'hidden' ||
67 parseInt(cs.height, 10) === 0 ||
68 parseInt(cs.width, 10) === 0 ||
69 cs.opacity === '0';
70 return hidden;
71 }
72
73 // Example usage:
74
75 jQuery(function($) {
76
77 detectAdblock().then(({ isAdblock, details }) => {
78 console.log('Adblock?', isAdblock, details);
79 if (isAdblock) {
80 const body = $('body');
81
82 // Remove from existing elements
83 $('.wpdm-download-link.download-on-click').removeAttr('data-downloadurl');
84
85 // Handle click on dynamic elements via delegation
86 body.on('click', '.wpdm-download-link.download-on-click', function (e) {
87 $(this).removeAttr('data-downloadurl');
88 WPDM.bootAlert("Ad blocker detected", abmsg);
89 return false;
90 });
91
92 // MutationObserver to handle dynamically added elements
93 const observer = new MutationObserver(function(mutations) {
94 mutations.forEach(function(mutation) {
95 mutation.addedNodes.forEach(function(node) {
96 if (node.nodeType === 1) { // Element node
97 // Check if the added node itself matches
98 if ($(node).hasClass('wpdm-download-link') && $(node).hasClass('download-on-click')) {
99 $(node).removeAttr('data-downloadurl');
100 }
101 // Check descendants of the added node
102 $(node).find('.wpdm-download-link.download-on-click').removeAttr('data-downloadurl');
103 }
104 });
105 });
106 });
107
108 observer.observe(document.body, {
109 childList: true,
110 subtree: true
111 });
112
113 if( abmsgd === "site" || ( abmsgd === "package" && iswpdmpropage ))
114 WPDM.bootAlert("Ad blocker detected", abmsg)
115 }
116 });
117
118 });
119
120