Škoda každé rány, která padne, nadávky a ponižování ale nejsou o nic lepší

18. 7. 2023

Sdílet

„Děti dělají to, co potřebují dělat,“ řekla mi psycholožka Angelika Kartous Sbouli, se kterou jsem se bavila o tom, co vlastně je to rodiči tak často zmiňované dětské zlobení a jak na něj případně reagovat. Rozhovor jsme vedly pár dní před prvním ročníkem festivalu Zlobení.

O čem část dospělých hodně často hovoří, pokud jde o děti? O zlobení. A přesně to se stalo tématem čtyřdenního open air festivalu, který se koná letos poprvé – vypukne 20. až 23. července v areálu kláštera Gabriel Loci na jižním úpatí pražského Petřína směrem ke Smíchovu. 

Podle psycholožky Angeliky Kartous Sbouli jde zlobení a volná hra, kterou na festivalu chtějí organizátoři umožnit všem zúčastněným, ruku v ruce. Zlobení, tak říkáme chování, které nám – jako jednotlivcům i jako společnosti – nevyhovuje. A často tak označujeme děti, které nejsou dostatečně zralé, aby zvládaly všechny nároky společnosti – ale kdybychom používali stejné nálepky pro dospělé, nebyl by svět plný zlobivých lidí? ptá se psycholožka. 

Podle ní je hra přirozeným procesem čištění, odplavuje nanesené emoce a občas je špinavá, drsná. Se hrou se váže zkoušení a překračování pravidel, říká věc, kterou si ne každý uvědomuje. 

Festival chce podle pořadatelů všem zúčastněným nabídnout svobodný prostor, ve kterém mohou nechat prudit emoce, jak potřebují, jen tak být a nemít je stále pod kontrolou. Pro mě to třeba znamená nemít stres z toho, že se moje dítě válí po zemi a řve, když se mu něco nelíbí. Že může zakřičet, když je naštvané. A že nebudu muset odrážet pohledy kolemjdoucích – pro mě jako rodiče a věřím, že přes to i pro to dítě, je to strašně úlevné. A chtěla bych tohle umožnit všem, řekla za organizátory dramaturgyně Kamila Krbcová

Dětské chování je každopádně velké a stále aktuální téma, jak o tom svědčí třeba vášnivá debata, která se nedávno rozhořela po tom, co jedno bistro dalo jasně najevo, že u něj rodiče s potomky nejsou zrovna vítaní. Nebo nevole, jakou mezi částí společnosti vyvolává návrh zákona, který by zakázal tělesné trestání dětí – víc než třetina rodičů je totiž přesvědčená, že bez nich není výchova vůbec možná. A ještě více jich čas od času dítě uhodí.

Je potřeba se někdy nudit

Jak se na výchovu dětí v Česku a zejména ono avizované zlobení dívá psycholožka Angelika Kartous Sbouli? 

Mají Češi rádi děti? Prostředí pro ně není mnohde přátelské, okolí dává často najevo, že jim děti vadí už pouhou svou přítomností.

Nedomnívám se, že můžeme říci, že nějaký národ má děti rád více a druhý méně, nebo snad vůbec. Určitě ale mohou existovat kulturní rozdíly v tom, jak se k dětem chováme a co je a není v dané kultuře normou. Osobně se domnívám, že národy postižené zkušeností s totalitním režimem kladou větší důraz na poslušnost, a to samozřejmě i u dětí. Toto nepřátelské prostředí, které vnímáte, možná může být právě takovým pozůstatkem.

Liší se Češi od jiných národů v náhledu na dětské zlobení?

Tady bychom si potřebovali definovat, co tím zlobením vlastně myslíte. Nejsem si jistá, že je potřeba srovnávat v tomto směru národy. Domnívám se, že i jen v rámci České republiky najdeme velké rozdíly v tom, jak který rodič chápe zlobení, co přesně tímto pojmem myslí. Především si myslím, že spokojený člověk ve své roli rodiče bude adekvátně reagovat na chování dítěte a bude mít více kapacity na to chápat chování dítěte jako způsob komunikace, a nikoliv jako zlobení naschvál, například.

Psycholožka Angelika Kartous Sbouli

Autor: Angelika K. Sbouli

Zlobení, respektive nezlobení je pro mnoho rodičů stále tím hlavním výchovným cílem, zejména u menších dětí. Dělají chybu?

Nesetkávám se v tak masivní míře s takovým faktem a vnímám, že by pro toto povídání bylo důležité se podívat na toto konkrétní „zlobení, ať už je to cokoliv. Významným vlivem může být působení okolí. Pravděpodobně většina rodičů zažila, jaké to je, když dítě na veřejnosti prožívá silnou negativní emoci a nikomu ze všech zúčastněných se nedaří tuto emoci zregulovat. Tlak, který cítíme v těchto situacích, je velmi silný. 

Můžeme mít obavy, zda rodičovství zvládáme, a tato obava v nás může vytvářet úzkost. Proto, abychom se té úzkosti vyhnuli, pak může docházet ke zkratkám, kdy chování začneme kategorizovat jako zlobení a snažíme se tomu zlobení zabránit.

Vezměte děti na festival Zlobení

Openairový festival pro všechny, kteří chtějí na chvíli nemít vše pod kontrolou. Ideálně pro rodiče s dětmi od 3 do 10 let

Čtyři dny na nádvoří pražského kláštera Gabriel Loci, uprostřed města v horkém létě naplněné divadlem, dílnami, hudbou a hrou. Krabice, barvy, papír, hlína a voda. Semináře a debaty. Zbyde i prostor pro nudu.

Přes den je na místo konání a zdejší akce vstupné dobrovolné. Odpolední program je určený pro rodiny s dětmi (a všechny, kterým nevadí, že kolem nich někdo běhá a křičí), s rušením v průběhu představení se podle organizátorů počítá. Večerní program je primárně pro dospělé a lístky na jednotlivá představení je možné kupovat v síti GoOut.cz 

Tip redakce Vitalia.cz

Čtvrteční workshop, který v rámci festivalu povede terapeut Vojtěch Kozlík na téma Děti, rodiče a kontrola – nastavování hranic v digitální době. Vstupné dobrovolné, ale doporučujeme rezervovat místa, kapacita je omezená.

Více na webu festivalu Zlobení zde

Je to opravdu velmi individuální a možná může být dobré zeptat se sebe, co přesně si pod pojmem zlobení představuji. Jaké konkrétní chování? Jaký může mít dítě motiv k tomu, aby se tak chovalo? A především z jakého důvodu nám toto chování vadí? 

Jsem přesvědčená, že v sobě máme přirozenou touhu, chtění k tomu být rodiči milováni a uznáváni. Samozřejmě, že v období vývoje dochází k tomu, že se potřebujeme vůči rodiči vymezit, ale to teď nemám na mysli. Myslím tím určitý prazáklad toho, že v očích dítěte může být rodič symbolem života, přežití, bezpečí, smysluplnosti, růstu a tak dále. Zkrátka takovým středobodem všeho.

Bití dětí jako výchovná metoda nefunguje. Čím pohlavky a plácnutí nahradit Přečtěte si také:

Bití dětí jako výchovná metoda nefunguje. Čím pohlavky a plácnutí nahradit

Síla citu k rodiči je obrovská, a tedy nemyslím, že by dítě dělalo naschvál něco, co rodiči vadí či ubližuje. S tímto vědomím se pak na nežádoucí chování dítě můžeme podívat a ptát se sebe, proč zrovna toto teď potřebuje dělat? Tímto chci říci, že si nemyslím, že by se dítě záměrně rozhodlo, že svému rodiči ublíží nebo že ho naštve.

Ptáte se na chyby. Nevybavuji si, že bych se někdy v životě setkala s rodičem, který by řekl, že své rodičovství zvládl bezchybně. Myslím si, že drtivá většina rodičů je ve vztahu se svým dítětem nejlépe, jak v danou chvíli dokáže. Zároveň vnímám jako moc důležité dodat, že různé formy ubližování, odmítání poškozují společný vztah, na kterém je postaveno to, jak se k sobě navzájem chováme, a tvoří normu toho, co je v našem vztahu běžné.

Míra toho, co rodiče označují za zlobení, se samozřejmě liší – ale dá se říci, že často jde o běžný dětský projev. A že pro děti zkrátka není přirozené tiše sedět v koutě a šoupat nohama. Co když se rodič bojí, že když bude tolerovat třeba válení se po zemi, dítě rozmazlí?

Pojmu zlobení rozumím jako chování, které je pro okolí z různých důvodů nepříjemné, a především nesrozumitelné. Toto chování si pak můžeme vysvětlit jako záměrné nepříjemné, námi nechtěné chování dítěte. Pravděpodobně se nám i v dospělosti může stát, že se chováme pro okolí nevhodně. Ostatní by mohli tvrdit, že zlobíme, a zakazovat nám tyto projevy. My sami uvnitř sebe ale cítíme, někdy dokonce i víme, tušíme, nebo alespoň interpretujeme, proč se tak chováme, na základě našeho vnitřního prožitku.

Zapomeňte na „výchovnou“ facku. Vyhrajeme, i když netrestáme, vzkazuje psycholog rodičům Přečtěte si také:

Zapomeňte na „výchovnou“ facku. Vyhrajeme, i když netrestáme, vzkazuje psycholog rodičům

Děti dělají to, co potřebují dělat. Jednou z těchto potřeb může být i potřeba poznávání, zkoumání světa. Toto je opět velmi individuální, mohou být děti, které jsou řekněme klidnější, a mohou být děti, které jsou impulzivnější a více se vrhají do akce.

Na válení po zemi se opět neodpovídá jednoduše, protože opravdu velmi záleží na kontextu celé situace. Osobně nevidím nic zvláštního na tom, aby se člověk, v jakémkoliv věku, válel, když potřebuje.

Mnoho rodičů má obavu z toho, že když nebudou dost přísní, dítě rozmazlí. 

Tady by bylo dobré se ptát, z čeho to mám vlastně strach? Je to například strach z toho, že v budoucnu bude pro dítě náročné cítit odpovědnost, nebo dokončovat započaté věci? Pak mohu důsledněji jako rodič trvat například na tom, abychom po hře po sobě hračky uklidili, a neudělám to sama. Ale tohle je opravdu jen příklad. Hranice mohou být v tomto smyslu proměnlivé a – opět – závislé na kontextu. Především chci ale vyzdvihnout, že vysoce pravděpodobně nejvíce záleží na tom, jak to máme sami se sebou my dospělí.

Dnešní děti, často včetně těch nejmenších, mají čas hodně organizovaný, není v něm volno a místo na nudu… Je to chyba a jak se to může odrážet na chování dětí?

Je třeba se někdy nudit. Nemít žádný konkrétní cíl či plán. Když nic neděláme a jen jsme, můžeme přicházet na nové myšlenky, představy, souvislosti a můžeme pozorovat, co se z toho nicnedělání stává. Mezi rodičem a dítětem v tom nicnedělání může vzniknout takový prostor spolubytí, kdy jsme prostě jen spolu a tím, že nemáme žádné zadání, můžeme si dělat, co chceme, to, co máme rádi. A tam se dá zažít něco nového. 

S dětmi do bistra nelez. Můžou rodiny maximálně tak na dětská hřiště? Přečtěte si také:

S dětmi do bistra nelez. Můžou rodiny maximálně tak na dětská hřiště?

To je velmi blahodárné pro vztah. Také skrze to, že dítěti extrémně neorganizujeme čas, může docházet k tomu, že se dítě samo začne učit, že si samo vybere aktivitu, kterou se chce zabývat, a to je úžasné pro jeho růst, vnímání a uspokojování vlastních potřeb.

Jak se díváte na tělesné tresty?

Organizace LOCIKA má takové motto: Škoda každé rány, která padne. Zcela se s tímto ztotožňuji. Z mnohých výzkumů je jasné, že fyzické násilí nemá opravdu žádné dobré důsledky. Výzkumy potvrzují, že různé druhy ubližování vysoce nepříznivě působí na vývoj našeho mozku, a to s sebou přináší další negativní následky. Všímám si, že existuje tendence spojovat násilí s vymezováním hranic, které dítě potřebuje. 

Jsem zastáncem toho, že potřebujeme znát hranice, ale toho se dá dosahovat mnohými jinými způsoby, které nemají tak devastační následky. Je naším omezením myslet si, že nelze vychovávat bez facek, pohlavků, plácnutí a tak podobně – toto naše omezení může vyplývat z vlastní zkušenosti, kdy nás samotné rodiče fyzicky trestali. To jsou ty normy, o kterých píši výše. Ptáte se na fyzické tresty, vnímám ale jako důležité dodat, že i psychické ubližování, jako jsou nadávky, ponižování a tak dále, a ignorance nejsou o nic méně závažné. 

Trestáte děti pohlavky a plácnutím?

Když se vrátíme ke zlobení, na které se ptáte výše, zkusme si představit, že děláte něco, čím byste si například mohla ublížit, vaše kamarádka by z toho cítila obrovskou úzkost a aby zabránila takovému chování, dala by vám facku, přidala by pár nadávek a na závěr by vám zakázala plakat. Možná díky tomu, že už jste dospělá, byste dokázala porozumět tomu, že byla pod tlakem, a proto reagovala takto zkratkovitě, dítě ale tuto schopnost nemá vybudovanou. 

Svůj sebeobraz, vnímání sebe teprve tvoří, tedy pokud mu budeme ubližovat, může zvnitřnit, že je špatné, natolik bezcenné, že je možné ho udeřit. S tímto pocitem pak může kráčet dál ve svém budoucím životě. Problematika domácího násilí je opravdu mnohovrstevnatá a nepodaří se mi v tomto rozhovoru všechny vrstvy postihnout. Zdá se mi výhodné si otevřeně říci, že po dlouhá léta v České republice bylo normou děti fyzicky trestat, v dnešních časech tuto normu měníme a je přirozené, že někdy opravdu nevíme, jak jinak to dělat, jak to změnit. Zde chci jen dodat, že i v tomto směru si můžeme říci o pomoc a podporu v tom, jak to dělat jinak.

Organizace LOCIKA

Centrum LOCIKA pomáhá dětem, které zažívají násilí v rodině, ať už jako přímé oběti, nebo svědci. Nabízí například pomoc pro děti i rodiče na chatu nebo dlouhodobou podporu rodinám zasaženým nějakou formou násilí. 

Jak můžu jako rodič stanovit hranici, mantinel mezi přirozeným dětským chováním a chováním, které už je řekněme přes čáru?

Tohle je tak vysoce individuální, že opravdu nemohu nabídnout recept na to, jak toto stanovit. Každý rodič pravděpodobně sám cítí, kdy vnímá chování dítěte jako to chování, které označujete, že je přes čáru. Zde bychom si znovu potřebovali definovat, co je to to chování přes čáru, a opět by to bylo pro každého rodiče jiné. 

Pokud bych měla konkrétněji odpovědět, asi bych nabídla, aby se rodič pokusil zamyslet nad tím, zda takové chování dítěti neubližuje. Například, když je dítě (záleží, jak staré) více než hodinu na mobilu či počítači, mohu se ptát, zda to není moc. Pokud se zamyslím nad tím, zda to dítěti neubližuje, pak se mi bude lehčeji odpovídat. 

Ambulantně u Apolináře? Nevídáno, neslýcháno. A teď ještě aspoň ty porodní domy Přečtěte si také:

Ambulantně u Apolináře? Nevídáno, neslýcháno. A teď ještě aspoň ty porodní domy

Za sebe vnímám, že pokud bude v sedmi letech denně na mobilu či počítači více jak hodinu, ubližuje mu to. Proto bych to tedy vyhodnotila jako chování přes čáru, jak vy říkáte, a uchopila bych svou zodpovědnost a takovému chování bych zamezila. Stejně tak i u výše zmíněného rozmazlování. Mohu se sebe zeptat, zda dítěti ublíží, když se budu vždy za každou cenu snažit udržet maximální okamžitý komfort dítěte. Mohu si odpovědět, ano, může mu to ubližovat, například v budoucnosti by pro něj mohlo být velmi náročné překonávat překážky, a takovým způsobem si mohu začít jako rodič budovat hranice.

Autor článku

Jako redaktorka se specializací na zdravotnictví prošla deníky Lidové noviny a Mladá fronta DNES. Už několik let se věnuje on-line žurnalistice jako autorka i editorka, psala například o mýtech a dezinformacích pro Seznam Zprávy. 

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