PageSourceSearch

https://www.soundi.fi/wp-content/themes/popmedia-core/assets/js/gravito-new.js?ver=1787296731

js soundi.fi collected 2026-10-02 05:50:11 UTC 12,468 bytes, 359 lines download raw bytes

1/*
2 * Gravito CMP configuration and bootstrap.
3 *
4 * LOADED WITH async FROM header.php. Two consequences, both load-bearing:
5 *
6 * 1. This file may execute BEFORE <body> exists. Append the SDK tag to
7 *    document.head, never document.body — appending to a null body throws,
8 *    and a throw here means no consent signal, which means GAM renders no ads
9 *    at all, on every page. There is no visual warning; the ads are simply
10 *    absent.
11 *
12 * 2. Per-site branding arrives via window.popmediaCmp, set by an inline script
13 *    earlier in <head>. Inline scripts run during parse, so it is always
14 *    defined by the time this runs. The fallbacks below still apply if it is
15 *    missing, so the dialog degrades rather than breaking.
16 *
17 * Before 21 Aug 2026 the logo URL and colours were hardcoded to como.fi here,
18 * in a file that ships with the parent — so all eight publications showed
19 * como's logo, fetched cross-domain, in como's colours.
20 */
21var pmCmp = window.popmediaCmp || {};
22
23    window.gravito = {};
24      // add config object to gravito
25      window.gravito.config = {
26  "cmp": {
27    "settings": {
28      "useTopDomain": true,
29      "catchCMPEvents": true,
30      "syncAfter": 1800,
31      "sdkVersion": 6,
32      "version": "latest"
33    },
34    "styles": {
35      "logoUrl": pmCmp.logoUrl || "https://www.popmedia.fi/popmedia-logo.png",
36      "logoAltText": pmCmp.logoAltText || "Pop Media",
37      "allowBackgroundScroll": false,
38      "isLayeredLayout": true,
39      "primaryColor": pmCmp.primaryColor || "#CC006A",
40      "secondaryColor": pmCmp.secondaryColor || "#666666",
41      "headerColor": "#ffffff",
42      "footerColor": "#e6e6e6",
43      "fonts": []
44    },
45    "tcf": {
46      "core": {
47        "languageCode": "fi",
48        "publisherCountryCode": "FI",
49        "purposeOneTreatment": false,
50        "hideLegitimateInterest": false,
51        "legitimateInterestDefaultBehavaior": true,
52        "purposes": [
53          {
54            "type": "purposes",
55            "id": 1
56          },
57          {
58            "type": "stacks",
59            "id": 26
60          },
61          {
62            "type": "purposes",
63            "id": 10
64          }
65        ],
66        "specialPurposes": [
67          1,
68          2
69        ],
70        "necessaryLegitimatePurposes": [],
71        "vendors": [
72          1,
73          8,
74          10,
75          11,
76          12,
77          15,
78          16,
79          21,
80          25,
81          30,
82          32,
83          39,
84          40,
85          45,
86          50,
87          52,
88          57,
89          62,
90          63,
91          68,
92          69,
93          70,
94          76,
95          82,
96          84,
97          91,
98          93,
99          97,
100          98,
101          102,
102          111,
103          115,
104          122,
105          126,
106          128,
107          129,
108          130,
109          131,
110          132,
111          133,
112          134,
113          140,
114          154,
115          165,
116          190,
117          209,
118          213,
119          217,
120          226,
121          238,
122          241,
123          253,
124          264,
125          276,
126          278,
127          285,
128          290,
129          315,
130          358,
131          373,
132          385,
133          387,
134          394,
135          412,
136          415,
137          434,
138          493,
139          502,
140          565,
141          580,
142          597,
143          610,
144          612,
145          667,
146          684,
147          707,
148          729,
149          755,
150          772,
151          793,
152          812,
153          851,
154          1029,
155          1242,
156          160,
157          1100,
158          1126,
159          1234,
160          77,
161          78,
162          95,
163          126,
164          156,
165          273,
166          275,
167          278,
168          422,
169          517,
170          922
171        ],
172        "necessaryVendors": [],
173        "features": [
174          1,
175          2,
176          3
177        ],
178        "specialFeatures": [
179          1,
180          2
181        ],
182        "useACM": true,
183        "googleVendors": [],
184        "useGCM": true,
185        "useAdvanceGCM": true,
186        "adsConsentId": [
187          1
188        ],
189        "adsUserDataConsentId": [
190          1,
191          7
192        ],
193        "adsPersonalizationConsentId": [
194          3,
195          4
196        ],
197        "analyticsConsentId": [
198          7,
199          9,
200          10
201        ],
202        "functionalityStorageConsentId": [
203          10
204        ],
205        "functionalityStorageId": false,
206        "personalizationStorageConsentId": [
207          1,
208          4
209        ],
210        "personalizationStorageId": false,
211        "securityStorageConsentId": [
212          9
213        ],
214        "securityStorageId": true,
215        "useUET": false,
216        "nonTCFVendors": [],
217        "customPurposes": [],
218        "publisherRestrictions": [
219          {
220            "purposeID": 1,
221            "restrictionType": "REQUIRE_CONSENT",
222            "vendors": [
223              6,
224              12
225            ]
226          },
227          {
228            "purposeID": 1,
229            "restrictionType": "REQUIRE_CONSENT",
230            "vendors": [
231              8
232            ]
233          },
234          {
235            "purposeID": 2,
236            "restrictionType": "REQUIRE_CONSENT",
237            "vendors": [
238              8
239            ]
240          }
241        ],
242        "cookieName": "TcString",
243        "cookieExpiry": 365,
244        "rejectAllCookieExpiry": 365,
245        "version": 9,
246        "googleTcfId": 755
247      },
248      "languages": {
249        "fi": {
250          "label": "Suomi",
251          "nonTCFVendors": [],
252          "customPurposes": [],
253          "text": {
254            "declaration": {
255              "header": "Arvostamme yksityisyyttäsi",
256              "title": "Tarvitsemme suostumuksesi tarjotaksemme henkilökohtaisen käyttökokemuksen",
257              "introductionText": "Me ja huolellisesti valitsemamme <span id='partners-link'>{VendorsCount} teknologiakumppania</span> hyödynnämme henkilötietoja tarjotaksemme paremman käyttäjäkokemuksen sekä kohdentaaksemme sisältöä j
257a mainoksia.",
258              "consentableItemDescription": "Hyväksymällä suostut tietojesi käyttöön seuraavasti",
259              "legalFooter": "Käytämme laitetunnisteita ja tallennamme evästeitä laitteellesi saadaksemme tietoja esimerkiksi sivuista, joilla vierailit, IP-osoitteestasi sekä laitteesi ominaisuuksista. Pääset tutustumaan yksityiskohtaisesti käyttötarkoituksiin ja teknologiakumppaneihimme seuraavalla välilehdellä. Hylkääminen voi vaikuttaa sivuston toimivuuteen ja käytettävyyteen.<br/><br/>Jotkin teknologiamme voivat käsitellä tietoja myös ilman suostumusta, jos niillä on siihen oikeutettu peruste. Voit vastustaa tätä tai muuttaa asetuksiasi milloin tahansa seuraavalla välilehdellä."
260            },
261            "details": {
262              "header": "Valintasi",
263              "title": "Suostumusasetukset",
264              "introductionText": "Tässä alla voit tehdä yksityiskohtaisia valintojasi ja myös vastustaa tietojen käsittelyn oikeutettua perustetta, jos katsot sen aiheettomaksi. Pääset muuttamaan valintojasi millon tahansa linkistä sivujemme alaosassa.",
265              "purposesTabDescription": "Tässä pääset tutustumaan yksityiskohtaisesti, mihin käyttötarkoituksiin tietojasi hyödynnämme ja millaisia ominaisuuksia ne mahdollistavat.",
266              "vendorsTabDescription": "Sisällön ja mainosten kohdentamiseksi paremmin, nämä {VendorsCount} teknologiakumppaniamme tallentavat ja/tai käyttävät tietoja laitteellasi seuraavasti. Käytämme myös Googlen palveluita. Lue lisää siitä, miten Google käsittelee henkilökohtaisia tietojasi <a class='gravitoCMP-TCFCMP-link' href='https://business.safety.google/intl/fi/privacy/' target='_blank'>Google käsittelee henkilökohtaisia tietojasi.</a>",
267              "copyTCstringTooltip": "Napsauta tästä kopioidaksesi TC-merkkijonon leikepöydälle"
268            },
269            "commonTerms": {
270              "acceptAll": "Hyväksyn kaikki",
271              "save": "Hyväksyn valitsemani",
272              "rejectAll": "Vain välttämättömät",
273              "settings": "Omat valintani",
274              "privacyPolicyLabel": "Tietosuojakäytäntömme",
275              "consent": "Suostumus",
276              "purposeAndCharacteristics": "Käyttötarkoitukset ja ominaisuudet",
277              "specialPurposes": "Erityiset käyttötarkoitukset",
278              "specialFeatures": "Erityiset ominaisuudet",
279              "features": "Ominaisuudet",
280              "nonTCFVendors": "Teknologiakumppanimme TCF:n ulkopuolelta",
281              "vendors": "Teknologiakumppanimme",
282              "vendorsTabHeader": "Teknologiakumppanimme",
283              "purposes": "Käyttötarkoitukset",
284              "legitimateInterest": "Oikeutettu etu",
285              "customPurposes": "Mukautetut tarkoitukset",
286              "cookieMaxAge": "Evästeen enimmäisikä (sekunnit)",
287              "disclouserDetails": "Yksityiskohdat",
288              "disclouserFetchingError": "JSON-tietojen hakeminen epäonnistui",
289              "disclouserHeaderIdentifier": "Tunniste",
290              "disclouserHeaderDomain": "Verkkotunnus",
291              "disclouserHeaderType": "Tyyppi",
292              "disclosureHeaderMaxAge": "Enimmäisikä",
293              "disclosureHeaderPurpose": "Käyttötarkoitukset",
294              "cookieRefresh": "Evästeen päivitys",
295              "usesCookies": "Käyttää evästeitä",
296              "usesNonCookieAccess": "Käyttää evästeetöntä ratkaisua",
297              "yes": "Kyllä",
298              "no": "Ei",
299              "seconds": "sekuntia",
300              "days": "päivää",
301              "alertMessageForCopiedTcString": "CMP-asetukset kopioitu",
302              "purposeIllustration": "Esimerkki",
303              "legitVendorCount": "Oikeutetun edun myyjät",
304              "consentVendorCount": "Suostumusmyyjät",
305              "stdRetention": "Vakiotallennus",
306              "dataDeclaration": "Ilmoitus tietojen käyttämisestä",
307              "vendorCountDeclarationText": "{VendorsCount} myyjää voi käyttää tätä",
308              "legIntClaim": "Oikeutettu vaatimus",
309              "dataDeclarationNameHeader": "Nimi",
310              "dataDeclarationIdHeader": "Tunnus",
311              "dataDeclarationDescriptionHeader": "Kuvaus",
312              "retention": "Säilytysaika",
313              "googleVendors": "Googlen myyjät",
314              "cancel": "Peruuta",
315              "confirm": "Vahvista",
316              "privacyPolicyUrl": "https://www.popmedia.fi/tietosuojaseloste/"
317            }
318          }
319        }
320      },
321      "style": {
322        "hideContentOnFirstLayer": true,
323        "consentInputType": "checkbox",
324        "customCSS": "@font-face {\r\n    font-family: 'Open Sans';\r\n    font-weight: 300;\r\n    src: local('Helvetica Neue'), local('Arial'), local('sans-serif');\r\n}\r\n@font-face {\r\n    font-family: 'Open Sans';\r\n    font-weight: 700;\r\n    src: local('Arial Bold'), local('Helvetica Neue Bold'), local('sans-serif');\r\n}\r\n.gravitoCMP-logo {\r\n    width: 174px;\r\n}\r\n\r\n#gravitoTCFCMP-layer1-reject-all,\r\n.gravitoCMP-footer-logo {\r\n    display: none;\r\n}\r\n\r\n#gravitoTCFCMP-layer1-settings{\r\n    display: block !important;\r\n}"
325      }
326    }
327  }
328};
329  
330var gravitoSDKTag = document.createElement("script");
331gravitoSDKTag.src = "https://cdn.gravito.net/sdk/v6/latest/sdk.js";
332gravitoSDKTag.onload = function () {
333  /*
334   * init() MUST NOT RUN BEFORE <body> EXISTS.
335   *
336   * The SDK appends its consent dialog to document.body. This file is loaded
337   * async from <head>, so onload can fire while the body is still null, and
338   * the SDK then throws:
339   *
340   *     Uncaught TypeError: Cannot read properties of null (reading 'append')
341   *
342   * That kills the CMP, so consent never resolves, so the ad stack is never
343   * released — which surfaced as "no prebid found" on page after page.
344   * Niklas hit it on como.local, 21 Aug 2026.
345   *
346   * Gating on DOM readiness keeps the whole point of async: the SDK still
347   * DOWNLOADS in parallel with the HTML parse, which is the expensive part
348   * and the reason for moving off defer. Only the init call waits, and by
349   * then the file is usually already in cache.
350   */
351  if (document.readyState === 'loading') {
352    document.addEventListener('DOMContentLoaded', function () {
353      window.gravito.init();
354    });
355  } else {
356    window.gravito.init();
357  }
358};
359document.head.appendChild(gravitoSDKTag);

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.