Asijskou kuchyni v českém čínském bistru neochutnáte. Ani náhodou

Sdílet

Autor: Isifa.cz
Pokud na dovolenou vyrážíte dál než na chatu na Šumavě, pak vám přijdou vhod rady delegátky, která procestovala kus světa. Poví nám, jak se stoluje, jí a pije v Číně, Indii a Vietnamu.

Prázdniny ještě stále neřekly své sbohem, takže směle můžeme vyrazit za dobrodružstvím i poznáváním nových zemí, potažmo kultury i jídelníčku dálných krajin. Pokud svá čtyři kola nasměrujeme kamkoliv po Evropě, asi nebudeme výrazně překvapeni tamní sestavou klasického menu. Itálie je spjata se špagetami a pizzou, Francie se sýry a olivami, Maďarsko zas s ohnivým gulášem.

K tématu: Nejlepší suvenýr z dovolené: dobré jídlo. Co si odkud přivézt?

Jak jsou na tom ale země, které většina z nás zná jen z dokumentárních filmů a encyklopedií? Zeptali jsme se Lenky PetrášovéChina Tours, která procestovala Čínu, Írán, Vietnam, Srí Lanku a také Indii, kterou „křižovala“ sama dva měsíce. Jak se stoluje v asijských zemích, na co si dát pozor při stravování „na ulici“ a co na Dálném východě rozhodně musíte ochutnat? To a mnohem víc se dozvíte na dalších řádcích, kde odkryjeme taje indické, čínské a vietnamské kuchyně.

Čínská nudlová polévka, jakou v českém čínském bistru asi nedostanete
Autor: Isifa.cz

Čínská nudlová polévka jakou v českém čínském bistru asi nedostanete

Indické stolování bez stolu

Indické stolování vlastně se stolem příliš nesouvisí. Tento kus nábytku totiž do Indie doputoval poměrně nedávno a i dnes je běžné, že lidé jedí na zemi nebo zkrátka tam, kde to zrovna jde. „Mnoho Indů se stravuje vegetariánsky, a tak mají bezmasá jídla nezastupitelnou roli ve zdejší kuchyni. Ta je známá svou pikantností, to ale není vše. Indie je tak velká země, že se nelze omezit jen na zjednodušené pojetí o pálivosti indických jídel. Je ale pravda, že mnoho z nás si na lecjaké pokrmy raději ani netroufne. To se týká především severní Indie, oproti tomu jižní Indie nebo Kašmír a další ´podhimalajské´ regiony jsou úplně jiné a jídla tu zdaleka nejsou tak pálivá,“ říká Lenka Petrášová.

Ve zlatém trojúhelníku – nejoblíbenější oblasti Dillí, Ágra, Džajpur najdete na svých talířích hlavně luštěniny. Pokud neholdujete červené čočce, cizrně či fazolím mungo, můžete si pošmáknout na kuřeti tandúri marinovaném v jogurtu a ochuceném kořenicí směsí tandúri masala. Tradičně se peče v hliněné peci tandúri, jež dala celému pokrmu jméno.
„Na ulici se pak můžete občerstvit smaženými trojúhelníčky samósa bohatě plněnými většinou bramborovou směsí, které se podávají s pikantní a někdy i jogurtovo-mátovou omáčkou. Vynikající je kvašený „chléb“ naan v podobě placky potřený přepuštěným máslem, palak paneer je zase špenát s čerstvým sýrem v omáčce kari,“ vyjmenovává indické hity Lenka Petrášová.

Čtěte také: Umami – chuť glutamátu maskuje jídlo, které žádnou chuť nemá

Indie: Něco k pití?

Indové pijí studenou vodu a čaj černý. V severním podhorském státě Ásám se pěstuje jeden z nejkvalitnějších černých čajů pojmenovaný dle svého původu Ásám. „Čaj se podává lehce nebo silněji okořeněný, oslazený a dochucený mlékem. Pije se z malých kalíšků a k dostání je doslova všude, včetně vlaků. Dříve se podával v malých ručně vyráběných hliněných kalíšcích, které se bez ekologických následků vyhodily rovnou na ulici, dnes se bohužel setkáme spíše s jejich moderní plastovou náhradou,“ říká průvodkyně.

Důležitá doporučení:

  • Během jídla je zde dovolena řada věcí, které u nás nejsou přípustné, jako hlasité mlaskání nebo říhání. Dejte si však pozor na levou ruku, ta se jídla nesmí (ze známých důvodů) ani dotknout.
  • Smrkat u stolu do kapesníku také není nejvhodnější, ale toleruje se. Na závěr jídla se nelekejte podaných semínek anýzu s krystalovým cukrem. Napomáhají trávení a zajistí vám vonný dech.

Přečtěte si: Pozor: Pálí to! aneb Nejpálivější jídla světa

Originální čínská kuchyně určitě není z českého bistra

„Originální čínská kuchyně je, lidově řečeno, na hony vzdálená tomu, s čím se setkáváme v čínských bistrech v Čechách,“ překvapuje naše průvodkyně. Pokud vám to doma nejede, v původním prostředí byste si mohli přijít na své. Konzumuje se zde hodně zeleniny a ani u masitých pokrmů zelenina nikdy nechybí. Oblíbené jsou všechny možné druhy, z těch u nás méně známých např. vodnice, lotosový plod nebo kořen taro.

„Z tradičních jídel jmenujme oblíbené kung-pao, smažené jarní závitky nebo vepřové ve sladkokyselé omáčce. Z mnoha čínských rozmanitých kuchyní je populární také ta sečuánská, kde se můžete setkat například s pokrmem tofu staré poďobané dámy (Ma Po Tofu). Jako mnoho jídel z této provincie, je i tato úprava tofu pálivá a lze ji doporučit spíše fajnšmekrům a pokročilejším znalcům čínské kuchyně. Častým a oblíbeným pokrmem jsou i u nás známé smažené nudle. Pro Čechy by bylo jistě zajímavé poznat i jemné čínské knedlíčky z rýžového nebo kynutého těsta s různou náplní (mleté maso, krevety ale i mnohé jiné), nebo vynikající knedlíčkovou polévku,“ láká nás Lenka Petrášová.

Čína: Něco pití?

Tím nejoblíbenějším nápojem je v Číně zelený čaj. „Číňané si ho rádi nosí přes den s sebou ve speciálních šroubovacích ´bandaskách´ či ´čutorách´. Proto je také běžně k dostání horká voda na dolití, zelený čaj lze, a také se to doporučuje, louhovat vícekrát,“ říká průvodkyně z China tours.

Důležitá pravidla v domácnosti hostitele:

  • Jakmile hostitel odloží hůlky, měli by tak učinit i ostatní, byť jim ještě v misce něco zbylo. 
  • Porce se zde nedojídají.
  • Pokud by se snad zdálo, že jídlo dochází, hostitel se nenechá zahanbit a objedná další.
  • Vyvarujte se zapichování hůlek do misky s rýží, neboť Číňanům to připomíná zapálenou vonnou tyčinku u hrobu a odkaz na smrt se k jídelnímu stolu nehodí.
  • Ačkoliv se říká, že u čínské tabule je povoleno být hlučný, říhat, srkat a podobně, tyto poučky ne vždy platí, pokud se chystáte stolovat v čínském velkoměstě, v dobré restauraci a ve společnosti vzdělaných Číňanů.

Vietnamská bistra jsou lepší než čínská

Vietnamská kuchyně se u nás v posledních dvou letech velmi rozšířila díky našim vietnamským spoluobčanům. „Celkově je úroveň vietnamských restaurací a bister lepší než čínských. Svou pověst si už získala polévka phở – masový vývar s rýžovými nudlemi a zpravidla tenkými hovězími plátky. Typické jsou také jarní závitky, a to i ty nesmažené, čerstvé – například rýžové nudle a krevety s bylinkami zabalené do jedlého rýžového ´papíru´, jež se namáčí do rybí omáčky,“ radí Lenka Petrášová. Ve Vietnamu, zemi se 2000 km mořského pobřeží, si pochutnáte i na rybách a mořských plodech na všechny způsoby.

Vietnam: Něco k pití?

Na severu se pije zejména zelený čaj, jinak se tu také pěstuje speciální kávová odrůda. Vietnamská káva voní po čokoládě a určitě stojí za ochutnání. „Oproti Číňanům Vietnamci pijí více alkohol, vietnamské pivo je výborné na zahnání žízně. Můžete ochutnat i tvrdý alkohol – hanojská vodka si nezadá s mnohými našimi,“ upozorňuje průvodkyně.

Důležitá pravidla:

  • Polévka se nepodává na začátku, ale na konci stolování. V misce raději něco nechejte, jinak by váš hostitel nabyl dojmu, že jídla nepřipravil dostatek, a mohl by vám naservírovat další porce.
  • Vstát a odejít od stolu můžete v tradiční rodině teprve ve chvíli, kdy dojí nejstarší, nejváženější člen společnosti.
  • Vietnamci jsou i u stolování pověrčiví. Párátko se tu nepodává z ruky do ruky, ale pokládají jej před druhého na stůl. Pověra totiž říká, že jinak by se dotyční pohádali.

Jak sami vidíte, pravidla stolování v zemích daleké Asie jsou opravdu různorodá a jejich podrobné nastudování by vydalo na hodiny. Spíše než abyste si je zapamatovali sice všechna, ale chybně a u stolu si pak uřízli ostudu, postačí mít na paměti jen ta nejzákladnější. Nejlepší je chovat se přirozeně. Místní jsou prý k turistům tolerantní a malé prohřešky vám rádi odpustí.

Čtěte také: Sushi vzniklo z nouze

Autor článku

Redaktorka serveru Vitalia.cz se zaměřuje zejména na kvalitu potravin a kvalitu jejich prodeje. Věnuje se také zdravotní problematice.

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