PageSourceSearch

https://www.kreis-tuebingen.de/site/LRA-Tuebingen-Internet-2022/re…/10.4.2.1.3/js/pageChecker/currenPageBFO.js

js kreis-tuebingen.de collected 2026-10-02 10:06:41 UTC 30,110 bytes, 744 lines download raw bytes

1// var contentClass = "#content"
2// var allElements=[]
3// var xVar = 0;
4// var runExecution = true
5// var first, second
6// var i, x;
7
8// jQuery(document).ready(function () {
9//     jQuery('.l-dvv-toolbar .tb-menu li a[target="checkAlt"]').addClass('alt-checker').removeAttr('target')
10//     jQuery('.l-dvv-toolbar .tb-menu li a[target="checkLink"]').addClass('link-checker').removeAttr('target')
11
12//     jQuery('a.alt-checker').on('click', function(e){
13//         e.preventDefault();
14//         console.log('starting to check the alternative text of images')
15
16//         //check the alt texts
17//         checkElement('img', '.l-page')
18//         checkElement('img', 'body > .mm-menu')
19//     })
20
21//     jQuery('a.link-checker').on('click', function(e){
22//       e.preventDefault();
23//       console.log('starting to check the links')
24//       addLoader()
25
26//       //check Dead Links
27//       //Head anpassen wegen externe Linkaufrufe
28//       if (window.location.protocol.indexOf('https') == 0){
29//           var el = document.createElement('meta')
30//           el.setAttribute('http-equiv', 'Content-Security-Policy')
31//           el.setAttribute('content', 'upgrade-insecure-requests')
32//           document.head.append(el)
33//       }
34
35//       if(stopFunction){
36//         stopFunction = false
37//       }
38//       else{
39//         checkLink('a[href^="/"]', '.l-page', 'intern')
40//         checkLink('a[href^="http"]', '.l-page', 'extern')
41//         //checkLink('a[href^="/"]', 'body > .mm-menu', 'intern')
42//         //checkLink('a[href^="http"]', 'body > .mm-menu', 'extern')
43//       }
44//   })
45// });
46
47// function addLoader(){
48//   if(jQuery('.checkerLoader').length == 0){
49//     jQuery('<div class="checkerLoader"><div class="loader"></div><div class="info"></div></div>').insertBefore(jQuery('.l-page'))
50//     jQuery('.checkerLoader .info').append('<p class="internLinksChecker">Prüfe interner Link <span class="current"></span> von <span class="all"></span></p>')
51//     jQuery('.checkerLoader .info').append('<p class="externLinksChecker">Prüfe externer Link <span class="current"></span> von <span class="all"></span></p>')
52//     jQuery('.checkerLoader .info').append('<button class="btn stopLinksChecker">Prüfung abbrechen</button>')
53//     jQuery('.checkerLoader .info').append('<p class="infoColors">Defekte Links werden blau markiert. Funktionierte Links werden grün markiert.</p>')
54//   }
55// }
56
57// //Alternativtexte von Bilder prüfen
58// function checkElement(element, parent){
59//     jQuery(element, parent).each(function(){
60//         var alt = jQuery(this).attr('alt')
61//         var imgSrc = jQuery(this).attr('src')
62//         var imgName = imgSrc.substr(imgSrc.lastIndexOf('/') + 1)
63//         var res = ''
64//         var context = ''
65//         if(alt == ""){
66//             res = "nicht erfuellt"
67//             context = "kein Alt-text vorhanden"
68//         }
69//         if(alt.length < 7 && alt.length > 0){
70//             res = "teilweise erfuellt"
71//             context = "Alt-text sehr kurz (" + alt.length + " Zeichen)"
72//         }
73//         if(alt.length > 80){
74//             res = "teilweise erfuellt"
75//             context = "Alt-text etwas lang (" + alt.length + " Zeichen)"
76//         }
77//         if(context != ""){
78//             jQuery(this).parent().append('<p class="bf-trigger--child">' + context + '</p>')
79//             jQuery(this).parent().addClass('bf-trigger')
80//         }
81//     })
82// }
83
84// //Externe Einbindungen aus Quellen nehmen und am Ende der Seite einfügen
85// // function checkFiles(arr, currentHost){
86// //     $('.l-footer').append('<ul class="externFiles"></ul>')
87// //     setTimeout(function() {
88// //       const resources = performance.getEntriesByType("resource");
89// //       const currentHostname = currentHost;
90// //       var val = "";
91// //       resources.forEach((resource) => {
92// //         const url = new URL(resource.name)
93// //         if (url.host !== currentHostname) {
94// //             arr.push(resource.name)
95// //             val = String(resource.name)
96// //             $('.externFiles').append('<li>"' + val + '"</li>')
97// //           }
98// //       });
99// //     }, 100);
100// // }
101  
102// //Jeden Link aufrufen und checken
103// function checkLink(element, page, version){
104//     //Array mit allen vorhandenen URLs auf der Seite erstellen
105//     console.log(jQuery(element, page))
106//     var urlElements = [];
107//     jQuery(element, page).each(function(x){
108//       if(jQuery(this).attr('href') != 'undefined'){
109//         urlElements.push(jQuery(this).attr('href'))
110//       }
111//     })
112//     for (var i=0; i<urlElements.length; i++){
113//         checkURLs(i, urlElements, version)
114//     }
115// } 
116
117// var statusLoop1 = false
118// var statusLoop2 = false
119// var stopFunction = false
120// function checkURLs(zVar, urlElements, version){
121//     setTimeout(function() {
122//       if(!stopFunction){
123//         console.log('in for loop: ', zVar, urlElements[zVar], version)
124//         jQuery('.checkerLoader .stopLinksChecker').on('click', function(e){
125//           jQuery('.checkerLoader').remove()
126//           stopFunction = true
127//         });
128        
129//         if(version == "intern"){
130//           console.log('in intern')
131//           checkStatusIntern(urlElements[zVar])
132//           jQuery('.checkerLoader .internLinksChecker .current').text(zVar + 1)
133//           jQuery('.checkerLoader .internLinksChecker .all').text(urlElements.length)
134//           if((zVar + 1) == urlElements.length){
135//             statusLoop1 = true
136//             jQuery('.checkerLoader .internLinksChecker').text('Alle interne Links wurden geprüft')
137//           }
138//         }
139//         if(version == "extern"){
140//           console.log('in extern')
141//           checkStatusExtern(urlElements[zVar])
142//           jQuery('.checkerLoader .externLinksChecker .current').text(zVar + 1)
143//           jQuery('.checkerLoader .externLinksChecker .all').text(urlElements.length)
144//           if((zVar + 1) == urlElements.length){
145//             statusLoop2 = true
146//             jQuery('.checkerLoader .externLinksChecker').text('Alle externe Links wurden geprüft')
147//           }
148//         }   
149//         console.log((zVar + 1), urlElements.length, statusLoop1, statusLoop2)
150
151//         if(statusLoop1 && statusLoop2){
152//           jQuery('.checkerLoader').remove()
153//         }
154//         else{
155//           addLoader();
156//         }
157//       }
158//     }, 5000 * zVar);
159// }
160
161// //Interne Links checken
162// function checkStatusIntern(link){
163//     console.log('in intern checking')
164//     return jQuery.ajax({
165//         type: 'GET',
166//         dataType: 'json',
167//         contentType: 'application/json; charset=utf-8',
168//         data: {},
169//         url: link,
170//         error: function (jqXHR, textStatus, errorThrown) {
171//           if(jqXHR.status == 200){
172//             console.log("worked")
173//             jQuery('a[href="' + link + '"]').css('color', 'green')
174//             jQuery('a[href="' + link + '"] *').css('color', 'green')
175//             jQuery('a[href="' + link + '"]').css('border', '2px solid green')
176//             jQuery('a[href="' + link + '"]').css('font-weight', 'bold')  
177//           }
178//           else{
179//             console.log("defect",jQuery('a[href="' + link + '"]'))
180//             jQuery('a[href="' + link + '"]').css('color', 'blue')
181//             jQuery('a[href="' + link + '"] *').css('color', 'blue')
182//             jQuery('a[href="' + link + '"]').css('border', '2px solid blue')
183//             jQuery('a[href="' + link + '"]').css('font-weight', 'bold')
184//           }
185//         },
186//         success: function (data) {
187//         }
188//     });
189// }
190  
191// //Externe Links checken
192// function checkStatusExtern(link){
193//   console.log('in extern checking')
194//   return jQuery.ajax({
195//     type: 'GET',
196//     data: {},
197//     dataType: 'jsonp',
198//     url: link,
199//     error: function (jqXHR, textStatus, errorThrown) {
200//       if(jqXHR.status == 200){
201//         console.log("worked")
202//         jQuery('a[href="' + link + '"]').css('color', 'green')
203//         jQuery('a[href="' + link + '"] *').css('color', 'green')
204//         jQuery('a[href="' + link + '"]').css('border', '2px solid green')
205//         jQuery('a[href="' + link + '"]').css('font-weight', 'bold')  
206//       }
207//       else{
208//         console.log("defect")
209//         jQuery('a[href="' + link + '"]').css('color', 'blue')
210//         jQuery('a[href="' + link + '"] *').css('color', 'blue')
211//         jQuery('a[href="' + link + '"]').css('border', '2px solid blue')
212//         jQuery('a[href="' + link + '"]').css('font-weight', 'bold')
213//       }
214//     },
215//     success: function (data) {
216//     }
217//   });
218// }
219
220var contentClass = ".l-page"
221var allElements=[]
222var xVar = 0;
223var runExecution = true
224var runExecutionAlt = true
225var first, second
226var i, x;
227jQuery(document).ready(function () {
228  jQuery('.l-dvv-toolbar .tb-menu li a[target="checkAlt"]').addClass('alt-checker').removeAttr('target')
229  jQuery('.l-dvv-toolbar .tb-menu li a[target="checkLink"]').addClass('link-checker').removeAttr('target')
230  jQuery('a.alt-checker').on('click', function(e){
231    if(runExecutionAlt == false){
232      if(finishExeAlt){
233        jQuery('.loader-container').css('display', 'none')
234        jQuery('.loader-container').css('visibility', 'hidden')
235        jQuery('.loader-container').attr('aria-hidden', 'true')
236        
237        jQuery('script.checkStatus').remove()
238        jQuery('.check-modal-alt').addClass('show')
239                
240        jQuery('.check-modal-alt').removeClass('hide')
241      }
242      else{
243        runExecutionAlt = true
244        jQuery('.loader-container').css('display', 'flex')
245        jQuery('.loader-container').css('visibility', 'visible')
246        jQuery('.loader-container').attr('aria-hidden', 'false')
247      }
248    }
249    else{
250      jQuery('.loader-container').remove()
251      console.log('inside else')
252      checkBrowser()
253      runExecutionAlt = true
254      allElements=[]
255      xVar=0
256      first=false
257      second=false
258      e.preventDefault();
259      console.log('starting the checking')
260
261      //check the alt texts
262      jQuery('body').append('<div class="check-modal check-modal-alt hide"><div class="close"><button class="btn" aria-label="Modal schließen" title="Modal schließen">x</button></div><div class="check-modal--inner"></div><div class="openNewWindow"><button class="btn" aria-label="Ergebniss in neuem Fenster öffnen" title="Ergebniss in neuem Fenster öffnen">Ergebniss in neuem Fenster öffnen</button></div>')
263      jQuery('.check-modal-alt .check-modal--inner').append('<h3>Bilder ohne Alternativtexte / mit zu kurzen/langen Alternativtexte:</h3><ul class="defectAlt"></ul>')
264      checkElement('img:not(.leaflet-tile, .leaflet-marker-icon)', contentClass)
265
266      // //check Extern Files
267      // var arr=[]
268      // var currentHost = 'aikcms7.kvnbw.de' //currenHost anpassen
269      // jQuery('.check-modal--inner').append('<h3>Externe Einbindungen: </h3><ul class="externFiles"></ul>')
270      // checkFiles(arr, currentHost);
271      
272      jQuery('body').append('<div class="loader-container" aria-hidden="false"><div class="spinner"></div><p>Ihre Seite wird gerade geprüft, bitte warten Sie.</p></div>')    
273      jQuery('.loader-container').append('<div id="myProgress"><div id="myBar"></div></div><div class="stopExe"><button class="btn" aria-label="Ausführung stoppen" title="Ausführung stoppen">Ausführung stoppen</button></div>')
274      jQuery('<p class="loadingPages"></p>').insertAfter(jQuery('#myProgress'));
275      jQuery("#myBar").append('<span>0%</span>')
276      jQuery('.check-modal-alt .close').on('click', function(){
277        jQuery('.check-modal-alt').removeClass('show')
278        jQuery('.check-modal-alt').addClass('hide')
279        var icon = jQuery('a.bfo-checker span')
280        jQuery('a.bfo-checker').text('Ergebnisse der Prüfung anzeigen')
281        jQuery('a.bfo-checker').prepend(icon)
282      })
283      jQuery('.stopExe').click(function(){
284        runExecutionAlt = false;
285        //const loaderContainer = document.querySelector('.loader-container');
286        //loaderContainer.parentElement.removeChild(loaderContainer);
287        //jQuery('script.checkStatus').remove()
288        jQuery('.loader-container').css('display', 'none')
289        jQuery('.loader-container').css('visibility', 'hidden')
290        jQuery('.loader-container').attr('aria-hidden', 'true')
291        var icon = jQuery('a.bfo-checker span')
292        jQuery('a.bfo-checker').text('Prüfung aktueller Seite fortsetzen')
293        jQuery('a.bfo-checker').prepend(icon)
294      })
295    }
296  })
297  jQuery('a.link-checker').on('click', function(e){
298    if(runExecution == false){
299      if(finishExe){
300        jQuery('.loader-container').css('display', 'none')
301        jQuery('.loader-container').css('visibility', 'hidden')
302        jQuery('.loader-container').attr('aria-hidden', 'true')
303        
304        jQuery('script.checkStatus').remove()
305        jQuery('.check-modal-link').addClass('show')
306                
307        jQuery('.check-modal-link').removeClass('hide')
308      }
309      else{
310        runExecution = true
311        jQuery('.loader-container').css('display', 'flex')
312        jQuery('.loader-container').css('visibility', 'visible')
313        jQuery('.loader-container').attr('aria-hidden', 'false')
314      }
315    }
316    else{
317      jQuery('.loader-container').remove()
318      console.log('inside else')
319      checkBrowser()
320      runExecution = true
321      allElements=[]
322      xVar=0
323      first=false
324      second=false
325      e.preventDefault();
326      console.log('starting the checking')
327
328      //check Dead Links
329      //Head anpassen wegen externe Linkaufrufe
330      if (window.location.protocol.indexOf('https') == 0){
331          var el = document.createElement('meta')
332          el.setAttribute('http-equiv', 'Content-Security-Policy')
333          el.setAttribute('content', 'upgrade-insecure-requests')
334          document.head.append(el)
335      }
336
337      jQuery('body').append('<div class="check-modal check-modal-link hide"><div class="close"><button class="btn" aria-label="Modal schließen" title="Modal schließen">x</button></div><div class="check-modal--inner"></div><div class="openNewWindow"><button class="btn" aria-label="Ergebniss in neuem Fenster öffnen" title="Ergebniss in neuem Fenster öffnen">Ergebniss in neuem Fenster öffnen</button></div>')
338      jQuery('.check-modal-link .check-modal--inner').append('<h3>Defekte Links:</h3><p>Ist die URL eine Weiterleitung, dann kann es zu einem "falsch positiven" Ergebniss kommen. Da Weiterleitungen durch das Skript nicht erkannt werden können.</p><ul class="defectLinks"></ul>')
339
340      jQuery('a[href^="/"]', contentClass).each(function(x){
341        if(jQuery(this).attr('href') != 'undefined'){
342          allElements.push(jQuery(this).attr('href'))
343        }
344      })
345      jQuery('a[href^="http"]', contentClass).each(function(x){
346        if(jQuery(this).attr('href') != 'undefined'){
347          allElements.push(jQuery(this).attr('href'))
348        }
349      })
350      checkLink('a[href^="/"]', contentClass, 'intern', allElements)
351      checkLink('a[href^="http"]', contentClass, 'extern', allElements)
352
353      jQuery('body').append('<div class="loader-container" aria-hidden="false"><div class="spinner"></div><p>Ihre Seite wird gerade geprüft, bitte warten Sie.</p></div>')    
354      jQuery('.loader-container').append('<div id="myProgress"><div id="myBar"></div></div><div class="stopExe"><button class="btn" aria-label="Ausführung stoppen" title="Ausführung stoppen">Ausführung stoppen</button></div>')
355      jQuery('<p class="loadingPages"></p>').insertAfter(jQuery('#myProgress'));
356      jQuery("#myBar").append('<span>0%</span>')
357      jQuery('.check-modal-link .close').on('click', function(){
358        jQuery('.check-modal-link').removeClass('show')
359        jQuery('.check-modal-link').addClass('hide')
360        var icon = jQuery('a.bfo-checker span')
361        jQuery('a.bfo-checker').text('Ergebnisse der Prüfung anzeigen')
362        jQuery('a.bfo-checker').prepend(icon)
363      })
364      jQuery('.stopExe').click(function(){
365        runExecution = false;
366        //const loaderContainer = document.querySelector('.loader-container');
367        //loaderContainer.parentElement.removeChild(loaderContainer);
368        //jQuery('script.checkStatus').remove()
369        jQuery('.loader-container').css('display', 'none')
370        jQuery('.loader-container').css('visibility', 'hidden')
371        jQuery('.loader-container').attr('aria-hidden', 'true')
372        var icon = jQuery('a.bfo-checker span')
373        jQuery('a.bfo-checker').text('Prüfung aktueller Seite fortsetzen')
374        jQuery('a.bfo-checker').prepend(icon)
375      })
376    }
377  });
378});
379
380function checkBrowser(){
381  if(navigator.userAgent.indexOf("Chrome") != -1 ){
382
383  }
384  else{
385    alert('Ihr momentaner Browser wird nicht unterstützt, bitte wechseln Sie zum Chrome')
386    // create new exception type:
387    function FatalError(){ Error.apply(this, arguments); this.name = "FatalError"; }
388    FatalError.prototype = Object.create(Error.prototype);
389    throw new FatalError("Falscher Browser");
390  }
391}
392
393//Alternativtexte von Bilder prüfen
394function checkElement(element, parent){
395  if(runExecutionAlt){
396    jQuery(element, parent).each(function(){
397      console.log(runExecution)
398      var alt = jQuery(this).attr('alt')
399      var imgSrc = jQuery(this).attr('src')
400      var imgName = imgSrc.substr(imgSrc.lastIndexOf('/') + 1)
401      var res = ''
402      var context = ''
403      if(alt == ""){
404          res = "nicht erfuellt"
405          context = "kein Alt-text vorhanden"
406          console.log(imgName)
407      }
408      if(alt.length < 7 && alt.length > 0){
409          res = "teilweise erfuellt"
410          context = "Alt-text sehr kurz (" + alt.length + " Zeichen)"
411          console.log(imgName)
412      }
413      if(alt.length > 80){
414          res = "teilweise erfuellt"
415          context = "Alt-text etwas lang (" + alt.length + " Zeichen)"
416          console.log(imgName)
417      }
418      if(context != ""){
419          jQuery(this).parent().append('<p class="bf-trigger--child">' + context + '</p>')
420          jQuery(this).parent().addClass('bf-trigger')
421          jQuery('.defectAlt').append('<li><strong>Bild:</strong> ' + imgName + '<br><strong>' + res + ':</strong> ' + context + '</li>')
422      
423        }
424    })
425    finishExeAlt = true;
426    runExecutionAlt = false;
427    setTimeout(function() {
428      jQuery('.loader-container').css('display', 'none')
429      jQuery('.loader-container').css('visibility', 'hidden')
430      jQuery('.loader-container').attr('aria-hidden', 'true')
431      
432      jQuery('script.checkStatus').remove()
433      jQuery('.check-modal-alt').addClass('show')
434              
435      jQuery('.check-modal-alt').removeClass('hide')
436
437      // if(jQuery('.defectAlt').children().length == 0){
438      //   jQuery('.defectAlt').append('<li>keine Bilder ohne Alternativtexte gefunden</li>')
439      // }
440      // if(jQuery('.externFiles').children().length == 0){
441      //   jQuery('.externFiles').append('<li>keine Externe Einbindungen gefunden</li>')
442      // }
443      if(jQuery('.defectLinks').children().length == 0){
444        jQuery('.defectLinks').append('<li>keine Defekten Links gefunden</li>')
445      }
446
447      jQuery('.openNewWindow button').click(function(){
448        var opened = window.open("");
449        opened.document.write("<html><head><title>Ergebnisse</title></head><body>" + jQuery('.check-modal-alt .check-modal--inner')[0].innerHTML + "</body></html>");
450      })
451    }, 2000);
452  }
453}
454
455// //Externe Einbindungen aus Quellen nehmen und am Ende der Seite einfügen
456// function checkFiles(arr, currentHost){
457//   if(runExecution){
458//     setTimeout(function() {
459//       const resources = performance.getEntriesByType("resource");
460//       const currentHostname = currentHost;
461//       var val = "";
462//       resources.forEach((resource) => {
463//         const url = new URL(resource.name)
464//         if (url.host !== currentHostname) {
465//             arr.push(resource.name)
466//             val = String(resource.name)
467//             jQuery('.externFiles').append('<li>"' + val + '"</li>')
468//           }
469//       });
470//     }, 100);
471//   }
472// }
473
474var currentValI=0;
475var currentValX=0;
476
477var val1=false;
478var val2=false;
479var finishExe = false;
480var finishExeAlt = false;
481var interLength, externLength
482
483//Jeden Link aufrufen und checken
484function checkLink(element, page, version, allElements){
485    //Array mit allen vorhandenen URLs auf der Seite erstellen
486    if(runExecution){
487      console.log('inside')
488      var urlElements = [];
489      jQuery(element, page).each(function(x){
490        if(jQuery(this).attr('href') != 'undefined'){
491          urlElements.push(jQuery(this).attr('href'))
492        }
493      })
494    }
495
496    console.log(urlElements != undefined)
497    
498    if(version == "intern"){
499      var arrLength = urlElements.length * 2
500      if(urlElements.length == 0){
501        first=true
502        checkURLs(currentValI, urlElements, version, allElements)
503      }
504      for (i=0; i<=arrLength; i++){
505        if(finishExe){
506          break;
507        }
508        setTimeout(function() {
509          if(runExecution){
510            console.log('inside ' + currentValI + ' and ' + i, urlElements)
511            if(currentValI < urlElements.length){
512              checkURLs(currentValI, urlElements, version, allElements)
513              currentValI = currentValI + 1
514            }
515            if(finishExe){
516              console.log('done with all Links')
517            }
518            if(first){
519              console.log('done with all intern Links')
520            }
521          }
522        }, 5000 * i);
523      }
524    }
525      
526    if(version == "extern"){
527      var arrLength = urlElements.length * 2
528      if(urlElements.length == 0){
529        second=true
530        checkURLs(currentValI, urlElements, version, allElements)
531      }
532      for (x=0; x<arrLength; x++){
533        if(finishExe){
534          break;
535        }
536        setTimeout(function() {
537          if(runExecution){
538            console.log('inside ' + currentValX + ' and ' + x)
539            if(currentValX < urlElements.length){
540              checkURLs(currentValX, urlElements, version, allElements)
541              currentValX = currentValX + 1
542            }
543            if(finishExe){
544              console.log('done with all Links')    
545            }
546            if(second){
547              console.log('done with all extern Links')
548            }
549          }
550        }, 5000 * x);
551      }    
552    }  
553} 
554var percentPrev
555
556//Progress anzeigen
557function showProgress(i, url){
558  var currentPage = i + 1
559  if(currentPage < url.length){
560    percentPrev = (100 / url.length) * (currentPage)
561    document.getElementById("myBar").style.width = percentPrev + '%'
562    jQuery('#myBar span').text(Math.round(percentPrev) + '%')
563  }
564  if(currentPage == url.length){
565    document.getElementById("myBar").style.width = 100 + '%'
566    jQuery('#myBar span').text('100%')
567  }  
568}
569
570
571function checkURLs(zVar, urlElements, version, allURLs){
572  console.log('test')
573
574      console.log('Checking: ', version, zVar, urlElements[zVar], runExecution)
575
576      if(version == "intern"){
577        val1=false;
578        checkStatusIntern(urlElements[zVar])
579        console.log(zVar, urlElements.length)
580        if(zVar == (urlElements.length-1) || urlElements.length == 0){
581            console.log('done intern')
582            first = true
583        }
584      }
585      if(version == "extern"){
586        jQuery('script.checkStatus').remove()
587        if(urlElements.length != 0){
588          val2=false;
589          checkStatusExtern(urlElements[zVar])
590        }
591        if(zVar == (urlElements.length-1) || urlElements.length == 0){
592            console.log('done extern')
593            second = true
594        }
595      }
596      xVar = xVar + 1
597      showProgress(xVar, allURLs)     
598      if(first && second){
599        finishExe = true;
600        runExecution = false;
601        setTimeout(function() {
602          jQuery('.loader-container').css('display', 'none')
603          jQuery('.loader-container').css('visibility', 'hidden')
604          jQuery('.loader-container').attr('aria-hidden', 'true')
605          
606          jQuery('script.checkStatus').remove()
607          jQuery('.check-modal-link').addClass('show')
608                  
609          jQuery('.check-modal-link').removeClass('hide')
610
611          // if(jQuery('.defectAlt').children().length == 0){
612          //   jQuery('.defectAlt').append('<li>keine Bilder ohne Alternativtexte gefunden</li>')
613          // }
614          // if(jQuery('.externFiles').children().length == 0){
615          //   jQuery('.externFiles').append('<li>keine Externe Einbindungen gefunden</li>')
616          // }
617          if(jQuery('.defectLinks').children().length == 0){
618            jQuery('.defectLinks').append('<li>keine Defekten Links gefunden</li>')
619          }
620
621          jQuery('.openNewWindow button').click(function(){
622            var opened = window.open("");
623            opened.document.write("<html><head><title>Ergebnisse</title></head><body>" + jQuery('.check-modal-link .check-modal--inner')[0].innerHTML + "</body></html>");
624          })
625        }, 2000);
626      }
627}
628
629//Interne Links checken
630function checkStatusIntern(link){
631    return jQuery.ajax({
632        type: 'GET',
633        dataType: 'json',
634        contentType: 'application/json; charset=utf-8',
635        data: {},
636        url: link,
637        error: function (jqXHR, textStatus, errorThrown) {
638          if(jqXHR.status == 200){
639            val1=true;
640            console.log("worked" + val1)
641            // jQuery('a[href="' + link + '"]').css('color', 'green')
642            // jQuery('a[href="' + link + '"]').css('font-weight', 'bold')  
643          }
644          else{
645            val1=true;
646            console.log("defect" + val1)
647            // jQuery('a[href="' + link + '"]').css('color', 'red')
648            // jQuery('a[href="' + link + '"]').css('font-weight', 'bold')
649            jQuery('.defectLinks').append('<li>Intern: <a href="' + link + '">' + link + '</a></li>')
650          }
651        },
652        success: function (data) {
653        }
654    });
655}
656  
657  //Externe Links checken
658  function checkStatusExtern(link){
659    // console.log('in')
660    // return jQuery.ajax({
661    //   type: 'GET',
662    //   data: {},
663    //   dataType: 'jsonp',
664    //   contentType: 'application/json; charset=utf-8',
665    //   url: link,
666    //   error: function (jqXHR, textStatus, errorThrown) {
667    //     console.log(jqXHR.status, jqXHR)
668    //     if(jqXHR.status == 200){
669    //       console.log("worked")
670    //       jQuery('a[href="' + link + '"]').css('color', 'green')
671    //       jQuery('a[href="' + link + '"]').css('font-weight', 'bold')
672    //     }
673    //     else{
674    //       console.log("defect")
675    //       jQuery('a[href="' + link + '"]').css('color', 'red')
676    //       jQuery('a[href="' + link + '"]').css('font-weight', 'bold')
677    //       jQuery('.defectLinks').append('<li><a href="' + link + '">Extern: ' + link + '</a></li>')
678    //     }
679    //   },
680    //   success: function (data) {
681    //     console.log(data);
682    //   }
683    // });
684    // console.log(link)
685    // link = link.replace("ü", "ue").replace("ö", "oe").replace("ä", "ae").replace("ß", "ss")
686    // setTimeout(function() {
687    //   var el = document.createElement('script');
688    //   el.classList.add('checkStatus')
689    //   el.src = link;
690    //   el.onerror =  function (msg) {
691    //     console.log(msg)
692    //     // jQuery('a[href="' + link + '"]').css('color', 'red')
693    //     // jQuery('a[href="' + link + '"]').css('font-weight', 'bold')
694    //     jQuery('.defectLinks').append('<li>Extern: <a href="' + link + '">' + link + '</a></li>')
695    //   }
696    //   el.onerror =  function (msg) {
697    //     console.log(msg)
698    //     // jQuery('a[href="' + link + '"]').css('color', 'red')
699    //     // jQuery('a[href="' + link + '"]').css('font-weight', 'bold')
700    //     jQuery('.defectLinks').append('<li>Extern: <a href="' + link + '">' + link + '</a></li>')
701    //   }
702    //   document.body.appendChild(el);
703    //   val2=true
704    // }, 1000);
705    fetch(link)
706    .then(response => {
707      console.log('HTTP Status:', response.status, response.statusText);
708  
709      // Check for non-successful HTTP status codes
710      if (!response.ok) {
711        throw new Error(`HTTP Error: ${response.status} ${response.statusText}`);
712      }
713  
714      return response.text();  // or response.json() depending on the expected response type
715    })
716    .then(data => {
717      // Handle successful response
718      console.log('Success:');
719    })
720    .catch(error => {
721      // Handle other errors, including HTTP errors
722      console.error('Fetch Error:', error.message);
723    });
724  
725    setTimeout(function() {
726      checkStatus(link)
727    }, 500);  
728  }
729
730  function checkStatus(link){
731    var performanceEntries = performance.getEntriesByType("resource");
732    var croplink = link.replace(/(^\w+:|^)\/\//, '')
733    var currentPerformance = performanceEntries.findIndex(x => x.name.includes(croplink))
734    var status = performanceEntries[currentPerformance].responseStatus
735    var duration = performanceEntries[currentPerformance].duration
736    var name = performanceEntries[currentPerformance].name
737    if(status == 0){
738      console.log(duration, name)
739      if(duration < 110){
740        jQuery('.defectLinks').append('<li>Extern: <a href="' + link + '">' + link + '</a></li>')
741      }
742    }
743  }
744  

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.