Module:Transclusion count: Difference between revisions
Jump to navigation
Jump to search
en>Ahecht (Split main into num and risk) |
en>Ahecht (make local) |
||
Line 10: | Line 10: | ||
-- If database value doesn't exist, use value passed to template | -- If database value doesn't exist, use value passed to template | ||
return_value = tonumber(data[mw.ustring.gsub(template, " ", "_")]) | local return_value = tonumber(data[mw.ustring.gsub(template, " ", "_")]) | ||
if return_value == nil then | if return_value == nil then | ||
Line 21: | Line 21: | ||
function p.num(frame) | function p.num(frame) | ||
count = _fetch(frame) | local count = _fetch(frame) | ||
-- Build output string | -- Build output string |
Revision as of 15:44, 16 September 2019
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 = {} local function _fetch(frame) 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 local return_value = tonumber(data[mw.ustring.gsub(template, " ", "_")]) if return_value == nil then local arg1=mw.ustring.match(frame.args[1], '[%d,]+') return_value = tonumber(frame:callParserFunction('formatnum', arg1, 'R')) end return return_value end function p.num(frame) local count = _fetch(frame) -- Build output string local return_value = "" if count == 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 count >= 100000 then sigfig = 3 end -- Prepare to round to appropriate number of sigfigs local f = math.floor(math.log10(count)) - sigfig + 1 -- Round and insert "apprxomimately" or "+" when appropriate if frame.args[2] == "yes" then -- Round down return_value = mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) ) * (10^(f))) .. "+" else -- Round to nearest return_value = "approximately " .. mw.getContentLanguage():formatNum(math.floor( (count / 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( ( (count/frame:callParserFunction('NUMBEROFPAGES', 'R') ) * 100) + 0.5) return_value = return_value .. " pages, which is ≈" .. percent .. "% of all" end end return return_value end function p.risk(frame) local return_value = "" if frame.args[1] == "risk" then return_value = "risk" else local count = _fetch(frame) if count and count >= 100000 then return_value = "risk" end end return return_value end return p