Podnikatelky vědí, co jejich byznys potřebuje. Vyslyší však vláda jejich hlas?

16. 4. 2020
Doba čtení: 8 minut

Sdílet

Ilustrační obrázek
Autor: Depositphotos – AllaSerebrina
Ilustrační obrázek
Kritika opatření, která mají pomoci byznysu zvládnout situaci, do níž se v důsledku koronavirové pandemie dostal, zaznívá z mnoha stran. A ženy se přidávají.

Přibývají i studie, jež poukazují na to, že jsou ženy, včetně podnikatelek, opatřeními postiženy na více úrovních. Co by jim teď k přežití nejúčinněji pomohlo?

Co se dozvíte v článku
  1. U podnikatelek vystřídala důvěru skepse
  2. Návrhy konkrétních opatření
  3. Ženy chybí při rozhodování a vláda je nekoncepční
  4. Schází mikropůjčky, některé podnikatelky končí
  5. Proč zohledňovat genderovou a věkovou diverzitu

U podnikatelek vystřídala důvěru skepse

Také mezi podnikatelkami důvěru v účinná vládní opatření rychle vystřídala skepse. Zpočátku, kdy byly vládou přislíbeny různé nástroje na podporu podnikatelů, jsme neměly obavy, že s jejich pomocí toto pro všechny nesnadné období přežijeme a zvládneme. Nyní, kdy se po spuštění prvních programů ukazuje, že zdaleka ne všichni (pokud vůbec někdo) na ně dosáhnou, střídá naše původní nadšení velká nejistota a skepse, píše Českomoravská asociace podnikatelek a manažerek (ČMAPM) ve svém dopise adresovaném předsedovi vlády Andreji Babišovi. Kateřina Haring, prezidentka ČMAPM a viceprezidentka Celosvětové asociace žen podnikatelek FCEM, ho podepsala jménem podnikatelek činných ve dvaceti různých oborech průmyslu i služeb, které nyní přicházejí o tržby a zisk, zatímco jim k úhradě zůstávají vysoké fixní náklady.

Tvrdí, že v prvních dvou programech COVID žádná ze žádajících členek ČMAPM na půjčku nedosáhla. Dokonce ještě ani nedostaly odpověď na své žádosti z první vlny. Druhá byla zastavena po dvou hodinách od spuštění, kdy nebyla ani šance za dvě hodiny požadované dokumenty vyplnit, dodává s tím, že COVID II je navíc zaměřený pouze na regionální firmy, nikoliv na ty pražské, a podmínky programů jsou tak limitující, že na ně malé firmy ani nemají šanci dosáhnout. Poukazuje také na to, že i program Antivirus přišel pozdě, stejně jako na to, že ošetřovné pro OSVČ, které si platí potřebné pojištění, by mělo být samozřejmostí a nikoliv jen mimořádným opatřením. Další informace o ošetřovném pro OSVČ čtěte v článku Žádost o ošetřovné pro OSVČ lze již podat, ministerstvo zveřejnilo formulář.

Z pozice viceprezidentky celosvětové asociace žen podnikatelek FCEM, která má více než 70letou historii, si dovolím poznamenat, že vlády takových zemí, jako jsou Německo, Francie, Švýcarsko či USA, jasně deklarují, že v současné situaci je potřeba zamezit bankrotům firem a pomoci jim s výpadkem likvidity tak, aby mohly dále ekonomicky existovat, poukazuje Kateřina Haring v dopise na zahraniční příklady. V těchto zemích je podle ní pomoc rychlá a administrativně nenáročná, celostátní programy jsou doplněné programy regionálními tak, aby pomoc rychle proudila k žadatelům. To vše s cílem zachovat oběh peněz v ekonomice a nezpůsobit odbytovou krizi, která bude po tak dlouhém výpadku následovat, dodává. A upozorňuje, že mnohé firmy z ČMAPM, které dávají v Česku práci celkem 25 tisícům lidí, začaly výpadky pociťovat již v únoru a nyní mají výpadky v platbách často již kvůli druhotné platební neschopnosti.

Návrhy konkrétních opatření

Podnikatelky z ČMAPM proto navrhují také řadu konkrétních opatření – například aby na pomoc dosáhly všechny firmy a OSVČ postižené opatřeními souvisejícími s koronavirem, daňové prázdniny, finanční injekce pro malé a střední firmy i OSVČ nebo třeba úvěry, záruky či konsolidace firemních půjček. Nabízejí otevřenou diskusi a také své zkušenosti pro práci v poradních orgánech, které se na řešení stávající situace podílí. Vzhledem k tomu, že české podnikatelky v naprosté většině provozují malé a střední firmy a jako ekonomické subjekty jsou současnou krizí nejvíce ohrožené, pokládáme to za potřebné a žádoucí, dodávají.

Ženy chybí při rozhodování a vláda je nekoncepční

Lenka Šťastná, prezidentka organizace Business & Professional Women CR (BPWCR), podotýká, že situace dopadá na celou společnost a klíčové je zdravotní hledisko a dostupnost relevantních informací. Zároveň však upozorňuje, že podnikání žen je nyní do značné míry omezené i vzhledem k tomu, v jakých sektorech se ženy v podnikání pohybují. Současně na ně podle ní více dopadají další opatření – vzhledem k uzavření škol na nich častěji než na mužích leží (ve společnosti, která je stále ještě velmi patriarchální) tíha domácí výuky a související péče o děti v rodině. V takovéto situaci je poté efektivní výkon podnikatelské činnosti obtížný, ne-li nemožný. Samostatnou kapitolou je situace rodičů samoživitelů, říká Lenka Šťastná, která ve svých odpovědích shrnuje i názory dalších členek sítě, kterou vede. Myslí si, že by za tuto činnost měly být ženy ohodnocené spíše jednotnou částkou na dítě než ošetřovným, ze kterého těžko pokryjí všechny životní náklady.

Za zásadnější problém však Lenka Šťastná také považuje absenci žen ve veřejném prostoru a v debatě, jakým směrem se bude společnost vyvíjet ve stávající situaci a jaké budou další kroky v budoucnu. Ukazuje se také, že ženy často pracují jako OSVČ či vedou menší firmy a nejsou ve vrcholných pozicích top managementů největších firem, kvůli čemuž zůstávají přehlíženy. Témata, která ženy řeší více než muži, tak nemá kdo ve veřejném prostoru sdělovat a lobbovat za jejich efektivní řešení, objasňuje. K tématu si přečtěte také komentář Mají ženy vztek? Měly by. Při rozhodování v krizi není jejich hlas slyšet.

A připomíná, že současná situace jednoznačně ukázala na řadu věcí: například na podhodnocenou práci žen, byť vykonávají klíčové pozice při řešení stávající situace (převaha žen ve zdravotnictví, sociálních službách, obchodu apod.), nerovnoměrné rozdělení rolí, nevyužívání znalostních kapacit žen při řešení stávající situace, nedostatečná reprezentace žen ve veřejném prostoru a v médiích nebo nutnost adaptovat se na moderní systémy a zavádět flexibilní formy práce. Na to ženy a studie často upozorňovaly, nicméně zůstávaly nevyslyšeny, a proto častěji volily vlastní podnikání jako alternativu k flexibilní formě práce, říká Lenka Šťastná a dodává, že podle hodnocení členek BPWCR současná situace hlavně poukázala na celkovou nekoncepčnost vlády. Není se na co spolehnout a to nejen teď, v této situaci, ale celkově – rozhodnutí se mění každý den a jsou protichůdná, uzavírá.

Schází mikropůjčky, některé podnikatelky končí

Ani Petra Kubálková, zakladatelka organizace Cats2Cats, která se nyní podílí také na projektu Rozjeď trh (propojuje firmy, co se snaží udržet, s klienty), nemá ze své sítě podnikatelek dobré zprávy. V oblastech pořádání konferencí a akcí nebo konzultačních činností všeho druhu není podle ní situace zrovna růžová. Akce jsou stornované, vstupné vrácené nebo se podnikatelky snaží přejít na on-line řešení. Objevují se už i případy kaváren, které po neúspěšném jednání s majiteli prostor uvažují o tom, že skončí. Podle Petry Kubálkové jde zejména o podniky, které se zaměřovaly na nápoje a drobné občerstvení, na klientelu rodičů. OSVČ pak dělají, co se dá, doučují, učí jazyky, zveřejňují videa o cvičení, prostě se snaží udržet. Podle toho, co vidíme v naší síti, ti nejmenší jsou nejaktivnější a nejvíc inovují, vysvětluje. Více si přečtěte také v článku OSVČ a malí podnikatelé hledají urputně řešení, aby stav nouze vůbec přežili.

Vedle odpuštění sociálního a zdravotního pojištění by přitom podle ní nejvíce pomohl odklad daní. Určitě by také pomohl, a je kardinální chyba, že v ČR není, systém podpory formou mikropůjček s odkladem splácení, právě pro ty nejmenší – OSVČ a mikropodnikatele. Ale bohužel, ministerstva na toto téma neslyší, tvrdí Petra Kubálková. Aktuální situace totiž podle ní také jasně ukázala, že mikropodnikatelé u nás nemají přístup k systémovému rozvoji podnikání a k jeho udržitelnosti. Drží se na nule nebo minimálním výdělku a zároveň se snaží zaměstnávat férově, což jim, jak říká Petra Kubálková, nyní láme vaz. Ukázalo se, že ačkoliv jsou ochotní inovovat, nemají přístup ke zdrojům (a nebudou mít), které by nakoply jejich podnikání. Ti nejmenší jsou pod největším tlakem – nejen ze strany finančních a kontrolních úřadů, ale také nemají dostatečné finanční rezervy. V naší síti budeme situaci sledovat, ale už nyní víme, že některé ženy s podnikáním končí, uzavírá svou sondu do nynější situace podnikatelek.

školení červen - ochrana os. údajů

Proč zohledňovat genderovou a věkovou diverzitu

O to, aby byl hlas žen, a to zdaleka nejen z podnikatelského prostředí, slyšet, se snaží i Česká ženská lobby, která vedle Českomoravské asociace podnikatelek a manažerek, Business & Professional Women CR a Cats2Cats sdružuje také další organizace svou činností zacílené primárně na ženy. Česká ženská lobby je podepsaná pod dalším otevřeným dopisem, který se zasazuje o to, aby měly ženy vyvážené zastoupení v poradních orgánech (jako je například nový NERV) rozhodujících o opatřeních, která se v současné situaci přijímají a do budoucna přijímat budou. Adresovaný je tentokrát zmocněnkyni vlády pro lidská práva Heleně Válkové. Žádáme, aby vláda jednala v souladu se svojí politikou pro rovnost žen a mužů a ve všech komisích a pracovních skupinách, které vznikají a rozhodují o strategiích zvládnutí nejen ekonomické krize, zohledňovala genderovou a věkovou diverzitu, stojí v dopise. Bez zapojení žen do řešení krizové situace nemůže podle textu, který podepsala předsedkyně České ženské lobby Eliška Kodyšová, vláda dosáhnout úspěchu. Součástí dopisu je i seznam doporučených odbornic, o nichž by mohla vláda do poradních orgánů uvažovat.

Eliška Kodyšová pro server Podnikatel.cz uvádí, že z Úřadu vlády ČR již přišla odpověď – Helena Válková prý nedostatek žen v NERVu s ministrem Karlem Havlíčkem, který za ním stojí, řešila. Obrátili jsme se proto s naší výzvou přímo na něj a s odpovědí nejsme moc spokojené. Jeho odpověď zněla, že bude ženy v NERV rád angažovat, chce se ale rozhodovat podle odborných předpokladů a ochoty odborníků se zapojit a nikoliv podle genderu, vysvětluje Eliška Kodyšová. Z odpovědi tak podle ní není jasné, zda oslovil stejný počet žen jako mužů a ty odmítly, nebo nepovažuje ženy za dostatečné odbornice. Opět se prokazuje, že ženy musí mít obvykle více dovedností než muži, pokud chtějí uspět. Jestli pan ministr nevnímá vyrovnané zastoupení žen a mužů jako prioritu a nevěnuje mu dostatečnou pozornost a potřebnou snahu ženy přizvat, nemůže dojít k většímu počtu žen v NERV. Tím naše společnost jednoznačně ztrácí, dodává.

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