Changes

6,189 bytes added ,  13:02, 5 November 2021
no edit summary
Line 318: Line 318:  
/* End of mw.loader.using callback */
 
/* End of mw.loader.using callback */
 
} );
 
} );
 +
(function(window, $, 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);
 +
        $.proxy(modernReposition, $button.children('div'))();
 +
        $(window).on('resize', throttle(100, $.proxy(modernReposition, $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()+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(
 +
                $.proxy(modernPreload, 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'
 +
    });
 +
}(this, jQuery, mediaWiki));
 
/* DO NOT ADD CODE BELOW THIS LINE */
 
/* DO NOT ADD CODE BELOW THIS LINE */