Module:Param Parse: Difference between revisions

Fix image function bug for nil images
No edit summary
(Fix image function bug for nil images)
 
(34 intermediate revisions by 4 users not shown)
Line 3:
--]=]
-- <nowiki>
local Infobox = require('Module:Infobox')
 
local paramparse = {}
 
-- Generic functions --
-----------------------
 
-- Standardized "namehas content" function
function paramparse.namehas_content(arg)
-- Return arg if any non-whitespace character is found
return string.match(arg or '', '%S') and arg or nil
end
 
-- Standardized numbers
function parse.number(num)
num = string.gsub(num or '',',','')
return tonumber(num)
end
 
-- Yes/No
-- Standardized "has content" function
local yes_no = {
function param.has_content(arg, default)
['Yes'] = 'true',
-- Return arg if any non-whitespace character is found
['No'] = 'false',
return string.match(arg or '', '%S') and arg or default
['N/A'] = 'NIL',
}
function parse.yes_no(text)
if yes_no[text] ~= nil then
return text
end
return nil
end
function parse.yes_no_smw(text)
if text == 'N/A' then
return nil
end
local bool = yes_no[text]
if bool ~= nil then
return bool
end
return nil
end
 
-- Premade Params --
--------------------
 
-- Standardized name function
-- Create a standardized release function, since so many pages use it
parse.name = {
-- Turns release and update into a single parameter
name = 'name',
function param.release_update(release, update)
func = parse.has_content,
if not Infobox.isDefined(release) then
smw_property = 'Name',
return nil
category_incomplete = 'Needs name',
}
-- Standardized examine function
parse.examine = {
name = 'examine',
func = parse.has_content,
smw_property = 'Examine',
category_incomplete = 'Needs examine',
}
 
-- Standardized image function
function parse.image_name(img)
if img then
return string.match(img, '%[%[(File:.+%.%w%w%w)|?%d*x?%d*p?x?%]%]')
end
return nil
if string.lower(release) == 'no' then
end
return 'N/A'
function parse.image_height(img, default)
if img then
return string.match(img, '%[%[File:.+%.%w%w%w|%d*x(%d*)px%]%]') or default
end
return default
if not Infobox.isDefined(update) then
end
return string.format('%s (Update unknown)',release)
function parse.image_width(img, default)
if img then
return string.match(img, '%[%[File:.+%.%w%w%w|(%d*)x?%d*px%]%]') or default
end
return default
end
function parse.image_func(img, default_width, default_height)
local name = parse.image_name(img)
local width = parse.image_width(img, default_width)
local height = parse.image_height(img, default_height)
local size = ''
if width and height then
size = '|'..width..'x'..height..'px'
elseif width then
size = '|'..width..'px'
elseif height then
size = '|x'..height..'px'
end
if string.lower(update) == 'no'name then
return release'[['..name..size..']]'
end
return nil
return string.format('%s ([[Update:%s|Update]])', release, update)
end
function parse.image_smw(img)
return parse.image_name(img)
end
 
parse.image = {
name = 'image',
func = parse.image_func,
smw_property = 'Image',
smw_func = parse.image_smw,
empty = '[[Special:Upload|Please upload an image!]]',
category_incomplete = 'Needs image',
}
parse.image_size300 = {
name = 'image',
func = {name = parse.image_func, params = {Infobox.raw_param('image'), 300, 300}},
smw_property = 'Image',
smw_func = parse.image_smw,
empty = '[[Special:Upload|Please upload an image!]]',
category_incomplete = 'Needs image',
}
 
 
-- Standardized image function
-- Episode
function param.image(img)
local valid_episodes = {
if img and img:find('%S') then
['hopeport'] = 'Hopeport',
return img
['hopeforest'] = 'Hopeforest',
else
['mine of mantuban'] = 'Mine of Mantuban',
return nil
['crenopolis'] = 'Crenopolis'
}
function parse.episode_func(episode)
local valid_episode = valid_episodes[string.lower(episode or '')]
if valid_episode then
return '[[File:'..valid_episode..' episode icon.png|18px]] [['..valid_episode..']]'
end
return nil
end
function parse.episode_smw(episode)
local valid_episode = valid_episodes[string.lower(episode or '')]
if valid_episode then
return valid_episode
end
return nil
end
parse.episode = {
name = 'episode',
func = parse.episode_func,
smw_property = 'Episode',
smw_func = parse.episode_smw,
category_incomplete = 'Needs episode',
}
 
-- Premium
parse.premium = {
name = 'premium',
func = parse.yes_no,
smw_property = 'Premium',
smw_func = parse.yes_no_smw,
category_incomplete = 'Needs premium status',
}
 
-- Release (TODO)
-- Strip the brackets from the param
parse.release = {
function param.image_smw(img)
name = 'release',
local _img = string.match(img, "File:.-%.png")
func = parse.has_content,
return _img
}
end
 
-- Profession (TODO)
parse.profession = {
name = 'profession',
func = parse.has_content,
category_incomplete = 'Needs profession',
smw_property = 'Profession' -- TODO - Need to create property page
}
 
parse.variant = {
-- Standardized numbers
name = 'variant',
function param.numbers(num)
func = parse.has_content,
num = string.gsub(num or '',',','')
category_incomplete = 'Needs variant details',
return tonumber(num)
smw_property = 'Variant of' -- TODO - Need to create property page
end
}
 
parse.passive = {
return param
name = 'passive',
func = parse.yes_no,
smw_property = 'Passive',
smw_func = parse.yes_no_smw,
category_incomplete = 'Needs passiveness'
}
 
return parse
-- </nowiki>