Module:Cargo
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Cargo/doc
local w = {}
-- Do string.gsub to all indexes in a table
function w.igsub( t, pattern, repl )
local result = {}
for k, v in pairs( t ) do
result[string.gsub( k, pattern, repl )] = v
end
return result
end
function w.query( frame )
local cargo = mw.ext.cargo
local args = frame.args
local query_result = cargo.query( args.tables or '', args.fields or '_pageName', {
join = args['join on'],
where = args.where,
groupBy = args['group by'],
having = args.having,
orderBy = args['order by'] or '_pageName ASC',
limit = args.limit,
offset = args.offset
} )
if #query_result == 0 then
return args.default
end
if args['unique on'] then
query_result = w_table.unique( query_result, args['unique on'] )
end
local parsed_result = {}
if args.template then
local frame = mw.getCurrentFrame()
for index, element in ipairs( query_result ) do
parsed_result[index] = frame:expandTemplate{
title = args.template,
args = w.igsub( element, '_', ' ' )
}
end
else
for index, element in ipairs( query_result ) do
for _, value in pairs( element ) do
parsed_result[index] = value
break
end
end
end
return ( args.intro or '' ) .. table.concat( parsed_result, args.delimiter or '' ) .. ( args.outro or '' )
end
return w