Module:Born

From Liquipedia Commons Wiki

Documentation (view - edit)

Module:Born/doc


local Born = {}

local Class = require('Module:Class')
local DateExt = require('Module:Date/Ext')
local Flags = require('Module:Flags')

function Born.born(args)
	args = args or {}
	local data = mw.ext.LiquipediaDB.lpdb('player', {
		conditions = '[[pagename::' .. string.gsub(mw.title.getCurrentTitle().text,'%s','_') .. ']]',
		query = 'birthdate, deathdate'
	})

	if data[1] then data = data[1] else return '' end
	if type(data) == 'table' and data.birthdate ~= DateExt.defaultDate then
		local function formatDate(date)
			return os.date('!%B %d, %Y', tonumber(mw.getContentLanguage():formatDate('U', date))):gsub(' 0',' ')
		end
		if data.deathdate == DateExt.defaultDate then
			if args.as then
				return '(born ' .. args.as .. '; ' .. formatDate(data.birthdate) .. ')'
			else
				return '(born ' .. formatDate(data.birthdate) .. ')'
			end
		else
			if args.as then
				return '(' .. formatDate(data.birthdate) .. ' (' .. args.as .. ') – ' .. formatDate(data.deathdate) .. ')'
			else
				return '(' .. formatDate(data.birthdate) .. ' – ' .. formatDate(data.deathdate) .. ')'
			end
		end
	end

	return ''
end

function Born.getList(args)
	args = args or {}
	args.endyear = args.endyear or args.year

	local conditions = '[[birthdate::!]] AND [[birthdate::!' .. DateExt.defaultDate .. ']]'
	if args.year then
		conditions = conditions .. ' AND [[birthdate::>'..args.year..'-01-01]] AND [[birthdate::<'..args.endyear..'-12-31]]'
	end

	local players = mw.ext.LiquipediaDB.lpdb('player', {
		conditions = conditions,
		query = 'id, name, pagename, nationality, birthdate, deathdate, extradata',
		order = 'birthdate ASC',
		limit = 5000
	})

	local wrapper = Born._createListHeader()

	for _, player in ipairs(players) do
		wrapper:node(Born._listRow(player))
	end

	return wrapper:allDone()
end

function Born._listRow(player)
	local monthDaySortValue = tonumber(player.birthdate:sub(6, 7) .. player.birthdate:sub(9))

	return mw.html.create('tr')
		:tag('td')
			:wikitext(tonumber(player.birthdate:sub(1,4)))
			:done()
		:tag('td')
			:attr('data-sort-value', monthDaySortValue)
			:wikitext(mw.language.new('en'):formatDate('F d', player.birthdate))
			:done()
		:tag('td')
			:wikitext('[[' .. player.pagename .. '|' .. (player.id or player.pagename)..']]')
			:done()
		:tag('td')
			:wikitext(Flags.Icon{flag = player.nationality})
			:wikitext('&nbsp;')
			:wikitext(player.name)
		:allDone()
end

function Born._createListHeader()
	return mw.html.create('div'):addClass('table-responsive')
		:tag('table'):addClass('wikitable'):addClass('sortable')
			:tag('tr')
				:tag('th'):wikitext('Birth year'):done()
				:tag('th'):wikitext('Month/Day'):done()
				:tag('th'):wikitext('ID'):done()
				:tag('th'):wikitext('Name'):done()
				:done()
end

return Class.export(Born)