Marvel Database
Register
No edit summary
No edit summary
 
(4 intermediate revisions by one other user not shown)
Line 67: Line 67:
 
--add links to standard sub-pages/categories - "Appearances", "Minor Appearances", Mentions", "Images", "Quotes" and "Gallery"
 
--add links to standard sub-pages/categories - "Appearances", "Minor Appearances", Mentions", "Images", "Quotes" and "Gallery"
 
value, categories = design.add_links_to_standard_subpages(pagename..' (Earth-1218)', page_type)
 
value, categories = design.add_links_to_standard_subpages(pagename..' (Earth-1218)', page_type)
  +
output_categories = h.join_tables(output_categories, categories)
  +
output = h.join_tables(output, value)
  +
value, categories = design.add_links_to_standard_subpages(pagename, page_type)
 
output_categories = h.join_tables(output_categories, categories)
 
output_categories = h.join_tables(output_categories, categories)
 
output = h.join_tables(output, value)
 
output = h.join_tables(output, value)
Line 88: Line 91:
 
or not h.isempty(args.MonthOfBirth)
 
or not h.isempty(args.MonthOfBirth)
 
or not h.isempty(args.DayOfBirth)
 
or not h.isempty(args.DayOfBirth)
  +
--or not h.isempty(args.PlaceOfBirth)
 
or not h.isempty(args.CountryOfBirth)
 
or not h.isempty(args.CountryOfBirth)
 
or not h.isempty(args.StateOfBirth)
 
or not h.isempty(args.StateOfBirth)
Line 146: Line 150:
 
{'Creator', 'subject(s) created by', ''},
 
{'Creator', 'subject(s) created by', ''},
 
{'Editor-in-Chief', 'work(s) that were produced while', 'was Editor-in-Chief'},
 
{'Editor-in-Chief', 'work(s) that were produced while', 'was Editor-in-Chief'},
{'Cover Artist', 'work(s) where', 'created a cover'},
+
{'Cover Artist', 'work(s) where', 'worked on a cover'},
 
{'Editor', 'work(s) that', 'edited'},
 
{'Editor', 'work(s) that', 'edited'},
 
{'Writer', 'work(s) that', 'wrote'},
 
{'Writer', 'work(s) that', 'wrote'},
Line 158: Line 162:
 
}
 
}
 
local images = {
 
local images = {
{'Cover Artist Images', 'covers drawn by', ''},
+
{'Cover Artist Images', 'cover(s)', 'worked on'},
{'Penciler Images', 'images penciled by', ''},
+
{'Penciler Images', 'image(s)', 'worked on as penciler'},
{'Inker Images', 'images inked by', ''},
+
{'Inker Images', 'image(s)', 'worked on as inker'},
{'Colorist Images', 'images colored by', ''},
+
{'Colorist Images', 'image(s)', 'worked on as colorist'},
{'Letterer Images', 'images lettered by', ''},
+
{'Letterer Images', 'image(s)', 'worked on as letterer'},
 
}
 
}
 
local output_categories = {}
 
local output_categories = {}
Line 185: Line 189:
   
 
title_categories = design.add_section('Work History', mw.text.listToText(title_categories, '', ''), 2)
 
title_categories = design.add_section('Work History', mw.text.listToText(title_categories, '', ''), 2)
image_categories = design.add_section('Images Drawn by '..pagename, mw.text.listToText(image_categories, '', ''), 2)
+
image_categories = design.add_section('Images', mw.text.listToText(image_categories, '', ''), 2)
   
 
output = title_categories..image_categories
 
output = title_categories..image_categories
Line 259: Line 263:
 
local output = h.LinkToCategory(category, value)
 
local output = h.LinkToCategory(category, value)
 
return output..h.Category(category)
 
return output..h.Category(category)
  +
end
  +
  +
  +
--------------------------------------------------------------------------------------------------
  +
function p.get_date_of_birth(frame)
  +
local args = getArgs(frame)
  +
local value = args.DateOfBirth
  +
local year = ''
  +
local month = ''
  +
local day = ''
  +
local output_categories = {}
  +
local output = ''
  +
  +
if not h.isempty(value)
  +
then
  +
month, day, year = string.match(value, '(%D+) (%d+), (%d%d%d%d)')
  +
if month == nil
  +
then
  +
month, year = string.match(value, '(%D+), (%d%d%d%d)')
  +
if month == nil
  +
then
  +
year = string.match(value, '(%d%d%d%d)')
  +
if year ~= nil
  +
then
  +
category = 'Born in '..year
  +
output = h.LinkToCategory(category, year)
  +
table.insert(output_categories, category)
  +
table.insert(output_categories, 'Incomplete Date of Birth')
  +
else
  +
output = value
  +
month, day = string.match(value, '(%D+) (%d+)')
  +
if month ~= nil
  +
then table.insert(output_categories, 'Incomplete Date of Birth')
  +
else table.insert(output_categories, 'Wrong Date Format')
  +
end
  +
end
  +
else
  +
category = 'Born in '..year
  +
table.insert(output_categories, 'Born in '..year)
  +
table.insert(output_categories, 'Born in '..year..', '..month)
  +
table.insert(output_categories, 'Incomplete Date of Birth')
  +
output = h.LinkToCategory(category..', '..month, month)..', '..h.LinkToCategory(category, year)
  +
end
  +
else
  +
category = 'Born in '..year
  +
table.insert(output_categories, 'Born in '..year)
  +
table.insert(output_categories, 'Born in '..year..', '..month)
  +
output = h.LinkToCategory(category..', '..month, month..' '..day)..', '..h.LinkToCategory(category, year)
  +
end
  +
else
  +
category = 'Staff DOB Needed'
  +
output = h.LinkToCategory(category, 'Unknown')
  +
table.insert(output_categories, category)
  +
end
  +
  +
return output..h.add_categories(output_categories)
 
end
 
end
 
 
Line 276: Line 336:
 
value = string.match(value, '(%d%d%d%d)')
 
value = string.match(value, '(%d%d%d%d)')
 
if not h.isempty(value)
 
if not h.isempty(value)
then table.insert(output_categories, 'Year of Death - '..value)
+
then table.insert(output_categories, 'Died in '..value)
  +
else table.insert(output_categories, 'Wrong Date Format')
  +
end
  +
end
  +
  +
return output..h.add_categories(output_categories)
  +
end
  +
  +
  +
--------------------------------------------------------------------------------------------------
  +
function p.get_place_of_birth(frame)
  +
local args = getArgs(frame)
  +
local country = args.CountryOfBirth
  +
local state = args.StateOfBirth
  +
local city = args.CityOfBirth
  +
local category = ''
  +
local output_categories = {}
  +
local output = ''
  +
  +
if not h.isempty(country)
  +
then
  +
country = h.break_link(country, 1)
  +
category = 'Staff Members Born in '..country
  +
if country == 'United States of America'
  +
then country = 'USA'
  +
end
  +
output = h.LinkToCategory(category, country)
  +
table.insert(output_categories, category)
  +
if not h.isempty(state)
  +
then output = output..', '..state
  +
end
  +
if not h.isempty(city)
  +
then output = output..', '..city
 
end
 
end
 
end
 
end

Latest revision as of 15:16, 15 March 2022

Documentation for this module may be created at Module:Staff Template/doc

-- module for Marvel Database:Staff Template
local p = {}
local getArgs = require('Dev:Arguments').getArgs
local h = require("Module:HF")
local design = require('Module:Design')
local standard = require("Module:StandardizedName")

function p.main(frame)
	local args = getArgs(frame)
	local pagename = mw.title.getCurrentTitle().text
	local page_type = 'Staff'
	local list_of_names = {}
	local pseudonyms = {}
	local value
	local categories = {}
	local output_categories = {}
	local output_infobox = {}
	local output = {}

	table.insert(output_categories, p.lua_get_outdated_fields(args) )

-- sections
	value, categories = design.add_quote(args)
	output_categories = h.join_tables(output_categories, categories)
	table.insert(output, value)

	value = args.PersonalHistory
	if h.isempty(value)
		then table.insert(output_categories, 'Personal History Needed')
		else table.insert( output, design.add_section('Personal History', value, 2) )
	end
	
	value = args.ProfessionalHistory
	if h.isempty(value)
		then table.insert(output_categories, 'Professional History Needed')
		else table.insert( output, design.add_section('Professional History', value, 2) )
	end	

	-- add links to categories like '/Writer' and '/Penciler Images'
	table.insert(list_of_names, pagename)
	value = args.Name
	if not h.isempty(value) and value ~= pagename
		then table.insert(list_of_names, value)
	end
	value = args.Pseudonyms
	if not h.isempty(value)
		then
			pseudonyms = h.explode(';', value)
			for i = 1, #pseudonyms do
				value = h.trim(pseudonyms[i])
				if not h.isempty(value) 
				and value ~= pagename 
				and value ~= args.Name
				and frame:preprocess(p.lua_dpl_list(value)) ~= 'no_result'
					then table.insert(list_of_names, value)
				end
			end
	end
	value, categories = p.lua_get_links_to_subcategories(list_of_names, pagename) 
	output_categories = h.join_tables(output_categories, categories)
	table.insert(output, value)

	table.insert( output, design.add_section('Notes', args.Notes, 2) )
	table.insert( output, design.add_section('Trivia', args.Trivia, 2) )

	table.insert( output, design.add_header('See Also', 2) )
	--add links to standard sub-pages/categories - "Appearances", "Minor Appearances", Mentions", "Images", "Quotes" and "Gallery" 
	value, categories = design.add_links_to_standard_subpages(pagename..' (Earth-1218)', page_type)
	output_categories = h.join_tables(output_categories, categories)
	output = h.join_tables(output, value)
	value, categories = design.add_links_to_standard_subpages(pagename, page_type)
	output_categories = h.join_tables(output_categories, categories)
	output = h.join_tables(output, value)

	table.insert( output, design.add_links_and_references(args, pagename) )
--
	output_categories = h.add_categories(output_categories)
	output = table.concat(output)
	
	return frame:preprocess(output)..output_categories
end


--------------------------------------------------------------------------------------------------
function p.lua_get_outdated_fields(args)
	local output = ''
	
	if  not h.isempty(args.Custom)
		or not h.isempty(args.CustomLabel)
		or not h.isempty(args.YearOfBirth)
		or not h.isempty(args.MonthOfBirth)
		or not h.isempty(args.DayOfBirth)
		--or not h.isempty(args.PlaceOfBirth)
		or not h.isempty(args.CountryOfBirth)
		or not h.isempty(args.StateOfBirth)
		or not h.isempty(args.CityOfBirth)
		or not h.isempty(args.Creations)
		or not h.isempty(args.PersonalHistoryHeader)
		or not h.isempty(args.ProfessionalHistoryHeader)
		or not h.isempty(args.WorkHistoryHeader)
		or not h.isempty(args.ImageLinksHeader)
		or not h.isempty(args.NotesHeader)
		or not h.isempty(args.TriviaHeader)
		or not h.isempty(args.CustomSection1)
		or not h.isempty(args.CustomText1)
		or not h.isempty(args.CustomSection2)
		or not h.isempty(args.CustomText2)
		or not h.isempty(args.SeeAlsoHeader)
		or not h.isempty(args.LinksHeader)
		or not h.isempty(args.NotesHeader)
		or not h.isempty(args.CustomRole1)
		or not h.isempty(args.CustomRole2)
		or not h.isempty(args.OfficialWebsiteHeader)
		or not h.isempty(args.RealName)
			then output = 'Outdated Fields/Marvel Staff'
	end

	return output	
end


--------------------------------------------------------------------------------------------------
function p.lua_get_links_to_subcategories(list_of_names, pagename)
	local function add_link(name, s_type, subcategory, text1, text2)
		local list1 = {'Editor', 'Cover Artist', 'Writer', 'Penciler', 'Inker', 'Colorist', 'Letterer', 'Director', 'Producer'}
		local list2 = {'Penciler Images', 'Inker Images', 'Colorist Images', 'Letterer Images'}
		local category = ''
		local n = h.pages_in_category(name..'/'..subcategory, s_type)
		local output = ''
		if n > 0
			then 
				output = '\n*'..h.LinkToCategory(name..'/'..subcategory, n..' '..text1..' "'..name..'" '..text2)
				if h.in_list(list1, subcategory)
					then category = 'Marvel Staff/'..subcategory..'s'
					elseif h.in_list(list1, subcategory)
						then category = 'Marvel Staff/'..string.gsub(subcategory, ' Images', '')..'s'
					elseif subcategory == 'Editor-in-Chief'
						then category = 'Marvel Staff/Editors-in-Chief'
				end
		end
		return output, category
	end
	local i
	local n
	local category
	local value
	local title_categories = {}
	local image_categories = {}
	local titles = {
		{'Creator', 'subject(s) created by', ''},
		{'Editor-in-Chief', 'work(s) that were produced while', 'was Editor-in-Chief'},
		{'Cover Artist', 'work(s) where', 'worked on a cover'},
		{'Editor', 'work(s) that', 'edited'},
		{'Writer', 'work(s) that', 'wrote'},
		{'Penciler', 'work(s) that', 'penciled'},
		{'Inker', 'work(s) that', 'inked'},
		{'Colorist', 'work(s) that', 'colored'},
		{'Letterer', 'work(s) that', 'lettered'},
		{'Director', 'work(s) that', 'directed'},
		{'Producer', 'work(s) that', 'worked as Producer'},

	}
	local images = {
		{'Cover Artist Images', 'cover(s)', 'worked on'},
		{'Penciler Images', 'image(s)', 'worked on as penciler'},
		{'Inker Images', 'image(s)', 'worked on as inker'},
		{'Colorist Images', 'image(s)', 'worked on as colorist'},
		{'Letterer Images', 'image(s)', 'worked on as letterer'},
	}
	local output_categories = {}
	local output = ''

	for i = 1, #list_of_names do
		for j = 1, #titles do
			value, category = add_link(list_of_names[i], 'pages', titles[j][1], titles[j][2], titles[j][3])
			table.insert(title_categories, value)
			table.insert(output_categories, category)
		end
		for j = 1, #images do
			value, category = add_link(list_of_names[i], 'files', images[j][1], images[j][2], images[j][3])
			table.insert(image_categories, value)
			table.insert(output_categories, category)
		end	
	end
	
	if table.concat(title_categories) == '' and table.concat(image_categories) == ''
		then table.insert(output_categories, 'Staff Articles with no Subcategories')
	end

	title_categories = design.add_section('Work History', mw.text.listToText(title_categories, '', ''), 2)
	image_categories = design.add_section('Images', mw.text.listToText(image_categories, '', ''), 2)

	output = title_categories..image_categories
	
	return output, output_categories
end


--------------------------------------------------------------------------------------------------
-- DPL query to check if any subcategories (for example, 'Stan Lee/Penciler') exists at all
function p.lua_dpl_list(name)
	local output = '{{#dpl:'
	output = output..'|titlematch      = '..name..'/%'
	output = output..'|namespace       = Category'
	output = output..'|noresultsheader = no_result}}'
	return output
end

--------------------------------------------------------------------------------------------------
function p.top_message(frame)
	local function add_message(name)
		local message = 'For fictional versions of '..name..' as a character within comic books or other media,<br>visit '..h.Link(name..'  (Disambiguation)', 'this disambiguation page')..'.'
		return design.messagebox({message})
	end
	local args = getArgs(frame)
	local pagename = mw.title.getCurrentTitle().text
	local output = ''

	if h.exists(pagename..' (Disambiguation)')
		then output = add_message(pagename)
		elseif not h.isempty(args.Title) or not h.isempty(args.Name)
			then
				if not h.isempty(args.Title)
					then value = h.break_link(args.Title, 1)
					else value = h.break_link(args.Name, 1)
				end
				value = string.gsub(value, ' (Disambiguation)', '')
				if h.exists(value..' (Disambiguation)')
					then output = add_message(value)
				end
	end

	return output
end


--------------------------------------------------------------------------------------------------
function p.get_name(frame)
	local args = getArgs(frame)
	local pagename = mw.title.getCurrentTitle().text
	local value = args.Name
	local output = ''

	if not h.isempty(value)
		then
			output = value
			if value ~= pagename
				then output = output..h.Category('Mismatched Staff Names')
			end
		else
			output = pagename
	end
	
	return output
end


--------------------------------------------------------------------------------------------------
function p.get_gender(frame)
	local args = getArgs(frame)
	local value = args.Gender
	local category = value..' Staff Members'
	local output = h.LinkToCategory(category, value)
	return output..h.Category(category)
end


--------------------------------------------------------------------------------------------------
function p.get_date_of_birth(frame)
	local args = getArgs(frame)
	local value = args.DateOfBirth
	local year = ''
	local month = ''
	local day = ''
	local output_categories = {}
	local output = ''

	if not h.isempty(value)
		then
			month, day, year = string.match(value, '(%D+) (%d+), (%d%d%d%d)')
			if month == nil
				then
					month, year = string.match(value, '(%D+), (%d%d%d%d)')
					if month == nil
						then
							year = string.match(value, '(%d%d%d%d)')
							if year ~= nil
								then 
									category = 'Born in '..year
									output = h.LinkToCategory(category, year)
									table.insert(output_categories, category)
									table.insert(output_categories, 'Incomplete Date of Birth')
								else
									output = value
									month, day = string.match(value, '(%D+) (%d+)')
									if month ~= nil
										then table.insert(output_categories, 'Incomplete Date of Birth')
										else table.insert(output_categories, 'Wrong Date Format')
									end
							end
						else
							category = 'Born in '..year
							table.insert(output_categories, 'Born in '..year)
							table.insert(output_categories, 'Born in '..year..', '..month)
							table.insert(output_categories, 'Incomplete Date of Birth')
							output = h.LinkToCategory(category..', '..month, month)..', '..h.LinkToCategory(category, year)
					end
				else
					category = 'Born in '..year
					table.insert(output_categories, 'Born in '..year)
					table.insert(output_categories, 'Born in '..year..', '..month)
					output = h.LinkToCategory(category..', '..month, month..' '..day)..', '..h.LinkToCategory(category, year)
			end
		else
			category = 'Staff DOB Needed'
			output = h.LinkToCategory(category, 'Unknown')
			table.insert(output_categories, category)
	end

	return output..h.add_categories(output_categories)
end
	

--------------------------------------------------------------------------------------------------
function p.get_date_of_death(frame)
	local args = getArgs(frame)
	local value = args.DateOfDeath
	local output_categories = {}
	local output = ''

	if h.isempty(value)
		then table.insert(output_categories, 'Living Staff Members')
		else
			output = value
			table.insert(output_categories, 'Deceased Staff Members')
			value = string.match(value, '(%d%d%d%d)')
			if not h.isempty(value)
				then table.insert(output_categories, 'Died in '..value)
				else table.insert(output_categories, 'Wrong Date Format')
			end
	end

	return output..h.add_categories(output_categories)
end


--------------------------------------------------------------------------------------------------
function p.get_place_of_birth(frame)
	local args = getArgs(frame)
	local country = args.CountryOfBirth
	local state = args.StateOfBirth
	local city = args.CityOfBirth
	local category = ''
	local output_categories = {}
	local output = ''

	if not h.isempty(country)
		then
			country = h.break_link(country, 1)
			category = 'Staff Members Born in '..country
			if country == 'United States of America'
				then country = 'USA'
			end
			output = h.LinkToCategory(category, country)
			table.insert(output_categories, category)
			if not h.isempty(state) 
				then output = output..', '..state
			end
			if not h.isempty(city) 
				then output = output..', '..city
			end
	end

	return output..h.add_categories(output_categories)
end


--------------------------------------------------------------------------------------------------
function p.get_titles(frame)
	local args = getArgs(frame)
	local list = h.explode(';', args.Titles)
	local i
	local value
	local category
	local output_categories = {}
	local output = {}

	for i = 1, #list do
		value, category = p.lue_get_titles( h.trim(list[i]) )
		table.insert(output_categories, category)
		table.insert(output, value)
	end
	output = mw.text.listToText(output, ', ', ', ')

	return output..h.add_categories(output_categories)
end


function p.lue_get_titles(value)
	local category = ''
	local value_lower = string.lower(value)
	local first_upper = string.upper( string.sub(value, 1, 1) )..string.sub(value_lower, 2, #value_lower)
	local output = value
	
	if h.in_list({'editor in chief', 'editor-in-chief'}, value_lower)
		then 
			category = 'Marvel Staff/Editors-in-Chief'
			output = h.LinkToCategory(category, 'Editor-in-Chief')
		elseif value_lower == 'cover artist'
			then
				category = 'Marvel Staff/Cover Artists'
				output = h.LinkToCategory(category, 'Cover Artist')
		elseif h.in_list({'designer', 'producer', 'production'}, value_lower)
			then
				category = 'Marvel Staff/Producers'
				output = h.LinkToCategory(category, first_upper)
		elseif h.in_list({'colorist', 'colourist'}, value_lower)
			then
				category = 'Marvel Staff/Colorists'
				output = h.LinkToCategory(category, 'Colorist')
		elseif h.in_list({'director', 'editor', 'inker', 'letterer', 'penciler', 'writer'}, value_lower)
			then
				category = 'Marvel Staff/'..first_upper..'s'
				output = h.LinkToCategory(category, first_upper)
	end
	
	return output, category
end


return p