<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki-data.rcsi.science/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3APagetype</id>
	<title>Модуль:Pagetype - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-data.rcsi.science/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3APagetype"/>
	<link rel="alternate" type="text/html" href="https://wiki-data.rcsi.science/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Pagetype&amp;action=history"/>
	<updated>2026-04-03T19:22:25Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki-data.rcsi.science/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Pagetype&amp;diff=943&amp;oldid=prev</id>
		<title>Admin: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="https://wiki-data.rcsi.science/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Pagetype&amp;diff=943&amp;oldid=prev"/>
		<updated>2021-11-15T14:01:03Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия 14:01, 15 ноября 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki-data.rcsi.science/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Pagetype&amp;diff=942&amp;oldid=prev</id>
		<title>ru&gt;RexxS: add caps parameter per talk request</title>
		<link rel="alternate" type="text/html" href="https://wiki-data.rcsi.science/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Pagetype&amp;diff=942&amp;oldid=prev"/>
		<updated>2020-06-18T21:22:08Z</updated>

		<summary type="html">&lt;p&gt;add caps parameter per talk request&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--                                                                            --&lt;br /&gt;
--                                PAGETYPE                                    --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
--      This is a meta-module intended to replace {{pagetype}} and similar    --&lt;br /&gt;
--      templates. It automatically detects namespaces, and allows for a      --&lt;br /&gt;
--      great deal of customisation. It can easily be ported to other         --&lt;br /&gt;
--      wikis by changing the values in the [[Module:Pagetype/config]].       --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Load config.&lt;br /&gt;
local cfg = mw.loadData('Module:Pagetype/config')&lt;br /&gt;
&lt;br /&gt;
-- Load required modules.&lt;br /&gt;
local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
local yesno = require('Module:Yesno')&lt;br /&gt;
local nsDetectModule = require('Module:Namespace detect')&lt;br /&gt;
local nsDetect = nsDetectModule._main&lt;br /&gt;
local getParamMappings = nsDetectModule.getParamMappings&lt;br /&gt;
local getPageObject = nsDetectModule.getPageObject&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function shallowCopy(t)&lt;br /&gt;
	-- Makes a shallow copy of a table.&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		ret[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function checkPagetypeInput(namespace, val)&lt;br /&gt;
	-- Checks to see whether we need the default value for the given namespace,&lt;br /&gt;
	-- and if so gets it from the pagetypes table.&lt;br /&gt;
	-- The yesno function returns true/false for &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc., and returns&lt;br /&gt;
	-- val for other input.&lt;br /&gt;
	local ret = yesno(val, val)&lt;br /&gt;
	if ret and type(ret) ~= 'string' then&lt;br /&gt;
		ret = cfg.pagetypes[namespace]&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getPagetypeFromClass(class, param, aliasTable, default)&lt;br /&gt;
	-- Gets the pagetype from a class specified from the first positional&lt;br /&gt;
	-- parameter.&lt;br /&gt;
	param = yesno(param, param)&lt;br /&gt;
	if param ~= false then -- No check if specifically disallowed.&lt;br /&gt;
		for _, alias in ipairs(aliasTable) do&lt;br /&gt;
			if class == alias then&lt;br /&gt;
				if type(param) == 'string' then&lt;br /&gt;
					return param&lt;br /&gt;
				else&lt;br /&gt;
					return default&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getNsDetectValue(args)&lt;br /&gt;
	-- Builds the arguments to pass to [[Module:Namespace detect]] and returns&lt;br /&gt;
	-- the result.&lt;br /&gt;
&lt;br /&gt;
	-- Get the default values.&lt;br /&gt;
	local ndArgs = {}&lt;br /&gt;
	local defaultns = args[cfg.defaultns]&lt;br /&gt;
	if defaultns == cfg.defaultnsAll then&lt;br /&gt;
		ndArgs = shallowCopy(cfg.pagetypes)&lt;br /&gt;
	else&lt;br /&gt;
		local defaultnsArray&lt;br /&gt;
		if defaultns == cfg.defaultnsExtended then&lt;br /&gt;
			defaultnsArray = cfg.extendedNamespaces&lt;br /&gt;
		elseif defaultns == cfg.defaultnsNone then&lt;br /&gt;
			defaultnsArray = {}&lt;br /&gt;
		else&lt;br /&gt;
			defaultnsArray = cfg.defaultNamespaces&lt;br /&gt;
		end&lt;br /&gt;
		for _, namespace in ipairs(defaultnsArray) do&lt;br /&gt;
			ndArgs[namespace] = cfg.pagetypes[namespace]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Add custom values passed in from the arguments. These overwrite the&lt;br /&gt;
	-- defaults. The possible argument names are fetched from&lt;br /&gt;
	-- Module:Namespace detect automatically in case new namespaces are&lt;br /&gt;
	-- added. Although we accept namespace aliases as parameters, we only pass&lt;br /&gt;
	-- the local namespace name as a parameter to Module:Namespace detect.&lt;br /&gt;
	-- This means that the &amp;quot;image&amp;quot; parameter can overwrite defaults for the&lt;br /&gt;
	-- File: namespace, which wouldn't work if we passed the parameters through&lt;br /&gt;
	-- separately.&lt;br /&gt;
	--]]&lt;br /&gt;
	local mappings = getParamMappings()&lt;br /&gt;
	for ns, paramAliases in pairs(mappings) do&lt;br /&gt;
		-- Copy the aliases table, as # doesn't work with tables returned from&lt;br /&gt;
		-- mw.loadData.&lt;br /&gt;
		paramAliases = shallowCopy(paramAliases)&lt;br /&gt;
		local paramName = paramAliases[1]&lt;br /&gt;
		-- Iterate backwards along the array so that any values for the local&lt;br /&gt;
		-- namespace names overwrite those for namespace aliases.&lt;br /&gt;
		for i = #paramAliases, 1, -1 do&lt;br /&gt;
			local paramAlias = paramAliases[i]&lt;br /&gt;
			local ndArg = checkPagetypeInput(paramAlias, args[paramAlias])&lt;br /&gt;
			if ndArg == false then&lt;br /&gt;
				-- If any arguments are false, convert them to nil to protect&lt;br /&gt;
				-- against breakage by future changes to&lt;br /&gt;
				-- [[Module:Namespace detect]].&lt;br /&gt;
				ndArgs[paramName] = nil&lt;br /&gt;
			elseif ndArg then&lt;br /&gt;
				ndArgs[paramName] = ndArg&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Check for disambiguation-class and N/A-class pages in mainspace.&lt;br /&gt;
	if ndArgs.main then&lt;br /&gt;
		local class = args[1]&lt;br /&gt;
		if type(class) == 'string' then&lt;br /&gt;
			-- Put in lower case so e.g. &amp;quot;Dab&amp;quot; and &amp;quot;dab&amp;quot; will both match.&lt;br /&gt;
			class = mw.ustring.lower(class)&lt;br /&gt;
		end&lt;br /&gt;
		local dab = getPagetypeFromClass(&lt;br /&gt;
			class,&lt;br /&gt;
			args[cfg.dab],&lt;br /&gt;
			cfg.dabAliases,&lt;br /&gt;
			cfg.dabDefault&lt;br /&gt;
		)&lt;br /&gt;
		if dab then&lt;br /&gt;
			ndArgs.main = dab&lt;br /&gt;
		else&lt;br /&gt;
			local na = getPagetypeFromClass(&lt;br /&gt;
				class,&lt;br /&gt;
				args[cfg.na],&lt;br /&gt;
				cfg.naAliases,&lt;br /&gt;
				cfg.naDefault&lt;br /&gt;
			)&lt;br /&gt;
			if na then&lt;br /&gt;
				ndArgs.main = na&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- If there is no talk value specified, use the corresponding subject &lt;br /&gt;
	-- namespace for talk pages.&lt;br /&gt;
	if not ndArgs.talk then&lt;br /&gt;
		ndArgs.subjectns = true&lt;br /&gt;
	end&lt;br /&gt;
	-- Add the fallback value. This can also be customised, but it cannot be&lt;br /&gt;
	-- disabled.&lt;br /&gt;
	local other = args[cfg.other]&lt;br /&gt;
	-- We will ignore true/false/nil results from yesno here, but using it&lt;br /&gt;
	-- anyway for consistency.&lt;br /&gt;
	other = yesno(other, other)&lt;br /&gt;
	if type(other) == 'string' then&lt;br /&gt;
		ndArgs.other = other&lt;br /&gt;
	else&lt;br /&gt;
		ndArgs.other = cfg.otherDefault&lt;br /&gt;
	end&lt;br /&gt;
	-- Allow custom page values.&lt;br /&gt;
	ndArgs.page = args.page&lt;br /&gt;
	return nsDetect(ndArgs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function detectRedirects(args)&lt;br /&gt;
	local redirect = args[cfg.redirect]&lt;br /&gt;
	-- The yesno function returns true/false for &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc., and returns&lt;br /&gt;
	-- redirect for other input.&lt;br /&gt;
	redirect = yesno(redirect, redirect)&lt;br /&gt;
	if redirect == false then&lt;br /&gt;
		-- Detect redirects unless they have been explicitly disallowed with&lt;br /&gt;
		-- &amp;quot;redirect=no&amp;quot; or similar.&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local pageObject = getPageObject(args.page)&lt;br /&gt;
	-- If we are using subject namespaces elsewhere, do so here as well.&lt;br /&gt;
	if pageObject&lt;br /&gt;
		and not yesno(args.talk, true)&lt;br /&gt;
		and args[cfg.defaultns] ~= cfg.defaultnsAll&lt;br /&gt;
	then&lt;br /&gt;
		pageObject = getPageObject(&lt;br /&gt;
			pageObject.subjectNsText .. ':' .. pageObject.text&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	-- Allow custom values for redirects.&lt;br /&gt;
	if pageObject and pageObject.isRedirect then&lt;br /&gt;
		if type(redirect) == 'string' then&lt;br /&gt;
			return redirect&lt;br /&gt;
		else&lt;br /&gt;
			return cfg.redirectDefault&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local redirect = detectRedirects(args)&lt;br /&gt;
	local pagetype = &amp;quot;&amp;quot;&lt;br /&gt;
	if redirect then&lt;br /&gt;
		pagetype = redirect&lt;br /&gt;
	else&lt;br /&gt;
		pagetype = getNsDetectValue(args)&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(args.plural, false) then&lt;br /&gt;
		if cfg.irregularPlurals[pagetype] then&lt;br /&gt;
			pagetype = cfg.irregularPlurals[pagetype]&lt;br /&gt;
		else&lt;br /&gt;
			pagetype = pagetype .. cfg.plural -- often 's'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(args.caps, false) then&lt;br /&gt;
		pagetype = mw.ustring.upper(mw.ustring.sub(pagetype, 1, 1)) ..&lt;br /&gt;
			mw.ustring.sub(pagetype, 2)&lt;br /&gt;
	end&lt;br /&gt;
	return pagetype&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>ru&gt;RexxS</name></author>
	</entry>
</feed>