Lékaři ve studii podají psychedelika desítkám pacientů s ALS a roztroušenou sklerózou

13. 2. 2024

Sdílet

Autor: Depositphotos
Látka psilocybin je známá díky houbám lysohlávkám a česká legislativa na ni pohlíží jako na nelegální. Až na použití v rámci medicínské vědy. Lékaři zjišťují, zda pacientům dokáže pomoci od depresí a úzkostí. Nyní získali grant, v rámci nějž budou tento halucinogen podávat vybraným pacientům s roztroušenou sklerózou a amyotrofickou laterální sklerózou neboli ALS.

Psilocybin roztroušenou ani amyotrofickou laterální sklerózu (ALS) neléčí a v budoucnu zcela jistě ani léčit nebude. Pacientům, kteří mají těžké a rychle postupující onemocnění, ale může pomoci vyrovnat se s blížící smrtí.

Co se dozvíte v článku
  1. Komu bude terapie určená
  2. Jak bude studie probíhat
  3. Místo hub kapsle
  4. Co chtějí vědci zjistit
  5. Dobrý sluha, zlý pán

Zda to skutečně dokáže a v jaké míře, budou příští rok zkoumat vědci z Národního ústavu duševního zdraví (NUDZ) v nové klinické studii. Spolu s evropskými kolegy získali prestižní evropský grant, jenž vůbec poprvé v historii podpoří psychedelický výzkum. S jeho pomocí budou prověřovat, zda psilocybin dokáže pacientům paliativní péči ulevit od deprese a existenciálního distresu, tedy negativních myšlenek a emocí, jež souvisí s neléčitelností onemocnění.

Cílem studie je zjistit, zda psychedeliky asistovaná terapie je tou správnou cestou, jak akceptovat náročnou skutečnost v podobě nevyhnutelné konečnosti vlastní existence a ulevit od utrpení, uvádí tisková zpráva NUDZ.

Komu bude terapie určená

Psilocybinem asistovaná terapie je velmi nadějná strategie v léčbě deprese a úzkostí provázejících třeba pacienty s diagnostikovanou rakovinou. A to i přesto, že ne u všech zafunguje. Pokud pacienti na léčbu odpoví, je její efekt často i po jedné dávce dlouhodobý a v případě terminálních fází může být prakticky i trvalý, podotýká Tomáš Páleníček, vedoucí Centra výzkumu psychedelik NUDZ.

Čeští lékaři a výzkumníci z NUDZ se výzkumu psilocybinu věnují přes dvacet let a podíleli se i na některých mezinárodních studiích. 

Studie PSIKET001 a PSIKET002 stále přijímá dobrovolníky. Vstupní dotazník, ale i kontakt na koordinátory lze najít na webu psiket.cz.

Obě studie jsou hrazené z grantových prostředků a darů. Výzkum terapeutického využití nejen psilocybinu, ale také anestetika ketaminu a liánového výtažku ayahuasky lze podpořit prostřednictvím Nadačního fondu Psyres. Ten usiluje také o změnu zákonů tak, aby psychedelika mohla být využita v léčbě i mimo studie.

Nově připravovaná studie bude unikátní v tom, že terapie bude poprvé v historii probíhat u paliativních pacientů, kteří mají jiné než onkologické onemocnění. Stále ale platí podmínka, že terapii s psilocybinem lékaři uplatní jen u pacientů, u nichž selhala běžně používaná léčba psychických obtíží.

Do studie jsou zapojeny celkem čtyři evropské země. V každé z nich bude výzkum primárně zaměřen na jiný typ onemocnění (viz box níže). V Česku to bude roztroušená skleróza. Vědci zvažují také to, že by po dohodě se zahraničními kolegy oslovili i některé pacienty s ALS (amyotrofická laterální skleróza). Spojovat vybrané pacienty ze čtyř zemí bude to, že budou v nevyléčitelné fázi onemocnění a zdravotníci jim budou poskytovat již pouze paliativní péči.

V České republice budou lékaři pro studii hledat pacienty s nepříznivým průběhem onemocnění, přihlásit se proto nebude moci každý. Roztroušená skleróza ne u všech nutně vede k zásadnímu zkrácení délky života. Toto onemocnění má různé formy a my budeme cílit na pacienty s rychlým rozvojem nemoci a špatnou prognózou, vysvětluje vedoucí Centra výzkumu psychedelik NUDZ.

Nová léčba depresí a dalších duševních nemocí. Ketamin funguje jako rychlé antidepresivum Přečtěte si také:

Nová léčba depresí a dalších duševních nemocí. Ketamin funguje jako rychlé antidepresivum

Výběr pro studii vhodných pacientů bude probíhat pravděpodobně na začátku příštího roku. V plánu je zařadit do české části studie třicet pacientů, v rámci celého evropského projektu pak 120. Celkový počet budou ale vědci ještě ladit. O zahájení náboru NUDZ bude informovat prostřednictvím webu a sociálních sítí.

Pacienty budou vybírat odborníci z Neurologické kliniky 3. lékařské fakulty Univerzity Karlovy v rámci pražské Fakultní nemocnice Královské Vinohrady, kde je jedno z center léčby roztroušené sklerózy. Pomáhat jim budou psychiatři, protože pacienti musí kromě neurologické diagnózy mít také klinickou diagnózu deprese. 

Jednou z podmínek je, aby člověk s těžkým onemocněním, jež jej dokáže učinit plně invalidním, doprovázený pečovatelem, zvládl sezení i cestu do NUDZ sídlícího v Klecanech ve Středočeském kraji. Také musí být schopen základní spolupráce při komunikaci, být aspoň částečně mobilní a dokázat třeba spolknout kapsli s účinnou látkou. Studie se proto nebudou moci zúčastnit pacienti trvale upoutaní na lůžko, ale používání invalidního vozíku či opory při pohybu překážkou nebude.

Jak bude studie probíhat

Protože jde o tzv. zaslepenou studii, pacienti budou nejprve rozděleni do dvou skupin. V obou dostanou dvakrát po sobě psilocybin v kombinaci s psychoterapií, přičemž v jedné skupině dostanou vyšší, psychoaktivní, dávky a v druhé velmi nízkou dávku, která prakticky odpovídá placebu. Přitom nikdo, ani pacienti, ani zkoušející lékaři, nebude vědět, kdo je v jaké skupině. Jen tak je totiž možné objektivně zjistit, zda existuje rozdíl v duševním zdraví těch, kteří podstoupili terapii s použitím halucinogenu, a těch, kteří ji podstoupili bez něj.

Jak upozorňuje vedoucí Centra výzkumu psychedelik NUDZ, i pacientům, kteří budou ve skupině s nízkou dávkou psilocybinu, lékaři nakonec tu plnou také podají. Dojde k tomu ale až o něco později, v takzvané otevřené fázi studie. „Nepovažovali bychom za etické, kdyby se část paliativních pacientů nedostala k možné pomoci,“ říká psychiatr. 

Jaké účinky má psilocybin

Psilocybin patří mezi psychedelika neboli halucinogeny. V přírodě se vyskytuje v některých druzích hub, vyrobit jej lze ale i synteticky. Po požití halucinogenů nastávají změny vnímání, myšlení, nálad a prožívání. Uživatel proto vnímá realitu jinak. Dostavovat se mohou také halucinace, a to vizuální, sluchové či čichové. Požití psilocybinu může vést také k odlišenému vnímání a chápání času a prostoru. Tento stav trvá v případě psilocybinu několik hodin. Psilocybin patří v Česku mezi zakázané látky. Ve výzkumu má jeho použití výjimku.

Pacienty vybrané do studie čeká hned několik sezení s terapeuty, z nichž nejspíše dvě budou probíhat před podáním psilocybinu a několik po každé dávce. Podávané množství účinné látky přitom bude stupňované. „V první dávce je prozatím plánováno 15 miligramů, v té druhé plná dávka účinné látky, tedy 25 miligramů. Mezi dávkami bude týdenní až čtrnáctidenní odstup,“ vysvětluje Tomáš Páleníček. Důvodem pozvolného dávkování je opatrnost. „Ukazuje se, že je výhodné, když se pacienti nejprve obeznámí s mírnějšími účinky, protože následně, při druhé, tedy plné dávce účinné látky, si dovolí jít v prožitcích mnohem hlouběji, jsou uvolněnější a mohou ze zkušenosti více těžit,“ dodává lékař.

Místo hub kapsle

Podání psilocybinu ovšem neznamená, že pacienti budou pojídat houby lysohlávky, jež jsou jeho obsahem vyhlášené a s jejichž extrakty se pracuje i v některých jiných studiích. V této studii bude použita syntetická látka naplněna do kapslí, které pacient užije na začátku sezení.

Psilocybin nejvíce proslavily tyto houby – lysohlávky. V případě nové studie ale pacienti budou dostávat účinnou látku v jiné formě. 

Autor: Depositphotos

Sezení s psilocybinem bude probíhat v zázemí NUDZ, ve speciálně k tomu uzpůsobené místnosti. Pacienti při něm budou většinu času trávit na lůžku. K dispozici budou mít možnost zakrýt si oči maskou a poslouchat hudbu ze sluchátek. Seznam skladeb pro tuto studii vědci teprve sestavují, pro všechny účastníky studie bude hudební set shodný.

Podle Tomáše Páleníčka je obojí důležité, aby prožívání nešlo vně pacienta, ale bylo směřováno dovnitř, tedy k introspekciMaska na oči je doporučena proto, že s ní se člověk mnohem snáze může vydat do prostoru vnitřního psychedelického světa, který se nejvíce otevírá při zavřených očích. Také hudbu po podání účinné látky pacient vnímá zcela jinak, často velmi intenzivněji a s jinými dimenzemi: někdy můžeme hudbu nejen slyšet, ale i vidět. 

Jedno sezení pod vlivem psilocybinu bude dlouhé až šest hodin, protože právě tak dlouho trvá jeho účinek. Po celou dobu jsou s pacientem i terapeuti.

Důležité je, že v případě terapie jde vždy o kontrolované užití halucinogenu. To znamená, že před samotným podáním účinné látky bude předcházet několik kratších sezení. Terapeut připraví pacienta na to, jak se pohybovat v prostoru, který v našem vědomí může psilocybin vytvořit. Je tam také třeba nácvik práce s tělem, práce třeba s prožitými traumaty nebo to, aby věděl, jak s terapeutem může komunikovat, a to třeba i neverbálně, popisuje vedoucí výzkumu. Spolu řeší také to, jak se účastník studie cítí, co je obsahem jeho strachu nebo kam by psychedelické sezení mělo směřovat.

Po dvou sezeních s psilocybinem přichází další, při kterém pacient s terapeutem pracuje s obsahem jeho zkušeností. Počet setkání bude předem daný a trvání terapie časově omezené, protože jde o klinickou studii s přesně danou strukturou. 

Po skončení studie budou pacienti předáni zpět do péče svých ambulantních neurologů a psychiatrů, kde může následovat další terapeutická péče, ale ovšem už bez použití psilocybinu. „To, že by účinnou látku pacienti ještě někdy dostali, ale nevylučujeme, protože se snažíme otevřít diskuzi o specifickém léčebném programu, který za určitých přísných podmínek umožní zpřístupnit práci s látkou i mimo rámec klinických hodnocení,“ říká lékař.

Co chtějí vědci zjistit

Cílem studie je vědecky zkoumat, zda terapie psilocybinem může v rámci paliativní péče pomoci zmírnit depresi a ulehčit pacientům od existenciální úzkosti.

Základní onemocnění jako takové, tedy roztroušenou sklerózu a ALS, léčit nebudeme, ale budeme se snažit zmírnit psychické důsledky, které se k němu přidružují a mají podobu deprese, úzkosti, emoční nepohody a dalších psychických obtíží, vysvětluje Tomáš Páleníček.

Nová studie

Nově připravovaná klinická studie nese název PsyPal. Kromě NUDZ se do ní zapojí University Medical Center Groningen v Nizozemsku, která ji bude koordinovat, portugalská Champalimaud Foundation, dánská University of Copenhagen a Bispebjerg Hospital.

Každá instituce se při výzkumu zaměří na jinou diagnózu nevyléčitelné nemoci. V ČR to bude roztroušená skleróza, v Nizozemí půjde o pokročilou chronickou obstrukční plicní poruchu (CHOPN), v Dánsku ALS a v Portugalsku atypickou Parkinsonovu chorobu. Ve všech případech budou do studie zařazeni pouze pacienti v paliativní péči.

Studie je unikátní v tom, že bude vůbec první svého druhu. Financována bude grantem z evropského programu Horizon EuropeDotace na výzkum využití psilocybinu činí celkem 6,5 milionu eur.

Psilocybin dokáže zmírňovat prožívání úzkosti a tlumí existenciální distres. Ten se dostavuje u nemocných, kteří se dozvědí, že jejich prognóza není dobrá a čas na tomto světě mají výrazně omezený. Je to velmi traumatizující informace. O to víc, že naše společnosti nevnímá smrt jako součást běžného života, naší kultury. Přichází velká nejistota, kterou žádná pilulka jednoduše nevyřeší. Zpracovat tuto skutečnost pomůže jen změna postoje a náhledu na vlastní bytí, sděluje vedoucí výzkumného centra.

Za antidepresivními účinky psilocybinu je souhra několika různých mechanismů. Na jedné straně je to přímý vliv psilocybinu na tzv. serotoninové receptory, které mají důležitou roli při vzniku deprese a úzkostí, přičemž psilocybin může v mozku velmi rychle měnit jejich počet a aktivitu. 

Druhým vysvětlením je, že mozek, jenž vnímáme jako síť neuronů, se vlivem psychedelika přepne z jednoho „funkčního stavu“ do stavu, který je odlišný třeba mírou konektivity (závislosti a vzájemné aktivity neuronových center) nebo entropie (uspořádanosti mozkové aktivity). 

Třetím klíčovým, a dnes nejvíce citovaným mechanismem je vyvolání neuroplasticity v mozku, kdy dochází ke většímu propojování neuronů mezi sebou.

Čtvrtým vysvětlením účinku psilocybinu je pak psychologický rozměr zkušenosti, kdy se ukazuje, že intenzita, hloubka a mysticita zkušenosti podporuje dlouhodobou antidepresivní odpověď. „Předpokládáme, že právě neuroplastické procesy probíhají ve spojení s intenzitou a obsahem psychedelické zkušenosti a vzájemně se potencují,“ doplňuje Tomáš Páleníček. Podle něj psychedelika dokáží pozměnit to, jak člověk vnímá sám sebe a svět kolem. Právě to může pomoci, a to i trvale, od depresivních příznaků.

Čeští vědci zkoumají, zda ayahuasca může v ordinaci fungovat jako v džungli. Chtějí s ní léčit depresi Přečtěte si také:

Čeští vědci zkoumají, zda ayahuasca může v ordinaci fungovat jako v džungli. Chtějí s ní léčit depresi

Dobrý sluha, zlý pán

To, že se psilocybin ukazuje jako slibné léčivo, by ale nemělo povzbuzovat k jeho nelegálnímu užívání. Experiment s nimi totiž může vést někdy i k negativním následkům třeba v podobě zhoršení úzkostí nebo rozvoje flashbacků. Tedy o návrat nepříjemných prožitků spojených s požitím halucinogenu, který nastává za střízliva a může k němu dojít i měsíce po jediném požití látky.

O klasických psychedelicích obecně víme, že velké množství rizik nemají a ve většině případů neublíží. Ale samozřejmě jsou lidé, kteří mohou při jejich užití v nekontrolovaném prostředí projít náročnou zkušeností a z ní si odnést dlouhodobé potíže, upozorňuje Tomáš Páleníček. Toto riziko může být výrazně vyšší třeba u lidí s psychózou nebo těch, u nichž je výskyt psychózy v rodině. Právě psychotická onemocnění, jako je třeba schizofrenie, jsou prozatím jednoznačnou kontraindikací pro užití psilocybinu v terapii i mimo ni.

Zásadní také je, aby užití bylo v bezpečném prostředí. Tím se nemyslí jen prostor, ale také to, že ten, kdo psychedelika podává, o nich má znalosti a zná jejich rizika. A ten, kdo je užil, je na zkušenost nějak připravený. Po požití podle lékaře totiž může nastat bad trip. Třeba v podobě úzkostí, strachu, navození stavu neexistence či prohloubení prožitých traumat. Bad trip přitom může být pro samotného uživatele nezvladatelný, v kontrolovaném prostředí ovšem naopak velmi přínosný. Bezpochyby i právě proto některé kultury, které s halucinogeny dodnes pracují, jejich požití spojují s určitými rituály a šamanismem. Průvodcem rituálu je šaman, jenž má za sebou léta práce s různými přírodními látkami.

Je to jako s autem. Jeho řízení také nesvěříte někomu, kdo v něm nikdy neseděl a nemá řidičák, protože by to mohlo být velmi nebezpečné. Když ale řídit umíte, může být auto velmi dobrým pomocníkem. A tak to je i s psychedeliky, podotýká v nadsázce lékař.

Podívejte se na video Nadačního fondu Psyres o výzkumu a účincích psychedelik: 

Odborná spolupráce

MUDr. Tomáš Páleníček, PhD.

Vedoucí výzkumného centra Národního ústavu duševního zdraví. Zaměřuje se na výzkum neurobiologie účinku psychedelik, entaktogenů, nových syntetických drog a na klinickou práci s psychedeliky.

Autor článku

Redaktorka Vitalia.cz. Vystudovala žurnalistiku a češtinu na Univerzitě Palackého v Olomouci, pracovala v Deníku, na webu TV Nova a iDNES.cz. Píše o zdravotnictví. Je držitelkou novinářských cen Psychiatrické společností ČLS JEP za rok 2021 a 2022. 

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