Module:Color: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
No edit summary
 
(15 intermediate revisions by 2 users not shown)
Line 1: Line 1:
local utilsError = require("Module:UtilsError")
local p = {}
local h = {}
local data = mw.loadData("Module:Color/Data")
 
local utilsString = require("Module:UtilsString")
local utilsString = require("Module:UtilsString")


local Constants = mw.loadData("Module:Constants/Data")
local CAT_INVALID_ARGS = "[[Category:"..require("Module:Constants/category/invalidArgs").."]]"
local data = mw.loadData("Module:Color/Data")
local CAT_INVALID_COLOR = "[[Category:Articles using invalid color names]]"


local p = {}
function h.warn(msg)
local utilsError = require("Module:UtilsError")
utilsError.warn(msg)
end


local CAT_DEPRECATED_COLORS = "Category:Articles Using Deprecated Colors"
function h.invalidColor(colorId)
local TransclusionArguments = require("Module:Transclusion Arguments")
h.warn(string.format("<code>%s</code> is not a valid color name. See [[Template:Color]] for a list of supported colors.", colorId))
-- We only store invalid colors for performance reasons
-- Storing all template usages seems to break pages that use the template a lot
TransclusionArguments.store({
module = "Module:Color",
args = {
[1] = colorId,
[2] = text,
},
isValid = false,
})
end


function p.Main(frame)
function p.Main(frame)
Line 24: Line 43:
function p.color(colorId, text)
function p.color(colorId, text)
if text == nil or text == "" then
if text == nil or text == "" then
utilsError.warn("<code>text</code> parameter is required.")
h.warn("<code>text</code> parameter is required.")
return text or "", "[[Category:"..Constants.category.invalidArgs.."]]"
return text or "", CAT_INVALID_ARGS
end
end
if colorId == nil or colorId == "" then
if colorId == nil or colorId == "" then
utilsError.warn("<code>color</code> parameter is required.")
h.warn("<code>color</code> parameter is required.")
return text, "[[Category:"..Constants.category.invalidArgs.."]]"
return text, CAT_INVALID_ARGS
end
end
if string.find(colorId, "\n", 1, true) or string.find(colorId, "\r", 1, true) or utilsString.startsWith(colorId, " ") or utilsString.endsWith(colorId, " ") then
if string.find(colorId, "\n", 1, true) or string.find(colorId, "\r", 1, true) or utilsString.startsWith(colorId, " ") or utilsString.endsWith(colorId, " ") then
utilsError.warn("<code>color</code> argument contains invalid whitespace such as newlines or leading/trailing spaces.")
h.warn("<code>color</code> argument contains invalid whitespace such as newlines or leading/trailing spaces.")
return text, "[[Category:"..Constants.category.invalidArgs.."]]"
return text, CAT_INVALID_ARGS
end
end
local colorData = data.colors[colorId]
local colorData = data.colors[colorId]
if colorData == nil then
if colorData == nil then
utilsError.warn(string.format("<code>%s</code> is not a valid color name. See [[Template:Color]] for a list of supported colors.", colorId))
h.invalidColor(colorId)
return text, "[[Category:Articles Using Invalid Color Names]]"
return text, CAT_INVALID_COLOR
end
end
local colorValue = colorData.color
local colorValue = colorData.color
local html = mw.html.create("span")
local html = mw.html.create("span")
:addClass("colored-text")
:addClass("zw-color")
:wikitext(text)
:wikitext(text)
if utilsString.startsWith(colorValue, "linear-gradient") then
if utilsString.startsWith(colorValue, "linear-gradient") then
Line 65: Line 84:
action = "See [[Template:Color]] for a list of supported colors."
action = "See [[Template:Color]] for a list of supported colors."
end
end
utilsError.warn(string.format("Color <code>%s</code> is being discontinued. %s", colorId, action))
h.warn(string.format("Color <code>%s</code> is being discontinued. %s", colorId, action))
return result, "[["..CAT_DEPRECATED_COLORS.."]]"
return result, CAT_INVALID_COLOR
end
end
return result
return result
Line 92: Line 111:
}
}
}
}
local games = game and {game} or Franchise.enum({includeCompilations = true})
local games = game and {game} or Franchise.enum({includeNonfiction = true})
local listAllGames = game == nil
local listAllGames = game == nil
local colorKeys = utilsTable.keys(data.colors)
local colorKeys = utilsTable.keys(data.colors)
Line 225: Line 244:
}
}


p.Schemas = {
function p.Schemas()
-- For auto-generated doc at Module:Color/Documentation
return {
color = {
-- For auto-generated doc at Module:Color/Documentation
colorName = {
color = {
type = "string",
colorName = {
required = true,
type = "string",
desc = "The name of a color from [[Module:Color/Data]]",
required = true,
desc = "The name of a color from [[Module:Color/Data]]",
},
text = {
type = "string",
required = true,
desc = "The text to color",
},
},
},
text = {
-- For auto-generated doc at Module:Color/Data/Documentation
type = "string",
Data = {
type = "record",
required = true,
required = true,
desc = "The text to color",
properties = {
},
{
},
name = "colors",
-- For auto-generated doc at Module:Color/Data/Documentation
required = true,
Data = {
type = "map",
type = "record",
keys = {
required = true,
type = "string",
properties = {
},
{
values = {
name = "colors",
type = "record",
required = true,
properties = {
type = "map",
{
keys = {
name = "color",
type = "string",
required = true,
},
type = "string",
values = {
desc = "A [https://developer.mozilla.org/en-US/docs/Web/CSS/hex-color hex color] (with preceding #) or a [https://developer.mozilla.org/en-US/docs/Web/CSS/gradient/linear-gradient linear-gradient].",
type = "record",
},
properties = {
{
{
name = "isDefault",
name = "color",
type = "boolean",
required = true,
desc = "Set this to <code>true</code> when the color is the game's default dialogue color. Used by [[Module:Cite]] to set the default text color for citations."
type = "string",
},
desc = "A [https://developer.mozilla.org/en-US/docs/Web/CSS/hex-color hex color] (with preceding #) or a [https://developer.mozilla.org/en-US/docs/Web/CSS/gradient/linear-gradient linear-gradient].",
{
},
name = "defaultFor",
{
type = "array",
name = "notes",
items = { type = "string" },
type = "string",
desc = "A list of wiki page names referring to the characters and/or interfaces whose text uses the color by default. Used by [[Module:Cite]] to set the default text color for citations."
desc = "Anything that editors should know about the color – the context in which it appears, other colors it could be confused with, etc.",
},
},
{
{
name = "notes",
name = "deprecated",
type = "string",
oneOf = {
desc = "Anything that editors should know about the color – the context in which it appears, other colors it could be confused with, etc.",
{
},
type = "string"
{
},
name = "deprecated",
{
oneOf = {
type = "boolean"
{
type = "string"
},
{
type = "boolean"
},
},
},
desc = "The name of the color that should be used instead of this color going forward. If multiple colors apply, just put <code>true</code>.",
},
},
desc = "The name of the color that should be used instead of this color going forward. If multiple colors apply, just put <code>true</code>. Pages using the deprecated color are added to [[:"..CAT_DEPRECATED_COLORS.."]]."
}
}
}
}
Line 282: Line 314:
}
}
}
}
}
end


p.Documentation = {
function p.Documentation()
color = {
return {
color = {
params = {"colorName", "text"},
params = {"colorName", "text"},
returns = {
returns = {
Line 294: Line 327:
{
{
args = {"TMC Blue", "guy in green tights"},
args = {"TMC Blue", "guy in green tights"},
expect = {'<span class="colored-text" style="color:#37acbe">guy in green tights</span>', nil},
expect = {'<span class="zw-color" style="color:#37acbe">guy in green tights</span>', nil},
},
},
{
{
args = {"notAColor", "foo"},
args = {"notAColor", "foo"},
expect = {"foo", "[[Category:Articles Using Invalid Color Names]]"},
expect = {"foo", "[[Category:Articles using invalid color names]]"},
},
},
},
},
},
},
}
}
end


return p
return p

Navigation menu