PageSourceSearch

https://www.iwwb.de/kurssuche/merkzettel_extra.js

js iwwb.de collected 2026-10-02 04:24:52 UTC 8,775 bytes, 305 lines download raw bytes

1// wegen strict mode
2
3(function() {
4
5"use strict";
6
7var container;
8var displayLimit;
9var mz={};
10var mzArray=[];      // das ist hier doppelt, eigentlich kann man dann doch auf das Objekt im globalen scope verzichten
11var numDisplayed=0;
12var debug=false;
13
14var letters=/[A-Za-zÄÜÖäüöß\-]/;
15var numbers=/[0-9]/;
16
17function displayWaiting() {
18  $("body").css("cursor", "progress");
19  $("body").append('<div id="overlay-disabled" style="background-color:rgba(0, 0, 0, 0.5);position:absolute;top:0;left:0;height:100%;width:100%;z-index:999"></div>');
20}
21
22function removeWaiting() {
23  $("body").css("cursor", "default");
24  $("#overlay-disabled").remove();
25}
26
27function synchronizeWatchlist() {
28  // daten abgleichen, localstorage neu speichern,
29  // anschließend neu laden der gesamten seite
30  displayWaiting();
31  alert("Achtung: Ihre Merkliste enthält Datensätze, die auf dem Server gelöscht wurden.\nDiese Datensätze werden nun aus Ihrer Merkliste entfernt.");
32
33  $.post('/kurssuche/getValidWatchlistEntries.php?json_ids='+encodeURIComponent(JSON.stringify(mzArray)),
34	 function (data, status) {
35	   mzArray=data;
36	   mz={};
37	   for(let i=0; i<mzArray.length; i++) {
38	     mz[mzArray[i]]="1";
39	   }
40	   localStorage.merkzettel = JSON.stringify(mz);
41	   removeWaiting();
42	   window.location.replace(window.location.href);
43
44	 }).done(function() { removeWaiting(); }).fail(function(jqxhr, settings, ex) { removeWaiting(); }) ;
45}
46
47function handleFetchWatchlistInfo( data, mode=0 ) {
48  // mode=0: prepend
49  // mode=1: append
50
51
52  let entry;
53  for (let i=0; i<data.length; i++) {
54    let entry=data[i];
55    //console.log(entry);
56    let id=cleanId(entry.id);
57    let dd;
58
59    if (entry.removed) {
60      if (debug) console.log("datensatz "+entry.id+" geloescht");
61      synchronizeWatchlist();
62    }
63
64    if (entry.supplier) {
65      // Kursdatensatz
66      dd=$('<dd>',{
67      'html': '<div>Anbieter: ' + entry.supplier + ' | Ort: '  + entry.city + '</div><div>Quelle: '+ entry.quelleName + '</div><div><strong class="a5-icon-calendar">' + entry.date + '<strong></div>',
68      'class': 'wlRechts',
69      'id': 'wlRechts-dd-'+id
70      });
71    }
72    else {
73      // Anbieterdatensatz
74      dd=$('<dd>',{
75	'html': entry.city ? '<div>Ort: '  + entry.city + '</div>' : '' + '<div>Quelle: '+ entry.quelleName + '</div>',
76	    'class': 'wlRechts',
77	    'id': 'wlRechts-dd-'+id
78      });
79    }
80
81    let dt=$('<dt>',{
82      'html': '<a href="' + entry.url + '">' + entry.title + '</a><a data-entryid="'+entry.id+'" class="a5-remove-button" href="#"><span class="ym-hideme">Eintrag löschen</span></a>',
83	  'class': 'wlRechts',
84	  'id': 'wlRechts-dt-'+id
85
86	  });
87
88    if (mode==0) {
89      dd.prependTo(container);
90      dt.prependTo(container);
91    }
92    else {
93      dt.appendTo(container);
94      dd.appendTo(container);
95    }
96
97    numDisplayed++;
98    if (debug) console.log("numDisplayed: "+numDisplayed);
99    // checkDisplayMehrAnzeigen();
100
101  }
102}
103
104function jjlog() {
105  if (debug) console.log("keys in merkzettel: "+mzArray);
106}
107
108function cleanId(id) {
109  let ret = id.replace(/(\W|_)/g,'-');
110  //console.log("ret=="+ret);
111  return ret;
112}
113
114function removeWatchlistEntryFromRightList(sId, autoAdd=true) {
115  if (debug) console.log("remove "+sId+" from list");
116  $("#wlRechts-dt-"+cleanId(sId)).remove();
117  $("#wlRechts-dd-"+cleanId(sId)).remove();
118  numDisplayed--;
119
120
121  if (autoAdd) {
122    let lastKeys=mzArray.slice(-numDisplayed-1);
123    if (lastKeys.length > numDisplayed) {
124      addWatchlistEntryToRightList(lastKeys[0], 1);
125    }
126  }
127  // checkDisplayMehrAnzeigen();
128}
129
130function removeFromMerkzettel(ent, checkContentStars) {
131  if (ent == "option-all") {
132    // alle entries der aktuellen seite vom merkzettel entfernen
133    if (debug) console.log("alle ausgewaehlt. loesche alle vom merkzettel");
134    localStorage.removeItem('merkzettel');
135    $("#merklistegesamt").remove();
136    // let oldLength=mzArray.length;
137    /*
138    mz=JSON.parse(localStorage.merkzettel);
139    mzArray=Reflect.ownKeys(mz);
140    for (i=0; i<mzArray.length; i++) {
141      console.log(mzArray[i]);
142      delete mz[mzArray[i]];
143      removeWatchlistEntryFromRightList(ent, false);
144    }
145    */
146/*
147    if (mzArray.length < oldLength) {
148      let numNew=mzArray.length-oldLength;
149
150      if (debug) console.log("remove "+numNew+" entries from watchlist");
151      localStorage.merkzettel = JSON.stringify(mz);
152*/
153      $(".mzAnzahl").html(0);
154      // localStorage.merkzettel= JSON.stringify(mz);
155      // rebuildWatchlistDisplay();
156//     }
157
158    return;
159  }
160
161  if (debug) console.log("remove entry "+ent);
162  delete mz[ent];
163  mzArray=Reflect.ownKeys(mz);
164  $(".mzAnzahl").html(mzArray.length);
165  localStorage.merkzettel= JSON.stringify(mz);
166  removeWatchlistEntryFromRightList(ent, false);
167  // jjlog();
168
169}
170
171function setSaveAsPdf() {
172  $('#saveaspdf').click(function(event) {
173    event.preventDefault();
174
175    let ids=mzArray.slice(0,numDisplayed);
176    let params = {
177      "asPDF": "y",
178      "anzahlTreffer":ids.length,
179      "ids": ids
180    };
181
182    $.ajax({
183        type: 'POST',
184        url: '/kurssuche/createPdf.php',
185        dataType: 'native',
186        xhrFields: {
187          responseType: 'blob'
188        },
189        data: params,
190        success: function(blob){
191          // console.log("blobsize: "+blob.size);
192
193          var filename = "iwwb_merkliste.pdf";
194          // console.log(filename);
195          var link=document.createElement('a');
196          link.href=window.URL.createObjectURL(blob);
197          link.download=filename;
198          document.body.appendChild(link);
199          link.click();
200          document.body.removeChild(link);
201
202     }
203      })
204
205      .fail(function(data) {
206        // Make sure that the formMessages div has the 'error' class.
207        if (typeof data.responseText !== 'undefined' && data.responseText !== '') {
208          alert('fail: '+data.responseText);
209        } else {
210          alert("Das PDF konnte nicht erzeugt werden.");
211        }
212      });
213  //return false;
214});
215}
216
217function setSubmitSendViaEmail() {
218  // behandlung in iwwb.dev.js (und anderswo) ausschalten - vielleicht doch besser dort entfernen ? JJ marker
219  $('.a5-merkliste').off('submit');
220  $('.a5-merkliste').submit(function(event) {
221      event.preventDefault();
222
223      let ids=mzArray.slice(0,numDisplayed);
224      for (let i=0; i<ids.length; i++) {
225	// console.log(i);
226	$('#hiddenFormFieldsSendViaEmail').append('<input type="hidden" name="ids[]" value="'+ids[i]+'" />');
227      }
228
229      var form = $('#sendviaemail');
230      var formData = $(form).serialize();
231      // console.log(formData);
232      $.ajax({
233        type: 'POST',
234        url: $(form).attr('action'),
235        data: formData
236      })
237
238      .done(function(response) {
239        alert(response);
240        // Clear the form.
241        $('#your-id').val('');
242        $('#message').val('');
243      })
244
245      .fail(function(data) {
246        // Make sure that the formMessages div has the 'error' class.
247        if (data.responseText !== '') {
248          alert(data.responseText);
249        } else {
250          alert("Die Email konnte nicht gesendet werden.");
251        }
252
253      });
254
255      return true; // return false to cancel form action
256    });
257
258}
259
260
261$(function() {
262    container = $('.a5-merkliste dl');
263    displayLimit=parseInt($('#contentForm').attr('data-limit'));
264
265    if (localStorage.merkzettel) {
266      // aufbauen des merkzettels rechte spalte
267      mz=JSON.parse(localStorage.merkzettel);
268      mzArray=Reflect.ownKeys(mz);
269      $(".mzAnzahl").html(mzArray.length);
270      if (debug) console.log(mzArray);
271      // JJ marker ich nehme keine arrays, da diese (wenn man nicht .includes() verwendet, was nicht mit allen
272      // browsern kompatibel ist) sonst jedesmal durchlaufen werden muessen (kein in_array())
273
274      // die reihenfolge im assoziativen array ist definiert (seit 2015?) als die reihenfolge
275      // der definition
276
277      // letzten elemente in normaler reihenfolge, wird jetzt umgekehrt angefuegt mit mode=0 parameter in handleFetchWatchlistInfo
278      let arr=mzArray.slice(-displayLimit);
279      // console.log(encodeURIComponent(JSON.stringify(arr)));
280      $.get('/kurssuche/getWatchlistInfo.php?json_ids='+encodeURIComponent(JSON.stringify(arr)),
281	    function(data) {
282	      handleFetchWatchlistInfo(data, 0);
283	    });
284    }
285
286    setSubmitSendViaEmail();
287    setSaveAsPdf();
288
289    // den old-school eventhandler nun ersetzt, da ansonsten die methode ausserhalb des scopes waere
290    $(document).delegate(".a5-remove-button", "click", function(event) {
291	event.preventDefault();
292	let id=$(this).attr('data-entryid');
293	// alert("remove clicked: "+id);
294	removeFromMerkzettel(id, false);
295      });
296
297    $('#merkzettelLoeschen').click(function(event) {
298	event.preventDefault();
299	removeFromMerkzettel('option-all', false);
300    });
301
302  });
303
304
305})();

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.