1function show_object(o) { 2// var t="";for (p in o) {t+="\n"+p+"="+o[p]};alert(t); 3 jQuery('body').append('------------------<br/>'); 4 for (p in o) { 5 jQuery('body').append(p+"="+o[p]+"<br/>"); 6 } 7} 8; 9// Ouverture / fermeture d'une popup par survol 10// 11// Utilisation : 12// <div id="un-id"> 13// <div class="popup"> 14// ... 15// </div> 16// </div> 17// 18// <script> 19// jQuery(document).ready(function(){ 20// popupInit('#un-id',{}); 21// }); 22// </script> 23// 24// Le premier div sera affiché. Il peut par exemple contenir une image de fond. 25// Le div de classe popup sera affiché au survol du premier, et sera effacé 26// lorsque la souris ira ailleurs, après un certain délai. 27// Noter que le contenu de <div class="popup"> sera enclos dans un <div class="popup-content"> 28// 29// Paramètres 30// ex : popupInit('#un-id',{delay:500,duration:'slow',easing:'swing'}); 31// delay : temps entre le survol et l'ouverture ou la fermeture. 32// utile pour éviter une ouverture sur un survol fugitif, 33// ou la fermeture en passant d'une icone à la popup, par exemple. 34// défaut = 500 35// duration : durée de l'animation (cf doc jquery show()) 36// défaut = slow 37// easing : type d'animation (cf doc jquery show()) 38// défaut = swing 39// event : évenement déclenchant l'ouverture ou la fermeture 40// mouse = ouverture au survol, fermeture en fin de survol 41// click = ouverture et fermeture par clic 42// click-mouse = ouverture par clic, fermeture par clic ou fin de survol 43// always = toujours ouvert 44// all = click + mouse 45// défaut = mouse 46// popup : identifiant de la popup associée. 47// par défaut, c'est l'élément de class popup inclus. 48// callback : nom d'une fonction qui sera appelée lors de l'ouverture ou de la fermeture de la popup. 49// un argument sera passé, valant 'open' ou 'close'. 50// la callback retourne vrai pour autoriser l'action, faux sinon. 51// group : permet de définir un groupe de popups dans lequel une seule popup sera ouverte à la fois. 52// width : taille fixée pour la popup 53 54var popupGroups = {}; 55 56function popupInit(selector,params) { 57 var me = jQuery(selector); 58 59 // L'élement doit exister 60 if (me.length!=1) { 61 throw "popupInit('"+selector+"') : l'élément n'existe pas ou n'est pas unique"; 62 } 63 64 // Sauvegarde des parametres ou de leurs valeurs par défaut 65 me.data('selector', selector); 66 me.data('delay', (params.hasOwnProperty('delay')) ? params.delay : 500); 67 me.data('duration', (params.hasOwnProperty('duration')) ? params.duration : 'slow'); 68 me.data('easing', (params.hasOwnProperty('easing')) ? params.easing : 'swing'); 69 me.data('event', (params.hasOwnProperty('event')) ? params.event : 'mouse'); 70 me.data('popup', (params.hasOwnProperty('popup')) ? params.popup : ''); 71 me.data('callback', (params.hasOwnProperty('callback')) ? params.callback : ''); 72 me.data('group', (params.hasOwnProperty('group')) ? params.group : ''); 73 me.data('width', (params.hasOwnProperty('width')) ? params.width : 'auto'); 74 me.data('margin-top', (params.hasOwnProperty('marginTop')) ? params.marginTop : 0); 75 me.data('calculer-y-avec-scroll', (params.hasOwnProperty('calculerYAvecScroll')) ? params.calculerYAvecScroll: 1); 76 77 // Cas d'un groupe 78 if (me.data('group')!='') { 79 var group = me.data('group'); 80 if (!popupGroups.hasOwnProperty(group)) { 81 popupGroups[group] = new Array(); 82 } 83 popupGroups[group][popupGroups[group].length] = me; 84 } 85 86 // Ajout de fonctions spécifiques sur l'objet 87 me.data('getPopup',function(){ 88 var popup; 89 var selector = me.data('popup'); 90 91 if (selector=="") { 92 popup = me.find('.popup'); 93 } 94 else { 95 popup = jQuery(selector); 96 } 97 // La popup doit exister et être unique 98 if (popup.length!=1) { 99 throw "popupInit('"+me.data('selector')+"') : la popup n'existe pas ou n'est pas unique"; 100 } 101 return popup; 102 }); 103 me.data('togglePopup',function(event) { 104 if (me.data('opened')=="1") { 105 me.data('closePopup')(false/*me*/); 106 } 107 else { 108 me.data('openPopup')(); 109 } 110 }); 111 me.data('openPopupOnMouse',function(event) { 112 me.data('mouseover',"1"); 113 if (me.data('opened')=="1") return; // déjà ouvert 114 var ts = setTimeout(function(){ 115 clearTimeout(ts); 116 if (me.data('mouseover')=="1") { 117 me.data('openPopup')(); 118 } 119 },me.data('delay')); 120 }); 121 me.data('keepPopup',function(event) { 122 me.data('mouseover',"1"); 123 }); 124 me.data('closePopupOnMouse',function(event) { 125 me.data('mouseover',"0"); 126 if (me.data('opened')=="0") return; // déjà fermé 127 var ts = setTimeout(function(){ 128 clearTimeout(ts); 129 if (me.data('mouseover')=="0") { 130 me.data('closePopup')(false); 131 me.dequeue(); 132 } 133 },me.data('delay')); 134 }); 135 me.data('openPopup',function(){ 136 var ok = true; 137 if (me.data('callback')!="") { 138 eval("ok = "+me.data('callback')+"('open')"); 139 } 140 if (!ok) return; 141 me.data('opened',"1"); 142 me.addClass('opened'); 143 var popup = me.data('getPopup')(); 144 if (me.data('popup')=='') { 145 // Calcul de la position 146 var offset = me.offset(); 147 popup.css({left:'-9999px'}); 148 popup.show(); 149 150 // La popup ne déborde pas à condition de bien la positionner. 151 // - idéalement, le centre du <LI> correspond au centre de la popup 152 var largeur_popup = popup.width(); 153 var largeur_dispo = me.offsetParent().width(); 154 var debut_popup; 155 var fin_popup; 156 var y = me.height() + offset.top /*- me.offsetParent().position().top*/ + me.data('margin-top'); /* version 3 ok */ 157 if (me.data('calculer-y-avec-scroll')) { 158 y-= jQuery(window).scrollTop(); 159 y-= me.offsetParent().position().top; 160 // ça dépend... oui pour les menus, mais non pour la popup de connexion... 161 } 162 else { 163 } 164 // Quand la largeur de la popup atteitn ou dépasse la largeur disponible, elle est simplement 165 // centrée 166 if (largeur_popup >= largeur_dispo) { 167 debut_popup = Math.round((largeur_dispo - largeur_popup)/2); 168 popup.css({top:y,left:debut_popup}); 169 } 170 // Sinon elle est centrée sur le li 171 else { 172 var centre_li = Math.round(offset.left + (me.width() / 2)); 173 debut_popup = Math.round(centre_li - (popup.width() / 2)); 174 fin_popup = debut_popup + popup.width(); 175 if (fin_popup > largeur_dispo) { 176 delta = fin_popup - largeur_dispo; 177 debut_popup -= delta; 178 fin_popup -= delta; 179 } 180 if (debut_popup < 0) { 181 delta = 0 - debut_popup; 182 debut_popup += delta; 183 fin_popup += delta; 184 } 185 popup.offset({top:y,left:debut_popup}); 186 } 187 } 188 var group = me.data('group'); 189 if (group != "") { 190 var brothers = popupGroups[group]; 191 for (i in brothers) { 192 var brother = brothers[i]; 193 if (brother !== me) { 194 brother.data('closePopup')(false); 195 } 196 } 197 } 198 if (me.data('event')=='all') { 199 jQuery(document).click(me.data('closePopupOnClick')); 200 } 201 popup.show(me.data('duration'),me.data('easing')); 202 popup.trigger("popup",['open']); 203 }); 204 me.data('closePopup',function(force) { 205 var ok = true; 206 if (!force && me.data('callback')!="") { 207 eval("ok = "+me.data('callback')+"('close')"); 208 } 209 if (!ok) return; 210 var popup = me.data('getPopup')(); 211 me.removeClass('opened'); 212 popup.hide(); 213 if (me.data('event')=='all') { 214 jQuery(document).unbind('click',me.data('closePopupOnClick')); 215 } 216 me.data('opened',"0"); 217 popup.trigger("popup",['close']); 218// if (me.data('callback')!="") { 219// eval(me.data('callback')+"('close')"); 220// } 221 }); 222 me.data('closePopupOnClick',function(event) { 223 // Fermeture acceptée sur un click ailleurs que sur la popup 224 if (event.button != 0) { 225 // Seul le click avec bouton principal est géré 226 return; 227 } 228 229 var popup = me.data('getPopup')(me); 230 if (popup.is(event.target)) { 231 // click sur la popup 232 return; 233 } 234 var e = popup.find(event.target); 235 if (e.length) { 236 // ou click sur un composant de la popup 237 return; 238 } 239 // Donc on peut fermer 240 me.data('closePopup')(true); 241 }); 242 me.data('setCss',function(array){ 243 var popup = me.data('getPopup')(); 244 for (var property in array) { 245 var values = (array[property]+"").split('|'); 246 var ok = false;
247 for (var i in values) { 248 var value = values[i]; 249 if (value == popup.css(property)) ok = true; 250 } 251 if (!ok) { 252 popup.css(property,values[0]); 253 } 254 } 255 }); 256 257 var popup = me.data('getPopup')(me); 258 259 popup.find('> *').wrapAll('<div class="popup-content">'); 260 261 // Css requis 262 me.data('setCss')({ 263 display:'none', 264 position:'absolute|fixed', 265 'z-index':5000|6000, 266 }); 267 268 // La popup ne doit jamais déborder 269 if (me.data('width')=='auto') { 270 me.data('setCss')({ 271 'max-width':'80%', 272 }); 273 } 274 else { 275 me.data('setCss')({ 276 width: me.data('width'), 277 }); 278 } 279 280 281 popup.click(function(event){event.stopPropagation()}); 282 283 // Handlers 284 if (params.event == "mouse") { 285 me.mouseover(me.data('openPopupOnMouse')); 286 me.mouseout(me.data('closePopupOnMouse')); 287 } 288 else if (params.event == "click") { 289 me.click(me.data('togglePopup')); 290 } 291 else if (params.event == "click-mouse") { 292 me.click(me.data('togglePopup')); 293 me.mouseover(me.data('keepPopup')); 294 me.mouseout(me.data('closePopupOnMouse')); 295 } 296 else if (params.event == "all") { 297 me.click(me.data('togglePopup')); 298 me.mouseover(me.data('openPopupOnMouse')); 299 me.mouseout(me.data('closePopupOnMouse')); 300 } 301 else if (params.event == "always") { 302 me.data('openPopup')(); 303 } 304} 305; 306/* Aspect du bouton menu 307 * Callback déclenchée par popup.js 308 */ 309 310/* Classe scrolled pour le body lorsqu'il 311 * est scrollé au delà d'une limite : 312 * La hauteur de tout ce qui est avant la page lorsqu'elle n'est pas scrollée 313 */ 314jQuery(window).scroll(function(){ 315 var body = jQuery('body'); 316 var marge = body.outerHeight(true)-body.outerHeight(false); 317 var limite = body.data('limite'); 318 if (marge > limite) { 319// console.info(marge); 320 body.data('limite',marge); 321 } 322 if (jQuery(window).scrollTop() > limite) { 323 jQuery('body').addClass('scrolled'); 324 } 325 else { 326 jQuery('body').removeClass('scrolled'); 327 } 328}); 329 330jQuery(document).ready(function() { 331 var body = jQuery('body'); 332 body.data('limite',0); 333}); 334 ; 335/* 336 * jQuery OwlCarousel v1.3.3 337 * 338 * Copyright (c) 2013 Bartosz Wojciechowski 339 * http://www.owlgraphic.com/owlcarousel/ 340 * 341 * Licensed under MIT 342 * 343 */ 344 345/*JS Lint helpers: */ 346/*global dragMove: false, dragEnd: false, jQuery, jQuery, alert, window, document */ 347/*jslint nomen: true, continue:true */ 348 349if (typeof Object.create !== "function") { 350 Object.create = function (obj) { 351 function F() {} 352 F.prototype = obj; 353 return new F(); 354 }; 355} 356(function (jQuery, window, document) { 357 358 var Carousel = { 359 init : function (options, el) { 360 var base = this; 361 362 base.jQueryelem = jQuery(el); 363 base.options = jQuery.extend({}, jQuery.fn.owlCarousel.options, base.jQueryelem.data(), options); 364 365 base.userOptions = options; 366 base.loadContent(); 367 }, 368 369 loadContent : function () { 370 var base = this, url; 371 372 function getData(data) { 373 var i, content = ""; 374 if (typeof base.options.jsonSuccess === "function") { 375 base.options.jsonSuccess.apply(this, [data]); 376 } else { 377 for (i in data.owl) { 378 if (data.owl.hasOwnProperty(i)) { 379 content += data.owl[i].item; 380 } 381 } 382 base.jQueryelem.html(content); 383 } 384 base.logIn(); 385 } 386 387 if (typeof base.options.beforeInit === "function") { 388 base.options.beforeInit.apply(this, [base.jQueryelem]); 389 } 390 391 if (typeof base.options.jsonPath === "string") { 392 url = base.options.jsonPath; 393 jQuery.getJSON(url, getData); 394 } else { 395 base.logIn(); 396 } 397 }, 398 399 logIn : function () { 400 var base = this; 401 402 base.jQueryelem.data("owl-originalStyles", base.jQueryelem.attr("style")); 403 base.jQueryelem.data("owl-originalClasses", base.jQueryelem.attr("class")); 404 405 base.jQueryelem.css({opacity: 0}); 406 base.orignalItems = base.options.items; 407 base.checkBrowser();
408 base.wrapperWidth = 0; 409 base.checkVisible = null; 410 base.setVars(); 411 }, 412 413 setVars : function () { 414 var base = this; 415 if (base.jQueryelem.children().length === 0) {return false; } 416 base.baseClass(); 417 base.eventTypes(); 418 base.jQueryuserItems = base.jQueryelem.children(); 419 base.itemsAmount = base.jQueryuserItems.length; 420 base.wrapItems(); 421 base.jQueryowlItems = base.jQueryelem.find(".owl-item"); 422 base.jQueryowlWrapper = base.jQueryelem.find(".owl-wrapper"); 423 base.playDirection = "next"; 424 base.prevItem = 0; 425 base.prevArr = [0]; 426 base.currentItem = 0; 427 base.customEvents(); 428 base.onStartup(); 429 }, 430 431 onStartup : function () { 432 var base = this; 433 base.updateItems(); 434 base.calculateAll(); 435 base.buildControls(); 436 base.updateControls(); 437 base.response(); 438 base.moveEvents(); 439 base.stopOnHover(); 440 base.owlStatus(); 441 442 if (base.options.transitionStyle !== false) { 443 base.transitionTypes(base.options.transitionStyle); 444 } 445 if (base.options.autoPlay === true) { 446 base.options.autoPlay = 5000; 447 } 448 base.play(); 449 450 base.jQueryelem.find(".owl-wrapper").css("display", "block"); 451 452 if (!base.jQueryelem.is(":visible")) { 453 base.watchVisibility(); 454 } else { 455 base.jQueryelem.css("opacity", 1); 456 } 457 base.onstartup = false; 458 base.eachMoveUpdate(); 459 if (typeof base.options.afterInit === "function") { 460 base.options.afterInit.apply(this, [base.jQueryelem]); 461 } 462 }, 463 464 eachMoveUpdate : function () { 465 var base = this; 466 467 if (base.options.lazyLoad === true) { 468 base.lazyLoad(); 469 } 470 if (base.options.autoHeight === true) { 471 base.autoHeight(); 472 } 473 base.onVisibleItems(); 474 475 if (typeof base.options.afterAction === "function") { 476 base.options.afterAction.apply(this, [base.jQueryelem]); 477 } 478 }, 479 480 updateVars : function () { 481 var base = this; 482 if (typeof base.options.beforeUpdate === "function") { 483 base.options.beforeUpdate.apply(this, [base.jQueryelem]); 484 } 485 base.watchVisibility(); 486 base.updateItems(); 487 base.calculateAll(); 488 base.updatePosition(); 489 base.updateControls(); 490 base.eachMoveUpdate(); 491 if (typeof base.options.afterUpdate === "function") { 492 base.options.afterUpdate.apply(this, [base.jQueryelem]); 493 } 494 }, 495 496 reload : function () { 497 var base = this; 498 window.setTimeout(function () { 499 base.updateVars(); 500 }, 0); 501 }, 502 503 watchVisibility : function () { 504 var base = this; 505 506 if (base.jQueryelem.is(":visible") === false) { 507 base.jQueryelem.css({opacity: 0}); 508 window.clearInterval(base.autoPlayInterval); 509 window.clearInterval(base.checkVisible); 510 } else { 511 return false; 512 } 513 base.checkVisible = window.setInterval(function () { 514 if (base.jQueryelem.is(":visible")) { 515 base.reload(); 516 base.jQueryelem.animate({opacity: 1}, 200); 517 window.clearInterval(base.checkVisible); 518 } 519 }, 500); 520 }, 521 522 wrapItems : function () { 523 var base = this; 524 base.jQueryuserItems.wrapAll("<div class=\"owl-wrapper\">").wrap("<div class=\"owl-item\"></div>"); 525 base.jQueryelem.find(".owl-wrapper").wrap("<div class=\"owl-wrapper-outer\">"); 526 base.wrapperOuter = base.jQueryelem.find(".owl-wrapper-outer"); 527 base.jQueryelem.css("display", "block"); 528 }, 529 530 baseClass : function () { 531 var base = this, 532 hasBaseClass = base.jQueryelem.hasClass(base.options.baseClass), 533 hasThemeClass = base.jQueryelem.hasClass(base.options.theme); 534 535 if (!hasBaseClass) { 536 base.jQueryelem.addClass(base.options.baseClass); 537 } 538 539 if (!hasThemeClass) { 540 base.jQueryelem.addClass(base.options.theme); 541 } 542 }, 543 544 updateItems : function () { 545 var base = this, width, i; 546 547 if (base.options.responsive === false) { 548 return false;
549 } 550 if (base.options.singleItem === true) { 551 base.options.items = base.orignalItems = 1; 552 base.options.itemsCustom = false; 553 base.options.itemsDesktop = false; 554 base.options.itemsDesktopSmall = false; 555 base.options.itemsTablet = false; 556 base.options.itemsTabletSmall = false; 557 base.options.itemsMobile = false; 558 return false; 559 } 560 561 width = jQuery(base.options.responsiveBaseWidth).width(); 562 563 if (width > (base.options.itemsDesktop[0] || base.orignalItems)) { 564 base.options.items = base.orignalItems; 565 } 566 if (base.options.itemsCustom !== false) { 567 //Reorder array by screen size 568 base.options.itemsCustom.sort(function (a, b) {return a[0] - b[0]; }); 569 570 for (i = 0; i < base.options.itemsCustom.length; i += 1) { 571 if (base.options.itemsCustom[i][0] <= width) { 572 base.options.items = base.options.itemsCustom[i][1]; 573 } 574 } 575 576 } else { 577 578 if (width <= base.options.itemsDesktop[0] && base.options.itemsDesktop !== false) { 579 base.options.items = base.options.itemsDesktop[1]; 580 } 581 582 if (width <= base.options.itemsDesktopSmall[0] && base.options.itemsDesktopSmall !== false) { 583 base.options.items = base.options.itemsDesktopSmall[1]; 584 } 585 586 if (width <= base.options.itemsTablet[0] && base.options.itemsTablet !== false) { 587 base.options.items = base.options.itemsTablet[1]; 588 } 589 590 if (width <= base.options.itemsTabletSmall[0] && base.options.itemsTabletSmall !== false) { 591 base.options.items = base.options.itemsTabletSmall[1]; 592 } 593 594 if (width <= base.options.itemsMobile[0] && base.options.itemsMobile !== false) { 595 base.options.items = base.options.itemsMobile[1]; 596 } 597 } 598 599 //if number of items is less than declared 600 if (base.options.items > base.itemsAmount && base.options.itemsScaleUp === true) { 601 base.options.items = base.itemsAmount; 602 } 603 }, 604 605 response : function () { 606 var base = this, 607 smallDelay, 608 lastWindowWidth; 609 610 if (base.options.responsive !== true) { 611 return false; 612 } 613 lastWindowWidth = jQuery(window).width(); 614 615 base.resizer = function () { 616 if (jQuery(window).width() !== lastWindowWidth) { 617 if (base.options.autoPlay !== false) { 618 window.clearInterval(base.autoPlayInterval); 619 } 620 window.clearTimeout(smallDelay); 621 smallDelay = window.setTimeout(function () { 622 lastWindowWidth = jQuery(window).width(); 623 base.updateVars(); 624 }, base.options.responsiveRefreshRate); 625 } 626 }; 627 jQuery(window).resize(base.resizer); 628 }, 629 630 updatePosition : function () { 631 var base = this; 632 base.jumpTo(base.currentItem); 633 if (base.options.autoPlay !== false) { 634 base.checkAp(); 635 } 636 }, 637 638 appendItemsSizes : function () { 639 var base = this, 640 roundPages = 0, 641 lastItem = base.itemsAmount - base.options.items; 642 643 base.jQueryowlItems.each(function (index) { 644 var jQuerythis = jQuery(this); 645 jQuerythis 646 .css({"width": base.itemWidth}) 647 .data("owl-item", Number(index)); 648 649 if (index % base.options.items === 0 || index === lastItem) { 650 if (!(index > lastItem)) { 651 roundPages += 1; 652 } 653 } 654 jQuerythis.data("owl-roundPages", roundPages); 655 }); 656 }, 657 658 appendWrapperSizes : function () { 659 var base = this, 660 width = base.jQueryowlItems.length * base.itemWidth; 661 662 base.jQueryowlWrapper.css({ 663 "width": width * 2, 664 "left": 0 665 }); 666 base.appendItemsSizes(); 667 }, 668 669 calculateAll : function () { 670 var base = this; 671 base.calculateWidth(); 672 base.appendWrapperSizes(); 673 base.loops(); 674 base.max(); 675 }, 676 677 calculateWidth : function () { 678 var base = this; 679 base.itemWidth = Math.round(base.jQueryelem.width() / base.options.items); 680 }, 681 682 max : function () { 683 var base = this, 684 maximum = ((base.itemsAmount * base.itemWidth) - base.options.items * base.itemWidth) * -1; 685 if (base.options.items > base.itemsAmount) { 686 base.maximumItem = 0; 687 maximum = 0; 688 base.maximumPixels = 0; 689 } else { 690 base.maximumItem = base.itemsAmount - base.options.items; 691 base.maximumPixels = maximum; 692 } 693 return maximum; 694 }, 695 696 min : function () { 697 return 0; 698 }, 699 700 loops : function () { 701 var base = this, 702 prev = 0, 703 elWidth = 0, 704 i, 705 item, 706 roundPageNum; 707 708 base.positionsInArray = [0]; 709 base.pagesInArray = []; 710 711 for (i = 0; i < base.itemsAmount; i += 1) { 712 elWidth += base.itemWidth; 713 base.positionsInArray.push(-elWidth); 714 715 if (base.options.scrollPerPage === true) { 716 item = jQuery(base.jQueryowlItems[i]); 717 roundPageNum = item.data("owl-roundPages"); 718 if (roundPageNum !== prev) { 719 base.pagesInArray[prev] = base.positionsInArray[i]; 720 prev = roundPageNum; 721 } 722 } 723 } 724 }, 725 726 buildControls : function () { 727 var base = this; 728 if (base.options.navigation === true || base.options.pagination === true) { 729 base.owlControls = jQuery("<div class=\"owl-control
729s\"/>").toggleClass("clickable", !base.browser.isTouch).appendTo(base.jQueryelem); 730 } 731 if (base.options.pagination === true) { 732 base.buildPagination(); 733 } 734 if (base.options.navigation === true) { 735 base.buildButtons(); 736 } 737 }, 738 739 buildButtons : function () { 740 var base = this, 741 buttonsWrapper = jQuery("<div class=\"owl-buttons\"/>"); 742 base.owlControls.append(buttonsWrapper); 743 744 base.buttonPrev = jQuery("<div/>", { 745 "class" : "owl-prev", 746 "html" : base.options.navigationText[0] || "" 747 }); 748 749 base.buttonNext = jQuery("<div/>", { 750 "class" : "owl-next", 751 "html" : base.options.navigationText[1] || "" 752 }); 753 754 buttonsWrapper 755 .append(base.buttonPrev) 756 .append(base.buttonNext); 757 758 buttonsWrapper.on("touchstart.owlControls mousedown.owlControls", "div[class^=\"owl\"]", function (event) { 759 event.preventDefault(); 760 }); 761 762 buttonsWrapper.on("touchend.owlControls mouseup.owlControls", "div[class^=\"owl\"]", function (event) { 763 event.preventDefault(); 764 if (jQuery(this).hasClass("owl-next")) { 765 base.next(); 766 } else { 767 base.prev(); 768 } 769 }); 770 }, 771 772 buildPagination : function () { 773 var base = this; 774 775 base.paginationWrapper = jQuery("<div class=\"owl-pagination\"/>"); 776 base.owlControls.append(base.paginationWrapper); 777 778 base.paginationWrapper.on("touchend.owlControls mouseup.owlControls", ".owl-page", function (event) { 779 event.preventDefault(); 780 if (Number(jQuery(this).data("owl-page")) !== base.currentItem) { 781 base.goTo(Number(jQuery(this).data("owl-page")), true); 782 } 783 }); 784 }, 785 786 updatePagination : function () { 787 var base = this, 788 counter, 789 lastPage, 790 lastItem, 791 i, 792 paginationButton, 793 paginationButtonInner; 794 795 if (base.options.pagination === false) { 796 return false; 797 } 798 799 base.paginationWrapper.html(""); 800 801 counter = 0; 802 lastPage = base.itemsAmount - base.itemsAmount % base.options.items; 803 804 for (i = 0; i < base.itemsAmount; i += 1) { 805 if (i % base.options.items === 0) { 806 counter += 1; 807 if (lastPage === i) { 808 lastItem = base.itemsAmount - base.options.items; 809 } 810 paginationButton = jQuery("<div/>", { 811 "class" : "owl-page" 812 }); 813 paginationButtonInner = jQuery("<span></span>", { 814 "text": base.options.paginationNumbers === true ? counter : "", 815 "class": base.options.paginationNumbers === true ? "owl-numbers" : "" 816 }); 817 paginationButton.append(paginationButtonInner); 818 819 paginationButton.data("owl-page", lastPage === i ? lastItem : i); 820 paginationButton.data("owl-roundPages", counter); 821 822 base.paginationWrapper.append(paginationButton); 823 } 824 } 825 base.checkPagination(); 826 }, 827 checkPagination : function () { 828 var base = this; 829 if (base.options.pagination === false) { 830 return false; 831 } 832 base.paginationWrapper.find(".owl-page").each(function () { 833 if (jQuery(this).data("owl-roundPages") === jQuery(base.jQueryowlItems[base.currentItem]).data("owl-roundPages")) { 834 base.paginationWrapper 835 .find(".owl-page") 836 .removeClass("active"); 837 jQuery(this).addClass("active"); 838 } 839 }); 840 }, 841 842 checkNavigation : function () { 843 var base = this; 844 845 if (base.options.navigation === false) { 846 return false;
847 } 848 if (base.options.rewindNav === false) { 849 if (base.currentItem === 0 && base.maximumItem === 0) { 850 base.buttonPrev.addClass("disabled"); 851 base.buttonNext.addClass("disabled"); 852 } else if (base.currentItem === 0 && base.maximumItem !== 0) { 853 base.buttonPrev.addClass("disabled"); 854 base.buttonNext.removeClass("disabled"); 855 } else if (base.currentItem === base.maximumItem) { 856 base.buttonPrev.removeClass("disabled"); 857 base.buttonNext.addClass("disabled"); 858 } else if (base.currentItem !== 0 && base.currentItem !== base.maximumItem) { 859 base.buttonPrev.removeClass("disabled"); 860 base.buttonNext.removeClass("disabled"); 861 } 862 } 863 }, 864 865 updateControls : function () { 866 var base = this; 867 base.updatePagination(); 868 base.checkNavigation(); 869 if (base.owlControls) { 870 if (base.options.items >= base.itemsAmount) { 871 base.owlControls.hide(); 872 } else { 873 base.owlControls.show(); 874 } 875 } 876 }, 877 878 destroyControls : function () { 879 var base = this; 880 if (base.owlControls) { 881 base.owlControls.remove(); 882 } 883 }, 884 885 next : function (speed) { 886 var base = this; 887 888 if (base.isTransition) { 889 return false; 890 } 891 892 base.currentItem += base.options.scrollPerPage === true ? base.options.items : 1; 893 if (base.currentItem > base.maximumItem + (base.options.scrollPerPage === true ? (base.options.items - 1) : 0)) { 894 if (base.options.rewindNav === true) { 895 base.currentItem = 0; 896 speed = "rewind"; 897 } else { 898 base.currentItem = base.maximumItem; 899 return false; 900 } 901 } 902 base.goTo(base.currentItem, speed); 903 }, 904 905 prev : function (speed) { 906 var base = this; 907 908 if (base.isTransition) { 909 return false; 910 } 911 912 if (base.options.scrollPerPage === true && base.currentItem > 0 && base.currentItem < base.options.items) { 913 base.currentItem = 0; 914 } else { 915 base.currentItem -= base.options.scrollPerPage === true ? base.options.items : 1; 916 } 917 if (base.currentItem < 0) { 918 if (base.options.rewindNav === true) { 919 base.currentItem = base.maximumItem; 920 speed = "rewind"; 921 } else { 922 base.currentItem = 0; 923 return false; 924 } 925 } 926 base.goTo(base.currentItem, speed); 927 }, 928 929 goTo : function (position, speed, drag) { 930 var base = this, 931 goToPixel; 932 933 if (base.isTransition) { 934 return false; 935 } 936 if (typeof base.options.beforeMove === "function") { 937 base.options.beforeMove.apply(this, [base.jQueryelem]); 938 } 939 if (position >= base.maximumItem) { 940 position = base.maximumItem; 941 } else if (position <= 0) { 942 position = 0; 943 } 944 945 base.currentItem = base.owl.currentItem = position; 946 if (base.options.transitionStyle !== false && drag !== "drag" && base.options.items === 1 && base.browser.support3d === true) { 947 base.swapSpeed(0); 948 if (base.browser.support3d === true) { 949 base.transition3d(base.positionsInArray[position]); 950 } else { 951 base.css2slide(base.positionsInArray[position], 1); 952 } 953 base.afterGo(); 954 base.singleItemTransition(); 955 return false;
956 } 957 goToPixel = base.positionsInArray[position]; 958 959 if (base.browser.support3d === true) { 960 base.isCss3Finish = false; 961 962 if (speed === true) { 963 base.swapSpeed("paginationSpeed"); 964 window.setTimeout(function () { 965 base.isCss3Finish = true; 966 }, base.options.paginationSpeed); 967 968 } else if (speed === "rewind") { 969 base.swapSpeed(base.options.rewindSpeed); 970 window.setTimeout(function () { 971 base.isCss3Finish = true; 972 }, base.options.rewindSpeed); 973 974 } else { 975 base.swapSpeed("slideSpeed"); 976 window.setTimeout(function () { 977 base.isCss3Finish = true; 978 }, base.options.slideSpeed); 979 } 980 base.transition3d(goToPixel); 981 } else { 982 if (speed === true) { 983 base.css2slide(goToPixel, base.options.paginationSpeed); 984 } else if (speed === "rewind") { 985 base.css2slide(goToPixel, base.options.rewindSpeed); 986 } else { 987 base.css2slide(goToPixel, base.options.slideSpeed); 988 } 989 } 990 base.afterGo(); 991 }, 992 993 jumpTo : function (position) { 994 var base = this; 995 if (typeof base.options.beforeMove === "function") { 996 base.options.beforeMove.apply(this, [base.jQueryelem]); 997 } 998 if (position >= base.maximumItem || position === -1) { 999 position = base.maximumItem; 1000 } else if (position <= 0) { 1001 position = 0; 1002 } 1003 base.swapSpeed(0); 1004 if (base.browser.support3d === true) { 1005 base.transition3d(base.positionsInArray[position]); 1006 } else { 1007 base.css2slide(base.positionsInArray[position], 1); 1008 } 1009 base.currentItem = base.owl.currentItem = position; 1010 base.afterGo(); 1011 }, 1012 1013 afterGo : function () { 1014 var base = this; 1015 1016 base.prevArr.push(base.currentItem); 1017 base.prevItem = base.owl.prevItem = base.prevArr[base.prevArr.length - 2]; 1018 base.prevArr.shift(0); 1019 1020 if (base.prevItem !== base.currentItem) { 1021 base.checkPagination(); 1022 base.checkNavigation(); 1023 base.eachMoveUpdate(); 1024 1025 if (base.options.autoPlay !== false) { 1026 base.checkAp(); 1027 } 1028 } 1029 if (typeof base.options.afterMove === "function" && base.prevItem !== base.currentItem) { 1030 base.options.afterMove.apply(this, [base.jQueryelem]); 1031 } 1032 }, 1033 1034 stop : function () { 1035 var base = this; 1036 base.apStatus = "stop"; 1037 window.clearInterval(base.autoPlayInterval); 1038 }, 1039 1040 checkAp : function () { 1041 var base = this; 1042 if (base.apStatus !== "stop") { 1043 base.play(); 1044 } 1045 }, 1046 1047 play : function () { 1048 var base = this; 1049 base.apStatus = "play"; 1050 if (base.options.autoPlay === false) { 1051 return false; 1052 } 1053 window.clearInterval(base.autoPlayInterval); 1054 base.autoPlayInterval = window.setInterval(function () { 1055 base.next(true); 1056 }, base.options.autoPlay); 1057 }, 1058 1059 swapSpeed : function (action) { 1060 var base = this; 1061 if (action === "slideSpeed") { 1062 base.jQueryowlWrapper.css(base.addCssSpeed(base.options.slideSpeed)); 1063 } else if (action === "paginationSpeed") { 1064 base.jQueryowlWrapper.css(base.addCssSpeed(base.options.paginationSpeed)); 1065 } else if (typeof action !== "string") { 1066 base.jQueryowlWrapper.css(base.addCssSpeed(action)); 1067 } 1068 }, 1069 1070 addCssSpeed : function (speed) { 1071 return { 1072 "-webkit-transition": "all " + speed + "ms ease", 1073 "-moz-transition": "all " + speed + "ms ease", 1074 "-o-transition": "all " + speed + "ms ease", 1075 "transition": "all " + speed + "ms ease" 1076 }; 1077 }, 1078 1079 removeTransition : function () { 1080 return { 1081 "-webkit-transition": "", 1082 "-moz-transition": "", 1083 "-o-transition": "", 1084 "transition": "" 1085 }; 1086 }, 1087 1088 doTranslate : function (pixels) { 1089 return { 1090 "-webkit-transform": "translate3d(" + pixels + "px, 0px, 0px)", 1091 "-moz-transform": "translate3d(" + pixels + "px, 0px, 0px)", 1092 "-o-transform": "translate3d(" + pixels + "px, 0px, 0px)", 1093 "-ms-transform": "translate3d(" + pixels + "px, 0px, 0px)", 1094 "transform": "translate3d(" + pixels + "px, 0px,0px)" 1095 }; 1096 }, 1097 1098 transition3d : function (value) { 1099 var base = this; 1100 base.jQueryowlWrapper.css(base.doTranslate(value)); 1101 }, 1102 1103 css2move : function (value) { 1104 var base = this; 1105 base.jQueryowlWrapper.css({"left" : value}); 1106 }, 1107 1108 css2slide : function (value, speed) { 1109 var base = this; 1110 1111 base.isCssFinish = false;
1112 base.jQueryowlWrapper.stop(true, true).animate({ 1113 "left" : value 1114 }, { 1115 duration : speed || base.options.slideSpeed, 1116 complete : function () { 1117 base.isCssFinish = true; 1118 } 1119 }); 1120 }, 1121 1122 checkBrowser : function () { 1123 var base = this, 1124 translate3D = "translate3d(0px, 0px, 0px)", 1125 tempElem = document.createElement("div"), 1126 regex, 1127 asSupport, 1128 support3d, 1129 isTouch; 1130 1131 tempElem.style.cssText = " -moz-transform:" + translate3D + 1132 "; -ms-transform:" + translate3D + 1133 "; -o-transform:" + translate3D + 1134 "; -webkit-transform:" + translate3D + 1135 "; transform:" + translate3D; 1136 regex = /translate3d\(0px, 0px, 0px\)/g; 1137 asSupport = tempElem.style.cssText.match(regex); 1138 support3d = (asSupport !== null && asSupport.length === 1); 1139 1140 isTouch = "ontouchstart" in window || window.navigator.msMaxTouchPoints; 1141 1142 base.browser = { 1143 "support3d" : support3d, 1144 "isTouch" : isTouch 1145 }; 1146 }, 1147 1148 moveEvents : function () { 1149 var base = this; 1150 if (base.options.mouseDrag !== false || base.options.touchDrag !== false) { 1151 base.gestures(); 1152 base.disabledEvents(); 1153 } 1154 }, 1155 1156 eventTypes : function () { 1157 var base = this, 1158 types = ["s", "e", "x"]; 1159 1160 base.ev_types = {}; 1161 1162 if (base.options.mouseDrag === true && base.options.touchDrag === true) { 1163 types = [ 1164 "touchstart.owl mousedown.owl", 1165 "touchmove.owl mousemove.owl", 1166 "touchend.owl touchcancel.owl mouseup.owl" 1167 ]; 1168 } else if (base.options.mouseDrag === false && base.options.touchDrag === true) { 1169 types = [ 1170 "touchstart.owl", 1171 "touchmove.owl", 1172 "touchend.owl touchcancel.owl" 1173 ]; 1174 } else if (base.options.mouseDrag === true && base.options.touchDrag === false) { 1175 types = [ 1176 "mousedown.owl", 1177 "mousemove.owl", 1178 "mouseup.owl" 1179 ]; 1180 } 1181 1182 base.ev_types.start = types[0]; 1183 base.ev_types.move = types[1]; 1184 base.ev_types.end = types[2]; 1185 }, 1186 1187 disabledEvents : function () { 1188 var base = this; 1189 base.jQueryelem.on("dragstart.owl", function (event) { event.preventDefault(); }); 1190 base.jQueryelem.on("mousedown.disableTextSelect", function (e) { 1191 return jQuery(e.target).is('input, textarea, select, option'); 1192 }); 1193 }, 1194 1195 gestures : function () { 1196 /*jslint unparam: true*/ 1197 var base = this, 1198 locals = { 1199 offsetX : 0, 1200 offsetY : 0, 1201 baseElWidth : 0, 1202 relativePos : 0, 1203 position: null, 1204 minSwipe : null, 1205 maxSwipe: null, 1206 sliding : null, 1207 dargging: null, 1208 targetElement : null 1209 }; 1210 1211 base.isCssFinish = true; 1212 1213 function getTouches(event) { 1214 if (event.touches !== undefined) { 1215 return { 1216 x : event.touches[0].pageX, 1217 y : event.touches[0].pageY 1218 }; 1219 } 1220 1221 if (event.touches === undefined) { 1222 if (event.pageX !== undefined) { 1223 return { 1224 x : event.pageX, 1225 y : event.pageY 1226 }; 1227 } 1228 if (event.pageX === undefined) { 1229 return { 1230 x : event.clientX, 1231 y : event.clientY 1232 }; 1233 } 1234 } 1235 } 1236 1237 function swapEvents(type) { 1238 if (type === "on") { 1239 jQuery(document).on(base.ev_types.move, dragMove); 1240 jQuery(document).on(base.ev_types.end, dragEnd); 1241 } else if (type === "off") { 1242 jQuery(document).off(base.ev_types.move); 1243 jQuery(document).off(base.ev_types.end); 1244 } 1245 } 1246 1247 function dragStart(event) { 1248 var ev = event.originalEvent || event || window.event, 1249 position; 1250 1251 if (ev.which === 3) { 1252 return false;
1253 } 1254 if (base.itemsAmount <= base.options.items) { 1255 return; 1256 } 1257 if (base.isCssFinish === false && !base.options.dragBeforeAnimFinish) { 1258 return false; 1259 } 1260 if (base.isCss3Finish === false && !base.options.dragBeforeAnimFinish) { 1261 return false; 1262 } 1263 1264 if (base.options.autoPlay !== false) { 1265 window.clearInterval(base.autoPlayInterval); 1266 } 1267 1268 if (base.browser.isTouch !== true && !base.jQueryowlWrapper.hasClass("grabbing")) { 1269 base.jQueryowlWrapper.addClass("grabbing"); 1270 } 1271 1272 base.newPosX = 0; 1273 base.newRelativeX = 0; 1274 1275 jQuery(this).css(base.removeTransition()); 1276 1277 position = jQuery(this).position(); 1278 locals.relativePos = position.left; 1279 1280 locals.offsetX = getTouches(ev).x - position.left; 1281 locals.offsetY = getTouches(ev).y - position.top; 1282 1283 swapEvents("on"); 1284 1285 locals.sliding = false; 1286 locals.targetElement = ev.target || ev.srcElement; 1287 } 1288 1289 function dragMove(event) { 1290 var ev = event.originalEvent || event || window.event, 1291 minSwipe, 1292 maxSwipe; 1293 1294 base.newPosX = getTouches(ev).x - locals.offsetX; 1295 base.newPosY = getTouches(ev).y - locals.offsetY; 1296 base.newRelativeX = base.newPosX - locals.relativePos; 1297 1298 if (typeof base.options.startDragging === "function" && locals.dragging !== true && base.newRelativeX !== 0) { 1299 locals.dragging = true; 1300 base.options.startDragging.apply(base, [base.jQueryelem]); 1301 } 1302 1303 if ((base.newRelativeX > 8 || base.newRelativeX < -8) && (base.browser.isTouch === true)) { 1304 if (ev.preventDefault !== undefined) { 1305 ev.preventDefault(); 1306 } else { 1307 ev.returnValue = false; 1308 } 1309 locals.sliding = true; 1310 } 1311 1312 if ((base.newPosY > 10 || base.newPosY < -10) && locals.sliding === false) { 1313 jQuery(document).off("touchmove.owl"); 1314 } 1315 1316 minSwipe = function () { 1317 return base.newRelativeX / 5; 1318 }; 1319 1320 maxSwipe = function () { 1321 return base.maximumPixels + base.newRelativeX / 5; 1322 }; 1323 1324 base.newPosX = Math.max(Math.min(base.newPosX, minSwipe()), maxSwipe()); 1325 if (base.browser.support3d === true) { 1326 base.transition3d(base.newPosX); 1327 } else { 1328 base.css2move(base.newPosX); 1329 } 1330 } 1331 1332 function dragEnd(event) { 1333 var ev = event.originalEvent || event || window.event, 1334 newPosition, 1335 handlers, 1336 owlStopEvent; 1337 1338 ev.target = ev.target || ev.srcElement; 1339 1340 locals.dragging = false; 1341 1342 if (base.browser.isTouch !== true) { 1343 base.jQueryowlWrapper.removeClass("grabbing"); 1344 } 1345 1346 if (base.newRelativeX < 0) { 1347 base.dragDirection = base.owl.dragDirection = "left"; 1348 } else { 1349 base.dragDirection = base.owl.dragDirection = "right"; 1350 } 1351 1352 if (base.newRelativeX !== 0) { 1353 newPosition = base.getNewPosition(); 1354 base.goTo(newPosition, false, "drag"); 1355 if (locals.targetElement === ev.target && base.browser.isTouch !== true) { 1356 jQuery(ev.target).on("click.disable", function (ev) { 1357 ev.stopImmediatePropagation(); 1358 ev.stopPropagation(); 1359 ev.preventDefault(); 1360 jQuery(ev.target).off("click.disable"); 1361 }); 1362 handlers = jQuery._data(ev.target, "events").click; 1363 owlStopEvent = handlers.pop(); 1364 handlers.splice(0, 0, owlStopEvent); 1365 } 1366 } 1367 swapEvents("off"); 1368 } 1369 base.jQueryelem.on(base.ev_types.start, ".owl-wrapper", dragStart); 1370 }, 1371 1372 getNewPosition : function () { 1373 var base = this, 1374 newPosition = base.closestItem(); 1375 1376 if (newPosition > base.maximumItem) { 1377 base.currentItem = base.maximumItem; 1378 newPosition = base.maximumItem; 1379 } else if (base.newPosX >= 0) { 1380 newPosition = 0; 1381 base.currentItem = 0; 1382 } 1383 return newPosition; 1384 }, 1385 closestItem : function () { 1386 var base = this, 1387 array = base.options.scrollPerPage === true ? base.pagesInArray : base.positionsInArray, 1388 goal = base.newPosX, 1389 closest = null; 1390 1391 jQuery.each(array, function (i, v) { 1392 if (goal - (base.itemWidth / 20) > array[i + 1] && goal - (base.itemWidth / 20) < v && base.moveDirection() === "left") { 1393 closest = v; 1394 if (base.options.scrollPerPage === true) { 1395 base.currentItem = jQuery.inArray(closest, base.positionsInArray); 1396 } else { 1397 base.currentItem = i; 1398 } 1399 } else if (goal + (base.itemWidth / 20) < v && goal + (base.itemWidth / 20) > (array[i + 1] || array[i] - base.itemWidth) && base.moveDirection() === "right") { 1400 if (base.options.scrollPerPage === true) { 1401 closest = array[i + 1] || array[array.length - 1]; 1402 base.currentItem = jQuery.inArray(closest, base.positionsInArray); 1403 } else { 1404 closest = array[i + 1]; 1405 base.currentItem = i + 1; 1406 } 1407 } 1408 }); 1409 return base.currentItem; 1410 }, 1411 1412 moveDirection : function () { 1413 var base = this, 1414 direction; 1415 if (base.newRelativeX < 0) { 1416 direction = "right"; 1417 base.playDirection = "next"; 1418 } else { 1419 direction = "left"; 1420 base.playDirection = "prev"; 1421 } 1422 return direction; 1423 }, 1424 1425 customEvents : function () { 1426 /*jslint unparam: true*/ 1427 var base = this; 1428 base.jQueryelem.on("owl.next", function () { 1429 base.next(); 1430 }); 1431 base.jQueryelem.on("owl.prev", function () { 1432 base.prev(); 1433 }); 1434 base.jQueryelem.on("owl.play", function (event, speed) { 1435 base.options.autoPlay = speed; 1436 base.play(); 1437 base.hoverStatus = "play"; 1438 }); 1439 base.jQueryelem.on("owl.stop", function () { 1440 base.stop(); 1441 base.hoverStatus = "stop"; 1442 }); 1443 base.jQueryelem.on("owl.goTo", function (event, item) { 1444 base.goTo(item); 1445 }); 1446 base.jQueryelem.on("owl.jumpTo", function (event, item) { 1447 base.jumpTo(item); 1448 }); 1449 }, 1450 1451 stopOnHover : function () { 1452 var base = this; 1453 if (base.options.stopOnHover === true && base.browser.isTouch !== true && base.options.autoPlay !== false) { 1454 base.jQueryelem.on("mouseover", function () { 1455 base.stop(); 1456 }); 1457 base.jQueryelem.on("mouseout", function () { 1458 if (base.hoverStatus !== "stop") { 1459 base.play(); 1460 } 1461 }); 1462 } 1463 }, 1464 1465 lazyLoad : function () { 1466 var base = this, 1467 i, 1468 jQueryitem, 1469 itemNumber, 1470 jQuerylazyImg, 1471 follow; 1472 1473 if (base.options.lazyLoad === false) { 1474 return false;
1475 } 1476 for (i = 0; i < base.itemsAmount; i += 1) { 1477 jQueryitem = jQuery(base.jQueryowlItems[i]); 1478 1479 if (jQueryitem.data("owl-loaded") === "loaded") { 1480 continue; 1481 } 1482 1483 itemNumber = jQueryitem.data("owl-item"); 1484 jQuerylazyImg = jQueryitem.find(".lazyOwl"); 1485 1486 if (typeof jQuerylazyImg.data("src") !== "string") { 1487 jQueryitem.data("owl-loaded", "loaded"); 1488 continue; 1489 } 1490 if (jQueryitem.data("owl-loaded") === undefined) { 1491 jQuerylazyImg.hide(); 1492 jQueryitem.addClass("loading").data("owl-loaded", "checked"); 1493 } 1494 if (base.options.lazyFollow === true) { 1495 follow = itemNumber >= base.currentItem; 1496 } else { 1497 follow = true; 1498 } 1499 if (follow && itemNumber < base.currentItem + base.options.items && jQuerylazyImg.length) { 1500 base.lazyPreload(jQueryitem, jQuerylazyImg); 1501 } 1502 } 1503 }, 1504 1505 lazyPreload : function (jQueryitem, jQuerylazyImg) { 1506 var base = this, 1507 iterations = 0, 1508 isBackgroundImg; 1509 1510 if (jQuerylazyImg.prop("tagName") === "DIV") { 1511 jQuerylazyImg.css("background-image", "url(" + jQuerylazyImg.data("src") + ")"); 1512 isBackgroundImg = true; 1513 } else { 1514 jQuerylazyImg[0].src = jQuerylazyImg.data("src"); 1515 } 1516 1517 function showImage() { 1518 jQueryitem.data("owl-loaded", "loaded").removeClass("loading"); 1519 jQuerylazyImg.removeAttr("data-src"); 1520 if (base.options.lazyEffect === "fade") { 1521 jQuerylazyImg.fadeIn(400); 1522 } else { 1523 jQuerylazyImg.show(); 1524 } 1525 if (typeof base.options.afterLazyLoad === "function") { 1526 base.options.afterLazyLoad.apply(this, [base.jQueryelem]); 1527 } 1528 } 1529 1530 function checkLazyImage() { 1531 iterations += 1; 1532 if (base.completeImg(jQuerylazyImg.get(0)) || isBackgroundImg === true) { 1533 showImage(); 1534 } else if (iterations <= 100) {//if image loads in less than 10 seconds 1535 window.setTimeout(checkLazyImage, 100); 1536 } else { 1537 showImage(); 1538 } 1539 } 1540 1541 checkLazyImage(); 1542 }, 1543 1544 autoHeight : function () { 1545 var base = this, 1546 jQuerycurrentimg = jQuery(base.jQueryowlItems[base.currentItem]).find("img"), 1547 iterations; 1548 1549 function addHeight() { 1550 var jQuerycurrentItem = jQuery(base.jQueryowlItems[base.currentItem]).height(); 1551 base.wrapperOuter.css("height", jQuerycurrentItem + "px"); 1552 if (!base.wrapperOuter.hasClass("autoHeight")) { 1553 window.setTimeout(function () { 1554 base.wrapperOuter.addClass("autoHeight"); 1555 }, 0); 1556 } 1557 } 1558 1559 function checkImage() { 1560 iterations += 1; 1561 if (base.completeImg(jQuerycurrentimg.get(0))) { 1562 addHeight(); 1563 } else if (iterations <= 100) { //if image loads in less than 10 seconds 1564 window.setTimeout(checkImage, 100); 1565 } else { 1566 base.wrapperOuter.css("height", ""); //Else remove height attribute 1567 } 1568 } 1569 1570 if (jQuerycurrentimg.get(0) !== undefined) { 1571 iterations = 0; 1572 checkImage(); 1573 } else { 1574 addHeight(); 1575 } 1576 }, 1577 1578 completeImg : function (img) { 1579 var naturalWidthType; 1580 1581 if (!img.complete) { 1582 return false; 1583 }
1584 naturalWidthType = typeof img.naturalWidth; 1585 if (naturalWidthType !== "undefined" && img.naturalWidth === 0) { 1586 return false; 1587 } 1588 return true; 1589 }, 1590 1591 onVisibleItems : function () { 1592 var base = this, 1593 i; 1594 1595 if (base.options.addClassActive === true) { 1596 base.jQueryowlItems.removeClass("active"); 1597 } 1598 base.visibleItems = []; 1599 for (i = base.currentItem; i < base.currentItem + base.options.items; i += 1) { 1600 base.visibleItems.push(i); 1601 1602 if (base.options.addClassActive === true) { 1603 jQuery(base.jQueryowlItems[i]).addClass("active"); 1604 } 1605 } 1606 base.owl.visibleItems = base.visibleItems; 1607 }, 1608 1609 transitionTypes : function (className) { 1610 var base = this; 1611 //Currently available: "fade", "backSlide", "goDown", "fadeUp" 1612 base.outClass = "owl-" + className + "-out"; 1613 base.inClass = "owl-" + className + "-in"; 1614 }, 1615 1616 singleItemTransition : function () { 1617 var base = this, 1618 outClass = base.outClass, 1619 inClass = base.inClass, 1620 jQuerycurrentItem = base.jQueryowlItems.eq(base.currentItem), 1621 jQueryprevItem = base.jQueryowlItems.eq(base.prevItem), 1622 prevPos = Math.abs(base.positionsInArray[base.currentItem]) + base.positionsInArray[base.prevItem], 1623 origin = Math.abs(base.positionsInArray[base.currentItem]) + base.itemWidth / 2, 1624 animEnd = 'webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend'; 1625 1626 base.isTransition = true; 1627 1628 base.jQueryowlWrapper 1629 .addClass('owl-origin') 1630 .css({ 1631 "-webkit-transform-origin" : origin + "px", 1632 "-moz-perspective-origin" : origin + "px", 1633 "perspective-origin" : origin + "px" 1634 }); 1635 function transStyles(prevPos) { 1636 return { 1637 "position" : "relative", 1638 "left" : prevPos + "px" 1639 }; 1640 } 1641 1642 jQueryprevItem 1643 .css(transStyles(prevPos, 10)) 1644 .addClass(outClass) 1645 .on(animEnd, function () { 1646 base.endPrev = true; 1647 jQueryprevItem.off(animEnd); 1648 base.clearTransStyle(jQueryprevItem, outClass); 1649 }); 1650 1651 jQuerycurrentItem 1652 .addClass(inClass) 1653 .on(animEnd, function () { 1654 base.endCurrent = true; 1655 jQuerycurrentItem.off(animEnd); 1656 base.clearTransStyle(jQuerycurrentItem, inClass); 1657 }); 1658 }, 1659 1660 clearTransStyle : function (item, classToRemove) { 1661 var base = this; 1662 item.css({ 1663 "position" : "", 1664 "left" : "" 1665 }).removeClass(classToRemove); 1666 1667 if (base.endPrev && base.endCurrent) { 1668 base.jQueryowlWrapper.removeClass('owl-origin'); 1669 base.endPrev = false; 1670 base.endCurrent = false; 1671 base.isTransition = false; 1672 } 1673 }, 1674 1675 owlStatus : function () { 1676 var base = this; 1677 base.owl = { 1678 "userOptions" : base.userOptions, 1679 "baseElement" : base.jQueryelem, 1680 "userItems" : base.jQueryuserItems, 1681 "owlItems" : base.jQueryowlItems, 1682 "currentItem" : base.currentItem, 1683 "prevItem" : base.prevItem, 1684 "visibleItems" : base.visibleItems, 1685 "isTouch" : base.browser.isTouch, 1686 "browser" : base.browser, 1687 "dragDirection" : base.dragDirection 1688 }; 1689 }, 1690 1691 clearEvents : function () { 1692 var base = this; 1693 base.jQueryelem.off(".owl owl mousedown.disableTextSelect"); 1694 jQuery(document).off(".owl owl"); 1695 jQuery(window).off("resize", base.resizer); 1696 }, 1697 1698 unWrap : function () { 1699 var base = this; 1700 if (base.jQueryelem.children().length !== 0) { 1701 base.jQueryowlWrapper.unwrap(); 1702 base.jQueryuserItems.unwrap().unwrap(); 1703 if (base.owlControls) { 1704 base.owlControls.remove(); 1705 } 1706 } 1707 base.clearEvents(); 1708 base.jQueryelem 1709 .attr("style", base.jQueryelem.data("owl-originalStyles") || "") 1710 .attr("class", base.jQueryelem.data("owl-originalClasses")); 1711 }, 1712 1713 destroy : function () { 1714 var base = this; 1715 base.stop(); 1716 window.clearInterval(base.checkVisible); 1717 base.unWrap(); 1718 base.jQueryelem.removeData(); 1719 }, 1720 1721 reinit : function (newOptions) { 1722 var base = this, 1723 options = jQuery.extend({}, base.userOptions, newOptions); 1724 base.unWrap(); 1725 base.init(options, base.jQueryelem); 1726 }, 1727 1728 addItem : function (htmlString, targetPosition) { 1729 var base = this, 1730 position; 1731 1732 if (!htmlString) {return false; } 1733 1734 if (base.jQueryelem.children().length === 0) { 1735 base.jQueryelem.append(htmlString); 1736 base.setVars(); 1737 return false;
1738 } 1739 base.unWrap(); 1740 if (targetPosition === undefined || targetPosition === -1) { 1741 position = -1; 1742 } else { 1743 position = targetPosition; 1744 } 1745 if (position >= base.jQueryuserItems.length || position === -1) { 1746 base.jQueryuserItems.eq(-1).after(htmlString); 1747 } else { 1748 base.jQueryuserItems.eq(position).before(htmlString); 1749 } 1750 1751 base.setVars(); 1752 }, 1753 1754 removeItem : function (targetPosition) { 1755 var base = this, 1756 position; 1757 1758 if (base.jQueryelem.children().length === 0) { 1759 return false; 1760 } 1761 if (targetPosition === undefined || targetPosition === -1) { 1762 position = -1; 1763 } else { 1764 position = targetPosition; 1765 } 1766 1767 base.unWrap(); 1768 base.jQueryuserItems.eq(position).remove(); 1769 base.setVars(); 1770 } 1771 1772 }; 1773 1774 jQuery.fn.owlCarousel = function (options) { 1775 return this.each(function () { 1776 if (jQuery(this).data("owl-init") === true) { 1777 return false; 1778 } 1779 jQuery(this).data("owl-init", true); 1780 var carousel = Object.create(Carousel); 1781 carousel.init(options, this); 1782 jQuery.data(this, "owlCarousel", carousel); 1783 }); 1784 }; 1785 1786 jQuery.fn.owlCarousel.options = { 1787 1788 items : 5, 1789 itemsCustom : false, 1790 itemsDesktop : [1199, 4], 1791 itemsDesktopSmall : [979, 3], 1792 itemsTablet : [768, 2], 1793 itemsTabletSmall : false, 1794 itemsMobile : [479, 1], 1795 singleItem : false, 1796 itemsScaleUp : false, 1797 1798 slideSpeed : 200, 1799 paginationSpeed : 800, 1800 rewindSpeed : 1000, 1801 1802 autoPlay : false, 1803 stopOnHover : false, 1804 1805 navigation : false, 1806 navigationText : ["prev", "next"], 1807 rewindNav : true, 1808 scrollPerPage : false, 1809 1810 pagination : true, 1811 paginationNumbers : false, 1812 1813 responsive : true, 1814 responsiveRefreshRate : 200, 1815 responsiveBaseWidth : window, 1816 1817 baseClass : "owl-carousel", 1818 theme : "owl-theme", 1819 1820 lazyLoad : false, 1821 lazyFollow : true, 1822 lazyEffect : "fade", 1823 1824 autoHeight : false, 1825 1826 jsonPath : false, 1827 jsonSuccess : false, 1828 1829 dragBeforeAnimFinish : true, 1830 mouseDrag : true, 1831 touchDrag : true, 1832 1833 addClassActive : false, 1834 transitionStyle : false, 1835 1836 beforeUpdate : false, 1837 afterUpdate : false, 1838 beforeInit : false, 1839 afterInit : false, 1840 beforeMove : false, 1841 afterMove : false, 1842 afterAction : false, 1843 startDragging : false, 1844 afterLazyLoad: false 1845 }; 1846}(jQuery, window, document));; 1847// Les colonnes sont des DIV display:inline-block, vertical-align:top, position:relative et top:0. 1848// Le conteneur doit avoir white-space:nowrap pour empêcher les colonnes de passer à la ligne 1849// Par défaut, les colonnes sont alignées par le bas, mais vertical-align-top les aligne par le haut. 1850 1851function synchroniserCadres(o) { 1852 1853 // Fonction appelée lors d'un changement de taille 1854 var colSize = function(colonne,contexte) { 1855 // si on sait le faire....
1856 // changera le height de la colonne et éventuellement le iMax. 1857 for (var i=0;i<contexte.colonnes.length;i++) { 1858 contexte.colonnes[i].height = parseInt(contexte.colonnes[i].element.height()); 1859 } 1860 calculerColonneMax(contexte); 1861 }; 1862 1863 // Fonction de calcul de la plus haute colonne 1864 var calculerColonneMax = function(contexte) { 1865 var hMax = 0; 1866 contexte.iMax = 0; 1867 for (var i=0; i<contexte.colonnes.length; i++) { 1868 var h = contexte.colonnes[i].element.is(':visible') 1869 ? contexte.colonnes[i].height 1870 : 0; 1871 if (h > hMax) { 1872 hMax = h; 1873 contexte.iMax = i; 1874 } 1875 } 1876 }; 1877 1878 // Fonction de positionnement des colonnes 1879 var positionnerColonnes = function(contexte) { 1880 var min = Math.min; 1881 var max = Math.max; 1882 1883 for (var i = 0; i < contexte.colonnes.length; i++) { 1884 var colonne = contexte.colonnes[i]; 1885 colSize(colonne,contexte); // pas top, mais la hauteur peut changer... 1886 } 1887 1888 // Indice de la plus grande colonne : celle qui n'est jamais repositionnée. 1889 var colonneMax = contexte.colonnes[contexte.iMax]; 1890 1891 for (var i = 0; i < contexte.colonnes.length; i++) { 1892 var colonne = contexte.colonnes[i]; 1893// if (i != contexte.iMax) { 1894 // Calcul du top : le plus petit positif ou nul parmi : 1895 // - contexte.window.scrollTop() - colonneMax.element.offset().top + contexte.pad() 1896 // colonne flotte entre son plus haut et son plus bas niveau 1897 // - colonneMax.height - colonne.height 1898 // alinement par le bas 1899 // - 0 1900 // alignement par le haut. 1901 1902 var a = contexte.window.scrollTop() - colonneMax.element.offset().top + contexte.pad(); 1903 var b = colonneMax.height - colonne.height; 1904 var c = 0; 1905 var top = max(c,min(a,b)); 1906 colonne.element.css('top', top); 1907// } 1908 } 1909 }; 1910 1911 // Contexte contient les différentes colonnes, la colonne la plus haute, le padding, window... 1912 var contexte = { 1913 pad:0, 1914 colonnes:[], 1915 iMax:0, 1916 window:jQuery(window), 1917 o:o, 1918 }; 1919 1920 // Détermination du padding : 1921 // ce peut-être une valeur absolue, 1922 // la marge haute du body ( pad = 'body-margin-top' ) 1923 // ou par un selecteur jQuery. 1924 // Sauf en cas de valeur absolue, la valeur sera calculée à chaque fois 1925 1926 if (o.hasOwnProperty('pad')) { 1927 if (parseInt(o.pad)==o.pad) { 1928 contexte.pad = function(){return o.pad}; 1929 } 1930 else if (o.pad == 'body-margin-top') { 1931 contexte.pad = function() { 1932 body = jQuery('body'); 1933 return parseInt(body.css('margin-top')) + parseInt(body.css('padding-top')); 1934 } 1935 } 1936 else { 1937 var pad_element = jQuery(o.pad); 1938 contexte.pad = function(){return pad_element.height()} 1939 } 1940 } 1941 1942 // Mémorisation des colonnes, ajout d'un handler lorsqu'elles changent de hauteur 1943 for (var i = 0; i < o.colonnes.length; i++) { 1944 var selector = jQuery(o.colonnes[i]); 1945 jQuery(selector).each(function(){ 1946 element = jQuery(this); 1947 if (element.css('float')=='none') { 1948 var colonne = { 1949 contexte:contexte, 1950 element:element, 1951 height:parseInt(element.height()), 1952 }; 1953 contexte.colonnes.push(colonne); 1954 element.bind('resize',function(){ 1955 colSize(jQuery(this),contexte); 1956 }); 1957 } 1958 }); 1959 } 1960 1961 // Calcul de la colonne max 1962 calculerColonneMax(contexte); 1963 1964 // Pose d'un handler sur le scroll 1965 jQuery(document).scroll(function(){ 1966 positionnerColonnes(contexte); 1967 }); 1968 1969} 1970 1971 1972jQuery(document).ready(function(){ 1973 jQuery.ready.promise().done(function(){ 1974 jQuery('.synchro').each(function(){ 1975 var id = '#' + jQuery(this).attr('id'); 1976 synchroniserCadres({pad:'body-margin-top',colonnes:[id+' > DIV']}); 1977 }); 1978 }); 1979}); 1980 1981 1982; 1983(function ($) { 1984// Pseudo onglets utilisés pour gérer les colonnes sur des viewports étroits 1985// Une liste UL est générée avec la classe "colonnes-tabs"; 1986// Parmi les items de cette liste, de classe "colonnes-tab", certains ont un attribut "data-tab" contenant un nom de classe, 1987// qui sera positionnée sur une colonne de classe "colonne" dans les desce
1987ndants de l'élément 1988// portant la classe donnée dans l'attribut "data-parent-tab". 1989// 1990// Donc on a, par exemple : 1991// <UL class="colonnes-tabs"> 1992// <LI class="colonnes-tab" data-tab="colonne-8" data-parent-tab="colonnes-12">...</LI> 1993// </UL> 1994// 1995// <DIV class="colonnes colonnes-12"> 1996// <DIV class="colonne colonne-8">...</DIV> 1997// ... 1998// </DIV> 1999 2000 2001$(document).ready(function(){ 2002 2003 jQuery('.colonnes-tabs > .colonnes-tab[data-tab]').click(function(){ 2004 var item = jQuery(this); 2005 2006 // Déjà sélectionné, rien à faire 2007 if (item.hasClass('current')) return; 2008 2009 var current_item = item.parent().children('LI.current'); 2010 if (current_item.length>0) { 2011 current_item.removeClass('current'); 2012 jQuery('.' + current_item.attr('data-parent-tab') + ' .' + current_item.attr('data-tab')).removeClass('current'); 2013 } 2014 2015 item.addClass('current'); 2016 jQuery('.' + item.attr('data-parent-tab') + ' .' + item.attr('data-tab')).addClass('current'); 2017 jQuery(window).resize(); // car l'effet d'un resize précédent sur la colonne cachée a été nul 2018 }); 2019 2020}); 2021 2022// Permet $(...).on('currentChanged',function... 2023$.each(['addClass', 'removeClass', 'toggleClass'], function (i, ev) { 2024 var el = $.fn[ev]; 2025 $.fn[ev] = function () { 2026 // Le premier argument peut être string, function ou boolean 2027 // Le second peut etre boolean seulement 2028 var classes = undefined; 2029 var state = undefined; 2030 if (arguments.length>0) { 2031 switch(typeof(arguments[0])) { 2032 case 'string': 2033 classes = arguments[0]; 2034 break; 2035 case 'function': 2036 classes = arguments[0](); 2037 break; 2038 case 'boolean': 2039 state = arguments[0]; 2040 break; 2041 } 2042 } 2043 if (arguments.length>1) { 2044 switch(typeof(arguments[1])) { 2045 case 'boolean': 2046 state = arguments[0]; 2047 break; 2048 } 2049 } 2050 classes = classes.split(' '); 2051 var current = false; 2052 for(var i=0;i<classes.length;i++) { 2053 if (classes[i].trim()=='current') current=true; 2054 } 2055 if (current) { 2056 2057 // Déclenchement du trigger dans un timeout, 2058 // afin qu'il soit après toute autre action 2059 var me = this; 2060 setTimeout( 2061 function(){ 2062 me.trigger('currentChanged'); 2063 }, 2064 1 2065 ); 2066 } 2067 return el.apply(this,arguments); 2068 }; 2069}); 2070 2071 2072})(jQuery); 2073 2074; 2075(function ($) { 2076 2077$("document").ready(function(){ 2078 flex_simulator_init(); 2079}); 2080 2081 2082function flex_simulator_init() { 2083 $('body').append('<div style="display:none"><div id="flex-simulator-test" style="display:flex"></div></div>'); 2084 if ($('#flex-simulator-test').css('display') == 'flex') return; 2085 2086 // Donc display:flex n'est pas reconnu, et il faut le simuler 2087 $(window).resize(function(){ 2088 flex_simulator_grow(); 2089 }); 2090 $('.flexible').on('currentChanged',function(){ 2091 flex_simulator_grow(); 2092 }); 2093 2094 flex_simulator_grow(); 2095} 2096 2097function flex_simulator_grow() { 2098 $('.flexible').each(function(){ 2099 // Pour simplifier, on ne traite que les extensions horizontales : 2100 // - Les blocs flexibles ont la classe "flexible" 2101 // - Lorsque flex-grow est valué à 1, alors empty-cells est valué à "hide" (bidouille...) 2102 // - Il n'y aura qu'un seul flex-grow:1 dans une fratrie 2103 2104 // Recherche des blocs frères du flexible, visibles. 2105 var moi = $(this); 2106 if (moi.css('empty-cells') != 'hide' || moi.css('display')=='none') { 2107 return; 2108 } 2109 var fratrie = $(this).siblings(); 2110 2111 // Largeur disponible 2112 var total = moi.parent().width(); 2113 var reste = total; 2114 2115 // Largeur de la fratrie 2116 fratrie.each(function(){ 2117 var f = $(this); 2118 if (f!=moi && f.css('display')!='none') { 2119 // Dans la fratrie, on peut avoir positionné une largeur, 2120 // notamment par le jeu des changements de classes. 2121 // On revient à des largeurs spécifiées par la feuille de style 2122 f.css('width',''); 2123 reste -= f.outerWidth(true); 2124 } 2125 }); 2126 2127 // Retrait aussi de mon padding 2128 reste -= (moi.outerWidth(true) - moi.width()); 2129 2130 moi.css('width',reste + 'px'); 2131 }); 2132} 2133 2134})(jQuery); 2135 2136; 2137jQuery(document).ready(function(){ 2138 jQuery('TABLE').tablesResponsives(); 2139}); 2140 2141 2142(function() { 2143 var delayedAdjust, TableResponsiveIndex; 2144 2145 delayedAdjust = []; 2146 TableResponsiveIndex = 0; 2147 2148 TableResponsive = (function() { 2149 function TableResponsive(e) { 2150 this.t = jQuery(e); 2151 this.init(); 2152 } 2153 2154 TableResponsive.prototype.init = function() { 2155 this.setupTable(); 2156 this.adjustOnLoad(); 2157 return this.adjustOnResize(); 2158 } 2159 2160 TableResponsive.prototype.setupTable = function() { 2161 this.b = this.t.children('tbody'); 2162 this.r = 100; 2163 this.c = jQuery(this.t).find('*'); 2164 this.index = TableResponsiveIndex++; 2165 } 2166 2167 TableResponsive.prototype.adjustOnLoad = function() { 2168 var _this = this; 2169 return jQuery(window).on('load', function() { 2170 return _this.resizeTable(); 2171 }); 2172 }; 2173 2174 TableResponsive.prototype.adjustOnResize = function() { 2175 var _this = this; 2176 return jQuery(window).on('resize', function() { 2177 clearTimeout(delayedAdjust[_this.index]); 2178 return delayedAdjust[_this.index] = setTimeout(function() { 2179 return _this.resizeTable(); 2180 }, 20); 2181 }); 2182 }; 2183 2184 TableResponsive.prototype.resizeTable = function() { 2185 // On peut agrandir tant que b n'est pas plus large qu'initialement 2186 while (this.b.width() < this.t.width() && this.r < 100) { 2187 this.r ++; 2188 this.c.css({fontSize:this.r+'%'}); 2189 } 2190 // On doit réduire tant que b est plus large que la table 2191 // En se limitant à 90%, ce qui est déjà illisible. 2192 while (this.b.width() > this.t.width() && this.r > 90) { 2193 this.r --; 2194 this.c.css({fontSize:this.r+'%'}); 2195 } 2196 }; 2197 2198 return TableResponsive; 2199 2200 })(); 2201 2202 (function($) { 2203 var tablesResponsivesElements; 2204 tablesResponsivesElements = []; 2205 return $.fn.tablesResponsives = function(options) { 2206 return this.each(function() { 2207 return tablesResponsivesElements.push(new TableResponsive(this)); 2208 }); 2209 }; 2210 })(jQuery); 2211}).call(this); 2212 2213 2214;
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.