Текущая версия |
Ваш текст |
Строка 68: |
Строка 68: |
| : P.S. Кажется, пространство «Энциклопедия» мы импортировать не будем, там что правки можно не отмечать. [[Участник:EvilCat|EvilCat]] ([[Обсуждение участника:EvilCat|обсуждение]]) 21:40, 1 февраля 2024 (MSK) | | : P.S. Кажется, пространство «Энциклопедия» мы импортировать не будем, там что правки можно не отмечать. [[Участник:EvilCat|EvilCat]] ([[Обсуждение участника:EvilCat|обсуждение]]) 21:40, 1 февраля 2024 (MSK) |
| :: Блин, слона и не заметил. Спасибо! | | :: Блин, слона и не заметил. Спасибо! |
− |
| |
− | == Версия MediaWiki ==
| |
− | На выходных попробую обновить версию MW до актуальной. Это дело немаленькое: нужно всё забэкапить лишний раз, проверить совместимость плагинов и т. д. Не гарантирую, что всё получится или что время на выходных не денется куда-нибудь внезапно, но надо попробовать, тогда можно будет спокойно ставить свежие версии плагинов (видео, Math, Lua, даже Semantic Media Wiki при желании). [[Участник:EvilCat|EvilCat]] ([[Обсуждение участника:EvilCat|обсуждение]]) 12:17, 6 февраля 2024 (MSK)
| |
− | : Большое спасибо! Знаю, что это сложно. [[Участник:Demetrius|Demetrius]] ([[Обсуждение участника:Demetrius|обсуждение]]) 16:10, 6 февраля 2024 (MSK)
| |
− |
| |
− | Плохие новости: без переезда на свежий CentOS обновиться не получится :\
| |
− |
| |
− | Хорошие новости: для переезда около двух лет назад не хватало совместимости некоторых нужных свежих пакетов друг с другом, и к счастью за два года они договорились. Для переезда готово всё, нужно только несколько свободных выходных. Наверное, следующие и послеследующие, если ничего не случится. [[Участник:EvilCat|EvilCat]] ([[Обсуждение участника:EvilCat|обсуждение]]) 12:15, 11 февраля 2024 (MSK)
| |
− |
| |
− | == Возможная проблема с аттрибуцией для удалённых статей Википедии ==
| |
− |
| |
− | Когда в Википедии удаляют статью, удаляется и её история. Но если мы сохраняем статью (например, [[Неттерсгеймский договор]]), то у нас таким образом материал без атрибуции. Потенциальное нарушение T_T (хотя, наверное, это как abandonware; если автор появится, мы с радостью его упомянем).
| |
− |
| |
− | Что с этим делать? Видимо, когда используешь материалы Википедии, надо дублировать список авторов на странице обсуждения? (Есть ли какой-то простой способ составить такой список?) Или это стоит делать только для статей с высокой вероятностью удаления? [[Участник:Demetrius|Demetrius]] ([[Обсуждение участника:Demetrius|обсуждение]]) 19:36, 25 февраля 2024 (MSK)
| |
− |
| |
− | == Другой интерфейс для категорий языка ==
| |
− |
| |
− | Предлагаю сделать другой интерфейс для категорий по языку. Сейчас они занимают слишком много места (см. пример в статье [[Cairn (OSR)]]).
| |
− |
| |
− | Предлагаю [[:Категория:Ролевые материалы по языку|языковые категории]] скрытымь из основного списка (возможно, как [[:Категория:Страницы с оригинальным материалом RPGverse]]), а интерфейс для категорий добавить через тему или через JS.
| |
− |
| |
− | Через тему правильнее, через JS легче. JS выглядел бы как-то так (на всякий случай на ES5, у нас вроде ES5 используется?):
| |
− |
| |
− | <pre>
| |
− | // Этот код нужно запускать после того, как страница загрузится
| |
− | // (напр., через document.addEventListener('DOMContentLoaded, ...))
| |
− | (function () {
| |
− | var LANGUAGE_CATEGORY_NAME_REGEXP = /^Ролевые (материалы|системы) (на .*языке.*|без английской версии)$/;
| |
− | var CATEGORY_NAMESPACE_ID = 14;
| |
− | var PARENT_DIV_ID = 'rpgverse-lang-catlinks';
| |
− | var GENERALIZING_CAT_NAME = 'Ролевые материалы по языку';
| |
− | var GENERALIZING_CAT_TITLE = 'По языку';
| |
− | var COLON_TEXT = ': ';
| |
− | var CATLINKS_ELEMENT_ID = 'catlinks'
| |
− | var NORMAL_CAT_LINKS_PARENT_ID = 'mw-normal-catlinks'
| |
− |
| |
− | /**
| |
− | * Превращает полное имя категории («Ролевые материалы на китайском языке»)
| |
− | * в краткое («на китайском»).
| |
− | *
| |
− | * Теряет различие между ссылками на категории («Ролевые материалы на X языке»
| |
− | * и «Ролевые системы на X языке»).
| |
− | *
| |
− | * @param {string} fullName Полное имя (без префикса пространства имён)
| |
− | * @returns {string} Краткое имя
| |
− | */
| |
− | function makeShortCategoryText(fullName) {
| |
− | return fullName.replace(/^Ролевые (материалы|системы) /, '').replace(/ языке$/, '')
| |
− | }
| |
− |
| |
− | /**
| |
− | * Получает список категорий текущей страницы как массив объектов со
| |
− | * свойствами name (имя категории без пространства имён)
| |
− | * и shortName (текст вроде «на N языке»)
| |
− | *
| |
− | * @returns {{name: string; shortName: text}[]}
| |
− | */
| |
− | function getLanguageCategories() {
| |
− | var materialsByLanguage = mw.config.get( 'wgCategories' )
| |
− | .filter(function (catName) {
| |
− | return catName.match(LANGUAGE_CATEGORY_NAME_REGEXP)
| |
− | });
| |
− | var results = [];
| |
− | materialsByLanguage.forEach(function (name) {
| |
− | results.push({
| |
− | name: name,
| |
− | shortName: makeShortCategoryText(name)
| |
− | });
| |
− | })
| |
− | return results;
| |
− | }
| |
− |
| |
− | /**
| |
− | * @param {string} name Название категории (без префикса пространства имён)
| |
− | * @param {string} title Текст ссылки
| |
− | * @return {HTMLElement} Элемент <a> со ссылкой на категорию
| |
− | */
| |
− | function makeCategoryLink(name, title) {
| |
− | var articlePath = mw.config.get('wgArticlePath');
| |
− | var categoryNamespace = mw.config.get('wgFormattedNamespaces')[CATEGORY_NAMESPACE_ID];
| |
− | var qualifiedName = categoryNamespace + ':' + name;
| |
− |
| |
− | var className = '';
| |
− | if (document.querySelector) {
| |
− | // TODO: этот код не будет работать на старых браузерах, там все ссылки будут синие
| |
− | // Возможно, стоит либо переписать всё на ES6 (если не нужна), либо на jQuery (если нужна)
| |
− | var existingLink = document.querySelector('[title*="' + qualifiedName.replace(/["\\]/g, '\\$&') + '"]');
| |
− | if (existingLink && existingLink.title.indexOf(qualifiedName) === 0) {
| |
− | className = existingLink.className;
| |
− | }
| |
− | }
| |
− |
| |
− | var element = document.createElement('a');
| |
− | element.href = articlePath.replace('$1', qualifiedName);
| |
− | element.title = qualifiedName;
| |
− | element.innerText = title;
| |
− | element.className = className;
| |
− | return element;
| |
− | }
| |
− |
| |
− | /**
| |
− | *
| |
− | * @param {{name: string; shortName: text}[]} categories
| |
− | * @returns {HTMLElement} Элемент <ul>
| |
− | */
| |
− | function makeLanguageCategoriesList(categories) {
| |
− | var listElement = document.createElement('ul');
| |
− |
| |
− | categories.forEach(function (category) {
| |
− | var itemElement = document.createElement('li');
| |
− | itemElement.appendChild(makeCategoryLink(category.name, category.shortName));
| |
− | listElement.appendChild(itemElement);
| |
− | });
| |
− | return listElement;
| |
− | }
| |
− |
| |
− | /**
| |
− | * @param {{name: string; shortName: text}[]} categories
| |
− | * @returns {HTMLElement} Элемент <div>
| |
− | */
| |
− | function makeLanguageCategoriesDiv(categories) {
| |
− | var parentElement = document.createElement('div');
| |
− | parentElement.id = PARENT_DIV_ID;
| |
− |
| |
− | parentElement.appendChild(makeCategoryLink(GENERALIZING_CAT_NAME, GENERALIZING_CAT_TITLE));
| |
− | parentElement.appendChild(document.createTextNode(COLON_TEXT));
| |
− | parentElement.appendChild(makeLanguageCategoriesList(categories));
| |
− | return parentElement;
| |
− | }
| |
− |
| |
− | /**
| |
− | * Скрывает языковые категории из основного списка.
| |
− | *
| |
− | * TODO: может, лучше скрыть категории через встроенный механизм MediaWiki?
| |
− | *
| |
− | * @param {{name: string; shortName: text}[]} categories
| |
− | */
| |
− | function hideLanguageCategoriesFromNormalCatLinks(categories) {
| |
− | var categoryNamespace = mw.config.get('wgFormattedNamespaces')[CATEGORY_NAMESPACE_ID];
| |
− | var normalCatLinksParent = document.getElementById(NORMAL_CAT_LINKS_PARENT_ID);
| |
− |
| |
− | // TODO: этот код не будет работать на старых браузерах, нам нужна их поддержка?
| |
− | // Возможно, стоит либо переписать всё на ES6 (если не нужна), либо на jQuery (если нужна)
| |
− | if (!normalCatLinksParent.querySelector) {
| |
− | // degrade gracefully на старых браузерах (кто-то ими ещё пользуется? там полинтернета поломано)
| |
− | return
| |
− | }
| |
− |
| |
− | categories.forEach(function (category) {
| |
− | var qualifiedName = categoryNamespace + ':' + category.name;
| |
− | var existingLink = normalCatLinksParent.querySelector('[title*="' + qualifiedName.replace(/["\\]/g, '\\$&') + '"]');
| |
− | if (existingLink && existingLink.title.indexOf(qualifiedName) === 0) {
| |
− | existingLink.style.display = 'none';
| |
− | }
| |
− | });
| |
− | }
| |
− |
| |
− | /**
| |
− | * Размещает список категорий по языку на странице.
| |
− | *
| |
− | * @param {{name: string; shortName: text}[]} categories
| |
− | */
| |
− | function placeLinksByLanguageOnPage(categories) {
| |
− | var catlinksElement = document.getElementById(CATLINKS_ELEMENT_ID);
| |
− | if (!catlinksElement) {
| |
− | console.error('Cannot find element with ID ' + CATLINKS_ELEMENT_ID);
| |
− | return
| |
− | }
| |
− |
| |
− | if (categories.length < 1) {
| |
− | return
| |
− | }
| |
− | catlinksElement.appendChild(makeLanguageCategoriesDiv(categories))
| |
− | }
| |
− |
| |
− | var parentElement = document.getElementById(PARENT_DIV_ID)
| |
− | if (!parentElement) {
| |
− | var categories = getLanguageCategories()
| |
− | placeLinksByLanguageOnPage(categories);
| |
− | hideLanguageCategoriesFromNormalCatLinks(categories)
| |
− | }
| |
− | })()
| |
− | </pre>
| |
− |
| |
− | [[Участник:Demetrius|Demetrius]] ([[Обсуждение участника:Demetrius|обсуждение]]) 12:28, 10 апреля 2024 (MSK)
| |
− |
| |
− | Оформил также как userscript для GreaseMonkey (там нельзя использовать mw, поэтому заменил категории на константы и сделал пару хаков): [https://paste.ee/p/kEX0l] — посмотрю, нормально ли смотрится. [[Участник:Demetrius|Demetrius]] ([[Обсуждение участника:Demetrius|обсуждение]]) 12:42, 10 апреля 2024 (MSK)
| |
− |
| |
− | '''Добавлено:''' мне пришло в голову, что это можно решить проще: скрыть категории через <code><nowiki>__HIDDENCAT__</nowiki></code> и сделать шаблон типа <code><nowiki>{{по языку|анг|рус|фра}}</nowiki></code>. Но тогда этот шаблон надо будет добавлять вюсду, что может усложнить импорт с Викии (если мы решим его заново запустить); впрочем, на Викии только статьи про русский, можно русский не скрывать, а остальное скрыть. Буду раз комментариям. Но пока что мне такой вариант кажется более простым — думаю, он лучше, чем JS. [[Участник:Demetrius|Demetrius]] ([[Обсуждение участника:Demetrius|обсуждение]]) 13:17, 10 апреля 2024 (MSK)
| |
− |
| |
− | == Проблема с атрибуцией импортированных правок ==
| |
− |
| |
− | В Викии есть особый механизм импорта из Википедии (и других вики?), при котором сохраняется история оттуда. Пример: [[Hunter: The Vigil]] — [http://wiki.rpgverse.ru/w/index.php?title=Hunter:_The_Vigil&action=history история у нас], [https://rpg.fandom.com/ru/wiki/Hunter:_The_Vigil?action=history история у них]. Это проблема, которую нужно как-то решать.
| |
− |
| |
− | Либо нужно написать похожий плагин и импортировать такие данные, либо просто вставлять эти данные куда-то ещё (вероятно, в большинстве случаев подойдёт [[Шаблон:Википедия]]; возможно для текущих статей это мог бы сделать я сам ботом, но вот для новых это надо делать автоматически). [[Участник:Demetrius|Demetrius]] ([[Обсуждение участника:Demetrius|обсуждение]]) 01:59, 23 апреля 2024 (MSK)
| |