PageSourceSearch

https://qisweb.icms.hwg-lu.de/qisserver/pub/js/lsfpageobserver_functions.js

js hwg-lu.de collected 2026-10-02 16:47:41 UTC 16,500 bytes, 427 lines download raw bytes

1/*
2  @description:
3		Funktionen für den lsfpageobserver definieren.
4		Um eine neue Funktion hinzuzufügen, geben Sie folgenden Eintrag an:
5		lsfPageObserver_parameterList.push({'name':<Funktionsname>,'params':<Parameterliste als HashMap>})
6		
7		Anschließend definieren Sie ihre Funktion, die sie bereits als Funktionsname definiert haben.
8		
9	@author: [email protected]
10*/
11var lsfPageObserver_parameterList = new Array()
12lsfPageObserver_parameterList.push({'name':'markierteTermineVormerken','params':{'state':'wplan','search':'ver','act':'add'}})
13lsfPageObserver_parameterList.push({'name':'pruefeLoginWerte','params':{'state':'user','type':'0'}})
14lsfPageObserver_parameterList.push({'name':'pruefeLoginWerte','params':{'state':'user','type':'1'}})
15lsfPageObserver_parameterList.push({'name':'pruefeLoginWerte','params':{'state':'wlogin'}})
16
17//Sicherheitslückenproblem, deshalb auskommentiert
18//lsfPageObserver_parameterList.push({'name':'zurueckButtonBelegungsplan','params':{'state':'wplan','act':'Raum','pool':'Raum','P.subc':'plan'}})
19//lsfPageObserver_parameterList.push({'name':'zurueckButtonEvent','params':{'state':'change','type':'2','isparent':'y'}})
20lsfPageObserver_parameterList.push({'name':'raumanfrageEmailCheck','params':{'state':'extendedRoomSearchAnfrage','type':'1','next' : 'extendedRoomSearch.vm'}})
21
22//Sicherheitslückenproblem, deshalb auskommentiert
23//lsfPageObserver_parameterList.push({'name':'semesterSwitchSavePage','params':{}})
24//lsfPageObserver_parameterList.push({'name':'semesterSwitch','params':{'state':'change','type':'6','moduleParameter' : 'semesterSelect', 'nextdir' : 'change','next' : 'SearchSelect.vm','subdir':'applications','targettype':'7','targetstate':'change','getglobal' : 'semester'}})
25
26lsfPageObserver_parameterList.push({'name':'veranstaltungenAdditionalinfo','params':{state : 'wscheck', 'wscheck' : 'leistungen'}})
27
28lsfPageObserver_parameterList.push({'name':'timeoutinfo','params':{}})
29//Text-Diff nur für Protokollseiten
30//lsfPageObserver_parameterList.push({'name':'textdiff','params':{state: 'verpublish', publishSubDir: 'veranstaltung', moduleCall: 'webProt'}})
31//In der veransttermin, wird bei Rythmus woch nu Mo-Fr. in der Wochenanzeige angezeigt.
32// deaktiviert
33//lsfPageObserver_parameterList.push({'name':'montagBisFreitag','params':{state: 'change', moduleParameter: 'veransttermin', parentModuleParameter: 'veranstaltung'}})
34lsfPageObserver_parameterList.push({'name':'sortTableByBeginTime','params':{'state':'pdfplan', 'moduleCall' : 'freePositionHeutigeVeranstaltungen'}})
35lsfPageObserver_parameterList.push({'name':'semesterDropdown','params':{}})
36lsfPageObserver_parameterList.push({'name':'checkAllCheckboxes','params':{state : 'change','moduleParameter' : 'veranstaltungen'}})
37lsfPageObserver_parameterList.push({'name':'checkAllCheckboxes','params':{state : 'change','moduleParameter' : 'veransttermin'}})
38lsfPageObserver_parameterList.push({'name':'checkAllCheckboxes','params':{state : 'change','moduleParameter' : 'studiengaenge'}})
39lsfPageObserver_parameterList.push({'name':'setCopyLectures2','params':{state : 'change','moduleParameter' : 'veranstaltung', 'change_mode' : 'copylectures'}})
40lsfPageObserver_parameterList.push({'name':'printVeranstaltungen','params':{state: 'currentLectures', 'P.Print': ''}})
41
42
43
44var markierteTermineVormerken = function(lsfpageobserver){
45	$( document ).ready(function() {
46				if ($('select[name="week"] option:selected').val() != '-2' && $('td[class="plan2"]').size() == 0){
47					var ok = confirm(lsfpageobserver.lsfObserverLanguage.getLangText('_mtv_'))
48					if (ok){
49						document.location.href = document.location.href + "&week=-2"
50					}
51				}
52		})
53}
54/*
55 * Login Werte auf keine Einträge überprüfen
56 */
57var pruefeLoginWerte = function(lsfpageobserver){
58
59	var benutzerkennung = $('input[id="asdf"]')
60	var passwort = $('input[id="fdsa"]')
61	var form = $('form[name="loginform"]')
62
63	if (benutzerkennung.size() > 0 && passwort.size() > 0 && form.size() > 0){
64		form.submit(function( event ) {
65			if (benutzerkennung.val().trim().length == 0 || passwort.val().trim().length == 0){
66				alert(lsfpageobserver.lsfObserverLanguage.getLangText('_login_'))
67				event.preventDefault();
68			}
69		})
70	}
71}
71
72/*
73 * Speichern der Href Position für Zurück Button
74 */
75var zurueckButtonBelegungsplan = function(lsfpageobserver){
76	
77	//?state=wplan&act=Raum&pool=Raum&P.subc=plan&raum.rgid=10073&idcol=raum.rgid&idval=10073&purge=n&getglobal=n&text=AC-Institutsgebäude+-+10++(Lehrlabor)
78	lsfpageobserver.createCookie('zurueckButtonBelegungsplan',document.location.href);
79}
80/*
81 * Zurück Button in  Veranstaltung und bei Klick, Sprung auf den Belegungsplan
82 */
83var zurueckButtonEvent = function(lsfpageobserver){
84	//http://localhost:8080/qisserver/rds?state=change&type=2&moduleParameter=event&nextdir=change&next=SingleInput.vm&sqlmode=new&subdir=veranstaltung&isparent=y&raum=10073&day=Mo&begin=7:00&week=&ignorecheckfor=y&headertext=Neue+Veranstaltung+am+Mo+ab+7%3A00+Uhr+in+AC-Institutsgeb%C3%A4ude+-+10++%28Lehrlabor%29&asi=ZtxkoLd5jhqxtQJXgtDT
85	var url = lsfpageobserver.readCookie('zurueckButtonBelegungsplan');
86	if (url != null){
87		var bread = $('div.breadcrumb > a').text()
88		if (bread.indexOf("Raumbelegung") > 0 || bread.indexOf("Reservations") > 0){
89			var html = '<input class="linkAsButton" type="button" onclick="javascript:document.location.href=\''+url+'\'" value="'+lsfpageobserver.lsfObserverLanguage.getLangText("Zurück")+'"/>'
90			var cont = $('form > div:last-child');
91				cont.prepend(html)
92		}
93	}	
94}
95/*
96 * Raumanfrage: Wenn Raumverwalter keine Email haben und oder diese nicht aktiv sind, wird eine Fehlemldung ausgegeben.
97 */
98var raumanfrageEmailCheck = function(lsfpageobserver){
99	$('input[type="checkbox"]').click(function() {
100		$('div[id="emailwarning"]').remove();
101		found = false
102		$('input[type="checkbox"]:checked').each(function() {
103			var raumverwalter = $(this).parent().parent().find('td:eq(4)')
104			if (raumverwalter.html().toLowerCase().indexOf(">email") > -1){
105				found = true;
106				return true;
107			}			
108		})
109		if (found){
110			var text = lsfpageobserver.lsfObserverLanguage.getLangText("_raumverwalteremail_")
111			$('input[name="RoomSearch_RoomRequest"]').before("<div class='redcolor' id='emailwarning'>"+text+"</div>");
112		}
113	})
114}
115/*
116 * Für den Semesterwechsel(oben rechts) wird jede Seite, die zuvor geöffnet wurde gespeichert.
117 */
118var semesterSwitchSavePage = function(lsfpageobserver){
119	var linkToBelegungsplan = lsfpageobserver.readCookie('semesterSwitch');
120	if (linkToBelegungsplan == null || document.location.href.indexOf('state=change&type=6&moduleParameter=semesterSelect&nextdir=change&next=SearchSelect.vm&subdir=applications&targettype=7&targetstate=change&getglobal=semester') == -1){
121		lsfpageobserver.createCookie('semesterSwitch',document.location.href);
122		//alert("erstellt")
123	}
124}
125/*
126 * Änderung der a Tags mit Javascript Ajax Switch
127 */
128var semesterSwitch = function(lsfpageobserver){
129	var linkToBelegungsplan = lsfpageobserver.readCookie('semesterSwitch');
130	if (linkToBelegungsplan != null){
131		$('div.content > fieldset > div > a').each(function(){
132			var href = $(this).attr('href')
133			var link = "javascript:semesterSwitchHandle('"+href+"')";
134			$(this).attr('href',link)
135		})
136	}
137}
138/*
139 * Ausführen des Ajax Requests, der durch einen Klick Event, die zuvor geänderten a Tags, ausgelöst wurde.
140 */
141var semesterSwitchHandle = function(link){
142	var linkToBelegungsplan = readCookie('semesterSwitch');
143	if (linkToBelegungsplan != null){
144		var request = $.ajax( link )
145			.done(function() {
146				document.location.href = linkToBelegungsplan
147			})
148			.fail(function() {
149				alert( "Ein Javascript Fehler ist aufgetreten." );
150			})
151	}
152}
153
154var readCookie = function(name) {
155	var nameEQ = name + "=";
156	var ca = document.cookie.split(';');
157	for(var i=0;i < ca.length;i++) {
158		var c = ca[i];
159		while (c.charAt(0)==' ') c = c.substring(1,c.length);
160		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
161	}
162	return null;
163}
164
165var eraseCookie = function(name) {
166	createCookie(name,"",-1);
167}
168
169
170var veranstaltungenAdditionalinfo = function(lsfpageobserver){
171	$('div.Container_CaptionVeranstAus').each(function(){
172		$(this).before('<div class="evt_more_infos" style="cursor:pointer">Klick für mehr oder weniger Informationen</div>');
173	})
174	// Elemente verstecken
175	$('div.Container_VeranstAus').each(function(){
176		$(this).hide()	
177	})
178	// Klick Event für 'Klick für mehr Informationen'
179	$('div.evt_more_infos').click(function(){
180		var el = $(this).parent().find('div.Container_VeranstAus')
181		el.toggle()
182	})
183	
184	var sem = $('a#choosesemester').text().replace(/[a-zA-Z ]/g,'').trim();
185	$('div.functionnavi > h2').each(function(){
186		var curSem = $(this).text().replace(/[a-zA-Z :]/g,'').trim();
187		if (curSem == sem){
188		var el = $(this).parent().find('div.Container_VeranstAus')
189		el.show()		
190		}
191	});		
192}
193var timeout = 30
194var origTimeoutText = null
195var timeoutinfo = function(lsfpageobserver){
196	var logoutDiv = $('logout').first()
197	timeout = parseInt(logoutDiv.attr('maxtime'))
198	var divloginstatus = $('div.divloginstatus a:eq(1)').text()
199	if (divloginstatus) divloginstatus = divloginstatus.trim().toLowerCase()
200	if ((divloginstatus && divloginstatus == 'anmelden') || logoutDiv.length == 0 || $('a.links3[accesskey="l"]').length == 0 || timeout <= 0 || logoutDiv.attr('active') != 'y'){
201		logoutDiv.hide()
202		return null
203	}
204	settimeout(logoutDiv, lsfpageobserver)
205}
206
207var tclass = ''
208var tclass_before = ''
209var settimeout = function(div, lsfpageobserver){
210	if (timeout <= 0){
211		alert(div.attr('timeoutmessage'))
212		document.location.href=$('a.links3[accesskey="l"]').attr('href')
213		return;
214	}
215	
216	var classStyle=div.attr('class')
217	var style=div.attr('style')
218	var class5min = div.attr('class5min')
219	var class10min = div.attr('class10min')
220	var minutetext_plural = div.attr('minutetext_plural')
221	var minutetext_singular = div.attr('minutetext_singular')
222	var showOnMin = div.attr('showOnMin')
223	
224	if (timeout <= 5){
225		tclass = class5min//'color:#d94747;background-color:white'
226	}else if (timeout <= 10){ 
227		tclass = class10min//'color:#ffcc00'
228	}
229	if (origTimeoutText == null){
230		origTimeoutText = div.html() 	
231	}
232	
233	var rep = origTimeoutText.replace(/\[min\]/,(timeout<10?'0'+timeout:timeout))
234	rep = rep.replace(/\[minutetext\]/,(timeout<=1 ? minutetext_singular : minutetext_plural))
235	var ttext = "<span id='timeouttext'>"+rep+"</span>"
236	div.html(ttext)
237	$('#timeouttext').attr('class',classStyle)
238	$('#timeouttext').attr('style',style)
239	if (showOnMin != undefined && showOnMin.length > 0){
240		showOnMin = parseInt(showOnMin)
241		if (timeout > showOnMin){
242			div.children().hide()
243		}else{
244			div.children().show()	
245		}
246	}else{
247			div.children().show()
248	}
249	div.find('logouttext > #min').removeClass(tclass_before)
250	div.find('logouttext > #min').addClass(tclass)
251	
252	tclass_before = tclass
253	timeout -= 1
254	setTimeout(function(){settimeout(div, lsfpageobserver)}, 60000);		
255}
256
257var textdiff = function(lsfpageobserver){
258	$( document ).ready(function() {
259		
260		var hasTextName = $('tbody#diff_tbody > tr:last > td:eq(1)').text().trim() == 'Text'
261		var hasBeforeText = $('#diff_tbody > tr:last > td:eq(2)').text().trim().length == 0 ? false : true
262		if (!hasTextName || !hasBeforeText) return
263		
264		$('tr#headertext').append('<td class="td_p" colspan="4">&nbsp;</td><td class="th">Differenz</td>')
265		$('table.summary_table > tbody > tr:gt(0)').append('<td class="td_p" colspan="4">&nbsp;</td><td class="td" valign="top"></td>')
266		var diffObj = $('table.summary_table > tbody > tr:gt(0) > td').last()
267		var origObj = $('#diff_tbody > tr:eq(1) > td:eq(2)')
268		var changedObj = $('tbody#diff_tbody > tr:eq(1) > td:eq(4)')
269		$(origObj).prettyTextDiff({
270			cleanup: true,
271			originalContainer: origObj,
272			changedContainer: changedObj,
273			diffContainer: $(diffObj)
274			
275        })		
276	})
277}
278
279var montagBisFreitag = function(lsfpageobserver, montagBisFreitagBind){
280	$( document ).ready(function() {
281		$('select[id$="_7"]').each(function(){
282			var parent = $(this).parent().parent()
283			_montagBisFreitag(parent)
284			$(this).change(function(){
285				_montagBisFreitag(parent)
286			})		
287		})
288	})
289}
290var _montagBisFreitag = function(parent){
291	
292	var val = $(parent).find('select[id$="_7"] option:selected').attr('value')
293	if (val && val == 8){
294		var val2 = $(parent).find('select[id$="_3"] option:selected').attr('value')
295		if (val2 == 1){
296			$(parent).find('select[id$="_3"] option').removeAttr("selected");
297			$(parent).find('select[id$="_3"] option[value="6"]').attr('selected',true);
298		}
299		$(parent).find('select[id$="_3"] option[value="1"]').hide()
300	}else{
301		$(parent).find('select[id$="_3"] option[value="1"]').show()
302	}
303	
304}
305var semesterDropdown = function(lsfpageobserver){
306	var is_semester_dropdown = $('semester_dropdown[active="y"]').length > 0 ? true : false
307	var aktuellessemester = $('semester_dropdown').attr('aktsem')
308	if (!is_semester_dropdown || !aktuellessemester){
309		return true
310	}
311	var semesterAjaxUrl = "rds?state=change&type=6&moduleParameter=semesterSelect&nextdir=change&next=SearchSelect.vm&subdir=applications&targettype=7&targetstate=change&getglobal=semester"
312	var cookiename = 'semester_dropdown_data'
313	var data = localStorage ? localStorage.getItem(cookiename) : null
314	var isStartpage = lsfpageobserver.getUrlParam('state') == 'user' ? true : false
315	var cssclass = $('semester_dropdown').attr('class')
316	$( document ).ready(function() {
317			
318		if (isStartpage || !data){
319			//console.log("1"+isStartpage)
320			$.ajax({
321			  url: semesterAjaxUrl,
322			}).done(function( mydata ) {
323				var html = '<select id="semester_dropdown" class="'+cssclass+'">'
324				$(mydata).find('div.content > fieldset > div > a').each(function(){
325						var href = $(this).attr('href')
326						var sem = $(this).text().trim()
327						var ar = href.split("&")
328						var sel = ''
329						for(var item in ar){
330							item = ar[item]
331							var ar2 = item.split("=")
332							if (ar2.length == 2 && ar2[0].trim() == "k_semester.semid" && ar2[1].trim() == aktuellessemester){
333								sel = 'selected="true"'
334								break
335							}
336						}
337						//href += "&redirect="+redirect
338						html += '<option value="'+href+'" '+sel+'>'+sem+'</option>'
339				})
340				html += '</select>'
341				if (localStorage) localStorage.setItem(cookiename, html);
342				$('semester_dropdown').first().prepend(html)
343				$('select#semester_dropdown').change(function(){
344					document.location.href = $(this).val()
345				})
346			})
347		}else{
348			//console.log("2")
349			$('semester_dropdown').first().prepend(data)
350			$('select#semester_dropdown').change(function(){
351				document.location.href = $(this).val()
352			})			
353		}
354	})
355}
356
357var checkAllCheckboxes = function(lsfpageobserver){
358	if ($('div.table_1 > table > tbody > tr:eq(0) > th:eq(0)').length > 0){
359		_checkAllCheckboxes($('div.table_1 > table > tbody > tr:eq(0) > th:eq(0)'), $('div.table_1 > table > tbody > tr:gt(0)  input[type="checkbox"]'))
360	}
361}
362
363var _checkAllCheckboxes = function(allCheckboxParent, targetCheckboxes){
364	var allCheckbox = '<input type="checkbox" id="observer_allCheckboxes" />'
365	$(allCheckboxParent).append(allCheckbox)
366	$('#observer_allCheckboxes').click(function(){
367		var status = $(this).prop("checked")
368		$(targetCheckboxes).each(function(){
369			$(this).prop('checked',status)
370		})
371	})
372}
373
374
375var sortTableByBeginTime = function(lsfpageobserver){
376	$( document ).ready(function() {
377			var checkPos = 0
378			var tr_data = []
379			var tbody = 'div.content > table[0] > tbody'
380			var tr_items = $(tbody+' > tr')
381			tr_items.each(function(){
382				var item1 = $(this)
383				var item1_val = item1.find('td[0]').text().trim()
384				console.log(item1_val)
385				tr_items.each(function(){
386					var item2 = $(this)
387					var item2_val = item2.find('td[0]').text().trim()
388					if (item1 != item2 ){
389						var comp = _compareTableStrings(item1_val, item2_val)
390						if (comp >= 0){
391							tr_data.push(item1)
392						}else{
393							tr_data.push(item2)
394						}
395						
396					}
397				})
398			})
399	
400			// clear table
401			$(tbody).remove()
402			var str = ''
403			tr_data.each(function(){
404				str+=$(this).html()
405			})
406			$(tbody).html(str)
407	})
408}
409
410var _compareTableStrings = function(a,b){
411	return (a<b?-1:(a>b?1:0))
412}
413
414var setCopyLectures2 = function(lsfpageobserver){
415	$( document ).ready(function() {
416		if ($('semcopy2').length > 0){
417			var action = $('form').first().attr('action').replace("semcopy",$('semcopy2').text().trim())
418			$('form').first().attr('action',action)
419		}
420	})
421}
422var printVeranstaltungen = function(lsfpageobserver){
423	$('#printVeranst').click(function(){
424		window.print()
425	})
426}
427

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.