1window.onload = (event) => { 2 3 document.querySelectorAll('body script').forEach((script) => { 4 script.classList.add('rs_skip_always'); 5 }); 6 7 let elements = document.querySelectorAll('a:not(.wpfd-container .file_download_tbl a):not(.no-docreader)'); 8 9 let elementsToAppend = []; 10 let supportedDocumentTypes = ['.odp', '.ods', '.odt', '.epub', '.xls', '.xlsx', '.pps', '.ppt', '.pptx', '.doc', '.docx', '.pdf', '.rtf']; 11 for (let element of elements) { 12 13 // check if path endswith pdf 14 let isDocument = endsWithAny(supportedDocumentTypes, element.href); 15 if (isDocument && element.innerHTML) { 16 elementsToAppend.push(element); 17 } 18 } 19 20 for (let element of elementsToAppend) { 21 let anchor = document.createElement('a'); 22 let string = "https://docreader-eu.readspeaker.com/docreader/?cid=13950&lang=de_de&url=" + encodeURIComponent(element.href); 23 anchor.target = '_blank'; 24 anchor.href = string; 25 anchor.rel = 'nofollow'; 26 anchor.onclick = "window.open(this.href, 'dcrwin'); return false;"; 27 anchor.title = 'Dieses Dokument mit ReadSpeaker docReader öffnen'; 28 anchor.style.marginLeft = '0.6rem'; 29 anchor.classList.add('docreader-button', 'pe-auto', 'text-nowrap', 'text-black'); 30 anchor.innerHTML = '<img src="/wp-content/themes/cv-bootscore-child/assets/img/icon/readspeaker.svg" alt="ReadSpeaker"><span>Vorlesen</span>'; 31 element.after(anchor); 32 } 33 34 document.addEventListener('show.bs.offcanvas', function(event) { 35 document.body.classList.add('offcanvas-visible'); 36 }); 37 38 document.addEventListener('hide.bs.offcanvas', function(event) { 39 document.body.classList.remove('offcanvas-visible'); 40 }); 41} 42 43function endsWithAny(suffixes, string) { 44 return suffixes.some(function (suffix) { 45 return string.endsWith(suffix); 46 }); 47}
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.