FANDOM


-- <pre>
local p = {}
local alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0'
 
function p.main(frame)
	local args = frame:getParent().args
 
	local columns = tonumber(args.columns) or 4
	local header = args.header or ''
	local links = string.lower(args.links or '')
 
	local alphabeticalheaders = string.lower(args.alphaheader or '')
 
	if alphabeticalheaders == 'yes' then
		alphabeticalheaders = true
	else
		alphabeticalheaders = false
	end
 
	local entries = {}
 
	for _, v in ipairs(args) do
		table.insert(entries,v)
	end
 
	local pageimport = args.page or ''
	if pageimport:find('%S') then
		local _t = mw.title.new(pageimport)
 		if not _t.exists then
			-- nothing
		end
		local tsplit = mw.text.split(_t:getContent(),'\n')
 		for _, v in ipairs(tsplit) do
			table.insert(entries,v)
		end
	end
 
	local _format
 
	if links == 'yes' then
		_format = '[[%s]]'
	elseif links == 'plink' then
		_format = '[[File:%s.png|link=%s]]&nbsp;[[%s]]'
	elseif links == 'plinkp' then
		_format = '[[File:%s.png|link=%s]]'
	else
		_format = '%s'
	end
 
	local list = {}
 
	for _, v in ipairs(entries) do
		if v:find('%S') then
			table.insert(list,mw.text.trim(v))
		end
	end
 
	table.sort(list,
			function (a,b)
				return a:lower() < b:lower()
			end
		)
 
	local ret = mw.html.create('table')
				:addClass('wikitable')
				:tag('tr')
					:tag('th')
						:attr('colspan',columns)
						:wikitext(header)
					:done()
				:done()
 
	if alphabeticalheaders then
		local alphalist = {}
		local alphatable = mw.text.split(alphabet,'')
		local toc = {}
 
		for _, v in pairs(alphatable) do
			alphalist[v] = {}
			table.insert(toc,string.format('[[#tl-%s|%s]]',v,v))
		end
 
		toc = table.concat(toc,' <b>•</b> ')
 
		for _, v in ipairs(list) do
			local firstletter = mw.text.split(v:upper(),'')[1]
			if alphalist[firstletter] then
				table.insert(alphalist[firstletter],v)
			else
				table.insert(alphalist['#'],v)
			end
		end
 
		ret	:tag('tr')
				:tag('td')
					:attr('colspan',columns)
					:wikitext(toc)
				:done()
			:done()
 
		for _, v in ipairs(alphatable) do
			local letterused = false
			ret	:tag('tr')
					:tag('th')
						:attr('colspan',columns)
						:attr('id','tl-'..v)
						:css('background','#CCCCCC')
						:wikitext(v)
					:done()
				:done()
			local newrow
			local i = 0
			for _, w in ipairs(alphalist[v]) do
				letterused = true
				i = i + 1
				if i % columns == 1 then
					newrow = ret:tag('tr')
				end
				newrow	:tag('td')
						:wikitext(string.format(_format,w,w,w,w,w))
					:done()
 
				if i % columns == 0 then
					newrow:done()
				end
			end
 
			local j = i % columns
 
			if j ~= 0 then
				newrow	:tag('th')
						:attr('colspan',columns-j)
					:done()
				:done()
			elseif not letterused then
				ret	:tag('tr')
						:tag('th')
							:attr('colspan',columns)
							:wikitext('&nbsp;')
						:done()
					:done()
			end
		end
	else
		local newrow
		local i = 0
		for _, v in ipairs(list) do
			i = i + 1
			if i % columns == 1 then
				newrow = ret:tag('tr')
			end
			newrow	:tag('td')
					:wikitext(string.format(_format,v,v,v,v,v))
				:done()
 
			if i % columns == 0 then
				newrow:done()
			end
		end
 
		local j = i % columns
 
		if j ~= 0 then
			newrow	:tag('th')
					:attr('colspan',columns-j)
				:done()
			:done()
		end
	end
 
	return ret
end
 
return p

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.