Module:Sort table
MyWikiBiz, Author Your Legacy — Friday November 15, 2024
Jump to navigationJump to searchTemplate: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:Tlx or Template:Tlx sorts table ascending by column
- Template:Tlx sorts table descending by column
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