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