Content deleted Content added
performance improvements and bug fix by User:Aidan9382 |
m fix for files and interface messages which do exist but are not stored locally |
||
(3 intermediate revisions by the same user not shown) | |||
Line 6:
-- --
--------------------------------------------------------------------------------
-- Load config.
local cfg = mw.loadData('Module:Pagetype/config')
-- Load required modules.
local yesno = require('Module:Yesno')
local p = {}
Line 31 ⟶ 29:
-- Get argument keys for a title's namespace
local function getNamespaceArgKeys(title
local nsInfo = mw.site.namespaces[title.namespace]
local customAliases = cfg.customNamespaceAliases[title.namespace] or {}
Line 47 ⟶ 45:
-- Get the argument for a title's namespace, if it was specified in the args table.
local function getNamespaceArg(title, args
if title.isTalkPage then
return lookUpNamespaceArg(args, cfg.talk)
end
for _, key in ipairs(getNamespaceArgKeys(title
local arg = lookUpNamespaceArg(args, mw.ustring.lower(key))
if arg ~= nil then
Line 61 ⟶ 59:
-- Look up a page type specific to the title's namespace
local function getExplicitPageType(title
if title.isTalkPage then
return cfg.talkDefault
Line 70 ⟶ 68:
-- Get a default page type that is not specific to the title's namespace
local function getDefaultPageType(args
local other = lookUpNamespaceArg(args, cfg.other)
if type(other) == 'string' then
Line 102 ⟶ 100:
end
local function pluralize(pageType
if cfg.irregularPlurals[pageType] then
return cfg.irregularPlurals[pageType]
Line 153 ⟶ 151:
end
-- Find pages which do not exist
local function
local arg = lookUpNamespaceArg(args,
if arg == false then
return nil
end
local exists = false
if title.exists then -- not an article if it does not exist
exists = true
elseif title.namespace==8 and mw.message.new(title.text):exists() then
exists = true
elseif title.namespace==6 and title.fileExists then
exists = true
end
if not exists then
if type(arg) == 'string' then
return arg
else
return
end
end
end
-- Get page types for mainspaces pages with an explicit class specified
local function getMainNamespaceClassPageType(title, args
local class = args[1]
if type(class) == 'string' then -- Put in lower case so e.g. "na" and "NA" will both match
class = mw.ustring.lower(class)
end
local arg = lookUpNamespaceArg(args, cfg.na)
if arg == false then -- don't check for this class if it is specifically disallowed
return nil
end
if type(arg) == 'string' then
return arg
else
return cfg.naDefault
end
else
return nil
end
end
-- Get page type specified by an explicit namespace argument.
local function getNamespaceArgPageType(title, args
local namespaceArg = getNamespaceArg(title, args
if namespaceArg == true then
-- Namespace has been explicitly enabled, so return the default for
-- this namespace
return getExplicitPageType(title
elseif namespaceArg == false then
-- Namespace has been explicitly disabled
return getDefaultPageType(args
elseif namespaceArg then
-- This namespaces uses custom text
Line 207 ⟶ 213:
end
-- Get page type not specified or detected by other means
local function getOtherPageType(title, args)
-- Whether the title is in the set of default active namespaces which are looked up in cfg.pagetypes.
local
local defaultNamespacesKey = args[cfg.defaultns]
if defaultNamespacesKey == cfg.defaultnsAll then
isInDefaultActiveNamespace = true
else
if defaultNamespacesKey == cfg.defaultnsExtended then
defaultNamespaces = cfg.extendedNamespaces
elseif defaultNamespacesKey == cfg.defaultnsNone then
defaultNamespaces = {}
else
defaultNamespaces = cfg.defaultNamespaces
end
isInDefaultActiveNamespace = defaultNamespaces[title.namespace]
end
if isInDefaultActiveNamespace then
return getExplicitPageType(title)
else
return getDefaultPageType(args
end
end
local title
if args.page then
title = mw.title.new(args.page)
else
title = mw.title.getCurrentTitle()
end
if title and not yesno(args.talk, true) and args[cfg.defaultns] ~= cfg.defaultnsAll then
title = title.subjectPageTitle
end
local pageType = detectRedirects(title, args)
or nonExistent(title, args)
or parseContent(title, args, {
{'softredirect', cfg.softRedirect, cfg.softRedirectDefault},
{'setindex', cfg.sia, cfg.siaDefault, true},
{'disambiguation', cfg.dab, cfg.dabDefault, true},
{'rfd', cfg.rfd, cfg.rfdDefault},
})
or (title.namespace == 0 and getMainNamespaceClassPageType(title, args))
or getNamespaceArgPageType(title, args)
or getOtherPageType(title, args)
if yesno(args.plural, false) then
pageType = pluralize(pageType
end
if yesno(args.caps, false) then
Line 284 ⟶ 270:
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame)
return p._main(args)
end
|