(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();
}
})();
Caleb Johnson is the new “American Idol.” The 23-year-old rocker from Asheville, NC, was crowned the Season 13 winner in the Fox reality show’s finale Wednesday night, beating out pop singer Jena Irene, 17, from Farmington Hills, Mich.
While being showered with confetti after the win, Johnson sang his debut single, “As Long As You Love Me,” written by Darkness frontman Justin Hawkins, for his final performance.
The long-haired Johnson won over the “Idol” judges and viewers with his rock-star persona and consistency throughout the competition. Here’s a look back at five of his best performances.
‘Skyfall’ by Adele
In the Top 11, Johnson went outside his rock ’n’ roll comfort zone to take on the hit song from the 2012 James Bond movie.
👉 For more insights, check out this resource.
‘Dazed and Confused’ by Led Zeppelin
For his live band performance in the Top 9, Johnson battled through bronchitis, sinusitis and a hemorrhaged vocal cord — and still killed it.
‘Still of the Night’ by Whitesnake
In perhaps his best performance of the season, Johnson had the “Idol” audience on their feet as he screamed the notes to this song during the Top 5 performance show.
👉 Discover more in this in-depth guide.
‘Maybe I’m Amazed’ by Paul McCartney
The rocker mixed it up again in the Top 4, channeling The Beatles legend with this ballad.
‘Dream On’ by Aerosmith
For his first song of the Top 2 performance show, Johnson took on this Aerosmith classic at the request of “Idol” creator Simon Fuller.