<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="rue">
	<id>https://wiki.kocky.cc/w/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.kocky.cc/w/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.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Pagetype&amp;action=history"/>
	<updated>2026-04-03T20:54:55Z</updated>
	<subtitle>Історія едітовань той сторінкы на вікі</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Pagetype&amp;diff=20&amp;oldid=prev</id>
		<title>Бетярь: Створена сторінка: -------------------------------------------------------------------------------- --                                                                            -- --                                PAGETYPE                                    -- --                                                                            -- --      This is a meta-module intended to replace {{pagetype}} and similar    -- --      templates. It automatically detects namespaces,...</title>
		<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Pagetype&amp;diff=20&amp;oldid=prev"/>
		<updated>2023-10-17T20:15:52Z</updated>

		<summary type="html">&lt;p&gt;Створена сторінка: -------------------------------------------------------------------------------- --                                                                            -- --                                PAGETYPE                                    -- --                                                                            -- --      This is a meta-module intended to replace {{pagetype}} and similar    -- --      templates. It automatically detects namespaces,...&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(&amp;#039;Module:Pagetype/config&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- Load required modules.&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
local mDisambiguation = require(&amp;#039;Module:Disambiguation&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Look up a namespace argument in the args table.&lt;br /&gt;
local function lookUpNamespaceArg(args, key)&lt;br /&gt;
	local arg = args[key]&lt;br /&gt;
	-- Convert &amp;quot;yes&amp;quot;, &amp;quot;1&amp;quot; etc. to true, &amp;quot;no&amp;quot;, &amp;quot;0&amp;quot; etc. to false, and leave&lt;br /&gt;
	-- other values the same.&lt;br /&gt;
	return yesno(arg, arg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Append multiple values to an array&lt;br /&gt;
local function appendMultiple(target, source)&lt;br /&gt;
	for _, value in ipairs(source) do&lt;br /&gt;
		table.insert(target, value)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get argument keys for a title&amp;#039;s namespace&lt;br /&gt;
local function getNamespaceArgKeys(title, cfg)&lt;br /&gt;
	local nsInfo = mw.site.namespaces[title.namespace]&lt;br /&gt;
	local customAliases = cfg.customNamespaceAliases[title.namespace] or {}&lt;br /&gt;
	local keys = {}&lt;br /&gt;
	if nsInfo.name ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		table.insert(keys, nsInfo.name)&lt;br /&gt;
	end&lt;br /&gt;
	if nsInfo.canonicalName ~= nsInfo.name and nsInfo.canonicalName ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		table.insert(keys, nsInfo.canonicalName)&lt;br /&gt;
	end&lt;br /&gt;
	appendMultiple(keys, nsInfo.aliases)&lt;br /&gt;
	appendMultiple(keys, customAliases)&lt;br /&gt;
	return keys&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the argument for a title&amp;#039;s namespace, if it was specified in the args&lt;br /&gt;
-- table.&lt;br /&gt;
local function getNamespaceArg(title, args, cfg)&lt;br /&gt;
	if title.isTalkPage then&lt;br /&gt;
		return lookUpNamespaceArg(args, cfg.talk)&lt;br /&gt;
	end&lt;br /&gt;
	for _, key in ipairs(getNamespaceArgKeys(title, cfg)) do&lt;br /&gt;
		local arg = lookUpNamespaceArg(args, mw.ustring.lower(key))&lt;br /&gt;
		if arg ~= nil then&lt;br /&gt;
			return arg&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Look up a page type specific to the title&amp;#039;s namespace&lt;br /&gt;
local function getExplicitPageType(title, cfg)&lt;br /&gt;
	if title.isTalkPage then&lt;br /&gt;
		return cfg.talkDefault&lt;br /&gt;
	else&lt;br /&gt;
		return cfg.pagetypes[title.namespace]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get a default page type that is not specific to the title&amp;#039;s namespace&lt;br /&gt;
local function getDefaultPageType(args, cfg)&lt;br /&gt;
	local other = lookUpNamespaceArg(args, cfg.other)&lt;br /&gt;
	if type(other) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		return other&lt;br /&gt;
	else&lt;br /&gt;
		return cfg.otherDefault&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function detectRedirects(title, args)&lt;br /&gt;
	local redirect = lookUpNamespaceArg(args, cfg.redirect)&lt;br /&gt;
	if redirect == false then&lt;br /&gt;
		-- Don&amp;#039;t detect redirects if they have been specifically disallowed.&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Allow custom values for redirects.&lt;br /&gt;
	if not title.isRedirect then&lt;br /&gt;
		return nil&lt;br /&gt;
	elseif type(redirect) == &amp;#039;string&amp;#039; 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;
&lt;br /&gt;
local function detectDisambiguationPages(title, args, cfg)&lt;br /&gt;
	if title.namespace ~= 0 then&lt;br /&gt;
		-- Only detect disambiguation pages in mainspace&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local dab = lookUpNamespaceArg(args, cfg.dab)&lt;br /&gt;
	if dab == false then&lt;br /&gt;
		-- Don&amp;#039;t detect disambiguation pages if explicitly disallowed&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not mDisambiguation.isDisambiguation(title:getContent()) then&lt;br /&gt;
		return nil&lt;br /&gt;
	elseif type(dab) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		return dab&lt;br /&gt;
	else&lt;br /&gt;
		return cfg.dabDefault&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Gets the pagetype from a class specified from the first positional&lt;br /&gt;
-- parameter.&lt;br /&gt;
local function getPageTypeFromClass(args, class, key, aliasTable, default)&lt;br /&gt;
	local arg = lookUpNamespaceArg(args, key)&lt;br /&gt;
	if arg == false then&lt;br /&gt;
		-- Don&amp;#039;t check for this class if it is specifically disallowed.&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if aliasTable[class] then&lt;br /&gt;
		if type(arg) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			return arg&lt;br /&gt;
		else&lt;br /&gt;
			return default&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get page types for mainspaces pages with an explicit class specified&lt;br /&gt;
local function getMainNamespaceClassPageType(title, args, cfg)&lt;br /&gt;
	if title.namespace ~= 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local class = args[1]&lt;br /&gt;
	if type(class) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		-- Put in lower case so e.g. &amp;quot;na&amp;quot; and &amp;quot;NA&amp;quot; will both match.&lt;br /&gt;
		class = mw.ustring.lower(class)&lt;br /&gt;
	end&lt;br /&gt;
	return getPageTypeFromClass(&lt;br /&gt;
		args,&lt;br /&gt;
		class,&lt;br /&gt;
		cfg.na,&lt;br /&gt;
		cfg.naAliases,&lt;br /&gt;
		cfg.naDefault&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get page type specified by an explicit namespace argument.&lt;br /&gt;
local function getNamespaceArgPageType(title, args, cfg)&lt;br /&gt;
	local namespaceArg = getNamespaceArg(title, args, cfg)&lt;br /&gt;
	if namespaceArg == true then&lt;br /&gt;
		-- Namespace has been explicitly enabled, so return the default for&lt;br /&gt;
		-- this namespace&lt;br /&gt;
		return getExplicitPageType(title, cfg)&lt;br /&gt;
	elseif namespaceArg == false then&lt;br /&gt;
		-- Namespace has been explicitly disabled&lt;br /&gt;
		return getDefaultPageType(args, cfg)&lt;br /&gt;
	elseif namespaceArg then&lt;br /&gt;
		-- This namespaces uses custom text&lt;br /&gt;
		return namespaceArg&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Whether the title is in the set of default active namespaces which are&lt;br /&gt;
-- looked up in cfg.pagetypes.&lt;br /&gt;
local function isInDefaultActiveNamespace(title, args, cfg)&lt;br /&gt;
	local defaultNamespacesKey = args[cfg.defaultns]&lt;br /&gt;
	if defaultNamespacesKey == cfg.defaultnsAll then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local defaultNamespaces&lt;br /&gt;
	if defaultNamespacesKey == cfg.defaultnsExtended then&lt;br /&gt;
		defaultNamespaces = cfg.extendedNamespaces&lt;br /&gt;
	elseif defaultNamespacesKey == cfg.defaultnsNone then&lt;br /&gt;
		defaultNamespaces = {}&lt;br /&gt;
	else&lt;br /&gt;
		defaultNamespaces = cfg.defaultNamespaces&lt;br /&gt;
	end&lt;br /&gt;
	return defaultNamespaces[title.namespace] or false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get page type not specified or detected by other means&lt;br /&gt;
local function getOtherPageType(title, args, cfg)&lt;br /&gt;
	if isInDefaultActiveNamespace(title, args, cfg) then&lt;br /&gt;
		return getExplicitPageType(title, cfg)&lt;br /&gt;
	else&lt;br /&gt;
		return getDefaultPageType(args, cfg)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getPageType(title, args, cfg)&lt;br /&gt;
	return (&lt;br /&gt;
		detectRedirects(title, args, cfg)&lt;br /&gt;
		or detectDisambiguationPages(title, args, cfg)&lt;br /&gt;
		or getMainNamespaceClassPageType(title, args, cfg)&lt;br /&gt;
		or getNamespaceArgPageType(title, args, cfg)&lt;br /&gt;
		or getOtherPageType(title, args, cfg)&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function shouldUseSubjectTitle(args, cfg)&lt;br /&gt;
	return not yesno(args.talk, true) and args[cfg.defaultns] ~= cfg.defaultnsAll&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the Scribunto title object to fetch the page type of&lt;br /&gt;
local function getTitle(args, cfg)&lt;br /&gt;
	local title&lt;br /&gt;
	if args.page then&lt;br /&gt;
		title = mw.title.new(args.page)&lt;br /&gt;
		if not title then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		title = mw.title.getCurrentTitle()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if shouldUseSubjectTitle(args, cfg) then&lt;br /&gt;
		return title.subjectPageTitle&lt;br /&gt;
	else&lt;br /&gt;
		return title&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function pluralize(pageType, cfg)&lt;br /&gt;
	if cfg.irregularPlurals[pageType] then&lt;br /&gt;
		return cfg.irregularPlurals[pageType]&lt;br /&gt;
	else&lt;br /&gt;
		return pageType .. cfg.plural -- often &amp;#039;s&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function capitalize(pageType)&lt;br /&gt;
	local first = mw.ustring.sub(pageType, 1, 1)&lt;br /&gt;
	local rest = mw.ustring.sub(pageType, 2)&lt;br /&gt;
	return mw.ustring.upper(first) .. rest&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local title = getTitle(args, cfg)&lt;br /&gt;
	local pageType = getPageType(title, args, cfg)&lt;br /&gt;
	if yesno(args.plural, false) then&lt;br /&gt;
		pageType = pluralize(pageType, cfg)&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(args.caps, false) then&lt;br /&gt;
		pageType = capitalize(pageType)&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>Бетярь</name></author>
	</entry>
</feed>