PageSourceSearch

https://www.gov.hk/js/top-enhancement.js?20211008.000006

js www.gov.hk collected 2026-09-24 08:29:55 UTC 11,803 bytes, 386 lines download raw bytes

1/*
2top.js
3last update
414:12 2017-02-06
59:54 2018-03-26 lang
615:35 2018-05-29 for feedin.js
714:14 2019-12-13 update DoYouKnow function via GovHK
811:16 2020-01-03 update for webcast
916:59 2020-12-10 jquery3 fix (load)
1015:45 2021-09-29 emblem update
11*/
12var doYouKnowRecord;
13// 9:51 2018-03-26 got the lang again (same as govhk.js)
14var lang = $('html').attr('lang')
15
16$(document).ready(function () {
17	$('#doYouKnow').addClass('init-collapsed');
18	initTopSection();
19	var isMobile = (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent));
20	edgeSvgFixed($('.searchHolder .searchMainBtn'));
21	edgeSvgFixed($('.subSearchBtn'));
22
23	var scrollAction = 'scroll';
24	if (isMobile) {
25		scrollAction = 'scroll touchmove';
26		//$('#innerLogo').addClass('mobile');
27	}
28	$(window).on(scrollAction, _.throttle(function () {
29		setFromTop();
30		scroll(); 
31		hmNewfixedMenuHandler();
32	}, 150));
33});
34
35$(window).on('resize', _.debounce(function () {
36	hmNewDoYouKnowHolderHandler();
37	setTimeout(function(){
38		hmNewDoYouKnowHolderHandler();
39	}, 300);
40	hmNewfixedMenuHandler();
41}, 50));
42
43// 17:03 2020-12-10 jquery3 fix
44//$(window).load(function () {
45$(window).on( "load", function () {
46	edgeSvgFixed($('.header nav .subMenu .searchWrapper .subSearchBtn'));
47	hmNewDoYouKnowHolderHandler();
48	initDoYouKnow();
49	hmNewfixedMenuHandler();
50	$('body').addClass('pageAllReady');
51});
52
53function initTopSection() {
54	//doyouknow
55	$('#navToggle').click(function () {
56		if (windowQueryWidth < 1200) {
57			setFromTop();
58			scroll();
59		}
60	});
61	$('#doYouKnow .closeBtn').click(function (event) {
62		event.preventDefault();
63		if (windowQueryWidth > 1200){
64			$('#doYouKnow').addClass('init-collapsed');
65		}
66		doYouKnowRecord = 1;
67		$.cookie("doYouKnow-" + lang, 1, {
68			expires: 1,
69			path: '/'
70		});
71		closeDoYouKnow();
72		
73		hmNewfixedMenuHandler();
74	});
75	$('#doYouKnowBtn a').click(function (event) {
76		event.preventDefault();
77		if (windowQueryWidth > 1200){
78			$('#doYouKnow').removeClass('collapsed');
79			$('#doYouKnow').removeClass('init-collapsed');
80		}
81		if (!$(this).hasClass('active')) {
82			doYouKnowRecord = 0;
83			openDoYouKnow();
84		} else {
85			doYouKnowRecord = 1;
86			closeDoYouKnow();
87		}
88	});
89	$('.mobileToggle').click(function (event) {
90		event.preventDefault();
91		if (!$('.doYouKnowOn').length) {
92			doYouKnowRecord = 0;
93			openDoYouKnow();
94		} else {
95			doYouKnowRecord = 1;
96			closeDoYouKnow();
97			$.cookie("doYouKnow-" + lang, 1, {
98				expires: 1,
99				path: '/'
100			});
101		}
102	});
103}
104
105
106
107// home page
108function initDoYouKnow() {
109	doYouKnowRecord = $.cookie("doYouKnow-" + lang);
110	if (isHomePage) {
111		$('#doYouKnowBtn a').addClass('active');
112		var activeTxt = $('#doYouKnowBtn a').data('title-active');
113		$('#doYouKnowBtn a').attr('title', activeTxt);
114		$('header, body').addClass('doYouKnowOn');
115	}
116	//doYouKnowRecord = false; //TEST
117
118	/*
119	// 16:27 2021-09-23 
120	// if (!doYouKnowRecord) { // org
121	if (doYouKnowRecord) {	
122		openDoYouKnow();	
123		//$.cookie("doYouKnow", 1, { expires : 1, path: '/' });
124	} else {
125		closeDoYouKnow();	
126		//$.cookie("doYouKnow", 1, { expires : 1, path: '/' });
127	}
128	*/
129	// 15:44 2021-09-29 just close do you know by default
130	closeDoYouKnow();	
131	
132	$('#doYouKnow').removeClass('notReady');
133}
134
135function openDoYouKnow(mode, aniMode) {
136	// 11:20 2018-05-23 for search autocomplete - no use
137	//if (doyouknow_suppress==1) return false;
138	$('#doYouKnow').removeClass('closing');
139	var aniTime = 300;
140	if (aniMode == 'still') {
141		$('#doYouKnow').removeAttr('style').show();
142		var curHeight = 0;
143		var autoHeight = $('.hmNewDoYouKnowHolder__inner').outerHeight();
144		if(isSafari){
145			$('body').addClass('doYouKnowOpening');
146			$('.hmNewPageContentHolder').css({'top': ''}).animate({top: autoHeight});
147		}
148		openProcess();
149	} else {
150		var $doYouKnow = $('#doYouKnow');
151		$doYouKnow.show();
152		var curHeight = 0;
153		var autoHeight = $('.hmNewDoYouKnowHolder__inner').outerHeight();
154		if(isSafari){
155			$('body').addClass('doYouKnowOpening');
156			$('.hmNewPageContentHolder').css({'top': ''}).animate({top: autoHeight});
157		}
158		$doYouKnow.height(curHeight).animate({height: autoHeight}, aniTime, function(){
159			openProcess();
160		});
161	}
162
163	function openProcess() {
164		var $doYouKnowBtn = $('#doYouKnowBtn a');
165		var activeTxt = $doYouKnowBtn.data('title-active');
166		$doYouKnowBtn.addClass('active').attr('title', activeTxt);
167		$('header, body').addClass('doYouKnowOn');
168		$('body').removeClass('doYouKnowOpening');
169	}
170}
171
172function closeDoYouKnow(mode, aniMode) {
173	var aniTime = 300;
174	var windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
175	//if (aniMode == 'still' || windowWidth<1201) {
176	$('header, body').removeClass('doYouKnowOn');
177	if (aniMode == 'still') {
178		$('#doYouKnow').hide();
179		closeProcess();
180	} else {
181		$('#doYouKnow').finish().slideUp(aniTime, function () {
182			closeProcess();
183		});
184	}
185
186	function closeProcess() {
187		var $doYouKnowBtn = $('#doYouKnowBtn a');
188		var inactiveTxt = $doYouKnowBtn.data('title-inactive');
189		$doYouKnowBtn.removeClass('active').attr('title', inactiveTxt);
190		$('header, body').removeClass('doYouKnowOn doYouKnowOpening');
191	}
192}
193
194function hmNewfixedMenuHandler() {
195   if ($('header.cleanHeader').length > 0) {
196      return false;
197   }
198   var fromTop = $(document).scrollTop();
199   var windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
200   var endPos = windowHeight * 0.12;
201   var doYouKnowOffset = 0;
202   if (!isHomePage) {
203      if (fromTop > endPos) {
204         $('body').addClass("menuFixed");
205      } else {
206         $('body').removeClass("menuFixed");
207      }
208   } else {
209	   if($('#doYouKnow:visible').length){
210			doYouKnowOffset = $('#doYouKnow').height();
211	   }
212
213      endPos = $('.hmNewTopPanel__main').offset().top + $('.hmNewTopPanel__main').outerHeight()*3/4 - doYouKnowOffset;
214      if (fromTop > endPos) {
215         $('body').addClass("menuFixed");
216      } else {
217         $('body').removeClass("menuFixed");
218      }
219   }
220   var $webCast = $('.webCast:visible');
221   var webCastHeight = 0;
222   if($webCast.length){
223		webCastHeight = $('.webCast').outerHeight();
224	}
225		var menuPos = webCastHeight;
226		if(windowWidth>767){
227		  //menuPos = endPos;
228		}
229		if(fromTop>menuPos || menuPos == 0){
230			$('body').addClass('isMobileMenuFixed');
231      if($('body').hasClass('iphone')){
232			  $('.hmNewDoYouKnowHolder').css('margin-top', '-'+webCastHeight+'px');
233      } else {
234			  $('.hmNewDoYouKnowHolder__inner').css('margin-top', '');
235      }
236			$('.hmNewHeader .menuBar').css('margin-top', '-'+webCastHeight+'px');
237		} else {
238			$('body').removeClass('isMobileMenuFixed');
239      if($('body').hasClass('iphone')){
240			  $('.hmNewDoYouKnowHolder').css('margin-top', '');
241      } else {
242			  $('.hmNewDoYouKnowHolder__inner').css('margin-top', '');
243      }
244			$('.hmNewHeader .menuBar').css('margin-top', '');
245		}
246}
247var isDoYouKnowHolderReady = false;
248function hmNewDoYouKnowHolderHandler(){
249	var $hmNewDoYouKnowHolder = $('.hmNewDoYouKnowHolder');
250	if (!isHomePage || !$hmNewDoYouKnowHolder.length) {
251	   return false;
252	}
253	var $hmNewDoYouKnowHolderInner = $hmNewDoYouKnowHolder.find('.hmNewDoYouKnowHolder__inner');
254	var $hmNewDoYouKnowHolderWrapper = $hmNewDoYouKnowHolder.find('.hmNewDoYouKnowHolder__wrapper');
255	$hmNewDoYouKnowHolderWrapper.height($hmNewDoYouKnowHolderInner.outerHeight());
256		var autoHeight = $('.hmNewDoYouKnowHolder__inner').outerHeight();
257		if(isSafari){
258			$('.hmNewPageContentHolder').css({'top':autoHeight});
259		}
260	$hmNewDoYouKnowHolder.css({'height':''});
261	if(!isDoYouKnowHolderReady){
262		$hmNewDoYouKnowHolder.addClass('isReady');
263		isDoYouKnowHolderReady = true;
264	}
265}
266
267
268// --- by GovHK
269// -------------
270// callback from ISD
271// 14:14 2019-12-13 change by GovHK
272function DoYouKnow(r) {
273	
274	var htmlHl = ''; //Highlight Item
275	var htmlList = ''; //List Item
276	var data = r.popup;
277	var j=-1;
278	// 9:34 2016-12-08 : add 6 dots on chinese
279	var do_you_know_txt = getTxtByLang2(['Do You Know?','想你知......','想你知......']);
280	var readmore_txt = getTxtByLang2(['Read more','閱讀更多','阅读更多']);
281	
282	// 11:29 2016-07-18 cannot assume feed-in is right
283	//doyouknow_items = Number(data.render_a1_items) + Number(data.render_tvapi_items);
284	doyouknow_items = 0;	// init
285	//alert('doyouknow_items at data ='+ doyouknow_items);
286	
287	console.log('data');
288	console.log(data);
289
290	a1_item = 0;
291	tv_item = 0;
292	
293	// 12:24 2019-12-13 change back from FS, must loop all items
294	// for(var i=0;i<4;i++) {
295	for(var i in data.items) {				
296		var obj = data.items[i];
297		
298		// 14:03 2019-12-13 increase count first
299		if (obj.type == "a1") { a1_item++; }
300		if (obj.type == "tvapi") { tv_item++; }
301		
302		/* Skip non-rendering, fix 11:28 2016-07-18 */
303		/* note: the 'false' is a text on data, not javascript true false */
304		if ( obj.render=='false'  || 
305			(obj.type == "a1" && a1_item > data.render_a1_items) || 
306			(obj.type == "tvapi" && tv_item > data.render_tvapi_items) ) {
307			continue;
308		}
309		
310		// doyouknow_items++; 14:05 2019-12-13 no need
311		//alert('2) pass: obj.render ' + obj.render);
312		// 15:29 2016-06-22 i may be skip, so it may not be 0,1,2,3...
313		// j will be 0,1,2... (after Skip non-rendering)
314		j++; 
315		// global variable for remove excessive items later
316		
317		
318		// 15:26 2016-05-26 KC: amend for icon
319		var videoThumb = obj.video_icon ? 'videoThumb' : '';
320		var win_name = obj.video_icon ? 'doyouknow-popup' : 'doyouknow-full';
321		
322		// youtube popup window
323		if (obj.video_url.indexOf('youtube')>0) {
324			win_name = 'doyouknow-full';
325		}
326		// note: "read more" alway pop full window
327		
328		var img_url = (obj.video_url || obj.article_url || '#');
329		// 14:58 2016-07-26 readmore_url is use article_url first
330		var readmore_url = (obj.article_url || obj.video_url || '#'); 
331		
332		//Get img host
333		var imgHost = "/";
334		var fullUrl = window.location.href;
335		if(fullUrl.indexOf('//www.gov.hk') < 0){
336			imgHost = fullUrl.split('/'+language+'/')[0]+'/';
337		}
338
339		// 14:09 2019-12-13 CAUTION: desktop layout different: 
340		// format first item in left side, second plus at right side
341		if(j==0){
342			htmlHl += '<div class="hmNewDoYouKnow__hlItem">';
343			htmlHl += '<a target="_blank" href="'+img_url+'" data-govhk-window='+win_name+' title="'+obj.title+'" class="hmNewDoYouKnow__hlThumb '+videoThumb+'">';
344			htmlHl += '<img src="'+obj.img+'" alt="'+obj.title+'" />';
345			htmlHl += '</a>';
346			htmlHl += '<a target="_blank" href="'+readmore_url+'" data-govhk-window='+win_name+' title="'+obj.title+'" class="hmNewDoYouKnow__hlTxt">';
347			htmlHl += '<div class="hmNewDoYouKnow__hlTitle">';
348			htmlHl += '<span>'+obj.title+'</span>';
349			htmlHl += '</div>';
350			htmlHl += '<div class="hmNewDoYouKnow__hlLink">';
351			htmlHl += '<span>'+readmore_txt+'</span>';
352			htmlHl += '</div>';
353			htmlHl += '</a>';
354			htmlHl += '</div>';
355		} else {
356			htmlList += '<a target="_blank" href="'+img_url+'" title="'+obj.title+'"  class="hmNewDoYouKnow__listItem">';
357			htmlList += '<div class="hmNewDoYouKnow__listThumb">';
358			htmlList += '<img src="'+obj.img+'" alt="'+obj.title+'" />';
359			htmlList += '</div>';
360			htmlList += '<div class="hmNewDoYouKnow__listTitle">';
361			htmlList += '<span>'+obj.title+'<img class="hmNewDoYouKnow__listArrow" src="'+imgHost
361+'images/home-enhancement/icon-arrow.svg" alt="" /></span>';
362			htmlList += '</div>';
363			htmlList += '</a>';
364		}
365
366	};
367	
368
369	$('.hmNewDoYouKnow__highlight').html(htmlHl);
370	$('.hmNewDoYouKnow__list').html(htmlList);
371
372	// handle doYouKnow Popup Window
373	popDoYouKnowWindow();
374	 
375}
376
377
378function getParameterByName(name, url) {
379    if (!url) url = window.location.href;
380    name = name.replace(/[\[\]]/g, "\\$&");
381    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
382        results = regex.exec(url);
383    if (!results) return null;
384    if (!results[2]) return '';
385    return decodeURIComponent(results[2].replace(/\+/g, " "));
386}

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.