FANDOM


--<pre> Description : Page stats
-- Shows some stats about a page
--Syntax : 
--{{#invoke:pagestats|page=pagename|stats=templates[,words,tables,references,links]}}
 
local p = {}
local u = require("Dev:Utility")
 
function p.main(frame)
    local args = u.getArgs(frame)  
    local tStats = {}
    local hTable = mw.html.create("table")
    local mwPage 
 
    hTable:addClass("wikitable")
    hTable:tag("th")
        :wikitext("Stats")
    hTable:tag("th")
        :wikitext("Count")
 
    if args then
        local sPage = args["page"] or tostring(mw.title.getCurrentTitle())
        local sStats  = args["stats"]
        tStats = mw.text.split(sStats,",")
 
        if sPage then 
            mwPage = mw.title.new(sPage)
            local contentPage = mwPage:getContent()
            tStats = getData(tStats,contentPage)
 
            for stats,count in pairs(tStats) do
                hTable:tag("tr")
                hTable:tag("td")
                    :wikitext(stats)
                hTable:tag("td")
                    :wikitext(count)
            end
        end
    end
    hTable:done()
 
    return hTable
end
 
function getData(tDataTypes,contentPage)
    local tStatRegex = {
        links = "%[.-%]",
        templates ="{{.-}}",
        tables ="{|.-\n|}",
        references = "%<ref[^e].-%s*%>",
        words = "(%a+)",
    }
    local statTable,tReports = {},{}
 
    for _, sMatchType in pairs(tDataTypes) do
        sMatchType = mw.text.trim(sMatchType or "")
        if tStatRegex[sMatchType] then
            statTable[sMatchType],tReports[sMatchType] = getMatches(contentPage,tStatRegex[sMatchType],sMatchType)
        end
    end
    return statTable,tReports
end
 
function getMatches(contentPage,sRegex,sMatchType)
    local tLinks = contentPage:gmatch(sRegex)
    local count =0
    local tReports ={}
 
    for matchvalue in tLinks do
        count = count +1
        if matchvalue and not tReports[matchvalue]  then
            tReports[matchvalue] = 0
        end
        tReports[matchvalue] = tReports[matchvalue]  +1 
    end
    return count , tReports
end
 
 
function p.test (frame)
    return frame:preprocess(mw.text.unstrip(frame.args[1]))
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.