--[[
This file is part of ' Masque ' , an add - on for World of Warcraft . For bug reports ,
suggestions and license information , please visit https : // github.com / SFX - WoW / Masque .
* File ... : Core \ Callback.lua
* Author . : StormFX , JJSheets
Callback API
] ]
local _ , Core = ...
----------------------------------------
-- Lua API
---
local error , pairs , type = error , pairs , type
----------------------------------------
-- Locals
---
local Cache = { }
----------------------------------------
-- Callback
---
local Callback = {
-- Notifies an add-on of skin changes.
-- @ Core\Group: Group, SkinID, Backdrop, Shadow, Gloss, Colors, Disabled
Fire = function ( self , Addon , ... )
local args = Cache [ Addon ]
if args then
for arg , func in pairs ( args ) do
if arg then
func ( arg , ... )
else
func ( ... )
end
end
end
end ,
-- Registers an add-on to be notified of skin changes.
Register = function ( self , Addon , func , arg )
Cache [ Addon ] = Cache [ Addon ] or { }
Cache [ Addon ] [ arg ] = func
end ,
}
----------------------------------------
-- Core
---
Core.Callback = setmetatable ( Callback , { __call = Callback.Fire } )
----------------------------------------
-- API
---
-- Registers a callback at the add-on level.
function Core . API : Register ( Addon , func , arg )
if type ( Addon ) ~= " string " then
if Core.Debug then
error ( " Bad argument to API method 'Register'. 'Addon' must be a string. " , 2 )
end
return
elseif type ( func ) ~= " function " then
if Core.Debug then
error ( " Bad argument to API method 'Register'. 'func' must be a function. " , 2 )
end
return
elseif arg and type ( arg ) ~= " table " then
if Core.Debug then
error ( " Bad argument to API method 'Register'. 'arg' must be a table or nil. " , 2 )
end
return
end
Callback : Register ( Addon , func , arg or false )
local Warn = Core.db . profile.CB_Warn
if Warn [ Addon ] then
print ( " |cffff8800Masque Warning:|r " , Addon , " called the deprecated API method, '|cff0099ffRegister|r'. Please notify the author or post in the relevant issue on the Masque project page. " )
Warn [ Addon ] = false
end
end