You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.4 KiB
Lua
89 lines
2.4 KiB
Lua
local string = string
|
|
local table = table
|
|
local pairs = pairs
|
|
|
|
|
|
local message = {}
|
|
|
|
function message.build(context)
|
|
local messages = context.rule.messages
|
|
local mode = context.mode or "affirmative"
|
|
local template = context.template or "standard"
|
|
local parent = context.parent
|
|
local message = messages[mode][template]
|
|
|
|
if
|
|
context.message and
|
|
(not parent or (parent and not parent._message) or
|
|
(parent and parent._message and parent.message ~= context.message))
|
|
then
|
|
message = context.message
|
|
end
|
|
|
|
context.placeholder = context.placeholder or context.name or tostring(context.input)
|
|
|
|
if context.translator then
|
|
message = context.translator(message)
|
|
end
|
|
|
|
for property in string.gmatch(message, "{{(%a+)}}") do
|
|
message = string.gsub(message, "{{" .. property .. "}}", '"' .. tostring(context[property]) .. '"')
|
|
end
|
|
|
|
context._message = message
|
|
|
|
return message
|
|
end
|
|
|
|
function message.get_messages(context, level)
|
|
local messages = {}
|
|
|
|
while (#context.children == 1 and level > 1) do
|
|
context = context.children[1]
|
|
end
|
|
|
|
if (context.mode == "negative" or context.result == false) then
|
|
table.insert(messages, {level = level, content = message.build(context)})
|
|
end
|
|
|
|
for index = 1, #context.children do
|
|
local childConstraint = context.children[index]
|
|
local childLevel = (level + 1)
|
|
local childMessages = message.get_messages(childConstraint, childLevel)
|
|
for _, message in pairs(childMessages) do
|
|
table.insert(messages, message)
|
|
end
|
|
end
|
|
|
|
return messages
|
|
end
|
|
|
|
function message.new(context)
|
|
return {
|
|
get_full = function()
|
|
local messages = {}
|
|
for _, message in pairs(message.get_messages(context, 1)) do
|
|
local prefix = ""
|
|
|
|
if message.level > 1 then
|
|
prefix = string.rep(" ", (message.level - 1)) .. "- "
|
|
end
|
|
|
|
table.insert(messages, prefix .. message.content)
|
|
end
|
|
|
|
return table.concat(messages, "\n")
|
|
end,
|
|
get_single = function()
|
|
local current = context
|
|
while #current.children == 1 do
|
|
current = current.children[1]
|
|
end
|
|
|
|
return message.build(current)
|
|
end
|
|
}
|
|
end
|
|
|
|
return message
|