diff --git a/ElvUI/Cata/Modules/Skins/EncounterJournal.lua b/ElvUI/Cata/Modules/Skins/EncounterJournal.lua
new file mode 100644
index 0000000000..3a1d99c4df
--- /dev/null
+++ b/ElvUI/Cata/Modules/Skins/EncounterJournal.lua
@@ -0,0 +1,444 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule('Skins')
+
+local _G = _G
+local unpack = unpack
+local select = select
+local ipairs = ipairs
+local next = next
+local rad = rad
+
+local CreateFrame = CreateFrame
+local GetItemInfo = GetItemInfo
+local hooksecurefunc = hooksecurefunc
+local GetItemQualityColor = GetItemQualityColor
+
+local lootQuality = {
+ ['loottab-set-itemborder-white'] = nil, -- dont show white
+ ['loottab-set-itemborder-green'] = 2,
+ ['loottab-set-itemborder-blue'] = 3,
+ ['loottab-set-itemborder-purple'] = 4,
+ ['loottab-set-itemborder-orange'] = 5,
+ ['loottab-set-itemborder-artifact'] = 6,
+}
+
+local function HandleButton(btn, strip, ...)
+ S:HandleButton(btn, strip, ...)
+
+ local str = btn:GetFontString()
+ if str then
+ str:SetTextColor(1, 1, 1)
+ end
+end
+
+local SkinOverviewInfo
+do -- this prevents a taint trying to force a color lock by setting it to E.noop
+ local LockColors = {}
+ local function LockValue(button, r, g, b)
+ local rr, gg, bb = unpack(E.media.rgbvaluecolor)
+ if r ~= rr or gg ~= g or b ~= bb then
+ button:SetTextColor(rr, gg, bb)
+ end
+ end
+
+ local function LockWhite(button, r, g, b)
+ if r ~= 1 or g ~= 1 or b ~= 1 then
+ button:SetTextColor(1, 1, 1)
+ end
+ end
+
+ local function LockColor(button, valuecolor)
+ if LockColors[button] then return end
+
+ hooksecurefunc(button, 'SetTextColor', (valuecolor and LockValue) or LockWhite)
+
+ LockColors[button] = true
+ end
+
+ SkinOverviewInfo = function(frame, _, index)
+ local header = frame.overviews[index]
+ if not header.isSkinned then
+ for i = 4, 18 do
+ select(i, header.button:GetRegions()):SetTexture()
+ end
+
+ HandleButton(header.button)
+
+ LockColor(header.button.title, true)
+ LockColor(header.button.expandedIcon)
+
+ header.descriptionBG:SetAlpha(0)
+ header.descriptionBGBottom:SetAlpha(0)
+ header.description:SetTextColor(1, 1, 1)
+
+ header.isSkinned = true
+ end
+ end
+end
+
+local function SkinOverviewInfoBullets(object)
+ local parent = object:GetParent()
+
+ if parent.Bullets then
+ for _, bullet in next, parent.Bullets do
+ if not bullet.IsSkinned then
+ bullet.Text:SetTextColor('P', 1, 1, 1)
+ bullet.IsSkinned = true
+ end
+ end
+ end
+end
+
+local function HandleTabs(tab)
+ local str = tab:GetFontString()
+ tab:StripTextures()
+ tab:SetText(tab.tooltip)
+ str:FontTemplate(nil, nil, 'SHADOW')
+ tab:SetTemplate()
+ tab:SetScript('OnEnter', E.noop)
+ tab:SetScript('OnLeave', E.noop)
+ tab:Size(str:GetStringWidth() * 1.5, 20)
+ tab.SetPoint = E.noop
+end
+
+local function SkinAbilitiesInfo()
+ local index = 1
+ local header = _G['EncounterJournalInfoHeader'..index]
+ while header do
+ if not header.isSkinned then
+ header.flashAnim.Play = E.noop
+
+ header.descriptionBG:SetAlpha(0)
+ header.descriptionBGBottom:SetAlpha(0)
+ for i = 4, 18 do
+ select(i, header.button:GetRegions()):SetTexture()
+ end
+
+ header.description:SetTextColor(1, 1, 1)
+ header.button.title:SetTextColor(unpack(E.media.rgbvaluecolor))
+ header.button.title.SetTextColor = E.noop
+ header.button.expandedIcon:SetTextColor(1, 1, 1)
+ header.button.expandedIcon.SetTextColor = E.noop
+
+ HandleButton(header.button)
+
+ header.button.bg = CreateFrame('Frame', nil, header.button)
+ header.button.bg:SetTemplate()
+ header.button.bg:SetOutside(header.button.abilityIcon)
+ header.button.bg:SetFrameLevel(header.button.bg:GetFrameLevel() - 1)
+ header.button.abilityIcon:SetTexCoord(.08, .92, .08, .92)
+
+ header.isSkinned = true
+ end
+
+ if header.button.abilityIcon:IsShown() then
+ header.button.bg:Show()
+ else
+ header.button.bg:Hide()
+ end
+
+ index = index + 1
+ header = _G['EncounterJournalInfoHeader'..index]
+ end
+end
+
+local function ItemSetsItemBorder(border, atlas)
+ local parent = border:GetParent()
+ local backdrop = parent and parent.Icon and parent.Icon.backdrop
+ if backdrop then
+ local color = E.QualityColors[lootQuality[atlas]]
+ if color then
+ backdrop:SetBackdropBorderColor(color.r, color.g, color.b)
+ else
+ backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ end
+ end
+end
+
+local function ItemSetElements(set)
+ local parchment = E.private.skins.parchmentRemoverEnable
+ if parchment and not set.backdrop then
+ set:CreateBackdrop('Transparent')
+ end
+
+ if parchment and set.Background then
+ set.Background:Hide()
+ end
+
+ if set.ItemButtons then
+ for _, button in next, set.ItemButtons do
+ local icon = button.Icon
+ if icon and not icon.backdrop then
+ S:HandleIcon(icon, true)
+ end
+
+ local border = button.Border
+ if border and not border.isSkinned then
+ border:SetAlpha(0)
+
+ ItemSetsItemBorder(border, border:GetAtlas()) -- handle first one
+ hooksecurefunc(border, 'SetAtlas', ItemSetsItemBorder)
+
+ border.isSkinned = true
+ end
+ end
+ end
+end
+
+local function HandleItemSetsElements(scrollBox)
+ scrollBox:ForEachFrame(ItemSetElements)
+end
+
+function S:Blizzard_EncounterJournal()
+ if not (E.private.skins.blizzard.enable and E.private.skins.blizzard.encounterjournal) then return end
+
+ local EJ = _G.EncounterJournal
+ S:HandlePortraitFrame(EJ)
+
+ EJ.navBar:StripTextures(true)
+ EJ.navBar.overlay:StripTextures(true)
+
+ EJ.navBar:CreateBackdrop()
+ EJ.navBar.backdrop:Point('TOPLEFT', -2, 0)
+ EJ.navBar.backdrop:Point('BOTTOMRIGHT')
+ HandleButton(EJ.navBar.home, true)
+
+ S:HandleEditBox(EJ.searchBox)
+ EJ.searchBox:ClearAllPoints()
+ EJ.searchBox:Point('TOPLEFT', EJ.navBar, 'TOPRIGHT', 4, 0)
+
+ local InstanceSelect = EJ.instanceSelect
+ InstanceSelect.bg:Kill()
+
+ S:HandleDropDownBox(InstanceSelect.tierDropDown)
+ S:HandleTrimScrollBar(InstanceSelect.ScrollBar)
+
+ -- Bottom tabs
+ for _, tab in next, {
+ _G.EncounterJournalDungeonTab,
+ _G.EncounterJournalRaidTab,
+ _G.EncounterJournalLootJournalTab
+ } do
+ S:HandleTab(tab)
+ end
+
+ _G.EncounterJournalDungeonTab:ClearAllPoints()
+ _G.EncounterJournalRaidTab:ClearAllPoints()
+
+ _G.EncounterJournalRaidTab:Point('LEFT', _G.EncounterJournalDungeonTab, 'RIGHT', -5, 0)
+
+ --Encounter Info Frame
+ local EncounterInfo = EJ.encounter.info
+ EncounterInfo:SetTemplate('Transparent')
+
+ EncounterInfo.encounterTitle:Kill()
+
+ EncounterInfo.leftShadow:SetAlpha(0) -- dont kill these
+ EncounterInfo.rightShadow:SetAlpha(0) -- it will taint
+
+ EncounterInfo.instanceButton.icon:Size(32)
+ EncounterInfo.instanceButton.icon:SetTexCoord(0, 1, 0, 1)
+ EncounterInfo.instanceButton:SetNormalTexture(E.ClearTexture)
+ EncounterInfo.instanceButton:SetHighlightTexture(E.ClearTexture)
+
+ EncounterInfo.model.dungeonBG:Kill()
+ _G.EncounterJournalEncounterFrameInfoBG:Height(385)
+ _G.EncounterJournalEncounterFrameInfoModelFrameShadow:Kill()
+
+ EncounterInfo.instanceButton:ClearAllPoints()
+ EncounterInfo.instanceButton:Point('TOPLEFT', EncounterInfo, 'TOPLEFT', 0, 10)
+
+ EncounterInfo.instanceTitle:ClearAllPoints()
+ EncounterInfo.instanceTitle:Point('BOTTOM', EncounterInfo.bossesScroll, 'TOP', 10, 15)
+
+ EncounterInfo.difficulty:StripTextures()
+ EncounterInfo.reset:StripTextures()
+
+ -- Buttons
+ EncounterInfo.difficulty:ClearAllPoints()
+ EncounterInfo.difficulty:Point('BOTTOMRIGHT', _G.EncounterJournalEncounterFrameInfoBG, 'TOPRIGHT', -5, 7)
+ HandleButton(EncounterInfo.reset)
+ HandleButton(EncounterInfo.difficulty)
+
+ EncounterInfo.reset:ClearAllPoints()
+ EncounterInfo.reset:Point('TOPRIGHT', EncounterInfo.difficulty, 'TOPLEFT', -10, 0)
+ _G.EncounterJournalEncounterFrameInfoResetButtonTexture:SetTexture([[Interface\EncounterJournal\UI-EncounterJournalTextures]])
+ _G.EncounterJournalEncounterFrameInfoResetButtonTexture:SetTexCoord(0.90625000, 0.94726563, 0.00097656, 0.02050781)
+
+ S:HandleTrimScrollBar(EncounterInfo.BossesScrollBar)
+ S:HandleTrimScrollBar(_G.EncounterJournalEncounterFrameInstanceFrame.LoreScrollBar)
+
+ _G.EncounterJournalEncounterFrameInstanceFrameBG:SetScale(0.85)
+ _G.EncounterJournalEncounterFrameInstanceFrameBG:ClearAllPoints()
+ _G.EncounterJournalEncounterFrameInstanceFrameBG:Point('CENTER', 0, 40)
+ _G.EncounterJournalEncounterFrameInstanceFrameTitle:ClearAllPoints()
+ _G.EncounterJournalEncounterFrameInstanceFrameTitle:Point('TOP', 0, -105)
+ _G.EncounterJournalEncounterFrameInstanceFrameMapButton:ClearAllPoints()
+ _G.EncounterJournalEncounterFrameInstanceFrameMapButton:Point('LEFT', 55, -56)
+
+ S:HandleTrimScrollBar(EncounterInfo.overviewScroll.ScrollBar)
+ S:HandleTrimScrollBar(EncounterInfo.detailsScroll.ScrollBar)
+ S:HandleTrimScrollBar(EncounterInfo.LootContainer.ScrollBar)
+
+ EncounterInfo.detailsScroll:Height(360)
+ EncounterInfo.LootContainer:Height(360)
+ EncounterInfo.overviewScroll:Height(360)
+
+ -- Tabs
+ for _, name in next, { 'overviewTab', 'modelTab', 'bossTab', 'lootTab' } do
+ local info = _G.EncounterJournal.encounter.info
+
+ local tab = info[name]
+ tab:CreateBackdrop('Transparent')
+ tab.backdrop:SetInside(2, 2)
+
+ tab:SetNormalTexture(E.ClearTexture)
+ tab:SetPushedTexture(E.ClearTexture)
+ tab:SetDisabledTexture(E.ClearTexture)
+
+ local hl = tab:GetHighlightTexture()
+ local r, g, b = unpack(E.media.rgbvaluecolor)
+ hl:SetColorTexture(r, g, b, .2)
+ hl:SetInside(tab.backdrop)
+
+ tab:ClearAllPoints()
+ if name == 'overviewTab' then
+ tab:Point('TOPLEFT', _G.EncounterJournalEncounterFrameInfo, 'TOPRIGHT', 9, 0)
+ elseif name == 'lootTab' then
+ tab:Point('TOPLEFT', info.overviewTab, 'BOTTOMLEFT', 0, -1)
+ elseif name == 'bossTab' then
+ tab:Point('TOPLEFT', info.lootTab, 'BOTTOMLEFT', 0, -1)
+ elseif name == 'modelTab' then
+ tab:Point('TOPLEFT', info.bossTab, 'BOTTOMLEFT', 0, -1)
+
+ end
+ end
+
+ -- Search
+ _G.EncounterJournalSearchResults:StripTextures()
+ _G.EncounterJournalSearchResults:SetTemplate()
+ _G.EncounterJournalSearchBox.searchPreviewContainer:StripTextures()
+
+ S:HandleCloseButton(_G.EncounterJournalSearchResultsCloseButton)
+ S:HandleTrimScrollBar(_G.EncounterJournalSearchResults.ScrollBar)
+
+ for _, button in next, { _G.EncounterJournalEncounterFrameInfoFilterToggle, _G.EncounterJournalEncounterFrameInfoSlotFilterToggle } do
+ HandleButton(button, true)
+ end
+
+ hooksecurefunc(_G.EncounterJournal.instanceSelect.ScrollBox, 'Update', function(frame)
+ for _, child in next, { frame.ScrollTarget:GetChildren() } do
+ if not child.isSkinned then
+ child:SetNormalTexture(E.ClearTexture)
+ child:SetHighlightTexture(E.ClearTexture)
+ child:SetPushedTexture(E.ClearTexture)
+
+ local bgImage = child.bgImage
+ if bgImage then
+ bgImage:CreateBackdrop()
+ bgImage.backdrop:Point('TOPLEFT', 3, -3)
+ bgImage.backdrop:Point('BOTTOMRIGHT', -4, 2)
+ end
+
+ child.isSkinned = true
+ end
+ end
+ end)
+
+ if E.private.skins.parchmentRemoverEnable then
+ hooksecurefunc(_G.EncounterJournal.encounter.info.BossesScrollBox, 'Update', function(frame)
+ for _, child in next, { frame.ScrollTarget:GetChildren() } do
+ if not child.isSkinned then
+ S:HandleButton(child)
+
+ local hl = child:GetHighlightTexture()
+ hl:SetColorTexture(1, 1, 1, .25)
+ hl:SetInside()
+
+ child.text:SetTextColor(1, 1, 1)
+ child.text.SetTextColor = E.noop
+ child.creature:Point('TOPLEFT', 0, -4)
+
+ child.isSkinned = true
+ end
+ end
+ end)
+
+ hooksecurefunc(_G.EncounterJournal.encounter.info.LootContainer.ScrollBox, 'Update', function(frame)
+ for _, child in next, { frame.ScrollTarget:GetChildren() } do
+ if not child.isSkinned then
+ if child.bossTexture then child.bossTexture:SetAlpha(0) end
+ if child.bosslessTexture then child.bosslessTexture:SetAlpha(0) end
+
+ if child.name and child.icon then
+ child.icon:SetSize(32, 32)
+ child.icon:Point('TOPLEFT', E.PixelMode and 3 or 4, -(E.PixelMode and 7 or 8))
+ S:HandleIcon(child.icon, true)
+ S:HandleIconBorder(child.IconBorder, child.icon.backdrop)
+
+ child.name:ClearAllPoints()
+ child.name:Point('TOPLEFT', child.icon, 'TOPRIGHT', 6, -2)
+
+ -- we only want this when name and icon both exist
+ if not child.backdrop then
+ child:CreateBackdrop('Transparent')
+ child.backdrop:Point('TOPLEFT')
+ child.backdrop:Point('BOTTOMRIGHT', 0, 1)
+ end
+ end
+
+ if child.boss then
+ child.boss:ClearAllPoints()
+ child.boss:Point('BOTTOMLEFT', 4, 6)
+ child.boss:SetTextColor(1, 1, 1)
+ end
+
+ if child.slot then
+ child.slot:ClearAllPoints()
+ child.slot:Point('TOPLEFT', child.name, 'BOTTOMLEFT', 0, -3)
+ child.slot:SetTextColor(1, 1, 1)
+ end
+
+ if child.armorType then
+ child.armorType:ClearAllPoints()
+ child.armorType:Point('RIGHT', child, 'RIGHT', -10, 0)
+ child.armorType:SetTextColor(1, 1, 1)
+ end
+
+ child.isSkinned = true
+ end
+ end
+ end)
+
+ hooksecurefunc('EncounterJournal_SetUpOverview', SkinOverviewInfo)
+ hooksecurefunc('EncounterJournal_SetBullets', SkinOverviewInfoBullets)
+ hooksecurefunc('EncounterJournal_ToggleHeaders', SkinAbilitiesInfo)
+
+ _G.EncounterJournalEncounterFrameInfoBG:Kill()
+ EncounterInfo.detailsScroll.child.description:SetTextColor(1, 1, 1)
+ EncounterInfo.overviewScroll.child.loreDescription:SetTextColor(1, 1, 1)
+
+ _G.EncounterJournalEncounterFrameInfoDetailsScrollFrameScrollChildDescription:SetTextColor(1, 1, 1)
+ _G.EncounterJournalEncounterFrameInfoOverviewScrollFrameScrollChildHeader:Hide()
+ _G.EncounterJournalEncounterFrameInfoOverviewScrollFrameScrollChildTitle:SetFontObject('GameFontNormalLarge')
+ _G.EncounterJournalEncounterFrameInfoOverviewScrollFrameScrollChildLoreDescription:SetTextColor(1, 1, 1)
+ _G.EncounterJournalEncounterFrameInfoOverviewScrollFrameScrollChildTitle:SetTextColor(1, .8, 0)
+ _G.EncounterJournalEncounterFrameInfoOverviewScrollFrameScrollChildHeader:SetAlpha(0)
+ _G.EncounterJournalEncounterFrameInfoOverviewScrollFrameScrollChild.overviewDescription.Text:SetTextColor('P', 1, 1, 1)
+
+ _G.EncounterJournalEncounterFrameInstanceFrameBG:SetTexCoord(0.71, 0.06, 0.582, 0.08)
+ _G.EncounterJournalEncounterFrameInstanceFrameBG:SetRotation(rad(180))
+ _G.EncounterJournalEncounterFrameInstanceFrameBG:SetScale(0.7)
+ _G.EncounterJournalEncounterFrameInstanceFrameBG:CreateBackdrop()
+ _G.EncounterJournalEncounterFrameInstanceFrame.titleBG:SetAlpha(0)
+ _G.EncounterJournalEncounterFrameInstanceFrameTitle:FontTemplate(nil, 25)
+
+ for _, child in next, { _G.EncounterJournalEncounterFrameInstanceFrame.LoreScrollingFont.ScrollBox.ScrollTarget:GetChildren() } do
+ if child.FontString then
+ child.FontString:SetTextColor(1, 1, 1)
+ end
+ end
+ end
+end
+
+S:AddCallbackForAddon('Blizzard_EncounterJournal')
diff --git a/ElvUI/Cata/Modules/Skins/Load_Skins.xml b/ElvUI/Cata/Modules/Skins/Load_Skins.xml
index be75a82a06..3d61fb5139 100644
--- a/ElvUI/Cata/Modules/Skins/Load_Skins.xml
+++ b/ElvUI/Cata/Modules/Skins/Load_Skins.xml
@@ -19,6 +19,7 @@
+
diff --git a/ElvUI/Core/Modules/Maps/Minimap.lua b/ElvUI/Core/Modules/Maps/Minimap.lua
index 1454309c26..7aa0c4d142 100644
--- a/ElvUI/Core/Modules/Maps/Minimap.lua
+++ b/ElvUI/Core/Modules/Maps/Minimap.lua
@@ -208,7 +208,7 @@ function M:ADDON_LOADED(_, addon)
_G.TimeManagerClockButton:Kill()
elseif addon == 'Blizzard_HybridMinimap' then
M:SetupHybridMinimap()
- elseif addon == 'Blizzard_EncounterJournal' then
+ elseif addon == 'Blizzard_EncounterJournal' and E.Retail then
-- Since the default non-quest map is full screen, it overrides the showing of the encounter journal
hooksecurefunc('EJ_HideNonInstancePanels', M.HideNonInstancePanels)
end
diff --git a/ElvUI_Options/Core/Skins.lua b/ElvUI_Options/Core/Skins.lua
index 8b995230aa..a830f5f60a 100644
--- a/ElvUI_Options/Core/Skins.lua
+++ b/ElvUI_Options/Core/Skins.lua
@@ -57,6 +57,7 @@ if E.Cata or E.Retail then
toggles.barber = L["BARBERSHOP"]
toggles.calendar = L["Calendar Frame"]
toggles.collections = L["COLLECTIONS"]
+ toggles.encounterjournal = L["ENCOUNTER_JOURNAL"]
toggles.gbank = L["Guild Bank"]
toggles.pvp = L["PvP Frames"]
toggles.lfg = L["LFG_TITLE"]
@@ -79,7 +80,6 @@ if E.Retail then
toggles.covenantSanctum = L["Covenant Sanctum"]
toggles.deathRecap = L["DEATH_RECAP_TITLE"]
toggles.editor = L["Editor Manager"]
- toggles.encounterjournal = L["ENCOUNTER_JOURNAL"]
toggles.expansionLanding = L["Expansion Landing Page"]
toggles.garrison = L["GARRISON_LOCATION_TOOLTIP"]
toggles.genericTrait = L["Generic Trait"]