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