PageSourceSearch

https://www.nasrfoundation.org/files/theme/custom_1531612430.js

js nasrfoundation.org collected 2026-10-02 09:57:27 UTC 6,517 bytes, 224 lines download raw bytes

1jQuery(function($) {
2
3	// Fixed nav
4	$.fn.checkElementPositioning = function($el, $offsetHeightEl, scrollClass) {
5    if (!this.length) {
6      return;
7    }
8
9		if(((this.offset().top - $(window).scrollTop()) <= $offsetHeightEl.outerHeight()) && !$el.hasClass(scrollClass)) {
10			$el.addClass(scrollClass);
11		} else if(((this.offset().top - $(window).scrollTop()) >= $offsetHeightEl.outerHeight()) && $el.hasClass(scrollClass)) {
12			$el.removeClass(scrollClass);
13		}
14	}
15
16  // Fade banner
17  $.fn.fadeBanner = function($el, scrollClass, offset) {
18    if (!this.length) {
19        return;
20    }
21
22    if((this.offset().top < ($(window).scrollTop() + offset)) && !$el.hasClass(scrollClass)) {
23      $el.addClass(scrollClass);
24    } else if((this.offset().top >= ($(window).scrollTop() + offset)) && $el.hasClass(scrollClass)) {
25      $el.removeClass(scrollClass);
26    }
27  }
28
29  // Mobile sidebars
30  $.fn.expandableSidebar = function(expandedClass) {
31    var $me = this;
32
33    $me.on('click', function() {
34      if(!$me.hasClass(expandedClass)) {
35        $me.addClass(expandedClass);
36      } else {
37        $me.removeClass(expandedClass);
38      }
39    });
40  }
41
42  // Interval loop
43  $.fn.intervalLoop = function(condition, action, duration, limit) {
44    var counter = 0;
45    var looper = setInterval(function(){
46      if (counter >= limit || $.fn.checkIfElementExists(condition)) {
47        clearInterval(looper);
48      } else {
49        action();
50        counter++;
51      }
52    }, duration);
53  }
54
55  // Check if element exists
56  $.fn.checkIfElementExists = function(selector) {
57    return $(selector).length;
58  }
59
60  var duskController = {
61
62    init: function(opts) {
63      var base = this;
64
65      // Check content positioning
66      if ($('.desktop-nav .wsite-menu-default').text().length > 1) {
67        $('.main-wrap').checkElementPositioning($('body.page-has-banner'), $('.dusk-header'), 'affix');
68      }
69
70      // Add classes to elements
71      base._addClasses();
72
73      setTimeout(function(){
74        base._checkCartItems();
75        base._attachEvents();
76      }, 1000);
77    },
78
79    _addClasses: function() {
80      var base = this;
81
82      // Add class to nav items with subnav
83      $('.wsite-menu-default').find('li.wsite-menu-item-wrap').each(function(){
84        var $me = $(this);
85
86        if($me.children('.wsite-menu-wrap').length > 0) {
87
88          $me.addClass('has-submenu');
89          $('<span class="icon-caret"></span>').insertAfter($me.children('a.wsite-menu-item'));
90        }
91      });
92
93      // Add class to subnav items with subnav
94      $('.wsite-menu').find('li.wsite-menu-subitem-wrap').each(function(){
95        var $me = $(this);
96
97        if($me.children('.wsite-menu-wrap').length > 0) {
98
99          $me.addClass('has-submenu');
100          $('<span class="icon-caret"></span>').insertAfter($me.children('a.wsite-menu-subitem'));
101        }
102      });
103
104        // Keep subnav open if submenu item is active
105        $('li.wsite-menu-subitem-wrap.wsite-nav-current').parents('.wsite-menu-wrap').addClass('open');
106
107      // Add placeholder text to inputs
108      $('.wsite-form-sublabel').each(function(){
109        var sublabel = $(this).text();
110        $(this).prev('.wsite-form-input').attr('placeholder', sublabel);
111      });
112
113      // Add fullwidth class to gallery thumbs if less than 6
114      $('.imageGallery').each(function(){
115        if ($(this).children('div').length <= 6) {
116          $(this).children('div').addClass('fullwidth-mobile');
117        }
118      });
119    },
120
121    _checkCartItems: function() {
122      var base = this;
123
124      if($('#wsite-mini-cart').find('li.wsite-product-item').length > 0) {
125        $('body').addClass('cart-full');
126      } else {
127        $('body').removeClass('cart-full');
128      }
129    },
130
131    _moveLogin: function() {
132      var loginDetach = $('#member-login').detach();
133      $('.mobile-nav .wsite-menu-default > li:last-child').after(loginDetach);
134    },
135
136    _attachEvents: function() {
137      var base = this;
138
139        // Nav toggle
140        $('label.hamburger').on('click', function() {
141            if(!$('body').hasClass('nav-open')) {
142                $('body').addClass('nav-open');
143            } else {
144                $('body').removeClass('nav-open');
145            }
146        });
147
148
149      // Move cart + login
150      if ($(window).width() <= 992) {
151        $.fn.intervalLoop('.mobile-nav #member-login', base._moveLogin, 800, 5);
152      }
153
154    	// Window scroll
155      if($('body').hasClass('page-has-banner')) {
156        var offset;
157        var headerHeight = $('.dusk-header').outerHeight();
158
159        $(window).on('scroll', function(){
160
161          // Set offset
162          if($(window).width() <= 767) {
163            offset = headerHeight;
164          } else {
165            offset = 0;
166          }
167
168          // Affix nav
169          if ($('.desktop-nav .wsite-menu-default').text().length > 1) {
170            $('.main-wrap').checkElementPositioning($('body.page-has-banner'), $('.dusk-header'), 'affix');
171          }
172
173          // Fade out banner header
174          $('body:not(.header-animation-off) .banner h2').fadeBanner($('body.page-has-banner'), 'fade-on-scroll', offset);
175        });
176      }
177
178        // Subnav toggle
179        $('li.has-submenu span.icon-caret').on('click', function() {
180            var $me = $(this);
181
182            if($me.siblings('.wsite-menu-wrap').hasClass('open')) {
183                $me.siblings('.wsite-menu-wrap').removeClass('open');
184            } else {
185                $me.siblings('.wsite-menu-wrap').addClass('open');
186            }
187        });
188
189      // Store category dropdown
190      $('.wsite-com-sidebar').expandableSidebar('sidebar-expanded');
191
192      // Search filters dropdown
193      $('#wsite-search-sidebar').expandableSidebar('sidebar-expanded');
194
195    	// Init fancybox swipe on mobile
196      if ('ontouchstart' in window) {
197        $('body').on('click', 'a.w-fancybox', function() {
198          base._initSwipeGallery();
199        });
200      }
201    },
202
203    _initSwipeGallery: function() {
204      var base = this;
205
206      setTimeout(function(){
207        var touchGallery = document.getElementsByClassName('fancybox-wrap')[0];
208        var mc = new Hammer(touchGallery);
209        mc.on("panleft panright", function(ev) {
210          if (ev.type == "panleft") {
211            $("a.fancybox-next").trigger("click");
212          } else if (ev.type == "panright") {
213            $("a.fancybox-prev").trigger("click");
214          }
215          base._initSwipeGallery();
216        });
217      }, 500);
218    }
219  }
220
221  $(document).ready(function(){
222    duskController.init();
223  });
224});

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.