Jump to content

Module:WritingCredits

Permanently protected module
From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Alex 21 (talk | contribs) at 06:43, 10 July 2024 (Create module). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)

-- This module implements {{StoryTeleplay}}.

--------------------------------------------------------------------------------
-- StoryTeleplay class
-- The main class.
--------------------------------------------------------------------------------

local StoryTeleplay = {}

function StoryTeleplay.splitTable(tab)
	-- Split comma-separated values by letter/number
	local t = {}
	for v in string.gmatch(tab, "[%w%d]+") do
		t[#t+1] = v
	end
	return t
end

function StoryTeleplay.hasValue(tab, val)
    -- Check for value within table
	for k, v in ipairs(tab) do
        if v == val then
            return true
        end
    end
    return false
end

function StoryTeleplay.new(frame, args)
	args = args or {}
	
	-- Default order: writer, story, teleplay, storyboard, extras
	local defaultOrder = "w,s,t,sb,ex1,ex2,ex3"
	if args.tfirst then
		-- Teleplay before story (legacy support, will deprecate)
		defaultOrder = "w,t,s,sb,ex1,ex2,ex3"
	end
	local defaultOrder_split = StoryTeleplay.splitTable(defaultOrder)
	local givenOrder = args.order or ""
	local givenOrder_split = StoryTeleplay.splitTable(givenOrder)
	
	-- Order of parameters: any provided by template call in their order, then any undeclared in their default order
	for k, v in ipairs(defaultOrder_split) do
		if StoryTeleplay.hasValue(givenOrder_split, v) == false then
			table.insert(givenOrder_split, v)
		end
	end
	
	-- Default or custom labels
	local labels = {}
	labels['w'] = args['wlabel'] or "Written by"
	labels['s'] = args['slabel'] or "Story by"
	labels['t'] = args['tlabel'] or "Teleplay by"
	labels['sb'] = args['sblabel'] or "Storyboard by"
	labels['ex1'] = args['ex1label'] or ""
	labels['ex2'] = args['ex2label'] or ""
	labels['ex3'] = args['ex3label'] or ""
	
	-- Format labels and values
	for k, v in ipairs(givenOrder_split) do
		if (args[v]) then
			-- "<i>" .. labels[v] .. "</i>&#8202;"
			print (labels[v] .. ": " .. args[v])
		end
	end
end

--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------

local p = {}

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame, {
		removeBlanks = false,
		wrappers = 'Template:StoryTeleplay'
	})
	return StoryTeleplay.new(frame, args)
end

return p