https://georgiamagazine.org/sites/default/files/js/js_LBMZO9VYTMFWS5mIqdYI1NdTUfHrCZvrSIUlxCiU3mM.js
1/** 2 * @file 3 * Contains javascript to refresh alert div contents. 4 */ 5 6(function ($, Drupal, drupalSettings) { 7 8 let callback; 9 10 // Function to update alert text. 11 let loadAlert = function (siteAlert) { 12 // Object contains information about the currently loaded theme for 13 // processing by our theme callback. Without it the default theme is always 14 // assumed. 15 let options = { 16 ajax_page_state: drupalSettings.ajaxPageState 17 }; 18 siteAlert.load(callback, options); 19 20 if (drupalSettings.siteAlert.timeout > 0) { 21 setTimeout(function () { 22 loadAlert(siteAlert); 23 }, drupalSettings.siteAlert.timeout * 1000); 24 } 25 }; 26 27 Drupal.behaviors.siteAlert = { 28 attach: function (context, settings) { 29 // Work around a core bug that prevents cached pages from being 30 // invalidated in time for scheduled alerts to appear. Immediately load 31 // the alerts. 32 // @todo Remove this workaround once the bug is fixed. 33 // @see https://www.drupal.org/project/site_alert/issues/3121988 34 if (drupalSettings.siteAlert.workaround_needed) { 35 callback = settings.path.baseUrl + 'ajax/site_alert'; 36 loadAlert($('.site-alert', context)); 37 } 38 39 // Update content at configured interval. 40 if (drupalSettings.siteAlert.timeout > 0) { 41 callback = settings.path.baseUrl + 'ajax/site_alert'; 42 setTimeout(function () { 43 loadAlert($('.site-alert', context)); 44 }, drupalSettings.siteAlert.timeout * 1000); 45 } 46 } 47 }; 48 49})(jQuery, Drupal, drupalSettings); 50; 51/* 52 * Superfish v1.4.8 - jQuery menu widget 53 * Copyright (c) 2008 Joel Birch 54 * 55 * Dual licensed under the MIT and GPL licenses: 56 * http://www.opensource.org/licenses/mit-license.php 57 * http://www.gnu.org/licenses/gpl.html 58 * 59 * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt 60 */ 61/* 62 * This is not the original jQuery Superfish plugin. 63 * Please refer to the README for more information. 64 */ 65 66(function($){ 67 $.fn.superfish = function(op){ 68 var sf = $.fn.superfish, 69 c = sf.c, 70 $arrow = $(['<span class="',c.arrowClass,'"> »</span>'].join('')), 71 over = function(){ 72 var $$ = $(this), menu = getMenu($$); 73 clearTimeout(menu.sfTimer); 74 $$.showSuperfishUl().siblings().hideSuperfishUl(); 75 }, 76 out = function(){ 77 var $$ = $(this), menu = getMenu($$), o = sf.op; 78 clearTimeout(menu.sfTimer); 79 menu.sfTimer=setTimeout(function(){ 80 if ($$.children('.sf-clicked').length == 0){ 81 o.retainPath=($.inArray($$[0],o.$path)>-1); 82 $$.hideSuperfishUl(); 83 if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);} 84 } 85 },o.delay); 86 }, 87 getMenu = function($menu){ 88 var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0]; 89 sf.op = sf.o[menu.serial]; 90 return menu; 91 }, 92 addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); }; 93 94 return this.each(function() { 95 var s = this.serial = sf.o.length; 96 var o = $.extend({},sf.defaults,op); 97 o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels); 98 var p = o.$path; 99 for (var l = 0; l < p.length; l++){ 100 p.eq(l).addClass([o.hoverClass,c.bcClass].join(' ')).filter('li:has(ul)').removeClass(o.pathClass); 101 } 102 sf.o[s] = sf.op = o; 103 104 $('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() { 105 if (o.autoArrows) addArrow( $(this).children('a:first-child, span.nolink:first-child') ); 106 }) 107 .not('.'+c.bcClass) 108 .hideSuperfishUl(); 109 110 var $a = $('a, span.nolink',this); 111 $a.each(function(i){ 112 var $li = $a.eq(i).parents('li'); 113 $a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);}); 114 }); 115 o.onInit.call(this); 116 117 }).each(function() { 118 var menuClasses = [c.menuClass]; 119 if (sf.op.dropShadows){ 120 menuClasses.push(c.shadowClass); 121 } 122 $(this).addClass(menuClasses.join(' ')); 123 }); 124 }; 125 126 var sf = $.fn.superfish; 127 sf.o = []; 128 sf.op = {}; 129 130 sf.c = { 131 bcClass: 'sf-breadcrumb', 132 menuClass: 'sf-js-enabled', 133 anchorClass: 'sf-with-ul', 134 arrowClass: 'sf-sub-indicator', 135 shadowClass: 'sf-shadow' 136 }; 137 sf.defaults = { 138 hoverClass: 'sfHover', 139 pathClass: 'overideThisToUse', 140 pathLevels: 1, 141 delay: 800, 142 animation: {opacity:'show'}, 143 speed: 'fast', 144 autoArrows: true, 145 dropShadows: true, 146 disableHI: false, // true disables hoverIntent detection 147 onInit: function(){}, // callback functions 148 onBeforeShow: function(){}, 149 onShow: function(){}, 150 onHide: function(){} 151 }; 152 $.fn.extend({ 153 hideSuperfishUl : function(){ 154 var o = sf.op, 155 not = (o.retainPath===true) ? o.$path : ''; 156 o.retainPath = false;
157 var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass) 158 .children('ul').addClass('sf-hidden'); 159 o.onHide.call($ul); 160 return this; 161 }, 162 showSuperfishUl : function(){ 163 var o = sf.op, 164 sh = sf.c.shadowClass+'-off', 165 $ul = this.addClass(o.hoverClass) 166 .children('ul.sf-hidden').hide().removeClass('sf-hidden'); 167 o.onBeforeShow.call($ul); 168 $ul.animate(o.animation,o.speed,function(){ o.onShow.call($ul); }); 169 return this; 170 } 171 }); 172})(jQuery);; 173/*! 174 * hoverIntent v1.10.1 // 2019.10.05 // jQuery v1.7.0+ 175 * http://briancherne.github.io/jquery-hoverIntent/ 176 * 177 * You may use hoverIntent under the terms of the MIT license. Basically that 178 * means you are free to use hoverIntent as long as this header is left intact. 179 * Copyright 2007-2019 Brian Cherne 180 */ 181!function(factory){"use strict";"function"==typeof define&&define.amd?define(["jquery"],factory):"object"==typeof module&&module.exports?module.exports=factory(require("jquery")):jQuery&&!jQuery.fn.hoverIntent&&factory(jQuery)}(function($){"use strict";function track(ev){cX=ev.pageX,cY=ev.pageY}var cX,cY,_cfg={interval:100,sensitivity:6,timeout:0},INSTANCE_COUNT=0,compare=function(ev,$el,s,cfg){if(Math.sqrt((s.pX-cX)*(s.pX-cX)+(s.pY-cY)*(s.pY-cY))<cfg.sensitivity)return $el.off(s.event,track),delete s.timeoutId,s.isActive=!0,ev.pageX=cX,ev.pageY=cY,delete s.pX,delete s.pY,cfg.over.apply($el[0],[ev]);s.pX=cX,s.pY=cY,s.timeoutId=setTimeout(function(){compare(ev,$el,s,cfg)},cfg.interval)};$.fn.hoverIntent=function(handlerIn,handlerOut,selector){var instanceId=INSTANCE_COUNT++,cfg=$.extend({},_cfg);$.isPlainObject(handlerIn)?(cfg=$.extend(cfg,handlerIn),$.isFunction(cfg.out)||(cfg.out=cfg.over)):cfg=$.isFunction(handlerOut)?$.extend(cfg,{over:handlerIn,out:handlerOut,selector:selector}):$.extend(cfg,{over:handlerIn,out:handlerIn,selector:handlerOut});function handleHover(e){var ev=$.extend({},e),$el=$(this),hoverIntentData=$el.data("hoverIntent");hoverIntentData||$el.data("hoverIntent",hoverIntentData={});var state=hoverIntentData[instanceId];state||(hoverIntentData[instanceId]=state={id:instanceId}),state.timeoutId&&(state.timeoutId=clearTimeout(state.timeoutId));var mousemove=state.event="mousemove.hoverIntent.hoverIntent"+instanceId;if("mouseenter"===e.type){if(state.isActive)return;state.pX=ev.pageX,state.pY=ev.pageY,$el.off(mousemove,track).on(mousemove,track),state.timeoutId=setTimeout(function(){compare(ev,$el,state,cfg)},cfg.interval)}else{if(!state.isActive)return;$el.off(mousemove,track),state.timeoutId=setTimeout(function(){!function(ev,$el,s,out){var data=$el.data("hoverIntent");data&&delete data[s.id],out.apply($el[0],[ev])}(ev,$el,state,cfg.out)},cfg.timeout)}}return this.on({"mouseenter.hoverIntent":handleHover,"mouseleave.hoverIntent":handleHover},cfg.selector)}});; 182/* 183 * sf-Smallscreen v1.3b - Provides small-screen compatibility for the jQuery Superfish plugin. 184 * 185 * Developer's note: 186 * Built as a part of the Superfish project for Drupal (http://drupal.org/project/superfish) 187 * Found any bug? have any cool ideas? contact me right away! http://drupal.org/user/619294/contact 188 * 189 * jQuery version: 1.3.x or higher. 190 * 191 * Dual licensed under the MIT and GPL licenses: 192 * http://www.opensource.org/licenses/mit-license.php 193 * http://www.gnu.org/licenses/gpl.html 194 */ 195 196(function($){ 197 $.fn.sfsmallscreen = function(options){ 198 options = $.extend({ 199 mode: 'inactive', 200 type: 'accordion', 201 breakpoint: 768, 202 breakpointUnit: 'px', 203 useragent: '', 204 title: '', 205 addSelected: false, 206 menuClasses: false, 207 hyperlinkClasses: false, 208 excludeClass_menu: '', 209 excludeClass_hyperlink: '', 210 includeClass_menu: '', 211 includeClass_hyperlink: '', 212 accordionButton: 1, 213 expandText: 'Expand', 214 collapseText: 'Collapse' 215 }, options); 216 217 // We need to clean up the menu from anything unnecessary. 218 function refine(menu){ 219 var 220 refined = menu.clone(), 221 // Things that should not be in the small-screen menus. 222 rm = refined.find('span.sf-sub-indicator'), 223 // This is a helper class for those who need to add extra markup that shouldn't exist 224 // in the small-screen versions. 225 rh = refined.find('.sf-smallscreen-remove'), 226 // Mega-menus has to be removed too. 227 mm = refined.find('ul.sf-multicolumn'); 228 for (var a = 0; a < rh.length; a++){ 229 rh.eq(a).replaceWith(rh.eq(a).html()); 230 } 231 if (options.accordionButton == 2 || options.type == 'select'){ 232 for (var b = 0; b < rm.length; b++){ 233 rm.eq(b).remove(); 234 } 235 } 236 if (mm.length > 0){ 237 mm.removeClass('sf-multicolumn'); 238 var ol = refined.find('div.sf-multicolumn-column > ol'); 239 for (var o = 0; o < ol.length; o++){ 240 ol.eq(o).replaceWith('<ul>' + ol.eq(o).html() + '</ul>'); 241 } 242 var elements = ['div.sf-multicolumn-column','.sf-multicolumn-wrapper > ol','li.sf-multicolumn-wrapper']; 243 for (var i = 0; i < elements.length; i++){ 244 obj = refined.find(elements[i]); 245 for (var t = 0; t < obj.length; t++){ 246 obj.eq(t).replaceWith(obj.eq(t).html()); 247 } 248 } 249 refined.find('.sf-multicolumn-column').removeClass('sf-multicolumn-column'); 250 } 251 refined.add(refined.find('*')).css({width:''}); 252 return refined; 253 } 254 255 // Creating <option> elements out of the menu. 256 function toSelect(menu, level){ 257 var 258 items = '', 259 childLI = $(menu).children('li'); 260 for (var a = 0; a < childLI.length; a++){ 261 var list = childLI.eq(a), parent = list.children('a, span'); 262 for (var b = 0; b < parent.length; b++){ 263 var 264 item = parent.eq(b), 265 path = (item.is('a') && !!item.attr('href')) ? item.attr('href') : '', 266 // Class names modification. 267 itemClone = item.clone(), 268 classes = (options.hyperlinkClasses) ? ((options.excludeClass_hyperlink && itemClone.hasClass(options.excludeClass_hyperlink)) ? itemClone.removeClass(options.excludeClass_hyperlink).attr('class') : itemClone.attr('class')) : '', 269 classes = (options.includeClass_hyperlink && !itemClone.hasClass(options.includeClass_hyperlink)) ? ((options.hyperlinkClasses) ? itemClone.addClass(options.includeClass_hyperlink).attr('class') : options.includeClass_hyperlink) : classes; 270 // Retaining the active class if requested. 271 if (options.addSelected && item.hasClass('active')){ 272 classes += ' active'; 273 } 274 classes = (classes) ? ' class="' + classes + '"' : ''; 275 // <option> has to be disabled if the item is not a link. 276 disable = (path == '') || (path == '#') ? ' disabled="disabled"' : '', 277 // Crystal clear. 278 subIndicator = 1 < level ? Array(level).join('-') + ' ' : ''; 279 // Preparing the <option> element. 280 items += '<option value="' + path + '"' + classes + disable + '>' + subIndicator + $.trim(item.text()) +'</option>', 281 childUL = list.find('> ul'); 282 // Using the function for the sub-menu of this item. 283 for (var u = 0; u < childUL.length; u++){
284 items += toSelect(childUL.eq(u), level + 1); 285 } 286 } 287 } 288 return items; 289 } 290 291 // Create the new version, hide the original. 292 function convert(menu){ 293 var menuID = menu.attr('id'), 294 // Creating a refined version of the menu. 295 refinedMenu = refine(menu); 296 // Currently the plugin provides two reactions to small screens. 297 // Converting the menu to a <select> element, and converting to an accordion version of the menu. 298 if (options.type == 'accordion'){ 299 var 300 toggleID = menuID + '-toggle', 301 accordionID = menuID + '-accordion'; 302 // Making sure the accordion does not exist. 303 if ($('#' + accordionID).length == 0){ 304 var 305 // Getting the style class. 306 styleClass = menu.attr('class').split(' ').filter(function(item){ 307 return item.indexOf('sf-style-') > -1 ? item : ''; 308 }), 309 // Creating the accordion. 310 accordion = $(refinedMenu).attr('id', accordionID); 311 // Removing unnecessary classes. 312 accordion.removeClass('sf-horizontal sf-vertical sf-navbar sf-shadow sf-js-enabled'); 313 // Adding necessary classes. 314 accordion.addClass('sf-accordion sf-hidden'); 315 // Removing style attributes and any unnecessary class. 316 accordion.find('li').each(function(){ 317 $(this).removeAttr('style').removeClass('sfHover').attr('id', $(this).attr('id') + '-accordion'); 318 }); 319 // Doing the same and making sure all the sub-menus are off-screen (hidden). 320 accordion.children('ul').removeAttr('style').not('.sf-hidden').addClass('sf-hidden'); 321 // Creating the accordion toggle switch. 322 var toggle = '<div class="sf-accordion-toggle ' + styleClass + '"><a href="#" id="' + toggleID + '"><span>' + options.title + '</span></a></div>'; 323 324 // Adding Expand\Collapse buttons if requested. 325 if (options.accordionButton == 2){ 326 accordion.addClass('sf-accordion-with-buttons'); 327 var parent = accordion.find('li.menuparent'); 328 for (var i = 0; i < parent.length; i++){ 329 parent.eq(i).prepend('<a href="#" class="sf-accordion-button">' + options.expandText + '</a>'); 330 } 331 } 332 // Inserting the according and hiding the original menu. 333 menu.before(toggle).before(accordion).hide(); 334 335 var 336 accordionElement = $('#' + accordionID), 337 // Deciding what should be used as accordion buttons. 338 buttonElement = (options.accordionButton < 2) ? 'a.menuparent,span.nolink.menuparent' : 'a.sf-accordion-button', 339 button = accordionElement.find(buttonElement); 340 341 // Attaching a click event to the toggle switch. 342 $('#' + toggleID).on('click', function(e){ 343 // Preventing the click. 344 e.preventDefault(); 345 // Adding the sf-expanded class. 346 $(this).toggleClass('sf-expanded'); 347 348 if (accordionElement.hasClass('sf-expanded')){ 349 // If the accordion is already expanded: 350 // Hiding its expanded sub-menus and then the accordion itself as well. 351 accordionElement.add(accordionElement.find('li.sf-expanded')).removeClass('sf-expanded') 352 .end().children('ul').hide() 353 // This is a bit tricky, it's the same trick that has been in use in the main plugin for some time. 354 // Basically we'll add a class that keeps the sub-menu off-screen and still visible, 355 // and make it invisible and removing the class one moment before showing or hiding it. 356 // This helps screen reader software access all the menu items. 357 .end().hide().addClass('sf-hidden').show(); 358 // Changing the caption of any existing accordion buttons to 'Expand'. 359 if (options.accordionButton == 2){ 360 accordionElement.find('a.sf-accordion-button').text(options.expandText); 361 } 362 } 363 else { 364 // But if it's collapsed, 365 accordionElement.addClass('sf-expanded').hide().removeClass('sf-hidden').show(); 366 } 367 }); 368 369 // Attaching a click event to the buttons. 370 button.on('click', function(e){ 371 // Making sure the buttons does not exist already. 372 if ($(this).closest('li').children('ul').length > 0){ 373 e.preventDefault(); 374 // Selecting the parent menu items. 375 var parent = $(this).closest('li'); 376 // Creating and inserting Expand\Collapse buttons to the parent menu items, 377 // of course only if not already happened.
378 if (options.accordionButton == 1 && parent.children('a.menuparent,span.nolink.menuparent').length > 0 && parent.children('ul').children('li.sf-clone-parent').length == 0){ 379 var 380 // Cloning the hyperlink of the parent menu item. 381 cloneLink = parent.children('a.menuparent').clone(); 382 // Removing unnecessary classes and element(s). 383 cloneLink.removeClass('menuparent sf-with-ul').children('.sf-sub-indicator').remove(); 384 // Wrapping the hyerplinks in <li>. 385 cloneLink = $('<li class="sf-clone-parent" />').html(cloneLink); 386 // Adding a helper class and attaching them to the sub-menus. 387 parent.children('ul').addClass('sf-has-clone-parent').prepend(cloneLink); 388 } 389 // Once the button is clicked, collapse the sub-menu if it's expanded. 390 if (parent.hasClass('sf-expanded')){ 391 parent.children('ul').slideUp('fast', function(){ 392 // Doing the accessibility trick after hiding the sub-menu. 393 $(this).closest('li').removeClass('sf-expanded').end().addClass('sf-hidden').show(); 394 }); 395 // Changing the caption of the inserted Collapse link to 'Expand', if any is inserted. 396 if (options.accordionButton == 2 && parent.children('.sf-accordion-button').length > 0){ 397 parent.children('.sf-accordion-button').text(options.expandText); 398 } 399 } 400 // Otherwise, expand the sub-menu. 401 else { 402 // Doing the accessibility trick and then showing the sub-menu. 403 parent.children('ul').hide().removeClass('sf-hidden').slideDown('fast') 404 // Changing the caption of the inserted Expand link to 'Collape', if any is inserted. 405 .end().addClass('sf-expanded').children('a.sf-accordion-button').text(options.collapseText) 406 // Hiding any expanded sub-menu of the same level. 407 .end().siblings('li.sf-expanded').children('ul') 408 .slideUp('fast', function(){ 409 // Doing the accessibility trick after hiding it. 410 $(this).closest('li').removeClass('sf-expanded').end().addClass('sf-hidden').show(); 411 }) 412 // Assuming Expand\Collapse buttons do exist, resetting captions, in those hidden sub-menus. 413 .parent().children('a.sf-accordion-button').text(options.expandText); 414 } 415 } 416 }); 417 } 418 } 419 else { 420 var 421 // Class names modification. 422 menuClone = menu.clone(), classes = (options.menuClasses) ? ((options.excludeClass_menu && menuClone.hasClass(options.excludeClass_menu)) ? menuClone.removeClass(options.excludeClass_menu).attr('class') : menuClone.attr('class')) : '', 423 classes = (options.includeClass_menu && !menuClone.hasClass(options.includeClass_menu)) ? ((options.menuClasses) ? menuClone.addClass(options.includeClass_menu).attr('class') : options.includeClass_menu) : classes, 424 classes = (classes) ? ' class="' + classes + '"' : ''; 425 426 // Making sure the <select> element does not exist already. 427 if ($('#' + menuID + '-select').length == 0){ 428 // Creating the <option> elements. 429 var newMenu = toSelect(refinedMenu, 1), 430 // Creating the <select> element and assigning an ID and class name. 431 selectList = $('<select' + classes + ' id="' + menuID + '-select"/>') 432 // Attaching the title and the items to the <select> element. 433 .html('<option>' + options.title + '</option>' + newMenu) 434 // Attaching an event then. 435 .change(function(){ 436 // Except for the first option that is the menu title and not a real menu item. 437 if ($('option:selected', this).index()){ 438 window.location = selectList.val(); 439 } 440 }); 441 // Applying the addSelected option to it. 442 if (options.addSelected){ 443 selectList.find('.active').attr('selected', !0); 444 } 445 // Finally inserting the <select> element into the document then hiding the original menu. 446 menu.before(selectList).hide(); 447 } 448 } 449 } 450 451 // Turn everything back to normal. 452 function turnBack(menu){ 453 var 454 id = '#' + menu.attr('id'); 455 // Removing the small screen version. 456 $(id + '-' + options.type).remove(); 457 // Removing the accordion toggle switch as well. 458 if (options.type == 'accordion'){ 459 $(id + '-toggle').parent('div').remove(); 460 } 461 // Remove inline CSS display property; less clear than simply using .show(), but respects stylesheet 462 $(id).css('display', ''); 463 } 464
465 // Return original object to support chaining. 466 // Although this is unnecessary because of the way the module uses these plugins. 467 for (var s = 0; s < this.length; s++){ 468 var 469 menu = $(this).eq(s), 470 mode = options.mode; 471 // The rest is crystal clear, isn't it? :) 472 if (menu.children('li').length == 0){ 473 // Skip empty menu which will not be visible and don't want to suddenly make it visible. 474 } 475 else if (mode == 'always_active'){ 476 convert(menu); 477 } 478 else if (mode == 'window_width'){ 479 var breakpoint = (options.breakpointUnit == 'em') ? (options.breakpoint * parseFloat($('body').css('font-size'))) : options.breakpoint, 480 windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, 481 timer; 482 if ((typeof Modernizr === 'undefined' || typeof Modernizr.mq !== 'function') && windowWidth < breakpoint){ 483 convert(menu); 484 } 485 else if (typeof Modernizr !== 'undefined' && typeof Modernizr.mq === 'function' && Modernizr.mq('(max-width:' + (breakpoint - 1) + 'px)')) { 486 convert(menu); 487 } 488 $(window).resize(function(){ 489 clearTimeout(timer); 490 timer = setTimeout(function(){ 491 var windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 492 if ((typeof Modernizr === 'undefined' || typeof Modernizr.mq !== 'function') && windowWidth < breakpoint){ 493 convert(menu); 494 } 495 else if (typeof Modernizr !== 'undefined' && typeof Modernizr.mq === 'function' && Modernizr.mq('(max-width:' + (breakpoint - 1) + 'px)')) { 496 convert(menu); 497 } 498 else { 499 turnBack(menu); 500 } 501 }, 50); 502 }); 503 } 504 else if (mode == 'useragent_custom'){ 505 if (options.useragent != ''){ 506 var ua = RegExp(options.useragent, 'i'); 507 if (navigator.userAgent.match(ua)){ 508 convert(menu); 509 } 510 } 511 } 512 else if (mode == 'useragent_predefined' && navigator.userAgent.match(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i)){ 513 convert(menu); 514 } 515 } 516 return this; 517 } 518})(jQuery); 519; 520/* 521 * Supposition v0.2 - an optional enhancer for Superfish jQuery menu widget. 522 * 523 * Copyright (c) 2008 Joel Birch - based mostly on work by Jesse Klaasse and credit goes largely to him. 524 * Special thanks to Karl Swedberg for valuable input. 525 * 526 * Dual licensed under the MIT and GPL licenses: 527 * http://www.opensource.org/licenses/mit-license.php 528 * http://www.gnu.org/licenses/gpl.html 529 */ 530/* 531 * This is not the original jQuery Supposition plugin. 532 * Please refer to the README for more information. 533 */ 534 535(function($){ 536 $.fn.supposition = function(){ 537 var $w = $(window), /*do this once instead of every onBeforeShow call*/ 538 _offset = function(dir) { 539 return window[dir == 'y' ? 'pageYOffset' : 'pageXOffset'] 540 || document.documentElement && document.documentElement[dir=='y' ? 'scrollTop' : 'scrollLeft'] 541 || document.body[dir=='y' ? 'scrollTop' : 'scrollLeft']; 542 }, 543 onHide = function(){ 544 this.css({bottom:''}); 545 }, 546 onBeforeShow = function(){ 547 this.each(function(){ 548 var $u = $(this); 549 $u.css('display','block'); 550 var $mul = $u.closest('.sf-menu'), 551 level = $u.parents('ul').length, 552 menuWidth = $u.width(), 553 menuParentWidth = $u.closest('li').outerWidth(true), 554 menuParentLeft = $u.closest('li').offset().left, 555 totalRight = $w.width() + _offset('x'), 556 menuRight = $u.offset().left + menuWidth, 557 exactMenuWidth = (menuRight > (menuParentWidth + menuParentLeft)) ? menuWidth - (menuRight - (menuParentWidth + menuParentLeft)) : menuWidth; 558 if ($u.parents('.sf-js-enabled').hasClass('rtl')) { 559 if (menuParentLeft < exactMenuWidth) { 560 if (($mul.hasClass('sf-horizontal') && level == 1) || ($mul.hasClass('sf-navbar') && level == 2)){ 561 $u.css({left:0,right:'auto'}); 562 } 563 else { 564 $u.css({left:menuParentWidth + 'px',right:'auto'}); 565 } 566 $u.parent().addClass('sf-supposition-active'); 567 } 568 } 569 else { 570 if (menuRight > totalRight && menuParentLeft > menuWidth) { 571 if (($mul.hasClass('sf-horizontal') && level == 1) || ($mul.hasClass('sf-navbar') && level == 2)){ 572 $u.css({right:0,left:'auto'}); 573 } 574 else { 575 $u.css({right:menuParentWidth + 'px',left:'auto'}); 576 } 577 $u.parent().addClass('sf-supposition-active'); 578 } 579 } 580 var windowHeight = $w.height(), 581 offsetTop = $u.offset().top, 582 menuParentShadow = ($mul.hasClass('sf-shadow') && $u.css('padding-bottom').length > 0) ? parseInt($u.css('padding-bottom').slice(0,-2)) : 0, 583 menuParentHeight = ($mul.hasClass('sf-vertical')) ? '-' + menuParentShadow : $u.parent().outerHeight(true) - menuParentShadow, 584 menuHeight = $u.height(), 585 baseline = windowHeight + _offset('y'); 586 var expandUp = ((offsetTop + menuHeight > baseline) && (offsetTop > menuHeight)); 587 if (expandUp) { 588 $u.css({bottom:menuParentHeight + 'px',top:'auto'}); 589 } 590 $u.css('display','none'); 591 }); 592 }; 593 594 return this.each(function() { 595 var o = $.fn.superfish.o[this.serial]; /* get this menu's options */ 596 597 /* if callbacks already set, store them */ 598 var _onBeforeShow = o.onBeforeShow, 599 _onHide = o.onHide; 600 601 $.extend($.fn.superfish.o[this.serial],{ 602 onBeforeShow: function() { 603 onBeforeShow.call(this); /* fire our Supposition callback */ 604 _onBeforeShow.call(this); /* fire stored callbacks */ 605 }, 606 onHide: function() { 607 onHide.call(this); /* fire our Supposition callback */ 608 _onHide.call(this); /* fire stored callbacks */ 609 } 610 }); 611 }); 612 }; 613})(jQuery);; 614/* 615 * Supersubs v0.4b - jQuery plugin 616 * Copyright (c) 2013 Joel Birch 617 * 618 * Dual licensed under the MIT and GPL licenses: 619 * http://www.opensource.org/licenses/mit-license.php 620 * http://www.gnu.org/licenses/gpl.html 621 * 622 * This plugin automatically adjusts submenu widths of suckerfish-style menus to that of 623 * their longest list item children. If you use this, please expect bugs and report them 624 * to the jQuery Google Group with the word 'Superfish' in the subject line. 625 * 626 */ 627/* 628 * This is not the original jQuery Supersubs plugin. 629 * Please refer to the README for more information. 630 */ 631 632(function($){ // $ will refer to jQuery within this closure 633 $.fn.supersubs = function(options){ 634 var opts = $.extend({}, $.fn.supersubs.defaults, options);
635 // return original object to support chaining 636 // Although this is unnecessary due to the way the module uses these plugins. 637 for (var a = 0; a < this.length; a++) { 638 // cache selections 639 var $$ = $(this).eq(a), 640 // support metadata 641 o = $.meta ? $.extend({}, opts, $$.data()) : opts; 642 // Jump one level if it's a "NavBar" 643 if ($$.hasClass('sf-navbar')) { 644 $$ = $$.children('li').children('ul'); 645 } 646 // cache all ul elements 647 var $ULs = $$.find('ul'); 648 if ($ULs.length) { 649 // get the font size of menu. 650 // .css('fontSize') returns various results cross-browser, so measure an em dash instead 651 var fontsize = $('<li id="menu-fontsize">—</li>'), 652 size = fontsize.attr('style','padding:0;position:absolute;top:-99999em;width:auto;') 653 .appendTo($$)[0].clientWidth; //clientWidth is faster than width() 654 // remove em dash 655 fontsize.remove(); 656 657 // loop through each ul in menu 658 for (var b = 0; b < $ULs.length; b++) { 659 var 660 // cache this ul 661 $ul = $ULs.eq(b); 662 // If a multi-column sub-menu, and only if correctly configured. 663 if (o.multicolumn && $ul.hasClass('sf-multicolumn') && $ul.find('.sf-multicolumn-column').length > 0){ 664 // Look through each column. 665 var $column = $ul.find('div.sf-multicolumn-column > ol'), 666 // Overall width. 667 mwWidth = 0; 668 for (var d = 0; d < $column.length; d++){ 669 resize($column.eq(d)); 670 // New column width, in pixels. 671 var colWidth = Math.ceil($column.width()); 672 // Just a trick to convert em unit to px. 673 $column.css({width:colWidth}) 674 // Making column parents the same size. 675 .parents('.sf-multicolumn-column').css({width:colWidth}); 676 // Overall width. 677 mwWidth += colWidth; 678 } 679 // Resizing the columns container too. 680 $ul.add($ul.find('li.sf-multicolumn-wrapper, li.sf-multicolumn-wrapper > ol')).css({width:mwWidth}); 681 } 682 else { 683 resize($ul); 684 } 685 } 686 } 687 } 688 function resize($ul){ 689 var 690 // get all (li) children of this ul 691 $LIs = $ul.children(), 692 // get all anchor grand-children 693 $As = $LIs.children('a'); 694 // force content to one line and save current float property 695 $LIs.css('white-space','nowrap'); 696 // remove width restrictions and floats so elements remain vertically stacked 697 $ul.add($LIs).add($As).css({float:'none',width:'auto'}); 698 // this ul will now be shrink-wrapped to longest li due to position:absolute 699 // so save its width as ems. 700 var emWidth = $ul.get(0).clientWidth / size; 701 // add more width to ensure lines don't turn over at certain sizes in various browsers 702 emWidth += o.extraWidth; 703 // restrict to at least minWidth and at most maxWidth 704 if (emWidth > o.maxWidth) {emWidth = o.maxWidth;} 705 else if (emWidth < o.minWidth) {emWidth = o.minWidth;} 706 emWidth += 'em'; 707 // set ul to width in ems 708 $ul.css({width:emWidth}); 709 // restore li floats to avoid IE bugs 710 // set li width to full width of this ul 711 // revert white-space to normal 712 $LIs.add($As).css({float:'',width:'',whiteSpace:''}); 713 // update offset position of descendant ul to reflect new width of parent. 714 // set it to 100% in case it isn't already set to this in the CSS 715 for (var c = 0; c < $LIs.length; c++) { 716 var $childUl = $LIs.eq(c).children('ul'); 717 var offsetDirection = $childUl.css('left') !== undefined ? 'left' : 'right'; 718 $childUl.css(offsetDirection,'100%'); 719 } 720 } 721 return this; 722 }; 723 // expose defaults 724 $.fn.supersubs.defaults = { 725 multicolumn: true, // define width for multi-column sub-menus and their columns. 726 minWidth: 12, // requires em unit. 727 maxWidth: 27, // requires em unit. 728 extraWidth: 1 // extra width can ensure lines don't sometimes turn over due to slight browser differences in how they round-off values 729 }; 730})(jQuery); // plugin code ends 731; 732(function ($, Drupal) { 733 Drupal.behaviors.superfish = { 734 attach(context, drupalSettings) { 735 // Take a look at each menu to apply Superfish to. 736 $.each(drupalSettings.superfish || {}, function (index, options) { 737 const $menu = $(`ul#${options.id}`, context); 738 739 // Check if we are to apply the Supersubs plug-in to it. 740 if (options.plugins) { 741 if (options.plugins.supersubs) { 742 $menu.supersubs(options.plugins.supersubs); 743 } 744 } 745 746 // Apply Superfish to the menu. 747 $menu.superfish(options.sf); 748 749 // Check if we are to apply any other plug-in to it. 750 if (options.plugins) { 751 if (options.plugins.touchscreen) { 752 $menu.sftouchscreen(options.plugins.touchscreen); 753 } 754 if (options.plugins.smallscreen) { 755 $menu.sfsmallscreen(options.plugins.smallscreen); 756 } 757 if (options.plugins.supposition) { 758 $menu.supposition(); 759 } 760 } 761 }); 762 }, 763 }; 764})(jQuery, Drupal); 765; 766jQuery(document).ready(function($) { 767 $(".to-top").click(function() { 768 $("body,html").animate({scrollTop:0},800); 769 }); 770}); 771; 772(function ($, Drupal, once) { 773 Drupal.behaviors.mtWaypointsAnimations = { 774 attach: function (context, settings) { 775 once('mtWaypointsAnimations', "body:not(.path-admin) [data-animate-effect]", context).forEach(function(item) { 776 var thisObject = $(item); 777 var animation = thisObject.attr("data-animate-effect"); 778 if(animation != "no-animation") { 779 var waypoints = thisObject.waypoint(function(direction) { 780 var animatedObject = $(this.element); 781 setTimeout(function() { 782 animatedObject.addClass("animated " + animation); 783 }, 100); 784 this.destroy(); 785 },{ 786 offset: "75%" 787 }); 788 } 789 }); 790 } 791 }; 792})(jQuery, Drupal, once); 793; 794/*! 795Waypoints Sticky Element Shortcut - 4.0.1 796Copyright © 2011-2016 Caleb Troughton 797Licensed under the MIT license. 798https://github.com/imakewebthings/waypoints/blob/master/licenses.txt 799*/ 800!function(){"use strict";function t(s){this.options=e.extend({},i.defaults,t.defaults,s),this.element=this.options.element,this.$element=e(this.element),this.createWrapper(),this.createWaypoint()}var e=window.jQuery,i=window.Waypoint;t.prototype.createWaypoint=function(){var t=this.options.handler;this.waypoint=new i(e.extend({},this.options,{element:this.wrapper,handler:e.proxy(function(e){var i=this.options.direction.indexOf(e)>-1,s=i?this.$element.outerHeight(!0):"";this.$wrapper.height(s),this.$element.toggleClass(this.options.stuckClass,i),t&&t.call(this,e)},this)}))},t.prototype.createWrapper=function(){this.options.wrapper&&this.$element.wrap(this.options.wrapper),this.$wrapper=this.$element.parent(),this.wrapper=this.$wrapper[0]},t.prototype.destroy=function(){this.$element.parent()[0]===this.wrapper&&(this.waypoint.destroy(),this.$element.removeClass(this.options.stuckClass),this.options.wrapper&&this.$element.unwrap())},t.defaults={wrapper:'<div class="sticky-wrapper" />',stuckClass:"stuck",direction:"down right"},i.Sticky=t}();; 801(function ($, Drupal, once) { 802 Drupal.behaviors.mtWaypointsFixedHeader = { 803 attach: function (context, settings) { 804 once('mtWaypointsFixedHeaderInit', ".header-container .header", context).forEach(function(item) { 805 var sticky = new Waypoint.Sticky ({ 806 element: $('.header-container .header')[0], 807 stuckClass: 'js-fixed', 808 handler: function(direction) { 809 if (Waypoint.viewportWidth() > 752) { 810 $('body', context).toggleClass('onscroll'); 811 } else { 812 $('body', context).removeClass('onscroll'); 813 } 814 var topValue = $('body').css('padding-top'); 815 $(".header.js-fixed").css("top", topValue); 816 }, 817 offset: function() { 818 var offsetValue = parseInt($('body').css('padding-top')) - 1; 819 return offsetValue; 820 } 821 }); 822 }); 823 } 824 }; 825})(jQuery, Drupal, once); 826;
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.