Module:User:DTLHS/test

local export = {}

local m_links = require("Module:links") local m_lang = require("Module:languages")

local function unpack_content(args) local result = {} for _,val in ipairs(args) do		table.insert(result, mw.text.trim(val)) end return result end

function get_col_lengths(n_columns, n_items) local r = math.mod(n_items, n_columns)

local col_lengths = {} for i = 1, n_columns do		table.insert(col_lengths, (n_items - r) / n_columns) if (i <= r) then col_lengths[i] = col_lengths[i] + 1 end end

return col_lengths end

function set_columns(n_columns, items, line_start, lang, frame) local col_lengths = get_col_lengths(n_columns, #items) local result = {} local count = 1 for i = 1, n_columns do		local col = "" for j = 1, col_lengths[i] do			local item = items[count] if lang then item = m_links.full_link({lang = lang, term = item}) end col = col .. '\n' .. line_start .. item count = count + 1 end table.insert(result, col) end return result end

function get_col_header(bg, collapse, class, title, column_width) if (collapse == 1) then local result = {' \n ', title, ' \n \n{| style="width:100%;" role="presentation" class="',                       class,                        '"\n|-\n| style="vertical-align: top; text-align: left; background-color: ',                        bg,                        ';  width: ',                        column_width,                        '%;" |'} return table.concat(result) end if (collapse == 0) then local result = {' \n{| role="presentation" style="width:100%"\n|-\n| style="background:',                       bg,                        ';vertical-align:top;width:',                        column_width,                        '%" |'} return table.concat(result) end

end

function export.create_table(n_columns, content, alphabetize, bg, collapse, class, title, column_width, line_start, lang, frame) local separator = '\n| style=width:1% |\n| style="background:' .. bg .. ';vertical-align:top;text-align:left;width:' .. column_width .. '%;" |' local final = '\n|} '

if (alphabetize == 1) then if lang then function comp(element1, element2) return string.byte(lang:makeSortKey(lang:makeEntryName(element1))) < string.byte(lang:makeSortKey(lang:makeEntryName(element2))) end table.sort(content, comp) else table.sort(content) end end

local header = get_col_header(bg, collapse, class, title, column_width)

local columns_t = set_columns(n_columns, content, line_start, lang, frame) local columns = table.concat(columns_t, separator)

return header .. columns .. final end

function export.display(frame) local frame_args = frame:getParent.args -- unpack args local bg = frame.args["bg"] or "#F8F8FF" local collapse = tonumber(frame.args["collapse"]) or 0 local class = frame.args["class"] or "Derived terms" local title = frame.args["title"] or "" local n_columns = tonumber(frame.args["columns"]) or 1 local column_width = frame.args[columns] or math.floor(80 / n_columns) local alphabetize = tonumber(frame.args["sort"]) or 0 local line_start = frame.args["line_start"] or "* " local lang = frame.args["lang"] or frame_args["lang"] local content = unpack_content(frame_args) if lang then lang = m_lang.getByCode(lang) or error("The language code \"" .. lang .. "\" is not valid.") end return export.create_table(n_columns, content, alphabetize, bg, collapse, class, title, column_width, line_start, lang, frame)

end

return export