Module:Pageinfo
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Pageinfo/doc
--[[<pre> Gets information about a page, e.g. if it has a category or list of cats in page Syntax: {{#invoke:pageinfo|hascat|<categoryname>|true|false|<page=pagename>}} {{#invoke:pageinfo|hastemplate|<templatename>|true|false|<page=pagename>}} {{#invoke:pageinfo|getcategories|<pagename>}} Notes: * This is expensive ONLY if the {{{page}}} parameter refers to another page. * If the {{{page}}} parameter is ommited it will assume current page. ]]-- local p = {} local getArgs = require("Module:Arguments").getArgs function p.hascat(frame) local args = getArgs(frame) if args then local categName = args[1] or args["cat"] local trueResult = args[2] or args["true"] local falseResult = args[3] or args["false"] local page = args["page"] or tostring(mw.title.getCurrentTitle()) if hasCategory(page,categName) then return trueResult end return falseResult end end function p.getcategories(frame) local args = getArgs(frame) if args then local page = args[1] or args["page"] or tostring(mw.title.getCurrentTitle()) local outputCats,_ = getPageCategories(page,categName) return outputCats end end function p.hastemplate(frame) local args = getArgs(frame) if args then local templateName = args[1] or args["template"] local trueResult = args[2] or args["true"] local falseResult = args[3] or args["false"] local page = args["page"] or tostring(mw.title.getCurrentTitle()) if getTemplate(page,templateName) then return frame:preprocess(trueResult) end return frame:preprocess(falseResult) end end function hasCategory(page,categoryName) if page and categoryName then local lang =mw.language.new('en') local pageContent = mw.title.new(page):getContent() categoryName = lang:ucfirst(categoryName) if pageContent then local categories = pageContent:gmatch("%[%[[Cc]ategory:(.-)%]%]") local sub = string.sub for storedCategoryName in categories do storedCategoryName = lang:ucfirst(storedCategoryName) if sub(storedCategoryName,1,#categoryName)==categoryName then return true end end end end end function getTemplate(page,templateName) if page and templateName then local lang =mw.language.new('en') local pageContent = mw.title.new(page):getContent() page = lang:ucfirst(page) templateName = lang:ucfirst(templateName) if pageContent then local templates = pageContent:gmatch("%{%{(.-)%}%}") local sub = string.sub for storedTemplate in templates do storedTemplate = lang:ucfirst(storedTemplate) if sub(storedTemplate,1,#templateName)==templateName or sub(storedTemplate,#templateName-1)==templateName then return true end end end end end function getPageCategories(page) if not page then return end page = mw.language.new('en'):ucfirst(page) local pageContent = mw.title.new(page):getContent() if pageContent then local categories = pageContent:gmatch("%[%[[Cc]ategory:(.-)%]%]") local catTable = {} local outputCats ="" local gsub = string.gsub if categories then for categoryName in categories do categoryName =gsub(categoryName,"%|.*","") catTable[categoryName] =1 outputCats = outputCats .. categoryName .. " ; " end end return outputCats,catTable end end return p