MediaWiki:Modules/categories-list-generator.js

Материал из Мракопедии
Перейти к: навигация, поиск

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

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl-F5 или Ctrl-R (⌘-R на Mac)
  • Google Chrome: Нажмите Ctrl-Shift-R (⌘-Shift-R на Mac)
  • Internet Explorer: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl-F5
  • Opera: Перейдите в Menu → Настройки (Opera → Настройки на Mac), а затем Безопасность → Очистить историю посещений → Кэшированные изображения и файлы
$('#categories-table')
    .before('<center><input type="checkbox" id="generator-toggle" style="scale: 1.3;"><label for="generator-toggle" style="font-size: 140%; user-select: none;">Включить генератор списка категорий</label></center>')
    .before(String.raw`<style>
#categories-table a.generator::before {
    content: "";
    display: inline-block;
    padding-right: 0.2em;
    vertical-align: text-top;
    height: 1em;
    aspect-ratio: 1;
    background: url('https://mrakopedia.net/w/images/9/99/Plusminussprite.png');
    background-size: cover;
    background-clip: content-box;
}

#categories-table a.added::before {
    background-position-x: 16px;
}

a.generator {
    white-space: nowrap;
}

</style>`);

$('#categories-table > tbody').append('<tr style="display: none;"><td colspan="2"><textarea style="resize: none;" rows="5" id="categories-markup-list" placeholder="Начните выбирать категории"></textarea><input type="button" value="Скопировать" style="margin-top: 0.2em;" id="copy-result"></td></tr>');

let pickedCategories = new Set();

$('#categories-table').on('categories-changed', function() {
    let array = Array.from(pickedCategories);
    let content = array.sort().map((category)=>`[[${category}]]`).join('\n');

    $('#categories-markup-list').val(content).attr('rows', Math.max(5, pickedCategories.size));
});

$('#copy-result').click(async function() {
    let content = $('#categories-markup-list').val();
    await navigator.clipboard.writeText(content);
});

$('#generator-toggle').click(function() {

    $('#categories-table a').toggleClass('generator');
    $('#categories-table tr:last-child').toggle();

    if ($(this).is(':checked')) {
        $('#categories-table a').click(function(e) {
            e.preventDefault();

            let $anchor = $(e.target), entry = $anchor.attr('title');
            $anchor.toggleClass('added');

            if ($anchor.hasClass('added')) {
                pickedCategories.add(entry);
            } else {
                pickedCategories.delete(entry);
            }

            $(this).trigger('categories-changed');

        });

    } else {
        $('#categories-table a').off('click');
    }
});

if (window.location.hash === '#generator') {
  $('#generator-toggle').click();
}