Stříhali malého chlapečka

23. 9. 2010

Sdílet

Autor: Isifa.cz
Na půdě školy se vkus divoženky utkává s míněním učitelky v kostýmku, a dredy vedou boj s tělocvikářem. Mohou se vůbec žáci, studenti, kantoři a rodiče domluvit, co je to „vhodný vzhled“?

Jedenáctiletý Pavel se na začátek školního roku těšil. Před zvoněním se vítal s kamarády, které přes prázdniny neviděl, a společně probírali letní zážitky. Všichni byli zvědaví na novou učitelku, která by je měla provázet celým druhým stupněm základní školy.

Davide, vyřiď mamince, že takhle tedy ne!

Davide, vyřiď mamince, že takhle tedy ne!

„A tohle je jako co?“ byla její první slova v nové třídě. Zlověstně se dívala na Pavla, který nechápal, co se děje. „Takovýhle účes do školy nepatří!“ objasnila učitelka.

Pavel hraje fotbal. Podle módy malých i větších fotbalistů nosí cosi jako číro, ale v miniaturním provedení. Krátký sestřih a středem hlavy o něco málo, tak o centimetr, dva, vyšší pruh vlasů. Nikdy s tím neměl problémy. Jeho první školní den v šesté třídě byl teď zkažený a zdálo se, že na problémy ve vztahu s novou třídní má zaděláno. Podle jeho sestřihu si ho bleskurychle zařadila mezi „sígry“ a potížisty a svým žákům držela dlouhou přednášku, v níž malý fotbalista figuroval jako odstrašující příklad.

Protože i v jedenácti letech je kluk ještě dítě, volal hned po té nešťastné hodině mámě s brekem na krajíčku. Maminka to vzala věcně a prakticky, doma kluka přistřihla a vysvětlila mu, že dráždit hada a paní učitelku se nevyplácí. Na třídních schůzkách, které se konaly hned za týden, si nicméně s třídní na téma účesu promluvila. Emoce už trochu vyšuměly, takže se v podstatě dohodly a v klidu si vysvětlily svůj postoj. Pavel bude nosit klasický účes a paní učitelka si kvůli těm několika centimetrům, které před tím podle ní byly přes čáru, nebude myslet, že má před sebou zločince.

Ředitelno, máme problém

Ne vždy je ale průběh řešení výstřelků v odívání, účesech a vůbec vizáži žáků a studentů podobně smírný. „Jedna dívka nosila na bradě piercing – obrovskou zelenou kouli. Nedala si říct, a když jsem kvůli tomu musela telefonovat i rodičům, maminka mě odbyla, že mi do toho nic není,“ popisuje svoje zkušenosti Irena Lhotková, ředitelka Základní školy Bohumila Hrabala v pražské Libni. „Nakonec jsme se přece jen domluvily, ale zprvu byl ten rozhovor hodně nepříjemný. Ono to tak většinou je – když je problémové dítě, jsou problémoví i rodiče.“

Jenže právě zaškatulkování dítěte kvůli zevnějšku do kategorie „problém“ některým rodičům vadí. „Když je oblečení čisté, neohrožuje dítě na zdraví – třeba nějakými velkými kovovými doplňky –, nejsou na něm neslušné symboly a podobně, pak nechápu, co škole vadí,“ říká otec patnáctiletého Dominika. Jeho syn narazil na gymnáziu se svým „uměleckým“ zevnějškem. „Chtějí se odlišit, být originální, zábavní, kreativní, to je přeci v pořádku,“ soudí otec. „To mají mít všichni tesilky a šedé véčko jak za socíku? Tady nejde o předvádění peněz, s tím bych nesouhlasil, ale kdo určuje ty hranice, co už je výstřední?“

No ano, módní policii může někdy suplovat paní učitelka před důchodem, jejíž módní povědomí se zastavilo u vydání časopisu Žena a móda z roku 1985.

Nebo naopak pedagožka, která na mladé slečny tak trochu žárlí, jak popisuje zkušený učitel: „Jde o problém, který mívají dospívající děvčata, když se začnou krášlit, s kantorkami, jejichž krása již uvadá a ony si to uvědomují. Ve zmíněných dívkách vidí své konkurentky. Ty dívky si pak mohou vybrat – buď nenápadný vzhled a pěknou známku, nebo …“

A ono zmiňované předvádění movitosti? Ve školách prý naráží spíš mládež alternativnějšího ražení, anebo ti, kteří právě nedostatek financí nahrazují originalitou, i když někdy dost zoufalou. Vyvoněná Barbína s Kenem ve značkovém outfitu oku paní učitelky zalahodí. Některé školy, především v zahraničí, tak dávají přednost školním uniformám, které smažou jak případné rozdíly v postavení rodin, tak eliminují výstřelky v oblasti oblékání.

Mají učitelé zasahovat do odívání žáků?

PRO
Učitelka ZŠ: Rodičům svých žáků musím poměrně často posílat vzkazy ohledně oblékání. Bohužel hodně dětí chodí do školy i špinavých, ale to se stydím rodičům říct. 

PROTI
Matka dcery na ZŠ: Třídní učitel jí velmi ostře dal několikrát najevo, že by neměla do školy chodit s natočenými vlasy. Jelikož dcera závodně tančí a mívá vystoupení po večerech, nestihne si účes z vystoupení do druhého dne úplně sundat. Dcera byla z jeho poznámek velmi špatná, styděla se před ostatními…

Z časopisu Rodina a škola č. 8/2009

Třída mužů v černém


Autor: Agentura SXC

„My řešíme opravdu jen ty krajní případy,“ říká k tomu Irena Lhotková, „ nebo když se něco rozšíří hromadně. To byly před časem čepice nebo kapuce, ve kterých žáci chtěli sedět i při vyučování. Dívkám tolerujeme čelenky, šátečky a podobně, ale čepice a kapuce jsme zakázali, stejně jako černé brýle při vyučování. Oblíbená výmluva byla zánět spojivek, to jsme pak chtěli potvrzení alespoň od rodičů.“

Školy také celkem pochopitelně zakazují předměty a doplňky, které by mohly jejich svěřencům způsobit zranění. „V poslední době je to hlavně piercing. Při vyučování nám vadí, až když to jde do extrémů,“ vysvětluje postoj školy ředitelka Lhotková. „Jinak menší, decentní tolerujeme, ale žáci se ho stejně musí sundat na tělocvik z bezpečnostních důvodů. Pak rodiče volají a ptají se, proč si to děti mají sundávat. Dokonce jedna matka kvůli tomu neustále psala dceři omluvenky na TV, až dívka nemohla být klasifikována, protože vůbec necvičila.“

Mimo diskusi je vedle nebezpečných doplňků také oblečení znečištěné, s nevhodnými nápisy a symboly (vulgárními, rasistickými, fašistickými apod.). O něco obtížněji už se bude hledat shoda o tom, kolik centimetrů má mít sukně pod zadek a výstřih nad pupík. „Hambaté“ oblečení řeší pedagogové snad nejčastěji a to hlavně v 9. třídách, kde holky chodí „nahé“.

Někdy se žáci setkávají s až překvapivým pochopením. Na škole v přírodě žádal žák vyšší třídy svoji učitelku o radu. Nosil totiž mohutné číro, které si doma „upravoval“ pomocí dvou prkének. Učitelka, paní přes padesát s vkusem velmi střízlivým, nehnula brvou a žáka odkázala do kuchyně k zapůjčení kuchyňských prkének.

Vždy prostě záleží na konkrétním uvážení školy či pedagoga, co ještě bude v pořádku a co už ne. Většina škol sice zmiňuje oblékání ve školním řádu, ale obvykle velmi obecně. Pod pravidlem „Žák přichází do školy vhodně a čistě oblečen a upraven. Je nepřípustné docházet do školy ve výstředním oblečení…“ si každý může představit úplně něco jiného. Kromě toho, že je nevhodný zevnějšek těžko definovatelný, je také těžko postižitelný. „Já se mohu jedině odkázat na školní řád, jinak je možnost postihu minimální,“ uzavírá Irena Lhotková.

Ze školních řádů:

  • Žák přichází do školy vhodně a čistě oblečen a upraven. Je nepřípustné docházet do školy ve výstředním oblečení nebo v oblečení, které vyjadřuje sympatie k různým společenským skupinám a hnutím propagujících rasizmus, fašizmus, komunizmus, antisemitizmus, anarchizmus apod. (vojenské a maskovací oblečení, „bombery“, různé doplňky oblečení jako řetězy apod.). (ZŠ Bítovská)
  • Úpravy vlasů (střihy, barvy apod.) a používání líčidel a dalších kosmetických prostředků musí být v souladu se zásadami slušnosti a hygienickými normami. (ZŠ Bítovská)
  • Žáci (a jejich zákonní zástupci) jsou povinni dbát, aby svým oblečením a úpravou svého zevnějšku nevzbuzovali u ostatních žáků a u pracovníků školy odpor nebo znechucení; ve sporných případech týkajících se úpravy a oblečení žáka rozhoduje o dalším postupu ředitel školy; žák je povinen podřídit se jeho rozhodnutí. (SŠTO Havířov)
  • Povinnosti žáka: Chodit čistě a vhodně oblečen i upraven. (ZŠ Bohumila Hrabala)

Co si o posuzování vzhledu žáků či studentů pedagogy myslíte vy? Setkali jste se někdy se situací, kdy jste to museli řešit? A jaké zkušenosti mají pedagogové? Napište nám!

Autor článku

Redaktorka, editorka, dlouholetá šéfredaktorka serveru Vitalia.cz (do června 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 »