1//######################################################################### 2// 3// THEME.JS 4// 5//######################################################################### 6 7//============================================================ 8// Header Height 9//============================================================ 10 11var html; 12 13function siteHeaderHeight() { 14 html = document.getElementsByTagName('html')[0]; 15 var height = document.getElementsByClassName('site-header')[0].offsetHeight; 16 html.setAttribute('style','--siteHeaderHeight: '+height+'px'); 17} 18 19(function() { 20 siteHeaderHeight(); 21 window.addEventListener('resize', function(){ 22 html.classList.remove('has-scrolled'); 23 siteHeaderHeight(); 24 }); 25})(); 26 27 28//============================================================ 29// Has Scrolled 30//============================================================ 31 32(function() { 33 var html = document.getElementsByTagName('html')[0]; 34 var siteHeader = document.getElementsByClassName('site-header')[0]; 35 var siteHeaderHeight = document.getElementsByClassName('site-header')[0].offsetHeight; 36 var lastScrollTop = 0; 37 var scrollClass = 'has-scrolled'; 38 var scrollClassUp = 'has-scrolled-up'; 39 var scrollClassDown = 'has-scrolled-down'; 40 window.addEventListener('scroll', function(){ 41 st = window.pageYOffset; 42 if (st > lastScrollTop){ 43 html.classList.add(scrollClassDown); 44 html.classList.remove(scrollClassUp); 45 siteHeader.classList.add(scrollClassDown); 46 siteHeader.classList.remove(scrollClassUp); 47 } else { 48 html.classList.add(scrollClassUp); 49 html.classList.remove(scrollClassDown); 50 siteHeader.classList.add(scrollClassUp); 51 siteHeader.classList.remove(scrollClassDown); 52 } 53 if (st >= siteHeaderHeight){ 54 html.classList.add(scrollClass); 55 siteHeader.classList.add(scrollClass); 56 } else { 57 html.classList.remove(scrollClass); 58 html.classList.remove(scrollClassUp); 59 html.classList.remove(scrollClassDown); 60 siteHeader.classList.remove(scrollClass); 61 siteHeader.classList.remove(scrollClassUp); 62 siteHeader.classList.remove(scrollClassDown); 63 64 } 65 lastScrollTop = st <= 0 ? 0 : st; 66 }); 67})(); 68 69 70//============================================================ 71// Nav active 72//============================================================ 73 74function navActive() { 75 var current = location.href; 76 var anchor = document.querySelectorAll('.navbar a, .content-nav a'); 77 var activeClass = 'active'; 78 79 for (var i = 0; i < anchor.length; i++) { 80 anchor[i].classList.remove(activeClass); 81 // anchor[i].setAttribute('aria-current',''); 82 if(anchor[i].href == current) { 83 anchor[i].classList.add(activeClass); 84 anchor[i].setAttribute('aria-current','page'); 85 } 86 } 87} 88 89(function() { 90 navActive(); 91})(); 92 93 94//============================================================ 95// Navbar toggle 96//============================================================ 97 98(function() { 99 var html = document.getElementsByTagName('html')[0]; 100 var navbarCollapse = document.getElementById('navbarSupportedContent'); 101 var navbarOpenClass = ('navbar-open'); 102 103 $(navbarCollapse).on('show.bs.collapse', function () { 104 this.classList.add(navbarOpenClass); 105 html.classList.add(navbarOpenClass); 106 document.addEventListener('click', function(e){ 107 var target = e.target; 108 if (target === navbarCollapse || navbarCollapse.contains(target)) { 109 return; 110 } else { 111 $(navbarCollapse).collapse('hide'); 112 } 113 }); 114 }); 115 $(navbarCollapse).on('hide.bs.collapse', function () { 116 this.classList.remove(navbarOpenClass); 117 html.classList.remove(navbarOpenClass); 118 }); 119})(); 120 121 122//============================================================ 123// Search toggle 124//============================================================ 125 126(function() { 127 var html = document.getElementsByTagName('html')[0]; 128 var navbarSearchCollapse = document.getElementById('searchSupportedContent'); 129 var navbarSearchInput = document.querySelectorAll('#searchSupportedContent .form-control')[0]; 130 131 $(navbarSearchCollapse).on('shown.bs.collapse', function () { 132 navbarSearchInput.focus(); 133 }); 134 135})(); 136 137 138//============================================================ 139// Object Fit Fallback 140// Must include .bg-* (or the deprecated .image-*) styles from _images.scss partial 141//============================================================ 142 143(function() { 144 if('objectFit' in document.documentElement.style === false) { 145 var objectFitContainer = document.querySelectorAll('[class*=" bg-cover"], [class^="bg-cover"], [class*=" bg-contain"], [class^="bg-contain"], [class*=" image-"], [class^="image-"]'); 146 for (var i = 0; i < objectFitContainer.length; i++) { 147 var obj = objectFitContainer[i]; 148 var img = obj.querySelector('img'); 149 if(obj.contains(img)) { 150 if (img.hasAttribute('data-src')) { 151 var imgSrc = img.getAttribute('data-src'); 152 } else { 153 var imgSrc = img.getAttribute('src'); 154 } 155 obj.setAttribute('style','background-image: url('+imgSrc+')'); 156 img.setAttribute('style','opacity: 0'); 157 } 158 } 159 } 160})(); 161 162 163//============================================================ 164// Loader 165//============================================================ 166 167(function() { 168 var html = document.getElementsByTagName('html')[0]; 169 window.addEventListener('load',function(){ 170 html.classList.add('site-loaded'); 171 html.classList.remove('site-loading'); 172 }); 173})(); 174 175//============================================================ 176// Quiz 177//============================================================ 178 179$('.widget-div form .btn').on('click', function (e) { 180 $('.quiz-error').detach(); 181 182 var fieldValue = $('input.custom-control-input:checked').val(); 183 var answerValue = $('input.custom-control-input:checked').attr("answer"); 184 185 if (answerValue && fieldValue != answerValue ) { 186 e.preventDefault(); 187 $('.widget-div form > div > fieldset').append('<div class="quiz-error text-primary pt-2"><p>Incorrect.</p></div>'); 188 } 189}); 190 191//============================================================ 192// Contrast Mode 193//============================================================ 194(function() { 195 var cookieName = 'high-contrast-mode'; 196 var highContrastEnabled = (getCookie(cookieName) === 'on'); 197 198 if ( (getCookie(cookieName) === 'on') ) { 199 $('body').addClass('high-contrast-on'); 200 $('body').removeClass('high-contrast-off'); 201 $('.btn-yes').addClass('btn-link--active'); 202 $('.btn-no').removeClass('btn-link--active'); 203 } else { 204 $('body').addClass('high-contrast-off'); 205 $('body').removeClass('high-contrast-on'); 206 $('.btn-yes').removeClass('btn-link--active'); 207 $('.btn-no').addClass('btn-link--active'); 208 } 209 210 $("#contrast-mode a").click(function() { 211 212 var btnClicked = $(this).data('high-contrast'); 213 if ((highContrastEnabled && btnClicked === 'off') || (!highContrastEnabled && btnClicked === 'on')) { 214 var contrastLink = $(this).attr('data-stylesheet'); 215 216 $('link#main-stylesheet').attr('href', contrastLink); 217 // $(this).toggleClass("btn-active--yes btn-active--no").siblings('.btn').toggleClass("btn-active--no btn-active--yes"); 218 $('body').toggleClass('high-contrast-on'); 219 $('body').toggleClass('high-contrast-off'); 220
221 setCookie(cookieName, btnClicked); 222 highContrastEnabled = (btnClicked === 'on'); 223 224 if ( (getCookie(cookieName) === 'on') ) { 225 $('.btn-yes').addClass('btn-link--active'); 226 $('.btn-no').removeClass('btn-link--active'); 227 } else { 228 $('.btn-yes').removeClass('btn-link--active'); 229 $('.btn-no').addClass('btn-link--active'); 230 } 231 } 232 233 return false; 234 235 }); 236})(); 237 238function setCookie(name, value, path, days) { 239 240 var expires = ""; 241 242 if (days) { 243 var date = new Date(); 244 date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 245 expires = "; expires=" + date.toUTCString(); 246 } 247 248 if (!path) { 249 path = '/' 250 } 251 252 var domain = window.location.hostname; domain = ";domain=" + domain.substring(domain.indexOf(".")); 253 document.cookie = name + "=" + value + expires + domain +";path=" + path; 254} 255 256function getCookie(name) { 257 var value = "; " + document.cookie; 258 var parts = value.split("; " + name + "="); 259 if(parts.length == 2) return parts.pop().split(";").shift(); 260} 261
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.