1/** #START# Tabs und Slider Template */ 2/** 3 * Wenn Option aus Pseudo Select ausgewählt 4 * 5 * @param dropdown HTML Select Element "this" angeben 6 */ 7window.showTab = function showTab( dropdown ){ 8 $('#' + dropdown).tab('show'); 9} 10 11/** 12 * Wenn oben auf Pills geklickt 13 * 14 * @param navPill button element der navigation "this" angeben 15 * @param selectID string ID des zu verknüpfenden Selects 16 */ 17window.selectSelectOptionForNavPill = function selectSelectOptionForNavPill(navPill, selectID){ 18 let select = document.getElementById(selectID); 19 select.children[0].innerHTML = navPill.innerHTML; 20 21 let selectItems = select.children[1].children; 22 23 for(let child = 0; child < selectItems.length; child++){ 24 if(selectItems[child].innerHTML !== navPill.innerHTML){ 25 selectItems[child].removeAttribute("hidden"); 26 selectItems[child].removeAttribute("class"); 27 } else { 28 selectItems[child].setAttribute("class", "pills-to-same-as-selected"); 29 selectItems[child].setAttribute("hidden", "hidden"); 30 } 31 } 32} 33 34/** 35 * Ein und ausblenden der custom Pseudo-Selectboxen 36 * 37 * @param selectElement html Element über "this" übergeben 38 */ 39window.toggleSelect = function toggleSelect(selectElement){ 40 selectElement.nextElementSibling.classList.toggle("pills-to-select-hide"); 41 selectElement.classList.toggle("pills-to-select-arrow-active"); 42} 43 44/** 45 * @param itemElement html Element über "this" übergeben 46 */ 47window.setSelectItem = function setSelectItem(itemElement){ 48 let displayItem = itemElement.parentNode.previousElementSibling; 49 let selectLength = itemElement.parentNode.children.length; 50 51 displayItem.innerHTML = itemElement.innerHTML; 52 53 for (let child = 0; child < selectLength; child++) { 54 if(itemElement !== itemElement.parentNode.children[child]){ 55 itemElement.parentNode.children[child].removeAttribute("hidden"); 56 itemElement.parentNode.children[child].removeAttribute("class"); 57 } 58 } 59 itemElement.setAttribute("class", "pills-to-same-as-selected"); 60 itemElement.setAttribute("hidden", "hidden"); 61 62 toggleSelect(displayItem); 63} 64 65/** 66 * Scrolling der Pill-Tabs 67 */ 68let scrollInterval; 69 70/** 71 * 72 * @param containerID 73 * @param buttonLeft 74 * @param direction 75 * @param speed Zeit zwischen dem erneuten Ausführen des Intervalls. Je kleiner die Zahl, umso schneller das Scrolling 76 */ 77window.startScroll = function startScroll(containerID, buttonLeft, direction, speed = 5) { 78 // simulating hold event 79 scrollInterval = setInterval(function() { 80 document.getElementById(containerID).scrollLeft += direction; 81 if(document.getElementById(containerID).scrollLeft === 0){ 82 document.getElementById(buttonLeft).style.display = "none"; 83 } else if(document.getElementById(containerID).scrollLeft > 20) { 84 document.getElementById(buttonLeft).style.display = "block"; 85 } 86 }, speed); 87} 88 89window.stopScroll = function stopScroll(){ 90 clearInterval(scrollInterval); 91} 92/** #END# Tabs und Slider Template */ 93 94/** 95 * allgemeine Hide / Visible Funktion 96 */ 97window.toggleElementHidden = function toggleElementHidden(id) { 98 let element = document.getElementById(id); 99 element.hidden = !element.hidden; 100} 101 102/** 103 * allgemeine Toggle Slide Funktion 104 */ 105window.toggleElementSlide = function toggleElementSlide(id, speed = 160, easing = 'linear') { 106 let element = $('#' + id); 107 element.slideToggle(speed, easing); 108} 109 110/** 111 * Funktion zum Ersetzen einer Klasse 112 * 113 * Base Klasse ist die StandardmäÃig gesetzte Klasse die im Tamplate eingetragen ist und change Klass bezeichnet die 114 * Klasse, zu der die Base Klasse gewechselt werden soll. 115 * 116 * @param element HTML Element (mit 'this' übergeben) 117 * @param baseClass String Klassenname 118 * @param changeClass String Klassenname 119 */ 120window.changeClass = function changeClass(element, baseClass, changeClass) { 121 if (element.classList.contains(baseClass)) { 122 element.classList.remove(baseClass); 123 element.classList.add(changeClass); 124 } else { 125 element.classList.remove(changeClass); 126 element.classList.add(baseClass); 127 } 128} 129 130 131window.ajaxTest = function ajaxTest(outputElement) { 132 $.get("/ajaxTest", function(data){ 133 $("#"+outputElement).html(data); 134 }); 135} 136 137/** 138 * Für Fahrtenplaner - StraÃenliste 139 * 140 * @param datalist 141 * @param searchQuery 142 */ 143window.fillDatalistWithHaconserviceSuggestions = function fillDatalistWithHaconserviceSuggestions(datalist, searchQuery){ 144 $.ajax({ 145 url: "/get_hacon_stations", 146 data: {query : searchQuery}, 147 dataType:"json", 148 success: function(response){ 149 150 console.log(response);
151 datalist.innerHTML=''; 152 fillDatalistWithArray(datalist, response) 153 } 154 }); 155} 156 157/** 158 * Fahrtenplaner Widget Form weiterleiten 159 */ 160window.sendFormFahrtenplaner = function sendFormFahrtenplaner(route, target, 161 startStationField = 'start-station', 162 endStationField = 'end-station', 163 dateField = 'date', 164 timeField = 'time', 165 timeSelField = 'timeSel') { 166 167 let startStation = encodeURI(document.getElementById(startStationField).value); 168 let endStation = encodeURI(document.getElementById(endStationField).value); 169 let date = encodeURI(document.getElementById(dateField).value); 170 let time = encodeURI(document.getElementById(timeField).value); 171 let timeSel = encodeURI(document.querySelector('input[name="'+timeSelField+'"]:checked').value); 172 173 let tempDate = new Date(); 174 if(date !== null && date !== ''){ 175 tempDate = new Date(date); 176 } 177 date = [tempDate.getDate(), tempDate.getMonth() + 1, tempDate.getFullYear()].join('.'); 178 179 window.open(route + 'TP&S=' + startStation + '&Z=' + endStation + '&date=' + date + '&time=' + time + '&timeSel=' + timeSel +'#HafasWebApp', target); 180} 181 182/** 183 * Haltestellen Widget Form weiterleiten 184 * (Abfahrtszeiten einer Haltestelle) 185 */ 186window.sendFormHaltestellen = function sendFormHaltestellen(route, target, 187 fromStationField = 'from-station', 188 dateField = 'from-date', 189 timeField = 'from-time') { 190 191 let fromStation = encodeURI(document.getElementById(fromStationField).value); 192 let date = encodeURI(document.getElementById(dateField).value); 193 let time = encodeURI(document.getElementById(timeField).value); 194 195 let tempDate = new Date(); 196 if(date !== null && date !== ''){ 197 tempDate = new Date(date); 198 } 199 date = [tempDate.getDate(), tempDate.getMonth() + 1, tempDate.getFullYear()].join('.'); 200 201 window.open(route + 'SQ&input=' + fromStation + '&date=' + date + '&time=' + time +'#HafasWebApp', target); 202} 203 204/** 205 * 206 * @param datalist html element of the datalist (this or getElement) 207 * @param array array wich elements will be converted to single datalist elements 208 */ 209window.fillDatalistWithArray = function fillDatalistWithArray(datalist, array){ 210 for (let element in array){ 211 let option = document.createElement('option'); 212 option.value = array[element]; 213 datalist.appendChild(option); 214 } 215} 216 217/** 218 * Tauscht die Werte von 2 Eingabefeldern Miteinander. 219 * Hierfor die ID's der beiden Elemente übergeben. 220 * 221 * @param firstElementID 222 * @param secondElementID 223 */ 224window.switchFieldValue = function switchFieldValue(firstElementID, secondElementID){ 225 let firstValue = document.getElementById(firstElementID).value; 226 let secondValue = document.getElementById(secondElementID).value; 227 228 document.getElementById(firstElementID).value = secondValue; 229 document.getElementById(secondElementID).value = firstValue; 230} 231 232$('#mainmenu') 233 234 // Das Event shown.bs.collapse wird beim Ãffnen der Bootstrap-Navbar ausgelöst 235 .on('shown.bs.collapse', function (event) { 236 if (event.target.id === 'mainmenu') { 237 // die Klasse overflow-hidden am BODY verhindert das Scrollen des normalen Inhalts, wenn die mobile Navbar offen ist 238 $('body').addClass('overflow-hidden'); 239 // die Klasse overflow-y-auto am #mainmenu sorgt für ein scrollbares Menü in der mobilen Version 240 $('#mainmenu').addClass('overflow-y-auto'); 241 } 242 }) 243 244 // Das Event hidden.bs.collapse wird beim SchlieÃen der Bootstrap-Navbar ausgelöst 245 .on('hidden.bs.collapse', function (event) { 246 if (event.target.id === 'mainmenu') { 247 $('body').removeClass('overflow-hidden'); 248 $('#mainmenu').removeClass('overflow-y-auto'); 249 } 250 }) 251; 252 253window.movingImageShowLink = function movingImageShowLink(linkID){ 254 document.getElementById(linkID).classList.add('text-primary'); 255} 256 257window.movingImageHideLink = function movingImageHideLink(linkID){ 258 document.getElementById(linkID).classList.remove('text-primary'); 259} 260 261/** 262 * Entfernt das hidden Attribut vom Element dessen ID übergeben wurde. 263 * 264 * @param elementID 265 */ 266window.showElement = function (elementID){ 267 $('#' + elementID).removeAttr('hidden'); 268} 269 270 271/** 272 * Fügt das hidden Attribut zum Element dessen ID übergeben wurde hinzu. 273 * 274 * @param elementID 275 */ 276window.hideElement = function (elementID){ 277 $('#' + elementID).attr('hidden', true); 278} 279 280/** 281 * Ãndert den value des Elementes mit der übergebenen ID auf den übergebenen Wert 282 * 283 * @param elementID 284 * @param value 285 */ 286window.setElementValue = function (elementID, value){ 287 document.getElementById(elementID).value = value; 288} 289 290/** 291 * Setzt innerhalb des Containers bei allen input elementen die das data-required attribute haben das attribute required 292 * oder nimmt es wieder weg. 293 * 294 * @param containerID 295 */ 296window.toggleRequiredElements = function (containerID){
297 let container = document.getElementById(containerID); 298 299 let inputs = container.getElementsByTagName('input'); 300 301 Array.from(inputs).forEach(function (element){ 302 if (element.hasAttribute('data-required')){ 303 element.required = !element.required; 304 } 305 }) 306 307 let selects = container.getElementsByTagName('select'); 308 309 Array.from(selects).forEach(function (element){ 310 if (element.hasAttribute('data-required')){ 311 element.required = !element.required; 312 } 313 }) 314} 315 316/** 317 * Ãberträgt den übergebenen Wert als innerHTML an das element mit der übergebenen ID 318 * 319 * @param value 320 * @param elementID 321 */ 322window.transferValueToInnerHTML = function (value, elementID){ 323 document.getElementById(elementID).innerHTML = value; 324} 325 326/** 327 * Teilt die IBAN bei eingabe automatisch in 4er-Blöcke mit Leerzeichentrennung auf 328 * @param field html element des Feldes das getrennt werden soll (this) 329 */ 330window.autoSpaceIBAN = function (field){ 331 field.value = field.value.replace(/[^\da-zA-Z]/g, '').replace(/(.{4})/g, '$1 ').trim(); 332} 333 334/** 335 * Blendet ein über die ID verknüpftes html element beim Auswählen einer select option ein und alle anderen verknüpften 336 * Elemente aus. 337 * Die Verknüpfung zwischen der Select-Option und dem HTML Element erfolgt über das Pseudoattribute "linked-element='[Element-ID]'" innerhalb der select option 338 * 339 * @param select 340 */ 341window.selectToggleLinkedElements = function (select) { 342 Array.from(select.options).forEach(function (option) { 343 if (option === select.options[select.selectedIndex]){ 344 document.getElementById(option.getAttribute('linked-element')).hidden = false; 345 } else { 346 document.getElementById(option.getAttribute('linked-element')).hidden = true; 347 } 348 }); 349} 350 351/** 352 * Ãberprüft ob der im Inputfeld eingegeben Wert innerhalb des zugehörigen datalist Element vorhenden ist, zeigt ggf. 353 * eine Feglermeldung an und setzt den Eingabewert zurück. 354 * 355 * @param inputElement 356 * @param feedbackElement 357 */ 358window.requireElementFromDatalist = function (inputElement, feedbackElement) { 359 let datalist = document.getElementById(inputElement.getAttribute('list')); 360 let value = inputElement.value; 361 362 if (value !== '' && !valueInDatalist(value, datalist)) { 363 feedbackElement.classList.remove('d-none'); 364 feedbackElement.classList.add('d-block'); 365 feedbackElement.innerHTML = 'Bitte wählen Sie einen Eintrag aus der Liste aus.'; 366 367 inputElement.value = ''; 368 } else { 369 feedbackElement.classList.remove('d-block'); 370 feedbackElement.classList.add('d-none'); 371 feedbackElement.innerHTML = ''; 372 } 373} 374 375/** 376 * Ãberprüft ob der übergebene Wert eine der Options des übergebenen datalist Elements ist. 377 * 378 * @param value 379 * @param datalist 380 * @returns {boolean} 381 */ 382window.valueInDatalist = function (value, datalist){ 383 if(document.querySelector("#" + datalist.id + " option[value='" + value + "']") === null){ 384 return false; 385 } 386 387 return true; 388}
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.