1!function(i){"use strict";"function"==typeof define&&define.amd?define(["jquery"],i):"undefined"!=typeof exports?module.exports=i(require("jquery")):i(jQuery)}(function(i){"use strict";var e=window.Slick||{};(e=function(){var e=0;return function(t,o){var s,n=this;n.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:i(t),appendDots:i(t),arrows:!0,asNavFor:null,prevArrow:'<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',nextArrow:'<button class="slick-next" aria-label="Next" type="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(e,t){return i('<button type="button" />').text(t+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,focusOnChange:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},n.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,scrolling:!1,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,swiping:!1,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},i.extend(n,n.initials),n.activeBreakpoint=null,n.animType=null,n.animProp=null,n.breakpoints=[],n.breakpointSettings=[],n.cssTransitions=!1,n.focussed=!1,n.interrupted=!1,n.hidden="hidden",n.paused=!0,n.positionProp=null,n.respondTo=null,n.rowCount=1,n.shouldClick=!0,n.$slider=i(t),n.$slidesCache=null,n.transformType=null,n.transitionType=null,n.visibilityChange="visibilitychange",n.windowWidth=0,n.windowTimer=null,s=i(t).data("slick")||{},n.options=i.extend({},n.defaults,o,s),n.currentSlide=n.options.initialSlide,n.originalSettings=n.options,void 0!==document.mozHidden?(n.hidden="mozHidden",n.visibilityChange="mozvisibilitychange"):void 0!==document.webkitHidden&&(n.hidden="webkitHidden",n.visibilityChange="webkitvisibilitychange"),n.autoPlay=i.proxy(n.autoPlay,n),n.autoPlayClear=i.proxy(n.autoPlayClear,n),n.autoPlayIterator=i.proxy(n.autoPlayIterator,n),n.changeSlide=i.proxy(n.changeSlide,n),n.clickHandler=i.proxy(n.clickHandler,n),n.selectHandler=i.proxy(n.selectHandler,n),n.setPosition=i.proxy(n.setPosition,n),n.swipeHandler=i.proxy(n.swipeHandler,n),n.dragHandler=i.proxy(n.dragHandler,n),n.keyHandler=i.proxy(n.keyHandler,n),n.instanceUid=e++,n.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,n.registerBreakpoints(),n.init(!0)}}()).prototype.activateADA=function(){this.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},e.prototype.addSlide=e.prototype.slickAdd=function(e,t,o){var s=this;if("boolean"==typeof t)o=t,t=null;else if(t<0||t>=s.slideCount)return!1;s.unload(),"number"==typeof t?0===t&&0===s.$slides.length?i(e).appendTo(s.$slideTrack):o?i(e).insertBefore(s.$slides.eq(t)):i(e).insertAfter(s.$slides.eq(t)):!0===o?i(e).prependTo(s.$slideTrack):i(e).appendTo(s.$slideTrack),s.$slides=s.$slideTrack.children(this.options.slide),s.$slideTrack.children(this.options.slide).detach(),s.$slideTrack.append(s.$slides),s.$slides.each(function(e,t){i(t).attr("data-slick-index",e)}),s.$slidesCache=s.$slides,s.reinit()},e.prototype.animateHeight=function(){var i=this;if(1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.animate({height:e},i.options.speed)}},e.prototype.animateSlide=function(e,t){var o={},s=this;s.animateHeight(),!0===s.options.rtl&&!1===s.options.vertical&&(e=-e),!1===s.transformsEnabled?!1===s.options.vertical?s.$slideTrack.animate({left:e},s.options.speed,s.options.easing,t):s.$slideTrack.animate({top:e},s.options.speed,s.options.easing,t):!1===s.cssTransitions?(!0===s.options.rtl&&(s.currentLeft=-s.currentLeft),i({animStart:s.currentLeft}).animate({animStart:e},{duration:s.options.speed,easing:s.options.easing,step:function(i){i=Math.ceil(i),!1===s.options.vertical?(o[s.animType]="translate("+i+"px, 0px)",s.$slideTrack.css(o)):(o[s.animType]="translate(0px,"+i+"px)",s.$slideTrack.css(o))},complete:function(){t&&t.call()}})):(s.applyTransition(),e=Math.ceil(e),!1===s.options.vertical?o[s.animType]="translate3d("+e+"px, 0px, 0px)":o[s.animType]="translate3d(0px,"+e+"px, 0px)",s.$slideTrack.css(o),t&&setTimeout(function(){s.disableTransition(),t.call()},s.options.speed))},e.prototype.getNavTarget=function(){var e=this,t=e.options.asNavFor;return t&&null!==t&&(t=i(t).not(e.$slider)),t},e.prototype.asNavFor=function(e){var t=this.getNavTarget();null!==t&&"object"==typeof t&&t.each(function(){var t=i(this).slick("getSlick");t.unslicked||t.slideHandler(e,!0)})},e.prototype.applyTransition=function(i){var e=this,t={};!1===e.options.fade?t[e.transitionType]=e.transformType+" "+e.options.speed+"ms "+e.options.cssEase:t[e.transitionType]="opacity "+e.options.speed+"ms "+e.options.cssEase,!1===e.options.fade?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.autoPlay=function(){var i=this;i.autoPlayClear(),i.slideCount>i.options.slidesToShow&&(i.autoPlayTimer=setInterval(i.autoPlayIterator,i.options.autoplaySpeed))},e.prototype.autoPlayClear=function(){var i=this;i.autoPlayTimer&&clearInterval(i.autoPlayTimer)},e.prototype.autoPlayIterator=function(){var i=this,e=i.currentSlide+i.options.slidesToScroll;i.paused||i.interrupted||i.focussed||(!1===i.options.infinite&&(1===i.direction&&i.currentSlide+1===i.slideCount-1?i.direction=0:0===i.direction&&(e=i.currentSlide-i.options.slidesToScroll,i.currentSlide-1==0&&(i.direction=1))),i.slideHandler(e))},e.prototype.buildArrows=function(){var e=this;!0===e.options.arrows&&(e.$prevArrow=i(e.options.prevArrow).addClass("slick-arrow"),e.$nextArrow=i(e.options.nextArrow).addClass("slick-arrow"),e.slideCount>e.options.slidesToShow?(e.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.prependTo(e.options.appendArrows),e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.appendTo(e.options.appendArrows),!0!==e.options.infinite&&e.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):e.$prevArrow.add(e.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},e.prototype.buildDots=function(){var e,t,o=this;if(!0===o.options.dots){for(o.$slider.addClass("slick-dotted"),t=i("<ul />").addClass(o.options.dotsClass),e=0;e<=o.getDotCount();e+=1)t.append(i("<li />").append(o.options.customPaging.call(this,o,e)));o.$dots=t.appendTo(o.options.appendDots),o.$dots.find("li").first().addClass("slick-active")}},e.prototype.buildOut=function(){var e=this;e.$slides=e.$slider.children(e.options.slide+":not(.slick-cloned)").addClass("slick-slide"),e.slideCount=e.$slides.length,e.$slides.each(function(e,t){i(t).attr("data-slick-index",e).data("originalStyling",i(t).attr("style")||"")}),e.$slider.addClass("slick-slider"),e.$slideTrack=0===e.slideCount?i('<div class="slick-track"/>').appendTo(e.$slider):e.$slides.wrapAll('<div class="slick-track"/>').parent(),e.$list=e.$slideTrack.wrap('<div class="slick-list"/>').parent(),e.$slideTrack.css("opacity",0),!0!==e.options.centerMode&&!0!==e.options.swipeToSlide||(e.options.slidesToScroll=1),i("img[data-lazy]",e.$slider).not("[src]").addClass("slick-loading"),e.setupInfinite(),e.buildArrows(),e.buildDots(),e.updateDots(),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),!0===e.options.draggable&&e.$list.addClass("draggable")},e.prototype.buildRows=function(){var i,e,t,o,s,n,r,l=this;if(o=document.createDocumentFragment(),n=l.$slider.children(),l.o
1ptions.rows>1){for(r=l.options.slidesPerRow*l.options.rows,s=Math.ceil(n.length/r),i=0;i<s;i++){var d=document.createElement("div");for(e=0;e<l.options.rows;e++){var a=document.createElement("div");for(t=0;t<l.options.slidesPerRow;t++){var c=i*r+(e*l.options.slidesPerRow+t);n.get(c)&&a.appendChild(n.get(c))}d.appendChild(a)}o.appendChild(d)}l.$slider.empty().append(o),l.$slider.children().children().children().css({width:100/l.options.slidesPerRow+"%",display:"inline-block"})}},e.prototype.checkResponsive=function(e,t){var o,s,n,r=this,l=!1,d=r.$slider.width(),a=window.innerWidth||i(window).width();if("window"===r.respondTo?n=a:"slider"===r.respondTo?n=d:"min"===r.respondTo&&(n=Math.min(a,d)),r.options.responsive&&r.options.responsive.length&&null!==r.options.responsive){s=null;for(o in r.breakpoints)r.breakpoints.hasOwnProperty(o)&&(!1===r.originalSettings.mobileFirst?n<r.breakpoints[o]&&(s=r.breakpoints[o]):n>r.breakpoints[o]&&(s=r.breakpoints[o]));null!==s?null!==r.activeBreakpoint?(s!==r.activeBreakpoint||t)&&(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):null!==r.activeBreakpoint&&(r.activeBreakpoint=null,r.options=r.originalSettings,!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e),l=s),e||!1===l||r.$slider.trigger("breakpoint",[r,l])}},e.prototype.changeSlide=function(e,t){var o,s,n,r=this,l=i(e.currentTarget);switch(l.is("a")&&e.preventDefault(),l.is("li")||(l=l.closest("li")),n=r.slideCount%r.options.slidesToScroll!=0,o=n?0:(r.slideCount-r.currentSlide)%r.options.slidesToScroll,e.data.message){case"previous":s=0===o?r.options.slidesToScroll:r.options.slidesToShow-o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide-s,!1,t);break;case"next":s=0===o?r.options.slidesToScroll:o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide+s,!1,t);break;case"index":var d=0===e.data.index?0:e.data.index||l.index()*r.options.slidesToScroll;r.slideHandler(r.checkNavigable(d),!1,t),l.children().trigger("focus");break;default:return}},e.prototype.checkNavigable=function(i){var e,t;if(e=this.getNavigableIndexes(),t=0,i>e[e.length-1])i=e[e.length-1];else for(var o in e){if(i<e[o]){i=t;break}t=e[o]}return i},e.prototype.cleanUpEvents=function(){var e=this;e.options.dots&&null!==e.$dots&&(i("li",e.$dots).off("click.slick",e.changeSlide).off("mouseenter.slick",i.proxy(e.interrupt,e,!0)).off("mouseleave.slick",i.proxy(e.interrupt,e,!1)),!0===e.options.accessibility&&e.$dots.off("keydown.slick",e.keyHandler)),e.$slider.off("focus.slick blur.slick"),!0===e.options.arrows&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow&&e.$prevArrow.off("click.slick",e.changeSlide),e.$nextArrow&&e.$nextArrow.off("click.slick",e.changeSlide),!0===e.options.accessibility&&(e.$prevArrow&&e.$prevArrow.off("keydown.slick",e.keyHandler),e.$nextArrow&&e.$nextArrow.off("keydown.slick",e.keyHandler))),e.$list.off("touchstart.slick mousedown.slick",e.swipeHandler),e.$list.off("touchmove.slick mousemove.slick",e.swipeHandler),e.$list.off("touchend.slick mouseup.slick",e.swipeHandler),e.$list.off("touchcancel.slick mouseleave.
1slick",e.swipeHandler),e.$list.off("click.slick",e.clickHandler),i(document).off(e.visibilityChange,e.visibility),e.cleanUpSlideEvents(),!0===e.options.accessibility&&e.$list.off("keydown.slick",e.keyHandler),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().off("click.slick",e.selectHandler),i(window).off("orientationchange.slick.slick-"+e.instanceUid,e.orientationChange),i(window).off("resize.slick.slick-"+e.instanceUid,e.resize),i("[draggable!=true]",e.$slideTrack).off("dragstart",e.preventDefault),i(window).off("load.slick.slick-"+e.instanceUid,e.setPosition)},e.prototype.cleanUpSlideEvents=function(){var e=this;e.$list.off("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.off("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.cleanUpRows=function(){var i,e=this;e.options.rows>1&&((i=e.$slides.children().children()).removeAttr("style"),e.$slider.empty().append(i))},e.prototype.clickHandler=function(i){!1===this.shouldClick&&(i.stopImmediatePropagation(),i.stopPropagation(),i.preventDefault())},e.prototype.destroy=function(e){var t=this;t.autoPlayClear(),t.touchObject={},t.cleanUpEvents(),i(".slick-cloned",t.$slider).detach(),t.$dots&&t.$dots.remove(),t.$prevArrow&&t.$prevArrow.length&&(t.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.prevArrow)&&t.$prevArrow.remove()),t.$nextArrow&&t.$nextArrow.length&&(t.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.nextArrow)&&t.$nextArrow.remove()),t.$slides&&(t.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){i(this).attr("style",i(this).data("originalStyling"))}),t.$slideTrack.children(this.options.slide).detach(),t.$slideTrack.detach(),t.$list.detach(),t.$slider.append(t.$slides)),t.cleanUpRows(),t.$slider.removeClass("slick-slider"),t.$slider.removeClass("slick-initialized"),t.$slider.removeClass("slick-dotted"),t.unslicked=!0,e||t.$slider.trigger("destroy",[t])},e.prototype.disableTransition=function(i){var e=this,t={};t[e.transitionType]="",!1===e.options.fade?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.fadeSlide=function(i,e){var t=this;!1===t.cssTransitions?(t.$slides.eq(i).css({zIndex:t.options.zIndex}),t.$slides.eq(i).animate({opacity:1},t.options.speed,t.options.easing,e)):(t.applyTransition(i),t.$slides.eq(i).css({opacity:1,zIndex:t.options.zIndex}),e&&setTimeout(function(){t.disableTransition(i),e.call()},t.options.speed))},e.prototype.fadeSlideOut=function(i){var e=this;!1===e.cssTransitions?e.$slides.eq(i).animate({opacity:0,zIndex:e.options.zIndex-2},e.options.speed,e.options.easing):(e.applyTransition(i),e.$slides.eq(i).css({opacity:0,zIndex:e.options.zIndex-2}))},e.prototype.filterSlides=e.prototype.slickFilter=function(i){var e=this;null!==i&&(e.$slidesCache=e.$slides,e.unload(),e.$slideTrack.children(this.options.slide).detach(),e.$slidesCache.filter(i).appendTo(e.$slideTrack),e.reinit())},e.prototype.focusHandler=function(){var e=this;e.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick","*",function(t){t.stopImmediatePropagation();var o=i(this);setTimeout(function(){e.options.pauseOnFocus&&(e.focussed=o.is(":focus"),e.autoPlay())},0)})},e.prototype.getCurrent=e.prototype.slickCurrentSlide=function(){return this.currentSlide},e.prototype.getDotCount=function(){var i=this,e=0,t=0,o=0;if(!0===i.options.infinite)if(i.slideCount<=i.options.slidesToShow)++o;else for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else if(!0===i.options.centerMode)o=i.slideCount;else if(i.options.asNavFor)for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else o=1+Math.ceil((i.slideCount-i.options.slidesToShow)/i.options.slidesToScroll);return o-1},e.prototype.getLeft=function(i){var e,t,o,s,n=this,r=0;return n.slideOffset=0,t=n.$slides.first().outerHeight(!0),!0===n.options.infinite?(n.slideCount>n.options.slidesToShow&&(n.slideOffset=n.slideWidth*n.options.slidesToShow*-1,s=-1,!0===n.options.vertical&&!0===n.options.centerMode&&(2===n.options.slidesToShow?s=-1.5:1===n.options.slidesToShow&&(s=-2)),r=t*n.options.slidesToShow*s),n.slideCount%n.options.slidesToScroll!=0&&i+n.options.slidesToScroll>n.slideCount&&n.slideCount>n.options.slidesToShow&&(i>n.slideCount?(n.slideOffset=(n.options.slidesToShow-(i-n.slideCount))*n.slideWidth*-1,r=(n.options.slidesToShow-(i-n.slideCount))*t*-1):(n.slideOffset=n.slideCount%n.options.slidesToScroll*n.slideWidth*-1,r=n.slideCount%n.options.slidesToScroll*t*-1))):i+n.options.slidesToShow>n.slideCount&&(n.slideOffset=(i+n.options.slidesToShow-n.slideCount)*n.slideWidth,r=(i+n.options.slidesToShow-n.slideCount)*t),n.slideCount<=n.options.slidesToShow&&(n.slideOffset=0,r=0),!0===n.options.centerMode&&n.slideCount<=n.options.slidesToShow?n.slideOffset=n.slideWidth*Math.floor(n.options.slidesToShow)/2-n.slideWidth*n.slideCount/2:!0===n.options.centerMode&&!0===n.options.infinite?n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)-n.slideWidth:!0===n.options.centerMode&&(n.slideOffset=0,n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)),e=!1===n.options.vertical?i*n.slideWidth*-1+n.slideOffset:i*t*-1+r,!0===n.options.variableWidth&&(o=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow),e=!0===n.options.rtl?o[0]?-1*(n.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,!0===n.options.centerMode&&(o=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow+1),e=!0===n.options.rtl?o[0]?-1*(n.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,e+=(n.$list.width()-o.outerWidth())/2)),e},e.prototype.getOption=e.prototype.slickGetOption=function(i){return this.options[i]},e.prototype.getNavigableIndexes=function(){var i,e=this,t=0,o=0,s=[];for(!1===e.options.infinite?i=e.slideCount:(t=-1*e.options.slidesToScroll,o=-1*e.options.slidesToScroll,i=2*e.slideCount);t<i;)s.push(t),t=o+e.options.slidesToScroll,o+=e.options.slidesToScroll<=e.options.slidesToShow?e.options.slidesToScroll:e.options.slidesToShow;return s},e.prototype.getSlick=function(){return this},e.prototype.getSlideCount=function(){var e,t,o=this;return t=!0===o.options.centerMode?o.slideWidth*Math.floor(o.options.slidesToShow/2):0,!0===o.options.swipeToSlide?(o.$slideTrack.find(".slick-slide").each(function(s,n){if(n.offsetLeft-t+i(n).outerWidth()/2>-1*o.swipeLeft)return e=n,!1}),Math.abs(i(e).attr("data-slick-index")-o.currentSlide)||1):o.options.slidesToScroll},e.prototype.goTo=e.prototype.slickGoTo=function(i,e){this.changeSlide({data:{message:"index",index:
1parseInt(i)}},e)},e.prototype.init=function(e){var t=this;i(t.$slider).hasClass("slick-initialized")||(i(t.$slider).addClass("slick-initialized"),t.buildRows(),t.buildOut(),t.setProps(),t.startLoad(),t.loadSlider(),t.initializeEvents(),t.updateArrows(),t.updateDots(),t.checkResponsive(!0),t.focusHandler()),e&&t.$slider.trigger("init",[t]),!0===t.options.accessibility&&t.initADA(),t.options.autoplay&&(t.paused=!1,t.autoPlay())},e.prototype.initADA=function(){var e=this,t=Math.ceil(e.slideCount/e.options.slidesToShow),o=e.getNavigableIndexes().filter(function(i){return i>=0&&i<e.slideCount});e.$slides.add(e.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),null!==e.$dots&&(e.$slides.not(e.$slideTrack.find(".slick-cloned")).each(function(t){var s=o.indexOf(t);i(this).attr({role:"tabpanel",id:"slick-slide"+e.instanceUid+t,tabindex:-1}),-1!==s&&i(this).attr({"aria-describedby":"slick-slide-control"+e.instanceUid+s})}),e.$dots.attr("role","tablist").find("li").each(function(s){var n=o[s];i(this).attr({role:"presentation"}),i(this).find("button").first().attr({role:"tab",id:"slick-slide-control"+e.instanceUid+s,"aria-controls":"slick-slide"+e.instanceUid+n,"aria-label":s+1+" of "+t,"aria-selected":null,tabindex:"-1"})}).eq(e.currentSlide).find("button").attr({"aria-selected":"true",tabindex:"0"}).end());for(var s=e.currentSlide,n=s+e.options.slidesToShow;s<n;s++)e.$slides.eq(s).attr("tabindex",0);e.activateADA()},e.prototype.initArrowEvents=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},i.changeSlide),i.$nextArrow.off("click.slick").on("click.slick",{message:"next"},i.changeSlide),!0===i.options.accessibility&&(i.$prevArrow.on("keydown.slick",i.keyHandler),i.$nextArrow.on("keydown.slick",i.keyHandler)))},e.prototype.initDotEvents=function(){var e=this;!0===e.options.dots&&(i("li",e.$dots).on("click.slick",{message:"index"},e.changeSlide),!0===e.options.accessibility&&e.$dots.on("keydown.slick",e.keyHandler)),!0===e.options.dots&&!0===e.options.pauseOnDotsHover&&i("li",e.$dots).on("mouseenter.slick",i.proxy(e.interrupt,e,!0)).on("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.initSlideEvents=function(){var e=this;e.options.pauseOnHover&&(e.$list.on("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.on("mouseleave.slick",i.proxy(e.interrupt,e,!1)))},e.prototype.initializeEvents=function(){var e=this;e.initArrowEvents(),e.initDotEvents(),e.initSlideEvents(),e.$list.on("touchstart.slick mousedown.slick",{action:"start"},e.swipeHandler),e.$list.on("touchmove.slick mousemove.slick",{action:"move"},e.swipeHandler),e.$list.on("touchend.slick mouseup.slick",{action:"end"}
1,e.swipeHandler),e.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},e.swipeHandler),e.$list.on("click.slick",e.clickHandler),i(document).on(e.visibilityChange,i.proxy(e.visibility,e)),!0===e.options.accessibility&&e.$list.on("keydown.slick",e.keyHandler),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),i(window).on("orientationchange.slick.slick-"+e.instanceUid,i.proxy(e.orientationChange,e)),i(window).on("resize.slick.slick-"+e.instanceUid,i.proxy(e.resize,e)),i("[draggable!=true]",e.$slideTrack).on("dragstart",e.preventDefault),i(window).on("load.slick.slick-"+e.instanceUid,e.setPosition),i(e.setPosition)},e.prototype.initUI=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.show(),i.$nextArrow.show()),!0===i.options.dots&&i.slideCount>i.options.slidesToShow&&i.$dots.show()},e.prototype.keyHandler=function(i){var e=this;i.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===i.keyCode&&!0===e.options.accessibility?e.changeSlide({data:{message:!0===e.options.rtl?"next":"previous"}}):39===i.keyCode&&!0===e.options.accessibility&&e.changeSlide({data:{message:!0===e.options.rtl?"previous":"next"}}))},e.prototype.lazyLoad=function(){function e(e){i("img[data-lazy]",e).each(function(){var e=i(this),t=i(this).attr("data-lazy"),o=i(this).attr("data-srcset"),s=i(this).attr("data-sizes")||n.$slider.attr("data-sizes"),r=document.createElement("img");r.onload=function(){e.animate({opacity:0}
vendor: 5,619 bytes, line 1
1,100,function(){o&&(e.attr("srcset",o),s&&e.attr("sizes",s)),e.attr("src",t).animate({opacity:1},200,function(){e.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading")}),n.$slider.trigger("lazyLoaded",[n,e,t])})},r.onerror=function(){e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),n.$slider.trigger("lazyLoadError",[n,e,t])},r.src=t})}var t,o,s,n=this;if(!0===n.options.centerMode?!0===n.options.infinite?s=(o=n.currentSlide+(n.options.slidesToShow/2+1))+n.options.slidesToShow+2:(o=Math.max(0,n.currentSlide-(n.options.slidesToShow/2+1)),s=n.options.slidesToShow/2+1+2+n.currentSlide):(o=n.options.infinite?n.options.slidesToShow+n.currentSlide:n.currentSlide,s=Math.ceil(o+n.options.slidesToShow),!0===n.options.fade&&(o>0&&o--,s<=n.slideCount&&s++)),t=n.$slider.find(".slick-slide").slice(o,s),"anticipated"===n.options.lazyLoad)for(var r=o-1,l=s,d=n.$slider.find(".slick-slide"),a=0;a<n.options.slidesToScroll;a++)r<0&&(r=n.slideCount-1),t=(t=t.add(d.eq(r))).add(d.eq(l)),r--,l++;e(t),n.slideCount<=n.options.slidesToShow?e(n.$slider.find(".slick-slide")):n.currentSlide>=n.slideCount-n.options.slidesToShow?e(n.$slider.find(".slick-cloned").slice(0,n.options.slidesToShow)):0===n.currentSlide&&e(n.$slider.find(".slick-cloned").slice(-1*n.options.slidesToShow))},e.prototype.loadSlider=function(){var i=this;i.setPosition(),i.$slideTrack.css({opacity:1}),i.$slider.removeClass("slick-loading"),i.initUI(),"progressive"===i.options.lazyLoad&&i.progressiveLazyLoad()},e.prototype.next=e.prototype.slickNext=function(){this.changeSlide({data:{message:"next"}})},e.prototype.orientationChange=function(){var i=this;i.checkResponsive(),i.setPosition()},e.prototype.pause=e.prototype.slickPause=function(){var i=this;i.autoPlayClear(),i.paused=!0},e.prototype.play=e.prototype.slickPlay=function(){var i=this;i.autoPlay(),i.options.autoplay=!0,i.paused=!1,i.focussed=!1,i.interrupted=!1},e.prototype.postSlide=function(e){var t=this;t.unslicked||(t.$slider.trigger("afterChange",[t,e]),t.animating=!1,t.slideCount>t.options.slidesToShow&&t.setPosition(),t.swipeLeft=null,t.options.autoplay&&t.autoPlay(),!0===t.options.accessibility&&(t.initADA(),t.options.focusOnChange&&i(t.$slides.get(t.currentSlide)).attr("tabindex",0).focus()))},e.prototype.prev=e.prototype.slickPrev=function(){this.changeSlide({data:{message:"previous"}})},e.prototype.preventDefault=function(i){i.preventDefault()},e.prototype.progressiveLazyLoad=function(e){e=e||1;var t,o,s,n,r,l=this,d=i("img[data-lazy]",l.$slider);d.length?(t=d.first(),o=t.attr("data-lazy"),s=t.attr("data-srcset"),n=t.attr("data-sizes")||l.$slider.attr("data-sizes"),(r=document.createElement("img")).onload=function(){s&&(t.attr("srcset",s),n&&t.attr("sizes",n)),t.attr("src",o).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"),!0===l.options.adaptiveHeight&&l.setPosition(),l.$slider.trigger("lazyLoaded",[l,t,o]),l.progressiveLazyLoad()},r.onerror=function(){e<3?setTimeout(function(){l.progressiveLazyLoad(e+1)},500):(t.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),l.$slider.trigger("lazyLoadError",[l,t,o]),l.progressiveLazyLoad())},r.src=o):l.$slider.trigger("allImagesLoaded",[l])},e.prototype.refresh=function(e){var t,o,s=this;o=s.slideCount-s.options.slidesToShow,!s.options.infinite&&s.currentSlide>o&&(s.currentSlide=o),s.slideCount<=s.options.slidesToShow&&(s.currentSlide=0),t=s.currentSlide,s.destroy(!0),i.extend(s,s.initials,{currentSlide:t}),s.init(),e||s.changeSlide({data:{message:"index",index:t}},!1)},e.prototype.registerBreakpoints=function(){var e,t,o,s=this,n=s.options.responsive||null;if("array"===i.type(n)&&n.length){s.respondTo=s.options.respondTo||"window";for(e in n)if(o=s.breakpoints.length-1,n.hasOwnProperty(e)){for(t=n[e].breakpoint;o>=0;)s.breakpoints[o]&&s.breakpoints[o]===t&&s.breakpoints.splice(o,1),o--;s.breakpoints.push(t),s.breakpointSettings[t]=n[e].settings}s.breakpoints.sort(function(i,e){return s.options.mobileFirst?i-e:e-i})}},e.prototype.reinit=function(){var e=this;e.$slides=e.$slideTrack.children(e.options.slide).addClass("slick-slide"),e.slideCount=e.$slides.length,e.currentSlide>=e.slideCount&&0!==e.currentSlide&&(e.currentSlide=e.currentSlide-e.options.slidesToScroll),e.slideCount<=e.options.slidesToShow&&(e.currentSlide=0),e.registerBreakpoints(),e.setProps(),e.setupInfinite(),e.buildArrows(),e.updateArrows(),e.initArrowEvents(),e.buildDots(),e.updateDots(),e.initDotEvents(),e.cleanUpSlideEvents(),e.initSlideEvents(),e.checkResponsive(!1,!0),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),e.setPosition(),e.focusHandler(),e.paused=!e.options.autoplay,e.autoPlay(),e.$slider.trigger("reInit",[e])},e.prototype.resize=function(){var e=this;i(window).width()!==e.windowWidth&&(clearTimeout(e.windowDelay),e.windowDelay=window.setTimeout(function(){e.windowWidth=i(window).width(),e.checkResponsive(),e.unslicked||e.setPosition()},50))},e.prototype.removeSlide=e.prototype.slickRemove=function(i,e,t){var o=this;if(i="boolean"==typeof i?!0===(e=i)?0:o.slideCount-1:!0===e?--i:i,o.slideCount<1||i<0||i>o.slideCount-1)return!1;o.unload(),!0===t?o.$slideTrack.children().remove():o.$slideTrack.children(this.options.slide).eq(i).remove(),o.$slides=o.$slideTrack.children(this.options.slide),o.$slideTrack.children(this.options.slide).detach(),o.$slideTrack.append(o.$slides),o.$slidesCache=o.$slides,o.reinit()},e.prototype.setCSS=function(i){var e,t,o=this,s={};
1!0===o.options.rtl&&(i=-i),e="left"==o.positionProp?Math.ceil(i)+"px":"0px",t="top"==o.positionProp?Math.ceil(i)+"px":"0px",s[o.positionProp]=i,!1===o.transformsEnabled?o.$slideTrack.css(s):(s={},!1===o.cssTransitions?(s[o.animType]="translate("+e+", "+t+")",o.$slideTrack.css(s)):(s[o.animType]="translate3d("+e+", "+t+", 0px)",o.$slideTrack.css(s)))},e.prototype.setDimensions=function(){var i=this;!1===i.options.vertical?!0===i.options.centerMode&&i.$list.css({padding:"0px "+i.options.centerPadding}):(i.$list.height(i.$slides.first().outerHeight(!0)*i.options.slidesToShow),!0===i.options.centerMode&&i.$list.css({padding:i.options.centerPadding+" 0px"})),i.listWidth=i.$list.width(),i.listHeight=i.$list.height(),!1===i.options.vertical&&!1===i.options.variableWidth?(i.slideWidth=Math.ceil(i.listWidth/i.options.slidesToShow),i.$slideTrack.width(Math.ceil(i.slideWidth*i.$slideTrack.children(".slick-slide").length))):!0===i.options.variableWidth?i.$slideTrack.width(5e3*i.slideCount):(i.slideWidth=Math.ceil(i.listWidth),i.$slideTrack.height(Math.ceil(i.$slides.first().outerHeight(!0)*i.$slideTrack.children(".slick-slide").length)));var e=i.$slides.first().outerWidth(!0)-i.$slides.first().width();!1===i.options.variableWidth&&i.$slideTrack.children(".slick-slide").width(i.slideWidth-e)},e.prototype.setFade=function(){var e,t=this;t.$slides.each(function(o,s){e=t.slideWidth*o*-1,!0===t.options.rtl?i(s).css({position:"relative",right:e,top:0,zIndex:t.options.zIndex-2,opacity:0}
1):i(s).css({position:"relative",left:e,top:0,zIndex:t.options.zIndex-2,opacity:0})}),t.$slides.eq(t.currentSlide).css({zIndex:t.options.zIndex-1,opacity:1})},e.prototype.setHeight=function(){var i=this;if(1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.css("height",e)}},e.prototype.setOption=e.prototype.slickSetOption=function(){var e,t,o,s,n,r=this,l=!1;if("object"===i.type(arguments[0])?(o=arguments[0],l=arguments[1],n="multiple"):"string"===i.type(arguments[0])&&(o=arguments[0],s=arguments[1],l=arguments[2],"responsive"===arguments[0]&&"array"===i.type(arguments[1])?n="responsive":void 0!==arguments[1]&&(n="single")),"single"===n)r.options[o]=s;else if("multiple"===n)i.each(o,function(i,e){r.options[i]=e});else if("responsive"===n)for(t in s)if("array"!==i.type(r.options.responsive))r.options.responsive=[s[t]];else{for(e=r.options.responsive.length-1;e>=0;)r.options.responsive[e].breakpoint===s[t].breakpoint&&r.options.responsive.splice(e,1),e--;r.options.responsive.push(s[t])}l&&(r.unload(),r.reinit())},e.prototype.setPosition=function(){var i=this;i.setDimensions(),i.setHeight(),!1===i.options.fade?i.setCSS(i.getLeft(i.currentSlide)):i.setFade(),i.$slider.trigger("setPosition",[i])},e.prototype.setProps=function(){var i=this,e=document.body.style;i.positionProp=!0===i.options.vertical?"top":"left","top"===i.positionProp?i.$slider.addClass("slick-vertical"):i.$slider.removeClass("slick-vertical"),void 0===e.WebkitTransition&&void 0===e.MozTransition&&void 0===e.msTransition||!0===i.options.useCSS&&(i.cssTransitions=!0),i.options.fade&&("number"==typeof i.options.zIndex?i.options.zIndex<3&&(i.options.zIndex=3):i.options.zIndex=i.defaults.zIndex),void 0!==e.OTransform&&(i.animType="OTransform",i.transformType="-o-transform",i.transitionType="OTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.MozTransform&&(i.animType="MozTransform",i.transformType="-moz-transform",i.transitionType="MozTransition",void 0===e.perspectiveProperty&&void 0===e.MozPerspective&&(i.animType=!1)),void 0!==e.webkitTransform&&(i.animType="webkitTransform",i.transformType="-webkit-transform",i.transitionType="webkitTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.msTransform&&(i.animType="msTransform",i.transformType="-ms-transform",i.transitionType="msTransition",void 0===e.msTransform&&(i.animType=!1)),void 0!==e.transform&&!1!==i.animType&&(i.animType="transform",i.transformType="transform",i.transitionType="transition"),i.transformsEnabled=i.options.useTransform&&null!==i.animType&&!1!==i.animType},e.prototype.setSlideClasses=function(i){var e,t,o,s,n=this;if(t=n.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),n.$slides.eq(i).addClass("slick-current"),!0===n.options.centerMode){var r=n.options.slidesToShow%2==0?1:0;e=Math.floor(n.options.slidesToShow/2),!0===n.options.infinite&&(i>=e&&i<=n.slideCount-1-e?n.$slides.slice(i-e+r,i+e+1).addClass("slick-active").attr("aria-hidden","false"):(o=n.options.slidesToShow+i,t.slice(o-e+1+r,o+e+2).addClass("slick-active").attr("aria-hidden","false")),0===i?t.eq(t.length-1-n.options.slidesToShow).addClass("slick-center"):i===n.slideCount-1&&t.eq(n.options.slidesToShow).addClass("slick-center")),n.$slides.eq(i).addClass("slick-center")}else i>=0&&i<=n.slideCount-n.options.slidesToShow?n.$slides.slice(i,i+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):t.length<=n.options.slidesToShow?t.addClass("slick-active").attr("aria-hidden","false"):(s=n.slideCount%n.options.slidesToShow,o=!0===n.options.infinite?n.options.slidesToShow+i:i,n.options.slidesToShow==n.options.slidesToScroll&&n.slideCount-i<n.options.slidesToShow?t.slice(o-(n.options.slidesToShow-s),o+s).addClass("slick-active").attr("aria-hidden","false"):t.slice(o,o+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"));"ondemand"!==n.options.lazyLoad&&"anticipated"!==n.options.lazyLoad||n.lazyLoad()},e.prototype.setupInfinite=function(){var e,t,o,s=this;if(!0===s.options.fade&&(s.options.centerMode=!1),!0===s.options.infinite&&!1===s.options.fade&&(t=null,s.slideCount>s.options.slidesToShow)){for(o=!0===s.options.centerMode?s.options.slidesToShow+1:s.options.slidesToShow,e=s.slideCount;e>s.slideCount-o;e-=1)t=e-1,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t-s.slideCount).prependTo(s.$slideTrack).addClass("slick-cloned");for(e=0;e<o+s.slideCount;e+=1)t=e,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t+s.slideCount).appendTo(s.$slideTrack).addClass("slick-cloned");s.$slideTrack.find(".slick-cloned").find("[id]").each(function(){i(this).attr("id","")})}},e.prototype.interrupt=function(i){var e=this;i||e.autoPlay(),e.interrupted=i},e.prototype.selectHandler=function(e){var t=this,o=i(e.target).is(".slick-slide")?i(e.target):i(e.target).parents(".slick-slide"),s=parseInt(o.attr("data-slick-index"));s||(s=0),t.slideCount<=t.options.slidesToShow?t.slideHandler(s,!1,!0):t.slideHandler(s)},e.prototype.slideHandler=function(i,e,t){var o,s,n,r,l,d=null,a=this;if(e=e||!1,!(!0===a.animating&&!0===a.options.waitForAnimate||!0===a.options.fade&&a.currentSlide===i))if(!1===e&&a.asNavFor(i),o=i,d=a.getLeft(o),r=a.getLeft(a.currentSlide),a.currentLeft=null===a.swipeLeft?r:a.swipeLeft,!1===a.options.infinite&&!1===a.options.centerMode&&(i<0||i>a.getDotCount()*a.options.slidesToScroll))!1===a.options.fade&&(o=a.currentSlide,!0!==t?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o));else if(!1===a.options.infinite&&!0===a.options.centerMode&&(i<0||i>a.slideCount-a.options.slidesToScroll))!1===a.options.fade&&(o=a.currentSlide,!0!==t?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o));else{if(a.options.autoplay&&clearInterval(a.autoPlayTimer),s=o<0?a.slideCount%a.options.slidesToScroll!=0?a.slideCount-a.slideCount%a.options.slidesToScroll:a.slideCount+
1o:o>=a.slideCount?a.slideCount%a.options.slidesToScroll!=0?0:o-a.slideCount:o,a.animating=!0,a.$slider.trigger("beforeChange",[a,a.currentSlide,s]),n=a.currentSlide,a.currentSlide=s,a.setSlideClasses(a.currentSlide),a.options.asNavFor&&(l=(l=a.getNavTarget()).slick("getSlick")).slideCount<=l.options.slidesToShow&&l.setSlideClasses(a.currentSlide),a.updateDots(),a.updateArrows(),!0===a.options.fade)return!0!==t?(a.fadeSlideOut(n),a.fadeSlide(s,function(){a.postSlide(s)})):a.postSlide(s),void a.animateHeight();!0!==t?a.animateSlide(d,function(){a.postSlide(s)}):a.postSlide(s)}},e.prototype.startLoad=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.hide(),i.$nextArrow.hide()),!0===i.options.dots&&i.slideCount>i.options.slidesToShow&&i.$dots.hide(),i.$slider.addClass("slick-loading")},e.prototype.swipeDirection=function(){var i,e,t,o,s=this;return i=s.touchObject.startX-s.touchObject.curX,e=s.touchObject.startY-s.touchObject.curY,t=Math.atan2(e,i),(o=Math.round(180*t/Math.PI))<0&&(o=360-Math.abs(o)),o<=45&&o>=0?!1===s.options.rtl?"left":"right":o<=360&&o>=315?!1===s.options.rtl?"left":"right":o>=135&&o<=225?!1===s.options.rtl?"right":"left":!0===s.options.verticalSwiping?o>=35&&o<=135?"down":"up":"vertical"},e.prototype.swipeEnd=function(i){var e,t,o=this;if(o.dragging=!1,o.swiping=!1,o.scrolling)return o.scrolling=!1,!1;if(o.interrupted=!1,o.shouldClick=!(o.touchObject.swipeLength>10),void 0===o.touchObject.curX)return!1;if(!0===o.touchObject.edgeHit&&o.$slider.trigger("edge",[o,o.swipeDirection()]),o.touchObject.swipeLength>=o.touchObject.minSwipe){switch(t=o.swipeDirection()){case"left":case"down":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide+o.getSlideCount()):o.currentSlide+o.getSlideCount(),o.currentDirection=0;break;case"right":case"up":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide-o.getSlideCount()):o.currentSlide-o.getSlideCount(),o.currentDirection=1}"vertical"!=t&&(o.slideHandler(e),o.touchObject={},o.$slider.trigger("swipe",[o,t]))}else o.touchObject.startX!==o.touchObject.curX&&(o.slideHandler(o.currentSlide),o.touchObject={})},e.prototype.swipeHandler=function(i){var e=this;if(!(!1===e.options.swipe||"ontouchend"in document&&!1===e.options.swipe||!1===e.options.draggable&&-1!==i.type.indexOf("mouse")))switch(e.touchObject.fingerCount=i.originalEvent&&void 0!==i.originalEvent.touches?i.originalEvent.touches.length:1,e.touchObject.minSwipe=e.listWidth/e.options.touchThreshold,!0===e.options.verticalSwiping&&(e.touchObject.minSwipe=e.listHeight/e.options.touchThreshold),i.data.action){case"start":e.swipeStart(i);break;case"move":e.swipeMove(i);break;case"end":e.swipeEnd(i)}},e.prototype.swipeMove=function(i){var e,t,o,s,n,r,l=this;return n=void 0!==i.originalEvent?i.originalEvent.touches:null,!(!l.dragging||l.scrolling||n&&1!==n.length)&&(e=l.getLeft(l.currentSlide),l.touchObject.curX=void 0!==n?n[0].pageX:i.clientX,l.touchObject.curY=void 0!==n?n[0].pageY:i.clientY,l.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(l.touchObject.curX-l.touchObject.startX,2))),r=Math.round(Math.sqrt(Math.pow(l.touchObject.curY-l.touchObject.startY,2))),!l.options.verticalSwiping&&!l.swiping&&r>4?(l.scrolling=!0,!1):(!0===l.options.verticalSwiping&&(l.touchObject.swipeLength=r),t=l.swipeDirection(),void 0!==i.originalEvent&&l.touchObject.swipeLength>4&&(l.swiping=!0,i.preventDefault()),s=(!1===l.options.rtl?1:-1)*(l.touchObject.curX>l.touchObject.startX?1:-1),!0===l.options.verticalSwiping&&(s=l.touchObject.curY>l.touchObject.startY?1:-1),o=l.touchObject.swipeLength,l.touchObject.edgeHit=!1,!1===l.options.infinite&&(0===l.currentSlide&&"right"===t||l.currentSlide>=l.getDotCount()&&"left"===t)&&(o=l.touchObject.swipeLength*l.options.edgeFriction,l.touchObject.edgeHit=!0),!1===l.options.vertical?l.swipeLeft=e+o*s:l.swipeLeft=e+o*(l.$list.height()/l.listWidth)*s,!0===l.options.verticalSwiping&&(l.swipeLeft=e+o*s),!0!==l.options.fade&&!1!==l.options.touchMove&&(!0===l.animating?(l.swipeLeft=null,!1):void l.setCSS(l.swipeLeft))))},e.prototype.swipeStart=function(i){var e,t=this;if(t.interrupted=!0,1!==t.touchObject.fingerCount||t.slideCount<=t.options.slidesToShow)return t.touchObject={},!1;void 0!==i.originalEvent&&void 0!==i.originalEvent.touches&&(e=i.originalEvent.touches[0]),t.touchObject.startX=t.touchObject.curX=void 0!==e?e.pageX:i.clientX,t.touchObject.startY=t.touchObject.curY=void 0!==e?e.pageY:i.clientY,t.dragging=!0},e.prototype.unfilterSlides=e.prototype.slickUnfilter=function(){var i=this;null!==i.$slidesCache&&(i.unload(),i.$slideTrack.children(this.options.slide).detach(),i.$slidesCache.appendTo(i.$slideTrack),i.reinit())},e.prototype.unload=function(){var e=this;i(".slick-cloned",e.$slider).remove(),e.$dots&&e.$dots.remove(),e.$prevArrow&&e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.remove(),e.$nextArrow&&e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.remove(),e.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")}
1,e.prototype.unslick=function(i){var e=this;e.$slider.trigger("unslick",[e,i]),e.destroy()},e.prototype.updateArrows=function(){var i=this;Math.floor(i.options.slidesToShow/2),!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&!i.options.infinite&&(i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===i.currentSlide?(i.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):i.currentSlide>=i.slideCount-i.options.slidesToShow&&!1===i.options.centerMode?(i.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):i.currentSlide>=i.slideCount-1&&!0===i.options.centerMode&&(i.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},e.prototype.updateDots=function(){var i=this;null!==i.$dots&&(i.$dots.find("li").removeClass("slick-active").end(),i.$dots.find("li").eq(Math.floor(i.currentSlide/i.options.slidesToScroll)).addClass("slick-active"))},e.prototype.visibility=function(){var i=this;i.options.autoplay&&(document[i.hidden]?i.interrupted=!0:i.interrupted=!1)},i.fn.slick=function(){var i,t,o=this,s=arguments[0],n=Array.prototype.slice.call(arguments,1),r=o.length;for(i=0;i<r;i++)if("object"==typeof s||void 0===s?o[i].slick=new e(o[i],s):t=o[i].slick[s].apply(o[i].slick,n),void 0!==t)return t;return o}}); 2$(document).ready(function() { 3 4 var BrowserDetect = { 5 init: function () { 6 this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; 7 this.version = this.searchVersion(navigator.userAgent) 8 || this.searchVersion(navigator.appVersion) 9 || "an unknown version"; 10 this.OS = this.searchString(this.dataOS) || "an unknown OS"; 11 }, 12 searchString: function (data) { 13 for (var i=0;i<data.length;i++) { 14 var dataString = data[i].string; 15 var dataProp = data[i].prop; 16 this.versionSearchString = data[i].versionSearch || data[i].identity; 17 if (dataString) { 18 if (dataString.indexOf(data[i].subString) != -1) 19 return data[i].identity; 20 } 21 else if (dataProp) 22 return data[i].identity; 23 } 24 }, 25 searchVersion: function (dataString) { 26 var index = dataString.indexOf(this.versionSearchString); 27 if (index == -1) return; 28 return parseFloat(dataString.substring(index+this.versionSearchString.length+1)); 29 }, 30 dataBrowser: [ 31 { 32 string: navigator.userAgent, 33 subString: "Chrome", 34 identity: "Chrome" 35 }, 36 { string: navigator.userAgent, 37 subString: "OmniWeb", 38 versionSearch: "OmniWeb/", 39 identity: "OmniWeb" 40 }, 41 { 42 string: navigator.vendor, 43 subString: "Apple", 44 identity: "Safari", 45 versionSearch: "Version" 46 }, 47 { 48 prop: window.opera, 49 identity: "Opera", 50 versionSearch: "Version" 51 }, 52 { 53 string: navigator.vendor, 54 subString: "iCab", 55 identity: "iCab" 56 }, 57 { 58 string: navigator.vendor, 59 subString: "KDE", 60 identity: "Konqueror" 61 }, 62 { 63 string: navigator.userAgent, 64 subString: "Firefox", 65 identity: "Firefox" 66 }, 67 { 68 string: navigator.vendor, 69 subString: "Camino", 70 identity: "Camino" 71 }, 72 { // for newer Netscapes (6+) 73 string: navigator.userAgent, 74 subString: "Netscape", 75 identity: "Netscape" 76 }, 77 {
78 string: navigator.userAgent, 79 subString: "MSIE", 80 identity: "Explorer", 81 versionSearch: "MSIE" 82 }, 83 { 84 string: navigator.userAgent, 85 subString: "Gecko", 86 identity: "Mozilla", 87 versionSearch: "rv" 88 }, 89 { // for older Netscapes (4-) 90 string: navigator.userAgent, 91 subString: "Mozilla", 92 identity: "Netscape", 93 versionSearch: "Mozilla" 94 } 95 ], 96 dataOS : [ 97 { 98 string: navigator.platform, 99 subString: "Win", 100 identity: "Windows" 101 }, 102 { 103 string: navigator.platform, 104 subString: "Mac", 105 identity: "Mac" 106 }, 107 { 108 string: navigator.userAgent, 109 subString: "iPhone", 110 identity: "iPhone/iPod" 111 }, 112 { 113 string: navigator.platform, 114 subString: "Linux", 115 identity: "Linux" 116 } 117 ] 118 119 }; 120 BrowserDetect.init(); 121 122 var msgTools = { 123 gererMsg: function (msg) { 124 var cookieName = "isoldnav"; 125 var cookieDoc = this.getCookie(cookieName); 126 if(cookieDoc == "false" ||!cookieDoc){ 127 var confirmed = confirm(msg); 128 this.setCookie(cookieName,confirmed); 129 } 130 }, 131 getCookie : function(sName) { 132 var oRegex = new RegExp("(?:; )?" + sName + "=([^;]*);?"); 133 if (oRegex.test(document.cookie)) { 134 return decodeURIComponent(RegExp["$1"]); 135 } else { 136 return false; 137 } 138 }, 139 setCookie : function(sName,values) { 140 document.cookie = sName + "=" + encodeURIComponent(values); 141 } 142 }; 143 144 var msg_browser_FR = "Le site web Bison Futé est optimisé pour les navigateurs suivants :\n- Internet Explorer 9 et +\n- Firefox 17 et +\n- Chrome 25 et +\n- Safari 5.1 et +\n\nDans votre configuration actuelle, vous pourriez rencontrer quelques dysfonctionnements."; 145 var msg_browser_EN = "The Bison Futé web site is optimized for the following browsers:\n- Internet Explorer 9 and +\n- Firefox 17 and +\n- Chrome 25 and +\n- Safari 5.1 and +\n\nIn your current configuration, you might encounter some failures"; 146 var msg_browser_ES = "El sitio web de Bison Futé está optimizado para los siguientes navegadores:\n- Internet Explorer 9 y +\n- Firefox 17 y +\n- Chrome 25 y +\n- Safari 5.1 y +\n\nEn su configuración actual, puede encontrarse con algunos fracasos."; 147 var lang = $("#current-lang").val(); 148 149 150 if((BrowserDetect.browser == "Explorer" && BrowserDetect.version < 9) || 151 (BrowserDetect.browser == "Firefox" && BrowserDetect.version < 17) || 152 (BrowserDetect.browser == "Safari" && BrowserDetect.version < 5.1) || 153 (BrowserDetect.browser == "Chrome" && BrowserDetect.version < 25)){ 154 155 if(lang == 'es'){msgTools.gererMsg(msg_browser_ES);} 156 else{if (lang == 'en'){msgTools.gererMsg(msg_browser_EN);} 157 else{msgTools.gererMsg(msg_browser_FR);}} 158 } 159 160});/********************** APPEL DES FONCTIONS ********************* 161***************************************************************** 162****************************************************************/ 163 164 165$(function(){ 166 if( $("#map_content").length > 0 ) { 167 //initialise la couleur du jour 168 mapSpace.setDayColor(0); 169 170 //initialise la map au chargement de la page 171 mapSpace.initMap(0); 172 173 //initialise les infos trafic a gauche 174 mapSpace.initInfoTraffic(0); 175 176 177 } 178 179 /************************ traduction ************************************/ 180 if(document.querySelectorAll('.not-trad').length >= 1){ 181 $('#block-info-trad').show(); 182 } 183 else{ 184 $('#block-info-trad').hide(); 185 } 186 187 //affiche des sous infos, documents 188 $(document).on( "click", ".infos, .alerte", function(){ 189 //on efface toutes les div infoscomplémentaires ouvertes 190 $(".expand").each( function(){ 191 $(this).remove(); 192 }); 193 194 var next = $(this).next(); 195 196 $(".cachee").each( function(){ 197 $(this).removeClass("show") 198 }); 199 200 if($(this).next().hasClass("cachee")){ 201 if(!$(this).next().hasClass("show")){ 202 203 $(this).next().addClass("show"); 204 var infosComplementaires; 205 206 //positionnement de l'info majeure 207 var positions = $(this).offset(); 208 var infosComplementaires = '<div class="expand" value="' + $(this).next().attr("value") + '" style="left: ' + positions.left + 'px;top: ' + positions.top + 'px"><div class="arrow_left"></div>' + $(this).next().html() + '<div class="fermer"></div></div>'; 209 var createdElement = $(infosComplementaires).appendTo("body"); 210 $(createdElement).css("top", positions.top - ($(createdElement).height() / 2)); 211 212 213 } 214 else{ 215 $(this).next().removeClass("show"); 216 var value = $(this).next().attr("value"); 217 $(".expand").each( function(){ 218 if( $(this).attr("value") == value){ 219 $(this).remove(); 220 } 221 }); 222 } 223 } 224 }); 225 226 $("#article").find(".spip_documents").each(function(){ 227 if($(this).hasClass("spip_documents_right")){ 228 $(this).removeAttr("style"); 229 $(this).attr("style","float:right"); 230 } 231 else if($(this).hasClass("spip_documents_left")){ 232 $(this).removeAttr("style"); 233 $(this).attr("style","float:left"); 234 } 235 else{ 236 $(this).removeAttr("style"); 237 } 238 239 });
240 //ferme les sous infos / documents 241 $(document).on("click", ".expand .fermer", function(){ 242 $(this).parent().remove(); 243 }); 244 245 //affiche ou ferme le block legende 246 $(".legende").each(function(){ 247 //DEBUT suppression legende conditions de conduite hivernale maintenant sur autres périodes 248 var periode=$("#periode").attr("value"); 249 if(periode=="maintenant"){ 250 $("#input-floconsMaintenant").closest("div.block_legende").css("display","block"); 251 }else{ 252 $("#input-floconsMaintenant").closest("div.block_legende").css("display","none"); 253 } 254 //FIN suppression legende conditions de conduite hivernale maintenant sur autres périodes 255 // gestion du clic sur le bouton legende de la carte trafic 256 $(this).children("a").click( function(event){ 257 if($(this).parent().children(".legende_content").hasClass("open")){ 258 $(".legende_content").removeClass("open"); 259 $("#clicklegendeTrafic").removeClass("open"); 260 $("#clicklegendeCCH").removeClass("open"); 261 $(".ouvrir-legende").removeClass("ouvrir-legendeSeleted"); 262 $(".ouvrir-legendeVH").removeClass("ouvrir-legendeVHSeleted"); 263 $(".ouvrir-legendeZfe").removeClass("ouvrir-legendeZfeSeleted"); 264 $(".ouvrir-legendeBouchons").removeClass("ouvrir-legendeBouchonsSeleted"); 265 266 $(".legende_content").slideUp(); 267 } 268 else{ 269 $(".legende_content").addClass("open"); 270 $("#clicklegendeTrafic").addClass("open"); 271 $("#clicklegendeCCH").addClass("open"); 272 $(".ouvrir-legende").addClass("ouvrir-legendeSeleted"); 273 $(".ouvrir-legendeVH").addClass("ouvrir-legendeVHSeleted"); 274 $(".ouvrir-legendeZfe").addClass("ouvrir-legendeZfeSeleted"); 275 $(".ouvrir-legendeBouchons").addClass("ouvrir-legendeBouchonsSeleted"); 276 277 $(".legende_content").slideDown(); 278 279 // la partie trafic ne s'affiche qu'aux 3 derniers niveaux de zoom 280 try { 281 if(m.getResolution() < bisonfute.MapConfig.resolutions[2]){ 282 $("#clicklegendeTrafic").slideDown(); 283 } 284 else {$("#clicklegendeTrafic").attr("style", "display: none !important"); } 285 } catch (e){ 286 //console.log("exception catchée pour les page ne possedant pas de map m."); 287 } 288 } 289 290 event.stopPropagation(); 291 }); 292 }); 293 294 $(".legendeFullScreen").each(function(){ 295 // gestion du clic sur le bouton legende en plein écran 296 $(this).children("a").click( function(event){ 297 if($(this).parent().children(".legende_content").hasClass("open")){ 298 $(".legende_content").removeClass("open"); 299 $("#clicklegendeTraficFull").removeClass("open"); 300 $("#clicklegendeCCH").removeClass("open"); 301 $(".ouvrir-legende").removeClass("ouvrir-legendeSeleted"); 302 $(".ouvrir-legendeVH").removeClass("ouvrir-legendeVHSeleted"); 303 $(".ouvrir-legendeZfe").removeClass("ouvrir-legendeZfeSeleted"); 304 305 $(".legende_content").slideUp(); 306 } 307 else{ 308 $(".legende_content").addClass("open"); 309 $("#clicklegendeTrafic").addClass("open"); 310 $("#clicklegendeCCH").addClass("open"); 311 $(".ouvrir-legende").addClass("ouvrir-legendeSeleted"); 312 $(".ouvrir-legendeVH").addClass("ouvrir-legendeVHSeleted"); 313 $(".ouvrir-legendeZfe").addClass("ouvrir-legendeZfeSeleted"); 314 315 $(".legende_content").slideDown(); 316 317 // la partie trafic ne s'affiche qu'aux 3 derniers niveaux de zoom 318 try { 319 if(m.getResolution() < bisonfute.MapConfig.resolutions[2]){ 320 $("#clicklegendeTraficFull").slideDown(); 321 } 322 else {$("#clicklegendeTraficFull").attr("style", "display: none !important"); } 323 } catch (e){ 324 //console.log("exception catchée pour les page ne possedant pas de map m."); 325 } 326 } 327 328 event.stopPropagation(); 329 }); 330 331 }); 332 333 // empêcher fermeture si clic dans la légende 334 $(".legende_content").click(function(event){ 335 event.stopPropagation(); 336 }); 337 338 $(".map").first().click(function() { 339 $(this).children(".legende_content") 340 .first() 341 .removeClass("open") 342 .slideUp(); 343 }); 344 345 346 347 //affiche ou ferme le block communiques 348 $(".communiques").each(function(){ 349 350 var communiqueClickFunction = function(event){ 351 // on ouvre les communiques si on a au moins 1 communique 352 if($("#nbCommuniques")[0].innerHTML != "0"){ 353 354 if($(this).parent().children(".communiques_content").first().hasClass("open")){ 355 $(this).parent().children(".communiques_content").first().removeClass("open"); 356 } 357 else{ 358 $(this).parent().children(".communiques_content").addClass("open"); 359 //lors du clic sur le bandeau alertes, on met à jour le cookie des alertes et on repasse le style en alertes consultees 360 appliquerStyleAlertesConsultees(false); 361 majListeCommuniques(false); 362 } 363 $(this).parent().children(".communiques_content").slideToggle(); 364 event.stopPropagation(); 365 } 366 }; 367 368 var communiqueVHClickFunction = function(event){ 369 // on ouvre les communiques si on a au moins 1 communique 370 if($("#nbCommuniquesVH" + (m.isFullsreen ? "_fullscreen": ""))[0].innerHTML != "0"){ 371 372 if($(this).parent().children(".communiques_content").first().hasClass("open")){ 373 $(this).parent().children(".communiques_content").first().removeClass("open"); 374 } 375 else{ 376 $(this).parent().children(".communiques_content").addClass("open"); 377 //lors du clic sur le bandeau alertes, on met à jour le cookie des alertes et on repasse le style en alertes consultees 378 appliquerStyleAlertesConsultees(true); 379 majListeCommuniques(true); 380 } 381 $(this).parent().children(".communiques_content").slideToggle(); 382 event.stopPropagation(); 383 } 384 }; 385 386 $(this).children(".titreCommunique").click(communiqueClickFunction ); 387 $(this).children(".titreCommuniqueVH").click(communiqueVHClickFunction ); 388 389 }); 390 391 //redirige vers la bonne page au select sur la page reglementation 392 $("select#zones").change( function(){ 393 window.location = $(this).val(); 394 }); 395 396 /************************ caroussel ************************************/ 397 /*bas*/ 398 $("#acceuil #colonne3 #conteneur_carousel > div").each( function(){ 399 $(this).css({top: ((($(this).index()) * 133)) , position:'absolute'}) 400 }); 401
402 //caroussel automatique 403 if($(".conseils").length > 0){ 404 triggerClickRight(); 405 } 406 //liens dans une nouvelle fenetre 407 $(document).on("click", "#traffic .liens_utiles a", function(){ 408 $(this).attr("target", "_blank"); 409 }) 410 411 // permet de gérer la fermeture de la légende si clic en dehors de la légende 412 window.addEventListener('click', function (e){ 413 if (((document.getElementById('clicklegende') != null) && (document.getElementById('clicklegende').contains(e.target) == false))){ 414 closeLegend(); 415 e.stopPropagation(); 416 } 417 if (((document.getElementById('clicklegendeFull') != null) && (document.getElementById('clicklegendeFull').contains(e.target) == false))){ 418 closeLegendFull(); 419 e.stopPropagation(); 420 } 421 if (((document.getElementById('blocAlertes') != null) && (document.getElementById('blocAlertes').contains(e.target) == false)) && !m.isFullsreen){ 422 closeCommuniques(); 423 e.stopPropagation(); 424 } 425 if (((document.getElementById('blocAlertesFullScreen') != null) && (document.getElementById('blocAlertesFullScreen').contains(e.target) == false)) && m.isFullsreen){ 426 closeCommuniques(); 427 e.stopPropagation(); 428 } 429 }); 430 431}); 432 433/**************** Récupération de la class des atributs pour les popups *************************************/ 434/************************************************************************************************************/ 435 436function selectAttribut(nomAttributs){ 437 var valeur; 438 var titre; 439 switch(nomAttributs){ 440 case "uniquement-jour" : 441 valeur = "uniquement-jour"; 442 titre = "uniquement jour"; 443 break; 444 case "uniquement-nuit" : 445 valeur = "uniquement-nuit"; 446 titre = "uniquement nuit"; 447 break; 448 case "wk-jours-feries" : 449 valeur = "wk-jours-feries"; 450 titre = "week-end et jours fériés"; 451 break; 452 case "hors-wk-jours-feries" : 453 valeur = "hors-wk-jours-feries"; 454 titre = "hors week-end et jours fériés"; 455 break; 456 case "poids-lourds" : 457 valeur = "truck"; 458 titre = "poids-lourds"; 459 break; 460 default : 461 valeur ="uniquement-jour"; 462 titre = "uniquement jour"; 463 break; 464 } 465 return [valeur,titre]; 466} 467/******************************** Récupérer les données tipi pour la popup alerte ********************************/ 468/****************************************************************************************************************/ 469function demandeFluxJsonPopup(urlAlerte, id, type){ 470 $.ajax({type:'GET', 471 url: urlAlerte, 472 cache: false, 473 dataType: 'json', 474 success: function(data){ 475 //En focntion du type on a un affichage différent 476 if(type == "alerte"){ 477 478 getContenuPopup(data[id]); 479 } 480 else{ 481 getContenuPopup(data); 482 } 483 //Gérer l'ouverture des liens dans un nouvel onglet 484 gestionOuvertureLiens($("#htmlContenuPopup")); 485 486 },error: function(){ 487 var langCur = $("#current-lang").val(); 488 if(langCur == 'es'){console.info("Impossible recuperar " + urlAlerte);} 489 else{ 490 if (langCur == 'en'){console.info("Failure at retrieving " + urlAlerte);} 491 else{console.info("impossible de récupérer " + urlAlerte);} 492 } 493 } 494 }); 495 496} 497 498/**************** Debut Gestion bandeau alerte communiques *************************************/ 499/************************************************************************************************************/ 500//fonction qui vérifie dans le cookie correspondant si des nouveaux communiques ont ete publies (mode VH ou trafic) 501function existeNouveauCommunique(modeVH){ 502 var listeCommuniquesConsultes = []; 503 504 var nomCookie; 505 if(modeVH) { 506 nomCookie = "alertesVH"; 507 } 508 else { 509 nomCookie = "alertesTrafic"; 510 } 511 var cookieCommuniques = bisonfute.geoloc.CookiesBrowser.INSTANCE.getCookie(nomCookie); 512 513 if (cookieCommuniques != false) { 514 listeCommuniquesConsultes = cookieCommuniques.split(','); 515 } 516 517 var listeCommuniquesZone = this.dataCommuniques; 518 if (listeCommuniquesZone != undefined){ 519 for (var i = 0; i < listeCommuniquesZone.length; ++i) { 520 if (!listeCommuniquesConsultes.includes(listeCommuniquesZone[i][7])) 521 return true; 522 } 523 } 524 return false; 525} 526 527//fonction qui met à jour la liste des communiques dans le cookie correspondant (mode VH ou trafic) 528function majListeCommuniques(modeVH){ 529 var listeCommuniquesConsultes = []; 530 var nomCookie; 531 if(modeVH) { 532 nomCookie = "alertesVH"; 533 } 534 else { 535 nomCookie = "alertesTrafic"; 536 } 537 538 var cookieCommuniques = bisonfute.geoloc.CookiesBrowser.INSTANCE.getCookie(nomCookie); 539 if (cookieCommuniques != false) { 540 listeCommuniquesConsultes = cookieCommuniques.split(','); 541 } 542 543 var listeCommuniquesZone = this.dataCommuniques; 544 if (listeCommuniquesZone != undefined){ 545 for (var i = 0; i < listeCommuniquesZone.length; ++i) { 546 if (!listeCommuniquesConsultes.includes(listeCommuniquesZone[i][7])){ 547 listeCommuniquesConsultes.push(listeCommuniquesZone[i][7]); 548 } 549 } 550 } 551 bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie(nomCookie, listeCommuniquesConsultes); 552} 553 554// prise en compte du style si des nouvelles alertes (communiques) existent 555function appliquerStyleNouvellesAlertes(modeVH){ 556 if (modeVH) 557 { 558 $("#nbCommuniquesVH").attr("class", "nouvellesAlertes"); 559 $("#nbCommuniquesVH_fullscreen").attr("class", "nouvellesAlertes"); 560 } 561 else 562 { 563 $("#nbCommuniques").attr("class", "nouvellesAlertes"); 564 //$(".titreCommunique").addClass("nouvellesAlertes"); 565 } 566} 567 568// prise en compte du style si les alertes (communiques) sont consultees 569function appliquerStyleAlertesConsultees(modeVH){ 570 if (modeVH) 571 { 572 $("#nbCommuniquesVH").removeClass("nouvellesAlertes"); 573 $("#nbCommuniquesVH_fullscreen").removeClass("nouvellesAlertes"); 574 } 575 else 576 { 577 $("#nbCommuniques").removeClass("nouvellesAlertes"); 578 //$(".titreCommunique").removeClass("nouvellesAlertes"); 579 } 580} 581/**************** Fin Gestion bandeau alerte communiques *************************************/ 582/************************************************************************************************************/ 583 584/** 585Auteur : Jérémy Latorre 586Date: 11/06/2013 587Description: 588 - Gestion de l'affichage des popins 589 - Gestion du comportement 590 591**/ 592 593var dossierImages = "../_images/"; 594 595function getLogoCameraBySource(gestionnaire) { 596 if (gestionnaire && gestionnaire.startsWith("DIR")) { 597 return "extensions/bisonfute/_images/LogoBisonfute_camera.png"; 598 } 599 return "extensions/bisonfute/_images/LogoAutoroutesTrafic_camera.png"; 600} 601 602/******************************** Mettre en forme les données récupérées en fonction de leur contenu ********************************/ 603/************************************************************************************************************************************/ 604function formatData(donneeCPC){ 605 606//Modele sans agregat avec 1 ou plusieurs elements 607 if(donneeCPC.length==1){ 608 popin = createVignetteSimple(donneeCPC); 609 } 610 611 //modele avec agregat 612 else 613 { 614 popin = createAgregat(donneeCPC); 615 } 616 617return popin; 618} 619 620/********************************************* Récupérer et lancer le formatage des données *****************************************/ 621/************************************************************************************************************************************/ 622function getHTMLPopInAsync ( features,callback) 623{ 624 let dataFeatures = []; 625 for (feature of features) { 626 $.ajax({type:'GET', 627 url: feature.get("urlcpc"), 628 dataType: 'json', 629 async: false, 630 success: function(data){ 631 dataFeatures.push(data); 632 },error: function(){ 633 console.log( "error"); 634 } 635 }); 636 } 637
638 var el = formatData(dataFeatures); 639 callback(el); 640} 641 642/************************* Clic sur un evenement, une camera *********************************************/ 643/***************************************************************************************************/ 644function creationPopup ( features,callback) 645{ 646 var el = createPopup(); 647 648 if (features.length > 1) { 649 el = getPopupAgregat (el, features); 650 } 651 else { 652 if(features[0].get("type") == "CAMERA") { 653 createPopupCamera(el, features[0]); 654 } 655 else if(features[0].get("type") != "FLOCON") { 656 $.ajax({type:'GET', 657 url: features[0].get("urlcpc"), 658 dataType: 'json', 659 async: false, 660 success: function(data){ 661 createPopupEvenementSimple(el, data); 662 663 },error: function(){ 664 console.log( "error"); 665 } 666 }); 667 } 668 } 669 callback(el); 670} 671 672/************************* Création de la popup agrégat *********************************************/ 673/***************************************************************************************************/ 674//function getPopupAgregat ( features,callback) 675function getPopupAgregat (el, features) 676{ 677 //var el = createPopup(); 678 for (feature of features) { 679 if(feature.get("type") == "CAMERA") { 680 ajouterCamera(el, feature); 681 } 682 else if(feature.get("type") == "FLOCON") { 683 ajouterFlocon(el, feature); 684 } 685 else { 686 $.ajax({type:'GET', 687 url: feature.get("urlcpc"), 688 dataType: 'json', 689 async: false, 690 success: function(data){ 691 ajouterEvenement(el, data); 692 693 },error: function(){ 694 console.log( "error"); 695 } 696 }); 697 } 698 } 699 //el = formatData(dataFeatures); 700 //callback(el); 701 return el; 702} 703 704/************************* Création de la popup agrégat *********************************************/ 705/***************************************************************************************************/ 706function createPopup(){ 707 var popin = document.createElement('div'); 708 popin.id = "popinTrafic"; 709 popin.className = "infobulle"; 710 711 return popin; 712} 713 714/**************************************** Ajout d'un evenement dans l'agregat *************************************/ 715/*****************************************************************************************************************/ 716function ajouterEvenement(popin, donneeCPC){ 717 718 //on créé la div de chaque evenement de l'agregat 719 var divEvenementAccordeon = document.createElement("div"); 720 721 // le picto correspondant 722 var divContenuEntete = document.createElement("div"); 723 divContenuEntete.className = "contenuEntetePopin"; 724 divContenuEntete.setAttribute("data-value", 0); 725 //Au clic sur l'entete, on déplie l'élément 726 divContenuEntete.onclick = function(){ 727 var elementclique = $(this).attr("data-value"); 728 $(this).next("div").slideToggle("normal"); 729 $(this).next("div").show(); 730 majSensFleches($(this).children(".conteneurFleche").children(".accordion-arrow")); 731 $(".contenuEntetePopin").each(function(){ 732 if($(this).attr("data-value") != elementclique){ 733 $(this).next("div").slideUp("normal"); 734 $(this).children(".conteneurFleche").children(".accordion-arrow").removeClass("open"); 735 $(this).children(".conteneurFleche").children(".accordion-arrow").addClass("close"); 736 } 737 }); 738 }; 739 740 //Création de la grosse flèche à gauche de l'element 741 var divConteneurPictoFleche = document.createElement("div"); 742 divConteneurPictoFleche.className = "conteneurFleche"; 743 var pictoFleche = document.createElement("div"); 744 //Tous les éléments sont repliés 745 pictoFleche.className = "accordion-arrow close flecheGeneralePopin"; 746 divConteneurPictoFleche.appendChild(pictoFleche); 747 divContenuEntete.appendChild(divConteneurPictoFleche); 748 var divImgPicto = document.createElement("div"); 749 divImgPicto.className = "divPicto"; 750 var imgPicto = document.createElement("span"); 751 imgPicto.className = "pictoEvt"; 752 //On adapte le pictogramme à l'évenement 753 754 // <!> NE PAS SUPPRIMER - inhiber dans evol/16456 - attente re tour MOA <!> 755 // imgPicto.className = donneeCPC[0][5] === "PREVISIONNEL" ? donneeCPC[0][1] + "_prevision" : donneeCPC[0][1]; 756 // imgPicto.title = donneeCPC[0][5] === "PREVISIONNEL" ? donneeCPC[0][1] + "_prevision" : donneeCPC[0][1]; 757 // <!> NE PAS SUPPRIMER - inhiber dans evol/16456 - attente re tour MOA <!> 758 759 imgPicto.className = donneeCPC[0][1]; 760 imgPicto.title = donneeCPC[0][1]; 761 762 divImgPicto.appendChild(imgPicto); 763 divContenuEntete.appendChild(divImgPicto); 764 //insertion titre 765 var divTitreAttribut = document.createElement("div"); 766 divTitreAttribut.className = "titreAttributs"; 767 var titre = document.createElement('h3'); 768 titre.className = 'bf-popin-title titre'; 769 var texteTitre = document.createTextNode(donneeCPC[0][0]); 770 titre.appendChild(texteTitre); 771 titre.title = donneeCPC[0][0]; 772 divTitreAttribut.appendChild(titre); 773 774 //On ajoute les attributs 775 776 var divAttribut = document.createElement("div"); 777 divAttribut.className = "attributs"; 778 var tabAttribut = donneeCPC[0][2]; 779 780 for(var i = 0; i < 3; i++){ 781 var tabResult = selectAttribut(tabAttribut[i]); 782 if(typeof(tabAttribut[i]) != 'undefined'){ 783 var imgAttribut = document.createElement("span"); 784 //On affiche les attibuts correspondants 785 imgAttribut.className = tabResult[0]; 786 imgAttribut.title = tabResult[1]; 787 788 divAttribut.appendChild(imgAttribut); 789 } 790 } 791 divTitreAttribut.appendChild(divAttribut); 792 //S'il y'a des pièces jointes on les affiches 793 if(donneeCPC[0].length == 7) 794 divTitreAttribut.appendChild(createPJ(donneeCPC[0][6])); 795 796 divContenuEntete.appendChild(divTitreAttribut); 797 divEvenementAccordeon.appendChild(divContenuEntete); 798 var tableauContenu = donneeCPC[0][3]; 799 //On calcul le nombre d'élément à afficher 800 nbElement = tableauContenu.length/2; 801 802 var divContenu = document.createElement("div"); 803 divContenu.className = "contenuPopup"; 804 805 //Ajout du paragraphe commentaire si présent 806 var com = donneeCPC[0][4]; 807 if(com !=""){ 808 divContenu.appendChild(createCommentaire(com)); 809 } 810 //pour chaque element 811 for(var i = 0; i < tableauContenu.length; i = i+2){ 812 var element= document.createElement("div"); 813 element.className = "unElement"; 814 var divVideArrow = document.createElement("div"); 815
816 817 var objetDepeche = document.createElement("div"); 818 objetDepeche.className = "titreElement"; 819 //On ajoute le contenu HTML du titre 820 objetDepeche.innerHTML = tableauContenu[i]; 821 objetDepeche.appendChild(divVideArrow); 822 objetDepeche.onclick = function(){ 823 $(this).parent().children(".unContenu").slideToggle("slow"); 824 majSensFleches($(this).children(".accordion-arrow")); 825 } 826 827 element.appendChild(objetDepeche); 828 829 var contenu = document.createElement("div"); 830 contenu.className = "unContenu"; 831 // contenu.id ="contenuElement"+j; 832 833 //On ajoute le contenu HTML 834 var content = tableauContenu[i+1]; 835 //Correction du bug d'afficahge sous firefox 836 var tmp = content.replace(/<br\/>/g, '<div></div>'); 837 contenu.innerHTML =tmp; 838 839 element.appendChild(contenu); 840 841 if(i>0){ 842 divVideArrow.className = "accordion-arrow close"; 843 $(contenu).hide(); 844 } 845 else{ 846 divVideArrow.className = "accordion-arrow open"; 847 } 848 divContenu.appendChild(element); 849 850 } 851 $(divContenu).hide(); 852 853 divEvenementAccordeon.appendChild(divContenu); 854 popin.appendChild(divEvenementAccordeon); 855 856} 857 858 859/************************* Ajout d'une camera dans l'agregat *********************************************/ 860/*********************************************************************************************************/ 861function ajouterCamera(popin, donneesCamera){ 862 863 //on créé la div de chaque camera de l'agregat 864 var divCameraAccordeon = document.createElement("div"); 865 866 // le picto correspondant 867 var divContenuEntete = document.createElement("div"); 868 divContenuEntete.className = "contenuEntetePopin"; 869 divContenuEntete.setAttribute("data-value", 0); 870 //Au clic sur l'entete, on déplie l'élément (si le flux de la caméra est ok) 871 if (donneesCamera.get("fluxCameraOk")) 872 { 873 divContenuEntete.onclick = function(){ 874 var elementclique = $(this).attr("data-value"); 875 $(this).next("div").slideToggle("normal"); 876 $(this).next("div").show(); 877 majSensFleches($(this).children(".conteneurFleche").children(".accordion-arrow")); 878 $(".contenuEntetePopin").each(function(){ 879 if($(this).attr("data-value") != elementclique){ 880 $(this).next("div").slideUp("normal"); 881 $(this).children(".conteneurFleche").children(".accordion-arrow").removeClass("open"); 882 $(this).children(".conteneurFleche").children(".accordion-arrow").addClass("close"); 883 } 884 }); 885 }; 886 } 887 888 //Création de la grosse flèche à gauche de l'element 889 var divConteneurPictoFleche = document.createElement("div"); 890 divConteneurPictoFleche.className = "conteneurFleche"; 891 var pictoFleche = document.createElement("div"); 892 var imgPicto = document.createElement("span"); 893 894 //Tous les éléments sont repliés 895 pictoFleche.className = "accordion-arrow close flecheGeneralePopin"; 896 //si le flux de la camera n'est pas ok, la ligne n'est pas clicable (pas de fleche et icone cameraKO) 897 if (donneesCamera.get("fluxCameraOk")) 898 { 899 divConteneurPictoFleche.appendChild(pictoFleche); 900 imgPicto.className = "camera"; 901 } 902 else { 903 imgPicto.className = "cameraKO" 904 } 905 906 divContenuEntete.appendChild(divConteneurPictoFleche); 907 var divImgPicto = document.createElement("div"); 908 divImgPicto.className = "divPicto"; 909 910 var libelleAffichageCamera = donneesCamera.get("libelleCamera").replace(/ /g, " "); 911 imgPicto.title = libelleAffichageCamera; 912 913 divImgPicto.appendChild(imgPicto); 914 divContenuEntete.appendChild(divImgPicto); 915 916 //insertion titre 917 var divTitreAttribut = document.createElement("div"); 918 divTitreAttribut.className = "titreAttributs"; 919 var titre = document.createElement('h3'); 920 titre.className = 'bf-popin-title titre'; 921 var texteTitre = document.createTextNode(libelleAffichageCamera); 922 titre.appendChild(texteTitre); 923 titre.title = libelleAffichageCamera; 924 divTitreAttribut.appendChild(titre); 925 926 divContenuEntete.appendChild(divTitreAttribut); 927 divCameraAccordeon.appendChild(divContenuEntete); 928 929 // ajout du contenu de la caméra 930 var divContenu = document.createElement("div"); 931 divContenu.className = "contenuPopupCamera"; 932 divContenu.style="padding-left:8px;height:190px;text-align:left;"; 933 934 if (donneesCamera.get("typeFlux") == "IMAGE") { 935 var imageCamera = document.createElement("img"); 936 imageCamera.src= donneesCamera.get("sourceFlux") + "?" + Math.random(); 937 imageCamera.className="imageCamera"; 938 imageCamera.setAttribute("refreshtime",donneesCamera.get("delaiRafraichissement")); 939 imageCamera.width="268"; 940 imageCamera.height="160"; 941 divContenu.appendChild(imageCamera); 942 } 943 else { 944 var imageCamera = document.createElement("video"); 945 imageCamera.src= donneesCamera.get("sourceFlux") + "?" + Math.random(); 946 imageCamera.className="imageCamera"; 947 imageCamera.setAttribute("refreshtime",donneesCamera.get("delaiRafraichissement"));
948 //imageCamera.type="video/mp4"; // pas utile apparemment 949 imageCamera.setAttribute("autoplay","true"); 950 imageCamera.setAttribute("loop","true"); 951 imageCamera.setAttribute("controls", "true"); 952 imageCamera.width="268"; 953 imageCamera.height="160"; 954 divContenu.appendChild(imageCamera); 955 } 956 957 var contenu = document.createElement("div"); 958 contenu.className = "unContenuCamera"; 959 var logoCamera = document.createElement("img"); 960 var srcLogo =getLogoCameraBySource(donneesCamera.get("gestionnaire")); 961 logoCamera.src = srcLogo; 962 //logoCamera.style="position:relative;width:71px;height:41px;bottom:22px;"; 963 logoCamera.className = "logoCameraAgregat"; 964 if (srcLogo.indexOf("LogoBisonfute_camera.png") !== -1) { 965 logoCamera.style.bottom = "-1px"; 966 logoCamera.style.height = "34px"; 967 } 968 contenu.appendChild(logoCamera); 969 var sourceCamera = document.createElement("h3"); 970 var texteSourceCamera = document.createTextNode("Source : " + donneesCamera.get("gestionnaire")); 971 sourceCamera.appendChild(texteSourceCamera); 972 //sourceCamera.style="position:relative;width:187px;bottom:42px;right:-78px;text-align:right;font-size:12px"; 973 sourceCamera.className = "sourceCameraAgregat"; 974 975 contenu.appendChild(sourceCamera); 976 divContenu.appendChild(contenu); 977 978 $(divContenu).hide(); 979 980 divCameraAccordeon.appendChild(divContenu); 981 popin.appendChild(divCameraAccordeon); 982 983} 984 985/************************* Ajout d'un flocon dans l'agregat *********************************************/ 986/*********************************************************************************************************/ 987function ajouterFlocon(popin, donneesFlocon){ 988 989 //on créé la div de chaque camera de l'agregat 990 var divFloconAccordeon = document.createElement("div"); 991 992 // le picto correspondant 993 var divContenuEntete = document.createElement("div"); 994 divContenuEntete.className = "contenuEntetePopin"; 995 divContenuEntete.setAttribute("data-value", 0); 996 997 //Création de la grosse flèche à gauche de l'element 998 var divConteneurPictoFleche = document.createElement("div"); 999 var lienImg = document.createElement("a"); 1000 lienImg.href= bisonfute.urls.INSTANCE.getUrlWithLanguage("zoomhiver"); 1001 //lienImg.className = "lienFlocon"; 1002 var imgLienInterne = document.createElement("span"); 1003 imgLienInterne.className = "lienInterne"; 1004 lienImg.appendChild(imgLienInterne); 1005 divConteneurPictoFleche.appendChild(lienImg); 1006 var pictoFleche = document.createElement("div"); 1007 var lienPicto = document.createElement("a"); 1008 lienPicto.href= bisonfute.urls.INSTANCE.getUrlWithLanguage("zoomhiver"); 1009 var imgPicto = document.createElement("span"); 1010 1011 //Tous les éléments sont repliés 1012 pictoFleche.className = "accordion-arrow close flecheGeneralePopin"; 1013 imgPicto.className = donneesFlocon.get("CCH") + (document.modeDaltonien ? "-daltonien" : ""); 1014 1015 divContenuEntete.appendChild(divConteneurPictoFleche); 1016 var divImgPicto = document.createElement("div"); 1017 divImgPicto.className = "divPicto"; 1018 1019 var libelleAffichageFlocon = donneesFlocon.get("description").replace(/ /g, " "); 1020 imgPicto.title = libelleAffichageFlocon; 1021 1022 lienPicto.appendChild(imgPicto); 1023 divImgPicto.appendChild(lienPicto); 1024 //divImgPicto.appendChild(imgPicto); 1025 divContenuEntete.appendChild(divImgPicto); 1026 1027 //insertion titre 1028 var divTitreAttribut = document.createElement("div"); 1029 divTitreAttribut.className = "titreAttributs"; 1030 var lienFlocon = document.createElement("a"); 1031 lienFlocon.href= bisonfute.urls.INSTANCE.getUrlWithLanguage("zoomhiver"); 1032 lienFlocon.className = "lienFlocon"; 1033 var titre = document.createElement('h3'); 1034 titre.className = 'bf-popin-title titre'; 1035 var texteTitre = document.createTextNode(libelleAffichageFlocon); 1036 titre.appendChild(texteTitre); 1037 titre.title = libelleAffichageFlocon; 1038 lienFlocon.appendChild(titre); 1039 divTitreAttribut.appendChild(lienFlocon); 1040 1041 divContenuEntete.appendChild(divTitreAttribut); 1042 divFloconAccordeon.appendChild(divContenuEntete); 1043 1044 popin.appendChild(divFloconAccordeon); 1045 1046} 1047 1048 1049/********************* Création de la popup pour un seul evenement *******************************/ 1050/*************************************************************************************************/ 1051function createPopupEvenementSimple(popin, donneeCPC){ 1052 popin.className = "infobulle"; 1053 1054 //Création de l'entete 1055 var divContenuEntete = document.createElement("div"); 1056 divContenuEntete.className = "contenuEntetePopin"; 1057 var divTitreEntete = document.createElement("div"); 1058 divTitreEntete.className = "divPictoSimple"; 1059 //On adapte le pictogramme à l'évenement 1060 var imgPicto = document.createElement("span"); 1061 imgPicto.className = donneeCPC[0][5] === "PREVISIONNEL" ? donneeCPC[0][1] + "_prevision marginIconeTitre" : donneeCPC[0][1] + " marginIconeTitre"; 1062 imgPicto.title = donneeCPC[0][5] === "PREVISIONNEL" ? donneeCPC[0][1] + "_prevision" :donneeCPC[0][1]; 1063 divTitreEntete.appendChild(imgPicto); 1064 1065 //var divBlocTitre = document.createElement("div"); 1066 1067 //var divContenuTitre = document.createElement("div"); 1068 //divContenuTitre.className = "contenuEntetePopin popup-simple-carto"; 1069 1070 var divTitreAttribut = document.createElement("div"); 1071 divTitreAttribut.className = "titreAttributs"; 1072 1073 1074 var titre = document.createElement('h3'); 1075 titre.className = 'bf-popin-title titre'; 1076 var titreRegroupement = donneeCPC[0][0] ; 1077 1078 var texte = document.createTextNode(titreRegroupement); 1079 titre.appendChild(texte); 1080 divTitreAttribut.appendChild(titre); 1081 1082 //On ajoute les attributs dans un maximum de 3 1083 var tabAttribut = donneeCPC[0][2]; 1084 if((tabAttribut != undefined) && tabAttribut.length > 0){ 1085 var divAttribut = document.createElement("div"); 1086 divAttribut.className = "attributs"; 1087 for(var i = 0; i < 3; i++){ 1088 var tabResult = selectAttribut(tabAttribut[i]); 1089 if(typeof(tabAttribut[i])!= 'undefined'){ 1090 var imgAttribut = document.createElement("span"); 1091 imgAttribut.className = tabResult[0]; 1092 imgAttribut.title = tabResult[1]; 1093 divAttribut.appendChild(imgAttribut); 1094 } 1095 } 1096 divTitreAttribut.appendChild(divAttribut); 1097 } 1098 1099 //On ajoute la piece jointe si elle est présente 1100 if(donneeCPC[0].length == 7){ 1101 divTitreAttribut.appendChild(createPJ(donneeCPC[0][6])); 1102 } 1103 //divContenuTitre.appendChild(divTitreAttribut); 1104 //divTitreEntete.appendChild(divContenuTitre); 1105 divContenuEntete.appendChild(divTitreEntete); 1106 divContenuEntete.appendChild(divTitreAttribut); 1107 popin.appendChild(divContenuEntete); 1108 1109 //on met en forme le contenu ( commentaire, lien , contenu) 1110 var tableauContenu = donneeCPC[0][3]; 1111 var nbElement = tableauContenu.length/2; 1112 var divContenu = document.createElement("div"); 1113 divContenu.className = "contenuPopup"; 1114 1115 //S'il y'a des commentaires, alors on les ajoute 1116 var leCommentaire = donneeCPC[0][4]; 1117 if(leCommentaire !=""){ 1118 var commentaires = createCommentaire(leCommentaire); 1119 divContenu.appendChild(commentaires); 1120 } 1121 1122 //Ensuite on peut afficher tous les éléments du flux 1123 for(var i = 0; i < tableauContenu.length; i = i+2){ 1124 //pour chaque element 1125 var element= document.createElement("div"); 1126 element.className = "unElement"; 1127 var divVideArrow = document.createElement("div"); 1128 var objetDepeche = document.createElement("div"); 1129 objetDepeche.className = "titreElement"; 1130 objetDepeche.innerHTML = tableauContenu[i]; 1131 objetDepeche.appendChild(divVideArrow); 1132 //S'il y'a plusieurs éléments on rajoute la fonction pour déplier l'accordéon 1133 if(nbElement>0){ 1134 objetDepeche.onclick = function(){ 1135 $(this).parent().children(".unContenu").slideToggle("slow"); 1136 //On met à jour le sens des flèches 1137 majSensFleches($(this).children(".accordion-arrow")); 1138 } 1139 } 1140 element.appendChild(objetDepeche); 1141 var contenu = document.createElement("div"); 1142 //S'il n'y a qu'un seul element alors on a une mise en page différentes 1143 if(nbElement == 1){ 1144 contenu.className = "unContenuSimple"; 1145 } 1146 else{ 1147 contenu.className = "unContenu"; 1148 } 1149 // contenu.id ="contenuElement"+i; 1150 1151 //Correction bug d'affichage sous firefox 1152 var content = tableauContenu[i+1]; 1153 var tmp = content.replace(/<br\/>/g, '<div></div>'); 1154 contenu.innerHTML =tmp; 1155 1156 1157 element.appendChild(contenu); 1158 1159 //Dans le cas de plusieurs éléments, on ajoute des flèches devant le titre de chacun 1160 if(nbElement > 1){ 1161 //On replie tous les éléments 1162 if(i > 0){ 1163 divVideArrow.className = "accordion-arrow close"; 1164 $(contenu).css("display","none"); 1165 } 1166 //On laisse le premier element ouvert 1167 else{ 1168 divVideArrow.className = "accordion-arrow open"; 1169 } 1170 } 1171 1172 divContenu.appendChild(element); 1173 } 1174 popin.appendChild(divContenu); 1175 return popin; 1176} 1177 1178/************************* Création de la popup caméra simple *********************************************/ 1179/**************************** Une seule caméra dans la popup ********************************************/ 1180function createPopupCamera(popin, donneesCamera){ 1181 //On créé la popin 1182 popin.style="overflow-y:hidden"; 1183 1184 //Création de l'entete 1185 var divContenuEntete = document.createElement("div"); 1186 divContenuEntete.className = "contenuEntetePopin popup-simple-carto"; 1187 var divTitreAttribut = document.createElement("div"); 1188 divTitreAttribut.className = "titreAttributsSimple"; 1189 var titre = document.createElement('h3'); 1190 titre.className = 'titreEvenement'; 1191 var libelleCamera = donneesCamera.get("libelleCamera").replace(/ /g, " "); 1192 1193 var texteLibelleCamera = document.createTextNode(libelleCamera); 1194 titre.appendChild(texteLibelleCamera); 1195 divTitreAttribut.appendChild(titre); 1196 divContenuEntete.appendChild(divTitreAttribut); 1197 1198 popin.appendChild(divContenuEntete); 1199 1200 //on met en forme le contenu (caméra) 1201 var divContenu = document.createElement("div"); 1202 divContenu.className = "contenuPopupCamera"; 1203 divContenu.style="padding-left:8px;text-align:left;";
1204 1205 if (donneesCamera.get("typeFlux") == "IMAGE") { 1206 var imageCamera = document.createElement("img"); 1207 imageCamera.src= donneesCamera.get("sourceFlux") + "?" + Math.random(); 1208 imageCamera.className="imageCamera"; 1209 imageCamera.setAttribute("refreshtime",donneesCamera.get("delaiRafraichissement")); 1210 imageCamera.width="268"; 1211 imageCamera.height="160"; 1212 divContenu.appendChild(imageCamera); 1213 } 1214 else { 1215 var imageCamera = document.createElement("video"); 1216 imageCamera.src= donneesCamera.get("sourceFlux") + "?" + Math.random(); 1217 imageCamera.className="imageCamera"; 1218 imageCamera.setAttribute("refreshtime",donneesCamera.get("delaiRafraichissement")); 1219 //imageCamera.type="video/mp4"; 1220 imageCamera.setAttribute("autoplay","true"); 1221 imageCamera.setAttribute("loop","true"); 1222 imageCamera.setAttribute("controls", "true"); 1223 imageCamera.width="268"; 1224 imageCamera.height="160"; 1225 divContenu.appendChild(imageCamera); 1226 } 1227 1228 var contenu = document.createElement("div"); 1229 contenu.className = "unContenuCamera"; 1230 var logoCamera = document.createElement("img"); 1231 var srcLogo =getLogoCameraBySource(donneesCamera.get("gestionnaire")); 1232 logoCamera.src = srcLogo; 1233 //logoCamera.style="position:relative;width:71px;height:41px;bottom:22px;"; 1234 logoCamera.className = "logoCameraAgregat"; 1235 if (srcLogo.indexOf("LogoBisonfute_camera.png") !== -1) { 1236 logoCamera.style.bottom = "-1px"; 1237 logoCamera.style.height = "34px"; 1238 } 1239 contenu.appendChild(logoCamera); 1240 var sourceCamera = document.createElement("h3"); 1241 var texteSourceCamera = document.createTextNode("Source : " + donneesCamera.get("gestionnaire")); 1242 sourceCamera.appendChild(texteSourceCamera); 1243 //sourceCamera.style="position:relative;width:187px;bottom:42px;right:-78px;text-align:right;font-size:12px"; 1244 sourceCamera.className = "sourceCameraAgregat"; 1245 1246 contenu.appendChild(sourceCamera); 1247 divContenu.appendChild(contenu); 1248 1249 popin.appendChild(divContenu); 1250 1251 return popin; 1252} 1253 1254/**************************************** Gestion des flèches (déplier / replier ) **************************************************/ 1255/************************************************************************************************************************************/ 1256function majSensFleches(div){ 1257 if(div.hasClass("open")){ 1258 div.removeClass("open"); 1259 div.addClass("close"); 1260 } 1261 else{ 1262 div.removeClass("close"); 1263 div.addClass("open"); 1264 } 1265} 1266 1267 1268/******************************************* Création du modèle vignettes simple *********************************************/ 1269/******************************************** Un seul type d'évenement *****************************************************/ 1270 1271function createVignetteSimple(donneeCPC){ 1272 //On créé la popin 1273 var popin = document.createElement('div'); 1274 popin.id = "popinTrafic"; 1275 popin.className = "infobulle"; 1276 1277 //Création de l'entete 1278 var divContenuEntete = document.createElement("div"); 1279 divContenuEntete.className = "contenuEntetePopin"; 1280 var divTitreEntete = document.createElement("div"); 1281 divTitreEntete.className = "divPictoSimple"; 1282 //On adapte le pictogramme à l'évenement 1283 var imgPicto = document.createElement("span"); 1284 imgPicto.className = donneeCPC[0][0][5] === "PREVISIONNEL" ? donneeCPC[0][0][1] + "_prevision marginIconeTitre" : donneeCPC[0][0][1] + " marginIconeTitre"; 1285 imgPicto.title = donneeCPC[0][0][5] === "PREVISIONNEL" ? donneeCPC[0][0][1] + "_prevision marginIconeTitre" : donneeCPC[0][0][1]; 1286 divTitreEntete.appendChild(imgPicto); 1287 1288 //var divBlocTitre = document.createElement("div"); 1289 1290 //var divContenuTitre = document.createElement("div"); 1291 //divContenuTitre.className = "contenuEntetePopin popup-simple-carto"; 1292 1293 var divTitreAttribut = document.createElement("div"); 1294 divTitreAttribut.className = "titreAttributs"; 1295 1296 1297 var titre = document.createElement('h3'); 1298 titre.className = 'bf-popin-title titre'; 1299 var titreRegroupement = donneeCPC[0][0][0] ; 1300 1301 var texte = document.createTextNode(titreRegroupement); 1302 titre.appendChild(texte); 1303 divTitreAttribut.appendChild(titre); 1304 1305 //On ajoute les attributs dans un maximum de 3 1306 var tabAttribut = donneeCPC[0][0][2]; 1307 if((tabAttribut != undefined) && tabAttribut.length > 0){ 1308 var divAttribut = document.createElement("div"); 1309 divAttribut.className = "attributs"; 1310 for(var i = 0; i < 3; i++){ 1311 var tabResult = selectAttribut(tabAttribut[i]); 1312 if(typeof(tabAttribut[i])!= 'undefined'){ 1313 var imgAttribut = document.createElement("span"); 1314 imgAttribut.className = tabResult[0]; 1315 imgAttribut.title = tabResult[1]; 1316 divAttribut.appendChild(imgAttribut); 1317 } 1318 } 1319 divTitreAttribut.appendChild(divAttribut); 1320 } 1321 1322 //On ajoute la piece jointe si elle est présente 1323 if(donneeCPC[0][0].length == 6){ 1324 divTitreAttribut.appendChild(createPJ(donneeCPC[0][0][5])); 1325 } 1326 //divContenuTitre.appendChild(divTitreAttribut); 1327 //divTitreEntete.appendChild(divContenuTitre); 1328 divContenuEntete.appendChild(divTitreEntete); 1329 divContenuEntete.appendChild(divTitreAttribut); 1330 popin.appendChild(divContenuEntete); 1331 1332 //on met en forme le contenu ( commentaire, lien , contenu) 1333 var tableauContenu = donneeCPC[0][0][3]; 1334 var nbElement = tableauContenu.length/2; 1335 var divContenu = document.createElement("div"); 1336 divContenu.className = "contenuPopup"; 1337 1338 //S'il y'a des commentaires, alors on les ajoute 1339 var leCommentaire = donneeCPC[0][0][4]; 1340 if(leCommentaire !=""){ 1341 var commentaires = createCommentaire(leCommentaire); 1342 divContenu.appendChild(commentaires); 1343 } 1344 1345 //Ensuite on peut afficher tous les éléments du flux 1346 for(var i = 0; i < tableauContenu.length; i = i+2){ 1347 //pour chaque element 1348 var element= document.createElement("div"); 1349 element.className = "unElement"; 1350 var divVideArrow = document.createElement("div"); 1351 var objetDepeche = document.createElement("div"); 1352 objetDepeche.className = "titreElement"; 1353 objetDepeche.innerHTML = tableauContenu[i]; 1354 objetDepeche.appendChild(divVideArrow); 1355 //S'il y'a plusieurs éléments on rajoute la fonction pour déplier l'accordéon 1356 if(nbElement>0){ 1357 objetDepeche.onclick = function(){ 1358 $(this).parent().children(".unContenu").slideToggle("slow"); 1359 //On met à jour le sens des flèches 1360 majSensFleches($(this).children(".accordion-arrow")); 1361 } 1362 } 1363 element.appendChild(objetDepeche); 1364 var contenu = document.createElement("div"); 1365 //S'il n'y a qu'un seul element alors on a une mise en page différentes 1366 if(nbElement == 1){ 1367 contenu.className = "unContenuSimple"; 1368 } 1369 else{ 1370 contenu.className = "unContenu"; 1371 } 1372 // contenu.id ="contenuElement"+i; 1373 1374 //Correction bug d'affichage sous firefox 1375 var content = tableauContenu[i+1]; 1376 var tmp = content.replace(/<br\/>/g, '<div></div>'); 1377 contenu.innerHTML =tmp; 1378 1379 1380 element.appendChild(contenu); 1381 1382 //Dans le cas de plusieurs éléments, on ajoute des flèches devant le titre de chacun 1383 if(nbElement > 1){ 1384 //On replie tous les éléments 1385 if(i > 0){ 1386 divVideArrow.className = "accordion-arrow close"; 1387 $(contenu).css("display","none"); 1388 } 1389 //On laisse le premier element ouvert 1390 else{ 1391 divVideArrow.className = "accordion-arrow open"; 1392 } 1393 } 1394 1395 divContenu.appendChild(element); 1396 } 1397 popin.appendChild(divContenu); 1398 return popin; 1399} 1400/******************************************* Création du modèle agrégat ******************************************/ 1401/*****************************************************************************************************************/ 1402function createAgregat(donneeCPC){ 1403 var popin = document.createElement('div'); 1404 popin.id = "popinTrafic"; 1405 popin.className = "infobulle"; 1406 1407//Pour chaque evenement 1408 for(var j = 0; j < donneeCPC.length; j++){ 1409 1410 //on créé la div de chaque evenement de l'agregat 1411 var divEvenementAccordeon = document.createElement("div"); 1412 1413 // le picto correspondant 1414 var divContenuEntete = document.createElement("div"); 1415 divContenuEntete.className = "contenuEntetePopin"; 1416 divContenuEntete.setAttribute("data-value", j); 1417 //Au clic sur l'entete, on déplie l'élément 1418 divContenuEntete.onclick = function(){ 1419 var elementclique = $(this).attr("data-value"); 1420 $(this).next("div").slideToggle("normal"); 1421 $(this).next("div").show(); 1422 majSensFleches($(this).children(".conteneurFleche").children(".accordion-arrow")); 1423 $(".contenuEntetePopin").each(function(){ 1424 if($(this).attr("data-value") != elementclique){ 1425 $(this).next("div").slideUp("normal"); 1426 $(this).children(".conteneurFleche").children(".accordion-arrow").removeClass("open"); 1427 $(this).children(".conteneurFleche").children(".accordion-arrow").addClass("close"); 1428 } 1429 }); 1430 }; 1431
1432 //Création de la grosse flèche à gauche de l'element 1433 var divConteneurPictoFleche = document.createElement("div"); 1434 divConteneurPictoFleche.className = "conteneurFleche"; 1435 var pictoFleche = document.createElement("div"); 1436 //Tous les éléments sont repliés 1437 pictoFleche.className = "accordion-arrow close flecheGeneralePopin"; 1438 divConteneurPictoFleche.appendChild(pictoFleche); 1439 divContenuEntete.appendChild(divConteneurPictoFleche); 1440 var divImgPicto = document.createElement("div"); 1441 divImgPicto.className = "divPicto"; 1442 var imgPicto = document.createElement("span"); 1443 imgPicto.className = "pictoEvt"; 1444 //On adapte le pictogramme à l'évenement 1445 imgPicto.className = donneeCPC[j][0][1]; 1446 imgPicto.title = donneeCPC[j][0][1]; 1447 1448 divImgPicto.appendChild(imgPicto); 1449 divContenuEntete.appendChild(divImgPicto); 1450 //insertion titre 1451 var divTitreAttribut = document.createElement("div"); 1452 divTitreAttribut.className = "titreAttributs"; 1453 var titre = document.createElement('h3'); 1454 titre.className = 'bf-popin-title titre'; 1455 var texteTitre = document.createTextNode(donneeCPC[j][0][0]); 1456 titre.appendChild(texteTitre); 1457 titre.title = donneeCPC[j][0][0]; 1458 divTitreAttribut.appendChild(titre); 1459 1460 //On ajoute les attributs 1461 1462 var divAttribut = document.createElement("div"); 1463 divAttribut.className = "attributs"; 1464 var tabAttribut = donneeCPC[j][0][2]; 1465 1466 for(var i = 0; i < 3; i++){ 1467 var tabResult = selectAttribut(tabAttribut[i]); 1468 if(typeof(tabAttribut[i]) != 'undefined'){ 1469 var imgAttribut = document.createElement("span"); 1470 //On affiche les attibuts correspondants 1471 imgAttribut.className = tabResult[0]; 1472 imgAttribut.title = tabResult[1]; 1473 1474 divAttribut.appendChild(imgAttribut); 1475 } 1476 } 1477 divTitreAttribut.appendChild(divAttribut); 1478 //S'il y'a des pièces jointes on les affiches 1479 if(donneeCPC[j][0].length == 6) 1480 divTitreAttribut.appendChild(createPJ(donneeCPC[j][0][5])); 1481 1482 divContenuEntete.appendChild(divTitreAttribut); 1483 divEvenementAccordeon.appendChild(divContenuEntete); 1484 var tableauContenu = donneeCPC[j][0][3]; 1485 //On calcul le nombre d'élément à afficher 1486 nbElement = tableauContenu.length/2; 1487 1488 var divContenu = document.createElement("div"); 1489 divContenu.className = "contenuPopup"; 1490 1491 //Ajout du paragraphe commentaire si présent 1492 var com = donneeCPC[j][0][4]; 1493 if(com !=""){ 1494 divContenu.appendChild(createCommentaire(com)); 1495 } 1496 //pour chaque element 1497 for(var i = 0; i < tableauContenu.length; i = i+2){ 1498 var element= document.createElement("div"); 1499 element.className = "unElement"; 1500 var divVideArrow = document.createElement("div"); 1501 1502 1503 var objetDepeche = document.createElement("div"); 1504 objetDepeche.className = "titreElement"; 1505 //On ajoute le contenu HTML du titre 1506 objetDepeche.innerHTML = tableauContenu[i]; 1507 objetDepeche.appendChild(divVideArrow); 1508 objetDepeche.onclick = function(){ 1509 $(this).parent().children(".unContenu").slideToggle("slow"); 1510 majSensFleches($(this).children(".accordion-arrow")); 1511 } 1512 1513 element.appendChild(objetDepeche); 1514 1515 var contenu = document.createElement("div"); 1516 contenu.className = "unContenu"; 1517 // contenu.id ="contenuElement"+j; 1518 1519 //On ajoute le contenu HTML 1520 var content = tableauContenu[i+1]; 1521 //Correction du bug d'afficahge sous firefox 1522 var tmp = content.replace(/<br\/>/g, '<div></div>'); 1523 contenu.innerHTML =tmp; 1524 1525 element.appendChild(contenu); 1526 1527 1528 1529 if(i>0){ 1530 divVideArrow.className = "accordion-arrow close"; 1531 $(contenu).hide(); 1532 } 1533 else{ 1534 divVideArrow.className = "accordion-arrow open"; 1535 } 1536 divContenu.appendChild(element); 1537 1538 } 1539 $(divContenu).hide(); 1540 1541 divEvenementAccordeon.appendChild(divContenu); 1542 popin.appendChild(divEvenementAccordeon); 1543 } 1544 return popin; 1545} 1546 1547 1548/******************************************* Création du bloc de commentaires ******************************************/ 1549/***********************************************************************************************************************/ 1550function createCommentaire(com){ 1551 var commentaires = document.createElement("div"); 1552 commentaires.className = "commentaire"; 1553 commentaires.innerHTML = com; 1554 return commentaires; 1555} 1556/******************************************* Création du picto pièce jointet ******************************************/ 1557/**********************************************************************************************************************/
1558function createPJ(donnee){ 1559 1560 var imgPieceJointe = document.createElement("span"); 1561 imgPieceJointe.className = "fichierJoint"; 1562 var lienPJ = document.createElement("a"); 1563 1564 //Récupération du nom du fichier 1565 var tabnomPJ = donnee[0].split("/"); 1566 var nomPJ = tabnomPJ[tabnomPJ.length-1]; 1567 1568 //Récupération de l'extension du fichier 1569 var tabExtension = nomPJ.split("."); 1570 var extension = tabExtension[tabExtension.length -1]; 1571 if(extension.length > 4){ 1572 extension = ""; 1573 } 1574 1575 lienPJ.href = encodeURI(donnee[0]); 1576 lienPJ.setAttribute("target", "_blank"); 1577 imgPieceJointe.alt = nomPJ; 1578 imgPieceJointe.title = nomPJ + " (" + extension.toUpperCase() + ", " + donnee[1]+")"; 1579 lienPJ.appendChild(imgPieceJointe); 1580 return lienPJ; 1581} 1582 1583/********************************************* Récupérer et lancer le formatage des données pour la VH *****************************************/ 1584/************************************************************************************************************************************/ 1585function getHTMLPopupVHAsync ( url, callback) 1586{ 1587 let dataFeatures = []; 1588 $.ajax({type:'GET', 1589 url: url, 1590 dataType: 'json', 1591 //async: false, 1592 success: function(data){ 1593 dataFeatures.push(data); 1594 var el = formatDataVH(dataFeatures); 1595 callback(el); 1596 },error: function(){ 1597 console.log( "error"); 1598 } 1599 }); 1600} 1601 1602/******************************** Mettre en forme les données VH récupérées (données CCH) ********************************/ 1603/************************************************************************************************************************************/ 1604function formatDataVH(donneeCPCVH){ 1605 1606 popin = createVignetteSimpleVH(donneeCPCVH); 1607 1608 return popin; 1609} 1610 1611/******************************************* Création de la popup pour la VH *********************************************/ 1612/******************************************** Un seul évenement données CCH**********************************************/ 1613 1614function createVignetteSimpleVH(donneeCPCVH){ 1615 //On créé la popin 1616 var popin = document.createElement('div'); 1617 popin.id = "popinTrafic"; 1618 popin.className = "infobulle"; 1619 1620 //Création de l'entete 1621 var divContenuEntete = document.createElement("div"); 1622 //divContenuEntete.className = "contenuEntetePopin popup-simple-carto"; 1623 divContenuEntete.className = "contenuEntetePopin hauteurTitreVH"; 1624 var divTitreEntete = document.createElement("div"); 1625 divTitreEntete.className = "divPictoSimple"; 1626 //On adapte le pictogramme à l'évenement 1627 var imgPicto = document.createElement("span"); 1628 1629 var CCH = recupererCCH(donneeCPCVH[0][0][3]); 1630 1631 imgPicto.className = CCH + (document.modeDaltonien ? "-daltonien" : "") + " marginIconeTitre"; 1632 imgPicto.title = CCH; 1633 divTitreEntete.appendChild(imgPicto); 1634 1635 //var divBlocTitre = document.createElement("div"); 1636 1637 //var divContenuTitre = document.createElement("div"); 1638 //divContenuTitre.className = "contenuEntetePopin popup-simple-carto"; 1639 1640 var divTitreAttribut = document.createElement("div"); 1641 //divTitreAttribut.className = "titreAttributsSimple"; 1642 divTitreAttribut.className = "titreAttributs"; 1643 1644 1645 var titre = document.createElement('h3'); 1646 //titre.className = 'titreEvenement'; 1647 titre.className = 'bf-popin-title titre'; 1648 var titreRegroupement = donneeCPCVH[0][0][0] ; 1649 1650 var texte = document.createTextNode(titreRegroupement); 1651 titre.appendChild(texte); 1652 divTitreAttribut.appendChild(titre); 1653 1654 //On ajoute les attributs dans un maximum de 3 1655 var tabAttribut = donneeCPCVH[0][0][2]; 1656 if((tabAttribut != undefined) && tabAttribut.length > 0){ 1657 var divAttribut = document.createElement("div"); 1658 divAttribut.className = "attributs"; 1659 for(var i = 0; i < 3; i++){ 1660 var tabResult = selectAttribut(tabAttribut[i]); 1661 if(typeof(tabAttribut[i])!= 'undefined'){ 1662 var imgAttribut = document.createElement("span"); 1663 imgAttribut.className = tabResult[0]; 1664 imgAttribut.title = tabResult[1]; 1665 divAttribut.appendChild(imgAttribut); 1666 } 1667 } 1668 divTitreAttribut.appendChild(divAttribut); 1669 } 1670 1671 //On ajoute la piece jointe si elle est présente 1672 if(donneeCPCVH[0][0].length == 6){ 1673 divTitreAttribut.appendChild(createPJ(donneeCPCVH[0][0][5])); 1674 } 1675 //divContenuTitre.appendChild(divTitreAttribut); 1676 //divTitreEntete.appendChild(divContenuTitre); 1677 divContenuEntete.appendChild(divTitreEntete); 1678 divContenuEntete.appendChild(divTitreAttribut); 1679 popin.appendChild(divContenuEntete); 1680 1681 //on met en forme le contenu ( commentaire, lien , contenu) 1682 var tableauContenu = donneeCPCVH[0][0][3]; 1683 var nbElement = tableauContenu.length/2; 1684 var divContenu = document.createElement("div"); 1685 divContenu.className = "contenuPopup"; 1686 1687 //S'il y'a des commentaires, alors on les ajoute 1688 var leCommentaire = donneeCPCVH[0][0][4]; 1689 if(leCommentaire !=""){ 1690 var commentaires = createCommentaire(leCommentaire); 1691 divContenu.appendChild(commentaires); 1692 } 1693 1694 //Ensuite on peut afficher tous les éléments du flux 1695 for(var i = 0; i < tableauContenu.length; i = i+2){ 1696 //pour chaque element 1697 var element= document.createElement("div"); 1698 element.className = "unElement"; 1699 var divVideArrow = document.createElement("div"); 1700 var objetDepeche = document.createElement("div"); 1701 objetDepeche.className = "titreElement"; 1702 objetDepeche.innerHTML = tableauContenu[i]; 1703 objetDepeche.appendChild(divVideArrow); 1704 //S'il y'a plusieurs éléments on rajoute la fonction pour déplier l'accordéon 1705 if(nbElement>0){ 1706 objetDepeche.onclick = function(){ 1707 $(this).parent().children(".unContenu").slideToggle("slow"); 1708 //On met à jour le sens des flèches 1709 majSensFleches($(this).children(".accordion-arrow")); 1710 } 1711 } 1712 element.appendChild(objetDepeche); 1713 var contenu = document.createElement("div"); 1714 //S'il n'y a qu'un seul element alors on a une mise en page différentes 1715 if(nbElement == 1){ 1716 contenu.className = "unContenuSimple"; 1717 } 1718 else{ 1719 contenu.className = "unContenu"; 1720 } 1721 // contenu.id ="contenuElement"+i; 1722 1723 //Correction bug d'affichage sous firefox 1724 var content = tableauContenu[i+1]; 1725 var tmp = content.replace(/<br\/>/g, '<div></div>'); 1726 contenu.innerHTML =tmp; 1727 1728 1729 element.appendChild(contenu); 1730 1731 //Dans le cas de plusieurs éléments, on ajoute des flèches devant le titre de chacun 1732 if(nbElement > 1){ 1733 //On replie tous les éléments 1734 if(i > 0){ 1735 divVideArrow.className = "accordion-arrow close"; 1736 $(contenu).css("display","none"); 1737 } 1738 //On laisse le premier element ouvert 1739 else{ 1740 divVideArrow.className = "accordion-arrow open"; 1741 } 1742 } 1743 1744 divContenu.appendChild(element); 1745 } 1746 popin.appendChild(divContenu); 1747 return popin; 1748} 1749 1750// pour récupérer le CCH 1751function recupererCCH(descCCH) { 1752 if (descCCH[1].indexOf('C1 â normales') > 0){ 1753 return ('C1'); 1754 } 1755 else if (descCCH[1].indexOf('C2 â délicates') > 0){ 1756 return ('C2'); 1757 } 1758 else if (descCCH[1].indexOf('C3 â difficiles') > 0){ 1759 return ('C3'); 1760 } 1761 else if (descCCH[1].indexOf('C4 â impossibles') > 0){ 1762 return ('C4'); 1763 } 1764 else { 1765 return ('NR'); 1766 } 1767} 1768 1769 1770/********************************** Récupérer et lancer le formatage des données pour la popup cameras ******************************/ 1771/************************************************************************************************************************************/ 1772function getHTMLPopupCameras ( url_json,callback) 1773{ 1774 $.ajax({type:'GET', 1775 url: url_json, 1776 dataType: 'json', 1777 success: function(data){ 1778 var el = formatDataCameras(data); 1779 callback(el); 1780 },error: function(){ 1781 return "error"; 1782 } 1783 }); 1784} 1785/******************* Mettre en forme les données récupérées pour la popup cameras ********************************/ 1786/*****************************************************************************************************************/ 1787function formatDataCameras(donneesCameras){ 1788 1789 // Modele sans agregat avec 1 caméra 1790 if(donneesCameras.nbCamerasAgregat==1){ 1791 popin = createPopupCameraSimple(donneesCameras); 1792 } 1793 1794 //modele avec agregat 1795 else 1796 { 1797 popin = createPopupAgregatCameras(donneesCameras); 1798 } 1799 1800 return popin; 1801} 1802 1803/************************* Création du modèle popup caméra simple *********************************************/ 1804/**************************** Une seule caméra dans l'agrégat ***********************************************/ 1805// plus utilisé en ce moment ... 1806function createPopupCameraSimple(donneesCamera){ 1807 //On créé la popin 1808 var popin = document.createElement('div'); 1809 popin.id = "popinTrafic"; 1810 popin.className = "infobulle"; 1811 popin.style="overflow-y:hidden"; 1812 1813 //Création de l'entete 1814 var divContenuEntete = document.createElement("div"); 1815 divContenuEntete.className = "contenuEntetePopin popup-simple-carto"; 1816 var divTitreAttribut = document.createElement("div"); 1817 divTitreAttribut.className = "titreAttributsSimple"; 1818 var titre = document.createElement('h3'); 1819 titre.className = 'titreEvenement'; 1820 var libelleCamera = donneesCamera.listeCameras[0].libelleCamera.replace(/ /g, " "); 1821 1822 var texteLibelleCamera = document.createTextNode(libelleCamera); 1823 titre.appendChild(texteLibelleCamera); 1824 divTitreAttribut.appendChild(titre); 1825 divContenuEntete.appendChild(divTitreAttribut); 1826 1827 popin.appendChild(divContenuEntete); 1828 1829 //on met en forme le contenu (caméra) 1830 var divContenu = document.createElement("div"); 1831 divContenu.className = "contenuPopupCamera"; 1832 divContenu.style="padding-left:8px;text-align:left;";
1833 1834 /*var imageCamera = document.createElement("object"); 1835 imageCamera.type="text/html"; 1836 imageCamera.data=donneesCamera.listeCameras[0].sourceFlux; 1837 1838 imageCamera.width="268"; 1839 imageCamera.height="160"; 1840 divContenu.appendChild(imageCamera);*/ 1841 var imageCamera = document.createElement("img"); 1842 imageCamera.src= donneesCamera.listeCameras[0].sourceFlux + "?" + Math.random(); 1843 imageCamera.className="imageCamera"; 1844 imageCamera.width="268"; 1845 imageCamera.height="160"; 1846 divContenu.appendChild(imageCamera); 1847 1848 var contenu = document.createElement("div"); 1849 contenu.className = "unContenuCamera"; 1850 var logoCamera = document.createElement("img"); 1851 var srcLogo=getLogoCameraBySource(donneesCamera.listeCameras[0].gestionnaire); 1852 logoCamera.src = srcLogo; 1853 //logoCamera.style="position:relative;width:71px;height:41px;bottom:22px;"; 1854 logoCamera.className = "logoCameraAgregat"; 1855 if (srcLogo.indexOf("LogoBisonfute_camera.png") !== -1) { 1856 logoCamera.style.bottom = "-1px"; 1857 logoCamera.style.height = "34px"; 1858 } 1859 contenu.appendChild(logoCamera); 1860 var sourceCamera = document.createElement("h3"); 1861 var texteSourceCamera = document.createTextNode("Source : " + donneesCamera.listeCameras[0].gestionnaire); 1862 sourceCamera.appendChild(texteSourceCamera); 1863 //sourceCamera.style="position:relative;width:187px;bottom:42px;right:-78px;text-align:right;font-size:12px"; 1864 sourceCamera.className = "sourceCameraAgregat"; 1865 1866 contenu.appendChild(sourceCamera); 1867 divContenu.appendChild(contenu); 1868 1869 popin.appendChild(divContenu); 1870 1871 return popin; 1872} 1873 1874/************************* Création du modèle popup agrégat de caméras *********************************************/ 1875/**************************** Plusieurs caméras dans l'agrégat ***********************************************/ 1876function createPopupAgregatCameras(donneesCamera){ 1877 var popin = document.createElement('div'); 1878 popin.id = "popinTrafic"; 1879 popin.className = "infobulle"; 1880 1881 //Pour chaque caméra 1882 for(var j = 0; j < donneesCamera.nbCamerasAgregat; j++){ 1883 1884 //on créé la div de chaque camera de l'agregat 1885 var divCameraAccordeon = document.createElement("div"); 1886 1887 // le picto correspondant 1888 var divContenuEntete = document.createElement("div"); 1889 divContenuEntete.className = "contenuEntetePopin"; 1890 divContenuEntete.setAttribute("data-value", j); 1891 //Au clic sur l'entete, on déplie l'élément (si le flux de la caméra est ok) 1892 if (donneesCamera.listeCameras[j].fluxCameraOk) 1893 { 1894 divContenuEntete.onclick = function(){ 1895 var elementclique = $(this).attr("data-value"); 1896 $(this).next("div").slideToggle("normal"); 1897 $(this).next("div").show(); 1898 majSensFleches($(this).children(".conteneurFleche").children(".accordion-arrow")); 1899 $(".contenuEntetePopin").each(function(){ 1900 if($(this).attr("data-value") != elementclique){ 1901 $(this).next("div").slideUp("normal"); 1902 $(this).children(".conteneurFleche").children(".accordion-arrow").removeClass("open"); 1903 $(this).children(".conteneurFleche").children(".accordion-arrow").addClass("close"); 1904 } 1905 }); 1906 }; 1907 } 1908 1909 //Création de la grosse flèche à gauche de l'element 1910 var divConteneurPictoFleche = document.createElement("div"); 1911 divConteneurPictoFleche.className = "conteneurFleche"; 1912 var pictoFleche = document.createElement("div"); 1913 var imgPicto = document.createElement("span"); 1914 1915 //Tous les éléments sont repliés 1916 pictoFleche.className = "accordion-arrow close flecheGeneralePopin"; 1917 //si le flux de la camera n'est pas ok, la ligne n'est pas clicable (pas de fleche et icone cameraKO) 1918 if (donneesCamera.listeCameras[j].fluxCameraOk) 1919 { 1920 divConteneurPictoFleche.appendChild(pictoFleche); 1921 imgPicto.className = "camera"; 1922 } 1923 else { 1924 imgPicto.className = "cameraKO" 1925 } 1926 1927 divContenuEntete.appendChild(divConteneurPictoFleche); 1928 var divImgPicto = document.createElement("div"); 1929 divImgPicto.className = "divPicto"; 1930 1931 var libelleAffichageCamera = donneesCamera.listeCameras[j].libelleCamera.replace(/ /g, " "); 1932 imgPicto.title = libelleAffichageCamera; 1933 1934 divImgPicto.appendChild(imgPicto); 1935 divContenuEntete.appendChild(divImgPicto); 1936 1937 //insertion titre 1938 var divTitreAttribut = document.createElement("div"); 1939 divTitreAttribut.className = "titreAttributs"; 1940 var titre = document.createElement('h3'); 1941 titre.className = 'bf-popin-title titre'; 1942 var texteTitre = document.createTextNode(libelleAffichageCamera); 1943 titre.appendChild(texteTitre); 1944 titre.title = libelleAffichageCamera; 1945 divTitreAttribut.appendChild(titre); 1946 1947 divContenuEntete.appendChild(divTitreAttribut); 1948 divCameraAccordeon.appendChild(divContenuEntete); 1949 1950 // ajout du contenu de la caméra 1951 var divContenu = document.createElement("div"); 1952 divContenu.className = "contenuPopupCamera"; 1953 divContenu.style="padding-left:8px;height:190px;text-align:left;";
1954 1955 /*var imageCamera = document.createElement("object"); 1956 imageCamera.type="text/html"; 1957 imageCamera.data=donneesCamera.listeCameras[j].sourceFlux; 1958 1959 imageCamera.width="268"; 1960 imageCamera.height="160"; 1961 divContenu.appendChild(imageCamera);*/ 1962 var imageCamera = document.createElement("img"); 1963 imageCamera.src= donneesCamera.listeCameras[j].sourceFlux + "?" + Math.random(); 1964 imageCamera.className="imageCamera"; 1965 imageCamera.width="268"; 1966 imageCamera.height="160"; 1967 divContenu.appendChild(imageCamera); 1968 1969 var contenu = document.createElement("div"); 1970 contenu.className = "unContenuCamera"; 1971 var logoCamera = document.createElement("img"); 1972 var srcLogo=getLogoCameraBySource(donneesCamera.listeCameras[j].gestionnaire); 1973 logoCamera.src = srcLogo; 1974 //logoCamera.style="position:relative;width:71px;height:41px;bottom:22px;"; 1975 logoCamera.className = "logoCameraAgregat"; 1976 if (srcLogo.indexOf("LogoBisonfute_camera.png") !== -1) { 1977 logoCamera.style.bottom = "-1px"; 1978 logoCamera.style.height = "34px"; 1979 } 1980 contenu.appendChild(logoCamera); 1981 var sourceCamera = document.createElement("h3"); 1982 var texteSourceCamera = document.createTextNode("Source : " + donneesCamera.listeCameras[j].gestionnaire); 1983 sourceCamera.appendChild(texteSourceCamera); 1984 //sourceCamera.style="position:relative;width:187px;bottom:42px;right:-78px;text-align:right;font-size:12px"; 1985 sourceCamera.className = "sourceCameraAgregat"; 1986 1987 contenu.appendChild(sourceCamera); 1988 divContenu.appendChild(contenu); 1989 1990 $(divContenu).hide(); 1991 1992 divCameraAccordeon.appendChild(divContenu); 1993 popin.appendChild(divCameraAccordeon); 1994 } 1995 return popin; 1996} 1997 1998/******************* Mettre en forme les données récupérées pour la popup Liens VH ********************************/ 1999/*****************************************************************************************************************/ 2000function formatDataLiensVH(donneesLiensVH){ 2001 2002 popin = createPopupAgregatLiensVH(donneesLiensVH); 2003 2004 return popin; 2005} 2006 2007/************************* Création du modèle popup agrégat de Liens VH *********************************************/ 2008/**************************** Plusieurs Liens VH dans l'agrégat ***********************************************/ 2009function createPopupAgregatLiensVH(donneesLiensVH){ 2010 var popin = document.createElement('div'); 2011 popin.id = "popinTrafic"; 2012 popin.className = "infobulle"; 2013 2014 //Pour chaque Liens VH 2015 for(var j = 0; j < donneesLiensVH.length; j++){ 2016 2017 //on créé la div de chaque lien VH de l'agregat 2018 var divLienVHAccordeon = document.createElement("div"); 2019 2020 // le picto correspondant 2021 var divContenuEntete = document.createElement("div"); 2022 divContenuEntete.className = "contenuEntetePopin"; 2023 divContenuEntete.setAttribute("data-value", j); 2024 2025 //Création de la grosse flèche à gauche de l'element 2026 var divConteneurPictoFleche = document.createElement("div"); 2027 var lienImg = document.createElement("a"); 2028 lienImg.href= encodeURI(donneesLiensVH[j].getProperties().urlZone); 2029 //lienImg.className = "lienFlocon"; 2030 var imgLienInterne = document.createElement("span"); 2031 imgLienInterne.className = "lienInterne"; 2032 lienImg.appendChild(imgLienInterne); 2033 divConteneurPictoFleche.appendChild(lienImg); 2034 divContenuEntete.appendChild(divConteneurPictoFleche); 2035 2036 var lienZoneVHIcone = document.createElement("a"); 2037 lienZoneVHIcone.href = encodeURI(donneesLiensVH[j].getProperties().urlZone); 2038 2039 var pictoFleche = document.createElement("div"); 2040 var imgPicto = document.createElement("span"); 2041 2042 //Tous les éléments sont repliés 2043 pictoFleche.className = "accordion-arrow close flecheGeneralePopin"; 2044 imgPicto.className = "lienVH"; 2045 2046 var divImgPicto = document.createElement("div"); 2047 divImgPicto.className = "divPictoLienVH"; 2048 2049 2050 var libelleAffichageLienVH = "Accès " + donneesLiensVH[j].getProperties().libelleZone.replace(/ /g, " "); 2051 imgPicto.title = libelleAffichageLienVH; 2052 2053 lienZoneVHIcone.appendChild(imgPicto); 2054 divImgPicto.appendChild(lienZoneVHIcone); 2055 2056 divContenuEntete.appendChild(divImgPicto); 2057 2058 //insertion titre 2059 var divTitreAttribut = document.createElement("div"); 2060 divTitreAttribut.className = "titreAttributs"; 2061 2062 var lienZoneVH = document.createElement("a"); 2063 lienZoneVH.className = "lienVHURL"; 2064 lienZoneVH.href = encodeURI(donneesLiensVH[j].getProperties().urlZone); 2065 2066 var titre = document.createElement('h3'); 2067 titre.className = 'bf-popin-title titre'; 2068 var texteTitre = document.createTextNode(libelleAffichageLienVH); 2069 titre.appendChild(texteTitre); 2070 titre.title = libelleAffichageLienVH; 2071 2072 lienZoneVH.appendChild(titre); 2073 divTitreAttribut.appendChild(lienZoneVH); 2074 2075 divContenuEntete.appendChild(divTitreAttribut); 2076 divLienVHAccordeon.appendChild(divContenuEntete); 2077 2078 // ajout du contenu du lien VH 2079 var divContenu = document.createElement("div"); 2080 divContenu.className = "contenuPopupLienVH"; 2081 divContenu.style="padding-left:8px;height:190px"; 2082 2083 var contenu = document.createElement("div"); 2084 contenu.className = "unContenuLienVH"; 2085 2086 divContenu.appendChild(contenu); 2087 2088 $(divContenu).hide(); 2089 2090 divLienVHAccordeon.appendChild(divContenu); 2091 popin.appendChild(divLienVHAccordeon); 2092 } 2093 return popin; 2094} 2095 2096/******************* Mettre en forme les données récupérées pour le popup Mesures PGT ********************************/ 2097/*****************************************************************************************************************/ 2098function formatDataMesuresPGT(donneesMesuresPGT) { 2099 // Modèle sans agrégat avec 1 element 2100 if(donneesMesuresPGT.length===1){ 2101 popin = createPopupSimpleMesuresPGT(donneesMesuresPGT); 2102 } 2103 //modèle avec agrégat 2104 else 2105 { 2106 popin = createPopupAgregatMesuresPGT(donneesMesuresPGT); 2107 } 2108 return popin; 2109} 2110 2111/************************* Création du modèle popup simple de Mesures PGT *********************************************/ 2112/**************************** Un seule Mesure PGT dans ***********************************************/ 2113function createPopupSimpleMesuresPGT(donneesMesuresPGT){ 2114 let popin = document.createElement('div'); 2115 popin.id = "popinTrafic"; 2116 popin.className = "infobulle"; 2117 2118 let type = donneesMesuresPGT[0].getProperties().type; 2119 let etat = donneesMesuresPGT[0].getProperties().etat; 2120 let libelle = donneesMesuresPGT[0].getProperties().libelle; 2121 let capacite = donneesMesuresPGT[0].getProperties().capacite; 2122 let nomAxe = donneesMesuresPGT[0].getProperties().nom_axe; 2123 let restriction = donneesMesuresPGT[0].getProperties().restriction; 2124 2125 // Cas d'une zone de stockage 2126 if ((type && etat && type.trim() && etat.trim()) && 2127 (type === bisonfute.EventTypeName.AIRE || type === bisonfute.EventTypeName.PEAGE || type === bisonfute.EventTypeName.PLEINE_VOIE)) { 2128 let affichageType = type; 2129 if(type === bisonfute.EventTypeName.PLEINE_VOIE) { 2130 // Suppression du caractère "_" pour l'affichage dans le cas du PLEINE_VOIE 2131 affichageType = type.replace("_", " "); 2132 } 2133 let elementsLibelle = [affichageType, etat].join(" "); 2134 //Création de l'entêté 2135 let divContenuEntete = document.createElement("div"); 2136 divContenuEntete.className = "contenuEntetePopin"; 2137 let divTitreEntete = document.createElement("div"); 2138 divTitreEntete.className = "divPictoSimple"; 2139 2140 // Creation div icone événement en fonction du type 2141 let divImgPicto = createDivImgPicto(type, elementsLibelle); 2142 divTitreEntete.appendChild(divImgPicto); 2143 // Create div titre d'un element PGT 2144 let divTitreAttribut = createDivTitreAttribut(nomAxe, capacite, elementsLibelle); 2145 2146 divContenuEntete.appendChild(divTitreEntete); 2147 divContenuEntete.appendChild(divTitreAttribut); 2148 2149 popin.appendChild(divContenuEntete); 2150 2151 // Ajour le contenu du PGT
2152 let divContenu = document.createElement("div"); 2153 divContenu.className = 'bf-popin-contenu contenu-pgt'; 2154 2155 let element = document.createElement("div"); 2156 element.className = "unElement"; 2157 let objetPGT = document.createElement("div"); 2158 objetPGT.className = "titreElement"; 2159 objetPGT.innerHTML = affichageType; 2160 2161 element.appendChild(objetPGT); 2162 2163 const contenu = createContenuElementPGT(donneesMesuresPGT, 0) 2164 2165 element.appendChild(contenu); 2166 divContenu.appendChild(element); 2167 2168 popin.appendChild(divContenu); 2169 2170 // Cas d'une mesure de trafic 2171 } else if (type && nomAxe && type.trim() && nomAxe.trim() && restriction && restriction.trim()){ 2172 //Création de l'entêté 2173 let divContenuEntete = document.createElement("div"); 2174 divContenuEntete.className = "contenuEntetePopin"; 2175 let divTitreEntete = document.createElement("div"); 2176 divTitreEntete.className = "divTitreEnteteSimple"; 2177 2178 let divTitreAttribut = createDivTitreAttributMesureTrafic(nomAxe, type, libelle); 2179 2180 divContenuEntete.appendChild(divTitreEntete); 2181 divContenuEntete.appendChild(divTitreAttribut); 2182 2183 popin.appendChild(divContenuEntete); 2184 2185 // Ajour le contenu du PGT 2186 let divContenu = document.createElement("div"); 2187 divContenu.className = 'bf-popin-contenu contenu-mesures-trafic'; 2188 2189 let element = document.createElement("div"); 2190 element.className = "unElementMesuresTrafic"; 2191 2192 const contenu = createContenuElementMesuresTrafic(donneesMesuresPGT) 2193 2194 element.appendChild(contenu); 2195 divContenu.appendChild(element); 2196 2197 popin.appendChild(divContenu); 2198 } 2199 return popin; 2200} 2201 2202/************************* Création du modèle popup agrégat de Mesures PGT *********************************************/ 2203/**************************** Plusieurs Mesures PGT dans l'agrégat ***********************************************/ 2204function createPopupAgregatMesuresPGT(donneesMesuresPGT){ 2205 let popin = document.createElement('div'); 2206 popin.id = "popinTrafic"; 2207 popin.className = "infobulle"; 2208 2209 //Pour chaque Mesure PGT 2210 for(let j = 0; j < donneesMesuresPGT.length; j++) { 2211 let type = donneesMesuresPGT[j].getProperties().type; 2212 let etat = donneesMesuresPGT[j].getProperties().etat; 2213 let capacite = donneesMesuresPGT[j].getProperties().capacite; 2214 let nomAxe = donneesMesuresPGT[j].getProperties().nom_axe; 2215 if (type && etat && type.trim() && etat.trim()) { 2216 let affichageType = type; 2217 if(type === bisonfute.EventTypeName.PLEINE_VOIE) { 2218 // Suppression du caractère "_" pour l'affichage dans le cas du PLEINE_VOIE 2219 affichageType = type.replace("_", " "); 2220 } 2221 let elementsLibelle = [affichageType, etat].join(" "); 2222 2223 //ont créé la div de chaque lien VH de l'agrégat 2224 let divMesuresPGTAccordeon = document.createElement("div"); 2225 2226 // le picto correspondant 2227 let divContenuEntete = document.createElement("div"); 2228 divContenuEntete.className = "contenuEntetePopin"; 2229 divContenuEntete.setAttribute("data-value", j); 2230 2231 divContenuEntete.onclick = function () { 2232 let elementClique = $(this).attr("data-value"); 2233 $(this).next("div").slideToggle("normal"); 2234 $(this).next("div").show(); 2235 majSensFleches($(this).children(".conteneurFleche").children(".accordion-arrow")); 2236 $(".contenuEntetePopin").each(function () { 2237 if ($(this).attr("data-value") !== elementClique) { 2238 $(this).next("div").slideUp("normal"); 2239 $(this).children(".conteneurFleche").children(".accordion-arrow").removeClass("open"); 2240 $(this).children(".conteneurFleche").children(".accordion-arrow").addClass("close"); 2241 } 2242 }); 2243 }; 2244 2245 //Création de la grosse flèche à gauche de l'élément 2246 let divConteneurPictoFleche = document.createElement("div"); 2247 divConteneurPictoFleche.className = "conteneurFleche"; 2248 let pictoFleche = document.createElement("div"); 2249 //Tous les éléments sont repliés 2250 pictoFleche.className = "accordion-arrow close flecheGeneralePopin"; 2251 divConteneurPictoFleche.appendChild(pictoFleche); 2252 divContenuEntete.appendChild(divConteneurPictoFleche); 2253 2254 let divImgPicto = createDivImgPicto(type, elementsLibelle); 2255 divContenuEntete.appendChild(divImgPicto); 2256 // Create div titre d'un element PGT 2257 let divTitreAttribut = createDivTitreAttribut(nomAxe, capacite, elementsLibelle); 2258 2259 divContenuEntete.appendChild(divTitreAttribut); 2260 divMesuresPGTAccordeon.appendChild(divContenuEntete); 2261 2262 // Ajour le contenu du PGT
2263 let divContenu = document.createElement("div"); 2264 divContenu.className = 'bf-popin-contenu contenu-pgt'; 2265 2266 let element = document.createElement("div"); 2267 element.className = "unElement"; 2268 let divVideArrow = document.createElement("div"); 2269 let objetPGT = document.createElement("div"); 2270 objetPGT.className = "titreElement"; 2271 objetPGT.innerHTML = affichageType; 2272 objetPGT.appendChild(divVideArrow); 2273 objetPGT.onclick = function () { 2274 $(this).parent().children(".unContenu").slideToggle("slow"); 2275 //On met à jour le sens des flèches 2276 majSensFleches($(this).children(".accordion-arrow")); 2277 } 2278 element.appendChild(objetPGT); 2279 2280 let contenu = createContenuElementPGT(donneesMesuresPGT, j); 2281 2282 element.appendChild(contenu); 2283 divVideArrow.className = "accordion-arrow open"; 2284 divContenu.appendChild(element); 2285 2286 $(divContenu).hide(); 2287 2288 divMesuresPGTAccordeon.appendChild(divContenu); 2289 popin.appendChild(divMesuresPGTAccordeon); 2290 } 2291 } 2292 return popin; 2293} 2294 2295// Creation div icône événement en fonction du type 2296function createDivImgPicto(type, elementsLibelle) { 2297 let divImgPicto = document.createElement("div"); 2298 divImgPicto.className = "divPicto"; 2299 let imgPicto = document.createElement("span"); 2300 imgPicto.className = "pictoEvtPGT " + bisonfute.EventTypeName.ZONEDESTOCKAGEPGT.toLowerCase(); 2301 imgPicto.setAttribute("style", "background-image : url(" + bisonfute.ApiRoutes.pgtzonestockage); 2302 imgPicto.title = elementsLibelle; 2303 divImgPicto.appendChild(imgPicto); 2304 return divImgPicto; 2305} 2306 2307// Create div titre d'un element PGT 2308function createDivTitreAttribut(nomAxe, capacite, elementsLibelle){ 2309 //insertion titre 2310 let divTitreAttribut = document.createElement("div"); 2311 divTitreAttribut.className = "titreAttributs"; 2312 let titre = document.createElement("h3"); 2313 titre.className = 'bf-popin-title titre-pgt'; 2314 let texteTitre = document.createTextNode(elementsLibelle); 2315 titre.appendChild(texteTitre); 2316 divTitreAttribut.appendChild(titre); 2317 2318 let sousTitre = document.createElement("div"); 2319 sousTitre.className = 'bf-popin-sous-title sous-titre-pgt'; 2320 let elementsSousTitre; 2321 if (nomAxe && nomAxe.trim()) { 2322 elementsSousTitre = [nomAxe, "-", "Capacite :", capacite]; 2323 } else { 2324 elementsSousTitre = ["Capacite :", capacite]; 2325 } 2326 let texteSousTitre = document.createTextNode(elementsSousTitre.join(" ")); 2327 sousTitre.appendChild(texteSousTitre); 2328 divTitreAttribut.appendChild(sousTitre); 2329 2330 return divTitreAttribut; 2331} 2332 2333// Create div du contenu d'un element PGT 2334function createContenuElementPGT(donneesMesuresPGT, j) { 2335 let contenu = document.createElement("div"); 2336 contenu.className = "unContenu"; 2337 2338 // Bloc validite 2339 let debutValidite = donneesMesuresPGT[j].getProperties().dh_debut; 2340 let finValidite = donneesMesuresPGT[j].getProperties().dh_fin; 2341 if (debutValidite && finValidite && debutValidite.trim() && finValidite.trim()) { 2342 2343 let divDebutValidite = document.createElement("div"); 2344 divDebutValidite.className = "debutValiditePGT"; 2345 let elementsDebutValidite = ["Début validité :", debutValidite]; 2346 let debutVal = document.createTextNode(elementsDebutValidite.join(" ")); 2347 divDebutValidite.appendChild(debutVal); 2348 2349 let divFinValidite = document.createElement("div"); 2350 let elementsFinValidite = ["Fin de validité :", finValidite]; 2351 let finVal = document.createTextNode(elementsFinValidite.join(" ")); 2352 divFinValidite.appendChild(finVal); 2353 contenu.appendChild(divDebutValidite); 2354 contenu.appendChild(divFinValidite); 2355 } 2356 // Bloc nombre de PL stockes 2357 let nbrPlStockes = donneesMesuresPGT[j].getProperties().nb_pl_stockes; 2358 if (nbrPlStockes) { 2359 let paragraphNbrPlStockes = document.createElement("div"); 2360 paragraphNbrPlStockes.className = "nbrPlStockesPGT"; 2361 let elementsNbrPlStockes = ["Nombre de PL stockés :", nbrPlStockes]; 2362 const textNbrPlStockes = document.createTextNode(elementsNbrPlStockes.join(" ")); 2363 paragraphNbrPlStockes.appendChild(textNbrPlStockes); 2364 contenu.appendChild(paragraphNbrPlStockes); 2365 } 2366 // Bloc taux de remplissage 2367 const tauxRemplissage = donneesMesuresPGT[j].getProperties().taux_remplissage; 2368 if (tauxRemplissage) { 2369 let paragraphTauxRemplissage = document.createElement("div"); 2370 paragraphTauxRemplissage.className = "tauxRemplisagePGT"; 2371 let elementsTauxRemplissage = ["Taux de remplissage :", tauxRemplissage + "%"];
2372 const textTauxRemplissage = document.createTextNode(elementsTauxRemplissage.join(" ")); 2373 paragraphTauxRemplissage.appendChild(textTauxRemplissage); 2374 contenu.appendChild(paragraphTauxRemplissage); 2375 } 2376 2377 // Bloc sens 2378 let sensDe = donneesMesuresPGT[j].getProperties().sens_de; 2379 let sensVers = donneesMesuresPGT[j].getProperties().sens_vers; 2380 if (sensDe && sensVers && sensDe.trim() && sensVers.trim()) { 2381 let divSens = document.createElement("div"); 2382 divSens.className = "sensPGT"; 2383 let elementsSens = ["Sens : de", sensDe, "à ", sensVers] 2384 const sens = document.createTextNode(elementsSens.join(" ")); 2385 divSens.appendChild(sens); 2386 contenu.appendChild(divSens); 2387 } 2388 2389 // Bloc localisation 2390 const prDebut = donneesMesuresPGT[j].getProperties().pk_pr_debut; 2391 const prFin = donneesMesuresPGT[j].getProperties().pk_pr_fin; 2392 if (prDebut && prFin && prDebut.trim() && prFin.trim()) { 2393 let paragraphPR = document.createElement("div"); 2394 paragraphPR.className = "PR_PGT"; 2395 let elementsPR = ["PR début :", prDebut, " - ", "PR fin :", prFin]; 2396 const PR = document.createTextNode(elementsPR.join(" ")); 2397 paragraphPR.appendChild(PR); 2398 contenu.appendChild(paragraphPR); 2399 } 2400 2401 const axe = donneesMesuresPGT[j].getProperties().nom_axe; 2402 const comm = donneesMesuresPGT[j].getProperties().communes; 2403 const dep = donneesMesuresPGT[j].getProperties().departements; 2404 const codeDep = donneesMesuresPGT[j].getProperties().code_dep; 2405 if (axe && comm && dep && codeDep && axe.trim() && comm.trim() && dep.trim() && codeDep.trim()) { 2406 let paragraphRoute = document.createElement("div"); 2407 paragraphRoute.className = "routePGT" 2408 let elementsCodeDep = ["(", donneesMesuresPGT[j].getProperties().code_dep, ")"].join(""); 2409 let elementsRoute = [axe, comm, "-", dep, elementsCodeDep]; 2410 const route = document.createTextNode(elementsRoute.join(" ")); 2411 paragraphRoute.appendChild(route); 2412 contenu.appendChild(paragraphRoute); 2413 } 2414 return contenu; 2415} 2416 2417/******************* Mettre en forme les données récupérées pour le popup Aire services et repos ********************************/ 2418/*****************************************************************************************************************/ 2419function formatDataAireServicesRepos(donneesMesuresAsr) { 2420 const nonCommunique = "NC"; 2421 2422 // Modèle sans agrégat avec 1 element 2423 if(donneesMesuresAsr.length === 1){ 2424 popin = createPopupSimpleAireServicesRepos(donneesMesuresAsr, nonCommunique); 2425 } 2426 //modèle avec agrégat 2427 else 2428 { 2429 popin = createPopupAgregatAireServicesEtRepos(donneesMesuresAsr, nonCommunique); 2430 } 2431 return popin; 2432} 2433 2434 2435/************************* Création du modèle popup simple de Aire de services et repos *********************************************/ 2436/**************************** Un seule modèle dans Aire de services et repos ***********************************************/ 2437function createPopupSimpleAireServicesRepos(donneesAsr, nonCommunique){ 2438 let popin = document.createElement('div'); 2439 popin.id = "popinTrafic"; 2440 popin.className = "infobulle"; 2441 2442 let nature = donneesAsr[0].getProperties().nature; 2443 let nom = donneesAsr[0].getProperties().nom; 2444 let sens = donneesAsr[0].getProperties().sens; 2445 let nomAxe = donneesAsr[0].getProperties().axe; 2446 let commune = donneesAsr[0].getProperties().commune; 2447 let departement = donneesAsr[0].getProperties().departement; 2448 2449 if (nature && nom) { 2450 //Création de l'entêté 2451 let divContenuEntete = document.createElement("div"); 2452 divContenuEntete.className = "contenuEntetePopin contenuEntetePopinAsr"; 2453 let divTitreEntete = document.createElement("div"); 2454 divTitreEntete.className = "divPictoSimple"; 2455 2456 // Creation div icone événement en fonction du nature 2457 let divImgPicto = createDivImgPictoAsr(nature); 2458 divTitreEntete.appendChild(divImgPicto); 2459 divContenuEntete.appendChild(divTitreEntete); 2460 2461 let divTitreAttribut = createDivTitreAttributAsr(nature, nomAxe, nom, sens, departement, commune, nonCommunique); 2462 divContenuEntete.appendChild(divTitreAttribut); 2463 2464 popin.appendChild(divContenuEntete); 2465 2466 // Ajour le contenu du ASR 2467 let divContenu = document.createElement("div"); 2468 divContenu.className = 'bf-popin-contenu contenu-asr'; 2469 2470 let element = document.createElement("div"); 2471 element.className = "unElement unElementAsr"; 2472 const contenu = createContenuElementASR(donneesAsr, 0, nonCommunique) 2473 2474 element.appendChild(contenu); 2475 divContenu.appendChild(element); 2476 2477 popin.appendChild(divContenu); 2478 } 2479 return popin; 2480} 2481 2482/************************* Création du modèle popup agrégat de de Aire de services et repos *********************************************/ 2483/**************************** Plusieurs Aire de services et repos dans l'agrégat ***********************************************/ 2484function createPopupAgregatAireServicesEtRepos(donneesAsr, nonCommunique){ 2485 let popin = document.createElement('div'); 2486 popin.id = "popinTrafic"; 2487 popin.className = "infobulle"; 2488 2489 //Pour chaque ASR 2490 for(let j = 0; j < donneesAsr.length; j++) { 2491 let nature = donneesAsr[j].getProperties().nature; 2492 let nom = donneesAsr[j].getProperties().nom; 2493 let sens = donneesAsr[j].getProperties().sens; 2494 let nomAxe = donneesAsr[j].getProperties().axe; 2495 let commune = donneesAsr[j].getProperties().commune; 2496 let departement = donneesAsr[j].getProperties().departement; 2497 if (nature && nom) { 2498 2499 //ont créé la div de chaque ASR de l'agrégat 2500 let divASRAccordeon = document.createElement("div"); 2501 2502 // le picto correspondant 2503 let divContenuEntete = document.createElement("div"); 2504 divContenuEntete.className = "contenuEntetePopin contenuEntetePopinAsr"; 2505 divContenuEntete.setAttribute("data-value", j); 2506 2507 divContenuEntete.onclick = function () { 2508 let elementClique = $(this).attr("data-value"); 2509 $(this).next("div").slideToggle("normal"); 2510 $(this).next("div").show(); 2511 majSensFleches($(this).children(".conteneurFleche").children(".accordion-arrow")); 2512 $(".contenuEntetePopin").each(function () { 2513 if ($(this).attr("data-value") !== elementClique) { 2514 $(this).next("div").slideUp("normal"); 2515 $(this).children(".conteneurFleche").children(".accordion-arrow").removeClass("open"); 2516 $(this).children(".conteneurFleche").children(".accordion-arrow").addClass("close"); 2517 } 2518 }); 2519 }; 2520 2521 //Création de la grosse flèche à gauche de l'élément 2522 let divConteneurPictoFleche = document.createElement("div"); 2523 divConteneurPictoFleche.className = "conteneurFleche"; 2524 let pictoFleche = document.createElement("div"); 2525 //Tous les éléments sont repliés 2526 pictoFleche.className = "accordion-arrow close flecheGeneralePopin"; 2527 divConteneurPictoFleche.appendChild(pictoFleche); 2528 divContenuEntete.appendChild(divConteneurPictoFleche); 2529 2530 let divImgPicto = createDivImgPictoAsr(nature); 2531 divContenuEntete.appendChild(divImgPicto); 2532 2533 let divTitreAttribut = createDivTitreAttributAsr(nature, nomAxe, nom, sens, departement, commune, nonCommunique); 2534 2535 divContenuEntete.appendChild(divTitreAttribut); 2536 divASRAccordeon.appendChild(divContenuEntete); 2537 2538 // Ajouter le contenu du ASR 2539 let divContenu = document.createElement("div"); 2540 divContenu.className = 'bf-popin-contenu contenu-asr'; 2541 2542 let element = document.createElement("div"); 2543 element.className = "unElement unElementAsr"; 2544 let divVideArrow = document.createElement("div"); 2545 let objetAsr = document.createElement("div"); 2546 objetAsr.onclick = function () { 2547 $(this).parent().children(".unContenu").slideToggle("slow"); 2548 //On met à jour le sens des flèches 2549 majSensFleches($(this).children(".accordion-arrow")); 2550 } 2551 element.appendChild(objetAsr); 2552 2553 let contenu = createContenuElementASR(donneesAsr, j, nonCommunique); 2554 2555 element.appendChild(contenu); 2556 divVideArrow.className = "accordion-arrow open"; 2557 divContenu.appendChild(element); 2558 2559 $(divContenu).hide(); 2560 2561 divASRAccordeon.appendChild(divContenu); 2562 popin.appendChild(divASRAccordeon); 2563 } 2564 } 2565 return popin; 2566} 2567 2568// Create div titre d'un element ASR 2569function createDivTitreAttributAsr(nature, nomAxe, nom, sens, departement, commune, nonCommunique){ 2570 2571 // Create div titre d'un element ASR 2572 let elementsLibelle1 = [nomAxe + " - " + nom]; 2573 let elementsLibelle2 = ""; 2574 if(commune && commune !== nonCommunique && departement && departement !== nonCommunique) { 2575 elementsLibelle2 = commune + " (" + departement + ")"; 2576 } else if (departement && departement !== nonCommunique) { 2577 elementsLibelle2 = "(" + departement + ")"; 2578 } else if (commune && commune !== nonCommunique) { 2579 elementsLibelle2 = commune; 2580 } 2581 if(sens && sens !== nonCommunique) { 2582 if (elementsLibelle2) { 2583 elementsLibelle2 += ",<br>"; 2584 } 2585 elementsLibelle2 += "Sens : " + sens; 2586 } 2587 //insertion titre 2588 let divTitreAttribut = document.createElement("div"); 2589 divTitreAttribut.className = "titreAttributs"; 2590 let titre = document.createElement("h3"); 2591 titre.className = 'bf-popin-title titre-asr'; 2592 let texteTitre; 2593 switch (nature) { 2594 case bisonfute.EventTypeName.REPOS: 2595 texteTitre = document.createTextNode("Aire de repos"); 2596 break; 2597 case bisonfute.EventTypeName.SERVICE: 2598 texteTitre = document.createTextNode("Aire de services"); 2599 break; 2600 } 2601 titre.appendChild(texteTitre); 2602 divTitreAttribut.appendChild(titre); 2603 2604 let sousTitre1 = document.createElement("div"); 2605 sousTitre1.className = 'bf-popin-sous-title sous-titre-asr'; 2606 let texteSousTitre1 = document.createTextNode(elementsLibelle1); 2607 sousTitre1.appendChild(texteSousTitre1); 2608 divTitreAttribut.appendChild(sousTitre1); 2609 2610 let sousTitre2 = document.createElement("div"); 2611 sousTitre2.className = 'bf-popin-sous-title sous-titre-asr'; 2612 sousTitre2.innerHTML = elementsLibelle2; 2613 divTitreAttribut.appendChild(sousTitre2); 2614 2615 return divTitreAttribut; 2616} 2617 2618// Create div du contenu d'un element Aire services et repos 2619function createContenuElementASR(donneesAsr, j, nonCommunique) { 2620 let contenu = document.createElement("div"); 2621 contenu.className = "unContenu"; 2622 2623 // Bloc nombre de places 2624 let nbPlacesVl = donneesAsr[j].getProperties().nombre_de_places_vl; 2625 let nbPlacesPl = donneesAsr[j].getProperties().nombre_de_places_pl; 2626 let nbPlacesCampingCars = donneesAsr[j].getProperties().nombre_de_places_camping_cars; 2627 let nbPlacesPMR = donneesAsr[j].getProperties().nombre_de_places_pmr; 2628 2629 let divNbPlaces = document.createElement("div"); 2630 divNbPlaces.className = "nbPlaces"; 2631 let titreNbPlaces = document.createElement("div"); 2632 titreNbPlaces.className = "titreBloc"; 2633 titreNbPlaces.textContent = "Nombre de places"; 2634 contenu.appendChild(titreNbPlaces); 2635 divNbPlaces.appendChild(titreNbPlaces); 2636 2637 //VL
2638 let contenuVl = document.createElement("div"); 2639 let texteNbPlacesVl = nbPlacesVl || nonCommunique; 2640 contenuVl.textContent = "VL : " + texteNbPlacesVl; 2641 divNbPlaces.appendChild(contenuVl); 2642 2643 //PL 2644 let contenuPl = document.createElement("div"); 2645 let texteNbPlacesPl = nbPlacesPl || nonCommunique; 2646 contenuPl.textContent = "PL : " + texteNbPlacesPl; 2647 divNbPlaces.appendChild(contenuPl); 2648 2649 //Camping Cars 2650 let contenuCampingCars = document.createElement("div"); 2651 let texteNbPlacesCampingCars = nbPlacesCampingCars || nonCommunique; 2652 contenuCampingCars.textContent = "Camping-cars : " + texteNbPlacesCampingCars; 2653 divNbPlaces.appendChild(contenuCampingCars); 2654 2655 //PMR 2656 let contenuPmr = document.createElement("div"); 2657 let texteNbPlacesPMR = nbPlacesPMR || nonCommunique; 2658 contenuPmr.textContent = "PMR : " + texteNbPlacesPMR; 2659 divNbPlaces.appendChild(contenuPmr); 2660 2661 contenu.appendChild(divNbPlaces); 2662 2663 let borneRechargeElectrique = donneesAsr[j].getProperties().bornes_de_recharge_electrique; 2664 let stationGonflable = donneesAsr[j].getProperties().station_de_gonflage; 2665 let douches = donneesAsr[j].getProperties().douches; 2666 let serviceEnseigneRestau = donneesAsr[j].getProperties().services_enseignes_restauration; 2667 2668 let divServices = document.createElement("div"); 2669 divServices.className = "listeServices"; 2670 let titreListeServices = document.createElement("div"); 2671 titreListeServices.className = "titreBloc"; 2672 titreListeServices.textContent = "Liste des services disponibles"; 2673 contenu.appendChild(titreListeServices); 2674 divServices.appendChild(titreListeServices); 2675 2676 //Bornes de recharge électrique
2677 let contenuBRE = document.createElement("div"); 2678 let texteBorneRechargeElectrique = borneRechargeElectrique || nonCommunique; 2679 contenuBRE.textContent = "Bornes de recharge électrique : " + texteBorneRechargeElectrique; 2680 divServices.appendChild(contenuBRE); 2681 2682 //Station de gonflage 2683 let contenuSG = document.createElement("div"); 2684 let texteStationGonflable = stationGonflable || nonCommunique; 2685 contenuSG.textContent = "Station de gonflage : " + texteStationGonflable; 2686 divServices.appendChild(contenuSG); 2687 2688 //Douches 2689 let contenuDouches = document.createElement("div"); 2690 let texteDouches = douches || nonCommunique; 2691 contenuDouches.textContent = "Douches : " + texteDouches; 2692 divServices.appendChild(contenuDouches); 2693 2694 //Services/Enseignes/Restauration 2695 let contenuSER = document.createElement("div"); 2696 let texteServiceEnseigneRestau = serviceEnseigneRestau || nonCommunique; 2697 contenuSER.textContent = "Services/Enseignes/Restauration : " + texteServiceEnseigneRestau; 2698 divServices.appendChild(contenuSER); 2699 2700 contenu.appendChild(divServices); 2701 2702 return contenu; 2703} 2704 2705// Creation div icône événement en fonction du type 2706function createDivImgPictoAsr(nature) { 2707 let divImgPicto = document.createElement("div"); 2708 divImgPicto.className = "divPicto"; 2709 let imgPicto = document.createElement("span"); 2710 imgPicto.className = "pictoEvtASR"; 2711 2712 switch (nature) { 2713 case bisonfute.EventTypeName.REPOS: 2714 imgPicto.className = bisonfute.EventTypeName.REPOS.toLowerCase(); 2715 imgPicto.setAttribute("style", "background-image : url(" + bisonfute.ApiRoutes.airerepos); 2716 break; 2717 case bisonfute.EventTypeName.SERVICE: 2718 imgPicto.className = bisonfute.EventTypeName.SERVICE; 2719 imgPicto.setAttribute("style", "background-image : url(" + bisonfute.ApiRoutes.aireservices); 2720 break; 2721 } 2722 imgPicto.title = nature; 2723 2724 divImgPicto.appendChild(imgPicto); 2725 2726 return divImgPicto; 2727} 2728 2729// Create div titre d'un element mesure trafic 2730function createDivTitreAttributMesureTrafic(nomAxe, type, libelle){ 2731 2732 let elementsLibelle1 = [nomAxe + ", " + type]; 2733 let elementsLibelle2 = ""; 2734 if(libelle && libelle !== "undefined") { 2735 elementsLibelle2 = libelle; 2736 } 2737 // Create div titre d'un element mesure trafic 2738 let divTitreAttribut = document.createElement("div"); 2739 divTitreAttribut.className = "titreAttributs"; 2740 let titre = document.createElement("h3"); 2741 titre.className = 'bf-popin-title titre-mesures-trafic'; 2742 let texteTitre = document.createTextNode(elementsLibelle1); 2743 titre.appendChild(texteTitre); 2744 divTitreAttribut.appendChild(titre); 2745 2746 // Create div sous-titre d'un element mesure trafic 2747 let sousTitre = document.createElement("div"); 2748 sousTitre.className = 'bf-popin-sous-title sous-titre-mesures-trafic'; 2749 let texteSousTitre = document.createTextNode(elementsLibelle2); 2750 sousTitre.appendChild(texteSousTitre); 2751 divTitreAttribut.appendChild(sousTitre); 2752 2753 return divTitreAttribut; 2754} 2755 2756// Create div du contenu d'un element Aire services et repos 2757function createContenuElementMesuresTrafic(donneesMesuresPGT) { 2758 let contenu = document.createElement("div"); 2759 contenu.className = "unContenu"; 2760 2761 // Bloc validite 2762 let debutValidite = donneesMesuresPGT[0].getProperties().dh_debut; 2763 let finValidite = donneesMesuresPGT[0].getProperties().dh_fin; 2764 if(debutValidite && finValidite) { 2765 let contenuDebutValidite = document.createElement("div"); 2766 contenuDebutValidite.textContent = "Début validité : " + debutValidite; 2767 let contenuFinValidite = document.createElement("div"); 2768 contenuFinValidite.textContent = "Fin validité : " + finValidite; 2769 contenu.appendChild(contenuDebutValidite); 2770 contenu.appendChild(contenuFinValidite); 2771 } 2772 2773 let evenementGenerateur = donneesMesuresPGT[0].getProperties().evenement_generateur; 2774 2775 if(evenementGenerateur && evenementGenerateur !=="AUCUN"){ 2776 let contenuElGen = document.createElement("div"); 2777 contenuElGen.textContent = "Evenement : " + evenementGenerateur; 2778 contenu.appendChild(contenuElGen); 2779 } 2780 2781 let restriction = donneesMesuresPGT[0].getProperties().restriction; 2782 2783 if(restriction && restriction !=="AUCUNE"){ 2784 let restrictionName = bisonfute.RestrictionTypeName[restriction] || restriction; 2785 2786 let contenuRestriction = document.createElement("div"); 2787 contenuRestriction.textContent = "Restriction : " + restrictionName; 2788 contenu.appendChild(contenuRestriction); 2789 } 2790 2791 let limVitessePl = donneesMesuresPGT[0].getProperties().limitation_vitesse_pl; 2792 2793 if(limVitessePl){ 2794 let contenuLimVitessePl = document.createElement("div"); 2795 contenuLimVitessePl.textContent = "Lim. vitesse PL : " + limVitessePl+" Km/h"; 2796 contenu.appendChild(contenuLimVitessePl); 2797 } 2798 2799 let limVitesseVl = donneesMesuresPGT[0].getProperties().limitation_vitesse_vl; 2800 2801 if(limVitesseVl){ 2802 let contenuLimVitesseVl = document.createElement("div"); 2803 contenuLimVitesseVl.textContent = "Lim. vitesse VL : " + limVitesseVl+" Km/h"; 2804 contenu.appendChild(contenuLimVitesseVl); 2805 } 2806 2807 let intDep = donneesMesuresPGT[0].getProperties().interdiction_depassement; 2808 2809 if(intDep && intDep !== "NON"){ 2810 let contenuIntDep = document.createElement("div"); 2811 contenuIntDep.textContent = "Interdiction dépassement : " + intDep; 2812 contenu.appendChild(contenuIntDep); 2813 } 2814 2815 let sens = generateSens(donneesMesuresPGT); 2816 2817 if(sens) { 2818 let contenuSens = document.createElement("div"); 2819 contenuSens.className = "sensMesuresTrafic"; 2820 contenuSens.textContent = sens; 2821 contenu.appendChild(contenuSens); 2822 } 2823 2824 return contenu; 2825} 2826 2827// Create div du sens d'un element Mesures Trafic PGT 2828 2829 2830 2831function generateSens(donneesMesuresPGT) {
2832 let comDeb = donneesMesuresPGT[0].getProperties().sens_de; 2833 let comFin = donneesMesuresPGT[0].getProperties().sens_vers; 2834 2835 if(comDeb && comFin) { 2836 return `Sens : de ${comDeb} Ã ${comFin}`; 2837 } 2838 2839 let codesDep = donneesMesuresPGT[0].getProperties().code_dep; 2840 let communes = donneesMesuresPGT[0].getProperties().communes; 2841 let depDeb; 2842 let depFin; 2843 2844 if(communes) { 2845 let arrCommunes = communes.split(",").map(comm => comm.trim()); 2846 2847 if (arrCommunes.length == 1) { 2848 comDeb = arrCommunes[0]; 2849 comFin = arrCommunes[0]; 2850 } else if (arrCommunes.length > 1) { 2851 comDeb = arrCommunes[0]; 2852 comFin = arrCommunes[arrCommunes.length - 1]; 2853 } 2854 } 2855 2856 if(codesDep) { 2857 let arrCodesDep = codesDep.split(",").map(dep => dep.trim()); 2858 2859 if (arrCodesDep.length == 1) { 2860 depDeb = arrCodesDep[0]; 2861 depFin = arrCodesDep[0]; 2862 } else if (arrCodesDep.length > 1) { 2863 depDeb = arrCodesDep[0]; 2864 depFin = arrCodesDep[arrCodesDep.length - 1]; 2865 } 2866 } 2867 2868 return comDeb && comFin && depDeb && depFin ? `Sens : de ${comDeb} (${depDeb}) Ã ${comFin} (${depFin})` : ""; 2869} 2870/* 2871 ### jQuery XML to JSON Plugin v1.2 - 2013-02-18 ### 2872 * http://www.fyneworks.com/ - [email protected] 2873 * Licensed under http://en.wikipedia.org/wiki/MIT_License 2874 ### 2875 Website: http://www.fyneworks.com/jquery/xml-to-json/ 2876*//* 2877 # INSPIRED BY: http://www.terracoder.com/ 2878 AND: http://www.thomasfrank.se/xml_to_json.html 2879 AND: http://www.kawa.net/works/js/xml/objtree-e.html 2880*//* 2881 This simple script converts XML (document of code) into a JSON object. It is the combination of 2 2882 'xml to json' great parsers (see below) which allows for both 'simple' and 'extended' parsing modes. 2883*/ 2884// Avoid collisions 2885;if(window.jQuery) (function($){ 2886 2887 // Add function to jQuery namespace 2888 $.extend({ 2889 2890 // converts xml documents and xml text to json object 2891 xml2json: function(xml, extended) { 2892 if(!xml) return {}; // quick fail 2893 2894 //### PARSER LIBRARY 2895 // Core function 2896 function parseXML(node, simple){ 2897 if(!node) return null; 2898 var txt = '', obj = null, att = null; 2899 var nt = node.nodeType, nn = jsVar(node.localName || node.nodeName); 2900 var nv = node.text || node.nodeValue || ''; 2901 /*DBG*/ //if(window.console) console.log(['x2j',nn,nt,nv.length+' bytes']); 2902 if(node.childNodes){ 2903 if(node.childNodes.length>0){ 2904 /*DBG*/ //if(window.console) console.log(['x2j',nn,'CHILDREN',node.childNodes]); 2905 $.each(node.childNodes, function(n,cn){ 2906 var cnt = cn.nodeType, cnn = jsVar(cn.localName || cn.nodeName); 2907 var cnv = cn.text || cn.nodeValue || ''; 2908 /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>a',cnn,cnt,cnv]); 2909 if(cnt == 8){ 2910 /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>b',cnn,'COMMENT (ignore)']); 2911 return; // ignore comment node 2912 } 2913 else if(cnt == 3 || cnt == 4 || !cnn){ 2914 // ignore white-space in between tags 2915 if(cnv.match(/^\s+$/)){ 2916 /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>c',cnn,'WHITE-SPACE (ignore)']); 2917 return; 2918 }; 2919 /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>d',cnn,'TEXT']); 2920 txt += cnv.replace(/^\s+/,'').replace(/\s+$/,''); 2921 // make sure we ditch trailing spaces from markup 2922 } 2923 else{ 2924 /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>e',cnn,'OBJECT']); 2925 obj = obj || {}; 2926 if(obj[cnn]){ 2927 /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>f',cnn,'ARRAY']); 2928 2929 // http://forum.jquery.com/topic/jquery-jquery-xml2json-problems-when-siblings-of-the-same-tagname-only-have-a-textnode-as-a-child 2930 if(!obj[cnn].length) obj[cnn] = myArr(obj[cnn]); 2931 obj[cnn] = myArr(obj[cnn]); 2932 2933 obj[cnn][ obj[cnn].length ] = parseXML(cn, true/* simple */); 2934 obj[cnn].length = obj[cnn].length; 2935 } 2936 else{ 2937 /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>g',cnn,'dig deeper...']); 2938 obj[cnn] = parseXML(cn); 2939 }; 2940 }; 2941 }); 2942 };//node.childNodes.length>0 2943 };//node.childNodes 2944 if(node.attributes){ 2945 if(node.attributes.length>0){ 2946 /*DBG*/ //if(window.console) console.log(['x2j',nn,'ATTRIBUTES',node.attributes]) 2947 att = {}; obj = obj || {}; 2948 $.each(node.attributes, function(a,at){ 2949 var atn = jsVar(at.name), atv = at.value; 2950 att[atn] = atv; 2951 if(obj[atn]){ 2952 /*DBG*/ //if(window.console) console.log(['x2j',nn,'attr>',atn,'ARRAY']); 2953 2954 // http://forum.jquery.com/topic/jquery-jquery-xml2json-problems-when-siblings-of-the-same-tagname-only-have-a-textnode-as-a-child 2955 //if(!obj[atn].length) obj[atn] = myArr(obj[atn]);//[ obj[ atn ] ]; 2956 obj[cnn] = myArr(obj[cnn]); 2957 2958 obj[atn][ obj[atn].length ] = atv; 2959 obj[atn].length = obj[atn].length; 2960 } 2961 else{ 2962 /*DBG*/ //if(window.console) console.log(['x2j',nn,'attr>',atn,'TEXT']); 2963 obj[atn] = atv; 2964 }; 2965 }); 2966 //obj['attributes'] = att; 2967 };//node.attributes.length>0 2968 };//node.attributes 2969 if(obj){ 2970 obj = $.extend( (txt!='' ? new String(txt) : {}),/* {text:txt},*/ obj || {}/*, att || {}*/); 2971 txt = (obj.text) ? (typeof(obj.text)=='object' ? obj.text : [obj.text || '']).c
2971oncat([txt]) : txt; 2972 if(txt) obj.text = txt; 2973 txt = ''; 2974 }; 2975 var out = obj || txt; 2976 //console.log([extended, simple, out]); 2977 if(extended){ 2978 if(txt) out = {};//new String(out); 2979 txt = out.text || txt || ''; 2980 if(txt) out.text = txt; 2981 if(!simple) out = myArr(out); 2982 }; 2983 return out; 2984 };// parseXML 2985 // Core Function End 2986 // Utility functions 2987 var jsVar = function(s){ return String(s || '').replace(/-/g,"_"); }; 2988 2989 // NEW isNum function: 01/09/2010 2990 // Thanks to Emile Grau, GigaTecnologies S.L., www.gigatransfer.com, www.mygigamail.com 2991 function isNum(s){ 2992 // based on utility function isNum from xml2json plugin (http://www.fyneworks.com/ - [email protected]) 2993 // few bugs corrected from original function : 2994 // - syntax error : regexp.test(string) instead of string.test(reg) 2995 // - regexp modified to accept comma as decimal mark (latin syntax : 25,24 ) 2996 // - regexp modified to reject if no number before decimal mark : ".7" is not accepted 2997 // - string is "trimmed", allowing to accept space at the beginning and end of string 2998 var regexp=/^((-)?([0-9]+)(([\.\,]{0,1})([0-9]+))?$)/ 2999 return (typeof s == "number") || regexp.test(String((s && typeof s == "string") ? jQuery.trim(s) : '')); 3000 }; 3001 // OLD isNum function: (for reference only) 3002 //var isNum = function(s){ return (typeof s == "number") || String((s && typeof s == "string") ? s : '').test(/^((-)?([0-9]*)((\.{0,1})([0-9]+))?$)/); }; 3003 3004 var myArr = function(o){ 3005 3006 // http://forum.jquery.com/topic/jquery-jquery-xml2json-problems-when-siblings-of-the-same-tagname-only-have-a-textnode-as-a-child 3007 //if(!o.length) o = [ o ]; o.length=o.length; 3008 if(!$.isArray(o)) o = [ o ]; o.length=o.length; 3009 3010 // here is where you can attach additional functionality, such as searching and sorting... 3011 return o; 3012 }; 3013 // Utility functions End 3014 //### PARSER LIBRARY END 3015 3016 // Convert plain text to xml 3017 if(typeof xml=='string') xml = $.text2xml(xml); 3018 3019 // Quick fail if not xml (or if this is a node) 3020 if(!xml.nodeType) return; 3021 if(xml.nodeType == 3 || xml.nodeType == 4) return xml.nodeValue; 3022 3023 // Find xml root node 3024 var root = (xml.nodeType == 9) ? xml.documentElement : xml; 3025 3026 // Convert xml to json 3027 var out = parseXML(root, true /* simple */); 3028 3029 // Clean-up memory 3030 xml = null; root = null; 3031 3032 // Send output 3033 return out; 3034 }, 3035 3036 // Convert text to XML DOM 3037 text2xml: function(str) { 3038 // NOTE: I'd like to use jQuery for this, but jQuery makes all tags uppercase 3039 //return $(xml)[0]; 3040 var out; 3041 try{ 3042 var xml = ((!$.support.opacity && !$.support.style))?new ActiveXObject("Microsoft.XMLDOM"):new DOMParser(); 3043 xml.async = false; 3044 }catch(e){ throw new Error("XML Parser could not be instantiated") }; 3045 try{ 3046 if((!$.support.opacity && !$.support.style)) out = (xml.loadXML(str))?xml:false; 3047 else out = xml.parseFromString(str, "text/xml"); 3048 }catch(e){ throw new Error("Error parsing XML string") }; 3049 return out; 3050 } 3051 3052 }); // extend $ 3053 3054})(jQuery); 3055/** 3056Auteur : Jérémy Latorre 3057Date: 11/06/2013 3058Description: 3059 - Gestion du fonctionnement du carousel 3060**/ 3061 3062 3063//Verrou pour eviter les conflict entre l'animation et l'action d'un user 3064var lock = false; 3065//Methode event de scroll auto dans le menu - descente 3066function triggerClickLeft() { 3067 3068} 3069 3070//Methode event de scroll auto dans le menu - monté 3071function triggerClickRight() { 3072 3073} 3074 3075 3076//Methode réalisant la translation des articles vers le haut 3077function slideToTop() { 3078 if ((parseInt($(".vignette_carousel:first-child").css("top")) !=0 ) && (lock == false) && (parseInt($(".vignette_carousel:first-child").css("top"))+133 <= 1 ) ) { 3079 3080 //verrouille l'acces à la méthode 3081 lock = true; 3082 $("#acceuil #colonne3 #conteneur_carousel > .vignette_carousel").each(function() { 3083 var position = parseInt($(this).css("top")); 3084 $(this).animate({ 3085 position : 'absolute', 3086 top : (position + 133) 3087 }, 100, function() {//action déclanchée à la fin de l'animation 3088 //libération du verrou 3089 lock = false;
3090 }); 3091 }); 3092 } 3093} 3094 3095//Methode réalisant la translation des articles vers le bas 3096function slideToBottom() { 3097 if ((parseInt($(".vignette_carousel:last-child").css("top")) >= parseInt($("#acceuil #colonne3 #conteneur_carousel").css("height"))) && (lock == false)) { 3098 3099 //verrouille l'acces à la méthode 3100 lock = true; 3101 var total = $(".vignette_carousel:last-child").outerHeight() + $(".vignette_carousel:last-child").offset().top; 3102 $("#acceuil #colonne3 #conteneur_carousel > .vignette_carousel").each(function() { 3103 var position = parseInt($(this).css("top")); 3104 $(this).animate({ 3105 position : 'absolute', 3106 top : (position - 133) 3107 }, 100, function() {//action déclanchée à la fin de l'animation 3108 //libération du verrou 3109 lock = false; 3110 }); 3111 }); 3112 } 3113} 3114function getParameterByName(name, url) { 3115 if (!url) { 3116 url = window.location.href; 3117 } 3118 name = name.replace(/[\[\]]/g, "\\$&"); 3119 var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), 3120 results = regex.exec(url); 3121 if (!results) return null; 3122 if (!results[2]) return ''; 3123 return decodeURIComponent(results[2].replace(/\+/g, " ")); 3124} 3125 3126(function(a,b){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|kfapwi|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|android|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))){ 3127 var lastInDays = 7; 3128 var fromMobileParam = getParameterByName("fromMobile"); 3129 var desktopParam = getParameterByName("desktop"); 3130 var mobileParam = getParameterByName("smartphone"); 3131 // Récupération de la valeur du cookie à setter via les paramètres d'urls du côté de l'application Web 3132 if (mobileParam != null && mobileParam=="true") { 3133 // Set le cookie 3134 bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('smartphone',true,lastInDays); 3135 bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('desktop',false,lastInDays); 3136 bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('fromMobile',false,lastInDays); 3137 // Redirige vers la version mobile 3138 window.location=b; 3139 3140 } else if(desktopParam != null && desktopParam=="true"){ 3141 // Set le cookie 3142 bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('desktop',true,lastInDays); 3143 bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('smartphone',false,lastInDays); 3144 bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('fromMobile',false,lastInDays); 3145
3146 // Reste sur la version desktop 3147 3148 } else if(fromMobileParam != null && fromMobileParam=="true"){ 3149 // Set le cookie 3150 bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('fromMobile',true,lastInDays); 3151 bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('desktop',false,lastInDays); 3152 bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('smartphone',false,lastInDays); 3153 3154 // Reste sur la version desktop 3155 3156 }; 3157 3158 var x = bisonfute.geoloc.CookiesBrowser.INSTANCE.getCookie('smartphone');// si déjà choisi mobile à true 3159 var y = bisonfute.geoloc.CookiesBrowser.INSTANCE.getCookie('desktop');// si déjà choisi ordinateur à true 3160 var fromMobile = bisonfute.geoloc.CookiesBrowser.INSTANCE.getCookie('fromMobile'); 3161 if(fromMobile=="true"){ 3162 bisonfute.geoloc.CookiesBrowser.INSTANCE.removeCookie('fromMobile'); 3163 bisonfute.geoloc.CookiesBrowser.INSTANCE.removeCookie('smartphone'); 3164 bisonfute.geoloc.CookiesBrowser.INSTANCE.removeCookie('desktop'); 3165 } 3166 else{ 3167 if(x == "true"){ 3168 window.location=b; 3169 } else if(y == "true"){ 3170 // On reste sur cette page (index.html) 3171 } 3172 else{ 3173 // Si pas de coockie , on le redirige vers le mobile avec le choix à faire 3174 if ((sessionStorage.getItem('tabletSessionWeb')== 'true') || bisonfute.geoloc.CookiesBrowser.INSTANCE.getCookie('tabletWeb') == 'true') { 3175 } 3176 else { 3177 window.location=b+"#viewport"; 3178 } 3179 } 3180 } 3181 }})(navigator.userAgent||navigator.vendor||window.opera, bisonfute.core.INSTANCE.getUrls().mobile);/** 3182Auteur : Jérémy Latorre 3183Date: 11/06/2013 3184Description: 3185 - Gestion de la géolocalisation et de l'affichage de la carte de la page d'accueil 3186**/ 3187 3188//On garde en mémoire la localisation de l'utilisateur et l'url de la carte 3189var localisation; 3190var urlCarteAccueil; 3191$(document).ready(function() { 3192 3193 /*//au chargement de la page on instancie la carte en fonction de la zone de geolocalisation 3194 urlCarteAccueil = bisonfute.urls.INSTANCE.getCarteAccueil("fr"); 3195 var carteAccueil = document.createElement("img"); 3196 carteAccueil.alt = "Accédez au trafic en temps réel"; 3197 carteAccueil.src = urlCarteAccueil; 3198 $("#mapAccueil").append(carteAccueil); 3199 3200 //Récupération de la position de l'utilisateur via l'api de geoloc 3201 3202 // Callback donc asynchrone. 3203 var id = function(xy) { 3204 // retour du callback, et c'est à ce moment qu'on affecte la nouvelle valeur et qu'on modifie l'img dans le dom. 3205 urlCarteAccueil = bisonfute.urls.INSTANCE.getCarteAccueil(xy.id); 3206 carteAccueil.alt = "Accédez au trafic en temps réel"; 3207 carteAccueil.src = urlCarteAccueil; 3208 $("#mapAccueil").append(carteAccueil); 3209 }; 3210 3211 // Appel de la geoloc qui prend un callback en param. 3212 bisonfute.geoloc.getLocalisation(id,this);*/ 3213 3214 //positionnement de la carte par défaut pour le premier affichage avant géoloc 3215 fullLoc = "" + '571284.41' + "-" + '6744675.57' + "-" + 2300.0; 3216 bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie(bisonfute.env.cookies.name, fullLoc); 3217 3218 m = new bisonfute.map.Map("map", { 3219 periode: 'accueil', 3220 cpcRenderer: creationPopup, 3221 vhRenderer: getHTMLPopupVHAsync, 3222 travauxRenderer: formatData, 3223 camerasRenderer: formatDataCameras, 3224 liensVHRenderer: formatDataLiensVH, 3225 }); 3226 3227 // Callback donc asynchrone. 3228 var id = function(xy) { 3229 // retour du callback, et c'est à ce moment qu'on positionne la carte en fonction du choix utilisateur sur la geoloc 3230 $("#map").empty(); 3231 //si il n'accepte pas la geoloc, on cale la carte sur la position suivante 3232 if (xy.id == 'fr') { 3233 fullLoc = "" + '571284.41' + "-" + '6744675.57' + "-" + 2300.0; 3234 bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie(bisonfute.env.cookies.name, fullLoc); 3235 } 3236 //sinon, on place la carte en fonction de sa position 3237 else { 3238 fullLoc = "" + xy.x + "-" + xy.y + "-" + 250.0; 3239 bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie(bisonfute.env.cookies.name, fullLoc); 3240 } 3241 3242 m = new bisonfute.map.Map("map", { 3243 periode: 'accueil', 3244 cpcRenderer: creationPopup, 3245 vhRenderer: getHTMLPopupVHAsync, 3246 travauxRenderer: formatData, 3247 camerasRenderer: formatDataCameras, 3248 liensVHRenderer: formatDataLiensVH, 3249 }); 3250 }; 3251 3252 // Appel de la geoloc qui prend un callback ci-dessus en param. 3253 bisonfute.geoloc.getLocalisation(id,this); 3254 3255});/** 3256 * Auteur : Jérémy Latorre Date: 11/06/2013 Description: - Fichier appelé sur 3257 * toutes les pages - Gère la conservation de la langue entre les pages - 3258 * Recherche site dans le header Modification; 26/3/2015 hugues lienAcceuil 3259 * facultatif pour traficolor 3260 */ 3261 3262$(document).ready(function() { 3263 // On associe la touche entrer au lancement de la recherche dans l'entete 3264 $("#search").keypress(function(event) { 3265 if (event.keyCode == 13) { 3266 location.href = rechercher(); 3267 } 3268 }); 3269 3270 // On récupère l'ensemble des liens externes 3271 $(".sites_gouv").each(function() { 3272 all_a = $(this).find("a"); 3273 // On les forces dans un nouvel onglet 3274 for (i = 0; i < all_a.length; i++) { 3275 all_a[i].setAttribute("target", "_blank"); 3276 } 3277 }); 3278 // Gestion des langues dans le footer, et correction des anomalies
3279 gestionLang(); 3280 // On tronque certains texte 3281 /* 3282 * $(".textBandeau").each(function(){ $(this).trunk8({ lines:20, 3283 * tooltip:false }); }); 3284 */ 3285 $("#block_superpose").children(".block_superpose_texte").each(function() { 3286 $(this).trunk8({ 3287 lines : 8, 3288 tooltip : false 3289 }); 3290 }); 3291 gestionOuvertureLiens($("#article")); 3292 gestionOuvertureLiens($("#rubrique")); 3293 gestionOuvertureLiens($("#contenu-ctx-vertical")); 3294 gestionOuvertureLiens($("#contenu-ctx-horizontal")); 3295 // Au clic sur le fond gris des popup, cela ferme la popup 3296 $("#black_popup").click(function() { 3297 fadeOut(500); 3298 }); 3299}); 3300 3301/** 3302 * ****************************** Positionner le popup au centre de la page 3303 * ******************************* 3304 */ 3305/** ******************************************************************************************************** */ 3306function positionPopup() { 3307 3308 if (!$("#popup").is(':visible')) { 3309 return; 3310 } 3311 $("#popup").css({ 3312 left : ($(window).width() - $('#popup').width()) / 2, 3313 top : ($(window).height() - $('#popup').height()) / 7, 3314 position : 'absolute' 3315 }); 3316 3317 window.scrollTo(0, 0); 3318} 3319 3320/** 3321 * ************************** On gère l'ouverture des liens dans un nouvel 3322 * onglet *************************** 3323 */ 3324/** ********************************************************************************************************** */ 3325function gestionOuvertureLiens(element) { 3326 element.find("a").each( 3327 function() { 3328 if (!$(this).hasClass("article-institu") 3329 && !$(this).hasClass("lienCodeContact")) { 3330 if ($(this).hasClass("LienTelecharg") 3331 || $(this).hasClass("spip_out")) { 3332 $(this).attr("target", "_blank"); 3333 } 3334 } 3335 }); 3336 3337} 3338 3339/** 3340 * **************On génère le nouveau href du bouton recherher en fonction de la 3341 * recherche dans le header ****************** 3342 */ 3343/** ************************************************************************************************************************* */ 3344function rechercher() { 3345 var motscle = $("#search").val(); 3346 var tmp = motscle.replace(/\s/g, '_'); 3347 var tmp2 = remplacerAccent(tmp); 3348 var lang = $("#current-lang").val(); 3349 if (lang != "") { 3350 var nouvelleAdresse = "recherche,lang" + lang + ".html"; 3351 } else { 3352 var nouvelleAdresse = "recherche.html"; 3353 } 3354 sessionStorage.setItem("motscle", tmp); 3355 sessionStorage.setItem("lang", lang); 3356 sessionStorage.setItem("page", 1); 3357 3358 $("#search-button").attr("href", nouvelleAdresse); 3359 return nouvelleAdresse; 3360} 3361 3362/** 3363 * ************************** On vide la barre de recherche dans le header 3364 * *************************** 3365 */ 3366/** *************************************************************************************************** */ 3367function videBarre() { 3368 $("#search").val(""); 3369} 3370/** 3371 * ************************** Gestion des liens dans le footer pour conserver la lang *********************** 3372 */ 3373/** ********************************************************************************************************** */ 3374function gestionLang() { 3375 // On récupère la langue 3376 var lang = $("#current-lang").val(); 3377 // S'il y'a besoin on modifie les liens 3378 if (lang != "") { 3379 // On récupère les liens du footer 3380 var listeLiens = $("#article").find("a").each( 3381 function() { 3382 // si ce ne sont pas des liens externes alors on rajoute la 3383 // langue courrante en parametre pour la garder lors de la 3384 // navigation 3385 if ($(this).attr("href").lastIndexOf("http") == -1 3386 && $(this).attr("href").lastIndexOf("IMG") == -1 3387 && $(this).attr("href").lastIndexOf("lang") == -1 3388 && $(this).id != "mapAccueil" 3389 && !$(this).hasClass("url-calendrier") 3390 && !$(this).parent().hasClass("onglet") 3391 && !$(this).hasClass("lienAriane")) { 3392 var href = $(this).attr("href").replace('.html', ''); 3393 var nouveauLien = href + ',lang' + lang + '.html'; 3394 $(this).attr('href', nouveauLien); 3395 3396 } 3397 }); 3398 3399 var listeLiens = $(".full").find("a").each( 3400 function() { 3401 // si ce ne sont pas des liens externes alors on rajoute la 3402 // langue courrante en parametre pour la garder lors de la 3403 // navigation 3404 if($(this).attr("href") != undefined) 3405 {if ($(this).attr("href").lastIndexOf("http") == -1 3406 && $(this).attr("href").lastIndexOf("lang") == -1 3407 && $(this).id != "mapAccueil" 3408 && $(this).hasClass("spip_in") 3409 && !$(this).parent().hasClass("onglet") 3410 && !$(this).hasClass("lienAriane")) { 3411 var href = $(this).attr("href").replace('.html', ''); 3412 var nouveauLien = href + ',lang' + lang + '.html'; 3413 $(this).attr('href', nouveauLien); 3414 3415 }} 3416 }); 3417 var listeLiens = $(".contenu-ctx-vertical").find("a").each( 3418 function() { 3419 // si ce ne sont pas des liens externes alors on rajoute la 3420 // langue courrante en parametre pour la garder lors de la 3421 // navigation 3422 if ($(this).attr("href").lastIndexOf("http") == -1 3423 && $(this).attr("href").lastIndexOf("lang") == -1 3424 && $(this).id != "mapAccueil" 3425 && $(this).hasClass("spip_in") 3426 && !$(this).parent().hasClass("onglet") 3427 && !$(this).hasClass("lienAriane")) { 3428 var href = $(this).attr("href").replace('.html', ''); 3429 var nouveauLien = href + ',lang' + lang + '.html'; 3430 $(this).attr('href', nouveauLien); 3431 3432 } 3433 }); 3434 3435 var listeLiens = $(".footer").find("a").each(function() { 3436 // si ce ne sont pas des liens externes alors on rajoute la langue 3437 // courrante en parametre pour la garder lors de la navigation 3438 if ($(this).attr("href").lastIndexOf("http") == -1) { 3439 if (!$(this).hasClass("lien-mobile")) { 3440 var href = $(this).attr("href").replace('.html', ''); 3441 var nouveauLien = href + ',lang' + lang + '.html'; 3442 $(this).attr('href', nouveauLien); 3443 } 3444 } 3445 }); 3446 3447 var listeLiens = $(".article-liste").find(".texte").find("a").each( 3448 function() { 3449 // si ce ne sont pas des liens externes alors on rajoute la 3450 // langue courrante en parametre pour la garder lors de la 3451 // navigation 3452 if ($(this).attr("href").lastIndexOf("http") == -1 3453 && $(this).attr("href").lastIndexOf("IMG") == -1 3454 && $(this).attr("href").lastIndexOf("lang") == -1) { 3455 var href = $(this).attr("href").replace('.html', ''); 3456 var nouveauLien = href + ',lang' + lang + '.html'; 3457 $(this).attr('href', nouveauLien); 3458 3459 } 3460 }); 3461 3462 var listeLiens = $("#logo_bison_fute").find("a").each(function() { 3463 // si ce ne sont pas des liens externes alors on rajoute la langue 3464 // courrante en parametre pour la garder lors de la navigation 3465 if ($(this).attr("href").lastIndexOf("http") == -1) { 3466 var href = $(this).attr("href").replace('.html', ''); 3467 var nouveauLien = href + ',lang' + lang + '.html'; 3468 $(this).attr('href', nouveauLien); 3469 3470 } 3471 }); 3472 3473 // lien accueil facultatif 3474 if ($("#lienAccueil")) { 3475 if ($("#lienAccueil").attr("href")) { 3476 var href = $("#lienAccueil").attr("href").replace('.html', ''); 3477 var nouveauLien = href + ',lang' + lang + '.html'; 3478 $("#lienAccueil").attr('href', nouveauLien); 3479 } 3480 } 3481 3482 var listeLiens = $(".show-more").each( 3483 function() { 3484 // si ce ne sont pas des liens externes alors on rajoute la 3485 // langue courrante en parametre pour la garder lors de la 3486 // navigation 3487 if ($(this).attr("href").lastIndexOf("http") == -1 3488 && $(this).attr("href").lastIndexOf("#") == -1) { 3489 var href = $(this).attr("href").replace('.html', ''); 3490 var nouveauLien = href + ',lang' + lang + '.html'; 3491 $(this).attr('href', nouveauLien); 3492 3493 } 3494 }); 3495 3496 var listeLiens = $(".show-more-vignette").each( 3497 function() { 3498 // si ce ne sont pas des liens externes alors on rajoute la 3499 // langue courrante en parametre pour la garder lors de la 3500 // navigation 3501 if ($(this).attr("href").lastIndexOf("http") == -1 3502 && $(this).attr("href").lastIndexOf("lang") == -1) { 3503 var href = $(this).attr("href").replace('.html', ''); 3504 var nouveauLien = href + ',lang' + lang + '.html'; 3505 $(this).attr('href', nouveauLien); 3506 3507 } 3508 }); 3509 3510 } 3511 3512 var listeLiens = $(".footer").find("a").each(function() { 3513 // si ce ne sont pas des liens externes alors on rajoute la langue 3514 // courrante en parametre pour la garder lors de la navigation 3515 if ($(this).attr("href").lastIndexOf("http") != -1) { 3516 var curTitle = $(this).attr("title"); 3517 var nouveauTitle = curTitle + ", nouvelle fenêtre"; 3518 $(this).attr("title", nouveauTitle); 3519 } else { 3520 if (!$(this).hasClass("lien-mobile")) { 3521 var curTitle = $(this).attr("title"); 3522 var nouveauTitle = "Afficher la page " + curTitle; 3523 $(this).attr("title", nouveauTitle); 3524 } 3525 } 3526 }); 3527 3528 if (lang == "en") { 3529 open_ext_link_en(); 3530 translate_title_link_en(); 3531 } else { 3532 if (lang == "es") { 3533 open_ext_link_es(); 3534 translate_title_link_es(); 3535 } else { 3536 open_ext_link_fr(); 3537 translate_title_link_fr(); 3538 } 3539 } 3540} 3541 3542function remplacerAccent(chaine) { 3543 var tmp = chaine.replace(/é/g, '351'); 3544 tmp = tmp.replace(/è/g, '352'); 3545 tmp = tmp.replace(/ê/g, '353'); 3546 tmp = tmp.replace(/à /g, '354'); 3547 tmp = tmp.replace(/ù/g, '355'); 3548 tmp = tmp.replace(/\'/g, '356'); 3549 tmp = tmp.replace(/,/g, '357'); 3550 tmp = tmp.replace(/ï/g, '358'); 3551 tmp = tmp.replace(/î/g, '359'); 3552 tmp = tmp.replace(/ë/g, '360'); 3553 tmp = tmp.replace(/â/g, '361'); 3554 return tmp; 3555} 3556 3557function open_ext_link_fr() { 3558 var liens = document.getElementsByTagName('a'); 3559 // On recupere tous les liens (<a>) du document dans une variable (un 3560 // array), ici liens. 3561 // Une boucle qui parcourt le tableau (array) liens du debut a la fin. 3562 for (var i = 0; i < liens.length; ++i) { 3563 var varClassName = liens[i].className; 3564 3565 // Si les liens ont un nom de class egal a spip_out, alors on agit. 3566 if (!(varClassName instanceof SVGAnimatedString) 3567 && varClassName.substring(0, 8) == 'spip_out') { 3568 if (liens[i].title == "") 3569 liens[i].title = 'Ouverture dans une nouvelle fenetre'; 3570 3571 liens[i].target = '_blank'; 3572 } 3573 // Si les liens ont un nom de class egal a LienTelecharg, document ou 3574 // imprimer, alors on agit. 3575 if (liens[i].className == 'LienTelecharg' 3576 || liens[i].className == 'document' 3577 || liens[i].className == 'imprimer' 3578 || liens[i].type == 'application/pdf') { 3579 if (liens[i].title == "") { 3580 liens[i].title = 'Ouverture dans une nouvelle fenetre'; 3581 } 3582 liens[i].target = '_blank'; 3583 } 3584 // Ajout lien si c'est un SVG 3585 if (varClassName instanceof SVGAnimatedString) { 3586 if (liens[i].title == undefined) { 3587 liens[i].title = 'Ouverture dans une nouvelle fenetre'; 3588 } 3589 liens[i].target = '_blank'; 3590 } 3591 3592 } 3593} 3594function open_ext_link_en() { 3595 var liens = document.getElementsByTagName('a'); 3596 // On recupere tous les liens (<a>) du document dans une variable (un 3597 // array), ici liens. 3598 // Une boucle qui parcourt le tableau (array) liens du debut a la fin. 3599 for (var i = 0; i < liens.length; ++i) { 3600 var varClassName = liens[i].className; 3601 3602 // Si les liens ont un nom de class egal a spip_out, alors on agit. 3603 if (!(varClassName instanceof SVGAnimatedString) 3604 && varClassName.substring(0, 8) == 'spip_out') { 3605 if (liens[i].title == "") 3606 liens[i].title = 'Open new window'; 3607 liens[i].target = '_blank'; 3608 } 3609 // Si les liens ont un nom de class egal a LienTelecharg, document ou 3610 // imprimer, alors on agit. 3611 if (liens[i].className == 'LienTelecharg' 3612 || liens[i].className == 'document' 3613 || liens[i].className == 'imprimer' 3614 || liens[i].type == 'application/pdf') { 3615 if (liens[i].title == "") { 3616 liens[i].title = 'Open new window'; 3617 } 3618 liens[i].target = '_blank'; 3619 } 3620 // Ajout lien si c'est un SVG 3621 if (varClassName instanceof SVGAnimatedString) { 3622 if (liens[i].title == undefined) { 3623 liens[i].title = 'Open new window'; 3624 } 3625 liens[i].target = '_blank'; 3626 } 3627 } 3628} 3629function open_ext_link_es() { 3630 var liens = document.getElementsByTagName('a'); 3631 // On recupere tous les liens (<a>) du document dans une variable (un 3632 // array), ici liens. 3633 // Une boucle qui parcourt le tableau (array) liens du debut a la fin. 3634 for (var i = 0; i < liens.length; ++i) { 3635 var varClassName = liens[i].className; 3636 3637 // Si les liens ont un nom de class egal a spip_out, alors on agit. 3638 if (!(varClassName instanceof SVGAnimatedString) 3639 && varClassName.substring(0, 8) == 'spip_out') { 3640 if (liens[i].title == "") 3641 liens[i].title = 'apertura de una nueva ventana'; 3642 liens[i].target = '_blank'; 3643 } 3644 // Si les liens ont un nom de class egal a LienTelecharg, document ou 3645 // imprimer, alors on agit. 3646 if (liens[i].className == 'LienTelecharg' 3647 || liens[i].className == 'document' 3648 || liens[i].className == 'imprimer' 3649 || liens[i].type == 'application/pdf') { 3650 if (liens[i].title == "") { 3651 liens[i].title = 'apertura de una nueva ventana'; 3652 } 3653 liens[i].target = '_blank'; 3654 } 3655 // Ajout lien si c'est un SVG 3656 if (varClassName instanceof SVGAnimatedString) { 3657 if (liens[i].title == undefined) { 3658 liens[i].title = 'apertura de una nueva ventana'; 3659 } 3660 liens[i].target = '_blank'; 3661 } 3662 } 3663} 3664 3665function translate_title_link_fr() { 3666 var liens = document.getElementsByTagName('a'); 3667 for (var i = 0; i < liens.length; ++i) { 3668 liens[i].title = liens[i].title.replace('undefined, ', 'e-regie, '); 3669 } 3670} 3671function translate_title_link_en() { 3672 var liens = document.getElementsByTagName('a'); 3673 var btns = document.getElementsByTagName('button'); 3674 3675 for (var i = 0; i < liens.length; ++i) { 3676 liens[i].title = liens[i].title.replace('Ouvrir le document', 3677 'Open the document'); 3678 liens[i].title = liens[i].title.replace('dans une nouvelle fenêtre', 3679 'in a new window'); 3680 liens[i].title = liens[i].title.replace('nouvelle fenêtre', 3681 'new window'); 3682 liens[i].title = liens[i].title.replace('Afficher la page de détail', 3683 'View detail page'); 3684 liens[i].title = liens[i].title.replace('Afficher la page', 3685 'Display the page'); 3686 liens[i].title = liens[i].title.replace('Passer en langue', 3687 'Skip language'); 3688 liens[i].title = liens[i].title.replace('Langue sélectionnée', 3689 'Selected language'); 3690 liens[i].title = liens[i].title.replace('rubrique active', 3691 'active section'); 3692 liens[i].title = liens[i].title.replace('Consulter la page', 3693 'See the page'); 3694 liens[i].title = liens[i].title.replace('Afficher/Réduire l\'article', 3695 'View/Reduce the article'); 3696 liens[i].title = liens[i].title.replace('Imprimer l\'article', 3697 'Print the article'); 3698 3699 liens[i].title = liens[i].title.replace( 3700 'Afficher/Modifier la légende de la carte', 3701 'View/Edit the legend of the map'); 3702 liens[i].title = liens[i].title.replace( 3703 'Mettre la carte en plein écran', 'Put the map in full screen'); 3704 liens[i].title = liens[i].title.replace('Lancer la recherche', 3705 'Start the search'); 3706 liens[i].title = liens[i].title.replace( 3707 'Afficher le communiqué de presse', 'View the press release'); 3708 liens[i].title = liens[i].title.replace( 3709 'Afficher les prévisions de circulation nationales', 3710 'Show the national circulation forecast'); 3711 liens[i].title = liens[i].title.replace( 3712 'Afficher les conditions de circulation nationales', 3713 'Show the national circulation conditions'); 3714 liens[i].title = liens[i].title.replace( 3715 'Ouvrir le calendrier Bison Futé', 3716 'Open the Bison Futé calendar'); 3717 liens[i].title = liens[i].title.replace('Accueil du site Bison Futé', 3718 'Home page of the Bison Futé website'); 3719 liens[i].title = liens[i].title.replace('undefined, ', 'e-regie, '); 3720 } 3721 3722 for (var i = 0; i < btns.length; ++i) { 3723 liens[i].title = liens[i].title.replace('Lancer la recherche', 3724 'Start the search'); 3725 } 3726 3727 $(".icon-color").each( 3728 function() { 3729 var this_title = $(this).attr('title'); 3730 this_title = this_title.replace('Couleur de départ', 3731 'Departures color'); 3732 this_title = this_title.replace('Couleur de retour', 3733 'Returns color'); 3734 this_title = this_title.replace('vert', 'green'); 3735 this_title = this_title.replace('orange', 'orange'); 3736 this_title = this_title.replace('rouge', 'red'); 3737 this_title = this_title.replace('noir', 'black'); 3738 3739 $(this).attr('title', this_title); 3740 }); 3741} 3742function translate_title_link_es() { 3743 var liens = document.getElementsByTagName('a'); 3744 var btns = document.getElementsByTagName('button'); 3745 3746 for (var i = 0; i < liens.length; ++i) { 3747 liens[i].title = liens[i].title.replace('Ouvrir le document', 3748 'Abra el documento'); 3749 liens[i].title = liens[i].title.replace('dans une nouvelle fenêtre', 3750
3750 'en una nueva ventana'); 3751 liens[i].title = liens[i].title.replace('nouvelle fenêtre', 3752 'nueva ventana'); 3753 liens[i].title = liens[i].title.replace('Afficher la page de détail', 3754 'Ver página de detalles'); 3755 liens[i].title = liens[i].title.replace('Afficher la page', 3756 'Viendo página'); 3757 liens[i].title = liens[i].title.replace('Passer en langue', 3758 'Saltar idioma'); 3759 liens[i].title = liens[i].title.replace('Langue sélectionnée', 3760 'Idioma seleccionado'); 3761 liens[i].title = liens[i].title.replace('rubrique active', 3762 'sección activa'); 3763 liens[i].title = liens[i].title.replace('Consulter la page', 3764 'Consulte la página'); 3765 liens[i].title = liens[i].title.replace('Afficher/Réduire l\'article', 3766 'Ver/Reducir el artÃculo'); 3767 liens[i].title = liens[i].title.replace('Imprimer l\'article', 3768 'Imprimir el artÃculo'); 3769 3770 liens[i].title = liens[i].title.replace( 3771 'Afficher/Modifier la légende de la carte', 3772 'Ver/Cambiar leyenda del mapa'); 3773 liens[i].title = liens[i].title.replace( 3774 'Mettre la carte en plein écran', 3775 'Ponga el mapa en pantalla completa'); 3776 liens[i].title = liens[i].title.replace('Lancer la recherche', 3777 'Iniciar la búsqueda'); 3778 liens[i].title = liens[i].title.replace( 3779 'Afficher le communiqué de presse', 3780 'Ver el comunicado de prensa'); 3781 liens[i].title = liens[i].title.replace( 3782 'Afficher les prévisions de circulation nationales', 3783 'Pronóstico de circulación nacional'); 3784 liens[i].title = liens[i].title.replace( 3785 'Afficher les conditions de circulation nationales', 3786 'Ver las condiciones de circulación nacional'); 3787 liens[i].title = liens[i].title.replace( 3788 'Ouvrir le calendrier Bison Futé', 3789 'Abre el Bison Futé calendario'); 3790 liens[i].title = liens[i].title.replace('Accueil du site Bison Futé', 3791 'Página de inicio'); 3792 liens[i].title = liens[i].title.replace('undefined, ', 'e-regie, '); 3793 } 3794 3795 for (var i = 0; i < btns.length; ++i) { 3796 liens[i].title = liens[i].title.replace('Lancer la recherche', 3797 'Iniciar la búsqueda'); 3798 } 3799 3800 $(".icon-color").each(function() { 3801 var this_title = $(this).attr('title'); 3802 this_title = this_title.replace('Couleur de départ', 'Salidas color'); 3803 this_title = this_title.replace('Couleur de retour', 'Vueltas color'); 3804 this_title = this_title.replace('vert', 'verde'); 3805 this_title = this_title.replace('orange', 'naranja'); 3806 this_title = this_title.replace('rouge', 'rojo'); 3807 this_title = this_title.replace('noir', 'negro'); 3808 3809 $(this).attr('title', this_title); 3810 }); 3811} 3812 3813/** 3814Auteur : Jérémy Latorre 3815Date: 11/06/2013 3816Description: 3817 - Gestion de la partie recherche sur l'onglet Autre Date 3818 - Remplissage des listes déroulantes et mise en place des règles de gestion sur les priorités 3819 - Gestion du calendrier 3820 - Récupération de l'url Json correspondant à la recherche effectuée 3821**/ 3822 3823//Dossier des images liées à tipi 3824var dossierImages = "./extensions/bisonfute/_images/"; 3825var type; 3826//Stocker les urls des communiqués 3827var cc; 3828var wc; 3829var pc; 3830var langCur; 3831 3832//récupération des données tipi pour remplir les cc 3833$(document).ready(function(){ 3834 langCur = $("#current-lang").val(); 3835 $(".tipi-flow").click(function(){ 3836 }); 3837 //Si les blocs sont affichés alors on les remplis avec des données tipi correspondantes 3838 if($("#cc").length >0){ 3839 demandeFluxJsonCC(); 3840 } 3841 if($("#wc").length >0){ 3842 demandeFluxJsonWC(); 3843 } 3844 if($("#pc").length >0){ 3845 demandeFluxJsonPC(); 3846 } 3847}); 3848/******************** Récupération flux Conditions de circulations ********************/ 3849/****************************************************************************************/ 3850function demandeFluxJsonCC(){ 3851 $.ajax({type:'GET', 3852 url: cc, 3853 dataType: 'json', 3854 success: function(data){ 3855 $("#cc").append(data[5]); 3856 $("#cc").trunk8({ 3857 title:"Conditions de circulation", 3858 lines:4 3859 }); 3860 } 3861 ,error: function(){ 3862 3863 } 3864 }); 3865} 3866/******************** Récupération flux Week end coloré ********************/ 3867/*****************************************************************************/ 3868function demandeFluxJsonWC(){ 3869 $.ajax({type:'GET', 3870 url: wc, 3871 dataType: 'json', 3872 success: function(data){ 3873 $("#wc").append(data[5]); 3874 $("#wc").trunk8({ 3875 title:"Week-end coloré", 3876 lines:4 3877 }); 3878 3879 },error: function(){ 3880 } 3881 }); 3882} 3883/******************** Récupération flux Prévisions de circulations ********************/ 3884/****************************************************************************************/ 3885function demandeFluxJsonPC(){ 3886 $.ajax({type:'GET', 3887 url: pc, 3888 dataType: 'json', 3889 success: function(data){ 3890 $("#pc").append(data[5]); 3891 $("#pc").trunk8({ 3892 title:"Prévision de circulation", 3893 lines:4 3894 }); 3895 } 3896 ,error: function(){ 3897 } 3898 }); 3899} 3900/******************** Factoriser l'effet fadeIn ********************/ 3901/*********************************************************************/ 3902function fadeIn(duree){ 3903 $("#black_popup").fadeIn(duree); 3904 $("#popup").fadeIn(duree); 3905} 3906 3907/******************** Factoriser l'effet fadeOut ********************/ 3908/*********************************************************************/ 3909function fadeOut(duree){ 3910 $("#black_popup").fadeOut(duree); 3911 $("#popup").fadeOut(duree); 3912 $("#divPopup").remove(); 3913} 3914 3915 3916/******************** Gérer la fermeture des popups ********************/ 3917/*************************************************************************/ 3918function boutonFermer(){ 3919 //On créér les différents éléments 3920 var imgFermer = document.createElement("span"); 3921 imgFermer.className = "imgFermer"; 3922 3923 //On créé le liens pour fermer la popup 3924 var lienFermer = document.createElement("a"); 3925 lienFermer.appendChild(imgFermer); 3926 lienFermer.onclick = function(){ 3927 fadeOut(500); 3928 }; 3929 return lienFermer; 3930} 3931 3932/******************** Créer le bandeau d'entete de toutes les popups ********************/ 3933/******************************************************************************************/ 3934function createBandeau(data){ 3935 var bandeau = document.createElement("div"); 3936 bandeau.className="bandeau"; 3937 var lienFermer = boutonFermer(); 3938 3939 var imgEvenement = document.createElement("img"); 3940 //En fonction du type d'évenements on affiche différentes images 3941 switch(data[2]){ 3942 case "flash" : 3943 imgEvenement.src = data[3] === 'meteo' ? dossierImages+"alerte-meteo.png" : dossierImages+"flash.png"; 3944 imgEvenement.alt = data[3] === 'meteo' ? "alerte-meteo" : "flash"; 3945 break; 3946 default: imgEvenement.src = dossierImages+"condition_circulation.png"; 3947 imgEvenement.alt = "condition_circulation"; 3948 break; 3949 } 3950 imgEvenement.className = "imgEvenement"; 3951 3952 var titreEntete = document.createElement("h2"); 3953 titreEntete.appendChild(document.createTextNode(data[0])); 3954 bandeau.appendChild(imgEvenement); 3955 bandeau.appendChild(lienFermer); 3956 bandeau.appendChild(titreEntete); 3957 return bandeau; 3958} 3959/******************** Insérer le contenu de la popup ********************/ 3960/**************************************************************************/ 3961function getContenuPopup(data) 3962{ 3963 var divPopUp = document.createElement("div"); 3964 divPopUp.id="divPopup"; 3965 3966 //Creation du bandeau d'entete 3967 var lebandeau = createBandeau(data); 3968
3969 divPopUp.appendChild(lebandeau); 3970 3971 3972 //creation du contenu 3973 var contenu = document.createElement("div"); 3974 contenu.className = "contenuPopup"; 3975 //Gestion liste des attributs 3976 var listeDesAttributs = data[4]; 3977 if(listeDesAttributs.length >0){ 3978 var listeAttributs = document.createElement("div"); 3979 listeAttributs.className = "listeAttributs"; 3980 for(var k = 0; k < data[4].length; k++){ 3981 var spanImg = document.createElement("span"); 3982 var tabResult = selectAttribut(data[4][k]); 3983 spanImg.className = tabResult[0]; 3984 spanImg.title = tabResult[1]; 3985 listeAttributs.appendChild(spanImg); 3986 } 3987 contenu.appendChild(listeAttributs); 3988 } 3989 //Gestion du titre 3990 var titreh3 = document.createElement("h3"); 3991 titreh3.appendChild(document.createTextNode(data[1])); 3992 contenu.appendChild(titreh3); 3993 //On rajoute un paragraphe 3994 var paragraphe = document.createElement("p"); 3995 paragraphe.id="htmlContenuPopup"; 3996 paragraphe.innerHTML = data[5]; 3997 contenu.appendChild(paragraphe); 3998 3999 //S'il y'a des pièces jointes, on les affiches 4000 if(data[6].length){ 4001 var divLien = document.createElement("p"); 4002 divLien.className = "listePJ"; 4003 var spanPicto = document.createElement("span"); 4004 spanPicto.className = "fichierJoint"; 4005 spanPicto.title = "pièces jointes"; 4006 divLien.appendChild(spanPicto); 4007 var text; 4008 if(langCur == 'es'){text = document.createTextNode("Adjunto: ");} 4009 else{ 4010 if (langCur == 'en'){text = document.createTextNode("Attached files: ");} 4011 else{text = document.createTextNode("Pièce(s) jointe(s) : ");} 4012 } 4013 divLien.appendChild(text); 4014 for(var k = 0; k < data[6].length; k++){ 4015 4016 var spanPJ = document.createElement("span"); 4017 spanPJ.className ="elementPJ"; 4018 4019 var dataPJ = data[6][k][0]; 4020 var tabnomPJ = dataPJ.split("/"); 4021 var nomPJ = tabnomPJ[tabnomPJ.length-1]; 4022 var lienPJ = document.createElement("a"); 4023 var tabSplit = dataPJ.split("."); 4024 var formatPj = ""; 4025 var lastIndex = tabSplit.length -1; 4026 if(tabSplit.length > 1 && tabSplit[lastIndex].length < 4){ 4027 formatPj = tabSplit[lastIndex]; 4028 } 4029 lienPJ.href = encodeURI(dataPJ); 4030 var taillePJ = document.createTextNode("( "+ formatPj.toUpperCase() +", " + data[6][k][1] + " ) "); 4031 //on force l'ouverture des pièces jointes dans un nouvel onglet 4032 lienPJ.setAttribute("target","_blank"); 4033 4034 var texteLien = document.createTextNode("- " + nomPJ); 4035 4036 lienPJ.appendChild(texteLien); 4037 spanPJ.appendChild(lienPJ); 4038 spanPJ.appendChild(taillePJ); 4039 divLien.appendChild(spanPJ); 4040 } 4041 contenu.appendChild(divLien); 4042 } 4043 divPopUp.appendChild(contenu); 4044 $("#popup").append(divPopUp); 4045 4046} 4047 4048/******************** Récupérer le contenu de la popup ********************/ 4049/**************************************************************************/ 4050function demandeFluxJsonPopupBandeau(type){ 4051 var url; 4052 //On récupère l'adresse que l'on avait déjà pré-enregistrée auparavant en fonction du type 4053 switch(type){ 4054 case "cc" : url = cc; 4055 break; 4056 case "pc" : url = pc; 4057 break; 4058 case "wc" : url = wc; 4059 break; 4060 default : return false; 4061 4062 } 4063 $(".popupDocument").remove(); 4064 //On effectue notre requête AJAX 4065 $.ajax({type:'GET', 4066 url: url, 4067 dataType: 'json', 4068 success: function(data){ 4069 if(data.length == 0 ){return false;} 4070 else{ 4071 fadeIn(500); 4072 positionPopup(); 4073 getContenuPopup(data); 4074 gestionOuvertureLiens($("#htmlContenuPopup")); 4075 } 4076 },error: function(){ 4077 console.info("Erreur dans la récupération du flux JSON "); 4078 } 4079 }); 4080} 4081 4082 4083/** 4084 * Auteur : Jérémy Latorre Date: 11/06/2013 Description: Fichier gérant les 4085 * alertes dans le carousel sur la page d'accueil 4086 */ 4087 4088// variables globales 4089var dossierImages = "./extensions/bisonfute/_images/"; 4090// Verrou pour eviter d'initialiser plusieurs fois 4091var init_done = false; 4092var nbAlerte = 0; 4093var langCur; 4094 4095$(document).ready(function() { 4096 4097 $('.bandeau-h').slick({ 4098 infinite: true, 4099 slidesToShow: 3, 4100 slidesToScroll: 1, 4101 variableWidth: true, 4102 prevArrow: $('#Bt_right'), 4103 nextArrow:$('#Bt_left'), 4104 draggable:false, 4105 autoplay: true, 4106 autoplaySpeed: 10000, 4107 }); 4108 4109 $('.bandeau-accueil').slick({ 4110 infinite: true, 4111 slidesToShow: 3, 4112 slidesToScroll: 1, 4113 variableWidth: true, 4114 prevArrow: $('#Bt_left'), 4115 nextArrow:$('#Bt_right'), 4116 draggable:false, 4117 autoplay: true, 4118 autoplaySpeed: 10000, 4119 }); 4120 4121 langCur = $("#current-lang").val(); 4122 $(".alerte").each(function() { 4123 $(this).hide(); 4124 }); 4125 try { 4126 demandeFluxJsonAlerte(bisonfute.urls.INSTANCE.getFlash()); 4127 } catch (Exception) { 4128 } 4129 // open popup 4130 $(".alerte").click(function() { 4131 fadeIn(500); 4132 positionPopup(); 4133 4134 var flash = bisonfute.urls.INSTANCE.getFlash(); 4135 demandeFluxJsonPopup(flash, $(this).data('value'), "alerte"); 4136 xt_med('C', '0', 'Flash_national', 'A'); 4137 }); 4138 // ouverture de la popup sur le clique d'une alerte ou d'un cc 4139 4140 // maintain the popup at center of the page when browser resized 4141 $(window).bind('resize', positionPopup); 4142 $(".vignette_carousel").each(function() { 4143 $(this).find(".conseils_txt").first().trunk8({ 4144 lines : 4 4145 }); 4146 4147 }); 4148 4149}); 4150 4151/** 4152 * ****************************** Récupérer les données tipi pour le bloc alerte 4153 * ******************************* 4154 */ 4155/** ************************************************************************************************************* */ 4156function demandeFluxJsonAlerte(urlAlerte) { 4157 $.ajax({ 4158 type : 'GET', 4159 url : urlAlerte, 4160 dataType : 'json', 4161 success : function(data) { 4162 if (data.length != 0) { 4163 if (data.length == 0 4164 || typeof (data[0]) == 'undefined' 4165 || (data[0][2] != "flash" && data[0][2] != "alerte-meteo")) { 4166 $(".alerte").each(function() { 4167 $(this).hide(); 4168 }); 4169 } else if (typeof (data[0]) != 'undefined') { 4170 fillAlert(data); 4171 } 4172 } else { 4173 $(".alerte").each(function() { 4174 $(this).hide(); 4175 }); 4176 }
4177 initCarrousel(); 4178 }, 4179 error : function() { 4180 } 4181 }); 4182} 4183// Initialisation de la taille du carrousel 4184function initCarrousel() { 4185 if (!init_done) { 4186 4187 $("#conteneur_carousel").height(399 - (nbAlerte * 133)); 4188 //gestionFlecheCarousel(); 4189 init_done = true; 4190 } 4191} 4192function gestionFlecheCarousel() { 4193 // event click du bouton droite et gauche permettant de scroller vers le 4194 // haut ou vers le bas 4195 $("#carrousel_nav").children("a").each(function() { 4196 if ($(this).hasClass("right")) { 4197 $(this).attr("onclick", "slideToBottom()"); 4198 } else { 4199 $(this).attr("onclick", "slideToTop()"); 4200 } 4201 return null; 4202 }); 4203 4204} 4205/** 4206 * *********************** Remplir les blocs alertes du carousel avec les 4207 * données tipi ************************* 4208 */ 4209/** 4210 * ******************** Création de tous les éléments HTML pour les insérer dans 4211 * la page *********************** 4212 */ 4213 4214function fillAlert(data) { 4215 var nbDonnees = data.length; 4216 var numeroAlerte = 0; 4217 // On ne garde que 2 alertes au maximum 4218 if (nbDonnees > 2) { 4219 nbDonnees = 2; 4220 } 4221 var listeDivAlert = $(".alerte"); 4222 for (var i = 0; i < nbDonnees; i++) { 4223 // on vérifie s''il s'agit d'un flash ou d'une alerte météo pour les placer au bon endroit 4224 if (data[i][2] == "flash") { 4225 divAlerte = listeDivAlert[i]; 4226 divAlerte.setAttribute("data-value", numeroAlerte); 4227 numeroAlerte++; 4228 if(data[i][3] === 'meteo') { 4229 divAlerte.className = divAlerte.className + " alerteMeteo"; 4230 $(".alerteMeteo").each(function() { 4231 $(this).show(); 4232 }); 4233 } else { 4234 divAlerte.className = divAlerte.className + " alerteCirculation"; 4235 $(".alerteCirculation").each(function() { 4236 $(this).show(); 4237 }); 4238 } 4239 nbAlerte = nbAlerte + 1; 4240 } 4241 // On créé les différents éléments de chaque alerte 4242 var chapeau = document.createElement("div"); 4243 chapeau.className = "chapeauAlerte"; 4244 4245 var blocPicto = document.createElement("div"); 4246 blocPicto.className = "pictoAlerte"; 4247 4248 var titre = document.createElement("div"); 4249 var texteAlert; 4250 if (langCur == 'es') { 4251 texteAlert = document.createTextNode("Alerta"); 4252 } else { 4253 if (langCur == 'en') { 4254 texteAlert = document.createTextNode("Alert"); 4255 } else { 4256 texteAlert = document.createTextNode("Alerte"); 4257 } 4258 } 4259 titre.appendChild(texteAlert); 4260 4261 // Dans le cas d'un flash national / flash meteo : En fonction du type, on adapte le pictogramme correspondant 4262 var imgPicto = document.createElement("img"); 4263 if (data[i][2] == "flash") { 4264 imgPicto.src = data[i][3] === 'meteo' ? dossierImages + "alerte-meteo.png" : dossierImages + "flash.png"; 4265 imgPicto.alt = data[i][3] === 'meteo' ? "alerte-meteo" : "flash"; 4266 } 4267 4268 // Affichage des attributs 4269 var listeDesAttributs = data[i][4]; 4270 if (listeDesAttributs.length > 0) { 4271 var listeAttributs = document.createElement("div"); 4272 listeAttributs.className = "listeAttributs"; 4273 for (var k = 0; k < 3; k++) { 4274 if (typeof (data[4]) != 'undefined') { 4275 var spanImg = document.createElement("span"); 4276 var tabResult = selectAttribut(data[4][k]); 4277 spanImg.className = tabResult[0]; 4278 spanImg.title = tabResult[1]; 4279 listeAttributs.appendChild(spanImg); 4280 } 4281 } 4282 chapeau.appendChild(listeAttributs); 4283 } 4284 // On remplit le contenu avec interprétation des balises qu'il peut y 4285 // avoir dans le contenu 4286 // corps HTML 4287 var divContenu = document.createElement("div"); 4288 divContenu.className = "contenuAlerteAccueil"; 4289 divContenu.innerHTML = "<b>" + data[i][1] 4290 + "</b><span style=\"display:block;\"></span>" + data[i][5]; 4291 blocPicto.appendChild(imgPicto); 4292 chapeau.appendChild(blocPicto); 4293 chapeau.appendChild(titre); 4294 divAlerte.appendChild(chapeau); 4295 divAlerte.appendChild(divContenu); 4296 } 4297 // On rajoute le texte en savoir plus sur les 2 alertes 4298 $(".contenuAlerteAccueil").each(function() { 4299 var pText = document.createElement("div"); 4300 pText.className = "ensavoirplus"; 4301 var text; 4302 if (langCur == 'es') { 4303 text = document.createTextNode("Leer más"); 4304 } else { 4305 if (langCur == 'en') { 4306 text = document.createTextNode("Read more"); 4307 } else { 4308 text = document.createTextNode("En savoir plus"); 4309 } 4310 } 4311 pText.appendChild(text); 4312 // On tronque le texte de l'alerte s'il est trop long 4313 $(this).trunk8({ 4314 title : "Alerte Nationale", 4315 lines : 3 4316 }); 4317 $(this).append(pText); 4318 }); 4319 4320 moveVignettes(nbDonnees) 4321 4322} 4323 4324/** 4325 * Déplace les vignettes dissumlées par les alertes 4326 */ 4327function moveVignettes(nbDonnees) { 4328 let vignettesCachés = $('#conteneur_carousel').children().slice(3-nbDonnees) 4329 4330 for(element of vignettesCachés.toArray()) { 4331 let vignette = extractVignetteData(element) 4332 // ajout de la vignette formatée dans le bandeau horizontal et retour au début 4333 $('.bandeau-accueil').slick('slickAdd',createSlideFromVignette(vignette),true) 4334 }; 4335} 4336/** 4337 * Méthode d'extraction des données de la vignette 4338 * @param {*} vignette 4339 * @returns Tableau contenant les données de la vignette 4340 */ 4341function extractVignetteData(vignette) { 4342 let data = { 4343 "link" : "", 4344 "titlelink": "", 4345 "title": "", 4346 "image": "", 4347 "imagetitle":"", 4348 "content": "", 4349 "actus": "" 4350 } 4351 4352 data.link = $(vignette).find('.lien_vignette_carousel').attr('href') 4353 data.titlelink = $(vignette).find('.lien_vignette_carousel').attr('title') 4354 data.title = $(vignette).find('h2').html() 4355 data.image = $(vignette).find('img').attr("src") 4356 data.imagetitle = $(vignette).find('img').attr("title") 4357 data.content = $(vignette).find('.conseils_txt').html() 4358 data.actus = $(vignette).find('.info_actus > p').html() 4359 4360 return data; 4361} 4362 4363function createSlideFromVignette(vignette){ 4364 let slide = $(`<div class="bloc-vignette">`) 4365 let linkContainer =$('<a class="lien-actu">')
4366 let vignetteContainer = $('<div class="vignette">') 4367 let title = $('<h3>').html(vignette.title) 4368 let image = $('<img>').attr({ 4369 "src": `${vignette.image}`, 4370 "alt": `${vignette.title}`, 4371 }) 4372 let imgContainer = $('<div class="img-vignette">') 4373 let txtContainer = $('<div class="bloc-text-vignette">') 4374 let content = vignette.content ? $('<p class="intro-vignette">').html(vignette.content) : $('<p class="intro-vignette">').html(vignette.actus) 4375 4376 linkContainer.attr({ 4377 "href": `${vignette.link}`, 4378 "title": `${vignette.titlelink}` 4379 }) 4380 let lienActuContainer = $('<div class="bloc-lien-actu">') 4381 let btnActu = $('<btn class="btn-lien-actu">').attr({ 4382 "href": `${vignette.link}`, 4383 "title": `Affichez la page de détail ${vignette.titlelink}` 4384 }).html("En savoir plus") 4385 lienActuContainer.append(btnActu) 4386 imgContainer.append(image) 4387 vignetteContainer.append(imgContainer) 4388 txtContainer.append(title) 4389 txtContainer.append(content) 4390 txtContainer.append(lienActuContainer) 4391 vignetteContainer.append(txtContainer) 4392 linkContainer.append(vignetteContainer) 4393 slide.append(linkContainer) 4394 4395 return slide 4396} 4397 4398// fin alerteAccueil 4399 4400/** 4401 * Auteur : Jérémy Latorre Date: 11/06/2013 Description: - Gestion de la 4402 * fraicheur des données tipi 4403 * Modification: 4404 * 23/8/2016 Hugues roché: displayVHDate, formatDate 4405 * 4406 */ 4407$(document).ready(function() { 4408 4409 // Appel du core pour récupérér le fichier de configuration et l'horodate 4410 this.core = bisonfute.core.INSTANCE; 4411 var currentHorodate = jQuery.extend(true, {}, this.core.getHorodate()); 4412 var config = jQuery.extend(true, {}, this.core.getConfiguration()); 4413 checkExprirationJsonHorodatage(currentHorodate,config); 4414 if(typeof displayVHDate == 'function'){displayVHDate();} 4415}); 4416 4417/** 4418 * ****************************** Retourner le différence entre maintenant et la 4419 * date reçue **************************************** 4420 */ 4421/** ********************************************************************************************************************************* */ 4422function betweenTwoDatesMs(date2) { 4423 var now = new Date().getTime(); 4424 // Calculate the difference in milliseconds 4425 var difference_ms = now - date2; 4426 return difference_ms; 4427} 4428/** 4429 * ***************************************** Récupérer le flux Json contenant 4430 * l'horodatage ***************************************** 4431 */ 4432/** ********************************************************************************************************************************* */ 4433function checkExprirationJsonHorodatage(horodate,config) { 4434 var exprirationInterval; 4435 if(config && config.dataCheck && config.dataCheck.expirationInterval){ 4436 // Présence de expirationInterval dans le fichier config.json 4437 exprirationInterval = config.dataCheck.expirationInterval; 4438 } else { 4439 // Par défault 30 minute 4440 exprirationInterval = 30 * 60 * 1000; 4441 } 4442 // On formate les données pour les rendres compréhensibles 4443 var date = new Date(horodate.date); 4444 var minutes = date.getMinutes(); 4445 var month = parseInt(date.getMonth()) + 1; 4446 // Si la différences est supérieure à exprirationInterval min alors on affichage un message 4447 // spécifique 4448 if (betweenTwoDatesMs(date) > (exprirationInterval)) { 4449 $("#block-info-refresh").attr("style", "display:block;"); 4450 if (parseInt(minutes) < 10) { 4451 minutes = "0" + date.getMinutes(); 4452 } 4453 $("#info-refresh-date").append( 4454 date.getDate() + "/" + month + "/" + date.getFullYear() + " " 4455 + date.getHours() + ":" + minutes); 4456 } else { 4457 $("#block-info-refresh").attr("style", "display:none;"); 4458 } 4459} 4460 4461/** 4462format une date au format JJ/MM/YY HH:MM 4463**/ 4464function formatDate(dateToFormat){ 4465 var date = new Date(dateToFormat); 4466 var minutes = date.getMinutes(); 4467 var month = parseInt(date.getMonth()) + 1; 4468 if(month<10){ 4469 month = "0" + month; 4470 } 4471 if (parseInt(minutes) < 10) { 4472 minutes = "0" + date.getMinutes(); 4473 } 4474 return date.getDate() + "/" + month + "/" + date.getFullYear() + " " 4475 + date.getHours() + ":" + minutes; 4476 4477} 4478$(document).ready(function(){ 4479 // Déclaration des variables 4480 var lienAccueil = ""; 4481 var lienMobile = ""; 4482 var langCur; 4483 langCur = $("#current-lang").val(); // On récupère la langue courante 4484 4485 // permet de récupérer lâurl pointant sur le site mobile (Par défaut « ./mobile.html ») 4486 var urlmobile = bisonfute.core.INSTANCE.getUrls().mobile; 4487 // de la même manière pour le site desktop (Par défaut « ./index.html ») 4488 var urldesktop = bisonfute.core.INSTANCE.getUrls().desktop; 4489 4490 if(urldesktop != "undefined" || urldesktop != null || urldesktop != ""){ 4491 if(langCur!=""){ 4492 lienAccueil = urldesktop.split(".html")[0] + ",lang" + langCur + ".html"; 4493 }else{ 4494 lienAccueil = urldesktop; 4495 } 4496 } 4497 if(urlmobile != "undefined" || urlmobile != null || urlmobile != ""){ 4498 lienMobile = urlmobile; 4499 } 4500 4501 if(document.getElementById("lienAccueil")){ 4502 document.getElementById("lienAccueil").href = lienAccueil; 4503 } 4504 if(document.getElementById("lienAccueil_menu")){ 4505 document.getElementById("lienAccueil_menu").href = lienAccueil; 4506 } 4507 if(document.getElementById("lien_accueil_logo")){ 4508 document.getElementById("lien_accueil_logo").href = lienAccueil; 4509 } 4510 if(document.getElementById("lien-bf-mobile")){ 4511 document.getElementById("lien-bf-mobile").href = lienMobile; 4512 } 4513}); 4514/** 4515Auteur : Jérémy Latorre 4516Date: 11/06/2013 4517Description: 4518 - Gestion de la partie recherche sur l'onglet Autre Date 4519 - Remplissage des listes déroulantes et mise en place des règles de gestion sur les priorités 4520 - Gestion du calendrier
4521 - Récupération de l'url Json correspondant à la recherche effectuée 4522**/ 4523 4524// Pou réutilisation dans la seconde liste déroulante 4525 4526 4527var bool = false; 4528//Gestion des erreur tipi 4529var erreurTipi = false; 4530var langCur; 4531//Ensemble des messages à afficher en cas d'erreurs 4532var messageErreurDonneesTipi = "Une erreur est survenue lors de la récupération des informations"; 4533var messageErreurDonneesTipi_en = "An error occurs while retrieving information"; 4534var messageErreurDonneesTipi_es = "Se ha producido un error al recuperar la información"; 4535var imageCalendrier = "extensions/bisonfute/_images/calendar_icon.png"; 4536var imageCalendrierHover = "extensions/bisonfute/_images/calendar_icon_hover.png"; 4537var messageErreurDate = " Veuillez indiquer une date de recherche"; 4538var messageErreurDate_en = " Please enter a date for your search"; 4539var messageErreurDate_es = " Por favor, introduzca una fecha de búsqueda"; 4540var tab_jour=new Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"); 4541var tab_jour_en=new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"); 4542var tab_jour_es=new Array("Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"); 4543var previsions; 4544 4545var shortDays; 4546 4547var indexCurrentPrevisionDate; 4548 4549var indexPrevision; 4550 4551 4552$(document).ready(function(){ 4553 langCur = $("#current-lang").val(); 4554 if(langCur == 'es'){ 4555 shortDays =[ "Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sa" ]; 4556 } 4557 else if (langCur == 'en'){ 4558 shortDays =[ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ]; 4559 } 4560 else{ 4561 shortDays =[ "Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sa" ]; 4562 } 4563 4564 4565 chargerJson("previsions/previsions.json"); 4566 chargerJsonPrevisionDetaillees("mobile/previsionIndex.json"); 4567 4568 //S'il y'a eu une erreur lors de la récupération des données, on affiche un message d'erreur 4569 if(erreurTipi){ 4570 if(langCur == 'es'){affichagePopupErreur(messageErreurDonneesTipi_es);} 4571 else{ 4572 if (langCur == 'en'){affichagePopupErreur(messageErreurDonneesTipi_en);} 4573 else{affichagePopupErreur(messageErreurDonneesTipi);} 4574 } 4575 } 4576 4577 4578}); 4579 4580/*************** Fonction permettant de lire un cookie *************************/ 4581function getCookie (sName) { 4582 var oRegex = new RegExp("(?:; )?" + sName + "=([^;]*);?"); 4583 if (oRegex.test(document.cookie)) { 4584 return decodeURIComponent(RegExp["$1"]); 4585 } else { 4586 return false; 4587 } 4588} 4589 4590/*************** Fonction permettant de vérifier si le mode daltonien est actif (dans les cookies) *************************/ 4591function verifierModeDaltonien() { 4592 var nomCookie = "modeDaltonien"; 4593 4594 var cookieDaltonien = this.getCookie(nomCookie); 4595 if (cookieDaltonien != false) { 4596 if (cookieDaltonien == "true") { 4597 $("#daltonienON").removeClass("invisible"); 4598 $("#daltonienOFF").addClass("invisible"); 4599 document.modeDaltonien = true; 4600 } 4601 else { 4602 $("#daltonienON").addClass("invisible"); 4603 $("#daltonienOFF").removeClass("invisible"); 4604 document.modeDaltonien = false; 4605 } 4606 } 4607 4608} 4609 4610 4611/*********************** Creation du calendrier avec les dates **************************************/ 4612function createDatePicker(){ 4613 //Insertion du calendrier jQuery-ui 4614 // - date saisissable aujourd'hui à +31 jours 4615 // - format de date jj/mm/aa 4616 // - ouverture sur le clic du bouton ou du champs texte ( showOn) 4617 4618 var tabMois; 4619 var titleNext = ""; 4620 var titlePrev = ""; 4621 if(langCur == 'es'){ 4622 tabMois = [ "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" ]; 4623 titleNext = "Siguiente"; 4624 titlePrev = "Anter"; 4625 } 4626 else if (langCur == 'en'){ 4627 tabMois = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "
4627November", "December" ]; 4628 titleNext = "Next"; 4629 titlePrev = "Prev"; 4630 } 4631 else{ 4632 tabMois = [ "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre" ]; 4633 titleNext = "Après"; 4634 titlePrev = "Avant"; 4635 } 4636 4637 var eventDates = {}; 4638 constructDates(eventDates); 4639 4640 var suffixeDaltonien = document.modeDaltonien ? "Daltonien" : ""; 4641 4642 $( "#datepicker" ).datepicker({ 4643 showOn: "both", 4644 buttonImage: imageCalendrier, 4645 minDate: new Date(), 4646 maxDate: new Date(dateToISO(previsions.days[previsions.days.length-1])), 4647 dateFormat: "dd/mm/yy", 4648 monthNames: tabMois , 4649 dayNamesMin:shortDays, 4650 navigationAsDateFormat: true, 4651 nextText: titleNext, 4652 prevText: titlePrev, 4653 buttonImageOnly: true, 4654 firstDay: 1, 4655 onSelect : function(dateText, inst) { 4656 afficherPrevisions(dateText) ; 4657 }, 4658 beforeShowDay: function( date ) { 4659 4660 convertedDate = convert(date); 4661 convertedDate = new Date(dateToISO(convertedDate)); 4662 var highlight = eventDates[convertedDate]; 4663 if( highlight ) { 4664 4665 var eventName = "event"; 4666 switch(highlight.color){ 4667 case "Black": 4668 eventName = eventName + "Black" + suffixeDaltonien; 4669 break; 4670 4671 case "Red": 4672 eventName = eventName + "Red" + suffixeDaltonien; 4673 break; 4674 4675 case "Orange": 4676 eventName = eventName + "Orange" + suffixeDaltonien; 4677 break; 4678 4679 case "Green": 4680 eventName = eventName + "Green" + suffixeDaltonien; 4681 break; 4682 } 4683 4684 return [true, eventName, highlight.myDate]; 4685 } else { 4686 return [true, '', '']; 4687 } 4688 } 4689 }); 4690 4691 4692 function convert(str) { 4693 var date = new Date(str), 4694 mnth = ("0" + (date.getMonth()+1)).slice(-2), 4695 day = ("0" + date.getDate()).slice(-2); 4696 4697 return [ day, mnth, date.getFullYear() ].join("/"); 4698 } 4699 //Consruct colored date array 4700 function constructDates(eventDates){ 4701 4702 var days = previsions.days; 4703 var values = previsions.values; 4704 var daysLength = days.length; 4705 var valuesLength = values.length; 4706 4707 if(days != null && values != null && daysLength == valuesLength){ 4708 4709 4710 for (var i = 0; i < days.length; i++) { 4711 4712 var v = values[i].slice(0,values[i].length-2); 4713 4714 var color = v.toString(); 4715 var varDate = new Date(dateToISO(days[i])); 4716 if(color.indexOf("N") > -1){ 4717 eventDates[varDate] = {myDate : varDate, color : "Black" }; 4718 4719 } 4720 else if(color.indexOf("R") > -1 ){ 4721 eventDates[varDate] = {myDate : varDate, color : "Red" }; 4722 4723 } 4724 else if(color.indexOf("O") > -1 ){ 4725 eventDates[varDate] = {myDate : varDate, color : "Orange" }; 4726 4727 } 4728 4729 else if(color.indexOf("V") > -1){ 4730 eventDates[varDate] = {myDate : varDate, color : "Green" }; 4731 } 4732 } 4733 } 4734 4735 } 4736 //Gestion du hover en js car c'est une image 4737 $(".ui-datepicker-trigger").mouseenter(function(){ 4738 $(this).attr('src',imageCalendrierHover); 4739 4740 }); 4741 $(".ui-datepicker-trigger").mouseleave(function(){ 4742 $(this).attr('src',imageCalendrier); 4743 4744 }); 4745 // On rajoute un tooltip au calendrier pour l'accessibilité 4746 var title_datepicker = ""; 4747 if(langCur == 'es'){title_datepicker = "Seleccione la fecha de la búsqueda";} 4748 else{ 4749 if (langCur == 'en'){title_datepicker = "Choose a research date";} 4750 else{title_datepicker = "choisissez une date de recherche";} 4751 } 4752 $(".ui-datepicker-trigger").attr("title", title_datepicker); 4753} 4754 4755/******************** Gérer la récupération des paramètres de recherche pour récupérer l'url ********************/ 4756/*********************** Gestion des erreurs des paramètres de recherche **************************************/ 4757 4758function sendRecherchePrevision(){ 4759 4760 //Vérification de la validité de la date 4761 var valDate= $("#datepicker").val(); 4762 if( valDate == "dd/mm/yyyy" || valDate == "jj/mm/aaaa" || valDate == "dd/mm/aaaa"){ 4763 if(langCur == 'es'){affichagePopupErreur(messageErreurDate_es);} 4764 else{ 4765 if (langCur == 'en'){affichagePopupErreur(messageErreurDate_en);} 4766 else{affichagePopupErreur(messageErreurDate);} 4767 } 4768 return; 4769 } 4770 4771 // S'il n'y a pas d'erreur de paramètres, on va vérifier dans quel cas on se trouve et appeler la bonne fonction avec les bons paramètres 4772 //On récupère la date 4773 var date = $("#datepicker").val(); 4774 //date = date.replace(/\//g,''); 4775 effacerMessageErreur(); 4776 4777 paramsRecherche = { 4778 'date': date, 4779 }; 4780 4781 //console.log(date); 4782 afficherPrevisions(date) ; 4783} 4784 4785/**************************** recherche des données de previsions demandées **
4785********************************/ 4786/************************************************************************************************************/ 4787function afficherPrevisions(date){ 4788 var indexDate = previsions.days.indexOf(date); 4789 afficherPrevisionsParIndex(indexDate); 4790} 4791 4792 4793/**************************** recherche des données de previsions demandées **********************************/ 4794/************************************************************************************************************/ 4795function afficherPrevisionsParIndex(indexDate){ 4796 indexCurrentPrevisionDate = indexDate; 4797 var values = previsions.values[indexDate]; 4798 4799 var dateString = previsions.days[indexDate]; 4800 var date = new Date(dateToISO(dateString)); 4801 if(document.body.attributes.class.value != "bf-accueil"){ 4802 if(langCur == 'es'){ 4803 document.getElementById("dateCourante").innerHTML=tab_jour_es[date.getDay()]+" "+ dateString; 4804 } 4805 else { 4806 if (langCur == 'en'){ 4807 document.getElementById("dateCourante").innerHTML=tab_jour_en[date.getDay()]+" "+ dateString; 4808 } 4809 else { 4810 document.getElementById("dateCourante").innerHTML=tab_jour[date.getDay()]+" "+ dateString; 4811 } 4812 } 4813 } 4814 4815 colorerDepartements(previsions.deptsLine,values); 4816 var dateCouranteElt =document.getElementById("dateCourante"); 4817 if(dateCouranteElt !== null) { 4818 document.getElementById("dateCourante").innerHTML=tab_jour[date.getDay()]+" "+ dateString; 4819 } 4820 4821 if( document.body.attributes.class.value != "bf-accueil"){ 4822 miseAjourBoutons(); 4823 } 4824 4825} 4826 4827 4828/**************************** afficher jour suivant **********************************/ 4829/************************************************************************************************************/ 4830function afficherPrevisionsJourSuivant(){ 4831 indexDate = indexCurrentPrevisionDate+1; 4832 afficherPrevisionsParIndex(indexDate); 4833} 4834 4835 4836/**************************** afficher jour precedent **********************************/ 4837/************************************************************************************************************/ 4838function afficherPrevisionsJourPrecedent(){ 4839 if(indexCurrentPrevisionDate > 0){ 4840 indexDate = indexCurrentPrevisionDate - 1; 4841 afficherPrevisionsParIndex(indexDate); 4842 } 4843} 4844 4845/**************************** Mise à jour du fond des boutons **********************************/ 4846/************************************************************************************************************/ 4847 4848function miseAjourBoutons(){ 4849 $("#jour-precedent").removeClass("precedent-inactif"); 4850 $("#jour-precedent").addClass("precedent-actif"); 4851 document.getElementById("jour-precedent-bouton").disabled = false; 4852 4853 $("#jour-suivant").removeClass("suivant-inactif"); 4854 $("#jour-suivant").addClass("suivant-actif"); 4855 document.getElementById("jour-suivant-bouton").disabled = false; 4856 4857 var indexOfToday = previsions.days.indexOf(parseDate(new Date())); 4858 4859 if(indexCurrentPrevisionDate == indexOfToday){ 4860 $("#jour-precedent").removeClass("precedent-actif"); 4861 $("#jour-precedent").addClass("precedent-inactif"); 4862 document.getElementById("jour-precedent-bouton").disabled = true; 4863 } 4864 else if(indexCurrentPrevisionDate == (previsions.days.length-1)) { 4865 $("#jour-suivant").removeClass("suivant-actif"); 4866 $("#jour-suivant").addClass("suivant-inactif"); 4867 document.getElementById("jour-suivant-bouton").disabled = true; 4868 } 4869} 4870 /************************ Effacer le message d'erreur affiché **************************/ 4871/*****************************************************************************************/ 4872 function effacerMessageErreur(){ 4873 $("#popupErreur").empty(); 4874 $("#popupErreur").hide(); 4875 } 4876 4877 4878 4879 /************************ Afficher **************************/ 4880/*****************************************************************************************/ 4881 function colorerDepartements (depts, couleurs) { 4882 for(i=0; i < depts.length; i++) { 4883 var couleurJour = couleurs[i].split(',') 4884 $('#depart-'+ depts[i]).css({'fill': getCouleurJour(couleurJour[0])}); 4885 $('#retour-'+ depts[i]).css({'fill': getCouleurJour(couleurJour[1])}); 4886 } 4887 } 4888 4889 4890function getCouleurJour(couleur) { 4891 if (!document.modeDaltonien) { 4892 switch (couleur) { 4893 case 'V': 4894 return '#92d050'; 4895 case 'O': 4896 return '#fec002'; 4897 case 'R': 4898 return '#e10010'; 4899 case 'N': 4900 return 'black'; 4901 default: 4902 return 'grey'; 4903 } 4904 } 4905 else { 4906 switch (couleur) { 4907 case 'V': 4908 return '#5EA9DE'; 4909 case 'O': 4910 return '#F7A523'; 4911 case 'R': 4912 return '#951F82'; 4913 case 'N': 4914 return 'black'; 4915 default: 4916 return 'grey'; 4917 } 4918 } 4919} 4920 4921function dateToISO (dateAsString) { 4922 var day = dateAsString.slice(0, 2);
4923 var month = dateAsString.slice(3, 5); 4924 var year = dateAsString.slice(6, 10); 4925 var dateISO = year + "-" + month + "-" + day; 4926 return dateISO; 4927 } 4928 4929function parseDate(date) { 4930 return ('0' + date.getDate()).slice(-2) + '/' + ('0' + (date.getMonth() + 1)).slice(-2) + '/' + date.getFullYear(); 4931} 4932 4933 4934function colorerAujourdhui() { 4935 var today = new Date(); 4936 var indexOfToday = previsions.days.indexOf(parseDate(today)); 4937 var values = previsions.values[indexOfToday]; 4938 colorerDepartements(previsions.deptsLine,values) 4939} 4940 4941function getColoredDays(days, display) { 4942 var today = new Date(); 4943 var coloredDays = new Array(); // liste des jours colorés 4944 var indexOfToday = days.indexOf(parseDate(today)); 4945 var weekend = new Array(); 4946 var previous = 0; 4947 for (var i = indexOfToday; i < days.length; i++) { 4948 if (display[i] == 1) { 4949 weekend.push(i); 4950 previous = 1; 4951 if (i == days.length - 1) { 4952 coloredDays.push(weekend); 4953 } 4954 } 4955 if (display[i] == 0) { 4956 if (previous == 1) { 4957 coloredDays.push(weekend); 4958 previous = 0; 4959 weekend = new Array(); 4960 } 4961 previous = 0; 4962 } 4963 } 4964 return coloredDays; 4965 } 4966 4967function formatDatePrevision(date) { 4968 var dateCpns = new Object(); 4969 var stringDate = ""; 4970 dateCpns.nomJour = date.getDay(); 4971 dateCpns.jour = ('0' + date.getDate()).slice(-2); 4972 dateCpns.mois = ('0' + (date.getMonth() + 1)).slice(-2); 4973 dateCpns.annee = date.getFullYear(); 4974 dateCpns.stringDate = shortDays[dateCpns.nomJour] + " " + dateCpns.jour 4975 + "/" + dateCpns.mois; 4976 return dateCpns; 4977} 4978 4979 function getWeekendsColors (nextWeekends, values, national) { 4980 var weekendsColors = new Array(); 4981// console.log(nextWeekends[1][0]); 4982// console.log("nextWeekends.length>"+nextWeekends.length); 4983 for (var i = 0; i < nextWeekends.length; i++) { 4984 var weekend = new Array(); 4985 // console.log("$scope.nextWeekends[i].length>"+nextWeekends[i].length); 4986 for (var j = 0; j < nextWeekends[i].length; j++) { 4987 //console.log("$scope.nextWeekends[i][j]>"+$scope.nextWeekends[i][j]); 4988 //console.log("$scope.days[$scope.nextWeekends[i][j]]>"+$scope.days[$scope.nextWeekends[i][j]]); 4989 dayColor = new Object(); 4990 // dayColor.date = $scope.formatDateShort(new Date($scope.dateToISO($rootScope.days[$scope.nextWeekends[i][j]]))); 4991 dayColor.date = formatDatePrevision(new Date(dateToISO(previsions.days[nextWeekends[i][j]]))); 4992 //console.log(new Date(dateToISO(previsions.days[nextWeekends[i][j]]))); 4993 dayColor.index = nextWeekends[i][j]; 4994 // console.log(previsions.values[i]); 4995 couleurs = national[nextWeekends[i][j]].split(','); 4996 dayColor.colorAller = couleurs[0]; 4997 dayColor.colorRetour = couleurs[1]; 4998 couleursMax = getDayMaxColor(values[nextWeekends[i][j]]); 4999 dayColor.colorAllerMax = couleursMax[0]; 5000 dayColor.colorRetourMax = couleursMax[1]; 5001 //console.log(dayColor); 5002 weekend.push(dayColor); 5003 } 5004 weekendsColors.push(weekend); 5005 } 5006 return weekendsColors 5007 } 5008 5009 5010 function getDayMaxColor (colors) { 5011 var maxColor = ['G', 'G']; 5012 for (var i = 0; i < colors.length; i++) { 5013 color = colors[i].split(','); 5014 for (j = 0; j < color.length; j++) { 5015 switch (color[j]) { 5016 case 'N': 5017 if (maxColor[j] !== 'N') 5018 maxColor[j] = 'N'; 5019 case 'R': 5020 if (maxColor[j] !== 'R' && maxColor[j] !== 'N') 5021 maxColor[j] = 'R'; 5022 case 'O': 5023 if (maxColor[j] !== 'O' && maxColor[j] !== 'R' && maxColor[j] !== 'N') 5024 maxColor[j] = 'O'; 5025 case 'V': 5026 if (maxColor[j] !== 'V' && maxColor[j] !== 'O' && maxColor[j] !== 'R' && maxColor[j] !== 'N') 5027 maxColor[j] = 'V'; 5028 } 5029 } 5030 } 5031 return maxColor; 5032 } 5033 5034 5035 5036 function paginerTableau(){ 5037 var table = $("#myTable"); 5038 $(table).remove(); 5039 var tr = $("<tr></tr>"); 5040 $("<td></td>").html('Test').appendTo(tr); 5041 $("<td></td>").html('test').appendTo(tr); 5042 $("<td></td>").html('[email protected]').appendTo(tr); 5043 $("<td></td>").html('$5.00').appendTo(tr); 5044 $("<td></td>").html('http://www.test.com').appendTo(tr); 5045 $(tr).appendTo(table); 5046 $(table).appendTo($('#tableholer')); 5047 $("#tableholer table").tablesorter(); 5048 } 5049 5050 function lengthWeekendColor(items) { 5051 var width = 0; 5052 for (weekend in items) { 5053 width += 10 + (items[weekend].length * 40); // marge:10 cell:40 5054 } 5055 return width; 5056 } 5057 5058 function createProchainJour(prochainsJours) { 5059 5060 5061 } 5062 5063 function creerTableauPrevisions() { 5064 var nextWeekends = getColoredDays(previsions.days,previsions.display); 5065 var tableValues = getWeekendsColors (nextWeekends, previsions.values, previsions.national);
5066 var contenu = $("#contenuprochainsjours"); 5067 5068 var divInner = $('<div style="height:130px;float:left;" />') 5069 var tableContenu = $("<table style='height:120px; text-align:'center';' />") 5070 var width = 0; 5071 5072 for(i=0;i<tableValues.length;i++){ 5073 width += 10 + (tableValues[i].length * 40); 5074 var table = $('<table style="float:left" class="prochainsJours">'); 5075 var tr1 = $('<tr>'); 5076 table.append(tr1); 5077 var tr2 = $('<tr>'); 5078 table.append(tr2); 5079 var tr3 = $('<tr>'); 5080 table.append(tr3); 5081 5082 for(j=0;j<tableValues[i].length;j++){ 5083 5084 var indexOfDay = previsions.days.indexOf(tableValues[i][j].date.jour+'/'+tableValues[i][j].date.mois+'/'+tableValues[i][j].date.annee); 5085 var day = tableValues[i][j].date.jour+'/'+tableValues[i][j].date.mois+'/'+tableValues[i][j].date.annee; 5086 5087 // header 5088 var th = $('<th onclick="afficherPrevisionsParIndex('+indexOfDay+');" style="text-align:center;">'+ tableValues[i][j].date.stringDate+'</th>'); 5089 tr1.append(th); 5090 5091 // 2e ligne 5092 var td1 = $('<td align="right" onclick="afficherPrevisionsParIndex('+indexOfDay+');" style="vertical-align: bottom;background-color:'+ getCouleurJour(tableValues[i][j].colorAller) +'"></td>'); 5093 var td1max = $('<div style="width:50%;height:45%;background-color:'+ getCouleurJour(tableValues[i][j].colorAllerMax) +'"></div>'); 5094 td1 5095 td1.append(td1max); 5096 tr2.append(td1); 5097 5098 // 3e ligne 5099 var td2 = $('<td align="right" onclick="afficherPrevisionsParIndex('+indexOfDay+');" style="vertical-align: bottom;background-color:'+ getCouleurJour(tableValues[i][j].colorRetour) +'"></td>'); 5100 var td2max = $('<div style="width:50%;height:45%;background-color:'+ getCouleurJour(tableValues[i][j].colorRetourMax) +'"></div>'); 5101 td2.append(td2max); 5102 tr3.append(td2); 5103 } 5104 divInner.append(table); 5105 } 5106 5107 divInner.css('width', width+'px'); 5108 $('#prochainsjoursTable').after(divInner); 5109 5110 $(divInner).appendTo(contenu); 5111 } 5112 5113 5114function chargerJson(url){ 5115 //On vide la liste de résultats avant l'envoie d'une nouvelle requête 5116 //$("#tableau-previsions").empty(); 5117 lang= $("#current-lang").val(); 5118 //envoie de la requête 5119 //url sera à remplacer par l'adresse récupérer suite à l'envoi des paramètres d'entrée 5120 if(!bool){ 5121 bool =true; 5122 $.ajax({type:'GET', 5123 url: url, 5124 dataType: 'json', 5125 contentType :'application/json', 5126 success: function(data){ 5127 previsions = data; 5128 var aujourdhui = new Date(); 5129 afficherPrevisions(parseDate(aujourdhui)); 5130 //colorerAujourdhui(); 5131 bool = false;
5132 5133 if(document.title.indexOf("Accueil") == -1 ){ 5134 creerTableauPrevisions(); 5135 createDatePicker(); 5136 } 5137 // bandeauPagination(data); 5138 5139 //En cas d'erreur de récupération des données on affiche le message suivant 5140 },error: function(){ 5141 var texteErreur; 5142 if(lang == 'es'){texteErreur = '"Información no disponible en este momento. Por favor, actualice la página en el navegador dentro de unos minutos."';} 5143 else{ 5144 if (lang == 'en'){texteErreur = '"Data not available for the moment. Please refresh your page in the browser in a few minutes"';} 5145 else{texteErreur = '"Données indisponibles pour le moment. Veuillez rafraîchir votre page dans le navigateur dans quelques instants"';} 5146 } 5147 var divTextErreur = document.createElement("div"); 5148 divTextErreur.className = "no-result"; 5149 divTextErreur.appendChild(document.createTextNode(texteErreur)); 5150 $("#liste-resultat").append(divTextErreur); 5151 bool = false; 5152 } 5153 }); 5154 } 5155 } 5156 5157function chargerJsonPrevisionDetaillees(url){ 5158 //On vide la liste de résultats avant l'envoie d'une nouvelle requête 5159 //$("#tableau-previsions").empty(); 5160 lang= $("#current-lang").val(); 5161 bool = false;
5162 //envoie de la requête 5163 //url sera à remplacer par l'adresse récupérer suite à l'envoi des paramètres d'entrée 5164 if(!bool){ 5165 bool =true; 5166 $.ajax({type:'GET', 5167 url: url, 5168 dataType: 'json', 5169 contentType :'application/json', 5170 success: function(data){ 5171 indexPrevision = data; 5172 },error: function(){ 5173 var texteErreur; 5174 if(lang == 'es'){texteErreur = '"Información no disponible en este momento. Por favor, actualice la página en el navegador dentro de unos minutos."';} 5175 else{ 5176 if (lang == 'en'){texteErreur = '"Data not available for the moment. Please refresh your page in the browser in a few minutes"';} 5177 else{texteErreur = '"Données indisponibles pour le moment. Veuillez rafraîchir votre page dans le navigateur dans quelques instants"';} 5178 } 5179 var divTextErreur = document.createElement("div"); 5180 divTextErreur.className = "no-result"; 5181 divTextErreur.appendChild(document.createTextNode(texteErreur)); 5182 $("#liste-resultat").append(divTextErreur); 5183 bool = false;
5184 } 5185 }); 5186 } 5187} 5188 5189 5190function removeWord(searchWord, str){ 5191 var n = str.search(searchWord); 5192 while(str.search(searchWord) > -1){ 5193 n = str.search(searchWord); 5194 str = str.substring(0, n) + str.substring(n + searchWord.length, str.length); 5195 } 5196 return str; 5197} 5198 5199function checkLanguage(urlHtml){ 5200 var urlHtmlSplited = urlHtml.split(".html"); 5201 var urlHtmlWithoutLang = urlHtmlSplited[0]; 5202 5203 if (urlHtmlWithoutLang.indexOf('langes') > -1){ 5204 urlHtmlWithoutLang = this.removeWord(",langes", urlHtmlWithoutLang); 5205 }else if(urlHtmlWithoutLang.indexOf('langen') > -1){ 5206 urlHtmlWithoutLang = this.removeWord(",langen", urlHtmlWithoutLang); 5207 } 5208 return urlHtmlWithoutLang; 5209} 5210 5211// sensPrevisions = depart / retour 5212function previsionsDetailleesClick(sensPrevisions){ 5213 var langCur = $("#current-lang").val(); 5214 var dateCourante= document.getElementById("dateCourante").innerHTML; 5215 var valDate = dateCourante.split(" "); 5216 var indexDate = previsions.days.indexOf(valDate[1]); 5217 var values = previsions.values[indexDate]; 5218 var newdate = valDate[1].split("/").reverse().join(""); 5219 var dates = []; 5220 var datesList = 5221 sensPrevisions == 'depart' ? indexPrevision.indexPrevisionDepart : 5222 sensPrevisions == 'retour' ? indexPrevision.indexPrevisionRetour : 5223 []; 5224 var flag = false; 5225 var urlHtmlWithoutLang; 5226 for(j=0;j<datesList.length;j++){ 5227 dates.push(datesList[j].date); 5228 } 5229 if(dates.indexOf(newdate) !== -1){ 5230 for(i=0;i<datesList.length;i++){ 5231 if(datesList[i].date === newdate){ 5232 urlHtmlWithoutLang = this.checkLanguage(datesList[i].urlHtml); 5233 if (langCur === "es"){ 5234 window.location.href = urlHtmlWithoutLang + ",langes.html"; 5235 break; 5236 }else if(langCur === "en"){ 5237 window.location.href = urlHtmlWithoutLang + ",langen.html"; 5238 break; 5239 }else{ 5240 window.location.href = urlHtmlWithoutLang + ".html"; 5241 break; 5242 } 5243 } 5244 } 5245 }else{ 5246 for(i=0; i < values.length; i++) { 5247 var couleurJour = values[i].split(',') 5248 if(couleurJour[0] === "O" || couleurJour[0] === "R" || couleurJour[0] === "N" || couleurJour[1] === "O" || couleurJour[1] === "R" || couleurJour[1] === "N"){ 5249 flag = false; 5250 window.location.href = "/previsions-non-disponibles.html"; 5251 break; 5252 }else{ 5253 flag = true; 5254 } 5255 } 5256 if(flag){ 5257 window.location.href = "/pas-de-previsions.html"; 5258 } 5259 } 5260} 5261 5262$(document).ready(function(){ 5263 // Déclaration des variables 5264 var lienAccueil = ""; 5265 var lienMobile = ""; 5266 var langCur; 5267 langCur = $("#current-lang").val(); // On récupère la langue courante 5268 5269 // permet de récupérer lâurl pointant sur le site mobile (Par défaut « ./mobile.html ») 5270 var urlmobile = bisonfute.core.INSTANCE.getUrls().mobile; 5271 // de la même manière pour le site desktop (Par défaut « ./index.html ») 5272 var urldesktop = bisonfute.core.INSTANCE.getUrls().desktop; 5273 5274 if(urldesktop != "undefined" || urldesktop != null || urldesktop != ""){ 5275 if(langCur!=""){ 5276 lienAccueil = urldesktop.split(".html")[0] + ",lang" + langCur + ".html"; 5277 }else{ 5278 lienAccueil = urldesktop; 5279 } 5280 } 5281 if(urlmobile != "undefined" || urlmobile != null || urlmobile != ""){ 5282 lienMobile = urlmobile; 5283 } 5284 if(document.title.indexOf("Accueil")== -1 ){ 5285 if(document.getElementById("lienAccueil")){ 5286 document.getElementById("lienAccueil").href = lienAccueil; 5287 } 5288 if(document.getElementById("lienAccueil_menu")){ 5289 document.getElementById("lienAccueil_menu").href = lienAccueil; 5290 } 5291 if(document.getElementById("lien_accueil_logo")){ 5292 document.getElementById("lien_accueil_logo").href = lienAccueil; 5293 } 5294 if(document.getElementById("lien-bf-mobile")){ 5295 document.getElementById("lien-bf-mobile").href = lienMobile; 5296 } 5297 } 5298});
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.