ESO Lua File v100012

libraries/zo_validnameinstructions/zo_validnameinstructions.lua

[◄ back to folders ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
ZO_ValidNameInstructions = ZO_Object:Subclass()
function ZO_ValidNameInstructions:New(...)
    local instructions = ZO_Object.New(self)
    instructions:Initialize(...)
    return instructions
end
function ZO_ValidNameInstructions:Initialize(control, template)
    self.m_control = control
    self.m_ruleToControl = {}
    self.m_template = template or "ZO_NameInstructionLine"
    self:AddInstruction(NAME_RULE_TOO_SHORT)
    self:AddInstruction(NAME_RULE_CANNOT_START_WITH_SPACE)
    self:AddInstruction(NAME_RULE_MUST_END_WITH_LETTER)
    self:AddInstruction(NAME_RULE_TOO_MANY_IDENTICAL_ADJACENT_CHARACTERS)
    self:AddInstruction(NAME_RULE_NO_NUMBERS)
    self:AddInstruction(NAME_RULE_NO_ADJACENT_PUNCTUATION_CHARACTERS)
    self:AddInstruction(NAME_RULE_TOO_MANY_PUNCTUATION_CHARACTERS)
    self:AddInstruction(NAME_RULE_INVALID_CHARACTERS)
end
function ZO_ValidNameInstructions:GetControl()
    return self.m_control
end
function ZO_ValidNameInstructions:AddInstruction(instructionEnum)
    self.instructionLineCounter = (self.instructionLineCounter or 0) + 1
    local instruction = CreateControlFromVirtual("$(parent)NameInstructionLine" .. instructionEnum .. self.instructionLineCounter, self.m_control, self.m_template)
    instruction:SetText(GetString("SI_NAMINGERROR", instructionEnum))
    instruction.m_rule = instructionEnum
    if(self.m_anchorTo) then
        instruction:SetAnchor(TOPLEFT, self.m_anchorTo, BOTTOMLEFT, 0, 15)
    else
        instruction:SetAnchor(TOP, self.m_control, TOP, 0, 10)
    end
    self.m_anchorTo = instruction
    self.m_ruleToControl[instructionEnum] = instruction
end
local function HasViolatedRule(rule, ruleViolations)
    for i = 1, #ruleViolations do
        if(rule == ruleViolations[i]) then
            return true
        end
    end
    return false
end
function ZO_ValidNameInstructions:UpdateViolations(ruleViolations)
    for rule, instructionLine in pairs(self.m_ruleToControl) do
        if(HasViolatedRule(rule, ruleViolations)) then
            instructionLine:SetColor(GetInterfaceColor(INTERFACE_COLOR_TYPE_TEXT_COLORS, INTERFACE_TEXT_COLOR_FAILED))
        else
            instructionLine:SetColor(GetInterfaceColor(INTERFACE_COLOR_TYPE_TEXT_COLORS, INTERFACE_TEXT_COLOR_NORMAL))
        end
    end
end
function ZO_ValidNameInstructions:SetPreferredAnchor(point, relativeTo, relativePoint, offsetX, offsetY)
    self.m_preferredAnchor = ZO_Anchor:New(point, relativeTo, relativePoint, offsetX, offsetY)
end
function ZO_ValidNameInstructions:Show(editControl, ruleViolations)
    if(self.m_preferredAnchor) then
        self.m_preferredAnchor:Set(self.m_control)
    elseif editControl then
        self.m_control:ClearAnchors()
        self.m_control:SetAnchor(TOPRIGHT, editControl, TOPLEFT, -50, 0)
    end
    self.m_control:SetHidden(false)
    self:UpdateViolations(ruleViolations)
end
function ZO_ValidNameInstructions:Hide()
    self.m_control:SetHidden(true)
end
local NAME_RULES_TABLE = nil
function ZO_ValidNameInstructions_GetViolationString(name, ruleViolations, hideUnviolatedRules, format)
    format = format or SI_INVALID_NAME_DIALOG_INSTRUCTION_FORMAT
    if(NAME_RULES_TABLE == nil) then
        NAME_RULES_TABLE = {}
        table.insert(NAME_RULES_TABLE, NAME_RULE_TOO_SHORT)
        table.insert(NAME_RULES_TABLE, NAME_RULE_CANNOT_START_WITH_SPACE)
        table.insert(NAME_RULES_TABLE, NAME_RULE_MUST_END_WITH_LETTER)
        table.insert(NAME_RULES_TABLE, NAME_RULE_TOO_MANY_IDENTICAL_ADJACENT_CHARACTERS)
        table.insert(NAME_RULES_TABLE, NAME_RULE_NO_NUMBERS)
        table.insert(NAME_RULES_TABLE, NAME_RULE_NO_ADJACENT_PUNCTUATION_CHARACTERS)
        table.insert(NAME_RULES_TABLE, NAME_RULE_TOO_MANY_PUNCTUATION_CHARACTERS)
        table.insert(NAME_RULES_TABLE, NAME_RULE_INVALID_CHARACTERS)
    end
    local invalidNameString = ""
    for i, instructionEnum in ipairs(NAME_RULES_TABLE) do
        local violatedRule = HasViolatedRule(instructionEnum, ruleViolations)
        if(violatedRule or hideUnviolatedRules ~= true) then
            local color = ZO_ColorDef:New(GetInterfaceColor(INTERFACE_COLOR_TYPE_TEXT_COLORS, INTERFACE_TEXT_COLOR_NORMAL))
            if(violatedRule) then
                color = ZO_ColorDef:New(GetInterfaceColor(INTERFACE_COLOR_TYPE_TEXT_COLORS, INTERFACE_TEXT_COLOR_FAILED))
            end
            local text = GetString("SI_NAMINGERROR", instructionEnum)
            local coloredText = color:Colorize(text)
            invalidNameString = invalidNameString .. zo_strformat(format, coloredText)
        end
    end
    return invalidNameString
end