1function Visionneuse(obj, config, app) { 2 // Get reference to main Project object 3 this.app = app; 4 5 // Overwrite the default configuration 6 this.config = $.extend({ 7 8 }, config); 9 10 this.clicked = null; 11 this.thumbsSlideSpeed = 700; 12 this.visionneuse = $(obj).find('.visionneuse'); 13 this.visionneuseMain = this.visionneuse.find('.visionneuse__main'); 14 this.visionneuseMainSlides = this.visionneuseMain.find('.visionneuse__slide'); 15 this.visionneuseMainSlidesNbr = this.visionneuseMainSlides.length; 16 this.visionneusePreviewContainer = this.visionneuse.find('.visionneuse__preview--container'); 17 this.visionneuseThumbs = this.visionneuse.find('.visionneuse__thumb'); 18 this.visionneuseThumbs2 = this.visionneuse.find('.visionneuse__preview'); 19 this.visionneusePreviewThumbs = this.visionneuse.find('.visionneuse__preview--thumbs'); 20 this.visionneuseThumbsButtons = this.visionneusePreviewThumbs.find('button'); 21 this.visionneuseThumbsControl = this.visionneuse.find('.visionneuse__control'); 22 this.currentSlide = 0; 23 this.currentThumbsPosition = 0; 24 this.slideMaxHeight = $(window).height() * 0.6; 25 this.visionneuseOpener = $(obj).find('.visionneuse__opener'); 26 this.visionneuseGarde = this.visionneuse.find('.visionneuse__garde'); 27 this.visionneuseBkg = this.visionneuse.find('.visionneuse__bkg'); 28 29 this.init(); 30} 31 32Visionneuse.prototype = { 33 init: function() { 34 this.bindBackground(); 35 this.bindGarde(); 36 this.bindOpener(); 37 this.bindPrevNext(); 38 this.bindResize(); 39 this.lock = false; 40 }, 41 bindBackground: function(){ 42 var self = this; 43 this.visionneuseBkg.on('click', function() { 44 self.closeVisionneuse(); 45 }); 46 }, 47 bindGarde: function() { 48 var self = this; 49 self.visionneuseGarde.focus(function() { 50 self.closeVisionneuse(); 51 }); 52 }, 53 bindOpener: function() { 54 var self = this; 55 self.visionneuseOpener.on('click', function(e) { 56 e.preventDefault(); 57 58 self.clicked = $(this); 59 if($(this).data('slide') !== undefined){ 60 var slide = parseInt($(this).data('slide'), 10); 61 }else{ 62 var slide = self.currentSlide; 63 } 64 65 self.showVisionneuse(); 66 self.changeSlide(slide, true); 67 }); 68 }, 69 bindPrevNext: function() { 70 var self = this; 71 self.visionneuseMain.on('click', 'button', function() { 72 var $this = $(this); 73 74 if (self.lock) return false; 75 76 self.lock = true; 77 78 if ($this.data('visionneuse') === 'next-slide') { 79 if ((self.currentSlide+1) === self.visionneuseMainSlidesNbr){ 80 self.goToFirstSlide(); 81 }else{ 82 self.goToNextSlide(); 83 } 84 self.focusTitle(); 85 } else if ($this.data('visionneuse') === 'prev-slide') { 86 if ((self.currentSlide) === 0){ 87 self.goToLastSlide(); 88 }else{ 89 self.goToPrevSlide(); 90 } 91 self.focusTitle(); 92 } else if ($this.data('visionneuse') === 'close') { 93 self.closeVisionneuse(); 94 } 95 }); 96 97 self.visionneuseThumbsControl.on('click', 'button',function() { 98 var $this = $(this); 99 100 if (self.lock) return; 101 102 if ($this.data('visionneuse') === 'next' || $this.data('visionneuse') === 'prev') { 103 self.goToNextThumbSlide($this.data('visionneuse')); 104 } 105 }); 106 107 self.visionneuseThumbsButtons.each(function(i, el){ 108 $(el).data('position', i); 109 }); 110 111 self.visionneusePreviewThumbs.on('click', 'button', function() { 112 if (self.lock) return false; 113 self.lock = true; 114 115 self.changeSlide($(this).data('position')); 116 }); 117 118 }, 119 bindResize: function(){ 120 var self = this; 121 $(window).resize(function(){ 122 setTimeout(function(){ 123 self.resize() 124 },200); 125 126 }); 127 }, 128 focusTitle: function(){ 129 $(this.visionneuseMainSlides[this.currentSlide]).find('.visionneuse__slide__title').attr('tabindex','-1').focus(); 130 }, 131 goToNextSlide: function() { 132 this.changeSlide(this.currentSlide + 1); 133 }, 134 goToFirstSlide: function(){ 135 this.changeSlide(0); 136 }, 137 goToPrevSlide: function() { 138 this.changeSlide(this.currentSlide -1); 139 }, 140 goToLastSlide: function(){ 141 this.changeSlide(this.visionneuseMainSlidesNbr-1); 142 }, 143 goToNextThumbSlide: function(action){ 144 var controlWidth = this.visionneusePreviewContainer.width() + parseInt(this.visionneuseThumbsButtons.first().css('margin-right'),10), 145 buttonWidth = this.visionneuseThumbsButtons.first().outerWidth(true), 146 nbrButtonsVisible = Math.floor(controlWidth/buttonWidth); 147 148 this.swipeThumbs(nbrButtonsVisible, buttonWidth, action); 149 }, 150 changeSlide: function(position, noAnimation){ 151 var self= this, 152 buttonWidth = parseInt(self.visionneuseThumbsButtons.first().outerWidth(true), 10), 153 nextButtonVisible = self.thumbVisible(this.visionneuseThumbsButtons[position]); 154 155 // self.resizeSlide( position ); 156 157 this.visionneuseThumbsButtons.removeClass('is-active'); 158 $(this.visionneuseThumbsButtons[position]).addClass('is-active'); 159 160 this.visionneuseMainSlides.removeClass('is-active'); 161 $(this.visionneuseMainSlides[position]).addClass('is-active'); 162 163 self.resizeSlide( position ); 164 self.resize(); 165 166 self.lock = false;
167 168 if (!nextButtonVisible){ 169 self.lock = true; 170 171 if(this.currentSlide < position){ 172 self.currentThumbsPosition -= (position - this.currentSlide) * buttonWidth; 173 }else{ 174 self.currentThumbsPosition = -(buttonWidth * position); 175 } 176 177 if(noAnimation){ 178 self.visionneusePreviewThumbs.css('margin-left', self.currentThumbsPosition); 179 self.lock = false; 180 }else{ 181 self.visionneusePreviewThumbs.animate({ 'margin-left': self.currentThumbsPosition }, self.thumbsSlideSpeed, function() { 182 self.lock = false; 183 }); 184 } 185 } 186 187 this.currentSlide = position; 188 189 }, 190 swipeThumbs: function(nbrButtonsVisible, buttonWidth, action){ 191 var self = this; 192 var newThumbsPosition = self.currentThumbsPosition; 193 if (action === 'next'){ 194 var lastButtonVisible = this.thumbVisible(self.visionneuseThumbsButtons.last()), 195 minNegMarge = parseInt(-((this.visionneuseThumbsButtons.length-1) * buttonWidth)); 196 197 if (!lastButtonVisible){ 198 newThumbsPosition -= (buttonWidth * nbrButtonsVisible); 199 200 if (newThumbsPosition < minNegMarge){ 201 newThumbsPosition = minNegMarge; 202 } 203 } 204 205 } else if (action === 'prev'){ 206 newThumbsPosition += (buttonWidth * nbrButtonsVisible); 207 208 if (newThumbsPosition > 0){ 209 newThumbsPosition = 0; 210 } 211 } 212 213 if(newThumbsPosition != self.currentThumbsPosition){ 214 self.currentThumbsPosition = newThumbsPosition; 215 self.lock = true; 216 this.visionneusePreviewThumbs.animate({ 'margin-left': self.currentThumbsPosition }, self.thumbsSlideSpeed, function() { 217 self.lock = false; 218 }); 219 } 220 }, 221 resizeSlide: function(slide){ 222 slide = $(this.visionneuseMainSlides[slide]); 223 var heightdescription = slide.find('div').height(); 224 var slideMaxHeight = this.slideMaxHeight - heightdescription; 225 slide.children('img').css({ 226 'max-height': slideMaxHeight 227 }); 228 }, 229 resize: function(){ 230 var self = this; 231 var thumbsHeight = 0; 232 if(this.visionneuseThumbs.is(":visible")){ 233 thumbsHeight = this.visionneuseThumbs.height() 234 } 235 self.slideMaxHeight = ($(window).height() -40) - thumbsHeight - parseInt(this.visionneuseMain.css('margin-bottom'),10) - parseInt(this.visionneuseMainSlides.first().css('padding-top'),10) - parseInt(this.visionneuseMainSlides.first().css('padding-bottom'),10) - parseInt(this.visionneuseMainSlides.first().find('img').css('margin-bottom'),10); 236 237 self.visionneuse.css({ 238 'margin-top' : -self.visionneuse.height() /2, 239 'margin-left' : -self.visionneuse.width() /2, 240 'max-width': $('.page__content').width() 241 }); 242 self.visionneuseThumbs.css('width', ''); 243 var controlWidth = this.visionneusePreviewContainer.width(), 244 buttonWidth = this.visionneuseThumbsButtons.first().outerWidth(true), 245 buttonMargin = parseInt(this.visionneuseThumbsButtons.first().css('margin-right'),10), 246 nbrButtonsVisible = Math.floor(controlWidth/buttonWidth), 247 diff = this.visionneuseThumbs.innerWidth() - this.visionneuseThumbs2.width(); 248 249 self.visionneuseThumbs.css('width', (nbrButtonsVisible * buttonWidth) + diff - buttonMargin); 250 self.resizeSlide(self.currentSlide); 251 self.showHideThumbsNavigation(nbrButtonsVisible); 252 }, 253 showHideThumbsNavigation: function(nbrButtonsVisible){ 254 if(nbrButtonsVisible >= this.visionneuseMainSlidesNbr){ 255 this.visionneuseThumbsControl.hide(); 256 }else{ 257 this.visionneuseThumbsControl.show(); 258 } 259 }, 260 thumbVisible: function(button){ 261 button = $(button); 262 var self = this, 263 container = self.visionneusePreviewContainer, 264 containerLeft = container.position().left, 265 buttonLeft = button.position().left, 266 visible = false;
267 268 if (buttonLeft >= containerLeft && buttonLeft + button.width() <= containerLeft + container.width()) { 269 visible = true; 270 } 271 272 return visible; 273 }, 274 showVisionneuse: function(){ 275 var self = this; 276 self.visionneuse.show(); 277 self.resizeSlide(this.currentSlide); 278 self.resize(); 279 self.resize(); 280 self.visionneuseMain.attr("tabindex",-1).focus(); 281 }, 282 closeVisionneuse: function(){ 283 this.visionneuse.hide(); 284 this.clicked.focus(); 285 this.lock = false; 286 } 287};
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.