From 9b0030421eb876b1037cd786b1fbfb6d05eb6917 Mon Sep 17 00:00:00 2001 From: Darth Predator Date: Sun, 9 Apr 2017 10:22:28 +0300 Subject: [PATCH] some tag stuff from sortokk --- ElvUI_SLE/libs/LibKitUITags-1.0/LibTitTags-1.0.lua | 78 ++++++++++++++++++ .../LibKituiConditions-1.0.lua | 87 ++++++++++++++++++++ ElvUI_SLE/libs/load_libs.xml | 2 +- 3 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 ElvUI_SLE/libs/LibKitUITags-1.0/LibTitTags-1.0.lua create mode 100644 ElvUI_SLE/libs/LibKituiConditions-1.0/LibKituiConditions-1.0.lua diff --git a/ElvUI_SLE/libs/LibKitUITags-1.0/LibTitTags-1.0.lua b/ElvUI_SLE/libs/LibKitUITags-1.0/LibTitTags-1.0.lua new file mode 100644 index 0000000..9679a30 --- /dev/null +++ b/ElvUI_SLE/libs/LibKitUITags-1.0/LibTitTags-1.0.lua @@ -0,0 +1,78 @@ +local MAJOR_VERSION = "LibKitUITags-1.0" +local MINOR_VERSION = 1 + +if not LibStub then error(MAJOR_VERSION .. " requires LibStub") end + +local KitLib, oldLib = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION) +if not KitLib then return end + +local pairs, ipairs = pairs, ipairs + +KitLib.registeredTags = {}; +KitLib.registeredEvents = {}; +KitLib.registeredTagStrings = {}; + +function KitLib:RegisterTag(tag, updateFunc, ...) + local events = { ... }; + KitLib.registeredTags[tag] = { updateFunc = updateFunc, events = events }; + for i, event in ipairs(events) do + if (not KitLib.registeredEvents[event]) then + KitLib.driverFrame:RegisterEvent(event); + KitLib.registeredEvents[event] = 0; + end + KitLib.registeredEvents[event] = KitLib.registeredEvents[event] + 1; + end +end + +function KitLib:UnregisterTag(tag) + if (not KitLib.registeredTags[tag]) then return end + local events = KitLib.registeredTags[tag].events; + for i, event in ipairs(events) do + KitLib.registeredEvents[event] = KitLib.registeredEvents[event] - 1; + if (KitLib.registeredEvents[event] == 0) then + KitLib.driverFrame:UnregisterEvent(event); + KitLib.registeredEvents[event] = nil; + end + end + KitLib.registeredTags[tag] = nil; +end + +function KitLib:RegisterFontString(key, fs) + if (not KitLib.registeredTagStrings[key]) then + KitLib.registeredTagStrings[key] = {}; + end + KitLib.registeredTagStrings[key].fs = fs; +end + +function KitLib:UnregisterFontString(key) + KitLib.registeredTagStrings[key] = nil; +end + +function KitLib:Tag(key, tagStr) + if (not KitLib.registeredTagStrings[key]) then return end + KitLib.registeredTagStrings[key].backingText = tagStr; + KitLib:UpdateTagStrings(); +end + +KitLib.driverFrame = CreateFrame("Frame"); +KitLib.driverFrame:SetScript("OnEvent", function(self, event, ...) + KitLib:UpdateTagStrings(); +end) + +local CurrentFS; +KitLib.tagDirector = {}; +setmetatable(KitLib.tagDirector, { + __index = function(table, key) + if (KitLib.registeredTags[key]) then + return KitLib.registeredTags[key].updateFunc(CurrentFS); + end + return nil; + end, +}); + +function KitLib:UpdateTagStrings(event) + for k, v in pairs(KitLib.registeredTagStrings) do + CurrentFS = v.fs; + v.fs:SetText(v.backingText:gsub('%[([^%]]+)%]', KitLib.tagDirector)); + end +end \ No newline at end of file diff --git a/ElvUI_SLE/libs/LibKituiConditions-1.0/LibKituiConditions-1.0.lua b/ElvUI_SLE/libs/LibKituiConditions-1.0/LibKituiConditions-1.0.lua new file mode 100644 index 0000000..21f1892 --- /dev/null +++ b/ElvUI_SLE/libs/LibKituiConditions-1.0/LibKituiConditions-1.0.lua @@ -0,0 +1,87 @@ +local MAJOR_VERSION = "LibKitUIConditions-1.0" +local MINOR_VERSION = 1 + +if not LibStub then error(MAJOR_VERSION .. " requires LibStub") end + +local KitLib, oldLib = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION) +if not KitLib then return end + +local unpack, tinsert, pairs = unpack, tinsert, pairs +local strsub, strlen = strsub, strlen + +KitLib.registeredConditions = {}; + +function KitLib:RegisterCondition(tag, numArguments, validationFunc) + if (self.registeredConditions[tag]) then return end + self.registeredConditions[tag] = { numArguments = numArguments, validationFunc = validationFunc }; + self.registeredConditions[tag].matchStr = self:BuildConditionMatch(tag); + self.registeredConditions[tag].negateMatchStr = strsub(self.registeredConditions[tag].matchStr,1,2) .. "no" .. strsub(self.registeredConditions[tag].matchStr,3,strlen(self.registeredConditions[tag].matchStr) - 2); +end + +function KitLib:UnregisterCondition(tag) + self.registeredConditions[tag] = nil; +end + +function KitLib:BuildConditionMatch(tag) + local info = self.registeredConditions[tag]; + if (not info) then return end + + local matchStr = "%["..tag; + if (info.numArguments > 0) then + for i = 1, info.numArguments do + local sep = ":"; + if (i > 1) then + sep = "/"; + end + matchStr = matchStr .. sep .. "([^/%]]+)"; + end + end + matchStr = matchStr .. "%]"; + return matchStr; +end + +function KitLib:EvaluateConditionString(conditionString) + for k, v in pairs(self.registeredConditions) do + if (conditionString:match(v.matchStr)) then + local args = { conditionString:match(v.matchStr) }; + if (not v.validationFunc(unpack(args))) then + return false; + end + elseif (conditionString:match(v.negateMatchStr)) then + local args = { conditionString:match(v.negateMatchStr) }; + if (v.validationFunc(unpack(args))) then + return false; + end + end + end + + return true; +end + +function KitLib:GetTagsFromConditionString(conditionString) + local tagsFound = {}; + for k, v in pairs(self.registeredConditions) do + if (conditionString:match(v.matchStr)) then + tinsert(tagsFound, k); + end + end + return tagsFound; +end + +-- function KTValidate(arg) + -- if (tonumber(arg) == 77) then + -- return true; + -- else + -- return false; + -- end +-- end + +-- function KitTest() + -- KitLib:RegisterCondition("test", 1, KTValidate); + -- assert(KitLib:EvaluateConditionString("[test:77]")); + -- assert(not KitLib:EvaluateConditionString("[notest:77]")); + -- assert(not KitLib:EvaluateConditionString("[test:82]")); + -- assert(KitLib:EvaluateConditionString("[notest:82]")); + -- print("All tests passed"); + -- KitLib:UnregisterCondition("test"); +-- end \ No newline at end of file diff --git a/ElvUI_SLE/libs/load_libs.xml b/ElvUI_SLE/libs/load_libs.xml index 5fcda03..b5a6472 100644 --- a/ElvUI_SLE/libs/load_libs.xml +++ b/ElvUI_SLE/libs/load_libs.xml @@ -1 +1 @@ -