-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
✨ Added MUCH MORE options to the interface options menu
1 parent
c42a03e
commit 5e23e62
Showing
26 changed files
with
1,441 additions
and
30 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
<Bindings> | ||
<Binding name="TC_TOGGLE_FRAME" description="TodoChecklister binidings" header="TC_HEADER"> | ||
<Binding name="TC_TOGGLE_FRAME" description="TodoChecklister bindings" header="TC_HEADER" category="ADDONS"> | ||
GLOBAL_TodoChecklisterFrameToggle() | ||
</Binding> | ||
</Bindings> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
212 changes: 212 additions & 0 deletions
212
src/libs/LibDBIcon-1.0/CallbackHandler-1.0/CallbackHandler-1.0.lua
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,212 @@ | ||
--[[ $Id: CallbackHandler-1.0.lua 1186 2018-07-21 14:19:18Z nevcairiel $ ]] | ||
local MAJOR, MINOR = "CallbackHandler-1.0", 7 | ||
local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR) | ||
|
||
if not CallbackHandler then return end -- No upgrade needed | ||
|
||
local meta = {__index = function(tbl, key) tbl[key] = {} return tbl[key] end} | ||
|
||
-- Lua APIs | ||
local tconcat = table.concat | ||
local assert, error, loadstring = assert, error, loadstring | ||
local setmetatable, rawset, rawget = setmetatable, rawset, rawget | ||
local next, select, pairs, type, tostring = next, select, pairs, type, tostring | ||
|
||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded | ||
-- List them here for Mikk's FindGlobals script | ||
-- GLOBALS: geterrorhandler | ||
|
||
local xpcall = xpcall | ||
|
||
local function errorhandler(err) | ||
return geterrorhandler()(err) | ||
end | ||
|
||
local function Dispatch(handlers, ...) | ||
local index, method = next(handlers) | ||
if not method then return end | ||
repeat | ||
xpcall(method, errorhandler, ...) | ||
index, method = next(handlers, index) | ||
until not method | ||
end | ||
|
||
-------------------------------------------------------------------------- | ||
-- CallbackHandler:New | ||
-- | ||
-- target - target object to embed public APIs in | ||
-- RegisterName - name of the callback registration API, default "RegisterCallback" | ||
-- UnregisterName - name of the callback unregistration API, default "UnregisterCallback" | ||
-- UnregisterAllName - name of the API to unregister all callbacks, default "UnregisterAllCallbacks". false == don't publish this API. | ||
|
||
function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAllName) | ||
|
||
RegisterName = RegisterName or "RegisterCallback" | ||
UnregisterName = UnregisterName or "UnregisterCallback" | ||
if UnregisterAllName==nil then -- false is used to indicate "don't want this method" | ||
UnregisterAllName = "UnregisterAllCallbacks" | ||
end | ||
|
||
-- we declare all objects and exported APIs inside this closure to quickly gain access | ||
-- to e.g. function names, the "target" parameter, etc | ||
|
||
|
||
-- Create the registry object | ||
local events = setmetatable({}, meta) | ||
local registry = { recurse=0, events=events } | ||
|
||
-- registry:Fire() - fires the given event/message into the registry | ||
function registry:Fire(eventname, ...) | ||
if not rawget(events, eventname) or not next(events[eventname]) then return end | ||
local oldrecurse = registry.recurse | ||
registry.recurse = oldrecurse + 1 | ||
|
||
Dispatch(events[eventname], eventname, ...) | ||
|
||
registry.recurse = oldrecurse | ||
|
||
if registry.insertQueue and oldrecurse==0 then | ||
-- Something in one of our callbacks wanted to register more callbacks; they got queued | ||
for eventname,callbacks in pairs(registry.insertQueue) do | ||
local first = not rawget(events, eventname) or not next(events[eventname]) -- test for empty before. not test for one member after. that one member may have been overwritten. | ||
for self,func in pairs(callbacks) do | ||
events[eventname][self] = func | ||
-- fire OnUsed callback? | ||
if first and registry.OnUsed then | ||
registry.OnUsed(registry, target, eventname) | ||
first = nil | ||
end | ||
end | ||
end | ||
registry.insertQueue = nil | ||
end | ||
end | ||
|
||
-- Registration of a callback, handles: | ||
-- self["method"], leads to self["method"](self, ...) | ||
-- self with function ref, leads to functionref(...) | ||
-- "addonId" (instead of self) with function ref, leads to functionref(...) | ||
-- all with an optional arg, which, if present, gets passed as first argument (after self if present) | ||
target[RegisterName] = function(self, eventname, method, ... --[[actually just a single arg]]) | ||
if type(eventname) ~= "string" then | ||
error("Usage: "..RegisterName.."(eventname, method[, arg]): 'eventname' - string expected.", 2) | ||
end | ||
|
||
method = method or eventname | ||
|
||
local first = not rawget(events, eventname) or not next(events[eventname]) -- test for empty before. not test for one member after. that one member may have been overwritten. | ||
|
||
if type(method) ~= "string" and type(method) ~= "function" then | ||
error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): 'methodname' - string or function expected.", 2) | ||
end | ||
|
||
local regfunc | ||
|
||
if type(method) == "string" then | ||
-- self["method"] calling style | ||
if type(self) ~= "table" then | ||
error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): self was not a table?", 2) | ||
elseif self==target then | ||
error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): do not use Library:"..RegisterName.."(), use your own 'self'", 2) | ||
elseif type(self[method]) ~= "function" then | ||
error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): 'methodname' - method '"..tostring(method).."' not found on self.", 2) | ||
end | ||
|
||
if select("#",...)>=1 then -- this is not the same as testing for arg==nil! | ||
local arg=select(1,...) | ||
regfunc = function(...) self[method](self,arg,...) end | ||
else | ||
regfunc = function(...) self[method](self,...) end | ||
end | ||
else | ||
-- function ref with self=object or self="addonId" or self=thread | ||
if type(self)~="table" and type(self)~="string" and type(self)~="thread" then | ||
error("Usage: "..RegisterName.."(self or \"addonId\", eventname, method): 'self or addonId': table or string or thread expected.", 2) | ||
end | ||
|
||
if select("#",...)>=1 then -- this is not the same as testing for arg==nil! | ||
local arg=select(1,...) | ||
regfunc = function(...) method(arg,...) end | ||
else | ||
regfunc = method | ||
end | ||
end | ||
|
||
|
||
if events[eventname][self] or registry.recurse<1 then | ||
-- if registry.recurse<1 then | ||
-- we're overwriting an existing entry, or not currently recursing. just set it. | ||
events[eventname][self] = regfunc | ||
-- fire OnUsed callback? | ||
if registry.OnUsed and first then | ||
registry.OnUsed(registry, target, eventname) | ||
end | ||
else | ||
-- we're currently processing a callback in this registry, so delay the registration of this new entry! | ||
-- yes, we're a bit wasteful on garbage, but this is a fringe case, so we're picking low implementation overhead over garbage efficiency | ||
registry.insertQueue = registry.insertQueue or setmetatable({},meta) | ||
registry.insertQueue[eventname][self] = regfunc | ||
end | ||
end | ||
|
||
-- Unregister a callback | ||
target[UnregisterName] = function(self, eventname) | ||
if not self or self==target then | ||
error("Usage: "..UnregisterName.."(eventname): bad 'self'", 2) | ||
end | ||
if type(eventname) ~= "string" then | ||
error("Usage: "..UnregisterName.."(eventname): 'eventname' - string expected.", 2) | ||
end | ||
if rawget(events, eventname) and events[eventname][self] then | ||
events[eventname][self] = nil | ||
-- Fire OnUnused callback? | ||
if registry.OnUnused and not next(events[eventname]) then | ||
registry.OnUnused(registry, target, eventname) | ||
end | ||
end | ||
if registry.insertQueue and rawget(registry.insertQueue, eventname) and registry.insertQueue[eventname][self] then | ||
registry.insertQueue[eventname][self] = nil | ||
end | ||
end | ||
|
||
-- OPTIONAL: Unregister all callbacks for given selfs/addonIds | ||
if UnregisterAllName then | ||
target[UnregisterAllName] = function(...) | ||
if select("#",...)<1 then | ||
error("Usage: "..UnregisterAllName.."([whatFor]): missing 'self' or \"addonId\" to unregister events for.", 2) | ||
end | ||
if select("#",...)==1 and ...==target then | ||
error("Usage: "..UnregisterAllName.."([whatFor]): supply a meaningful 'self' or \"addonId\"", 2) | ||
end | ||
|
||
|
||
for i=1,select("#",...) do | ||
local self = select(i,...) | ||
if registry.insertQueue then | ||
for eventname, callbacks in pairs(registry.insertQueue) do | ||
if callbacks[self] then | ||
callbacks[self] = nil | ||
end | ||
end | ||
end | ||
for eventname, callbacks in pairs(events) do | ||
if callbacks[self] then | ||
callbacks[self] = nil | ||
-- Fire OnUnused callback? | ||
if registry.OnUnused and not next(callbacks) then | ||
registry.OnUnused(registry, target, eventname) | ||
end | ||
end | ||
end | ||
end | ||
end | ||
end | ||
|
||
return registry | ||
end | ||
|
||
|
||
-- CallbackHandler purposefully does NOT do explicit embedding. Nor does it | ||
-- try to upgrade old implicit embeds since the system is selfcontained and | ||
-- relies on closures to work. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
## Interface: 80200 | ||
## LoadOnDemand: 1 | ||
## Title: Lib: DataBrokerIcon-1.0 | ||
## Notes: Allows addons to easily create a lightweight minimap icon as an alternative to heavier LDB displays. | ||
## Author: Funkydude | ||
## X-Category: Library | ||
## X-License: GPLv2 or later | ||
## X-Credits: Rabbit, copystring | ||
|
||
embeds.xml | ||
LibDBIcon-1.0\lib.xml | ||
|
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ | ||
..\FrameXML\UI.xsd"> | ||
|
||
<Script file="LibDBIcon-1.0.lua"/> | ||
|
||
</Ui> | ||
|
90 changes: 90 additions & 0 deletions
90
src/libs/LibDBIcon-1.0/LibDataBroker-1.1/LibDataBroker-1.1.lua
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
|
||
assert(LibStub, "LibDataBroker-1.1 requires LibStub") | ||
assert(LibStub:GetLibrary("CallbackHandler-1.0", true), "LibDataBroker-1.1 requires CallbackHandler-1.0") | ||
|
||
local lib, oldminor = LibStub:NewLibrary("LibDataBroker-1.1", 4) | ||
if not lib then return end | ||
oldminor = oldminor or 0 | ||
|
||
|
||
lib.callbacks = lib.callbacks or LibStub:GetLibrary("CallbackHandler-1.0"):New(lib) | ||
lib.attributestorage, lib.namestorage, lib.proxystorage = lib.attributestorage or {}, lib.namestorage or {}, lib.proxystorage or {} | ||
local attributestorage, namestorage, callbacks = lib.attributestorage, lib.namestorage, lib.callbacks | ||
|
||
if oldminor < 2 then | ||
lib.domt = { | ||
__metatable = "access denied", | ||
__index = function(self, key) return attributestorage[self] and attributestorage[self][key] end, | ||
} | ||
end | ||
|
||
if oldminor < 3 then | ||
lib.domt.__newindex = function(self, key, value) | ||
if not attributestorage[self] then attributestorage[self] = {} end | ||
if attributestorage[self][key] == value then return end | ||
attributestorage[self][key] = value | ||
local name = namestorage[self] | ||
if not name then return end | ||
callbacks:Fire("LibDataBroker_AttributeChanged", name, key, value, self) | ||
callbacks:Fire("LibDataBroker_AttributeChanged_"..name, name, key, value, self) | ||
callbacks:Fire("LibDataBroker_AttributeChanged_"..name.."_"..key, name, key, value, self) | ||
callbacks:Fire("LibDataBroker_AttributeChanged__"..key, name, key, value, self) | ||
end | ||
end | ||
|
||
if oldminor < 2 then | ||
function lib:NewDataObject(name, dataobj) | ||
if self.proxystorage[name] then return end | ||
|
||
if dataobj then | ||
assert(type(dataobj) == "table", "Invalid dataobj, must be nil or a table") | ||
self.attributestorage[dataobj] = {} | ||
for i,v in pairs(dataobj) do | ||
self.attributestorage[dataobj][i] = v | ||
dataobj[i] = nil | ||
end | ||
end | ||
dataobj = setmetatable(dataobj or {}, self.domt) | ||
self.proxystorage[name], self.namestorage[dataobj] = dataobj, name | ||
self.callbacks:Fire("LibDataBroker_DataObjectCreated", name, dataobj) | ||
return dataobj | ||
end | ||
end | ||
|
||
if oldminor < 1 then | ||
function lib:DataObjectIterator() | ||
return pairs(self.proxystorage) | ||
end | ||
|
||
function lib:GetDataObjectByName(dataobjectname) | ||
return self.proxystorage[dataobjectname] | ||
end | ||
|
||
function lib:GetNameByDataObject(dataobject) | ||
return self.namestorage[dataobject] | ||
end | ||
end | ||
|
||
if oldminor < 4 then | ||
local next = pairs(attributestorage) | ||
function lib:pairs(dataobject_or_name) | ||
local t = type(dataobject_or_name) | ||
assert(t == "string" or t == "table", "Usage: ldb:pairs('dataobjectname') or ldb:pairs(dataobject)") | ||
|
||
local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name | ||
assert(attributestorage[dataobj], "Data object not found") | ||
|
||
return next, attributestorage[dataobj], nil | ||
end | ||
|
||
local ipairs_iter = ipairs(attributestorage) | ||
function lib:ipairs(dataobject_or_name) | ||
local t = type(dataobject_or_name) | ||
assert(t == "string" or t == "table", "Usage: ldb:ipairs('dataobjectname') or ldb:ipairs(dataobject)") | ||
|
||
local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name | ||
assert(attributestorage[dataobj], "Data object not found") | ||
|
||
return ipairs_iter, attributestorage[dataobj], 0 | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
-- $Id: LibStub.lua 76 2007-09-03 01:50:17Z mikk $ | ||
-- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/wiki/LibStub for more info | ||
-- LibStub is hereby placed in the Public Domain | ||
-- Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke | ||
local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2 -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS! | ||
local LibStub = _G[LIBSTUB_MAJOR] | ||
|
||
-- Check to see is this version of the stub is obsolete | ||
if not LibStub or LibStub.minor < LIBSTUB_MINOR then | ||
LibStub = LibStub or {libs = {}, minors = {} } | ||
_G[LIBSTUB_MAJOR] = LibStub | ||
LibStub.minor = LIBSTUB_MINOR | ||
|
||
-- LibStub:NewLibrary(major, minor) | ||
-- major (string) - the major version of the library | ||
-- minor (string or number ) - the minor version of the library | ||
-- | ||
-- returns nil if a newer or same version of the lib is already present | ||
-- returns empty library object or old library object if upgrade is needed | ||
function LibStub:NewLibrary(major, minor) | ||
assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)") | ||
minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.") | ||
|
||
local oldminor = self.minors[major] | ||
if oldminor and oldminor >= minor then return nil end | ||
self.minors[major], self.libs[major] = minor, self.libs[major] or {} | ||
return self.libs[major], oldminor | ||
end | ||
|
||
-- LibStub:GetLibrary(major, [silent]) | ||
-- major (string) - the major version of the library | ||
-- silent (boolean) - if true, library is optional, silently return nil if its not found | ||
-- | ||
-- throws an error if the library can not be found (except silent is set) | ||
-- returns the library object if found | ||
function LibStub:GetLibrary(major, silent) | ||
if not self.libs[major] and not silent then | ||
error(("Cannot find a library instance of %q."):format(tostring(major)), 2) | ||
end | ||
return self.libs[major], self.minors[major] | ||
end | ||
|
||
-- LibStub:IterateLibraries() | ||
-- | ||
-- Returns an iterator for the currently registered libraries | ||
function LibStub:IterateLibraries() | ||
return pairs(self.libs) | ||
end | ||
|
||
setmetatable(LibStub, { __call = LibStub.GetLibrary }) | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ | ||
..\FrameXML\UI.xsd"> | ||
|
||
<Script file="LibStub\LibStub.lua"/> | ||
<Script file="CallbackHandler-1.0\CallbackHandler-1.0.lua"/> | ||
<Script file="LibDataBroker-1.1\LibDataBroker-1.1.lua"/> | ||
|
||
</Ui> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
------------------------------------------------------------------------ | ||
r106 | kaelten | 2016-08-18 04:06:06 +0000 (Thu, 18 Aug 2016) | 1 line | ||
Changed paths: | ||
A /tags/1.0.2-70000 (from /trunk:105) | ||
|
||
Tagging as 1.0.2-70000 | ||
------------------------------------------------------------------------ | ||
r105 | kaelten | 2016-08-18 04:00:27 +0000 (Thu, 18 Aug 2016) | 2 lines | ||
Changed paths: | ||
M /trunk/LibStub.toc | ||
|
||
Updating ToC for Legion. | ||
|
||
------------------------------------------------------------------------ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
-- $Id: LibStub.lua 103 2014-10-16 03:02:50Z mikk $ | ||
-- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/addons/libstub/ for more info | ||
-- LibStub is hereby placed in the Public Domain | ||
-- Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke | ||
local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2 -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS! | ||
local LibStub = _G[LIBSTUB_MAJOR] | ||
|
||
-- Check to see is this version of the stub is obsolete | ||
if not LibStub or LibStub.minor < LIBSTUB_MINOR then | ||
LibStub = LibStub or {libs = {}, minors = {} } | ||
_G[LIBSTUB_MAJOR] = LibStub | ||
LibStub.minor = LIBSTUB_MINOR | ||
|
||
-- LibStub:NewLibrary(major, minor) | ||
-- major (string) - the major version of the library | ||
-- minor (string or number ) - the minor version of the library | ||
-- | ||
-- returns nil if a newer or same version of the lib is already present | ||
-- returns empty library object or old library object if upgrade is needed | ||
function LibStub:NewLibrary(major, minor) | ||
assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)") | ||
minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.") | ||
|
||
local oldminor = self.minors[major] | ||
if oldminor and oldminor >= minor then return nil end | ||
self.minors[major], self.libs[major] = minor, self.libs[major] or {} | ||
return self.libs[major], oldminor | ||
end | ||
|
||
-- LibStub:GetLibrary(major, [silent]) | ||
-- major (string) - the major version of the library | ||
-- silent (boolean) - if true, library is optional, silently return nil if its not found | ||
-- | ||
-- throws an error if the library can not be found (except silent is set) | ||
-- returns the library object if found | ||
function LibStub:GetLibrary(major, silent) | ||
if not self.libs[major] and not silent then | ||
error(("Cannot find a library instance of %q."):format(tostring(major)), 2) | ||
end | ||
return self.libs[major], self.minors[major] | ||
end | ||
|
||
-- LibStub:IterateLibraries() | ||
-- | ||
-- Returns an iterator for the currently registered libraries | ||
function LibStub:IterateLibraries() | ||
return pairs(self.libs) | ||
end | ||
|
||
setmetatable(LibStub, { __call = LibStub.GetLibrary }) | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
## Interface: 70000 | ||
## Title: Lib: LibStub | ||
## Notes: Universal Library Stub | ||
## Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel | ||
## X-Website: http://www.wowace.com/addons/libstub/ | ||
## X-Category: Library | ||
## X-License: Public Domain | ||
## X-Curse-Packaged-Version: 1.0.2-70000 | ||
## X-Curse-Project-Name: LibStub | ||
## X-Curse-Project-ID: libstub | ||
## X-Curse-Repository-ID: wow/libstub/mainline | ||
|
||
LibStub.lua |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
debugstack = debug.traceback | ||
strmatch = string.match | ||
|
||
loadfile("../LibStub.lua")() | ||
|
||
local lib, oldMinor = LibStub:NewLibrary("Pants", 1) -- make a new thingy | ||
assert(lib) -- should return the library table | ||
assert(not oldMinor) -- should not return the old minor, since it didn't exist | ||
|
||
-- the following is to create data and then be able to check if the same data exists after the fact | ||
function lib:MyMethod() | ||
end | ||
local MyMethod = lib.MyMethod | ||
lib.MyTable = {} | ||
local MyTable = lib.MyTable | ||
|
||
local newLib, newOldMinor = LibStub:NewLibrary("Pants", 1) -- try to register a library with the same version, should silently fail | ||
assert(not newLib) -- should not return since out of date | ||
|
||
local newLib, newOldMinor = LibStub:NewLibrary("Pants", 0) -- try to register a library with a previous, should silently fail | ||
assert(not newLib) -- should not return since out of date | ||
|
||
local newLib, newOldMinor = LibStub:NewLibrary("Pants", 2) -- register a new version | ||
assert(newLib) -- library table | ||
assert(rawequal(newLib, lib)) -- should be the same reference as the previous | ||
assert(newOldMinor == 1) -- should return the minor version of the previous version | ||
|
||
assert(rawequal(lib.MyMethod, MyMethod)) -- verify that values were saved | ||
assert(rawequal(lib.MyTable, MyTable)) -- verify that values were saved | ||
|
||
local newLib, newOldMinor = LibStub:NewLibrary("Pants", "Blah 3 Blah") -- register a new version with a string minor version (instead of a number) | ||
assert(newLib) -- library table | ||
assert(newOldMinor == 2) -- previous version was 2 | ||
|
||
local newLib, newOldMinor = LibStub:NewLibrary("Pants", "Blah 4 and please ignore 15 Blah") -- register a new version with a string minor version (instead of a number) | ||
assert(newLib) | ||
assert(newOldMinor == 3) -- previous version was 3 (even though it gave a string) | ||
|
||
local newLib, newOldMinor = LibStub:NewLibrary("Pants", 5) -- register a new library, using a normal number instead of a string | ||
assert(newLib) | ||
assert(newOldMinor == 4) -- previous version was 4 (even though it gave a string) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
debugstack = debug.traceback | ||
strmatch = string.match | ||
|
||
loadfile("../LibStub.lua")() | ||
|
||
for major, library in LibStub:IterateLibraries() do | ||
-- check that MyLib doesn't exist yet, by iterating through all the libraries | ||
assert(major ~= "MyLib") | ||
end | ||
|
||
assert(not LibStub:GetLibrary("MyLib", true)) -- check that MyLib doesn't exist yet by direct checking | ||
assert(not pcall(LibStub.GetLibrary, LibStub, "MyLib")) -- don't silently fail, thus it should raise an error. | ||
local lib = LibStub:NewLibrary("MyLib", 1) -- create the lib | ||
assert(lib) -- check it exists | ||
assert(rawequal(LibStub:GetLibrary("MyLib"), lib)) -- verify that :GetLibrary("MyLib") properly equals the lib reference | ||
|
||
assert(LibStub:NewLibrary("MyLib", 2)) -- create a new version | ||
|
||
local count=0 | ||
for major, library in LibStub:IterateLibraries() do | ||
-- check that MyLib exists somewhere in the libraries, by iterating through all the libraries | ||
if major == "MyLib" then -- we found it! | ||
count = count +1 | ||
assert(rawequal(library, lib)) -- verify that the references are equal | ||
end | ||
end | ||
assert(count == 1) -- verify that we actually found it, and only once |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
debugstack = debug.traceback | ||
strmatch = string.match | ||
|
||
loadfile("../LibStub.lua")() | ||
|
||
local proxy = newproxy() -- non-string | ||
|
||
assert(not pcall(LibStub.NewLibrary, LibStub, proxy, 1)) -- should error, proxy is not a string, it's userdata | ||
local success, ret = pcall(LibStub.GetLibrary, proxy, true) | ||
assert(not success or not ret) -- either error because proxy is not a string or because it's not actually registered. | ||
|
||
assert(not pcall(LibStub.NewLibrary, LibStub, "Something", "No number in here")) -- should error, minor has no string in it. | ||
|
||
assert(not LibStub:GetLibrary("Something", true)) -- shouldn't've created it from the above statement |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
debugstack = debug.traceback | ||
strmatch = string.match | ||
|
||
loadfile("../LibStub.lua")() | ||
|
||
|
||
-- Pretend like loaded libstub is old and doesn't have :IterateLibraries | ||
assert(LibStub.minor) | ||
LibStub.minor = LibStub.minor - 0.0001 | ||
LibStub.IterateLibraries = nil | ||
|
||
loadfile("../LibStub.lua")() | ||
|
||
assert(type(LibStub.IterateLibraries)=="function") | ||
|
||
|
||
-- Now pretend that we're the same version -- :IterateLibraries should NOT be re-created | ||
LibStub.IterateLibraries = 123 | ||
|
||
loadfile("../LibStub.lua")() | ||
|
||
assert(LibStub.IterateLibraries == 123) | ||
|
||
|
||
-- Now pretend that a newer version is loaded -- :IterateLibraries should NOT be re-created | ||
LibStub.minor = LibStub.minor + 0.0001 | ||
|
||
loadfile("../LibStub.lua")() | ||
|
||
assert(LibStub.IterateLibraries == 123) | ||
|
||
|
||
-- Again with a huge number | ||
LibStub.minor = LibStub.minor + 1234567890 | ||
|
||
loadfile("../LibStub.lua")() | ||
|
||
assert(LibStub.IterateLibraries == 123) | ||
|
||
|
||
print("OK") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
<Ui xmlns="http://www.blizzard.com/wow/ui/" | ||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ | ||
..\FrameXML\UI.xsd"> | ||
<Script file="LibStub\LibStub.lua"/> | ||
<Include file="LibDBIcon-1.0\embeds.xml"/> | ||
<Include file="LibDBIcon-1.0\lib.xml"/> | ||
</Ui> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters