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 = 'frontpage'; 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":"frontpage","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":"frontpage","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: "frontpage", 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>Hymy</title> 1607 <link rel="canonical" href="https://hymy.fi/"> 1608 <link rel="next" href="https://hymy.fi/page/2/"> 1609 <meta property="og:locale" content="fi_FI"> 1610 <meta property="og:type" content="website"> 1611 <meta property="og:title" content="Hymy"> 1612 <meta property="og:url" content="https://hymy.fi/"> 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/","url":"https://hymy.fi/","name":"Hymy","isPartOf":{"@id":"https://hymy.fi/#website"},"breadcrumb":{"@id":"https://hymy.fi/#breadcrumb"},"inLanguage":"fi"},{"@type":"BreadcrumbList","@id":"https://hymy.fi/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Etusivu"}]},{"@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 <meta name="msvalidate.01" content="E4D3B0C3D94B9854E18775333926A18D"> 1621 <meta name="google-site-verification" content="9S0cRl0O73BRM7KJ0YOxE65L5jzMKkFxwfw1kJKBCXc"> 1622 <!-- / Yoast SEO plugin. --> 1623 1624 1625<link rel="dns-prefetch" href="//ajax.googleapis.com"> 1626<link rel="dns-prefetch" href="//plausible.io"> 1627 1628
1628<script> 1629 window.AsteikkoMagWidgets = { 1630 siteUrl: "https:\/\/hymy.fi" }; 1631 </script>
1631 1632 1633 <style id="wp-img-auto-sizes-contain-inline-css" type="text/css"> 1634img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 1635/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 1636</style> 1637<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"> 1638<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"> 1639<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"> 1640<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"> 1641<style id="wp-block-library-inline-css" type="text/css"> 1642: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;
1642--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}} 1643/*wp_block_styles_on_demand_placeholder:6ab572c066d17*/ 1644/*# sourceURL=wp-block-library-inline-css */ 1645</style> 1646<style id="classic-theme-styles-inline-css" type="text/css"> 1647/*! This file is auto-generated */ 1648.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} 1649/*# sourceURL=/wp-includes/css/classic-themes.min.css */ 1650</style> 1651<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"> 1652<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"> 1653<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"> 1654
1654<script type="text/javascript" id="om-website-analytics"> 1655 analyticsEvent = function() {}; 1656 analyticsSocial = function() {}; 1657 analyticsVPV = function() {}; 1658 analyticsClearVPV = function() {}; 1659 analyticsForm = function() {}; 1660 window.dataLayer = window.dataLayer || []; 1661 dataLayer.push({"PageType":"Etusivu","PaidUser":false,"UserLevel":"1"}); 1662 </script>
vendor: 1 bytes, line 1662
1662
1663<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 1663
1663
1664<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 1664
1664
1665<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 1665
1665
1666<script type="text/javascript" id="plausible-analytics-js-after"> 1667/* <![CDATA[ */ 1668window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) } 1669//# sourceURL=plausible-analytics-js-after 1670/* ]]> */ 1671</script>
1671 1672<link rel="https://api.w.org/" href="https://hymy.fi/wp-json/"><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://hymy.fi/xmlrpc.php?rsd"> 1673<meta name="generator" content="WordPress 6.9.9"> 1674<!-- AWPO lazy-load marker --><meta name="plausible-analytics-version" content="2.3.1"> 1675 1676
1676<script> 1677 var wp_template_url = 'https://hymy.fi/wp-content/themes/om-core'; 1678 </script>
1678 1679 1680 1681 1682 <!-- SSO login related --> 1683
1683<script type="text/javascript"> 1684 window.om = window.om || {}; 1685 window.om.wp_nonce = "ac08bb4d1b"; 1686 window.om.client_id = "2db43cdc-f69e-4559-9e56-c5694ebacff6"; 1687 window.om.client_url = "https://tili.otavamedia.fi"; 1688 </script>
1688 1689 1690 1691</head> 1692 1693<body class="home blog wp-theme-om-core wp-child-theme-om-hymy-theme blog-1"> 1694 1695 <!-- Body tag start, do not remove --> 1696 1697<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 1697-1698
1697 1698<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1698GTM-M3VTTX
vendor: 83 bytes, line 1698
1698" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1699<!-- End Google Tag Manager (noscript) --> 1700 1701<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 1701-1702
1701 1702<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1702GTM-TSMVFP56
vendor: 83 bytes, line 1702
1702" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1703<!-- End Google Tag Manager (noscript) --> 1704 1705<!-- Google Tag Manager (noscript) --> 1706<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> 1707<!-- End Google Tag Manager (noscript) --> 1708
1709<script> 1710 1711 if (location.href.includes('dfptesti')) { 1712 1713 if (window.dataLayer) { 1714 dataLayer.forEach(function (dataLayerItem) { 1715 if (dataLayerItem['PrimaryCategory'] !== '' && dataLayerItem['PrimaryCategory'] !== undefined) { 1716 articleCategory = dataLayerItem['PrimaryCategory'].toLocaleString().toLowerCase().replace(/, /g, ','); 1717 if (dfpDebug) {console.log('ArticleCategory: ' + articleCategory);} 1718 } 1719 if (dataLayerItem['Categories'] !== '' && dataLayerItem['Categories'] !== undefined) { 1720 articleCategories = dataLayerItem['Categories'].toLocaleString().toLowerCase().replace(/, /g, ','); 1721 if (dfpDebug) {console.log('Categories: ' + articleCategories);} 1722 } 1723 if (dataLayerItem['Tags'] !== '' && dataLayerItem['Tags'] !== undefined) { 1724 articleTags = dataLayerItem['Tags'].toLocaleString().toLowerCase().replace(/, /g, ','); 1725 if (dfpDebug) {console.log('Tags: ' + articleTags);} 1726 } 1727 if (dataLayerItem['Section'] !== '' && dataLayerItem['Section'] !== undefined) { 1728 articleSection = dataLayerItem['Section'].toLowerCase().replace(/, /g, ','); 1729 if (dfpDebug) {console.log('ArticleSection: ' + articleSection);} 1730 } 1731 }); 1732 } else { 1733 console.error('DataLayer is not defined.') 1734 } 1735 1736 if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') { 1737 cxSegmentIds = localStorage.getItem("_cX_segmentInfo"); 1738 } 1739 initDFP(cxSegmentIds); 1740 console.log('initDFP called with LS_cX_segmentInfo...'); 1741 1742 } 1743 1744</script>
1744 1745 1746<!-- Body tag end, do not edit or remove --> 1747
1747<script> 1748 function getCookie(name) { 1749 var value = "; " + document.cookie; 1750 var parts = value.split("; " + name + "="); 1751 if (parts.length == 2) return parts.pop().split(";").shift(); 1752 } 1753 1754 if (getCookie("theme") == "light") { 1755 document.getElementsByTagName("body")[0].classList.add("light"); 1756 } 1757 </script>
1757 1758 1759 <div id="additionalBg"> 1760 <div id="topbar"> 1761 <div class="wrapper--center"> 1762 1763 1764 <span id="mobile-navigation__button" class="fa fa-bars"></span> 1765 <span id="mobile-navigation__search" class="fa fa-search navi__search--button"></span> 1766 1767 1768 <a class="topbar__logo float--left" href="https://hymy.fi/"></a> 1769 1770 <div id="mobile-scroll"> 1771 1772 <div id="navigation--mobilebuttons" class="navi float--right"> 1773 <a href="/tilaa" class="float--left">Tilaa</a> 1774<a href="/nakoislehti" class="navi__magazine float--left">Näköislehti</a> 1775 1776<a href="https://hymy.fi/kirjaudu/" title="Kirjaudu" class="navi__user float--left"> 1777 Kirjaudu</a> 1778 1779 </div> 1780 1781 <ul id="navigation--primary" class="navi float--left"><li id="menu-item-36689" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-36689"><a href="https://hymy.fi/kategoria/uutiset/">Uutiset</a></li> 1782<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> 1783<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> 1784<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> 1785<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> 1786<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> 1787</ul><div id="navigation--secondary" class="navi float--right"> 1788 1789 <a href="/nakoislehti" class="navi__magazine float--left" title="Näköislehti">Näköislehti</a> 1790 1791 1792 1793 <a href="https://hymy.fi/kirjaudu/" class="navi__icon navi__user float--left" title="Kirjaudu"> 1794 <i class="fa fa-user"></i> 1795 <span class="display__text--tablet">Kirjaudu</span> 1796 </a> 1797 1798 <a class="navi__icon navi__search--button float--left" title="Haku"> 1799 <i class="fa fa-search"></i> 1800 </a> 1801 1802</div> 1803 <div class="navi float--right" id="navigation--some"> 1804 1805 <a href="https://www.facebook.com/hymy.fi" target="_blank" title="Facebook" class="fa fa-facebook"></a> 1806 <a href="https://twitter.com/HymyFI" target="_blank" title="Twitter" class="fa fa-twitter"></a> 1807 <a href="https://hymy.fi/feed" target="_blank" title="RSS-syöte" class="fa fa-rss"></a> 1808 </div> 1809 1810 <div style="clear:both;"><!-- overflow:hidden; won't work in this case --></div> 1811 1812 </div><!-- mobile-scroll --> 1813 </div><!-- .wrapper--center --> </div> <!-- topbar --> 1814 1815 1816 <div id="wrapper"> 1817 <div id="inner-wrapper"> 1818 <div class="widget-area super-widget-area"> 1819 </div> 1820 <div class="widget-area top-widget-area"> 1821 1822 1823 </div> 1824 1825 <div class="col-two"> 1826 1827 1828 <div class="widget-area"> 1829 1830 <div data-template="def50200deac6e002e6c43e00dc234bd388b6f5c5a2488f5a58c13bb18d679e205cba3fe624b73d9787240ad1d125840082149a29486cb3cdbaa73fa2f852cf85fb0c6aebaa35b3727d8b7e48b9680672309ff918d19183c1b2fb9" data-query="def502005d7dd94bdbec84ec451aee1061662822c2f2068edaea9cd3498af98a502ccacd3a6d03ff88a2350c1e8e61e34f1bf9bc520bc7dc446204907904507e1caeb24ccc30b918a89fd6ac1bc5c3f22f9c036f9f315c2cb974a488007917f6ea3b9c219b11351ba00152118aaef1fd6ec0d1732a6f8556f318d3bc173aa8a022b27c215566542ce3e7fa19c42ddac1e53467ee8a81b1d960e0c3df8939d67b7b4516998b4d6f20216bceecba49a2d0cac67b5b3e09023fb56abdd7a81618ce73b111eda819c4aaa7eff30ce090c131a46b1731a7b125f8ee5871e2737e12d1385462c6d3ab88ed05df97a55edafc9acca9ff225ef0caccf23806dce1fc85e6304565b362b1e33c3c05e8b5999db7b1902bf318049c52805d84984ced2f7b7b2628339834e84046
1830a4eba5dfe32c1c4b2e13cd3646dc7ea5bed5ea537f49c0f7da9bd58c1bacc4962cd5c6adba99c69cb1d5a9adc10cf3f0b47f595a503572e5f821757b77e173b6cb224372909a5ba67c29cfae98d3ea4cba44be3374832aa6fb8e90ba5597d3cd66d2a8f402607c7404eedc2ed84ecdf0bb454e4a9c82da65ab26e25e57c7e8da0ecde1bc552e794102b80a886eae0837f6d8c74b52942ee7ac4662e46586d15e4a223d26fc7b693e691b3311d89513f8a107ff28d399877d4fb76ccf53f6dec9673421ee4b1897a6bab84ab3e09347c964b66de68cfe2104ade1b15941fba5e6701445e28bf00634a4518b2c9cd46f407ddcda9060ff4b0684520745b82913f78d0413e434d6d21c35642391cbe34ff6bc5de6bb214f193d42c81e1daca7aadacf2dc090109d0342be1d09635d16eae1c11fc6aedea84b09bc383d9520878a0c02ee24c31870ad60462975b8a89ccdb9d47b59c13d2a26648b98dc3df3e35b062d4e7ce2e937c46427cf5b5bd7a9670221e909fd26f7882eeab483b5fa0c9d09878fad1397e74ee9b8ad69bce69d27cfeb40609f60e9fc84d79a670372f177abde2b7b977aba0e9565011f075d322ff6608dd0c84dff90766b1db9474d2d6e9acc0ad110a929440eac2d05e96a880385432bd5a8a08d7f69b73b8afa659c8e749625e2528512872911f2dae50d8e716e361a6ad727a8c57eb8c9a3474e5c28082111a6f88d1af4cc90a00434ab7c53719891289179e71c4aca7ac2fc78f3244c903a8675de8b216fe492febd856767d7fa39353ac29eaf1b7278a39b5310deadaf91a3e846c19ce6c4184549c9f614d53300a527da3539137afc95a2e575d01bb4743164e00ed95d83f3a11d9203f5770892bf8a1d8f21fe362326b97ead5a290af35ad3255077a1ab9e765e85bc4cd2c16324ca8ac9f91dda30dcb7fa26f212bed995fff3cca7e4c3aad34446e5de8e593265142593fc1c72b0f2b8732265366f9aaa32c6cebed9e3777a834e6c850d9a132c2686decffa8863c2863e55db493edd4ac26086c520c2cf6d0e2e924dd894a3e8f1aca5bcc91fc91c6fc6269aaca06f89f13981293980e98e1ac852798cb6519a4cdd70c96cc492778b89e6ebf0b47c3091921c043f7d011b8090c9536e28f7e2bf56c47730e69094b6cef8aa2805f38ffa72007465c27f5e20d994bd679fcd0c03422987c61b36dc264f9a0c542fe31da2d65f220b261fd7f34234ad72568f6c59a1f449a81c876b13b56122c96179acaaca0f98d5ca1e02149c3d0067bb5d92b0b2a6326103bb7f880df66d1fa3ed4faf3cdb303448c8663d514da3fee32abbb3935ebecde8e2c4c87481783967387b19b38fdffde9d7a226abd219d3d1bcb30509d4b16f6ebf97f8f29d1d787a3be47d069c7ed603c326a73a6c13d0eef8a311cc85e963e3fed7bc36e01f57f18c8993a3575a5005cce2e730df0917df9f989e826e3213df0f87f21a4f15ed4c73e6a0e5a969b67fa99c82adeecfd2438ec64e35b7697d89701597d5c3d62445f80e15c602d0f900b67d6c4f9539c496f24414b1ecb1d17eecf90fb1af765f23d0eb64ec4f595fdf26b34427ea1e7b8e5f7dc295ca8a5b0d8b219bb42a0515a1b39e48eac43f82b64882effca691418e746157cc7ebd7abf132f2c0a47f6a5443fe645c93cafeaecd5600246eea249e0a2b29f8e36fc7b29e8e5ab91faea7f0e63578c01b005219862a8da353b38b141948d883401e527311082fde2b198a33e5c6a5fc8776a656436b3e51dc52775959a75444474dd5334ad0d80d8f9907df3f1514861fb57fd29a81b53dd21d4d10d87c0d46affdf7578343d3f4d88b55226d40cb80ed8606c4fbc3ded92ae196de75f12ba0ccfbd87d06ab7251dbbf64cf599a129a088240c9cbbb95d25065b5f63baac7558d1d65e5ea6a8604914781de4e6f356ec8e9234e2f345a6d911fe7df362f30c8e4e7183c218404236e3e42674fe1f2bd6fde695ed0cac6c89743c93955a420652899f2b56f3388f74d8b9c302311ec36603dda81f7bebc933665f495ee3530189d610267002ce857c45bcfe168ed63016f7f8575ba9904e8d2682d00bd92e61a9dd159ba85f2628c61cf3bc6ac305fad264f0b8eae9b3c17f8e3595288ec406d2a1e03c9aaeb4dc0645543bc6605847256c671716b22a6031a0d96c6ef45ede7a09c16a14f27de94b8e198644617ee784e8c1d150abb1bd398c0ed70c8c2dbbdcef31afd5aaa36e15536524b148af83e3d0a43df5bc27b9edd6571a47717ed7d75f2df3a97d79f75f0ab051e7c039ca7e07e850ef4592ce150ecd828f85c624cb98c8dab27cb8b879156aaa9a6a0acdf055144ea9cf642b2609776662f9a199e27a524de7c90656770282078303d43e9d9ec6e77153e12f5f352fa4c68602f61a0c50af43e4d5ef6d8ba33b000aa790157f312211911ab197e5be90ffc22f413c6f436e1307de1cecfd0a0b26d6cb99ec882d10723f25e7aab5610c3bac5f24cdd45dbbee133b5170b4acf4592fcb95032f9e55ba65b71db4d7b1e39ba5e82fa2a43152fbf10e036d3172f8841e78" data-hash="6ab572c0734d3" data-blog="1" data-options="def50200c8e9e9d119d0edaf7b61b3d1ff68f31205d76fdc8e1a681efb337e9d41a1a67f585f64203ac60873c531a5a342181d0093aa783b8b51674f61ca569eedb9e9b0a03bdbec3d65744c54c92b5bd4f1c70506b0" class="postlisting postlisting-3 omwidget om-grid-container one "> 1831 1832 1833 <ul class="om-grid"> 1834 <li class="item grid-item overlay" style="background-image: url('https://hymy.fi/wp-content/uploads/2026/08/image-23.png');"> 1835 1836 1837 1838 <div class="grid-item__content"> 1839 <div class="meta typogr__meta">
1840 <span class="typogr__meta--category"> 1841 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 1842 </span> 1843 1844 <span class="typogr__meta--date"> 1845 24.09.2026 </span> 1846 </div> 1847 1848 <a href="https://hymy.fi/uutiset/elokuussa-80-vuotiaana-kuolleelta-dolly-partonilta-kuullaan-viela-yksi-uusi-levytys/"> 1849 1850 <h2>Dolly Partonin viimeinen levytys julkaistaan U2:n uudella albumilla!</h2> 1851 1852 <div class="grid-item__excerpt"> 1853 <p> 1854 Elokuussa 80-vuotiaana kuolleelta Dolly Partonilta kuullaan vielä yksi uusi levytys. Country-legenda esiintyy U2:n tulevalla Ca… </p> 1855 </div> 1856 </a> 1857 1858 </div> 1859 1860 <a href="https://hymy.fi/uutiset/elokuussa-80-vuotiaana-kuolleelta-dolly-partonilta-kuullaan-viela-yksi-uusi-levytys/" class="grid-item__bglink"></a> 1861 1862</li> 1863 </ul> 1864 1865 1866 </div> 1867 1868 <div id="dfp__mob-2"> 1869
1869<script>window.dfp.displayAdslot('dfp__mob-2')</script>
1869 1870 </div> 1871 <div id="dfp__in-text"> 1872
1872<script>window.dfp.displayAdslot('dfp__in-text')</script>
1872 1873 </div> 1874 1875 <div data-template="def5020067f1527e21f0ad382f65a28d8e5495f9e2e0eee48190212c324b091d29234f2e859ef6d6c75fd0be3cc07ab1f524ce2d733a2ba065805e64b5e175d8e990e59abf4d35aebe2f1827ae0a28a1ae478182ace43b5f" data-query="def50200a25f7d3c32a9357903f911e2a5c135fc0d5c71a775e68a9424f881f74114289bf522285cf36d5397bf18b9bc06483e56ab1cce2df99ac1f863361ecfe1bd344e7f3eb099d5c98fe1dd176e31cddaa034efeddd247d9f632002ae6a2e9c2f48a180cc253f3ecf878b7183b953f4167573b9612abdbef7b044344be5c63090185f92e94887c69f74a2b0aefd9b6f8c8c701e3c627037f339b93ed1108f2edb357326e5e350afe296eb299245579095c1fc603a742504ebce9e5da71028b5d7f7cec165a159b40c57af7092f1b663c03da40d3eede07bd8a7a2eb4285711520501c60d75c2947cb98b5d7bbcccc3eaa448f87d7c13167166ab7180a395a44193c7bd1da7b633cc371e02272bac1f0a54d33e9ae99c121eebda50fb0d80411a04abd4f8909ca9c0a2ffdc384998db3d7e463c29a368230e1ff84d4b0773a9e44b7aff876a82b1d2652e2a9ed5c7da0703fd7f54c369877fe87c2bdda61d870b7345518f440d01980941253c8e6390fcf58e0efab5476159dfceaca6c13cb51a066ae14ccd71f7ff6ce674808fe4436afcfa7d4cccf5c27614058bff795d3d820e944257c6bba58e12e8173257af2db27b1c57be9ad5ffb851fbe5c97ef04773913fec9837bc31b9f40df6bae6ee1495ac62d3d5c7b5e6da319d8a2e2560b5f7f22d5a43f083b12c2f6afb51924b738826b74d65057735debaa356b0fd68b35ef64ca6409bd6ac49acd5b427fac8ef24f7fcefd8d3f5ff1294179b532e482b670bfa96afe977dbce9aa38d93cf0cb3b4285e095360e44692e9871ab6ac9d1822fa76600c85e949193796ac6f2d5201bcd62649b5751227a79ea01f9d5e02c1e508753ad7e702c6112fc3f848eafca53184e4277e6bf5e08571168386bb3b7bcecaf4a3986c82f938f3855ee633bf4b10f2be2b3437f916dd28e00980ec1b0147e922205ca3bdad6c4fbb0ded5b29f48928b57989a9f94b592e2657ef593542a9483f7779a5b389796fbb23461a58a4aeb91c3947186b5f81c23d6a284a000ec92c37786e86d242c51d74bdff14c80f9b342e21a47ab68f7d71a8ddd96f7623cd388488e23af2608e5bd7b54a6d43cceb719e496dd9f2553c896254c7315204abefb8526dcdec3fb65cc785aa34726f00463eeabb57484a44d354a267e5662984f656910823e870eeacb5b2cbcba2c11c65cbe9fbad367a1526c25a4dc2974f8015dc4233f7254eb17354f5db760e3cc24916eb9945c1033bb7f320ba7903d3ca7275fd5c0f1d1e3178cdafb37a3a102fee99be962cfa9be7334127309738a120d97255920f555b83105317a35f928e3956753c2aea2cbd29082189344c34ad49aaa3671f86c0b290bc406583359101435a3e602f31ca34fcd859b0302a703c0d2549f0854936b849a03b90802b781aae442d994c7491ad9ec8ca4c6e0ba6a1289b3297374d954b396cf5eb81528de6d834fbb872f5f1b9c5d6c7cf4e1ac82204da1e01953c3f9574cdb836a056f1e54353fc83f1be6f93995bd5091528069b43b79a4d977737573176a153e734ecaf06541d878c72a9f23eb01a03002294ccfb1b23044059f3195aa8b0c0ea16895eb57577b1dbe59c3a4100ab49a76d25bdfcf5f2a6e6e976ac7e13e502d333a4beb385bc7520bf311a51ce30ed758a6bfd07112d5774a0e1479dfecf8e7c8bfbbf0a8d02edc7b983afa746e8f3b4dae433a445db1fab92a8202124fe8ead72582ac3e6cc500be5585dcfbf7ed2c72bd5f0ec515c61632be8851bc7d23e09ac24c0f405c235c6c60932febfe8223e5dea15317330ff95a7a5957d0f27f57b25451c785850c172597ae483e4a9c5feb92b1913b152eb32b37dc355cd526fa315a9471c3165a6edf1
1875a3e9b4e4cc0212b2665981031084a458c11e55acbf24aa36c7446d02f558de863fc96c3c0ce2898ce159711f5b1e7b95387095d07f82f2eba8ee487cb5e58afff7f173936fa21622b8cd9850c38c05e818a2b667abb576ca8a752a61c25a3827e60e11b8e139425ef0c89c2fa95dbcadb52cabef1b9fff624a4d5c127f46fb1c358fc954f9fd559be353c3ba2fb6e94d896b56ce887514da7e157de5f994c11171e3d9d4041a3df038312ed025ed0ccc5c5cb49cc1881816d605808670be2547b03e3081c1cb956498d1692b2954e34dfe9fe4a5fb498a75b50cb5915375eeb915e0d466fce183cd60528a33ec2eeea3a0832f1b8a109fe1887a61d979cdc1f0e25cfc0accf6bc1bea869543fbd666b682b0cb4eca99119bb86553cded5a2bd9f1a17b1c9d95ddb04a14bb3cbb7ee9719a7ff108cb331674374d58c594b7f7ac81cdd2a13fb1018e50cdc6fa68feaf6a99a4bc889235947ef14a96ef84bcedc64d6c169e7f56a48c8fd9422becb41eee3c24e4f1d7c41ac1781b95420cfb23f4b1894bd183809729715ea499a778f1025d34f500c3ed65168f3ee4afb41824469732e7ef3464ee40edb91090086dde54e4111af6e3f876b532e8fbaa65aa8feabb61950385f8e4cab57d968147601e69b57db0eb68059f5ac4c3398f8f08d757a9a0612bac4f8680e49f7fec7589c4c93ec3c3bb9075c014821c7b9901a579b82157036118d3eaa8fe696bef370d7634863a9dd71ead8797fd904e3e42387d52a89ce2b263ac253d58c1015742690d7eb9f269bc18315943d34d0e879083157bf452e863470e3212686d46c568718a1dd2546ce9ce525adaa2a0fe807973e7d8315e9faf378d7b284f398c9e615c2d7b2a2bad0c7e37b9ae626702037ecc61311060354916d7142411d2fa5781fbfccdbd58cf056119041cc2e05c9c485f47fe8a0a3c9cab99039aa5ea115642d5ab2cc19ca114c13fb0153da2543ba043339eeef9d78684117afc87666614adebf86dfc24a25d4f6dd101bf03e4fc5ce2341f2fb041e4e64a3ce5a0596df3085327c8210571cf1a0f4c37006e458b4a7b2db1f993cf377d64fb36b3ee8f6e67de4198d4d1b241627f44e8a55ea208f5257ead45f834461bf9f0d1cd6bf3311f6d182d69d8f81670e17bca47bc420e7" data-hash="6ab572c07a3cb" data-blog="1" data-options="def50200f1a8c2cbd75011633f2da33f793b857559c5e3d0bb1674fd02330008bb7dc16c220c9a28330532bf368a384b45c9e96f201ad2d4c4c6211de6a61766cbb64c9d996879f1e77baed9511d0873265c7f0331ba" class="postlisting postlisting-2 omwidget om-grid-container two "> 1876 1877 1878 <ul class="om-grid"> 1879 <li class="om-grid-item"> 1880 1881 <a href="https://hymy.fi/uutiset/laulaja-tauski-peltonen-63-ja-tanssija-henna-peltonen-42-ovat-virallisesti-avioerossa/"> 1882 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2025/04/24430-1024x999.jpg"> 1883 </div> 1884 </a> 1885 1886 <div class="om-grid-item__content"> 1887 <div class="meta typogr__meta"> 1888 <span class="typogr__meta--category"> 1889 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 1890 </span> 1891 </div> 1892 <a href="https://hymy.fi/uutiset/laulaja-tauski-peltonen-63-ja-tanssija-henna-peltonen-42-ovat-virallisesti-avioerossa/"> 1893 <h2>IL: Tauski ja Henna – avioero!</h2> 1894 1895 <div class="om-grid-item__excerpt"> 1896 <p>Laulaja Tauski Peltonen, 63, ja tanssija Henna Peltonen, 42, ovat virallisesti avioerossa. Asian kertoi Iltalehti. Sen mukaan asiasta on kirja…</p> 1897 </div> 1898 </a> 1899 1900 <div class="meta typogr__meta"> 1901 1902 <span class="typogr__meta--date"> 1903 24.09.2026 </span> 1904 1905 1906 1907 </div> 1908 1909 </div> 1910 1911 </li> 1912 <li class="om-grid-item"> 1913 1914 <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/"> 1915 <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2021/02/lentokone_matkustamo.jpg"> 1916 </div> 1917 </a> 1918 1919 <div class="om-grid-item__content"> 1920 <div class="meta typogr__meta"> 1921 <span class="typogr__meta--category"> 1922 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 1923 </span> 1924 </div> 1925 <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/"> 1926 <h2>Ãlä käytä mustia sukkia lentokoneessa â tässä syy!</h2> 1927 1928 <div class="om-grid-item__excerpt"> 1929 <p>Lentomatkustamiseen liittyy pitkä lista pieniä vinkkejä ja varoituksia, mutta yksi niistä kuulostaa ensikuulemalta erikoiselta: lentokoneeseen…</p> 1930 </div> 1931 </a> 1932 1933 <div class="meta typogr__meta"> 1934
1935 <span class="typogr__meta--date"> 1936 24.09.2026 </span> 1937 1938 1939 1940 </div> 1941 1942 </div> 1943 1944 </li> 1945 <li class="om-grid-item"> 1946 1947 <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/"> 1948 <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"> 1949 </div> 1950 </a> 1951 1952 <div class="om-grid-item__content"> 1953 <div class="meta typogr__meta"> 1954 <span class="typogr__meta--category"> 1955 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 1956 </span> 1957 </div> 1958 <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/"> 1959 <h2>Huh, Helena Ahti-Hallberg hurjan näköisenä hoitopöydällä!</h2> 1960 1961 <div class="om-grid-item__excerpt"> 1962 <p>Video on jo sitä luokkaa, että siinä voisi lukea ”Ei herkille”. Helena Ahti-Hallberg on julkaissut videon suoraan hoitopöydältä. S…</p> 1963 </div> 1964 </a> 1965 1966 <div class="meta typogr__meta"> 1967 1968 <span class="typogr__meta--date"> 1969 24.09.2026 </span> 1970 1971 1972 1973 </div> 1974 1975 </div> 1976 1977 </li> 1978 <li class="om-grid-item"> 1979 1980 <a href="https://hymy.fi/uutiset/oulun-poliisilaitos-tutkii-oulussa-keskiviikkona-23-9-illalla-tapahtuneita-epailtyja-rattijuopumusrikoksia/"> 1981 <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"> 1982 </div> 1983 </a> 1984 1985 <div class="om-grid-item__content"> 1986 <div class="meta typogr__meta"> 1987 <span class="typogr__meta--category"> 1988 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 1989 </span> 1990 </div> 1991 <a href="https://hymy.fi/uutiset/oulun-poliisilaitos-tutkii-oulussa-keskiviikkona-23-9-illalla-tapahtuneita-epailtyja-rattijuopumusrikoksia/"> 1992 <h2>Oulussa rattijuopot vaaransivat liikennettä!</h2> 1993 1994 <div class="om-grid-item__excerpt"> 1995 <p>Oulun poliisilaitos tutkii Oulussa keskiviikkona 23.9. illalla tapahtuneita epäiltyjä rattijuopumusrikoksia. Kummassakin tapauksessa kuljettaj…</p> 1996 </div> 1997 </a> 1998 1999 <div class="meta typogr__meta"> 2000 2001 <span class="typogr__meta--date"> 2002 24.09.2026 </span> 2003 2004 2005 2006 </div> 2007 2008 </div> 2009 2010 </li> 2011 <li class="om-grid-item"> 2012 2013 <a href="https://hymy.fi/uutiset/mika-aaltola-kertoo-onnellisia-uutisia-heidan-perheeseen-syntyy-vauva/"> 2014 <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"> 2015 </div> 2016 </a> 2017 2018 <div class="om-grid-item__content"> 2019 <div class="meta typogr__meta"> 2020 <span class="typogr__meta--category"> 2021 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2022 </span> 2023 </div> 2024 <a href="https://hymy.fi/uutiset/mika-aaltola-kertoo-onnellisia-uutisia-heidan-perheeseen-syntyy-vauva/"> 2025 <h2>Mika Aaltolan perheeseen syntyy vauva!</h2> 2026 2027 <div class="om-grid-item__excerpt"> 2028 <p>Mika Aaltola kertoo onnellisia uutisia. Heidän perheeseen syntyy vauva. Mika Aaltola ja Kirsi Aaltola naimisiin syyskuussa 2019. Avioparilla o…</p> 2029 </div> 2030 </a> 2031 2032 <div class="meta typogr__meta"> 2033 2034 <span class="typogr__meta--date"> 2035 24.09.2026 </span> 2036 2037 2038 2039 </div> 2040 2041 </div> 2042 2043 </li> 2044 <li class="om-grid-item"> 2045 2046 <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/"> 2047 <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"> 2048 </div> 2049 </a> 2050 2051 <div class="om-grid-item__content"> 2052 <div class="meta typogr__meta">
2053 <span class="typogr__meta--category"> 2054 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2055 </span> 2056 </div> 2057 <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/"> 2058 <h2>Kim Kardashian eroottisissa kuvissa!</h2> 2059 2060 <div class="om-grid-item__excerpt"> 2061 <p>Erotiikka – sehän se kiinnostaa. Ja myy. Kuinka moni laulaja, näyttelijä tai muu tähti olisikaan ihan takarivin henkilö ilman erotiikkaa…</p> 2062 </div> 2063 </a> 2064 2065 <div class="meta typogr__meta"> 2066 2067 <span class="typogr__meta--date"> 2068 23.09.2026 </span> 2069 2070 2071 2072 </div> 2073 2074 </div> 2075 2076 </li> 2077 <li class="om-grid-item"> 2078 2079 <a href="https://hymy.fi/uutiset/salatut-elamat-suosikkisarja-tekee-televisiohistoriaa/"> 2080 <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"> 2081 </div> 2082 </a> 2083 2084 <div class="om-grid-item__content"> 2085 <div class="meta typogr__meta"> 2086 <span class="typogr__meta--category"> 2087 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2088 </span> 2089 </div> 2090 <a href="https://hymy.fi/uutiset/salatut-elamat-suosikkisarja-tekee-televisiohistoriaa/"> 2091 <h2>Salatut elämät – suosikkisarja tekee televisiohistoriaa!</h2> 2092 2093 <div class="om-grid-item__excerpt"> 2094 <p>Suursuosikki Salatut elämät saavuttaa 5000. jakson rajapyykin samalla, kun Pihlajakadun käänteet tavoittavat MTV Katsomossa ja MTV3-kanavalla …</p> 2095 </div> 2096 </a> 2097 2098 <div class="meta typogr__meta"> 2099 2100 <span class="typogr__meta--date"> 2101 23.09.2026 </span> 2102 2103 2104 2105 </div> 2106 2107 </div> 2108 2109 </li> 2110 <li class="om-grid-item"> 2111 2112 <a href="https://hymy.fi/uutiset/kauppa-sai-alkunsa-vuoden-2025-lopulla-jarjestetysta-huutokaupasta-jonka-toteutti-muumikerailytuotteisiin-erikoistunut-verkkokauppa-muumimukit-rahaksi/"> 2113 <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"> 2114 </div> 2115 </a> 2116 2117 <div class="om-grid-item__content"> 2118 <div class="meta typogr__meta"> 2119 <span class="typogr__meta--category"> 2120 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2121 </span> 2122 </div> 2123 <a href="https://hymy.fi/uutiset/kauppa-sai-alkunsa-vuoden-2025-lopulla-jarjestetysta-huutokaupasta-jonka-toteutti-muumikerailytuotteisiin-erikoistunut-verkkokauppa-muumimukit-rahaksi/"> 2124 <h2>Muumimukien maailmanennätys rikkoutui: Uimahyppy simpukoilla myytiin yli 46 000 eurolla!</h2> 2125 2126 <div class="om-grid-item__excerpt"> 2127 <p>Kauppa sai alkunsa vuoden 2025 lopulla järjestetystä huutokaupasta, jonka toteutti muumikeräilytuotteisiin erikoistunut verkkokauppa Muumimuki…</p> 2128 </div> 2129 </a> 2130 2131 <div class="meta typogr__meta"> 2132 2133 <span class="typogr__meta--date"> 2134 23.09.2026 </span> 2135 2136 2137 2138 </div> 2139 2140 </div> 2141 2142 </li> 2143 </ul> 2144 2145 <ul class="om-grid-controls"> 2146 <li> 2147 <button class="button om-grid-load-more">Lataa lisää <i style="display:none;" class="loader"></i> 2148 </button> 2149 </li> 2150 </ul> 2151 2152 </div> 2153 2154 </div> 2155 2156 2157 <div style="clear: both;"></div> 2158 2159</div> 2160 2161 2162<div id="sivupalkki"> 2163 <div> 2164 <div class="mainside"></div> 2165 2166 2167 <div style="clear:both"></div> 2168 2169 <div id="secondary" class="widget-area" role="complementary"> 2170 2171 2172 <div id="tilaa-seuraa" class="om-widget sidebar-block socialmedialinks socialmedialinks-2"> 2173 <div class="links"> 2174 <a href="/kirjaudu/" class="returnLink">Kirjaudu</a><a href="/tilaa?promoPosition=header-etusivu">Tilaa</a><a href="/ukk/">Ohje</a> </div> 2175 2176 <div class="some"> 2177
2178 <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> 2179 <div style="clear:both;"></div> 2180 </div> 2181 2182 2183 <div id="dfp__rectangle-1"> 2184
2184<script>window.dfp.displayAdslot('dfp__rectangle-1')</script>
2184 2185 </div> 2186 <div class="widget_text sidebar-block"><div class="textwidget custom-html-widget"><!--<div style="text-align: center"> 2187<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> 2188 <div class="omwidget sidebar-block magazineorderwidget magazineorderwidget-2"> 2189 2190 <a href="https://tilaus.hymy.fi/tilaus?promoID=OM_widget&promoName=OM_HY&promoCreative=onlinetarjous&promoPosition=sidebar"> 2191 2192 <div class="magazineorderwidget__content"> 2193 2194 <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> 2195 2196 <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> 2197 </div> 2198 2199 </a> 2200 2201 </div> 2202 2203 <div class="sidebar-block"> <h2 class="block-header_sidebar">Suosituimmat</h2> 2204 <article class="omwidget om-tab-container"> 2205 2206 2207 <ul class="navtabs two"> 2208 <li class="active typogr__tab" data-hash="6ab572c07fd51"><a>Tänään</a></li> 2209 <li class="typogr__tab" data-hash="6ab572c07ff4d"><a>Viikko</a></li> 2210 </ul> 2211 2212 2213 <div data-template="def50200ca90c6c4ceaa745859903d142720ab7a81fe3e65ebc4644e4c3079d0606f3f8c9d3ed83aa0fd80c6f48adc3239200b0fa7d0ad70cf05d738b7310439837abc6fecce69857222b15ed47b7721044ec07a357fc4dd4bc4e4" data-query="def50200da9d30ea6453f19a7dab392059adad11196af1b55b22e5b9bfc1d6737d68fc8a3390658c28090ff245d4a51f5c1630c9d1630057ec645ea8dac38f264c95648bc91eed18e148d8680bc4d0f7f1fecb26cbf72f0963213961715215be0241e5cabc0fd9615abb2ac194e0228ed1b48d08fa727575a151b30dd78ce5da52b1ecc3d2808673342539295a3d39b3f4a3fc4c9e42f0472120691e5ad266d84fd2725a6256de9177cff7a0fe35e3ad294b8524a6519d0791e6723199c0972b3fa8023487f4e266ec91185b803d08dae5e207a4bc70a90d54d1e3298c46472be71b2d7f6b210a5ceed43a607c7bc56f2f1097ca530eb4d3e3fb41ec5273a0c1a17bfeb75d3d5e28cb96cbd264ac264dd52051881c244a04245a267d834586b8d8cff7238226f141ecff864dbbddca0f5963d42adb1aefac7b49c8bbb5752b19838230b208ee2dc62517db9fe6eac021e662" data-hash="6ab572c07fd51" data-blog="1" data-options="def5020047b090cbdebfb1a85df7816a6abe07285ab43882a89525f1fa15e64382ad5b84efb5ee694e577936b3603aebb070062d391cd81bc815495485a02e9558bfe22d18f67d7b1935388907658dc75e7d2e441e7f" class="postlistingwithtabs postlistingwithtabs--1 omwidget om-grid-container one active"> 2214 2215 2216 <ul class="om-grid"> 2217 <li class="compact"> 2218 <div class="meta typogr__meta"> 2219 <span class="compact__cats typogr__catlink"> 2220 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2221 </span> 2222 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2223 23.09.2026 </span> 2224 </div> 2225 2226 <a href="https://hymy.fi/uutiset/karita-tykka-on-nyt-50-vuotias/"> 2227 <h3>Karita Tykkä – alastonkuvat!</h3> 2228 </a> 2229 2230</li> 2231<li class="compact"> 2232 <div class="meta typogr__meta"> 2233 <span class="compact__cats typogr__catlink"> 2234 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2235 </span> 2236 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2237 22.09.2026 </span> 2238 </div> 2239 2240 <a href="https://hymy.fi/uutiset/perjantain-vain-elamaa-jaksossa-vietetaan-nelli-matulan-paivaa-jaksossa-kuullaan-muun-muassa-bessin-kateudesta-nellia-kohtaan/"> 2241 <h3>Vain elämää: Bess ei halunnut olla samassa ohjelmassa kuin Nelli Matula!</h3> 2242 </a> 2243 2244</li> 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/erotiikka-sehan-se-kiinnostaa-ja-myy-kuinka-moni-laulaja-nayttelija-tai-muu-tahti-olisikaan-ihan-takarivin-tellu-ilman-erotiikkaa/"> 2255 <h3>Kim Kardashian eroottisissa kuvissa!</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 17.12.2025 </span> 2266 </div> 2267 2268 <a href="https://hymy.fi/uutiset/martina-aitolehti/"> 2269 <h3>Tällainen on Martina Aitolehden ökyauto!</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 02.02.2011 </span> 2280 </div> 2281 2282 <a href="https://hymy.fi/uutiset/vielako-muistat-nama-martina-aitolehden-rohkeat-alastonkuvat-katso/"> 2283 <h3>Vieläkö muistat nämä Martina Aitolehden rohkeat alastonkuvat – katso!</h3> 2284 </a> 2285 2286</li> 2287 </ul> 2288 2289 2290 </div> 2291 2292 2293 <div data-template="def50200f985fff55a970a7b0930145238fa884849d2622fc1653603b42a3ce55f7c2af217a816b549ad81abf77faeeefc86881d646ffade28db0b753854af6eda72cf5e52f1b1a0da6dad83b55991f0e66bbdeaef73255f95bbb2" data-query="def50200c9df52b7267aa8764498f46138c227d1c71941d019d3bf8afd305565b6d1d0398f40232e4ae5e8c65c88ce0938f3bde839d0f4798b7c973a5422b245a535662186b5c41724e2b86f85bf883f6cb4ddb2a9cc920080fb908b5d3974bf3644ab42e7f20b3612021a34c8acf14ec6f38fc3b9044b9ff391d3215e80fdc8dd2e0567e273c5b0edc3f72e7602b79e7b6684a48f78eb2777c0acec55d2b640b86d28b79ce356bbbafbb8
2293c18522e44108845419828aabfb5f40c64ab05678483b0d99ee257a14c61d01075d2569179686d9c0be6a5c3f10a09abd3fdbee5c14ad68de9c7f82d32d4ee46b1c64b603d52819cc5928a1b8346c18c723f82bbbe130fdef58a0d6c20de143af346ca5b5fcd0fb2c236b81cd77b35408ed0fe581eb803271f084d23a813bd53530e0c3a3012ae0f6cd5ac8b79489d277b2473131ac77c34b98fa63b0ed6fe31b18720d566aece9" data-hash="6ab572c07ff4d" data-blog="1" data-options="def502004e53e984f50630cca8d4ddf46870ea68f4b0d2f9873c0dc527f1ef936bed03e1cd4d97b8e0f1fbcb55fd5fff6f400f51d944bbec6892b76900a5be38351fd98abce96f55ec871c7f7a61d33d9ec8e9141fd3" class="postlistingwithtabs postlistingwithtabs--1 omwidget om-grid-container one "> 2294 2295 2296 <ul class="om-grid"> 2297 <li class="compact"> 2298 <div class="meta typogr__meta"> 2299 <span class="compact__cats typogr__catlink"> 2300 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2301 </span> 2302 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2303 23.09.2026 </span> 2304 </div> 2305 2306 <a href="https://hymy.fi/uutiset/karita-tykka-on-nyt-50-vuotias/"> 2307 <h3>Karita Tykkä – alastonkuvat!</h3> 2308 </a> 2309 2310</li> 2311<li class="compact"> 2312 <div class="meta typogr__meta"> 2313 <span class="compact__cats typogr__catlink"> 2314 <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a> 2315 </span> 2316 <span class="compact__dateandreadcount typogr__meta typogr__meta--date"> 2317 17.09.2026 </span> 2318 </div> 2319 2320 <a href="https://hymy.fi/uutiset/ex-taitoluistelija-kiira-korpi-kavi-hakemassa-salaattiannoksen-ravintolasta-pika-koiransa-kanssa/"> 2321 <h3>Kiira Korpi tyylikkäänä arki-asussa – käväisi salaattiannoksen kaupasta!</h3> 2322 </a> 2323 2324</li> 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 22.09.2026 </span> 2332 </div> 2333 2334 <a href="https://hymy.fi/uutiset/perjantain-vain-elamaa-jaksossa-vietetaan-nelli-matulan-paivaa-jaksossa-kuullaan-muun-muassa-bessin-kateudesta-nellia-kohtaan/"> 2335 <h3>Vain elämää: Bess ei halunnut olla samassa ohjelmassa kuin Nelli Matula!</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/kylie-jenner-on-julkaissut-jalleen-nayttavia-kuvia-kuntosaliltaan-vain-vahan-sen-jalkeen-kun-han-kertoi-haluavansa-nykyista-suuremmat-rinnat/"> 2349 <h3>Kylie Jenner poseeraa niukassa treenitopissa â haluaa vieläkin suuremmat rinnat!</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 17.12.2025 </span> 2360 </div> 2361 2362 <a href="https://hymy.fi/uutiset/martina-aitolehti/"> 2363 <h3>Tällainen on Martina Aitolehden ökyauto!</h3> 2364 </a> 2365 2366</li> 2367 </ul> 2368 2369 2370 </div> 2371 2372 </article> 2373</div> 2374 <div class="widget-imgButton sidebar-block"> 2375 <a href="https://hymy.fi/juttuvinkki/" target="_blank"> 2376 <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> 2377 </a> 2378 </div> 2379 2380 2381 <div class="widget-imgButton sidebar-block"> 2382 <a href="http://pubads.g.doubleclick.net/gampad/clk?id=6012526269&iu=/135812570/tracking/click-tracking" target="_blank"> 2383 <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> 2384 </a> 2385 </div> 2386 2387 2388 </div> 2389 2390 </div> 2391</div> 2392<div style="clear: both;"></div> 2393</div><!-- #inner-wrapper --> 2394</div><!-- #wrapper --> 2395 2396<footer class="site-footer" id="footer"> 2397 2398<div class="om-footer">
2399 <div class="om-footer__columns"> 2400 <div class="om-footer__columns-inner"> 2401 <div class="om-footer__column"> 2402 <h2 class="om-footer__column-title"> 2403 Asiakaspalvelu </h2> 2404 <div class="om-footer__column-content"> 2405 <p><span class="label">Digipalvelut</span>(09) 156 6227<br> 2406<span class="label">Avoinna</span>maâpe 8â19</p> 2407<p> </p> 2408<p><span class="label">Painettu lehti</span>(09) 156 665</p> 2409<p><span class="type label">Avoinna</span>maâpe 8â19</p> 2410<p> </p> 2411<p><span class="label">Sähköposti (digi)</span> [email protected]</p> 2412<p><span class="label">Sähköposti</span> [email protected]</p> 2413<p> </p> 2414<p><span class="label">Otavamedian vaihde</span> (09) 156 61</p> 2415 </div> 2416 </div> 2417 <div class="om-footer__column"> 2418 <h2 class="om-footer__column-title"> 2419 Postiosoite </h2> 2420 <div class="om-footer__column-content"> 2421 <p>Uudenmaankatu 10<br> 242200015 OTAVAMEDIA</p> 2423<p> </p> 2424<p><a href="https://otavamedia.fi/evasteiden-kaytto/">Tietoa evästeiden käytöstä</a><br> 2425<a href="https://www.youronlinechoices.com/fi/">Käyttäytymiseen perustuva mainonta</a><br> 2426<a href="#">Evästeasetukset</a></p> 2427 </div> 2428 </div> 2429 <div class="om-footer__column"> 2430 <h2 class="om-footer__column-title"> 2431 Mediatiedot </h2> 2432 <div class="om-footer__column-content"> 2433 <ul class="footer__list"> 2434<li><a href="https://yrityksille.otavamedia.fi/tekniset-tiedot-ja-hinnat/">Tekniset tiedot, aikataulut ja ilmoitushinnat</a></li> 2435<li><a href="https://yrityksille.otavamedia.fi/reaaliaikainen-kayttajatieto/" rel="nofollow">Tietoa verkon kävijöistä</a></li> 2436<li><a href="https://otavamedia.fi/tietosuoja/" rel="nofollow">Tietosuojaseloste</a></li> 2437<li><a href="https://otavamedia.fi/tilaus-ja-kayttoehdot/">Käyttöehdot</a></li> 2438</ul> 2439 </div> 2440 <h2 class="om-footer__column-title"> 2441 Tuotteet </h2> 2442 <div class="om-footer__column-content"> 2443 <ul> 2444<li><a href="https://otavamedia.fi/tuotteet-ja-edut/" rel="nofollow">Aikakauslehdet</a></li> 2445<li><a href="https://otavamedia.fi/tuotteet-ja-edut/verkkopalvelut" rel="nofollow">Verkkopalvelut</a></li> 2446<li><a href="https://otavamedia.fi/tuotteet-ja-edut/digilehdet" rel="nofollow">Digilehdet</a></li> 2447</ul> 2448 </div> 2449 </div> 2450 <div class="om-footer__column"> 2451 <h2 class="om-footer__column-title"> 2452 Toimitus ja lehtitilaus </h2> 2453 <div class="om-footer__column-content"> 2454 <ul class="footer__list"> 2455<li><a href="https://otavamedia.fi/asiakaspalvelu/#omat-tiedot-ja-tilaukset" rel="nofollow">Tilausmuutokset</a></li> 2456<li><a href="/toimituksen-yhteystiedot/#palaute">Palautelomake</a></li> 2457</ul> 2458<p><a class="footer-button" href="/toimituksen-yhteystiedot/">Toimitus</a><br> 2459Sähköpostiosoitteet: [email protected]<br> 2460<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> 2461 </div> 2462 </div> 2463 </div> 2464 </div> 2465 <div class="om-footer__logo"> 2466 <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
2466w, 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> 2467 </div> 2468 2469</footer> 2470 2471 2472<!--[if IE 8]> 2473<div class="if-ie-8">Huom! Sivuston kaikki ominaisuudet eivät välttämättä toimi selaimellasi. Ole hyvä, ja päivitä selaimesi.</div> 2474<![endif]--> 2475 2476<!-- 186 queries in 0,429 seconds. -->
2477<script type="speculationrules"> 2478{"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"}]} 2479</script>
2479 2480
2481<script type="text/javascript"> 2482 jQuery( function() { 2483 try { 2484 AsteikkoAuth.init( "https:\/\/hymy.fi\/" ); 2485 } catch( e ) { 2486 if ( window.console && console.error ) 2487 console.error( e ); 2488 } 2489 } ); 2490</script>
2490
2490<script> 2491 function convert_to_url(obj) { 2492 return Object 2493 .keys(obj) 2494 .map(k => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`) 2495 .join('&'); 2496 } 2497 2498 function pass_to_backend() { 2499 if(window.location.hash) { 2500 var hash = window.location.hash; 2501 var elements = {}; 2502 hash.split("#")[1].split("&").forEach(element => { 2503 var vars = element.split("="); 2504 elements[vars[0]] = vars[1]; 2505 }); 2506 if(("access_token" in elements) || ("id_token" in elements) || ("token" in elements)) { 2507 if(window.location.href.indexOf("?") !== -1) { 2508 window.location = (window.location.href.split("?")[0] + window.location.hash).split('#')[0] + "?" + convert_to_url(elements); 2509 } else { 2510 window.location = window.location.href.split('#')[0] + "?" + convert_to_url(elements); 2511 } 2512 } 2513 } 2514 } 2515 2516 pass_to_backend(); 2517 </script>
2517 2518 2519
2519<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 2519
2519
2520<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 2520
2520
2521<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 2521
2521
2522<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 2522
2522
2523<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 2523
2523
2524<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 2524
2524
2525<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 2525
2525
2526<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>
2526 2527</div> <!-- / #additionalBg --> 2528<!-- Body end tag start, do not remove --> 2529
2530<script> 2531 2532 //hymy.fi 2533 2534 async function waitForVariable2(variableName, timeoutMs = 30000, intervalMs = 1000) { 2535 const startTime = Date.now(); 2536 for (; !window[variableName]; ) { 2537 if (Date.now() - startTime >= timeoutMs) { 2538 console.warn(`waitForVariable2: Timeout of ${timeoutMs / 1000}s reached for variable "${variableName}".`); 2539 return false; 2540 } 2541 await new Promise(resolve => setTimeout(resolve, intervalMs)); 2542 } 2543 return true; 2544 } 2545 2546 //jQuery('#inner-wrapper > div.col-two').before(jQuery('#dfp__interstitial')); 2547 //if (dfpDebug) {console.log('Moving interstitial...')} 2548 2549 jQuery('body').prepend('<div id=\'dfp__interstitial_1\'>
2549<script>window.dfp.displayAdslot(\'dfp__interstitial_1\')<\/script></div>'); 2550 2551 if (location.href.indexOf('interstitial2') > -1) { 2552 2553// let interval = setInterval(function(){ 2554// if (window.googletag && googletag.apiReady && googletag.pubadsReady) { 2555 //var aStr = '
2555<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\">
2555<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");googletag.pubads().refresh([interstitialSlot]);});<\/script></div>'; 2556 //var aStr = '
2556<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\">
2556<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");});<\/script></div>'; 2557 var aStr = '
2557<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\">
2557<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");});<\/script></div>'; 2558 //jQuery('#inner-wrapper > div.col-two').before(aStr); 2559 jQuery('body').prepend(aStr); 2560 console.log('Interstitial added...'); 2561// clearInterval(interval); 2562// } 2563// }, 10); 2564 2565 } 2566 2567 if (location.href.indexOf('webinterstitial') >= -1) { 2568 waitForVariable2("canRunWebInterstitial", 30000, 1000) 2569 .then((success) => { 2570 if (success) { 2571 if (dfpDebug) {console.log('Defining webinterstitial...')} 2572 var webinterstitialSlot; 2573 googletag.cmd.push(function() { 2574 webinterstitialSlot = googletag.defineOutOfPageSlot('/135812570/hymy/content/webinterstitial', googletag.enums.OutOfPageFormat.INTERSTITIAL); 2575 if (webinterstitialSlot) {webinterstitialSlot.addService(googletag.pubads()); googletag.pubads().refresh([webinterstitialSlot]);} 2576 }); 2577 } else { 2578 if (dfpDebug) { console.log('waitForVariable2 "canRunWebInterstitial" timed out or variable was not found.'); } 2579 } 2580 }) 2581 .catch(error => { 2582 if (dfpDebug) { console.error('Error in waitForVariable2:', error); } 2583 }); 2584 } 2585 2586 if (location.href.indexOf('anchorad') > -1) { 2587 if (dfpDebug) {console.log('Anchor ad defined...')} 2588 var anchorSlot; 2589 googletag.cmd.push(function() { 2590 if (document.body.clientWidth <= 500) { 2591 anchorSlot = googletag.defineOutOfPageSlot('/135812570/hymy/content/anchorad', googletag.enums.OutOfPageFormat.BOTTOM_ANCHOR); 2592 } else { 2593 anchorSlot = googletag.defineOutOfPageSlot('/135812570/hymy/content/anchorad', googletag.enums.OutOfPageFormat.BOTTOM_ANCHOR); 2594 }
2595 if (anchorSlot) {anchorSlot.addService(googletag.pubads())} 2596 }); 2597 } 2598 2599 if (window.dfp.visibility == 'mobile') { 2600 jQuery('body').prepend('<div id=\'dfp__topad-mob\'>
2600<script>window.dfp.displayAdslot(\'dfp__topad-mob\')<\/script></div>'); 2601 } 2602 2603 if (document.documentElement.clientWidth >= 1020) { 2604 jQuery("#inner-wrapper > div.col-two").before('<div id="dfp__desk-1_1">
2604<script>window.dfp.displayAdslot("dfp__desk-1_1")<\/script></div>'); 2605 jQuery('#sivupalkki').find('h2:contains("Suosituimmat")').parent('div').after('<div id="dfp__rectangle-2_2">
2605<script>window.dfp.displayAdslot("dfp__rectangle-2_2")<\/script></div>'); 2606 jQuery('#sivupalkki #secondary').append('<div id="dfp__rectangle-2_3">
2606<script>window.dfp.displayAdslot("dfp__rectangle-2_3")<\/script></div>'); 2607 } 2608 2609 if (adLocation == 'frontpage') { 2610 2611 if (document.documentElement.clientWidth < 1020) { 2612 jQuery(".col-two .widget-area .postlisting-3 ul li").eq(0).css('margin-bottom','30px').after('<div id="dfp__mob-1_1">
2612<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>'); 2613 jQuery(".col-two .widget-area .postlisting-2 ul li").eq(0).after(jQuery("#dfp__mob-2").css('margin','0px 0px 40px')); 2614 jQuery(".col-two .widget-area .postlisting-2 ul li").eq(2).after('<div id="dfp__mob-2_1">
2614<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>'); 2615 jQuery(".col-two .widget-area .postlisting-2 ul li").eq(4).after('<div id="dfp__mob-2_2">
2615<script>window.dfp.displayAdslot("dfp__mob-2_2")<\/script></div>'); 2616 } else { 2617 //jQuery(".col-two .widget-area .postlisting-2 ul li").eq(1).after(jQuery("#dfp__in-text")); 2618 } 2619 2620 } 2621 2622 if (jQuery('body').hasClass('category-horoskooppi')) { 2623 2624 if (document.documentElement.clientWidth < 1020) { 2625 jQuery(".col-two .widget-area .postlisting-4 ul li").eq(0).after('<div id="dfp__mob-1_1">
2625<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>'); 2626 jQuery(".col-two .widget-area .postlisting-4 ul li").eq(3).after(jQuery("#dfp__mob-2")); 2627 jQuery(".col-two .widget-area .postlisting-4 ul li").eq(6).after('<div id="dfp__mob-2_1">
2627<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>'); 2628 jQuery(".col-two .widget-area .postlisting-4 ul li").eq(9).after('<div id="dfp__mob-2_2">
2628<script>window.dfp.displayAdslot("dfp__mob-2_2")<\/script></div>'); 2629 } else { 2630 jQuery(".col-two .widget-area .postlisting-4 ul li").eq(2).after(jQuery("#dfp__in-text")); 2631 } 2632 2633 } else if (jQuery('body').hasClass('category')) { 2634 2635 if (document.documentElement.clientWidth < 1020) { 2636 jQuery(".col-two .widget-area .postlisting-6 ul li").eq(0).after('<div id="dfp__mob-1_1">
2636<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>'); 2637 jQuery(".col-two .widget-area .postlisting-6 ul li").eq(2).after(jQuery("#dfp__mob-2").css('margin','0px 0px 30px')); 2638 jQuery(".col-two .widget-area .postlisting-6 ul li").eq(4).after('<div id="dfp__mob-2_1">
2638<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>'); 2639 jQuery(".col-two .widget-area .postlisting-6 ul li").eq(6).after('<div id="dfp__mob-2_2">
2639<script>window.dfp.displayAdslot("dfp__mob-2_2")<\/script></div>'); 2640 } else { 2641 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%')); 2642 } 2643 2644 } 2645 2646 if (adLocation == 'content' && jQuery('body').hasClass('single-post') && location.href.indexOf('testnewads=1') == -1) { 2647 2648 if (document.documentElement.clientWidth < 1020) { 2649 2650 var readMoreIndex = 0; 2651 jQuery('.article__body > p').each(function(index) { 2652 if (jQuery(this).text().trim() === 'Lue lisää:' || jQuery(this).text().trim() === 'Lue myös:') { 2653 readMoreIndex = index; 2654 return false; 2655 } 2656 }); 2657 if (dfpDebug) {console.log('readMoreIndex: ' + readMoreIndex)} 2658 var nbrOfParagraphs = jQuery('.article__body > p').length; 2659 var nbrOfContentParagraphs = readMoreIndex > 0 ? nbrOfParagraphs - (nbrOfParagraphs - readMoreIndex) : nbrOfParagraphs; 2660 var mob1AdPlace = nbrOfContentParagraphs > 10 ? 1 : nbrOfContentParagraphs > 5 ? 0 : 0; 2661 if (dfpDebug) {console.log('nop: ' + nbrOfParagraphs + ', nocp: ' + nbrOfContentParagraphs + '. m1ap: ' + mob1AdPlace)} 2662 2663 if (jQuery(".article__body > p").eq(mob1AdPlace).text().trim().slice(-1) == ">") {mob1AdPlace++} 2664 jQuery(".article__body > p").eq(mob1AdPlace).after('<div id="dfp__mob-1_1">
2664<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>'); 2665 2666 if (dfpDebug) {console.log('Content p ' + nbrOfContentParagraphs + '. mob-1 after p.eq(' + mob1AdPlace + ')')} 2667 2668 if (nbrOfContentParagraphs > 8) { 2669 2670 (function() { 2671 var t = new Date().getTime(); t -= t % (1000*60*60*24*30); 2672 var l = document.createElement('script'); l.type = 'text/javascript'; l.async = true; 2673 l.src = '//otavamedia.bbvms.com/a/hymy.js?t='+t; 2674 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(l, s); 2675 })(); 2676 2677 var bbwPlace = parseInt(nbrOfContentParagraphs/2); 2678 jQuery(".article__body > p").eq(bbwPlace).after('<div id=\"bbwvideo\"></div>'); 2679 if (dfpDebug) {console.log('BBW after p.eq(' + bbwPlace + ')')} 2680 2681 } 2682 2683 if (nbrOfContentParagraphs > 4) { 2684 jQuery(".article__body > p").eq(nbrOfContentParagraphs-2).after('<div id="dfp__mob-2_1">
2684<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>'); 2685 if (dfpDebug) {console.log('mob-2 after p.eq(' + (nbrOfContentParagraphs-2) + ')')} 2686 } 2687 2688 } else { 2689 jQuery(".article__body > p").eq(4).after('<div id="dfp__in-text_1">
2689<script>window.dfp.displayAdslot("dfp__in-text_1")<\/script></div>'); 2690 } 2691 2692 } 2693 2694 var useDelay = false; 2695 if (location.href.indexOf('usedelay') > -1) {useDelay = true} 2696 if (useDelay) { 2697 2698 if (adLocation == 'content' && document.documentElement.clientWidth < 1020) { 2699 jQuery("#dfp__mob-1, #dfp__mob-2").wrap("<div class='wrapper__mob'><div class='wrapper__mob__inner'></div></div>"); 2700 jQuery(".wrapper__mob").css({"min-height": "600px"}); 2701 jQuery(".wrapper__mob__inner").css({"position":"-webkit-sticky","position":"sticky","top":"50px"}); 2702 //console.log('adLocation: content...'); 2703 } 2704 if (document.documentElement.clientWidth >= 1020) { 2705 jQuery("#dfp__sky-scraper-1").wrap("<div class='wrapper__sky-1'></div>"); 2706 jQuery("#dfp__sky-scraper-2").wrap("<div class='wrapper__sky-2'></div>"); 2707 jQuery(".wrapper__sky-1").css({"min-height": "750px"}); 2708 jQuery(".wrapper__sky-2").css({"min-height": "1500px"}); 2709 jQuery("#dfp__sky-scraper-1, #dfp__sky-scraper-2").css({"position":"-webkit-sticky","position":"sticky","top":"50px"}); 2710 } 2711 2712 } 2713 2714 let showConsentManager = function(){__tcfapi("showConsentManager",true,function(data){console.log(data)});} 2715 jQuery('#footer a[href=#]').replaceWith('<a href="#" class="manageSettings" onclick="window.gravitoCMP.openPreferences()">Evästeasetukset</a>'); 2716 2717 //var rnd = Math.floor(Math.random() * 50); 2718 console.log('rnd: ' + rnd + ', p_rum: ' + cmpGetCookie('p_rum')) 2719 2720 //if (cmpGetCookie('p_rum') != 1 && rnd >= 40) { 2721 if (rnd >= 31) { 2722 2723 console.log('Calling Pingdom rum...'); 2724 var fpa = document.createElement('script'); fpa.type = 'text/javascript'; fpa.async = true; 2725 fpa.src = '//rum-static.pingdom.net/pa-5a3bc7dfd31eee00070000c6.js'; 2726 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(fpa, s); 2727 2728 } 2729 2730 if (window.dfp.visibility == 'desktop' || window.dfp.visibility == 'large') { 2731 jQuery("body").append('<iframe srcdoc=\"\
2731<script src=\'https:\/\/cdn.performax.cz\/acc\/loader.js?aab=loader\'\>\<\/script\>\" style=\"display: none\" data-web=\"hymy.fi\" data-hash=\"347437801fe88859caf76003d7ea5b8b\"><\/iframe>'); 2732 } 2733 2734 var dfpReady = setInterval(function() { 2735 if(window.googletag && googletag.pubadsReady && 1 == 2) { 2736 2737 jQuery(document).ready(function() { 2738 2739 var hasLueLisaa = false; 2740 var paragraphCounter = 0; 2741 //console.log('pCount: ' + jQuery('.article__body > p').length); 2742 jQuery('.article__body > p').each(function() { 2743 if (jQuery(this).text().trim() === 'Lue lisää:' || jQuery(this).text().trim() === 'Lue myös:') { 2744 hasLueLisaa = true; 2745 //jQuery(jQuery(this)).before(jQuery('#dfp__mob-2')); 2746 jQuery('.article__body > .grid--dfp-slots').append('<div style="clear: both"></div>') 2747 jQuery(jQuery(this)).before(jQuery('.article__body > .grid--dfp-slots')); 2748 //var scriptContent = jQuery('.article__body #dfp__rectangle-2').find('script').html(); 2749 //var newScriptContent = scriptContent.replace(/dfp__rectangle-2/g, 'dfp__rectangle-2_1'); 2750 //jQuery('.article__body #dfp__rectangle-2').find('script').html(newScriptContent); 2751 //jQuery('#dfp__rectangle-2').attr('id', 'dfp__rectangle-2_1'); 2752 2753 return false; 2754 } 2755 paragraphCounter++; 2756 //console.log('paragraphCounter: ' + paragraphCounter); 2757 }); 2758 2759 if (hasLueLisaa) { 2760 //console.log('bbbb: ' + (paragraphCounter-1)); 2761 var nextParagraphs = (jQuery('.article__body > p').length - (paragraphCounter-1)); 2762 //console.log('nextParagraphs: ' + nextParagraphs); 2763 //jQuery('.article__body > p').eq(paragraphCounter+9).before('<p>testi</p>'); 2764 2765 var nbrOf2ndAds = 1; 2766 for (i=0;i<=nextParagraphs-1;i++) { 2767 //jQuery('.article__body > p').eq(i).before('<p>testi</p>'); 2768 //console.log(i); 2769 jQuery('.article__body > p').eq(i+paragraphCounter).find('a[target="_blank"]').removeAttr('target'); 2770 if (document.documentElement.clientWidth < 1020) { 2771 if (i > 0 && i % 7 == 0 && nbrOf2ndAds < 3) { 2772 //console.log('Lisätään mob-2 to p(eq): ' + i); 2773 jQuery('.article__body > p').eq(i+paragraphCounter).before('<div id="dfp__mob-2_' + nbrOf2ndAds + '">
2773<script>window.dfp.displayAdslot("dfp__mob-2_' + nbrOf2ndAds + '")<\/script></div>'); 2774 if (nbrOf2ndAds == 2) { 2775 //break; 2776 } 2777 nbrOf2ndAds++; 2778 } 2779 } else { 2780 if (i > 0 && i % 12 == 0 && nbrOf2ndAds < 2) { 2781 //jQuery('.article__body > p').eq(i+paragraphCounter).before('<div id="dfp__in-text_' + nbrOf2ndAds + '">
2781<script>window.dfp.displayAdslot("dfp__in-text_' + nbrOf2ndAds + '")<\/script></div>'); 2782 jQuery('.article__body > p').eq(i+paragraphCounter).before(jQuery('#dfp__in-text')); 2783 if (nbrOf2ndAds == 1) { 2784 //break; 2785 } 2786 nbrOf2ndAds++; 2787 } 2788 } 2789 } 2790 } 2791 2792 }); 2793 clearInterval(dfpReady); 2794 2795 } else { 2796 //console.log('Checking Again if DFP ready...'); 2797 } 2798 }, 100); 2799 2800 2801 if (testSRA) { 2802 2803 const observers = new Map(); 2804 2805 function observeDFPElements() { 2806 2807 //const targets = [...document.querySelectorAll('[id^="dfp__"]:not([data-observed])')].filter(el => el.id !== 'dfp__mob-2_222' && !el.id.includes('native')); 2808 const targets = [...document.querySelectorAll('[id^="dfp__"]:not([data-observed])')].filter(el => el.id !== 'dfp__mob-2_222'); 2809 2810 targets.forEach(target => { 2811 2812 target.setAttribute('data-observed', 'true'); 2813 //const thresholdValue = parseFloat(target.getAttribute('data-threshold')) || 1; 2814 let thresholdValue = parseFloat(target.getAttribute('data-threshold')) || 0.6; 2815 if (target.getAttribute('id').includes('dfp__native')) { 2816 thresholdValue = 0.3; 2817 }; 2818 2819 let observer = observers.get(thresholdValue); 2820 if (!observer) { 2821 if (dfpDebug) console.log(`Creating new observer for threshold: ${thresholdValue}`); 2822 //const rootMargin = `0px 0px ${thresholdValue * 100}% 0px`; 2823 const rootMargin = `${thresholdValue * 100}% 0px ${thresholdValue * 100}% 0px`; 2824 2825 observer = new IntersectionObserver( 2826 (entries, obs) => { 2827 entries.forEach(entry => { 2828 if (entry.isIntersecting) { 2829 if (dfpDebug) { 2830 console.log('HAS: entry.boundingClientRect.height: ' + entry.boundingClientRect.height); 2831 console.log('HAS: calling runHeaderbid: ' + entry.target.id); 2832 let distanceFromViewportBottom = window.innerHeight - entry.boundingClientRect.top; 2833 console.log(`HAS: ${entry.target.id} is ${distanceFromViewportBottom.toFixed(0)}px from the bottom of viewport...`); 2834 } 2835 loadAdSlot(entry.target.id); 2836 obs.unobserve(entry.target); 2837 } 2838 }); 2839 }, 2840 { 2841 root: null, // relative to the viewport 2842 rootMargin: rootMargin, 2843 threshold: 0.0 // Fire as soon as it enters the margin 2844 } 2845 ); 2846 observers.set(thresholdValue, observer); 2847 } 2848 2849 observer.observe(target); 2850 if (dfpDebug) console.log('Observing element: ', target.id, 'with threshold:', thresholdValue); 2851 }); 2852 } 2853 2854 let debounceTimeout; 2855 function debouncedObserve() { 2856 clearTimeout(debounceTimeout); 2857 debounceTimeout = setTimeout(observeDFPElements, 100); 2858 } 2859 2860 2861 var dfpReady = setInterval(function() { 2862 if(window.googletag && googletag.pubadsReady) { 2863 if (dfpDebug) {console.log('DFP ready, starting observation...')} 2864 2865 observeDFPElements(); 2866 2867 const mutationObserver = new MutationObserver(debouncedObserve); 2868 mutationObserver.observe(document.body, {childList: true, subtree: true}); 2869 2870 clearInterval(dfpReady); 2871 2872 } 2873 }, 50) 2874 2875 } 2876 2877 2878 var adslotsDefined = true; 2879 2880 2881 jQuery(function () { 2882 2883 jQuery('body.single-post .article__body').append('<h3>Lue myös:</h3><ul id="latest-articles"></ul>'); 2884 2885 const FEED_URL = 'https://hymy.fi/wp-json/feeds/uutiset-uusimmat'; 2886 const MAX_POSTS = 15; 2887 2888 const FEED_KEY = 'latestArticlesFeed'; 2889 const FEED_TS_KEY = 'latestArticlesFeedTs'; 2890 const FEED_TTL = 1000 * 60 * 60; // 1 hour 2891 2892 const READ_KEY = 'latestReadPostIds'; 2893 const READ_TTL = 1000 * 60 * 60 * 24 * 7; // 7 days 2894 2895 function decodeHtmlEntities(str) { 2896 if (!str) return ''; 2897 const txt = document.createElement('textarea'); 2898 txt.innerHTML = str; 2899 return txt.value; 2900 } 2901 2902 function storageAvailable(type) { 2903 try { 2904 const storage = window[type]; 2905 const x = '__test__'; 2906 storage.setItem(x, x); 2907 storage.removeItem(x); 2908 return true; 2909 } catch (e) { 2910 return false; 2911 } 2912 } 2913 2914 function getReadPostMap() { 2915 2916 let readPostMap = {}; 2917 if (!storageAvailable('localStorage')) return readPostMap; 2918 2919 try { 2920 readPostMap = JSON.parse(localStorage.getItem(READ_KEY)) || {}; 2921 } catch (e) { 2922 return {}; 2923 } 2924 2925 const now = Date.now(); 2926 let changed = false;
2927 2928 Object.keys(readPostMap).forEach(postId => { 2929 if (now - readPostMap[postId] > READ_TTL) { 2930 delete readPostMap[postId]; 2931 changed = true; 2932 } 2933 }); 2934 2935 if (changed) { 2936 localStorage.setItem(READ_KEY, JSON.stringify(readPostMap)); 2937 } 2938 2939 return readPostMap; 2940 2941 } 2942 2943 function markPostAsRead(postId) { 2944 2945 if (!postId || !storageAvailable('localStorage')) return; 2946 2947 const readPostMap = getReadPostMap(); 2948 if (!readPostMap[postId]) { 2949 readPostMap[postId] = Date.now(); 2950 localStorage.setItem(READ_KEY, JSON.stringify(readPostMap)); 2951 } 2952 2953 } 2954 2955 function isPostRead(postId) { 2956 return !!getReadPostMap()[postId]; 2957 } 2958 2959 let currentPostId = null; 2960 if (window.dataLayer && Array.isArray(window.dataLayer)) { 2961 const pageData = window.dataLayer.find(obj => obj.PostId); 2962 if (pageData) { 2963 currentPostId = pageData.PostId; 2964 } 2965 } 2966 2967 if (currentPostId) { 2968 markPostAsRead(currentPostId); 2969 } 2970 2971 function getCachedFeed() { 2972 2973 if (!storageAvailable('sessionStorage')) return null; 2974 2975 try { 2976 2977 const feedData = sessionStorage.getItem(FEED_KEY); 2978 const ts = sessionStorage.getItem(FEED_TS_KEY); 2979 2980 if (!feedData || !ts) return null; 2981 2982 if (Date.now() - parseInt(ts, 10) > FEED_TTL) { 2983 sessionStorage.removeItem(FEED_KEY); 2984 sessionStorage.removeItem(FEED_TS_KEY); 2985 return null; 2986 } 2987 2988 return JSON.parse(feedData); 2989 2990 } catch (e) { 2991 return null; 2992 } 2993 2994 } 2995 2996 function cacheFeed(feedData) { 2997 if (!storageAvailable('sessionStorage')) return; 2998 try { 2999 sessionStorage.setItem(FEED_KEY, JSON.stringify(feedData)); 3000 sessionStorage.setItem(FEED_TS_KEY, Date.now()); 3001 } catch (e) {} 3002 } 3003 3004 function renderPostList(posts) { 3005 3006 if (!posts || !posts.length) return; 3007 3008 const $ul = jQuery('#latest-articles'); 3009 if (!$ul.length) return; 3010 3011 let postsRendered = 0; 3012 3013 posts.forEach(post => { 3014 3015 if (postsRendered >= MAX_POSTS) return; 3016 if (post.is_ad) return; 3017 if (post.ID === currentPostId) return; 3018 if (isPostRead(post.ID)) return; 3019 3020 const $link = jQuery('<a>', { 3021 href: post.url, 3022 text: decodeHtmlEntities(post.title), 3023 class: 'latest-article-link', 3024 'data-postid': post.ID 3025 }); 3026 3027 $link.on('click', function () { 3028 3029 const postId = jQuery(this).data('postid'); 3030 const targetPostId = currentPostId || 0; 3031 3032 markPostAsRead(postId); 3033 3034 const cacheBuster = Math.floor(Math.random() * 100000000); 3035 const img = new Image(); 3036 img.src = 3037 'https://digitiimi.otavamedia.fi/cc/recom/?siteid=18&typeid=1' + 3038 '&bu=' + encodeURIComponent(location.href) + 3039 '&tu=' + encodeURIComponent(post.url) + 3040 '&cb=' + cacheBuster + 3041 '&pid=' + postId + 3042 '&tpid=' + targetPostId; 3043 }); 3044 3045 const $li = jQuery('<li>').append($link); 3046 $ul.append($li); 3047 3048 postsRendered++; 3049 }); 3050 } 3051 3052 function init(feedData) { 3053 3054 if (!feedData || !feedData.posts || !feedData.posts.length) return; 3055 3056 const posts = feedData.posts.slice().reverse(); 3057 renderPostList(posts); 3058 3059 } 3060 3061 const cachedFeed = getCachedFeed(); 3062 3063 if (cachedFeed) { 3064 init(cachedFeed); 3065 } else { 3066 jQuery.getJSON(FEED_URL) 3067 .done(function (feedData) { 3068 cacheFeed(feedData); 3069 init(feedData); 3070 }); 3071 } 3072 3073 }); 3074 3075</script>
3075 3076
3077<script> 3078 3079 if (document.location.href.indexOf("anchorad=1") > -1) { 3080 3081 //loadAds(); 3082 //console.log("load_test"); // This should be called when all <div data-ad-unit="??"> elements exists in DOM 3083 3084 var adTestParam = 'anchorad=1'; 3085 $("body a").each(function() { 3086 var hrefSrc = $(this).attr('href'); 3087 if (hrefSrc != null) { 3088 if (hrefSrc.indexOf("jpg") < 0 && hrefSrc.indexOf("gif") < 0 && hrefSrc.indexOf("png") < 0 && hrefSrc.indexOf("javascript") < 0 && hrefSrc.indexOf("debug=1") < 0) { 3089 if (hrefSrc.indexOf("?") < 0) { 3090 var ahreffi = hrefSrc + '?' + adTestParam; 3091 } else { 3092 var ahreffi = hrefSrc + '&' + adTestParam; 3093 } 3094 $(this).attr('href',ahreffi); 3095 } 3096 } 3097 }); 3098 3099 } 3100 3101</script>
3101 3102 3103<style> 3104 3105 .latest-article-link { 3106 font-size: 15px; 3107 } 3108 ul#latest-articles { 3109 list-style-type: none; 3110 margin: 0; 3111 padding-top: 10px; 3112 } 3113 ul#latest-articles li { 3114 margin-bottom: 5px; 3115 } 3116 ul#latest-articles li:nth-Child(5n+0) { 3117 margin-bottom: 20px; 3118 } 3119 @media screen and (max-width: 768px) { 3120 .latest-article-link { 3121 font-size: 18px; 3122 } 3123 ul#latest-articles li { 3124 margin-bottom: 10px; 3125 } 3126 ul#latest-articles li:nth-Child(5n+0) { 3127 margin-bottom: 30px; 3128 } 3129 } 3130 3131 #verkkopalvelut .footer__services, 3132 #verkkopalvelut #palvelut { 3133 display: none; 3134 } 3135 3136 #verkkopalvelut .om-logo, 3137 #verkkopalvelut .footer__logo { 3138 margin: 0 auto; 3139 display: block; 3140 float: none; 3141 max-width:100px; 3142 } 3143 3144 #verkkopalvelut .footer__logo img { 3145 width: 100%; 3146 max-width:100px; 3147 margin: 0 auto; 3148 display:block; 3149 } 3150 3151 #verkkopalvelut .om-logo, 3152 #verkkopalvelut { 3153 padding-bottom:0; 3154 padding-top:0; 3155 padding-left:0; 3156 padding-right:0; 3157 } 3158 3159 #verkkopalvelut .verkkopalvelut-inner { 3160 padding: 30px 0; 3161 } 3162 3163 .bb-float-close-button { 3164 top: -32px !important; 3165 padding: 7px 5px !important; 3166 font-size: 26px !important; 3167 } 3168 .bb_wrapper:has(.bb-float-close-button[style*="display: block"]), .bb_wrapper:has(.bb-float-close-button:not([style*=display])) { 3169 right: 8px !important; 3170 bottom: 8px !important; 3171 } 3172 @media screen and (min-width: 880px) { 3173 .bb_wrapper:has(.bb-float-close-button[style*="display: block"]), .bb_wrapper:has(.bb-float-close-button:not([style*=display])) { 3174 right: 20px !important; 3175 bottom: 15px !important; 3176 } 3177 } 3178 #dfp__interstitial_1 { 3179 position: fixed; 3180 z-index: 1000000; 3181 width: 1px; 3182 height: 1px; 3183 margin: 0px; 3184 padding: 0px; 3185 left: 0px; 3186 top: 0px; 3187 } 3188 3189</style> 3190 3191<!-- Body end tag end, do not remove --></body> 3192</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.