Module:Sandbox/Alex.osheter/listtest

From English Wikipedia @ Freddythechick

local p = {}

function parseDate(totalSeconds)
	local seconds =  math.fmod(tonumber(totalSeconds),60)
	local minutes =  math.floor(tonumber(totalSeconds) / 60)
	local hours   = math.floor(minutes / 60)
	if hours == 0 then
		return string.format("%d:%02d", minutes, seconds)
	else
		return string.format("%d:%02d:%02d", hours, minutes, seconds)
	end
end

function p.parseNames(frame)
	
	local wikiEntity = mw.wikibase.getEntity()
	
	if frame.args[1] == "{{{from}}}" then
		if (wikiEntity:getAllStatements( 'tracklist' ) == nil) then return end
	else
		wikiEntity = mw.wikibase.getEntity( frame.args[1] )
	end
		
	local funcArgs = {}
	
	for index, table in pairs(wikiEntity:getAllStatements( 'tracklist' )) do
		local trackEntity = mw.wikibase.getEntity( table["mainsnak"]["datavalue"]["value"]["id"] )
		if trackEntity:getSitelink() == nil then
			funcArgs["title" .. index] = trackEntity:getLabel()
		else
			funcArgs["title" .. index] = frame:preprocess( "[[" .. trackEntity:getSitelink() .. "|" .. trackEntity:getLabel() .. "]]")
		end
		if table["qualifiers"] ~= nil then
			if table["qualifiers"]["P2047"] ~= nil then
				local timeInSeconds = table["qualifiers"]["P2047"][1]["datavalue"]["value"]["amount"]
				funcArgs["length" .. index] = parseDate(timeInSeconds)
			end
		end
	end
	if wikiEntity:getAllStatements( 'duration' ) ~= nil then
		local totalTime = tonumber(wikiEntity:getAllStatements( 'duration' )[1]["mainsnak"]["datavalue"]["value"]["amount"])
		funcArgs["total_length"] = parseDate(totalTime)
	end
	return frame:expandTemplate{ title = 'tracklist', args = funcArgs }
	
end

return p