Editing Module:Transclusion count
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
function | local function _fetch(frame) | ||
local template = | local template = mw.ustring.gsub(mw.title.getCurrentTitle().text, "/doc$", "") | ||
if frame.args["demo"] and frame.args["demo"] ~= "" then | if frame.args["demo"] and frame.args["demo"] ~= "" then | ||
template = frame.args["demo"] | template = mw.ustring.gsub(frame.args["demo"], "/doc$", "") | ||
end | 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")) | |||
local return_value = tonumber(data[mw.ustring.gsub(template, " ", "_")]) | |||
-- If database value doesn't exist, use value passed to template | -- If database value doesn't exist, use value passed to template | ||
if return_value = | if return_value == nil then | ||
local arg1=mw.ustring.match(frame.args[1], '[%d,]+') | 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 | 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 | end | ||
return return_value | 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 | end | ||
return p | return p |