Jump to content

Module:WritingCredits: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
m Alex 21 moved page Module:StoryTeleplay to Module:WritingCredits: Update
No edit summary
Line 1: Line 1:
-- This module implements {{StoryTeleplay}}.
-- This module implements {{WritingCredits}}.


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


local StoryTeleplay = {}
local WritingCredits = {}


function StoryTeleplay.splitTable(tab)
function WritingCredits.splitTable(tab)
-- Split comma-separated values by letter/number
-- Split comma-separated values by letter/number
local t = {}
local t = {}
Line 17: Line 17:
end
end


function StoryTeleplay.hasValue(tab, val)
function WritingCredits.hasValue(tab, val)
-- Check for value within table
-- Check for value within table
for k, v in ipairs(tab) do
for k, v in ipairs(tab) do
Line 27: Line 27:
end
end


function StoryTeleplay.new(frame, args)
function WritingCredits.new(frame, args)
args = args or {}
args = args or {}
Line 36: Line 36:
defaultOrder = "w,t,s,sb,ex1,ex2,ex3"
defaultOrder = "w,t,s,sb,ex1,ex2,ex3"
end
end
local defaultOrder_split = StoryTeleplay.splitTable(defaultOrder)
local defaultOrder_split = WritingCredits.splitTable(defaultOrder)
local givenOrder = args.order or ""
local givenOrder = args.order or ""
local givenOrder_split = StoryTeleplay.splitTable(givenOrder)
local givenOrder_split = WritingCredits.splitTable(givenOrder)
-- Order of parameters: any provided by template call in their order, then any undeclared in their default order
-- 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
for k, v in ipairs(defaultOrder_split) do
if StoryTeleplay.hasValue(givenOrder_split, v) == false then
if WritingCredits.hasValue(givenOrder_split, v) == false then
table.insert(givenOrder_split, v)
table.insert(givenOrder_split, v)
end
end
Line 77: Line 77:
local args = require('Module:Arguments').getArgs(frame, {
local args = require('Module:Arguments').getArgs(frame, {
removeBlanks = false,
removeBlanks = false,
wrappers = 'Template:StoryTeleplay'
wrappers = 'Template:WritingCredits'
})
})
return StoryTeleplay.new(frame, args)
return WritingCredits.new(frame, args)
end
end



Revision as of 07:16, 10 July 2024

-- This module implements {{WritingCredits}}.

--------------------------------------------------------------------------------
-- WritingCredits class
-- The main class.
--------------------------------------------------------------------------------

local WritingCredits = {}

function WritingCredits.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 WritingCredits.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 WritingCredits.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 = WritingCredits.splitTable(defaultOrder)
	local givenOrder = args.order or ""
	local givenOrder_split = WritingCredits.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 WritingCredits.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 "Additionally"
	labels['ex2'] = args['ex2label'] or "Additionally"
	labels['ex3'] = args['ex3label'] or "Additionally"
	
	-- Format labels and values
	local writingCredits = ""
	for k, v in ipairs(givenOrder_split) do
		if args[v] then
			writingCredits = writingCredits .. ("<i>" .. labels[v] .. "</i>&hairsp;: " .. args[v] .. "<br />")
		end
	end
	
	return writingCredits
end

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

local p = {}

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

return p