Modul:UATList
Aspect
Documentația acestui modul poate fi creată la Modul:UATList/doc
local getArgs = require('Modul:Arguments').getArgs
local illWd = require('Modul:Ill-wd').fromArgs
local Wikidata = require('Modul:Wikidata')
local StringUtils = require('Modul:StringUtils')
local TableTools = require('Modul:TableTools')
local formatNum = require('Modul:Formatnum')._formatNum
local encloseString = StringUtils._encloseString
local prependToString = StringUtils._prependToString
local br = tostring(mw.html.create('br'))
local p = {}
local function displayImageFromName(name)
if name == nil then return '' end
if string.find(name, ':') == nil then
return encloseString({name, '[[Fișier:', '|100x100px]]'})
else
return encloseString({name, '[[', '|100x100px]]'})
end
end
p.getUATLine = function(uatData)
local types = uatData.types and mw.text.listToText(uatData.types, br, br) or ''
if uatData.link == nil then
uatData.link = "[[" .. uatData.article .. "|" .. uatData.name .. "]]"
end
--TODO remove this when we have proper params
uatData.name = uatData.name or uatData.link
local htmlRow = mw.html.create('tr')
:attr('class', 'uat-list uat')
:tag('td')
:attr('class', 'uat-list coa')
:wikitext(displayImageFromName(uatData.coa))
:done()
:tag('td')
:attr('class', 'uat-list link')
:attr('data-sort-value', "8_" .. uatData.name)
:wikitext(encloseString({uatData.link, "'''", "'''"}))
:done()
:tag('td')
:wikitext(types)
:done()
:tag('td')
:attr('class', 'uat-list pop')
:attr('data-sort-type', 'number')
:attr('data-sort-value', uatData.population)
:wikitext(uatData.population and formatNum(uatData.population) or '')
:done()
:tag('td')
:attr('class', 'uat-list image')
:wikitext(displayImageFromName(uatData.image))
:allDone()
return htmlRow
end
p.getSettlementLine = function(uatData)
local types = mw.text.listToText(uatData.types, br, br)
if uatData.link == nil then
uatData.link = "[[" .. uatData.article .. "|" .. uatData.name .. "]]"
end
--TODO remove this when we have proper params
uatData.name = uatData.name or uatData.link
local htmlRow = mw.html.create('tr')
:attr('class', 'uat-list settlement')
:tag('td')
:attr('class', 'uat-list coa')
:done() --no CoA for settlements
:tag('td')
:attr('class', 'uat-list link')
:attr('data-sort-value', "9_" .. uatData.name)
:wikitext(uatData.link)
:done()
:tag('td')
:wikitext(types)
:done()
:tag('td')
:attr('class', 'uat-list pop')
:attr('data-sort-type', 'number')
:attr('data-sort-value', uatData.population)
:wikitext(uatData.population and formatNum(uatData.population) or '')
:done()
:tag('td')
:attr('class', 'uat-list image')
:wikitext(displayImageFromName(uatData.image))
:allDone()
return htmlRow
end
p.displayUATListHeader = function()
local tr = mw.html.create('tr')
:tag('th'):attr('class', 'unsortable'):wikitext('Stemă'):done()
:tag('th'):wikitext('Nume'):done()
:tag('th'):wikitext('Tip de localitate'):done()
:tag('th'):wikitext('Populație'):done()
:tag('th'):attr('class', 'unsortable'):wikitext('Imagine'):allDone()
return tostring(tr)
end
p.displayUATListFromArgs = function(uats, header)
local tbl = ""
local content = {}
for _,eachUat in ipairs(uats) do
table.insert(content, tostring(p.getUATLine(eachUat)))
if eachUat.settlements then for _,eachSettlement in ipairs(eachUat.settlements) do
table.insert(content, tostring(p.getSettlementLine(eachSettlement)))
end end
end
if header then
tbl = mw.html.create('table'):addClass('wikitable'):addClass('sortable'):css('width', '100%')
tbl:node(p.displayUATListHeader())
for _, line in ipairs(content) do tbl:node(line) end
return tostring(tbl)
else
return table.concat(content, "\n", 1, #content)
end
end
p.displayUATFromFrame = function(frame)
local uats = p.parseArgsFromFrame(frame)
if #uats > 1 then
return error("Prea multe localități în listă")
end
return p.displayUATListFromArgs(uats, false)
end
p.displayUATListFromFrame = function(frame)
local uats = p.parseArgsFromFrame(frame)
return p.displayUATListFromArgs(uats, true)
end
p.parseArgsFromFrame = function(frame)
local args = getArgs(frame)
local uats = {}
for argName,argValue in pairs(args) do
local uatNStr, uatProp, uatPropIndexStr, uatPropQual, uatPropQualIndexStr = mw.ustring.match(argName, 'uat(%d*)(%a*)(%d*)(%a*)(%d*)')
if uatNStr then
local uatN = tonumber(uatNStr)
mw.logObject(uatN, limit)
local uatPropIndex = type(uatPropIndexStr) == 'string' and tonumber(uatPropIndexStr) or -1
local uatPropQualIndex = type(uatPropQualIndexStr) == 'string' and tonumber(uatPropQualIndexStr) or -1
uats[uatN] = uats[uatN] or {}
local uat = uats[uatN]
if uatPropIndex > 0 then
uatProp = uatProp .. 's'
uat[uatProp] = uat[uatProp] or {}
if uatPropQual and uatPropQual ~= '' then
uat[uatProp][uatPropIndex] = uat[uatProp][uatPropIndex] or {}
if uatPropQualIndex > 0 then
uatPropQual = uatPropQual .. 's'
uat[uatProp][uatPropIndex][uatPropQual] = uat[uatProp][uatPropIndex][uatPropQual] or {}
uat[uatProp][uatPropIndex][uatPropQual][uatPropQualIndex] = argValue
else
uat[uatProp][uatPropIndex][uatPropQual] = argValue
end
else
uat[uatProp][uatPropIndex] = argValue
end
else
uat[uatProp] = argValue
end
end
end
return TableTools.compressSparseArray(uats)
end
return p