PageSourceSearch

https://keepsoft.ru/js/common.js

js keepsoft.ru collected 2026-10-03 19:32:07 UTC 13,261 bytes, 402 lines download raw bytes

1$(function() {
2
3    setTimeout(function() {
4        $("body").removeClass("preload");
5    }, 1000);
6
7
8    // отложенная загрузка зеленного фона
9    setTimeout(function() {
10        var i = new Image();
11        i.src = '/css/img/bg.png';
12        i.onload = function() {
13            $('.header .bg').css({
14                'background': 'url(/css/img/bg.png) center',
15                'background-size': '100% 100%'})
16                    .animate({'opacity': '1'});
17            $('.header-help').css({
18                'background': 'url(/css/img/bg.png) center',
19                'background-size': '100% 100%'})
20                    .animate({'opacity': '1'});
21
22            $('.download').css('background', 'url(/css/img/bg.png) center no-repeat');
23            $('.download-2').css('background', 'url(/css/img/bg.png) center no-repeat').css('background-size', '100%');
24        };
25    }, 50);
26
27
28    // accordion for site map
29    $('.site-map h3').click(function() {
30        var ul = $(this).parents('.col').find('ul');
31        if (ul.hasClass('expanded'))
32            return false;
33        $(this).parents('.site-map').find('ul.expanded').slideUp(function() {
34            $(this).attr('style', '');
35        }).removeClass('expanded');
36        ul.slideDown().addClass('expanded');
37        return false;
38    });
39
40
41    // toolbar with menu
42    var menu1Button = $('a.menu1-button');
43    var menu2Button = $('a.menu2-button');
44    var menu1 = $('.menu1');
45    $('html').click(function() {
46        if (menu2Button[0].expanded) {
47            collapseMenu2();
48        }
49        if (menu1Button[0].expanded) {
50            menu1.slideUp();
51            menu1Button[0].expanded = false;
52        }
53    });
54    $('#menu').click(function(event) {
55        event.stopPropagation();
56    });
57
58    var collapseMenu2 = function() {
59        $('.menu2').slideUp(function() {
60            $('.menu2').css('display', '');
61        });
62        $('a.menu2-button')[0].expanded = false;
63    };
64    $('a.menu1-button')[0].expanded = false;
65    $('a.menu1-button').click(function() {
66        if (this.expanded) {
67            $('.menu1').slideUp();
68            if ($('.menu').css('top') != '0px')
69                $('.menu').removeClass('expanded');
70            this.expanded = false;
71        }
72        else {
73            $('.menu1').slideDown();
74            $('.menu').addClass('expanded');
75            if ($('.menu2-button').is(":visible"))
76                collapseMenu2();
77            else
78                $('.menu2').css('display', '');
79            this.expanded = true;
80        }
81    });
82
83    $('a.menu2-button')[0].expanded = false;
84    $('a.menu2-button').click(function() {
85        if (this.expanded) {
86            collapseMenu2();
87            if ($('.menu').css('top') != '0px')
88                $('.menu').removeClass('expanded');
89            ;
90        }
91        else {
92            $('.menu2').slideDown();
93            $('.menu').addClass('expanded');
94            $('.menu1').slideUp();
95            this.expanded = true;
96            $('a.menu1-button')[0].expanded = false;
97        }
98    });
99    var snapped = false;
100    var lastScrollTop = 0;
101    var menuPos = 0;
102    try {
103        //document.createEvent("TouchEvent");
104        menu = document.getElementById('menu');
105        var MENU_HEIGHT = 54;
106        var jMenu = $('#menu');
107        var doc = document.documentElement;
108        var menuMoved = false;
109        document.getElementsByTagName("body")[0].addEventListener("touchend", function() {
110            if (menuMoved && snapped) {
111                if ((-menuPos / MENU_HEIGHT) < 0.3) {
112                    jMenu.animate({'top': '0px'});
113                    menuPos = 0;
114                } else {
115                    jMenu.animate({'top': -MENU_HEIGHT + 'px'}, function() {
116                        jMenu.css('top', '-300px');
117                    });
118                    menuPos = -MENU_HEIGHT;
119                }
120                menuMoved = false;
121            }
122        }, false);
123
124        var onScroll = function() {
125            var currentScrollTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
126            if (!snapped && (currentScrollTop > 0)) {
127                menu.className = 'menu stuck';
128                snapped = true;
129            }
130            if (snapped && (currentScrollTop < 10)) {
131                menu.className = "menu";
132                menu.style.top = "";
133                snapped = false;
134            }
135            if (menu2Button[0].expanded) {
136                collapseMenu2();
137            }
138            if (menu1Button[0].expanded) {
139                menu1.slideUp();
140                menu1Button[0].expanded = false;
141            }
142
143            if (snapped) {
144                if (currentScrollTop < lastScrollTop) {
145                    menuPos = menuPos - (currentScrollTop - lastScrollTop);
146                    if (menuPos > 0) {
147                        menuPos = 0;
148                        menuMoved = false;
149                    } else {
150                        menuMoved = true;
151                    }
152                    menu.style.top = menuPos + 'px';
153                } else {
154                    menuPos = menuPos - (currentScrollTop - lastScrollTop);
155                    if (menuPos < -MENU_HEIGHT) {
156                        menuPos = -MENU_HEIGHT;
157                        menuMoved = false;
158                        menu.style.top = '-300px';
159                    } else {
160                        menuMoved = true;
161                        menu.style.top = menuPos + 'px';
162                    }
163
164                }
165
166            }
167
168            lastScrollTop = currentScrollTop;
169        };
170
171        if (navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) {
172            window.addEventListener('touchmove', onScroll);
173        } else {
174            $(window).scroll(onScroll);
175        }
176    }
177    catch (e) {
178        $(window).scroll(function() {
179            if (menu1Button[0].expanded) {
180                menu1.slideUp();
181                menu1Button[0].expanded = false;
182            }
183        });
184    }
185
186});
187
188
189// slider
190
191slider = function(selector, options) {
192    if (typeof options === 'undefined')
193    {
194        options = {};
195    }
196    var circle = (typeof options.circle === 'undefined') ? true : options.circle;
197    var autoScroll = (typeof options.auto === 'undefined') ? false : options.auto;
198    var calcMaxSize = (typeof options.calcMaxSize === 'undefined') ? true : options.calcMaxSize;
199    var startOfSlide = (typeof options.startOfSlide === 'undefined') ? 0 : options.startOfSlide;
200    var slides = $(selector + ' .slides .slide');
201    var slidesCount = slides.length;
202    var onSwitch = (typeof options.onswitch === 'undefined') ? function() {
203    } : options.onswitch;
204    var maxH = 0;
205    slides.each(function(i, e) {
206        if (calcMaxSize) {
207            var h = $(e).height();
208            if (h > maxH)
209                maxH = h;
210        }
211        $(selector + ' .slider-nav').append('<a href="#" data-rel="' + (+i + 1) + '"></a>');
212        if (i == 0) {
213            $(selector + ' .slider-nav a').addClass('active');
214        }
215    });
216    if (calcMaxSize)
217        slides.height(maxH);
218    $(slides[0]).clone().css({width: 100 / (slidesCount + 1) + '%', float: 'left'}).appendTo(selector + ' .slides');
219    $(selector + ' .slides-wrapper').css('overflow', 'hidden');
220    $(selector + ' .slides').css('width', 100 * (slidesCount + 1) + '%');
221    $(selector + ' .slide').css('display', 'block');
222    slides.css('width', 100 / (slidesCount + 1) + '%').css('float', 'left');
223    var intervalId = 0;
224    var slideStarted = false;
225    var busy = false;
226    var current = 1;
227    var setActiveDot = function(num) {
228        $(selector + ' .slider-nav a').removeClass('active');
229        $($(selector + ' .slider-nav a')[num - 1]).addClass('active');
230    };
231    var slider = $(selector + ' .slides');
232    var navTo = function(num, animate) {
233        if (busy)
234            return false;
235
236        clearTimeout(intervalId);
237        busy = true;
238
239        var slideN1Content = null, slideN1 = null;
240
241        if (num > current + 1) {
242//                        var slideCurr = slider.find('.slide')[current - 1];
243//                        slideN1 = slider.find('.slide')[num - 2];
244//                        slideN1Content = slideN1.innerHTML;
245//                        slideN1.innerHTML = slideCurr.innerHTML;
246//                        slider.css('margin-left', -(num - 1 - 1) * 100 + '%');
247            //return;
248            // TODO : hide all slides between
249            $(slider.find('.slide')[1]).hide();
250            slider.animate({
251                'margin-left': -(current) * 100 + '%'
252            }, function() {
253                busy = false;
254                // TODO : show all slides between
255                $(slider.find('.slide')[1]).show();
256                slider.css('margin-left', -(num - 1) * 100 + '%');
257            });
258            current = num;
259            setActiveDot(current);
260            startInterval();
261            onSwitch();
262            return;
263        }
264        if (num < current - 1) {
265//                        var slideCurr = slider.find('.slide')[current - 1];
266//                        slideN1 = slider.find('.slide')[num];
267//                        slideN1Content = slideN1.innerHTML;
268//                        slideN1.innerHTML = slideCurr.innerHTML;
269//                        slider.css('margin-left', -(num - 1 + 1) * 100 + '%');
270            slider.css('margin-left', -(num) * 100 + '%');
271            $(slider.find('.slide')[1]).hide();
272            slider.animate({
273                'margin-left': -(num - 1) * 100 + '%'
274            }, function() {
275                busy = false;
276                // TODO : show all slides between
277                $(slider.find('.slide')[1]).show();
278            });
279            current = num;
280            setActiveDot(current);
281            startInterval();
282            onSwitch();
283            return;
284        }
285
286        current = num;
287        setActiveDot(current);
288        slider.animate({
289            'margin-left': -(num - 1) * 100 + '%'
290        }, function() {
291            busy = false;
292            startInterval();
293//                            if (slideN1) {
294//                                slideN1.innerHTML = slideN1Content;
295//                            }
296        });
297        onSwitch();
298        return false;
299    };
300
301    if (startOfSlide) {
302        //current = num;
303        slider.css('margin-left', -(startOfSlide - 1) * 100 + '%');
304        setActiveDot(startOfSlide);
305        current = startOfSlide;
306    }
307    var startInterval = function() {
308        if (!autoScroll)
309            return false;
310        if (typeof intervalId !== 'undefined')
311            clearTimeout(intervalId);
312        intervalId = setTimeout(function() {
313            nav(1);
314        }, options.interval || 10000);
315    }
316    var nav = function(delta) {
317        if (busy)
318            return false;
319        clearTimeout(intervalId);
320        busy = true;
321        var slider = $(selector + ' .slides');
322        current += delta;
323        if (current > slidesCount) {
324            if (circle) {
325                slider.animate({
326                    'margin-left': -(current - 1) * 100 + '%'
327                }, function() {
328                    busy = false;
329                    current = 1;
330                    slider.css('margin-left', 0);
331                    setActiveDot(current);
332                    startInterval();
333                });
334                onSwitch();
335                return;
336            } else {
337                current = slidesCount;
338            }
339        }
340        if (current < 1) {
341            if (circle) {
342                slider.css('margin-left', -slidesCount * 100 + '%');
343                current = slidesCount;
344            } else {
345                current = 1;
346            }
347        }
348        slider.animate({
349            'margin-left': -(current - 1) * 100 + '%'
350        }, function() {
351            busy = false;
352            setActiveDot(current);
353            startInterval();
354        });
355        onSwitch();
356        return false;
357    };
358    $(selector + ' .slider-prev').click(function() {
359        nav(-1);
360        return false;
361    });
362    $(selector + ' .slider-next').click(function() {
363        nav(1);
364        return false;
365    });
366    $(selector + ' .slider-nav a').click(function() {
367        var me = $(this);
368        var index = +me.attr('data-rel');
369        navTo(index);
370        return false;
371    });
372    try {
373        document.createEvent("TouchEvent");
374        $(selector + ' .slides')[0].addEventListener('swr', function() {
375            nav(-1);
376            return false;
377        }, false);
378        $(selector + ' .slides')[0].addEventListener('swl', function() {
379            nav(1);
380            return false;
381        }, false);
382    } catch (e) {
383    }
384
385    if (autoScroll) {
386        var top = $(selector).position().top - $(window).height()
387                + $(selector).height();
388        if ($(window).scrollTop() > top) {
389            startInterval();
390            slideStarted = true;
391        }
392        $(window).scroll(function() {
393            if (slideStarted)
394                return false;
395            if ($(window).scrollTop() > top) {
396                startInterval();
397                slideStarted = true;
398            }
399        });
400    }
401}
402

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.