Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
Module:RecursiveSelectiveList
Module
Discussion
English
Read
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit source
View history
Move
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local p = {} -- Helper function to format numbers with commas local function formatNumber(num) if not num then return "0" end local formatted = tostring(num) local k while true do formatted, k = formatted:gsub("^(-?%d+)(%d%d%d)", '%1,%2') if k == 0 then break end end return formatted end -- Helper function to format dates local function formatDate(timestamp) -- Convert ISO 8601 to a more readable format return mw.language.formatDate(timestamp, '%Y-%m-%d %H:%M:%S') end -- Function to retrieve category statistics function p.getCategoryStats(frame) local categoryName = frame.args.categoryName -- Pass the category name as an argument if not categoryName or categoryName == "" then return "'''Error:''' No category name provided." end local stats = mw.site.stats.pagesInCategory(categoryName, "*") if not stats then return "'''Error:''' Unable to retrieve statistics for the category." end -- Calculate percentages local total = stats.all local pagesPercent = total > 0 and string.format("%.2f%%", (stats.pages / total) * 100) or "0%" local subcatsPercent = total > 0 and string.format("%.2f%%", (stats.subcats / total) * 100) or "0%" local filesPercent = total > 0 and string.format("%.2f%%", (stats.files / total) * 100) or "0%" -- Create a link to the category local categoryLink = "[[Category:" .. mw.text.encode(categoryName) .. "|" .. mw.text.encode(categoryName) .. "]]" -- Build the wikitext table for category stats local result = {} table.insert(result, '{| class="wikitable sortable" style="width:50%; margin:auto;"') table.insert(result, '! colspan="3" style="text-align:center; font-size:150%;" ' .. categoryLink) table.insert(result, '|-') table.insert(result, '! Statistic !! Count !! Percentage') table.insert(result, '|-') table.insert(result, '| Total items || ' .. formatNumber(stats.all) .. ' || 100%') table.insert(result, '|-') table.insert(result, '| Pages || ' .. formatNumber(stats.pages) .. ' || ' .. pagesPercent) table.insert(result, '|-') table.insert(result, '| Subcategories || ' .. formatNumber(stats.subcats) .. ' || ' .. subcatsPercent) table.insert(result, '|-') table.insert(result, '| Files || ' .. formatNumber(stats.files) .. ' || ' .. filesPercent) table.insert(result, '|}') return table.concat(result, "\n") end -- Function to list revision dates for pages in the category function p.listRevisionDates(frame) local categoryName = frame.args.categoryName -- Pass the category name as an argument if not categoryName or categoryName == "" then return "'''Error:''' No category name provided." end local stats = mw.site.stats.pagesInCategory(categoryName, "*") if not stats then return "'''Error:''' Unable to retrieve statistics for the category." end -- For demonstration purposes, we'll assume 'stats.pages' gives us the number of pages. -- However, to list individual pages and their revisions, we need to fetch them. -- Since 'mw.site.stats.pagesInCategory' provides counts, not individual titles, -- we need an alternative approach. Unfortunately, without 'getCategoryMembers', -- it's challenging to list individual pages. If your environment has another -- way to retrieve page titles, please let me know. Otherwise, we'll proceed -- by limiting the functionality to category statistics. -- Placeholder message indicating the limitation local result = {} table.insert(result, "<h2>Latest Revisions for Pages in [[" .. mw.text.encode(categoryName) .. "]]</h2>") table.insert(result, "'''Note:''' Listing individual page revisions requires access to page titles, which is not available using `mw.site.stats.pagesInCategory`. To enable this functionality, consider using `mw.site.getCategoryMembers` or another method that provides page titles.") return table.concat(result, "\n") end -- Function to get the latest revision date of a single page (optional) function p.getLatestEditDate(frame) local pageName = frame.args.pageName if not pageName or pageName == "" then return "'''Error:''' No page name provided." end local title = mw.title.new(pageName) if not title or not title.exists then return "'''Error:''' Invalid or non-existent page title." end local revision = title:getLatestRevision() if not revision then return "'''Error:''' Unable to retrieve the latest revision." end local timestamp = revision:getTimestamp() local formattedTime = formatDate(timestamp) local user = revision:getUser() return string.format("**Latest Edit Date for [[%s]]:** %s UTC by [[User:%s|%s]]", mw.text.encode(pageName), formattedTime, mw.text.encode(user), mw.text.encode(user) ) end -- Main function to orchestrate the output function p.main(frame) local categoryStats = p.getCategoryStats(frame) local revisionData = p.listRevisionDates(frame) local singlePageRevision = p.getLatestEditDate(frame) -- Example of single page revision -- You can control the inclusion of the single page revision by checking for 'pageName' -- If 'pageName' is not provided, you can skip this part local includeSinglePageRevision = frame.args.pageName and frame.args.pageName ~= "" -- Add a separator between sections local separator = "\n\n" -- Combine all parts local outputParts = {categoryStats, revisionData} if includeSinglePageRevision then table.insert(outputParts, separator .. singlePageRevision) end -- Combine with separators local output = table.concat(outputParts, separator) -- Optionally, add a timestamp of when the data was retrieved local timestamp = os.date("Retrieved on %Y-%m-%d at %H:%M:%S UTC") output = output .. '\n<div style="text-align:center; font-size:small; color:gray;">' .. timestamp .. '</div>' return output end return p
Summary:
Please note that all contributions to Ikwipedia are considered to be released under the Creative Commons Attribution-ShareAlike (see
Ikwipedia:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:RecursiveSelectiveList/doc
(
edit
)
Toggle limited content width