Masopust ocení milovníci mastného jídla. Vyzkoušejte recept na koblihy a škvarkovou pomazánku

27. 1. 2025

Sdílet

masopust a tradiční masky
Autor: Depositphotos.com
Vánoce skončily, do Velikonoc je daleko. Mezi nimi má však své místo ještě jedno sváteční období, které se oproti zmíněným svátkům drží v ústraní. Přitom se považovalo za nejveselejší období zimy. Těm, kteří stále netuší, prozradíme, že jde o masopust. Ten právě probíhá, a tak si společně připomeneme význam tohoto svátku.

Jde o dobu na pomezí jara a zimy, která předcházela čtyřicetidennímu velikonočnímu půstu. Z toho důvodu se při masopustu dbá na hojnost jídla a pití, zejména se volí masité a tučné pokrmy. Mimoto je tento svátek spjat se zábavou, tancem i zpěvem. Proslulé jsou průvody maškar, které ke konci masopustu prochází obcemi a bývají obdarovávány různými dobrotami. 

Co se dozvíte v článku
  1. Historie a význam masopustu
  2. Masky a jiné zvyky 
  3. Tradiční jídlo o masopustu
  4. Sladké pečivo

Historie a význam masopustu

Masopust je vlastně překladem italského výrazu carnevale. Jde o složeninu, jejíž první část (carne) označuje maso a druhá (valere) se váže k nabytí síly. Lze se setkat i s nářečním pojmenováním fašank, ostatky, končiny, voračky či bláznivé dny, které se vážou k samotnému konci masopustu, eventuálně jeho posledním třem dnům. První písemné zmínky o tomto svátku přitom pocházejí již ze 13. století.

Co se týče trvání masopustu, začíná vždy 7. ledna, tedy den po svátku Tří králů. Jeho konec však není přesně daný, odvíjí se od Velikonoc. Když jsme u Velikonoc, stejně jako mají Velikonoce Zelený čtvrtek, existuje i pojmenování pro poslední čtvrtek masopustu, říká se mu Tučný čtvrtek. 

Pro tento den je typické, že se pořádají zabijačky a různé hostiny, na nichž hraje prim zejména mastné jídlo. To mělo samozřejmě svůj význam, lidem mělo dodat sílu před nadcházejícím postním obdobím. 

Masky a jiné zvyky 

Vrchol masopustu připadá na jeho poslední tři dny, tedy neděli až úterý. V minulosti byli na něj lidé obvykle uvolňováni z práce, aby si mohli dosytosti užít masopustní oslavy. V tuto dobu se pořádaly masopustní obchůzky maškar, při nichž se tančilo, zpívalo a prováděly různé obřadní úkony. Zvykem bylo skákání do výšky, kdy se usilovalo o to doskočit co nejvýše, jelikož měl skok zpodobňovat výšku obilí v daném roce a dotyčnému tak zajistit bohatou úrodu.

Obyčejem bylo maškary u jednotlivých domů obdarovávat, a to například masem, koblihami nebo pálenkou, v současnosti třeba i penězi. Masky si lidé vytvářeli doma sami ze všeho, co bylo po ruce, tedy ze slámy, dřeva, pytloviny atp. Narazit jste při průvodu mohli na medvěda, smrt, kata, žida, rasa a kobylu, hudebníky, nevěstu, Turka či laufra, což jsou tradiční masky masopustu. 

Pro závěr masopustu bylo pak příznačné pochování basy, případně pochování masopustu. Jednalo se o událost konanou zpravidla v noci masopustního úterý, po němž následovala Popeleční středa. Docházelo při ní k „pohřbu“ muzikantské basy, eventuálně masopustu, jenž byl zpodobněn nějakou masopustní maskou či bohem Bacchem jakožto symbolu veselí. Ústřední roli zde hrály postavy faráře a kostelníka pronášející smuteční řeč s častými narážkami na místní.

Koblížku, koblížku, já tě sním! Přečtěte si také:

Koblížku, koblížku, já tě sním!

Tradiční jídlo o masopustu

Masopust představoval dobu, kdy docházelo k nejvíce zabijačkám. Důvod je prostý, díky chladnějšímu počasí vydrželo maso déle čerstvé, navíc si tak lidé mohli doplnit zásobu jídla, která se přes zimu postupně vyčerpávala. Jídelníček si tak zpestřili o klobásu, slaninu či uzené maso, jimiž se pak podarovávaly i maškary. Dále se o masopustu dělávaly škvarky, jitrnice, ovar nebo huspenina. 

Masopustní hostina zahrnovala různě upravené vepřové maso, jako například moravského vrabce, jitrnicový prejt, vepřové rolády či smažené řízky. Zlatým hřebem hostiny bylo vepřo-knedlo-zelo, které se podávalo s pivem, jež pomáhalo s trávením. Součástí bývala také polévka. Jak by se dalo očekávat, připravovala se obvykle zabijačková, jitrnicová či ovarová.

Sladké pečivo

Vyhlášeným masopustním pečivem jsou koblihy. O oblibě toho pečiva svědčí, že v 16. století se masopustu údajně přezdívalo karneval z Koblihovic. Vlivem zabijaček se koblihy smažily převážně na sádle, v menší míře pak na másle a příležitostně i na bukvicovém oleji. 

Na výběr bylo z různých druhů, k dostání byly staročeské koblihy šalvějové, makové, kdoulové či fíkové, nejvíce se však cenily ty řeřichové. Později se koblihy ponejvíce plnily švestkovými povidly. 

Kromě koblih se dále pekly boží milosti. Taktéž jde o smažené pečivo, jež se posléze obaluje v cukru. Sloužilo jako obětní jídlo mající zajistit hospodáři bohatou úrodu. Rovněž se s oblibou dělávaly vdolky a koláče. 

Miletínské modlitbičky, hořické trubičky, olomoucké tvarůžky. Co víte o tradičních českých pochoutkách?

Možná jste je někdy ochutnali, možná je znáte jen podle názvu. Řeč je o tradičních českých potravinách a nápojích. Udělejte si test toho, co všechno o nich víte.

Recept na masopustní koblihy

Ingredience:

  • 500 g hladké mouky,
  • 250 ml mléka,
  • 35 g droždí,
  • 50 g cukru krupice,
  • 50 g másla,
  • 3 žloutky,
  • 3 polévkové lžíce rumu,
  • trocha soli,
  • kůra z citronu,
  • oblíbená marmeláda jako náplň,
  • 1 l oleje na smažení,
  • rum, máslo a moučkový cukr na pomazání hotových koblih.

Postup: 

Do misky vložíme droždí se lžičkou cukru a přísady rozetřeme na kaši. K ní přilijeme polovinu vlažného mléka, přidáme lžíci mouky a vše zamícháme. Misku přikryjeme utěrkou a necháme vzejít kvásek. Mělo by k tomu postačit zhruba 10 minut.

Zatím se v další míse pokusíme rozetřít máslo vařečkou, přisypeme cukr a v úkonu ještě několik minut pokračujeme. Do takto připravené pěny vmícháme žloutky s rumem a přidáme špetku soli a citronovou kůru. 

Tuto směs smícháme s moukou a vzešlým kváskem. Postupně přiléváme zbývající mléko, dokud nám nevznikne hladké těsto. Těsto se nechá zakryté utěrkou na 45 až 90 minut odpočinout

Vykynuté těsto potom vyndáme na pomoučenou plochu a válečkem ho rozválíme, načež z těsta vykrajujeme kolečka. Na jedno se dá marmeláda a poté se na něj položí druhé kolečko. Obě kolečka následně stiskneme prsty k sobě, a to zejména na okrajích. 

Takto připravené koblihy necháme kynout zhruba 20 minut, přičemž po deseti minutách je obrátíme. V hrnci pak dáme rozehřát olej. Oleje musí být tolik, aby v něm mohly koblihy plavat. 

Olej je dostatečně rozehřátý, pokud se těsto po vhození do něj začne okamžitě smažit. Koblihy se následně smaží 2 minuty přikryté a po otočení již odkryté. Po usmažení se pokládají na papírovou utěrku kvůli zachycení přebytečného tuku. Na závěr se potírají rozpuštěným máslem s rumem a posypou moučkovým cukrem. 

Tradiční domácí koblihy se smaží na sádle Přečtěte si také:

Tradiční domácí koblihy se smaží na sádle

Recept na škvarkovou pomazánku

Ingredience:

  • 300 g škvarků,
  • 3 vařená vejce,
  • 3 lžíce plnotučné hořčice,
  • 1 jarní cibulka,
  • sůl a pepř,
  • na zvážení: nakládané okurky a feferonky, česnek.

Postup:

Škvarky můžeme buď celé pomlít, nebo jen jejich většinu a zbytek rozmačkat vidličkou, aby se v pomazánce zvýraznily. Poté je vložíme do misky spolu s pokrájenými či nahrubo nastrouhanými vejci a světlou částí cibulky nakrájenou najemno. Dále se přidá hořčice, sůl, pepř a vše se zamíchá. 

Kdo by chtěl, může ještě dodat nastrouhaný česnek, nadrobno nakrájenou okurku či feferonku. Hotovou pomazánkou se potírají krajíce chleba a vršek škvarkové pomazánky se posype nakrájenou zelenou částí jarní cibulky. 

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).
'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }
OSZAR »