پودمان:Sandbox/Gonnym/episodewikidata

از ویکی‌پدیا، دانشنامهٔ آزاد
توضیحات پودمان[ایجاد] [پاکسازی]
local getArgs = require('Module:Arguments').getArgs
local getWikiDataValue = require('Module:WikidataIB/sandbox')._getValue

p = {}

local function getPreviousEpisodeFromWikiData()
	return getWikiDataValue({"P155", fetchwikidata = "ALL", onlysourced = "no"})
end

local function getNextEpisodeFromWikiData()
	return getWikiDataValue({"P156", fetchwikidata = "ALL", onlysourced = "no"})
end

function p.getPreviousEpisodeFromWikiData()
	return getWikiDataValue({"P155", fetchwikidata = "ALL", onlysourced = "no", qid = "Q20785929"})
end

function p.getNextEpisodeFromWikiData()
	return getWikiDataValue({"P156", fetchwikidata = "ALL", onlysourced = "no", qid = "Q20785929"})
end

local function getFormattedPreviousEpisodeLink(args)
	local previousEpisodeRaw = args.rprev or args.RPrev
	local previousEpisode = args.prev or getPreviousEpisodeFromWikiData()

	local previousEpisodeLink
	local hasLink = true
	if (previousEpisodeRaw) then
		previousEpisodeLink = previousEpisodeRaw
	elseif (previousEpisode) then
		previousEpisodeLink = '"' .. previousEpisode .. '"'
	else
		previousEpisodeLink = "—"
		hasLink = false
	end
	
	return previousEpisodeLink, hasLink
end

local function getFormattedNextEpisodeLink(args)
	local nextEpisodeRaw = args.rnext or args.RNext
	local nextEpisode = args.next or getNextEpisodeFromWikiData()

	local nextEpisodeLink
	local hasLink = true
	if (nextEpisodeRaw) then
		nextEpisodeLink = nextEpisodeRaw
	elseif (nextEpisode) then
		nextEpisodeLink = '"' .. nextEpisode .. '"'
	else
		nextEpisodeLink = "—"
		hasLink = false
	end

	return nextEpisodeLink, hasLink
end

function p.getEpisodeChronology(frame)
	local args = getArgs(frame)
	local previousEpisodeLink, hasPreviousLink = getFormattedPreviousEpisodeLink(args)
	local nextEpisodeLink, hasNextLink = getFormattedNextEpisodeLink(args)
	
	if (hasPreviousLink or hasNextLink) then
--	return frame:expandTemplate{title = 'succession links', args = {left = previousEpisodeLink, right=nextEpisodeLink}}
	local chronologyString =
		'<div style="width: 100%">' ..
		'<div style="width: 50%; float: left; text-align: center;"> ←&nbsp;\'\'\'Previous\'\'\'<br />' .. previousEpisodeLink .. '</div>' ..
		'<div style="width: 50%; float: right; text-align: center;"> \'\'\'Next\'\'\'&nbsp;→<br />' .. nextEpisodeLink .. '</div>' ..
		'</div>'
	return chronologyString
	else
		return nil
	end
end

function p.getHeaderTitle(frame)
	local args = getArgs(frame)
	local previousEpisode = args.prev or args.rprev or args.RPrev or getPreviousEpisodeFromWikiData()
	local nextEpisode = args.next or args.rnext or args.RNext or getNextEpisodeFromWikiData()
	
	if (previousEpisode or nextEpisode) then
		return "Episode chronology"
	end
end

return p