Редактирование: Энциклопедия:Портал сообщества

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

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 81: Строка 81:
 
Когда в Википедии удаляют статью, удаляется и её история. Но если мы сохраняем статью (например, [[Неттерсгеймский договор]]), то у нас таким образом материал без атрибуции. Потенциальное нарушение T_T (хотя, наверное, это как abandonware; если автор появится, мы с радостью его упомянем).
 
Когда в Википедии удаляют статью, удаляется и её история. Но если мы сохраняем статью (например, [[Неттерсгеймский договор]]), то у нас таким образом материал без атрибуции. Потенциальное нарушение T_T (хотя, наверное, это как abandonware; если автор появится, мы с радостью его упомянем).
  
Что с этим делать? Видимо, когда используешь материалы Википедии, надо дублировать список авторов на странице обсуждения? (Есть ли какой-то простой способ составить такой список?) Или это стоит делать только для статей с высокой вероятностью удаления? [[Участник:Demetrius|Demetrius]] ([[Обсуждение участника:Demetrius|обсуждение]]) 19:36, 25 февраля 2024 (MSK)
+
Что с этим делать? Видимо, когда используешь материалы Википедии, надо дублировать список авторство на странице обсуждения? (Есть ли какой-то простой способ составить такой список?) Или это стоит делать только для статей с высокой вероятностью удаления? [[Участник: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)
 

Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии Creative Commons Attribution Share Alike (см. Энциклопедия:Авторские права). Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого.
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!

Чтобы изменить эту страницу, пожалуйста, ответьте на приведённый ниже вопрос (подробнее):

Отменить | Справка по редактированию (в новом окне)

Шаблоны, используемые на этой странице: