模块:NoteTA

求闻百科,共笔求闻

本模块用于执行模板链接:{{NoteTA}}模板,请到模板页阅读具体用法。参见Help:字词转换处理

上述文档内容嵌入自Module:NoteTA/doc编辑 | 历史
编者可以在本模块的沙盒创建 | 镜像和测试样例创建页面进行实验。
请将模块自身所属的分类添加在文档中。本模块的子页面
local z = {}
local WikitextLC = require( 'Module:WikitextLC' )

function Tcode( args )
	if args.T == nil or args.T == '' then
		return ''
	end
	local div = mw.html.create( 'div' )
		:attr( 'class', 'noteTA-title' )
		:attr( 'data-noteta-code', args.T )
		:wikitext( WikitextLC.title( args.T ) )
	if args.dt ~= nil and args.dt ~= '' then
		div:attr( 'data-noteta-desc', args.dt )
	end
	return tostring( div )
end

function group( name, frame )
	if name == nil or name == '' then
		return ''
	end
	local moduleTitle = mw.title.makeTitle( 'Module', 'CGroup/' .. name )
	if moduleTitle and moduleTitle.exists then
		local data = mw.loadData( 'Module:CGroup/' .. name )
		local pieces = {}
		if data.content then
			for i, v in ipairs( data.content ) do
				if v.type == 'item' and v.rule then
					table.insert( pieces, '-{H|' .. v.rule .. '}-' )
				end
			end
			return tostring( mw.html.create( 'div' )
				:attr( 'data-noteta-group-source', 'module' )
				:attr( 'data-noteta-group', data.name or name )
				:wikitext( table.concat( pieces ) ) )
		end
	end
	local templateTitle = mw.title.makeTitle( 'Template', 'CGroup/' .. name )
	if templateTitle and templateTitle.exists then
		return frame:expandTemplate{ title = templateTitle }
	end
	return tostring( mw.html.create( 'div' )
			-- :attr( 'id', 'noteTA-group-' .. mw.uri.anchorEncode( name ) )
			:attr( 'data-noteta-group-source', 'none' )
			:attr( 'data-noteta-group', name ) )
end

function Gcode( args, frame )
	local code = {}
	for i = 1, 30 do
		table.insert( code, group( args['G' .. i], frame ) )
	end
	code = table.concat( code )
	if code ~= '' then
		code = tostring( mw.html.create( 'div' )
				:attr( 'class', 'noteTA-group' )
				:wikitext( code ) )
		if args.G31 ~= nil then
			code = code .. '[[Category:NoteTA模板参数使用数量超过限制的页面|G]]'
		end
	end
	return code
end

function local_( i, code, desc )
	if code == nil or code == '' then
		return ''
	end
	local div = mw.html.create( 'div' )
		-- :attr( 'id', 'noteTA-local-' .. i )
		:attr( 'data-noteta-code', code )
		:wikitext( WikitextLC.hidden( code ) )
	if desc ~= nil and desc ~= '' then
		div:attr( 'data-noteta-desc', desc )
	end
	return tostring( div )
end

function Lcode( args )
	local code = {}
	for i = 1, 30 do
		table.insert( code, local_( i, args[i], args['d' .. i] ) )
	end
	code = table.concat( code )
	if code ~= '' then
		code = tostring( mw.html.create( 'div' )
				:attr( 'class', 'noteTA-local' )
				:wikitext( code ) )
		if args[31] ~= nil then
			code = code .. '[[Category:NoteTA模板参数使用数量超过限制的页面|L]]'
		end
	end
	return code
end

function z.main( frame )
	local args
	if frame == mw.getCurrentFrame() then
		-- Being called from {{noteTA}}
		args = frame:getParent().args
	else
		-- Being called from another module
		args = frame
		frame = mw.getCurrentFrame()
	end
	local Tc = Tcode( args )
	local Gc = Gcode( args, frame )
	local Lc = Lcode( args )
	local code = Tc .. Gc .. Lc
	local topicon = ''
	
	if args.type ~= nil and args.T ~= nil then
		if args.type == 'downsize' then
			topicon = topicon .. '[[File:Conversion downsize.svg|24px|本页使用了标题手工转换,涉及上下标字符|link=]]'
		elseif args.type == 'lowercase' then
			topicon = topicon .. '[[File:Conversion lowercase.svg|24px|本页使用了标题手工转换,涉及首字符小写|link=]]'
		elseif args.type == 'italic' then
			topicon = topicon .. '[[File:Conversion italic.svg|24px|本页使用了标题手工转换,涉及斜体标题|link=]]'
		elseif args.type == 'displaytitle' then
			topicon = topicon .. '[[File:Conversion displaytitle.svg|24px|本页使用了标题手工转换|link=]]'
		end
	elseif args.type == 'rare' then
		topicon = topicon .. '[[File:Conversion rare.svg|24px|本页使用了全文手工转换,涉及全局僻字转换|link=]]'
	else
		topicon = topicon .. '-{zh:[[File:Conversion zh.svg|24px|本页使用了标题或全文手工转换,现处于不转换模式|link=]];zh-hans:[[File:Conversion zh-hans.svg|24px|本页使用了标题或全文手工转换,现处于简体转换模式|link=]];zh-cn:[[File:Conversion zh-hans.svg|24px|本页使用了标题或全文手工转换,现处于中国大陆简体模式|link=]];zh-my:[[File:Conversion zh-hans.svg|24px|本页使用了标题或全文手工转换,现处于马来西亚简体模式|link=]];zh-sg:[[File:Conversion zh-hans.svg|24px|本页使用了标题或全文手工转换,现处于新加坡简体模式|link=]];zh-hant:[[File:Conversion zh-hant.svg|24px|本页使用了标题或全文手工转换,现处于繁体转换模式|link=]];zh-hk:[[File:Conversion zh-hant.svg|24px|本页使用了标题或全文手工转换,现处于香港繁体模式|link=]];zh-mo:[[File:Conversion zh-hant.svg|24px|本页使用了标题或全文手工转换,现处于澳门繁体模式|link=]];zh-tw:[[File:Conversion zh-hant.svg|24px|本页使用了标题或全文手工转换,现处于台湾繁体模式|link=]];}-'
	end
	
	if code ~= '' then
		local hash = require( 'Module:Crc32lua' ).crc32( mw.dumpObject( args ) )
		code = frame:extensionTag{
			name = 'indicator',
			content = topicon,
			args = { name = string.format( 'noteTA-%x', hash ) },
		} .. tostring( mw.html.create( 'div' )
				:attr( 'id', string.format( 'noteTA-%x', hash ) )
				:attr( 'class', 'noteTA' )
				:wikitext( code ) )
		if mw.title.getCurrentTitle():inNamespace( 'Template' ) then
			code = code .. '[[Category:放置于模板的noteTA]]'
		end
		if args.type ~= nil and args.T ~= nil then
			if args.type == 'downsize' then
				code = code .. '[[Category:标题含有上下标的文章]]'
			elseif args.type == 'lowercase' then
				code = code .. '[[Category:小写标题]]'
			elseif args.type == 'italic' then
				code = code .. '[[Category:斜体标题]]'
			elseif args.type == 'displaytitle' then
				code = code .. '[[Category:调整标题显示的文章]]'
			end
		elseif args.type == nil and args.T ~= nil then
			code = code .. '[[Category:调整标题显示的文章]]'
		elseif args.type == 'rare' then
			code = code .. '[[Category:涉及全局僻字转换的文章]]'
		end
	end
	return code
end

return z