1// Document ready actions for shortcodes 2jQuery(document).ready(function(){ 3 "use strict"; 4 setTimeout(function() { 5 booklovers_sc_animation(); 6 }, 600); 7}); 8 9 10// Resize actions 11jQuery(window).resize(function(){ 12 "use strict"; 13 booklovers_sc_sliders_resize(); 14}); 15 16 17// Animation 18function booklovers_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 booklovers_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 booklovers_init_shortcodes(ui.panel); 46 if (window.booklovers_init_hidden_elements) booklovers_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 booklovers_init_shortcodes(ui.newPanel); 55 if (window.booklovers_init_hidden_elements) booklovers_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 booklovers_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: booklovers_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: booklovers_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(BOOKLOVERS_STORAGE['email_mask']); 186 if (!regexp.test(email)) { 187 form.find('input').get(0).focus(); 188 booklovers_message_warning(BOOKLOVERS_STORAGE['strings']['email_not_val
188id']); 189 } else { 190 jQuery.post(BOOKLOVERS_STORAGE['ajax_url'], { 191 action: 'emailer_submit', 192 nonce: BOOKLOVERS_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: BOOKLOVERS_STORAGE['ajax_error'] }; 202 console.log(response); 203 } 204 if (rez.error === '') { 205 booklovers_message_info(BOOKLOVERS_STORAGE['strings']['email_confirm'].replace('%s', email)); 206 form.find('input').val(''); 207 } else { 208 booklovers_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 booklovers_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 booklovers_init_shortcodes(jQuery(popup_id)); 275 if (window.booklovers_init_hidden_elements) booklovers_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 >= BOOKLOVERS_STORAGE['ajax_search_min_length']) { 350 ajax_timer = setTimeout(function() { 351 "use strict"; 352 jQuery.post(BOOKLOVERS_STORAGE['ajax_url'], { 353 action: 'ajax_search', 354 nonce: BOOKLOVERS_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: BOOKLOVERS_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 booklovers_message_warning(BOOKLOVERS_STORAGE['strings']['search_error']); 372 } 373 }); 374 }, BOOKLOVERS_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 BOOKLOVERS_STORAGE['scroll_init_counter'] = 0; 416 booklovers_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 //if (jQuery(this).parents('.isotope_wrap:not(.inited)').length > 0) return; 428 jQuery(this).addClass('inited'); 429 booklovers_sc_slider_autoheight(jQuery(this)); 430 if (jQuery(this).parents('.sc_slider_pagination_area').length > 0) { 431 jQuery(this).parents('.sc_slider_pagination_area').find('.sc_slider_pagination .post_item').eq(0).addClass('active'); 432 } 433 var id = jQuery(this).attr('id'); 434 if (id == undefined) { 435 id = 'swiper_'+Math.random(); 436 id = id.replace('.', ''); 437 jQuery(this).attr('id', id); 438 } 439 jQuery(this).addClass(id); 440 jQuery(this).find('.slides .swiper-slide').css('position', 'relative'); 441 var width = jQuery(this).width(); 442 if (width == 0) width = jQuery(this).parent().width(); 443 var spv = jQuery(this).data('slides-per-view'); 444 if (spv == undefined) spv = 1; 445 var min_width = jQuery(this).data('slides-min-width');
446 if (min_width == undefined) min_width = 50; 447 if (width / spv < min_width) spv = Math.max(1, Math.floor(width / min_width)); 448 var space = jQuery(this).data('slides-space'); 449 if (space == undefined) space = 0; 450 if (BOOKLOVERS_STORAGE['swipers'] === undefined) BOOKLOVERS_STORAGE['swipers'] = {}; 451 BOOKLOVERS_STORAGE['swipers'][id] = new Swiper('.'+id, { 452 calculateHeight: !jQuery(this).hasClass('sc_slider_height_fixed'), 453 resizeReInit: true, 454 autoResize: true, 455 loop: true, 456 grabCursor: true, 457 nextButton: jQuery(this).hasClass('sc_slider_controls') ? '#'+id+' .sc_slider_next' : false, 458 prevButton: jQuery(this).hasClass('sc_slider_controls') ? '#'+id+' .sc_slider_prev' : false, 459 pagination: jQuery(this).hasClass('sc_slider_pagination') ? '#'+id+' .sc_slider_pagination_wrap' : false, 460 paginationClickable: true, 461 autoplay: jQuery(this).hasClass('sc_slider_noautoplay') ? false : (isNaN(jQuery(this).data('interval')) ? 7000 : jQuery(this).data('interval')), 462 autoplayDisableOnInteraction: false, 463 initialSlide: 0, 464 slidesPerView: spv, 465 loopedSlides: spv, 466 spaceBetween: space, 467 speed: 600, 468 // Autoheight on start 469 onFirstInit: function (slider){ 470 "use strict"; 471 var cont = jQuery(slider.container); 472 if (!cont.hasClass('sc_slider_height_auto')) return; 473 var li = cont.find('.swiper-slide').eq(1); 474 var h = li.data('height_auto'); 475 if (h > 0) { 476 var pt = parseInt(li.css('paddingTop')), pb = parseInt(li.css('paddingBottom')); 477 li.height(h); 478 cont.height(h + (isNaN(pt) ? 0 : pt) + (isNaN(pb) ? 0 : pb)); 479 cont.find('.swiper-wrapper').height(h + (isNaN(pt) ? 0 : pt) + (isNaN(pb) ? 0 : pb)); 480 } 481 }, 482 // Autoheight on slide change 483 onSlideChangeStart: function (slider){ 484 "use strict"; 485 var cont = jQuery(slider.container); 486 if (!cont.hasClass('sc_slider_height_auto')) return; 487 var idx = slider.activeIndex; 488 var li = cont.find('.swiper-slide').eq(idx); 489 var h = li.data('height_auto'); 490 if (h > 0) { 491 var pt = parseInt(li.css('paddingTop')), pb = parseInt(li.css('paddingBottom')); 492 li.height(h); 493 cont.height(h + (isNaN(pt) ? 0 : pt) + (isNaN(pb) ? 0 : pb)); 494 cont.find('.swiper-wrapper').height(h + (isNaN(pt) ? 0 : pt) + (isNaN(pb) ? 0 : pb)); 495 } 496 }, 497 // Change current item in 'full' or 'over' pagination wrap 498 onSlideChangeEnd: function (slider, dir) { 499 "use strict"; 500 var cont = jQuery(slider.container); 501 if (cont.parents('.sc_slider_pagination_area').length > 0) { 502 var li = cont.parents('.sc_slider_pagination_area').find('.sc_slider_pagination .post_item'); 503 var idx = slider.activeIndex > li.length ? 0 : slider.activeIndex-1; 504 booklovers_sc_change_active_pagination_in_slider(cont, idx); 505 } 506 } 507 }); 508 509 jQuery(this).data('settings', {mode: 'horizontal'}); // VC hook 510 511 var curSlide = jQuery(this).find('.slides').data('current-slide'); 512 if (curSlide > 0) 513 BOOKLOVERS_STORAGE['swipers'][id].slideTo(curSlide-1); 514 515 booklovers_sc_prepare_slider_navi(jQuery(this)); 516 517 }); 518 519 // Check slides per view 520 booklovers_sc_sliders_resize(); 521 } 522 523 //Skills init 524 if (container.find('.sc_skills_item:not(.inited)').length > 0) { 525 booklovers_sc_init_skills(container); 526 jQuery(window).scroll(function () { booklovers_sc_init_skills(container); }); 527 } 528 //Skills type='arc' init 529 if (container.find('.sc_skills_arc:not(.inited)').length > 0) { 530 booklovers_sc_init_skills_arc(container); 531 jQuery(window).scroll(function () { booklovers_sc_init_skills_arc(container); }); 532 } 533 534 // Tabs 535 if (container.find('.sc_tabs:not(.inited):not(.no_jquery_ui),.tabs_area:not(.inited)').length > 0) { 536 container.find('.sc_tabs:not(.inited):not(.no_jquery_ui),.tabs_area:not(.inited)').each(function () { 537 "use strict"; 538 var init = jQuery(this).data('active'); 539 if (isNaN(init)) init = 0; 540 else init = Math.max(0, init); 541 jQuery(this) 542 .addClass('inited') 543 .tabs({ 544 active: init, 545 show: { 546 effect: 'fadeIn', 547 duration: 300 548 }, 549 hide: { 550 effect: 'fadeOut', 551 duration: 300 552 }, 553 create: function (event, ui) { 554 "use strict"; 555 booklovers_init_shortcodes(ui.panel); 556 if (window.booklovers_init_hidden_elements) booklovers_init_hidden_elements(ui.panel); 557 }, 558 activate: function (event, ui) { 559 "use strict"; 560 booklovers_init_shortcodes(ui.newPanel); 561 if (window.booklovers_init_hidden_elements) booklovers_init_hidden_elements(ui.newPanel); 562 } 563 }); 564 }); 565 } 566 if (container.find('.sc_tabs.no_jquery_ui:not(.inited)').length > 0) { 567 container.find('.sc_tabs.no_jquery_ui:not(.inited)').each(function () { 568 "use strict"; 569 jQuery(this) 570 .addClass('inited') 571 .on('click', '.sc_tabs_titles li a', function(e) { 572 "use strict"; 573 if (!jQuery(this).parent().hasClass('sc_tabs_active')) { 574 var id_act = jQuery(this).parent().siblings('.sc_tabs_active').find('a').attr('href'); 575 var id = jQuery(this).attr('href'); 576 jQuery(this).parent().addClass('sc_tabs_active').siblings().removeClass('sc_tabs_active'); 577 jQuery(id_act).fadeOut(function() { 578 "use strict"; 579 jQuery(id).fadeIn(function() { 580 "use strict"; 581 booklovers_init_shortcodes(jQuery(this)); 582 if (window.booklovers_init_hidden_elements) booklovers_init_hidden_elements(jQuery(this)); 583 }); 584 }); 585 } 586 e.preventDefault(); 587 return false;
588 }); 589 jQuery(this).find('.sc_tabs_titles li').eq(0).addClass('sc_tabs_active'); 590 jQuery(this).find('.sc_tabs_content').eq(0).fadeIn(function() { 591 "use strict"; 592 booklovers_init_shortcodes(jQuery(this)); 593 if (window.booklovers_init_hidden_elements) booklovers_init_hidden_elements(jQuery(this)); 594 }); 595 }); 596 } 597 598 // Toggles 599 if (container.find('.sc_toggles .sc_toggles_title:not(.inited)').length > 0) { 600 container.find('.sc_toggles .sc_toggles_title:not(.inited)') 601 .addClass('inited') 602 .on('click', function () { 603 "use strict"; 604 jQuery(this).toggleClass('ui-state-active').parent().toggleClass('sc_active'); 605 jQuery(this).parent().find('.sc_toggles_content').slideToggle(300, function () { 606 "use strict"; 607 booklovers_init_shortcodes(jQuery(this).parent().find('.sc_toggles_content')); 608 if (window.booklovers_init_hidden_elements) booklovers_init_hidden_elements(jQuery(this).parent().find('.sc_toggles_content')); 609 }); 610 }); 611 } 612 613 //Zoom 614 if (container.find('.sc_zoom:not(.inited)').length > 0) { 615 container.find('.sc_zoom:not(.inited)') 616 .each(function () { 617 "use strict"; 618 if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return; 619 jQuery(this).addClass('inited'); 620 jQuery(this).find('img').elevateZoom({ 621 zoomType: "lens", 622 lensShape: "round", 623 lensSize: 200, 624 lensBorderSize: 4, 625 lensBorderColour: '#ccc' 626 }); 627 }); 628 } 629 630} 631 632 633 634// Scrolled areas 635function booklovers_sc_init_scroll_area(obj) { 636 "use strict"; 637 638 // Wait for images loading 639 if (!booklovers_check_images_complete(obj) && BOOKLOVERS_STORAGE['scroll_init_counter']++ < 30) { 640 setTimeout(function() { booklovers_sc_init_scroll_area(obj); }, 200); 641 return; 642 } 643 644 // Start init scroll area 645 obj.addClass('inited'); 646 647 var id = obj.attr('id'); 648 if (id == undefined) { 649 id = 'scroll_'+Math.random(); 650 id = id.replace('.', ''); 651 obj.attr('id', id); 652 } 653 obj.addClass(id); 654 655 var parent_obj = obj.parent(); 656 var parent_id = parent_obj.attr('id'); 657 if (parent_id == undefined) { 658 parent_id = 'scroll_wrap_'+Math.random(); 659 parent_id = parent_id.replace('.', ''); 660 parent_obj.attr('id', parent_id); 661 } 662 parent_obj.addClass(parent_id); 663 664 var bar = obj.find('#'+id+'_bar'); 665 if (bar.length > 0 && !bar.hasClass(id+'_bar')) { 666 bar.addClass(id+'_bar'); 667 } 668 669 // Correct wrapper width (if scroll dir = horizontal) 670 if (obj.hasClass('sc_scroll_horizontal')) { 671 obj.find('.sc_scroll_wrapper > .sc_scroll_slide').css('width', 'auto'); 672 obj.find('.sc_scroll_wrapper').css('width', obj.find('.sc_scroll_wrapper > .sc_scroll_slide').width()+10); 673 obj.find('.sc_scroll_wrapper > .sc_scroll_slide').css('width', '100%') 674 } 675 676 // Init Swiper with scroll plugin 677 if (BOOKLOVERS_STORAGE['swipers'] === undefined) BOOKLOVERS_STORAGE['swipers'] = {}; 678 BOOKLOVERS_STORAGE['swipers'][id] = new Swiper('.'+id, { 679 calculateHeight: false, 680 resizeReInit: true, 681 autoResize: true, 682 freeMode: true, 683 freeModeFluid: true, 684 grabCursor: true, 685 mode: obj.hasClass('sc_scroll_vertical') ? 'vertical' : 'horizontal', 686 direction: obj.hasClass('sc_scroll_vertical') ? 'vertical' : 'horizontal', 687 slidesPerView: obj.hasClass('sc_scroll') ? 'auto' : 1, 688 nextButton: parent_obj.hasClass('sc_scroll_controls') ? '#'+parent_id+' .sc_scroll_next' : false, 689 prevButton: parent_obj.hasClass('sc_scroll_controls') ? '#'+parent_id+' .sc_scroll_prev' : false, 690 scrollbar: '.'+id+'_bar', 691 scrollbarHide: true, 692 }) 693 694 // VC hook 695 obj.data('settings', {mode: 'horizontal'}); 696} 697 698 699// Slider navigation 700function booklovers_sc_prepare_slider_navi(slider) { 701 "use strict"; 702 var navi = null; 703 704/* 705 // Prev / Next 706 navi = slider.find('> .sc_slider_controls_wrap, > .sc_scroll_controls_wrap'); 707 if (navi.length == 0) navi = slider.siblings('.sc_slider_controls_wrap,.sc_scroll_controls_wrap'); 708 if (navi.length > 0) { 709 navi.on('click', '.sc_slider_prev,.sc_scroll_prev', function(e) { 710 var swiper = jQuery(this).parents('.swiper-slider-container'); 711 if (swiper.length == 0) swiper = jQuery(this).parents('.sc_slider_controls_wrap,.sc_scroll_controls_wrap').siblings('.swiper-slider-container'); 712 var id = swiper.attr('id'); 713 BOOKLOVERS_STORAGE['swipers'][id].slidePrev(); 714 e.preventDefault(); 715 return false;
716 }) 717 .on('click', '.sc_slider_next,.sc_scroll_next', function(e){ 718 var swiper = jQuery(this).parents('.swiper-slider-container'); 719 if (swiper.length == 0) swiper = jQuery(this).parents('.sc_slider_controls_wrap,.sc_scroll_controls_wrap').siblings('.swiper-slider-container'); 720 var id = swiper.attr('id'); 721 BOOKLOVERS_STORAGE['swipers'][id].slideNext(); 722 e.preventDefault(); 723 return false; 724 }); 725 } 726*/ 727 // Pagination with slide's title 728 navi = slider.siblings('.sc_slider_pagination'); 729 if (navi.length > 0) { 730 navi.on('click', '.post_item', function(e){ 731 var swiper = jQuery(this).parents('.sc_slider_pagination_area').find('.swiper-slider-container'); 732 var id = swiper.attr('id'); 733 BOOKLOVERS_STORAGE['swipers'][id].slideTo(jQuery(this).index()+1); 734 e.preventDefault(); 735 return false; 736 }); 737 } 738} 739 740// Sliders: Pagination 741function booklovers_sc_change_active_pagination_in_slider(slider, idx) { 742 "use strict"; 743 var pg = slider.parents('.sc_slider_pagination_area').find('.sc_slider_pagination'); 744 if (pg.length==0) return; 745 pg.find('.post_item').removeClass('active').eq(idx).addClass('active'); 746 var h = pg.height(); 747 var off = pg.find('.active').offset().top - pg.offset().top; 748 var off2 = pg.find('.sc_scroll_wrapper').offset().top - pg.offset().top; 749 var h2 = pg.find('.active').height(); 750 if (off < 0) { 751 pg.find('.sc_scroll_wrapper').css({'transform': 'translate3d(0px, 0px, 0px)', 'transition-duration': '0.3s'}); 752 } else if (h <= off+h2) { 753 pg.find('.sc_scroll_wrapper').css({'transform': 'translate3d(0px, -'+(Math.abs(off2)+off-h/4)+'px, 0px)', 'transition-duration': '0.3s'}); 754 } 755} 756 757// Sliders: Autoheight 758function booklovers_sc_slider_autoheight(slider) { 759 "use strict"; 760 if (slider.hasClass('.sc_slider_height_auto')) { 761 slider.find('.swiper-slide').each(function() { 762 "use strict"; 763 if (jQuery(this).data('height_auto') == undefined) { 764 jQuery(this).attr('data-height_auto', jQuery(this).height()); 765 } 766 }); 767 } 768} 769 770// Sliders: Resize 771function booklovers_sc_sliders_resize() { 772 "use strict"; 773 var slider = arguments[0]!==undefined ? arguments[0] : '.sc_slider_swiper.inited'; 774 var resize = arguments[1]!==undefined ? arguments[1] : true; 775 776 jQuery(slider).each(function() { 777 "use strict"; 778 var id = jQuery(this).attr('id'); 779 var width = jQuery(this).width(); 780 var last_width = jQuery(this).data('last-width'); 781 if (isNaN(last_width)) last_width = 0; 782 783 // Change slides_per_view 784 if (last_width==0 || last_width!=width) { 785 var spv = jQuery(this).data('slides-per-view'); 786 if (spv == undefined) spv = 1; 787 var min_width = jQuery(this).data('slides-min-width'); 788 if (min_width == undefined) min_width = 50; 789 if (width / spv < min_width) spv = Math.max(1, Math.floor(width / min_width)); 790 jQuery(this).data('last-width', width); 791 if (BOOKLOVERS_STORAGE['swipers'][id].params.slidesPerView != spv) { 792 BOOKLOVERS_STORAGE['swipers'][id].params.slidesPerView = spv; 793 BOOKLOVERS_STORAGE['swipers'][id].params.loopedSlides = spv; 794 //BOOKLOVERS_STORAGE['swipers'][id].reInit(); 795 } 796 } 797 798 // Resize slider 799 if ( resize && !jQuery(this).hasClass('sc_slider_height_fixed') ) { 800 var h = 0; 801 if ( jQuery(this).find('.swiper-slide > img').length > 0 ) { 802 jQuery(this).find('.swiper-slide > img').each(function() { 803 "use strict"; 804 if (jQuery(this).height() > h) h = jQuery(this).height(); 805 }); 806 jQuery(this).height(h); 807 } else if ( jQuery(this).find('.swiper-slide').css('backgroundImage')!='none' ) { 808 h = Math.floor(width/16*9); 809 jQuery(this).height(h).find('.swiper-slide').height(h); 810 } 811 } 812 }); 813 814 // Resize slider pagination area 815 jQuery('.sc_slider_pagination_area').each(function() { 816 "use strict"; 817 var h = jQuery(this).find('.sc_slider').height(); 818 if (h) { 819 jQuery(this).height(h); 820 jQuery(this).find('.sc_slider_pagination').height(h); 821 jQuery(this).find('.sc_slider_pagination .sc_scroll_vertical').height(h); 822 } 823 }); 824} 825 826 827// Skills init 828function booklovers_sc_init_skills(container) { 829 "use strict"; 830 if (arguments.length==0) var container = jQuery('body'); 831 var scrollPosition = jQuery(window).scrollTop() + jQuery(window).height(); 832 833 container.find('.sc_skills_item:not(.inited)').each(function () { 834 "use strict"; 835 var skillsItem = jQuery(this); 836 var scrollSkills = skillsItem.offset().top; 837 if (scrollPosition > scrollSkills) { 838 skillsItem.addClass('inited'); 839 var skills = skillsItem.parents('.sc_skills').eq(0); 840 var type = skills.data('type'); 841 var total = (type=='pie' && skills.hasClass('sc_skills_compact_on')) ? skillsItem.find('.sc_skills_data .pie') : skillsItem.find('.sc_skills_total').eq(0); 842 var start = parseInt(total.data('start')); 843 var stop = parseInt(total.data('stop')); 844 var maximum = parseInt(total.data('max')); 845 var startPercent = Math.round(start/maximum*100); 846 var stopPercent = Math.round(stop/maximum*100); 847 var ed = total.data('ed'); 848 var duration = parseInt(total.data('duration')); 849 var speed = parseInt(total.data('speed')); 850 var step = parseInt(total.data('step')); 851 if (type == 'bar') { 852 var dir = skills.data('dir'); 853 var count = skillsItem.find('.sc_skills_count').eq(0); 854 if (dir=='horizontal') 855 count.css('width', startPercent + '%').animate({ width: stopPercent + '%' }, duration); 856 else if (dir=='vertical') 857 count.css('height', startPercent + '%').animate({ height: stopPercent + '%' }, duration); 858 booklovers_sc_animate_skills_counter(start, stop, speed-(dir!='unknown' ? 5 : 0), step, ed, total); 859 } else if (type == 'counter') { 860 booklovers_sc_animate_skills_counter(start, stop, speed - 5, step, ed, total); 861 } else if (type == 'pie') { 862 var steps = parseInt(total.data('steps')); 863 var bg_color = total.data('bg_color'); 864 var border_color = total.data('border_color'); 865 var cutout = parseInt(total.data('cutout')); 866 var easing = total.data('easing'); 867 var options = { 868 segmentShowStroke: false, 869 segmentStrokeColor: border_color, 870 segmentStrokeWidth: 1, 871 percentageInnerCutout : cutout, 872 animationSteps: steps, 873 animationEasing: easing, 874 animateRotate: true, 875 animateScale: false, 876 }; 877 var pieData = []; 878 total.each(function() { 879 "use strict"; 880 var color = jQuery(this).data('color');
881 var stop = parseInt(jQuery(this).data('stop')); 882 var stopPercent = Math.round(stop/maximum*100); 883 pieData.push({ 884 value: stopPercent, 885 color: color 886 }); 887 }); 888 if (total.length == 1) { 889 booklovers_sc_animate_skills_counter(start, stop, Math.round(1500/steps), step, ed, total); 890 pieData.push({ 891 value: 100-stopPercent, 892 color: bg_color 893 }); 894 } 895 var canvas = skillsItem.find('canvas'); 896 canvas.attr({width: skillsItem.width(), height: skillsItem.width()}).css({width: skillsItem.width(), height: skillsItem.height()}); 897 new Chart(canvas.get(0).getContext("2d")).Doughnut(pieData, options); 898 } 899 } 900 }); 901} 902 903// Skills counter animation 904function booklovers_sc_animate_skills_counter(start, stop, speed, step, ed, total) { 905 "use strict"; 906 start = Math.min(stop, start + step); 907 total.text(start+ed); 908 if (start < stop) { 909 setTimeout(function () { 910 booklovers_sc_animate_skills_counter(start, stop, speed, step, ed, total); 911 }, speed); 912 } 913} 914 915// Skills arc init 916function booklovers_sc_init_skills_arc(container) { 917 "use strict"; 918 if (arguments.length==0) var container = jQuery('body'); 919 container.find('.sc_skills_arc:not(.inited)').each(function () { 920 var arc = jQuery(this); 921 arc.addClass('inited'); 922 var items = arc.find('.sc_skills_data .arc'); 923 var canvas = arc.find('.sc_skills_arc_canvas').eq(0); 924 var legend = arc.find('.sc_skills_legend').eq(0); 925 var w = Math.round(arc.width() - legend.width()); 926 var c = Math.floor(w/2); 927 var o = { 928 random: function(l, u){ 929 "use strict"; 930 return Math.floor((Math.random()*(u-l+1))+l); 931 }, 932 diagram: function(){ 933 "use strict"; 934 var r = Raphael(canvas.attr('id'), w, w), 935 hover = Math.round(w/2/items.length), 936 rad = hover, 937 step = Math.round(((w-20)/2-rad)/items.length), 938 stroke = Math.round(w/9/items.length), 939 speed = 400; 940 941 942 r.circle(c, c, Math.round(w/2)).attr({ stroke: 'none', fill: BOOKLOVERS_STORAGE['theme_skin_bg_color'] ? BOOKLOVERS_STORAGE['theme_skin_bg_color'] : '#ffffff' }); 943 944 var title = r.text(c, c, arc.data('caption')).attr({ 945 font: Math.round(rad*0.75)+'px "'+BOOKLOVERS_STORAGE['theme_font']+'"', 946 fill: BOOKLOVERS_STORAGE['theme_skin_color'] ? BOOKLOVERS_STORAGE['theme_skin_color'] : '#909090' 947 }).toFront(); 948 949 rad -= Math.round(step/2); 950 951 r.customAttributes.arc = function(value, color, rad){ 952 "use strict"; 953 var v = 3.6 * value, 954 alpha = v == 360 ? 359.99 : v, 955 rand = o.random(91, 240), 956 a = (rand-alpha) * Math.PI/180, 957 b = rand * Math.PI/180, 958 sx = c + rad * Math.cos(b), 959 sy = c - rad * Math.sin(b), 960 x = c + rad * Math.cos(a), 961 y = c - rad * Math.sin(a), 962 path = [['M', sx, sy], ['A', rad, rad, 0, +(alpha > 180), 1, x, y]]; 963 return { path: path, stroke: color } 964 } 965 966 items.each(function(i){ 967 "use strict"; 968 var t = jQuery(this), 969 color = t.find('.color').val(), 970 value = t.find('.percent').val(), 971 text = t.find('.text').text(); 972 973 rad += step; 974 var z = r.path().attr({ arc: [value, color, rad], 'stroke-width': stroke }); 975 976 z.mouseover(function(){ 977 "use strict"; 978 this.animate({ 'stroke-width': hover, opacity: .75 }, 1000, 'elastic'); 979 if (Raphael.type != 'VML') //solves IE problem 980 this.toFront(); 981 title.stop().animate({ opacity: 0 }, speed, '>', function(){ 982 this.attr({ text: (text ? text + '\n' : '') + value + '%' }).animate({ opacity: 1 }, speed, '<'); 983 }); 984 }).mouseout(function(){ 985 "use strict"; 986 this.stop().animate({ 'stroke-width': stroke, opacity: 1 }, speed*4, 'elastic'); 987 title.stop().animate({ opacity: 0 }, speed, '>', function(){ 988 title.attr({ text: arc.data('caption') }).animate({ opacity: 1 }, speed, '<'); 989 }); 990 }); 991 992 }); 993 994 } 995 } 996 o.diagram(); 997 }); 998} 999 1000 1001// Countdown update 1002function booklovers_countdown(dt) { 1003 "use strict"; 1004 var counter = jQuery(this).parent(); 1005 for (var i=3; i<dt.length; i++) { 1006 var v = (dt[i]<10 ? '0' : '') + dt[i]; 1007 counter.find('.sc_countdown_item').eq(i-3).find('.sc_countdown_digits span').addClass('hide'); 1008 for (var ch=v.length-1; ch>=0; ch--) { 1009 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)); 1010 } 1011 } 1012} 1013 1014 1015// Contact form handlers 1016function booklovers_sc_form_validate(form){ 1017 "use strict"; 1018 var url = form.attr('action'); 1019 if (url == '') return false;
1020 form.find('input').removeClass('error_fields_class'); 1021 var error = false; 1022 var form_custom = form.data('formtype')=='form_custom'; 1023 if (!form_custom) { 1024 error = booklovers_form_validate(form, { 1025 error_message_show: true, 1026 error_message_time: 4000, 1027 error_message_class: "sc_infobox sc_infobox_style_error", 1028 error_fields_class: "error_fields_class", 1029 exit_after_first_error: false, 1030 rules: [ 1031 { 1032 field: "username", 1033 min_length: { value: 1, message: BOOKLOVERS_STORAGE['strings']['name_empty'] }, 1034 max_length: { value: 60, message: BOOKLOVERS_STORAGE['strings']['name_long'] } 1035 }, 1036 { 1037 field: "email", 1038 min_length: { value: 7, message: BOOKLOVERS_STORAGE['strings']['email_empty'] }, 1039 max_length: { value: 60, message: BOOKLOVERS_STORAGE['strings']['email_long'] }, 1040 mask: { value: BOOKLOVERS_STORAGE['email_mask'], message: BOOKLOVERS_STORAGE['strings']['email_not_valid'] } 1041 }, 1042 { 1043 field: "subject", 1044 min_length: { value: 1, message: BOOKLOVERS_STORAGE['strings']['subject_empty'] }, 1045 max_length: { value: 100, message: BOOKLOVERS_STORAGE['strings']['subject_long'] } 1046 }, 1047 { 1048 field: "message", 1049 min_length: { value: 1, message: BOOKLOVERS_STORAGE['strings']['text_empty'] }, 1050 max_length: { value: BOOKLOVERS_STORAGE['contacts_maxlength'], message: BOOKLOVERS_STORAGE['strings']['text_long'] } 1051 } 1052 ] 1053 }); 1054 } 1055 if (!error && url!='#') { 1056 jQuery.post(url, { 1057 action: "send_form", 1058 nonce: BOOKLOVERS_STORAGE['ajax_nonce'], 1059 type: form.data('formtype'), 1060 data: form.serialize() 1061 }).done(function(response) { 1062 "use strict"; 1063 var rez = {}; 1064 try { 1065 rez = JSON.parse(response); 1066 } catch (e) { 1067 rez = { error: BOOKLOVERS_STORAGE['ajax_error'] }; 1068 console.log(response); 1069 } 1070 var result = form.find(".result").toggleClass("sc_infobox_style_error", false).toggleClass("sc_infobox_style_success", false); 1071 if (rez.error === '') { 1072 form.get(0).reset(); 1073 result.addClass("sc_infobox_style_success").html(BOOKLOVERS_STORAGE['strings']['send_complete']); 1074 var return_url = form.find('input[name="return_url"]'); 1075 if (return_url.length > 0 && return_url.val()!='') { 1076 setTimeout(function() { 1077 "use strict"; 1078 window.location.href = return_url.val(); 1079 }, 3300); 1080 } 1081 } else { 1082 result.addClass("sc_infobox_style_error").html(BOOKLOVERS_STORAGE['strings']['send_error'] + ' ' + rez.error); 1083 } 1084 result.fadeIn().delay(3000).fadeOut(); 1085 }); 1086 } 1087 return !error; 1088}
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.