PageSourceSearch

https://sekps.edu.hk/sites/all/themes/ntemplate/assets/js/sina-nav.js

js sekps.edu.hk collected 2026-10-07 00:03:01 UTC 8,713 bytes, 286 lines download raw bytes

1/**
2 * Template name: Sina-nav Multi Purpose Menu
3 * Template URI: https://github.com/shaonsina/sina-nav-4
4 * Version: 2.2
5 * Author: shaonsina
6 */
7
8(function ($) {
9	'use strict';
10	$.fn.sinaNav = function () {
11		return this.each( function() {
12			var getNav		= $(this),
13				top 		= getNav.data('top') || getNav.offset().top,
14				mdTop 		= getNav.data('md-top') || getNav.offset().top,
15				xlTop 		= getNav.data('xl-top') || getNav.offset().top,
16				navigation 	= getNav.find('.sina-menu'),
17				getWindow 	= $(window).outerWidth(),
18				anim 		= getNav.data('animate-prefix') || '',
19				getIn 		= navigation.data('in'),
20				getOut 		= navigation.data('out');
21
22				$(window).on('resize', function(){
23					getWindow 	= $(window).outerWidth();
24				});
25
26			// Active Class Add & Remove 
27			// ---------------------------
28			getNav.find('.sina-menu').each(function(){
29				var $menu = $(this);
30				$menu.on('click', function(e) {
31					if ( 'A' == e.target.tagName ) {
32						$menu.find('li.active').removeClass('active');
33						$(e.target).parent().addClass('active');
34					}
35				});
36
37				$menu.find('li.active').removeClass('active');
38				$menu.find( 'a[href="'+ location.href +'"]' ).parent('li').addClass('active');
39			});
40
41			// Navbar Center 
42			// ---------------------------------
43			if( getNav.hasClass('logo-center')){
44				var mainNav		= getNav.find('.sina-menu'),
45					rightNav 	= mainNav.clone(),
46					lists 		= mainNav.children('li'),
47					divided 	= Math.round(lists.length / 2);
48
49				// Remove All list item for newly creation
50				mainNav.empty();
51				rightNav.empty();
52
53				// Create left part
54				for (var i = 0; i < divided; i++) {
55					mainNav.append( lists[i] );
56				}
57				mainNav.addClass('sina-menu-right').wrap('<div class="col-half left"></div>');
58
59				// Create right part
60				for (var i = divided; i < lists.length; i++) {
61					rightNav.append( lists[i] );
62				}
63				getNav.find('.col-half.left').after( rightNav.addClass('sina-menu-dropdown-right sina-menu-left') );
64				rightNav.wrap('<div class="col-half right"></div>');
65			}
66
67			// Mobile Sidebar
68			// ---------------------------------
69			if( getNav.hasClass('mobile-sidebar') ) {
70				var $collapse = getNav.find('.navbar-collapse');
71
72				// Add Class to body
73				if ( $('body').children('.sina-nav-wrapper').length < 1 ) {
74					$('body').wrapInner('<div class="sina-nav-wrapper"></div>');
75				}
76
77				if ( getNav.hasClass('navbar-reverse') ) {
78					$collapse.on('shown.bs.collapse', function() {
79						$('body').addClass('mobile-left');
80					});
81					$collapse.on('hide.bs.collapse', function() {
82						$('body').removeClass('mobile-left');
83					});
84					$(window).on('resize', function(){
85						$('body').removeClass('mobile-left');
86						getNav.find('.navbar-collapse').removeClass('show');
87						getNav.find('.navbar-toggle .fa', this).removeClass('fa-times').addClass('fa-bars');
88					});
89				}
90				else{
91					$collapse.on('shown.bs.collapse', function() {
92						$('body').addClass('mobile-right');
93					});
94					$collapse.on('hide.bs.collapse', function() {
95						$('body').removeClass('mobile-right');
96					});
97					$(window).on('resize', function(){
98						$('body').removeClass('mobile-right');
99						getNav.find('.navbar-collapse').removeClass('show');
100						getNav.find('.navbar-toggle .fa', this).removeClass('fa-times').addClass('fa-bars');
101					});
102				}
103			}
104
105			// Navbar Fixed
106			// ---------------------------------
107			function freezNav() {
108				var scrollTop = $(window).scrollTop(),
109					winWidth  = $(window).outerWidth();
110
111				if( winWidth > 1599 && scrollTop > xlTop ){
112					getNav.addClass('navbar-freez');
113				}
114				else if( winWidth < 1600 && winWidth > 1199 && scrollTop > top ){
115					getNav.addClass('navbar-freez');
116				}
117				else if( winWidth < 1200 && winWidth > 820 && scrollTop > mdTop ){
118					getNav.addClass('navbar-freez');
119				}
120				else {
121					getNav.removeClass('navbar-freez');
122				}
123			}
124			if( getNav.hasClass('navbar-fixed') ){
125
126				$(window).on('scroll', function(){
127					freezNav();
128				});
129				$(window).on('resize', function(){
130					freezNav();
131				});
132
133				if ( getWindow > 820 && $(window).scrollTop() > top ) {
134					getNav.addClass('navbar-freez');
135				}
136			}
137
138			// Navbar Transparent
139			// ---------------------------------
140			function transNav() {
141				var scrollTop = $(window).scrollTop(),
142					winWidth  = $(window).outerWidth();
143
144				if( winWidth > 1599 && scrollTop > xlTop ){
145					getNav.removeClass('navbar-transparent');
146				}
147				else if( winWidth < 1600 && winWidth > 1199 && scrollTop > top ){
148					getNav.removeClass('navbar-transparent');
149				}
150				else if( winWidth < 1200 && winWidth > 820 && scrollTop > mdTop ){
151					getNav.removeClass('navbar-transparent');
152				}
153				else {
154					getNav.addClass('navbar-transparent');
155				}
156			}
157			if( getNav.hasClass('navbar-transparent') ){
158
159				$(window).on('scroll', function(){
160					transNav();
161				});
162				$(window).on('resize', function(){
163					transNav();
164				});
165
166				if ( getWindow > 820 && $(window).scrollTop() > top ) {
167					getNav.removeClass('navbar-transparent');
168				}
169			}
170
171			// Search-box
172			// ---------------------------------
173			getNav.find('.extension-nav').each(function(){
174				$('.search > a', this).on('click', function(e){
175					e.preventDefault();
176					$('.search-box').slideToggle();
177				});
178			});
179			$('.search-addon.close-search').on('click', function(){
180				$('.search-box').slideUp();
181			});
182
183			// Widget-bar
184			// ---------------------------------
185			getNav.find('.extension-nav').each(function(){
186				$('.widget-bar-btn > a', this).on('click', function(e){
187					e.preventDefault();
188					getNav.children('.sina-nav-overlay').fadeIn(400);
189					getNav.children('.widget-bar').toggleClass('on');
190				});
191			});
192			getNav.find('.widget-bar .close-widget-bar').on('click', function(e){
193				e.preventDefault();
194				getNav.children('.widget-bar').removeClass('on');
195				getNav.children('.sina-nav-overlay').fadeOut(600);
196			});
197			getNav.children('.sina-nav-overlay').on('click', function() {
198				getNav.children('.widget-bar').removeClass('on');
199				$(this).fadeOut(600);
200			});
201
202			// Toggle Button
203			getNav.find('.navbar-toggle').on('click', function(){
204				$('.fa', this).toggleClass('fa-bars').toggleClass('fa-times');
205			});
206
207
208			// Eevent
209			// -------------------------------------
210			getNav.find('.sina-menu, .extension-nav').each(function(){
211				var menu = this;
212
213				$('.dropdown-toggle', menu).on('click', function (e) {
214					e.stopPropagation();
215					return false;
216				});
217
218				$('.dropdown-menu', menu).addClass(anim+'animated');
219				$('.dropdown', menu).on('mouseenter', function(){
220					var dropdown = this;
221
222					$('.dropdown-menu', dropdown).eq(0).removeClass(getOut).stop().fadeIn().addClass(getIn);
223					$(dropdown).addClass('on');
224				});
225				$('.dropdown', menu).on('mouseleave', function(){
226					var dropdown = this;
227
228					$('.dropdown-menu', dropdown).eq(0).removeClass(getIn).stop().fadeOut().addClass(getOut);
229					$(dropdown).removeClass('on');
230				});
231
232				$('.dropdown', menu).on('focusin', function(){
233					var dropdown = this;
234
235					$('.dropdown-menu', dropdown).eq(0).removeClass(getOut).stop().fadeIn().addClass(getIn);
236					$(dropdown).addClass('on');
237				});
238				$('.dropdown', menu).on('focusout', function(){
239					var dropdown = this;
240
241					$('.dropdown-menu', dropdown).eq(0).removeClass(getIn).stop().fadeOut().addClass(getOut);
242					$(dropdown).removeClass('on');
243				});
244				$('.mega-menu-col', menu).children('.sub-menu').removeClass('dropdown-menu '+anim+'animated');
245			});
246
247			if( getWindow < 1025 ) {
248				// Megamenu
249				getNav.find('.menu-item-has-mega-menu').each(function(){
250					var megamenu 	= this,
251						$columnMenus = [];
252
253					$('.mega-menu-col', megamenu).children('.sub-menu').addClass('dropdown-menu '+anim+'animated');
254					$('.mega-menu-col', megamenu).each(function(){
255						var megamenuColumn = this;
256
257						$('.mega-menu-col-title', megamenuColumn).on('mouseenter', function(){
258							var title = this;
259
260							$(title).closest('.mega-menu-col').addClass('on');
261							$(title).siblings('.sub-menu').stop().fadeIn().addClass(getIn);
262						});
263
264						if( !$(megamenuColumn).children().is('.mega-menu-col-title') ) {
265							$columnMenus.push( $(megamenuColumn).children('.sub-menu') );
266						}
267					});
268
269					$(megamenu).on('mouseenter', function(){
270						var submenu;
271						for (submenu in $columnMenus) {
272							$columnMenus[ submenu ].stop().fadeIn().addClass(getIn);
273						}	
274					});
275
276					$(megamenu).on('mouseleave', function() {
277						$('.dropdown-menu', megamenu).stop().fadeOut().removeClass(getIn);
278						$('.mega-menu-col', megamenu).removeClass('on');
279					});
280				});
281			}
282		});
283	}
284	// Initialize
285	$('.sina-nav').sinaNav();
286}(jQuery));

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.