← back to Agent Ad Network
assets/embed.js
63 lines
/* DW Network display-ad embed — one line per site:
<script src="https://ads.agentabrams.com/embed.js"
data-slot="footer-strip|in-grid-card|sidebar-rail"
data-site="silkwallpaper.com" data-context="silk,wallcovering"></script>
Renders a "Sponsored" unit; every ad link is rel="nofollow sponsored" (never leaks
equity / never reads as a link network — see dw-fleet-seo-independent-ranking). */
(function () {
var s = document.currentScript;
if (!s) return;
var slot = (s.getAttribute('data-slot') || 'footer-strip').toLowerCase();
var site = s.getAttribute('data-site') || location.hostname;
var ctx = s.getAttribute('data-context') || '';
var origin = new URL(s.src).origin;
var url = origin + '/serve/display?format=json&slot=' + encodeURIComponent(slot) +
'&site=' + encodeURIComponent(site) + '&context=' + encodeURIComponent(ctx);
fetch(url, { credentials: 'omit' }).then(function (r) { return r.json(); }).then(function (d) {
var ad = d && d.ad;
if (!ad) return; // fail-open: no fill → render nothing
var wrap = document.createElement('div');
wrap.className = 'dwad dwad-' + slot;
var link = '<a href="' + ad.clickUrl + '" target="_blank" rel="nofollow sponsored noopener">' +
'<span class="dwad-h">' + esc(ad.headline) + '</span> ' +
'<span class="dwad-b">' + esc(ad.body) + '</span></a>';
wrap.innerHTML =
'<span class="dwad-label">Sponsored</span>' + link +
'<span class="dwad-by">' + esc(ad.sponsor || '') + '</span>' +
(slot !== 'footer-strip' ? '<button class="dwad-x" aria-label="dismiss">×</button>' : '');
injectStyles(origin);
place(wrap, slot, s);
var x = wrap.querySelector('.dwad-x');
if (x) x.onclick = function () { wrap.remove(); };
}).catch(function () {});
function esc(t) { return String(t == null ? '' : t).replace(/[&<>"]/g, function (c) {
return { '&': '&', '<': '<', '>': '>', '"': '"' }[c]; }); }
function place(wrap, slot, script) {
if (slot === 'in-grid-card') {
// drop where the script tag sits (author places it inside the grid)
script.parentNode.insertBefore(wrap, script.nextSibling);
} else {
document.body.appendChild(wrap); // footer-strip / sidebar-rail = fixed via CSS
}
}
function injectStyles(origin) {
if (document.getElementById('dwad-css')) return;
var css = document.createElement('style'); css.id = 'dwad-css';
css.textContent =
'.dwad{font:13px/1.4 system-ui,sans-serif;color:#222;background:#faf7f0;border:1px solid #e6ddc8;box-sizing:border-box}' +
'.dwad a{color:#8b6914;text-decoration:none}.dwad a:hover{text-decoration:underline}' +
'.dwad-label{font-size:9px;letter-spacing:.08em;text-transform:uppercase;color:#a99;margin-right:8px}' +
'.dwad-h{font-weight:600}.dwad-by{font-size:11px;color:#a99;margin-left:8px}' +
'.dwad-x{border:0;background:none;font-size:16px;color:#a99;cursor:pointer;float:right;line-height:1}' +
'.dwad-footer-strip{position:fixed;left:0;right:0;bottom:0;z-index:9998;padding:8px 16px;text-align:center;box-shadow:0 -1px 6px rgba(0,0,0,.06)}' +
'.dwad-sidebar-rail{position:fixed;right:16px;bottom:16px;z-index:9998;max-width:280px;padding:12px;border-radius:8px;box-shadow:0 4px 14px rgba(0,0,0,.12)}' +
'.dwad-in-grid-card{padding:16px;border-radius:8px;min-height:120px;display:flex;flex-direction:column;justify-content:center}';
document.head.appendChild(css);
}
})();