1<!DOCTYPE html> 2<!--[if IE 7]> 3<html class="ie ie7" lang="fi"> 4<![endif]--><!--[if IE 8]> 5<html class="ie ie8" lang="fi"> 6<![endif]--><!--[if IE 9]> 7<html class="ie ie9" lang="fi"> 8<![endif]--><!--[if !(IE 7) | !(IE 8) | !(IE 9)]><!--><html lang="fi"> 9<!--<![endif]--> 10 11 12 13<head> 14 <meta charset="UTF-8">
15<script type="text/javascript"> 16/* <![CDATA[ */ 17var gform;gform||(document.addEventListener("gform_main_scripts_loaded",function(){gform.scriptsLoaded=!0}),document.addEventListener("gform/theme/scripts_loaded",function(){gform.themeScriptsLoaded=!0}),window.addEventListener("DOMContentLoaded",function(){gform.domLoaded=!0}),gform={domLoaded:!1,scriptsLoaded:!1,themeScriptsLoaded:!1,isFormEditor:()=>"function"==typeof InitializeEditor,callIfLoaded:function(o){return!(!gform.domLoaded||!gform.scriptsLoaded||!gform.themeScriptsLoaded&&!gform.isFormEditor()||(gform.isFormEditor()&&console.warn("The use of gform.initializeOnLoaded() is deprecated in the form editor context and will be removed in Gravity Forms 3.1."),o(),0))},initializeOnLoaded:function(o){gform.callIfLoaded(o)||(document.addEventListener("gform_main_scripts_loaded",()=>{gform.scriptsLoaded=!0,gform.callIfLoaded(o)}),document.addEventListener("gform/theme/scripts_loaded",()=>{gform.themeScriptsLoaded=!0,gform.callIfLoaded(o)}),window.addEventListener("DOMContentLoaded",()=>{gform.domLoaded=!0,gform.callIfLoaded(o)}))},hooks:{action:{},filter:{}},addAction:function(o,r,e,t){gform.addHook("action",o,r,e,t)},addFilter:function(o,r,e,t){gform.addHook("filter",o,r,e,t)},doAction:function(o){gform.doHook("action",o,arguments)},applyFilters:function(o){return gform.doHook("filter",o,arguments)},removeAction:function(o,r){gform.removeHook("action",o,r)},removeFilter:function(o,r,e){gform.removeHook("filter",o,r,e)},addHook:function(o,r,e,t,n){null==gform.hooks[o][r]&&(gform.hooks[o][r]=[]);var d=gform.hooks[o][r];null==n&&(n=r+"_"+d.length),gform.hooks[o][r].push({tag:n,callable:e,priority:t=null==t?10:t})},doHook:function(r,o,e){var t;if(e=Array.prototype.slice.call(e,1),null!=gform.hooks[r][o]&&((o=gform.hooks[r][o]).sort(function(o,r){return o.priority-r.priority}),o.forEach(function(o){"function"!=typeof(t=o.callable)&&(t=window[t]),"action"==r?t.apply(null,e):e[0]=t.apply(null,e)})),"filter"==r)return e[0]},removeHook:function(o,r,t,n){var e;null!=gform.hooks[o][r]&&(e=(e=gform.hooks[o][r]).filter(function(o,r,e){return!!(null!=n&&n!=o.tag||null!=t&&t!=o.priority)}),gform.hooks[o][r]=e)}}); 18/* ]]> */ 19</script>
19 20 21 <meta http-equiv="x-ua-compatible" content="IE=edge"> 22 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 23 <meta name="format-detection" content="telephone=no"> 24 <link rel="icon" type="image/png" sizes="32x32" href="https://hymy.fi/wp-content/themes/om-hymy-theme/favicon-32x32.png"> 25 <link rel="icon" type="image/png" sizes="16x16" href="https://hymy.fi/wp-content/themes/om-hymy-theme/favicon-16x16.png"> 26 <link rel="apple-touch-icon" sizes="57x57" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-57.png"> 27 <link rel="apple-touch-icon" sizes="60x60" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-60.png"> 28 <link rel="apple-touch-icon" sizes="72x72" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-72.png"> 29 <link rel="apple-touch-icon" sizes="114x114" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-114.png"> 30 <link rel="apple-touch-icon" sizes="120x120" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-120.png"> 31 <link rel="apple-touch-icon" sizes="144x144" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-144.png"> 32 <link rel="apple-touch-icon" sizes="152x152" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-152.png"> 33 <link rel="apple-touch-icon" sizes="180x180" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-180.png"> 34 <link rel="manifest" href="https://hymy.fi/wp-content/themes/om-hymy-theme/manifest.json"> 35 36 37 38 39
39<script src="https://use.typekit.net/lyn0ejh.js"></script>
39
39<script>try{Typekit.load({ async: true });}catch(e){}</script>
39 <link rel="profile" href="http:mpg.org/xfn/11"> 40 <link rel="apple-touch-icon" href=""> 41 <link rel="shortcut icon" href=""> 42 43 <!-- Head tag start, do not remove --> 44 45<!-- // hymy.fi--> 46
47<script type="text/javascript"> 48 49 const timerStart = Date.now(); 50 window.timerStart = timerStart; 51 var dfpDebug = document.location.href.indexOf("dfpdebug=1") > -1 ? true : false; 52 var cmpDebug = document.location.href.indexOf("cmpdebug=1") > -1 ? true : false; 53 var testSRA = document.location.href.indexOf("testsra=1") > -1 ? true : true; 54 55</script>
55 56 57<meta name="facebook-domain-verification" content="zufmuphmfyae7u4gdbgu0ppy2ycmld"> 58 59<style> 60 61 /*.article__body [id*='dfp__'] iframe {width: auto !important;}*/ 62 html.no-scroll, body.no-scroll { 63 overflow: hidden !important; 64 } 65 @media screen and (max-width: 1020px) { 66 body.single-post [data-google-query-id] { 67 margin: 30px 0px !important; 68 clear: both !important; 69 display: flex; 70 justify-content: center; 71 } 72 body.category [data-google-query-id] { 73 margin: 0px 0px 30px !important; 74 clear: both !important; 75 } 76 } 77 body.category-horoskooppi [data-google-query-id] { 78 margin: 0px 0px 50px !important; 79 clear: both !important; 80 } 81 @media screen and (min-width: 1020px) { 82 #dfp__desk-12 {min-height: 408px} 83 .bbp-replies .bbp-dfp-slots {display: flex !important; justify-content: center !important} 84 } 85 86</style> 87
88<script src="https://storage.googleapis.com/om-gravito-cmp/om_gravito_stubScriptTag.js?rnd=1"></script>
88 89
90<script> 91 92 if (location.href.indexOf('testnewcmp=2') == -1) { 93 94 var cookieMatch = document.cookie.match(/(?:^|;\s*)TcString=([^;]+)/); 95 var tcString = cookieMatch ? decodeURIComponent(cookieMatch[1]) : null; 96 97 if (tcString || (window.tcstring_decoded && window.tcstring_decoded.tcString)) { 98 99 if (cmpDebug) {console.log('Testing local __tcfapi...')} 100 101 var decoded = window.tcstring_decoded || {}; 102 103 var tcData = { 104 tcString: tcString || decoded.tcString, 105 version: 2, 106 gdprApplies: true, 107 cmpId: decoded.cmpId || 0, 108 cmpVersion: decoded.cmpVersion || 0, 109 tcfPolicyVersion: 0, 110 vendorListVersion: decoded.vendorListVersion || 0, 111 eventStatus: "tcloaded", 112 cmpStatus: "loaded", 113 purpose: decoded.purpose || { consents: {}, legitimateInterests: {} }, 114 vendor: decoded.vendor || { consents: {}, legitimateInterests: {} }, 115 publisher: decoded.publisher || { consents: {}, legitimateInterests: {} }, 116 specialFeatureOptins: decoded.specialFeatureOptins || {} 117 }; 118 119 var __tcfapiListeners = {}; 120 var __tcfapiNextId = 1; 121 122 window.__tcfapi = function(command, version, callback, parameter) { 123 124 var haveValidString = !!tcData.tcString; 125 126 switch (command) { 127 case "ping": 128 callback({ 129 cmpLoaded: true, 130 cmpStatus: "loaded", 131 tcfPolicyVersion: tcData.tcfPolicyVersion 132 }, true); 133 break; 134 case "getTCData": 135 callback(haveValidString ? tcData : null, haveValidString); 136 break; 137 case "getTCString": 138 callback(haveValidString ? tcData.tcString : null, haveValidString); 139 break; 140 case "addEventListener": 141 var id = __tcfapiNextId++; 142 __tcfapiListeners[id] = callback; 143 callback(haveValidString ? tcData : null, haveValidString); 144 break; 145 case "removeEventListener": 146 if (parameter && __tcfapiListeners[parameter]) { 147 delete __tcfapiListeners[parameter]; 148 callback(true, true); 149 } else { 150 callback(false, false); 151 } 152 break; 153 default: 154 callback(null, false); 155 } 156 157 if (cmpDebug) { 158 console.log("[__tcfapi call]", {command, version, parameter}); 159 console.log("[__tcfapi response]", { 160 time: (Date.now() - timerStart) + 'ms', 161 command: command, 162 returnedTcString: haveValidString ? tcData.tcString : null, 163 decodedObject: decoded || null 164 }); 165 } 166 167 }; 168 169 } 170 171 } 172 173 if (cmpDebug) { 174 __tcfapi('getTCData', 2, (tcData, success) => { 175 console.log('testdata3: ' + (Date.now() - timerStart) + 'ms --> ', tcData, success); 176 }); 177 } 178 179</script>
179 180
181<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
181 182
183<script> 184 185 function waitForElement(selector) { 186 return new Promise(function(resolve, reject) { 187 var element = document.querySelector(selector); 188 if(element) { 189 resolve(element); 190 return; 191 } 192 var observer = new MutationObserver(function(mutations) { 193 mutations.forEach(function(mutation) { 194 var nodes = Array.from(mutation.addedNodes); 195 for(var node of nodes) { 196 if(node.matches && node.matches(selector)) { 197 observer.disconnect(); 198 resolve(node); 199 return; 200 } 201 }; 202 }); 203 }); 204 observer.observe(document.documentElement, { childList: true, subtree: true }); 205 }); 206 } 207 208 function waitForCondition(checkFn, interval = 50, timeout = 5000) { 209 return new Promise((resolve, reject) => { 210 try { 211 if (checkFn()) { 212 resolve(true); 213 return; 214 } 215 } catch (e) { 216 // ignore early errors (e.g., googletag not yet defined) 217 } 218 219 const start = Date.now(); 220 const timer = setInterval(() => { 221 try { 222 if (checkFn()) { 223 clearInterval(timer); 224 resolve(true); 225 } else if (Date.now() - start > timeout) { 226 clearInterval(timer); 227 reject(new Error('Timeout waiting for condition')); 228 } 229 } catch (e) { 230 // still ignore transient errors 231 } 232 }, interval); 233 }); 234 } 235 236 var cmpRnd = Math.floor(Math.random() * 999999); 237 238 if (location.href.indexOf('testnewcmp=1') > -1) { 239 240 document.addEventListener('gravito:tcfv2:client', function (event) { 241 console.log('TCData: gravito:tcfv2:client eventType: ', event.detail.eventType); 242 }, true); 243 244 __tcfapi("addEventListener", 2, function (TCData) { 245 console.log('TCData: Got an answer from TCData...'); 246 console.log('TCData: eventStatus: ', TCData.eventStatus); 247 if (TCData.tcString && "cmpuishown" === TCData.eventStatus || 'tcloaded' === TCData.eventStatus || 'useractioncomplete' === TCData.eventStatus) { 248 } 249 }); 250 251 //window.checkCMPConditions = function(e,t,n,o,r) {console.log("Uusi funktio toimii varmemmin!");return new Promise((l=>{cmpDebug&&console.log("Local TcString: "+JSON.stringify(tcstring_decoded));let s,g,i,c;""!=e?(cmpDebug&&console.log("Tsekataan keksistä..."),s=0===t.length||t.every((t=>e.purpose.consents[t])),g=0===n.length||n.every((t=>e.purpose.legitimateInterests[t])),i=0===o.length||o.every((t=>
251e.vendor.consents[t])),c=0===r.length||r.every((t=>e.vendor.legitimateInterests[t])),l(s&&g&&i&&c)):document.addEventListener("gravito:tcfv2:client",(function(a){cmpDebug&&console.log("Kuunnellaan gravito:tcfv2:clientia...");let p=a.detail.eventType;"layer1:opt-in:all"!=p&&"layer2:opt-in:all"!=p&&"layer2:opt-in:selected"!=p&&"layer2:opt-out:all"!=p||(cmpDebug&&console.log("purposeConsentsLength: "+a.detail.purposeConsents.length),gravitoCMP.currentState&&(consentString=cmpGetCookie("TcString"),e=TCStringParse(consentString),cmpDebug&&console.log("currentStaten data: "+JSON.stringify(e))),s=0===t.length||t.every((t=>e.purpose.consents[t])),g=0===n.length||n.every((t=>e.purpose.legitimateInterests[t])),i=0===o.length||o.every((t=>e.vendor.consents[t])),c=0===r.length||r.every((t=>e.vendor.legitimateInterests[t])),cmpDebug&&console.log(s&&g&&i&&c),l(s&&g&&i&&c))}),!0)}))}; 252 253 if (location.href.indexOf('testcmp=1') > -1) { 254 waitForElement("body").then(function(element) { 255 (function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async'; 256 //e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript_stacks_purettu.js?' + cmpRnd; 257 e.src='http'+('https:'===location.protocol?'s://':'://')+'digitiimi.otavamedia.fi/testi/cmp/otavaScript_stacks_purettu.js?' + cmpRnd; 258 t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script'); 259 }); 260 } else if (location.href.indexOf('testcmp=2') > -1) { 261 waitForElement("body").then(function(element) { 262 (function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async'; 263 e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript2.js?' + cmpRnd; 264 t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script'); 265 }); 266 } else if (location.href.indexOf('testcmp=3') > -1) { 267 waitForElement("body").then(function(element) { 268 (function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async'; 269 e.src='http'+('https:'===location.protocol?'s://':'://')+'digitiimi.otavamedia.fi/testi/cmp/gravito-cmp-deployment-script.
269js?' + cmpRnd; 270 t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script'); 271 }); 272 } else { 273 waitForElement("body").then(function(element) { 274 (function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async'; 275 e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript.js'; 276 t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script'); 277 }); 278 } 279 280 } else { 281 282 console.log('Testing local __tcfapi, with cmp script insert...'); 283 284 //waitForElement("body").then(function(element) { 285 // var cmpRnd = Math.floor(Math.random() * 999999); 286 // (function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async'; 287 // e.src='http'+('https:'===location.protocol?'s://':'://')+'digitiimi.otavamedia.fi/testi/cmp/otavaScript_stacks_purettu.js?' + cmpRnd; 288 // t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script'); 289 //}); 290 291 if (location.href.indexOf('testcmp=1') > -1) { 292 waitForElement("body").then(function(element) { 293 (function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async'; 294 //e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript_stacks_purettu.js?' + cmpRnd; 295 e.src='http'+('https:'===location.protocol?'s://':'://')+'digitiimi.otavamedia.fi/testi/cmp/otavaScript_stacks_purettu.js?' + cmpRnd; 296 t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script'); 297 }); 298 } else { 299 waitForElement("body").then(function(element) { 300 (function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async'; 301 //e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript.js'; 302 e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript.js?' + cmpRnd; 303 t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script'); 304 }); 305 } 306 307 } 308 309</script>
309 310 311<!-- Gravito CMP start--> 312 <!--script src="https://storage.googleapis.com/om-gravito-cmp/om_gravito_stubScriptTag.js"></script--> 313 <!--script async src="https://storage.googleapis.com/om-gravito-cmp/otavaScript.js"></script--> 314<!-- Gravito CMP end--> 315
316<script> 317 window.ghdConfig = { 318 autoInit: true, 319 endpoint: 'https://otava.detect.gravito.fi/api/v1/events', 320 volume: 'sampling', 321 samplingRatio: 0.1 // capture 10% of the events 322 }; 323</script>
vendor: 1 bytes, line 323
323
324<script src="https://otava.detect.gravito.fi/sdk.js" async></script>
vendor: 1 bytes, line 324
324
325<script async="async" src="https://functions.adnami.io/api/macro/adsm.macro.hymy.fi.js"></script>
325 326
327<script> 328 329 var cxContextualIds = [], cxSegmentIds = []; 330 var articleCategory = '', articleCategories = '', recipeTheme = '', articleTags = '', articleSection = ''; 331 332 var cX = cX || { options: { tcf20: true } }; cX.callQueue = cX.callQueue || []; 333 var cxDefaultSegments = '8nqech16gy6q,8mt8vs49hkio,8o1gwyxui6y1,aavib3epzfey,8o1mlcz9mvdd'; 334 if (dfpDebug) {console.log('cXsegmentIds1: ' + cxSegmentIds)} 335 336 var deliveryType = 'tad'; 337 338 checkCMPConditions(tcstring_decoded, [1,3,4], [2,7,9,10], [], [755]).then(result => { 339 if (result) { 340 if (dfpDebug) {console.log("Consent met: GAM IS ALLOWED TO SERVE personalized ads...")} 341 //googletag.pubads().setTargeting("deliveryType", "normal"); 342 deliveryType = 'normal'; 343 } else { 344 checkCMPConditions(tcstring_decoded, [1], [2,7,9,10], [], [755]).then(result => { 345 if (result) { 346 if (dfpDebug) {console.log("Consent met: GAM IS ALLOWED TO SERVE Non-personalized ads...")} 347 //googletag.pubads().setTargeting("deliveryType", "npa"); 348 deliveryType = 'npa'; 349 } else { 350 checkCMPConditions(tcstring_decoded, [], [2,7,9,10], [], [755]).then(result => { 351 if (result) { 352 if (dfpDebug) {console.log("Consent met: GAM IS ALLOWED TO SERVE Limited ads...")} 353 //googletag.pubads().setTargeting("deliveryType", "lads"); 354 deliveryType = 'lads'; 355 useHBM = false; 356 } else { 357 if (dfpDebug) {console.log("Consent not met: GAM IS ALLOWED TO SERVE TAD...")} 358 //googletag.pubads().setTargeting("deliveryType", "tad"); 359 deliveryType = 'tad'; 360 useHBM = false; 361 } 362 }); 363 } 364 }); 365 } 366 }); 367 368 checkCMPConditions(tcstring_decoded, [1,3,4], [], [412], []).then(result => { 369 if (result) { 370 371 if (dfpDebug) {console.log("Consents met: PIANO IS GOOD TO GO...")} 372 if (dfpDebug) {console.log("cX can load via tcstring...")} 373 374 // Async load of cx.js 375 (function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async'; 376 e.src='http'+('https:'===location.protocol?'s://s':'://')+'cdn.cxense.com/cx.js'; 377 t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script'); 378 379 if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') { 380 if (dfpDebug) {console.log('cX: ls available, getting segments...')} 381 cxSegmentIds = localStorage.getItem('_cX_segmentInfo'); 382 if (cxSegmentIds && cxSegmentIds.trim().length > 0) { 383 cxSegmentIds = cxSegmentIds.split(','); 384 if (dfpDebug) console.log('cX: Calling dfp.init() with lsSegments:', cxSegmentIds); 385 dfp.init(cxSegmentIds); 386 } else { 387 if (dfpDebug) { 388 console.log('cX: ls cxSegmentIds.trim().length = 0...'); 389 console.log('cX: Calling dfp.init() with default segments...'); 390 } 391 dfp.init(cxDefaultSegments); 392 } 393 } 394 395 396 waitForCondition(() => window.cX && cX.loaded).then(() => { 397 398 var cxSegmentIds = []; 399 var contextualIds = []; 400 401 if (dfpDebug) {console.log('cx.loaded, calling cX.getSegments...')} 402 cX.getSegments('f1ab28b7c9202ce3defa8bb2979a88f90c7a5ab2', function(segments) { 403 404 if (dfpDebug) console.log('cX.getSegments length: ' + segments.length); 405 if (!segments || !Array.isArray(segments) || !segments.length) { 406 if (dfpDebug) console.warn('cX: Segment fetch failed or empty:', segments); 407 } 408 409 cX.Array.forEach(segments, function (cxTypedSegment, index) { 410 if (cxTypedSegment.type == 'contextual') { 411 cxContextualIds.push(cxTypedSegment.id); 412 } else if (cxTypedSegment.type == 'traffic') { 413 cxSegmentIds.push(cxTypedSegment.id); 414 } 415 }); 416 417 if (dfpDebug) console.log('cxContextualIds:', cxContextualIds); 418 419 if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') { 420 localStorage.setItem('_cX_segmentInfo', cxSegmentIds.join(',')); 421 if (dfpDebug) console.log('cX: Segments fetched and stored:', cxSegmentIds); 422 } 423 424 }); 425 }).catch(err => console.warn(err.message)); 426 427 } else { 428 429 if (dfpDebug) {console.log("Consents NOT met: CAN NOT USE PIANO!!!")} 430 __tcfapi("addEventListener", 2, function (TCData) { 431 if (dfpDebug) {console.log('Got an answer from TCData...')} 432 if (TCData.tcString && "cmpuishown" === TCData.eventStatus || 'tcloaded' === TCData.eventStatus || 'useractioncomplete' === TCData.eventStatus) { 433 //initDFP(cxSegmentIds); 434 if (dfpDebug) { 435 console.log('No cX, calling dfp.init() with default segments...'); 436 } 437 dfp.init(cxDefaultSegments); 438 } 439 }); 440 441 } 442 }); 443 444 setTimeout(() => { 445 if (window.dataLayer) { 446 dataLayer.forEach(function (dataLayerItem) { 447 if (dataLayerItem['PrimaryCategory'] !== '' && dataLayerItem['PrimaryCategory'] !== undefined) { 448 articleCategory = dataLayerItem['PrimaryCategory'].toLocaleStr
448ing().toLowerCase().replace(/, /g, ','); 449 if (dfpDebug) {console.log('ArticleCategory: ' + articleCategory);} 450 } 451 if (dataLayerItem['Categories'] !== '' && dataLayerItem['Categories'] !== undefined) { 452 articleCategories = dataLayerItem['Categories'].toLocaleString().toLowerCase().replace(/, /g, ','); 453 if (dfpDebug) {console.log('Categories: ' + articleCategories);} 454 } 455 if (dataLayerItem['Tags'] !== '' && dataLayerItem['Tags'] !== undefined) { 456 articleTags = dataLayerItem['Tags'].toLocaleString().toLowerCase().replace(/, /g, ','); 457 if (dfpDebug) {console.log('Tags: ' + articleTags);} 458 } 459 if (dataLayerItem['Section'] !== '' && dataLayerItem['Section'] !== undefined) { 460 articleSection = dataLayerItem['Section'].toLowerCase().replace(/, /g, ','); 461 if (dfpDebug) {console.log('ArticleSection: ' + articleSection);} 462 } 463 }); 464 } else { 465 console.error('DataLayer is not defined.') 466 } 467 }, 120); 468 469 console.time("timer"); 470 471 var adLocation = 'content'; 472 var hideAllAds = false; 473 var userdpbjs = false; 474 var hb_setup = 'owpbjs'; 475 var rnd = Math.floor(Math.random() * 50); 476 window.dataLayer = window.dataLayer || []; 477 var leiki_contextual = ''; 478 var useHBM = true; 479 if (location.href.indexOf('usehbm=false') > -1) { 480 useHBM = false; 481 console.log('HBM not in use!!!'); 482 } 483 484 function getLeikiContextual() { 485 486 if (!window.dataLayer) { 487 console.error('LeikiSmartProfiles: dataLayer is not defined.') 488 return; 489 } 490 491 var SmartProfiles = {}; 492 var FilteredKeywords = []; 493 var dataLayerKey = 'LeikiSmartProfiles'; 494 var keywordFilters = { 495 aste_helsinki: { 496 relevance: 2, 497 reversedSlotsLeft: 5, 498 }, 499 iabtier1: { 500 relevance: 10, 501 reversedSlotsLeft: 5, 502 } 503 } 504 505 // Find correct object by key from dataLayer. 506 dataLayer.forEach(function (dataLayerItem) { 507 // If dataLayer item have object named by dataLayerKey 508 // eg. datalayer.LeikiSmartProfiles 509 if (dataLayerItem[dataLayerKey]) { 510 SmartProfiles = dataLayerItem[dataLayerKey]; 511 }; 512 }); 513 514 // First get all object keys of SmartProfiles. Keys are SmartProfile classifications. 515 // Then go through all the classifications 516 Object.keys(SmartProfiles).forEach(function (classification) { 517 // Use only keywordFilters classifications 518 if (classification in keywordFilters) { 519 // Go throug all classification objects. In object we have array of keywords. 520 SmartProfiles[classification].forEach(function (keyword) { 521 // Filter out all keywords what doesn't meat minium relevance level 522 var isMeaningful = keywordFilters[classification].relevance < keyword.relevance; 523 if (isMeaningful && keywordFilters[classification].reversedSlotsLeft > 0) { 524 keywordFilters[classification].reversedSlotsLeft--; 525 FilteredKeywords.push(keyword.ID); 526 } 527 }); 528 } 529 }); 530 531 // Convert array to string. Keywords are separated by , by default 532 return FilteredKeywords.length > 0 ? FilteredKeywords.join() : null; 533 534 } 535 536 function cmpGetCookie(cname) { 537 var name = cname + "="; 538 var ca = document.cookie.split(';'); 539 for(var i = 0; i < ca.length; i++) { 540 var c = ca[i]; 541 while (c.charAt(0) == ' ') { 542 c = c.substring(1); 543 } 544 if (c.indexOf(name) == 0) { 545 return c.substring(name.length, c.length); 546 } 547 } 548 return ""; 549 } 550 551 setTimeout(function() { 552 leiki_contextual = getLeikiContextual(); 553 }, 50); 554 555 var googletag = googletag || {}; 556 googletag.cmd = googletag.cmd || []; 557 var definedSlots = {}; 558 559 googletag.cmd.push(function() { 560 googletag.pubads().addEventListener('slotRenderEnded', function(event) { 561 if (event.slot.getSlotElementId().includes('dfp__interstitial')) { 562 if (event.isEmpty) { 563 console.log('Interstitial empty...'); 564 } 565 } 566 }); 567 }); 568 569 //var dfpConfig = {"location":"content","serviceName":"hymy","slots":["desk-1","in-text","rectangle-1","rectangle-2","rectangle-3","rectangle-4","rectangle-5","in-text","interstitial","mob-1","mob-2","mob-3"],"serviceStarted":""}; 570 var dfpConfig = {"location":"content","serviceName":"hymy","slots":["desk-1","in-text","rectangle-1","rectangle-2","rectangle-3","rectangle-4","rectangle-5","in-text","mob-1","mob-2","mob-3","to
570pad-mob"],"serviceStarted":""}; 571 572 window.dfp = { 573 location: "content", 574 serviceName: 'hymy', 575 visibility: document.documentElement.clientWidth >= 1279 ? "large" : document.documentElement.clientWidth >= 1020 ? "desktop" : "mobile", 576 networkcode: "135812570", 577 initialized: false, 578 definedAds: {}, 579 slots: { 580 "desk-1": { 581 sizes: [[728,90], [980,120], [980,400], [980,552]], 582 visibility: ["desktop", "large"] 583 }, 584 "rectangle-1": { 585 sizes: [[300,250], [300,300], [300,431], [300,600]], 586 visibility: ["desktop", "large"] 587 }, 588 "rectangle-2": { 589 sizes: [[300,250], [300,300], [300,431], [300,600]], 590 visibility: ["desktop", "large"] 591 }, 592 "rectangle-3": { 593 sizes: [[300,250], [300,300], [300,431], [300,600]], 594 visibility: ["desktop", "large"], 595 location: ["content", "forum"] 596 }, 597 "rectangle-4": { 598 sizes: [[300,250], [300,300], [300,431], [300,600]], 599 visibility: ["desktop", "large"], 600 location: ["forum"] 601 }, 602 "rectangle-5": { 603 sizes: [[300,250], [300,300], [300,431], [300,600]], 604 visibility: ["desktop", "large"], 605 location: ["forum"] 606 }, 607 "in-text": { 608 sizes: [[300,250], [300,300], [468,400], [620,891]], 609 visibility: ["desktop", "large"] 610 }, 611 'interstitial': { 612 sizes: [1, 1], 613 visibility: 'all' 614 }, 615 "mob-1": { 616 sizes: [[360, 600], [320,600], [320,320], [300,600], [300,431], [300,300], [300,250], [300,150]], 617 visibility: ["mobile"] 618 }, 619 "mob-2": { 620 sizes: [[360, 600], [320,600], [320,320], [300,600], [300,431], [300,300], [300,250], [300,150], ['fluid']], 621 visibility: ["mobile"], 622 location: ["frontpage", "content", "forum"] 623 }, 624 "mob-3": { 625 sizes: [[360, 600], [320,600], [320,320], [300,600], [300,431], [300,300], [300,250], [300,150], ['fluid']], 626 visibility: ["mobile"], 627 location: ["forum"] 628 }, 629 "mob-4": { 630 sizes: [[360, 600], [320,600], [320,320], [300,600], [300,431], [300,300], [300,250], [300,150], ['fluid']], 631 visibility: ["mobile"], 632 location: ["forum"] 633 }, 634 'topad-mob': { 635 sizes: [[1, 2],[2, 2]], 636 visibility: 'mobile' 637 } 638 }, 639 640 pbConfig: { 641 large: { 642 script: "https://otava-cdn.relevant-digital.com/static/tags/5e4c4c2c53ca952a90fa7d98.js", 643 configId: { 644 frontpage: "6078352f3b31001aa4257ba8", 645 content: "6078487db0b348085a257bb8", 646 forum: "60785428cac786902d627115" 647 }, 648 lazyLoad: { 649 frontpage: 60, 650 content: 60, 651 forum: 60 652 } 653 }, 654 desktop: { 655 script: "https://otava-cdn.relevant-digital.com/static/tags/5e4c4c2c53ca952a90fa7d98.js", 656 configId: { 657 frontpage: "6078352f3b31001aa4257ba8", 658 content: "6078487db0b348085a257bb8", 659 forum: "60785428cac786902d627115" 660 }, 661 lazyLoad: { 662 frontpage: 60, 663 content: 60, 664 forum: 60 665 } 666 }, 667 mobile: { 668 script: "https://otava-cdn.relevant-digital.com/static/tags/5e4c4c2c53ca952a90fa7d72.js", 669 configId: { 670 frontpage: "607844e0585539bac5257bb3", 671 content: "60784b5efaa9dbd1c0257bb9", 672 forum: "607856c5934372061f627116" 673 }, 674 lazyLoad: { 675 frontpage: 60, 676 content: 60, 677 forum: 60 678 } 679 } 680 }, 681 682 registerAdslots: function(i) { 683 for (adslot in this.slots) { 684 var v = this.slots[adslot].location || ["all"]; 685 if (v != "all" && v.indexOf(adLocation) < 0) { 686 delete this.slots[adslot]; 687 console.log(adslot + ' deleted!'); 688 } 689 } 690 }, 691 692 displayAdslot: function (id) { 693 694 //if (!this.initialized) this.init(); 695 696 var that = this; 697 var parts = id.split('__'); 698 var parts = parts[1].split('_'); 699 var slotName = parts[0]; 700 701 if (testSRA) { 702 //if (!(slotName.includes('native'))) { 703 // return; 704 //} 705 return; 706 } 707 708 // Checking that the native adslot is known 709 if (slotName.includes('native') && this.slots.hasOwnProperty(slotName)) { 710 googletag.cmd.push(function () { 711 that.defineNative(id, slotName); 712 googletag.display(id); 713 if (dfpDebug) {console.log('googletag.display for ' + slotName + '...')} 714 }); 715 } else { 716 // Checking that the adslot is known and visibility matches 717 //if (this.slots.hasOwnProperty(parts[0]) && ["all", this.visibility].indexOf(this.slots[parts[0]]['visibility'] || 'all') >= 0) { 718 if (this.slots.hasOwnProperty(parts[0]) && (this.slots[parts[0]]['visibility'] === 'all' || this.slots[parts[0]]['visibility'].includes(this.visibility))) { 719 if (dfpDebug) {console.log('parts = ' + parts[0])} 720 if (parts[0] == 'interstitial') { 721 //var checkIfGoogletagReady = setInterval(function () { 722 //if (window.googletag && googletag.apiReady && googletag.pubadsReady) { 723 googletag.cmd.push(function () { 724 var slot = that.defineSlot(parts[0], id); 725 googletag.display(id); 726 if (dfpDebug) {console.log('googletag.display for ' + parts[0] + '..')} 727 //googletag.pubads().refresh([slot], {changeCorrelator: false}); 728 //if (dfpDebug) {console.log('googletag.pubads().refresh for ' + parts[0] + '..')} 729 }); 730 //clearInterval(checkIfGoogletagReady); 731 //} 732 //}, 50); 733 } else { 734 googletag.cmd.push(function () { 735 var slot = that.defineSlot(parts[0], id); 736 googletag.display(id); 737 if (slotName == 'desk-1' && location.href.indexOf('loadtopad') > -1) { 738 window.dfp.slotdesk1 = slot; 739 } 740 if (dfpDebug) {console.log('googletag.display for ' + parts[0] + '..')} 741 }); 742 } 743 } 744 } 745 746 }, 747 748 defineSlot: function (slotName, id) { 749 750 var id = id || 'dfp__' + slotName; 751 var path = this.networkcode + '/' + dfpConfig.serviceName + '/' + dfpConfig.location + '/' + slotName; 752 if (slotName.includes('topad-')) { 753 path = this.networkcode + '/' + dfpConfig.serviceName + '/content/' + slotName; 754 } 755 this.definedAds[id] = true; 756 //console.log('defineSlot: ' + slotName + '#' + id); 757 758 if (typeof this.slots[slotName]['sizes'] !== 'undefined') { 759 if (dfpDebug) {console.log('defineSlot for ' + slotName + '...')} 760 return googletag.defineSlot(path, this.slots[slotName]['sizes'], id).addService(googletag.pubads()).setTargeting('adslotid', id.replace('dfp__','')); 761 } else { 762 return googletag.defineOutOfPageSlot(path, id).addService(googletag.pubads()); 763 } 764 765 }, 766 767 defineNative: function(opt_div, slotName) { 768 769 var opt_div = opt_div || 'dfp__' + slotName;
770 var adUnitPath = this.networkcode + '/' + this.serviceName + '/native/' + slotName; 771 this.definedAds[opt_div] = true; 772 //console.log('defineNative: ' + slotName + '#' + opt_div; 773 //return googletag.defineSlot(adUnitPath, 'fluid', opt_div).addService(googletag.pubads()); 774 return googletag.defineSlot(adUnitPath, this.slots[slotName]['sizes'], opt_div).addService(googletag.pubads()).setTargeting('adslotid', opt_div.replace('dfp__','')); 775 776 }, 777 778 init: function(cXsegmentIds) { 779 780 //if (dfpDebug) {console.log('Initin segmentit: ' + cXsegmentIds)} 781 782 var that = this; 783 784 if (!dfpConfig.hasOwnProperty('serviceName')) { 785 console.log('DFP service name not set'); 786 return; 787 } 788 789 this.registerAdslots(dfpConfig.slots); 790 791 if (!dfpConfig.serviceStarted) { 792 793 googletag.cmd.push(function () { 794 795 googletag.pubads().addEventListener('slotRenderEnded', function(event) { 796 797 if ((dfpDebug || 1 == 2) && window.dfp.visibility == 'mobile' && 1 == 2) { 798 799 var origAdSlotId = event.slot.getSlotElementId(); 800 var acceptedSlotIds = ["mob-1","mob-2","mob-3","mob-4","2_1","2_2","2_3","2_4","2_5"]; 801 802 if (acceptedSlotIds.some(value => origAdSlotId.endsWith(value))) { 803 if (dfpDebug) {console.log('adSlotId "' + origAdSlotId + '" is allowed for FRB...')} 804 var adPath = 'hymy'; 805 if (event.isEmpty) { 806 if (window.relevantDigital) { 807 808 setTimeout(function() { 809 var newAdSlotId = origAdSlotId.replace("-","_") + '_111'; 810 var adSlotName = origAdSlotId.substr(origAdSlotId.indexOf("__")+2); 811 //adSlotName = adSlotName.substr(0, adSlotName.indexOf("_")); 812 if (adSlotName.indexOf("_") > -1) {adSlotName = adSlotName.substr(0, adSlotName.indexOf("_"))} 813 if (dfpDebug) {console.log('adSlotName: ' + adSlotName)}; 814 if (dfpDebug) {console.log('Creating new adslot: ' + '#' + origAdSlotId)}; 815 jQuery('#' + origAdSlotId).after('<div id="' + newAdSlotId + '" class="' + adSlotName + '-article">
815<script>var ' + newAdSlotId + '; googletag.cmd.push(function(){' + newAdSlotId + ' = googletag.defineSlot("/135812570/'+ adPath +'/' + adLocation + '/' + adSlotName + '", [[300,250],[300,300],[300,431],[300,600]], "' + newAdSlotId + '").addService(googletag.pubads()).setTargeting("adslotid", ["' + origAdSlotId.replace("dfp__","") + '-111","frb"])});googletag.cmd.push(function() {googletag.display("' + newAdSlotId + '")});<\/script><\/div>'); 816 var pbjsConf = window.dfp.pbConfig[window.dfp.visibility].configId[adLocation]; 817 relevantDigital.cmd.push(function() { 818 relevantDigital.loadPrebid({configId: pbjsConf, manageAdserver: false, collapseEmptyDivs: true, collapseBeforeAdFetch: false, noGpt: true, allowedDivIds: [newAdSlotId], noSlotReload: true}); 819 if (dfpDebug) {console.log('Requesting new ad to: #' + newAdSlotId)}; 820 }); 821 }, 100); 822 823 } 824 } else { 825 if (dfpDebug) {console.log('Ad slot ' + origAdSlotId + ' was not empty...')}; 826 } 827 } 828 829 } 830 831 if (event.slot.getSlotElementId().indexOf('dfp__interstitial') > -1) { 832 if (event.isEmpty) { 833 if (dfpDebug) {console.log('Fpa is empty, calling webinterstitial...')} 834 window.canRunWebInterstitial = true; 835 } else { 836 if (dfpDebug) {console.log('BBW: preventing sticky player when fpa was shown...')} 837 window.bluebillywig = window.bluebillywig || {}; 838 window.bluebillywig.cmd = window.bluebillywig.cmd || []; 839 //window.bluebillywig.cmd.push(function($$api) { 840 // //const originalStickyMode = $$api.getPlayoutData().stickyMode; 841 // $$api.updatePlayout({stickyMode: 'none'}); 842 // //$$api.updatePlayout({stickyMode: originalStickyMode}); 843 //}); 844 window.bluebillywig.cmd.push({ 845 playerId: '/p/inarticle/a/hymy', 846 callback: function($$api) { 847 $$api.updatePlayout({stickyMode: 'none'}); 848 } 849 }); 850 } 851 } 852 853 }); 854 855 googletag.pubads().setTargeting("url_domain", window.location.host), 856 googletag.pubads().setTargeting("url_path", window.location.pathname), 857 googletag.pubads().setTargeting("url_params", window.location.search.substring(1)); 858 googletag.pubads().setTargeting("hb_setup", hb_setup); 859 //googletag.pubads().setCentering(true); 860 861 862 var m = document.cookie.match(/frosmo_keywords=.([^;$]+)/); 863 if(m != null && m.length) { 864 googletag.pubads().setTargeting("frosmo", m[1].split(".")) 865 } 866 867 if (leiki_contextual !== null && leiki_contextual !== 'undefined') { 868 869 if (dfpDebug) {console.log('leiki_contextual_api success:', leiki_contextual);} 870 googletag.pubads().setTargeting("leiki_contextual", leiki_contextual); 871 872 } 873 874 if (window.dataLayer) { 875 876 //articleCategory = google_tag_manager["GTM-K5WDX4"].dataLayer.get('PrimaryCategory'); 877 //articleCategories = google_tag_manager["GTM-K5WDX4"].dataLayer.get('Categories'); 878 //recipeTheme = google_tag_manager["GTM-K5WDX4"].dataLayer.get('RecipeTheme'); 879 //articleTags = google_tag_manager["GTM-K5WDX4"].dataLayer.get('Tags'); 880 881 if (articleCategory != undefined && articleCategory != '') { 882 googletag.pubads().setTargeting("articlecategory", articleCategory.toLowerCase()); 883 if (dfpDebug) {console.log('Targeting for articlecategory: ' + articleCategory.toLowerCase());} 884 } 885 if (articleCategories != undefined && articleCategories != '') { 886 googletag.pubads().setTargeting("articlecategories", articleCategories.toLowerCase()); 887 if (dfpDebug) {console.log('Targeting for articlecategories: ' + articleCategories.toLowerCase());} 888 } 889 if (articleSection != undefined && articleSection != '') { 890 googletag.pubads().setTargeting("articlesection", articleSection.toLowerCase()); 891 if (dfpDebug) {console.log('Targeting for articlesection: ' + articleSection.toLowerCase());} 892 } 893 if (articleTags != undefined && articleTags != '') { 894 googletag.pubads().setTargeting("articlekeywords", articleTags.toLowerCase().replace(/, /g, ',')); 895 if (dfpDebug) {console.log('Targeting for articlekeywords: ' + articleTags.toLowerCase().replace(/, /g, ','));} 896 } 897 898 } else { 899 console.error('DataLayer not ready for targeting...') 900 } 901 902 if (cXsegmentIds !== null && cXsegmentIds !== undefined) { 903 904 var regexPattern = new RegExp("(\\b8nqech16gy6q\\b)"); 905 if (!regexPattern.test(cXsegmentIds)) { 906 cXsegmentIds = (Array.isArray(cXsegmentIds) && cXsegmentIds.length === 0) ? '8nqech16gy6q' : (cXsegmentIds !== '' ? cXsegmentIds + ',8nqech16gy6q' : cXsegmentIds); 907 if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8nqech16gy6q"')} 908 } 909 var regexPattern = new RegExp("(\\b8mt8vs49hkio\\b)"); 910 if (!regexPattern.test(cXsegmentIds)) { 911 cXsegmentIds = cXsegmentIds + (cXsegmentIds !== '' ? ',' : '') + '8mt8vs49hkio'; 912 if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8mt8vs49hkio"')} 913 } 914 var regexPattern = new RegExp("(\\b8o1gwyxui6y1\\b)"); 915 if (!regexPattern.test(cXsegmentIds)) { 916 cXsegmentIds = cXsegmentIds + (cXsegmentIds !== '' ? ',' : '') + '8o1gwyxui6y1,aavib3epzfey'; 917 if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8o1gwyxui6y1,aavib3epzfey"')} 918 } 919 var regexPattern = new RegExp("(\\b8o1mlcz9mvdd\\b)"); 920 if (!regexPattern.test(cXsegmentIds)) { 921 cXsegmentIds = cXsegmentIds + (cXsegmentIds !== '' ? ',' : '') + '8o1mlcz9mvdd'; 922 if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8o1mlcz9mvdd"')} 923 } 924 925 if (dfpDebug) {console.log('DFP setTargeting CxSegments: ' + cXsegmentIds)} 926 googletag.pubads().setTargeting("CxSegments", cXsegmentIds); 927 928 } 929 930/* 931 if (dfpDebug) {console.log('Calling cX.getSegments...')} 932 cX.getSegments('f1ab28b7c9202ce3defa8bb2979a88f90c7a5ab2', function(segments) { 933 cX.Array.forEach(segments, function (cxTypedSegment, index) { 934 if (cxTypedSegment.type == 'contextual') { 935 contextualIds.push(cxTypedSegment.id); 936 } 937 }); 938 if (dfpDebug) {console.log('Setting targeting fo cX.getSegments: ' + contextualIds.join())} 939 googletag.pubads().setTargeting("CxContext", contextualIds.join()); 940 }); 941*/ 942 943 googletag.pubads().setTargeting("CxContext", cxContextualIds.join()); 944 945 //var renderMarginPercent = Math.random() < 1/3 ? 20 : Math.random() < 1/2 ? 40 : 80; 946 var renderMarginPercent = window.dfp.pbConfig[window.dfp.visibility].lazyLoad[adLocation] || 40; 947 googletag.pubads().setTargeting("experiments", "lazyload_" + renderMarginPercent); 948 949 950 googletag.pubads().collapseEmptyDivs(), 951 googletag.pubads().enableLazyLoad({ 952 fetchMarginPercent: 100, 953 renderMarginPercent: renderMarginPercent, 954 mobileScaling: 1 955 }); 956 if (dfpDebug) {console.log('renderMarginPercent: ' + renderMarginPercent)} 957 958 /* 959 googletag.pubads().enableLazyLoad({ 960 fetchMarginPercent: 100, 961 renderMarginPercent: 40, 962 mobileScaling: 1 963 }); 964 */ 965 966 googletag.pubads().setTargeting("deliveryType", deliveryType); 967 968 (function () { 969 970 function generateNewPPID() { 971 return crypto.randomUUID().replace(/-/g, ''); 972 } 973 974 function parsePossiblyDoubleEncodedJSON(value) { 975 var parsed = value; 976 while (typeof parsed === 'string') { 977 parsed = JSON.parse(parsed); 978 } 979 return parsed; 980 } 981 982 function setPPID(ppid) { 983 if (!ppid) return; 984 localStorage.setItem('ppid', ppid); 985 googletag.pubads().setPublisherProvidedId(ppid); 986 } 987 988 var storedPPID = localStorage.getItem('ppid'); 989 990 if (storedPPID) { 991 if (dfpDebug) {console.log('ls storedPPID: ', storedPPID)} 992 googletag.pubads().setPublisherProvidedId(storedPPID); 993 return; 994 } 995 996 try { 997 var gravitoValue = localStorage.getItem('gravito-microprofile-data'); 998 if (gravitoValue) { 999 var parsed = parsePossiblyDoubleEncodedJSON(gravitoValue); 1000 if (parsed && parsed.i) { 1001 var migratedPPID = btoa(parsed.i); 1002 if (dfpDebug) {console.log('gmd ls migratedPPID: ', migratedPPID)} 1003 setPPID(migratedPPID); 1004 return; 1005 } 1006 } 1007 } catch (e) { 1008 console.warn('Gravito migration failed:', e); 1009 } 1010 1011 var newPPID = generateNewPPID(); 1012 setPPID(newPPID); 1013 if (dfpDebug) {console.log('created a newPPID: ', newPPID)} 1014 1015 })(); 1016 1017 //waitForResource('localStorage', 'gravito-microprofile-data').then(function (value) { 1018 // if (dfpDebug) {console.log('gravito-microprofile-data exists in local storage with value: ', value)} 1019 // var ppid = btoa(JSON.parse(JSON.parse(value)).i); 1020 // if (ppid) { 1021 // googletag.pubads().setPublisherProvidedId(ppid); 1022 // if (dfpDebug) {console.log('ppid: ' + ppid)} 1023 // } 1024 //}); 1025 1026 googletag.pubads().enableSingleRequest(); 1027 googletag.pubads().disableInitialLoad(); 1028 googletag.enableServices(); 1029 console.timeEnd("timer"); 1030 1031 dfpConfig.serviceStarted = true; 1032 1033 }) 1034 1035 } 1036 1037 this.initialized = true; 1038 if (dfpDebug) {console.log('DFP initialized...')} 1039 1040 } 1041 } 1042 1043 1044 if (useHBM) { 1045 1046 var rdads = document.createElement('script'); 1047 rdads.async = true; 1048 var useSSL = 'https:' == document.location.protocol; 1049 rdads.src = window.dfp.pbConfig[window.dfp.visibility].script; 1050 var node = document.getElementsByTagName('script')[0]; 1051 node.parentNode.insertBefore(rdads, node); 1052 1053 var pbjsConf = window.dfp.pbConfig[window.dfp.visibility].configId[adLocation]; 1054 if (dfpDebug) {console.log('pbjsConf in use ' + pbjsConf);} 1055 1056 } 1057 1058 function initDFP(cXsegmentIds) { 1059 1060 //if (dfpDebug) {console.log('cSsegmentIds: ' + cXsegmentIds)} 1061 if( window.dfp !== undefined ) { 1062 if (dfpDebug) {console.log('initDFP() called by cX.getUserSegmentIds ' + cXsegmentIds + '...')} 1063 if (location.href.indexOf("/erotiikka") == -1 && document.location.href.indexOf("/kuvat-ja-videot") == -1) { 1064 setTimeout(function(){ 1065 window.dfp.init(cXsegmentIds); 1066 }, 1); 1067 setTimeout(function(){ 1068 if (useHBM) { 1069 if (!testSRA) { 1070 if (dfpDebug) {console.log('HBM initialized...')} 1071 if (location.href.indexOf('loadtopad') > -1) { 1072 googletag.pubads().refresh([window.dfp.slotdesk1]) 1073 } 1074 initHBM(cXsegmentIds); 1075 } 1076 } else { 1077 if (!testSRA) { 1078 console.log('HBM not in use!!!'); 1079 googletag.pubads().refresh(); 1080 } 1081 } 1082 }, 1); 1083 } 1084 } else {
1085 console.log('DFP init failed: window.dfp missing!'); 1086 } 1087 1088 } 1089 1090 function initHBM(cXsegmentIds) { 1091 1092 if (dfpDebug) {console.log('initHBM called...')} 1093 1094 var hbArticleTags = articleTags != '' ? articleTags.split() : []; 1095 var hbArticleCategories = articleCategories != '' ? [...new Set(articleCategory.split(',').concat(articleCategories.split(',')))] : []; 1096 1097 window.relevantDigital = window.relevantDigital || {}; 1098 relevantDigital.cmd = relevantDigital.cmd || []; 1099 relevantDigital.cmd.push(function() { 1100 1101 if (location.href.indexOf('loadtopad') > -1) { 1102 1103 let hasDoneFirstCall; 1104 relevantDigital.addAuctionCallbacks({ 1105 onBeforeAuctionSetup: function ({ auction }) { 1106 if (!(window.googletag || {}).pubads) { 1107 console.error('GPT not initialized, this method only works if GPT-slots are created before calling relevantDigital.loadPrebid()'); 1108 return; 1109 } 1110 if (hasDoneFirstCall) { // Only do this on page-load and not subsequent auctions 1111 return; 1112 } 1113 hasDoneFirstCall = true; 1114 1115 // Slots to load immediately (without waiting for relevantDigital) 1116 //const TO_LOAD_NOW = ['dfp__desk-1']; 1117 const TO_LOAD_NOW = []; 1118 // Slots to exclude entirely (never loaded) 1119 //const NOT_TO_LOAD_NOW = ['dfp__interstitial_1','dfp__desk-1']; 1120 const NOT_TO_LOAD_NOW = ['dfp__desk-1']; 1121 1122 const isLoadNowDiv = (divId) => TO_LOAD_NOW.includes(divId); 1123 const isNotToLoadDiv = (divId) => NOT_TO_LOAD_NOW.includes(divId); 1124 1125 const loadNowSlots = []; 1126
1127 googletag.pubads().getSlots().forEach((slot) => { 1128 const divId = slot.getSlotElementId(); // Get the div ID associated with the slot 1129 if (isLoadNowDiv(divId)) { 1130 loadNowSlots.push(slot); 1131 } 1132 }); 1133 1134 if (!loadNowSlots.length && !NOT_TO_LOAD_NOW.length) { 1135 return; // continue as normal 1136 } 1137 1138 // Requests slots in TO_LOAD_NOW immediately 1139 if (loadNowSlots.length) { 1140 googletag.pubads().refresh(loadNowSlots); 1141 } 1142 1143 // Make sure NOT_TO_LOAD_NOW slots are excluded from the auction 1144 auction.adUnits = auction.adUnits.filter(({ gamPath, divId }) => 1145 !isNotToLoadDiv(divId) 1146 ); 1147 1148 // Then manually remove them when Relevant is doing the ad request 1149 auction.googletagCalls = auction.googletagCalls || {}; 1150 auction.googletagCalls.refresh = (slots, ...rest) => { 1151 const all = slots || googletag.pubads().getSlots(); 1152 const toLoad = all.filter((s) => 1153 !isNotToLoadDiv(s.getSlotElementId()) // Exclude NOT_TO_LOAD_NOW slots 1154 ); 1155 googletag.pubads().refresh(toLoad, ...rest); 1156 }; 1157 } 1158 }); 1159 1160 } 1161 1162 if (location.href.indexOf('interstitial11') > -1) { 1163 1164 let hasDoneFirstCall; 1165 relevantDigital.addAuctionCallbacks({ 1166 onBeforeAuctionSetup: function ({ auction }) { 1167 if (!(window.googletag || {}).pubads) { 1168 console.error('GPT not initialized, this method only works if GPT-slots are created before calling relevantDigital.loadPrebid()'); 1169 return; 1170 } 1171 if (hasDoneFirstCall) { // Only do this on page-load and not subsequent auctions 1172 return; 1173 } 1174 hasDoneFirstCall = true; 1175 1176 // Slots to load immediately (without waiting for relevantDigital) 1177 //const TO_LOAD_NOW = ['dfp__desk-1']; 1178 const TO_LOAD_NOW = []; 1179 // Slots to exclude entirely (never loaded) 1180 //const NOT_TO_LOAD_NOW = ['dfp__interstitial_1','dfp__desk-1']; 1181 const NOT_TO_LOAD_NOW = ['dfp__interstitial_1']; 1182 1183 const isLoadNowDiv = (divId) => TO_LOAD_NOW.includes(divId); 1184 const isNotToLoadDiv = (divId) => NOT_TO_LOAD_NOW.includes(divId); 1185 1186 const loadNowSlots = []; 1187
1188 googletag.pubads().getSlots().forEach((slot) => { 1189 const divId = slot.getSlotElementId(); // Get the div ID associated with the slot 1190 if (isLoadNowDiv(divId)) { 1191 loadNowSlots.push(slot); 1192 } 1193 }); 1194 1195 if (!loadNowSlots.length && !NOT_TO_LOAD_NOW.length) { 1196 return; // continue as normal 1197 } 1198 1199 // Requests slots in TO_LOAD_NOW immediately 1200 if (loadNowSlots.length) { 1201 googletag.pubads().refresh(loadNowSlots); 1202 } 1203 1204 // Make sure NOT_TO_LOAD_NOW slots are excluded from the auction 1205 auction.adUnits = auction.adUnits.filter(({ gamPath, divId }) => 1206 !isNotToLoadDiv(divId) 1207 ); 1208 1209 // Then manually remove them when Relevant is doing the ad request 1210 auction.googletagCalls = auction.googletagCalls || {}; 1211 auction.googletagCalls.refresh = (slots, ...rest) => { 1212 const all = slots || googletag.pubads().getSlots(); 1213 const toLoad = all.filter((s) => 1214 !isNotToLoadDiv(s.getSlotElementId()) // Exclude NOT_TO_LOAD_NOW slots 1215 ); 1216 googletag.pubads().refresh(toLoad, ...rest); 1217 }; 1218 } 1219 }); 1220 1221 } 1222 1223 if (location.href.indexOf('interstitial22') > -1) { 1224 1225 let hasDoneFirstCall; 1226 relevantDigital.addAuctionCallbacks({ 1227 onBeforeAuctionSetup: function ({ auction }) { 1228 if (!(window.googletag || {}).pubads) { 1229 console.error('GPT not initialized, this method only works if GPT-slots are created before calling relevantDigital.loadPrebid()'); 1230 return; 1231 } 1232 if (hasDoneFirstCall) { // Only do this on page-load and not subsequent auctions 1233 return; 1234 } 1235 hasDoneFirstCall = true; 1236 1237 // Load all slots associated with these div IDs immediately (without waiting for relevantDigital) 1238 const TO_LOAD_NOW = ['dfp__interstitial_1']; 1239 1240 const isLoadNowDiv = (divId) => TO_LOAD_NOW.includes(divId); 1241 const loadNowSlots = []; 1242
1243 googletag.pubads().getSlots().forEach((slot) => { 1244 const divId = slot.getSlotElementId(); // Get the div ID associated with the slot 1245 if (isLoadNowDiv(divId)) { 1246 loadNowSlots.push(slot); 1247 } 1248 }); 1249 1250 if (!loadNowSlots.length) { 1251 return; // continue as normal 1252 } 1253 1254 // Requests slots immediately 1255 googletag.pubads().refresh(loadNowSlots); 1256 1257 // Make sure they're not included in the prebid auction 1258 auction.adUnits = auction.adUnits.filter(({ gamPath, divId }) => 1259 !isLoadNowDiv(divId) 1260 ); 1261 1262 // Then manually remove them when Relevant is doing the ad request 1263 auction.googletagCalls = auction.googletagCalls || {}; 1264 auction.googletagCalls.refresh = (slots, ...rest) => { 1265 const all = slots || googletag.pubads().getSlots(); 1266 const toLoad = all.filter((s) => 1267 !isLoadNowDiv(s.getSlotElementId()) 1268 ); 1269 googletag.pubads().refresh(toLoad, ...rest); 1270 }; 1271 }, 1272 }); 1273 1274 } 1275 1276 if (location.href.indexOf('interstitial33') > -1) { 1277 1278 let hasDoneFirstCall; 1279 relevantDigital.addAuctionCallbacks({ 1280 // Code in function below can alternatively be added inside relevantDigital.loadPrebid({ onBeforeAuctionSetup: { ... } }) 1281 onBeforeAuctionSetup: function({ auction }) { 1282 if(!(window.googletag || {}).pubads) { 1283 console.error('GPT not initialized, this method only works if GPT-slots are created before calling relevantDigital.loadPrebid()'); 1284 return; 1285 } 1286 if(hasDoneFirstCall) { // Only do this on page-load and not subsequent auctions 1287 return; 1288 } 1289 hasDoneFirstCall = true; 1290 1291 // Load all slots containing these strings in ad unit paths immediately (without waiting for prebid) 1292 const TO_LOAD_NOW = ['desk-1', 'interstitial']; 1293 1294 const isLoadNowPath = (p) => TO_LOAD_NOW.find((s) => p.includes(s)); 1295 const loadNowSlots = [];
1296 googletag.pubads().getSlots().forEach((slot) => { 1297 if (isLoadNowPath(slot.getAdUnitPath())) { 1298 loadNowSlots.push(slot); 1299 } 1300 }); 1301 if (!loadNowSlots.length) { 1302 return; // continue as normal 1303 } 1304 // Requests slots immediately 1305 googletag.pubads().refresh(loadNowSlots); 1306 1307 // Make sure they're not included in the prebid auction 1308 auction.adUnits = auction.adUnits.filter(({ gamPath }) => !isLoadNowPath(gamPath)); 1309 1310 // Then manually remove them when Relevant is doing the ad request 1311 auction.googletagCalls = auction.googletagCalls || {}; 1312 auction.googletagCalls.refresh = (slots, ...rest) => { 1313 const all = slots || googletag.pubads().getSlots(); 1314 const toLoad = all.filter((s) => !isLoadNowPath(s.getAdUnitPath())); 1315 googletag.pubads().refresh(toLoad, ...rest); 1316 }; 1317 }, 1318 }); 1319 1320 } 1321 1322 relevantDigital.addPrebidConfig({ 1323 ortb2: { 1324 site: { 1325 //keywords: contextualIds.join(), 1326 ext: { 1327 data: { 1328 CxContext: Object.values(cxContextualIds), 1329 articleCategories: hbArticleCategories, 1330 articleTags: hbArticleTags 1331 } 1332 } 1333 } 1334 } 1335 }); 1336 1337 relevantDigital.loadPrebid({ 1338 configId: pbjsConf, 1339 manageAdserver: false, //Manage adserver set to off. 1340 collapseEmptyDivs: true, 1341 collapseBeforeAdFetch: false, 1342 noGpt: true, 1343 allowedDivIds: null, // set to an array to only load certain <div>s, example - ["divId1", "divId2"] 1344 noSlotReload: true, // set true to only load ad slots that have never been loaded 1345 onBeforeAuctionSetup: function(params) { 1346 params.auction.adUnits.forEach(function(unit) { 1347 unit.bids.forEach(function(bid){ 1348 if (bid.bidder == 'appnexus') { 1349 bid.params.keywords = {cxSegments: cXsegmentIds, CxContext: cxContextualIds, articleTags: hbArticleTags, articleCategories: hbArticleCategories}; 1350 if (dfpDebug) {console.log('Setting params for Xandr bidder...')} 1351 } 1352 }) 1353 }) 1354 } 1355 }); 1356 1357 if (location.href.indexOf('testnewcmp=1') > -1) { 1358 1359 const printEvent = (type, ev, adUnitInstance) => { 1360 console.info(`********** ${type} **********`); 1361 console.info('Event: ', ev); 1362 console.info('AdUnitInstance (if any): ', adUnitInstance); 1363 console.info('Is direct rendering: ', ev.directRender); 1364 console.info('Direct rendered bid: ', ev.bid); 1365 console.info('Ad slot: ', ev.slot); 1366 console.info('Is empty: ', ev.isEmpty); 1367 }; 1368 relevantDigital.addAdsCallbacks({ 1369 slotRequested: (...args) => { 1370 printEvent('slotRequested', ...args); 1371 }, 1372 slotResponseReceived: (...args) => { 1373 printEvent('slotResponseReceived', ...args); 1374 }, 1375 slotRenderEnded: (ev, data) => { 1376 printEvent('slotRenderEnded', ev, data); 1377 } 1378 }); 1379 1380 } 1381 1382 }); 1383 1384 } 1385 1386 1387 function loadAdSlot(adSlotId) { 1388 1389 if (location.href.includes('testnewads=1')) { 1390 return; 1391 } 1392 1393 if (dfpDebug) {console.log('HAS: runHeaderbid: ' + adSlotId + ', ' + (Date.now() - timerStart) + 'ms...')} 1394 observerHeaderbidRun = true; 1395 1396 var adUnit = adSlotId.split('__')[1].split('_')[0]; 1397 1398 //var hbArticleTags = articleTags != '' ? articleTags.split(',') : []; 1399 var hbArticleTags = articleTags != '' ? articleTags.split(',').map(tag => tag.trim()) : []; 1400 var hbArticleCategories = articleCategories != '' ? [...new Set(articleCategory.split(',').concat(articleCategories.split(',')))] : []; 1401 1402 var takeOver = '', adSlotsNotAllowedForHBM = []; 1403 //if (hbArticleTags.includes('unelmien joulu')) { // exact match 1404 if (hbArticleTags.some(tag => tag.includes('joulu'))) { 1405 useHBM = false; 1406 takeOver = 'unelmien joulu'; 1407 } 1408 if (['joulu', 'unelmien joulu'].some(cat => hbArticleCategories.includes(cat))) { 1409 useHBM = false; 1410 takeOver = 'unelmien joulu'; 1411 } 1412 if (articleSection == 'unelmien joulu') { 1413 useHBM = false; 1414 takeOver = 'unelmien joulu'; 1415 } 1416 1417 //if (!useHBM && takeOver == 'unelmien joulu') { 1418 // adSlotsNotAllowedForHBM = ['mob-1', 'mob-2', 'desk-1', 'desk-2']; 1419 // if (dfpDebug) {console.log('HAS: takeOver: ' + takeOver + ', adSlotsNotAllowedForHBM: ' + adSlotsNotAllowedForHBM)} 1420 //} 1421 1422 var slotLocation = adLocation; 1423 if (adUnit.includes('native')) {
1424 slotLocation = 'native'; 1425 } else if (adUnit.includes('topad') || adUnit.includes('interstitial')) { 1426 slotLocation = 'content'; 1427 } 1428 1429 1430 googletag.cmd.push(function() { 1431 1432 googletag.defineSlot('/' + window.dfp.networkcode + '/' + window.dfp.serviceName + '/' + slotLocation + '/' + adUnit + '', window.dfp.slots[adUnit].sizes, adSlotId) 1433 .addService(googletag.pubads()) 1434 .setTargeting('adslotid', adSlotId.replace('dfp__','')) 1435 .setTargeting('CxContext', cxContextualIds); 1436 if (dfpDebug) {console.log('Defining slot: /' + window.dfp.networkcode + '/' + window.dfp.serviceName + '/' + slotLocation + '/' + adUnit)} 1437 1438 }); 1439 1440 //if (adUnit.includes('native') || adUnit.includes('interstitial')) { 1441 if (['native', 'interstitial', 'topad-desk', 'desk-1', ...(adSlotsNotAllowedForHBM || [])].some(slot => adUnit.includes(slot)) || (["tad", "lads"].includes(deliveryType) && !useHBM)) { 1442 1443 googletag.cmd.push(function() { 1444 const slot = googletag.pubads().getSlots().find(s => s.getSlotElementId() === adSlotId); 1445 if (slot) { 1446 googletag.pubads().refresh([slot], {changeCorrelator: false}); 1447 } 1448 }); 1449 1450 } else { 1451 1452 if (dfpDebug) { 1453 console.log('HAS: Existing slots: ');
1454 googletag.pubads().getSlots().forEach((slot) => { 1455 console.log('HAS: ' + slot.getSlotElementId()); 1456 }); 1457 } 1458 1459 window.relevantDigital = window.relevantDigital || {}; 1460 relevantDigital.cmd = relevantDigital.cmd || []; 1461 relevantDigital.cmd.push(function() { 1462 1463 relevantDigital.addPrebidConfig({ 1464 ortb2: { 1465 site: { 1466 //keywords: contextualIds.join(), 1467 ext: { 1468 data: { 1469 CxContext: Object.values(cxContextualIds), 1470 articleCategories: hbArticleCategories, 1471 articleTags: hbArticleTags 1472 } 1473 } 1474 } 1475 } 1476 }); 1477 1478 relevantDigital.loadPrebid({ 1479 configId: pbjsConf, 1480 manageAdserver: false, //Manage adserver set to off. 1481 collapseEmptyDivs: true, 1482 collapseBeforeAdFetch: false, 1483 noGpt: true, 1484 allowedDivIds: Array.isArray(adSlotId) ? adSlotId : [adSlotId], // set to an array to only load certain <div>s, example - ["divId1", "divId2"] 1485 noSlotReload: true, // set true to only load ad slots that have never been loaded 1486 googletagCalls: { 1487 refresh: (slots) => googletag.pubads().refresh(slots, { changeCorrelator: false }), 1488 }, 1489 onBeforeAuctionSetup: function(params) { 1490 params.auction.adUnits.forEach(function(unit) { 1491 unit.bids.forEach(function(bid){ 1492 if (bid.bidder == 'appnexus' || bid.bidder == 'appnexus_s2s_alias') { 1493 bid.params.keywords = {cxSegments: cxSegmentIds, CxContext: cxContextualIds, articleTags: hbArticleTags, articleCategories: hbArticleCategories}; 1494 if (dfpDebug) {console.log('Setting params for Xandr bidder...')} 1495 } 1496 }) 1497 }) 1498 } 1499 1500 }); 1501 }); 1502 1503 } 1504 1505 } 1506 1507 1508 if (location.href.indexOf('interstitial99') > -1) { 1509 1510 1511 let interval = setInterval(function(){ 1512 if (window.googletag && googletag.apiReady && googletag.pubadsReady) { 1513 waitForElement("body").then(function(element) { 1514 var aStr = '
1514<script>var interstitialSlot2; googletag.cmd.push(function() {interstitialSlot2 = googletag.defineOutOfPageSlot(\"/135812570/hymy/frontpage/interstitial\", \"dfp__interstitial_2\").addService(googletag.pubads());});<\/script><div id=\"dfp__interstitial_2\">
1514<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_2\");googletag.pubads().refresh([interstitialSlot2]);});<\/script></div>'; 1515 jQuery('#inner-wrapper > div.col-two').before(aStr); 1516 console.log('Interstitial added after timeout...'); 1517 }); 1518 clearInterval(interval); 1519 } 1520 }, 50); 1521 1522 waitForElement("body").then(function(element) { 1523 var aStr = '
1523<script>var interstitialSlot; googletag.cmd.push(function() {interstitialSlot = googletag.defineOutOfPageSlot(\"/135812570/hymy/frontpage/interstitial\", \"dfp__interstitial_1\").addService(googletag.pubads());});<\/script><div id=\"dfp__interstitial_1\">
1523<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");googletag.pubads().refresh([interstitialSlot]);});<\/script></div>'; 1524 jQuery('#inner-wrapper > div.col-two').before(aStr); 1525 console.log('Interstitial added...'); 1526 }); 1527 1528 } 1529 1530/* 1531 if (!location.href.includes('dfptesti')) { 1532 1533 if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') { 1534 cxSegmentIds = localStorage.getItem("_cX_segmentInfo"); 1535 } 1536 1537 initDFP(cxSegmentIds); 1538 console.log('initDFP called with LS_cX_segmentInfo...'); 1539 1540 } 1541*/ 1542 1543</script>
1543 1544 1545<!-- DFP End --> 1546 1547<style> 1548 1549 #topbar .navi>li>a { padding: 0 6px; letter-spacing: 0; } 1550 1551 .bbp-dfp-slots .grid-item { 1552 padding: 25px 0 0; 1553 } 1554 .clearfix.grid__container.box--full.bbp-dfp-slots { 1555 border: none; 1556 } 1557 @media only screen and (max-width: 768px) { 1558 #bbpress-forums .bbp-body .bbp-reply-author { 1559 min-height: 60px !important; 1560 padding-left: 0 !important; 1561 } 1562 .grid-item2 { 1563 float: none; 1564 } 1565 .clearfix.grid__container.box--full.bbp-dfp-slots .grid-item { 1566 padding: 0; 1567 } 1568 .bbp-dfp-slots .grid-item { 1569 padding: 25px 0; 1570 } 1571 } 1572 1573</style> 1574 1575<!-- Google Tag Manager needs to be here -->
1576<script>
vendor: 327 bytes, lines 1576-1580
1576(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 1577new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 1578j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 1579'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 1580})(window,document,'script','dataLayer','
1580GTM-M3VTTX
vendor: 3 bytes, line 1580
1580');
1580</script>
1580 1581<!-- End Google Tag Manager --> 1582 1583<!-- Google Tag Manager -->
1584<script>
vendor: 327 bytes, lines 1584-1588
1584(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 1585new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 1586j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 1587'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 1588})(window,document,'script','dataLayer','
1588GTM-TSMVFP56
vendor: 3 bytes, line 1588
1588');
1588</script>
1588 1589<!-- End Google Tag Manager --> 1590 1591<!-- Google Tag Manager -->
1592<script>
vendor: 327 bytes, lines 1592-1596
1592(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 1593new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 1594j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 1595'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 1596})(window,document,'script','dataLayer','
1596GTM-T56W3Z7
vendor: 3 bytes, line 1596
1596');
1596</script>
1596 1597<!-- End Google Tag Manager --> 1598 1599<!-- // hymy.fi--> 1600 1601<!-- Head tag end, do not remove --> 1602 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 1603<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"> 1604 1605 <!-- This site is optimized with the Yoast SEO plugin v26.3 - https://yoast.com/wordpress/plugins/seo/ --> 1606 <title>Uutiset - Hymy</title> 1607 <link rel="canonical" href="https://hymy.fi/kategoria/uutiset/"> 1608 <link rel="next" href="https://hymy.fi/kategoria/uutiset/page/2/"> 1609 <meta property="og:locale" content="fi_FI"> 1610 <meta property="og:type" content="article"> 1611 <meta property="og:title" content="Uutiset - Hymy"> 1612 <meta property="og:url" content="https://hymy.fi/kategoria/uutiset/"> 1613 <meta property="og:site_name" content="Hymy"> 1614 <meta property="og:image" content="https://hymy.fi/wp-content/uploads/2016/08/hymylogo-1024x710.jpg"> 1615 <meta property="og:image:width" content="1024"> 1616 <meta property="og:image:height" content="710"> 1617 <meta property="og:image:type" content="image/jpeg"> 1618 <meta name="twitter:card" content="summary_large_image"> 1619
1619<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"CollectionPage","@id":"https://hymy.fi/kategoria/uutiset/","url":"https://hymy.fi/kategoria/uutiset/","name":"Uutiset - Hymy","isPartOf":{"@id":"https://hymy.fi/#website"},"breadcrumb":{"@id":"https://hymy.fi/kategoria/uutiset/#breadcrumb"},"inLanguage":"fi"},{"@type":"BreadcrumbList","@id":"https://hymy.fi/kategoria/uutiset/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Etusivu","item":"https://hymy.fi/"},{"@type":"ListItem","position":2,"name":"Uutiset"}]},{"@type":"WebSite","@id":"https://hymy.fi/#website","url":"https://hymy.fi/","name":"Hymy","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://hymy.fi/haku/?q={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fi"}]}</script>
1619 1620 <!-- / Yoast SEO plugin. --> 1621 1622 1623<link rel="dns-prefetch" href="//ajax.googleapis.com"> 1624<link rel="dns-prefetch" href="//plausible.io"> 1625<link rel="alternate" type="application/rss+xml" title="Hymy » Uutiset kategorian RSS-syöte" href="https://hymy.fi/kategoria/uutiset/feed/"> 1626 1627
1627<script> 1628 window.AsteikkoMagWidgets = { 1629 siteUrl: "https:\/\/hymy.fi" }; 1630 </script>
1630 1631 1632 <style id="wp-img-auto-sizes-contain-inline-css" type="text/css"> 1633img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 1634/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 1635</style> 1636<link rel="stylesheet" id="asteikko-auth-style-css" href="https://hymy.fi/wp-content/plugins/asteikko-auth-otavamedia/css/style.css?ver=3.0.5" type="text/css" media="all"> 1637<link rel="stylesheet" id="asmag_widgets_css-css" href="https://hymy.fi/wp-content/plugins/asteikko-mag/dist/wp-widgets/index.css?ver=6.21.2-67928b343a4e93d76879e5e503996d22" type="text/css" media="all"> 1638<link rel="stylesheet" id="om-core-css" href="https://hymy.fi/wp-content/themes/om-core/style.css?ver=1790248696" type="text/css" media="all"> 1639<link rel="stylesheet" id="om-core-widgets-styles-css" href="https://hymy.fi/wp-content/plugins/om-widgets-plugin/assets/widgets.css?ver=6.9.9" type="text/css" media="all"> 1640<style id="wp-block-library-inline-css" type="text/css"> 1641:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
1641--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}.has-text-align-center{text-align:center}.has-text-align-left{text-align:left}.has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}} 1642/*wp_block_styles_on_demand_placeholder:6abf5a890f666*/ 1643/*# sourceURL=wp-block-library-inline-css */ 1644</style> 1645<style id="classic-theme-styles-inline-css" type="text/css"> 1646/*! This file is auto-generated */ 1647.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} 1648/*# sourceURL=/wp-includes/css/classic-themes.min.css */ 1649</style> 1650<link rel="stylesheet" id="om-footer-css" href="https://hymy.fi/wp-content/plugins/om-footer/assets/css/om-footer.css?ver=1.1.0" type="text/css" media="all"> 1651<link rel="stylesheet" id="child-style-css" href="https://hymy.fi/wp-content/themes/om-hymy-theme/style.css?ver=6.9.9" type="text/css" media="all"> 1652<link rel="stylesheet" id="style_login_widget-css" href="https://hymy.fi/wp-content/plugins/miniorange-oauth-oidc-single-sign-on-single/resources/css/style_login_widget.css?ver=6.9.9" type="text/css" media="all"> 1653
1653<script type="text/javascript" id="om-website-analytics"> 1654 analyticsEvent = function() {}; 1655 analyticsSocial = function() {}; 1656 analyticsVPV = function() {}; 1657 analyticsClearVPV = function() {}; 1658 analyticsForm = function() {}; 1659 window.dataLayer = window.dataLayer || []; 1660 dataLayer.push({"PageType":"Kategoria","PaidUser":false,"UserLevel":"1"}); 1661 </script>
vendor: 1 bytes, line 1661
1661
1662<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js" id="jquery-js"></script>
vendor: 1 bytes, line 1662
1662
1663<script type="text/javascript" src="https://hymy.fi/wp-content/themes/om-core/plugins.js?ver=1790248696" id="om-core-plugins-js"></script>
vendor: 1 bytes, line 1663
1663
1664<script type="text/javascript" defer data-domain="hymy.fi" data-api="https://plausible.io/api/event" data-cfasync="false" src="https://plausible.io/js/plausible.outbound-links.js?ver=2.3.1" id="plausible-analytics-js"></script>
vendor: 1 bytes, line 1664
1664
1665<script type="text/javascript" id="plausible-analytics-js-after"> 1666/* <![CDATA[ */ 1667window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) } 1668//# sourceURL=plausible-analytics-js-after 1669/* ]]> */ 1670</script>
1670 1671<link rel="https://api.w.org/" href="https://hymy.fi/wp-json/"><link rel="alternate" title="JSON" type="application/json" href="https://hymy.fi/wp-json/wp/v2/categories/11355"><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://hymy.fi/xmlrpc.php?rsd"> 1672<meta name="generator" content="WordPress 6.9.9"> 1673<!-- AWPO lazy-load marker --><meta name="plausible-analytics-version" content="2.3.1"> 1674 1675
1675<script> 1676 var wp_template_url = 'https://hymy.fi/wp-content/themes/om-core'; 1677 </script>
1677 1678 1679 1680 1681 <!-- SSO login related --> 1682
1682<script type="text/javascript"> 1683 window.om = window.om || {}; 1684 window.om.wp_nonce = "9b049460a0"; 1685 window.om.client_id = "2db43cdc-f69e-4559-9e56-c5694ebacff6"; 1686 window.om.client_url = "https://tili.otavamedia.fi"; 1687 </script>
1687 1688 1689 1690</head> 1691 1692<body class="archive category category-uutiset category-11355 wp-theme-om-core wp-child-theme-om-hymy-theme blog-1"> 1693 1694 <!-- Body tag start, do not remove --> 1695 1696<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 1696-1697
1696 1697<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1697GTM-M3VTTX
vendor: 83 bytes, line 1697
1697" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1698<!-- End Google Tag Manager (noscript) --> 1699 1700<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 1700-1701
1700 1701<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1701GTM-TSMVFP56
vendor: 83 bytes, line 1701
1701" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1702<!-- End Google Tag Manager (noscript) --> 1703 1704<!-- Google Tag Manager (noscript) --> 1705<noscript><iframe height="0" width="0" style="display:none;visibility:hidden" data-src="https://www.googletagmanager.com/ns.html?id=GTM-T56W3Z7" class="awpo-lazy"></iframe></noscript> 1706<!-- End Google Tag Manager (noscript) --> 1707
1708<script> 1709 1710 if (location.href.includes('dfptesti')) { 1711 1712 if (window.dataLayer) { 1713 dataLayer.forEach(function (dataLayerItem) { 1714 if (dataLayerItem['PrimaryCategory'] !== '' && dataLayerItem['PrimaryCategory'] !== undefined) { 1715 articleCategory = dataLayerItem['PrimaryCategory'].toLocaleString().toLowerCase().replace(/, /g, ','); 1716 if (dfpDebug) {console.log('ArticleCategory: ' + articleCategory);} 1717 } 1718 if (dataLayerItem['Categories'] !== '' && dataLayerItem['Categories'] !== undefined) { 1719 articleCategories = dataLayerItem['Categories'].toLocaleString().toLowerCase().replace(/, /g, ','); 1720 if (dfpDebug) {console.log('Categories: ' + articleCategories);} 1721 } 1722 if (dataLayerItem['Tags'] !== '' && dataLayerItem['Tags'] !== undefined) { 1723 articleTags = dataLayerItem['Tags'].toLocaleString().toLowerCase().replace(/, /g, ','); 1724 if (dfpDebug) {console.log('Tags: ' + articleTags);} 1725 } 1726 if (dataLayerItem['Section'] !== '' && dataLayerItem['Section'] !== undefined) { 1727 articleSection = dataLayerItem['Section'].toLowerCase().replace(/, /g, ','); 1728 if (dfpDebug) {console.log('ArticleSection: ' + articleSection);} 1729 } 1730 }); 1731 } else { 1732 console.error('DataLayer is not defined.') 1733 } 1734 1735 if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') { 1736 cxSegmentIds = localStorage.getItem("_cX_segmentInfo"); 1737 } 1738 initDFP(cxSegmentIds); 1739 console.log('initDFP called with LS_cX_segmentInfo...'); 1740 1741 } 1742 1743</script>
1743 1744 1745<!-- Body tag end, do not edit or remove --> 1746
1746<script> 1747 function getCookie(name) { 1748 var value = "; " + document.cookie; 1749 var parts = value.split("; " + name + "="); 1750 if (parts.length == 2) return parts.pop().split(";").shift(); 1751 } 1752 1753 if (getCookie("theme") == "light") { 1754 document.getElementsByTagName("body")[0].classList.add("light"); 1755 } 1756 </script>
1756 1757 1758 <div id="additionalBg"> 1759 <div id="topbar"> 1760 <div class="wrapper--center"> 1761 1762 1763 <span id="mobile-navigation__button" class="fa fa-bars"></span> 1764 <span id="mobile-navigation__search" class="fa fa-search navi__search--button"></span> 1765 1766 1767 <a class="topbar__logo float--left" href="https://hymy.fi/"></a> 1768 1769 <div id="mobile-scroll"> 1770 1771 <div id="navigation--mobilebuttons" class="navi float--right"> 1772 <a href="/tilaa" class="float--left">Tilaa</a> 1773<a href="/nakoislehti" class="navi__magazine float--left">Näköislehti</a> 1774 1775<a href="https://hymy.fi/kirjaudu/" title="Kirjaudu" class="navi__user float--left"> 1776 Kirjaudu</a> 1777 1778 </div> 1779 1780 <ul id="navigation--primary" class="navi float--left"><li id="menu-item-36689" class="menu-item menu-item-type-taxonomy menu-item-object-category current-menu-item menu-item-36689"><a href="https://hymy.fi/kategoria/uutiset/" aria-current="page">Uutiset</a></li> 1781<li id="menu-item-692075" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-692075"><a href="https://hymy.fi/kategoria/ilmiot/">Ilmiöt</a></li> 1782<li id="menu-item-690496" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-690496"><a href="https://hymy.fi/kategoria/terveys/">Terveys</a></li> 1783<li id="menu-item-690497" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-690497"><a href="https://hymy.fi/kategoria/sotahistoria/">Sotahistoria</a></li> 1784<li id="menu-item-106865" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-106865"><a href="https://hymy.fi/kategoria/horoskooppi/">Horoskooppi</a></li> 1785<li id="menu-item-667255" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-667255"><a href="https://hymy.fi/kategoria/soini-sanoo-suoraan/">Soini sanoo suoraan</a></li> 1786</ul><div id="navigation--secondary" class="navi float--right"> 1787 1788 <a href="/nakoislehti" class="navi__magazine float--left" title="Näköislehti">Näköislehti</a> 1789 1790 1791 1792 <a href="https://hymy.fi/kirjaudu/" class="navi__icon navi__user float--left" title="Kirjaudu"> 1793 <i class="fa fa-user"></i> 1794 <span class="display__text--tablet">Kirjaudu</span> 1795 </a> 1796 1797 <a class="navi__icon navi__search--button float--left" title="Haku"> 1798 <i class="fa fa-search"></i> 1799 </a> 1800 1801</div> 1802 <div class="navi float--right" id="navigation--some"> 1803 1804 <a href="https://www.facebook.com/hymy.fi" target="_blank" title="Facebook" class="fa fa-facebook"></a> 1805 <a href="https://twitter.com/HymyFI" target="_blank" title="Twitter" class="fa fa-twitter"></a> 1806 <a href="https://hymy.fi/feed" target="_blank" title="RSS-syöte" class="fa fa-rss"></a> 1807 </div> 1808 1809 <div style="clear:both;"><!-- overflow:hidden; won't work in this case --></div> 1810 1811 </div><!-- mobile-scroll --> 1812 </div><!-- .wrapper--center --> </div> <!-- topbar --> 1813 1814 1815 <div id="wrapper"> 1816 <div id="inner-wrapper"> 1817 <div class="widget-area super-widget-area"> 1818 </div> 1819 <div class="widget-area top-widget-area"> 1820 1821 1822 </div> 1823 1824 <div class="col-two"> 1825 1826 1827 <div class="widget-area"> 1828 1829 1830 <div data-template="def50200389132fff570895777387737a2905da87799c4c4d24d836b7d82e8f52a3a9b3775a5bf2e4db222970c7ccd512474b44dd70bfa1ed393e353c781fe47b598373f7586533615e42c451f503da9e9b0061d4c2f98af" data-query="def50200ef0d77c7feb37391e2dd9813d9b9d1d0e19f72fd20f55e53a97ce5e1198638d8633f4222c692b176a20b61afe24f8926c77d414f88b899166f8257b5d77acf345fcd8142a3d787c2acf9d0786acad1558d78e0cedd1fb376147a2994bb6077f74df77cc76bc5a74e1acf6d6a8d2f263f2f361c94b8cfd95e40324080ab2a59a8700971b76d7e91fb67fefb573a41e3823f2c748360cb7e746c1e69bbf1487aa703d52dba04a79c8560cc87cdcd8e70242b9d023bd25bcea80f635f1471da9c4b18ebf0ebe2648b6b1ad2450ecbef0e401ed38b8f4572dd31d974357c7ad4f0dcbbdb448dff28b8e382c3d3cc942b28d22a9329ae35e76705d62c1611f89470614b9a23d55f5b0f1
1830d164e18284612c5bacf1f7ffed40f884911040ff5545a2a" data-hash="6abf5a891c7f6" data-blog="1" data-options="def502000c58e47263a273ad9cf579a8f25749db63549d063aa51ef0040a0cd844bced29aed738f313626499794a25c1f9901bce79db6b1dd99b1eaa9c4fd0218c563dcbcf371d25dae8839ee2adb6732f8f74c89e05" class="postlisting postlisting-6 omwidget om-grid-container two "> 1831 1832 1833 <ul class="om-grid"> 1834 <li class="om-grid-item"> 1835 1836 <a href="https://hymy.fi/uutiset/muusikkolegenda-phil-collins-75-kertoo-uudessa-piers-morgan-uncensored-ohjelman-trailerissa-elamansa-synkimmista-hetkista/"> 1837 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2026/10/image-849x1024.png"> 1838 </div> 1839 </a> 1840 1841 <div class="om-grid-item__content"> 1842 <div class="meta typogr__meta"> 1843 <span class="typogr__meta--category"> 1844 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 1845 </span> 1846 </div> 1847 <a href="https://hymy.fi/uutiset/muusikkolegenda-phil-collins-75-kertoo-uudessa-piers-morgan-uncensored-ohjelman-trailerissa-elamansa-synkimmista-hetkista/"> 1848 <h2>Phil Collins â lapset kutsuttiin sairaalavuoteelle!</h2> 1849 1850 <div class="om-grid-item__excerpt"> 1851 <p>Muusikkolegenda Phil Collins, 75, kertoo uudessa Piers Morgan Uncensored -ohjelman trailerissa elämänsä synkimmistä hetkistä. Collins san…</p> 1852 </div> 1853 </a> 1854 1855 <div class="meta typogr__meta"> 1856 1857 <span class="typogr__meta--date"> 1858 02.10.2026 </span> 1859 1860 1861 1862 </div> 1863 1864 </div> 1865 1866 </li> 1867 <li class="om-grid-item"> 1868 1869 <a href="https://hymy.fi/yleinen/ksml-palsanmaet-harkitsevat-luopumista-jatkajaa-etsitaan/"> 1870 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2024/02/VI021706K_01-1-1024x683.jpg"> 1871 </div> 1872 </a> 1873 1874 <div class="om-grid-item__content"> 1875 <div class="meta typogr__meta"> 1876 <span class="typogr__meta--category"> 1877 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 1878 <a href="https://hymy.fi/kategoria/yleinen/" class=" typogr__catlink">Yleinen</a> 1879 </span> 1880 </div> 1881 <a href="https://hymy.fi/yleinen/ksml-palsanmaet-harkitsevat-luopumista-jatkajaa-etsitaan/"> 1882 <h2>KSML: Palsanmäet harkitsevat luopumista! – Jatkajaa etsitään!</h2> 1883 1884 <div class="om-grid-item__excerpt"> 1885 <p>Aki ja Heli Palsanmäki kertovat Keskisuomalaisen
1885haastattelussa, että he ovat miettineet luopumista toiminnastaan. He ovat alkaneet vähit…</p> 1886 </div> 1887 </a> 1888 1889 <div class="meta typogr__meta"> 1890 1891 <span class="typogr__meta--date"> 1892 02.10.2026 </span> 1893 1894 1895 1896 </div> 1897 1898 </div> 1899 1900 </li> 1901 <li class="om-grid-item"> 1902 1903 <a href="https://hymy.fi/uutiset/tvsta-tuttu-sari-anna-huttunen-toimitusjohtajaksi-tunturiviihteeseen/"> 1904 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2025/04/Latelat_012-1024x683.jpg"> 1905 </div> 1906 </a> 1907 1908 <div class="om-grid-item__content"> 1909 <div class="meta typogr__meta"> 1910 <span class="typogr__meta--category"> 1911 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 1912 </span> 1913 </div> 1914 <a href="https://hymy.fi/uutiset/tvsta-tuttu-sari-anna-huttunen-toimitusjohtajaksi-tunturiviihteeseen/"> 1915 <h2>TV:stä tuttu Sari-Anna Huttunen toimitusjohtajaksi Tunturiviihteeseen!</h2> 1916 1917 <div class="om-grid-item__excerpt"> 1918 <p>Televisiosta tuttu Sari-Anna âSarkkuâ Huttunen on nyt toimitusjohtaja Tunturiviihde Oy:ssä. Huttunen aloitti 1. lokakuuta uuden pest…</p> 1919 </div> 1920 </a> 1921 1922 <div class="meta typogr__meta"> 1923 1924 <span class="typogr__meta--date"> 1925 01.10.2026 </span> 1926 1927 1928 1929 </div> 1930 1931 </div> 1932 1933 </li> 1934 <li class="om-grid-item"> 1935 1936 <a href="https://hymy.fi/uutiset/aku-louhimiehen-lapin-sota-elokuva-tulee-elokuvateattereihin-23-10-2026/"> 1937 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2026/10/image001-1024x684.jpg"> 1938 </div> 1939 </a> 1940 1941 <div class="om-grid-item__content"> 1942 <div class="meta typogr__meta"> 1943 <span class="typogr__meta--category"> 1944 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 1945 </span> 1946 </div> 1947 <a href="https://hymy.fi/uutiset/aku-louhimiehen-lapin-sota-elokuva-tulee-elokuvateattereihin-23-10-2026/"> 1948 <h2>Katso täältä kohtaukset Aku Louhimiehen Lapin sota -elokuvasta!</h2> 1949 1950 <div class="om-grid-item__excerpt"> 1951 <p>Aku Louhimiehen Lapin sota -elokuva tulee elokuvateattereihin 23.10.2026. Katso ohesta näytteet dramaattisesta ja inhimillisestä elokuvasta, j…</p> 1952 </div> 1953 </a> 1954 1955 <div class="meta typogr__meta"> 1956 1957 <span class="typogr__meta--date"> 1958 01.10.2026 </span> 1959 1960 1961 1962 </div> 1963 1964 </div> 1965 1966 </li> 1967 <li class="om-grid-item"> 1968 1969 <a href="https://hymy.fi/uutiset/automaattinen-luonnosyhdysvalloissa-tennesseessa-tapahtui-poikkeuksellinen-ja-jarkyttava-tilanne-kun-kuolemaantuomittu-christa-pike-50-jai-henkiin-kahden-tappavan-ruiskeen-jalkeen/"> 1970 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2016/09/linna_vankila_kalteri.jpg"> 1971 </div> 1972 </a> 1973 1974 <div class="om-grid-item__content"> 1975 <div class="meta typogr__meta"> 1976 <span class="typogr__meta--category"> 1977 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 1978 </span> 1979 </div> 1980 <a href="https://hymy.fi/uutiset/automaattinen-luonnosyhdysvalloissa-tennesseessa-tapahtui-poikkeuksellinen-ja-jarkyttava-tilanne-kun-kuolemaantuomittu-christa-pike-50-jai-henkiin-kahden-tappavan-ruiskeen-jalkeen/"> 1981 <h2>Kuolemaantuomittu selvisi kahdesta myrkkyruiskeesta â vietiin sairaalaan!</h2> 1982 1983 <div class="om-grid-item__excerpt"> 1984 <p>Yhdysvalloissa Tennesseessä tapahtui poikkeuksellinen ja järkyttävä tilanne, kun kuolemaantuomittu Christa Pike, 50, jäi henkiin kahden t…</p> 1985 </div> 1986 </a> 1987 1988 <div class="meta typogr__meta"> 1989
1990 <span class="typogr__meta--date"> 1991 01.10.2026 </span> 1992 1993 1994 1995 </div> 1996 1997 </div> 1998 1999 </li> 2000 <li class="om-grid-item"> 2001 2002 <a href="https://hymy.fi/uutiset/rita-niemi-manninen-ja-aki-manninen-ovat-avoimina-intiimielamastaan/"> 2003 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2023/12/AkiRitaManninen-1024x774.jpg"> 2004 </div> 2005 </a> 2006 2007 <div class="om-grid-item__content"> 2008 <div class="meta typogr__meta"> 2009 <span class="typogr__meta--category"> 2010 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2011 </span> 2012 </div> 2013 <a href="https://hymy.fi/uutiset/rita-niemi-manninen-ja-aki-manninen-ovat-avoimina-intiimielamastaan/"> 2014 <h2>Aki ja Rita Manninen puhuvat podissa seksistä: ”Olet se, joka kulkee meistä ilkosilleen kotona”</h2> 2015 2016 <div class="om-grid-item__excerpt"> 2017 <p>Rita Niemi-Manninen ja Aki Manninen ovat avoimina intiimielämästään. He keskustelevat seksistä Sillai kai –podcastissa. Mikä saa pa…</p> 2018 </div> 2019 </a> 2020 2021 <div class="meta typogr__meta"> 2022 2023 <span class="typogr__meta--date"> 2024 01.10.2026 </span> 2025 2026 2027 2028 </div> 2029 2030 </div> 2031 2032 </li> 2033 <li class="om-grid-item"> 2034 2035 <a href="https://hymy.fi/uutiset/presidentti-tarja-halonen-saattoi-ystavaansa-seela-sellaa-taman-viimeiselle-matkalle/"> 2036 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2023/12/TarjaHalonen-1024x774.jpg"> 2037 </div> 2038 </a> 2039 2040 <div class="om-grid-item__content"> 2041 <div class="meta typogr__meta"> 2042 <span class="typogr__meta--category"> 2043 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2044 </span> 2045 </div> 2046 <a href="https://hymy.fi/uutiset/presidentti-tarja-halonen-saattoi-ystavaansa-seela-sellaa-taman-viimeiselle-matkalle/"> 2047 <h2>IS: Tarja Halonen osallistui Seela Sellan hautajaisiin!</h2> 2048 2049 <div class="om-grid-item__excerpt"> 2050 <p>Presidentti Tarja Halonen saattoi ystäväänsä Seela Sellaa tämän viimeiselle matkalle. Asiasta kertoo Ilta-Sanomat. â Olin eilen hautajais…</p> 2051 </div> 2052 </a> 2053 2054 <div class="meta typogr__meta"> 2055 2056 <span class="typogr__meta--date"> 2057 01.10.2026 </span> 2058 2059 2060 2061 </div> 2062 2063 </div> 2064 2065 </li> 2066 <li class="om-grid-item"> 2067 2068 <a href="https://hymy.fi/uutiset/vikingloton-paavoitto-suomeen-miljoonia-euroja/"> 2069 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2026/07/image-1-1024x674.png"> 2070 </div> 2071 </a> 2072 2073 <div class="om-grid-item__content"> 2074 <div class="meta typogr__meta"> 2075 <span class="typogr__meta--category"> 2076 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2077 </span> 2078 </div> 2079 <a href="https://hymy.fi/uutiset/vikingloton-paavoitto-suomeen-miljoonia-euroja/"> 2080 <h2>Vikingloton päävoitto Suomeen! Miljoonia euroja!</h2> 2081 2082 <div class="om-grid-item__excerpt"> 2083 <p>Keskiviikon Vikingloton ainoa täysosuma löytyi Suomesta. Voitto osui kuuden osuuden porukkapeliin. Vikingloton kierroksen 40/2026 oikea rivi o…</p> 2084 </div> 2085 </a> 2086 2087 <div class="meta typogr__meta"> 2088 2089 <span class="typogr__meta--date"> 2090 01.10.2026 </span> 2091 2092 2093 2094 </div> 2095 2096 </div> 2097 2098 </li> 2099 <li class="om-grid-item"> 2100 2101 <a href="https://hymy.fi/uutiset/lohkomallit-seksuaalirikossarjan-e
2101situtkinta-on-valmistunut-lounais-suomen-poliisi-on-saanut-valmiiksi-turussa-tapahtuneen-seksuaalirikossarjan-esitutkinnan/"> 2102 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2021/06/poliisi_2021_1-1024x768.jpg"> 2103 </div> 2104 </a> 2105 2106 <div class="om-grid-item__content"> 2107 <div class="meta typogr__meta"> 2108 <span class="typogr__meta--category"> 2109 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2110 </span> 2111 </div> 2112 <a href="https://hymy.fi/uutiset/lohkomallit-seksuaalirikossarjan-esitutkinta-on-valmistunut-lounais-suomen-poliisi-on-saanut-valmiiksi-turussa-tapahtuneen-seksuaalirikossarjan-esitutkinnan/"> 2113 <h2>Seksuaalirikossarjan esitutkinta on valmistunut</h2> 2114 2115 <div class="om-grid-item__excerpt"> 2116 <p>Lounais-Suomen poliisi on saanut valmiiksi Turussa tapahtuneen seksuaalirikossarjan esitutkinnan. Poliisi on tutkinut viiden epäillyn seksuaal…</p> 2117 </div> 2118 </a> 2119 2120 <div class="meta typogr__meta"> 2121 2122 <span class="typogr__meta--date"> 2123 30.09.2026 </span> 2124 2125 2126 2127 </div> 2128 2129 </div> 2130 2131 </li> 2132 <li class="om-grid-item"> 2133 2134 <a href="https://hymy.fi/uutiset/ylojarven-kauraslammen-koulun-tupakkaruudussa-syntyi-nimi-eppu-normaali/"> 2135 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2025/10/unnamed-18-1024x678.jpg"> 2136 </div> 2137 </a> 2138 2139 <div class="om-grid-item__content"> 2140 <div class="meta typogr__meta"> 2141 <span class="typogr__meta--category"> 2142 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2143 </span> 2144 </div> 2145 <a href="https://hymy.fi/uutiset/ylojarven-kauraslammen-koulun-tupakkaruudussa-syntyi-nimi-eppu-normaali/"> 2146 <h2>Eppu Normaalille muistolaatta Ylöjärven koulun seinään! – Tupakkaruudussa syntyi nimi!</h2> 2147 2148 <div class="om-grid-item__excerpt"> 2149 <p>Ylöjärven Kauraslammen koulun tupakkaruudussa syntyi nimi: Eppu Normaali. Tuosta on aikaa 50 vuotta. Silloin tuskin bändin perustaneet nuoret …</p> 2150 </div> 2151 </a> 2152 2153 <div class="meta typogr__meta"> 2154 2155 <span class="typogr__meta--date"> 2156 30.09.2026 </span> 2157 2158 2159 2160 </div> 2161 2162 </div> 2163 2164 </li> 2165 </ul> 2166 2167 <ul class="om-grid-controls"> 2168 <li> 2169 <button class="button om-grid-load-more">Lataa lisää <i style="display:none;" class="loader"></i> 2170 </button> 2171 </li> 2172 </ul> 2173 2174 </div> 2175 2176 <div id="dfp__mob-2"> 2177
2177<script>window.dfp.displayAdslot('dfp__mob-2')</script>
2177 2178 </div> 2179 <div id="dfp__in-text"> 2180
2180<script>window.dfp.displayAdslot('dfp__in-text')</script>
2180 2181 </div> 2182 2183 </div> 2184 2185 2186 <div style="clear: both;"></div> 2187 2188</div> 2189 2190 2191<div id="sivupalkki"> 2192 <div> 2193 <div class="mainside"></div> 2194 2195 2196 <div style="clear:both"></div> 2197 2198 <div id="secondary" class="widget-area" role="complementary"> 2199 2200 2201 <div id="tilaa-seuraa" class="om-widget sidebar-block socialmedialinks socialmedialinks-2"> 2202 <div class="links"> 2203 <a href="/kirjaudu/" class="returnLink">Kirjaudu</a><a href="/tilaa?promoPosition=header-kategoria">Tilaa</a><a href="/ukk/">Ohje</a> </div> 2204 2205 <div class="some"> 2206 2207 <a href="https://www.facebook.com/hymy.fi" target="_blank" title="Facebook" class="fa fa-facebook"></a><a href="https://twitter.com/HymyFI" target="_blank" title="Twitter" class="fa fa-twitter"></a><a href="https://hymy.fi/feed" target="_blank" title="RSS-syöte" class="fa fa-rss"></a> </div> 2208 <div style="clear:both;"></div> 2209 </div> 2210 2211 2212 <div id="dfp__rectangle-1"> 2213
2213<script>window.dfp.displayAdslot('dfp__rectangle-1')</script>
2213 2214 </div> 2215 <div class="widget_text sidebar-block"><div class="textwidget custom-html-widget"><!--<div style="text-align: center"> 2216<a href="https://hymy.fi/mainos/tiesitko-taman-kulutusluotosta-vastasimme-vaitteisiin-ja-kumosimme-virheet/"><img src="https://hymy.fi/wp-content/uploads/2024/02/Sortter-2024-helmikuu-Hymy-kuva-01.jpg" border="0"></a></div>--></div></div> 2217 <div class="omwidget sidebar-block magazineorderwidget magazineorderwidget-2"> 2218 2219 <a href="https://tilaus.hymy.fi/tilaus?promoID=OM_widget&promoName=OM_HY&promoCreative=onlinetarjous&promoPosition=sidebar"> 2220 2221 <div class="magazineorderwidget__content"> 2222 2223 <img class="magazineorderwidget__background awpo-lazy" data-src="https://hymy.fi/wp-content/uploads/2018/03/HY_sivupalkin_myyntiviesti2.jpg"><noscript><img class="magazineorderwidget__background" src="https://hymy.fi/wp-content/uploads/2018/03/HY_sivupalkin_myyntiviesti2.jpg"></noscript> 2224 2225 <img class="magazineorderwidget__cover awpo-lazy" data-src="https://mediapankki.otavamedia.fi/api/v1/covers/hymy/latest.jpg?maxWidth=200&maxHeight=258"><noscript><img class="magazineorderwidget__cover" src="https://mediapankki.otavamedia.fi/api/v1/covers/hymy/latest.jpg?maxWidth=200&maxHeight=258"></noscript> 2226 </div> 2227 2228 </a> 2229 2230 </div> 2231 2232 <div class="sidebar-block"> <h2 class="block-header_sidebar">Suosituimmat</h2> 2233 <article class="omwidget om-tab-container"> 2234 2235 2236 <ul class="navtabs two"> 2237 <li class="active typogr__tab" data-hash="6abf5a896fd0a"><a>Tänään</a></li> 2238 <li class="typogr__tab" data-hash="6abf5a896fe4c"><a>Viikko</a></li> 2239 </ul> 2240 2241 2242 <div data-template="def50200dee9a74be9a6e2618f8f506508fc54b36dacc3cbe084aa2e0fc0c782a7b309fbce7bdabd4359452b59071f14ee6d2b205f91f75b71ab4971d43badb2a3f9eeb3ed36c2766ea9b5d0e210885e572d1992d1c92caf40bf91" data-query="def5020023e6bf96b3b2be7bb698
224200795013dce60801210739c04dd07510bff0241cddcb7d484a50fc5eba3c788e33a7437d2503ea518a2d92455aa589bb3604e5d3998d9522d85972e168bc8859b0705f39ffc2f58a4313c7132838e1c03d617a4f4caab9751f7226f658a4a575a6587375c94f2ed4eba7c2f6cccc0959f2300dfafaceb415b2f98f48a61d7ae571a3c26f8725f80fc59c9b29b75c4bfbfb04ac7b087b14287260d645a4461742571a8c21c24ef2d1fc58da5dc23db3f028d5a11f3963980e913062d2813f75e76391ca533e0c09214b0ef2aaa769ccba4a3be5fe0e3c85d0b82fdf5dd2541d511fd5ecd920f163b5acf7f302a7ec02201274b013846dd3db3626a76c44bad72148169b255978cae9130074e83cd22f8ae205548762123b0839f13b886d1c1244ebf3ff70657adc126a2dcd16d326391624450587d2a1e0694eba15bc5213804aa43cf04c4878" data-hash="6abf5a896fd0a" data-blog="1" data-options="def502009afb50115279a0b9f0a438da9eb67dcbdb94d8d56a6618f824ac6e27cd65c2f27eea44362390c1d0de93b2ceb5fa0310bb1dc7b385cf1b6368505bbf8df56e6f3bc65c7abfe4bfe0305792b23f1a06a35f53" class="postlistingwithtabs postlistingwithtabs--1 omwidget om-grid-container one active"> 2243 2244 2245 <ul class="om-grid"> 2246 <li class="compact"> 2247 <div class="meta typogr__meta"> 2248 <span class="compact__cats typogr__catlink"> 2249 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2250 </span> 2251 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2252 01.10.2026 </span> 2253 </div> 2254 2255 <a href="https://hymy.fi/uutiset/tvsta-tuttu-sari-anna-huttunen-toimitusjohtajaksi-tunturiviihteeseen/"> 2256 <h3>TV:stä tuttu Sari-Anna Huttunen toimitusjohtajaksi Tunturiviihteeseen!</h3> 2257 </a> 2258 2259</li> 2260<li class="compact"> 2261 <div class="meta typogr__meta"> 2262 <span class="compact__cats typogr__catlink"> 2263 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2264 </span> 2265 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2266 01.10.2026 </span> 2267 </div> 2268 2269 <a href="https://hymy.fi/uutiset/presidentti-tarja-halonen-saattoi-ystavaansa-seela-sellaa-taman-viimeiselle-matkalle/"> 2270 <h3>IS: Tarja Halonen osallistui Seela Sellan hautajaisiin!</h3> 2271 </a> 2272 2273</li> 2274<li class="compact"> 2275 <div class="meta typogr__meta"> 2276 <span class="compact__cats typogr__catlink"> 2277 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2278 </span> 2279 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2280 01.10.2026 </span> 2281 </div> 2282 2283 <a href="https://hymy.fi/uutiset/rita-niemi-manninen-ja-aki-manninen-ovat-avoimina-intiimielamastaan/"> 2284 <h3>Aki ja Rita Manninen puhuvat podissa seksistä: ”Olet se, joka kulkee meistä ilkosilleen kotona”</h3> 2285 </a> 2286 2287</li> 2288<li class="compact"> 2289 <div class="meta typogr__meta"> 2290 <span class="compact__cats typogr__catlink"> 2291 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2292 </span> 2293 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2294 01.10.2026 </span> 2295 </div> 2296 2297 <a href="https://hymy.fi/uutiset/aku-louhimiehen-lapin-sota-elokuva-tulee-elokuvateattereihin-23-10-2026/"> 2298 <h3>Katso täältä kohtaukset Aku Louhimiehen Lapin sota -elokuvasta!</h3> 2299 </a> 2300 2301</li> 2302<li class="compact"> 2303 <div class="meta typogr__meta"> 2304 <span class="compact__cats typogr__catlink"> 2305 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2306 </span> 2307 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2308 01.10.2026 </span> 2309 </div> 2310 2311 <a href="https://hymy.fi/uutiset/automaattinen-luonnosyhdysvalloissa-tennesseessa-tapahtui-poikkeuksellinen-ja-jarkyttava-tilanne-kun-kuolemaantuomittu-christa-pike-50-jai-henkiin-kahden-tappavan-ruiskeen-jalkeen/"> 2312 <h3>Kuolemaantuomittu selvisi kahdesta myrkkyruiskeesta â vietiin sairaalaan!</h3> 2313 </a> 2314 2315</li> 2316 </ul> 2317 2318 2319 </div> 2320 2321 2322 <div data-template="def502007deb2306c412e8a1371c3e90ee044e54d87bb093f4eec99d0ab3b7e49da29c4f5bfb817a47d05cf96545eafb103d221a4185f24ea9d9298f327881883dade94c4e84f276099999ca4cd33822fcc704797bfbd2f9248be7" data-query="def502005a0ac484eea39b2a64ebf152a078e22edcbdf9c4929fa583e56a4a3318083681a34ccfdcf3a4b92ee9f13c5c535b8b45e7ecf17c68b815b6eed81bcf2463874cbea89705254bc72b377a639705f3c0b9a24b510a8667306b0c207d54a73e0b47157b3f159f58902ceffd4f9bb4bac31a242a1d9e3b0d4cadeb1d88741281796fc792200df6dc11288d54b9cfdcba2a9e5ffeb797147a6b08be85242fda0a73cd7d48e52bedf3de8905dd01d8bcad9da25a776bf49ed34e5ebf7c42dbb775df1ff4649d25a10f72dd5ee0b154f42b82ce3b34a78c5406e4086a8bb6c2930fb1a41efc7c341b94c32cf3fecc88a93ec464bc6929d4695954c10da357c95e4dc241fad423cc9fd8fc130a59d08a9ec95c65b29cb06bd5e09265b6ce6e34b06c939d69a667c8b4914065a942122140ffb024fc7c0ee216f18c28fc8536a4050937113207dc67cc5229009a3b2efaf7d0fe" data-hash="6abf5a896fe4c" data-blog="1" data-options="def50200f5bfbe2b3382bf6cf13cad454a5fb38e34a0482492c89bacf7195bcb440b8e7d2597a911a06b65704737acae3aa9f56322cc2f92a120fa58cca37b704424a9d8cc60be537f6cf130eaf9d0599880002185d5" class="postlistingwithtabs postlistingwithtabs--1 omwidget om-grid-container one "> 2323 2324 2325 <ul class="om-grid"> 2326 <li class="compact"> 2327 <div class="meta typogr__meta"> 2328 <span class="compact__cats typogr__catlink"> 2329 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2330 </span> 2331 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2332 26.09.2026 </span> 2333 </div> 2334 2335 <a href="https://hymy.fi/uutiset/tuukka-temonen-viettaa-henkilokuntansa-kanssa-karonkkaa/"> 2336 <h3>Tuukka Temonen: ”20 385 pizzaa on ihan älytön määrä”</h3> 2337 </a> 2338 2339</li> 2340<li class="compact"> 2341 <div class="meta typogr__meta"> 2342 <span class="compact__cats typogr__catlink"> 2343 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2344 </span> 2345 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2346 25.09.2026 </span> 2347 </div> 2348 2349 <a href="https://hymy.fi/uutiset/rakennustyomaalla-loytyi-9-miljoonan-euron-kultakatko/"> 2350 <h3>Rakennustyömaalla löytyi 9 miljoonan euron kultakätkö!</h3> 2351 </a> 2352 2353</li> 2354<li class="compact"> 2355 <div class="meta typogr__meta"> 2356 <span class="compact__cats typogr__catlink"> 2357 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2358 </span> 2359 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2360 01.10.2026 </span> 2361 </div> 2362 2363 <a href="https://hymy.fi/uutiset/tvsta-tuttu-sari-anna-huttunen-toimitusjohtajaksi-tunturiviihteeseen/"> 2364 <h3>TV:stä tuttu Sari-Anna Huttunen toimitusjohtajaksi Tunturiviihteeseen!</h3> 2365 </a> 2366 2367</li> 2368<li class="compact"> 2369 <div class="meta typogr__meta"> 2370 <span class="compact__cats typogr__catlink"> 2371 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2372 </span> 2373 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2374 27.09.2026 </span> 2375 </div> 2376 2377 <a href="https://hymy.fi/uutiset/pikavippifirma-saa-oikeutta-helposti-ja-halvalla/"> 2378 <h3>Velallinen on heikoilla!</h3> 2379 </a> 2380 2381</li> 2382<li class="compact"> 2383 <div class="meta typogr__meta"> 2384 <span class="compact__cats typogr__catlink"> 2385 <a href="https://hymy.fi/kategoria/sotahistoria/" class=" typogr__catlink">Sotahistoria</a> 2386 </span> 2387 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2388 26.09.2026 </span> 2389 </div> 2390 2391 <a href="https://hymy.fi/uutiset/jatkosodassa-nuori-kosti-keski-nummi-teki-80-sotalentoa-ja-kavi-55-ilmataistelua/"> 2392 <h3>Lentäjä-ässä â¨Keski-Nummen â¨kauhunhetki taivaalla – âLuoti viisti ohimoani!â</h3> 2393 </a> 2394 2395</li> 2396 </ul> 2397 2398 2399 </div> 2400 2401 </article> 2402</div> 2403 <div class="widget-imgButton sidebar-block"> 2404 <a href="https://hymy.fi/juttuvinkki/" target="_blank"> 2405 <img data-src="https://hymy.fi/wp-content/uploads/2016/04/laheta-juttuvinkki.gif" class="awpo-lazy"><noscript><img src="https://hymy.fi/wp-content/uploads/2016/04/laheta-juttuvinkki.gif"></noscript> 2406 </a> 2407 </div> 2408 2409 2410 <div class="widget-imgButton sidebar-block"> 2411 <a href="http://pubads.g.doubleclick.net/gampad/clk?id=6012526269&iu=/135812570/tracking/click-tracking" target="_blank"> 2412 <img data-src="https://hymy.fi/wp-content/uploads/2026/09/HYMY_300x300_syksy2.jpg" class="awpo-lazy"><noscript><img src="https://hymy.fi/wp-content/uploads/2026/09/HYMY_300x300_syksy2.jpg"></noscript> 2413 </a> 2414 </div> 2415 2416 2417 </div> 2418 2419 </div> 2420</div> 2421<div style="clear: both;"></div> 2422</div><!-- #inner-wrapper --> 2423</div><!-- #wrapper --> 2424 2425<footer class="site-footer" id="footer"> 2426 2427<div class="om-footer">
2428 <div class="om-footer__columns"> 2429 <div class="om-footer__columns-inner"> 2430 <div class="om-footer__column"> 2431 <h2 class="om-footer__column-title"> 2432 Asiakaspalvelu </h2> 2433 <div class="om-footer__column-content"> 2434 <p><span class="label">Digipalvelut</span>(09) 156 6227<br> 2435<span class="label">Avoinna</span>maâpe 8â19</p> 2436<p> </p> 2437<p><span class="label">Painettu lehti</span>(09) 156 665</p> 2438<p><span class="type label">Avoinna</span>maâpe 8â19</p> 2439<p> </p> 2440<p><span class="label">Sähköposti (digi)</span> [email protected]</p> 2441<p><span class="label">Sähköposti</span> [email protected]</p> 2442<p> </p> 2443<p><span class="label">Otavamedian vaihde</span> (09) 156 61</p> 2444 </div> 2445 </div> 2446 <div class="om-footer__column"> 2447 <h2 class="om-footer__column-title"> 2448 Postiosoite </h2> 2449 <div class="om-footer__column-content"> 2450 <p>Uudenmaankatu 10<br> 245100015 OTAVAMEDIA</p> 2452<p> </p> 2453<p><a href="https://otavamedia.fi/evasteiden-kaytto/">Tietoa evästeiden käytöstä</a><br> 2454<a href="https://www.youronlinechoices.com/fi/">Käyttäytymiseen perustuva mainonta</a><br> 2455<a href="#">Evästeasetukset</a></p> 2456 </div> 2457 </div> 2458 <div class="om-footer__column"> 2459 <h2 class="om-footer__column-title"> 2460 Mediatiedot </h2> 2461 <div class="om-footer__column-content"> 2462 <ul class="footer__list"> 2463<li><a href="https://yrityksille.otavamedia.fi/tekniset-tiedot-ja-hinnat/">Tekniset tiedot, aikataulut ja ilmoitushinnat</a></li> 2464<li><a href="https://yrityksille.otavamedia.fi/reaaliaikainen-kayttajatieto/" rel="nofollow">Tietoa verkon kävijöistä</a></li> 2465<li><a href="https://otavamedia.fi/tietosuoja/" rel="nofollow">Tietosuojaseloste</a></li> 2466<li><a href="https://otavamedia.fi/tilaus-ja-kayttoehdot/">Käyttöehdot</a></li> 2467</ul> 2468 </div> 2469 <h2 class="om-footer__column-title"> 2470 Tuotteet </h2> 2471 <div class="om-footer__column-content"> 2472 <ul> 2473<li><a href="https://otavamedia.fi/tuotteet-ja-edut/" rel="nofollow">Aikakauslehdet</a></li> 2474<li><a href="https://otavamedia.fi/tuotteet-ja-edut/verkkopalvelut" rel="nofollow">Verkkopalvelut</a></li> 2475<li><a href="https://otavamedia.fi/tuotteet-ja-edut/digilehdet" rel="nofollow">Digilehdet</a></li> 2476</ul> 2477 </div> 2478 </div> 2479 <div class="om-footer__column"> 2480 <h2 class="om-footer__column-title"> 2481 Toimitus ja lehtitilaus </h2> 2482 <div class="om-footer__column-content"> 2483 <ul class="footer__list"> 2484<li><a href="https://otavamedia.fi/asiakaspalvelu/#omat-tiedot-ja-tilaukset" rel="nofollow">Tilausmuutokset</a></li> 2485<li><a href="/toimituksen-yhteystiedot/#palaute">Palautelomake</a></li> 2486</ul> 2487<p><a class="footer-button" href="/toimituksen-yhteystiedot/">Toimitus</a><br> 2488Sähköpostiosoitteet: [email protected]<br> 2489<a class="footer-button" href="https://hymy.fi/tilaa?promoPosition=footer-etusivu&src=hymy.fi&sid=fd97b1d2-7f45-331b-b8a5-881b7647ff09">Tilaa lehti</a></p> 2490 </div> 2491 </div> 2492 </div> 2493 </div> 2494 <div class="om-footer__logo"> 2495 <img width="400" height="174" class="attachment-thumbnail size-thumbnail awpo-lazy" alt="" decoding="async" loading="lazy" data-srcset="https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-400x174.png 400w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-800x347.png 800w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-1024x445.png 1024w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-768x334.png 768w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-1536x667.png 1536w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-2048x889.png 2048w" data-sizes="auto, (max-width: 400px) 100v
2495w, 400px" data-src="https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-400x174.png"><noscript><img width="400" height="174" src="https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-400x174.png" class="attachment-thumbnail size-thumbnail" alt="" decoding="async" loading="lazy" srcset="https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-400x174.png 400w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-800x347.png 800w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-1024x445.png 1024w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-768x334.png 768w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-1536x667.png 1536w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-2048x889.png 2048w" sizes="auto, (max-width: 400px) 100vw, 400px"></noscript> </div> 2496 </div> 2497 2498</footer> 2499 2500 2501<!--[if IE 8]> 2502<div class="if-ie-8">Huom! Sivuston kaikki ominaisuudet eivät välttämättä toimi selaimellasi. Ole hyvä, ja päivitä selaimesi.</div> 2503<![endif]--> 2504 2505<!-- 162 queries in 0,842 seconds. -->
2506<script type="speculationrules"> 2507{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/om-hymy-theme/*","/wp-content/themes/om-core/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 2508</script>
2508 2509
2510<script type="text/javascript"> 2511 jQuery( function() { 2512 try { 2513 AsteikkoAuth.init( "https:\/\/hymy.fi\/" ); 2514 } catch( e ) { 2515 if ( window.console && console.error ) 2516 console.error( e ); 2517 } 2518 } ); 2519</script>
2519
2519<script> 2520 function convert_to_url(obj) { 2521 return Object 2522 .keys(obj) 2523 .map(k => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`) 2524 .join('&'); 2525 } 2526 2527 function pass_to_backend() { 2528 if(window.location.hash) { 2529 var hash = window.location.hash; 2530 var elements = {}; 2531 hash.split("#")[1].split("&").forEach(element => { 2532 var vars = element.split("="); 2533 elements[vars[0]] = vars[1]; 2534 }); 2535 if(("access_token" in elements) || ("id_token" in elements) || ("token" in elements)) { 2536 if(window.location.href.indexOf("?") !== -1) { 2537 window.location = (window.location.href.split("?")[0] + window.location.hash).split('#')[0] + "?" + convert_to_url(elements); 2538 } else { 2539 window.location = window.location.href.split('#')[0] + "?" + convert_to_url(elements); 2540 } 2541 } 2542 } 2543 } 2544 2545 pass_to_backend(); 2546 </script>
2546 2547 2548
2548<script type="text/javascript" src="https://hymy.fi/wp-content/cache/asauth/fi_blog1.js?ver=84" id="asteikko-auth-lang-fi-js"></script>
vendor: 1 bytes, line 2548
2548
2549<script type="text/javascript" src="https://hymy.fi/wp-content/plugins/asteikko-auth-otavamedia/js/asteikko-auth.js?ver=3.0.5" id="asteikko-auth-js"></script>
vendor: 1 bytes, line 2549
2549
2550<script type="text/javascript" src="https://hymy.fi/wp-content/plugins/asteikko-mag/dist/wp-widgets/index.js?ver=6.21.2-0c797b1a9ed13eb8dd863a1165181f5f" id="asmag_widgets_js-js"></script>
vendor: 1 bytes, line 2550
2550
2551<script type="text/javascript" src="https://hymy.fi/wp-content/themes/om-core/script.js?ver=1790248696" id="om-core-js-js"></script>
vendor: 1 bytes, line 2551
2551
2552<script type="text/javascript" src="https://hymy.fi/wp-content/plugins/om-widgets-plugin/assets/widgets.js?ver=1" id="om-core-widgets-js-js"></script>
vendor: 1 bytes, line 2552
2552
2553<script type="text/javascript" src="https://hymy.fi/wp-content/plugins/wp-optimizer/assets/dist/awpo.min.js?ver=1722410914" id="awpo-lazyload-js"></script>
vendor: 1 bytes, line 2553
2553
2554<script type="text/javascript" src="https://hymy.fi/wp-content/themes/om-hymy-theme/plugins.js?ver=6.9.9" id="custom-plugins-js"></script>
vendor: 1 bytes, line 2554
2554
2555<script type="text/javascript" src="https://hymy.fi/wp-content/themes/om-hymy-theme/script.js?ver=6.9.9" id="custom-scripts-js"></script>
2555 2556</div> <!-- / #additionalBg --> 2557<!-- Body end tag start, do not remove --> 2558
2559<script> 2560 2561 //hymy.fi 2562 2563 async function waitForVariable2(variableName, timeoutMs = 30000, intervalMs = 1000) { 2564 const startTime = Date.now(); 2565 for (; !window[variableName]; ) { 2566 if (Date.now() - startTime >= timeoutMs) { 2567 console.warn(`waitForVariable2: Timeout of ${timeoutMs / 1000}s reached for variable "${variableName}".`); 2568 return false; 2569 } 2570 await new Promise(resolve => setTimeout(resolve, intervalMs)); 2571 } 2572 return true; 2573 } 2574 2575 //jQuery('#inner-wrapper > div.col-two').before(jQuery('#dfp__interstitial')); 2576 //if (dfpDebug) {console.log('Moving interstitial...')} 2577 2578 jQuery('body').prepend('<div id=\'dfp__interstitial_1\'>
2578<script>window.dfp.displayAdslot(\'dfp__interstitial_1\')<\/script></div>'); 2579 2580 if (location.href.indexOf('interstitial2') > -1) { 2581 2582// let interval = setInterval(function(){ 2583// if (window.googletag && googletag.apiReady && googletag.pubadsReady) { 2584 //var aStr = '
2584<script>var interstitialSlot; googletag.cmd.push(function() {interstitialSlot = googletag.defineOutOfPageSlot(\"/135812570/hymy/content/interstitial\", \"dfp__interstitial_1\").addService(googletag.pubads());});<\/script><div id=\"dfp__interstitial_1\">
2584<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");googletag.pubads().refresh([interstitialSlot]);});<\/script></div>'; 2585 //var aStr = '
2585<script>var interstitialSlot; googletag.cmd.push(function() {interstitialSlot = googletag.defineOutOfPageSlot(\"/135812570/hymy/content/interstitial\", \"dfp__interstitial_1\").addService(googletag.pubads());});<\/script><div id=\"dfp__interstitial_1\">
2585<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");});<\/script></div>'; 2586 var aStr = '
2586<script>var interstitialSlot; googletag.cmd.push(function() {interstitialSlot = googletag.defineSlot(\"/135812570/hymy/content/interstitial\", [1, 1], \"dfp__interstitial_1\").addService(googletag.pubads());});<\/script><div id=\"dfp__interstitial_1\">
2586<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");});<\/script></div>'; 2587 //jQuery('#inner-wrapper > div.col-two').before(aStr); 2588 jQuery('body').prepend(aStr); 2589 console.log('Interstitial added...'); 2590// clearInterval(interval); 2591// } 2592// }, 10); 2593 2594 } 2595 2596 if (location.href.indexOf('webinterstitial') >= -1) { 2597 waitForVariable2("canRunWebInterstitial", 30000, 1000) 2598 .then((success) => { 2599 if (success) { 2600 if (dfpDebug) {console.log('Defining webinterstitial...')} 2601 var webinterstitialSlot; 2602 googletag.cmd.push(function() { 2603 webinterstitialSlot = googletag.defineOutOfPageSlot('/135812570/hymy/content/webinterstitial', googletag.enums.OutOfPageFormat.INTERSTITIAL); 2604 if (webinterstitialSlot) {webinterstitialSlot.addService(googletag.pubads()); googletag.pubads().refresh([webinterstitialSlot]);} 2605 }); 2606 } else { 2607 if (dfpDebug) { console.log('waitForVariable2 "canRunWebInterstitial" timed out or variable was not found.'); } 2608 } 2609 }) 2610 .catch(error => { 2611 if (dfpDebug) { console.error('Error in waitForVariable2:', error); } 2612 }); 2613 } 2614 2615 if (location.href.indexOf('anchorad') > -1) { 2616 if (dfpDebug) {console.log('Anchor ad defined...')} 2617 var anchorSlot; 2618 googletag.cmd.push(function() { 2619 if (document.body.clientWidth <= 500) { 2620 anchorSlot = googletag.defineOutOfPageSlot('/135812570/hymy/content/anchorad', googletag.enums.OutOfPageFormat.BOTTOM_ANCHOR); 2621 } else { 2622 anchorSlot = googletag.defineOutOfPageSlot('/135812570/hymy/content/anchorad', googletag.enums.OutOfPageFormat.BOTTOM_ANCHOR); 2623 }
2624 if (anchorSlot) {anchorSlot.addService(googletag.pubads())} 2625 }); 2626 } 2627 2628 if (window.dfp.visibility == 'mobile') { 2629 jQuery('body').prepend('<div id=\'dfp__topad-mob\'>
2629<script>window.dfp.displayAdslot(\'dfp__topad-mob\')<\/script></div>'); 2630 } 2631 2632 if (document.documentElement.clientWidth >= 1020) { 2633 jQuery("#inner-wrapper > div.col-two").before('<div id="dfp__desk-1_1">
2633<script>window.dfp.displayAdslot("dfp__desk-1_1")<\/script></div>'); 2634 jQuery('#sivupalkki').find('h2:contains("Suosituimmat")').parent('div').after('<div id="dfp__rectangle-2_2">
2634<script>window.dfp.displayAdslot("dfp__rectangle-2_2")<\/script></div>'); 2635 jQuery('#sivupalkki #secondary').append('<div id="dfp__rectangle-2_3">
2635<script>window.dfp.displayAdslot("dfp__rectangle-2_3")<\/script></div>'); 2636 } 2637 2638 if (adLocation == 'frontpage') { 2639 2640 if (document.documentElement.clientWidth < 1020) { 2641 jQuery(".col-two .widget-area .postlisting-3 ul li").eq(0).css('margin-bottom','30px').after('<div id="dfp__mob-1_1">
2641<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>'); 2642 jQuery(".col-two .widget-area .postlisting-2 ul li").eq(0).after(jQuery("#dfp__mob-2").css('margin','0px 0px 40px')); 2643 jQuery(".col-two .widget-area .postlisting-2 ul li").eq(2).after('<div id="dfp__mob-2_1">
2643<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>'); 2644 jQuery(".col-two .widget-area .postlisting-2 ul li").eq(4).after('<div id="dfp__mob-2_2">
2644<script>window.dfp.displayAdslot("dfp__mob-2_2")<\/script></div>'); 2645 } else { 2646 //jQuery(".col-two .widget-area .postlisting-2 ul li").eq(1).after(jQuery("#dfp__in-text")); 2647 } 2648 2649 } 2650 2651 if (jQuery('body').hasClass('category-horoskooppi')) { 2652 2653 if (document.documentElement.clientWidth < 1020) { 2654 jQuery(".col-two .widget-area .postlisting-4 ul li").eq(0).after('<div id="dfp__mob-1_1">
2654<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>'); 2655 jQuery(".col-two .widget-area .postlisting-4 ul li").eq(3).after(jQuery("#dfp__mob-2")); 2656 jQuery(".col-two .widget-area .postlisting-4 ul li").eq(6).after('<div id="dfp__mob-2_1">
2656<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>'); 2657 jQuery(".col-two .widget-area .postlisting-4 ul li").eq(9).after('<div id="dfp__mob-2_2">
2657<script>window.dfp.displayAdslot("dfp__mob-2_2")<\/script></div>'); 2658 } else { 2659 jQuery(".col-two .widget-area .postlisting-4 ul li").eq(2).after(jQuery("#dfp__in-text")); 2660 } 2661 2662 } else if (jQuery('body').hasClass('category')) { 2663 2664 if (document.documentElement.clientWidth < 1020) { 2665 jQuery(".col-two .widget-area .postlisting-6 ul li").eq(0).after('<div id="dfp__mob-1_1">
2665<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>'); 2666 jQuery(".col-two .widget-area .postlisting-6 ul li").eq(2).after(jQuery("#dfp__mob-2").css('margin','0px 0px 30px')); 2667 jQuery(".col-two .widget-area .postlisting-6 ul li").eq(4).after('<div id="dfp__mob-2_1">
2667<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>'); 2668 jQuery(".col-two .widget-area .postlisting-6 ul li").eq(6).after('<div id="dfp__mob-2_2">
2668<script>window.dfp.displayAdslot("dfp__mob-2_2")<\/script></div>'); 2669 } else { 2670 jQuery(".col-two .widget-area .postlisting-6 ul li").eq(3).after('<div></div>').after(jQuery("#dfp__in-text").css('margin-bottom', '30px').css('width','100%')); 2671 } 2672 2673 } 2674 2675 if (adLocation == 'content' && jQuery('body').hasClass('single-post') && location.href.indexOf('testnewads=1') == -1) { 2676 2677 if (document.documentElement.clientWidth < 1020) { 2678 2679 var readMoreIndex = 0; 2680 jQuery('.article__body > p').each(function(index) { 2681 if (jQuery(this).text().trim() === 'Lue lisää:' || jQuery(this).text().trim() === 'Lue myös:') { 2682 readMoreIndex = index; 2683 return false; 2684 } 2685 }); 2686 if (dfpDebug) {console.log('readMoreIndex: ' + readMoreIndex)} 2687 var nbrOfParagraphs = jQuery('.article__body > p').length; 2688 var nbrOfContentParagraphs = readMoreIndex > 0 ? nbrOfParagraphs - (nbrOfParagraphs - readMoreIndex) : nbrOfParagraphs; 2689 var mob1AdPlace = nbrOfContentParagraphs > 10 ? 1 : nbrOfContentParagraphs > 5 ? 0 : 0; 2690 if (dfpDebug) {console.log('nop: ' + nbrOfParagraphs + ', nocp: ' + nbrOfContentParagraphs + '. m1ap: ' + mob1AdPlace)} 2691 2692 if (jQuery(".article__body > p").eq(mob1AdPlace).text().trim().slice(-1) == ">") {mob1AdPlace++} 2693 jQuery(".article__body > p").eq(mob1AdPlace).after('<div id="dfp__mob-1_1">
2693<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>'); 2694 2695 if (dfpDebug) {console.log('Content p ' + nbrOfContentParagraphs + '. mob-1 after p.eq(' + mob1AdPlace + ')')} 2696 2697 if (nbrOfContentParagraphs > 8) { 2698 2699 (function() { 2700 var t = new Date().getTime(); t -= t % (1000*60*60*24*30); 2701 var l = document.createElement('script'); l.type = 'text/javascript'; l.async = true; 2702 l.src = '//otavamedia.bbvms.com/a/hymy.js?t='+t; 2703 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(l, s); 2704 })(); 2705 2706 var bbwPlace = parseInt(nbrOfContentParagraphs/2); 2707 jQuery(".article__body > p").eq(bbwPlace).after('<div id=\"bbwvideo\"></div>'); 2708 if (dfpDebug) {console.log('BBW after p.eq(' + bbwPlace + ')')} 2709 2710 } 2711 2712 if (nbrOfContentParagraphs > 4) { 2713 jQuery(".article__body > p").eq(nbrOfContentParagraphs-2).after('<div id="dfp__mob-2_1">
2713<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>'); 2714 if (dfpDebug) {console.log('mob-2 after p.eq(' + (nbrOfContentParagraphs-2) + ')')} 2715 } 2716 2717 } else { 2718 jQuery(".article__body > p").eq(4).after('<div id="dfp__in-text_1">
2718<script>window.dfp.displayAdslot("dfp__in-text_1")<\/script></div>'); 2719 } 2720 2721 } 2722 2723 var useDelay = false; 2724 if (location.href.indexOf('usedelay') > -1) {useDelay = true} 2725 if (useDelay) { 2726 2727 if (adLocation == 'content' && document.documentElement.clientWidth < 1020) { 2728 jQuery("#dfp__mob-1, #dfp__mob-2").wrap("<div class='wrapper__mob'><div class='wrapper__mob__inner'></div></div>"); 2729 jQuery(".wrapper__mob").css({"min-height": "600px"}); 2730 jQuery(".wrapper__mob__inner").css({"position":"-webkit-sticky","position":"sticky","top":"50px"}); 2731 //console.log('adLocation: content...'); 2732 } 2733 if (document.documentElement.clientWidth >= 1020) { 2734 jQuery("#dfp__sky-scraper-1").wrap("<div class='wrapper__sky-1'></div>"); 2735 jQuery("#dfp__sky-scraper-2").wrap("<div class='wrapper__sky-2'></div>"); 2736 jQuery(".wrapper__sky-1").css({"min-height": "750px"}); 2737 jQuery(".wrapper__sky-2").css({"min-height": "1500px"}); 2738 jQuery("#dfp__sky-scraper-1, #dfp__sky-scraper-2").css({"position":"-webkit-sticky","position":"sticky","top":"50px"}); 2739 } 2740 2741 } 2742 2743 let showConsentManager = function(){__tcfapi("showConsentManager",true,function(data){console.log(data)});} 2744 jQuery('#footer a[href=#]').replaceWith('<a href="#" class="manageSettings" onclick="window.gravitoCMP.openPreferences()">Evästeasetukset</a>'); 2745 2746 //var rnd = Math.floor(Math.random() * 50); 2747 console.log('rnd: ' + rnd + ', p_rum: ' + cmpGetCookie('p_rum')) 2748 2749 //if (cmpGetCookie('p_rum') != 1 && rnd >= 40) { 2750 if (rnd >= 31) { 2751 2752 console.log('Calling Pingdom rum...'); 2753 var fpa = document.createElement('script'); fpa.type = 'text/javascript'; fpa.async = true; 2754 fpa.src = '//rum-static.pingdom.net/pa-5a3bc7dfd31eee00070000c6.js'; 2755 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(fpa, s); 2756 2757 } 2758 2759 if (window.dfp.visibility == 'desktop' || window.dfp.visibility == 'large') { 2760 jQuery("body").append('<iframe srcdoc=\"\
2760<script src=\'https:\/\/cdn.performax.cz\/acc\/loader.js?aab=loader\'\>\<\/script\>\" style=\"display: none\" data-web=\"hymy.fi\" data-hash=\"347437801fe88859caf76003d7ea5b8b\"><\/iframe>'); 2761 } 2762 2763 var dfpReady = setInterval(function() { 2764 if(window.googletag && googletag.pubadsReady && 1 == 2) { 2765 2766 jQuery(document).ready(function() { 2767 2768 var hasLueLisaa = false; 2769 var paragraphCounter = 0; 2770 //console.log('pCount: ' + jQuery('.article__body > p').length); 2771 jQuery('.article__body > p').each(function() { 2772 if (jQuery(this).text().trim() === 'Lue lisää:' || jQuery(this).text().trim() === 'Lue myös:') { 2773 hasLueLisaa = true; 2774 //jQuery(jQuery(this)).before(jQuery('#dfp__mob-2')); 2775 jQuery('.article__body > .grid--dfp-slots').append('<div style="clear: both"></div>') 2776 jQuery(jQuery(this)).before(jQuery('.article__body > .grid--dfp-slots')); 2777 //var scriptContent = jQuery('.article__body #dfp__rectangle-2').find('script').html(); 2778 //var newScriptContent = scriptContent.replace(/dfp__rectangle-2/g, 'dfp__rectangle-2_1'); 2779 //jQuery('.article__body #dfp__rectangle-2').find('script').html(newScriptContent); 2780 //jQuery('#dfp__rectangle-2').attr('id', 'dfp__rectangle-2_1'); 2781 2782 return false; 2783 } 2784 paragraphCounter++; 2785 //console.log('paragraphCounter: ' + paragraphCounter); 2786 }); 2787 2788 if (hasLueLisaa) { 2789 //console.log('bbbb: ' + (paragraphCounter-1)); 2790 var nextParagraphs = (jQuery('.article__body > p').length - (paragraphCounter-1)); 2791 //console.log('nextParagraphs: ' + nextParagraphs); 2792 //jQuery('.article__body > p').eq(paragraphCounter+9).before('<p>testi</p>'); 2793 2794 var nbrOf2ndAds = 1; 2795 for (i=0;i<=nextParagraphs-1;i++) { 2796 //jQuery('.article__body > p').eq(i).before('<p>testi</p>'); 2797 //console.log(i); 2798 jQuery('.article__body > p').eq(i+paragraphCounter).find('a[target="_blank"]').removeAttr('target'); 2799 if (document.documentElement.clientWidth < 1020) { 2800 if (i > 0 && i % 7 == 0 && nbrOf2ndAds < 3) { 2801 //console.log('Lisätään mob-2 to p(eq): ' + i); 2802 jQuery('.article__body > p').eq(i+paragraphCounter).before('<div id="dfp__mob-2_' + nbrOf2ndAds + '">
2802<script>window.dfp.displayAdslot("dfp__mob-2_' + nbrOf2ndAds + '")<\/script></div>'); 2803 if (nbrOf2ndAds == 2) { 2804 //break; 2805 } 2806 nbrOf2ndAds++; 2807 } 2808 } else { 2809 if (i > 0 && i % 12 == 0 && nbrOf2ndAds < 2) { 2810 //jQuery('.article__body > p').eq(i+paragraphCounter).before('<div id="dfp__in-text_' + nbrOf2ndAds + '">
2810<script>window.dfp.displayAdslot("dfp__in-text_' + nbrOf2ndAds + '")<\/script></div>'); 2811 jQuery('.article__body > p').eq(i+paragraphCounter).before(jQuery('#dfp__in-text')); 2812 if (nbrOf2ndAds == 1) { 2813 //break; 2814 } 2815 nbrOf2ndAds++; 2816 } 2817 } 2818 } 2819 } 2820 2821 }); 2822 clearInterval(dfpReady); 2823 2824 } else { 2825 //console.log('Checking Again if DFP ready...'); 2826 } 2827 }, 100); 2828 2829 2830 if (testSRA) { 2831 2832 const observers = new Map(); 2833 2834 function observeDFPElements() { 2835 2836 //const targets = [...document.querySelectorAll('[id^="dfp__"]:not([data-observed])')].filter(el => el.id !== 'dfp__mob-2_222' && !el.id.includes('native')); 2837 const targets = [...document.querySelectorAll('[id^="dfp__"]:not([data-observed])')].filter(el => el.id !== 'dfp__mob-2_222'); 2838 2839 targets.forEach(target => { 2840 2841 target.setAttribute('data-observed', 'true'); 2842 //const thresholdValue = parseFloat(target.getAttribute('data-threshold')) || 1; 2843 let thresholdValue = parseFloat(target.getAttribute('data-threshold')) || 0.6; 2844 if (target.getAttribute('id').includes('dfp__native')) { 2845 thresholdValue = 0.3; 2846 }; 2847 2848 let observer = observers.get(thresholdValue); 2849 if (!observer) { 2850 if (dfpDebug) console.log(`Creating new observer for threshold: ${thresholdValue}`); 2851 //const rootMargin = `0px 0px ${thresholdValue * 100}% 0px`; 2852 const rootMargin = `${thresholdValue * 100}% 0px ${thresholdValue * 100}% 0px`; 2853 2854 observer = new IntersectionObserver( 2855 (entries, obs) => { 2856 entries.forEach(entry => { 2857 if (entry.isIntersecting) { 2858 if (dfpDebug) { 2859 console.log('HAS: entry.boundingClientRect.height: ' + entry.boundingClientRect.height); 2860 console.log('HAS: calling runHeaderbid: ' + entry.target.id); 2861 let distanceFromViewportBottom = window.innerHeight - entry.boundingClientRect.top; 2862 console.log(`HAS: ${entry.target.id} is ${distanceFromViewportBottom.toFixed(0)}px from the bottom of viewport...`); 2863 } 2864 loadAdSlot(entry.target.id); 2865 obs.unobserve(entry.target); 2866 } 2867 }); 2868 }, 2869 { 2870 root: null, // relative to the viewport 2871 rootMargin: rootMargin, 2872 threshold: 0.0 // Fire as soon as it enters the margin 2873 } 2874 ); 2875 observers.set(thresholdValue, observer); 2876 } 2877 2878 observer.observe(target); 2879 if (dfpDebug) console.log('Observing element: ', target.id, 'with threshold:', thresholdValue); 2880 }); 2881 } 2882 2883 let debounceTimeout; 2884 function debouncedObserve() { 2885 clearTimeout(debounceTimeout); 2886 debounceTimeout = setTimeout(observeDFPElements, 100); 2887 } 2888 2889 2890 var dfpReady = setInterval(function() { 2891 if(window.googletag && googletag.pubadsReady) { 2892 if (dfpDebug) {console.log('DFP ready, starting observation...')} 2893 2894 observeDFPElements(); 2895 2896 const mutationObserver = new MutationObserver(debouncedObserve); 2897 mutationObserver.observe(document.body, {childList: true, subtree: true}); 2898 2899 clearInterval(dfpReady); 2900 2901 } 2902 }, 50) 2903 2904 } 2905 2906 2907 var adslotsDefined = true; 2908 2909 2910 jQuery(function () { 2911 2912 jQuery('body.single-post .article__body').append('<h3>Lue myös:</h3><ul id="latest-articles"></ul>'); 2913 2914 const FEED_URL = 'https://hymy.fi/wp-json/feeds/uutiset-uusimmat'; 2915 const MAX_POSTS = 15; 2916 2917 const FEED_KEY = 'latestArticlesFeed'; 2918 const FEED_TS_KEY = 'latestArticlesFeedTs'; 2919 const FEED_TTL = 1000 * 60 * 60; // 1 hour 2920 2921 const READ_KEY = 'latestReadPostIds'; 2922 const READ_TTL = 1000 * 60 * 60 * 24 * 7; // 7 days 2923 2924 function decodeHtmlEntities(str) { 2925 if (!str) return ''; 2926 const txt = document.createElement('textarea'); 2927 txt.innerHTML = str; 2928 return txt.value; 2929 } 2930 2931 function storageAvailable(type) { 2932 try { 2933 const storage = window[type]; 2934 const x = '__test__'; 2935 storage.setItem(x, x); 2936 storage.removeItem(x); 2937 return true; 2938 } catch (e) { 2939 return false; 2940 } 2941 } 2942 2943 function getReadPostMap() { 2944 2945 let readPostMap = {}; 2946 if (!storageAvailable('localStorage')) return readPostMap; 2947 2948 try { 2949 readPostMap = JSON.parse(localStorage.getItem(READ_KEY)) || {}; 2950 } catch (e) { 2951 return {}; 2952 } 2953 2954 const now = Date.now(); 2955 let changed = false;
2956 2957 Object.keys(readPostMap).forEach(postId => { 2958 if (now - readPostMap[postId] > READ_TTL) { 2959 delete readPostMap[postId]; 2960 changed = true; 2961 } 2962 }); 2963 2964 if (changed) { 2965 localStorage.setItem(READ_KEY, JSON.stringify(readPostMap)); 2966 } 2967 2968 return readPostMap; 2969 2970 } 2971 2972 function markPostAsRead(postId) { 2973 2974 if (!postId || !storageAvailable('localStorage')) return; 2975 2976 const readPostMap = getReadPostMap(); 2977 if (!readPostMap[postId]) { 2978 readPostMap[postId] = Date.now(); 2979 localStorage.setItem(READ_KEY, JSON.stringify(readPostMap)); 2980 } 2981 2982 } 2983 2984 function isPostRead(postId) { 2985 return !!getReadPostMap()[postId]; 2986 } 2987 2988 let currentPostId = null; 2989 if (window.dataLayer && Array.isArray(window.dataLayer)) { 2990 const pageData = window.dataLayer.find(obj => obj.PostId); 2991 if (pageData) { 2992 currentPostId = pageData.PostId; 2993 } 2994 } 2995 2996 if (currentPostId) { 2997 markPostAsRead(currentPostId); 2998 } 2999 3000 function getCachedFeed() { 3001 3002 if (!storageAvailable('sessionStorage')) return null; 3003 3004 try { 3005 3006 const feedData = sessionStorage.getItem(FEED_KEY); 3007 const ts = sessionStorage.getItem(FEED_TS_KEY); 3008 3009 if (!feedData || !ts) return null; 3010 3011 if (Date.now() - parseInt(ts, 10) > FEED_TTL) { 3012 sessionStorage.removeItem(FEED_KEY); 3013 sessionStorage.removeItem(FEED_TS_KEY); 3014 return null; 3015 } 3016 3017 return JSON.parse(feedData); 3018 3019 } catch (e) { 3020 return null; 3021 } 3022 3023 } 3024 3025 function cacheFeed(feedData) { 3026 if (!storageAvailable('sessionStorage')) return; 3027 try { 3028 sessionStorage.setItem(FEED_KEY, JSON.stringify(feedData)); 3029 sessionStorage.setItem(FEED_TS_KEY, Date.now()); 3030 } catch (e) {} 3031 } 3032 3033 function renderPostList(posts) { 3034 3035 if (!posts || !posts.length) return; 3036 3037 const $ul = jQuery('#latest-articles'); 3038 if (!$ul.length) return; 3039 3040 let postsRendered = 0; 3041 3042 posts.forEach(post => { 3043 3044 if (postsRendered >= MAX_POSTS) return; 3045 if (post.is_ad) return; 3046 if (post.ID === currentPostId) return; 3047 if (isPostRead(post.ID)) return; 3048 3049 const $link = jQuery('<a>', { 3050 href: post.url, 3051 text: decodeHtmlEntities(post.title), 3052 class: 'latest-article-link', 3053 'data-postid': post.ID 3054 }); 3055 3056 $link.on('click', function () { 3057 3058 const postId = jQuery(this).data('postid'); 3059 const targetPostId = currentPostId || 0; 3060 3061 markPostAsRead(postId); 3062 3063 const cacheBuster = Math.floor(Math.random() * 100000000); 3064 const img = new Image(); 3065 img.src = 3066 'https://digitiimi.otavamedia.fi/cc/recom/?siteid=18&typeid=1' + 3067 '&bu=' + encodeURIComponent(location.href) + 3068 '&tu=' + encodeURIComponent(post.url) + 3069 '&cb=' + cacheBuster + 3070 '&pid=' + postId + 3071 '&tpid=' + targetPostId; 3072 }); 3073 3074 const $li = jQuery('<li>').append($link); 3075 $ul.append($li); 3076 3077 postsRendered++; 3078 }); 3079 } 3080 3081 function init(feedData) { 3082 3083 if (!feedData || !feedData.posts || !feedData.posts.length) return; 3084 3085 const posts = feedData.posts.slice().reverse(); 3086 renderPostList(posts); 3087 3088 } 3089 3090 const cachedFeed = getCachedFeed(); 3091 3092 if (cachedFeed) { 3093 init(cachedFeed); 3094 } else { 3095 jQuery.getJSON(FEED_URL) 3096 .done(function (feedData) { 3097 cacheFeed(feedData); 3098 init(feedData); 3099 }); 3100 } 3101 3102 }); 3103 3104</script>
3104 3105
3106<script> 3107 3108 if (document.location.href.indexOf("anchorad=1") > -1) { 3109 3110 //loadAds(); 3111 //console.log("load_test"); // This should be called when all <div data-ad-unit="??"> elements exists in DOM 3112 3113 var adTestParam = 'anchorad=1'; 3114 $("body a").each(function() { 3115 var hrefSrc = $(this).attr('href'); 3116 if (hrefSrc != null) { 3117 if (hrefSrc.indexOf("jpg") < 0 && hrefSrc.indexOf("gif") < 0 && hrefSrc.indexOf("png") < 0 && hrefSrc.indexOf("javascript") < 0 && hrefSrc.indexOf("debug=1") < 0) { 3118 if (hrefSrc.indexOf("?") < 0) { 3119 var ahreffi = hrefSrc + '?' + adTestParam; 3120 } else { 3121 var ahreffi = hrefSrc + '&' + adTestParam; 3122 } 3123 $(this).attr('href',ahreffi); 3124 } 3125 } 3126 }); 3127 3128 } 3129 3130</script>
3130 3131 3132<style> 3133 3134 .latest-article-link { 3135 font-size: 15px; 3136 } 3137 ul#latest-articles { 3138 list-style-type: none; 3139 margin: 0; 3140 padding-top: 10px; 3141 } 3142 ul#latest-articles li { 3143 margin-bottom: 5px; 3144 } 3145 ul#latest-articles li:nth-Child(5n+0) { 3146 margin-bottom: 20px; 3147 } 3148 @media screen and (max-width: 768px) { 3149 .latest-article-link { 3150 font-size: 18px; 3151 } 3152 ul#latest-articles li { 3153 margin-bottom: 10px; 3154 } 3155 ul#latest-articles li:nth-Child(5n+0) { 3156 margin-bottom: 30px; 3157 } 3158 } 3159 3160 #verkkopalvelut .footer__services, 3161 #verkkopalvelut #palvelut { 3162 display: none; 3163 } 3164 3165 #verkkopalvelut .om-logo, 3166 #verkkopalvelut .footer__logo { 3167 margin: 0 auto; 3168 display: block; 3169 float: none; 3170 max-width:100px; 3171 } 3172 3173 #verkkopalvelut .footer__logo img { 3174 width: 100%; 3175 max-width:100px; 3176 margin: 0 auto; 3177 display:block; 3178 } 3179 3180 #verkkopalvelut .om-logo, 3181 #verkkopalvelut { 3182 padding-bottom:0; 3183 padding-top:0; 3184 padding-left:0; 3185 padding-right:0; 3186 } 3187 3188 #verkkopalvelut .verkkopalvelut-inner { 3189 padding: 30px 0; 3190 } 3191 3192 .bb-float-close-button { 3193 top: -32px !important; 3194 padding: 7px 5px !important; 3195 font-size: 26px !important; 3196 } 3197 .bb_wrapper:has(.bb-float-close-button[style*="display: block"]), .bb_wrapper:has(.bb-float-close-button:not([style*=display])) { 3198 right: 8px !important; 3199 bottom: 8px !important; 3200 } 3201 @media screen and (min-width: 880px) { 3202 .bb_wrapper:has(.bb-float-close-button[style*="display: block"]), .bb_wrapper:has(.bb-float-close-button:not([style*=display])) { 3203 right: 20px !important; 3204 bottom: 15px !important; 3205 } 3206 } 3207 #dfp__interstitial_1 { 3208 position: fixed; 3209 z-index: 1000000; 3210 width: 1px; 3211 height: 1px; 3212 margin: 0px; 3213 padding: 0px; 3214 left: 0px; 3215 top: 0px; 3216 } 3217 3218</style> 3219 3220<!-- Body end tag end, do not remove --></body> 3221</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.