Module:Pagestats
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Pagestats/doc
--- Shows some stats about a page. -- -- @module pagestats -- @release unmaintained -- @author [[User:Dessamator|Dessamator]] -- @require Module:Utility -- <nowiki> local p = {} local u = require("Module:Utility") local 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 local 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 --- Pagestat string output. -- @function Pagestats:main -- @return {string} Wikitable with pagestats. -- @usage p.main(page='Fandom Developers Wiki',stats='templates') == '<table class="wikitable"><th>Stats</th><th>Count</th><tr></tr><td>templates</td><td>3</td></table>' 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 return p