Modul:Campaignbox
Aspect
Populează o cutie de navigare pentru o campanie militară cu linkuri de la Wikidata asociate unei anumite campanii.
local getArgs = require('Modul:Arguments').getArgs
local printMilNav = require('Modul:Military navigation').fromArgs
local Wikidata = require('Modul:Wikidata')
local illWd = require('Modul:Ill-wd').fromArgs
local StringUtils = require('Modul:StringUtils')
local data = mw.loadData('Modul:Campaignbox/data')
--index de bătălii; cele mai multe sunt cele de pe Isonzo care au ajuns la 12;
local digits = {'prima', 'a doua', 'a treia', 'a patra', 'a cincea', 'a șasea', 'a șaptea', 'a opta', 'a noua', 'a zecea', 'a unsprezecea', 'a douăsprezecea'}
local p = {}
local function getFormattedBattlesList(qid)
local list = data[qid]
if not list or type(list) ~= 'table' or #list == 0 then
local idList = Wikidata.getBestEntityIdsList(qid, 'P527')
list = {}
for _,battleId in ipairs(idList or {}) do
table.insert(list, { q = StringUtils._prependIfMissing(battleId, 'Q') })
end
end
local out = {}
for _,b in ipairs(list) do
local label = b.l
if not label then
local rawTitle = b.t or b.q and Wikidata.loadOneValueInChain(b.q, 'label')
local nameSource = not b.t and b.q and Wikidata.loadOneValueInChain(b.q, 'P138', 'label')
mw.logObject(rawTitle, '[Campaignbox] battle label')
local battleIndex = 0
for candidateIdx = 1, #digits do
if mw.ustring.match(mw.ustring.lower(rawTitle), '^' .. digits[candidateIdx] .. ' bătălie.*') then
battleIndex = candidateIdx
rawTitle = 'Bătălia' .. mw.ustring.sub(rawTitle, 1 + mw.ustring.len(digits[candidateIdx] .. ' bătălie'))
end
end
rawTitle = StringUtils._capitalize(StringUtils._removeStart(rawTitle, 'Bătălia de la ', 'Bătălia din ', 'Bătălia pentru ', 'Campania din ', 'Campania pentru ', 'Operațiunea '))
label = (nameSource or mw.ustring.gsub(rawTitle, '%s+%(.*%)$', '')) .. (battleIndex > 0 and (' (' .. tostring(battleIndex) .. ')') or '')
end
table.insert(out, b.q and illWd(b.q, label, b.t, true) or ('[[' .. b.t .. '|' .. label .. ']]'))
end
return out
end
p.fromArgs = function(args)
local milNavArgs = {}
local qid = args.q or args[1] or mw.wikibase.getEntityIdForCurrentPage()
milNavArgs.name = args['nume brut'] or (args['titlu'] and (args['nume'] or args['name']))
milNavArgs.state = args.stare
milNavArgs.listclass = args.listclass or args['clasă liste']
milNavArgs.bodyclass = args.bodyclass or args['clasă corp']
milNavArgs.below = args.note
milNavArgs.border = args.border
milNavArgs.state = args.state
milNavArgs.title = args.titlu or args.nume or args.name or Wikidata.loadOneValueInChain(qid)
milNavArgs.list1 = args['bătălii'] or args.battles
if not milNavArgs.list1 then
local separator = mw.text.decode(' • ', true)
local elemList = getFormattedBattlesList(qid)
if elemList then
milNavArgs.list1 = table.concat(elemList, separator)
end
end
return milNavArgs.list1 and #milNavArgs.list1 > 0 and printMilNav(milNavArgs) or nil
end
p.fromFrame = function(frame)
local args = getArgs(frame)
return p.fromArgs(args)
end
return p