PageSourceSearch

https://eurostar.ru/local/templates/romza_bitronic2_2.23.6/js/cust…/inits/popups/initPopups.js?15758848448599

js eurostar.ru collected 2026-10-05 00:49:38 UTC 8,599 bytes, 253 lines download raw bytes

1function popClose($popup){
2    if (typeof $popup === 'undefined' || $popup.length === 0) {
3        return false;
4    }
5    var data = $popup.data();
6    var anim = data.anim || 'fade';
7    $(document).off('click.popup'+data.eventID).off('keydown.popup'+data.eventID);
8    $(window).off('resize.popup'+data.eventID);
9
10    if ( data.toggler !== undefined ) $(data.toggler).removeClass('toggled');
11    $popup.velocity('finish').velocity('transition.'+anim+'Out',{
12        begin: function(){
13            if ( data.darken !== undefined && !$body.data('going-to-dark') ){
14                $body.removeClass('darken-popup');
15            }
16        },
17        complete: function(){
18            $popup.attr('data-state', 'hidden');
19            if ($popup.hasClass('clone')) $popup.remove();
20        }
21
22
23    }).trigger('close');
24
25}
26
27function popOpen($popup, $caller){
28    //console.log('open', $popup);
29    var counter = globalCounter++,
30        data = $popup.data(),
31        position = data.position,
32        $base = $(data.base),
33        anim = data.anim || 'fade';
34
35    var viewport = ($caller && $caller.length) ? $caller.closest('.table-wrap') : $();
36    if (viewport.length === 0) viewport = null;
37    else{
38        $popup = $popup.clone().addClass('clone').appendTo($body);
39        viewport = viewport.children('.scroller');
40        viewport.one('scroll.popup', function(){
41            popClose($popup);
42            $(window).off('scroll.popup');
43        });
44        $(window).one('scroll.popup', function(){
45            popClose($popup);
46            viewport.off('scroll.popup');
47        })
48    }
49
50    if (data.container){
51        $popup = $popup.clone().addClass('clone').appendTo($(data.container));
52        $(window).one('scroll.popup', function(){
53            popClose($popup);
54        })
55    }
56
57    if ( $caller && $caller.length > 0 ){
58        var togglerID = $caller.data('toggler');
59        var $toggler = $(togglerID);
60        if ( togglerID === undefined ){
61            if ( $caller.attr('id') === undefined ) $caller.attr('id', 'popup' + counter);
62            togglerID = '#' + $caller.attr('id');
63            $toggler = $caller;
64        }
65        $toggler.addClass('toggled');
66        $popup.data('toggler', togglerID);
67        if ( $base.length === 0 ) $base = $toggler;
68        if ( !position ) position = $caller.data('position');
69    }
70
71    // if we're dealing with backnav popup
72    if ( $caller && $caller.data('backnav') !== undefined ){
73        if ( !b2.s.backnavEnabled ){
74            window.location.href = $caller.attr('href');
75            return true;
76        }
77        var callerOffset = $caller.position(),
78            targetIndex = parseInt($caller.data('backnav')),
79            backNavTarget = $popup.find('li').eq(targetIndex),
80            offsetTop = backNavTarget.position().top;
81
82        if (offsetTop > parseInt($caller.offset().top - 5))
83            offsetTop = parseInt($caller.offset().top - 5);
84
85        backNavTarget.addClass('active').children('a').addClass('toggled');
86        $popup.css({
87            'top': callerOffset.top,
88            'left': callerOffset.left,
89            'margin-top': -offsetTop
90        }).one('close', function(){
91            backNavTarget.off('click.backnav')
92                .removeClass('active')
93                .children('a').removeClass('toggled');
94        });
95
96        backNavTarget.on('click.backnav', function(e){
97            popClose($popup);
98            return !$(e.target).is('i');
99        });
100    }
101
102    $( document ).on('click.popup'+counter, function(e){
103        // do not close if the modal window is open
104        if ( !($(e.target).hasClass('modal')) && !($(e.target).closest('.modal').length) ) {
105            // closing on click outside
106            if ( !( $(e.target).closest($popup.add($caller)).length > 0 ||
107                $popup.hasClass('click-stay')) ){
108                //console.log('close via click outside', $popup);
109                if ( !($body.find('.modal.in').length) ) {
110                    popClose($popup);
111                }
112            }
113        }
114    }).on('keydown.popup'+counter, function(e){
115        // closing on ESC
116        if ( 27 === e.keyCode && !($body.hasClass('modal-open')) ){
117            //console.log('close via ESC', $popup);
118            popClose($popup);
119        }
120    });
121    $(window).on('resize.popup'+counter, function(){
122        if (isHover) popClose($popup);
123    })
124
125    $popup.attr('data-state', 'shown').data('eventID', counter)
126        .velocity('finish').velocity('transition.'+anim+'In', {
127        duration: 500,
128        begin: function(){
129            $popup.css({
130                opacity: 0,
131                display: 'block'
132            })
133            if ( data.darken !== undefined ){
134                $body.data('going-to-dark', true).addClass('darken-popup');
135            }
136            if ( position !== undefined ){
137                posPopup($popup, {
138                    base: $base,
139                    position: position,
140                    viewport: viewport
141                });
142            }
143            popHeightUpdate($popup);
144        },
145        complete: function(){
146            // $.ikSelect && $popup.find('select').ikSelect('redraw');
147
148            if ( data.darken !== undefined ){
149                $body.addClass('darken-popup').data('going-to-dark', false);
150                // ^ adding class again in case something removed it during
151                // the process.
152            }
153        }
154    }).trigger('open');
155}
156
157function popHeightUpdate($popup){
158    var scroller = $popup.children('.table-wrap').children('.scroller');
159    if ( !scroller.length ) return;
160
161    scroller.css('height','');
162    var popupTop = $popup.offset().top - $(window).scrollTop(),
163        popupH = $popup.outerHeight();
164
165    if ( popupTop < 0 ){
166        var scrollerH = scroller.outerHeight();
167        scroller.css('height', scrollerH + popupTop).trigger('sizeChange');
168    } else {
169        var windowH = $(window).height(),
170            scrollerH = scroller.outerHeight();
171        diff = windowH - (popupTop + popupH);
172        if ( diff < 0 ) scroller.css('height', scrollerH + diff).trigger('sizeChange');
173    }
174    scroller.trigger('sizeChange');
175}
176
177function parseTarget(target, $el){
178    if ( !target || target === '' ) return $el;
179
180    switch ( target[0] ){
181        case '>':
182            // > : all children
183            // >>(someselector) : el.find(someselector)
184            // >(someselector) : el.children(someselector)
185            if ( 1 === target.length ) return $el.children();
186            else if (target[1] === '>') return $el.find(target.substr(2));
187            else return $el.children(target.substr(1));
188            break;
189
190        case '^':
191            // ^ : el.parent()
192            // ^(selector)>(selector2) : el.closest(selector).find(selector2)
193            // ^(selector)~(selector2) : el.closest(selector).siblings(selector2)
194            // ^(selector) : el.closest(selector)
195            var index;
196            if ( 1 === target.length ) return $el.parent();
197            else if ( (index = target.indexOf('>')) !== -1 ){
198                var root = target.substr(1, index-1);
199                var tar = target.substr(index+1);
200                return $el.closest(root).find(tar);
201
202            } else if ( (index = target.indexOf('~')) !== -1 ){
203                var root = target.substr(1, index-1);
204                var tar = target.substr(index+1);
205                return $el.closest(root).siblings(tar);
206
207            } else {
208                return $el.closest(target.substr(1));
209            }
210            break;
211
212        case '#':
213            return $(target);
214            break;
215
216        case '.':
217            return $(target);
218            break;
219
220        case '+':
221            return $el.next();
222            break;
223
224        case '~':
225            return $el.siblings(target.substr(1));
226            break;
227
228        default:
229            console.log('error in parseTarget');
230    }
231}
232
233function initPopups(){
234    if (!Modernizr.mq('(max-width: 767px)')){
235        $('[data-state="shown"]').each(function(){
236            $(this).removeAttr('data-state');
237            popOpen($(this));
238        });
239    }
240
241    $(document).on('click', '[data-popup]', function(e){
242        var $this = $(this);
243        var $popup = parseTarget($this.data('popup'), $this);
244        if (!$popup.length) return;
245
246        if ( $popup.attr('data-state') !== 'shown' ) popOpen($popup, $this);
247        else{
248            //console.log('close via toggler', $popup);
249            popClose($popup);
250        }
251        e.preventDefault ? e.preventDefault() : window.event.returnValue = false;
252    });
253}

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.