1(function ($) { 2 'use strict' 3 4 /* Masonry --------------------- */ 5 function masonrySetup () { 6 // Exclude Isotope containers so Masonry doesn't initialize on top of them. 7 var $container = $('.obb-masonry-container').not('.obb-isotope'); 8 9 // Ensure Masonry initializes after images have loaded 10 $container.imagesLoaded(function() { 11 $container.masonry({ 12 gutter: '.obb-grid-spacer', 13 itemSelector: '.obb-masonry-wrapper' 14 }); 15 }); 16 } 17 18 /* Isotope --------------------- */ 19 function isotopeSetup () { 20 $('.obb-portfolio, .obb-posts').each(function (index, obj) { 21 var filterID = obj.getAttribute('data-id') 22 var $grid = $('#' + filterID + ' .obb-masonry-container.obb-isotope') 23 // Quick search regex 24 var qsRegex 25 26 // Initialize Isotope after images have loaded 27 $grid.imagesLoaded(function () { 28 $grid.isotope({ 29 itemSelector: '.obb-masonry-wrapper', 30 percentPosition: true, 31 masonry: { 32 gutter: '.obb-grid-spacer' 33 } 34 }) 35 }); 36 37 // use value of search field to filter 38 $('#' + filterID + ' .obb-filter-search').on('click', 'input', function () { 39 $('.obb-filter-buttons button').off('click') 40 var $quicksearch = $('.quicksearch').keyup(debounce(function () { 41 qsRegex = new RegExp($quicksearch.val(), 'gi') 42 $grid.isotope({ 43 filter: function () { 44 return qsRegex ? $(this).text().match(qsRegex) : true 45 } 46 }) 47 }, 200)) 48 }) 49 50 $('#' + filterID + ' .obb-filter-buttons').on('click', 'button', function () { 51 var filterValue = $(this).attr('data-filter') 52 $grid.isotope({ filter: filterValue }) 53 }) 54 55 // debounce so filtering doesn't happen every millisecond 56 function debounce (fn, threshold) { 57 var timeout 58 threshold = threshold || 100 59 return function debounced () { 60 clearTimeout(timeout) 61 var args = arguments 62 var _this = this 63 function delayed () { 64 fn.apply(_this, args) 65 } 66 timeout = setTimeout(delayed, threshold) 67 } 68 } 69 }) 70 } 71 72 // Recalculate layout on scroll to ensure items are in the correct positions 73 function recalculateLayoutOnScroll() { 74 $(window).on('scroll', function() { 75 $('.obb-masonry-container').each(function() { 76 var $this = $(this); 77 if ($this.is(':visible')) { 78 // Isotope containers must use isotope('layout'); calling masonry('layout') 79 // on them initializes a conflicting Masonry instance that collapses the grid. 80 if ($this.hasClass('obb-isotope')) { 81 $this.isotope('layout'); 82 } else { 83 $this.masonry('layout'); 84 } 85 } 86 }); 87 }); 88 } 89 90 $(document).ready(() => { 91 isotopeSetup(); 92 masonrySetup(); 93 recalculateLayoutOnScroll(); 94 }); 95 96 $(window).on('resize', () => { 97 isotopeSetup(); 98 masonrySetup(); 99 }); 100})(jQuery); 101; 102!function(){const o=window.navigator.userAgent;Object.entries({android:/android/i,iphone:/iPhone/i,ipad:/iPad/i}).forEach((([n,i])=>{o.match(i)&&document.body.classList.add(`tec-is-${n}`)}))}(),window.tec=window.tec||{},window.tec.common=window.tec.common||{},window.tec.common.userAgent={};; 103(function ($) { 104 'use strict' 105 106 function toggleBlock () { 107 /* Toggle Box --------------------- */ 108 $('.obb-toggle-trigger').click(function (e) { 109 // $(this).toggleClass('active').next().fadeToggle('slow') 110 $(this).toggleClass('active') 111 e.preventDefault() 112 }) 113 } 114 115 $(document) 116 .ready(toggleBlock) 117})(jQuery) 118; 119(function ($) { 120 'use strict' 121 122 /* Submenu Offset Fix --------------------- */ 123 function menuOffset () { 124 var mainWindowWidth = $(window).width() + 120 125 126 $('ul.obb-menu li.menu-item-has-children').mouseover(function () { 127 // Checks if third level menu exist 128 var subMenuExist = $(this).find('.sub-menu').length 129 if (subMenuExist > 0) { 130 var subMenuWidth = $(this).find('.sub-menu').width() 131 var subMenuOffset = $(this).find('.sub-menu').parent().offset().left + subMenuWidth 132 133 // If sub menu is off screen, give new position 134 if ((subMenuOffset + subMenuWidth) > mainWindowWidth) { 135 var newSubMenuPosition = subMenuWidth 136 $(this).find('.sub-menu').css({ 137 left: 'auto', 138 right: '0' 139 }) 140 $(this).find('.sub-menu .sub-menu').css({ 141 left: -newSubMenuPosition - 32, 142 right: '0' 143 }) 144 } 145 } 146 }) 147 } 148 149 /* Header Block Position --------------------- */ 150 function headerSetup () { 151 if ($('.obb-header').hasClass('position-fixed')) { 152 $('.site-header').attr('data-position', 'position-fixed') 153 } 154 if ($('.obb-header').hasClass('position-absolute')) { 155 $('.site-header').attr('data-position', 'position-absolute') 156 } 157 if ($(this).scrollTop() > 80) { 158 $('.header-transparent-scroll').addClass('scrolling') 159 $('.obb-mobile-menu-container').addClass('scrolling') 160 } else { 161 $('.header-transparent-scroll').removeClass('scrolling') 162 $('.obb-mobile-menu-container').removeClass('scrolling') 163 } 164 } 165 166 /* Header Block Mobile Submenus --------------------- */ 167 function subMenuSetup() { 168 if ($(window).width() <= 768) { 169 if ($('.obb-mobile-menus #mobile-nav-large ul.obb-menu ul.sub-menu').css('display') == 'none') { 170 // Toggle submenus 171 var subMenuToggle = $('.obb-menu li.menu-item-has-children > .dropdown').off(); 172 subMenuToggle.on('click', function(e) { 173 e.preventDefault(); 174 var submenu = $(this).parent().children('.obb-mobile-menus ul.obb-menu ul.sub-menu'); 175 if ($(submenu).is(':hidden')) { 176 $(submenu).slideDown(200); 177 } else { 178 $(submenu).slideUp(200); 179 } 180 }) 181 subMenuToggle.on('dblclick', function (e) { 182 window.location.replace($(this).attr('href')) 183 }) 184 } 185 } 186 } 187 188 function generalFunctions () { 189 /* Add Mobile Menu Dropdown Arrows --------------------- */ 190 $(".obb-mobile-menus #mobile-nav-large ul.obb-menu li.menu-item-has-children").append("<span class='dropdown'><i class='fas fa-chevron-down'></i></span>"); 191 192 /* Toggle Mobile Menu --------------------- */ 193 $('.obb-mobile-menu-container').each(function (index, obj) { 194 var mobileMenuID = obj.getAttribute('data-mobile-id') 195 $('#' + mobileMenuID + ' .obb-menu-toggle.open').on('click touchstart', function () { 196 $('.' + mobileMenuID + '.obb-mobile-menu-container').addClass('revealed') 197 $('body').addClass('mobile-menu-open') 198 }) 199 $('.' + mobileMenuID + ' .obb-menu-toggle.close, .' + mobileMenuID + ' .obb-mobile-menus li a').on('click swipeleft', function () { 200 $('.' + mobileMenuID + '.obb-mobile-menu-container').removeClass('revealed') 201 $('body').removeClass('mobile-menu-open') 202 }) 203 }) 204 205 /* Scroll To Top Button --------------------- */ 206 $('button.obb-footer-return').click(function () { 207 window.scroll({ 208 top: 0, 209 left: 0, 210 behavior: 'smooth' 211 }) 212 }) 213 214 /* Animate Page Scroll --------------------- */ 215 $('.scroll-link a').on('click', function (event) { 216 event.preventDefault() 217 var dest = $(this).attr('href') 218 // console.log(dest) 219 if (dest.length) { 220 $('html,body').animate({ scrollTop: $(dest).offset().top }, 500) 221 } 222 }) 223 224 /* Remove Links From Link Container Content --------------------- */ 225 $('.obb-link-content a').removeAttr('href') 226 227 /* Modal Button -------------------- */ 228 $('.obb-modal-open[rel~="modal:open"]').click(function (event) { 229 $(this).modal() 230 return false 231 }) 232 } 233 234 $(document) 235 .ready(generalFunctions) 236 .ready(menuOffset) 237 .ready(headerSetup) 238 239 $(window) 240 .on('scroll', headerSetup) 241 .on('load', subMenuSetup) 242 .on('resize', subMenuSetup) 243})(jQuery) 244;
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.