initial commit
This commit is contained in:
73
LibTSM/Service/ItemLinked.lua
Normal file
73
LibTSM/Service/ItemLinked.lua
Normal file
@@ -0,0 +1,73 @@
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
-- TradeSkillMaster --
|
||||
-- https://tradeskillmaster.com --
|
||||
-- All Rights Reserved - Detailed license information included with addon. --
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
|
||||
--- ItemLinked Functions.
|
||||
-- @module ItemLinked
|
||||
|
||||
local _, TSM = ...
|
||||
local ItemLinked = TSM.Init("Service.ItemLinked")
|
||||
local Table = TSM.Include("Util.Table")
|
||||
local ItemInfo = TSM.Include("Service.ItemInfo")
|
||||
local private = {
|
||||
callbacks = {},
|
||||
priorityLookup = {}
|
||||
}
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Module Loading
|
||||
-- ============================================================================
|
||||
|
||||
ItemLinked:OnModuleLoad(function()
|
||||
local origHandleModifiedItemClick = HandleModifiedItemClick
|
||||
HandleModifiedItemClick = function(link)
|
||||
return private.ItemLinkedHook(origHandleModifiedItemClick, link)
|
||||
end
|
||||
local origChatEdit_InsertLink = ChatEdit_InsertLink
|
||||
ChatEdit_InsertLink = function(link)
|
||||
return private.ItemLinkedHook(origChatEdit_InsertLink, link)
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Module Functions
|
||||
-- ============================================================================
|
||||
|
||||
function ItemLinked.RegisterCallback(callback, priority)
|
||||
assert(type(callback) == "function")
|
||||
tinsert(private.callbacks, callback)
|
||||
private.priorityLookup[callback] = (priority or 0) + #private.callbacks * 0.01
|
||||
Table.SortWithValueLookup(private.callbacks, private.priorityLookup)
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Private Helper Functions
|
||||
-- ============================================================================
|
||||
|
||||
function private.ItemLinkedHook(origFunc, itemLink)
|
||||
local putIntoChat = origFunc(itemLink)
|
||||
if putIntoChat then
|
||||
return putIntoChat
|
||||
end
|
||||
local name = ItemInfo.GetName(itemLink)
|
||||
if not name or not private.HandleItemLinked(name, itemLink) then
|
||||
return putIntoChat
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
function private.HandleItemLinked(name, itemLink)
|
||||
for _, callback in ipairs(private.callbacks) do
|
||||
if callback(name, itemLink) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user