Модуль:Editnotice

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

Модуль, реализующий показ уведомлений о биографиях современников и опасности редактирования определённых статей. Также используется для уведомлений при редактировании некоторых страниц обсуждения статей.

Функции

[править код]
  • p._main — для возможности тестирования изменений принимает параметр с названием страницы.
  • p.main — используется в коде MediaWiki:Editnotice-0, MediaWiki:Editnotice-1 и MediaWiki:Editnotice-10. Эдитнотис шаблона отображается также и в его документации.

Скрытие

[править код]

Зарегистрированные участники могут скрыть уведомления, добавленные модулем. Для этого добавьте в свой common.css:

  • чтобы скрыть о современниках:
    /* Отключение предупреждения [[Шаблон:Editnotice/Ныне живущие]] */
    #editnotice-blp {
        display: none
    }
    
  • об РФ/Беларуси:
    /* Отключение предупреждения [[Шаблон:Editnotice/RU-BY]] */
    #editnotice-ru-by {
        display: none
    }
    
  • о страницах значений:
    /* Отключение предупреждения [[Шаблон:Editnotice/Страницы значений]] */
    #editnotice-disambig {
        display: none
    }
    
  • о нейросетях и чат-ботах:
    /* Отключение предупреждения [[Шаблон:Editnotice/AI]] */
    #editnotice-ai {
        display: none
    }
    
  • о шаблонах с никами последнего редактора:
    /* Отключение предупреждения [[Шаблон:Editnotice/Ник последнего редактора]] */
    #editnotice-request-template {
        display: none
    }
    
  • о шаблонах, в которых нельзя подставлять автодату:
    /* Отключение предупреждения [[Шаблон:Editnotice/Автодата]] */
    #editnotice-subst-time {
        display: none
    }
    

Известные проблемы

[править код]

Эдитнотисы дублируются, если статья находится одновременно в обеих категориях: Биографии современников и Персоналии, умершие менее года назад. Нужно оставить в статье только вторую.

См. также

[править код]
  • {{Editnotice}} — основа для модуля

--
-- Реализует показ эдитнотисов на основе категорий
-- Ранее было реализовано через [[MediaWiki:Gadget-blpEditNotice.js]]
--
require( 'strict' )

local p = {}

local noticeList = {
	-- [[Категория:Тептар:Статьи с предупреждением об осторожности при редактировании]] / [[Шаблон:Editnotice/RU-BY]]
	['Тептар:Статьи с предупреждением об осторожности при редактировании'] = {
		id = 'ru-by',
		template = 'Шаблон:Editnotice/RU-BY',
	},
	-- [[Категория:Тептар:Биографии современников]] / [[Шаблон:Editnotice/Ныне живущие]]
	['Тептар:Биографии современников'] = {
		id = 'blp',
		template = 'Шаблон:Editnotice/Ныне живущие',
	},
	-- [[Категория:Персоналии, умершие менее года назад]] / [[Шаблон:Editnotice/Недавно умершие]]
	['Персоналии, умершие менее года назад'] = {
		id = 'blp',
		template = 'Шаблон:Editnotice/Недавно умершие',
	},
	-- [[Категория:Страницы значений по алфавиту]] / [[Шаблон:Editnotice/Страницы значений]]
	['Страницы значений по алфавиту'] = {
		id = 'disambig',
		template = 'Шаблон:Editnotice/Страницы значений',
	},
	-- [[Категория:Тептар:Страницы обсуждения с предупреждением о нейросетях и LLM]] / [[Шаблон:Editnotice/AI]]
	['Тептар:Страницы обсуждения с предупреждением о нейросетях и LLM'] = {
		id = 'ai',
		template = 'Шаблон:Editnotice/AI',
	},
	-- [[Категория:Шаблоны:Отображающие ник последнего редактора]] / [[Шаблон:Editnotice/Ник последнего редактора]]
	['Шаблоны:Отображающие ник последнего редактора'] = {
		id = 'request-template',
		template = 'Шаблон:Editnotice/Ник последнего редактора',
	},
	-- [[Категория:Шаблоны:Оформление источников]] / [[Шаблон:Editnotice/Автодата]]
	['Шаблоны:Оформление источников'] = {
		id = 'subst-time',
		template = 'Шаблон:Editnotice/Автодата',
	}
}

local function isEmpty( str )
	return str == nil or str == ''
end

function p._main( page, frame )
	local mwTitle = mw.title.getCurrentTitle()
	if not isEmpty( page ) then
		mwTitle = mw.title.new( page )
	end

	if not mwTitle then
    	return ''
	end

	local ns = mwTitle.namespace
	-- Разрешение пространства статей (0), их обсуждений (1) и пространства шаблонов (10)
	if ns ~= 0 and ns ~= 1 and ns ~= 10 then
    	return ''
	end

	-- Проверка на существование страницы нужна только для статей (ns=0),
	-- так как обсуждения полезно ловить, даже если они новые с категориями.
	if ns == 0 and (mwTitle.id == 0 or not mwTitle.exists) then
    	return ''
	end

	if frame == nil then
		frame = mw.getCurrentFrame()
	end

	-- Эдитнотис шаблона работает и в его документации
	local targetTitle = mwTitle
	if targetTitle.isSubpage and ( targetTitle.subpageText == 'doc' ) then
		targetTitle = targetTitle.basePageTitle
	end

	local result = mw.html.create( 'div' )
	local catCount = 0

	for _, category in ipairs( targetTitle.categories ) do
		local noticeInfo = noticeList[ category ]
		if noticeInfo ~= nil and not isEmpty( noticeInfo.id ) and not isEmpty( noticeInfo.template ) then
			local tmpl = frame:expandTemplate{
				title = noticeInfo.template,
				args = {}
			}
			result:tag( 'div' )
				:attr( 'id', 'editnotice-' .. noticeInfo.id )
				:wikitext( tmpl )
			catCount = catCount + 1
		end
	end

	if catCount == 0 then
		return ''
	end

	return tostring( result )
end

function p.main( frame )
	local page = frame.args[ 'page' ]

	return p._main( page, frame )
end

return p