FANDOM


--[[<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("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.getCurrentFrame():preprocess(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

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.