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:6ab572ed7fc54*/ 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 = "ac08bb4d1b"; 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="def50200c34cb985c4da2c6e867abc50dc17e1e27d804e0653e6bc2127931bc7aa3ca453dfd8dcf40f58d0dde6e97516431b54bf394e7fd64f89f3bf878de6b31b8f5044eb5ab7081f30b8ff7c21e94e9d0298a1e86e5bd0" data-query="def502005c0ffbd0ea0249fc8c7c81d5f7b074ec48fdabceef7cd8f2cd6ec8073a31d162db86201ef0bb6430d409e6b02adb84e038e0ccc6e9a1e05f8579b1e1836abc030ecd44de4a7feb35d6750ef06a1c5d8303f55249ee4399747ab58f240388c1ef332e97cc6aa694beec057397f523b574161378f7bdc903df20cc10d6aeccc6aae69887433b8d1cc44555cd1127d3c5f5a73036ccbc8b5c7420758dbf0d150da77ba1c0c91849093b8d051445315da0b4870fd0486bdebfa97b8922637fedef905b7b08ef8859896269318916e55e20c313c56f685c6d34d11a1d754ea96705ab2abca186db13803dc99422ae95bd2b2badc79cea3235d1e3495a7214c6e9cb3b064b75511852d4acbe6a23c768f8793e124c2dc017cf7479d35c88e8f35cd0" data-hash="6ab572ed87997" data-blog="1" data-options="def50200c297f2171c267351bead65272793b30a6d64fe9e6f5c149db6414c0c62da469d9988fb7466f10c1fec29932ab5808f99c9616f094373b513926bedde14231ca6492266a3bdfdf17154672de1165eb0e42b9e" 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/elokuussa-80-vuotiaana-kuolleelta-dolly-partonilta-kuullaan-viela-yksi-uusi-levytys/"> 1837 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2026/08/image-23.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/elokuussa-80-vuotiaana-kuolleelta-dolly-partonilta-kuullaan-viela-yksi-uusi-levytys/"> 1848 <h2>Dolly Partonin viimeinen levytys julkaistaan U2:n uudella albumilla!</h2> 1849 1850 <div class="om-grid-item__excerpt"> 1851 <p>Elokuussa 80-vuotiaana kuolleelta Dolly Partonilta kuullaan vielä yksi uusi levytys. Country-legenda esiintyy U2:n tulevalla Ca…</p> 1852 </div> 1853 </a> 1854 1855 <div class="meta typogr__meta"> 1856 1857 <span class="typogr__meta--date"> 1858 24.09.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/uutiset/laulaja-tauski-peltonen-63-ja-tanssija-henna-peltonen-42-ovat-virallisesti-avioerossa/"> 1870 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2025/04/24430-1024x999.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 </span> 1879 </div> 1880 <a href="https://hymy.fi/uutiset/laulaja-tauski-peltonen-63-ja-tanssija-henna-peltonen-42-ovat-virallisesti-avioerossa/"> 1881 <h2>IL: Tauski ja Henna – avioero!</h2> 1882 1883 <div class="om-grid-item__excerpt"> 1884 <p>Laulaja Tauski Peltonen, 63, ja tanssija Henna Peltonen, 42, ovat virallisesti avioerossa. Asian kertoi Iltalehti. Sen mukaan asiasta on kirja…</p> 1885 </div> 1886 </a> 1887 1888 <div class="meta typogr__meta"> 1889 1890 <span class="typogr__meta--date"> 1891 24.09.2026 </span> 1892 1893 1894 1895 </div> 1896 1897 </div> 1898 1899 </li> 1900 <li class="om-grid-item"> 1901 1902 <a href="https://hymy.fi/uutiset/automaattinen-luonnolentomatkustamiseen-liittyy-pitka-lista-pienia-vinkkeja-ja-varoituksia-mutta-yksi-niista-kuulostaa-ensikuulemalta-erikoiselta-lentokoneeseen-ei-kannattaisi-pukea-mustia-sukkia/"> 1903 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2021/02/lentokone_matkustamo.jpg"> 1904 </div> 1905 </a> 1906 1907 <div class="om-grid-item__content"> 1908 <div class="meta typogr__meta"> 1909 <span class="typogr__meta--category"> 1910 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 1911 </span> 1912 </div> 1913 <a href="https://hymy.fi/uutiset/automaattinen-luonnolentomatkustamiseen-liittyy-pitka-lista-pienia-vinkkeja-ja-varoituksia-mutta-yksi-niista-kuulostaa-ensikuulemalta-erikoiselta-lentokoneeseen-ei-kannattaisi-pukea-mustia-sukkia/"> 1914 <h2>Ãlä käytä mustia sukkia lentokoneessa â tässä syy!</h2> 1915 1916 <div class="om-grid-item__excerpt"> 1917 <p>Lentomatkustamiseen liittyy pitkä lista pieniä vinkkejä ja varoituksia, mutta yksi niistä kuulostaa ensikuulemalta erikoiselta: lentokoneeseen…</p> 1918 </div> 1919 </a> 1920 1921 <div class="meta typogr__meta"> 1922 1923 <span class="typogr__meta--date"> 1924 24.09.2026 </span> 1925 1926 1927 1928 </div> 1929 1930 </div> 1931 1932 </li> 1933 <li class="om-grid-item"> 1934 1935 <a href="https://hymy.fi/uutiset/kuva-on-jo-sita-luokkaa-etta-siina-voisi-lukea-ei-herkille-helena-ahti-hallberg-on-julkaissut-kuvan-suoraan-hoitopoydalta/"> 1936 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2021/09/ahti_hallberg_helena_peko.jpg"> 1937 </div> 1938 </a> 1939 1940 <div class="om-grid-item__content"> 1941 <div class="meta typogr__meta">
1942 <span class="typogr__meta--category"> 1943 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 1944 </span> 1945 </div> 1946 <a href="https://hymy.fi/uutiset/kuva-on-jo-sita-luokkaa-etta-siina-voisi-lukea-ei-herkille-helena-ahti-hallberg-on-julkaissut-kuvan-suoraan-hoitopoydalta/"> 1947 <h2>Huh, Helena Ahti-Hallberg hurjan näköisenä hoitopöydällä!</h2> 1948 1949 <div class="om-grid-item__excerpt"> 1950 <p>Video on jo sitä luokkaa, että siinä voisi lukea ”Ei herkille”. Helena Ahti-Hallberg on julkaissut videon suoraan hoitopöydältä. S…</p> 1951 </div> 1952 </a> 1953 1954 <div class="meta typogr__meta"> 1955 1956 <span class="typogr__meta--date"> 1957 24.09.2026 </span> 1958 1959 1960 1961 </div> 1962 1963 </div> 1964 1965 </li> 1966 <li class="om-grid-item"> 1967 1968 <a href="https://hymy.fi/uutiset/oulun-poliisilaitos-tutkii-oulussa-keskiviikkona-23-9-illalla-tapahtuneita-epailtyja-rattijuopumusrikoksia/"> 1969 <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"> 1970 </div> 1971 </a> 1972 1973 <div class="om-grid-item__content"> 1974 <div class="meta typogr__meta"> 1975 <span class="typogr__meta--category"> 1976 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 1977 </span> 1978 </div> 1979 <a href="https://hymy.fi/uutiset/oulun-poliisilaitos-tutkii-oulussa-keskiviikkona-23-9-illalla-tapahtuneita-epailtyja-rattijuopumusrikoksia/"> 1980 <h2>Oulussa rattijuopot vaaransivat liikennettä!</h2> 1981 1982 <div class="om-grid-item__excerpt"> 1983 <p>Oulun poliisilaitos tutkii Oulussa keskiviikkona 23.9. illalla tapahtuneita epäiltyjä rattijuopumusrikoksia. Kummassakin tapauksessa kuljettaj…</p> 1984 </div> 1985 </a> 1986 1987 <div class="meta typogr__meta"> 1988 1989 <span class="typogr__meta--date"> 1990 24.09.2026 </span> 1991 1992 1993 1994 </div> 1995 1996 </div> 1997 1998 </li> 1999 <li class="om-grid-item"> 2000 2001 <a href="https://hymy.fi/uutiset/mika-aaltola-kertoo-onnellisia-uutisia-heidan-perheeseen-syntyy-vauva/"> 2002 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2024/02/aaltola_3-1024x869.jpg"> 2003 </div> 2004 </a> 2005 2006 <div class="om-grid-item__content"> 2007 <div class="meta typogr__meta"> 2008 <span class="typogr__meta--category"> 2009 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2010 </span> 2011 </div> 2012 <a href="https://hymy.fi/uutiset/mika-aaltola-kertoo-onnellisia-uutisia-heidan-perheeseen-syntyy-vauva/"> 2013 <h2>Mika Aaltolan perheeseen syntyy vauva!</h2> 2014 2015 <div class="om-grid-item__excerpt"> 2016 <p>Mika Aaltola kertoo onnellisia uutisia. Heidän perheeseen syntyy vauva. Mika Aaltola ja Kirsi Aaltola naimisiin syyskuussa 2019. Avioparilla o…</p> 2017 </div> 2018 </a> 2019 2020 <div class="meta typogr__meta"> 2021 2022 <span class="typogr__meta--date"> 2023 24.09.2026 </span> 2024 2025 2026 2027 </div> 2028 2029 </div> 2030 2031 </li> 2032 <li class="om-grid-item"> 2033 2034 <a href="https://hymy.fi/uutiset/erotiikka-sehan-se-kiinnostaa-ja-myy-kuinka-moni-laulaja-nayttelija-tai-muu-tahti-olisikaan-ihan-takarivin-tellu-ilman-erotiikkaa/"> 2035 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2018/07/kardashian_kim_mainos_raskauspahvointi_puoli_miljoonaa_dollaria_sai.jpg"> 2036 </div> 2037 </a> 2038 2039 <div class="om-grid-item__content"> 2040 <div class="meta typogr__meta">
2041 <span class="typogr__meta--category"> 2042 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2043 </span> 2044 </div> 2045 <a href="https://hymy.fi/uutiset/erotiikka-sehan-se-kiinnostaa-ja-myy-kuinka-moni-laulaja-nayttelija-tai-muu-tahti-olisikaan-ihan-takarivin-tellu-ilman-erotiikkaa/"> 2046 <h2>Kim Kardashian eroottisissa kuvissa!</h2> 2047 2048 <div class="om-grid-item__excerpt"> 2049 <p>Erotiikka – sehän se kiinnostaa. Ja myy. Kuinka moni laulaja, näyttelijä tai muu tähti olisikaan ihan takarivin henkilö ilman erotiikkaa…</p> 2050 </div> 2051 </a> 2052 2053 <div class="meta typogr__meta"> 2054 2055 <span class="typogr__meta--date"> 2056 23.09.2026 </span> 2057 2058 2059 2060 </div> 2061 2062 </div> 2063 2064 </li> 2065 <li class="om-grid-item"> 2066 2067 <a href="https://hymy.fi/uutiset/salatut-elamat-suosikkisarja-tekee-televisiohistoriaa/"> 2068 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2026/09/image-40-1024x582.png"> 2069 </div> 2070 </a> 2071 2072 <div class="om-grid-item__content"> 2073 <div class="meta typogr__meta"> 2074 <span class="typogr__meta--category"> 2075 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2076 </span> 2077 </div> 2078 <a href="https://hymy.fi/uutiset/salatut-elamat-suosikkisarja-tekee-televisiohistoriaa/"> 2079 <h2>Salatut elämät – suosikkisarja tekee televisiohistoriaa!</h2> 2080 2081 <div class="om-grid-item__excerpt"> 2082 <p>Suursuosikki Salatut elämät saavuttaa 5000. jakson rajapyykin samalla, kun Pihlajakadun käänteet tavoittavat MTV Katsomossa ja MTV3-kanavalla …</p> 2083 </div> 2084 </a> 2085 2086 <div class="meta typogr__meta"> 2087 2088 <span class="typogr__meta--date"> 2089 23.09.2026 </span> 2090 2091 2092 2093 </div> 2094 2095 </div> 2096 2097 </li> 2098 <li class="om-grid-item"> 2099 2100 <a href="https://hymy.fi/uutiset/kauppa-sai-alkunsa-vuoden-2025-lopulla-jarjestetysta-huutokaupasta-jonka-toteutti-muumikerailytuotteisiin-erikoistunut-verkkokauppa-muumimukit-rahaksi/"> 2101 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2026/09/image-39-1024x786.png"> 2102 </div> 2103 </a> 2104 2105 <div class="om-grid-item__content"> 2106 <div class="meta typogr__meta"> 2107 <span class="typogr__meta--category"> 2108 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2109 </span> 2110 </div> 2111 <a href="https://hymy.fi/uutiset/kauppa-sai-alkunsa-vuoden-2025-lopulla-jarjestetysta-huutokaupasta-jonka-toteutti-muumikerailytuotteisiin-erikoistunut-verkkokauppa-muumimukit-rahaksi/"> 2112 <h2>Muumimukien maailmanennätys rikkoutui: Uimahyppy simpukoilla myytiin yli 46 000 eurolla!</h2> 2113 2114 <div class="om-grid-item__excerpt"> 2115 <p>Kauppa sai alkunsa vuoden 2025 lopulla järjestetystä huutokaupasta, jonka toteutti muumikeräilytuotteisiin erikoistunut verkkokauppa Muumimuki…</p> 2116 </div> 2117 </a> 2118 2119 <div class="meta typogr__meta"> 2120 2121 <span class="typogr__meta--date"> 2122 23.09.2026 </span> 2123 2124 2125 2126 </div> 2127 2128 </div> 2129 2130 </li> 2131 <li class="om-grid-item"> 2132 2133 <a href="https://hymy.fi/uutiset/karita-tykka-on-nyt-50-vuotias/"> 2134 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2021/08/karita_tykka-1024x697.jpg"> 2135 </div> 2136 </a> 2137 2138 <div class="om-grid-item__content"> 2139 <div class="meta typogr__meta"> 2140 <span class="typogr__meta--category"> 2141 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2142 </span> 2143 </div> 2144 <a href="https://hymy.fi/uutiset/karita-tykka-on-nyt-50-vuotias/"> 2145 <h2>Karita Tykkä – alastonkuvat!</h2> 2146 2147 <div class="om-grid-item__excerpt"> 2148 <p>Karita Tykkä on nyt 50-vuotias. On sopiva ikä julkaista itsestään alastonkuvat. Ja totta vieköön, ne ovat todella upeat. Syy kuvien julkaisull…</p> 2149 </div> 2150 </a> 2151 2152 <div class="meta typogr__meta"> 2153
2154 <span class="typogr__meta--date"> 2155 23.09.2026 </span> 2156 2157 2158 2159 </div> 2160 2161 </div> 2162 2163 </li> 2164 </ul> 2165 2166 <ul class="om-grid-controls"> 2167 <li> 2168 <button class="button om-grid-load-more">Lataa lisää <i style="display:none;" class="loader"></i> 2169 </button> 2170 </li> 2171 </ul> 2172 2173 </div> 2174 2175 <div id="dfp__mob-2"> 2176
2176<script>window.dfp.displayAdslot('dfp__mob-2')</script>
2176 2177 </div> 2178 <div id="dfp__in-text"> 2179
2179<script>window.dfp.displayAdslot('dfp__in-text')</script>
2179 2180 </div> 2181 2182 </div> 2183 2184 2185 <div style="clear: both;"></div> 2186 2187</div> 2188 2189 2190<div id="sivupalkki"> 2191 <div> 2192 <div class="mainside"></div> 2193 2194 2195 <div style="clear:both"></div> 2196 2197 <div id="secondary" class="widget-area" role="complementary"> 2198 2199 2200 <div id="tilaa-seuraa" class="om-widget sidebar-block socialmedialinks socialmedialinks-2"> 2201 <div class="links"> 2202 <a href="/kirjaudu/" class="returnLink">Kirjaudu</a><a href="/tilaa?promoPosition=header-kategoria">Tilaa</a><a href="/ukk/">Ohje</a> </div> 2203 2204 <div class="some"> 2205 2206 <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> 2207 <div style="clear:both;"></div> 2208 </div> 2209 2210 2211 <div id="dfp__rectangle-1"> 2212
2212<script>window.dfp.displayAdslot('dfp__rectangle-1')</script>
2212 2213 </div> 2214 <div class="widget_text sidebar-block"><div class="textwidget custom-html-widget"><!--<div style="text-align: center"> 2215<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> 2216 <div class="omwidget sidebar-block magazineorderwidget magazineorderwidget-2"> 2217 2218 <a href="https://tilaus.hymy.fi/tilaus?promoID=OM_widget&promoName=OM_HY&promoCreative=onlinetarjous&promoPosition=sidebar"> 2219 2220 <div class="magazineorderwidget__content"> 2221 2222 <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> 2223 2224 <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> 2225 </div> 2226 2227 </a> 2228 2229 </div> 2230 2231 <div class="sidebar-block"> <h2 class="block-header_sidebar">Suosituimmat</h2> 2232 <article class="omwidget om-tab-container"> 2233 2234 2235 <ul class="navtabs two"> 2236 <li class="active typogr__tab" data-hash="6ab572ed8db3e"><a>Tänään</a></li> 2237 <li class="typogr__tab" data-hash="6ab572ed8dc31"><a>Viikko</a></li> 2238 </ul> 2239 2240 2241 <div data-template="def5020009429b023bcea5ea5512150db22ff1be6f401790268f40af0480ede2a46b5d2f15d7cc483f6edc5db7ee5b8271a123e2cabdaa0ea48e4dc140d79c4b6ed95521fc3aedca09c1d9fe07b8b62f381582081d0fb7e42f75c9" data-query="def502004374f878563da80f6a71bad40173bc1db23ef2e50539038f2261aa690ce65a42dd8a2bc0a13bd10e40ac558c57d32a291130f8d3eff68aa287b0dc8415527ed3bd08c2fea2ab1530bacf389a1de36a23e42371124e59873ea9e09e4dad71c66e2a955c59bab243ebcaea8e7d3ba3938a2e72984e7acc239a60d75ae50a8fcd689d6403e959a056e89c27ca95baa1c67bf699e2b8b6c931a5072f355f87e8476b54d3bf8ed79333661a5153981cf527fe93c9122a946d5d1a446d880446f77587499e0cb90764fedecb9a408aef0f2da176be82733910a111fa094cda5dd15cb830fa0e143fa706f89a63a113049dbe696214d3551dba5917d0e0e9ef84430ccbf6a6acea092cd1fb4e3c74557b9bddef031d33b56119f67ef29236e932751d08b5b737da9024102f2199c42c2f32394ac14efd4527d72489e75519d53661fc6179f75e9b2d09efb6e62caa5aeaae" data-hash="6ab572ed8db3e" data-blog="1" data-options="def50200593f374f2cbadd9fa220ca605c5b0fb4f561256ffa730cc792bb9cd766f688a19ca44ff732439baea9ca6b0cb1bc0f438aa71e477ac51337fababa69486f96b608e5816e4788bf278935d5b4866d081929d7" class="postlistingwithtabs postlistingwithtabs--1 omwidget om-grid-container one active"> 2242 2243 2244 <ul class="om-grid"> 2245 <li class="compact"> 2246 <div class="meta typogr__meta"> 2247 <span class="compact__cats typogr__catlink"> 2248 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2249 </span> 2250 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2251 23.09.2026 </span> 2252 </div> 2253 2254 <a href="https://hymy.fi/uutiset/karita-tykka-on-nyt-50-vuotias/"> 2255 <h3>Karita Tykkä – alastonkuvat!</h3> 2256 </a> 2257 2258</li> 2259<li class="compact"> 2260 <div class="meta typogr__meta"> 2261 <span class="compact__cats typogr__catlink"> 2262 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2263 </span> 2264 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2265 22.09.2026 </span> 2266 </div> 2267 2268 <a href="https://hymy.fi/uutiset/perjantain-vain-elamaa-jaksossa-vietetaan-nelli-matulan-paivaa-jaksossa-kuullaan-muun-muassa-bessin-kateudesta-nellia-kohtaan/"> 2269 <h3>Vain elämää: Bess ei halunnut olla samassa ohjelmassa kuin Nelli Matula!</h3> 2270 </a> 2271 2272</li> 2273<li class="compact"> 2274 <div class="meta typogr__meta"> 2275 <span class="compact__cats typogr__catlink"> 2276 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2277 </span> 2278 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2279 23.09.2026 </span> 2280 </div> 2281 2282 <a href="https://hymy.fi/uutiset/erotiikka-sehan-se-kiinnostaa-ja-myy-kuinka-moni-laulaja-nayttelija-tai-muu-tahti-olisikaan-ihan-takarivin-tellu-ilman-erotiikkaa/"> 2283 <h3>Kim Kardashian eroottisissa kuvissa!</h3> 2284 </a> 2285 2286</li> 2287<li class="compact"> 2288 <div class="meta typogr__meta"> 2289 <span class="compact__cats typogr__catlink"> 2290 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2291 </span> 2292 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2293 17.12.2025 </span> 2294 </div> 2295 2296 <a href="https://hymy.fi/uutiset/martina-aitolehti/"> 2297 <h3>Tällainen on Martina Aitolehden ökyauto!</h3> 2298 </a> 2299 2300</li> 2301<li class="compact"> 2302 <div class="meta typogr__meta"> 2303 <span class="compact__cats typogr__catlink"> 2304 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2305 </span> 2306 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2307 02.02.2011 </span> 2308 </div> 2309 2310 <a href="https://hymy.fi/uutiset/vielako-muistat-nama-martina-aitolehden-rohkeat-alastonkuvat-katso/"> 2311 <h3>Vieläkö muistat nämä Martina Aitolehden rohkeat alastonkuvat – katso!</h3> 2312 </a> 2313 2314</li> 2315 </ul> 2316 2317 2318 </div> 2319 2320 2321 <div data-template="def50200a3dae018844638dbfd95519a0b57570875f4a1a6ca3df16ea383338db8478b4e9015ff59aec0dec03bf411e59f1accdf4953ab24eae8889e78add63e9da2c6efe9c951c4fc091ac389cf7c7453a6d9d861169a3aa7a5b8" data-query="def50200bf3bcd11789f70d9a913d3c898075a9c8c5b46af6e4f43cbfe68d3304a63784cf733b4923a302c5c6f036d5831c79e1b6c63bf262c22e6501714d988106bf59a6caf30293b1d009d2c580a5ea757ad5d548240b0d8320c83077bcb0831dce87f34cb152e4a3ef80cd35e4bf727c71e694c021d387a8e19270d9802a74de75fdad7a9b5a9039d0444b0c36f01e832ff1671c3477f33845855d8882ea1eb3bca2b3608648378eb2c76a0fe456124254db7b444367b5dc7b86f5510d5098500dd078a5e142557649a3646dd251b7a42395d649485ab5c3fdcd372bf99c4b367357d141c278bd98fb39e40fca760463083d9d8cb2c1959a4a08840b61f14c92c905bd557394807be8ac2277dc934ca3d47afda5e5d81de35a4e55500688e8d528f6d68e988f5361212b86770f1674bcd161604976e4ed2f9dbc6dd742a838b873f8d263793ba048f7a9dbedffc6b4ae1" data-hash="6ab572ed8dc31" data-blog="1" data-options="def5020038dbfd05a9fde9e61e359b82d2653443f895edd0d9a823c958c402353a427f033f92af81b7eb464a8d6191c534765a99b4c9a8aca73838f7b3ad4c928cef6fd2581dbf3c868057f278600d7ba41e834b21ff" class="postlistingwithtabs postlistingwithtabs--1 omwidget om-grid-container one "> 2322 2323 2324 <ul class="om-grid"> 2325 <li class="compact"> 2326 <div class="meta typogr__meta"> 2327 <span class="compact__cats typogr__catlink"> 2328 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2329 </span> 2330 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2331 23.09.2026 </span> 2332 </div> 2333 2334 <a href="https://hymy.fi/uutiset/karita-tykka-on-nyt-50-vuotias/"> 2335 <h3>Karita Tykkä – alastonkuvat!</h3> 2336 </a> 2337 2338</li> 2339<li class="compact"> 2340 <div class="meta typogr__meta"> 2341 <span class="compact__cats typogr__catlink"> 2342 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2343 </span> 2344 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2345 17.09.2026 </span> 2346 </div> 2347 2348 <a href="https://hymy.fi/uutiset/ex-taitoluistelija-kiira-korpi-kavi-hakemassa-salaattiannoksen-ravintolasta-pika-koiransa-kanssa/"> 2349 <h3>Kiira Korpi tyylikkäänä arki-asussa – käväisi salaattiannoksen kaupasta!</h3> 2350 </a> 2351 2352</li> 2353<li class="compact"> 2354 <div class="meta typogr__meta"> 2355 <span class="compact__cats typogr__catlink"> 2356 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2357 </span> 2358 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2359 22.09.2026 </span> 2360 </div> 2361 2362 <a href="https://hymy.fi/uutiset/perjantain-vain-elamaa-jaksossa-vietetaan-nelli-matulan-paivaa-jaksossa-kuullaan-muun-muassa-bessin-kateudesta-nellia-kohtaan/"> 2363 <h3>Vain elämää: Bess ei halunnut olla samassa ohjelmassa kuin Nelli Matula!</h3> 2364 </a> 2365 2366</li> 2367<li class="compact"> 2368 <div class="meta typogr__meta"> 2369 <span class="compact__cats typogr__catlink"> 2370 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2371 </span> 2372 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2373 17.09.2026 </span> 2374 </div> 2375 2376 <a href="https://hymy.fi/uutiset/kylie-jenner-on-julkaissut-jalleen-nayttavia-kuvia-kuntosaliltaan-vain-vahan-sen-jalkeen-kun-han-kertoi-haluavansa-nykyista-suuremmat-rinnat/"> 2377 <h3>Kylie Jenner poseeraa niukassa treenitopissa â haluaa vieläkin suuremmat rinnat!</h3> 2378 </a> 2379 2380</li> 2381<li class="compact"> 2382 <div class="meta typogr__meta"> 2383 <span class="compact__cats typogr__catlink"> 2384 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2385 </span> 2386 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2387 17.12.2025 </span> 2388 </div> 2389 2390 <a href="https://hymy.fi/uutiset/martina-aitolehti/"> 2391 <h3>Tällainen on Martina Aitolehden ökyauto!</h3> 2392 </a> 2393 2394</li> 2395 </ul> 2396 2397 2398 </div> 2399 2400 </article> 2401</div> 2402 <div class="widget-imgButton sidebar-block"> 2403 <a href="https://hymy.fi/juttuvinkki/" target="_blank"> 2404 <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> 2405 </a> 2406 </div> 2407 2408 2409 <div class="widget-imgButton sidebar-block"> 2410 <a href="http://pubads.g.doubleclick.net/gampad/clk?id=6012526269&iu=/135812570/tracking/click-tracking" target="_blank"> 2411 <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> 2412 </a> 2413 </div> 2414 2415 2416 </div> 2417 2418 </div> 2419</div> 2420<div style="clear: both;"></div> 2421</div><!-- #inner-wrapper --> 2422</div><!-- #wrapper --> 2423 2424<footer class="site-footer" id="footer"> 2425 2426<div class="om-footer">
2427 <div class="om-footer__columns"> 2428 <div class="om-footer__columns-inner"> 2429 <div class="om-footer__column"> 2430 <h2 class="om-footer__column-title"> 2431 Asiakaspalvelu </h2> 2432 <div class="om-footer__column-content"> 2433 <p><span class="label">Digipalvelut</span>(09) 156 6227<br> 2434<span class="label">Avoinna</span>maâpe 8â19</p> 2435<p> </p> 2436<p><span class="label">Painettu lehti</span>(09) 156 665</p> 2437<p><span class="type label">Avoinna</span>maâpe 8â19</p> 2438<p> </p> 2439<p><span class="label">Sähköposti (digi)</span> [email protected]</p> 2440<p><span class="label">Sähköposti</span> [email protected]</p> 2441<p> </p> 2442<p><span class="label">Otavamedian vaihde</span> (09) 156 61</p> 2443 </div> 2444 </div> 2445 <div class="om-footer__column"> 2446 <h2 class="om-footer__column-title"> 2447 Postiosoite </h2> 2448 <div class="om-footer__column-content"> 2449 <p>Uudenmaankatu 10<br> 245000015 OTAVAMEDIA</p> 2451<p> </p> 2452<p><a href="https://otavamedia.fi/evasteiden-kaytto/">Tietoa evästeiden käytöstä</a><br> 2453<a href="https://www.youronlinechoices.com/fi/">Käyttäytymiseen perustuva mainonta</a><br> 2454<a href="#">Evästeasetukset</a></p> 2455 </div> 2456 </div> 2457 <div class="om-footer__column"> 2458 <h2 class="om-footer__column-title"> 2459 Mediatiedot </h2> 2460 <div class="om-footer__column-content"> 2461 <ul class="footer__list"> 2462<li><a href="https://yrityksille.otavamedia.fi/tekniset-tiedot-ja-hinnat/">Tekniset tiedot, aikataulut ja ilmoitushinnat</a></li> 2463<li><a href="https://yrityksille.otavamedia.fi/reaaliaikainen-kayttajatieto/" rel="nofollow">Tietoa verkon kävijöistä</a></li> 2464<li><a href="https://otavamedia.fi/tietosuoja/" rel="nofollow">Tietosuojaseloste</a></li> 2465<li><a href="https://otavamedia.fi/tilaus-ja-kayttoehdot/">Käyttöehdot</a></li> 2466</ul> 2467 </div> 2468 <h2 class="om-footer__column-title"> 2469 Tuotteet </h2> 2470 <div class="om-footer__column-content"> 2471 <ul> 2472<li><a href="https://otavamedia.fi/tuotteet-ja-edut/" rel="nofollow">Aikakauslehdet</a></li> 2473<li><a href="https://otavamedia.fi/tuotteet-ja-edut/verkkopalvelut" rel="nofollow">Verkkopalvelut</a></li> 2474<li><a href="https://otavamedia.fi/tuotteet-ja-edut/digilehdet" rel="nofollow">Digilehdet</a></li> 2475</ul> 2476 </div> 2477 </div> 2478 <div class="om-footer__column"> 2479 <h2 class="om-footer__column-title"> 2480 Toimitus ja lehtitilaus </h2> 2481 <div class="om-footer__column-content"> 2482 <ul class="footer__list"> 2483<li><a href="https://otavamedia.fi/asiakaspalvelu/#omat-tiedot-ja-tilaukset" rel="nofollow">Tilausmuutokset</a></li> 2484<li><a href="/toimituksen-yhteystiedot/#palaute">Palautelomake</a></li> 2485</ul> 2486<p><a class="footer-button" href="/toimituksen-yhteystiedot/">Toimitus</a><br> 2487Sähköpostiosoitteet: [email protected]<br> 2488<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> 2489 </div> 2490 </div> 2491 </div> 2492 </div> 2493 <div class="om-footer__logo"> 2494 <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
2494w, 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> 2495 </div> 2496 2497</footer> 2498 2499 2500<!--[if IE 8]> 2501<div class="if-ie-8">Huom! Sivuston kaikki ominaisuudet eivät välttämättä toimi selaimellasi. Ole hyvä, ja päivitä selaimesi.</div> 2502<![endif]--> 2503 2504<!-- 157 queries in 0,344 seconds. -->
2505<script type="speculationrules"> 2506{"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"}]} 2507</script>
2507 2508
2509<script type="text/javascript"> 2510 jQuery( function() { 2511 try { 2512 AsteikkoAuth.init( "https:\/\/hymy.fi\/" ); 2513 } catch( e ) { 2514 if ( window.console && console.error ) 2515 console.error( e ); 2516 } 2517 } ); 2518</script>
2518
2518<script> 2519 function convert_to_url(obj) { 2520 return Object 2521 .keys(obj) 2522 .map(k => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`) 2523 .join('&'); 2524 } 2525 2526 function pass_to_backend() { 2527 if(window.location.hash) { 2528 var hash = window.location.hash; 2529 var elements = {}; 2530 hash.split("#")[1].split("&").forEach(element => { 2531 var vars = element.split("="); 2532 elements[vars[0]] = vars[1]; 2533 }); 2534 if(("access_token" in elements) || ("id_token" in elements) || ("token" in elements)) { 2535 if(window.location.href.indexOf("?") !== -1) { 2536 window.location = (window.location.href.split("?")[0] + window.location.hash).split('#')[0] + "?" + convert_to_url(elements); 2537 } else { 2538 window.location = window.location.href.split('#')[0] + "?" + convert_to_url(elements); 2539 } 2540 } 2541 } 2542 } 2543 2544 pass_to_backend(); 2545 </script>
2545 2546 2547
2547<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 2547
2547
2548<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 2548
2548
2549<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 2549
2549
2550<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 2550
2550
2551<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 2551
2551
2552<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 2552
2552
2553<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 2553
2553
2554<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>
2554 2555</div> <!-- / #additionalBg --> 2556<!-- Body end tag start, do not remove --> 2557
2558<script> 2559 2560 //hymy.fi 2561 2562 async function waitForVariable2(variableName, timeoutMs = 30000, intervalMs = 1000) { 2563 const startTime = Date.now(); 2564 for (; !window[variableName]; ) { 2565 if (Date.now() - startTime >= timeoutMs) { 2566 console.warn(`waitForVariable2: Timeout of ${timeoutMs / 1000}s reached for variable "${variableName}".`); 2567 return false; 2568 } 2569 await new Promise(resolve => setTimeout(resolve, intervalMs)); 2570 } 2571 return true; 2572 } 2573 2574 //jQuery('#inner-wrapper > div.col-two').before(jQuery('#dfp__interstitial')); 2575 //if (dfpDebug) {console.log('Moving interstitial...')} 2576 2577 jQuery('body').prepend('<div id=\'dfp__interstitial_1\'>
2577<script>window.dfp.displayAdslot(\'dfp__interstitial_1\')<\/script></div>'); 2578 2579 if (location.href.indexOf('interstitial2') > -1) { 2580 2581// let interval = setInterval(function(){ 2582// if (window.googletag && googletag.apiReady && googletag.pubadsReady) { 2583 //var aStr = '
2583<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\">
2583<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");googletag.pubads().refresh([interstitialSlot]);});<\/script></div>'; 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\");});<\/script></div>'; 2585 var aStr = '
2585<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\">
2585<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");});<\/script></div>'; 2586 //jQuery('#inner-wrapper > div.col-two').before(aStr); 2587 jQuery('body').prepend(aStr); 2588 console.log('Interstitial added...'); 2589// clearInterval(interval); 2590// } 2591// }, 10); 2592 2593 } 2594 2595 if (location.href.indexOf('webinterstitial') >= -1) { 2596 waitForVariable2("canRunWebInterstitial", 30000, 1000) 2597 .then((success) => { 2598 if (success) { 2599 if (dfpDebug) {console.log('Defining webinterstitial...')} 2600 var webinterstitialSlot; 2601 googletag.cmd.push(function() { 2602 webinterstitialSlot = googletag.defineOutOfPageSlot('/135812570/hymy/content/webinterstitial', googletag.enums.OutOfPageFormat.INTERSTITIAL); 2603 if (webinterstitialSlot) {webinterstitialSlot.addService(googletag.pubads()); googletag.pubads().refresh([webinterstitialSlot]);} 2604 }); 2605 } else { 2606 if (dfpDebug) { console.log('waitForVariable2 "canRunWebInterstitial" timed out or variable was not found.'); } 2607 } 2608 }) 2609 .catch(error => { 2610 if (dfpDebug) { console.error('Error in waitForVariable2:', error); } 2611 }); 2612 } 2613 2614 if (location.href.indexOf('anchorad') > -1) { 2615 if (dfpDebug) {console.log('Anchor ad defined...')} 2616 var anchorSlot; 2617 googletag.cmd.push(function() { 2618 if (document.body.clientWidth <= 500) { 2619 anchorSlot = googletag.defineOutOfPageSlot('/135812570/hymy/content/anchorad', googletag.enums.OutOfPageFormat.BOTTOM_ANCHOR); 2620 } else { 2621 anchorSlot = googletag.defineOutOfPageSlot('/135812570/hymy/content/anchorad', googletag.enums.OutOfPageFormat.BOTTOM_ANCHOR); 2622 }
2623 if (anchorSlot) {anchorSlot.addService(googletag.pubads())} 2624 }); 2625 } 2626 2627 if (window.dfp.visibility == 'mobile') { 2628 jQuery('body').prepend('<div id=\'dfp__topad-mob\'>
2628<script>window.dfp.displayAdslot(\'dfp__topad-mob\')<\/script></div>'); 2629 } 2630 2631 if (document.documentElement.clientWidth >= 1020) { 2632 jQuery("#inner-wrapper > div.col-two").before('<div id="dfp__desk-1_1">
2632<script>window.dfp.displayAdslot("dfp__desk-1_1")<\/script></div>'); 2633 jQuery('#sivupalkki').find('h2:contains("Suosituimmat")').parent('div').after('<div id="dfp__rectangle-2_2">
2633<script>window.dfp.displayAdslot("dfp__rectangle-2_2")<\/script></div>'); 2634 jQuery('#sivupalkki #secondary').append('<div id="dfp__rectangle-2_3">
2634<script>window.dfp.displayAdslot("dfp__rectangle-2_3")<\/script></div>'); 2635 } 2636 2637 if (adLocation == 'frontpage') { 2638 2639 if (document.documentElement.clientWidth < 1020) { 2640 jQuery(".col-two .widget-area .postlisting-3 ul li").eq(0).css('margin-bottom','30px').after('<div id="dfp__mob-1_1">
2640<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>'); 2641 jQuery(".col-two .widget-area .postlisting-2 ul li").eq(0).after(jQuery("#dfp__mob-2").css('margin','0px 0px 40px')); 2642 jQuery(".col-two .widget-area .postlisting-2 ul li").eq(2).after('<div id="dfp__mob-2_1">
2642<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>'); 2643 jQuery(".col-two .widget-area .postlisting-2 ul li").eq(4).after('<div id="dfp__mob-2_2">
2643<script>window.dfp.displayAdslot("dfp__mob-2_2")<\/script></div>'); 2644 } else { 2645 //jQuery(".col-two .widget-area .postlisting-2 ul li").eq(1).after(jQuery("#dfp__in-text")); 2646 } 2647 2648 } 2649 2650 if (jQuery('body').hasClass('category-horoskooppi')) { 2651 2652 if (document.documentElement.clientWidth < 1020) { 2653 jQuery(".col-two .widget-area .postlisting-4 ul li").eq(0).after('<div id="dfp__mob-1_1">
2653<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>'); 2654 jQuery(".col-two .widget-area .postlisting-4 ul li").eq(3).after(jQuery("#dfp__mob-2")); 2655 jQuery(".col-two .widget-area .postlisting-4 ul li").eq(6).after('<div id="dfp__mob-2_1">
2655<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>'); 2656 jQuery(".col-two .widget-area .postlisting-4 ul li").eq(9).after('<div id="dfp__mob-2_2">
2656<script>window.dfp.displayAdslot("dfp__mob-2_2")<\/script></div>'); 2657 } else { 2658 jQuery(".col-two .widget-area .postlisting-4 ul li").eq(2).after(jQuery("#dfp__in-text")); 2659 } 2660 2661 } else if (jQuery('body').hasClass('category')) { 2662 2663 if (document.documentElement.clientWidth < 1020) { 2664 jQuery(".col-two .widget-area .postlisting-6 ul li").eq(0).after('<div id="dfp__mob-1_1">
2664<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>'); 2665 jQuery(".col-two .widget-area .postlisting-6 ul li").eq(2).after(jQuery("#dfp__mob-2").css('margin','0px 0px 30px')); 2666 jQuery(".col-two .widget-area .postlisting-6 ul li").eq(4).after('<div id="dfp__mob-2_1">
2666<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>'); 2667 jQuery(".col-two .widget-area .postlisting-6 ul li").eq(6).after('<div id="dfp__mob-2_2">
2667<script>window.dfp.displayAdslot("dfp__mob-2_2")<\/script></div>'); 2668 } else { 2669 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%')); 2670 } 2671 2672 } 2673 2674 if (adLocation == 'content' && jQuery('body').hasClass('single-post') && location.href.indexOf('testnewads=1') == -1) { 2675 2676 if (document.documentElement.clientWidth < 1020) { 2677 2678 var readMoreIndex = 0; 2679 jQuery('.article__body > p').each(function(index) { 2680 if (jQuery(this).text().trim() === 'Lue lisää:' || jQuery(this).text().trim() === 'Lue myös:') { 2681 readMoreIndex = index; 2682 return false; 2683 } 2684 }); 2685 if (dfpDebug) {console.log('readMoreIndex: ' + readMoreIndex)} 2686 var nbrOfParagraphs = jQuery('.article__body > p').length; 2687 var nbrOfContentParagraphs = readMoreIndex > 0 ? nbrOfParagraphs - (nbrOfParagraphs - readMoreIndex) : nbrOfParagraphs; 2688 var mob1AdPlace = nbrOfContentParagraphs > 10 ? 1 : nbrOfContentParagraphs > 5 ? 0 : 0; 2689 if (dfpDebug) {console.log('nop: ' + nbrOfParagraphs + ', nocp: ' + nbrOfContentParagraphs + '. m1ap: ' + mob1AdPlace)} 2690 2691 if (jQuery(".article__body > p").eq(mob1AdPlace).text().trim().slice(-1) == ">") {mob1AdPlace++} 2692 jQuery(".article__body > p").eq(mob1AdPlace).after('<div id="dfp__mob-1_1">
2692<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>'); 2693 2694 if (dfpDebug) {console.log('Content p ' + nbrOfContentParagraphs + '. mob-1 after p.eq(' + mob1AdPlace + ')')} 2695 2696 if (nbrOfContentParagraphs > 8) { 2697 2698 (function() { 2699 var t = new Date().getTime(); t -= t % (1000*60*60*24*30); 2700 var l = document.createElement('script'); l.type = 'text/javascript'; l.async = true; 2701 l.src = '//otavamedia.bbvms.com/a/hymy.js?t='+t; 2702 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(l, s); 2703 })(); 2704 2705 var bbwPlace = parseInt(nbrOfContentParagraphs/2); 2706 jQuery(".article__body > p").eq(bbwPlace).after('<div id=\"bbwvideo\"></div>'); 2707 if (dfpDebug) {console.log('BBW after p.eq(' + bbwPlace + ')')} 2708 2709 } 2710 2711 if (nbrOfContentParagraphs > 4) { 2712 jQuery(".article__body > p").eq(nbrOfContentParagraphs-2).after('<div id="dfp__mob-2_1">
2712<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>'); 2713 if (dfpDebug) {console.log('mob-2 after p.eq(' + (nbrOfContentParagraphs-2) + ')')} 2714 } 2715 2716 } else { 2717 jQuery(".article__body > p").eq(4).after('<div id="dfp__in-text_1">
2717<script>window.dfp.displayAdslot("dfp__in-text_1")<\/script></div>'); 2718 } 2719 2720 } 2721 2722 var useDelay = false; 2723 if (location.href.indexOf('usedelay') > -1) {useDelay = true} 2724 if (useDelay) { 2725 2726 if (adLocation == 'content' && document.documentElement.clientWidth < 1020) { 2727 jQuery("#dfp__mob-1, #dfp__mob-2").wrap("<div class='wrapper__mob'><div class='wrapper__mob__inner'></div></div>"); 2728 jQuery(".wrapper__mob").css({"min-height": "600px"}); 2729 jQuery(".wrapper__mob__inner").css({"position":"-webkit-sticky","position":"sticky","top":"50px"}); 2730 //console.log('adLocation: content...'); 2731 } 2732 if (document.documentElement.clientWidth >= 1020) { 2733 jQuery("#dfp__sky-scraper-1").wrap("<div class='wrapper__sky-1'></div>"); 2734 jQuery("#dfp__sky-scraper-2").wrap("<div class='wrapper__sky-2'></div>"); 2735 jQuery(".wrapper__sky-1").css({"min-height": "750px"}); 2736 jQuery(".wrapper__sky-2").css({"min-height": "1500px"}); 2737 jQuery("#dfp__sky-scraper-1, #dfp__sky-scraper-2").css({"position":"-webkit-sticky","position":"sticky","top":"50px"}); 2738 } 2739 2740 } 2741 2742 let showConsentManager = function(){__tcfapi("showConsentManager",true,function(data){console.log(data)});} 2743 jQuery('#footer a[href=#]').replaceWith('<a href="#" class="manageSettings" onclick="window.gravitoCMP.openPreferences()">Evästeasetukset</a>'); 2744 2745 //var rnd = Math.floor(Math.random() * 50); 2746 console.log('rnd: ' + rnd + ', p_rum: ' + cmpGetCookie('p_rum')) 2747 2748 //if (cmpGetCookie('p_rum') != 1 && rnd >= 40) { 2749 if (rnd >= 31) { 2750 2751 console.log('Calling Pingdom rum...'); 2752 var fpa = document.createElement('script'); fpa.type = 'text/javascript'; fpa.async = true; 2753 fpa.src = '//rum-static.pingdom.net/pa-5a3bc7dfd31eee00070000c6.js'; 2754 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(fpa, s); 2755 2756 } 2757 2758 if (window.dfp.visibility == 'desktop' || window.dfp.visibility == 'large') { 2759 jQuery("body").append('<iframe srcdoc=\"\
2759<script src=\'https:\/\/cdn.performax.cz\/acc\/loader.js?aab=loader\'\>\<\/script\>\" style=\"display: none\" data-web=\"hymy.fi\" data-hash=\"347437801fe88859caf76003d7ea5b8b\"><\/iframe>'); 2760 } 2761 2762 var dfpReady = setInterval(function() { 2763 if(window.googletag && googletag.pubadsReady && 1 == 2) { 2764 2765 jQuery(document).ready(function() { 2766 2767 var hasLueLisaa = false; 2768 var paragraphCounter = 0; 2769 //console.log('pCount: ' + jQuery('.article__body > p').length); 2770 jQuery('.article__body > p').each(function() { 2771 if (jQuery(this).text().trim() === 'Lue lisää:' || jQuery(this).text().trim() === 'Lue myös:') { 2772 hasLueLisaa = true; 2773 //jQuery(jQuery(this)).before(jQuery('#dfp__mob-2')); 2774 jQuery('.article__body > .grid--dfp-slots').append('<div style="clear: both"></div>') 2775 jQuery(jQuery(this)).before(jQuery('.article__body > .grid--dfp-slots')); 2776 //var scriptContent = jQuery('.article__body #dfp__rectangle-2').find('script').html(); 2777 //var newScriptContent = scriptContent.replace(/dfp__rectangle-2/g, 'dfp__rectangle-2_1'); 2778 //jQuery('.article__body #dfp__rectangle-2').find('script').html(newScriptContent); 2779 //jQuery('#dfp__rectangle-2').attr('id', 'dfp__rectangle-2_1'); 2780 2781 return false; 2782 } 2783 paragraphCounter++; 2784 //console.log('paragraphCounter: ' + paragraphCounter); 2785 }); 2786 2787 if (hasLueLisaa) { 2788 //console.log('bbbb: ' + (paragraphCounter-1)); 2789 var nextParagraphs = (jQuery('.article__body > p').length - (paragraphCounter-1)); 2790 //console.log('nextParagraphs: ' + nextParagraphs); 2791 //jQuery('.article__body > p').eq(paragraphCounter+9).before('<p>testi</p>'); 2792 2793 var nbrOf2ndAds = 1; 2794 for (i=0;i<=nextParagraphs-1;i++) { 2795 //jQuery('.article__body > p').eq(i).before('<p>testi</p>'); 2796 //console.log(i); 2797 jQuery('.article__body > p').eq(i+paragraphCounter).find('a[target="_blank"]').removeAttr('target'); 2798 if (document.documentElement.clientWidth < 1020) { 2799 if (i > 0 && i % 7 == 0 && nbrOf2ndAds < 3) { 2800 //console.log('Lisätään mob-2 to p(eq): ' + i); 2801 jQuery('.article__body > p').eq(i+paragraphCounter).before('<div id="dfp__mob-2_' + nbrOf2ndAds + '">
2801<script>window.dfp.displayAdslot("dfp__mob-2_' + nbrOf2ndAds + '")<\/script></div>'); 2802 if (nbrOf2ndAds == 2) { 2803 //break; 2804 } 2805 nbrOf2ndAds++; 2806 } 2807 } else { 2808 if (i > 0 && i % 12 == 0 && nbrOf2ndAds < 2) { 2809 //jQuery('.article__body > p').eq(i+paragraphCounter).before('<div id="dfp__in-text_' + nbrOf2ndAds + '">
2809<script>window.dfp.displayAdslot("dfp__in-text_' + nbrOf2ndAds + '")<\/script></div>'); 2810 jQuery('.article__body > p').eq(i+paragraphCounter).before(jQuery('#dfp__in-text')); 2811 if (nbrOf2ndAds == 1) { 2812 //break; 2813 } 2814 nbrOf2ndAds++; 2815 } 2816 } 2817 } 2818 } 2819 2820 }); 2821 clearInterval(dfpReady); 2822 2823 } else { 2824 //console.log('Checking Again if DFP ready...'); 2825 } 2826 }, 100); 2827 2828 2829 if (testSRA) { 2830 2831 const observers = new Map(); 2832 2833 function observeDFPElements() { 2834 2835 //const targets = [...document.querySelectorAll('[id^="dfp__"]:not([data-observed])')].filter(el => el.id !== 'dfp__mob-2_222' && !el.id.includes('native')); 2836 const targets = [...document.querySelectorAll('[id^="dfp__"]:not([data-observed])')].filter(el => el.id !== 'dfp__mob-2_222'); 2837 2838 targets.forEach(target => { 2839 2840 target.setAttribute('data-observed', 'true'); 2841 //const thresholdValue = parseFloat(target.getAttribute('data-threshold')) || 1; 2842 let thresholdValue = parseFloat(target.getAttribute('data-threshold')) || 0.6; 2843 if (target.getAttribute('id').includes('dfp__native')) { 2844 thresholdValue = 0.3; 2845 }; 2846 2847 let observer = observers.get(thresholdValue); 2848 if (!observer) { 2849 if (dfpDebug) console.log(`Creating new observer for threshold: ${thresholdValue}`); 2850 //const rootMargin = `0px 0px ${thresholdValue * 100}% 0px`; 2851 const rootMargin = `${thresholdValue * 100}% 0px ${thresholdValue * 100}% 0px`; 2852 2853 observer = new IntersectionObserver( 2854 (entries, obs) => { 2855 entries.forEach(entry => { 2856 if (entry.isIntersecting) { 2857 if (dfpDebug) { 2858 console.log('HAS: entry.boundingClientRect.height: ' + entry.boundingClientRect.height); 2859 console.log('HAS: calling runHeaderbid: ' + entry.target.id); 2860 let distanceFromViewportBottom = window.innerHeight - entry.boundingClientRect.top; 2861 console.log(`HAS: ${entry.target.id} is ${distanceFromViewportBottom.toFixed(0)}px from the bottom of viewport...`); 2862 } 2863 loadAdSlot(entry.target.id); 2864 obs.unobserve(entry.target); 2865 } 2866 }); 2867 }, 2868 { 2869 root: null, // relative to the viewport 2870 rootMargin: rootMargin, 2871 threshold: 0.0 // Fire as soon as it enters the margin 2872 } 2873 ); 2874 observers.set(thresholdValue, observer); 2875 } 2876 2877 observer.observe(target); 2878 if (dfpDebug) console.log('Observing element: ', target.id, 'with threshold:', thresholdValue); 2879 }); 2880 } 2881 2882 let debounceTimeout; 2883 function debouncedObserve() { 2884 clearTimeout(debounceTimeout); 2885 debounceTimeout = setTimeout(observeDFPElements, 100); 2886 } 2887 2888 2889 var dfpReady = setInterval(function() { 2890 if(window.googletag && googletag.pubadsReady) { 2891 if (dfpDebug) {console.log('DFP ready, starting observation...')} 2892 2893 observeDFPElements(); 2894 2895 const mutationObserver = new MutationObserver(debouncedObserve); 2896 mutationObserver.observe(document.body, {childList: true, subtree: true}); 2897 2898 clearInterval(dfpReady); 2899 2900 } 2901 }, 50) 2902 2903 } 2904 2905 2906 var adslotsDefined = true; 2907 2908 2909 jQuery(function () { 2910 2911 jQuery('body.single-post .article__body').append('<h3>Lue myös:</h3><ul id="latest-articles"></ul>'); 2912 2913 const FEED_URL = 'https://hymy.fi/wp-json/feeds/uutiset-uusimmat'; 2914 const MAX_POSTS = 15; 2915 2916 const FEED_KEY = 'latestArticlesFeed'; 2917 const FEED_TS_KEY = 'latestArticlesFeedTs'; 2918 const FEED_TTL = 1000 * 60 * 60; // 1 hour 2919 2920 const READ_KEY = 'latestReadPostIds'; 2921 const READ_TTL = 1000 * 60 * 60 * 24 * 7; // 7 days 2922 2923 function decodeHtmlEntities(str) { 2924 if (!str) return ''; 2925 const txt = document.createElement('textarea'); 2926 txt.innerHTML = str; 2927 return txt.value; 2928 } 2929 2930 function storageAvailable(type) { 2931 try { 2932 const storage = window[type]; 2933 const x = '__test__'; 2934 storage.setItem(x, x); 2935 storage.removeItem(x); 2936 return true; 2937 } catch (e) { 2938 return false; 2939 } 2940 } 2941 2942 function getReadPostMap() { 2943 2944 let readPostMap = {}; 2945 if (!storageAvailable('localStorage')) return readPostMap; 2946 2947 try { 2948 readPostMap = JSON.parse(localStorage.getItem(READ_KEY)) || {}; 2949 } catch (e) { 2950 return {}; 2951 } 2952 2953 const now = Date.now(); 2954 let changed = false;
2955 2956 Object.keys(readPostMap).forEach(postId => { 2957 if (now - readPostMap[postId] > READ_TTL) { 2958 delete readPostMap[postId]; 2959 changed = true; 2960 } 2961 }); 2962 2963 if (changed) { 2964 localStorage.setItem(READ_KEY, JSON.stringify(readPostMap)); 2965 } 2966 2967 return readPostMap; 2968 2969 } 2970 2971 function markPostAsRead(postId) { 2972 2973 if (!postId || !storageAvailable('localStorage')) return; 2974 2975 const readPostMap = getReadPostMap(); 2976 if (!readPostMap[postId]) { 2977 readPostMap[postId] = Date.now(); 2978 localStorage.setItem(READ_KEY, JSON.stringify(readPostMap)); 2979 } 2980 2981 } 2982 2983 function isPostRead(postId) { 2984 return !!getReadPostMap()[postId]; 2985 } 2986 2987 let currentPostId = null; 2988 if (window.dataLayer && Array.isArray(window.dataLayer)) { 2989 const pageData = window.dataLayer.find(obj => obj.PostId); 2990 if (pageData) { 2991 currentPostId = pageData.PostId; 2992 } 2993 } 2994 2995 if (currentPostId) { 2996 markPostAsRead(currentPostId); 2997 } 2998 2999 function getCachedFeed() { 3000 3001 if (!storageAvailable('sessionStorage')) return null; 3002 3003 try { 3004 3005 const feedData = sessionStorage.getItem(FEED_KEY); 3006 const ts = sessionStorage.getItem(FEED_TS_KEY); 3007 3008 if (!feedData || !ts) return null; 3009 3010 if (Date.now() - parseInt(ts, 10) > FEED_TTL) { 3011 sessionStorage.removeItem(FEED_KEY); 3012 sessionStorage.removeItem(FEED_TS_KEY); 3013 return null; 3014 } 3015 3016 return JSON.parse(feedData); 3017 3018 } catch (e) { 3019 return null; 3020 } 3021 3022 } 3023 3024 function cacheFeed(feedData) { 3025 if (!storageAvailable('sessionStorage')) return; 3026 try { 3027 sessionStorage.setItem(FEED_KEY, JSON.stringify(feedData)); 3028 sessionStorage.setItem(FEED_TS_KEY, Date.now()); 3029 } catch (e) {} 3030 } 3031 3032 function renderPostList(posts) { 3033 3034 if (!posts || !posts.length) return; 3035 3036 const $ul = jQuery('#latest-articles'); 3037 if (!$ul.length) return; 3038 3039 let postsRendered = 0; 3040 3041 posts.forEach(post => { 3042 3043 if (postsRendered >= MAX_POSTS) return; 3044 if (post.is_ad) return; 3045 if (post.ID === currentPostId) return; 3046 if (isPostRead(post.ID)) return; 3047 3048 const $link = jQuery('<a>', { 3049 href: post.url, 3050 text: decodeHtmlEntities(post.title), 3051 class: 'latest-article-link', 3052 'data-postid': post.ID 3053 }); 3054 3055 $link.on('click', function () { 3056 3057 const postId = jQuery(this).data('postid'); 3058 const targetPostId = currentPostId || 0; 3059 3060 markPostAsRead(postId); 3061 3062 const cacheBuster = Math.floor(Math.random() * 100000000); 3063 const img = new Image(); 3064 img.src = 3065 'https://digitiimi.otavamedia.fi/cc/recom/?siteid=18&typeid=1' + 3066 '&bu=' + encodeURIComponent(location.href) + 3067 '&tu=' + encodeURIComponent(post.url) + 3068 '&cb=' + cacheBuster + 3069 '&pid=' + postId + 3070 '&tpid=' + targetPostId; 3071 }); 3072 3073 const $li = jQuery('<li>').append($link); 3074 $ul.append($li); 3075 3076 postsRendered++; 3077 }); 3078 } 3079 3080 function init(feedData) { 3081 3082 if (!feedData || !feedData.posts || !feedData.posts.length) return; 3083 3084 const posts = feedData.posts.slice().reverse(); 3085 renderPostList(posts); 3086 3087 } 3088 3089 const cachedFeed = getCachedFeed(); 3090 3091 if (cachedFeed) { 3092 init(cachedFeed); 3093 } else { 3094 jQuery.getJSON(FEED_URL) 3095 .done(function (feedData) { 3096 cacheFeed(feedData); 3097 init(feedData); 3098 }); 3099 } 3100 3101 }); 3102 3103</script>
3103 3104
3105<script> 3106 3107 if (document.location.href.indexOf("anchorad=1") > -1) { 3108 3109 //loadAds(); 3110 //console.log("load_test"); // This should be called when all <div data-ad-unit="??"> elements exists in DOM 3111 3112 var adTestParam = 'anchorad=1'; 3113 $("body a").each(function() { 3114 var hrefSrc = $(this).attr('href'); 3115 if (hrefSrc != null) { 3116 if (hrefSrc.indexOf("jpg") < 0 && hrefSrc.indexOf("gif") < 0 && hrefSrc.indexOf("png") < 0 && hrefSrc.indexOf("javascript") < 0 && hrefSrc.indexOf("debug=1") < 0) { 3117 if (hrefSrc.indexOf("?") < 0) { 3118 var ahreffi = hrefSrc + '?' + adTestParam; 3119 } else { 3120 var ahreffi = hrefSrc + '&' + adTestParam; 3121 } 3122 $(this).attr('href',ahreffi); 3123 } 3124 } 3125 }); 3126 3127 } 3128 3129</script>
3129 3130 3131<style> 3132 3133 .latest-article-link { 3134 font-size: 15px; 3135 } 3136 ul#latest-articles { 3137 list-style-type: none; 3138 margin: 0; 3139 padding-top: 10px; 3140 } 3141 ul#latest-articles li { 3142 margin-bottom: 5px; 3143 } 3144 ul#latest-articles li:nth-Child(5n+0) { 3145 margin-bottom: 20px; 3146 } 3147 @media screen and (max-width: 768px) { 3148 .latest-article-link { 3149 font-size: 18px; 3150 } 3151 ul#latest-articles li { 3152 margin-bottom: 10px; 3153 } 3154 ul#latest-articles li:nth-Child(5n+0) { 3155 margin-bottom: 30px; 3156 } 3157 } 3158 3159 #verkkopalvelut .footer__services, 3160 #verkkopalvelut #palvelut { 3161 display: none; 3162 } 3163 3164 #verkkopalvelut .om-logo, 3165 #verkkopalvelut .footer__logo { 3166 margin: 0 auto; 3167 display: block; 3168 float: none; 3169 max-width:100px; 3170 } 3171 3172 #verkkopalvelut .footer__logo img { 3173 width: 100%; 3174 max-width:100px; 3175 margin: 0 auto; 3176 display:block; 3177 } 3178 3179 #verkkopalvelut .om-logo, 3180 #verkkopalvelut { 3181 padding-bottom:0; 3182 padding-top:0; 3183 padding-left:0; 3184 padding-right:0; 3185 } 3186 3187 #verkkopalvelut .verkkopalvelut-inner { 3188 padding: 30px 0; 3189 } 3190 3191 .bb-float-close-button { 3192 top: -32px !important; 3193 padding: 7px 5px !important; 3194 font-size: 26px !important; 3195 } 3196 .bb_wrapper:has(.bb-float-close-button[style*="display: block"]), .bb_wrapper:has(.bb-float-close-button:not([style*=display])) { 3197 right: 8px !important; 3198 bottom: 8px !important; 3199 } 3200 @media screen and (min-width: 880px) { 3201 .bb_wrapper:has(.bb-float-close-button[style*="display: block"]), .bb_wrapper:has(.bb-float-close-button:not([style*=display])) { 3202 right: 20px !important; 3203 bottom: 15px !important; 3204 } 3205 } 3206 #dfp__interstitial_1 { 3207 position: fixed; 3208 z-index: 1000000; 3209 width: 1px; 3210 height: 1px; 3211 margin: 0px; 3212 padding: 0px; 3213 left: 0px; 3214 top: 0px; 3215 } 3216 3217</style> 3218 3219<!-- Body end tag end, do not remove --></body> 3220</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.