PageSourceSearch

http://www.fdg-advisors.com/include/js/navigation/slickNavLaunch.js

js fdg-advisors.com collected 2026-09-26 05:33:28 UTC 8,783 bytes, 317 lines download raw bytes

1var Slick = (function(){
2
3	var $nav = jQuery(document.querySelector('#navigation ul')),
4	bodyClass = document.body.classList,
5	autoStyling = bodyClass.contains('TT2')?false:true,
6	snav,
7	btn
8
9	$nav.slicknav({
10		beforeClose:function(t){
11			if(t[0] === btn)
12				btn.setAttribute('aria-expanded','false')
13		},
14		beforeOpen:function($t){
15			var t = $t[0]
16			if(t === btn){
17				btn.setAttribute('aria-expanded','true')
18}
19			else{
20				var open = Array.from(snav.querySelectorAll('.slicknav_open'))
21				filtered = open.filter(function(li){
22					let a = li.firstElementChild
23					return (a != t && li != btn)
24				})
25
26				filtered.forEach(function(li){
27					let a = li.firstElementChild,
28					ul = a.nextElementSibling
29
30					if (!ul.contains(t.firstElementChild))
31						_forceCloseDropdown(a)
32				})
33			}			
34		},
35		label: 'Menu',
36		parentTag: 'span',
37		allowParentLinks: false
38	})
39
40	document.querySelector('.slicknav_nav').classList.add('u-c')
41	
42	snav = document.querySelector('.slicknav_menu')
43
44	// Move skip navigation links
45	var snl = document.querySelector('.skip-main')
46	if (snl){
47		snav.parentNode.insertBefore(snl,snav)
48	}
49
50	btn = snav.querySelector('.slicknav_btn')
51	
52	btn.setAttribute('aria-expanded','false')
53
54	var spans = snav.querySelectorAll('.slicknav_parent>span')
55	if (spans && spans.length){
56		spans.forEach(function(s){
57			let p = s.parentNode,
58			a = s.firstElementChild,
59			arrow = s.querySelector('.slicknav_arrow')
60
61			a.setAttribute('role','menuitem')
62			a.removeAttribute('aria-hidden')
63			a.removeAttribute('tabindex')
64			a.classList.add('slicknav_item','slicknav_row')
65
66			arrow.setAttribute('aria-hidden','true')
67			a.append(arrow)
68
69			while(s.firstChild)
70				p.insertBefore(s.firstChild,s)
71
72			p.removeChild(s)
73		})
74	}
75
76	function _forceCloseDropdown(a){
77		let li = a.parentElement,
78		ul = a.nextElementSibling
79
80		a.querySelector('.slicknav_arrow').innerHTML = "►"
81		a.setAttribute('aria-expanded','false')
82
83		li.classList.remove('slicknav_open')
84		li.classList.add('slicknav_collapsed')
85
86		ul.classList.add('slicknav_hidden')
87		ul.setAttribute('aria-hidden','true')
88		setTimeout(function(){ul.style.display = 'none'},10)
89	}
90
91	function _toggleDropdown(a){
92		let expanded = a.getAttribute('aria-expanded'),
93		li = a.parentElement,
94		ul = a.nextElementSibling
95
96		if (expanded == 'true'){
97			a.setAttribute('aria-expanded','false')				
98
99			let childDropdowns = ul.querySelectorAll('.slicknav_open>.has-dropdown')
100			if (ul && childDropdowns.length){
101				childDropdowns.forEach(function(_a){
102					_forceCloseDropdown(_a)
103				})
104			}
105		}
106		else{
107			a.setAttribute('aria-expanded','true')
108		}
109	}
110
111	const uls = snav.querySelectorAll('.slicknav_nav ul')
112	if (uls && uls.length){
113		uls.forEach(function(ul){
114			let a = ul.previousElementSibling
115			a.classList.add('has-dropdown')
116		});
117	}
118
119	var dropdowns = snav.querySelectorAll('.has-dropdown')
120	if (dropdowns && dropdowns.length){
121		dropdowns.forEach(function(a){
122			let ul = a.nextElementSibling
123
124			if (!ul.children.length)
125				return false
126
127			let first = ul.firstElementChild.firstElementChild,
128			last = ul.lastElementChild.firstElementChild
129
130			a.addEventListener('click',function(e){
131				_toggleDropdown(a)
132			})
133
134			a.addEventListener('keydown',function(e){
135				let key = e.keyCode || e.which
136
137				if (key == 13) //enter
138					_toggleDropdown(a)
139			})
140
141			a.addEventListener('keydown',function(e){
142				let key = e.keyCode || e.which
143
144				if (key == 9 && (e.shiftKey && key == 9)){ //tab
145					let expanded = this.getAttribute('aria-expanded')
146					if (expanded == 'true')
147						_forceCloseDropdown(this)
148				}
149			})
150
151			if (!Object.is(first, null)) {
152				first.addEventListener('keydown',function(e){
153					let key = e.keyCode || e.which
154
155					if (key == 9 && (e.shiftKey && key == 9)) //tab
156						_forceCloseDropdown(a)
157				})
158			}
159
160			if (!Object.is(last, null)){
161				last.addEventListener('keydown',function(e){
162					let key = e.keyCode || e.which
163
164					if (key == 9 && !(e.shiftKey && key == 9)) //tab
165						_forceCloseDropdown(a)
166				})
167			}
168		})
169	}
170
171
172	var as = snav.querySelectorAll('.slicknav_nav a')
173
174	// Handle empty/non-navigable hrefs
175	as.forEach(function(a){
176		var h = a.getAttribute('href')
177		if (h === 'javascript:void(0);' || h === '' || h === '#' || h === '-empty-' ) {
178			a.removeAttribute('href')
179		}
180		else if (a.hasAttribute('href') && !a.classList.contains('has-dropdown')) {
181			a.addEventListener('click', function (e) {
182				if (!this.classList.contains('external') && !this.classList.contains('target_blank') && this.target != '_blank'){
183					window.location = this.href
184					e.stopImmediatePropagation()
185				}
186			},false)
187		}
188	})
189
190	// Close Slicknav when focusing out of last focusable navigation item
191	var lastA = as[as.length - 1],
192	lastTopLevelA = snav.querySelector('.slicknav_nav').lastElementChild.firstElementChild
193
194	lastA.addEventListener('keydown',function(e){
195		var keyCode = e.keyCode || e.which;
196		if (keyCode == 9 && !(event.shiftKey && event.keyCode == 9)) {
197			$nav.slicknav('close')
198		}
199	})
200
201	if (lastA != lastTopLevelA){
202		lastTopLevelA.addEventListener('keydown',function(e){
203		var hasdd = this.classList.contains('has-dropdown'),
204		expanded = this.getAttribute('aria-expanded'),
205		keyCode = e.keyCode || e.which;
206
207		if ((keyCode == 9 && !(event.shiftKey && event.keyCode == 9))) {
208			if (!hasdd || hasdd && expanded == 'false'){
209					$nav.slicknav('close')		
210			}
211		}
212	})
213		}
214
215	// Handle Layout Variations
216	// Clone login link
217	var ll = document.querySelector('#navigation .top-link.log-in a')
218	if (ll)
219		document.querySelector('.slicknav_menu').insertAdjacentElement('beforeend',ll.cloneNode())
220	// Clone logo
221	var hl = document.querySelector('.header-logo')
222	if (bodyClass.contains('_245') && hl)
223		snav.insertAdjacentElement('afterbegin',hl.cloneNode())
224	// Clone additional links
225	if (bodyClass.contains('_21')) {
226		var adtl = document.querySelectorAll('.additionalLinks ul li')
227
228		$(adtl).each(function() {
229			$(this).clone().addClass('additional-link').appendTo('.slicknav_nav')
230		})
231	}
232	// Change home text
233	var sh = document.querySelector('ul.slicknav_nav li.home a')
234	if (bodyClass.contains('_27') && sh)
235		sh.innerText = 'Home'
236
237
238	// Set browser transparency values
239	var te = document.createElement('div')
240	te.setAttribute('id','transparentElement')
241	document.body.appendChild(te)
242
243	var $te = jQuery(te),
244	transparentStrings = {
245		background:$te.css('background'),
246		backgroundImage:$te.css('background-image'),
247		backgroundColor:$te.css('background-color')
248		}
249
250
251	function styleNav(){
252		var $nc = jQuery('#navigationContainer'),
253	$n = jQuery('#navigation'),
254	$nUL = $n.find('.nav_ul:first')
255
256	function checkBackground ($el) {
257			var ts = transparentStrings
258
259		if ($el.css('background') == ts.background && $el.css('background-image') == ts.backgroundImage)
260			return $el.css('background-color')
261		else if ($el.css('background') == ts.background && $el.css('background-color') == ts.backgroundColor)
262			return $el.css('background-image')
263		else if ($el.css('background') != ts.background)
264			return $el.css('background')
265		else
266			return undefined
267	}
268
269	// Style background colors of navigation items
270	// bdid-88 Team Sites handle background styling in stylesheets
271		if (!(bodyClass.contains('_33') && bodyClass.contains('_88'))) {
272		// Outer
273		var ncBG = checkBackground($nc),
274		nBG = checkBackground($n)
275
276		if (ncBG != 'none' && ncBG != 'transparent' && ncBG != 'undefined' && ncBG != 'rgba(0, 0, 0, 0)')
277				snav.style.background = ncBG
278		else
279				snav.style.background = nBG
280
281		// Inner
282			if (!bodyClass.contains('_21')){
283			var innerBG = checkBackground(jQuery(document.querySelector('#navigation ul ul')))
284
285			$('.slicknav_menu ul ul').css({background:innerBG})			
286		}	
287	}
288
289	// Style text/link color of navigation items
290	var $a = $n.find('a'),
291		bars = snav.querySelectorAll('.slicknav_icon-bar'),
292	topC =  $nUL.find('>li:not(.home)>a').css('color'),
293	inner1C = $nUL.find('>li:not(.first)>ul>li>a:first').css('color'),
294	inner2C = $nUL.find('>li:not(.first)>ul>li>ul>li>a:first').css('color')
295
296	$a.css('color','')
297
298	// Assign colors
299		bars.forEach(function(el){
300		el.style.background = topC
301	})
302		btn.style.color = topC
303	jQuery('.slicknav_nav>li>a').css('color',topC)
304	jQuery('.slicknav_nav>li>span').css('color',topC)
305
306	jQuery('.slicknav_nav>li>ul>li').css('color',inner1C)
307	jQuery('.slicknav_nav>li>ul>li>ul>li>a').css('color',inner2C)
308}
309
310	if (autoStyling)
311		styleNav()
312
313	return {
314		autoStyling:autoStyling,
315		styleNav:styleNav
316		}
317})();

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.