PageSourceSearch

https://www.traversiers.com/_assets/26dcebd1710e5fe9e47e5c1f9979e512/js/modules/Visionneuse.js?1789147798

js traversiers.com collected 2026-09-24 20:00:16 UTC 10,686 bytes, 287 lines download raw bytes

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.