跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
模块:Pagetype
”︁
模块
讨论
English
阅读
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
*>MSGJ
2024年5月21日 (二) 17:35的版本
(fix for files and interface messages which do exist but are not stored locally)
(差异) ←上一版本 |
最后版本
(
差异
) |
下一版本→
(
差异
)
警告:您正在编辑该页面的旧版本。
如果您发布该更改,该版本后的所有更改都会丢失。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
-------------------------------------------------------------------------------- -- -- -- This meta-module which automatically detects namespaces, and allows -- -- for a great deal of customisation. It can easily be ported to other -- -- wikis by changing the values in the [[Module:Pagetype/config]]. -- -- -- -------------------------------------------------------------------------------- -- Load config. local cfg = mw.loadData('Module:Pagetype/config') -- Load required modules. local yesno = require('Module:Yesno') local p = {} -- Look up a namespace argument in the args table. local function lookUpNamespaceArg(args, key) local arg = args[key] -- Convert "yes", "1" etc. to true, "no", "0" etc. to false, and leave -- other values the same. return yesno(arg, arg) end -- Append multiple values to an array local function appendMultiple(target, source) for _, value in ipairs(source) do table.insert(target, value) end end -- 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 {} local keys = {} if nsInfo.name ~= '' then table.insert(keys, nsInfo.name) end if nsInfo.canonicalName ~= nsInfo.name and nsInfo.canonicalName ~= '' then table.insert(keys, nsInfo.canonicalName) end appendMultiple(keys, nsInfo.aliases) appendMultiple(keys, customAliases) return keys end -- 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)) do local arg = lookUpNamespaceArg(args, mw.ustring.lower(key)) if arg ~= nil then return arg end end return nil end -- Look up a page type specific to the title's namespace local function getExplicitPageType(title) if title.isTalkPage then return cfg.talkDefault else return cfg.pagetypes[title.namespace] end end -- 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 return other else return cfg.otherDefault end end local function detectRedirects(title, args) local redirect = lookUpNamespaceArg(args, cfg.redirect) if redirect == false then -- Don't detect redirects if they have been specifically disallowed. return nil end -- Allow custom values for redirects. if not title.isRedirect then return nil elseif type(redirect) == 'string' then return redirect else return cfg.redirectDefault end end local function capitalize(pageType) local first = mw.ustring.sub(pageType, 1, 1) local rest = mw.ustring.sub(pageType, 2) return mw.ustring.upper(first) .. rest end local function pluralize(pageType) if cfg.irregularPlurals[pageType] then return cfg.irregularPlurals[pageType] else return pageType .. cfg.plural -- often 's' end end local function parseContent(title, args, optionsList) if title.namespace==828 and title.subpageText~='doc' -- don't detect modules or not title.exists -- can't check unless page exists then return nil end local content = title:getContent() if content == nil then return nil end local templates -- lazily evaluated for _, options in next, optionsList do local list, parameter, default, articleOnly = unpack(options, 1, 4) if not articleOnly or title.namespace==0 then -- only check for templates if we should... local out = lookUpNamespaceArg(args, parameter) if type(out) == "string" or (out ~= false and default) then -- ...and if we actually have anything to say about them if not templates then templates = {} -- do our delayed evaluation now that we are required to content = require('Module:Wikitext Parsing').PrepareText(content) -- disregard templates which do not have any affect for template in string.gmatch(content, "{{%s*([^|}]-)%s*[|}]") do templates[#templates+1] = capitalize(template) end end local wantedTemplates = mw.loadData('Module:Pagetype/' .. list) local templateFound = false for _, template in next, templates do if wantedTemplates[template] then templateFound = true break end end if templateFound then if type(out)=='string' then return out elseif out ~= false and default then return default end end end end end end -- Find pages which do not exist local function nonExistent(title, args) local arg = lookUpNamespaceArg(args, cfg.ne) 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 cfg.naDefault 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 cfg.naAliases[class] then 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 return namespaceArg else return nil end 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 isInDefaultActiveNamespace = false local defaultNamespacesKey = args[cfg.defaultns] if defaultNamespacesKey == cfg.defaultnsAll then isInDefaultActiveNamespace = true else local defaultNamespaces 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 function p._main(args) 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 pageType = capitalize(pageType) end return pageType end function p.main(frame) local args = require('Module:Arguments').getArgs(frame) return p._main(args) end return p
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模块:Pagetype/doc
(
编辑
)