PageSourceSearch

https://192tv.tv/scripts.js

js 192tv.tv collected 2026-10-07 21:52:09 UTC 52,875 bytes, 1,581 lines download raw bytes

1const storage = {
2  language: "nl",
3  channelsInterval: null,
4};
5
6let converter;
7
8window.addEventListener(
9  "load",
10  function () {
11    converter = new showdown.Converter();
12
13    if (window.location.href.split("?lang=").length > 1) {
14      let lang = window.location.href.split("?lang=")[1];
15
16      setLanguage(lang);
17    } else if (window.location.href.split("&lang=").length > 1) {
18      let lang = window.location.href.split("&lang=")[1];
19
20      setLanguage(lang);
21    } else {
22      setLanguage("nl");
23    }
24  },
25  false
26);
27
28function markDown(str) {
29  if (str == null) {
30    return "";
31  }
32
33  let newStr = converter.makeHtml(str);
34  newStr = newStr.replace(/(?:\r\n|\r|\n)/g, "<br /><br />");
35  newStr = newStr.replace(/(<p[^>]+?>|<p>|<\/p>)/gim, "");
36  return newStr;
37}
38
39function setLanguage(code) {
40  storage.language = code;
41  document.querySelector(".top-language.is-active").classList.remove("is-active");
42  document.getElementById("top-language-" + code).classList.add("is-active");
43
44  document.querySelector("body").classList = "";
45
46  document.querySelector("body").classList.add("language-" + code);
47
48  if (window.location.href.indexOf("/article") == -1) {
49    if (storage.language == "nl") {
50      document.querySelector(".topbar-cta").innerHTML = "Inloggen";
51    }
52    if (storage.language == "en") {
53      document.querySelector(".topbar-cta").innerHTML = "Sign in";
54    }
55    if (storage.language == "fr") {
56      document.querySelector(".topbar-cta").innerHTML = "Connecter";
57    }
58    if (storage.language == "de") {
59      document.querySelector(".topbar-cta").innerHTML = "Einloggen";
60    }
61
62    insertHeader();
63    insertAbout();
64    buildGuides();
65    insertNowlater();
66    insertChannels();
67    insertWebapp();
68    insertSubscriptions();
69    insertFaq();
70    insertNews();
71
72    initChannelsSlider();
73  }
74
75  if (window.location.href.indexOf("/article") != -1) {
76    getArticle();
77
78    var xhr = new XMLHttpRequest();
79
80    xhr.open("GET", "https://cms.192tv.tv/api/news-letter?locale=" + storage.language, true);
81
82    xhr.setRequestHeader("Content-Type", "application/json");
83
84    xhr.onreadystatechange = function () {
85      if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
86        let res = JSON.parse(this.responseText);
87
88        if (res.data.attributes.Active) {
89          document.querySelector("#section-newsletter").classList.remove("is-hidden");
90
91          document.querySelector("#section-newsletter .section-header-placeholder").innerHTML =
92            `
93                    <div class="section-header">
94                        <h3 class="section-header-title">` +
95            res.data.attributes.Title +
96            `</h3>
97                        <h4 class="section-header-subtitle">` +
98            res.data.attributes.Subtitle +
99            `</h4>
100                    </div>
101                    `;
102
103          document.querySelector(".newsletter-input-btn").value = res.data.attributes.ButtonText;
104
105          document.querySelector(".newsletter-input").placeholder = res.data.attributes.Placeholder;
106        } else {
107          document.querySelector("#section-newsletter").classList.add("is-hidden");
108        }
109      }
110    };
111
112    xhr.send();
113  }
114
115  insertTopbar();
116  insertNewsletter();
117  insertFooter();
118  insertBottombar();
119}
120
121function insertHeader() {
122  var xhr = new XMLHttpRequest();
123
124  xhr.open("GET", "https://cms.192tv.tv/api/header?populate[Header][populate]=%2A&locale=" + storage.language, true);
125
126  xhr.setRequestHeader("Content-Type", "application/json");
127
128  xhr.onreadystatechange = function () {
129    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
130      let res = JSON.parse(this.responseText);
131
132      document.querySelector(".header-slides").innerHTML = "";
133
134      res.data.attributes.Header.forEach((item) => {
135        document.querySelector(".header-slides").innerHTML +=
136          `
137                <div class="header-slide" style="background-image: url(https://cms.192tv.tv` +
138          item.Background.data.attributes.url +
139          `)">
140                    <div class="header-slide-info">
141                        <h2 class="header-slide-title is-white  ` +
142          (item.Title == null ? "is-hidden" : "") +
143          `">` +
144          item.Title +
145          `</h2>
146                        <h4 class="header-slide-subtitle ` +
147          (item.Subtitle == null ? "is-hidden" : "") +
148          `">` +
149          item.Subtitle +
150          `</h4>
151                    </div> 
152                </div>
153                `;
154      });
155    }
156  };
157
158  xhr.send();
159}
160
161function insertAbout() {
162  let menu = document.querySelector(".about-menu");
163  let content = document.querySelector(".about-content");
164
165  menu.innerHTML = "";
166  content.innerHTML = "";
167
168  let index = 0;
169
170  var xhr = new XMLHttpRequest();
171
172  xhr.open("GET", "https://cms.192tv.tv/api/about-192-tv?populate=%2A&locale=" + storage.language, true);
173
174  xhr.setRequestHeader("Content-Type", "application/json");
175
176  xhr.onreadystatechange = function () {
177    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
178      let res = JSON.parse(this.responseText);
179
180      if (res.data.attributes.Active) {
181        document.querySelector("#section-about").classList.remove("is-hidden");
182
183        document.querySelector("#topbar-nav-about").classList.remove("is-hidden");
184
185        document.querySelector("#section-about .section-header-placeholder").innerHTML =
186          `
187                <div class="section-header">
188                    <h3 class="section-header-title">` +
189          res.data.attributes.Title +
190          `</h3>
191                    <h4 class="section-header-subtitle">` +
192          res.data.attributes.Subtitle +
193          `</h4>
194                </div>
195                `;
196
197        res.data.attributes.Category.forEach((item) => {
198          menu.innerHTML +=
199            `
200                    <h5 data-index="` +
201            index +
202            `" class="about-menu-nav" onclick="navAbout(` +
203            index +
204            `)">` +
205            item.Title +
206            `</h5>
207                    `;
208
209          content.innerHTML +=
210            `
211                    <div data-index="` +
212            index +
213            `" class="about-content-item">
214                        <h4 class="about-content-title">` +
215            item.Title +
216            `</h4>
217                        <p class="about-content-text">` +
218            markDown(item.Content) +
219            `</p>
220                    </div>
221                    `;
222
223          index++;
224        });
225
226        document.querySelectorAll(".about-menu-nav")[0].classList.add("is-active");
227        document.querySelectorAll(".about-content-item")[0].classList.add("is-active");
228      } else {
229        document.querySelector("#section-about").classList.add("is-hidden");
230        document.querySelector("#topbar-nav-about").classList.add("is-hidden");
231      }
232    }
233  };
234
235  xhr.send();
236}
237
238function getAsIsoString(date) {
239  let tmp = new Date(date);
240  tmp = tmp.getTime();
241  const tmpFinal = new Date(tmp * 60 * 1000);
242  return tmpFinal.toISOString().split(".")[0];
243}
244
245async function buildGuides() {
246  document.querySelector(".guide-dates-entries").innerHTML = "";
247  var items = [];
248
249  for (let i = -3; i < 4; i++) {
250    var d = new Date();
251    var newD = new Date(d.setDate(d.getDate() + i)).toISOString().split("T")[0];
252    await insertGuides(newD).then(function (res) {
253      items.push(...res);
254    });
255  }
256  insertGuide(items);
257}
258
259function insertGuides(date) {
260  return new Promise(function (resolve, reject) {
261    var xhr = new XMLHttpRequest();
262
263    xhr.open("GET", `https://api.192tv.tv/api/v1/epg/channel/65035/?startDate=${date}`, true);
264
265    xhr.setRequestHeader("Content-Type", "application/json-patch+json");
266
267    xhr.onreadystatechange = function () {
268      if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
269        let guideItems = JSON.parse(this.responseText).data.data;
270        resolve(guideItems);
271      }
272    };
273
274    xhr.send();
275  });
276}
277function insertGuide(guideItems) {
278  let dates = [];
279
280  let html = ``;
281
282  guideItems.forEach((item) => {
283    html +=
284      `
285                <div class="guide-slider-item" style="background-image: url('` +
286      item.largeFrontCover +
287      `')" data-date="` +
288      item.startDate.substr(0, 10) +
289      `" data-time="` +
290      item.startDate.substr(11, 5) +
291      `">
292                <div class="guide-slider-item-time">` +
293      item.startDate.substr(11, 5) +
294      `</div>
295                </div>
296                `;
297
298    if (dates.filter((date) => date == item.startDate.substr(0, 10)).length == 0) {
299      dates.push(item.startDate.substr(0, 10));
300    }
301  });
302
303  if (document.querySelector(".guide-slider-container").innerHTML == "") {
304    document.querySelector(".guide-slider-container").innerHTML = html;
305  }
306
307  let date = new Date();
308  let y = date.getFullYear();
309  let m = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
310  let d = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
311
312  let i = dates.findIndex((date) => date == y + "-" + m + "-" + d);
313
314  for (let i2 = 0; i2 < dates.length; i2++) {
315    let name = dates[i2];
316    let day = date.getDay();
317    let days = ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag"];
318
319    if (storage.language == "en") {
320      days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
321    }
322
323    if (storage.language == "fr") {
324      days = ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"];
325    }
326
327    if (storage.language == "de") {
328      days = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"];
329    }
330
331    if (i2 == i && storage.language == "nl") {
332      name = "Vandaag";
333    } else if (i2 == i && storage.language == "en") {
334      name = "Today";
335    } else if (i2 == i && storage.language == "fr") {
336      name = `Aujourd'hui`;
337    } else if (i2 == i && storage.language == "de") {
338      name = "Heute";
339    } else if (i2 == i + 1 && storage.language == "nl") {
340      name = "Morgen";
341    } else if (i2 == i + 1 && storage.language == "en") {
342      name = "Tomorrow";
343    } else if (i2 == i + 1 && storage.language == "fr") {
344      name = "Demain";
345    } else if (i2 == i + 1 && storage.language == "de") {
346      name = "Morgen";
347    } else if (i2 == i - 1 && storage.language == "nl") {
348      name = "Gisteren";
349    } else if (i2 == i - 1 && storage.language == "en") {
350      name = "Yesterday";
351    } else if (i2 == i - 1 && storage.language == "fr") {
352      name = "Hier";
353    } else if (i2 == i - 1 && storage.language == "de") {
354      name = "Gestern";
355    } else if (i2 == i + 2) {
356      name = days[day + 2];
357    } else if (i2 == i + 3) {
358      name = days[day + 3];
359    } else if (i2 == i + 4) {
360      name = days[day + 4];
361    } else if (i2 == i + 5) {
362      name = days[day + 5];
363    } else {
364    }
365
366    document.querySelector(".guide-dates-entries").innerHTML +=
367      `
368                <h5 class="guide-date" data-date="` +
369      dates[i2] +
370      `">` +
371      name +
372      `</h5>
373                `;
374  }
375
376  document.querySelectorAll(".guide-date")[i].classList.add("is-active");
377
378  guideScrollDate(y + "-" + m + "-" + d);
379
380  var xhr2 = new XMLHttpRequest();
381
382  xhr2.open("GET", "https://cms.192tv.tv/api/guide?populate=%2A&locale=" + storage.language, true);
383
384  xhr2.setRequestHeader("Content-Type", "application/json");
385
386  xhr2.onreadystatechange = function () {
387    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
388      let res = JSON.parse(this.responseText);
389
390      if (res.data.attributes.Active) {
391        document.querySelector("#section-guide").classList.remove("is-hidden");
392
393        document.querySelector("#topbar-nav-guide").classList.remove("is-hidden");
394
395        document.querySelector("#section-guide .section-header-placeholder").innerHTML =
396          `
397                <div class="section-header">
398                    <h3 class="section-header-title">` +
399          res.data.attributes.Title +
400          `</h3>
401                    <h4 class="section-header-subtitle">` +
402          res.data.attributes.Subtitle +
403          `</h4>
404                </div>
405                `;
406      } else {
407        document.querySelector("#section-guide").innerHTML = "";
408
409        document.querySelector("#section-guide").classList.add("is-hidden");
410        document.querySelector("#topbar-nav-guide").classList.add("is-hidden");
411      }
412    }
413  };
414
415  xhr2.send();
416}
417
418function insertNowlater() {
419  var xhr = new XMLHttpRequest();
420
421  xhr.open("GET", "https://apiservic.es/api.svc/epg/tv/nownextlater", true);
422
423  xhr.setRequestHeader("Content-Type", "application/json");
424  xhr.setRequestHeader(
425    "x-auth-bearer",
426    "JWT eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ.U5KGh47fcxUzQK62jfRyKqXQvZo4j_GODkfVQU65KHuYTPG_eIikEVz0t6dv7xbYKxmi6im4tnxrzJ-ZSbhouMt5NU1d3oej9RRFddINIbZy8JbKq6xf_efhnrZFPa3D4WSqnxx1-J4vOgxB0-2fNcpehaW0QhUga7J1qmtfRbDq4iuJHXKB923mK0FHGH4c39AyXiCz7dELUNBR0-FIVBdArjsa9YVmw4V1JtfMI2rAx7MsG-PLEdn7ZHz4vU5L-yBbmOm-5Zn5vXpYaaxgS7yflSe_zUYESLEE4ycyKXZHwZt41o7aNgm9vq8NhjmCbD8bg20zllzN2MbVgHs3dw.9h7P8zt973Qb8g-E.VliZP4oCGEyVt13S3YWvCo3qHPx-FPZxYnAI-mheuOIGZBHwx8U0Fe0RFrCbfEbZCpuTGYDB51oheYwp_amaVUwXhC_D.TIx2OtDvUWp-MmFK9rDhKw"
427  );
428
429  xhr.onreadystatechange = function () {
430    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
431      let res = JSON.parse(this.responseText);
432
433      document.querySelector("#now-item .now-item-image").style.backgroundImage =
434        `url(` + (res.MetaData.Now.SmallArtwork != "" ? res.MetaData.Now.SmallArtwork : res.MetaData.Now.Screenshots.length > 0 ? res.MetaData.Now.Screenshots[0] : "") + `)`;
435      document.querySelector("#now-item .now-item-title").innerHTML = res.MetaData.Now.Title;
436      document.querySelector("#now-item .now-item-artist").innerHTML = res.MetaData.Now.MovieFields.filter((mf) => mf.Key == "Artist")[0].Value;
437
438      for (let i = 0; i < res.MetaData.Later.length; i++) {
439        let id = i + 1;
440
441        document.querySelector("#later-item-" + id + " .later-item-image").style.backgroundImage =
442          `url(` + (res.MetaData.Later[i].SmallArtwork != "" ? res.MetaData.Later[i].SmallArtwork : res.MetaData.Later[i].Screenshots.length > 0 ? res.MetaData.Later[i].Screenshots[0] : "") + `)`;
443        document.querySelector("#later-item-" + id + " .later-item-title").innerHTML = res.MetaData.Later[i].Title;
444        document.querySelector("#later-item-" + id + " .later-item-artist").innerHTML = res.MetaData.Later[i].MovieFields.filter((mf) => mf.Key == "Artist")[0].Value;
445      }
446    }
447  };
448
449  xhr.send();
450
451  var xhr2 = new XMLHttpRequest();
452
453  xhr2.open("GET", "https://cms.192tv.tv/api/now-next-later?populate=%2A&locale=" + storage.language, true);
454
455  xhr2.setRequestHeader("Content-Type", "application/json");
456
457  xhr2.onreadystatechange = function () {
458    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
459      let res = JSON.parse(this.responseText);
460
461      if (res.data.attributes.Active) {
462        document.querySelector("#section-nowlater").classList.remove("is-hidden");
463
464        document.querySelector(".now h3").innerHTML = res.data.attributes.Now;
465        document.querySelector(".later h3").innerHTML = res.data.attributes.Later;
466      } else {
467        document.querySelector("#section-nowlater").classList.add("is-hidden");
468      }
469    }
470  };
471
472  xhr2.send();
473}
474
475function insertChannels() {
476  document.querySelector("#section-channels .channels-container").innerHTML = "";
477
478  var xhr = new XMLHttpRequest();
479
480  xhr.open("GET", "https://cms.192tv.tv/api/channels?populate[Providers][populate]=%2A&locale=" + storage.language, true);
481
482  xhr.setRequestHeader("Content-Type", "application/json");
483
484  xhr.onreadystatechange = function () {
485    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
486      let channelTranslation = "";
487
488      if (storage.language == "nl") {
489        channelTranslation = "Kanaal";
490      }
491      if (storage.language == "en") {
492        channelTranslation = "Channel";
493      }
494      if (storage.language == "fr") {
495        channelTranslation = "Canal";
496      }
497      if (storage.language == "de") {
498        channelTranslation = "Kanal";
499      }
500
501      let res = JSON.parse(this.responseText);
502
503      if (res.data.attributes.Active) {
504        document.querySelector("#section-channels").classList.remove("is-hidden");
505
506        document.querySelector("#topbar-nav-channels").classList.remove("is-hidden");
507
508        document.querySelector("#section-channels .section-header-placeholder").innerHTML =
509          `
510                <div class="section-header">
511                    <h3 class="section-header-title">` +
512          res.data.attributes.Title +
513          `</h3>
514                    <h4 class="section-header-subtitle">` +
515          res.data.attributes.Subtitle +
516          `</h4>
517                </div>
518                `;
519
520        res.data.attributes.Providers.forEach((item) => {
521          document.querySelector("#section-channels .channels-container").innerHTML +=
522            `
523                    <a target="_blank" class="channel" href="` +
524            item.Url +
525            `">
526                        <div class="channel-image" style="background-image: url('https://cms.192tv.tv` +
527            item.ProviderLogo.data.attributes.url +
528            `')"></div>
529                        <h4 class="channel-number">` +
530            channelTranslation +
531            ` ` +
532            item.ChannelPosition +
533            `</h4>
534                    </a>
535                    `;
536        });
537      } else {
538        document.querySelector("#section-channels").classList.add("is-hidden");
539        document.querySelector("#topbar-nav-channels").classList.add("is-hidden");
540      }
541    }
542  };
543
544  xhr.send();
545}
546
547function insertWebapp() {
548  var xhr = new XMLHttpRequest();
549
550  xhr.open("GET", "https://cms.192tv.tv/api/ott-xperience?populate[0]=Background&populate[1]=Lines&locale=" + storage.language, true);
551
552  xhr.setRequestHeader("Content-Type", "application/json");
553
554  xhr.onreadystatechange = function () {
555    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
556      let res = JSON.parse(this.responseText);
557
558      if (res.data.attributes.Active) {
559        document.querySelector("#section-webapp").classList.remove("is-hidden");
560
561        document.querySelector("#topbar-nav-webapp").classList.remove("is-hidden");
562
563        document.querySelector("#section-webapp").style.backgroundImage = `url('https://cms.192tv.tv` + res.data.attributes.Backgroun
563d.data.attributes.url + `')`;
564
565        document.querySelector("#section-webapp .section-header-placeholder").innerHTML =
566          `
567                <div class="section-header">
568                    <h3 class="section-header-title">` +
569          res.data.attributes.Title +
570          `</h3>
571                    <h4 class="section-header-subtitle">` +
572          res.data.attributes.Subtitle +
573          `</h4>
574                </div>
575                `;
576
577        document.querySelector(".webapp-cta").innerHTML = res.data.attributes.ButtonText;
578
579        document.querySelector(".webapp-entries").innerHTML = "";
580
581        res.data.attributes.Lines.forEach((item) => {
582          document.querySelector(".webapp-entries").innerHTML +=
583            `
584                    <h4 class="webapp-entry">` +
585            item.Line +
586            `</h4>
587                    `;
588        });
589      } else {
590        document.querySelector("#section-webapp").classList.add("is-hidden");
591        document.querySelector("#topbar-nav-webapp").classList.add("is-hidden");
592      }
593    }
594  };
595
596  xhr.send();
597}
598
599function insertSubscriptions() {
600  var xhr = new XMLHttpRequest();
601
602  xhr.open("GET", "https://cms.192tv.tv/api/subscriptions?populate[0]=Subscriptions&populate[1]=Subscriptions.USP&locale=" + storage.language, true);
603
604  xhr.setRequestHeader("Content-Type", "application/json");
605
606  xhr.onreadystatechange = function () {
607    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
608      let res = JSON.parse(this.responseText);
609
610      if (res.data.attributes.Active) {
611        document.querySelector("#section-subscriptions").classList.remove("is-hidden");
612
613        document.querySelector("#topbar-nav-subscriptions").classList.remove("is-hidden");
614
615        document.querySelector("#section-subscriptions .section-header-placeholder").innerHTML =
616          `
617                <div class="section-header">
618                    <h3 class="section-header-title">` +
619          res.data.attributes.Title +
620          `</h3>
621                    <h4 class="section-header-subtitle">` +
622          res.data.attributes.Subtitle +
623          `</h4>
624                </div>
625                `;
626
627        document.querySelector(".subscriptions-container").innerHTML = "";
628
629        res.data.attributes.Subscriptions.forEach((item) => {
630          let usps = ``;
631
632          item.USP.forEach((usp) => {
633            usps += `<p class="subscription-usp">` + usp.Text + `</p>`;
634          });
635
636          let a = item.Highlight ? "is-highlight" : "";
637
638          document.querySelector(".subscriptions-container").innerHTML +=
639            `
640                    <div class="subscription ` +
641            a +
642            `">
643                        <div class="subscription-header">
644                            <h3 class="subscription-title">` +
645            item.Title +
646            `</h3>
647                            <h4 class="subscription-price">` +
648            (item.Price == "-" ? "-" : "€ " + item.Price) +
649            `</h4>
650                        </div>
651                        <div class="subscription-usps">` +
652            usps +
653            `</div>
654                        <a target="_blank" class="subscription-btn" href="` +
655            item.ButtonCTA +
656            `">` +
657            item.ButtonText +
658            `</a>
659                    </div>
660                    `;
661        });
662      } else {
663        document.querySelector("#section-webapp").classList.add("is-hidden");
664        document.querySelector("#topbar-nav-subscriptions").classList.add("is-hidden");
665      }
666    }
667  };
668
669  xhr.send();
670}
671
672function insertNews() {
673  var xhr = new XMLHttpRequest();
674
675  xhr.open("GET", "https://cms.192tv.tv/api/news?&locale=" + storage.language, true);
676
677  xhr.setRequestHeader("Content-Type", "application/json");
678
679  xhr.onreadystatechange = function () {
680    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
681      let res = JSON.parse(this.responseText);
682
683      if (res.data.attributes.Active) {
684        document.querySelector("#section-news").classList.remove("is-hidden");
685
686        document.querySelector("#topbar-nav-news").classList.remove("is-hidden");
687
688        document.querySelector("#section-news .section-header-placeholder").innerHTML =
689          `
690                <div class="section-header">
691                    <h3 class="section-header-title">` +
692          res.data.attributes.Title +
693          `</h3>
694                    <h4 class="section-header-subtitle">` +
695          res.data.attributes.Subtitle +
696          `</h4>
697                </div>
698                `;
699
700        var xhrNews = new XMLHttpRequest();
701
702        xhrNews.open("GET", "https://cms.192tv.tv/api/news-items?populate=%2A&sort=NewsDate:DESC&pagination[start]=0&pagination[limit]=5&locale=" + storage.language, true);
703
704        xhrNews.setRequestHeader("Content-Type", "application/json");
705
706        xhrNews.onreadystatechange = function () {
707          if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
708            let newsRes = JSON.parse(this.responseText);
709
710            document.querySelector(".news-entries").innerHTML = "";
711
712            let translationCta = "";
713
714            if (storage.language == "nl") {
715              translationCta = "Lees meer";
716            }
717            if (storage.language == "en") {
718              translationCta = "Read more";
719            }
720            if (storage.language == "fr") {
721              translationCta = "Lire la suite";
722            }
723            if (storage.language == "de") {
724              translationCta = "Weiterlesen";
725            }
726
727            newsRes.data.forEach((item) => {
728              let y = item.attributes.NewsDate.substr(0, 4);
729              let m = item.attributes.NewsDate.substr(5, 2);
730              let d = item.attributes.NewsDate.substr(8, 2);
731
732              if (m == "01" && storage.language == "nl") {
733                m = "januari";
734              }
735              if (m == "02" && storage.language == "nl") {
736                m = "februari";
737              }
738              if (m == "03" && storage.language == "nl") {
739                m = "maart";
740              }
741              if (m == "04" && storage.language == "nl") {
742                m = "april";
743              }
744              if (m == "05" && storage.language == "nl") {
745                m = "mei";
746              }
747              if (m == "06" && storage.language == "nl") {
748                m = "juni";
749              }
750              if (m == "07" && storage.language == "nl") {
751                m = "juli";
752              }
753              if (m == "08" && storage.language == "nl") {
754                m = "augustus";
755              }
756              if (m == "09" && storage.language == "nl") {
757                m = "september";
758              }
759              if (m == "10" && storage.language == "nl") {
760                m = "oktober";
761              }
762              if (m == "11" && storage.language == "nl") {
763                m = "november";
764              }
765              if (m == "12" && storage.language == "nl") {
766                m = "december";
767              }
768
769              if (m == "01" && storage.language == "en") {
770                m = "January";
771              }
772              if (m == "02" && storage.language == "en") {
773                m = "February";
774              }
775              if (m == "03" && storage.language == "en") {
776                m = "March";
777              }
778              if (m == "04" && storage.language == "en") {
779                m = "April";
780              }
781              if (m == "05" && storage.language == "en") {
782                m = "May";
783              }
784              if (m == "06" && storage.language == "en") {
785                m = "June";
786              }
787              if (m == "07" && storage.language == "en") {
788                m = "July";
789              }
790              if (m == "08" && storage.language == "en") {
791                m = "August";
792              }
793              if (m == "09" && storage.language == "en") {
794                m = "September";
795              }
796              if (m == "10" && storage.language == "en") {
797                m = "October";
798              }
799              if (m == "11" && storage.language == "en") {
800                m = "November";
801              }
802              if (m == "12" && storage.language == "en") {
803                m = "December";
804              }
805
806              if (m == "01" && storage.language == "fr") {
807                m = "janvier";
808              }
809              if (m == "02" && storage.language == "fr") {
810                m = "février";
811              }
812              if (m == "03" && storage.language == "fr") {
813                m = "mars";
814              }
815              if (m == "04" && storage.language == "fr") {
816                m = "avril";
817              }
818              if (m == "05" && storage.language == "fr") {
819                m = "mai";
820              }
821              if (m == "06" && storage.language == "fr") {
822                m = "juin";
823              }
824              if (m == "07" && storage.language == "fr") {
825                m = "juillet";
826              }
827              if (m == "08" && storage.language == "fr") {
828                m = "août";
829              }
830              if (m == "09" && storage.language == "fr") {
831                m = "septembre";
832              }
833              if (m == "10" && storage.language == "fr") {
834                m = "octobre";
835              }
836              if (m == "11" && storage.language == "fr") {
837                m = "novembre";
838              }
839              if (m == "12" && storage.language == "fr") {
840                m = "décembre";
841              }
842
843              if (m == "01" && storage.language == "de") {
844                m = "Januar";
845              }
846              if (m == "02" && storage.language == "de") {
847                m = "Februar";
848              }
849              if (m == "03" && storage.language == "de") {
850                m = "März";
851              }
852              if (m == "04" && storage.language == "de") {
853                m = "April";
854              }
855              if (m == "05" && storage.language == "de") {
856                m = "Mai ";
857              }
858              if (m == "06" && storage.language == "de") {
859                m = "Juni ";
860              }
861              if (m == "07" && storage.language == "de") {
862                m = "Juli ";
863              }
864              if (m == "08" && storage.language == "de") {
865                m = "August ";
866              }
867              if (m == "09" && storage.language == "de") {
868                m = "September ";
869              }
870              if (m == "10" && storage.language == "de") {
871                m = "Oktober ";
872              }
873              if (m == "11" && storage.language == "de") {
874                m = "November";
875              }
876              if (m == "12" && storage.language == "de") {
877                m = "Dezember ";
878              }
879
880              document.querySelector(".news-entries").innerHTML +=
881                `
882                            <div data-id="news-entry-` +
883                item.id +
884                `" class="news-entry">
885                                <div class="news-entry-img" style="background-image: url('https://cms.192tv.tv` +
886                item.attributes.Image.data.attributes.url +
887                `')"></div>
888                                <div class="news-entry-info">
889                                    <h6 class="news-entry-date">` +
890                (d + " " + m + ", " + y) +
891                `</h6>
892                                    <h5 class="news-entry-title">` +
893                item.attributes.Title +
894                `</h5>
895                                    <p class="news-entry-intro">` +
896                markDown(item.attributes.Intro) +
897                `</p>
898                                </div>
899                                <a class="news-entry-btn" href="/article.html?id=` +
900                item.id +
901                `&lang=` +
902                storage.language +
903                `" target="_blank">` +
904                translationCta +
905                `</a>
906                            </div>
907                            `;
908            });
909          }
910        };
911
912        xhrNews.send();
913      } else {
914        document.querySelector("#section-news").classList.add("is-hidden");
915
916        document.querySelector("#topbar-nav-news").classList.add("is-hidden");
917      }
918    }
919  };
920
921  xhr.send();
922}
923
924function insertFaq() {
925  var xhr = new XMLHttpRequest();
926
927  xhr.open("GET", "https://cms.192tv.tv/api/faq?populate[0]=FAQ&locale=" + storage.language, true);
928
929  xhr.setRequestHeader("Content-Type", "application/json");
930
931  xhr.onreadystatechange = function () {
932    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
933      let res = JSON.parse(this.responseText);
934
935      if (res.data.attributes.Active) {
936        document.querySelector("#section-faq").classList.remove("is-hidden");
937
938        document.querySelector("#topbar-nav-faq").classList.remove("is-hidden");
939
940        document.querySelector("#section-faq .section-header-placeholder").innerHTML =
941          `
942                <div class="section-header">
943                    <h3 class="section-header-title">` +
944          res.data.attributes.Title +
945          `</h3>
946                    <h4 class="section-header-subtitle">` +
947          res.data.attributes.Subtitle +
948          `</h4>
949                </div>
950                `;
951
952        let faqEntriesLeft = res.data.attributes.FAQ;
953
954        faqEntriesLeft = faqEntriesLeft.slice(0, Math.ceil(faqEntriesLeft.length / 2));
955
956        document.querySelectorAll(".faq-col")[0].innerHTML = "";
957
958        faqEntriesLeft.forEach((entry) => {
959          document.querySelectorAll(".faq-col")[0].innerHTML +=
960            `
961                    <div class="faq-entry">
962                        <h5 class="faq-entry-question" onclick="toggleFaq(this)">` +
963            entry.Question +
964            `</h5>
965                        <div class="faq-entry-answer-container">
966                            <p class="faq-entry-answer">` +
967            markDown(entry.Answer) +
968            `</p>
969                        </div>
970                    </div>
971                    `;
972        });
973
974        let faqEntriesRight = res.data.attributes.FAQ;
975        faqEntriesRight = faqEntriesRight.slice(Math.ceil(faqEntriesRight.length / 2));
976
977        document.querySelectorAll(".faq-col")[1].innerHTML = "";
978
979        faqEntriesRight.forEach((entry) => {
980          document.querySelectorAll(".faq-col")[1].innerHTML +=
981            `
982                    <div class="faq-entry">
983                        <h5 class="faq-entry-question" onclick="toggleFaq(this)">` +
984            entry.Question +
985            `</h5>
986                        <div class="faq-entry-answer-container">
987                            <p class="faq-entry-answer">` +
988            markDown(entry.Answer) +
989            `</p>
990                        </div>
991                    </div>
992                    `;
993        });
994      } else {
995        document.querySelector("#section-faq").classList.add("is-hidden");
996
997        document.querySelector("#topbar-nav-faq").classList.add("is-hidden");
998      }
999    }
1000  };
1001
1002  xhr.send();
1003}
1004
1005function insertNewsletter() {
1006  var xhr = new XMLHttpRequest();
1007
1008  xhr.open("GET", "https://cms.192tv.tv/api/news-letter?locale=" + storage.language, true);
1009
1010  xhr.setRequestHeader("Content-Type", "application/json");
1011
1012  xhr.onreadystatechange = function () {
1013    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
1014      let res = JSON.parse(this.responseText);
1015
1016      if (res.data.attributes.Active) {
1017        document.querySelector("#section-newsletter").classList.remove("is-hidden");
1018
1019        document.querySelector("#section-newsletter .section-header-placeholder").innerHTML =
1020          `
1021                <div class="section-header">
1022                    <h3 class="section-header-title">` +
1023          res.data.attributes.Title +
1024   
1024       `</h3>
1025                    <h4 class="section-header-subtitle">` +
1026          res.data.attributes.Subtitle +
1027          `</h4>
1028                </div>
1029                `;
1030
1031        document.querySelector(".newsletter-input-btn").value = res.data.attributes.ButtonText;
1032
1033        document.querySelector(".newsletter-input").placeholder = res.data.attributes.Placeholder;
1034      } else {
1035        document.querySelector("#section-newsletter").classList.add("is-hidden");
1036      }
1037    }
1038  };
1039
1040  xhr.send();
1041}
1042
1043function insertFooter() {
1044  var xhr = new XMLHttpRequest();
1045
1046  xhr.open("GET", "https://cms.192tv.tv/api/footer?populate=%2A&locale=" + storage.language, true);
1047
1048  xhr.setRequestHeader("Content-Type", "application/json");
1049
1050  xhr.onreadystatechange = function () {
1051    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
1052      let res = JSON.parse(this.responseText);
1053
1054      if (res.data.attributes.Active) {
1055        document.querySelector(".footer").classList.remove("is-hidden");
1056
1057        document.querySelector(".footer-container").innerHTML = "";
1058
1059        res.data.attributes.Component.forEach((entry) => {
1060          document.querySelector(".footer-container").innerHTML +=
1061            `
1062                    <a target="_blank" href="` +
1063            entry.CTA +
1064            `" class="footer-block">
1065                        <h4 class="footer-block-title">` +
1066            entry.Title +
1067            `</h4>
1068                        <p class="footer-block-subtitle">` +
1069            markDown(entry.Body) +
1070            `</p>
1071                    </a>
1072                    `;
1073        });
1074      } else {
1075        document.querySelector(".footer").classList.add("is-hidden");
1076      }
1077    }
1078  };
1079
1080  xhr.send();
1081}
1082
1083function insertBottombar() {
1084  var xhr = new XMLHttpRequest();
1085
1086  xhr.open("GET", "https://cms.192tv.tv/api/bottom-bar?populate=%2A&locale=" + storage.language, true);
1087
1088  xhr.setRequestHeader("Content-Type", "application/json");
1089
1090  xhr.onreadystatechange = function () {
1091    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
1092      let res = JSON.parse(this.responseText);
1093
1094      if (res.data.attributes.Active) {
1095        document.querySelector("#bb").classList.remove("is-hidden");
1096
1097        document.getElementById("bb").innerHTML = "";
1098
1099        res.data.attributes.Component.forEach((entry) => {
1100          document.getElementById("bb").innerHTML +=
1101            `
1102                    <a href="` +
1103            entry.CTA +
1104            `" target="_blank" class="nav">` +
1105            entry.Title +
1106            `</a>
1107                    `;
1108        });
1109      } else {
1110        document.querySelector("#bb").classList.add("is-hidden");
1111      }
1112    }
1113  };
1114
1115  xhr.send();
1116}
1117
1118function insertTopbar() {
1119  if (storage.language == "nl") {
1120    document.getElementById("topbar-nav-about").innerHTML = "Over 192TV";
1121    document.getElementById("topbar-nav-guide").innerHTML = "Gids";
1122    document.getElementById("topbar-nav-channels").innerHTML = "Kanalen";
1123    document.getElementById("topbar-nav-webapp").innerHTML = "192TV Online";
1124    document.getElementById("topbar-nav-subscriptions").innerHTML = "Abonnementen";
1125    document.getElementById("topbar-nav-news").innerHTML = "Nieuws";
1126    document.getElementById("topbar-nav-faq").innerHTML = "Veelgestelde vragen";
1127  }
1128
1129  if (storage.language == "en") {
1130    document.getElementById("topbar-nav-about").innerHTML = "About 192TV";
1131    document.getElementById("topbar-nav-guide").innerHTML = "Guide";
1132    document.getElementById("topbar-nav-channels").innerHTML = "Channels";
1133    document.getElementById("topbar-nav-webapp").innerHTML = "192TV Online";
1134    document.getElementById("topbar-nav-subscriptions").innerHTML = "Subscriptions";
1135    document.getElementById("topbar-nav-news").innerHTML = "News";
1136    document.getElementById("topbar-nav-faq").innerHTML = "FAQ";
1137  }
1138
1139  if (storage.language == "fr") {
1140    document.getElementById("topbar-nav-about").innerHTML = "Sur 192TV";
1141    document.getElementById("topbar-nav-guide").innerHTML = "Guide";
1142    document.getElementById("topbar-nav-channels").innerHTML = "Canaux";
1143    document.getElementById("topbar-nav-webapp").innerHTML = "192TV En Ligne";
1144    document.getElementById("topbar-nav-subscriptions").innerHTML = "Abonnements";
1145    document.getElementById("topbar-nav-news").innerHTML = "Nouveautés";
1146    document.getElementById("topbar-nav-faq").innerHTML = "FAQ";
1147  }
1148
1149  if (storage.language == "de") {
1150    document.getElementById("topbar-nav-about").innerHTML = "Über 192TV";
1151    document.getElementById("topbar-nav-guide").innerHTML = "Programm";
1152    document.getElementById("topbar-nav-channels").innerHTML = "Kanäle";
1153    document.getElementById("topbar-nav-webapp").innerHTML = "192TV Online";
1154    document.getElementById("topbar-nav-subscriptions").innerHTML = "Abonnements";
1155    document.getElementById("topbar-nav-news").innerHTML = "Nachrichten";
1156    document.getElementById("topbar-nav-faq").innerHTML = "FAQ";
1157  }
1158}
1159
1160function toggleFaq(elem) {
1161  let p = elem.parentNode;
1162  let h = p.querySelector(".faq-entry-answer").offsetHeight;
1163
1164  if (p.classList.contains("is-open")) {
1165    p.classList.remove("is-open");
1166    p.querySelector(".faq-entry-answer-container").style.height = 0;
1167  } else {
1168    if (document.querySelectorAll(".faq-entry.is-open").length > 0) {
1169      document.querySelector(".faq-entry.is-open .faq-entry-answer-container").style.height = 0;
1170      document.querySelector(".faq-entry.is-open").classList.remove("is-open");
1171    }
1172
1173    p.classList.add("is-open");
1174    p.querySelector(".faq-entry-answer-container").style.height = h + 15 + "px";
1175  }
1176}
1177
1178function initChannelsSlider() {
1179  let p = document.querySelector(".channels-container");
1180
1181  clearInterval(storage.channelsInterval);
1182
1183  storage.channelsInterval = setInterval(() => {
1184    p.appendChild(p.childNodes[0]);
1185  }, 1500);
1186}
1187
1188function navAbout(index) {
1189  document.querySelector(".about-menu-nav.is-active").classList.remove("is-active");
1190  document.querySelector(".about-content-item.is-active").classList.remove("is-active");
1191
1192  document.querySelector('.about-menu-nav[data-index="' + index + '"]').classList.add("is-active");
1193  document.querySelector('.about-content-item[data-index="' + index + '"]').classList.add("is-active");
1194}
1195
1196function subscribe(e) {
1197  if (e.keyCode == 13 || e.type == "click") {
1198  }
1199}
1200
1201function navGuide(dir) {
1202  let step = window.innerWidth - 125;
1203
1204  let currentPos = parseInt(document.querySelector(".guide-slider").getAttribute("data-pos"));
1205
1206  if (dir == "l") {
1207    document.querySelector(".guide-slider").setAttribute("data-pos", currentPos - step);
1208
1209    document.querySelector(".guide-slider").scroll({
1210      left: currentPos - step,
1211      top: 0,
1212      behavior: "smooth",
1213    });
1214  } else {
1215    document.querySelector(".guide-slider").setAttribute("data-pos", currentPos + step);
1216
1217    document.querySelector(".guide-slider").scroll({
1218      left: currentPos + step,
1219      top: 0,
1220      behavior: "smooth",
1221    });
1222  }
1223
1224  let items = document.querySelectorAll(".guide-slider-item");
1225
1226  let checkPos = Math.ceil(parseInt(document.querySelector(".guide-slider").getAttribute("data-pos")) + window.innerWidth / 2 - items[0].offsetWidth / 2);
1227
1228  let item = null;
1229
1230  for (let i = 0; i < items.length; i++) {
1231    let pos = items[i].offsetLeft;
1232
1233    if (pos == checkPos) {
1234      item = items[i];
1235    }
1236  }
1237
1238  if (item == null) {
1239    checkPos = Math.floor(parseInt(document.querySelector(".guide-slider").getAttribute("data-pos")) + window.innerWidth / 2 - items[0].offsetWidth / 2);
1240
1241    for (let i = 0; i < items.length; i++) {
1242      let pos = items[i].offsetLeft;
1243
1244      if (pos == checkPos) {
1245        item = items[i];
1246      }
1247    }
1248  }
1249
1250  if (item != null) {
1251    let d = item.getAttribute("data-date");
1252
1253    document.querySelector(".guide-date.is-active").classList.remove("is-active");
1254    document.querySelector('.guide-date[data-date="' + d + '"]').classList.add("is-active");
1255  }
1256}
1257
1258function guideScrollDate(d) {
1259  let windowW = window.innerWidth;
1260
1261  let items = document.querySelectorAll(".guide-slider-item");
1262
1263  let item = null;
1264
1265  let date = new Date();
1266  const offset = date.getTimezoneOffset() / 60;
1267
1268  const ho = date.getHours() + offset;
1269
1270  let h = ho < 10 ? "0" + ho : ho;
1271  let m = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
1272  let t = h + ":" + m;
1273  let s = h * 3600 + m * 60;
1274
1275  let counts = [];
1276
1277  for (let i = 0; i < items.length; i++) {
1278    if (items[i].getAttribute("data-date") == d) {
1279      let h2 = items[i].getAttribute("data-time").substr(0, 2);
1280
1281      if (h2.substr(0, 1) == "0") {
1282        h2 = parseInt(h2.substr(1, 1));
1283      } else {
1284        h2 = parseInt(h2);
1285      }
1286
1287      let m2 = items[i].getAttribute("data-time").substr(3, 2);
1288
1289      if (m2.substr(0, 1) == "0") {
1290        m2 = parseInt(m2.substr(1, 1));
1291      } else {
1292        m2 = parseInt(m2);
1293      }
1294
1295      let s2 = h2 * 3600 + m2 * 60;
1296
1297      counts.push(s2);
1298
1299      items[i].setAttribute("data-seconds", s2);
1300
1301      if (item == null) {
1302        item = items[i];
1303      }
1304    }
1305  }
1306
1307  item = null;
1308
1309  let goal = s;
1310
1311  let closest = counts.reduce(function (prev, curr) {
1312    return Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev;
1313  });
1314
1315  let x = document.querySelector(`.guide-slider-item[data-date="` + d + `"][data-seconds="` + closest + `"]`).offsetLeft;
1316  let itemWidth = document.querySelector(`.guide-slider-item[data-date="` + d + `"][data-seconds="` + closest + `"]`).offsetWidth + 5;
1317  let recalc = 0;
1318
1319  if (windowW > 1024) {
1320    recalc = itemWidth * 3;
1321  } else if (windowW > 768) {
1322    recalc = itemWidth * 2;
1323  } else if (windowW > 500) {
1324    recalc = itemWidth;
1325  } else {
1326    recalc = itemWidth * -1 + itemWidth;
1327  }
1328
1329  x = x - recalc;
1330
1331  if (document.querySelectorAll(`.guide-slider-item.is-current`).length == 0) {
1332    document.querySelector(`.guide-slider-item[data-date="` + d + `"][data-seconds="` + closest + `"]`).classList.add("is-current");
1333  }
1334
1335  document.querySelector(".guide-slider").setAttribute("data-pos", x - 65);
1336
1337  document.querySelector(".guide-slider").scroll({
1338    left: x - 65,
1339    top: 0,
1340    behavior: "smooth",
1341  });
1342}
1343
1344function navGuideDates(dir) {
1345  let i = 0;
1346
1347  for (let i2 = 0; i2 < document.querySelectorAll(".guide-date").length; i2++) {
1348    if (document.querySelectorAll(".guide-date")[i2].classList.contains("is-active")) {
1349      i = i2;
1350    }
1351  }
1352
1353  let l = document.querySelectorAll(".guide-date").length;
1354  let newI = 0;
1355
1356  if (dir == "l") {
1357    newI = i == 0 ? l - 1 : i - 1;
1358  } else {
1359    newI = i == l - 1 ? 0 : i + 1;
1360  }
1361
1362  document.querySelector(".guide-date.is-active").classList.remove("is-active");
1363  document.querySelectorAll(".guide-date")[newI].classList.add("is-active");
1364
1365  let d = document.querySelector(".guide-date.is-active").getAttribute("data-date");
1366
1367  guideScrollDate(d);
1368}
1369
1370function navHeader(dir) {
1371  let p = document.querySelector(".header-slides");
1372
1373  let nodes = [];
1374
1375  p.childNodes.forEach((cn) => {
1376    if (cn.classList != undefined) {
1377      nodes.push(cn);
1378    }
1379  });
1380
1381  if (dir == "l") {
1382    p.insertBefore(nodes[nodes.length - 1], nodes[0]);
1383  } else {
1384    p.appendChild(nodes[0]);
1385  }
1386}
1387
1388function toggleMenu() {
1389  document.querySelector(".topbar-navs").classList.toggle("is-open");
1390}
1391
1392function getArticle() {
1393  let newsId = parseInt(window.location.href.split("?id=")[1]);
1394
1395  var xhr = new XMLHttpRequest();
1396
1397  xhr.open("GET", "https://cms.192tv.tv/api/news-items/" + newsId + "?populate=%2A&locale=" + storage.language, true);
1398
1399  xhr.setRequestHeader("Content-Type", "application/json");
1400
1401  xhr.onreadystatechange = function () {
1402    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
1403      let res = JSON.parse(this.responseText);
1404
1405      let y = res.data.attributes.NewsDate.substr(0, 4);
1406      let m = res.data.attributes.NewsDate.substr(5, 2);
1407      let d = res.data.attributes.NewsDate.substr(8, 2);
1408
1409      if (m == "01" && storage.language == "nl") {
1410        m = "januari";
1411      }
1412      if (m == "02" && storage.language == "nl") {
1413        m = "februari";
1414      }
1415      if (m == "03" && storage.language == "nl") {
1416        m = "maart";
1417      }
1418      if (m == "04" && storage.language == "nl") {
1419        m = "april";
1420      }
1421      if (m == "05" && storage.language == "nl") {
1422        m = "mei";
1423      }
1424      if (m == "06" && storage.language == "nl") {
1425        m = "juni";
1426      }
1427      if (m == "07" && storage.language == "nl") {
1428        m = "juli";
1429      }
1430      if (m == "08" && storage.language == "nl") {
1431        m = "augustus";
1432      }
1433      if (m == "09" && storage.language == "nl") {
1434        m = "september";
1435      }
1436      if (m == "10" && storage.language == "nl") {
1437        m = "oktober";
1438      }
1439      if (m == "11" && storage.language == "nl") {
1440        m = "november";
1441      }
1442      if (m == "12" && storage.language == "nl") {
1443        m = "december";
1444      }
1445
1446      if (m == "01" && storage.language == "en") {
1447        m = "January";
1448      }
1449      if (m == "02" && storage.language == "en") {
1450        m = "February";
1451      }
1452      if (m == "03" && storage.language == "en") {
1453        m = "March";
1454      }
1455      if (m == "04" && storage.language == "en") {
1456        m = "April";
1457      }
1458      if (m == "05" && storage.language == "en") {
1459        m = "May";
1460      }
1461      if (m == "06" && storage.language == "en") {
1462        m = "June";
1463      }
1464      if (m == "07" && storage.language == "en") {
1465        m = "July";
1466      }
1467      if (m == "08" && storage.language == "en") {
1468        m = "August";
1469      }
1470      if (m == "09" && storage.language == "en") {
1471        m = "September";
1472      }
1473      if (m == "10" && storage.language == "en") {
1474        m = "October";
1475      }
1476      if (m == "11" && storage.language == "en") {
1477        m = "November";
1478      }
1479      if (m == "12" && storage.language == "en") {
1480        m = "December";
1481      }
1482
1483      if (m == "01" && storage.language == "fr") {
1484        m = "janvier";
1485      }
1486      if (m == "02" && storage.language == "fr") {
1487        m = "février";
1488      }
1489      if (m == "03" && storage.language == "fr") {
1490        m = "mars";
1491      }
1492      if (m == "04" && storage.language == "fr") {
1493        m = "avril";
1494      }
1495      if (m == "05" && storage.language == "fr") {
1496        m = "mai";
1497      }
1498      if (m == "06" && storage.language == "fr") {
1499        m = "juin";
1500      }
1501      if (m == "07" && storage.language == "fr") {
1502        m = "juillet";
1503      }
1504      if (m == "08" && storage.language == "fr") {
1505        m = "août";
1506      }
1507      if (m == "09" && storage.language == "fr") {
1508        m = "septembre";
1509      }
1510      if (m == "10" && storage.language == "fr") {
1511        m = "octobre";
1512      }
1513      if (m == "11" && storage.language == "fr") {
1514        m = "novembre";
1515      }
1516      if (m == "12" && storage.language == "fr") {
1517        m = "décembre";
1518      }
1519
1520      if (m == "01" && storage.language == "de") {
1521        m = "Januar";
1522      }
1523      if (m == "02" && storage.language == "de") {
1524        m = "Februar";
1525      }
1526      if (m == "03" && storage.language == "de") {
1527        m = "März";
1528      }
1529      if (m == "04" && storage.language == "de") {
1530        m = "April";
1531      }
1532      if (m == "05" && storage.language == "de") {
1533        m = "Mai ";
1534      }
1535      if (m == "06" && storage.language == "de") {
1536        m = "Juni ";
1537      }
1538      if (m == "07" && storage.language == "de") {
1539        m = "Juli ";
1540      }
1541      if (m == "08" && storage.language == "de") {
1542        m = "August ";
1543      }
1544      if (m == "09" && storage.language == "de") {
1545        m = "September ";
1546      }
1547      if (m == "10" && storage.language == "de") {
1548        m = "Oktober ";
1549      }
1550      if (m == "11" && storage.language == "de") {
1551        m = "November";
1552      }
1553      if (m == "12" && storage.language == "de") {
1554        m = "Dezember ";
1555      }
1556
1557      document.querySelector(".article-container").innerHTML =
1558        `
1559            <div class="article-header"><img src="https://cms.192tv.tv` +
1560        res.data.attributes.Image.data.attributes.url +
1561        `"></div>
1562            <h6 class="article-date">` +
1563        (d + " " + m + ", " + y) +
1564        `</h6>
1565            <h4 class="article-title">` +
1566        res.data.attributes.Title +
1567        `</h4>
1568            <p class="article-intro">` +
1569        markDown(res.data.attributes.Intro) +
1570        `</p>
1571            <div class="article-content">` +
1572        markDown(res.data.attributes.Body) +
1573        `</div>
1574            </div>
1575            `;
1576    }
1577  };
1578
1579  xhr.send();
1580}
1581

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.