יחידה:NUMBEROF – הבדלי גרסאות
אין תקציר עריכה |
אין תקציר עריכה |
||
| (4 גרסאות ביניים של 2 משתמשים אינן מוצגות) | |||
| שורה 1: | שורה 1: | ||
local p = {} | |||
local function trimArg(arg, i) | local function trimArg(arg, i) | ||
arg = mw.text.trim(arg or '') | |||
if arg == '' then | |||
if i then | |||
error('Parameter ' .. i .. ' is missing. See template documentation') | |||
end | |||
return nil | |||
end | |||
return mw.ustring.lower(arg) | |||
end | end | ||
local function getValue(stats, action, map) | local function getValue(stats, action, map) | ||
if action == 'depth' then | |||
local n = { 'articles', 'edits', 'pages' } | |||
if map then | |||
for i, v in ipairs(n) do | |||
n[i] = map[v] | |||
end | |||
end | |||
for i, v in ipairs(n) do | |||
n[i] = stats[v] or 0 | |||
end | |||
local articles, edits, pages = n[1], n[2], n[3] | |||
if pages == 0 or articles == 0 then | |||
return 0 | |||
end | |||
return math.floor((edits/pages) * ((pages - articles)/articles)^2) | |||
end | |||
if map then | |||
action = map[action] | |||
end | |||
return stats[action] | |||
end | end | ||
local function getIfLocal(site, action) | local function getIfLocal(site, action) | ||
local localSite = string.match(mw.site.server, 'https?://(.-)%.com$') | |||
or string.match(mw.site.server, 'https?://(.-)%.co%.il$') | |||
if site == localSite then | |||
if action == 'activeusers' then | |||
action = 'activeUsers' | |||
end | |||
return getValue(mw.site.stats, action) | |||
end | |||
end | end | ||
function p.main(frame) | |||
local args = frame.args or frame:getParent().args | |||
local action = trimArg(args[1], 1) -- articles, edits, etc. | |||
if not action then return -1 end | |||
if action:sub(1, 8) == 'numberof' then | |||
action = trimArg(action:sub(9), 1) | |||
end | |||
local site = trimArg(args[2], 2) or '' | |||
if site ~= 'total' and not site:find('.', 1, true) then | |||
site = site .. '.chabadpedia' | |||
end | |||
local wantComma = trimArg(args[3]) | |||
local result = getIfLocal(site, action) | |||
if not result then | |||
local data = mw.loadData('Module:NUMBEROF/data') | |||
local map = data.map | |||
data = data.data | |||
result = data[site] | |||
if result then | |||
result = getValue(result, action, map) | |||
end | |||
end | |||
if result then | |||
if wantComma then | |||
result = mw.getContentLanguage():formatNum(result) | |||
end | |||
return result | |||
end | |||
return -1 | |||
end | end | ||
function p.rank(frame) | |||
local args = frame:getParent().args | |||
local parm = trimArg(args[1], 1) | |||
local base = trimArg(args[2]) or 'chabadpedia' | |||
local wantComma = trimArg(args[3]) | |||
local data = mw.loadData('Module:NUMBEROF/' .. (base == 'chabadpedia' and 'rank' or 'other')) | |||
data = data[base] | |||
if data then | |||
local result | |||
parm = tonumber(parm) or parm | |||
if type(parm) == 'number' then | |||
result = data.rankByIndex[parm] | |||
else | |||
result = data.rankBySite[parm] | |||
if result and wantComma then | |||
result = mw.getContentLanguage():formatNum(result) | |||
end | |||
end | |||
if result then | |||
return result | |||
end | |||
end | |||
return -1 | |||
end | end | ||
return | return p | ||