MediaWiki:Gadget-donate.js

Материал из Циклопедии
Перейти к навигации Перейти к поиску

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

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Internet Explorer / Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
/*
 * Кампания по сбору пожертвований
 * Автор — Saint Johann, 21 марта 2014 года
 * Повышение безопасности, комменты — Урахара, 31 мая 2026 года
 */
(function($, mw) {
    'use strict';
    
    // Проверка существования глобальных переменных (безопасность)
    if (typeof wgPageName === 'undefined' || typeof wgNamespaceNumber === 'undefined') {
        return;
    }
    
    // Оригинальное условие
    if (wgPageName != 'Циклопедия:Обращение 2018' && wgNamespaceNumber == '0') {
        var donate = $('<div>', {class: 'donate'}),
            donate_toggle;
        
        // Проверка существования #top (улучшение надёжности)
        if (!$('#top').length) {
            return;
        }
        
        $('#top').after(
            donate.append(
                $('<div>', {class: 'donate-about'}).append(
                    $('<p>').text('Циклопедия была создана как инклюзионистский википроект, где можно писать нейтральные в истинном смысле этого слова научно-популярные статьи на любые, в том числе — необычные, темы. За 7 лет проект добился значительных успехов:')
                )
            ).append(
                $('<ul>', {class: 'donate-stats'})
                    .append($('<li>').html('<small>более</small> <b>64 000</b> статей,'))
                    .append($('<li>').html('<small>до</small> <b>50 000</b> посещений за сутки и'))
                    .append($('<li>').html('<small>около</small> <b>1,6 млн</b> просмотров за месяц.</li>'))
            ).append(
                $('<div>', {class: 'donate-why'})
                    .append($('<p>').html('Но возрастающая популярность требует и большей оплаты, поэтому мы обращаемся к вам с просьбой о материальной помощи. Нам необходимо собрать <big><b>50 000</b> <span class="donate-rub">Р</span></big> для продолжения стабильного обслуживания технической части.'))
                    .append(
                        $('<div>', {class: 'donate-btn'}).append(
                            $('<a>', {
                                href: '/wiki/Циклопедия:Обращение 2018',
                                id: 'js-donate-btn'
                            }).text('Прочитать полное обращение')
                        )
                    )
            ).append(
                $('<div>', {class: 'donate-how'}).append(
                    $('<span>').text('Пожертвуйте проекту:')
                        .append($('<img>', {
                            alt: 'WebMoney (WMR / WMZ)',
                            src: '//i.imgur.com/pPStTEY.png',
                            title: 'WebMoney (WMR / WMZ)'
                        }))
                        .append($('<img>', {
                            alt: 'Яндекс.Деньги',
                            src: '//i.imgur.com/9RqzUsf.gif',
                            title: 'Яндекс.Деньги'
                        }))
                        .append($('<img>', {
                            alt: 'Qiwi',
                            src: '//i.imgur.com/qIz4RpT.png',
                            title: 'Qiwi'
                        }))
                        .append($('<img>', {
                            alt: 'Paypal',
                            src: '//i.imgur.com/iyzliF0.png',
                            title: 'Paypal'
                        }))
                ).append(donate_toggle = $('<button>', {class: 'donate-toggle'}))
            )
        );
        
        // Логика localStorage
        if (localStorage.getItem('donate') != '0') {
            donate_toggle.addClass('donate-close').attr('id', 'js-donate-close').text('×');
        } else {
            donate.addClass('donate_hided');
            donate_toggle.addClass('donate-open').attr('id', 'js-donate-open').text('↑');
        }
        
        // Безопасный переход с проверкой на XSS
        $(document).on('click', '.donate-about, .donate-stats, .donate-why, .donate-how span', function() {
            var href = $('#js-donate-btn').attr('href');
            // Защита от javascript: и data: протоколов
            if (href && !/^(javascript|data|vbscript):/i.test(href.trim())) {
                window.location = href;
            }
            return false;
        });
        
        // Обработчики закрытия/открытия
        $(document).on('click', '#js-donate-close', function() {
            $('.donate').addClass('donate_hided');
            $(this).attr({
                class: 'donate-toggle donate-open',
                id: 'js-donate-open'
            }).text('↑');
            localStorage.setItem('donate', '0');
        });
        
        $(document).on('click', '#js-donate-open', function() {
            $('.donate').removeClass('donate_hided');
            $(this).attr({
                class: 'donate-toggle donate-close',
                id: 'js-donate-close'
            }).text('×');
            localStorage.setItem('donate', '1');
        });
    }
})(jQuery, mediaWiki);