模組:WP:MISSING
外觀
用於維基百科:傳統百科全書條目專題各項目的計數和完成度計算。
見{{MISSING/中國大百科全書}}中的用法。
- 參數
MISSING
- 對某百科各分頁面計數和完成度計算:
{{#invoke:WP:MISSING|MISSING|data=json文件|某百科的分页面|json中的初始值的key|json中的红链数的key}}
效果為:
初始值:818;0%完成
- 參數
bar
- 計算某百科分頁面完成度(只返回完成度)一般用於給頁面中的{{Progress bar}}提供參數
{{#invoke:WP:MISSING|bar|data=json文件|某百科的分页面|json中的初始值的key|json中的红链数的key}}
- 參數
total
對某百科的計數和完成度計算:
{{#invoke:WP:MISSING|total|data=json文件|json中的初始值的key|json中的红链数的key}}
- 參數
totalbar
- 計算某百科的完成度(只返回完成度)一般用於給頁面中的{{Progress bar}}提供參數
{{#invoke:WP:MISSING|bar|data=json文件|json中的初始值的key|json中的红链数的key}}
</noinclude>
local p = {}
function p.titleToJson(title)
-- Load mediawiki page and decodes it as json
local t = mw.title.new(title)
if not t.exists then
return nil
else
return mw.text.jsonDecode(t:getContent(), mw.text.JSON_TRY_FIXING)
end
end
function p.MISSING(frame)
data = p.titleToJson(frame.args.data);
args1 = frame.args[1];
init = data[args1][frame.args[2]];
if frame.args[2] then
inittext = string.format('初始值:%d', init);
end
if frame.args[3] then
redlinks = data[args1][frame.args[3]];
done = (init - redlinks) / init *100;
done= done-done%0.1;
donetext = ';'..done..'%完成';
end
if donetext then
text = inittext..donetext;
else
text = inittext;
end
return text
end
function p.bar(frame)
data = p.titleToJson(frame.args.data);
args1 = frame.args[1];
init = data[args1][frame.args[2]];
redlinks = data[args1][frame.args[3]];
done = (init - redlinks) / init *100;
done= done-done%0.1;
return done
end
function p.total(frame)
data = p.titleToJson(frame.args.data);
local redlinks = 0;
local inittotal =0;
for key, cont in pairs(data) do
redlinks = redlinks+ cont[frame.args[2]];
inittotal = inittotal+cont[frame.args[1]];
end
inittotaltext = string.format('初始值:%d', inittotal);
totaldone = (inittotal - redlinks) / inittotal *100;
totaldone= totaldone-totaldone%0.1;
totaldonetext = ';'..totaldone..'%完成';
return inittotaltext..totaldonetext
end
function p.totalbar(frame)
data = p.titleToJson(frame.args.data);
local redlinks = 0;
local inittotal =0;
for key, cont in pairs(data) do
redlinks = redlinks+ cont[frame.args[2]];
inittotal = inittotal+cont[frame.args[1]];
end
totaldone = (inittotal - redlinks) / inittotal *100;
totaldone= totaldone-totaldone%0.1;
return totaldone
end
return p