1let fp_eg_mode = 0; // 0: slideshow, 1: detailansicht 2let fp_eg_timeoutId = -1; 3let fp_eg_lastDatensatzId = -1; 4/** 5 * Startet den Slider 6 */ 7$(document).ready(function() { 8 if($('.tx-fp-erinnerungsgarten').length) { 9 setTimeout(fp_eg_slideNamesStart, 2000); 10 } 11}) 12 13// Normale Steuerung verwalten 14$(document).on("click", '.tx-fp-erinnerungsgarten .person', function(e) { 15 const id = $(this).attr("data-id"); 16 fp_eg_showDatensatz_delayed(id); 17 return false; 18}); 19$('#namenSlider').click(function() { 20 const id = fp_eg_lastDatensatzId; 21 fp_eg_showDatensatz_delayed(id); 22 return false; 23}); 24$('#container .img').click(function(e) { 25 if(!$(e.target).hasClass("person")) { 26 fp_eg_reset(); 27 } 28 return false; 29}); 30$('#personContainer .controls .close').click(function() { 31 fp_eg_reset(); 32 return false; 33}); 34 35/** 36 * Zoomt auf den Punkt einer bestimmten Person um diese anzuzeigen 37 * @param personId Die Id aus dem Array personen 38 */ 39function fp_eg_showDatensatz_delayed(datensatzId) { 40 if(fp_eg_mode) { 41 return false; 42 } 43 fp_eg_mode = 1; 44 fp_eg_slideNamesStop(); 45 setTimeout(function() { 46 fp_eg_showDatensatz(datensatzId, true); 47 }, 1500); 48} 49function fp_eg_showDatensatz(datensatzId, ignoreMode) { 50 if(fp_eg_mode && !ignoreMode) { 51 return false; 52 } 53 fp_eg_mode = 1; 54 const datensatz = datensaetze[datensatzId]; 55 //console.log("Datensatz mit der Id " + datensatzId + " und folgenden Daten anzeigen:"); 56 //console.log(datensatz); 57 58 // Breite des Containers ermitteln 59 const widthContainer = Number($('#container').css("width").replace("px", "")); 60 const heightContainer = Number($('#container').css("height").replace("px", "")); 61 62 // Position innerhalb des Containers ermittelnt 63 const positionX = widthContainer * datensatz.left / 100; 64 const positionY = heightContainer * datensatz.top / 100; 65 66 // Ansicht anpassen 67 fp_eg_zoomAndBlur(globalZoomLevel, globalBlurLevel); 68 $('#container .img').css({ 69 "margin-left" : ((widthContainer / 2) - positionX * globalZoomLevel), 70 "margin-top" : ((heightContainer / 2) - positionY * globalZoomLevel) 71 }); 72 73 // Infobox aufrufen 74 switch(datensatz.art) { 75 case 0: $('#personContainer .title').html("Person"); break; 76 case 1: $('#personContainer .title').html("Ehepaar"); break; 77 } 78 const personen = $('#personContainer .personen'); 79 personen.html(""); 80 datensatz.personen.forEach(function (person) { 81 let html = '<table class="table"><tbody><tr><th colspan="2" class="name">' + person.titel + ' ' + person.vorname + ' ' + person.nachname + '</th></tr>'; 82 if(person.ort != "") { 83 html += '<tr><td colspan="2" class="ort">' + person.ort + '</td></tr>'; 84 } 85 if(person.geburtstag != "" || person.sterbetag != "") { 86 html += '<tr>'; 87 if(person.geburtstag != "") { 88 if(person.sterbetag != "") { 89 html += '<td class="geburtstag">* ' + person.geburtstag + '</td>'; 90 html += '<td class="sterbetag">† ' + person.sterbetag + '</td>'; 91 } else { 92 html += '<td class="geburtstag" colspan="2">* ' + person.geburtstag + '</td>'; 93 } 94 } else { 95 html += '<td class="sterbetag" colspan="2">† ' + person.sterbetag + '</td>'; 96 } 97 html += '</tr>'; 98 } 99 html += '</tbody></table>'; 100 personen.append(html); 101 }); 102 $('#personContainer').delay(300).fadeIn(); 103} 104 105/** 106 * Zoomt und verpixelt das Bild 107 * @param zoomLevel int 108 * @param blurLevel int 109 */ 110function fp_eg_zoomAndBlur(zoomLevel, blurLevel) { 111 const widthContainer = Number($('#container').css("width").replace("px", "")); 112 const heightContainer = Number($('#container').css("height").replace("px", "")); 113 $('#container .img').css({ 114 "width" : widthContainer * zoomLevel, 115 "height" : heightContainer * zoomLevel, 116 "filter" : "blur(" + blurLevel + "px)" 117 }); 118} 119 120/** 121 * Setzt die Ansicht zurück 122 */ 123function fp_eg_reset() { 124 if(!fp_eg_mode) { 125 return false;
126 } 127 fp_eg_mode = 0; 128 $('#personContainer').fadeOut(); 129 $('#container .img').delay(200).queue(function() { 130 $(this).css({ 131 "margin-left" : 0, 132 "margin-top" : 0, 133 "filter" : "blur(0)", 134 "width" : "100%", 135 "height" : "100%" 136 }); 137 $(this).dequeue(); 138 }).delay(2000).queue(function() { 139 fp_eg_slideNamesStart(); 140 $(this).dequeue(); 141 }); 142} 143 144/** 145 * Lässt die Namen rein und rausfliegen 146 */ 147function fp_eg_slideNamesStart() { 148 const slider = $('#namenSlider'); 149 slider.removeClass("inAction"); 150 slider.removeClass("inFront"); 151 152 // Datensatz und Personen ermitteln 153 const datensatzId = fp_eg_getRandomRecord(fp_eg_lastDatensatzId); 154 fp_eg_lastDatensatzId = datensatzId; 155 const datensatz = datensaetze[datensatzId]; 156 const names = fp_eg_getAllPersonsOfRecord(datensatzId); 157 //console.log("Datensatz mit der Id " + datensatzId + " ermittelt."); 158 $('#namenSlider .name').html(names.join("<br>")); 159 //console.log("Folgende Daten wurden eingelesen:"); 160 //console.log(names); 161 162 // Breite des Containers ermitteln 163 const widthContainer = Number($('#container').css("width").replace("px", "")); 164 const heightContainer = Number($('#container').css("height").replace("px", "")); 165 // Punkt des Datensatzes ermitteln 166 const positionX = widthContainer * datensatz.left / 100; 167 const positionY = heightContainer * datensatz.top / 100; 168 169 170 // MaÃe des Sliders berechnen 171 slider.css({ 172 width: "", 173 height: "" 174 }); 175 slider.addClass("inFront"); 176 const sliderWidth = slider.css("width").replace("px", ""); 177 const sliderHeight = slider.css("height").replace("px", ""); 178 slider.removeClass("inFront"); 179 180 // Start und Endposition des Sliders berechnen 181 const sliderPositionStartX = positionX - (sliderWidth / 2); 182 const sliderPositionStartY = positionY - (sliderHeight / 2); 183 // Frontposition des Sliders ermitteln 184 const sliderPositionFrontX = widthContainer / 2 - (sliderWidth / 2);
185 const sliderPositionFrontY = heightContainer / 2 - (sliderHeight / 2); 186 187 // Name Sliden 188 $('#namenSlider').css({ 189 width: sliderWidth, 190 height: sliderHeight, 191 left : sliderPositionStartX + "px", 192 top : sliderPositionStartY + "px" 193 }); 194 setTimeout(function(){ 195 // Name einblenden 196 slider.addClass("inAction"); 197 slider.addClass("inFront"); 198 $('#namenSlider').css({ 199 left : sliderPositionFrontX + "px", 200 top : sliderPositionFrontY + "px" 201 }); 202 203 fp_eg_timeoutId = setTimeout(function(){ 204 // Name ausblenden 205 slider.removeClass("inFront"); 206 $('#namenSlider').css({ 207 left : sliderPositionStartX + "px", 208 top : sliderPositionStartY + "px" 209 }); 210 // Neu starten 211 fp_eg_timeoutId = setTimeout(function() { 212 fp_eg_slideNamesStart(); 213 }, 3000); 214 }, 5000); 215 }, 1); 216} 217function fp_eg_slideNamesStop() { 218 const slider = $('#namenSlider'); 219 clearTimeout(fp_eg_timeoutId); 220 slider.removeClass("inFront"); 221} 222 223function fp_eg_getRandomRecord(mayNot) { 224 let datensatzId = -1; 225 do { 226 datensatzId = Math.floor(Math.random() * datensaetze.length); 227 } while(datensatzId == mayNot); 228 return datensatzId; 229} 230function fp_eg_getAllPersonsOfRecord(recordId) { 231 const record = datensaetze[recordId]; 232 // Alle Namen einlesen 233 const names = []; 234 record.personen.forEach(function(person) { 235 const name = { 236 noTitle : (person.vorname + " " + person.nachname).trim(), 237 full : (person.titel + " " + person.vorname + " " + person.nachname).trim() 238 } 239 names.push(name); 240 }); 241 // Komplette Namen zurückgeben 242 const returnArray = []; 243 names.forEach(function(name) { 244 returnArray.push(name.full); 245 }); 246 return returnArray; 247} 248 249 250 251
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.