You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
3.3 KiB
127 lines
3.3 KiB
|
5 years ago
|
if not WeakAuras.IsCorrectVersion() then return end
|
||
|
|
local AddonName, OptionsPrivate = ...
|
||
|
|
|
||
|
|
-- Lua APIs
|
||
|
|
local pairs = pairs
|
||
|
|
|
||
|
|
-- WoW APIs
|
||
|
|
local CreateFrame = CreateFrame
|
||
|
|
|
||
|
|
local AceGUI = LibStub("AceGUI-3.0")
|
||
|
|
local SharedMedia = LibStub("LibSharedMedia-3.0")
|
||
|
|
local IndentationLib = IndentationLib
|
||
|
|
|
||
|
|
local WeakAuras = WeakAuras
|
||
|
|
local L = WeakAuras.L
|
||
|
|
|
||
|
|
local codeReview
|
||
|
|
|
||
|
|
local tableColor = "|c00ff3333"
|
||
|
|
local arithmeticColor = "|c00ff3333"
|
||
|
|
local relationColor = "|c00ff3333"
|
||
|
|
local logicColor = "|c004444ff"
|
||
|
|
|
||
|
|
local colorScheme = {
|
||
|
|
[IndentationLib.tokens.TOKEN_SPECIAL] = "|c00ff3333",
|
||
|
|
[IndentationLib.tokens.TOKEN_KEYWORD] = "|c004444ff",
|
||
|
|
[IndentationLib.tokens.TOKEN_COMMENT_SHORT] = "|c0000aa00",
|
||
|
|
[IndentationLib.tokens.TOKEN_COMMENT_LONG] = "|c0000aa00",
|
||
|
|
[IndentationLib.tokens.TOKEN_NUMBER] = "|c00ff9900",
|
||
|
|
[IndentationLib.tokens.TOKEN_STRING] = "|c00999999",
|
||
|
|
-- ellipsis, curly braces, table access
|
||
|
|
["..."] = tableColor,
|
||
|
|
["{"] = tableColor,
|
||
|
|
["}"] = tableColor,
|
||
|
|
["["] = tableColor,
|
||
|
|
["]"] = tableColor,
|
||
|
|
-- arithmetic operators
|
||
|
|
["+"] = arithmeticColor,
|
||
|
|
["-"] = arithmeticColor,
|
||
|
|
["/"] = arithmeticColor,
|
||
|
|
["*"] = arithmeticColor,
|
||
|
|
[".."] = arithmeticColor,
|
||
|
|
-- relational operators
|
||
|
|
["=="] = relationColor,
|
||
|
|
["<"] = relationColor,
|
||
|
|
["<="] = relationColor,
|
||
|
|
[">"] = relationColor,
|
||
|
|
[">="] = relationColor,
|
||
|
|
["~="] = relationColor,
|
||
|
|
-- logical operators
|
||
|
|
["and"] = logicColor,
|
||
|
|
["or"] = logicColor,
|
||
|
|
["not"] = logicColor,
|
||
|
|
-- misc
|
||
|
|
[0] = "|r",
|
||
|
|
}
|
||
|
|
|
||
|
|
local function ConstructCodeReview(frame)
|
||
|
|
local group = AceGUI:Create("InlineGroup");
|
||
|
|
group.frame:SetParent(frame);
|
||
|
|
group.frame:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -17, 30);
|
||
|
|
group.frame:SetPoint("TOPLEFT", frame, "TOPLEFT", 17, -10);
|
||
|
|
group.frame:Hide();
|
||
|
|
group:SetLayout("flow");
|
||
|
|
|
||
|
|
local codeTree = AceGUI:Create("TreeGroup");
|
||
|
|
group.codeTree = codeTree;
|
||
|
|
group:SetLayout("fill");
|
||
|
|
group:AddChild(codeTree);
|
||
|
|
|
||
|
|
local codebox = AceGUI:Create("MultiLineEditBox");
|
||
|
|
codebox.frame:SetAllPoints(codeTree.content);
|
||
|
|
codebox.frame:SetFrameStrata("FULLSCREEN");
|
||
|
|
codebox:SetLabel("");
|
||
|
|
group:AddChild(codebox);
|
||
|
|
|
||
|
|
codebox.button:Hide();
|
||
|
|
IndentationLib.enable(codebox.editBox, colorScheme, 4);
|
||
|
|
local fontPath = SharedMedia:Fetch("font", "Fira Mono Medium");
|
||
|
|
if(fontPath) then
|
||
|
|
codebox.editBox:SetFont(fontPath, 12);
|
||
|
|
end
|
||
|
|
group.codebox = codebox;
|
||
|
|
|
||
|
|
codeTree:SetCallback("OnGroupSelected", function(self, event, value)
|
||
|
|
for _, v in pairs(group.data) do
|
||
|
|
if (v.value == value) then
|
||
|
|
codebox:SetText(v.code);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end);
|
||
|
|
|
||
|
|
local cancel = CreateFrame("Button", nil, group.frame, "UIPanelButtonTemplate");
|
||
|
|
cancel:SetScript("OnClick", function() group:Close() end);
|
||
|
|
cancel:SetPoint("bottomright", frame, "bottomright", -27, 11);
|
||
|
|
cancel:SetHeight(20);
|
||
|
|
cancel:SetWidth(100);
|
||
|
|
cancel:SetText(L["Okay"]);
|
||
|
|
|
||
|
|
function group.Open(self, data)
|
||
|
|
if frame.window == "codereview" then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local _, firstEntry = next(data)
|
||
|
|
self.data = data;
|
||
|
|
self.codeTree:SetTree(data);
|
||
|
|
self.codeTree:SelectByValue(firstEntry.value)
|
||
|
|
|
||
|
|
WeakAuras.ShowOptions();
|
||
|
|
frame.window = "codereview";
|
||
|
|
frame:UpdateFrameVisible()
|
||
|
|
end
|
||
|
|
|
||
|
|
function group.Close()
|
||
|
|
frame.window = "default";
|
||
|
|
frame:UpdateFrameVisible()
|
||
|
|
end
|
||
|
|
|
||
|
|
return group
|
||
|
|
end
|
||
|
|
|
||
|
|
function OptionsPrivate.CodeReview(frame)
|
||
|
|
codeReview = codeReview or ConstructCodeReview(frame)
|
||
|
|
return codeReview
|
||
|
|
end
|