chore(libs): sync shared LibStub-registered libs to canonical highest
Bumps in this fork: - LibDualSpec-1.0 Brings these libs in line with the highest version any Exiles fork currently bundles, so LibStub resolution is predictable regardless of load order.
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
--[[
|
--[[
|
||||||
LibDualSpec-1.0 - Adds dual spec support to individual AceDB-3.0 databases
|
LibDualSpec-1.0 - Adds dual spec support to individual AceDB-3.0 databases
|
||||||
Copyright (C) 2009 Adirelle
|
Copyright (C) 2009-2012 Adirelle
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
@@ -31,22 +31,28 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local MAJOR, MINOR = "LibDualSpec-1.0", 4
|
local MAJOR, MINOR = "LibDualSpec-1.0", 12
|
||||||
assert(LibStub, MAJOR.." requires LibStub")
|
assert(LibStub, MAJOR.." requires LibStub")
|
||||||
local lib = LibStub:NewLibrary(MAJOR, MINOR)
|
local lib, minor = LibStub:NewLibrary(MAJOR, MINOR)
|
||||||
if not lib then return end
|
if not lib then return end
|
||||||
|
|
||||||
-- ----------------------------------------------------------------------------
|
-- ----------------------------------------------------------------------------
|
||||||
-- Library data
|
-- Library data
|
||||||
-- ----------------------------------------------------------------------------
|
-- ----------------------------------------------------------------------------
|
||||||
|
|
||||||
lib.talentGroup = lib.talentGroup or GetActiveTalentGroup()
|
|
||||||
lib.eventFrame = lib.eventFrame or CreateFrame("Frame")
|
lib.eventFrame = lib.eventFrame or CreateFrame("Frame")
|
||||||
|
|
||||||
lib.registry = lib.registry or {}
|
lib.registry = lib.registry or {}
|
||||||
lib.options = lib.options or {}
|
lib.options = lib.options or {}
|
||||||
lib.mixin = lib.mixin or {}
|
lib.mixin = lib.mixin or {}
|
||||||
|
|
||||||
|
-- Rename .talent* to .spec*
|
||||||
|
if minor and minor < 11 then
|
||||||
|
lib.specLoaded = lib.talentsLoaded
|
||||||
|
lib.specGroup = lib.talentGroup
|
||||||
|
lib.talentsLoaded, lib.talentGroup = nil, nil
|
||||||
|
end
|
||||||
|
|
||||||
-- ----------------------------------------------------------------------------
|
-- ----------------------------------------------------------------------------
|
||||||
-- Locals
|
-- Locals
|
||||||
-- ----------------------------------------------------------------------------
|
-- ----------------------------------------------------------------------------
|
||||||
@@ -59,6 +65,13 @@ local mixin = lib.mixin
|
|||||||
local AceDB3 = LibStub('AceDB-3.0', true)
|
local AceDB3 = LibStub('AceDB-3.0', true)
|
||||||
local AceDBOptions3 = LibStub('AceDBOptions-3.0', true)
|
local AceDBOptions3 = LibStub('AceDBOptions-3.0', true)
|
||||||
|
|
||||||
|
-- ----------------------------------------------------------------------------
|
||||||
|
-- MoP compatibility
|
||||||
|
-- ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
local GetActiveSpecGroup = GetActiveSpecGroup or GetActiveTalentGroup
|
||||||
|
local GetNumSpecGroups = GetNumSpecGroups or GetNumTalentGroups
|
||||||
|
|
||||||
-- ----------------------------------------------------------------------------
|
-- ----------------------------------------------------------------------------
|
||||||
-- Localization
|
-- Localization
|
||||||
-- ----------------------------------------------------------------------------
|
-- ----------------------------------------------------------------------------
|
||||||
@@ -76,37 +89,47 @@ do
|
|||||||
|
|
||||||
local locale = GetLocale()
|
local locale = GetLocale()
|
||||||
if locale == "frFR" then
|
if locale == "frFR" then
|
||||||
L_DUALSPEC_DESC = "Lorsqu'elle est activée, cette fonctionnalité vous permet "..
|
L_DUALSPEC_DESC = "Lorsqu'elle est activée, cette fonctionnalité vous permet de choisir un profil différent pour chaque spécialisation de talents. Le second profil sera échangé avec le profil courant chaque fois que vous passerez d'une spécialisation à l'autre."
|
||||||
"de choisir un profil différent pour chaque spécialisation de talents. "..
|
L_DUAL_PROFILE = "Second profil"
|
||||||
"Le second profil sera échangé avec le profil courant chaque fois que vous "..
|
L_DUAL_PROFILE_DESC = "Sélectionnez le profil à échanger avec le profil courant lors du changement de spécialisation."
|
||||||
"passerez d'une spécialisation à l'autre."
|
L_ENABLED = "Activez le second profil"
|
||||||
L_ENABLED = 'Activez le second profil'
|
L_ENABLED_DESC = "Cochez cette case pour échanger automatiquement les profils lors d'un changement de spécialisation."
|
||||||
L_ENABLED_DESC = "Cochez cette case pour échanger automatiquement les profils "..
|
|
||||||
"lors d'un changement de spécialisation."
|
|
||||||
L_DUAL_PROFILE = 'Second profil'
|
|
||||||
L_DUAL_PROFILE_DESC = "Sélectionnez le profil à échanger avec le profil courant "..
|
|
||||||
"lors du changement de spécialisation."
|
|
||||||
elseif locale == "deDE" then
|
elseif locale == "deDE" then
|
||||||
|
L_DUALSPEC_DESC = "Wenn aktiv, wechselt dieses Feature bei jedem Wechsel der dualen Talentspezialisierung das Profil. Das duale Profil wird beim Wechsel automatisch mit dem derzeit aktiven Profil getauscht."
|
||||||
L_DUAL_PROFILE = "Duales Profil"
|
L_DUAL_PROFILE = "Duales Profil"
|
||||||
L_DUAL_PROFILE_DESC = "W\195\164hle das Profil, das beim Wechsel der Talente aktiviert wird."
|
L_DUAL_PROFILE_DESC = "Wähle das Profil, das beim Wechsel der Talente aktiviert wird."
|
||||||
L_DUALSPEC_DESC = "Wenn aktiv, wechselt dieses Feature bei jedem Wechsel "..
|
|
||||||
"der dualen Talentspezialisierung das Profil. Das duale Profil wird beim "..
|
|
||||||
"Wechsel automatisch mit dem derzeit aktiven Profil getauscht."
|
|
||||||
L_ENABLED = "Aktiviere Duale Profile"
|
L_ENABLED = "Aktiviere Duale Profile"
|
||||||
L_ENABLED_DESC = "Aktiviere diese Option, um beim Talentwechsel automatisch "..
|
L_ENABLED_DESC = "Aktiviere diese Option, um beim Talentwechsel automatisch zwischen den Profilen zu wechseln."
|
||||||
"zwischen den Profilen zu wechseln."
|
elseif locale == "koKR" then
|
||||||
|
L_DUALSPEC_DESC = "이중 특성에 의하여 다른 프로필을 선택할 수 있게 합니다. 이중 프로필은 현재 프로필과 번갈아서 특성이 변경될 때 같이 적용됩니다."
|
||||||
|
L_DUAL_PROFILE = "이중 프로필"
|
||||||
|
L_DUAL_PROFILE_DESC = "특성이 바뀔 때 프로필을 선택합니다."
|
||||||
|
L_ENABLED = "이중 프로필 사용"
|
||||||
|
L_ENABLED_DESC = "특성이 변경 될때 자동으로 프로필을 변경하도록 선택합니다."
|
||||||
|
elseif locale == "ruRU" then
|
||||||
|
L_DUALSPEC_DESC = "Двойной профиль позволяет вам выбрать различные профили для каждой раскладки талантов. Профили будут переключаться каждый раз, когда вы переключаете раскладку талантов."
|
||||||
|
L_DUAL_PROFILE = "Второй профиль"
|
||||||
|
L_DUAL_PROFILE_DESC = "Выберите профиль, который необходимо активировать при переключениии талантов."
|
||||||
|
L_ENABLED = "Включить двойной профиль"
|
||||||
|
L_ENABLED_DESC = "Включите эту опцию для автоматического переключения между профилями при переключении раскладки талантов."
|
||||||
elseif locale == "zhCN" then
|
elseif locale == "zhCN" then
|
||||||
|
L_DUALSPEC_DESC = "启时,你可以为你的双天赋设定另一组配置文件,你的双重配置文件将在你转换天赋时自动与目前使用配置文件交换。"
|
||||||
L_DUAL_PROFILE = "双重配置文件"
|
L_DUAL_PROFILE = "双重配置文件"
|
||||||
L_DUAL_PROFILE_DESC = "选择转换天赋时所要使用的配置文件"
|
L_DUAL_PROFILE_DESC = "选择转换天赋时所要使用的配置文件"
|
||||||
L_DUALSPEC_DESC = "启时,你可以为你的双天赋设定另一组配置文件,你的双重配置文件将在你转换天赋时自动与目前使用配置文件交换。"
|
|
||||||
L_ENABLED = "开启双重配置文件"
|
L_ENABLED = "开启双重配置文件"
|
||||||
L_ENABLED_DESC = "勾选以便转换天赋时自动交换配置文件。"
|
L_ENABLED_DESC = "勾选以便转换天赋时自动交换配置文件。"
|
||||||
elseif locale == "zhTW" then
|
elseif locale == "zhTW" then
|
||||||
L_DUALSPEC_DESC = "啟用時,你可以為你的雙天賦設定另一組設定檔。你的雙設定檔將在你轉換天賦時自動與目前使用設定檔交換。"
|
L_DUALSPEC_DESC = "啟用時,你可以為你的雙天賦設定另一組設定檔。你的雙設定檔將在你轉換天賦時自動與目前使用設定檔交換。"
|
||||||
L_ENABLED = "啟用雙設定檔"
|
|
||||||
L_ENABLED_DESC = "勾選以在轉換天賦時自動交換設定檔"
|
|
||||||
L_DUAL_PROFILE = "雙設定檔"
|
L_DUAL_PROFILE = "雙設定檔"
|
||||||
L_DUAL_PROFILE_DESC = "選擇轉換天賦後所要使用的設定檔"
|
L_DUAL_PROFILE_DESC = "選擇轉換天賦後所要使用的設定檔"
|
||||||
|
L_ENABLED = "啟用雙設定檔"
|
||||||
|
L_ENABLED_DESC = "勾選以在轉換天賦時自動交換設定檔"
|
||||||
|
elseif locale == "esES" then
|
||||||
|
L_DUALSPEC_DESC = "Si está activa, esta característica te permite seleccionar un perfil distinto para cada configuración de talentos. El perfil secundario será intercambiado por el activo cada vez que cambies de una configuración de talentos a otra."
|
||||||
|
L_DUAL_PROFILE = "Perfil secundario"
|
||||||
|
L_DUAL_PROFILE_DESC = "Elige el perfil secundario que se usará cuando cambies de talentos."
|
||||||
|
L_ENABLED = "Activar perfil secundario"
|
||||||
|
L_ENABLED_DESC = "Activa esta casilla para alternar automáticamente entre prefiles cuando cambies de talentos."
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -114,7 +137,7 @@ end
|
|||||||
-- Mixin
|
-- Mixin
|
||||||
-- ----------------------------------------------------------------------------
|
-- ----------------------------------------------------------------------------
|
||||||
|
|
||||||
--- Get dual spec feature status.
|
--- Get dual spec feature status.
|
||||||
-- @return (boolean) true is dual spec feature enabled.
|
-- @return (boolean) true is dual spec feature enabled.
|
||||||
-- @name enhancedDB:IsDualSpecEnabled
|
-- @name enhancedDB:IsDualSpecEnabled
|
||||||
function mixin:IsDualSpecEnabled()
|
function mixin:IsDualSpecEnabled()
|
||||||
@@ -126,10 +149,10 @@ end
|
|||||||
-- @name enhancedDB:SetDualSpecEnabled
|
-- @name enhancedDB:SetDualSpecEnabled
|
||||||
function mixin:SetDualSpecEnabled(enabled)
|
function mixin:SetDualSpecEnabled(enabled)
|
||||||
local db = registry[self].db
|
local db = registry[self].db
|
||||||
if enabled and not db.char.talentGroup then
|
if enabled and not db.char.specGroup then
|
||||||
db.char.talentGroup = lib.talentGroup
|
db.char.specGroup = lib.specGroup
|
||||||
db.char.profile = self:GetCurrentProfile()
|
db.char.profile = self:GetCurrentProfile()
|
||||||
db.char.enabled = true
|
db.char.enabled = true
|
||||||
else
|
else
|
||||||
db.char.enabled = enabled
|
db.char.enabled = enabled
|
||||||
self:CheckDualSpecState()
|
self:CheckDualSpecState()
|
||||||
@@ -146,7 +169,7 @@ end
|
|||||||
|
|
||||||
--- Set the alternate profile name.
|
--- Set the alternate profile name.
|
||||||
-- No validation are done to ensure the profile is valid.
|
-- No validation are done to ensure the profile is valid.
|
||||||
-- @param profileName (string) the profile name to use.
|
-- @param profileName (string) the profile name to use.
|
||||||
-- @name enhancedDB:SetDualSpecProfile
|
-- @name enhancedDB:SetDualSpecProfile
|
||||||
function mixin:SetDualSpecProfile(profileName)
|
function mixin:SetDualSpecProfile(profileName)
|
||||||
registry[self].db.char.profile = profileName
|
registry[self].db.char.profile = profileName
|
||||||
@@ -161,13 +184,13 @@ end
|
|||||||
-- @name enhancedDB:CheckDualSpecState
|
-- @name enhancedDB:CheckDualSpecState
|
||||||
function mixin:CheckDualSpecState()
|
function mixin:CheckDualSpecState()
|
||||||
local db = registry[self].db
|
local db = registry[self].db
|
||||||
if db.char.enabled and db.char.talentGroup ~= lib.talentGroup then
|
if lib.specLoaded and db.char.enabled and db.char.specGroup ~= lib.specGroup then
|
||||||
local currentProfile = self:GetCurrentProfile()
|
local currentProfile = self:GetCurrentProfile()
|
||||||
local newProfile = db.char.profile
|
local newProfile = db.char.profile
|
||||||
db.char.talentGroup = lib.talentGroup
|
db.char.specGroup = lib.specGroup
|
||||||
if newProfile ~= currentProfile then
|
if newProfile ~= currentProfile then
|
||||||
self:SetProfile(newProfile)
|
|
||||||
db.char.profile = currentProfile
|
db.char.profile = currentProfile
|
||||||
|
self:SetProfile(newProfile)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -187,6 +210,14 @@ for target in pairs(registry) do
|
|||||||
EmbedMixin(target)
|
EmbedMixin(target)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Actually enhance the database
|
||||||
|
-- This is used on first initialization and everytime the database is reset using :ResetDB
|
||||||
|
function lib:_EnhanceDatabase(event, target)
|
||||||
|
registry[target].db = target:GetNamespace(MAJOR, true) or target:RegisterNamespace(MAJOR)
|
||||||
|
EmbedMixin(target)
|
||||||
|
target:CheckDualSpecState()
|
||||||
|
end
|
||||||
|
|
||||||
--- Embed dual spec feature into an existing AceDB-3.0 database.
|
--- Embed dual spec feature into an existing AceDB-3.0 database.
|
||||||
-- LibDualSpec specific methods are added to the instance.
|
-- LibDualSpec specific methods are added to the instance.
|
||||||
-- @name LibDualSpec:EnhanceDatabase
|
-- @name LibDualSpec:EnhanceDatabase
|
||||||
@@ -205,10 +236,9 @@ function lib:EnhanceDatabase(target, name)
|
|||||||
elseif registry[target] then
|
elseif registry[target] then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local db = target:GetNamespace(MAJOR, true) or target:RegisterNamespace(MAJOR)
|
registry[target] = { name = name }
|
||||||
registry[target] = { name = name, db = db }
|
lib:_EnhanceDatabase("EnhanceDatabase", target)
|
||||||
EmbedMixin(target)
|
target.RegisterCallback(lib, "OnDatabaseReset", "_EnhanceDatabase")
|
||||||
target:CheckDualSpecState()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- ----------------------------------------------------------------------------
|
-- ----------------------------------------------------------------------------
|
||||||
@@ -216,7 +246,7 @@ end
|
|||||||
-- ----------------------------------------------------------------------------
|
-- ----------------------------------------------------------------------------
|
||||||
|
|
||||||
local function NoDualSpec()
|
local function NoDualSpec()
|
||||||
return GetNumTalentGroups() == 1
|
return GetNumSpecGroups() == 1
|
||||||
end
|
end
|
||||||
|
|
||||||
options.dualSpecDesc = {
|
options.dualSpecDesc = {
|
||||||
@@ -300,13 +330,27 @@ end
|
|||||||
-- ----------------------------------------------------------------------------
|
-- ----------------------------------------------------------------------------
|
||||||
|
|
||||||
lib.eventFrame:RegisterEvent('PLAYER_TALENT_UPDATE')
|
lib.eventFrame:RegisterEvent('PLAYER_TALENT_UPDATE')
|
||||||
lib.eventFrame:SetScript('OnEvent', function()
|
if not lib.specLoaded then
|
||||||
local newTalentGroup = GetActiveTalentGroup()
|
lib.eventFrame:RegisterEvent('ADDON_LOADED')
|
||||||
if lib.talentGroup ~= newTalentGroup then
|
end
|
||||||
lib.talentGroup = newTalentGroup
|
lib.eventFrame:SetScript('OnEvent', function(_, event)
|
||||||
|
-- Before the first PLAYER_TALENT_UPDATE, GetActiveSpecGroup() always returns 1.
|
||||||
|
-- However, when LDS is loaded on demand, we cannot afford to wait for a PLAYER_TALENT_UPDATE.
|
||||||
|
-- So we wait either for any PLAYER_TALENT_UPDATE or for an ADDON_LOADED when IsLoggedIn() yields true.
|
||||||
|
if event == 'ADDON_LOADED' and not IsLoggedIn() then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not lib.specLoaded then
|
||||||
|
lib.specLoaded = true
|
||||||
|
lib.eventFrame:UnregisterEvent('ADDON_LOADED')
|
||||||
|
end
|
||||||
|
local newSpecGroup = GetActiveSpecGroup()
|
||||||
|
if lib.specGroup ~= newSpecGroup then
|
||||||
|
lib.specGroup = newSpecGroup
|
||||||
for target in pairs(registry) do
|
for target in pairs(registry) do
|
||||||
target:CheckDualSpecState()
|
target:CheckDualSpecState()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
## Interface: 30300
|
|
||||||
## LoadOnDemand: 1
|
|
||||||
## Title: Lib: DualSpec-1.0
|
|
||||||
## Version: v1.3
|
|
||||||
## X-Date: @project-date@
|
|
||||||
## Notes: Adds dual spec support to individual AceDB-3.0 databases
|
|
||||||
## Author: Adirelle
|
|
||||||
## OptionalDeps: LibStub, Ace3
|
|
||||||
## X-Curse-Packaged-Version: v1.3
|
|
||||||
## X-Curse-Project-Name: LibDualSpec-1.0
|
|
||||||
## X-Curse-Project-ID: libdualspec-1-0
|
|
||||||
## X-Curse-Repository-ID: wow/libdualspec-1-0/mainline
|
|
||||||
|
|
||||||
LibStub.lua
|
|
||||||
LibDualSpec-1.0.lua
|
|
||||||
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
-- 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]
|
|
||||||
|
|
||||||
if not LibStub or LibStub.minor < LIBSTUB_MINOR then
|
|
||||||
LibStub = LibStub or {libs = {}, minors = {} }
|
|
||||||
_G[LIBSTUB_MAJOR] = LibStub
|
|
||||||
LibStub.minor = LIBSTUB_MINOR
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
function LibStub:IterateLibraries() return pairs(self.libs) end
|
|
||||||
setmetatable(LibStub, { __call = LibStub.GetLibrary })
|
|
||||||
end
|
|
||||||
Reference in New Issue
Block a user