/** * HSCore - * * @author HtmlStream * @version 1.0 */ ; (function ($) { 'use strict'; $.HSCore = { /** * * * @param * * @return */ init: function () { $(document).ready(function (e) { // Botostrap Tootltips $('[data-toggle="tooltip"]').tooltip(); // Set Background Image Dynamically if ($('[data-bg-img-src]').length) $.HSCore.helpers.bgImage($('[data-bg-img-src]')); // Extends jQuery $.HSCore.helpers.extendjQuery(); // Detect Internet Explorer (IE) $.HSCore.helpers.detectIE(); // Bootstrap Navigation Options $.HSCore.helpers.bootstrapNavOptions.init(); }); $(window).on('load', function (e) { }); }, /** * * * @var */ components: {}, /** * * * @var */ helpers: { Math: { getRandomValueFromRange: function(startPoint, endPoint, fixed) { var fixedInner = fixed ? fixed : false; Math.random(); return fixedInner ? (Math.random() * (endPoint - startPoint) + startPoint) : (Math.floor(Math.random() * (endPoint - startPoint + 1)) + startPoint); } }, /** * Sets background-image dynamically. * * @param jQuery collection * * @return jQuery|undefined */ bgImage: function (collection) { if (!collection || !collection.length) return; return collection.each(function (i, el) { var $el = $(el), bgImageSrc = $el.data('bg-img-src'); if (bgImageSrc) $el.css('background-image', 'url(' + bgImageSrc + ')'); }); }, /** * Extends basic jQuery functionality * * @return undefined */ extendjQuery: function () { $.fn.extend({ /** * Runs specified function after loading of all images. * * @return Deferred */ imagesLoaded: function () { var $imgs = this.find('img[src!=""]'); if (!$imgs.length) { return $.Deferred().resolve().promise(); } var dfds = []; $imgs.each(function () { var dfd = $.Deferred(); dfds.push(dfd); var img = new Image(); img.onload = function () { dfd.resolve(); }; img.onerror = function () { dfd.resolve(); }; img.src = this.src; }); return $.when.apply($, dfds); } }); }, /** * Detect Internet Explorer (IE) * * @return version of IE or false, if browser is not Internet Explorer */ detectIE: function() { var ua = window.navigator.userAgent; var trident = ua.indexOf('Trident/'); if (trident > 0) { // IE 11 => return version number var rv = ua.indexOf('rv:'); var ieV = parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); document.querySelector('body').className += ' IE'; } var edge = ua.indexOf('Edge/'); if (edge > 0) { // IE 12 (aka Edge) => return version number var ieV = parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); document.querySelector('body').className += ' IE'; } // other browser return false; }, /** * Bootstrap navigation options * */ bootstrapNavOptions: { init: function () { this.mobileHideOnScroll(); }, mobileHideOnScroll: function () { var $collection = $('.navbar'); if (!$collection.length) return; var $w = $(window), breakpointsMap = { 'sm': 576, 'md': 768, 'lg': 992, 'xl': 1200 }; $('body').on('click.HSMobileHideOnScroll', '.navbar-toggler', function (e) { var $navbar = $(this).closest('.navbar'); if ($navbar.length) { $navbar.data('mobile-menu-scroll-position', $w.scrollTop()); } e.preventDefault(); }); $w.on('scroll.HSMobileHideOnScroll', function (e) { $collection.each(function (i, el) { var $this = $(el), $toggler, $nav, offset, $hamburgers, breakpoint; if ($this.hasClass('navbar-expand-xl')) breakpoint = breakpointsMap['xl']; else if ($this.hasClass('navbar-expand-lg')) breakpoint = breakpointsMap['lg']; else if ($this.hasClass('navbar-expand-md')) breakpoint = breakpointsMap['md']; else if ($this.hasClass('navbar-expand-xs')) breakpoint = breakpointsMap['xs']; if ($w.width() > breakpoint) return; $toggler = $this.find('.navbar-toggler'); $nav = $this.find('.navbar-collapse'); if (!$nav.data('mobile-scroll-hide')) return; if ($nav.length) { offset = $this.data('mobile-menu-scroll-position'); if (Math.abs($w.scrollTop() - offset) > 40 && $nav.hasClass('show')) { $toggler.trigger('click'); $hamburgers = $toggler.find('.is-active'); if ($hamburgers.length) { $hamburgers.removeClass('is-active'); } } } }); }); } } }, /** * * * @var */ settings: { rtl: false } }; $.HSCore.init(); })(jQuery);