1/** 2 * Created by K.Gusz on 2017-01-30. 3 */ 4 5var navTabs = (function () { 6 7 var tabTriggerSelector = '[data-toggle="tab"]:not([data-tab-type="vue-tab"])', 8 tabParentSelector = '.tab-content', 9 tabTriggerTargetAttribute = 'data-target', 10 scrollToTarget = '', 11 initialized = false; 12 13 var config = { 14 tabIdPrefix: 'tab_', 15 locationHashEnabled: true, 16 clearHashForFirstTab: true, 17 scrollToSelectedTabEnabled: true, 18 scrollOffset: -20, 19 scrollSpeed: 300 20 }; 21 22 var selectTabs = function (selector) { 23 var fallbackSelectorForTabs = '.tab-pane:nth-of-type(1)'; 24 25 if (typeof selector !== 'undefined' && selector !== '') { 26 $.each($(tabParentSelector), function (idx, tabParent) { 27 var $tabParent = $(tabParent), 28 selectedTabId = ''; 29 30 if ($(selector, $tabParent).length > 0) { 31 selectedTabId = $(selector, $tabParent).attr('id'); 32 if (config.scrollToSelectedTabEnabled) { 33 scrollToTarget = selectedTabId; 34 } 35 } else { 36 selectedTabId = $(fallbackSelectorForTabs, $tabParent).attr('id'); 37 } 38 var selectorString = '[' + tabTriggerTargetAttribute + '="#' + selectedTabId + '"]'; 39 $(selectorString).first().tab('show'); 40 }); 41 } 42 }; 43 44 var handleTealiumForTabs = function (e) { 45 var film_weighting_tab, 46 searchString = ''; 47 if (typeof $(e.currentTarget).attr(tabTriggerTargetAttribute) !== 'undefined' && $(e.currentTarget).attr(tabTriggerTargetAttribute) !== '') { 48 searchString = $(e.currentTarget).attr(tabTriggerTargetAttribute).replace('#' + config.tabIdPrefix, ''); 49 } 50 switch (searchString) { 51 case "nowBooking": 52 film_weighting_tab = _msg.show('nowBooking'); 53 break; 54 case "comingSoon": 55 film_weighting_tab = _msg.show('comingSoon'); 56 break; 57 case "bollywood": 58 film_weighting_tab = _msg.show('bollywood'); 59 break; 60 case "theatre": 61 film_weighting_tab = _msg.show('theatres'); 62 break; 63 } 64 return false; 65 }; 66 67 var handleHashInUrl = function () { 68 var hash = config.requestUrl.hash; 69 var selectorString = '.tab-pane[id="' + config.tabIdPrefix + hash.replace('#/', '').replace('#', '') + '"]'; 70 if(typeof config.requestUrl !== 'undefined' && typeof hash !== 'undefined' && hash !== '' && config.locationHashEnabled) { 71 selectTabs(selectorString); 72 scrollToTab(selectorString); 73 } else { 74 selectTabs('fallback'); 75 } 76 }; 77 78 var handleChangeHashInUrl = function (e) { 79 e.preventDefault(); 80 var id = $(e.target).attr(tabTriggerTargetAttribute), 81 isFirstChild = $(e.target).parent('li').is(':first-child'); 82 if (typeof id !== 'undefined' && id !== '' && id.indexOf('#' + config.tabIdPrefix) === 0) { 83 var targetHash = id.replace('#' + config.tabIdPrefix, ''); 84 if (isFirstChild) { 85 if (config.locationHashEnabled && config.clearHashForFirstTab) { 86 var scr = $(document).scrollTop(); 87 window.location.hash = ''; 88 $(document).scrollTop(scr); 89 } else if (config.locationHashEnabled && !config.clearHashForFirstTab) { 90 window.location.hash = targetHash; 91 } 92 } else { 93 if (config.locationHashEnabled) { 94 window.location.hash = targetHash; 95 } 96 } 97 } 98 return false; 99 }; 100 101 var handlePosterTab = function (e) { 102 if (typeof $(e.currentTarget).attr('data-load') !== 'undefined' && $(e.currentTarget).attr('data-load') !== '') { 103 var $previous = $(e.relatedTarget).attr('href'); 104 105 try { 106 var $toClean = $('.posters', $previous); 107 $toClean.removeClass('active'); 108 $toClean.mixItUp('destroy').removeClass('active').removeAttr('id'); 109 } catch (err) { 110 } 111 if ($('.tab-pane.active .posters.active > div').length === 0) { 112 var posterCont = $(e.target).attr(tabTriggerTargetAttribute) + ' .posters'; 113 var $target = $(e.currentTarget); 114 var queryObj = {}; 115 $('.tab-pane.active .posters').html($loaderLight); 116 $('.tab-pane.active .posters .loaderLight').append('<br><br>' + _msg.show('loadingPosters')); 117 queryObj['showingType'] = $target.data('showing-type'); 118 queryObj['orderingCode'] = $target.data('ordering'); 119 queryObj['attr'] = $target.data('attr'); 120 posters.get(queryObj, posterCont, e); 121 } 122 } 123 }; 124 125 var handleShownTab = function (e) { 126 127 var $target = $(e.target), 128 $navTabs = {}, 129 $dropdownTabs = {}, 130 id = $target.attr(tabTriggerTargetAttribute); 131 132 if ($target.parents('ul.nav.nav-tabs').length === 1) { 133 //destop nav mode 134 $navTabs = $target.parents('ul.nav.nav-tabs'); 135 $dropdownTabs = $target.parents('ul.nav.nav-tabs').siblings('.tab-content').find('.dropdown-tabs'); 136 137 } else if ($target.parents('.dropdown-menu.dropdown-tabs').length === 1) { 138 //mobile nav mode 139 $navTabs = $target.parents('.tab-content').siblings('.nav.nav-tabs'); 140 $dropdownTabs = $target.parents('.dropdown-tabs'); 141 } 142 143 $navTabs.find('li.visible-xs a').text($(this).text()); 144 145 $navTabs.find('li.active').removeClass('active'); 146 $navTabs.find("li > a[aria-selected='true']").attr('aria-selected', 'false'); 147 $dropdownTabs.find('li.active').removeClass('active'); 148 $dropdownTabs.find("li > a[aria-selected='true']").attr('aria-selected', 'false'); 149 150 $navTabs.find('[' + tabTriggerTargetAttribute + '="' + id + '"]').attr('aria-selected', 'true').parent('li').addClass('active'); 151 $dropdownTabs.find('[' + tabTriggerTargetAttribute + '="' + id + '"]').attr('aria-selected', 'true').parent('li').addClass('active'); 152 153 handleTealiumForTabs(e); 154 handlePosterTab(e); 155 }; 156 157 var handleClickTab = function (e) { 158 e.preventDefault(); 159 handleChangeHashInUrl(e); 160 }; 161 162 var scrollToTab = function (e) { 163 if (config.scrollToSelectedTabEnabled && scrollToTarget !== '') { 164 var targetId = '#' + scrollToTarget; 165 var offset = $(targetId).parents('.tab-content').parent().find('.nav.nav-tabs').first().offset().top; 166 $("html, body").animate({scrollTop: Math.abs(offset + config.scrollOffset)}, config.scrollSpeed); 167 } 168 return false;
169 }; 170 171 var init = function () { 172 if (!initialized) { 173 $(document).on('shown.bs.tab', tabTriggerSelector, handleShownTab); 174 $(document).on('click', tabTriggerSelector, handleClickTab); 175 } else { 176 console.log('navTabs module already initialized'); 177 } 178 return false; 179 }; 180 181 182 return { 183 handleHashInUrl: handleHashInUrl, 184 scrollToTab: scrollToTab, 185 init: init, 186 config: config 187 } 188 189})(); 190 191$(window).load(function (e) { 192 navTabs.handleHashInUrl(); 193 navTabs.scrollToTab(e); 194}); 195 196 197$(function () { 198 //change default module options here before init() 199 navTabs.config.requestUrl = requestUrl; 200 navTabs.init(); 201});
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.