Module:Sort table

Template:Module rating This module extends the functionality of module:sort list to tables, so that tables in articles can be set with a default sorting, and have their rows manually shuffled around every time their data is updated.

Usage

The module is accessed through its corresponding template {{sort table}}:

Template:Sandbox other


local p = {}

function p.asc(frame)
	if tonumber(frame.args[1]) > 1 then
		local before = string.rep("[%|\n]%|(.-)", tonumber(frame.args[1]) - 1)
	else
		local before = ''
	end
	local indexed_rows
	sorted_table = ''
	local key = 0
	return frame.args[2]
--	for row in mw.text.gsplit(frame.args[2], "\n|-", true) do
--		key = row:gmatch(before.."[%|\n]%|(.-)[%|\n]%|")
--		indexed_rows[key] = {key, row}
--	end
--	table.sort(indexed_rows)
--	for key, row in pairs(indexed_rows) do
--		sorted_table = sorted_table..'\n|-'..row
--	end
--	return sorted_table
end

function p.desc(frame)
    local rows = mw.text.split( frame.args[2], "\n|-", true)
    for row in rows do
    	indexed_rows[row:gmatch(string.rep("[%|\n]%|(.-)", frame.args[1] - 1).."[%|\n]%|(.-)[%|\n]%|")] = row
    end
    table.sort(indexed_rows, function (a, b) return a > b end )
    return table.concat( indexed_rows[2], "\n%|%-" )    
end

return p