PageSourceSearch

https://www.svs.at/cdscontent/load?contentid=10008.724155&version=1724256104

js svs.at collected 2026-10-02 05:07:51 UTC 20,022 bytes, 469 lines download raw bytes

1(function($) {
2	$(document).ready(function() {
3		/* Adaption of the width from the content, if the subnavigation is visible */
4		if ($('#esv-navigation').is(":visible")) {
5			$('#esv-container').addClass('visible_navigation');
6		}
7
8		/* Encapsulates SVS Mobile Menu Behavior.
9		   There are two slightly different behaviors:
10		   If isAppMenu is set the application menu will be rendered like the 3rd level of content navigation.
11		   Furthermore additional elements like targetgroup selector will be hidden.
12		*/
13		function SVSMobileMenu(menuWrapper, isAppMenu) {
14			this.template().insertAfter('#esv-container');
15
16			this.menuWrapper = menuWrapper;
17			this.isAppMenu = isAppMenu;
18			this.originalMenu = menuWrapper.find('.menu');
19			this.metaLinks = [];
20
21			// templates
22			this.mobileTemplate = $(document).find('#nav-mobile-template');
23			this.menuEntry2Template = this.mobileTemplate.find('[data-menu-entry-template-level-1]');
24			this.menuEntry3Template = this.mobileTemplate.find('[data-menu-entry-template-level-2]');
25
26			// target containers
27			this.containerMain = this.mobileTemplate.find("[data-container-main]");
28			this.containerSub = this.mobileTemplate.find("[data-container-sub]");
29
30			this.pageHeader = $('#esv-header');
31			this.burgerIcon = this.pageHeader.find('.menuicon a');
32			this.closeIcon = this.mobileTemplate.find('[data-close-icon]');
33		}
34
35		// because of IE11 support we cannot use template strings.
36		SVSMobileMenu.prototype.template = function() {
37			return $(
38			[
39				'<div style=\"display: none;\" id=\"nav-mobile-template\" class=\"level-main\" role=\"navigation\" aria-label=\"Mobile Navigation\">',
40				'					<div class=\"hide-level-sub\">',
41				'						<div class=\"nav-mobile__header nav-mobile__header--small\">',
42				'							<a data-fixed-link=\"logo\" href=\"#\" class=\"nav-mobile__logo\" alt=\"zur Startseite\"><img class=\"nav-mobile__logo\" src=\"\" alt=\"SVS\"/></a>',
43				'							<a data-close-icon href=\"#\"><span class=\"sv-close\" role=\"img\" alt=\"\"aria-label=\"Icon Navigation Schlie&szlig;en\"></span></a>',
44				'						</div>',
45				'					</div>',
46				'					<div class=\"hide-level-sub\">',
47				'						<a data-fixed-link=\"mysv\" href=\"#\" class=\"nav-mobile__tile nav-mobile__tile--green nav-mobile__tile--with-arrow\">',
48				'							<div class=\"nav-mobile__tiletext\">Login</div>',
49				'							<span class=\"sv-arrow_r\" role=\"img\" aria-label=\"Icon Navigation &ouml;ffnen\"></span>',
50				'						</a>',
51				'						<a data-fixed-link=\"onlinevers\" href=\"extract from header\" class=\"nav-mobile__tile nav-mobile__tile--grey nav-mobile__tile--with-arrow nav-mobile__tile--no-bottom-margin\">',
52				'							<div class=\"nav-mobile__tiletext\">Online Versicherungsanmeldung</div>',
53				'							<span class=\"sv-arrow_r\" role=\"img\" aria-label=\"Icon Navigation &ouml;ffnen\"></span>',
54				'						</a>',
55				'					</div>',
56				'					<div data-container-main class=\"nav-mobile__tiles hide-level-sub\">',
57				'						<!-- container for 1st level a -->',
58				'					</div>',
59				'					<div data-container-meta class=\"nav-mobile__menu-entry-container nav-mobile__menu-entry-container--indent hide-level-sub\">',
60				'						<!-- container for meta links -->',
61				'					</div>',
62				'',
63				'					<div class=\"nav-mobile__subheader hide-level-main\">',
64				'						<div class=\"nav-mobile__subheader-icons\">',
65				'							<a id=\"nav-mobile__back-link\"><span class=\"sv-arrow_l\" role=\"img\" aria-label=\"Icon Navigation Zur&uuml;ck\"></span></a>',
66				'							<a data-close-icon href=\"#\"><span class=\"sv-close\" role=\"img\" aria-label=\"Icon Navigation Schließen\"></span></a>',
67				'						</div>',
68				'						<a href=\"#\" class=\"nav-mobile__subheader-link\"></a>',
69				'					</div>',
70				'					<nav data-container-sub class=\"nav-mobile__menu-entry-container hide-level-main\">',
71				'						<!-- container for 2nd/3rd level a -->',
72				'					</nav>',
73				'',
74				'					<!-- templates -->',
75				'					<a data-menu-entry-template-level-1 href=\"#\" class=\"nav-mobile__template nav-mobile__menu-entry\">',
76				'							<div class=\"nav-mobile__menu-entry-text\"></div>',
77				'							<span class=\"sv-arrow_r\" role=\"img\" aria-label=\"Icon Navigation &ouml;ffnen\"></span>',
78				'					</a>',
79				'					<div data-menu-entry-template-level-2 class=\"nav-mobile__template nav-mobile__menu-entry nav-mobile__menu-entry--with-submenu\">',
80				'						<div class=\"nav-mobile__menu-entry-dropdown-header\">',
81				'							<a href=\"#\" class=\"nav-mobile__menu-entry-dropdown-link\"></a>',
82				'							<div data-toggle=\"collapse\">',
83				'								<span data-dropdown-icon=\"open\" class=\"sv-o_prev\" role=\"img\" aria-label=\"Icon Untermen&uuml; &ouml;ffnen\"></span>',
84				'								<span data-dropdown-icon=\"close\" class=\"sv-o_next\" role=\"img\" aria-label=\"Icon Navigation schlie&szlig;en\"></span>',
85				'							</div>',
86				'						</div>',
87				'						<div style=\"display: none;\" class=\"nav-mobile__submenu\">',
88				'							<!-- container for >= 4th level !-->',
89				'						</div>',
90				'					</div>',
91				'',
92				'					<div class=\"nav-mobile__meta\">',
93				'						<div>',
94				'							<a data-fixed-link=\"dashboard-back-to-startpage\" href=\"#\" class=\"nav-mobile__tile nav-mobile__tile--green nav-mobile__tile--with-arrow\">',
95				'								<div class=\"nav-mobile__tiletext\">Zur&uuml;ck zur SVS Website</div>',
96				'								<span class=\"sv-arrow_r\" role=\"img\" aria-label=\"Icon Navigation &ouml;ffnen\"></span>',
97				'							</a>',
98				'							<a data-fixed-link=\"dashboard-logout\" href=\"#\" class=\"nav-mobile__tile nav-mobile__tile--orange nav-mobile__tile--with-arrow\">',
99				'								<div class=\"nav-mobile__tiletext\">Logout</div>',
100				'								<span class=\"sv-arrow_r\" role=\"img\" aria-label=\"Icon Navigation &ouml;ffnen\"></span>',
101				'							</a>',
102				'						</div>',
103				'						<div class=\"nav-mobile__target-group\">',
104				'							<div class=\"nav-mobile__target-group-text\">Inhalte anzeigen f&uuml;r</div>',
105				'							<div class=\"targetgroupselect nav-mobile__target-group-select\">',
106				'								<nav data-targetgroup-select>',
107				'									<!-- placeholder for target group select -->',
108				'								</nav>',
109				'							</div>',
110				'						</div>',
111				'						<div class=\"nav-mobile__footer\">',
112				'							<a data-fixed-link=\"logo\" href=\"#\" class=\"nav-mobile__logo\" alt=\"zur Startseite\"><img class=\"nav-mobile__logo\" src=\"\" alt=\"SVS\"/></a>',
113				'							<div class=\"nav-mobile__footerlinks\">',
114				'								<a data-fixed-link=\"sitemap\" class=\"nav-mobile__footerlink\" href=\"#\">Sitemap</a>',
115				'								<a data-fixed-link=\"contrast\" class=\"nav-mobile__footerlink\" id=\"kontrastmodus_mobile\" data-behaviour=\"contrast-mode-link\" title=\"In Kontrastmodus umschalten\" href=\"https://www.et.esv.sozialversicherung.at/cdscontent/?contentid=10007.816825&amp;viewmode=content&amp;switchContrastMode=true\">',
116				'									<img src=\"\" alt=\"Icon Kontrastmodus\">',
117				'								</a>',
118				'							</div>',
119				'						</div>',
120				'					</div>',
121				'				</div>',
122				].join('')
123			);
124		}
125
126		SVSMobileMenu.prototype.init = function() {
127			this.fetchContentFromHeader();
128
129			var currentItem = this.originalMenu.find('li.current-menu-item > a[data-level]');
130
131			if (this.isAppMenu) {
132				this.mobileTemplate.find('.nav-mobile__subheader').remove();
133				this.mobileTemplate.find('.nav-mobile__header').parent().removeClass('hide-level-sub');
134				this.showApplicationMenu(currentItem);
135			} else {
136				if (currentItem.length == 1) {
137					this.showLevel(currentItem);
138				} else {
139					this.showMainMenu();
140				}
141			}
142
143			var that = this;
144
145			// de-register default mobilenavi and register click
146			this.burgerIcon.off('click');
147			this.burgerIcon.on('click', function(event) {
148				event.preventDefault();
149				that.mobileTemplate.find('[data-targetgroup-select]').html($('#esv-header #targetgroup_list'));
150				that.menuWrapper.addClass('nav-mobile');
151				that.mobileTemplate.show(0, function() {
152					that.mobileTemplate.find("[data-fixed-link=logo]").first().focus();
153				});
154			});
155
156			// register close click
157			this.closeIcon.on('click', function(event) {
158				event.preventDefault();
159				$('#esv-header .targetgroupselect nav').html(that.mobileTemplate.find('[data-targetgroup-select] ul'));
160				that.menuWrapper.removeClass('nav-mobile');
161				that.mobileTemplate.hide();
162			});
163
164			// register menu item click
165			this.mobileTemplate.on("click", "[data-menu-item-id]", function(event) {
166				event.preventDefault();
167
168				origMenuItem = that.originalMenu.find("[data-menu-item-id='"+ $(this).data('menuItemId') + "']");
169
170				if (origMenuItem.length == 0) {
171					window.location.href = $(this).attr('href');
172				} else if (origMenuItem.data('level') >= 3 || that.isAppMenu) {
173					window.location.href = origMenuItem.attr('href');
174				} else {
175					that.mobileTemplate.scrollTop("0");
176					that.showLevel(origMenuItem);
177				}
178			});
179
180			// register 3rd level dropdown
181			this.mobileTemplate.on('click', "[data-toggle='collapse']", function(event) {
182				event.preventDefault();
183
184				containerId = $(this).data('target');
185				openIcon = $(this).find("[data-dropdown-icon='open']")
186				closeIcon = $(this).find("[data-dropdown-icon='close']")
187
188				if (containerId) {
189					if ($(containerId).is(":visible")) {
190						closeIcon.hide();
191						openIcon.show();
192					} else {
193						openIcon.hide();
194						closeIcon.show();
195					}
196
197					$(containerId).slideToggle();
198				}
199			});
200
201			// register back link
202			this.mobileTemplate.on('click', '#nav-mobile__back-link', function(event) {
203				event.preventDefault();
204				menuItemId = $(this).closest('.nav-mobile__subheader').find('.nav-mobile__subheader-link').data('menuItemId');
205				prevItem = that.originalMenu.find("[data-menu-item-id='"+ menuItemId + "']").closest('.sub-menu').prev('[data-level]').first();
206				that.showLevel(prevItem);
207			});
208		}
209
210		// extract links from header of page
211		SVSMobileMenu.prototype.fetchContentFromHeader = function() {
212			this.setFixedLink('#esv-header #zurStartseite',"[data-fixed-link='logo']");
213			$("[data-fixed-link='logo'] img").attr('src', $('#esv-header #zurStartseite img').attr('src'));
214			this.setFixedLink('#esv-header #loginUrl', "[data-fixed-link='mysv']");
215			$("[data-fixed-link='contrast'] img").attr('src', $('#esv-header .accessicon a img').attr('src'));
216			this.setFixedLink('#esv-header .optin_link a', "[data-fixed-link='onlinevers']");
217			this.setFixedLink('#esv-header .sitemaplink a', "[data-fixed-link='sitemap']");
218			this.setFixedLink('#esv-header .accessicon a', "[data-fixed-link='contrast']");
219			this.setFixedLink('#esv-header #dashboard-back-to-startpage a', "[data-fixed-link='dashboard-back-to-startpage']");
220			this.setFixedLink('#esv-header #dashboard-logout a', "[data-fixed-link='dashboard-logout']");
221
222			var metaLinksToExtract = $('#esv-header nav.basenavi ul.menu > li.menu-item > a');
223			that = this
224			metaLinksToExtract.each(function(idx, metaLink) {
225				var link = that.createLevel2Element(metaLink);
226				that.metaLinks.push(link);
227			});
228			this.mobileTemplate.find('[data-container-meta]').html(this.metaLinks);
229
230			if (this.isAppMenu) {
231				this.mobileTemplate.find('.nav-mobile__target-group').remove();
232				this.mobileTemplate.find('.nav-mobile__footerlinks').html($('#esv-header .dashboard-userinfo').clone())
233			}
234		}
235
236		// tries to extract an element with given selector and if found sets the href attribute of the element
237		// and the text (if no children) identified by the templateSelector
238		SVSMobileMenu.prototype.setFixedLink = function(selector, templateSelector) {
239			var link = $(selector);
240			var templateLink = this.mobileTemplate.find(templateSelector);
241			if (link.length == 1) {
242				templateLink.attr('href', link.attr('href'));
243				if (templateLink.children().length == 0) {
244					templateLink.text(link.text());
245				}
246			} else {
247				templateLink.remove();
248			}
249		}
250
251		SVSMobileMenu.prototype.showApplicationMenu = function(currentMenuItem) {
252			var menuItems = this.menuWrapper.closest('#esv-navigation').find('form .menu > li.menu-item, .menu form > li.menu-item');
253
254			var entries = [];
255			var that = this;
256			menuItems.each(function(idx, menuItem) {
257				var menuItemLink = $(menuItem).find('> a:not(.toggle-link), > .svamenu-item-block a:not(.toggle-link)')
258				if (menuItemLink.length > 0) {
259					var entry = that.createLevel3Element(menuItemLink, null, true);
260				} else {
261					if ($(menuItem).find('> .sub-menu').length > 0) {
262						// quirks if menuItem does not contain a "a" element right before .sub-menu
263						// we create a virtual one
264						var virtualLinkName = $(menuItem).clone()
265				        	.children()
266				        	.remove()
267				        	.end()
268				        	.text();
269
270						var virtualLink = $('<a class="virtual-link" style="display: none;" href="#">
270' + virtualLinkName + '</a>');
271						virtualLink.insertBefore($(menuItem).find('> .sub-menu'));
272						var entry = that.createLevel3Element($(menuItem).find('> a.virtual-link'), null, true);
273					} else {
274						// simply ignore menuItem
275					}
276				}
277				entries.push(entry);
278			});
279
280			var mainEntries = this.buildSubMenuEntries(currentMenuItem, this.createLevel3Element.bind(this));
281
282			this.containerSub.hide().html(entries.concat(mainEntries));
283			this.mobileTemplate.find('.hide-level-sub').hide();
284			this.mobileTemplate.find('.hide-level-main').fadeIn(500);
285			this.mobileTemplate.attr('class', 'level-sub');
286		}
287
288		SVSMobileMenu.prototype.showMainMenu = function() {
289			level = 1;
290			elements = this.originalMenu.find("[data-level='0']").next('.sub-menu').find('> li > a[data-level]').clone();
291			elements.addClass('nav-mobile__tile nav-mobile__tile--image');
292
293			elements.each(function() {
294				imageUrl = $(this).data('mobilenavImage');
295				if (imageUrl) {
296					$(this).css('background-image', 'url(' + imageUrl + ')');
297				}
298			});
299
300			// remove possible duplicates
301			metaLinksText = that.metaLinks.map(function(elem) {
302				return $(elem).text().trim();
303			});
304
305			elements = elements.filter(function() {
306				return ($.inArray($(this).text().trim(), metaLinksText)) == -1;
307			});
308
309			this.containerMain.hide().html(elements);
310			this.mobileTemplate.find('.hide-level-main').hide();
311			this.mobileTemplate.find('.hide-level-sub').fadeIn(500);
312			this.mobileTemplate.attr('class', 'level-main');
313		}
314
315		// if no menuItem is given we assume that we are on level 0 and take these elements for rendering
316		SVSMobileMenu.prototype.buildSubMenuEntries = function(menuItem, createElementFct, subItem) {
317			var elements;
318
319			if (menuItem.length > 0) {
320				// set sub header bg image
321				imageUrl = menuItem.data('mobilenavImage');
322				if (imageUrl) {
323					this.mobileTemplate.find('.nav-mobile__subheader').css('background-image', 'url(' + imageUrl + ')');
324				} else {
325					this.mobileTemplate.find('.nav-mobile__subheader').css('background-image', 'none');
326				}
327
328				// set title text and link
329				subheaderLink = this.mobileTemplate.find('.nav-mobile__subheader-link');
330				subheaderLink.attr('href', menuItem.attr('href'));
331				subheaderLink.data('menuItemId', menuItem.data('menuItemId'));
332				subheaderLink.hide().text(menuItem.text()).fadeIn(500);
333
334				// set menu items
335				elements = menuItem.next('.sub-menu').find('> li > a[data-level]');
336			} else {
337				elements = this.originalMenu.find("[data-level='0']").next('.sub-menu').find('> li > a[data-level]')
338				// fallback to structure of nav.main
339				if (elements.length == 0) {
340					elements = this.originalMenu.find('> li > a');
341				}
342			}
343
344			var entries = [];
345
346			elements.each(function(idx, element) {
347				var entry = createElementFct(element, subItem);
348				entries.push(entry);
349			});
350
351			return entries;
352		}
353
354		SVSMobileMenu.prototype.showSubMenu = function(menuItem, createElementFct, subItem) {
355			var entries = this.buildSubMenuEntries(menuItem, createElementFct, subItem);
356
357			this.containerSub.hide().html(entries);
358			this.mobileTemplate.find('.hide-level-sub').hide();
359			this.mobileTemplate.find('.hide-level-main').fadeIn(500);
360			this.mobileTemplate.attr('class', 'level-sub');
361		}
362
363		SVSMobileMenu.prototype.showLevel = function(item) {
364			var level = item.data('level');
365			var subItem;
366
367			if (level > 2) {
368				subItem = item;
369				item = this.findParentItem(item, 2);
370			}
371
372			switch(item.data('level')) {
373				case 0:
374					this.showMainMenu();
375					break;
376				case 1:
377					this.showSubMenu(item, this.createLevel2Element.bind(this));
378					break;
379				default:
380					this.showSubMenu(item, this.createLevel3Element.bind(this), subItem);
381					break;
382			}
383		}
384
385		SVSMobileMenu.prototype.findParentItem = function(item, level) {
386			var startLevel = parseInt(item.data('level')) - 1;
387
388			for(i=startLevel; i >= level; i--) {
389				item = item.closest(".sub-menu").prev("a[data-level='" + i + "']");
390			}
391
392			return item;
393		}
394
395		SVSMobileMenu.prototype.createLevel2Element = function(element) {
396			var entry = this.menuEntry2Template.clone();
397			entry.removeClass('nav-mobile__template');
398			entry.attr('data-menu-item-id', $(element).data('menuItemId'));
399			entry.attr('href', $(element).attr('href'));
400			entry.find('.nav-mobile__menu-entry-text').text($(element).text());
401			return entry;
402		}
403
404		SVSMobileMenu.prototype.createLevel3Element = function(menuItemLink, subItem, showSubMenu) {
405			var entry = this.menuEntry3Template.clone();
406			entry.removeClass('nav-mobile__template');
407			var dowpdownHeaderLink = entry.find('.nav-mobile__menu-entry-dropdown-header a');
408
409			dowpdownHeaderLink.attr('data-menu-item-id', $(menuItemLink).data('menuItemId'));
410			dowpdownHeaderLink.attr('href', $(menuItemLink).attr('href'));
411			dowpdownHeaderLink.text($(menuItemLink).text());
412
413			subMenuEntries = $(menuItemLink).next('.sub-menu').find('> li > a').clone();
414
415			// setup for toggle
416			if (subMenuEntries.length > 0) {
417				subMenuEntries.addClass('nav-mobile__submenu-entry');
418
419				var subMenuContainer = entry.find('.nav-mobile__submenu');
420				var uniqueId = this.generateUniqueID();
421				subMenuContainer.html(subMenuEntries);
422				subMenuContainerId = 'sub-menu-' + uniqueId;
423				entry.find('[data-toggle]').attr('data-target', "#" + subMenuContainerId);
424				subMenuContainer.attr('id', subMenuContainerId);
425
426				if (subItem) {
427					showSubMenu = jQuery.grep(subMenuEntries, function(entry) {
428						return $(entry).data('menuItemId') == subItem.data('menuItemId');
429					}).length > 0;
430				}
431
432				if(typeof showSubMenu !== 'undefined' && showSubMenu) {
433					entry.find("[data-dropdown-icon='close']").show();
434					entry.find("[data-dropdown-icon='open']").hide();
435					subMenuContainer.show();
436				} else {
437					entry.find("[data-dropdown-icon='close']").hide();
438					entry.find("[data-dropdown-icon='open']").show();
439					subMenuContainer.hide();
440				}
441			} else {
442				entry.find("[data-dropdown-icon]").hide();
443			}
444
445			return entry;
446		}
447
448		SVSMobileMenu.prototype.findSubMenuEntries = function(menuEntry) {
449			return $(menuEntry).next('.sub-menu').find('> li > a[data-level]');
450		}
451
452		SVSMobileMenu.prototype.generateUniqueID = function() {
453			return '_' + Math.random().toString(36).substr(2, 9);
454		}
455
456		// TODO: remove this line if svs menu template removed from Velocity template svs_sub
457		$('#nav-mobile-template').remove();
458
459		var menuWrapper = $("#esv-navigation > nav").first();
460		if (menuWrapper.length == 0) {
461			menuWrapper = $("nav.main");
462		}
463
464		if (menuWrapper.length == 1) {
465			var svsMobileMenu = new SVSMobileMenu(menuWrapper, $('body').hasClass('esv-application'));
466			svsMobileMenu.init();
467		}
468	});
469})(ESV.jQuery);

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.