模組: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