Mám strach z jediné věci, říká mladá diabetička. Z těhotenství

30. 10. 2015

Sdílet

Autor: Archív Martiny Vodičkové
Když nám ujede autobus, jdeme do práce nebo do školy pěšky. Martina nemůže, protože ví, že toho ráno nesnědla tolik, aby jí menší „výšlap“ nezpůsobil hypoglykémii. Jaké je to být v devatenácti diabetikem?

Cukrovka je nemoc, kterou máme nejčastěji spojenou se stářím. Diabetem 1. typu, který se nejčastěji projeví v dětství a dospívání, ale u nás trpí až sedm procent diabetiků, a to není zanedbatelné číslo. U tohoto typu onemocnění jsou buňky produkující inzulín zničeny, celý zbytek života je pacient odkázán na jeho dodávání „zvenčí“, zpravidla injekčně.

Martina Vodičková (23 let), studentka medicíny, která od svých devatenácti let trpí diabetem 1. typu a celiakií
Autor: Archiv Martiny Vodičkové

Martina Vodičková (23 let), studentka medicíny, která od svých devatenácti let trpí diabetem 1. typu a celiakií

Martina Vodičková by byla zcela obyčejnou studentkou medicíny, kterou se od dětství chtěla stát, kdyby jí v devatenácti letech lékaři nediagnostikovali diabetes a celiakii. Když se její spolužáci baví o tom, kam půjdou večer pít, ona se snaží bavit s nimi, v duchu si ale možná právě propočítává, kdy svačila, jakou má asi momentálně hladinu cukru a zda ji neohrozí přechod do laboratoře v jiné školní budově. Jindy se zase přemáhá k úsměvu, přestože nemůže dostat z hlavy, že si ráno naměřila cukr, který rozhodně „není v pohodě“. O tom, jaké je to naučit se v devatenácti letech brát běžné starosti života jako absolutní malichernosti, jsem se bavila právě s Martinou Vodičkovou.

Mladý člověk s diabetem není zrovna obvyklý. Popsala byste dobu těsně předtím, než se nemoc projevila?

Byly prázdniny a já prožívala jedno z nejkrásnějších období života. Jenže v té době, tedy v necelých devatenácti letech, jsem začala být z ničeho nic velice unavená. Spala jsem asi dvacet hodin denně, v bdělém stavu jsem jen jedla cukrovinky nebo plánovala trasu po pokoji, abych nemusela udělat jediný vysilující krok navíc. Přestože jsem nikdy nebyla nijak při těle, stejně jsem za necelý týden ztratila deset kilo. Kosti se mi o sebe třely tak, až to bylo bolestivé a měla jsem po celém těle modřiny.

Jak dlouho toto trvalo?

Když neskutečná únava trvala týden, rozhodla jsem se zajít k praktickému lékaři, který mě okamžitě odeslal do nemocnice. Zde mi jako vstupní hodnotu glykémie naměřili 31,3 mmol/l (norma 5,3). Přišla jsem za pět minut dvanáct.

Co se v takové chvíli devatenáctileté holce honí hlavou?

Myslím, že by mi nevadilo, kdybych umřela. Na myšlenky jsem byla příliš slabá.

Kromě diabetu vám byla diagnostikována i celiakie. Ani o jedné z nemocí jste předtím nevěděla?

Tato dvě onemocnění mi byla diagnostikována s týdenním rozestupem. Když jsem se zhruba smířila s diabetem, přišla diagnóza celiakie. To byla pro mne rána pod pás, věděla jsem přibližně, co tato nemoc obnáší a nedokázala jsem si svůj následující život představit.

Je plno otázek, které člověka napadají, ale jako první se asi každému mihne jedna zcela banální: Máte diabetes a celiakii – co vůbec můžete jíst?

Mohu jíst vše, co není příliš sladké a zároveň neobsahuje ani trošku pšenice, žita, ovsa a ječmene. Problémem zůstává, že tyto ingredience obsahuje spousta potravin, do kterých bychom to ani neřekli: od šunky, přes levné jogurty po koření.

Pomohl vám v začátcích zdravotnický personál v nemocnici?

Začátky byly krokem do neznáma. Budu žít? Budu moci chodit do školy? Nebudu kolabovat na ulici? Co budu jíst? V hlavě bylo tisíc a jedna otázek, které mi musel zodpovědět až čas. Ačkoli sestřičky i lékaři byli velice milí, pro mne to byli poslové špatných zpráv. Kdo mi ze zdravotnického personálu z hlediska psychiky skutečně pomohl, byl sanitář, který mě vezl na vyšetření k potvrzení celiakie. Bylo to jediných deset minut v nemocnici, kdy jsem se skutečně ze srdce smála. V jeho fórcích o mé diagnóze byla naděje. Naděje na plnohodnotný život.

Jak vaši nemoc přijalo okolí?

Mé okolí bylo úžasné, rodiče, rodina i přítel byli dokonale silní, nedali mi v žádném případě najevo lítost, ani pocit méněcennosti. Věřím, že to pro všechny muselo být neskutečně těžké, vidět mě v nemocnici mezi pacienty osmdesát let a výše. Uvědomuji si, že jsem nebyla zrovna příjemná, pořád jsem jim opakovala, že budu na své nemoci sama a že mi nijak pomoci nemohou, v podstatě jsem je od sebe odháněla.

Teď už něco z „praxe“ – jak vypadá běžný den mladé diabetičky?

Dříve jsem si aplikovala inzulín inzulínovým perem čtyřikrát denně. Můj den se tak podle toho odvíjel, musel být přesně naplánovaný do třech stejných částí, pravidelné jídlo, pohyb, spánek. Dnes mám situaci podstatně ulehčenou v podobě inzulínové pumpy, kterou mám dvacet čtyři hodin denně připojenou k tělu, a neustále mi dávkuje malé množství inzulínu.

O inzulínové pumpě se píše, jak je s ní život jednodušší, jak ji má diabetik stále u sebe podobně jako mobil, nemusí brzy vstávat kvůli inzulínovým injekcím, apod. Je to tak?

Je to jednodušší. Nepředstavujte si to ale prosím tak, jak se to píše v novinových článcích typu „Diabetes vyléčen, inzulínová pumpa dávkuje inzulín sama.“ To je sice pravda, na druhou stranu to s sebou přináší i podstatně více zodpovědnosti. Pokud by totiž z nějakého důvodu přestala fungovat a já to nezjistila změřením glykémie glukometrem, dostala bych se do kómatu třeba i za dvacet hodin, glykémie by mohla vyletět i na hodnoty 30 mmol/l a to už je život ohrožující. To kontinuální podávání inzulínu se také musí správně nastavit a pak přenastavovat každý den, ne-li každou hodinu. Na výsledné hodnotě glykémie totiž nezávisí jen inzulín, jídlo a pohyb, ale i hladina hormonů dle menstruačního cyklu, pití alkoholu, stres, nálada – a někdy mám pocit, že i počasí.

Říkala jste mi, že váš den je tak trochu matematika – co všechno musíte mít spočítané?

Minimálně každou půl hodinu v duchu počítám, přepočítávám a analyzuji, jak se cítím. Každé jídlo mám zvážené a přepočítané do sacharidů, neustále přemýšlím nad množstvím aplikovaného, zbytkového i bazálního inzulínu, pohybovou aktivitou, a to, co se týče sportu i běžného pohybu např. domácích prací. Své pocity a propočty zhruba osmkrát za den zkontroluji glukometrem. Za každý špatný odhad či propočet následuje trest v podobě hypo či hyperglykemie, nic se neodpouští.

Takže žádná obyčejná sušenka není „jen tak“, že? 

Nevybavuji si, že bych za dobu svého diabetu někdy snědla celou sušenku naráz. Hodnoty glykémie se odvíjejí od jednotlivých kostiček čokolády. Musím přemýšlet, neustále. O jídle, o pohybu, o nenadálých situacích, které mohou nastat. Uvedu jeden příklad: pokud z nějakého důvodu přestanou ráno jezdit tramvaje, většina lidí zamíří do školy či do zaměstnání pěšky. Já si toto však dovolit nemůžu. Vím totiž, že jsem snídala a mám v těle množství inzulínu odpovídající snídani a následnému sezení v lavicích. Nenadálý pohyb v podobě byť jen dvoukilometrové „procházky“ by záhy způsobil velmi nepříjemnou hypoglykémii.

Zatímco vaši vrstevníci si dají oplatky nebo čokoládu, když na ně prostě mají chuť, vy nemůžete?

Pokud mám chuť na něco sladkého, tak si to dám (samozřejmě bezlepkovou verzi). Sním například čtyři kostičky čokolády, zároveň ale beru do ruky vysavač či nazouvám kecky na běhání. Každý hřích musím nějak odčinit.

Teď něco vážnějšího – se svojí nemocí jste se už docela sžila, už v tom takříkajíc „umíte chodit“. Je něco, z čeho máte stále strach?

V tuhle chvíli mám strach z jediné věci, a to z těhotenství. Studuji medicínu, a to mi dává obrovskou výhodu, dozvídám se věci tak, jak jsou, bez přetvářky. Fenomén dnešní doby, tedy mít první dítě až kolem třicítky, není dobrý počin ani pro zdravé ženy, natož pro mě. Domnívám se, že zde bude velké riziko.

Studium medicíny je samo o sobě důkazem, že se před svojí nemocí neplánujete schovávat.

Medicínu jsem chtěla dělat od dětství. Diagnózou diabetu se můj sen rozplynul. Hlavou mi prolétaly myšlenky typu „proč studovat takto těžkou školu, když stejně brzy umřu, a kdo ví, jestli vůbec budu moct studovat“. Za to, že studuji to, co mě nesmírně baví a naplňuje, vděčím své nejlepší kamarádce, která mě v podstatě za vlasy dotáhla na den otevřených dveří LFP – a já se zamilovala.

Je pro vás vaše studium důležité i pro zvládání nemoci? 

Medicína mi umožňuje dostat se k necenzurovaným informacím, které by se mi jakožto laikovi nedostaly, popřípadě bych jim nerozuměla.

Jsou i nějaká negativa? Chvíle, kdy si říkáte, že to dohromady nejde zvládnout?

Studium medicíny nejde zvládnout z tisíce a jedné příčiny, ale diabetes bych mezi ně nezařadila. Medicínu mi ze začátku okolí velmi vymlouvalo, stejné to bylo, když jsem si pro radost začala běhat, nebo pracovala na brigádě v cukrárně. Dnes v podstatě bez problémů studuji, běhám pětkrát týdně i 10 km dlouhé trasy a spojení diabetik v cukrárně v mém případě také není oxymóron. V hlavě jsem si urovnala, že dortíčky jednoduše nemohu, a tak na ně nemám ani chuť. 

Narazila jste během svého života s diabetem na „krutou realitu“ zdravotnického systému? 

Na začátek bych ráda upozornila, že zdravotnický systém České republiky považuji za dobrý, velice vstřícný a funkční. Ovšem jako každý správný Čech, i zde si musím na něco postěžovat. Dle mého názoru by edukační sestřičky nemusely na prvním místě upozorňovat na omezený počet materiálu, jako jsou jehly k inzulínovému peru, nový glukometr, proužky ke glukometru atd. Chci tím říct, že je jasné, že pojišťovna nemůže proplácet neomezené množství materiálu, na druhou stranu nikdo pacientům nezakazuje si materiál dokoupit. Modřiny po celém břiše za tři sta korun ročně rozhodně nestojí.

Máte jako medička tip na zlepšení situace pro diabetiky? Jaký problém by dle vašeho názoru nemocní nemuseli řešit, a řeší?

Největší úskalí vidím v tom, že se v ČR často neposkytuje nejlepší možná léčba pacientům bez komplikací. Jednoduše se čeká na komplikace, a až poté je nasazena lepší, ale dražší terapie. Konkrétně u mě byl problém se schválením inzulínové pumpy, pojišťovně vadilo, že má kompenzace diabetu je poměrně slušná i s inzulínovým perem, nevidí tedy důvod, proč nasadit několikanásobně dražší léčbu. Vyřešily jsme to s mou lékařkou sepsáním dlouhé zprávy o plánování těhotenství, čistě z důvodu, aby mi byla pumpa schválena. Díky ní se mi kompenzace diabetu ještě významně zlepšila, mé hodnoty dlouhodobého cukru jsou téměř srovnatelné se zdravým člověkem, lépe řečeno se k jeho hodnotám přibližují. Navíc život s pumpou je sice mnohem odpovědnější, ale pro mne mnohem snazší.

Diabetes určitě změní život každého od základu. Jak otočí přemýšlení mladého člověka?

Život udělal jeden velký kotrmelec, ze dne na den bylo všechno úplně jinak. Každý den musím o své nemoci přemýšlet a maximálně se jí podřizovat. Pohled na svět se mi kompletně změnil, začala jsem si ho mnohonásobně víc vážit. Byla a jsem vděčná nějakému nadpřirozenu, že jsem se mohla narodit do této krásné a bohaté doby plné blahobytu. Vždyť pokud bych se narodila před válkou, kdy lidé ještě v podstatě inzulín neznali, nepřežila bych ani týden od prvních příznaků únavy. Od té doby mi mnoho věcí připadá jako malichernosti, které nám jen znepříjemňují život a berou sílu na jiné, podstatné věci či činnosti. Myslím, že diagnózou se narodilo mé nové a snad i lepší „já“. Minimálně to „já“, které miluje život a snaží se ho si užívat plnými doušky.

Autor článku

Studentka Fakulty právnické Západočeské univerzity v Plzni. Jako redaktorka pracovala pro portál Nazeleno.cz a TopSrovnani.cz. Zajímá ji zdravý životní styl, problematika zdraví a vyvážené stravy, fitness.

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