PageSourceSearch

https://www.tinekhome.com/static/js/header.js?v=3.12.57

js tinekhome.com collected 2026-09-26 02:56:53 UTC 10,371 bytes, 303 lines download raw bytes

1'use strict';
2
3(function($, window) {
4    var gettext = window.gettext || function(s) {return s;};
5    var $doc = $(document);
6    var win = $(window);
7    var SITE = (window.Modernizr, SITE || {});
8
9    SITE = {
10        init: function() {
11            var obj;
12            var self = this;
13
14            for (obj in self) if (self.hasOwnProperty(obj)) {
15                var _method = self[obj];
16                void 0 !== _method.selector && void 0 !== _method.init && $(_method.selector).length > 0 && _method.init();
17            }
18
19            // Initiate Bootstrap tabs
20            var _tabs = $('#tabs').tab();
21
22            // Initiate Product slider
23            $('.image-carousel').slick({
24                mobileFirst: true,
25                slidesToShow: 1,
26                slidesToScroll: 1,
27                fade: false, // Must be false for zoom
28                swipe: false,  // Must be false for zoom
29                accessibility: true,
30                arrows: true,
31                imageCrossfade: true,
32                prevArrow: '<i class="fa fa-angle-left slick-prev"></i>',
33                nextArrow: '<i class="fa fa-angle-right slick-next"></i>'
34            });
35
36            var zoomOptions = {
37                zoomType	: "inner",
38                scrollZoom : false,
39                responsive : true,
40                cursor: "crosshair",
41                easing : true,
42                zoomWindowFadeIn: 500,
43                zoomWindowFadeOut: 500,
44                containLensZoom: true
45            };
46
47            // Initiate zoom based on active slide
48            $('.image-carousel')
49                .on('beforeChange', function(event, slick, currentSlide, nextSlide){
50                    $('.zoomContainer').remove();
51                    zoomImage.removeData('elevateZoom');
52                    zoomImage.removeData('zoomImage');
53
54                })
55                .on('afterChange', function(event, slick, currentSlide, nextSlide){
56                    zoomImage = $('.slick-current .zoom');
57                    zoomImage.elevateZoom(zoomOptions);
58                });
59
60           // Initiate Product Slider zoom
61            var zoomImage = $('.slick-current .zoom');
62            zoomImage.elevateZoom(zoomOptions);
63
64            // NOTE: Hack for making the zoom work along side the mmenu mm-page object.
65            var mm_page = $('.mm-page');
66
67            setInterval(function() {
68                var zoomContainer = $('body > .zoomContainer');
69
70                if(zoomContainer) {
71                    mm_page.append(zoomContainer.detach());
72                }
73            }, 500);
74        },
75        headRoom: {
76            selector: ".mainheader",
77            init: function() {
78                var base = this, container = $(base.selector);
79                win.scroll(function() {
80                    base.scroll(container);
81                });
82            },
83            scroll: function(container) {
84                var animationOffset = container.data("offset");
85                var wOffset = win.scrollTop();
86                var stick = container.data("stick-class");
87                var unstick = container.data("unstick-class");
88
89                wOffset > animationOffset ? (container.removeClass(unstick), container.hasClass(stick) || setTimeout(function() {
90                    container.addClass(stick);
91                }, 10)) : animationOffset > wOffset && wOffset > 0 ? container.hasClass(stick) && (container.removeClass(stick),
92                    container.addClass(unstick)) : (container.removeClass(stick), container.removeClass(unstick));
93            }
94        },
95        fullHeightContent: {
96            selector: ".full-height-content",
97            init: function() {
98                var base = this;
99                var container = $(base.selector);
100
101                base.resize(container);
102                win.resize(function() {
103                    base.resize(container);
104                });
105            },
106            resize: function(container) {
107                container.height(win.outerHeight());
108            }
109        }
110    };
111
112    win.resize(function() {
113        // Resize Zoom boks based on responsive size
114        setTimeout(function(){ // wait for fading
115            var zoom = $(".zoom");
116            var zoomContainer = $(".zoomContainer");
117            var zoomWindow = zoomContainer.find('.zoomWindow');
118
119            var height = zoom.css("height");
120            var width = zoom.css("width");
121
122            zoomContainer.css("height", height);
123            zoomContainer.css("width", width);
124            zoomWindow.css("height", height);
125            zoomWindow.css("width", width);
126        }, 100);
127    });
128
129    $(function() {
130        SITE.init();
131
132        var header = $('#header');
133        var nav = $('.container-sidebar .onepage-menu');
134        var footer = $('#footer');
135        var filter = $('#content-filter');
136        var mainheader = header.find('.mainheader');
137
138        // Header - .subheader
139        mainheader.toggleClass('has-no-hero', header.find('.subheader .subheader-inner').length == 0);
140
141        $('#header .subheader #subheader-inner .background-block-skip-button').click(function() {
142            var header_offset = header.offset();
143
144            if(header_offset) {
145                $('html,body').stop().animate({
146                    scrollTop: header_offset.top + header.height() - mainheader.height()
147                }, 500);
148            }
149        });
150
151        // Stick the #nav to the top of the window
152        var nav_offset = nav.offset();
153        var footer_offset = footer.offset();
154        var filter_offset = filter.offset();
155
156        var nav_offset_Y = nav_offset ? nav_offset.top : 0;
157        var footer_offset_Y = footer_offset ? footer_offset.top : 0;
158        var filter_offset_Y = filter_offset ? filter_offset.top : 0;
159
160        var nav_height = nav.outerHeight();
161        var header_height = header.outerHeight();
162        var mainheader_height = mainheader.outerHeight();
163
164        win.on('resize load', function() {
165            footer_offset = footer.offset();
166            nav_offset = nav.offset();
167
168            footer_offset_Y = footer_offset ? footer_offset.top : 0;
169            nav_offset_Y = nav_offset ? nav_offset.top : 0;
170
171            header_height = header.outerHeight();
172            mainheader_height = mainheader.outerHeight();
173        });
174
175        win.scroll(function() {
176            var scroll_top_limit = win.scrollTop();
177
178            var nav_limit_top_reached = scroll_top_limit + header_height > nav_offset_Y;
179            var nav_limit_bottom_reached = scroll_top_limit + header_height + nav_height > footer_offset_Y;
180
181            var filter_limit_top_reached = scroll_top_limit + mainheader_height > filter_offset_Y;
182
183            nav.toggleClass('menu-fixed', nav_limit_top_reached && !nav_limit_bottom_reached);
184            filter.toggleClass('filter-fixed', filter_limit_top_reached);
185        });
186
187        $('#nav-top-scroll').click(function() {
188            $('html,body').stop().animate({
189                scrollTop: 0
190            })
191        });
192    });
193
194    // Smooth onepage navigation
195    function scrollNav() {
196        $('.onepage-menu a').click(function(){
197            //Animate
198            $('html,body').stop().animate({
199                scrollTop: $( $(this).attr('href') ).offset().top - 70
200            }, 500);
201            return false;
202        });
203        $('.scrollTop a').scrollTop();
204    }
205    scrollNav();
206
207    // Offset scroll to match fixed navigation
208    $(document.body).scrollspy({target: ".container-sidebar .onepage-menu > nav", offset:90});
209
210    // Trigger Bootstrap tooltip
211    $('[data-toggle="tooltip"]').tooltip();
212
213    // Title switching for bootstrap dropdown
214    // $(".dropdown-menu li a").click(function(){
215    //     $(this).parents(".bte").find('.btn').html($(this).text() + ' <i class="fa fa-angle-down"></i>');
216    //     $(this).parents(".bte").find('.btn').val($(this).data('value'));
217    // });
218
219    $('.page-wrapper').on('boutique.favorite.change', '[ng-controller="FavoriteCtrl"]', function(e) {
220        var title = e.favorite.is_favorite ? $(this).attr('data-is-favorite') : $(this).attr('data-favorite');
221        var tooltip = $(this).find("[data-toggle='tooltip']").attr('data-original-title', title);
222
223        tooltip.tooltip('show');
224    });
225
226    /* Modal triggers */
227    $('.loginmodal').click(function() {
228        $('.modal').toggleClass('mlogin');
229        //return false;
230    });
231    $('.searchmodal').click(function() {
232        $('.modal').toggleClass('msearch');
233    });
234
235    /* Bootstrap modal*/
236    // var modal_cart = $('#modal-cart-updated');
237    var modal_cart = null;
238    var modal_alert = $('#modal-alert');
239
240    var modal_reservation_message = $('#reservation-message');
241    modal_reservation_message.modal('show');
242
243    function alert(message) {
244        var msg = modal_alert.find('#modal-alert-message');
245
246        msg.empty();
247        msg.html(message);
248
249        modal_alert.modal('show');
250    }
251
252    /* Reset after modal close */
253    $('body').on('hidden.bs.modal', '.modal', function () {
254        $(document.documentElement).removeClass('modal-open');
255
256        $(this).removeData('bs.modal');
257        $('.modal').removeClass('msearch');
258        $('.modal').removeClass('mlogin');
259        $('.modal').removeClass('maddtocart');
260        $('.modal').removeClass('mcart');
261    });
262
263    $('.modal').on('shown.bs.modal', function() {
264        $(document.documentElement).addClass('modal-open');
265
266        if(window._mmenu) {
267            window._mmenu.close();
268        }
269
270        $(this).find('[data-toggle="tabajax"]').click(function(e) {
271            var $this = $(this),
272                loadurl = $this.attr('data-href'),
273                targ = $this.attr('data-target');
274
275            if(!loadurl) {
276                loadurl = $this.attr('href');
277            }
278
279            $.get(loadurl, function(data) {
280                $(targ).html(data);
281            });
282
283            $this.tab('show');
284            return false;
285        });
286    });
287
288    $('.search-trigger').click(function() {
289        $('#myModalSearch').modal({
290            backdrop: false
291        });
292
293        return false;
294    });
295
296    /* Set focus in first input after modal load */
297    $('#myModalSearch').on('shown.bs.modal', function () {
298        $('#boutique-search-form input[name=q]').focus();
299    });
300
301    var _I;
302
303})(jQuery, window);

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.