PageSourceSearch

https://www.tannintime.it/wp-content/plugins/trx_utils/shortcodes/theme.shortcodes.js

js tannintime.it collected 2026-10-04 21:17:00 UTC 41,423 bytes, 910 lines download raw bytes

1// Document ready actions for shortcodes
2jQuery(document).ready(function(){
3    "use strict";
4    setTimeout(function() {
5        themerex_sc_animation();
6    }, 600);
7});
8
9
10// Resize actions
11jQuery(window).resize(function(){
12    "use strict";
13    themerex_sc_sliders_resize();
14});
15
16
17// Animation
18function themerex_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 themerex_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                        themerex_init_shortcodes(ui.panel);
45                        if (window.themerex_init_hidden_elements) themerex_init_hidden_elements(ui.panel);
46                        ui.header.each(function () {
47                            jQuery(this).parent().addClass('sc_active');
48                        });
49                    },
50                    activate: function (event, ui) {
51                        themerex_init_shortcodes(ui.newPanel);
52                        if (window.themerex_init_hidden_elements) themerex_init_hidden_elements(ui.newPanel);
53                        ui.newHeader.each(function () {
54                            jQuery(this).parent().addClass('sc_active');
55                        });
56                        ui.oldHeader.each(function () {
57                            jQuery(this).parent().removeClass('sc_active');
58                        });
59                        if(!jQuery.isEmptyObject(ui.newHeader.offset())) {
60                            var topOffset = 50;
61                            if ( jQuery('body').hasClass('top_panel_fixed') ) {
62                                topOffset += parseInt( jQuery('header').height() );
63                            }
64                            jQuery('html:not(:animated), body:not(:animated)').animate({ scrollTop: ui.newHeader.offset().top  - topOffset }, 'slow');
65                        }
66                    }
67                });
68        });
69    }
70
71    // Blogger: style Polaroid
72    if (container.find('.sc_blogger.layout_polaroid .photostack:not(.inited)').length > 0) {
73        container.find(".sc_blogger.layout_polaroid .photostack:not(.inited)").each(function () {
74            "use strict";
75            var obj = jQuery(this);
76            var id = obj.attr('id');
77            if (id == undefined) {
78                id = 'photostack_'+Math.random();
79                id = id.replace('.', '');
80                obj.attr('id', id);
81            }
82            setTimeout(function() {
83                "use strict";
84                obj.addClass('inited').parent().height("auto");
85                new Photostack( obj.get(0), {
86                    callback: function( item ) {
87                    }
88                } );
89            }, 10);
90        });
91    }
92
93    // Blogger: Scroll horizontal
94    if (container.find('.sc_blogger .sc_scroll_horizontal .sc_scroll_wrapper:not(.inited)').length > 0) {
95        container.find(".sc_blogger .sc_scroll_horizontal .sc_scroll_wrapper:not(.inited)").each(function () {
96            "use strict";
97            var obj = jQuery(this);
98            var width = 0;
99            obj.find('.isotope_item').each(function(){
100                width += jQuery(this).outerWidth();
101            });
102            obj.addClass('inited').width(width);
103        });
104    }
105
106    // Form
107    if (container.find('.sc_form:not(.inited) form').length > 0) {
108        container.find(".sc_form:not(.inited) form").each(function() {
109            jQuery(this).addClass('inited');
110            jQuery(this).submit(function(e) {
111                "use strict";
112                themerex_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;	//jQuery(this).data('interval');
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: themerex_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: themerex_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            .find('.sc_emailer_button')
178            .click(function(e) {
179                "use strict";
180                var form = jQuery(this).parents('form');
181                var parent = jQuery(this).parents('.sc_emailer');
182                if (parent.hasClass('sc_emailer_opened')) {
183                    if (form.length>0 && form.find('input').val()!='') {
184                        var group = jQuery(this).data('group');
185                        var email = form.find('input').val();
186                        var regexp = new RegExp(THEMEREX_GLOBALS['email_mask']);
187                        if (!regexp.test(email)) {
188                            form.find('input').get(0).focus();
189                            themerex_message_warning(THEMEREX_GLOBALS['strings']['email_not_valid']);
190                        } else {
191                            jQuery.post(THEMEREX_GLOBALS['ajax_url'], {
192                                action: 'emailer_submit',
193                                nonce: THEMEREX_GLOBALS['ajax_nonce'],
194                                group: group,
195                                email: email
196                            }).done(function(response) {
197                                var rez = JSON.parse(response);
198                                if (rez.error === '') {
199                                    themerex_message_info(THEMEREX_GLOBALS['strings']['email_confirm'].replace('%s', email));
200                                    form.find('input').val('');
201                                } else {
202                                    themerex_message_warning(rez.error);
203                                }
204                            });
205                        }
206                    } else
207                        form.get(0).submit();
208                } else {
209                    parent.addClass('sc_emailer_opened');
210                }
211                e.preventDefault();
212                return false;
213            });
214    }
215
216    // Googlemap init
217    if (container.find('.sc_googlemap:not(.inited)').length > 0) {
218        container.find('.sc_googlemap:not(.inited)')
219            .each(function () {
220                "use strict";
221                if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return;
222                var map = jQuery(this).addClass('inited');
223                var map_id		= map.attr('id');
224                var map_zoom	= map.data('zoom');
225                var map_style	= map.data('style');
226                var map_markers = [];
227                map.find('.sc_googlemap_marker').each(function() {
228                    "use strict";
229                    var marker = jQuery(this);
230                    map_markers.push({
231                        point:			marker.data('point'),
232                        address:		marker.data('address'),
233                        latlng:			marker.data('latlng'),
234                        description:	marker.data('description'),
235                        title:			marker.data('title')
236                    });
237                });
238                if (typeof themerex_googlemap_init=="undefined") {
239
240                    return;
241                }
242                themerex_googlemap_init( jQuery('#'+map_id).get(0), {style: map_style, zoom: map_zoom, markers: map_markers});
243            });
244    }
245
246    // Infoboxes
247    if (container.find('.sc_infobox.sc_infobox_closeable:not(.inited)').length > 0) {
248        container.find('.sc_infobox.sc_infobox_closeable:not(.inited)')
249            .addClass('inited')
250            .click(function () {
251                jQuery(this).slideUp();
252            });
253    }
254
255    // Popup links
256    if (container.find('.sc_popup_link:not(.inited)').length > 0) {
257        container.find('.sc_popup_link:not(.inited)').each(function() {
258            var popup_id = jQuery(this).attr('href');
259            jQuery(this)
260                .addClass('inited')
261                .magnificPopup({
262                    type: 'inline',
263                    removalDelay: 500,
264                    midClick: true,
265                    callbacks: {
266                        beforeOpen: function () {
267                            this.st.mainClass = 'mfp-zoom-in';
268                        },
269                        open: function() {
270                            themerex_init_shortcodes(jQuery(popup_id));
271                            if (window.themerex_init_hidden_elements) themerex_init_hidden_elements(jQuery(popup_id));
272                        },
273                        close: function() {}
274                    }
275                });
276        });
277    }
278
279    // Search form
280    if (container.find('.search_wrap:not(.inited)').length > 0) {
281        container.find('.search_wrap:not(.inited)').each(function() {
282            jQuery(this).addClass('inited');
283            jQuery(this).find('.search_submit').click(function(e) {
284                "use strict";
285                var search_wrap = jQuery(this).parents('.search_wrap');
286                if (!search_wrap.hasClass('search_state_fixed')) {
287                    if (search_wrap.hasClass('search_state_opened')) {
288                        if (search_wrap.find('.search_field').val() != '')
289                            search_wrap.find('form').get(0).submit();
290                        else
291                            search_wrap.removeClass('search_state_opened').addClass('search_state_closed').find('.search_results').fadeOut();
292                    } else
293                        search_wrap.removeClass('search_state_closed').addClass('search_state_opened').find('.search_field').get(0).focus();
294                } else {
295                    if (search_wrap.find('.search_field').val() != '')
296                        search_wrap.find('form').get(0).submit();
297                    else {
298                        search_wrap.find('.search_field').val('');
299                        search_wrap.find('.search_results').fadeOut();
300                    }
301                }
302                e.preventDefault();
303                return false;
304            });
305            jQuery(this).find('.search_results_close').click(function(e) {
306                "use strict";
307                jQuery(this).parent().fadeOut();
308                e.preventDefault();
309                return false;
310            });
311            jQuery(this).on('click', '.search_more', function(e) {
312                "use strict";
313                if (jQuery(this).parents('.search_wrap').find('.search_field').val() != '')
314                    jQuery(this).parents('.search_wrap').find('form').get(0).submit();
315                e.preventDefault();
316                return false;
317            });
318            if (jQuery(this).hasClass('search_ajax')) {
319                var ajax_timer = null;
320                jQuery(this).find('.search_field').keyup(function(e) {
321                    "use strict";
322                    var search_field = jQuery(this);
323                    var s = search_field.val();
324                    if (ajax_timer) {
325                        clearTimeout(ajax_timer);
326                        ajax_timer = null;
327                    }
328                    if (s.length >= THEMEREX_GLOBALS['ajax_search_min_length']) {
329                        ajax_timer = setTimeout(function() {
330                            jQuery.post(THEMEREX_GLOBALS['ajax_url'], {
331                                action: 'ajax_search',
332                                nonce: THEMEREX_GLOBALS['ajax_nonce'],
333                                text: s
334                            }).done(function(response) {
335                                clearTimeout(ajax_timer);
336                                ajax_timer = null;
337                                var rez = JSON.parse(response);
338                                if (rez.error === '') {
339                                    search_field.parents('.search_ajax').find('.search_results_content').empty().append(rez.data);
340                                    search_field.parents('.search_ajax').find('.search_results').fadeIn();
341                                } else {
342                                    themerex_message_warning(THEMEREX_GLOBALS['strings']['search_error']);
343                                }
344                            });
345                        }, THEMEREX_GLOBALS['ajax_search_delay']);
346                    }
347                });
348            }
349        });
350    }
351
352
353    // Section Pan init
354    if (container.find('.sc_pan:not(.inited_pan)').length > 0) {
355        container.find('.sc_pan:not(.inited_pan)')
356            .each(function () {
357                "use strict";
358                if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return;
359                var pan = jQuery(this).addClass('inited_pan');
360                var cont = pan.parent();
361                cont.mousemove(function(e) {
362                    "use strict";
363                    var anim = {};
364                    var tm = 0;
365                    var pw = pan.width(), ph = pan.height();
366                    var cw = cont.width(), ch = cont.height();
367                    var coff = cont.offset();
368                    if (pan.hasClass('sc_pan_vertical'))
369                        pan.css('top', -Math.floor((e.pageY - coff.top) / ch * (ph-ch)));
370                    if (pan.hasClass('sc_pan_horizontal'))
371                        pan.css('left', -Math.floor((e.pageX - coff.left) / cw * (pw-cw)));
372                });
373                cont.mouseout(function(e) {
374                    pan.css({'left': 0, 'top': 0});
375                });
376            });
377    }
378
379    //Scroll
380    if (container.find('.sc_scroll:not(.inited)').length > 0) {
381        container.find('.sc_scroll:not(.inited)')
382            .each(function () {
383                "use strict";
384                if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return;
385                THEMEREX_GLOBALS['scroll_init_counter'] = 0;
386                themerex_sc_init_scroll_area(jQuery(this));
387            });
388    }
389
390
391    // Swiper Slider
392    if (container.find('.sc_slider_swiper:not(.inited)').length > 0) {
393        THEMEREX_GLOBALS['swipers_min_width'] = 150;
394        container.find('.sc_slider_swiper:not(.inited)')
395            .each(function () {
396                "use strict";
397                if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return;
398                //if (jQuery(this).parents('.isotope_wrap:not(.inited)').length > 0) return;
399                jQuery(this).addClass('inited');
400                themerex_sc_slider_autoheight(jQuery(this));
401                if (jQuery(this).parents('.sc_slider_pagination_area').length > 0) {
402                    jQuery(this).parents('.sc_slider_pagination_area').find('.sc_slider_pagination .post_item').eq(0).addClass('active');
403                }
404                var id = jQuery(this).attr('id');
405                if (id == undefined) {
406                    id = 'swiper_'+Math.random();
407                    id = id.replace('.', '');
408                    jQuery(this).attr('id', id);
409                }
410                jQuery(this).addClass(id);
411                jQuery(this).find('.slides .swiper-slide').css('position', 'relative');
412                var width = jQuery(this).width();
413                if (width == 0) width = jQuery(this).parent().width();
414                var spv = jQuery(this).data('slides-per-view');
415                if (spv == undefined) spv = 1;
416                if (width / spv < THEMEREX_GLOBALS['swipers_min_width']) spv = Math.max(1, Math.floor(width / THEMEREX_GLOBALS['swipers_min_width']));
417                var space = jQuery(this).data('slides-space');
418                if (space == undefined) space = 0;
419                if (THEMEREX_GLOBALS['swipers'] === undefined) THEMEREX_GLOBALS['swipers'] = {};
420                THEMEREX_GLOBALS['swipers'][id] = new Swiper('.'+id, {
421                    calculateHeight: !jQuery(this).hasClass('sc_slider_height_fixed'),
422                    resizeReInit: true,
423                    autoResize: true,
424                    loop: true,
425                    grabCursor: true,
426                    nextButton: jQuery(this).hasClass('sc_slider_controls') ? '#'+id+' .sc_slider_next' : false,
427                    prevButton: jQuery(this).hasClass('sc_slider_controls') ? '#'+id+' .sc_slider_prev' : false,
428                    pagination: jQuery(this).hasClass('sc_slider_pagination') ? '#'+id+' .sc_slider_pagination_wrap' : false,
429                    paginationClickable: true,
430                    autoplay: jQuery(this).hasClass('sc_slider_noautoplay') ? false : (isNaN(jQuery(this).data('interval')) ? 7000 : jQuery(this).data('interval')),
431                    autoplayDisableOnInteraction: false,
432                    initialSlide: 0,
433                    slidesPerView: spv,
434                    loopedSlides: spv,
435                    spaceBetween: space,
436                    speed: 600,
437                    // Autoheight on start
438                    onFirstInit: function (slider){
439                        var cont = jQuery(slider.container);
440                        if (!cont.hasClass('sc_slider_height_auto')) return;
441                        var li = cont.find('.swiper-slide').eq(1);
442                        var h = li.data('height_auto');
443                        if (h > 0) {
444                            var pt = parseInt(li.css('paddingTop')), pb = parseInt(li.css('paddingBottom'));
445                            li.height(h);
446                            cont.height(h + (isNaN(pt) ? 0 : pt) + (isNaN(pb) ? 0 : pb));
447                            cont.find('.swiper-wrapper').height(h + (isNaN(pt) ? 0 : pt) + (isNaN(pb) ? 0 : pb));
448                        }
449                    },
450                    // Autoheight on slide change
451                    onSlideChangeStart: function (slider){
452                        var cont = jQuery(slider.container);
453                        if (!cont.hasClass('sc_slider_height_auto')) return;
454                        var idx = slider.activeIndex;
455                        var li = cont.find('.swiper-slide').eq(idx);
456                        var h = li.data('height_auto');
457                        if (h > 0) {
458                            var pt = parseInt(li.css('paddingTop')), pb = parseInt(li.css('paddingBottom'));
459                            li.height(h);
460                            cont.height(h + (isNaN(pt) ? 0 : pt) + (isNaN(pb) ? 0 : pb));
461                            cont.find('.swiper-wrapper').height(h + (isNaN(pt) ? 0 : pt) + (isNaN(pb) ? 0 : pb));
462                        }
463                    },
464                    // Change current item in 'full' or 'over' pagination wrap
465                    onSlideChangeEnd: function (slider, dir) {
466                        var cont = jQuery(slider.container);
467                        if (cont.parents('.sc_slider_pagination_area').length > 0) {
468                            var li = cont.parents('.sc_slider_pagination_area').find('.sc_slider_pagination .post_item');
469                            var idx = slider.activeIndex > li.length ? 0 : slider.activeIndex-1;
470                            themerex_sc_change_active_pagination_in_slider(cont, idx);
471                        }
472                    }
473                });
474
475                jQuery(this).data('settings', {mode: 'horizontal'});		// VC hook
476
477                var curSlide = jQuery(this).find('.slides').data('current-slide');
478                if (curSlide > 0)
479                    THEMEREX_GLOBALS['swipers'][id].slideTo(curSlide-1);
480
481                themerex_sc_prepare_slider_navi(jQuery(this));
482
483            });
484
485        // Check slides per view
486        themerex_sc_sliders_resize();
487    }
488
489    //Skills init
490    if (container.find('.sc_skills_item:not(.inited)').length > 0) {
491        themerex_sc_init_skills(container);
492        jQuery(window).scroll(function () { themerex_sc_init_skills(container); });
493    }
494    //Skills type='arc' init
495    if (container.find('.sc_skills_arc:not(.inited)').length > 0) {
496        themerex_sc_init_skills_arc(container);
497        jQuery(window).scroll(function () { themerex_sc_init_skills_arc(container); });
498    }
499
500    // Tabs
501    if (container.find('.sc_tabs:not(.inited),.tabs_area:not(.inited)').length > 0) {
502        container.find('.sc_tabs:not(.inited),.tabs_area:not(.inited)').each(function () {
503            var init = jQuery(this).data('active');
504            if (isNaN(init)) init = 0;
505            else init = Math.max(0, init);
506            jQuery(this)
507                .addClass('inited')
508                .tabs({
509                    active: init,
510                    show: {
511                        effect: 'fadeIn',
512                        duration: 300
513                    },
514                    hide: {
515                        effect: 'fadeOut',
516                        duration: 300
517                    },
518                    create: function (event, ui) {
519                        themerex_init_shortcodes(ui.panel);
520                        if (window.themerex_init_hidden_elements) themerex_init_hidden_elements(ui.panel);
521                    },
522                    activate: function (event, ui) {
523                        themerex_init_shortcodes(ui.newPanel);
524                        if (window.themerex_init_hidden_elements) themerex_init_hidden_elements(ui.newPanel);
525                    }
526                });
527        });
528    }
529
530    // Toggles
531    if (container.find('.sc_toggles .sc_toggles_title:not(.inited)').length > 0) {
532        container.find('.sc_toggles .sc_toggles_title:not(.inited)')
533            .addClass('inited')
534            .click(function () {
535                jQuery(this).toggleClass('ui-state-active').parent().toggleClass('sc_active');
536                jQuery(this).parent().find('.sc_toggles_content').slideToggle(300, function () {
537                    themerex_init_shortcodes(jQuery(this).parent().find('.sc_toggles_content'));
538                    if (window.themerex_init_hidden_elements) themerex_init_hidden_elements(jQuery(this).parent().find('.sc_toggles_content'));
539                });
540            });
541    }
542
543    //Zoom
544    if (container.find('.sc_zoom:not(.inited)').length > 0) {
545        container.find('.sc_zoom:not(.inited)')
546            .each(function () {
547                "use strict";
548                if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return;
549                jQuery(this).addClass('inited');
550                jQuery(this).find('img').elevateZoom({
551                    zoomType: "lens",
552                    lensShape: "round",
553                    lensSize: 200,
554                    lensBorderSize: 4,
555                    lensBorderColour: '#ccc'
556                });
557            });
558    }
559
560}
561
562
563
564// Scrolled areas
565function themerex_sc_init_scroll_area(obj) {
566
567    // Wait for images loading
568    if (!themerex_check_images_complete(obj) && THEMEREX_GLOBALS['scroll_init_counter']++ < 30) {
569        setTimeout(function() { themerex_sc_init_scroll_area(obj); }, 200);
570        return;
571    }
572
573    // Start init scroll area
574    obj.addClass('inited');
575
576    var id = obj.attr('id');
577    if (id == undefined) {
578        id = 'scroll_'+Math.random();
579        id = id.replace('.', '');
580        obj.attr('id', id);
581    }
582    obj.addClass(id);
583
584    var parent_obj = obj.parent();
585    var parent_id  = parent_obj.attr('id');
586    if (parent_id == undefined) {
587        parent_id = 'scroll_wrap_'+Math.random();
588        parent_id = parent_id.replace('.', '');
589        parent_obj.attr('id', parent_id);
590    }
591    parent_obj.addClass(parent_id);
592
593    var bar = obj.find('#'+id+'_bar');
594    if (bar.length > 0 && !bar.hasClass(id+'_bar')) {
595        bar.addClass(id+'_bar');
596    }
597
598    // Init Swiper with scroll plugin
599    if (THEMEREX_GLOBALS['swipers'] === undefined) THEMEREX_GLOBALS['swipers'] = {};
600    THEMEREX_GLOBALS['swipers'][id] = new Swiper('.'+id, {
601        calculateHeight: false,
602        resizeReInit: true,
603        autoResize: true,
604        freeMode: true,
605        freeModeFluid: true,
606        grabCursor: true,
607        mode: obj.hasClass('sc_scroll_vertical') ? 'vertical' : 'horizontal',
608        direction: obj.hasClass('sc_scroll_vertical') ? 'vertical' : 'horizontal',
609        slidesPerView: obj.hasClass('sc_scroll') ? 'auto' : 1,
610        nextButton: parent_obj.hasClass('sc_scroll_controls') ? '#'+parent_id+' .sc_scroll_next' : false,
611        prevButton: parent_obj.hasClass('sc_scroll_controls') ? '#'+parent_id+' .sc_scroll_prev' : false,
612        scrollbar: '.'+id+'_bar',
613        scrollbarHide: true,
614    })
615
616    obj.data('settings', {mode: 'horizontal'});		// VC hook
617}
618
619
620// Slider navigation
621function themerex_sc_prepare_slider_navi(slider) {
622    /*
623        // Prev / Next
624        var navi = slider.find('> .sc_slider_controls_wrap, > .sc_scroll_controls_wrap');
625        if (navi.length == 0) navi = slider.siblings('.sc_slider_controls_wrap,.sc_scroll_controls_wrap');
626        if (navi.length > 0) {
627            navi.find('.sc_slider_prev,.sc_scroll_prev').click(function(e){
628                var swiper = jQuery(this).parents('.swiper-slider-container');
629                if (swiper.length == 0) swiper = jQuery(this).parents('.sc_slider_controls_wrap,.sc_scroll_controls_wrap').siblings('.swiper-slider-container');
630                var id = swiper.attr('id');
631                THEMEREX_GLOBALS['swipers'][id].swipePrev();
632                e.preventDefault();
633                return false;
634            });
635            navi.find('.sc_slider_next,.sc_scroll_next').click(function(e){
636                var swiper = jQuery(this).parents('.swiper-slider-container');
637                if (swiper.length == 0) swiper = jQuery(this).parents('.sc_slider_controls_wrap,.sc_scroll_controls_wrap').siblings('.swiper-slider-container');
638                var id = swiper.attr('id');
639                THEMEREX_GLOBALS['swipers'][id].swipeNext();
640                e.preventDefault();
641                return false;
642            });
643        }
644    */
645    // Pagination with slide's title
646    navi = slider.siblings('.sc_slider_pagination');
647    if (navi.length > 0) {
648        navi.find('.post_item').click(function(e){
649            var swiper = jQuery(this).parents('.sc_slider_pagination_area').find('.swiper-slider-container');
650            var id = swiper.attr('id');
651            THEMEREX_GLOBALS['swipers'][id].slideTo(jQuery(this).index()+1);
652            e.preventDefault();
653            return false;
654        });
655    }
656}
657
658// Sliders: Pagination
659function themerex_sc_change_active_pagination_in_slider(slider, idx) {
660    var pg = slider.parents('.sc_slider_pagination_area').find('.sc_slider_pagination');
661    if (pg.length==0) return;
662    pg.find('.post_item').removeClass('active').eq(idx).addClass('active');
663    var h = pg.height();
664    var off = pg.find('.active').offset().top - pg.offset().top;
665    var off2 = pg.find('.sc_scroll_wrapper').offset().top - pg.offset().top;
666    var h2  = pg.find('.active').height();
667    if (off < 0) {
668        pg.find('.sc_scroll_wrapper').css({'transform': 'translate3d(0px, 0px, 0px)', 'transition-duration': '0.3s'});
669    } else if (h <= off+h2) {
670        pg.find('.sc_scroll_wrapper').css({'transform': 'translate3d(0px, -'+(Math.abs(off2)+off-h/4)+'px, 0px)', 'transition-duration': '0.3s'});
671    }
672}
673
674// Sliders: Autoheight
675function themerex_sc_slider_autoheight(slider) {
676    if (slider.hasClass('.sc_slider_height_auto')) {
677        slider.find('.swiper-slide').each(function() {
678            if (jQuery(this).data('height_auto') == undefined) {
679                jQuery(this).attr('data-height_auto', jQuery(this).height());
680            }
681        });
682    }
683}
684
685// Sliders: Resize
686function themerex_sc_sliders_resize() {
687    var slider = arguments[0]!==undefined ? arguments[0] : '.sc_slider_swiper.inited';
688    var resize = arguments[1]!==undefined ? arguments[1] : true;
689
690    jQuery(slider).each(function() {
691        "use strict";
692        var id = jQuery(this).attr('id');
693        var width = jQuery(this).width();
694        var last_width = jQuery(this).data('last-width');
695        if (isNaN(last_width)) last_width = 0;
696
697        // Change slides_per_view
698        if (last_width==0 || last_width!=width) {
699            var spv = jQuery(this).data('slides-per-view');
700            if (spv == undefined) spv = 1;
701            if (width / spv < THEMEREX_GLOBALS['swipers_min_width']) spv = Math.max(1, Math.floor(width / THEMEREX_GLOBALS['swipers_min_width']));
702            jQuery(this).data('last-width', width);
703            if (THEMEREX_GLOBALS['swipers'][id].params.slidesPerView != spv) {
704                THEMEREX_GLOBALS['swipers'][id].params.slidesPerView = spv;
705                THEMEREX_GLOBALS['swipers'][id].params.loopedSlides = spv;
706                //THEMEREX_GLOBALS['swipers'][id].reInit();
707            }
708        }
709
710        // Resize slider
711        if ( resize && !jQuery(this).hasClass('slider_height_fixed') ) {
712            var h = 0;
713            if ( jQuery(this).find('.swiper-slide > img').length > 0 ) {
714                jQuery(this).find('.swiper-slide > img').each(function() {
715                    if (jQuery(this).height() > h) h = jQuery(this).height();
716                });
717                jQuery(this).height(h);
718            } else if ( jQuery(this).find('.swiper-slide').css('backgroundImage')!='none' ) {
719                h = Math.floor(width/16*9);
720                jQuery(this).height(h).find('.swiper-slide').height(h);
721            }
722        }
723    });
724
725    // Resize slider pagination area
726    jQuery('.sc_slider_pagination_area').each(function() {
727        "use strict";
728        var h = jQuery(this).find('.sc_slider').height();
729        if (h) {
730            jQuery(this).height(h);
731            jQuery(this).find('.sc_slider_pagination').height(h);
732            jQuery(this).find('.sc_slider_pagination .sc_scroll_vertical').height(h);
733        }
734    });
735}
736
737
738// Skills init
739function themerex_sc_init_skills(container) {
740    if (arguments.length==0) var container = jQuery('body');
741    var scrollPosition = jQuery(window).scrollTop() + jQuery(window).height();
742
743    container.find('.sc_skills_item:not(.inited)').each(function () {
744        var skillsItem = jQuery(this);
745        var scrollSkills = skillsItem.offset().top;
746        if (scrollPosition > scrollSkills) {
747            skillsItem.addClass('inited');
748            var skills = skillsItem.parents('.sc_skills').eq(0);
749            var type = skills.data('type');
750            var total = (type=='pie' && skills.hasClass('sc_skills_compact_on')) ? skillsItem.find('.sc_skills_data .pie') : skillsItem.find('.sc_skills_total').eq(0);
751            var start = parseInt(total.data('start'));
752            var stop = parseInt(total.data('stop'));
753            var maximum = parseInt(total.data('max'));
754            var startPercent = Math.round(start/maximum*100);
755            var stopPercent = Math.round(stop/maximum*100);
756            var ed = total.data('ed');
757            var duration = parseInt(total.data('duration'));
758            var speed = parseInt(total.data('speed'));
759            var step = parseInt(total.data('step'));
760            if (type == 'bar') {
761                var dir = skills.data('dir');
762                var count = skillsItem.find('.sc_skills_count').eq(0);
763                if (dir=='horizontal')
764                    count.css('width', startPercent + '%').animate({ width: stopPercent + '%' }, duration);
765                else if (dir=='vertical')
766                    count.css('height', startPercent + '%').animate({ height: stopPercent + '%' }, duration);
767                themerex_sc_animate_skills_counter(start, stop, speed-(dir!='unknown' ? 5 : 0), step, ed, total);
768            } else if (type == 'counter') {
769                themerex_sc_animate_skills_counter(start, stop, speed - 5, step, ed, total);
770            } else if (type == 'pie') {
771                var steps = parseInt(total.data('steps'));
772                var bg_color = total.data('bg_color');
773                var border_color = total.data('border_color');
774                var cutout = parseInt(total.data('cutout'));
775                var easing = total.data('easing');
776                var options = {
777                    segmentShowStroke: true,
778                    segmentStrokeColor: border_color,
779                    segmentStrokeWidth: 1,
780                    percentageInnerCutout : cutout,
781                    animationSteps: steps,
782                    animationEasing: easing,
783                    animateRotate: true,
784                    animateScale: false,
785                };
786                var pieData = [];
787                total.each(function() {
788                    var color = jQuery(this).data('color');
789                    var stop = parseInt(jQuery(this).data('stop'));
790                    var stopPercent = Math.round(stop/maximum*100);
791                    pieData.push({
792                        value: stopPercent,
793                        color: color
794                    });
795                });
796                if (total.length == 1) {
797                    themerex_sc_animate_skills_counter(start, stop, Math.round(1500/steps), step, ed, total);
798                    pieData.push({
799                        value: 100-stopPercent,
800                        color: bg_color
801                    });
802                }
803                var canvas = skillsItem.find('canvas');
804                canvas.attr({width: skillsItem.width(), height: skillsItem.width()}).css({width: skillsItem.width(), height: skillsItem.height()});
805                new Chart(canvas.get(0).getContext("2d")).Doughnut(pieData, options);
806            }
807        }
808    });
809}
810
811// Skills counter animation
812function themerex_sc_animate_skills_counter(start, stop, speed, step, ed, total) {
813    start = Math.min(stop, start + step);
814    total.text(start+ed);
815    if (start < stop) {
816        setTimeout(function () {
817            themerex_sc_animate_skills_counter(start, stop, speed, step, ed, total);
818        }, speed);
819    }
820}
821
822// Skills arc init
823function themerex_sc_init_skills_arc(container) {
824    if (arguments.length==0) var container = jQuery('body');
825    container.find('.sc_skills_arc:not(.inited)').each(function () {
826        var arc = jQuery(this);
827        arc.addClass('inited');
828        var items = arc.find('.sc_skills_data .arc');
829        var canvas = arc.find('.sc_skills_arc_canvas').eq(0);
830        var legend = arc.find('.sc_skills_legend').eq(0);
831        var w = Math.round(arc.width() - legend.width());
832        var c = Math.floor(w/2);
833        var o = {
834            random: function(l, u){
835                return Math.floor((Math.random()*(u-l+1))+l);
836            },
837            diagram: function(){
838                var r = Raphael(canvas.attr('id'), w, w),
839                    rad = hover = Math.round(w/2/items.length),
840                    step = Math.round(((w-20)/2-rad)/items.length),
841                    stroke = Math.round(w/9/items.length),
842                    speed = 400;
843
844
845                r.circle(c, c, Math.round(w/2)).attr({ stroke: 'none', fill: THEMEREX_GLOBALS['theme_skin_bg_color'] ? THEMEREX_GLOBALS['theme_skin_bg_color'] : '#ffffff' });
846
847                var title = r.text(c, c, arc.data('caption')).attr({
848                    font: Math.round(rad*0.75)+'px "'+THEMEREX_GLOBALS['theme_font']+'"',
849                    fill: THEMEREX_GLOBALS['theme_skin_color'] ? THEMEREX_GLOBALS['theme_skin_color'] : '#909090'
850                }).toFront();
851
852                rad -= Math.round(step/2);
853
854                r.customAttributes.arc = function(value, color, rad){
855                    var v = 3.6 * value,
856                        alpha = v == 360 ? 359.99 : v,
857                        rand = o.random(91, 240),
858                        a = (rand-alpha) * Math.PI/180,
859                        b = rand * Math.PI/180,
860                        sx = c + rad * Math.cos(b),
861                        sy = c - rad * Math.sin(b),
862                        x = c + rad * Math.cos(a),
863                        y = c - rad * Math.sin(a),
864                        path = [['M', sx, sy], ['A', rad, rad, 0, +(alpha > 180), 1, x, y]];
865                    return { path: path, stroke: color }
866                }
867
868                items.each(function(i){
869                    var t = jQuery(this),
870                        color = t.find('.color').val(),
871                        value = t.find('.percent').val(),
872                        text = t.find('.text').text();
873
874                    rad += step;
875                    var z = r.path().attr({ arc: [value, color, rad], 'stroke-width': stroke });
876
877                    z.mouseover(function(){
878                        this.animate({ 'stroke-width': hover, opacity: .75 }, 1000, 'elastic');
879                        if (Raphael.type != 'VML') //solves IE problem
880                            this.toFront();
881                        title.stop().animate({ opacity: 0 }, speed, '>', function(){
882                            this.attr({ text: (text ? text + '\n' : '') + value + '%' }).animate({ opacity: 1 }, speed, '<');
883                        });
884                    }).mouseout(function(){
885                        this.stop().animate({ 'stroke-width': stroke, opacity: 1 }, speed*4, 'elastic');
886                        title.stop().animate({ opacity: 0 }, speed, '>', function(){
887                            title.attr({ text: arc.data('caption') }).animate({ opacity: 1 }, speed, '<');
888                        });
889                    });
890
891                });
892
893            }
894        }
895        o.diagram();
896    });
897}
898
899
900// Countdown update
901function themerex_countdown(dt) {
902    var counter = jQuery(this).parent();
903    for (var i=3; i<dt.length; i++) {
904        var v = (dt[i]<10 ? '0' : '') + dt[i];
905        counter.find('.sc_countdown_item').eq(i-3).find('.sc_countdown_digits span').addClass('hide');
906        for (var ch=v.length-1; ch>=0; ch--) {
907            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));
908        }
909    }
910}

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.