from retail
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
if not WeakAuras.IsLibsOK() then return end
|
||||
local AddonName, Private = ...
|
||||
|
||||
local WeakAuras = WeakAuras
|
||||
local L = WeakAuras.L
|
||||
|
||||
local SubscribableObject =
|
||||
{
|
||||
ClearSubscribers = function(self)
|
||||
self.events = {}
|
||||
end,
|
||||
|
||||
ClearCallbacks = function(self)
|
||||
self.callbacks = {}
|
||||
end,
|
||||
|
||||
AddSubscriber = function(self, event, subscriber, highPriority)
|
||||
if not subscriber[event] then
|
||||
print("Can't register for ", event, " ", subscriber, subscriber.type)
|
||||
return
|
||||
end
|
||||
|
||||
self.events[event] = self.events[event] or {}
|
||||
local pos = highPriority and 1 or (#self.events[event] + 1)
|
||||
if TableHasAnyEntries(self.events[event]) then
|
||||
tinsert(self.events[event], pos, subscriber)
|
||||
else
|
||||
tinsert(self.events[event], pos, subscriber)
|
||||
if self.callbacks[event] then
|
||||
self.callbacks[event]()
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
RemoveSubscriber = function(self, event, subscriber)
|
||||
if self.events[event] then
|
||||
local index = tIndexOf(self.events[event], subscriber)
|
||||
if index then
|
||||
tremove(self.events[event], index)
|
||||
if not TableHasAnyEntries(self.events[event]) then
|
||||
if self.callbacks[event] then
|
||||
self.callbacks[event]()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
SetOnSubscriptionStatusChanged = function(self, event, cb)
|
||||
self.callbacks[event] = cb
|
||||
end,
|
||||
|
||||
Notify = function(self, event, ...)
|
||||
if self.events[event] then
|
||||
for _, subscriber in ipairs(self.events[event]) do
|
||||
subscriber[event](subscriber, ...)
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
HasSubscribers = function(self, event)
|
||||
return self.events[event] and TableHasAnyEntries(self.events[event])
|
||||
end
|
||||
}
|
||||
|
||||
function Private.CreateSubscribableObject()
|
||||
local system = {}
|
||||
for f, func in pairs(SubscribableObject) do
|
||||
system[f] = func
|
||||
system.events = {}
|
||||
system.callbacks = {}
|
||||
end
|
||||
return system
|
||||
end
|
||||
Reference in New Issue
Block a user