Kolik stojí školák? Minimálně pět a půl tisíce

1. 9. 2011

Sdílet

Autor: Isifa.cz
Na úvodní otázku se nabízejí hned dvě jednoduché odpovědi: Hodně. A jak který. Obě dvě jsou správné. „Už na září s desítkou počítám,“ píše jedna z diskutujících maminek na internetu.

Zapomeňte na to, že máme „bezplatné“ školství. To sice máme (i když jsou tu i varianty), ale za svého školáka stejně utratíte peněz víc než dost. Chtělo by se říct nepočítaně, nicméně my si to zkusíme spočítat, nebo aspoň vyčíslit.


Autor: Isifa.cz

Dále zapomeňte na to, že dítěti budete hradit jen věci samozřejmé, jako je aktovka a penál. Čekají vás výdaje, o nichž jste neměli ani zdání, i když jsou zhusta tak zvaně „nepovinné“ a „dobrovolné“. Ale ty přijdou obvykle až během školního roku; na třídních schůzkách se budete hodiny dohadovat s ostatními rodiči, zda přispět na nové lavice, žaluzie do oken, vybavení laboratoře, jestli je standard, aby děti jely na lyžák do Alp místo do Jizerek (když vy nemáte splacenou hypotéku, ale soused v lavici je na to holt zvyklý) a podobně. Více:  Školy, ač nemají, umějí vytáhnout z rodičů žáků tisíce.

Vynecháme také kroužky, do povinné výbavy školáka nepatří a budeme se jim věnovat v dalším samostatném článku. Rovněž obědy a svačiny nepředstavují výdaj navíc, jaksi se předpokládá, že i doma by dítě dostalo něco k jídlu. A levněji než v dotované školní jídelně byste to asi nepořídili.

První třída – pěkně drahá kašička

Mohlo by se zdát, že náklady na prvňáka jsou větší než ve vyšších ročnících. Není to tak docela pravda. Sice musíte pořídit sakum pikum všechno nové (pokud dítě nedědí po starších sourozencích nebo kamarádech, ale málokterý hrdý prvňák by chtěl 1. září vykračovat s aktovkou z druhé ruky, a ostatní školní pomůcky mají poločas rozpadu velmi krátký). Jenže ani většina nově pořízených věcí školní rok nepřežije, budete rádi, pokud to dotáhnou k vysvědčení. Největší šance na postup do další třídy má aktovka (brašna, batoh), pokud ji přes prázdniny neproroste plíseň ze zapomenuté květnové svačiny (těch kapsiček je někdy až příliš!).

Proto se vyplatí korigovat výběr dítěte při nákupu tašky. Dcera si vysnila roztomilou berušku na kolečkách (a co by člověk neudělal pro podporu kladného vztahu ke vzdělání, promoce na medicíně je v tu chvíli tak blízko, červený diplom, dojaté babičky… „Budou to dva tisíce dvě stě, prosím!“). Během roku se proměnila v ostřílenou školní harcovnici a tahle holčičkovská taška jí byla na obtíž. Obzvlášť když její hnusní necitelní rodiče trvali na tom, že když si ji vybrala, bude s ní drandit do roztrhání krovek (beruščiných).

Obecné pravidlo pro nákup školních pomůcek zní: Nespěchat! Těch seznamů a lístečků k vám začátkem školního roku doputuje, každý den jiný, s jinými informacemi… Počkejte si. Více: Školní pomůcky – největší chyba je pořizovat věci předem


Náklady na první třídu:

(pozn. ceny se samozřejmě velmi liší podle místa, požadavku školy, vaší chuti investovat do kvality nebo blbin atd.; uvádíme rozpětí cen v různých typech obchodů včetně e-shopů, bez vyložených extrémů)

  • školní taška – 200–2500 Kč
  • penál – 50–400 Kč
  • do penálu (tužky, guma, ořezávátko, nůžky, pero, zmizík, pastelky, tuhé lepidlo) – 100–500 Kč
  • sešity, učebnice a pracovní sešity – obvykle prvňáci dostanou vše potřebné
  • obaly na sešity a učebnice – 60–200 Kč
  • desky na sešity a učebnice – 40–140 Kč
  • zásobníky na písmenka, slabiky a na číslice a tečky – 120–300 Kč
  • písmenka a číslice – 60–120 Kč
  • papírové hodiny – 10–30 Kč
  • pravítko – 8–20 Kč
  • kufřík na výtvarku – 90–400 Kč
  • výtvarné potřeby (pastelky, fixy, převlečení, vodovky, podložka na lavici, kelímek, štětce, plastelína, voskovky, lepidlo, čtvrtky, barevné papíry…) – 380–1180 Kč
  • přezůvky – 100–300 Kč
  • tělocvik – boty a oblečení do tělocvičny a na ven, švihadlo, tenisák – 690–1900 Kč
  • do třídy (případně i družiny) – mýdlo, papírové kapesníky, papírové ručníky, toaletní papíry – celkem cca 70 Kč (obvykle 2× ročně) – 80–260 Kč
  • příspěvek SRPŠ – 200–1200 Kč na rok
  • třídní fond – 100–500 Kč na rok
  • škola v přírodě – 2000–4000 Kč
  • potvrzení lékaře pro účast na mimoškolních akcích – 100 Kč (platí rok)
  • návštěvy výstav, kin, divadel ap. – 100–300 Kč
  • družina (100–500 Kč za měsíc) – 1000–5000 Kč

Kolik je součet? V nejlevnější variantě se dostaneme na 5500 korun za školní rok. A v „de luxe“ se částka blíží dvaceti tisícům –19 350 Kč!

  • A to nepočítáme nutné domácí vybavení – psací stůl (1000–10 000 Kč za „rostoucí“ stůl) a dobrou židli 800–6000 Kč), i vhodnou pracovní lampu (100–1300 Kč).

Druháci až mazáci

Takže jsme nepropadli a budeme potřebovat téměř všechno znovu. Nohy rostou a pravítka se lámou.

U všech těch plastových serepetiček dejte pozor na kvalitu. A dneska je z plastu i kružítko. Výrobci vezmou jakoukoli bizarní figuru, která zrovna mezi dětmi frčí, a oblepí a potisknou s ní všechno možné i nemožné. Vážně nevybírejte podle toho, jestli je na penálu bobtail s mašlí nebo ti kluci s ptakopyskem, navíc když se většinou jedná o fejky a s originální značkou (a snad tedy jakousi kvalitou) mají společného jen toho ptakopyska.


Autor: Isifa.cz

Náklady na vyšší třídy – jsou vyšší? Jak v čem. Pomůcky jsou sofistikovanější, přibývají potřeby na laboratorní práce, pláště, lupy, nejrůznější rýsovací potřeby, kalkulačky. Seznam požadavků na výtvarku v šesté třídě naprosto překonal veškeré mé vybavení, s nímž jsem kdysi vystačila na střední výtvarné škole. Prodraží se mimoškolní akce, lyžařské kurzy a podobně. Naopak odpadne družina, kterou můžete využívat do třetí, maximálně čtvrté třídy.

Výhodou je, že rodiče starších žáků nečeká taková darda v září, náklady jsou rozloženy rovnoměrněji v celém školním roce, jak pomůcky postupně dosluhují či přestávají vyhovovat; ani některé učebnice, zejména jazykové, se dnes nepoužívají striktně v určitém ročníku, ale po prázdninách se v nich plynule dál pokračuje.

Nejhlubší zářez na kontě ale vyryje samozřejmost dnešní doby – počítač, včetně připojení k internetu, ideálně s tiskárnou, ještě ideálněji barevnou. Sice tuhle sestavu má už dneska doma ledaskdo, ale přeci jen každý ne (osobně třeba tiskárnu doma nemám) a samozřejmost, s jakou školy předkládají úkoly, k nimž je tohle vybavení nutné, mě někdy zaráží. Východiskem z nouze může být návštěva knihovny, kde obvykle můžete na internet zdarma v rámci členství a tisknout za přiměřený poplatek.


Další náklady ve vyšších třídách:

  • kalkulačka
  • vybavení na laboratorní práce – lupa, plášť
  • výtvarné potřeby – uhly, pastely, anilinky, tempery, paleta, tuše, redispera…
  • rýsovací potřeby, úhloměry, mikrotužky…
  • jazykové i jiné učebnice, atlasy a pracovní sešity
  • doporučená a povinná četba
  • někde plavání (v rámci TV)
  • lyžařské kurzy
  • dražší výlety, více mimoškolních akcí
  • doma se bude hodit počítač s internetem i tiskárna
  • k dalším nepřímým nákladům můžeme s osamostatňováním dítěte započítat mobil, případně průkazku na dopravu ap.

Některé položky se postupem do vyšších ročníků naopak eliminují tak nějak samy od sebe. Místo patrového penálu se nosí propiska, na rameni plandá běžná kabela, za přezůvky se před školníkem vydávají lodičky na jehle, na desky se nehraje už dávno, s obaly se nikdo neobtěžuje a z trojúhelníku s ryskou přece docela dobře postačí ulomený růžek v délce pěti centimetrů…

„Nemusíš mít skoro nic. Ideální je hrát, že všechno máš, i když to nemáš, ono to nějak vyjde,“ radí čerstvá deváťačka, moje dcera. Jó, berušce už dávno odzvonilo.

Hypermarket, malý obchod, nebo e-shop?

hypermarket

  • + nižší ceny
  • + pořídíte vše od sešitů po švihadlo
  • – často nižší kvalita, neznačkové zboží, jde hlavně o nízkou cenu

specializovaná prodejna

  • + pestřejší výběr
  • + větší kvalita
  • + informovaný personál, který dokáže poradit
  • – vyšší cena

e-shop

  • + nižší cena, ale vzhledem k poštovnému (dopravě, doručení) se vyplatí pro hromadný nákup nebo dražší věci; ořezko z eshopu by se vám trochu prodražilo; při nákupu nad určitou částku někde nabízejí doručení zdarma
  • + klidný výběr z domova
  • – klasické úskalí nákupu přes internet – zboží si nemůžete osahat, vhodnější je tedy pro nákup vyzkoušených značek

Na čem ušetřit?

Tady platí korunka ke korunce. Náklady na jednotlivé věci jsou zdánlivě celkem zanedbatelné. Ale je jich moc.

  • jako oblečení na výtvarku poslouží dobře tátovo staré triko (dítě bude vypadat vážně umělecky)
  • podložkou na lavici na kreslení můžou být noviny, zbytek igelitového ubrusu, nebo prostě rozstřižená igelitka
  • boty na tělocvik a přezutí budou za chvíli malé, nenavádím k nakupování šuntů, které by ničily nohy a navíc mají nezaměnitelný odér továrny na pneumatiky (kdo ví, z čeho to vyrábějí), ale přehnané investice (do značek, vzhledu ap.) se tu nevyplatí
  • ujistěte se, jestli boty na tělocvik opravdu musí být jiné do tělocvičny a na ven (zvlášť když nejde o žádnou škváru ani antuku, ale často o gumové povrchy)
  • učebnice (hlavně pro vyšší ročníky) se dají sehnat v antikvariátech, najdete je v kamenné podobě (např. v Praze Myslíkově ulici), nebo na internetu (např. na Aukru nebo www.knihcentrum-antikvariat.cz); a můžete i prodávat; některé školy samy organizují burzy učebnic svých žáků
  • v módě jsou teď boxy na svačiny, jídlo se sice nerozpatlá, ale krabička zabere dost místa, pro mě zbytečnost, ale jak myslíte
  • láhev s pitím – stačí obyčejná lahvička od kupované vody ap., voda je voda, i bez obrázku Mickyho
  • většina škol umožňuje nechávání přezůvek ve škole, sáčky na bačkory jsou proto obvykle zbytečné, i když je někdy nabízejí v sadě s dalším vybavením
  • na sady vůbec pozor (vybavený penál, sada obalů pro xtou třídu) – vždycky obsahují něco, co zaručeně nebudete nikdy potřebovat
  • u požadavků typu kalkulačka bych se ujistila, jestli opravdu čtvrťák využije požadované funkce (argument, že je žáci využijí ve vyšších třídách, dokazuje odtržení kantora od reality; kde bude milé kalkulačce konec? „V naší škole je zřejmě černá díra, kde se školní pomůcky ztrácejí,“ píše jedna maminka na internetu)
  • doporučená a povinná školní četba – většinou se dá vypůjčit v knihovně, děti mají obvykle členství zdarma, vlastní knihovnu mají i některé školy; pozor – je třeba na to myslet včas, o stálice povinné četby, Babičky, Robinsony, Děti z Bullerbynu a spol. je zájem ve stejných termínech napříč republikou
  • blbiny typu guma ve tvaru figurek (3 ks za 110 korun – obyčejnou pořídíte do pětikoruny) kupujte, snad jen když potřebujete dítěti školu nějak osladit

Na čem nešetřit?

  • kvalitní školní taška je základ, rozdíly jsou obrovské; když vyberete dobře, vydrží řadu let, nehledě ke zdravotnímu aspektu
  • vyplatí se investovat např. do nelámavých pastelek, peníze se vám několikrát vrátí; taky pravítka a trojúhelníky se vyrábějí v nelámavé verzi; u levných trojúhelníků s ryskou ryska záhadně mizí zhruba po měsíci používání
  • podobně nedoporučuji levná kružítka, leda by se vám líbila prodavačka a chtěli byste mít záminku ji za týden opět vidět
  • ač se nabízí, že kelímek na vodu může nahradit jakákoli sklenička od marmelády nebo starý kelímek na zuby, zrovna tady bych pořídila speciální kelímek proti nechtěnému vylití vody, stojí kolem dvaceti korun
  • pokud to jen trochu jde, neupírala bych dětem možnost zúčastnit se mimoškolních akcí, nejsou levné, ale pro dítě bývají důležité, nejen že nejsou vyčleněni z kolektivu spolužáků, získají společné zážitky, ale nezažít stokilovou paní učitelku na karnevalu v kostýmu břišní tanečnice, to by byla škoda

Rada na konec – základ úspěchu je dobře vybavený soused v lavici!

Nikdy dřív jsem si náklady na školní výdaje takhle nespočítala. Jen jsem se divila, kam mi mizí peníze. Jeden nákup, druhý nákup, třetí nákup… Jedno dítě, druhé dítě, třetí dítě. Vlastně je s podivem, že jsme to vždycky nějak ufinancovali. Sakra, jdu zkontrolovat stav účtu.

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 »