PageSourceSearch

https://www.levaudoue.fr/wp-content/plugins/trx_utils/shortcodes/theme.shortcodes.js

js levaudoue.fr collected 2026-10-02 12:39:06 UTC 36,005 bytes, 1,015 lines download raw bytes

1// Document ready actions for shortcodes
2jQuery(document).ready(function(){
3	"use strict";
4	setTimeout(function() {
5		citygov_sc_animation();
6	}, 600);
7});
8
9
10// Resize actions
11jQuery(window).resize(function(){
12	"use strict";
13	citygov_sc_sliders_resize();
14});
15
16
17// Animation
18function citygov_sc_animation() {
19	jQuery('[data-animation^="animated"]:not(.animated)').each(function() {
20		"use strict";
21		if (jQuery(this).offset().top < jQuery(window).scrollTop() + jQuery(window).height())
22			jQuery(this).addClass(jQuery(this).data('animation'));
23	});
24}
25
26
27// Shortcodes init
28function citygov_sc_init(container) {
29
30	// Accordion
31	if (container.find('.sc_accordion:not(.inited)').length > 0) {
32		container.find(".sc_accordion:not(.inited)").each(function () {
33			"use strict";
34			var init = jQuery(this).data('active');
35			if (isNaN(init)) init = 0;
36			else init = Math.max(0, init);
37			jQuery(this)
38				.addClass('inited')
39				.accordion({
40					active: init,
41					heightStyle: "content",
42					header: "> .sc_accordion_item > .sc_accordion_title",
43					create: function (event, ui) {
44						"use strict";
45						citygov_init_shortcodes(ui.panel);
46						if (window.citygov_init_hidden_elements) citygov_init_hidden_elements(ui.panel);
47						ui.header.each(function () {
48							"use strict";
49							jQuery(this).parent().addClass('sc_active');
50						});
51					},
52					activate: function (event, ui) {
53						"use strict";
54						citygov_init_shortcodes(ui.newPanel);
55						if (window.citygov_init_hidden_elements) citygov_init_hidden_elements(ui.newPanel);
56						ui.newHeader.each(function () {
57							"use strict";
58							jQuery(this).parent().addClass('sc_active');
59						});
60						ui.oldHeader.each(function () {
61							"use strict";
62							jQuery(this).parent().removeClass('sc_active');
63						});
64					}
65				});
66		});
67	}
68
69	// Blogger: style Polaroid
70	if (container.find('.sc_blogger.layout_polaroid .photostack:not(.inited)').length > 0) {
71		container.find(".sc_blogger.layout_polaroid .photostack:not(.inited)").each(function () {
72			"use strict";
73			var obj = jQuery(this);
74			var id = obj.attr('id');
75			if (id == undefined) {
76				id = 'photostack_'+Math.random();
77				id = id.replace('.', '');
78				obj.attr('id', id);
79			}
80			setTimeout(function() {
81				"use strict";
82				obj.addClass('inited').parent().height("auto");
83				new Photostack( obj.get(0), {
84					callback: function( item ) {
85					}
86				} );
87			}, 10);
88		});
89	}
90
91	// Blogger: Scroll horizontal
92	if (container.find('.sc_blogger .sc_scroll_horizontal .sc_scroll_wrapper:not(.inited)').length > 0) {
93		container.find(".sc_blogger .sc_scroll_horizontal .sc_scroll_wrapper:not(.inited)").each(function () {
94			"use strict";
95			var obj = jQuery(this);
96			var width = 0;
97			obj.find('.isotope_item').each(function(){
98				"use strict";
99				width += jQuery(this).outerWidth();
100			});
101			obj.addClass('inited').width(width);
102		});
103	}
104
105	// Form
106	if (container.find('.sc_form:not(.inited) form').length > 0) {
107		container.find(".sc_form:not(.inited) form").each(function() {
108			"use strict";
109			jQuery(this).addClass('inited');
110			jQuery(this).submit(function(e) {
111				"use strict";
112				citygov_sc_form_validate(jQuery(this));
113				e.preventDefault();
114				return false;
115			});
116			if (jQuery(this).find('.js__datepicker').length > 0) {
117				jQuery(this).find('.js__datepicker').pickadate({
118					// Work-around for some mobile browsers clipping off the picker.
119					onOpen: function() {
120						"use strict";
121						jQuery('pre').css('overflow', 'hidden');
122						},
123					onClose: function() {
124						"use strict";
125						jQuery('pre').css('overflow', '');
126					},
127					monthsShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec' ],
128					showMonthsShort: true,
129					format: 'dd.mm.yyyy',
130					formatSubmit: 'yyyy-mm-dd',
131					min: true
132				});
133			}
134			if (jQuery(this).find('.js__timepicker').length > 0) {
135				jQuery(this).find('.js__timepicker').pickatime();
136			}
137		});
138	}
139
140	//Countdown
141	if (container.find('.sc_countdown:not(.inited)').length > 0) {
142		container.find('.sc_countdown:not(.inited)')
143			.each(function () {
144				"use strict";
145				jQuery(this).addClass('inited');
146				var id = jQuery(this).attr('id');
147				var curDate = new Date(); 
148				var curDateTimeStr = curDate.getFullYear()+'-'+(curDate.getMonth()<9 ? '0' : '')+(curDate.getMonth()+1)+'-'+(curDate.getDate()<10 ? '0' : '')+curDate.getDate()
149					+' '+(curDate.getHours()<10 ? '0' : '')+curDate.getHours()+':'+(curDate.getMinutes()<10 ? '0' : '')+curDate.getMinutes()+':'+(curDate.getSeconds()<10 ? '0' : '')+curDate.getSeconds(); 
150				var interval = 1;
151				var endDateStr = jQuery(this).data('date');
152				var endDateParts = endDateStr.split('-');
153				var endTimeStr = jQuery(this).data('time');
154				var endTimeParts = endTimeStr.split(':');
155				if (endTimeParts.length < 3) endTimeParts[2] = '00';
156				var endDateTimeStr = endDateStr+' '+endTimeStr;
157				if (curDateTimeStr < endDateTimeStr) {
158					jQuery(this).find('.sc_countdown_placeholder').countdown({
159						until: new Date(endDateParts[0], endDateParts[1]-1, endDateParts[2], endTimeParts[0], endTimeParts[1], endTimeParts[2]), 
160						tickInterval: interval,
161						onTick: citygov_countdown
162					}); 
163				} else {
164					jQuery(this).find('.sc_countdown_placeholder').countdown({
165						since: new Date(endDateParts[0], endDateParts[1]-1, endDateParts[2], endTimeParts[0], endTimeParts[1], endTimeParts[2]), 
166						tickInterval: interval,
167						onTick: citygov_countdown
168					}); 
169				}
170			});
171	}
172
173	// Emailer form
174	if (container.find('.sc_emailer:not(.inited)').length > 0) {
175		container.find(".sc_emailer:not(.inited)")
176			.addClass('inited')
177			.on('click', '.sc_emailer_button', function(e) {
178				"use strict";
179				var form = jQuery(this).parents('form');
180				var parent = jQuery(this).parents('.sc_emailer');
181				if (parent.hasClass('sc_emailer_opened')) {
182					if (form.length>0 && form.find('input').val()!='') {
183						var group = jQuery(this).data('group');
184						var email = form.find('input').val();
185						var regexp = new RegExp(CITYGOV_STORAGE['email_mask']);
186						if (!regexp.test(email)) {
187							form.find('input').get(0).focus();
188							citygov_message_warning(CITYGOV_STORAGE['strings']['email_not_val
188id']);
189						} else {
190							jQuery.post(CITYGOV_STORAGE['ajax_url'], {
191								action: 'emailer_submit',
192								nonce: CITYGOV_STORAGE['ajax_nonce'],
193								group: group,
194								email: email
195							}).done(function(response) {
196								"use strict";
197								var rez = {};
198								try {
199									rez = JSON.parse(response);
200								} catch (e) {
201									rez = { error: CITYGOV_STORAGE['ajax_error'] };
202									console.log(response);
203								}
204								if (rez.error === '') {
205									citygov_message_info(CITYGOV_STORAGE['strings']['email_confirm'].replace('%s', email));
206									form.find('input').val('');
207								} else {
208									citygov_message_warning(rez.error);
209								}
210							});
211						}
212					} else
213						form.get(0).submit();
214				} else {
215					parent.addClass('sc_emailer_opened');
216				}
217				e.preventDefault();
218				return false;
219			});
220	}
221	
222	// Googlemap init
223	if (container.find('.sc_googlemap:not(.inited)').length > 0) {
224		container.find('.sc_googlemap:not(.inited)')
225			.each(function () {
226				"use strict";
227				if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return;
228				var map = jQuery(this).addClass('inited');
229				var map_id		= map.attr('id');
230				var map_zoom	= map.data('zoom');
231				var map_style	= map.data('style');
232				var map_markers = [];
233				map.find('.sc_googlemap_marker').each(function() {
234					"use strict";
235					var marker = jQuery(this);
236					map_markers.push({
237						point:			marker.data('point'),
238						address:		marker.data('address'),
239						latlng:			marker.data('latlng'),
240						description:	marker.data('description'),
241						title:			marker.data('title')
242					});
243				});
244				citygov_googlemap_init( jQuery('#'+map_id).get(0), {style: map_style, zoom: map_zoom, markers: map_markers});
245			});
246	}
247
248	// Infoboxes
249	if (container.find('.sc_infobox.sc_infobox_closeable:not(.inited)').length > 0) {
250		container.find('.sc_infobox.sc_infobox_closeable:not(.inited)')
251			.addClass('inited')
252			.on('click', function () {
253				"use strict";
254				jQuery(this).slideUp();
255			});
256	}
257
258	// Popup links
259	if (container.find('.sc_popup_link:not(.inited)').length > 0) {
260		container.find('.sc_popup_link:not(.inited)').each(function() {
261			var popup_id = jQuery(this).attr('href');
262			jQuery(this)
263				.addClass('inited')
264				.magnificPopup({
265					type: 'inline',
266					removalDelay: 500,
267					midClick: true,
268					callbacks: {
269						beforeOpen: function () {
270							this.st.mainClass = 'mfp-zoom-in';
271						},
272						open: function() {
273							"use strict";
274							citygov_init_shortcodes(jQuery(popup_id));
275							if (window.citygov_init_hidden_elements) citygov_init_hidden_elements(jQuery(popup_id));
276						},
277						close: function() {}
278					}
279				});
280		});
281	}
282
283	// Recent news widget and sc
284	if (container.find('.sc_recent_news_header_category_item_more:not(.inited)').length > 0) {
285		container.find('.sc_recent_news_header_category_item_more:not(.inited)').each(function() {
286			"use strict";
287			jQuery(this)
288				.addClass('inited')
289				.on('click', function(e) {
290					"use strict";
291					jQuery(this).toggleClass('opened').find('.sc_recent_news_header_more_categories').slideToggle();
292					e.preventDefault();
293					return false;
294				});
295		});
296	}
297
298	// Search form
299	if (container.find('.search_wrap:not(.inited)').length > 0) {
300		container.find('.search_wrap:not(.inited)').each(function() {
301			"use strict";
302			jQuery(this)
303				.addClass('inited')
304				.on('click', '.search_submit', function(e) {
305					"use strict";
306					var search_wrap = jQuery(this).parents('.search_wrap');
307					if (!search_wrap.hasClass('search_state_fixed')) {
308						if (search_wrap.hasClass('search_state_opened')) {
309							if (search_wrap.find('.search_field').val() != '')
310								search_wrap.find('form').get(0).submit();
311							else
312								search_wrap.removeClass('search_state_opened').addClass('search_state_closed').find('.search_results').fadeOut();
313						} else
314							search_wrap.removeClass('search_state_closed').addClass('search_state_opened').find('.search_field').get(0).focus();
315					} else {
316						if (search_wrap.find('.search_field').val() != '')
317							search_wrap.find('form').get(0).submit();
318						else {
319							search_wrap.find('.search_field').val('');
320							search_wrap.find('.search_results').fadeOut();
321						}
322					}
323					e.preventDefault();
324					return false;
325				})
326				.on('click', '.search_results_close', function(e) {
327					"use strict";
328					jQuery(this).parent().fadeOut();
329					e.preventDefault();
330					return false;
331				})
332				.on('click', '.search_more', function(e) {
333					"use strict";
334					if (jQuery(this).parents('.search_wrap').find('.search_field').val() != '')
335						jQuery(this).parents('.search_wrap').find('form').get(0).submit();
336					e.preventDefault();
337					return false;
338				});
339			if (jQuery(this).hasClass('search_ajax')) {
340				var ajax_timer = null;
341				jQuery(this).find('.search_field').keyup(function(e) {
342					"use strict";
343					var search_field = jQuery(this);
344					var s = search_field.val();
345					if (ajax_timer) {
346						clearTimeout(ajax_timer);
347						ajax_timer = null;
348					}
349					if (s.length >= CITYGOV_STORAGE['ajax_search_min_length']) {
350						ajax_timer = setTimeout(function() {
351							"use strict";
352							jQuery.post(CITYGOV_STORAGE['ajax_url'], {
353								action: 'ajax_search',
354								nonce: CITYGOV_STORAGE['ajax_nonce'],
355								text: s
356							}).done(function(response) {
357								"use strict";
358								clearTimeout(ajax_timer);
359								ajax_timer = null;
360								var rez = {};
361								try {
362									rez = JSON.parse(response);
363								} catch (e) {
364									rez = { error: CITYGOV_STORAGE['ajax_error'] };
365									console.log(response);
366								}
367								if (rez.error === '') {
368									search_field.parents('.search_ajax').find('.search_results_content').empty().append(rez.data);
369									search_field.parents('.search_ajax').find('.search_results').fadeIn();
370								} else {
371									citygov_message_warning(CITYGOV_STORAGE['strings']['search_error']);
372								}
373							});
374						}, CITYGOV_STORAGE['ajax_search_delay']);
375					}
376				});
377			}
378		});
379	}
380
381	
382	// Section Pan init
383	if (container.find('.sc_pan:not(.inited_pan)').length > 0) {
384		container.find('.sc_pan:not(.inited_pan)')
385			.each(function () {
386				"use strict";
387				if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return;
388				var pan = jQuery(this).addClass('inited_pan');
389				var cont = pan.parent();
390				cont.mousemove(function(e) {
391					"use strict";
392					var anim = {};
393					var tm = 0;
394					var pw = pan.width(), ph = pan.height();
395					var cw = cont.width(), ch = cont.height();
396					var coff = cont.offset();
397					if (pan.hasClass('sc_pan_vertical'))
398						pan.css('top', -Math.floor((e.pageY - coff.top) / ch * (ph-ch)));
399					if (pan.hasClass('sc_pan_horizontal'))
400						pan.css('left', -Math.floor((e.pageX - coff.left) / cw * (pw-cw)));
401				});
402				cont.mouseout(function(e) {
403					"use strict";
404					pan.css({'left': 0, 'top': 0});
405				});
406			});
407	}
408
409	//Scroll
410	if (container.find('.sc_scroll:not(.inited)').length > 0) {
411		container.find('.sc_scroll:not(.inited)')
412			.each(function () {
413				"use strict";
414				if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return;
415				CITYGOV_STORAGE['scroll_init_counter'] = 0;
416				citygov_sc_init_scroll_area(jQuery(this));
417			});
418	}
419
420
421	// Swiper Slider
422	if (container.find('.sc_slider_swiper:not(.inited)').length > 0) {
423		container.find('.sc_slider_swiper:not(.inited)')
424			.each(function () {
425				"use strict";
426				if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return;
427				jQuery(this).addClass('inited');
428				citygov_sc_slider_autoheight(jQuery(this));
429				if (jQuery(this).parents('.sc_slider_pagination_area').length > 0) {
430					jQuery(this).parents('.sc_slider_pagination_area').find('.sc_slider_pagination .post_item').eq(0).addClass('active');
431				}
432				var id = jQuery(this).attr('id');
433				if (id == undefined) {
434					id = 'swiper_'+Math.random();
435					id = id.replace('.', '');
436					jQuery(this).attr('id', id);
437				}
438				jQuery(this).addClass(id);
439				jQuery(this).find('.slides .swiper-slide').css('position', 'relative');
440				var width = jQuery(this).width();
441				if (width == 0) width = jQuery(this).parent().width();
442				var spv = jQuery(this).data('slides-per-view');
443				if (spv == undefined) spv = 1;
444				var min_width = jQuery(this).data('slides-min-width');
445				if (min_width == undefined) min_width = 50;
446				if (width / spv < min_width) spv = Math.max(1, Math.floor(width / min_width));
447				var space = jQuery(this).data('slides-space');
448				if (space == undefined) space = 0;
449				if (CITYGOV_STORAGE['swipers'] === undefined) CITYGOV_STORAGE['swipers'] = {};
450				CITYGOV_STORAGE['swipers'][id] = new Swiper('.'+id, {
451					calculateHeight: !jQuery(this).hasClass('sc_slider_height_fixed'),
452					resizeReInit: true,
453					autoResize: true,
454					loop: true,
455					grabCursor: true,
456			        nextButton: jQuery(this).hasClass('sc_slider_controls') ? '#'+id+' .sc_slider_next' : false,
457			        prevButton: jQuery(this).hasClass('sc_slider_controls') ? '#'+id+' .sc_slider_prev' : false,
458					pagination: jQuery(this).hasClass('sc_slider_pagination') ? '#'+id+' .sc_slider_pagination_wrap' : false,
459				    paginationClickable: true,
460					autoplay: jQuery(this).hasClass('sc_slider_noautoplay') ? false : (isNaN(jQuery(this).data('interval')) ? 7000 : jQuery(this).data('interval')),
461					autoplayDisableOnInteraction: false,
462					initialSlide: 0,
463					slidesPerView: spv,
464					loopedSlides: spv,
465					spaceBetween: space,
466					speed: 600,
467					// Autoheight on start
468					onFirstInit: function (slider){
469						"use strict";
470						var cont = jQuery(slider.container);
471						if (!cont.hasClass('sc_slider_height_auto')) return;
472						var li = cont.find('.swiper-slide').eq(1);
473						var h = li.data('height_auto');
474						if (h > 0) {
475							var pt = parseInt(li.css('paddingTop')), pb = parseInt(li.css('paddingBottom'));
476							li.height(h);
477							cont.height(h + (isNaN(pt) ? 0 : pt) + (isNaN(pb) ? 0 : pb));
478							cont.find('.swiper-wrapper').height(h + (isNaN(pt) ? 0 : pt) + (isNaN(pb) ? 0 : pb));
479						}
480					},
481					// Autoheight on slide change
482					onSlideChangeStart: function (slider){
483						"use strict";
484						var cont = jQuery(slider.container);
485						if (!cont.hasClass('sc_slider_height_auto')) return;
486						var idx = slider.activeIndex;
487						var li = cont.find('.swiper-slide').eq(idx);
488						var h = li.data('height_auto');
489						if (h > 0) {
490							var pt = parseInt(li.css('paddingTop')), pb = parseInt(li.css('paddingBottom'));
491							li.height(h);
492							cont.height(h + (isNaN(pt) ? 0 : pt) + (isNaN(pb) ? 0 : pb));
493							cont.find('.swiper-wrapper').height(h + (isNaN(pt) ? 0 : pt) + (isNaN(pb) ? 0 : pb));
494						}
495					},
496					// Change current item in 'full' or 'over' pagination wrap
497					onSlideChangeEnd: function (slider, dir) {
498						"use strict";
499						var cont = jQuery(slider.container);
500						if (cont.parents('.sc_slider_pagination_area').length > 0) {
501							var li = cont.parents('.sc_slider_pagination_area').find('.sc_slider_pagination .post_item');
502							var idx = slider.activeIndex > li.length ? 0 : slider.activeIndex-1;
503							citygov_sc_change_active_pagination_in_slider(cont, idx);
504						}
505					}
506				});
507				
508				jQuery(this).data('settings', {mode: 'horizontal'});		// VC hook
509				
510				var curSlide = jQuery(this).find('.slides').data('current-slide');
511				if (curSlide > 0)
512					CITYGOV_STORAGE['swipers'][id].slideTo(curSlide-1);
513
514				citygov_sc_prepare_slider_navi(jQuery(this));
515
516			});
517			
518		// Check slides per view
519		citygov_sc_sliders_resize();
520	}
521
522	//Skills init
523	if (container.find('.sc_skills_item:not(.inited)').length > 0) {
524		citygov_sc_init_skills(container);
525		jQuery(window).scroll(function () { citygov_sc_init_skills(container); });
526	}
527	//Skills type='arc' init
528	if (container.find('.sc_skills_arc:not(.inited)').length > 0) {
529		citygov_sc_init_skills_arc(container);
530		jQuery(window).scroll(function () { citygov_sc_init_skills_arc(container); });
531	}
532
533	// Tabs
534	if (container.find('.sc_tabs:not(.inited):not(.no_jquery_ui),.tabs_area:not(.inited)').length > 0) {
535		container.find('.sc_tabs:not(.inited):not(.no_jquery_ui),.tabs_area:not(.inited)').each(function () {
536			"use strict";
537			var init = jQuery(this).data('active');
538			if (isNaN(init)) init = 0;
539			else init = Math.max(0, init);
540			jQuery(this)
541				.addClass('inited')
542				.tabs({
543					active: init,
544					show: {
545						effect: 'fadeIn',
546						duration: 300
547					},
548					hide: {
549						effect: 'fadeOut',
550						duration: 300
551					},
552					create: function (event, ui) {
553						"use strict";
554						citygov_init_shortcodes(ui.panel);
555						if (window.citygov_init_hidden_elements) citygov_init_hidden_elements(ui.panel);
556                        citygov_init_isotope();
557					},
558					activate: function (event, ui) {
559						"use strict";
560						citygov_init_shortcodes(ui.newPanel);
561						if (window.citygov_init_hidden_elements) citygov_init_hidden_elements(ui.newPanel);
562                        citygov_init_isotope();
563					}
564				});
565		});
566	}
567
568
569
570	if (container.find('.sc_tabs.no_jquery_ui:not(.inited)').length > 0) {
571		container.find('.sc_tabs.no_jquery_ui:not(.inited)').each(function () {
572			"use strict";
573			jQuery(this)
574				.addClass('inited')
575				.on('click', '.sc_tabs_titles li a', function(e) {
576					"use strict";
577					if (!jQuery(this).parent().hasClass('sc_tabs_active')) {
578						var id_act = jQuery(this).parent().siblings('.sc_tabs_active').find('a').attr('href');
579						var id = jQuery(this).attr('href');
580						jQuery(this).parent().addClass('sc_tabs_active').siblings().removeClass('sc_tabs_active');
581						jQuery(id_act).fadeOut(function() {
582							"use strict";
583							jQuery(id).fadeIn(function() {
584								"use strict";
585								citygov_init_shortcodes(jQuery(this));
586								if (window.citygov_init_hidden_elements) citygov_init_hidden_elements(jQuery(this));
587							});
588						});
589					}
590					e.preventDefault();
591					return false;
592				});
593			jQuery(this).find('.sc_tabs_titles li').eq(0).addClass('sc_tabs_active');
594			jQuery(this).find('.sc_tabs_content').eq(0).fadeIn(function() {
595				"use strict";
596				citygov_init_shortcodes(jQuery(this));
597				if (window.citygov_init_hidden_elements) citygov_init_hidden_elements(jQuery(this));
598			});
599		});
600	}
601
602	// Toggles
603	if (container.find('.sc_toggles .sc_toggles_title:not(.inited)').length > 0) {
604		container.find('.sc_toggles .sc_toggles_title:not(.inited)')
605			.addClass('inited')
606			.on('click', function () {
607				"use strict";
608				jQuery(this).toggleClass('ui-state-active').parent().toggleClass('sc_active');
609				jQuery(this).parent().find('.sc_toggles_content').slideToggle(300, function () { 
610					"use strict";
611					citygov_init_shortcodes(jQuery(this).parent().find('.sc_toggles_content')); 
612					if (window.citygov_init_hidden_elements) citygov_init_hidden_elements(jQuery(this).parent().find('.sc_toggles_content'));
613				});
614			});
615	}
616
617	//Zoom
618	if (container.find('.sc_zoom:not(.inited)').length > 0) {
619		container.find('.sc_zoom:not(.inited)')
620			.each(function () {
621				"use strict";
622				if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return;
623				jQuery(this).addClass('inited');
624				jQuery(this).find('img').elevateZoom({
625					zoomType: "lens",
626					lensShape: "round",
627					lensSize: 200,
628					lensBorderSize: 4,
629					lensBorderColour: '#ccc'
630				});
631			});
632	}
633
634}
635
636
637
638// Scrolled areas
639function citygov_sc_init_scroll_area(obj) {
640	"use strict";
641
642	// Wait for images loading
643	if (!citygov_check_images_complete(obj) && CITYGOV_STORAGE['scroll_init_counter']++ < 30) {
644		setTimeout(function() { citygov_sc_init_scroll_area(obj); }, 200);
645		return;
646	}
647
648	// Start init scroll area
649	obj.addClass('inited');
650
651	var id = obj.attr('id');
652	if (id == undefined) {
653		id = 'scroll_'+Math.random();
654		id = id.replace('.', '');
655		obj.attr('id', id);
656	}
657	obj.addClass(id);
658
659	var parent_obj = obj.parent();
660	var parent_id  = parent_obj.attr('id');
661	if (parent_id == undefined) {
662		parent_id = 'scroll_wrap_'+Math.random();
663		parent_id = parent_id.replace('.', '');
664		parent_obj.attr('id', parent_id);
665	}
666	parent_obj.addClass(parent_id);
667
668	var bar = obj.find('#'+id+'_bar');
669	if (bar.length > 0 && !bar.hasClass(id+'_bar')) {
670		bar.addClass(id+'_bar');
671	}
672	
673	// Correct wrapper width (if scroll dir = horizontal)
674	if (obj.hasClass('sc_scroll_horizontal')) {
675		obj.find('.sc_scroll_wrapper >
675 .sc_scroll_slide').css('width', 'auto');
676		obj.find('.sc_scroll_wrapper').css('width', obj.find('.sc_scroll_wrapper > .sc_scroll_slide').width()+10);
677		obj.find('.sc_scroll_wrapper > .sc_scroll_slide').css('width', '100%')
678	}
679
680	// Init Swiper with scroll plugin
681	if (CITYGOV_STORAGE['swipers'] === undefined) CITYGOV_STORAGE['swipers'] = {};
682	CITYGOV_STORAGE['swipers'][id] = new Swiper('.'+id, {
683		calculateHeight: false,
684		resizeReInit: true,
685		autoResize: true,
686		freeMode: true,
687		freeModeFluid: true,
688		grabCursor: true,
689		mode: obj.hasClass('sc_scroll_vertical') ? 'vertical' : 'horizontal',
690		direction: obj.hasClass('sc_scroll_vertical') ? 'vertical' : 'horizontal',
691		slidesPerView: obj.hasClass('sc_scroll') ? 'auto' : 1,
692        nextButton: parent_obj.hasClass('sc_scroll_controls') ? '#'+parent_id+' .sc_scroll_next' : false,
693        prevButton: parent_obj.hasClass('sc_scroll_controls') ? '#'+parent_id+' .sc_scroll_prev' : false,
694        scrollbar: '.'+id+'_bar',
695        scrollbarHide: true,
696	})
697	
698	// VC hook
699	obj.data('settings', {mode: 'horizontal'});
700}
701
702
703// Slider navigation
704function citygov_sc_prepare_slider_navi(slider) {
705	"use strict";
706	var navi = null;
707	
708/*
709	// Prev / Next
710	navi = slider.find('> .sc_slider_controls_wrap, > .sc_scroll_controls_wrap');
711	if (navi.length == 0) navi = slider.siblings('.sc_slider_controls_wrap,.sc_scroll_controls_wrap');
712	if (navi.length > 0) {
713		navi.on('click', '.sc_slider_prev,.sc_scroll_prev', function(e) {
714			var swiper = jQuery(this).parents('.swiper-slider-container');
715			if (swiper.length == 0) swiper = jQuery(this).parents('.sc_slider_controls_wrap,.sc_scroll_controls_wrap').siblings('.swiper-slider-container');
716			var id = swiper.attr('id');
717			CITYGOV_STORAGE['swipers'][id].slidePrev();
718			e.preventDefault();
719			return false;
720		})
721        .on('click', '.sc_slider_next,.sc_scroll_next', function(e){
722			var swiper = jQuery(this).parents('.swiper-slider-container');
723			if (swiper.length == 0) swiper = jQuery(this).parents('.sc_slider_controls_wrap,.sc_scroll_controls_wrap').siblings('.swiper-slider-container');
724			var id = swiper.attr('id');
725			CITYGOV_STORAGE['swipers'][id].slideNext();
726			e.preventDefault();
727			return false;
728		});
729	}
730*/
731	// Pagination with slide's title
732	navi = slider.siblings('.sc_slider_pagination');
733	if (navi.length > 0) {
734		navi.on('click', '.post_item', function(e){
735			var swiper = jQuery(this).parents('.sc_slider_pagination_area').find('.swiper-slider-container');
736			var id = swiper.attr('id');
737			CITYGOV_STORAGE['swipers'][id].slideTo(jQuery(this).index()+1);
738			e.preventDefault();
739			return false;
740		});
741	}
742}
743
744// Sliders: Pagination
745function citygov_sc_change_active_pagination_in_slider(slider, idx) {
746	"use strict";
747	var pg = slider.parents('.sc_slider_pagination_area').find('.sc_slider_pagination');
748	if (pg.length==0) return;
749	pg.find('.post_item').removeClass('active').eq(idx).addClass('active');
750	var h = pg.height();
751	var off = pg.find('.active').offset().top - pg.offset().top;
752	var off2 = pg.find('.sc_scroll_wrapper').offset().top - pg.offset().top;
753	var h2  = pg.find('.active').height();
754	if (off < 0) {
755		pg.find('.sc_scroll_wrapper').css({'transform': 'translate3d(0px, 0px, 0px)', 'transition-duration': '0.3s'});
756	} else if (h <= off+h2) {
757		pg.find('.sc_scroll_wrapper').css({'transform': 'translate3d(0px, -'+(Math.abs(off2)+off-h/4)+'px, 0px)', 'transition-duration': '0.3s'});
758	}
759}
760
761// Sliders: Autoheight
762function citygov_sc_slider_autoheight(slider) {
763	"use strict";
764	if (slider.hasClass('.sc_slider_height_auto')) {
765		slider.find('.swiper-slide').each(function() {
766			"use strict";
767			if (jQuery(this).data('height_auto') == undefined) {
768				jQuery(this).attr('data-height_auto', jQuery(this).height());
769			}
770		});
771	}
772}
773
774// Sliders: Resize
775function citygov_sc_sliders_resize() {
776	"use strict";
777	var slider = arguments[0]!==undefined ? arguments[0] : '.sc_slider_swiper.inited';
778	var resize = arguments[1]!==undefined ? arguments[1] : true;
779
780	jQuery(slider).each(function() {
781		"use strict";
782		var id = jQuery(this).attr('id');
783		var width = jQuery(this).width();
784		var last_width = jQuery(this).data('last-width');
785		if (isNaN(last_width)) last_width = 0;
786		
787		// Change slides_per_view
788		if (last_width==0 || last_width!=width) {
789			var spv = jQuery(this).data('slides-per-view');
790			if (spv == undefined) spv = 1;
791			var min_width = jQuery(this).data('slides-min-width');
792			if (min_width == undefined) min_width = 50;
793			if (width / spv < min_width) spv = Math.max(1, Math.floor(width / min_width));
794			jQuery(this).data('last-width', width);
795			if (CITYGOV_STORAGE['swipers'][id].params.slidesPerView != spv) {
796				CITYGOV_STORAGE['swipers'][id].params.slidesPerView = spv;
797				CITYGOV_STORAGE['swipers'][id].params.loopedSlides = spv;
798			}
799		}
800		
801		// Resize slider
802		if ( resize && !jQuery(this).hasClass('sc_slider_height_fixed') ) {
803			var h = 0;
804			if ( jQuery(this).find('.swiper-slide > img').length > 0 ) {
805				jQuery(this).find('.swiper-slide > img').each(function() {
806					"use strict";
807					if (jQuery(this).height() > h) h = jQuery(this).height();
808				});
809				jQuery(this).height(h);
810			} else if ( jQuery(this).find('.swiper-slide').css('backgroundImage')!='none' ) {
811				h = Math.floor(width/16*9);
812				jQuery(this).height(h).find('.swiper-slide').height(h);
813			}
814		}
815	});
816	
817	// Resize slider pagination area
818	jQuery('.sc_slider_pagination_area').each(function() {
819		"use strict";
820		var h = jQuery(this).find('.sc_slider').height();
821		if (h) {
822			jQuery(this).height(h);
823			jQuery(this).find('.sc_slider_pagination').height(h);
824			jQuery(this).find('.sc_slider_pagination .sc_scroll_vertical').height(h);
825		}
826	});
827}
828
829
830// Skills init
831function citygov_sc_init_skills(container) {
832	"use strict";
833	if (arguments.length==0) var container = jQuery('body');
834	var scrollPosition = jQuery(window).scrollTop() + jQuery(window).height();
835
836	container.find('.sc_skills_item:not(.inited)').each(function () {
837		"use strict";
838		var skillsItem = jQuery(this);
839		var scrollSkills = skillsItem.offset().top;
840		if (scrollPosition > scrollSkills) {
841			skillsItem.addClass('inited');
842			var skills = skillsItem.parents('.sc_skills').eq(0);
843			var type = skills.data('type');
844			var total = (type=='pie' && skills.hasClass('sc_skills_compact_on')) ? skillsItem.find('.sc_skills_data .pie') : skillsItem.find('.sc_skills_total').eq(0);
845			var start = parseInt(total.data('start'));
846			var stop = parseInt(total.data('stop'));
847			var maximum = parseInt(total.data('max'));
848			var startPercent = Math.round(start/maximum*100);
849			var stopPercent = Math.round(stop/maximum*100);
850			var ed = total.data('ed');
851			var duration = parseInt(total.data('duration'));
852			var speed = parseInt(total.data('speed'));
853			var step = parseInt(total.data('step'));
854			if (type == 'bar') {
855				var dir = skills.data('dir');
856				var count = skillsItem.find('.sc_skills_count').eq(0);
857				if (dir=='horizontal')
858					count.css('width', startPercent + '%').animate({ width: stopPercent + '%' }, duration);
859				else if (dir=='vertical')
860					count.css('height', startPercent + '%').animate({ height: stopPercent + '%' }, duration);
861				citygov_sc_animate_skills_counter(start, stop, speed-(dir!='unknown' ? 5 : 0), step, ed, total);
862			} else if (type == 'counter') {
863				citygov_sc_animate_skills_counter(start, stop, speed - 5, step, ed, total);
864			} else if (type == 'pie') {
865				var steps = parseInt(total.data('steps'));
866				var bg_color = total.data('bg_color');
867				var border_color = total.data('border_color');
868				var cutout = parseInt(total.data('cutout'));
869				var easing = total.data('easing');
870				var options = {
871					segmentShowStroke: false,
872					segmentStrokeColor: border_color,
873					segmentStrokeWidth: 1,
874					percentageInnerCutout : cutout,
875					animationSteps: steps,
876					animationEasing: easing,
877					animateRotate: true,
878					animateScale: false,
879				};
880				var pieData = [];
881				total.each(function() {
882					"use strict";
883					var color = jQuery(this).data('color');
884					var stop = parseInt(jQuery(this).data('stop'));
885					var stopPercent = Math.round(stop/maximum*100);
886					pieData.push({
887						value: stopPercent,
888						color: color
889					});
890				});
891				if (total.length == 1) {
892					citygov_sc_animate_skills_counter(start, stop, Math.round(1500/steps), step, ed, total);
893					pieData.push({
894						value: 100-stopPercent,
895						color: bg_color
896					});
897				}
898				var canvas = skillsItem.find('canvas');
899				canvas.attr({width: skillsItem.width(), height: skillsItem.width()}).css({width: skillsItem.width(), height: skillsItem.height()});
900				new Chart(canvas.get(0).getContext("2d")).Doughnut(pieData, options);
901			}
902		}
903	});
904}
905
906// Skills counter animation
907function citygov_sc_animate_skills_counter(start, stop, speed, step, ed, total) {
908	"use strict";
909	start = Math.min(stop, start + step);
910	total.text(start+ed);
911	if (start < stop) {
912		setTimeout(function () {
913			citygov_sc_animate_skills_counter(start, stop, speed, step, ed, total);
914		}, speed);
915	}
916}
917
918// Skills arc init
919function citygov_sc_init_skills_arc(container) {
920	"use strict";
921	if (arguments.length==0) var container = jQuery('body');
922	container.find('.sc_skills_arc:not(.inited)').each(function () {
923		var arc = jQuery(this);
924		arc.addClass('inited');
925		var items = arc.find('.sc_skills_data .arc');
926		var canvas = arc.find('.sc_skills_arc_canvas').eq(0);
927		var legend = arc.find('.sc_skills_legend').eq(0);
928		var w = Math.round(arc.width() - legend.width());
929		var c = Math.floor(w/2);
930		var o = {
931			random: function(l, u){
932				"use strict";
933				return Math.floor((Math.random()*(u-l+1))+l);
934			},
935			diagram: function(){
936				"use strict";
937				var r = Raphael(canvas.attr('id'), w, w),
938					hover = Math.round(w/2/items.length),
939					rad = hover,
940					step = Math.round(((w-20)/2-rad)/items.length),
941					stroke = Math.round(w/9/items.length),
942					speed = 400;
943				
944				
945				r.circle(c, c, Math.round(w/2)).attr({ stroke: 'none', fill: CITYGOV_STORAGE['theme_skin_bg_color'] ? CITYGOV_STORAGE['theme_skin_bg_color'] : '#ffffff' });
946				
947				var title = r.text(c, c, arc.data('caption')).attr({
948					font: Math.round(rad*0.75)+'px "'+CITYGOV_STORAGE['theme_font']+'"',
949					fill: CITYGOV_STORAGE['theme_skin_color'] ? CITYGOV_STORAGE['theme_skin_color'] : '#909090'
950				}).toFront();
951				
952				rad -= Math.round(step/2);
953
954				r.customAttributes.arc = function(value, color, rad){
955					"use strict";
956					var v = 3.6 * value,
957						alpha = v == 360 ? 359.99 : v,
958						rand = o.random(91, 240),
959						a = (rand-alpha) * Math.PI/180,
960						b = rand * Math.PI/180,
961						sx = c + rad * Math.cos(b),
962						sy = c - rad * Math.sin(b),
963						x = c + rad * Math.cos(a),
964						y = c - rad * Math.sin(a),
965						path = [['M', sx, sy], ['A', rad, rad, 0, +(alpha > 180), 1, x, y]];
966					return { path: path, stroke: color }
967				}
968				
969				items.each(function(i){
970					"use strict";
971					var t = jQuery(this), 
972						color = t.find('.color').val(),
973						value = t.find('.percent').val(),
974						text = t.find('.text').text();
975					
976					rad += step;
977					var z = r.path().attr({ arc: [value, color, rad], 'stroke-width': stroke });
978					
979					z.mouseover(function(){
980						"use strict";
981						this.animate({ 'stroke-width': hover, opacity: .75 }, 1000, 'elastic');
982						if (Raphael.type != 'VML') //solves IE problem
983							this.toFront();
984						title.stop().animate({ opacity: 0 }, speed, '>', function(){
985							this.attr({ text: (text ? text + '\n' : '') + value + '%' }).animate({ opacity: 1 }, speed, '<');
986						});
987					}).mouseout(function(){
988						"use strict";
989						this.stop().animate({ 'stroke-width': stroke, opacity: 1 }, speed*4, 'elastic');
990						title.stop().animate({ opacity: 0 }, speed, '>', function(){
991							title.attr({ text: arc.data('caption') }).animate({ opacity: 1 }, speed, '<');
992						});	
993					});
994					
995				});
996				
997			}
998		}
999		o.diagram();
1000	});
1001}
1002
1003
1004// Countdown update
1005function citygov_countdown(dt) {
1006	"use strict";
1007	var counter = jQuery(this).parent();
1008	for (var i=3; i<dt.length; i++) {
1009		var v = (dt[i]<10 ? '0' : '') + dt[i];
1010		counter.find('.sc_countdown_item').eq(i-3).find('.sc_countdown_digits span').addClass('hide');
1011		for (var ch=v.length-1; ch>=0; ch--) {
1012			counter.find('.sc_countdown_item').eq(i-3).find('.sc_countdown_digits span').eq(ch+(i==3 && v.length<3 ? 1 : 0)).removeClass('hide').text(v.substr(ch, 1));
1013		}
1014	}
1015}

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.