Budeme baštit polské borůvky? Už to děláme

10. 7. 2015

Sdílet

Polsko chce Evropany přimět k vyšší konzumaci bobulovin, rozjíždí drahou kampaň a vyzdvihuje jejich zdravotní benefity.

To, že konzumujeme obecně málo ovoce, je známý fakt a lékaři i výživoví poradci stále dokola připomínají, že bychom ho do našich jídelníčků měli zařadit mnohem víc. Naši polští sousedé teď záběr zúžili na bobulovité plody, jehož jsou významnými producenty, a chtějí obyvatelstvo nalákat k vyššímu podílu borůvek, jahod či malin ve stravě. Sdružení polských pěstitelů ovoce rozjelo informační a promo kampaň Síla ovoce s podtitulem „neobyčejné vlastnosti obyčejného ovoce“ a chtějí sílu a mimořádné kvality bobulovitých plodů opřené o bohatý zdroj minerálů a vitaminů prezentovat nejen na vlastním, ale také českém, rakouském, švédském a finském trhu.

Polsko – lídr Evropy

Není divu, že s programem přišli právě oni, Polsko patří v rámci Evropské unie k lídrům mezi producenty jahod, malin, borůvek a černého rybízu, zároveň je významným hráčem na světovém trhu, a jeho podíl stále roste. Jen co se týče borůvek, Polsko si nemůže zadat v objemu se Severní Amerikou – více také v článku: Za borůvkovou rodinu vlastně mohou komunisté.

V roce 2013 dosáhla celosvětová produkce „berries“ přes jedenáct milionů tun ovoce a z toho více než čtvrtina byla vypěstována na evropském kontinentu, zejména na území členských států EU. „Za více než čtyřicet let si produkce bobulovin získala důležité místo v ekonomice země. Průměrná roční produkce dosahuje objemu kolem půl milionu tun, což je patnáct procent z celkové produkce ovoce v zemi. Nejméně tři sta tisíc polských farem je zapojeno do komerčního pěstování bobulového ovoce, další se věnují jeho zpracování. Celkem tak dává bobulový průmysl práci na třiadvaceti tisícům lidí,“ stojí v popisu kampaně Power fruits.

Během posledních let si Polsko vydobylo post vedoucího producenta černého rybízu a malin v Evropské unii, stejně jako je významným článkem v odvětví jahod a borůvek. Celková plocha plantáží pro tyto druhy ovoce činí u našich severovýchodních sousedů sto dvacet pět tisíc hektarů – tj. třicet jedna procent z veškeré produkce ovoce v Polsku. Za posledních pět let činil celkový vývoz čerstvého bobulového ovoce do jiných zemí EU dvě stě dvacet pět tisíc tun v hodnotě dvě stě čtyřicet milionů eur.

Polsku nahrávají dobré klimatické i ekonomické podmínky a vysoký potenciál tamních plantáží a farem. Pro zemi je tak důležitá zvýšená poptávka po čerstvém i zpracovaném bobulovém ovoci na evropských trzích.

Data o „berries“

  • Většinu evropské produkce tvoří jahody (asi 65 %), na druhém místě jsou ostružiny (17 %) a na třetím maliny (10 %). Borůvky zastupují jen 3 % produkce bobulovitého ovoce.
  • V roce 2013 činila světová produkce jahod více než 7 milionů tun, téměř polovina z nich se pěstuje v Asii. Na Evropu připadá necelých 20 % s tím, že největšími producenty jsou Španělé, hned po nich je Polsko. V rámci bobulovin je i v Polsku také nejvíce jahod.
  • Celosvětová produkce malin dosahovala před dvěma lety 578 tisíc tun, tři čtvrtiny z nich byly vypěstovány v Evropě. Lídrem v produkci malin je Polsko, kam spadá asi 20 % celosvětové produkce, což činí přibližně 121 tisíc tun.
  • Většina produkce (86 %) kanadských borůvek připadá na Severní a Jižní Ameriku, jak již název napovídá, právě z tohoto kontinentu totiž pocházejí. Před dvěma lety dosahovala evropská produkce 13 % s tím, že stále roste. Jde zhruba o 56 tisíc tun borůvek.
  • Nejvíce kanadských borůvek se v rámci Evropy vypěstuje v Polsku, každý rok kolem 12 tisíc tun, to je asi o 2 tisíce tun víc než v Německu.
  • Prakticky celou produkci černého rybízu zaujímá euroasijský kontinent (98 %). Rusko coby největší producent černého rybízu na světě ročně vypěstuje na 373 tisíc tun.
  • Druhým největším producentem černého rybízu na světě a první v Evropě je Polsko. Statistiky uvádějí 197 tisíc tun tohoto ovoce ročně.

Zdraví a chuť na prvním místě

Hlavním cílem kampaně Síla ovoce je proto podpora spotřeby ovoce a zdravé výživy. Ať už na kongresu, který se uskutečnil k zahájení projektu v polovině června nedaleko od Varšavy, vystoupil kdokoliv, všichni se shodli na tom, že konzumace „berries“ je v Evropě tristní a je potřeba ji navýšit. Spotřeba jahod, malin, černého rybízu a borůvek má během tříletého trvání programu vzrůst o osm procent, stejně jako povědomí o vlastnostech evropských bobulí. V průměru sníme osmdesát kilogramů ovoce na obyvatele za rok. Pokud se podíváme právě na bobuloviny, zatímco Kanaďané a Američané jich měsíčně sní jeden kilogram, v Evropě to je zhruba o tři sta gramů méně.

Nejde jen o to, že produkce tohoto ovoce je důležitým prvkem evropských ekonomik, polští pěstitelé vyzdvihují především nutriční benefity bobulovitého ovoce, jednoduchost konzumace i široké spektrum využití v kuchyni. „Chceme, aby lidé jedli více bobulovitého ovoce, ne kvůli penězům, ale protože je chutné a zdravé,“ nechala se slyšet Dominika Kozarzewska, prezidentka sdružení pěstitelů Polskie Jagody. „Nutno říct, že nejsme jen producenti, zajímáme se i o to, jakým způsobem je ovoce pěstováno. Ať už jde o menší či velké firmy v zemi a ty, které tu jsou po generace,“ dodává.

Nejedná se přitom jen o čerstvé plody, ale i o výrobky z nich či mražené ovoce a netýká se to jen tradiční sezóny, mnohde plantáže zakrývají folií, která slouží i jako ochrana proti dešti a horku, a mohou tak zajišťovat bobule až do podzimu.

Polští pěstitelé rovněž touží zbořit mýtus, který v některých zemích Evropy panuje, že by jejich ovoce bylo méně kvalitní než jiné. Chtějí tak trochu pozměnit koláč, který ukazuje, že šestačtyřicet procent polských jahod míří do Ruska a po čtrnácti procentech do Běloruska a Německa.

Bobule + tvaroh = ideální kombinace vitamínů a bílkovin

V případě jahod, borůvek, malin či černého rybízu hovoří polští pěstitelé o superovoci nebo o ovoci budoucnosti.

Tato slova potvrzuje také Jakub Podaný, poradce v oblasti sportovní výživy. „Obrovským přínosem tohoto ovoce je obsah antioxidantů. Čím výraznější je tmavé zbarvení, tím větší je obsah zmiňovaných látek. Navíc se povětšinou pěstují za přítomnosti sluníčka,“ říká. Bobulové ovoce doporučuje kombinovat zejména s tvarohem, díky čemuž získáme ideální kombinaci vitamínů a bílkovin. Samozřejmě, že se dá konzumovat i samotné. „Když si každý den dáte tvaroh s hrstkou bobulovitého ovoce, vaše tělo vám bude vděčné,“ podotýká Jakub Podaný.

Borůvky, černý rybíz, maliny i jahody jsou bohaté na vitamín C, borůvky mají vysoký obsah antioxidantů. Maliny se vedle přítomnosti „céčka“ mohou pyšnit i pozoruhodným obsahem železa a organických kyselin.

Borůvky

  • Obsahují množství vitamínů, včetně vitamínu C, A, B1, B2, a PP. Rovněž jsou bohatým zdrojem železa, fosforu a vápníku. Ovoce obsahuje mnoho pektinů a je charakterizováno nízkou energetickou hodnotou.

Černý rybíz

  • Černý rybíz je bohatý na vitamíny, zejména vitamín B1, B2, niacin, beta-karoten a co je nejdůležitější, vitamín C. 100 gramů černého rybízu obsahuje 87 až 219 miligramů vitamínu C. Navíc tyto plody obsahují minerální makroživiny jako je vápník a hořčík a stopové prvky jako je železo, zinek, měď a mangan.

Jahody

  • Jahody jsou dobrým zdrojem vitamínu C. Každých 100 gramů čerstvého ovoce obsahuje 23,8 až 90,1 mg kyseliny askorbové, což znamená, že každých snědených 100 gramů jahod splňuje doporučenou denní dávku „céčka“ na 30 až 112 procent. Jahody jsou rovněž jedním z nejbohatších zdrojů kyseliny listové. Kromě toho obsahují mikroživiny jako je železo a zinek, jakožto také mangan a měď.

Maliny

  • Maliny obsahují organické kyseliny jako je kyselina askorbová, kyselina citrónová, kyselina jablečná a salicylové kyseliny, stejně jako pektiny, anthokyany a vlákninu. Jsou bohaté na vitamíny včetně C, E, K, PP a B-vitamínů. Kromě toho maliny obsahují množství minerálních složek jako je draslík, hořčík, vápník a železo.

Vedle antioxidantů a vitamínů konzumenty potěší i nízká kalorická hodnota. Pěstitelé nicméně připomněli, že byť je bobulovité ovoce velmi zdravé, je dobré jeho zdravotní přínosy podpořit ještě pohybem. Většina bobulovin je přívětivá i pro děti. „Plody stačí umýt a můžete je rovnou jíst, odpadá velké čištění a krájení,“ říká Dominika Kozarzewska.

Bobule mají rovněž široké využití v kuchyni, lze je použít do koláčů, na palačinky, do jogurtu, na koktejly, ale můžete je přidat i do salátu nebo si z nich udělat čatní či džem. Potěší i absence alergenů.

Celkový rozpočet tříleté kampaně Síla ovoce (www.power-fruits.eu/cz/) je téměř čtyři miliony eur, přičemž polovinu financuje Evropská unie, třicet procent jde z polského státního rozpočtu a zbytek bude uhrazen z fondu na podporu ovoce a zeleniny v Polsku.

Recepty s bobulemi

Palačinky s malinami, borůvkami a černým rybízem

Na náplň:

  • 150 g jahod
  • 150 g borůvek
  • černý rybíz k dekoraci
  • 500 g krémového sýra
  • 5 lžic cukru
  • 1 vaječný žloutek
  • 2 lžíce smetany
  • moučkový cukr

Na palačinky:

  • 1 šálek mléka
  • 1 šálek vlažné vody
  • 2 šálky mouky
  • 1 vejce
  • špetka soli
  • 3 lžíce oleje

Smíchejte mléko, mouku, vejce a sůl do hladka. Přidejte vodu a olej a pokračujte v míchání. Rozehřejte lehce olejem potřenou pánev, rozprostřete v ní tenkou vrstvu těsta a pečte do světle hněda po obou stranách, mělo by se vám podařit 8 až 10 kousků.

Na náplň dobře promíchejte smetanový sýr, cukr a žloutek. Horkou palačinku potřete krémem, přidejte nakrájené jahody a borůvky a srolujte. Posypte moučkovým cukrem, ozdobte černým rybízem a můžete podávat.

Zmrzlinový koktejl s bobulemi

  • 1 sklenice různých bobulí (jahody, maliny, rybíz a borůvky)
  • 200 ml bílého jogurtu
  • 200 ml mléka
  • 2 polévkové lžíce cukru
  • vanilková nebo čokoládová zmrzlina

Očistěte a omyjte ovoce. Přidejte jogurt, mléko a cukr a rozmixujte do hladka. Nalijte do sklenic a do každé přidejte kopeček zmrzliny. Zdobte čerstvým ovocem.

Dort s ovocem

  • 3 šálky mouky
  • 1,5 šálku cukru
  • 16 lžic oleje
  • 8 lžic vody
  • 4 vejce
  • 1 lžička prášku do pečiva
  • 1 kg bobulí (borůvky, jahody, maliny a černý rybíz)
  • 1 tabulka čokolády

Ušlehejte vejce s cukrem do hladka. Postupně přidávejte mouku a prášek do pečiva, míchejte. Za stálého míchání přilijte vodu, olej až na konec.

Vyložte plech pečicím papírem a nalijte na něj těsto, pak posypejte ovocem. Pečte cca 50 minut při 180 stupních. Vychlazený dort pocákejte rozpuštěnou čokoládou a dozdobte čerstvými plody.

Autor článku

Psaní se věnuje už od střední školy. Jako redaktorka pracovala v regionálních přílohách MF DNES Praha a střední Čechy. Nyní je na volné noze.

'; 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 »