[]
Näkökulma | Voittaja vie kaiken -ilmiö yleistyy kulttuurissa, kun ihmisten rahat ovat tiukalla | Paikalliset | Hämeen Sanomat { if (!Hyphenopoly.hyphenators) { return } Hyphenopoly.hyphenators[”HTML”].then((hyphenator) => { for (const itemSelector in Hyphenopoly.setup.selectors) { const containerNode = document.querySelector(containerSelector) const itemNodeList = containerNode.querySelectorAll(itemSelector) itemNodeList.forEach((itemNode) => { hyphenator(itemNode, itemSelector) }) } }) } ]]> { if (!previewAdUnits.includes(key)) { delete gamAdUnits[key]; elementsToHide.push(key); } }); // hide deleted adslots window.addEventListener(’load’, (event) => { elementsToHide.forEach(key => { if (document.getElementById(adSlotPrefix+key) != null) { let elementParent = document.getElementById(adSlotPrefix+key).parentElement; if (elementParent != null) { elementParent.style.display = ”none”; } } }); }); } function getCookie(name) { name = name + ’=’; const decodedCookie = decodeURIComponent(document.cookie); const cookies = decodedCookie.split(’;’); for (let i = 0; i 0) { generateTargetingParameters(”CxSegments”, cXsegmentIds); } if (Array.isArray(topics)) { let topicsAndMarketingCategories = []; if (topics.length > 0) { topicsAndMarketingCategories = topicsAndMarketingCategories.concat(topics); } if (appendMarketingCategoriesToTopics && Array.isArray(marketingCategories) && marketingCategories.length > 0) { topicsAndMarketingCategories = topicsAndMarketingCategories.concat(marketingCategories); } if (topicsAndMarketingCategories.length > 0) { generateTargetingParameters(’aihe’, topicsAndMarketingCategories); } } if (Array.isArray(marketingCategories) && marketingCategories.length > 0) { generateTargetingParameters(’mainoskategoria’, marketingCategories); } if (Array.isArray(advertisers) && advertisers.length > 0) { generateTargetingParameters(’mainostaja’, advertisers); } if (brandSafety) { generateTargetingParameters(’brand_safety’, brandSafety); } if (brandSafetyScore) { generateTargetingParameters(’brand_safety_score’, brandSafetyScore); } if (articleid) { generateTargetingParameters(’articleid’, articleid); } if (isPreview) { generateTargetingParameters(’is_preview’, ”1”); generateTargetingParameters(”url_params”, ”test”); } // Set general ad settings if (enableLazyLoad == true) { googletag.pubads().enableLazyLoad({ fetchMarginPercent: fetchMarginPercent, renderMarginPercent: renderMarginPercent, mobileScaling: mobileScaling }); } if (collapseEmptyDivs == true) { googletag.pubads().collapseEmptyDivs(true); } if (disableInitialLoad == true) { googletag.pubads().disableInitialLoad(); } if (enableSRA == true) { googletag.pubads().enableSingleRequest(); }googletag.enableServices(); // Handle notification texts / hide empty ad slots googletag.pubads().addEventListener(’slotRenderEnded’, function(event) { if (event.slot && typeof event.slot.getSlotId === ’function’) { let slotId = event.slot.getSlotId(); if (slotId && typeof slotId.getDomId === ’function’) { let domId = slotId.getDomId(); if (domId && document.getElementById(domId)) { let element = document.getElementById(domId); let wrapper = element.parentElement; // Handle filled ad request if (!event.isEmpty) { let iframe = document.querySelector(”#”+domId+” > [id^=google_ads_iframe_] > iframe”); if (iframe) { // Accessibility: remove landmarks iframe.removeAttribute(”role”); } // Ad labels and skip links if (wrapper && !(event.slot && typeof event.slot.getOutOfPage === ’function’ && event.slot.getOutOfPage() === true)) { function handleLabelsAndSkipLinks() { let elementStyle = window.getComputedStyle(element); if (wrapper.offsetHeight – (parseInt(elementStyle.marginTop, 10) + parseInt(elementStyle.marginBottom, 10)) > 100) { let adSlotKey = domId.replace(adSlotPrefix, ”); let adUnit = gamAdUnits[adSlotKey]; let currentConf = null; let adLabels = false; if (adUnit) { if (pageType === ’article’) { currentConf = adUnit.article_config; } else if (pageType === ’section’) { currentConf = adUnit.section_config; } adLabels = currentConf.show_labels; // If paywall is shown to user, use paywall specific config if (pageType === ’article’ && !userHasPermission && typeof currentConf.paywall_config !== ’undefined’ && currentConf.paywall_config.show_labels !== ’undefined’ && !isPreview) { adLabels = currentConf.paywall_config.show_labels; } else if (isComicArticle == true && typeof currentConf.comic_config !== ’undefined’ && currentConf.comic_config.show_labels !== ’undefined’) { adLabels = currentConf.comic_config.show_labels; } } // Show labels if necessary if (adLabels && !wrapper.querySelector(”.diks-display-ad__notice”)) { var adNoticeTop = document.createElement(”div”); var adNoticeBottom = document.createElement(”div”); adNoticeTop.classList.add(”diks-display-ad__notice”, ”diks-display-ad__notice–before”); adNoticeBottom.classList.add(”diks-display-ad__notice”, ”diks-display-ad__notice–after”); let noticeTextTop = document.createTextNode(inContentAdTextTop); let noticeTextBottom = document.createTextNode(inContentAdTextBottom); adNoticeTop.appendChild(noticeTextTop); adNoticeBottom.appendChild(noticeTextBottom); // Render notification texts for a single ad wrapper.insertBefore(adNoticeTop, wrapper.childNodes[0]); wrapper.insertBefore(adNoticeBottom, null); } // Create a skip link if (adUnit && adUnit.type === ’normal’ && skipLinksEnabled && !wrapper.querySelector(”.diks-display-ad__skip-link”)) { // Render render skip for a single ad let skipLinkStartElement = document.createElement(’a’); let skipLinkText = document.createTextNode(’Ohita mainos’); let skipLinkEndElement = document.createElement(’div’); let skipLinkEndElementId = ’diks-skip-link-’ + domId; skipLinkStartElement.appendChild(skipLinkText); skipLinkStartElement.classList.add(’diks-display-ad__skip-link’, ’diks-button’, ’diks-button–primary’, ’diks-a11y__screen-reader’, ’diks-a11y__screen-reader–focusable’); skipLinkStartElement.href = ’#’ + skipLinkEndElementId; skipLinkEndElement.id = skipLinkEndElementId; wrapper.insertBefore(skipLinkStartElement, wrapper.childNodes[0]); wrapper.insertBefore(skipLinkEndElement, null); } if (!adLabels) { element.classList.add(”diks-display-ad__unit–with-margin”); } } else { element.classList.remove(”diks-display-ad__unit–with-margin”); } } handleLabelsAndSkipLinks(); let resizeObserver = new ResizeObserver(function(entries) { entries.forEach(function(entry) { handleLabelsAndSkipLinks(); }); }); resizeObserver.observe(wrapper); } } else if (wrapper) { // Hide wrapper when ad request is unfilled console.log(”hiding: ”+domId); wrapper.style.display = ”none”; } } } } }); window.adSetupReady = true; displayAdsIfPossible(); }; }); }(window.googletag = window.googletag || {})); ]]>
Omat tiedot’); var logoutForm = stringToHTML(’
Coldplayn neljä keikkaa vetivät Helsingin Olympiastadionille yhteensä noin 170 000 ihmistä. Milja Kungas
Tuoreen tutkimuksen mukaan Coldplayn neljä jättikonserttia riittivät heilauttamaan koko tapahtuma-alan myyntilukuja tänä vuonna.
Ilkka Kuosmanen
7.10.2024 19:10
Kulttuurissa eletään nyt kovia aikoja. Hallitus mätkii valtionosuuslaitoksia säästöillä. Samaan aikaan keikkajärjestäjien kulut ovat kasvamassa esimerkiksi arvonlisäveron korotuksen ja yleisen kustannustason nousun myötä. Lipunhinnoissa olisi siis korotuspainetta, mutta ihmisillä ei oikein ole, millä maksaa nykyisiäkään hintoja.
Haluatko lukea koko jutun?
Tilaa digi ja pääset lukemaan kaikki Hämeen Sanomien sisällöt.
Tilaa 6 kk 4,90 €/kk Tilaa 2 kk 15 €/kk
- Hameensanomat.fi-verkkopalvelun rajaton käyttöoikeus vuoden jokaisena päivänä
- Näköislehti
- Mobiilisovelluksen käyttöoikeus (iOS ja Android)
- Lukuoikeus sinulle ja kolmelle perheenjäsenellesi
Mainos: Rusta
1) { document.querySelector(’html’).classList.add(’diks-user-agent–ios’); } ]]> this.handleMouseDown(e)); this.slider.addEventListener(’mouseleave’, () => this.handleMouseLeave()); this.slider.addEventListener(’mouseup’, () => this.handleMouseUp()); this.slider.addEventListener(’mousemove’, (e) => this.handleMouseMove(e)); this.slider.addEventListener(’click’, (e) => this.handleClick(e)); } handleMouseDown(e) { this.isDown = true; this.slider.classList.add(’diks-navigation–draggable-active’); this.startX = e.pageX – this.slider.offsetLeft; this.scrollLeft = this.slider.scrollLeft; this.preventClick = false; } handleMouseLeave() { this.isDown = false; this.slider.classList.remove(’diks-navigation–draggable-active’); } handleMouseUp() { this.isDown = false; this.slider.classList.remove(’diks-navigation–draggable-active’); } handleMouseMove(e) { if (!this.isDown) return; e.preventDefault(); const x = e.pageX – this.slider.offsetLeft; const walk = (x – this.startX) * 3; //scroll-fast this.slider.scrollLeft = this.scrollLeft – walk; this.preventClick = true; } handleClick(e) { if (this.preventClick) { e.preventDefault(); } } } // Set the draggable navs (multiple) to handle their scrollbars let scrollableNavs = document.querySelectorAll(’.diks-navigation–draggable’); // Make draggable navigation draggable if ( scrollableNavs ) { scrollableNavs.forEach(function(element) { new HorizontalScrollDragger(element); }); } // Handle has-scrollbars class adding and removing function handleScrollableNavScrollbars(scrollableNavElement) { // Debugging: console.log(”Scroll width: ” + scrollableNavElement.scrollWidth + ” & client width: ” + scrollableNavElement.clientWidth); // If scrollable area is wider (scrollWidth) than what’s visible (clientWidth) the element has scrollbars if ( scrollableNavElement.scrollWidth > scrollableNavElement.clientWidth ) { scrollableNavElement.classList.add(’diks-navigation–draggable-has-scrollbars’); scrollableNavElement.parentElement.classList.add(’diks-navigation-wrapper–has-scrollbars’); } // Remove the has-scrollbars class if it exists but shouldn’t (element does not have scrollbars) else if ( scrollableNavElement.classList.contains(’diks-navigation–draggable-has-scrollbars’) ) { scrollableNavElement.classList.remove(’diks-navigation–draggable-has-scrollbars’); scrollableNavElement.parentElement.classList.remove(’diks-navigation-wrapper–has-scrollbars’); } } // If scrollable nav exists add (or remove) necessary classes // ”DOMContentLoaded” does not wait for styles to load and styles affect the size of the scrollable nav directly so we have to use ”load” instead window.addEventListener(’load’, (event) => { if ( scrollableNavs ) { scrollableNavs.forEach(function(element) { handleScrollableNavScrollbars(element); }); } }); // Check if scrollable nav has scrollbar window.addEventListener(’resize’, function(event){ if ( scrollableNavs ) { scrollableNavs.forEach(function(element) { handleScrollableNavScrollbars(element); }); } }); ]]> 1 ? true : false); // Initialize lightGallery(gallery, { autoplay: galleryHasMultipleImages, counter: galleryHasMultipleImages, download: false, exThumbImage: thumbnailSource, hideControlOnEnd: true, licenseKey: ”96BAAD7E-3BF04397-BBB55AE3-6D5A2C0B”, loop: false, plugins: [lgAutoplay, lgFullscreen, lgThumbnail, lgZoom], selector: ’.diks-gallery__link’, mobileSettings: { controls: true, showCloseIcon: true }, strings: { closeGallery: ’Sulje galleria’, toggleMaximize: ’Maksimointi’, previousSlide: ’Edellinen’, nextSlide: ’Seuraava’, download: ’Lataa’, playVideo: ’Katso video’, mediaLoadingFailed: ’Sisällön lataus epäonnistui’, }, autoplayPluginStrings: { toggleAutoplay: ’Automaattinen toisto’ }, fullscreenPluginStrings: { toggleFullscreen: ’Kokoruututila’ }, thumbnailPluginStrings: { toggleThumbnails: ’Pikkukuvat’ }, zoomPluginStrings: { zoomIn: ’Suurenna’, zoomOut: ’Pienennä’, viewActualSize: ’Näytä täysikokoisena’ } }); // After closing LightGallery return focus to the image link that opened the gallery gallery.addEventListener(’lgAfterClose’, () => { galleryImageLinks[0].focus(); }); }); ]]> { // Stash the event so it can be triggered later deferredPrompt = e; const enablePrompt = 0; if(!enablePrompt) { e.preventDefault(); } // Update the UI to notify the user they can install PWA pwaShowInstallationOption(); // Handle installation document.querySelectorAll(’.js-diks-apps-pwa-installation-button’).forEach(function(button) { button.addEventListener(’click’, (e) => { // Show the prompt deferredPrompt.prompt(); // Wait for user to respond deferredPrompt.userChoice.then((choiceResult) => { if (choiceResult.outcome === ’accepted’) { console.log(’PWA: Installed (prompt)’); dataLayer.push({ ’event’: ’PWA.installation’, ’eventData’: ’success’ }); } else { console.log(’PWA: User dismissed installation prompt’); dataLayer.push({ ’event’: ’PWA.installation’, ’eventData’: ’canceled’ }); } deferredPrompt = null; }); }); }); }); // iOS installation process (show instructions modal) if (!navigator.standalone) { var userAgent = navigator.userAgent.toLowerCase(); var iPhoneUser = (/iphone/.test(userAgent)); var iPadUser = (/ipad/.test(userAgent) || (/macintosh/.test(userAgent) && navigator.maxTouchPoints > 1)); var safariUser = (/^(?!.*(brave|chrome|crios|duckduckgo|edgeios|firefox|fxios|opios|ucbrowser|yabrowser)).*safari.*$/.test(userAgent)); if (safariUser && (iPhoneUser || iPadUser)) { // Update the UI to notify the user they can install PWA pwaShowInstallationOption(); // Instructions var modals = document.querySelectorAll(’.js-diks-apps-pwa-ios-instructions’).forEach(function(element) { // Position on screen based on device if (iPhoneUser) { element.classList.add(’diks-apps__pwa-ios-modal–bottom’); } else if (iPadUser) { element.classList.add(’diks-apps__pwa-ios-modal–top’); } }); // Handle modal instructions from installation button document.querySelectorAll(’.js-diks-apps-pwa-installation-button’).forEach(function(button) { button.addEventListener(’click’, (e) => { // Show first modal document.querySelector(’.js-diks-apps-pwa-ios-instructions’).classList.toggle(’diks-apps__pwa-ios-modal–is-visible’); dataLayer.push({ ’event’: ’PWA.instructions.shown’, ’eventData’: ’iOS’ }); }); }); } } ]]>Lähde