(function () {
// 1) Basic bot filter (extend if you like)
function isBot() {
return /(bot|crawl|spider|google|bing|slurp|yandex|facebook|linkedin|pinterest|preview|whatsapp|discord|telegram|headless|puppeteer)/i
.test(navigator.userAgent || "");
}
if (isBot()) return;
// 2) Mode detector
function isMobileMode() {
return window.matchMedia("(max-width: 767px)").matches ||
/Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent || "");
}
// 3) Your ad configs (swap keys/sizes to match your network units)
const AD = {
mobile: { key: "aa6d52a6037d0558c2a19dc52b6aa824", width: 320, height: 50 }, // 320x50
desktop: { key: "a49752dcde88f4fde5987d25efbb7168", width: 468, height: 60 } // 468x60
};
// 4) Create container if it doesn't exist
function ensureContainer() {
let container = document.getElementById("ad-container");
if (!container) {
container = document.createElement("div");
container.id = "ad-container";
container.style.display = "none";
document.body.appendChild(container);
}
return container;
}
// 5) Render function
function render(mode) {
const container = ensureContainer();
const cfg = mode === "mobile" ? AD.mobile : AD.desktop;
// Set global atOptions for ad network
window.atOptions = {
key: cfg.key,
format: "iframe",
height: cfg.height,
width: cfg.width,
params: {}
};
// Clear previous ad/script then inject
container.innerHTML = "";
container.style.display = "block";
const s = document.createElement("script");
s.src = `//selfportraitproved.com/${cfg.key}/invoke.js`;
s.async = true;
container.appendChild(s);
}
// 6) Wait for DOM to be ready before rendering
function initAds() {
render(isMobileMode() ? "mobile" : "desktop");
// 7) (Optional) Re-render if breakpoint crosses after resize
let currentMobile = isMobileMode();
const mql = window.matchMedia("(max-width: 767px)");
if (mql.addEventListener) {
mql.addEventListener("change", (e) => {
const nowMobile = e.matches;
if (nowMobile !== currentMobile) {
currentMobile = nowMobile;
render(currentMobile ? "mobile" : "desktop");
}
});
} else if (mql.addListener) { // older browsers
mql.addListener((e) => {
const nowMobile = e.matches;
if (nowMobile !== currentMobile) {
currentMobile = nowMobile;
render(currentMobile ? "mobile" : "desktop");
}
});
}
}
// 8) Execute when DOM is ready
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initAds);
} else {
initAds();
}
})();
• | An instrument composed of bristles, or other like material, set in a suitable back or handle, as of wood, bone, or ivory, and used for various purposes, as in removing dust from clothes, laying on colors, etc. Brushes have different shapes and names according to their use; as, clothes brush, paint brush, tooth brush, etc. |
• | The bushy tail of a fox. |
• | A tuft of hair on the mandibles. |
• | Branches of trees lopped off; brushwood. |
• | A thicket of shrubs or small trees; the shrubs and small trees in a wood; underbrush. |
• | A bundle of flexible wires or thin plates of metal, used to conduct an electrical current to or from the commutator of a dynamo, electric motor, or similar apparatus. |
• | The act of brushing; as, to give one's clothes a brush; a rubbing or grazing with a quick motion; a light touch; as, we got a brush from the wheel as it passed. |
• | A skirmish; a slight encounter; a shock or collision; as, to have a brush with an enemy. |
• | A short contest, or trial, of speed. |
• | To apply a brush to, according to its particular use; to rub, smooth, clean, paint, etc., with a brush. |
• | To touch in passing, or to pass lightly over, as with a brush. |
• | To remove or gather by brushing, or by an act like that of brushing, or by passing lightly over, as wind; -- commonly with off. |
• | To move nimbly in haste; to move so lightly as scarcely to be perceived; as, to brush by. |