Перейти к содержимому страницы
Переключить меню
Переключить меню настроек
Переключить персональное меню
Вы не представились системе
Ваш IP-адрес будет виден всем, если вы внесёте какие-либо изменения.
Сообщество «Повелителя Тайн»Telegram — новости, дунхуа, игры и мерчDiscord — обсуждение книг и теорий, вопросы по вики

MediaWiki:Dev-BackToTopButton-code.js

Страница интерфейса MediaWiki

Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
// A script that adds a "Back To Top" button in the footer of the Oasis theme.
// I don't like scrolling back to top on long pages neither do you :)
// Created by Noemon from Dead Space Wiki
// Used files: [[File:BackToTopArrow_white.png]] [[File:BlackToTopArrow.png]]
(function($, mw) {
    'use strict';
 
    var buttonStart = typeof window.BackToTopStart === 'number' ?
            window.BackToTopStart :
            window.innerHeight,
        scrollSpeed = typeof window.BackToTopSpeed === 'number' ?
            window.BackToTopSpeed :
            600,
        fadeSpeed = typeof window.BackToTopFade === 'number' ?
            window.BackToTopFade :
            600,
        $button,
        cc = mw.config.get('skin') === 'fandomdesktop' ?
        	$(':root').css('--theme-accent-color') :
        	$('.wds-community-header').css('background-color'),
        theme;
 
    // Double-run protection
    if (window.BackToTopLoaded) {
        return;
    }
    window.BackToTopLoaded = true;
 
    function init() {
        var $buttonChildren = $button.children('button, img, div');

        $buttonChildren.hide();
        $(window).scroll(throttle(100, function() {
            if ($(this).scrollTop() > buttonStart) {
                switch (fadeSpeed) {
                    case 0:
                        $buttonChildren.show();
                        break;
                    default:
                        $buttonChildren.fadeIn(fadeSpeed);
                        break;
                }
            } else {
                switch (fadeSpeed) {
                    case 0:
                        $buttonChildren.hide();
                        break;
                    default:
                        $buttonChildren.fadeOut(fadeSpeed);
                        break;
                }
            }
        }));
        mw.hook('dev.BackToTopButton').fire($button);
    }
 
    function click() {
        $('body, html').animate({
            scrollTop: 0
        }, scrollSpeed);
        return false;
    }
 
    function modernPreload(l) {
        if (++_loaded == l) {
            modernInit(window.dev.wds, window.dev.colors);
        }
    }
 
    function modernInit(wds, colors) {
        cc    = colors.parse(cc);
        theme = cc.isBright() ? '#000000' : '#ffffff';
        cc    = cc.hex();
        $button = $('<div>', {
            id: 'BackToTopBtn',
            append: [
                $('<div>', {
                    css: {
                        background: cc,
                        color:      theme,
                    },
                    'html': wds.icon('menu-control')
                })
            ],
            click: click
        }).appendTo(document.body);
        modernReposition.bind($button.children('div'))();
        $(window).on('resize', throttle(100, modernReposition.bind($button.children('div'))));
        init();
    }
    
    /* $.throttle source code */
    function throttle (delay, no_trailing, callback, debounce_mode) {
        var timeout_id, last_exec = 0;
        if (typeof no_trailing !== 'boolean') {
            debounce_mode = callback;
            callback = no_trailing;
            no_trailing = undefined;
        }
        function wrapper() {
            var that = this
              , elapsed = +new Date() - last_exec
              , args = arguments;
            function exec() {
                last_exec = +new Date();
                callback.apply(that, args);
            }
            function clear() {
                timeout_id = undefined;
            }
            if (debounce_mode && !timeout_id) {
                exec();
            }
            timeout_id && clearTimeout(timeout_id);
            if (debounce_mode === undefined && elapsed > delay) {
                exec();
            } else if (no_trailing !== true) {
                timeout_id = setTimeout(debounce_mode ? clear : exec, debounce_mode === undefined ? delay - elapsed : delay);
            }
        }
        if ($.guid) {
            wrapper.guid = callback.guid = callback.guid || $.guid++;
        }
        return wrapper;
    }
 
    function modernReposition() {
        this.css({
            'right':$(window).width()/100*5,
            'bottom':$('#WikiaBar #WikiaBarWrapper').height() + 9 + 8
        });
    }
 
    function arrowInit() {
        $button = $('<li>', {
            click: click,
            id: 'backtotop'
        }).append(
            $('<img>', {
                src: 'https://images.wikia.nocookie.net/dev/images/' + (
                    (theme === 'black' || window.BackToTopArrowBlack) ?
                        'f/f2/BlackToTopArrow' :
                        'c/c3/BackToTopArrow_white'
                    ) + '.png'
            })
        ).appendTo('#WikiaBarWrapper .toolbar > .tools');
        init();
    }
 
    function oldInit(i18n) {
        $button = $('<li>', {
            click: click,
            id: 'backtotop'
        }).append(
            $('<button>', {
                css: {
                    height: '20px'
                },
                type: 'button',
                class: (mw.config.get('wgVerion') !== '1.19.24' ? 'wds-button' : 'button'),
                text: (typeof window.BackToTopText === 'string' && window.BackToTopText) || i18n.msg('backToTop').plain()
            })
        ).appendTo('#WikiaBarWrapper .toolbar > .tools');
        init();
    }
 
    if (window.BackToTopModern) {
        var _loaded = 0;
        [
            {
                h: 'wds',
                s: 'u:dev:MediaWiki:WDSIcons/code.js'
            },
            {
                h:'colors',
                s: 'u:dev:MediaWiki:Colors/code.js'
            }
        ].forEach(function(lib, i, a) {
            importArticle({
                type: 'script',
                article: lib.s
            });
            mw.hook('dev.' + lib.h).add(
                modernPreload.bind(null, a.length)
            );
        });
    } else if (window.BackToTopArrow) {
        arrowInit();
    } else {
        importArticle({
            type: 'script',
            article: 'u:dev:MediaWiki:I18n-js/code.js'
        });
        mw.hook('dev.i18n').add(function (i18n) {
            i18n.loadMessages('BackToTopButton').done(oldInit);
        });
    }
    importArticle({
        type: 'style',
        article: 'u:dev:MediaWiki:BackToTopButton.css'
    });
}(window.jQuery, window.mediaWiki));