Module:Transclusion count
This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
Fetches usage data for highly-trandscluded templates. Uses bot-updated values from subpages of Module:Transclusion_count/data/ when available.
Usage
{{#invoke:Transclusion count|fetch|number of transclusions|use + notation|all-pages=|demo=}}
number of transclusions
: is a static number of times the template has been transcluded, to use when values cannot be read from the database. This value will be ignored if transclusion data is available for the current page.demo=Template_name
: will use the transclusion count for the template at Template:Template_name instead of detecting what template it is being used on. Capitalization must exactly match the value used in Special:PrefixIndex/Module:Transclusion_count/data/.
local p = {} function p.main(frame) -- Fetch from database local template = mw.ustring.gsub(mw.title.getCurrentTitle().text, "/doc$", "") if frame.args["demo"] and frame.args["demo"] ~= "" then template = mw.ustring.gsub(frame.args["demo"], "/doc$", "") end local index = mw.ustring.upper(mw.ustring.sub(template,1,1)) local data = mw.loadData('Module:Transclusion_count/data/' .. (mw.ustring.find(index, "%a") and index or "other")) -- If database value doesn't exist, use value passed to template arg1 = tonumber(data[mw.ustring.gsub(template, " ", "_")]) or tonumber(frame.args[1]) or nil -- Build output string local return_value = "" if arg1 == nil then if frame.args[1] == "risk" then return_value = "a very large number of" else return_value = "many" end else -- Use 2 sigfigs for smaller numbers and 3 for larger ones local sigfig = 2 if arg1 >= 100000 then sigfig = 3 end -- Prepare to round to appropriate number of sigfigs local f = math.floor(math.log10(arg1)) - sigfig + 1 -- Round and insert "apprxomimately" or "+" when appropriate if frame.args[2] == "yes" then -- Round down return_value = mw.getContentLanguage():formatNum(math.floor( (arg1 / 10^(f)) ) * (10^(f))) .. "+" else -- Round to nearest return_value = "approximately " .. mw.getContentLanguage():formatNum(math.floor( (arg1 / 10^(f)) + 0.5) * (10^(f))) end -- Insert percent of pages if frame.args["all-pages"] and frame.args["all-pages"] ~= "" then local percent = math.floor( ( (arg1/frame:callParserFunction('NUMBEROFPAGES', 'R') ) * 100) + 0.5) return_value = return_value .. " pages, which is ≈" .. percent .. "% of all" end end return return_value end return p