Pravé neštovice se díky očkování podařilo vymýtit. Dnes se již vakcína běžně neaplikuje

15. 4. 2024 7:30
přidejte názor
Autor: Depositphotos/Stockfootage

Přestože se dnes již s pravými neštovicemi nesetkáte, v minulosti se jednalo o velmi obávané onemocnění, které zahubilo stamiliony lidí a další zanechalo doživotně poznamenané. Prostřednictvím vakcíny se jej podařilo naštěstí zcela zlikvidovat, takže již nehrozí, že byste se danou chorobou mohli nakazit. Někteří se však obávají možného využití v rámci bioterorismu.

Co jsou pravé neštovice?

Co se dozvíte v článku
  1. Co jsou pravé neštovice?
  2. Historický kontext
  3. Jaké mají pravé neštovice příčiny?
  4. Formy nemoci
  5. Jaké mají pravé neštovice příznaky?
  6. Variolizace a očkování proti pravým neštovicím
  7. Pravé neštovice na našem území

Pod názvem pravé neštovice nebo také černé neštovice (latinsky Variola či Variola vera, anglicky smallpox) se ukrývá jedno z nejnebezpečnějších onemocnění naší historie, které jen během 20. století způsobilo smrt několika set milionů nakažených. Existovalo ve dvou různých formách, přičemž úmrtnost té těžší (variola major) se pohybovala kolem 30 %. 

Jakmile se člověk nakazil, nemoc se v první fázi projevovala jako obyčejná chřipka. Následně se ovšem přidaly charakteristické kožní projevy v podobě hnisavých vředů, které mohly zasáhnout také sliznice. Někteří nemocní pak zemřeli na otravu krve, zatímco jiné usmrtilo oběhové či dechové selhání nebo jiné komplikace. Uzdravení obvykle skončili se zjizveným obličejem a mnohdy také oslepli.

Díky očkování se naštěstí podařilo tuto chorobu dostat pod kontrolu a 8. května 1980 ji Světová zdravotnická organizace prohlásila za vymýcenou. V současné době se již očkování neaplikuje, takže proti této nemoci lidé přestávají být imunní. Virus byl sice z velké části zničen, ale stále existuje v některých výzkumných laboratořích. Obavy, že by mohly být pravé neštovice jednoho dne využity jako biologická zbraň, tedy nejsou zcela bezpředmětné. [1, 2, 3, 45]

Historický kontext

Nejstarší zmínky o pravých neštovicích je možné vysledovat v lékařských spisech ze starověké Indie a Číny. Tato nemoc však bývá spojována také se starověkým Egyptem (v době zhruba před 3000 lety), a to konkrétně s osobou faraona Ramsese V., na jehož mumifikovaném obličeji jsou patrné jizvy, které by dle vědců mohly být stopami po neštovicích.

Z Číny se nemoc postupně rozšířila také do Japonska, kde během 8. století našeho letopočtu proběhla rozsáhlá epidemie, která dle dostupných pramenů zahubila až třetinu obyvatelstva. První zmínky o variole na území Evropy se pak objevují v době mezi 5. a 7. stoletím. Řehoř z Tours zaznamenal epidemii ve Francii a Itálii, zatímco galsko-římský historik a biskup Marius z Avenches začal nemoc označovat jako variola (z latinského varius, což znamená skvrnitý).

Ačkoliv první známý popis pravých neštovic vytvořil Áron z Alexandrie, jako první dokázal rozlišit tuto nemoc od spalniček až arabský lékař Rhazes na přelomu 9. a 10. století. Ve středověku pak v Evropě došlo k několika epidemiím, přičemž jejich rozšíření na celé území kontinentu umožnily například křížové výpravy a větší mobilita populace.

Během objevování nových částí světa pak byly pravé neštovice zavlečeny také na další místa. Například na americkém území to mělo devastující dopad, jelikož dané onemocnění způsobilo vymření řady kmenů a národů domorodého obyvatelstva. Bývá navíc spojováno také s pádem některých velkých říší, jako byli Aztékové nebo Inkové. Došlo totiž k redukci místní populace a zhroucení sociálních struktur, čehož pak využili Španělé.

Mezi známé oběti pravých neštovic patřil například francouzský král Ludvík XV., ruský car Petr II., rakouský císař Josef I. nebo Leopold Lotrinský, který si měl původně vzít Marii Terezii (ta sama nemoc prodělala). Podlehla jim ovšem i Marie II. Stuartovna, zatímco Alžběta I. nemoc přežila podobně jako Wolfgang Amadeus Mozart nebo Ludwig van Beethoven.

Během 18. století pak byla tato choroba jednou z hlavních příčin úmrtí na území Evropy, přičemž úmrtnost dosahovala zhruba 25–40 %. Přeživším zůstávaly na obličeji výrazné jizvy a často také oslepli. K léčbě sloužila různá projímadla a lidé zkoušeli také pouštění žilou. Kromě toho se pak ujala variolizace, což je metoda známá již z dob starověkého Orientu.

Skutečně snížit počet nakažených se povedlo až díky vakcinaci, která se na konci 19. století stala běžnou léčebnou praxí. Množství obětí kleslo především na území Evropy či Severní Ameriky, ale na některých místech se pravé neštovice stále nekontrolovaně šířily. Jen během 20. století tato nemoc údajně zahubila 300–500 milionů lidí.

Postupem času naštěstí dokázalo očkování pravé neštovice zcela zlikvidovat. Ačkoliv ještě v roce 1967 se na světě nakazilo více než 15 milionů osob, již roku 1976 bylo možné nemoc označit za vymýcenou v Evropě, v Severní Americe, v Číně, v Japonsku nebo v Austrálii. Případy tohoto onemocnění ovšem stále přetrvávaly hlavně na území Afriky.

Poslední zdokumentovanou obětí pravých neštovic se v roce 1978 stala medicínská fotografka Janet Parkerová, která se infikovala ve chvíli, kdy virus unikl z virologické laboratoře Lékařské fakulty v Birminghamu, kde pracovala. Přestože nakazila i svou matku, ta naštěstí přežila a díky striktním protiepidemickým opatřením se nemoc již dále nerozšířila. V roce 1980 pak Světová zdravotnická organizace označila pravé neštovice za eradikované. [6, 7, 8, 9, 10, 11]

Jaké mají pravé neštovice příčiny?

Za rozvoj nemoci je zodpovědný virus pravých neštovic (variola virus) z čeledi Poxviridae. Jedná se o velký, obalený virus s dvouřetězcovou DNA, jenž se vyznačuje svou vysokou virulencí. To znamená, že aby se člověk nakazil, stačí k tomu pouze 10–100 virionů. Zároveň je blízce příbuzný s dalšími viry z rodu Orthopoxvirus, které mají na svědomí vznik onemocnění u zvířat.

Jediným hostitelem viru pravých neštovic je člověk. Nemá tedy žádný jiný přirozený rezervoár kromě lidského těla, a nachází-li se mimo hostitelský organismus, nedokáže přežít déle než několik dnů. Právě díky tomu bylo možné prostřednictvím systematické vakcinace pravé neštovice vymýtit, což podpořila také skutečnost, že všichni lidé s tímto onemocněním vykazovali stejné příznaky (neexistovali zde tedy asymptomatičtí přenašeči).

K přenosu pravých neštovic docházelo prostřednictvím kapénkové infekce, tedy během smrkání, kýchání, kašlání, ale i mluvení. Kromě toho se ovšem člověk mohl nakazit také skrze tělesné tekutiny nebo během těsného kontaktu s nakaženým. Nepřímo se pak nemoc šířila skrze předměty kontaminované materiálem z kožních lézí (například ložní prádlo, oblečení a ručníky).

Infikovaný člověk nemůže své okolí nakazit v průběhu inkubační doby, ale jakmile se objeví první viditelné příznaky, stává se nebezpečným pro všechny jedince, kteří s ním přijdou do kontaktu. K vylučování viru dochází slinami, slzami a sekrety dýchacích cest, dále prostřednictvím moči a stolice, ale samozřejmě také skrze materiál kožních lézí. Infekční pak člověk přestává být až v momentě, kdy odpadne poslední strup a vyrážka se zahojí. [12, 13, 14, 15, 16]

Kvíz: Znáte nejhorší nemoci v historii lidstva?
Přečtěte si také:

Kvíz: Znáte nejhorší nemoci v historii lidstva?

Formy nemoci

Spoustu lidí dnes zajímá, jaký mívaly pravé neštovice průběh, a samozřejmě i to, jakou měly pravé neštovice úmrtnost. Nemoc se v minulosti objevovala ve dvou různých variantách, které se navzájem lišily závažností svých projevů, ale také tím, kolik lidí nákaze podlehlo. Konkrétně se jednalo o následující formy:

  • variola major – úmrtnost dosahovala zhruba 30 % (u dětí ještě více),
  • variola minor – lehčí forma s úmrtností kolem 1 %.

Kromě toho pak existují také poměrně vzácné, ale vysoce letální varianty nemoci. Sem patří například hemoragická forma, která se někdy označuje jako černé neštovice. Její letalita údajně dosahovala až 100 %.  Kromě toho se může u pacienta vyskytnout také varianta doprovázená vznikem plochých lézí (maligní pravé neštovice), modifikovaný typ nemoci nebo forma bez kožních lézí (variola sine eruptione). [17, 18, 19, 20]

Jaké mají pravé neštovice příznaky?

Inkubační doba pravých neštovic se pohybovala kolem 12–14 dnů. Během tohoto období nakažený nepociťoval žádné potíže, takže o své nemoci obvykle vůbec nevěděl, ale zároveň nebyl nebezpečný pro své okolí. Jakmile však virus do jeho organismu vstoupil, začal se zde velmi rychle množit a postupem času se dále rozšířil do kostní dřeně, sleziny a na další místa.

Co se týče charakteristických symptomů, zpočátku se začínají objevovat projevy podobné chřipce. Nemocného trápí vysoké horečky, zimnice, bolesti hlavy, svalů a kloubů, malátnost nebo třeba poruchy spánku, k čemuž se později mohou přidat také silné bolesti břicha v kombinaci se zvracením. Po uplynutí dvou až tří dnů nicméně horečka začne ustupovat a dostaví se dočasný pocit úlevy. 

Zlepšení ale zpravidla bývá pouze krátkodobé. Následuje vznik typických neštovičných změn na kůži, přičemž vyrážka zpočátku pokrývá obličej, ruce a předloktí (případně nohy), odkud se během několika dnů rozšíří také na pacientův trup. Ačkoliv bývají léze nejvýraznější právě na obličeji a končetinách, postupně se objevují i na sliznicích, a to především v nose a ústech. Vrací se také horečka.

Pokud jde o charakter neštovičných změn, zpočátku na pokožce vznikají makuly (drobné skvrny), které se pak mění na papuly a vezikuly (menší puchýřky naplněné čirou tekutinou). Dále přecházejí v pustuly, což jsou nepříjemné hnisavé puchýře, z nichž se zhruba během dvou týdnů stávají krusty, které po nějaké době samy odpadnou.

Puchýře obvykle nejvíce hnisají kolem šestého či sedmého dne od začátku manifestace pravých neštovic, přičemž horečka dosahuje v tuto chvíli svého vrcholu a celkový stav pacienta bývá velmi vážný. Řada nemocných touto dobou trpí velkými bolestmi, přičemž umírají vlivem oběhového či dechového selhání nebo třeba v důsledku hypovolemického šoku a sepse.

Když pacient kritickou fázi nemoci přežije, horečka začne postupně klesat, puchýře zaschnou a promění se ve strupy, které se zhruba do měsíce po vzniku vyrážky postupně odloupnou. Hnisavý proces ovšem typicky proniká i do podkožního vaziva, takže po zahojení lézí obvykle zůstávají na pokožce trvalé jizvy, čímž se výrazně liší pravé a plané neštovice. Je-li navíc zasaženo také oční víčko nebo spojivka, důsledkem může být slepota.

Rozvine-li se u pacienta hemoragická forma pravých neštovic, která bývala častá třeba u těhotných žen, průběh nemoci bývá odlišný. Již během prvního stádia totiž dochází ke krvácení do podkoží a na kůži se postupně objevují skvrny tmavě červené nebo fialové barvy. Úmrtí nastává vlivem masivní ztráty krve, jež putuje právě do podkoží, ale i do vnitřních orgánů, které pak selhávají.

Pro maligní variantu (flat-type smallpox) jsou typické mnohem závažnější počáteční potíže než v případě běžné formy tohoto onemocnění. Kožní léze se spojují dohromady, ale neplní se hnisavou tekutinou a netvrdnou. Na postižených místech tak vzniká měkká vyrážka, která nevytváří strupy. Touto variantou přitom trpěly hlavně děti, pro které byla mnohdy smrtelná. [21, 22, 23, 24, 25]

Variolizace a očkování proti pravým neštovicím

Jelikož nikdy neexistovala na pravé neštovice léčba, lidé hledali jiné způsoby, jak s tímto onemocněním bojovat. Nejstarší doložená metoda, která se používala jako ochrana, se označuje jako variolizace. Pochází z Číny a její původ se datuje do 10. století. Lidé vdechovali sušené neštovičné strupy nebo si oblékali košilky kontaminované hnisem z lézí, což mělo vyvolat slabou místní reakci a způsobit rozvoj dostatečné imunity, jež zabrání pozdějšímu rozvoji nákazy.

S touto metodou se během pobytu v Cařihradu seznámila lady Mary Wortley Montague, která se po návratu do Anglie stala její nadšenou propagátorkou. Po několika pokusech, které dopadly velmi dobře, vyzkoušely danou metodu i děti krále Jiřího I. a variolizace se rozšířila do dalších zemí Evropy. Celý proces se ale neobešel bez dalších problémů.

Ačkoliv byla variolizace velmi účinná, u mnoha pacientů bohužel místo omezené reakce vyvolala vznik těžkého onemocnění, které skončilo zohyzděním nebo smrtí. Materiál potřebný k provedení variolizace se přitom získával z lidských dárců, což zapříčinilo přenos dalších závažných chorob, s nimiž se potýkali (syfilis, žloutenka). Pacienti, kteří proces podstupovali, navíc stejně byli po určitou dobu zdrojem infekce pro své okolí.

10 nejhorších nemocí světa: Mezi zabijáky patří rakovina, ale i obyčejná chřipka!
Přečtěte si také:

10 nejhorších nemocí světa: Mezi zabijáky patří rakovina, ale i obyčejná chřipka!

Na konci 18. století si nicméně anglický venkovský lékař jménem Edward Jenner povšiml toho, že dojičky, které se nakazily kravskými neštovicemi, nikdy neprodělaly nákazu virem pravých neštovic. Roku 1976 tedy připravil očkovací látku z kravských neštovic, kterou podal zdravému chlapci Jamesi Phippsovi. U toho pak skutečně vznikla imunita proti pravým neštovicím.

Edward Jenner pak danou metodu použil opakovaně a v roce 1798 o tom publikoval článek, v němž označil danou metodu jako vakcinaci (vacca znamená kráva) a původce onemocnění jako virus. Jeho závěry se setkaly s velkým nadšením, ale také s kritikou. Přesto se však vakcinace z Anglie rychle rozšířila také do dalších zemí po celé Evropě a postupně i na další kontinenty.

Díky tomu, že bylo vyvinuto na pravé neštovice očkování, se během 20. století začalo uvažovat o vymýcení dané nemoci. Přesto infekce zahubila obrovské množství lidí, než k tomu skutečně došlo. Velmi výrazně k tomu přispěl český epidemiolog Karel Raška, jenž vytvořil účinnou koncepci, podle které bylo nutné soustředit se na ohniska nákazy spíše než na plošné očkování.

Světová zdravotnická organizace vytvořila program eradikace varioly v roce 1966, kde se předpokládalo vymýcení pravých neštovic do konce roku 1974. Pomoci v tom mělo především vytvoření dostatečných zásob očkování proti dané nemoci, vakcinace ohrožených skupin obyvatelstva a snaha o okamžité potlačování nákazy. Skutečně pak byla nemoc označena za vymýcenou roku 1980.

Jakmile se povedlo pravé neštovice zcela eradikovat, lidé začali přemýšlet o ukončení vakcinace, což se začalo aplikovat od počátku 80. let 20. století. Důvodem byla skutečnost, že předtím přínosy očkování na pravé neštovice výrazně převyšovaly možná rizika, ale v tuto chvíli již začalo být zbytečné obyvatelstvo vystavovat jakýmkoliv možným komplikacím (kontaminace hnisavými bakteriemi, vakcinia gangrenóza, encefalitida). [26, 27, 28, 29, 30, 31]

Pravé neštovice na našem území

České země byly postiženy epidemiemi pravých neštovic například v letech 1794 a potom 1799–1801 a vyžádaly si velké množství životů. Očkování se pak začalo aplikovat na počátku 19. století, přičemž roku 1801 vznikl dokonce „veřejný očkovací ústav“. Povinná aplikace vakcíny proti pravým neštovicím pak byla v Čechách zavedena roku 1812, což výrazně snížilo roční úmrtnost na variolu.

Poslední velkou epidemii pravých neštovic pak naše území zažilo v letech 1852–1853, kdy dohromady zemřelo více než 43 000 lidí. Následně došlo k uzákonění vakcinace i revakcinace školních dětí. Počátkem 20. století se zde variola objevovala pouze ojediněle, přičemž poslední evidovaný případ pochází z roku 1967, kdy sem nemoc přivlekl letec z Indie. [32, 33, 34]

Zdroje: wikiskripta.eu, vakciny.net, vesmir.cz, ct24.ceskatelevize.cz, toxikology.cz, msdmanuals.com, my.clevelandclinic.org, mayoclinic.org, ncbi.nlm.nih.gov, who.int, cdc.gov, archive.org

  • Žádné názory
  • Našli jste v článku chybu?
'; 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'; } }
'; 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 »