Module:Pageinfo

--[[ Gets information about a page, e.g. if it has a category or list of cats in page Syntax:

Notes: ]]--
 * This is expensive ONLY if the parameter refers to another page.
 * If the parameter is ommited it will assume current page.

local p = {} local getArgs = require("Dev: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