Documentation for this module may be created at Module:Sandbox/Danski454/UBLSortable/doc

require('strict')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local TableTools = require('Module:TableTools')
local ListModule = require('Module:List')
-- based on [[Module:Sort list]]

function p.asc(frame)
	local args = getArgs(frame)
	return p._asc(args)
end

function p._asc(args)
	local listItems = {}
    -- loop over args (copied from [[Module:Old XfD multi]])
	for k, v in pairs(args) do
		if type(k) == 'string' then
			local prefix, num = k:match('^(.-)([1-9][0-9]*)$')
			if prefix and num then
				num = tonumber(num)
				if not listItems[num] then listItems[num] = {} end
				listItems[num][prefix] = v
			end
		end
	end
	listItems = TableTools.compressSparseArray(listItems)
    table.sort(listItems, function (a, b)
    	local ak = a.key or a.item
    	local bk = b.key or b.item
    	if tonumber(ak) and tonumber(bk) then
    		return tonumber(ak) < tonumber(bk) 
    	else
    		return ak < bk
    	end 
	end)
    return p.renderList(listItems)
end

function p.desc(frame)
	local args = getArgs(frame)
	return p._desc(args)
end

function p._desc(args)
	
end

function p.renderList(listItems)
	local args = {}
	for i=1, #listItems do
		if listItems[i].item and mw.ustring.find(listItems[i].item, '%S') then
			args[#args+1] = listItems[i].item
		end
	end
	return ListModule.makeList('unbulleted', args)
end

return p