changeset 93:caded2668701

Curseforge migration and source tree cleaning
author Nenue
date Sun, 01 Jan 2017 18:25:26 -0500
parents d41c7dc3012f
children df10cd0ae949
files Constants.lua Modules/BuffFrame.lua Modules/ObjectiveTracker.lua Modules/PaperDoll.lua Modules/TalkingHead.lua Modules/WorldState.lua Modules/WorldState.xml ObjectiveTracker/ObjectiveCore.lua ObjectiveTracker/ObjectiveEvents.lua ObjectiveTracker/ObjectiveFrame.lua ObjectiveTracker/ObjectiveInfo.lua ObjectiveTracker/ObjectiveWidgets.lua ObjectiveTracker/ObjectiveWidgets.xml ObjectiveTracker/QuestTracker.lua ObjectiveTracker/XPTracker.lua Templates.lua Veneer.lua Veneer.toc Veneer_Objectives/ObjectiveTracker.lua Veneer_Objectives/Veneer_Objectives.iml Veneer_Objectives/Veneer_Objectives.toc Veneer_Objectives/Veneer_Objectives.xml
diffstat 22 files changed, 497 insertions(+), 4027 deletions(-) [+]
line wrap: on
line diff
--- a/Constants.lua	Tue Oct 25 12:33:20 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,347 +0,0 @@
---- ${PACKAGE_NAME}
--- @file-author@
--- @project-revision@ @project-hash@
--- @file-revision@ @file-hash@
--- Created: 3/22/2016 3:14 PM
-local _, A = ...
-local B = A.frame
-
------------------------
--- Buff frames metadata
------------------------
-local legendAlpha = 0.5
-B.displays.BuffButton = {
-  legendColor = {0, 1, 0, legendAlpha},
-  maxIcons = BUFF_MAX_DISPLAY,
-  actualIcons = function () return _G.BUFF_ACTUAL_DISPLAY end,
-  buffName = 'BuffButton',
-  drawCount = {},
-  filters = 'HELPFUL',
-  anchorTemplate = 'VeneerAnchorTemplate',
-}
-B.displays.DebuffButton = {
-  legendColor = {1, 0, 0, legendAlpha},
-  maxIcons = DEBUFF_MAX_DISPLAY,
-  actualIcons = function () return _G.DEBUFF_ACTUAL_DISPLAY end,
-  buffName = 'DebuffButton',
-  drawCount = {},
-  filters = 'HARMFUL',
-  anchorTemplate = 'VeneerAnchorTemplate',
-}
-B.displays.TempEnchant = {
-  legendColor = {1, 0, 0.5, legendAlpha},
-  maxIcons = NUM_TEMP_ENCHANT_FRAMES,
-  actualIcons = function () return BuffFrame.numEnchants end,
-  buffName = 'TempEnchant',
-  drawCount = {},
-  anchorTemplate = 'VeneerAnchorTemplate',
-}
-B.displays.ConsolidatedBuff = {
-  legendColor = {0.5, 0.5, 0.5, legendAlpha},
-  maxIcons = 9,
-  actualIcons = function() return select(2, GetRaidBuffInfo()) end,
-  buffName = 'ConsolidatedBuff',
-  anchorTemplate = 'VeneerConsolidatedBuffsAnchor',
-  buffTemplate = 'VeneerRaidBuffTemplate',
-  drawCount = {},
-  filters = 'HELPFUL',
-}
-
------------------------
--- RaidBuff visual args
------------------------
-B.BuffStyles = {
-  ["active"] = {
-    SetDesaturated = false,
-    Color = {1, 1, 1, 1},
-    SetBlendMode = 'BLEND',
-    TextColor = {1,1,1,1},
-  },
-  ["missing"] = {
-    SetDesaturated = false,
-    Color = {1, 0, 0, 0.5},
-    SetBlendMode = 'ADD',
-    TextColor = {1,0,0,1},
-  },
-  ["available"] = {
-    SetDesaturated = true,
-    Color = {0.35, 1, 0.35, 0.5},
-    SetBlendMode = 'ADD',
-    TextColor = {1, 1, 0, 1},
-  },
-}
-
---- RaidBuff availability criteria
--- @field spellID   - UnitAura() == true
--- @field spec      - test for spec choice
--- @field auraType  - UnitAura() == true, and no other tests of the same value have returned true prior
--- @field talent    - test for talent selection
--- @field petFamily - test pet family
--- @field [true]    - passive group aura
-B.ClassRaidBuffs = {
-  -- stats
-  [1] = {
-    ['HUNTER'] = {
-      {talent = {155228}, spellID = 160206, spellName = 'Lone Wolf: Power of the Primates', auraType = 'lonewolf'},
-      {petFamily = 'Dog'}, -- active pet family
-      {petFamily = 'Gorilla'},
-      {petFamily = 'Shale Spider'},
-      {petFamily = 'Worm'},
-    },
-    ['DRUID'] = {
-      {spellID = 1126, spellName = 'Mark of the Wild'},
-    },
-    ['MONK'] = {
-      {spellID = 115921, spellName = 'Legacy of the Emperor'},
-      {spellID = 116781, spellName = 'Legacy of the White Tiger'} -- windwalker, replaces emperor internally
-    },
-    ['PALADIN'] = {spellID = 20217, spellName = 'Blessing of Kings', auraType = 'blessing'},
-  },
-
-  -- stamina
-  [2] = {
-    ['HUNTER'] = {
-      {talent = {155228}, spellID = 160199, spellName = 'Lone Wolf: Fortitude of the Bear', auraType = 'lonewolf'},
-      {petFamily = 'Bear'}, -- active pet family
-      {petFamily = 'Goat'},
-      {petFamily = 'Rylak'},
-      {petFamily = 'Silithid'},
-    },
-    ['PRIEST'] = {
-      {spellID = 21562, 'Power Word: Fortitude'}
-    },
-    ['WARRIOR'] = {
-      {spellID = 469, spellName = 'Commanding Shout', auraType = 'shout'}
-    },
-    ['WARLOCK'] = {
-      {true}
-    }
-  },
-
-  -- attack power
-  [3] = {
-    ['HUNTER'] = {
-      {true},
-    },
-    ['DEATHKNIGHT'] = {
-      {spec = 2},
-      {spec = 3},
-    },
-    ['WARRIOR'] = {
-      {spellName = 'Battle Shout', auraType = 'shout'}
-    }
-  },
-
-  -- HASTE
-  [4] = {
-    ['HUNTER'] = {
-      {talent = {155228}, spellID = 160203, spellName = 'Lone Wolf: Haste of the Hyena', auraType = 'lonewolf'},
-      {petFamily = 'Hyena'}, -- active pet family
-      {petFamily = 'Sporebat'},
-      {petFamily = 'Rylak'},
-      {petFamily = 'Wasp'},
-    },
-    ['DEATHKNIGHT'] = {
-      {spec = 2}, -- unholy aura
-      {spec = 3},
-    },
-    ['PRIEST'] = {
-      {spec = 3}, -- mind quickening
-    },
-    ['ROGUE'] = {
-      true -- swiftblade's
-    },
-    ['SHAMAN'] = {
-      true -- grace of air
-    },
-  },
-
-  -- SPELL POWER
-  [5] = {
-    ['HUNTER'] = {
-      {talent = {155228}, spellID = 160205, spellName = 'Lone Wolf: Wisdom of the Serpent', auraType = 'lonewolf'},
-      {petFamily = 'Waterstrider'}, -- active pet family
-      {petFamily = 'Serpent'},
-      {petFamily = 'Silithid'},
-    },
-    ['MAGE'] = {
-      {spellID = 1459, spellName = 'Arcane Brilliance'},  -- arcane brilliance
-      {spellID = 61316, spellName = 'Dalaran Brilliance'}, -- dalaran brilliance
-    },
-    ['WARLOCK'] = {
-      {spellID = 109773,spellName = 'Dark Intent' }
-    },
-  },
-
-  -- CRITICAL STRIKE
-  [6] = {
-    ['HUNTER'] = {
-      {talent = {155228}, spellID = 160200, spellName = 'Lone Wolf: Ferocity of the Raptor', auraType = 'lonewolf'},
-      {petFamily = 'Devilsaur'}, -- active pet family
-      {petFamily = 'Quilen'},
-      {petFamily = 'Raptor'},
-      {petFamily = 'Shale Spider'},
-      {petFamily = 'Waterstrider'},
-      {petFamily = 'Wolf'},
-    },
-    ['DRUID'] = {
-      {spec = 2, spellID = 17007, auraType = 'druidform'}
-    },
-    ['MAGE'] = {
-      {spellID = 1459, spellName = 'Arcane Brilliance'},  -- arcane brilliance
-      {spellID = 61316, spellName = 'Dalaran Brilliance'}, -- dalaran brilliance
-    },
-    ['MONK'] = {
-      {spellID = 116781, spellName = 'Legacy of the White Tiger', spec = 2} -- windwalker
-    }
-  },
-
-  -- MASTERY
-  [7] = {
-    ['HUNTER'] = {
-      {talent = {155228}, spellID = 160198, spellName = 'Lone Wolf: Grace of the Cat', auraType = 'lonewolf'},
-      {petFamily = 'Cat'}, -- active pet family
-      {petFamily = 'Hydra'},
-      {petFamily = 'Spirit Beast'},
-      {petFamily = 'Tallstrider'},
-    },
-    ['DEATHKNIGHT'] = {
-      {spec = 1}
-    },
-    ['DRUID'] = {
-      {spec = 1, spellID = 24907, auraType = 'druidform'},
-    },
-    ['PALADIN'] = {
-      {spec = 1, spellID = 19740, spellName = 'Blessing of Might', auraType = 'blessing'}
-    },
-    ['SHAMAN'] = {true},
-  },
-
-  -- MULTISTRIKE
-  [8] = {
-    ['HUNTER'] = {
-      {talent = {155228}, spellID = 172968, spellName = 'Lone Wolf: Quickness of the Dragonhawk', auraType = 'lonewolf'},
-      {petFamily = 'Bat'}, -- active pet family
-      {petFamily = 'Clefthoof'},
-      {petFamily = 'Corehound'},
-      {petFamily = 'Dragonhawk'},
-      {petFamily = 'Wind Serpent'},
-    },
-    ['MONK'] = {
-      {spec = 2 }
-    }, -- Windflurry,
-    ['PRIEST'] = {
-      {spec = 3 }
-    }, -- quickening,
-    ['ROGUE'] = {true}, -- swiftblade's
-    ['WARLOCK'] = {
-      {spellID = 109773,spellName = 'Dark Intent' }
-    },
-  },
-
-  -- VERSATILITY
-  [9] = {
-    ['HUNTER'] = {
-      {talent = {155228}, spellID = 172967, spellName = 'Lone Wolf: Versatility of the Ravager', auraType = 'lonewolf'},
-      {petFamily = 'Ravager'}, -- active pet family
-      {petFamily = 'Boar'},
-      {petFamily = 'Porcupine'},
-      {petFamily = 'Clefthoof'},
-      {petFamily = 'Stag'},
-      {petFamily = 'Worm'},
-      {petFamily = 'Bird of Prey'},
-    },
-    ['DEATH KNIGHT'] = {
-      {spec = 2}, -- unholy aura
-      {spec = 3},
-    },
-    ['DRUID'] = {
-      {spellID = 1126, spellName = 'Mark of the Wild'},
-    },
-    ['PALADIN'] = {
-      {spec = 2}, -- retribution
-    },
-    ['WARRIOR'] = {
-      {spec = 2}, -- arms or fury
-      {spec = 3},
-    },
-  }
-}
-
--------------------------
--- Default config values
--------------------------
-B.ConfDefaults = {
-  -- defaulted to on for first-time setup
-  ConfigMode = true,
-  GuidesMode = true,
-
-  BuffButtonAnchor = {'TOPRIGHT', 'UIParent', 'TOPRIGHT', -200, -5},
-  BuffButtonMax = 24,
-  BuffButtonPerRow = 10,
-  BuffButtonSize = 50,
-  BuffButtonSpacing = 4,
-  BuffButtonZoom = 15,
-  BuffButtonVertexColor = {},
-  BuffButtonPoint = {'TOPRIGHT', 'TOPRIGHT'},
-  BuffButtonDurationSize = 16,
-  BuffButtonDurationPoint = {'BOTTOM', 'BOTTOM', 0, -1},
-  BuffButtonCountSize = 18,
-  BuffButtonCountPoint = {'TOPRIGHT', 'TOPRIGHT', -3, -3},
-  BuffButtonRelativeX = -1,
-  BuffButtonRelativeY = -1,
-
-  BuffButtonColor = {1, 1, 1, 1},
-  BuffButtonPlayerColor = {1,1,1,1},
-  BuffButtonRaidColor = {0.25,1,0.25,1},
-  BuffButtonBossColor = {1,0.5,0,1},
-  BuffButtonBorder = 1,
-
-  BuffButtonWarningFade = true,
-  BuffButtonShowSelfCast = true,
-
-  DebuffButtonAnchor = {'TOPRIGHT', 'UIParent', 'TOPRIGHT', -200, -200},
-  DebuffButtonMax = 12,
-  DebuffButtonPerRow = 10,
-  DebuffButtonSize = 50,
-  DebuffButtonSpacing = 4,
-  DebuffButtonDurationSize = 16,
-  DebuffButtonZoom = 15,
-  DebuffButtonVertexColor = {},
-  DebuffButtonPoint = {'TOPRIGHT','TOPRIGHT'},
-  DebuffButtonRelativeX = -1,
-  DebuffButtonRelativeY = -1,
-
-
-  TempEnchantAnchor = {'TOPRIGHT', 'UIParent', 'TOPRIGHT', -200, -300},
-  TempEnchantMax = 2,
-  TempEnchantPerRow = 10,
-  TempEnchantSize = 50,
-  TempEnchantSpacing = 4,
-  TempEnchantDurationSize = 16,
-  TempEnchantZoom = 15,
-  TempEnchantVertexColor = {},
-  TempEnchantPoint = {'TOPRIGHT', 'TOPRIGHT'},
-  TempEnchantRelativeX = -1,
-  TempEnchantRelativeY = -1,
-  TempEnchantColor = {1,0,0.5,1},
-
-  ConsolidatedBuffAnchor = {'TOPRIGHT', 'UIParent', 'TOPRIGHT', 0, 0},
-  ConsolidatedBuffIcon = false,
-  ConsolidatedBuffMax = 9,
-  ConsolidatedBuffSize = 16,
-  ConsolidatedBuffParent = 'BuffButton',
-  ConsolidatedBuffPosition = 1,
-  ConsolidatedBuffSpacing = 1,
-  ConsolidatedBuffBorder = 0,
-  ConsolidatedBuffPerRow = 3,
-  ConsolidatedBuffPoint = {'TOPRIGHT', 'TOPRIGHT'},
-  ConsolidatedBuffRelativeX = -1,
-  ConsolidatedBuffRelativeY = -1,
-  ConsolidatedBuffDurationSize = 0,
-  ConsolidatedBuffDurationPoint = {'BOTTOM', 'BOTTOM', 0, 0},
-  ConsolidatedBuffCountPoint = {'BOTTOM', 'BOTTOM', 0, 0},
-
-  RaidShowMissing = true,
-
-}
\ No newline at end of file
--- a/Modules/BuffFrame.lua	Tue Oct 25 12:33:20 2016 -0400
+++ b/Modules/BuffFrame.lua	Sun Jan 01 18:25:26 2017 -0500
@@ -133,7 +133,7 @@
     end
 
     region:Hide()
-    tprint('|cFF0088FFborder:SetVertexColor|r', r,g,b,a)
+    --tprint('|cFF0088FFborder:SetVertexColor|r', r,g,b,a)
     self.progress.fg:SetColorTexture(r,g,b,a)
     self.border:SetColorTexture(r,g,b,a)
     self.border:Show()
@@ -157,17 +157,17 @@
           end)
         else
           hooksecurefunc(region, method, function(self,...)
-            tprint('|cFF0088FF'.. self:GetName().. ':', method)
+            --tprint('|cFF0088FF'.. self:GetName().. ':', method)
             self:ClearAllPoints()
             veneer:Show()
             veneer[method](veneer, ...)
 
             if self:GetName():match('Debuff.+Count') then
 
-              print('|cFF00FFFF'.. self:GetName().. ':'.. method, '->', veneer:GetName()..':'..method..'(', ...,')')
-              print(veneer:IsVisible(),veneer:GetStringWidth(),veneer:GetText())
-              print(veneer:GetTop(), veneer:GetLeft())
-              print(veneer:GetPoint(1))
+              --print('|cFF00FFFF'.. self:GetName().. ':'.. method, '->', veneer:GetName()..':'..method..'(', ...,')')
+              --print(veneer:IsVisible(),veneer:GetStringWidth(),veneer:GetText())
+              --print(veneer:GetTop(), veneer:GetLeft())
+              --print(veneer:GetPoint(1))
             end
 
           end)
@@ -180,11 +180,12 @@
 
   local frame = self.Buttons[target]
   if not (self.Buttons[target]) then
+
     local name = target:GetName()
     local id = target:GetID()
     print('|cFF88FF00Creating', name,'Veneer')
+    frame = vn:Acquire(target, 'VeneerBuffTemplate')
 
-    frame = vn:Acquire(target, 'VeneerBuffTemplate')
 
     frame.progress[OFFSET_PARALLELS[PROGRESS_ANCHOR][3]](frame.progress, BUFF_PROGRESS_SIZE + (BUFF_PROGRESS_INSET * 2))
     print(BUFF_PROGRESS_SIZE + (BUFF_PROGRESS_INSET * 2))
@@ -241,7 +242,7 @@
 
 
   hooksecurefunc("BuffFrame_Update", function(...) self:OnBuffFrameUpdate(...) end)
-  hooksecurefunc("AuraButton_UpdateDuration", function(...) self:OnUpdateDuration(...) end)
+  --hooksecurefunc("AuraButton_UpdateDuration", function(...) self:OnUpdateDuration(...) end)
   hooksecurefunc("AuraButton_Update", function(...) self:OnAuraButton_Update(...) end)
   hooksecurefunc("BuffFrame_UpdateAllBuffAnchors", function(...) self:OnUpdateAllBuffAnchors(...) end)
   hooksecurefunc("TemporaryEnchantFrame_Update", function(...) self:OnTemporaryEnchantFrameUpdate(...) end)
@@ -251,6 +252,13 @@
   end
 end
 
+function VeneerBuffFrameMixin:SetHidden(region)
+  if not self.hiddenRegions[region] then
+    self.hiddenRegions[region] = true
+    region:SetShown(false)
+    hooksecurefunc(region)
+  end
+end
 
 function VeneerBuffFrameMixin:SetupButton (name)
   local frame = _G[name ]
@@ -287,9 +295,12 @@
     veneer.border:Show()
   end
 
-  if count and count:GetText() then
+  if count then
     count:ClearAllPoints()
-    veneer.count:SetText(count:GetText())
+    hooksecurefunc(count, 'Show', function(self) self:Hide() end)
+    if count:GetText() then
+      veneer.count:SetText(count:GetText())
+    end
   end
   if duration then
     duration:ClearAllPoints()
@@ -354,7 +365,7 @@
         local nw = (w - (w * progress))
         if veneer.elapsed >= 0.25 then
 
-          tprint(t, startTime, floor(progress*100), w * progress, nw, w)
+          --tprint(t, startTime, floor(progress*100), w * progress, nw, w)
           veneer.elapsed = 0.25 - veneer.elapsed
         end
         if (progress >= 1) or not frame:IsVisible() then
@@ -481,16 +492,15 @@
     local debuff = _G['DebuffButton'..i]
     if debuff then
       numBuffs = numBuffs + 1
-      if numBuffs == 1 then
-        if topBuff then
-          debuff:SetPoint('TOPRIGHT', topBuff, 'BOTTOMRIGHT',  0, -BUFF_BUTTON_SPACING_V)
-        else
-          debuff:SetPoint('TOPRIGHT', UIParent, 'TOPRIGHT', -120, -6)
-        end
-        topBuff = debuff
-      elseif mod(numBuffs, BUFFS_PER_ROW) == 1 then
-        debuff:SetPoint('TOPRIGHT', topBuff, 'BOTTOMRIGHT',  0, -BUFF_BUTTON_SPACING_V)
-        topBuff = debuff
+      if mod(numBuffs, BUFFS_PER_ROW) == 1 then
+
+          if topBuff then
+            debuff:SetPoint('TOPRIGHT', topBuff, 'BOTTOMRIGHT',  0, -BUFF_BUTTON_SPACING_V)
+          else
+            debuff:SetPoint('TOPRIGHT', UIParent, 'TOPRIGHT', BUFF_FRAMES_X, BUFF_FRAMES_Y)
+          end
+          topBuff = debuff
+
       else
         debuff:SetPoint('TOPRIGHT', lastBuff, 'TOPLEFT', -BUFF_BUTTON_SPACING_H, 0)
       end
@@ -509,6 +519,9 @@
 end
 function VeneerBuffFrameMixin:UpdateConfigLayers (configMode)
   self:SetShown(configMode)
+  for _, button in pairs(self.Buttons) do
+    button:SetShown(configMode)
+  end
 end
 function VeneerBuffFrameMixin:OnUpdateDuration (frame, timeLeft)
   local veneer = self:Acquire(frame)
--- a/Modules/ObjectiveTracker.lua	Tue Oct 25 12:33:20 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
--- Veneer
--- ObjectiveTracker.lua
--- Created: 8/16/2016 8:19 AM
--- %file-revision%
--- Fixes objective tracker positioning in relation to buff frame alterations
-
-local plugin = CreateFrame('Frame', 'VeneerObjectives', UIParent)
-local vn, print = LibStub("LibKraken").register(VeneerController, plugin)
-local ot
-local otvn
-
-local INSET_V = -20
-
-local GetVeneer = function()
-
-  print('|cFFFF4400ObjectiveTracker_Initialize|r')
-  otvn = vn.GetVeneer(ot)
-  print(otvn:GetHeight())
-
-
-  for i = 1, #ot.MODULES do
-    print(i, ot.MODULES[i])
-  end
-  ot:ClearAllPoints()
-  ot:SetPoint('TOPRIGHT', UIParent, 'TOPRIGHT', -5, -140)
-
-  --vn.GetVeneer(ot):SetAllPoints(ot)
-end
-
-local UpdateVeneer = function()
-  if not ot.initialized or not otvn then
-    return
-  end
-
-
-
-  ot:ClearAllPoints()
-  ot:SetPoint('TOPRIGHT', UIParent, 'TOPRIGHT', -5, -140)
-
-end
-
-local CreateVeneer = function()
-  ot = ObjectiveTrackerFrame
-  hooksecurefunc('ObjectiveTracker_Initialize', GetVeneer)
-  hooksecurefunc('ObjectiveTracker_Update', UpdateVeneer)
-end
-
-plugin.init = function()
-  if ObjectiveTrackerFrame then
-    print('tracker is already loaded')
-    CreateVeneer()
-  else
-    plugin:RegisterEvent('ADDON_LOADED')
-    plugin.ADDON_LOADED = function(self, addon)
-      if addon == 'Blizzard_ObjectiveTracker' then
-        print('responding to blizzard tracker loadin')
-        CreateVeneer()
-      end
-    end
-  end
-end
-
--- a/Modules/PaperDoll.lua	Tue Oct 25 12:33:20 2016 -0400
+++ b/Modules/PaperDoll.lua	Sun Jan 01 18:25:26 2017 -0500
@@ -3,248 +3,418 @@
 -- Created: 8/16/2016 8:18 AM
 -- %file-revision%
 -- Displays the item level and modifications of character sheet equipment, including artifact power
+local print = DEVIAN_WORKSPACE and function(...) print('PaperDoll', ...) end or nop
 
-local plugin = CreateFrame('Frame', 'VeneerPaper', UIParent)
-local vn, print = LibStub("LibKraken").register(Veneer, plugin)
+local slot_overlays = {}
+VeneerPaperDollMixin = {
+  anchorFrame = 'CharacterFrame',
+  anchorPoint = 'TOPLEFT',
+  KnownRelics = {},
+}
+
+local relic_slot_paths = {
+  Arcane = {"Relic-Arcane-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.849609375, 0.919921875, 0.1181640625, 0.1884765625, false, false},
+  Blood = {"Relic-Blood-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.921875, 0.9921875, 0.1181640625, 0.1884765625, false, false},
+  Fel = {"Relic-Fel-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.59765625, 0.66796875, 0.572265625, 0.642578125, false, false},
+  Fire = {"Relic-Fire-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.669921875, 0.740234375, 0.572265625, 0.642578125, false, false},
+  Frost = {"Relic-Frost-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.7421875, 0.8125, 0.572265625, 0.642578125, false, false},
+  Holy = {"Relic-Holy-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.814453125, 0.884765625, 0.572265625, 0.642578125, false, false},
+  Iron = {"Relic-Iron-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.88671875, 0.95703125, 0.572265625, 0.642578125, false, false},
+  Life = {"Relic-Life-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.59765625, 0.66796875, 0.64453125, 0.71484375, false, false},
+  Shadow = {"Relic-Shadow-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.59765625, 0.66796875, 0.716796875, 0.787109375, false, false},
+  Water = {"Relic-Water-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.59765625, 0.66796875, 0.7890625, 0.859375, false, false},
+  Wind = {"Relic-Wind-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.59765625, 0.66796875, 0.861328125, 0.931640625, false, false},
+}
+
+local slots_left = {'TOPLEFT', 'TOPRIGHT', 1, 0, 'TOPLEFT', 'BOTTOMLEFT', 0, -1}
+local slots_right = {'TOPRIGHT', 'TOPLEFT', -1, 0, 'TOPRIGHT', 'BOTTOMRIGHT', 0, -1}
+local slots_bottomleft = {'BOTTOMRIGHT', 'TOPRIGHT', 0, 1, 'BOTTOMRIGHT', 'TOPRIGHT', 0, 1 }
+local slots_bottomright = {'BOTTOMLEFT', 'TOPLEFT', 0, -1, 'BOTTOMLEFT', 'TOPLEFT', 0, 1}
 
 local slot_anchors = {
-  [1] = 'TOPLEFT',
-  [2] = 'TOPLEFT',
-  [3] = 'TOPLEFT',
-  [15] = 'TOPLEFT',
-  [5] = 'TOPLEFT',
-  [9] = 'TOPLEFT',
+  [1] = slots_left,
+  [2] = slots_left,
+  [3] = slots_left,
+  [15] = slots_left,
+  [5] = slots_left,
+  [9] = slots_left,
 
-  [10] = 'TOPRIGHT',
-  [6] = 'TOPRIGHT',
-  [7] = 'TOPRIGHT',
-  [8] = 'TOPRIGHT',
-  [11] = 'TOPRIGHT',
-  [12] = 'TOPRIGHT',
-  [13] = 'TOPRIGHT',
-  [14] = 'TOPRIGHT',
+  [10] = slots_right,
+  [6] = slots_right,
+  [7] = slots_right,
+  [8] = slots_right,
+  [11] = slots_right,
+  [12] = slots_right,
+  [13] = slots_right,
+  [14] = slots_right,
   
-  [16] = 'BOTTOMRIGHT',
-  [17] = 'BOTTOMLEFT',
+  [16] = slots_bottomleft,
+  [17] = slots_bottomright,
 }
 
-local slot_relative = {
-  [1] = 'TOPRIGHT',
-  [2] = 'TOPRIGHT',
-  [3] = 'TOPRIGHT',
-  [15] = 'TOPRIGHT',
-  [5] = 'TOPRIGHT',
-  [9] = 'TOPRIGHT',
 
-  [10] = 'TOPLEFT',
-  [6] = 'TOPLEFT',
-  [7] = 'TOPLEFT',
-  [8] = 'TOPLEFT',
-  [11] = 'TOPLEFT',
-  [12] = 'TOPLEFT',
-  [13] = 'TOPLEFT',
-  [14] = 'TOPLEFT',
+function VeneerPaperDollMixin:OnLoad()
+  hooksecurefunc("PaperDollItemSlotButton_Update", function(...)
+    self:GetSlotButton(PaperDollItemsFrame, ...)
+  end)
 
-  [16] = 'TOPRIGHT',
-  [17] = 'TOPLEFT',
-}
-local ticker
-local vnslot = {}
-local pendingSlots = {}
+  hooksecurefunc("PaperDollFrame_UpdateStats", function(...)
+    self:GetStats(PaperDollItemsFrame, ...)
+  end)
 
+  self:RegisterEvent('ADDON_LOADED')
+  self:RegisterEvent('INSPECT_READY')
 
-local GetEquippedArtifactInfo = _G.C_ArtifactUI.GetEquippedArtifactInfo
-local GetCostForPointAtRank = _G.C_ArtifactUI.GetCostForPointAtRank
-local tooltip = CreateFrame('GameTooltip', 'VeneerTooltip', UIParent, 'GameTooltipTemplate')
-local jewel = {}
-
-local artifactBar_OnEvent = function (self)
-  local itemID, altItemID, name, icon, totalXP, pointsSpent = GetEquippedArtifactInfo()
-  if not itemID then
-    self:Hide()
-    return
-  end
-
-  local numRelicSlots = C_ArtifactUI.GetNumRelicSlots() or 0;
-  for i = 1, numRelicSlots do
-
-  end
-
-  local pointsAvailable = 0
-  local nextRankCost = GetCostForPointAtRank(pointsSpent + pointsAvailable) or 0
-
-  while totalXP >= nextRankCost  do
-    totalXP = totalXP - nextRankCost
-    pointsAvailable = pointsAvailable + 1
-    nextRankCost = GetCostForPointAtRank(pointsSpent + pointsAvailable) or 0
-  end
-  self.Header:SetText(name)
-  self.Level:SetText((pointsAvailable >= 1) and (pointsSpent .. ' ('.. pointsAvailable..')') or (pointsSpent))
-  self.ProgressText:SetFormattedText("|cFF00FFFF%d|r / %d", totalXP, nextRankCost)
-
-  self.ProgressBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPLEFT', self:GetWidth()*(totalXP/nextRankCost), 0)
-  self.ProgressBar:SetColorTexture(1,.5,0)
-
-  self:Show()
+  self.SocketType = {}
 end
 
-
-local artifactBar = CreateFrame('Frame', 'VnPaperDollArtifact', CharacterModelFrame, 'VeneerStatusBarTemplate')
-artifactBar:ClearAllPoints()
-artifactBar:SetHeight(28)
-artifactBar:SetPoint('LEFT', CharacterModelFrame, 'LEFT', 30, 0)
-artifactBar:SetPoint('RIGHT', CharacterModelFrame, 'RIGHT', -30, 0)
-artifactBar:SetPoint('BOTTOM', CharacterMainHandSlotFrame, 'TOP', 0, 1)
-artifactBar.ProgressBG:SetColorTexture(0.5, 0.5, 0.5)
-artifactBar.Header:Show()
-artifactBar:RegisterEvent('ARTIFACT_UPDATE')
-artifactBar:SetScript('OnEvent', artifactBar_OnEvent)
-
-plugin.artifactBar = artifactBar
-print(CharacterMainHandSlotFrame:GetPoint(1))
-print(artifactBar:GetPoint(3))
-
-for i = 1, 3 do
-  local relicSlot = CreateFrame('Frame', 'VnPaperDollRelic'..i, artifactBar)
-  relicSlot:SetSize(40,40)
-  relicSlot:SetPoint('BOTTOM', artifactBar, 'TOP', (i-2)*40, 24)
-  relicSlot.relicArt = relicSlot:CreateTexture(nil, 'BACKGROUND')
-  artifactBar['RelicSlot'..i] = relicSlot
+function VeneerPaperDollMixin:SetupInspectFrame()
+  hooksecurefunc("InspectPaperDollItemSlotButton_Update", function(...)
+    self:GetSlotButton(InspectFrame, ...)
+  end)
+  self:RegisterEvent('INSPECT_READY')
+end
+function VeneerPaperDollMixin:SetupArtifactUI()
+  self:RegisterEvent('ARTIFACT_UPDATE')
 end
 
+function VeneerPaperDollMixin:Setup()
+  VeneerData.PaperDoll = VeneerData.PaperDoll or {}
+  VeneerData.PaperDoll.KnownRelics = VeneerData.PaperDoll.KnownRelics or {}
+  self.KnownRelics = VeneerData.PaperDoll.KnownRelics
 
-artifactBar:EnableMouse(true)
-artifactBar:SetScript('OnMouseUp', function()
-  SocketInventoryItem(16)
-end)
+  self:RegisterEvent('UNIT_INVENTORY_CHANGED')
+  self:RegisterEvent('PLAYER_EQUIPMENT_CHANGED')
+  self:RegisterEvent('PLAYER_SPECIALIZATION_CHANGED')
 
-local UpdateVeneer = function(itemslot, frame)
-  local slot = itemslot:GetID()
-  if itemslot.hasItem then
-    local unit = frame.target.unit or 'player'
-    frame.link = GetInventoryItemLink(unit, slot)
-    tooltip:SetOwner(frame, 'ANCHOR_NONE')
-    tooltip:SetInventoryItem(unit, slot)
-    tooltip:Show()
-    --print(tooltip:NumLines())
-    if tooltip:NumLines() >= 3 then
-
-      local ilvl
-      if _G['VeneerTooltipTextLeft2'] then
-        ilvl = _G['VeneerTooltipTextLeft2']:GetText():match("Item Level (%d+)")
-        --print('l2', ilvl)
-      end
-
-      if _G['VeneerTooltipTextLeft3'] then
-        if  not ilvl then
-        ilvl = _G['VeneerTooltipTextLeft3']:GetText():match("Item Level (%d+)")
-          --print('l3', ilvl)
-        end
-      end
-
-      if ilvl then
-        frame.label:SetText(ilvl)
-      end
-    end
-
-    local quality = GetInventoryItemQuality(unit, slot)
-    if slot == 16 and quality == LE_ITEM_QUALITY_ARTIFACT then
-      artifactBar_OnEvent(plugin.artifactBar)
-    end
-
-
-
-
-    frame:Show()
-  else
-    frame:Hide()
-  end
+  self:MarkForUpdate()
 end
 
-local UpdateNext = function(frame)
-
-  plugin.next(function()
-    print('updating', frame:GetName())
-    UpdateVeneer(frame:GetParent(), frame)
-  end)
-end
-
-
-local UpdateAll = function()
-  for index, frame in pairs(vnslot) do
-    if frame:IsVisible() then
-      print('forcing', index, frame:GetName())
-      UpdateNext(frame)
+function VeneerPaperDollMixin:MarkForUpdate()
+  for frame, overlays in pairs(slot_overlays) do
+    for slot, overlay in pairs(overlays) do
+      if overlay:IsVisible() then
+        overlay:Update()
+      else
+        overlay.isDirty = true
+      end
     end
   end
 end
 
+function VeneerPaperDollMixin:GetStats()
+end
+function VeneerPaperDollMixin:GetSlotButton(panel, frame)
+  print('|cFF00FF88'..self:GetName()..':GetSlotButton()', frame:GetName(), frame:GetID())
+  local slot = frame:GetID()
+  local unit = panel.unit or 'player'
+  if slot_anchors[slot] then
+    slot_overlays[panel] = slot_overlays[panel] or {}
+    local overlay = slot_overlays[panel][slot]
+    if not overlay then
+      overlay = CreateFrame('Frame', 'VeneerPaperDollSlot' .. unit .. slot, frame, 'VeneerPaperDollSlotInfoTemplate')
+      overlay:SetID(slot)
+      slot_overlays[panel][slot] = overlay
+      overlay.checkRelic = frame.checkRelic
 
--- PaperDollFrame is separate from InspectUI handlers
-local PaperDollItemSlotButton_Update = function(self)
-  local name = self:GetName()
-  local slot = self:GetID()
-  if not slot_anchors[slot] then
-    return
+      local anchorPoint, relativePoint, dX, dY, statPoint, statRelative, statdX, statdY = unpack(slot_anchors[slot])
+      local offset = 7
+      overlay:SetPoint(anchorPoint, frame, relativePoint, dX * offset, dY * offset)
+      overlay:SetSize(frame:GetWidth()*3, frame:GetHeight())
+
+      local relativeFrame = overlay
+      for i, region in ipairs(overlay.StatsLeft) do
+        region:ClearAllPoints()
+        print(statPoint, relativeFrame, (i == 1) and statPoint or statRelative)
+        region:SetPoint(statPoint, relativeFrame, (i == 1) and statPoint or statRelative, 0, 0)
+        relativeFrame = region
+      end
+      if slot == 16 then
+        overlay.Sockets:ClearAllPoints()
+        overlay.Sockets:SetPoint('BOTTOM', CharacterFrameInsetBg, 'BOTTOM', 0, frame:GetHeight() + 14)
+        overlay.ItemLevel:SetFontObject(VeneerNumberFontLarge)
+        overlay.ItemLevel:ClearAllPoints()
+        overlay.ItemLevel:SetPoint('BOTTOM', overlay.Sockets, 'TOP', 0, 4)
+      end
+
+      print(overlay.Sockets:GetPoint(1))
+      overlay.anchors = slot_anchors[slot]
+    end
+
+    overlay.unit = unit
+    overlay.checkRelic = (unit == 'player' and slot == 16)
+
+
+    if frame.hasItem then
+      overlay.isDirty = true
+      overlay:Show()
+    else
+      overlay:Hide()
+    end
   end
-  print(self:GetName())
-
-  local frame = _G[name .. 'Veneer']
-
-  if not frame then
-
-    frame = CreateFrame('Frame', name..'Veneer', self)
-    vnslot[slot] = frame
-
-    frame.label = frame:CreateFontString(nil, 'OVERLAY', 'VeneerNumberFont')
-    frame.gemslot = {}
-
-
-    frame.target = self
-    frame.gemslot = {}
-    frame:SetAllPoints(self)
-    frame:SetParent(self)
-    frame.label:SetPoint('BOTTOMLEFT', self, 'BOTTOMLEFT', 2, 2)
-
-    tinsert(pendingSlots, frame)
-  end
-
-  UpdateVeneer(self, frame)
-
 end
 
-local PaperDollFrame_UpdateStats = function()
 
-end
 
+function VeneerPaperDollMixin:OnEvent(event, arg)
+  print(event, arg)
+  if event == 'ADDON_LOADED' then
+    if IsLoggedIn() and not self.initialized then
+      self:Setup()
+      self.initialized = true
+    end
 
 
-plugin.event = function(self, event, ...)
-  print(self, event, ...)
-
-  if event == 'PLAYER_EQUIPMENT_CHANGED' then
-    local slot, hasItem = ...
-    if vnslot[slot] then
-      UpdateVeneer(vnslot[slot]:GetParent(), vnslot[slot])
+    if arg == 'Blizzard_InspectUI' then
+      self:SetupInspectFrame()
+    end
+    if arg == 'Blizzard_ArtifactUI' then
+      self:SetupArtifactUI()
+      self:MarkForUpdate()
+    end
+  elseif event == 'ARTIFACT_UPDATE' then
+    self:MarkForUpdate()
+  else
+    if (event == 'PLAYER_SPECIALIZATION_CHANGED' or event == 'UNIT_INVENTORY_CHANGED') then
+      if arg ~= 'player' then
+        return
+      end
+    elseif event == 'INSPECT_READY' then
 
     end
 
-  elseif event == 'PLAYER_ENTERING_WORLD' then
-    UpdateAll()
+    self:MarkForUpdate()
 
   end
-
-end
-local artifactBarCreated
-plugin.init = function()
-  LoadAddOn('Blizzard_ArtifactUI')
 end
 
---plugin:SetScript('OnEvent', plugin.event)
-plugin:RegisterEvent('PLAYER_EQUIPMENT_CHANGED')
-plugin:RegisterEvent('PLAYER_ENTERING_WORLD')
 
+VeneerPaperDollSlotMixin = {}
 
-hooksecurefunc("PaperDollItemSlotButton_Update", PaperDollItemSlotButton_Update)
+function VeneerPaperDollSlotMixin:OnLoad()
+  self.SocketText = {}
+  self.SocketType = {}
+  self.SocketLink = {}
+end
+function VeneerPaperDollSlotMixin:OnShow()
+  if self.isDirty then
+    self:Update()
+  end
+end
+function VeneerPaperDollSlotMixin:OnUpdate()
+  if self.isDirty then
+    --print('|cFF00FF00pushing update for', self:GetID())
+    self:Update()
+  end
 
-hooksecurefunc("PaperDollFrame_UpdateStats", PaperDollFrame_UpdateStats)
\ No newline at end of file
+  if self.checkRelic then
+    self.tooltipLink = nil
+    for i = 1, 3 do
+      if self.SocketLink[i] and self.Sockets.SocketIcon[i]:IsMouseOver() then
+        self.tooltipLink = self.SocketLink[i]
+      end
+    end
+
+    if self.tooltipLink then
+      if not GameTooltip:IsOwned(self) then
+        GameTooltip:SetOwner(self, 'ANCHOR_CURSOR')
+        GameTooltip:SetHyperlink(self.tooltipLink)
+
+        GameTooltip:Show()
+      end
+    else
+      if GameTooltip:IsOwned(self) then
+        GameTooltip:Hide()
+      end
+    end
+  end
+end
+
+function VeneerPaperDollSlotMixin:UpdateRelicInfo()
+
+
+  local itemID =  GetInventoryItemID(self.unit, 16)
+  if not itemID then
+    return
+  end
+  print('|cFF00FFFFRelic Sweep:', itemID)
+
+
+  local guid = UnitGUID(self.unit or 'player')
+  local relicCache = VeneerPaperDoll.KnownRelics[guid] and VeneerPaperDoll.KnownRelics[guid][itemID]
+  if VeneerPaperDoll.KnownRelics[guid] then
+    for k, v in pairs(VeneerPaperDoll.KnownRelics[guid]) do
+      if tonumber(k) and tonumber(k) < 72 then
+        VeneerPaperDoll.KnownRelics[guid][k] = nil
+      end
+    end
+  end
+
+
+  if not relicCache then
+    relicCache = {}
+    VeneerPaperDoll.KnownRelics[guid] = VeneerPaperDoll.KnownRelics[guid] or {}
+    VeneerPaperDoll.KnownRelics[guid][itemID] = relicCache
+  end
+
+  local numRelics = C_ArtifactUI.GetNumRelicSlots()
+  local isEquipped = C_ArtifactUI.IsViewedArtifactEquipped()
+  local tooltip = VeneerPaperDollTooltip
+  tooltip:SetOwner(self, 'ANCHOR_NONE')
+  self.hasRelicSlots = true
+  if numRelics and isEquipped then
+    print('Relic Query:', itemID, numRelics)
+    self.checkRelic = nil
+    for i = 1, numRelics do
+      local lockedReason, relicName, relicIcon, relicLink = C_ArtifactUI.GetRelicInfo(i);
+      local relicType = C_ArtifactUI.GetRelicSlotType(i);
+      if relicIcon then
+        tooltip:SetHyperlink(relicLink)
+        print(tooltip:NumLines())
+
+        local line1 = _G['VeneerPaperDollTooltipTextLeft2']
+        local line2 = _G['VeneerPaperDollTooltipTextLeft3']
+        local text1 = line1 and line1:GetText()
+        local text2 = line2 and line2:GetText()
+        if text1 or text2 then
+          self.SocketText[i] = text1:match('Item Level (%d+)') or text2:match('Item Level (%d+)')
+        end
+
+        self.SocketInfo[i] = relicIcon
+        self.SocketType[i] = relicType
+        self.SocketLink[i] = relicLink
+        print('storing', i, self.SocketInfo[i], self.SocketText[i], self.SocketType[i], self.SocketLink[i])
+      else
+
+        self.SocketInfo[i] = "Interface\\CharacterFrame\\TempPortraitAlphaMask"
+        self.SocketType[i] = relicType
+        self.SocketLink[i] = nil
+      end
+
+      relicCache[i] = {self.SocketInfo[i], self.SocketText[i], self.SocketType[i], self.SocketLink[i]}
+    end
+  end
+
+  for i = 1, 3 do
+    if relicCache[i] then
+      local relicIcon, relicLevel, relicType, relicLink = unpack(relicCache[i])
+
+      print('loading', i, relicIcon, relicLevel, relicType, relicLink)
+      self.SocketInfo[i] = relicIcon
+      self.SocketText[i] = relicLevel
+      self.SocketType[i] = relicType
+      self.SocketLink[i] = relicLink
+    end
+  end
+end
+
+local SocketIcon_Update = function(frame)
+end
+
+function VeneerPaperDollSlotMixin:Update()
+  local id = self:GetID()
+
+  self.SocketInfo = self.SocketInfo or {}
+  table.wipe(self.SocketInfo)
+  self.ItemLevel:SetText(nil)
+
+  local tooltip = VeneerPaperDollTooltip
+  tooltip:SetOwner(self, 'ANCHOR_NONE')
+  print('refresh', self.unit, id)
+  tooltip:SetInventoryItem(self.unit or 'player', id)
+  tooltip:Show()
+
+  local numLines = tooltip:NumLines()
+  local numTextures = 0
+  local itemLevel
+  local itemLevelLine
+    print('|cFFFFFF00Sockets scan:', numLines)
+    for i = 1, numLines do
+      local line = _G['VeneerPaperDollTooltipTextLeft'..i]
+      local text = line and line:GetText()
+      if text then
+        itemLevel = text:match('Item Level (%d+)')
+        if itemLevel then
+          self.ItemLevel:SetText(itemLevel)
+          break
+        end
+      end
+
+      local texture = _G['VeneerPaperDollTooltipTexture'..i]
+      if texture and texture:IsShown() then
+        numTextures = numTextures + 1
+        print('picked up socket', numTextures, texture:GetTexture())
+        self.SocketInfo[numTextures] = texture:GetTexture()
+      end
+    end
+  if self.checkRelic then
+    self:UpdateRelicInfo()
+  end
+
+
+  local relativeIcon
+  local socketsWidth = 0
+  local socketsHeight = 24
+  for index, icon in ipairs(self.Sockets.SocketIcon) do
+    if self.SocketInfo[index] then
+      print('|cFF0088FFsocketInfo|r', index, self.SocketInfo[index])
+      icon:ClearAllPoints()
+
+      icon:SetTexture(self.SocketInfo[index])
+      icon:SetSize(16, 16)
+      icon:Show()
+      if index == 1 then
+        icon:SetPoint('LEFT', self.Sockets, 'LEFT', 0, 0)
+        socketsWidth = socketsWidth + icon:GetWidth()
+        socketsHeight = icon:GetHeight()
+      else
+        if id == 16 then
+          icon:SetPoint('LEFT', relativeIcon, 'RIGHT', 14, 0)
+          socketsWidth = socketsWidth + 14
+        else
+          icon:SetPoint('LEFT', relativeIcon, 'RIGHT', 2, 0)
+          socketsWidth = socketsWidth + 2
+        end
+        socketsWidth = socketsWidth + icon:GetWidth()
+      end
+
+      local label = self.Sockets.SocketLabel[index]
+      label:ClearAllPoints()
+      label:SetPoint('BOTTOM', icon, 'TOP',0, 2)
+      label:SetFontObject(VeneerNumberFont)
+      label:SetText(self.SocketText[index])
+
+      if self.checkRelic then
+        local relicAtlasName = ("Relic-%s-Slot"):format(self.SocketType[index]);
+        self.Sockets.SocketBg = self.Sockets.SocketBg or {}
+        self.Sockets.SocketBg[index] = self.Sockets.SocketBg[index] or self.Sockets:CreateTexture()
+        self.Sockets.SocketBg[index]:SetAtlas(relicAtlasName)
+        self.Sockets.SocketBg[index]:SetPoint('TOPRIGHT', icon, 'TOPRIGHT', 12, 12)
+        self.Sockets.SocketBg[index]:SetPoint('BOTTOMLEFT', icon, 'BOTTOMLEFT', -12,-12)
+        print('', self.SocketType[index], relicAtlasName)
+
+        socketsHeight = self.Sockets.SocketBg[index]:GetHeight()
+      end
+
+
+      relativeIcon = icon
+    else
+      if self.checkRelic and self.Sockets.SocketBg and self.Sockets.SocketBg[index] then
+        self.Sockets.SocketBg[index]:SetTexture(nil)
+        self.Sockets.SocketLabel[index]:SetText(nil)
+      end
+
+      icon:Hide()
+    end
+
+
+  end
+  self.Sockets:SetWidth(socketsWidth)
+  self.Sockets:SetHeight(socketsHeight)
+
+
+
+
+
+  self.isDirty = nil
+end
\ No newline at end of file
--- a/Modules/TalkingHead.lua	Tue Oct 25 12:33:20 2016 -0400
+++ b/Modules/TalkingHead.lua	Sun Jan 01 18:25:26 2017 -0500
@@ -17,19 +17,19 @@
   addonTrigger = 'Blizzard_TalkingHeadUI'
 
 }
+
+local qf = {}
+
+
 function VeneerTalkingHeadMixin:OnLoad()
   Veneer:AddHandler(self, self.anchorPoint)
 end
 
-
-
 function VeneerTalkingHeadMixin:Setup()
   print('|cFF00AAFF'..self:GetName()..'|r:Setup()', TalkingHeadFrame:IsShown(), self:IsShown())
 
   self:SetSize(TalkingHeadFrame:GetSize())
   self:SetParent(TalkingHeadFrame)
-  TalkingHeadFrame:ClearAllPoints()
-  TalkingHeadFrame:SetPoint('BOTTOM', self, 'BOTTOM')
 
   hooksecurefunc(TalkingHeadFrame, 'SetPoint', function(...)
     print('SetPoint', ...)
--- a/Modules/WorldState.lua	Tue Oct 25 12:33:20 2016 -0400
+++ b/Modules/WorldState.lua	Sun Jan 01 18:25:26 2017 -0500
@@ -13,10 +13,14 @@
   addonTrigger = 'Blizzard_OrderHallUI',
   addonFrame = 'OrderHallCommandBar',
 }
+VeneerWorldStateHeadsUpMixin = {
+
+}
+
 VeneerWorldStateCurrencyMixin = {
 }
 VeneerWorldStateProgressMixin = {
-  keepOpen = true,
+  keepOpen = false,
 }
 VeneerWorldStateMixin = {
   maxHeight = 0,
@@ -107,7 +111,7 @@
   local lastFrame
   for i, frame in ipairs(self.modules) do
     print('  '..frame:GetName()..':',frame:IsShown(), frame:IsVisible(), frame:GetHeight())
-    if frame:IsShown() then
+    if frame:IsVisible() then
       if lastFrame then
         frame:SetPoint('TOP', lastFrame, 'BOTTOM')
       else
@@ -130,6 +134,9 @@
   if not isUpdate then
     Veneer:InternalReanchor(self, print)
   end
+
+  WorldStateAlwaysUpFrame:ClearAllPoints()
+  WorldStateAlwaysUpFrame:SetPoint('TOP', self, 'BOTTOM', 0, 0)
 end
 
 
@@ -204,23 +211,34 @@
 function VeneerWorldStateCurrencyMixin:OnEvent (event, arg)
   self:Update()
 end
+local zoneCurrency = {
+  ['Suramar'] = 1155,
+  ["Sashj'tar Ruins"] = 1155,
+  ["Faronaar Ruins"] = 1155
+}
+local zoneBountyInfo = {
+  ['Suramar'] = 1859,
+  ["Sashj'tar Ruins"] = 1859,
+  ["Faronaar Ruins"] = 1859,
 
-
+  ['Azsuna'] = 1900,
+}
+local globalBountyInfo = {
+}
 function VeneerWorldStateCurrencyMixin:Update(isBatchUpdate)
-
-  print('  Zone:', GetZoneText())
-  if GetZoneText() == 'Suramar' then
-    local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(1155)
-
-    self.Icon:SetTexture(texture)
-    self.Label:SetFormattedText("%d / %d", earned, totalMax)
-    self:Show()
-    self:SetWidth(self.Icon:GetWidth() + self.Label:GetStringWidth() + 6)
+  local zoneText = GetRealZoneText()
+  if zoneText then
+    local currency = zoneCurrency[zoneText]
+    if currency then
+      local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(zoneCurrency[zoneText])
+      self.Icon:SetTexture(texture)
+      self.Label:SetFormattedText("%d / %d", earned, totalMax)
+      self:Show()
+      self:SetWidth(self.Icon:GetWidth() + self.Label:GetStringWidth() + 6)
+    end
   else
     self:Hide()
   end
-
-
 end
 
 function VeneerWorldStateProgressMixin:OnUpdate(sinceLast)
@@ -228,15 +246,11 @@
   if self.keepOpen then
     return
   end
-  if self.timeLived >= 3 and not self.TransitionFadeOut:IsPlaying() then
-    if not self.timeOut then
-      self.timeOut = true
-      self.TimedFadeOut:Play()
-    end
+  if self.timeLived >= 3 and not self.TimedFadeOut:IsPlaying() then
+    self.TimedFadeOut:Play()
   end
 end
 
-
 function VeneerWorldStateProgressMixin:OnLoad()
   self:RegisterEvent('PLAYER_EQUIPMENT_CHANGED')
 
@@ -375,7 +389,7 @@
 function VeneerWorldStateProgressMixin:Update(isBatchUpdate)
 
   local progressChange = false
-  print('  current mode:', self.mode)
+  print('  current mode:', self.mode, 'vis:', self:IsVisible())
   if (not self.mode) or (not progressHandlers[self.mode]) then
     self:HidePanel()
     return
@@ -388,6 +402,7 @@
     self.timeLived = 0
   end
 
+
   if not self:IsVisible() then
     self.TransitionFadeIn:Play()
   else
@@ -454,8 +469,11 @@
       self.timeLived = 1000
     else
       self.keepOpen = true
+
+      self.modeChanged = true
     end
     print('keepOpen =', self.keepOpen)
+    self:Update()
   else
 
     if self.mode == 'xp' then
@@ -486,6 +504,7 @@
   function WorldStateBlockMixin:ShowPanel()
     print('|cFF0088FF'..self:GetName()..':ShowPanel()')
     self:SetShown(true)
+    self:SetAlpha(1)
     VeneerWorldState:Show()
   end
   function WorldStateBlockMixin:HidePanel()
@@ -522,4 +541,5 @@
     self.keepOpen = true
     self:Setup()
   end
-end
\ No newline at end of file
+end
+
--- a/Modules/WorldState.xml	Tue Oct 25 12:33:20 2016 -0400
+++ b/Modules/WorldState.xml	Sun Jan 01 18:25:26 2017 -0500
@@ -3,12 +3,13 @@
 
   <Script file="WorldState.lua" />
 
-  <Frame name="VeneerWorldState" mixin="VeneerWorldStateMixin" parent="UIParent" inherits="VeneerMixinScripts, VeneerAnimations">
+  <Frame name="VeneerWorldState" mixin="VeneerWorldStateMixin" parent="UIParent" inherits="VeneerMixinScripts">
     <Anchors>
       <Anchor point="TOP" />
     </Anchors>
     <Size x="600" y="24" />
     <Frames>
+
       <Frame name="$parentProgress" mixin="VeneerWorldStateProgressMixin" inherits="VeneerMixinScripts" enableMouse="true">
         <Anchors>
           <Anchor point="TOPLEFT" />
@@ -22,7 +23,7 @@
                 self:GetParent().faded = true
               </OnPlay>
               <OnStop>
-                --print('VnWorldState', '|cFF44FF00stopped fadeout')
+                print('VnWorldState', '|cFF44FF00stopped fadeout')
                 self:GetParent():Update()
               </OnStop>
               <OnFinished>
@@ -53,6 +54,13 @@
           <AnimationGroup parentKey="TimedFadeOut" setToFinalAlpha="true">
             <Alpha childKey="ProgressText" fromAlpha="1" toAlpha="0" duration="1.12" order="1" />
             <Alpha childKey="Background" fromAlpha="1" toAlpha="0" duration="1.12" order="1" />
+            <Scripts>
+
+              <OnFinished>
+                --print('VnWorldState', '|cFFFFFF00end of fadeout')
+                self:GetParent():Hide()
+              </OnFinished>
+            </Scripts>
           </AnimationGroup>
 
           <AnimationGroup parentKey="ProgressFlash" setToFinalAlpha="true">
--- a/ObjectiveTracker/ObjectiveCore.lua	Tue Oct 25 12:33:20 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,501 +0,0 @@
---- ${PACKAGE_NAME}
--- @file-author@
--- @project-revision@ @project-hash@
--- @file-revision@ @file-hash@
--- Created: 3/26/2016 1:51 AM
-local B, _G = select(2,...).frame, _G
-local pairs, setmetatable, type, tostring, band, format = _G.pairs, _G.setmetatable, _G.type, _G.tostring, bit.band, string.format
-local ipairs, tinsert, hooksecurefunc = _G.ipairs, _G.tinsert, _G.hooksecurefunc
-local PlaySoundFile, IsQuestTask, SortQuestWatches, GetCurrentMapAreaID, GetZoneText, GetMinimapZoneText = PlaySoundFile, IsQuestTask, SortQuestWatches, GetCurrentMapAreaID, GetZoneText, GetMinimapZoneText
-local AddQuestWatch, SetSuperTrackedQuestID, GetNumQuestWatches, AUTO_QUEST_WATCH, MAX_WATCHABLE_QUESTS = AddQuestWatch, SetSuperTrackedQuestID, GetNumQuestWatches, AUTO_QUEST_WATCH, MAX_WATCHABLE_QUESTS
-local QuestPOIUpdateIcons, GetCVar, IsPlayerInMicroDungeon, WorldMapFrame, GetCVarBool, SetMapToCurrentZone = QuestPOIUpdateIcons, GetCVar, IsPlayerInMicroDungeon, WorldMapFrame, GetCVarBool, SetMapToCurrentZone
-local AddAutoQuestPopUp = AddAutoQuestPopUp
-local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
-local print = B.print('Objectives')
-local ObjectiveTrackerFrame, VeneerObjectiveScroll, CreateFrame = _G.ObjectiveTrackerFrame, _G.VeneerObjectiveScroll, _G.CreateFrame
-local Wrapper = _G.VeneerObjectiveWrapper
-local Scroller = VeneerObjectiveWrapper.scrollArea
-local Scroll = _G.VeneerObjectiveScroll
-
---- Performance values
---[[
-  self:RegisterEvent("QUEST_LOG_UPDATE");
-	self:RegisterEvent("TRACKED_ACHIEVEMENT_LIST_CHANGED");
-	self:RegisterEvent("QUEST_WATCH_LIST_CHANGED");
-	self:RegisterEvent("QUEST_AUTOCOMPLETE");
-	self:RegisterEvent("QUEST_ACCEPTED");
-	self:RegisterEvent("SUPER_TRACKED_QUEST_CHANGED");
-	self:RegisterEvent("SCENARIO_UPDATE");
-	self:RegisterEvent("SCENARIO_CRITERIA_UPDATE");
-	self:RegisterEvent("TRACKED_ACHIEVEMENT_UPDATE");
-	self:RegisterEvent("ZONE_CHANGED_NEW_AREA");
-	self:RegisterEvent("ZONE_CHANGED");
-	self:RegisterEvent("QUEST_POI_UPDATE");
-	self:RegisterEvent("VARIABLES_LOADED");
-	self:RegisterEvent("QUEST_TURNED_IN");
-	self:RegisterEvent("PLAYER_MONEY");
- ]]
-
-
---- These are the bitfields used by Blizzard_ObjectiveTracker to determine which segments get parsed.
---- They are replicated here so that plugins can make use of any securehook args involving this info.
-local OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST = OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST                       -- 0x0100
-local OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP = OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP	-- 0x0200
-local OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE = OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE		-- 0x0400
-local OBJECTIVE_TRACKER_UPDATE_MODULE_SCENARIO = OBJECTIVE_TRACKER_UPDATE_MODULE_SCENARIO	    		        -- 0x0800
-local OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT	= OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT           -- 0x1000
-
-
-local OBJECTIVE_TRACKER_UPDATE_STATIC = OBJECTIVE_TRACKER_UPDATE_STATIC					                         	-- 0x0000
-local OBJECTIVE_TRACKER_UPDATE_ALL = OBJECTIVE_TRACKER_UPDATE_ALL			                    	          		-- 0xFFFF
-local OBJECTIVE_TRACKER_UPDATE_ID = OBJECTIVE_TRACKER_UPDATE_ID                                           -- 0
-
-local OBJECTIVE_TRACKER_UPDATE_QUEST = OBJECTIVE_TRACKER_UPDATE_QUEST				        	                  	-- 0x0001
-local OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED = OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED		               		    -- 0x0002
-local OBJECTIVE_TRACKER_UPDATE_TASK_ADDED = OBJECTIVE_TRACKER_UPDATE_TASK_ADDED		    	              		-- 0x0004
-local OBJECTIVE_TRACKER_UPDATE_SCENARIO = OBJECTIVE_TRACKER_UPDATE_SCENARIO			      	                 	-- 0x0008
-local OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE = OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE		       	-- 0x0010
-local OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT = OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT			                   	-- 0x0020
-local OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED = OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED		  	      -- 0x0040
-local OBJECTIVE_TRACKER_UPDATE_SCENARIO_BONUS_DELAYED = OBJECTIVE_TRACKER_UPDATE_SCENARIO_BONUS_DELAYED		-- 0x0080
-
-local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_ALL -- default
---- Used to determine which trackers are listening for money events
-
-T.strings = {}
-T.strings.CLICK_TO_ACCCEPT = 'Click to Accept'
-T.strings.CLICK_TO_COMPLETE = 'Click to complete'
-T.colors ={
-  enable = true,
-  default = {
-    titlebg = {'HORIZONTAL', 1, 0, .7, .25,    1, 0, .7, .125},
-    textbg = {'HORIZONTAL', 0, 0, 0, 0.4,      0, 0, 0, 0 },
-    selectionbg = {'HORIZONTAL', 1, 1, 1, 0, 1, 1, 1, 0.225},
-  },
-  daily = {
-    titlebg = {'HORIZONTAL', 0, .7, 1, .25,  0, 1, .7, .125},
-    textbg = {'HORIZONTAL', 0, .7, 1, .1,    0, 1, .7, .075 },
-  },
-  weekly = {
-    titlebg = {'HORIZONTAL', 0, .35, .7, .25,   0, .35, .7, .125},
-    textbg = {'HORIZONTAL', 0, .35, .7, .1,     0, .35, .7, .075 },
-  },
-  account = {
-    titlebg = {'HORIZONTAL', .1, .1, .1, .25, .1, .1, .1, .125},
-    textbg = {'HORIZONTAL', .1, .1, .1, 0.4, .1, .1, .1, .085 },
-  },
-  -- alliance
-  faction_1 = {
-    titlebg = {'HORIZONTAL', .2, .4, 1, 0.4, .2, .4, 1, .085 },
-    textbg = {'HORIZONTAL', .2, .4, 1, 0.4, .2, .4, 1, .085 },
-  },
-  -- horde
-  faction_2 = {
-    titlebg = {'HORIZONTAL', .6, 0, 0.4, 0.4,  .6, 0, 0.4, .085 },
-    textbg = {'HORIZONTAL', .6, 0, 0.4, 0.4,   .6, 0, 0.4, .085 },
-  }
-}
-
-T.watchMoneyReasons = 0
-
---- Baseline defaults table; values defined in the files that they pertain to
-T.defaults = {}
-
---- Tracker display order
-T.orderedNames = {'Bonus', 'AutoQuest', 'Quest', 'Cheevs'}
-
---- ipairs() argument tables
-T.orderedHandlers = setmetatable({}, {__mode = "k"})
-T.orderedTrackers = setmetatable({}, {__mode = "k"})
-T.indexedTrackers = setmetatable({}, {__mode = "k"})
-
---- pairs() argument tables
-T.namedTrackers = setmetatable({}, {__mode = "k"})
-
-local WRAPPER_ANCHOR_POINT = 'TOPRIGHT'
-local WRAPPER_OFFSET_X = 0
-local WRAPPER_OFFSET_Y = -200
-local WRAPPER_MAX_HEIGHT = 670
-local WRAPPER_WIDTH = 280
-local WRAPPER_HEADER_HEIGHT = 24
-
-T.defaults.Wrapper = {
-  AnchorPoint = WRAPPER_ANCHOR_POINT,
-  OffsetX = WRAPPER_OFFSET_X,
-  OffsetY = WRAPPER_OFFSET_Y,
-  Height = WRAPPER_MAX_HEIGHT,
-  Width = WRAPPER_WIDTH,
-  HeaderHeight = WRAPPER_HEADER_HEIGHT,
-  TextSpacing = 3,
-  TitleSpacing = 3,
-}
-
-
-
---- Tracker module definitions begin here; innards dealing with data retreival and output are defined further in
-T.DefaultHandler = {
-  previousHeight = 0,
-
-  name = "temp",
-  displayName = "temp",
-  updateReasonModule = 0xFF00,
-  updateReasonEvent  = 0x00FF,
-
-  numWatched = 0,   --- number of entries being handled
-  numBlocks = 0,    --- number of blocks created
-  actualBlocks = 0, --- number of blocks in use
-
-  freeBlocks = {},  --- block heap
-  usedBlocks = {},
-
-  Info = {},        -- find data by ID
-  BlockInfo = {},   -- find data by block ID
-  Watched = {},     -- find watchIndex by data ID
-  WatchInfo = {},   -- find data by watch index
-  WatchBlock = {},  -- find block by watch index
-}
-
-T.AutoQuest = {
-  name = "AutoQuest",
-  displayName = "Notice",
-  updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST,
-  updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_QUEST +
-      OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED,
-}
-T.Quest = {
-  name = "Quest",
-  displayName = "Quests",
-  updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST,
-  updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_QUEST +
-      OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED,
-  itemButtons = {},
-  freeButtons = {},
-}
-T.Cheevs = {
-  name = "Cheevs",
-  displayName = "Achievements",
-  updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT,
-  updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT +
-      OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED,
-}
-T.Bonus = {
-  name = "Bonus",
-  displayName = "Bonus Objectives",
-  updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE,
-  updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_QUEST + OBJECTIVE_TRACKER_UPDATE_TASK_ADDED
-}
-
-local Tracker_string = function (self)
-  return self.name
-end
-local Tracker_call = function (self, reason)
-  self:Update(reason)
-end
-local Handler_Initialize = function (self, name, index)
-  local c = T.Conf.Wrapper
-  print('Initializing |cFF00FFFF'..name..'|r module...')
-
-  local handler = setmetatable(T[name] or {}, {
-    __tostring = Tracker_string,
-    __call = Tracker_call
-  })
-  if type(T.orderedHandlers[index]) == 'table' then
-    return T.orderedHandlers[index]
-  end
-
-  print('|cFFFFFF00Acquiring locals')
-  local preset = {}
-  for k, _ in pairs(handler) do
-    preset[k] = true
-  end
-
-
-  print('|cFFFF8800Inheriting')
-  for k, v in pairs(self) do
-    if not handler[k] then
-      if type(v) == 'table' then
-        -- assume all tables to be local data; don't inherit or ref
-        handler[k] = {}
-      else
-        handler[k] = self[k]
-      end
-      print('copying', k)
-    end
-  end
-  print('|cFFFF4400'..tostring(name)..'|r:')
-  for k, v in pairs(handler) do
-    print(format("%32s %8s %s", (preset[k] and '|cFFFFFFFF' or '|cFFFFFF00') .. k .. '|r', type(v), tostring(v)))
-  end
-
-  T[name] = handler
-
-  local trackerName = 'Veneer'..name..'Tracker'
-  local handler = T[name]
-  local frame = CreateFrame('Frame', trackerName, _G.VeneerObjectiveScroll, 'VeneerTrackerTemplate')
-  frame.title:SetText(handler.displayName)
-  frame:SetWidth(c.Width)
-  handler.frame = frame
-  handler.trackerName = trackerName
-  handler.lines = {}
-  T.orderedTrackers[index] = frame
-  T.namedTrackers[name] = frame
-  T.indexedTrackers[handler] = frame
-  print('|cFFFF0088' .. trackerName .. '|r created for |cFF00FFFF' .. handler.displayName .. '|r module')
-
-  T.orderedHandlers[index] = handler
-  return true
-end
-
-local Event = {}
-Event.QUEST_LOG_UPDATE =  function()
-  return OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST + OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE
-end
-Event.QUEST_ACCEPTED = function(questLogIndex, questID)
-  if ( IsQuestTask(questID) ) then
-    return OBJECTIVE_TRACKER_UPDATE_TASK_ADDED, questID
-  else
-    if ( AUTO_QUEST_WATCH == "1" and GetNumQuestWatches() < MAX_WATCHABLE_QUESTS ) then
-      AddQuestWatch(questLogIndex);
-      SetSuperTrackedQuestID(questID);
-    end
-    return OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST
-  end
-end
-
-Event.QUEST_WATCH_LIST_CHANGED = function(questID, added)
-  if ( added ) then
-    if ( not IsQuestTask(questID) ) then
-      return OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED, questID, added
-    end
-  else
-    return OBJECTIVE_TRACKER_UPDATE_QUEST, questID, added
-  end
-end
-
-Event.QUEST_POI_UPDATE = function()
-  QuestPOIUpdateIcons();
-  if ( GetCVar("trackQuestSorting") == "proximity" ) then
-    SortQuestWatches();
-  end
-  return OBJECTIVE_TRACKER_UPDATE_ALL
-end
-Event.SUPER_TRACKED_QUEST_CHANGED = function()
-  return OBJECTIVE_TRACKER_UPDATE_QUEST
-end
-Event.ZONE_CHANGED = function()
-
-  local inMicroDungeon = IsPlayerInMicroDungeon();
-  if ( inMicroDungeon ~= T.inMicroDungeon ) then
-    if ( not WorldMapFrame:IsShown() and GetCVarBool("questPOI") ) then
-      SetMapToCurrentZone();			-- update the zone to get the right POI numbers for the tracker
-    end
-    --SortQuestWatches();
-    T.inMicroDungeon = inMicroDungeon;
-  end
-end
-Event.QUEST_AUTOCOMPLETE = function(questId)
-  AddAutoQuestPopUp(questId, "COMPLETE");
-  return OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST + OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP
-end
-Event.SCENARIO_CRITERIA_UPDATE =  function()
-  return OBJECTIVE_TRACKER_UPDATE_SCENARIO
-end
-Event.SCENARIO_UPDATE = function(newStage)
-  if ( newStage ) then
-    return OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE
-  else
-    return OBJECTIVE_TRACKER_UPDATE_SCENARIO
-  end
-end
-Event.TRACKED_ACHIEVEMENT_UPDATE = function()
-  return OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT
-end
-Event.TRACKED_ACHIEVEMENT_LIST_CHANGED = function(achievementID, added)
-  if ( added ) then
-    return OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED, achievementID
-  else
-    return OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT
-  end
-end
-Event.ZONE_CHANGED_NEW_AREA = function ()
-  if ( not WorldMapFrame:IsShown() and GetCVarBool("questPOI") ) then
-    SetMapToCurrentZone();			-- update the zone to get the right POI numbers for the tracker
-  end
-  SortQuestWatches();
-  T.currentZoneArea = GetCurrentMapAreaID()
-  print('Updating zone ID to', T.currentZoneArea, '=', GetZoneText(), GetMinimapZoneText())
-
-
-  return OBJECTIVE_TRACKER_UPDATE_TASK_ADDED
-end
-
-
-Event.PLAYER_MONEY = function()
-  if T.watchMoneyReasons > 0 then
-    return T.watchMoneyReasons
-  end
-end
-Event.CRITERIA_COMPLETE = function()
-  return OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE
-end
-Event.QUEST_TURN_IN = function(questID, xp, money)
-  if ( IsQuestTask(questID) ) then
-    T.Bonus:OnTurnIn(questID, xp, money)
-    print('updating bonus modules (code', OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE, ',', questID, xp, money)
-    return OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE, questID, xp, money
-  else
-    return OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST, questID, xp, money
-  end
-end
-T.Event = Event
-
---- Done once per ui load
-local BlizzHooks = {
-  ['AddQuestWatch'] = 'AddQuestWatch',
-  ['RemoveQuestWatch'] = 'RemoveQuestWatch',
-  ['AbandonQuest'] = 'AbandonQuest',
-  ['AcknowledgeAutoAcceptQuest'] = 'AcknowledgeAutoAcceptQuest',
-  ['AddAutoQuestPopUp'] = 'AddAutoQuestPopUp',
-  ['RemoveAutoQuestPopUp'] = 'RemoveAutoQuestPopUp',
-  ['AddTrackedAchievement'] = 'AddTrackedAchievement',
-  ['RemoveTrackedAchievement'] = 'RemoveTrackedAchievement',
-  ['SetSuperTrackedQuestID'] = 'SetSuperTrackedQuestID'
-}
-local VeneerData
-
-T.SetWatchMoney = function(watchMoney, reason)
-  if watchMoney then
-    if band(T.watchMoneyReasons, reason) == 0 then
-      T.watchMoneyReasons = T.watchMoneyReasons + reason;
-    end
-  else
-    if band(T.watchMoneyReasons, reason) > 0 then
-      T.watchMoneyReasons = T.watchMoneyReasons - reason;
-    end
-  end
-end
-T.animateReasons = 0
-T.SetAnimate = function(reason)
-  print('comparing', T.animateReasons, reason)
-  if animate then
-    if band(T.animateReasons, reason) == 0 then
-      T.animateReasons = T.animateReasons + reason
-    end
-  else
-    if band(T.animateReasons, reason) > 0 then
-      T.animateReasons = T.animateReasons - reason
-    end
-  end
-end
-
-local Play = function(file) if Devian and Devian.InWorkspace() then PlaySoundFile(file) end end
-
-function T:OnEvent (event, ...)
-  local isHandled
-  print('OnEvent(|cFF00FF00'.. event ..'|r):', ...)
-  local reason, arg1, arg2, arg3
-  if Event[event] then
-    if type(Event[event]) == 'function' then
-      Play([[Interface\Addons\SharedMedia_MyMedia\sound\Info.ogg]])
-      reason, arg1, arg2, arg3 = Event[event](...)
-    elseif type(Event[event]) == 'table' then
-      Play([[Interface\Addons\SharedMedia_MyMedia\sound\Link.ogg]])
-      for i, action in ipairs(Event[event]) do
-        if type(action) == 'function' then
-          reason, arg1, arg2, arg3 = action(event, ...)
-        else
-          reason = action
-        end
-
-        if reason then
-          T:Update(reason, arg1, arg2, arg3)
-        end
-      end
-    else
-      Play([[Interface\Addons\SharedMedia_MyMedia\sound\Heart.ogg]])
-      reason = Event[event]
-    end
-  else
-    Play([[Interface\Addons\SharedMedia_MyMedia\sound\Quack.ogg]])
-  end
-  if reason then
-    T:Update(reason, arg1, arg2, arg3)
-  else
-    print('no reason value returned')
-    Play([[Interface\Addons\SharedMedia_MyMedia\sound\Quack.ogg]])
-  end
-
-end
-
-
-function T:OnInitialize()
-  local c = T.Conf.Wrapper
-  VeneerData = _G.VeneerData
-  VeneerData.CallLog = VeneerData.CallLog or {}
-  if not T.isHooked then
-    T.isHooked = true
-    for blizzFunc, veneerFunc in pairs(BlizzHooks) do
-      if T[veneerFunc] then
-        hooksecurefunc(blizzFunc, T[veneerFunc])
-      else
-        hooksecurefunc(blizzFunc, function(...)
-          print('|cFFFF0088securehook('..tostring(blizzFunc)..')|r args:', ...)
-          tinsert(VeneerData.CallLog, {blizzFunc, ...})
-        end)
-      end
-    end
-  end
-
-  T.Conf.TasksLog = T.Conf.TasksLog or {}
-
-  ObjectiveTrackerFrame:UnregisterAllEvents()
-  ObjectiveTrackerFrame:Hide()
-
-
-  for id, name in ipairs(T.orderedNames) do
-    if not T.orderedHandlers[id] then
-      Handler_Initialize(T.DefaultHandler, name, id)
-    end
-  end
-  self:SetSize(c.Width, 40)
-  T.InitializeWidgets()
-end
-
---- Done any time the the minimize button is toggled up
-function T:OnEnable()
-
-  print(B.Conf.VeneerObjectiveWrapper.enabled)
-  if not B.Conf.VeneerObjectiveWrapper.enabled then
-    return
-  end
-
-  for event, action in pairs(Event) do
-    print('|cFFFF0088listen to', event, 'for action|r', tostring(action))
-    Wrapper:RegisterEvent(event)
-  end
-
-  local c = T.Conf.Wrapper
-
-  Scroller:SetScrollChild(Scroll)
-  Scroller:SetWidth(c.Width)
-  Scroll:SetWidth(c.Width)
-  Scroll:ClearAllPoints()
-  Scroll:SetPoint('TOP', Scroller, 'TOP')
-  self:SetScript('OnEvent', T.OnEvent)
-
-  Scroller:Show()
-
-  local from, target, to, x, y = Wrapper:GetPoint(1)
-  print(from, target:GetName(), to, x,y)
-
-  T:Update()
-
-  -- run once to prime the data structure
-  T.UpdateActionButtons()
-end
-
-function T:OnDisable()
-  self:UnregisterAllEvents()
-  Scroller:Hide()
-end
-
--- a/ObjectiveTracker/ObjectiveEvents.lua	Tue Oct 25 12:33:20 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
---- ${PACKAGE_NAME}
--- @file-author@
--- @project-revision@ @project-hash@
--- @file-revision@ @file-hash@
--- Created: 3/30/2016 1:23 AM
-local B = select(2,...).frame
-local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
-local print = B.print('Objectives')
-
---------------------------------------------------------------------
---- Events that are handled by Blizzard_ObjectiveTracker
---------------------------------------------------------------------
-
--------------------------------------------------------------------
---- Function hooks for BlizzUI compatibility
--------------------------------------------------------------------
-mod.AddQuestWatch = function(questID)
-    mod:Update(0x00000003)
-end
-
-local Quest = mod.Quest
-mod.RemoveQuestWatch = function(questIndex, ...)
-  print('|cFFFF8800RemoveQuestWatch', questIndex, ...)
-
-  local info = mod.Quest.LogInfo[questIndex]
-
-  -- remove quest refs
-  local block = Quest.QuestBlock[info.questID]
-  Quest.QuestBlock[info.questID] = nil
-  Quest.LogBlock[questIndex] = nil
-
-  -- remove if they still match
-  if Quest.WatchInfo[info.watchIndex] == info then
-    print('cleaning dead WatchInfo entry')
-    Quest.WatchInfo[info.watchIndex] = nil
-  end
-
-  mod:Update(OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST)
-end
-
-mod.AddTrackedAchievement = function(cheevID)
-  mod.CleanWidgets()
-  mod:Update(OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT)
-end
-
-
-mod.RemoveTrackedAchievement = function(cheevID)
-  print('|cFFFF8800UntrackAchievement', cheevID)
-  mod.CleanWidgets()
-  mod:Update(OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT)
-end
-
-mod.AcceptQuest = function()
-  mod:Update(OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST_ADDED)
-end
-
-mod.AbandonQuest = function()
-  QuestPOIUpdateIcons()
-  mod:Update(OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST)
-end
-mod.TurnInQuest = function()
-  QuestPOIUpdateIcons()
-  mod:Update(OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST)
-end
-mod.AddAutoQuestPopUp = function(...)
-   mod:Update(OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP)
-end
-mod.RemoveAutoQuestPopUp = function(...)
-  mod:Update(OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP)
-end
-
-
-
-mod.SetSuperTrackedQuestID = function(questID)
-  --mod:Update()
-end
\ No newline at end of file
--- a/ObjectiveTracker/ObjectiveFrame.lua	Tue Oct 25 12:33:20 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,861 +0,0 @@
---- ${PACKAGE_NAME}
--- @file-author@
--- @project-revision@ @project-hash@
--- @file-revision@ @file-hash@
--- Created: 3/30/2016 12:49 AM
-local B = select(2,...).frame
-local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
-local _G, ipairs, max, min, unpack, floor, pairs, tostring, type, band = _G, ipairs, max, min, unpack, floor, pairs, tostring, type, bit.band
-local IsResting, UnitXP, UnitXPMax, GetXPExhaustion = IsResting, UnitXP, UnitXPMax, GetXPExhaustion
-local UnitLevel, IsQuestWatched, UIParent = UnitLevel, IsQuestWatched, UIParent
-local GetAutoQuestPopUp, GetQuestLogCompletionText = GetAutoQuestPopUp, GetQuestLogCompletionText
-local PERCENTAGE_STRING, GetQuestProgressBarPercent = PERCENTAGE_STRING, GetQuestProgressBarPercent
-local Default, AutoQuest, Quest, Bonus, Cheevs = T.DefaultHandler, T.AutoQuest, T.Quest, T.Bonus, T.Cheevs
-local InCombatLockdown, format, lshift, CreateFrame = InCombatLockdown, format, bit.lshift, CreateFrame
-local print = B.print('Tracker')
-local unitLevel = 1
-local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_REASON
-local debug = false
---------------------------------------------------------------------
---- Global frame layout
---------------------------------------------------------------------
-
---- Upvalues
-local Wrapper = _G.VeneerObjectiveWrapper
-local Scroller = Wrapper.scrollArea
-local Scroll = _G.VeneerObjectiveScroll
-local orderedHandlers = T.orderedHandlers
-local orderedNames = T.orderedNames
-
---- Temp values set during updates
-local wrapperWidth, wrapperHeight
-local scrollWidth, scrollHeight
-local previousBlock
-local currentBlock
---- todo: source these from config
-local itemButtonSize, itemButtonSpacing =  36, 1
-
-local headerHeight, headerColor, headerSpacing = 16, {1,1,1,1}, 2
-local headerbg = {'VERTICAL', 1, 1, 0.5, 0.5, 1, 1, 0.5, 0}
-local headerFont, headerSize, headerOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 14, 'OUTLINE'
-
-local titlebg = {'HORIZONTAL', 1, 0, .7, .25, 1, 0, .7, .125}
-local titlebg_daily = {'HORIZONTAL', 0, .7, 1, .25, 0, 1, .7, .125 }
-local titlebg_account = {'HORIZONTAL', 0, .45, 1, .25, 0,  .45, 1, .125}
-local titleFont, titleSize, titleOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 16, 'OUTLINE'
-
-local textbg =  {'HORIZONTAL', 0, 0, 0, 0.4, 0, 0, 0, 0 }
-local textbg_daily = {'HORIZONTAL', 0, .7, 1, .1, 0, 1, .7, .075 }
-local textbg_account = {'HORIZONTAL', 0, .45, 1, 0.4, 0,  .41, 1, .085 }
-local textFont, textSize, textOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Regular.ttf]], 16, 'OUTLINE'
-
-
-local selectionbg = {'HORIZONTAL', 1, 1, 1, 0, 1, 1, 1, 0.225}
-local titleSpacing, textSpacing, blockSpacing = 3, 3, 1
-local titleIndent, textIndent,selectionIndent = 2, 5, 50
-
-local wrapperMaxWidth, wrapperMaxHeight = 270, 490 -- these are the hard bounds, actual *Height variables are changed
-local wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 16, 'NONE'
-local wrapperPosition = {'RIGHT', UIParent, 'RIGHT', -84, 0 }
-local rewardSize = 32
-local oprint = B.print('Objectives')
-local bprint = B.print('Block')
-local tprint = B.print('Tracker')
-local lprint = B.print('Line')
-
-local currentPosition, anchorFrame, anchorPoint
-
-
-
-T.AddBlock = function(handler, block)
-  local print = bprint
-end
-
---- Used as an iterator of sorts for cascaded tag icon placements (the daily/faction/account icons)
-T.AddTag = function (block, tagName, tagPoint, tagAnchor, tagRelative)
-  local print = bprint
-  local tag = block[tagName]
-  if block.info[tagName] and tag then
-    tag:SetTexCoord(unpack(block.info[tagName]))
-    tag:Show()
-    tag:SetPoint(tagPoint, tagAnchor, tagRelative, 0, 0)
-    tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', tag, 'TOPLEFT'
-  else
-    block[tagName]:Hide()
-  end
-  return tagPoint, tagAnchor, tagRelative
-end
-
---- Adds the given line to the current content and advances the anchor pointer to that new line for the following call.
-T.AddLine = function(block, line)
-  local print = lprint
-  line:ClearAllPoints()
-  line:SetPoint('LEFT', block, 'LEFT', 0, 0)
-  line:SetPoint('TOP', block.endPoint, 'BOTTOM', 0, -textSpacing)
-  line:SetPoint('RIGHT', block, 'RIGHT', 0, 0)
-  line:SetHeight(line.height)
-  line:Show()
-
-  block.endIndex = line.index
-  block.numLines = block.numLines + 1
-  block.attachmentHeight = block.attachmentHeight + (line.height + textSpacing)
-  print('     |cFF0088FFsetting line #'..block.numLines..' for|r', block.info.title, "\n            |cFF0088FFsize:|r", line.height,
-    "|cFF0088FFpoint:|r", line:GetPoint(1), "|cFF0088FFwidget:|r", (line.widget and 'Y' or 'N'))
-  block.endPoint = line
-end
-
---- Creates or retrieves a complete line data object
-T.GetLine = function(handler, block, lineIndex)
-  local print = lprint
-  local blockIndex = block.index
-  if not block.lines then
-    block.lines = {}
-  end
-  local lines = block.lines
-  if not lines[lineIndex] then
-    print('     |cFF00FF88created line #'..lineIndex..' from for '..handler.name..' block #'..blockIndex)
-    lines[lineIndex] = CreateFrame('Frame', 'Vn'..handler.name .. blockIndex..'ObjectiveLine'..lineIndex, block, 'VeneerTrackerObjective')
-    local line = lines[lineIndex]
-    line.index = lineIndex
-    line.height = 0
-    line.status:SetSpacing(textSpacing)
-    line.status:SetPoint('LEFT', line, 'LEFT', textIndent, 0)
-    B.SetConfigLayers(line)
-
-    if lines[lineIndex+1] then
-      lines[lineIndex+1]:ClearAllPoints()
-    end
-
-    if debug then
-      for _, region in ipairs(lines[lineIndex].debug) do
-        region:Show()
-      end
-    end
-
-  end
-  return lines[lineIndex]
-end
-
---- Creates or retrieves a complete block frame object
-T.GetBlock = function(handler, blockIndex)
-  local print = bprint
-  local block = handler.usedBlocks[blockIndex]
-
-  if not handler.usedBlocks[blockIndex] then
-    if #handler.freeBlocks >= 1 then
-      block = handler.freeBlocks[#handler.freeBlocks]
-      handler.freeBlocks[#handler.freeBlocks] = nil
-    else
-      block = CreateFrame('Frame', 'Veneer'..tostring(handler)..'Block'..blockIndex, Scroll, 'VeneerTrackerBlock')
-
-
-
-      local c = T.Conf.Wrapper
-      block.index = blockIndex
-      block.SetStyle = T.SetBlockStyle
-      block:SetWidth(c.Width)
-
-      block.title:SetSpacing(c.TitleSpacing)
-      block.title:SetPoint('TOP', block, 'TOP', 0, -titleSpacing)
-
-      block.titlebg:SetTexture(1,1,1,1)
-      block.titlebg:SetGradientAlpha(unpack(T.colors.default.titlebg))
-      block.titlebg:SetPoint('TOP', block, 'TOP', 0, 0)
-      block.titlebg:SetPoint('BOTTOM', block.title, 'BOTTOM', 0, -titleSpacing)
-
-      block.status:SetSpacing(c.TextSpacing)
-      block.status:SetPoint('TOP', block.titlebg, 'BOTTOM', 0, -textSpacing)
-      block.status:SetPoint('LEFT', block.titlebg, 'LEFT', textIndent, 0)
-
-      block.statusbg:SetPoint('TOP', block.titlebg, 'BOTTOM', 0, 0)
-      block.statusbg:SetPoint('BOTTOM', block, 'BOTTOM', 0, 0)
-      block.statusbg:SetTexture(1,1,1,1)
-      block.statusbg:SetGradientAlpha(unpack(T.colors.default.textbg))
-
-      block.SelectionOverlay:SetGradientAlpha(unpack(T.colors.default.selectionbg))
-      block.SelectionOverlay:SetPoint('TOPLEFT', selectionIndent, 0)
-      block.SelectionOverlay:SetPoint('BOTTOMRIGHT')
-
-      block.icon:SetSize(rewardSize, rewardSize)
-      block.icon:SetPoint('TOPRIGHT', block, 'TOPRIGHT', -2, -2)
-
-
-      --- methods for event handlers
-
-      block.Select = handler.Select
-      block.Open = handler.Open
-      block.Remove = handler.Remove
-      block.Link = handler.Link
-      block.clickZone:SetScript('OnMouseUp', function(self, ...) handler.OnMouseUp(block, ...) end)
-      block.clickZone:SetScript('OnMouseDown', function(self, ...) handler.OnMouseDown(block, ...) end)
-      block.attachmentHeight = 0
-      block:ClearAllPoints()
-
-      B.SetConfigLayers(block)
-
-      if debug then
-        for _, region in ipairs(block.debug) do
-          region:Show()
-        end
-      end
-    end
-    handler.usedBlocks[blockIndex] = block
-  end
-  return handler.usedBlocks[blockIndex]
-end
-
---- Module-specific data wrangling that has to happen during UpdateBlock()
- -- Most of this is sculpting objectives data into a parsible list.
- -- Some of it is additional block manipulation that doesn't quite fit with the other modules..
-Bonus.UpdateObjectives = function(handler, block)
-  Default.UpdateObjectives(handler, block)
-end
-
-
---- They are not exactly quests, but the aliases used to signal that a quest was pushed into your log by the environment.
- -- Once accepted they never appear again unless the quest is dropped (daily reset/abandon quest)
-local CLICK_TO_COMPLETE = 'Click to Complete'
-local CLICK_TO_ACCEPT = 'Click to Accept'
-AutoQuest.UpdateObjectives = function(handler, block)
-  local print = lprint
-  if block.info.type == 'OFFER' then
-    block.status:SetText(CLICK_TO_ACCEPT)
-  end
-end
-
-
-
-
---- Does the main iterations for populating block content.
- -- Hooked by corresponding handler functions where additional details need to be sorted.
-Default.UpdateObjectives = function(handler, block)
-  local print = lprint
-  local info = block.info
-  print('   |cFF00FF00default objectives routine', block:GetName())
-
-  -- reset the starting positions
-  block.attachmentHeight = 0
-  block.endPoint = block.titlebg
-  local completionScore, completionMax = 0, 0
-  local displayObjectiveHeader = false
-
-
-  --- The first line is going to be used no matter what, so it is hard-pulled.
-   -- It also ensures that we're in the right position for cleaning up the leftover lines.
-  local lineIndex = 1
-  local line = T.GetLine(handler, block, lineIndex)
-
-  block.numLines = 0
-  block.attachmentHeight = 0
-
-  if info.description and #info.description >= 1 then
-    print('   |cFF00FFFF  header line:|r', info.description)
-    line.status:SetText(info.description)
-    line.height = floor(line.status:GetStringHeight()+.5) + textSpacing
-    if line.widget then
-      line.widget:Hide()
-    end
-    T.AddLine(block, line)
-
-    lineIndex = lineIndex + 1
-    line = T.GetLine(handler, block, lineIndex)
-  end
-
-  if (info.isComplete == true or info.isComplete == nil) and info.completionText then
-    print('     overriding line #1 for completion text:', info.completionText)
-    line.status:SetText(info.completionText)
-    line.height = floor(line.status:GetStringHeight()+.5) + textSpacing
-    if line.widget then
-      line.widget:Hide()
-    end
-    T.AddLine(block, line)
-  else
-    if info.objectives then
-      for i, data in ipairs(info.objectives) do
-        print('     |cFF88FF00#', i, data.type, data.text)
-        displayObjectiveHeader = true
-        line.height = 0
-        handler:UpdateLine(block, line, data)
-
-        -- For progressbar and timer lines, status text may be used as the title heading
-        if line.widget then
-          local widgetPosition = 0
-          --- WIDGET POSITION -------------------------------------------------
-          line.widget:SetPoint('TOP', line, 'TOP', 0, -widgetPosition)
-          line.widget:Show()
-          line.height = line.widget:GetHeight() + textSpacing
-          ---------------------------------------------------------------------
-          if line.displayText and #line.displayText >= 1 then
-            widgetPosition = line.status:GetHeight() + textSpacing
-            line.status:SetText(line.displayText)
-            line.height = floor(line.status:GetStringHeight()+.5) + textSpacing + line.widget.height
-            print('      - progressbar has text, adjust')
-          end
-        elseif line.displayText then
-          line.status:SetText(line.displayText)
-          line.height = floor(line.status:GetStringHeight()+.5)
-        end
-
-        T.AddLine(block, line)
-
-        --print('      sz', line:GetWidth(), line:GetHeight(), 'pt', line:GetPoint(1))
-        --print('     |cFF44BBFF#', i, 'anchoring line, size:', line.height, 'current endpoint:', line.statusbg)
-
-        lineIndex = lineIndex + 1
-        line = T.GetLine(handler, block, lineIndex)
-      end
-    end
-  end
-
-  while (block.lines[lineIndex+1]) do
-    print('      - hide |cFFFF0088'..lineIndex..'|r')
-    block.lines[lineIndex]:Hide()
-    lineIndex = lineIndex +1
-  end
-
-
-
-  if lineIndex > 0 then
-    block.attachmentHeight = block.attachmentHeight + textSpacing * 2
-    print('     |cFF00FF00attachment:', block.attachmentHeight)
-  end
-
-
-  --[[
-  local lines = handler.lines[block.index]
-  if lines and #lines > block.numLines then
-    print('   |cFFFF008' .. (#lines - block.numLines) .. ' extra lines to hide.')
-    for  i = block.numLines + 1, #lines do
-      print('    hide', i, lines[i]:GetName())
-      lines[i]:Hide()
-    end
-  end
-  ]]
-
-
-  if debug then
-    for i, region in ipairs(block.debug) do
-      for j = 1, region:GetNumPoints() do
-        local _, target = region:GetPoint(j)
-        if target:IsVisible() then
-          region:Hide()
-        else
-          region:Show()
-        end
-      end
-    end
-  end
-
-  block.completionScore = completionScore / completionMax
-end
-
-
---- Module-specific display variables
--- * height   - height of whatever display widget is involved in conveying the task
--- * money    - boolean that determines listening for money events or not
--- * progress - number ranging 0 to 2 indicating none/partial/full completion respectively
-
-
-
-Bonus.UpdateLine = function(handler, block, line, data)
-  local info = block.info
-  local print = lprint
-
-
-  line.displayColor = 'FFFFFF'
-  line.displayText = data.text
-  line.progress = 0
-  print('  ', data.objectiveIndex,'|cFFFF0088-|r', data.objectiveType, data.text)
-  if data.objectiveType == 'progressbar' then
-    line.widgetType = 'ProgressBar'
-    print('    |cFFFF44DDpercent='..tostring(GetQuestProgressBarPercent(info.questID)))
-    data.value = GetQuestProgressBarPercent(info.questID) or 0
-    data.maxValue = 100
-    if  data.value >= data.maxValue then
-      line.progress = 1
-    elseif data.value > 0 then
-      line.progress = 2
-    end
-    line.format = PERCENTAGE_STRING
-    local widget = T.SetWidget(line, data, 'ProgressBar', info.questID..'-'..data.objectiveIndex)
-    print('    |cFFFF0022** text:|r', data.text, '|cFFFF0022value:|r', data.value, '|cFFFF0022max:|r', data.maxValue)
-    widget:SetPoint('TOP', line, 'TOP', 0, 0)
-
-    line.widget = widget
-    line.height = widget.height
-  else
-    line.displayText = data.text
-    line.widget = nil
-  end
-  return line
-end
-
-Cheevs.UpdateLine = function(handler, block, line, data)
-  local print = B.print('CheevsLine')
-  line.progress = 0
-  print('  ', data.objectiveIndex,'|cFF0088FF-|r', data.objectiveType, data.text)
-  if data.flags then
-    if band(data.flags, 0x00000001) > 0 then
-      line.format = "%d/%d"
-      line.widget = T.SetWidget(line, data, 'ProgressBar', data.criteriaID)
-      line.height = line.widget.height
-    elseif band(data.flags, 0x00000002) then
-      line.widget = nil
-    else
-      line.widget = nil
-      line.displayColor = 'FFFFFF'
-      line.displayText = line.text
-
-    end
-  else
-
-      line.displayText = data.text
-  end
-  print('line.type =', data.type)
-  print('  ** qtyStr:', data.quantityString, 'qty:', data.quantity, 'assetID:', data.assetID)
-end
-Default.UpdateLine = function(block, line)
-  if line.finished then
-    line.progress = 2
-  elseif line.quantity > 0 then
-    line.progress  = 1
-  else
-    line.progress = 0
-  end
-  return line
-end
-
-
-T.Quest.numButtons = 0
-local usedButtons = T.Quest.itemButtons
-local freeButtons = T.Quest.freeButtons
---[=[
-T.UpdateWrapper = function(reason)
-  print('|cFF00FFFFUpdateWrapper:|r', reason)
-  unitLevel = UnitLevel('player')
-  wrapperWidth = T.Conf.Wrapper.WrapperWidth
-  scrollWidth = T.Conf.Wrapper.WrapperWidth
-  local wrapperBlocks = 0
-  -- Update scroll child vertical size
-  scrollHeight = 0
-  for i, handler in ipairs(orderedHandlers) do
-    T.UpdateTracker(handler)
-    local frame = handler.frame
-    if handler.actualBlocks >= 1 then
-      frame:SetParent(Scroll)
-      frame:SetPoint('TOPLEFT', Scroll, 'TOPLEFT', 0, - scrollHeight)
-      frame:SetSize(wrapperWidth, frame.height)
-      print('|cFF00FFFF'..frame:GetName()..'|r h:|cFF00FF00', frame.height, '|r y:|cFF00FF00', -scrollHeight)
-      scrollHeight = scrollHeight + frame.height
-      frame:Show()
-    else
-      frame:Hide()
-    end
-    wrapperBlocks = wrapperBlocks + handler.actualBlocks
-  end
-  print('final scrollHeight:', scrollHeight)
-
-
-
-  -- Update frame dimensions
-  if scrollHeight > wrapperMaxHeight then
-    print('  is larger than', wrapperMaxHeight)
-    wrapperHeight = wrapperMaxHeight
-  else
-    wrapperHeight = scrollHeight
-    B.Conf.ObjectiveScroll = 0
-  end
-  scrollWidth = floor(scrollWidth+.5)
-  scrollHeight = floor(scrollHeight+.5)
-  wrapperWidth = floor(wrapperWidth+.5)
-  wrapperHeight = floor(wrapperHeight+.5)
-  headerHeight = floor(headerHeight+.5)
-
-  if wrapperBlocks >= 1 then
-    for i, region in ipairs(Wrapper.headerComplex) do
-      region:Show()
-    end
-  else
-    for i, region in ipairs(Wrapper.headerComplex) do
-      region:Hide()
-    end
-    return
-  end
-  --[[wrapperHeight = scrollHeight
-
-  print('|cFFFFFF00params:|r scroller:', scrollWidth .. ',' .. scrollHeight, 'scroll:', scrollWidth .. ',' .. scrollHeight,
-  'wrapper:', wrapperWidth .. ',' .. wrapperHeight,
-  'header:', headerHeight)]]
-
-  --Scroller:SetSize(wrapperWidth, wrapperHeight)
-  Scroller:SetPoint('TOPLEFT', Wrapper, 'TOPLEFT', 0, 0)
-  Scroller:SetPoint('BOTTOMRIGHT', Wrapper, 'BOTTOMRIGHT')
-
-
-  Scroll:SetSize(scrollWidth, scrollHeight)
-  Scroll:SetPoint('TOPLEFT', Scroller, 'TOPLEFT', 0, B.Conf.ObjectiveScroll or 0)
-  Scroll:SetPoint('RIGHT', Scroller, 'RIGHT')
-
-  --Scroller:UpdateScrollChildRect()
-  Wrapper:SetSize(wrapperWidth, wrapperHeight)
-
-  --[[ update action buttons
-  print('|cFF00FF00'..Scroll:GetName()..'|r:', Scroll:GetWidth(), Scroll:GetHeight(),
-    '|cFF00FF00'..Scroller:GetName()..'|r:', Scroller:GetWidth(), Scroller:GetHeight(),
-    '|cFF00FF00'..Wrapper:GetName()..'|r:', Wrapper:GetWidth(), Wrapper:GetHeight(),
-    '|cFF0088FFvScrollRange|r:', floor(Scroller:GetVerticalScrollRange()+.5)
-  )
-  --]]
-  T.UpdateActionButtons()
-
-end
---]=]
-
-
-Default.Update = function (self, reason, ...)
-  local print = tprint
-  local tracker = self.frame
-  local blockIndex = 0
-  local trackerHeight = headerHeight
-
-  tracker.title:SetFont(headerFont, headerSize, headerOutline)
-  tracker.titlebg:SetHeight(headerHeight)
-  tracker.title:SetTextColor(unpack(headerColor))
-  --tracker.titlebg:SetGradientAlpha(unpack(headerbg))
-
-  self.currentAnchor = tracker.titlebg
-  local numWatched = self:GetNumWatched()
-  local numBlocks = self.numBlocks
-  local actualBlocks = 0
-  for watchIndex = 1, 25 do
-    blockIndex = blockIndex + 1
-    if watchIndex <= numWatched then
-      local info = self:GetInfo(watchIndex)
-      if info then
-        local currentBlock = self:UpdateBlock(blockIndex, info)
-        currentBlock:SetPoint('TOPLEFT', self.currentAnchor, 'BOTTOMLEFT', 0, 0)
-        currentBlock:SetPoint('RIGHT', tracker,'RIGHT', 0, 0)
-        self.currentAnchor = currentBlock
-        print('    |cFFFFFF00'..watchIndex..'|r', '|cFF00FF00'..currentBlock:GetName()..'|r', currentBlock.height, trackerHeight)
-        trackerHeight = trackerHeight + currentBlock.height
-        numBlocks = max(numBlocks, watchIndex)
-        actualBlocks = actualBlocks + 1
-      else
-        print('    |cFFFF0000bad GetInfo data for #'..watchIndex)
-      end
-
-    elseif watchIndex <= numBlocks then
-      local used = self.usedBlocks
-      local free = self.freeBlocks
-      print('clean up dead quest block')
-      if used[blockIndex] then
-        used[blockIndex]:Hide()
-        used[blockIndex]:ClearAllPoints()
-        free[#free+1]= used[blockIndex]
-        used[blockIndex] = nil
-      end
-    else
-      print('  |cFFFF9900END|r @', blockIndex)
-      break -- done with quest stuff
-    end
-  end
-  self.numWatched = numWatched
-  self.numBlocks = numBlocks
-  self.actualBlocks = actualBlocks
-
-  tracker.previousHeight = tracker.height
-  if numBlocks >= 1 then
-    previousBlock = nil
-    if tracker.isEmpty then
-      tracker.headerFade:Play()
-      tracker.isEmpty = nil
-    end
-    tracker.height = trackerHeight
-    tracker:SetHeight(tracker.height)
-    tracker:Show()
-  else
-    tracker.isEmpty = true
-    tracker.height = 0
-    tracker:Hide()
-  end
-
-  return tracker.numWatched, tracker.numAll
-end
-
---- Updates the selected block frame to display the given info batch
--- If `previousBlock` is set, it will attempt to anchor to that
--- @param blockNum the ordered block to be updated, not a watchIndex value
--- @param info the reference returned by the GetXInfo functions
--- REMEMBER: t.info and questData[questID] are the same table
-Default.UpdateBlock = function (handler, blockIndex, info)
-  local print = bprint
-  print('  Read list item |cFF00FFFF'..blockIndex..'|r')
-  if not blockIndex or not info then
-    return
-  end
-  local frame = handler.frame
-  local block = T.GetBlock(handler, blockIndex)
-  block.handler = handler
-  block.info = info
-  block.mainStyle = info.mainStyle or 'Normal'
-  block.subStyle = info.subStyle
-
-  info.blockIndex = blockIndex
-  if info.questID then handler.QuestBlock[info.questID] = block end
-  if info.questLogIndex then handler.LogBlock[info.questLogIndex] = block end
-  if info.watchIndex then handler.WatchBlock[info.watchIndex] = block end
-  handler.BlockInfo[blockIndex] = info
-
-  block.endPoint = block.titlebg
-  block.attachmentHeight = 0
-  handler:UpdateObjectives(block)
-
-  block.title:SetText(info.title)
-  local titleHeight = floor(block.title:GetHeight()+.5)
-  local statusHeight = floor(block.status:GetHeight()+.5)
-  local attachmentHeight =floor(block.attachmentHeight + .5)
-  local titlebgHeight = titleHeight + titleSpacing*2
-  local statusbgHeight = statusHeight + textSpacing*2
-
-  block.titlebg:SetHeight(titlebgHeight)
-
-
-  print('    |cFF0088FFanchor to', handler.currentAnchor:GetName())
-
-  print('    |cFF00FF00total sizes:')
-  print('       attachment:', attachmentHeight)
-  print('            title:', titlebgHeight, '('.. titleHeight..')')
-  --block.titlebg:SetHeight(block.title:GetHeight() + T.Conf.Wrapper.TitleSpacing)
-  block.height = titlebgHeight + attachmentHeight
-  if statusHeight > 1 then
-    block.height = block.height + statusbgHeight
-    print('           status:', statusbgHeight, '('.. statusHeight..')')
-  else
-    print('      |cFFFF0088             skipped')
-  end
-  block:SetHeight(block.height)
-
-  print('           |cFFFFFF00height|r:', block.height)
-  print('  |cFF00FFFF)|r -> ', block, block:GetHeight())
-
-  block:Show()
-
-  if info.specialItem and not info.itemButton then
-    print('    - |cFF00FFFFgenerating item button for info set')
-    info.itemButton = T.SetItemButton(block, info)
-  else
-    --info.itemButton = nil
-  end
-
-  local tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', block, 'TOPRIGHT'
-  if info.rewardInfo then
-    print('has immediate reward')
-    if info.rewardInfo[1].type == 'currency' or info.rewardInfo[1].type == 'item' then
-      block.icon:Show()
-      block.iconLabel:SetText(info.rewardInfo[1].count)
-      block.icon:SetPoint(tagPoint, tagAnchor, tagRelative, -2, -2)
-      tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', block.icon, 'TOPLEFT'
-      block.icon:SetTexture(info.rewardInfo[1].texture)
-    end
-  else
-    block.icon:Hide()
-  end
-
-  if info.selected then
-    block.SelectionOverlay:Show()
-  else
-    block.SelectionOverlay:Hide()
-  end
-  -- workaround for scrollchild issue where layers fall out of sync: in this case, it's by 1 vertical pixel
-  --block.highlight:SetPoint('TOPLEFT', block, 'TOPLEFT', 0, 1)
-  --block.lowlight:SetPoint('BOTTOMLEFT', block, 'BOTTOMLEFT', 0, 1)
-
-  tagPoint, tagAnchor, tagRelative = T.AddTag(block, 'frequencyTag', tagPoint, tagAnchor, tagRelative)
-  tagPoint, tagAnchor, tagRelative = T.AddTag(block, 'typeTag', tagPoint, tagAnchor, tagRelative)
-  tagPoint, tagAnchor, tagRelative = T.AddTag(block, 'completionTag', tagPoint, tagAnchor, tagRelative)
-
-  return block
-end
-----------
---- Top level methods
-
-local tick = 0
-function T:Update (reason, ...)
-  tick = tick + 1
-  local print = tprint
-  reason = reason or OBJECTIVE_TRACKER_UPDATE_REASON
-  local updateWrapper = 0
-  local hasStuff
-  local insertingStuff
-
-  print(format('%d |cFFFF%04X Update()', tick, lshift(reason, 4)), reason, ...)
-  currentPosition = 0
-  anchorPoint = 'TOP'
-  anchorFrame = Scroll
-
-  local wrapperHeight = 0
-  for id, handler in pairs(T.orderedHandlers) do
-    local frame = handler.frame
-
-    print(format('|cFF00FFFF%s and(%04X vs %04x+%04x) = %04X|r', handler.name, reason, handler.updateReasonModule, handler.updateReasonEvents, band(reason, handler.updateReasonModule + handler.updateReasonEvents)))
-    if band(reason, handler.updateReasonModule + handler.updateReasonEvents) > 0 then
-      handler:Update(reason, ...)
-      print(' |cFF00FF00'..id..'|r', handler.displayName, 'count:', handler.numWatched)
-      insertingStuff = true
-    else
-      print(' |cFFFF0088'..id..'|r', 'no reason to update')
-    end
-
-    if handler.numWatched >= 1 then
-      hasStuff = true
-      currentPosition = currentPosition + 1
-      frame:SetParent(Scroll)
-      frame:SetPoint('TOP', anchorFrame, anchorPoint, 0, 0)
-      print('  |cFF00BBFFpinning to', anchorFrame:GetName(), anchorPoint)
-      anchorFrame = handler.frame
-      anchorPoint = 'BOTTOM'
-
-      print('current frame height:', frame.height)
-      wrapperHeight = wrapperHeight + frame.height
-      print('|cFFFF0088total height:', wrapperHeight)
-    else
-      handler.frame:Hide()
-    end
-  end
-
-
-  if  hasStuff or insertingStuff then
-    print('updating height to', wrapperHeight)
-    Wrapper:SetHeight(wrapperHeight)
-    Scroller:SetHeight(wrapperHeight)
-    Scroll:SetHeight(wrapperHeight)
-    Scroller:SetVerticalScroll(B.Conf.ObjectiveScroll or 0)
-    print('|cFFFF8800Wrapper:', Wrapper:GetSize())
-    for i = 1, Wrapper:GetNumPoints() do
-      print(' ', Wrapper:GetPoint(i))
-    end
-    print('  |cFF00FFFFScroller:', Scroller:GetSize())
-    for i = 1, Scroller:GetNumPoints() do
-      print(' ', Scroller:GetPoint(i))
-    end
-    print('  |cFF00FFFFScroll:', Scroll:GetSize())
-    for i = 1, Scroll:GetNumPoints() do
-      print(' ', Scroll:GetPoint(i))
-    end
-
-    Wrapper:Show()
-    Scroller:Show()
-    Scroll:Show()
-  end
-  Quest.GetClosest()
-  --T.UpdateActionButtons(reason)
-end
-
---- Queue any active item buttons for update for that frame
-local iprint = B.print('ItemButton')
-T.UpdateActionButtons = function(updateReason)
-  local print = iprint
-  Scroller.snap_upper = 0
-  Scroller.snap_lower = 0
-  local print = B.print('ItemButton')
-  if updateReason then
-    print = B.print('IB_'..updateReason)
-  end
-
-  local previousItem
-  for questID, itemButton in pairs(Quest.itemButtons) do
-    local info= T.Quest.Info[questID]
-
-    print('|cFF00FFFF'.. questID .. '|r', itemButton:GetName())
-    local block = T.Quest.QuestBlock[questID]
-    if block then
-        -- Dispatch the probe
-      if IsQuestWatched(info.questLogIndex) then
-        itemButton.previousItem = previousItem
-        print('  |cFFFFFF00probing', block:GetName())
-        block:SetScript('OnUpdate', function()
-          if block:GetBottom() and not InCombatLockdown() then
-            print('  '..block:GetName()..' |cFF00FF00probe hit!')
-            T.UpdateBlockAction(block, itemButton, itemButton.previousItem) -- needs to be previousItem from this scope
-            block:SetScript('OnUpdate', nil)
-
-          end
-        end)
-        previousItem = itemButton
-      else
-        print('hidden block or unwatched quest')
-        itemButton.previousItem = nil
-        itemButton:Hide()
-      end
-    elseif itemButton:IsVisible() then
-      print('  |cFFFF0088hiding unwatched quest button', itemButton:GetName())
-      itemButton.previousItem = nil
-      itemButton:Hide()
-    else
-      print('  |cFFBBBBBBignoring hidden log quest button', itemButton:GetName())
-    end
-  end
-end
-
-T.UpdateBlockAction = function (block, itemButton)
-  local print = iprint
-  print('**|cFF0088FF'..itemButton:GetName(), '|r:Update()')
-  if itemButton.questID ~= block.info.questID then
-    print('** |cFFFF0088mismatched block assignment', itemButton.questID,'<~>', block.info.questID)
-    -- something happened between this and last frame, go back and set new probes
-    return T.UpdateActionButtons()
-  end
-
-  local previousItem = itemButton.previousItem
-  local upper_bound = Scroller:GetTop() + Scroller.snap_upper
-  local lower_bound = Scroller:GetBottom() + Scroller.snap_lower + itemButtonSize
-  local point, anchor, relative
-
-  if block:GetBottom() < lower_bound then
-    print('** ',block:GetName() ,'|cFFFFFF00bottom =', floor(block:GetBottom()+.5), 'threschold =', floor(lower_bound+.5))
-    if previousItem then
-      print('adjusting', previousItem:GetName())
-      previousItem:ClearAllPoints()
-      previousItem:SetPoint('BOTTOM', itemButton, 'TOP', 0, itemButtonSpacing)
-    end
-    itemButton:ClearAllPoints()
-    itemButton.x = Wrapper:GetLeft() -4
-    itemButton.y = Wrapper:GetBottom()
-    point, anchor, relative = 'BOTTOMRIGHT', UIParent, 'BOTTOMLEFT'
-    Scroller.snap_lower = Scroller.snap_lower + itemButtonSize + itemButtonSpacing
-
-  elseif block:GetTop() > upper_bound then
-    print('** ',block:GetName() ,'|cFFFFFF00top =', floor(block:GetTop()+.5), 'threschold =', floor(upper_bound+.5))
-    itemButton:ClearAllPoints()
-    if previousItem then
-      print('latch onto another piece')
-      point, anchor, relative ='TOP', previousItem, 'BOTTOM'
-      itemButton.x = 0
-      itemButton.y = -itemButtonSpacing
-    else
-      print('latch at corner', Scroller:GetLeft() -itemButtonSpacing, Scroller:GetTop())
-      point, anchor, relative = 'TOPRIGHT', UIParent, 'BOTTOMLEFT'
-      itemButton.x = Scroller:GetLeft() -4
-      itemButton.y = Scroller:GetTop()
-    end
-    itemButton:Show()
-    Scroller.snap_upper = Scroller.snap_upper - (itemButtonSize + itemButtonSpacing)
-  else
-    print('** ',block:GetName() ,'|cFF00FF00span =', floor(block:GetBottom()+.5), floor(block:GetTop()+.5), 'threschold =', floor(lower_bound+.5))
-    itemButton:ClearAllPoints()
-    itemButton.x = block:GetLeft() - itemButtonSpacing
-    itemButton.y = block:GetTop()
-    point, anchor, relative = 'TOPRIGHT', UIParent, 'BOTTOMLEFT'
-  end
-
-  itemButton:SetPoint(point, anchor, relative, itemButton.x, itemButton.y)
-  itemButton:Show()
-end
-
-T.UpdateItemButtonCooldown = function(button)
-
-end
-
-local unitLevel = UnitLevel('player')
-
-
--- a/ObjectiveTracker/ObjectiveInfo.lua	Tue Oct 25 12:33:20 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,341 +0,0 @@
-local B = select(2,...).frame
-local wipe, pairs, ipairs, min, max, unpack = table.wipe, pairs, ipairs, min, max, unpack
-local tinsert, tostring, format, mod = tinsert, tostring, format, mod
-local GetQuestTagInfo, GetQuestLogTitle = GetQuestTagInfo, GetQuestLogTitle
-local GetNumQuestLogEntries, GetNumQuestWatches, GetQuestLogCompletionText, IsQuestWatched, IsQuestHardWatched, GetQuestLogSpecialItemInfo, GetQuestLogSpecialItemCooldown = GetNumQuestLogEntries, GetNumQuestWatches, GetQuestLogCompletionText, IsQuestWatched, IsQuestHardWatched, GetQuestLogSpecialItemInfo, GetQuestLogSpecialItemCooldown
-local GetNumAutoQuestPopUps, GetAutoQuestPopUp, GetTasksTable, GetNumQuestLogTasks, GetTaskInfo, GetQuestObjectiveInfo = GetNumAutoQuestPopUps, GetAutoQuestPopUp, GetTasksTable, GetNumQuestLogTasks, GetTaskInfo, GetQuestObjectiveInfo
-local GetNumQuestLogRewardCurrencies, GetQuestLogRewardCurrencyInfo, GetNumQuestLogRewards, GetQuestLogRewardInfo, GetQuestLogRewardMoney, GetMoneyString = GetNumQuestLogRewardCurrencies, GetQuestLogRewardCurrencyInfo, GetNumQuestLogRewards, GetQuestLogRewardInfo, GetQuestLogRewardMoney, GetMoneyString
-local GetNumQuestLeaderBoards, GetAchievementNumCriteria, GetQuestLogLeaderBoard, GetAchievementCriteriaInfo = GetNumQuestLeaderBoards, GetAchievementNumCriteria, GetQuestLogLeaderBoard, GetAchievementCriteriaInfo
-local GetQuestWatchIndex, GetQuestLogIndexByID, GetSuperTrackedQuestID, SetSuperTrackedQuestID, GetQuestWatchInfo = GetQuestWatchIndex, GetQuestLogIndexByID, GetSuperTrackedQuestID, SetSuperTrackedQuestID, GetQuestWatchInfo
-local QuestHasPOIInfo, GetDistanceSqToQuest, GetQuestFactionGroup = QuestHasPOIInfo, GetDistanceSqToQuest, GetQuestFactionGroup
-local GetTrackedAchievements, GetNumTrackedAchievements, GetAchievementInfo = GetTrackedAchievements, GetNumTrackedAchievements, GetAchievementInfo
-local GetMoney, floor = GetMoney, floor
-local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
-local print = B.print('Info')
-local QUEST_TAG_DUNGEON = QUEST_TAG_DUNGEON
-local QUEST_TAG_GROUP = QUEST_TAG_GROUP
-local QUEST_TAG_ACCOUNT = QUEST_TAG_ACCOUNT
-local QUEST_TAG_TCOORDS = QUEST_TAG_TCOORDS
-local LE_QUEST_FREQUENCY_DAILY = LE_QUEST_FREQUENCY_DAILY
-local LE_QUEST_FREQUENCY_WEEKLY = LE_QUEST_FREQUENCY_WEEKLY
-local FACTION_ALLIANCE, LE_QUEST_FACTION_HORDE, FACTION_HORDE, LE_QUEST_FACTION_HORDE = FACTION_ALLIANCE, LE_QUEST_FACTION_HORDE, FACTION_HORDE, LE_QUEST_FACTION_HORDE
-
-local Tracker, Bonus, AutoQuest, Quest, Cheevs = T.DefaultTracker, T.Bonus, T.AutoQuest, T.Quest, T.Cheevs
---------------------------------------------------------------------
---- Tracker-specific data retrieval functions
---------------------------------------------------------------------
-
-
-local DoQuestRewards= function(t, questID)
-  local rewards = {}
-  t.numCurrencies = GetNumQuestLogRewardCurrencies(questID)
-  for i = 1, t.numCurrencies do
-    local name, texture, count = GetQuestLogRewardCurrencyInfo(i, questID)
-    tinsert(rewards,{
-      type = 'currency',
-      index = i,
-      name = name,
-      texture = texture,
-      count = count
-    });
-  end
-  -- items
-  t.numItems = GetNumQuestLogRewards(questID)
-  for i = 1, t.numItems do
-    local name, texture, count, quality, isUsable = GetQuestLogRewardInfo(i, questID)
-    tinsert(rewards, {
-      type = 'item',
-      index = i ,
-      name = name,
-      texture = texture,
-      count = count,
-      quality = quality,
-      isUsable = isUsable
-    });
-  end
-  -- money
-
-  local money = GetQuestLogRewardMoney(questID)
-  if ( money > 0 ) then
-    tinsert(rewards, {
-      type = 'money',
-      name = GetMoneyString(money),
-      texture = "Interface\\Icons\\inv_misc_coin_01",
-      count = 0,
-    });
-  end
-
-  if #rewards >= 1 then
-    t.rewardInfo = rewards
-  end
-end
-
-
------------------------------
---- AUTO_QUEST
-AutoQuest.LogInfo = {}
-AutoQuest.LogBlock = {}
-AutoQuest.QuestBlock = {}
-AutoQuest.WatchBlock = {}
-function AutoQuest:GetNumWatched ()
-  print(self.name, self)
-  Quest:GetNumWatched()
-  self.numWatched = GetNumAutoQuestPopUps()
-
-  return self.numWatched
-end
-AutoQuest.GetInfo = function(self, popupIndex)
-
-
-  local questID, type = GetAutoQuestPopUp(popupIndex)
-  local questLogIndex = GetQuestLogIndexByID(questID)
-  local title, level, suggestedGroup, isHeader, isCollapsed, isComplete, frequency, questID, startEvent, displayQuestID, isOnMap, hasLocalPOI, isTask, isStory = GetQuestLogTitle(questLogIndex)
-
-  self.Info[questID] = self.Info[questID] or {}
-  local popup = self.Info[questID]
-  popup.title = title
-  popup.description = type
-  popup.popupType = type
-  popup.questID = questID
-  popup.questLogIndex = questLogIndex
-  popup.popupIndex = popupIndex
-
-  self.Info[questID] = popup
-  self.WatchInfo[popupIndex] = popup
-
-
-  return self.Info[questID]
-end
-
------------------------------
---- BONUS OBJECTIVE
--- The default UI pops them up as you enter their relevant areas, but the data is actually available at all times.
--- The only requirement is that you've been to said area and progressed any of the objectives.
--- Blizzard deal with this fact by caching any task data collected during session and masking out whatever gets completed.
--- For the addon's module structure to work, GetNumWatched method also invokes a tasks table scan.
--- That composes the table searched by GetInfo().
-
-------------------------------------------------------------------------------------------
---- These functions are copied from Blizzard_BonusObjectiveTracker.lua;
--- It's kind of dumb, but this avoids the risk of code taint.
-
---- Returns a tasks table modified to include recently completed objectives
-local UnitName, GetRealmName = UnitName, GetRealmName
-local InternalGetTasksTable = function()
-  local savedTasks = T.Conf.TasksLog
-  local char = UnitName("player")
-  local realm = GetRealmName()
-  local tasks = GetTasksTable()
-
-  for questID, data in pairs(Bonus.Info) do
-
-    print('  -- questID:', questID, #data.objectives)
-      for i, o in ipairs(data.objectives) do
-        print('    --', i, o.text)
-      end
-
-  end
-
-
-  for questID, data in pairs(savedTasks) do
-    if questID > 0  then
-      local found = false
-      for i = 1, #tasks do
-        if tasks[i] == questID then
-          found = true
-          break
-        end
-      end
-      -- if it's not part of the current table, then try to insert it where it was last found
-      if not found then
-        if data.watchIndex < #tasks then
-          tinsert(tasks, data.watchIndex, data)
-        else
-          tinsert(tasks, data)
-        end
-      end
-    end
-  end
-  return tasks
-end
-
---- Returns an entry from the composed tasks table if possible, otherwise makes an API pull
-local InternalGetTaskInfo = function(questID)
-  local completedTasks = T.Conf.TasksLog
-  if completedTasks[questID] then
-    return true, true, #completedTasks[questID].objectives
-  else
-    return GetTaskInfo(questID)
-  end
-end
-
---- Same as above but for the objective entries
-local InternalGetQuestObjectiveInfo = function(questID, objectiveIndex)
-  local completedTasks = T.Conf.TasksLog
-  if ( completedTasks[questID] ) then
-    print('using internal data')
-    return completedTasks[questID].objectives[objectiveIndex], completedTasks[questID].objectiveType, true;
-  else
-    return GetQuestObjectiveInfo(questID, objectiveIndex, false);
-  end
-end
-
---- end redundant copy of silliness
-------------------------------------------------------------------------------------------
-
-Bonus.Completed = {}
-Bonus.POI = {}
-Bonus.Scenario = {}
-Bonus.QuestBlock = {}
-Bonus.WatchInfo = {}
-function Bonus:GetNumWatched ()
-  print(self.name, self)
-
-  local tasks = InternalGetTasksTable()
-  local numWatched = 0
-  local numAll = 0
-  self.WatchInfo = {}
-  print('|cFFFFFF00Bonus.GetNumWatched()|r', #tasks)
-  print('  TasksTable pull:')
-  for i, questID in ipairs(tasks) do
-    local isInArea, isOnMap, numObjectives = InternalGetTaskInfo(questID)
-    local existingTask = self.QuestBlock[questID]
-    local displayObjectiveHeader = false;
-    local test = (isInArea or (isOnMap and existingTask))
-    --local test = true
-    if test then
-      self.Info[questID] = self.Info[questID] or {}
-
-      local t = self.Info[questID]
-      self.WatchInfo[i] = t
-      t.isInArea = isInArea
-      t.isOnMap = isOnMap
-      t.existingTask = existingTask
-      t.questID = questID
-      t.objectives = {}
-      t.taskIndex = i
-
-
-      DoQuestRewards(t, questID)
-
-      local taskTitle
-      local taskFinished = true;
-      for objectiveIndex = 1, numObjectives do
-        local text, objectiveType, finished, displayAsObjective = InternalGetQuestObjectiveInfo(questID, objectiveIndex, false);
-        displayObjectiveHeader = displayObjectiveHeader or displayAsObjective;
-        if not taskTitle then
-          if objectiveType == 'progressbar' and not text:match('^%d%+\\%d+') then
-            taskTitle = text
-            text = ''
-          end
-        end
-
-
-        print('  --', text, objectiveType, finished, displayAsObjective)
-        t.objectives[objectiveIndex] = t.objectives[objectiveIndex] or  {}
-        local  o = t.objectives[objectiveIndex]
-
-        o.objectiveIndex = objectiveIndex
-        o.text = text
-        o.objectiveType = objectiveType
-        o.finished = finished
-        o.displayAsObjective = displayAsObjective
-        print('     |cFF00FF88*', objectiveIndex, text)
-      end
-
-      -- didn't get a name from progress bar? what about area name
-      if not taskTitle then
-        if isInArea then
-          taskTitle = GetMapNameByID(GetCurrentMapAreaID())
-        end
-      end
-      t.title = taskTitle
-    end
-
-    print ('    |cFF00FF88#', i, 'questID', questID, 'inArea', isInArea, 'onMap', isOnMap, 'existing', (existingTask and 'Y' or 'N'), (test and '|cFF00FF00show|r' or '|cFFFF0088hide|r'))
-  end
-
-
-  self.numAll = #tasks
-  self.numWatched = #self.WatchInfo
-  print('  stats:', self.numAll, 'active tasks,', self.numWatched, 'nearby or animating')
-  --return #tasks
-  return #self.WatchInfo
-end
-
---- info cleanup done when  turn-ins are detected
-Bonus.OnTurnIn = function(self, questID, xp, money)
-
-  if #self.info.rewardInfo >= 1 then
-    for i, reward in ipairs(self.info.rewardInfo) do
-      --[[
-        type = 'item',
-        index = i ,
-        name = name,
-        texture = texture,
-        count = count,
-        quality = quality,
-        isUsable = isUsable
-       ]]
-      print(' reward ', i, ' ', reward.type, reward.name, reward.count)
-
-    end
-  end
-
-  print('|cFFFF8800'..self.name..':OnTurnIn call', questID, xp, money)
-  local savedTasks = B.Conf.TasksLog
-
-  self.Info[questID].completedTime = GetTime()
-  self.Info[questID].animate = true
-  T.SetAnimate(self.watchReasonModule)
-  savedTasks[questID] = self.Info[questID]
-end
-
-Bonus.GetInfo = function(self, taskIndex)
-  print(self.name, self)
-  return self.WatchInfo[taskIndex]
-end
-
-
-
-Cheevs.GetNumWatched = function(self)
-  print('|cFF00FF00' .. GetTime())
-  Cheevs.trackedCheevs = {GetTrackedAchievements()}
-  return GetNumTrackedAchievements()
-end
-Cheevs.GetInfo = function(self, index)
-  local cheevID = Cheevs.trackedCheevs[index]
-  local id, name, points, completed, month, day, year, description, flags, icon, rewardText, isGuildAch, wasEarnedByMe, earnedBy = GetAchievementInfo(cheevID)
-
-  self.Info[cheevID] = {}
-  local c = self.Info[cheevID]
-  c.type = 'Cheevs'
-  c.watchIndex = index
-  c.cheevID = cheevID
-  c.title = name
-  c.points, c.completed, c.month, c.day, c.year, c.description, c.flags, c.icon, c.rewardText, c.isGuildAch, c.wasEarnedByMe, c.earnedBy =
-  points, completed, month, day, year, description, flags, icon, rewardText, isGuildAch, wasEarnedByMe, earnedBy
-  c.numObjectives = GetAchievementNumCriteria(cheevID)
-  c.objectives = {}
-  for i = 1, c.numObjectives do
-    local description, type, completed, quantity, requiredQuantity, characterName, flags, assetID, quantityString, criteriaID = GetAchievementCriteriaInfo(cheevID, i)
-    c.objectives[i] = {
-      objectiveIndex = i,
-      cheevID = cheevID,
-      text = description,
-      type = type,
-      finished = completed,
-      value = quantity,
-      maxValue = requiredQuantity,
-      characterName = characterName,
-      flags = flags,
-      assetID = assetID,
-      quantityString = quantityString,
-      criteriaID = criteriaID,
-    }
-  end
-  print('Cheevs.|cFF0088FFGetInfo|r('..index..')', 'obj:', GetAchievementNumCriteria(cheevID), name, description)
-
-  self.WatchInfo[index] = c
-  return self.Info[cheevID]
-end
--- a/ObjectiveTracker/ObjectiveWidgets.lua	Tue Oct 25 12:33:20 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,440 +0,0 @@
-local B = select(2,...).frame
-local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
-local print = B.print('WidgetFactory')
-local _G, UIParent = _G, UIParent
-local GetQuestLogSpecialItemInfo, IsQuestLogSpecialItemInRange, GetQuestLogSpecialItemCooldown = GetQuestLogSpecialItemInfo, IsQuestLogSpecialItemInRange, GetQuestLogSpecialItemCooldown
-local CooldownFrame_SetTimer, SetItemButtonTextureVertexColor, CreateFrame, VeneerObjectiveScroll = CooldownFrame_SetTimer, SetItemButtonTextureVertexColor, CreateFrame, VeneerObjectiveScroll
-local tremove, tContains, pairs, ipairs, setmetatable, floor = tremove, tContains, pairs, ipairs, setmetatable, floor
-local SetItemButtonTexture, SetItemButtonCount = SetItemButtonTexture, SetItemButtonCount
-local ToggleWorldMap, GetTrackedAchievements, GetTasksTable = ToggleWorldMap, GetTrackedAchievements, GetTasksTable
--- GLOBALS: Veneer_QuestObjectiveItem_UpdateCooldown, Veneer_QuestObjectiveItem_OnUpdate
---- frame refs
-local Wrapper = _G.VeneerObjectiveWrapper
-local Scroller = Wrapper.scrollArea
-local CloseButton = Wrapper.CloseButton
-local QuestMapButton = Wrapper.QuestMapButton
-local Scroll = _G.VeneerObjectiveScroll
-local usedButtons = T.Quest.itemButtons
-local freeButtons = T.Quest.freeButtons
-
-T.buttons = {
-  CloseButton = {
-    closedSwatch = {
-      [[Interface\Buttons\UI-Panel-QuestHideButton]],
-      [[Interface\Buttons\UI-Panel-QuestHideButton]],
-      0, 0.5, 0.5, 1,
-      0.5, 1, 0.5, 1,
-    },
-    openSwatch = {
-      [[Interface\Buttons\UI-Panel-QuestHideButton]],
-      [[Interface\Buttons\UI-Panel-QuestHideButton]],
-      0.5, 1, 0.5, 1,
-      0, 0.5, 0.5, 1,
-    },
-    parent = 'VeneerObjectiveWrapper'
-  },
-  QuestMapButton = {
-    closedSwatch = {
-      [[Interface\QUESTFRAME\UI-QUESTMAP_BUTTON]],
-      [[Interface\QUESTFRAME\UI-QUESTMAP_BUTTON]],
-      0, 1, 0.5, 1,
-      0, 1, 0, 0.5,
-    },
-    openSwatch = {
-      [[Interface\QUESTFRAME\UI-QUESTMAP_BUTTON]],
-      [[Interface\QUESTFRAME\UI-QUESTMAP_BUTTON]],
-      0, 1, 0, 0.5,
-      0, 1, 0.5, 1,
-    }
-  }
-}
-
-local Scroller_OnShow = function()
-  Wrapper.watchMoneyReasons = 0;
-  --T:Update()
-  --T:OnInitialize()
-  for i, region in ipairs(Wrapper.headerComplex) do
-    region:Show()
-  end
-end
-
-local Scroller_OnHide = function()
-  local self = Wrapper
-  Wrapper:UnregisterAllEvents()
-  Wrapper:SetScript('OnEvent', nil)
-  for i, region in ipairs(Wrapper.headerComplex) do
-    region:Hide()
-  end
-end
-
-local Scroller_OnMouseWheel = function(self, delta)
-  local r = Scroll:GetHeight() - Scroller:GetHeight()
-  local s = B.Conf.ObjectiveScroll - delta * floor(r/5+.5)
-  local from = self:GetVerticalScroll()
-  print('|cFF00FF00OnMouseWheel', 'scroll =', s)
-  if s >= r then
-    s = r
-  elseif s < 1 then
-    s = 0
-  end
-  self:SetVerticalScroll(s)
-  B.Conf.ObjectiveScroll = s
-  print('|cFF00FF00OnMouseWheel', 'from = ', from, 'scroll =', s, ' range =', r, 'current =', self:GetVerticalScroll())
-
-  T.UpdateActionButtons('SCROLLING')
-end
-
-local UpdatePanelButton = function (self, state)
-  state = state or true
-  local swatch = (state == true) and self.openSwatch or self.closedSwatch
-  print((state ~= true) and 'closedSwatch' or 'openSwatch')
-  self:SetNormalTexture(swatch[1])
-  self:SetPushedTexture(swatch[2])
-  if #swatch >= 6 then
-    self:GetNormalTexture():SetTexCoord(swatch[3], swatch[4], swatch[5], swatch[6])
-  end
-  if #swatch == 10 then
-    self:GetPushedTexture():SetTexCoord(swatch[7], swatch[8], swatch[9], swatch[10])
-  end
-
-end
-
-local OnClick = {}
-OnClick.CloseButton = function(self)
-  T:SetEnabled()
-  UpdatePanelButton(self, T.Conf.enabled)
-end
-
-OnClick.QuestMapButton = function()
-  ToggleWorldMap()
-end
-
-
-T.InitializeWidgets = function()
-  local panelButtons = T.buttons
-  --- tracker scroll
-  Scroller:SetScript('OnMouseWheel', Scroller_OnMouseWheel)
-  Scroller:SetScript('OnShow', Scroller_OnShow)
-  Scroller:SetScript('OnHide', Scroller_OnHide)
-  for name, swatch in pairs(panelButtons) do
-    local source = swatch and swatch or panelButtons.CloseButton
-    local button = Wrapper[name]
-    button.parent = swatch.parent
-    button.openSwatch = source.openSwatch
-    button.closedSwatch = source.closedSwatch
-    if OnClick[name] then
-      button:SetScript('OnClick', OnClick[name])
-    end
-    UpdatePanelButton(button, T.Conf.enabled)
-  end
-end
-
-----------------------------------------------------------------------------------------
---- modified version of the itemButton initializer used by Barjack's 'QuestKing 2' addon,
---- url: http://mods.curse.com/addons/wow/questking
-----------------------------------------------------------------------------------------
-T.SetItemButton = function(block, info)
-  local itemInfo = info.specialItem
-  if not itemInfo then
-    return
-  end
-
-  local itemButton
-  if not info.itemButton then
-    if #freeButtons >= 1 then
-      print('    |cFF00FFFFfound a free button')
-      itemButton = freeButtons[#freeButtons]
-      freeButtons[#freeButtons] = nil
-      if itemButton.block then
-        itemButton.block.itemButton = nil
-        itemButton.block = nil
-      end
-    else
-      local buttonIndex = T.Quest.numButtons + #freeButtons + 1
-      itemButton = CreateFrame('Button', 'VeneerQuestItemButton' .. buttonIndex, UIParent, 'VeneerItemButtonTemplate')
-      itemButton.buttonIndex = buttonIndex
-      itemButton:SetSize(36, 36)
-      itemButton:GetNormalTexture():SetSize(36 * (5/3), 36 * (5/3))
-      print('    |cFFFF4400starting new button', itemButton:GetName())
-    end
-    T.Quest.numButtons = T.Quest.numButtons + 1
-  else
-    itemButton = info.itemButton
-    print('    |cFF00FF00found assigned button', itemButton:GetName())
-
-  end
-  -- set values
-
-  info.itemButton = itemButton
-  usedButtons[info.questID] = itemButton
-  print('      |cFF8800FFassigning|r', itemButton:GetName(), 'to quest|cFF00FF00', info.questID, '|rat|cFFFFFF00', block:GetName(),'|r')
-
-  for k,v in pairs(usedButtons) do
-    print('|cFFFF44DD'..k..'|r', v:GetName())
-  end
-
-  itemButton:SetAttribute("type", "item")
-  itemButton:SetAttribute("item", itemInfo.link)
-
-  itemButton.questID = info.questID
-  itemButton.questLogIndex = info.questLogIndex
-  itemButton.charges = itemInfo.charges
-  itemButton.rangeTimer = -1
-  itemButton.block = block
-
-  SetItemButtonTexture(itemButton, itemInfo.icon)
-  SetItemButtonCount(itemButton, itemInfo.charges)
-  Veneer_QuestObjectiveItem_UpdateCooldown(itemButton);
-
-  return itemButton
-end
---- Clear an itemButton from the given block
-T.FreeItemButtons = function(block)
-
-  if block.itemButton then
-    local itemButton = block.itemButton
-    if itemButton.questID ~= block.info.questID then
-      block.itemButton = nil
-      itemButton.block = T.Quest.InfoBlock[itemButton.questID]
-    else
-      itemButton.block = nil
-      itemButton:Hide()
-
-      usedButtons[itemButton.questID] = nil
-      freeButtons[#freeButtons + 1] = itemButton
-      T.Quest.numButtons = T.Quest.numButtons - 1
-      print('|cFFFF0088released', itemButton:GetName(),'and', block:GetName())
-    end
-  end
-end
-
-function Veneer_QuestObjectiveItem_OnUpdate (self, elapsed)
-  -- Handle range indicator
-  local rangeTimer = self.rangeTimer
-  if (rangeTimer) then
-    rangeTimer = rangeTimer - elapsed
-    if (rangeTimer <= 0) then
-      local link, item, charges, showItemWhenComplete = GetQuestLogSpecialItemInfo(self.questLogIndex)
-      if ((not charges) or (charges ~= self.charges)) then
-        T:Update()
-        return
-      end
-
-      local count = self.HotKey
-      local valid = IsQuestLogSpecialItemInRange(self.questLogIndex)
-      if (valid == 0) then
-        count:Show()
-        count:SetVertexColor(1.0, 0.1, 0.1)
-      elseif (valid == 1) then
-        count:Show()
-        count:SetVertexColor(0.6, 0.6, 0.6)
-      else
-        count:Hide()
-      end
-      rangeTimer = TOOLTIP_UPDATE_TIME
-    end
-
-    self.rangeTimer = rangeTimer
-  end
-end
-
-function Veneer_QuestObjectiveItem_UpdateCooldown (itemButton)
-  local start, duration, enable = GetQuestLogSpecialItemCooldown(itemButton.questLogIndex)
-  if (start) then
-    CooldownFrame_SetTimer(itemButton.Cooldown, start, duration, enable)
-    if (duration > 0 and enable == 0) then
-      SetItemButtonTextureVertexColor(itemButton, 0.4, 0.4, 0.4)
-    else
-      SetItemButtonTextureVertexColor(itemButton, 1, 1, 1)
-    end
-  end
-end
-
------------------------------------------
--- Criteria frames
-
---[[
-      text = description,
-      type = type,
-      finished = completed,
-      quantity = quantity,
-      requiredQuantity = requiredQuantity,
-      characterName = characterName,
-      flags = flags,
-      assetID = assetID,
-      quantityString = quantityString,
-      criteriaID = criteriaID,
-]]
-local newWidgetID = 0
-T.WidgetRegistry = {}
-local wr = T.WidgetRegistry
-
---- Get a usable widget for the given achievement criteria set.
--- Returns a frame object with dimensioning parameters needed to size the receiving tracker block
-T.SetWidget = function(line, data, objectiveType, objectiveKey)
-  local print = B.print('ObjectiveWidgets')
-  local widgetType = objectiveType
-  local widget
-  if wr[widgetType] and wr[widgetType].used[objectiveKey] then
-    widget = wr[widgetType].used[objectiveKey]
-    print('|cFF00FF00Updating ('..objectiveKey..')', widget)
-  elseif not wr[widgetType] or #wr[widgetType].free == 0 then
-    widget = CreateFrame('Frame', 'VeneerObjective' .. widgetType .. (wr[widgetType] and (wr[widgetType].lastn+1) or (1)), VeneerObjectiveScroll, 'VeneerObjectiveCriteria' .. widgetType)
-
-    print('|cFFFF0088Creating `'..widget:GetName()..'` id', wr[widgetType].lastn)
-  else
-    widget = tremove(wr[widgetType].free)
-    print('|cFFFFFF00Acquiring released widget', widget:GetName())
-  end
-
-
-  wr[widgetType].used[objectiveKey] = widget
-  widget.line = line
-  widget.objective = data
-  widget.key = objectiveKey
-  T.InitializeWidget(widget)
-  return widget
-end
-
---- WidgetTemplate 'OnLoad'
-T.RegisterWidget = function(frame)
-  local print = B.print('ObjectiveWidgets')
-  local widgetType = frame.widgetType
-  if not wr[frame.widgetType] then
-    print('|cFFFF4400[[WidgetTemplate]]|r', widgetType)
-    wr[widgetType] = { lastn = 1, free = {}, used = {}, usedIndex = {}, freeIndex = {} }
-  else
-    print('|cFF0088FF+ [[WidgetTemplate]]r', widgetType, wr[widgetType].lastn)
-    wr[widgetType].lastn = wr[widgetType].lastn + 1
-  end
-end
-
---- WidgetTemplate 'OnShow'
-T.InitializeWidget = setmetatable({}, {
-  __call = function(t, frame)
-    -- todo: config pull
-
-    frame:SetWidth(T.Conf.Wrapper.Width - T.Conf.Style.Format.status.Indent * 2)
-    frame:SetScript('OnEvent', T.UpdateWidget[frame.widgetType])
-    frame:RegisterEvent('TRACKED_ACHIEVEMENT_UPDATE')
-    frame:RegisterEvent('TRACKED_ACHIEVEMENT_LIST_CHANGED')
-    frame:RegisterEvent('CRITERIA_UPDATE')
-    frame:RegisterEvent('CRITERIA_COMPLETE')
-    frame:RegisterEvent('CRITERIA_EARNED')
-    t[frame.widgetType](frame)
-    T.UpdateWidget[frame.widgetType](frame)
-  end,
-})
-
---- WidgetTemplate 'OnEvent'
-T.UpdateWidget = setmetatable({}, {
-  __call = function(t, frame)
-    if not frame.widgetType then
-      error('Invalid widget template, needs .widgetType')
-      return
-    end
-
-    return t[frame.widgetType](frame)
-  end
-})
-
---- WidgetTemplate 'OnHide'
-T.ReleaseWidget = function(frame)
-  --[[
-  local print = B.print('ObjectiveWidgets')
-  local reg = wr[frame.widgetType]
-  if reg and reg.used[frame.key] then
-    reg.used[frame.key] = nil
-    frame.line = nil
-    frame.info = nil
-    frame:UnregisterAllEvents()
-    tinsert(reg.free, frame)
-    print('|cFFBBBBBBreleased from service', frame:GetName())
-  end
-  ]]
-end
-
---- RemoveTrackedAchievement post-hook
-T.CleanWidgets = function()
-  local print = B.print('ObjectiveWidgets')
-  local tracked = {GetTrackedAchievements() }
-  local tasks = GetTasksTable()
-  for type, reg in pairs(T.WidgetRegistry) do
-    print('collecting', type)
-    for key, frame in pairs(reg.used) do
-      if frame.objective.cheevID then
-        local id = frame.objective.cheevID
-
-        if id and not tContains(tracked, id) then
-
-          print('  untracked achievement', id, 'associated with', key, frame:GetName())
-          frame:Hide()
-        end
-      elseif frame.objective.questID then
-        -- do something for quest task
-      end
-    end
-  end
-end
-
-
-
-T.defaults.WidgetStyle = {
-
-}
-
-local progressHeight = 16
-local progressBorder = 1
-local progressIndent = 3
-local progressFont = _G.VeneerCriteriaFontNormal
-
-
-T.InitializeWidget.ProgressBar = function(self)
-  local c = T.Conf.Wrapper
-  self.height = progressHeight + c.TextSpacing
-  self.width = c.Width - c.TextSpacing
-  self.indent = progressIndent
-
-  self:SetHeight(progressHeight)
-  self.bg:SetHeight(progressHeight)
-  self.bg:SetWidth(self.width)
-  self.fg:ClearAllPoints()
-  self.fg:SetPoint('BOTTOMLEFT', self, 'BOTTOMLEFT', progressBorder, progressBorder)
-  self.fg:SetHeight(progressHeight - progressBorder *  2)
-  self.status:SetFontObject(progressFont)
-  self.status:SetText(self.objective.quantityString)
-end
-
-T.UpdateWidget.ProgressBar = function (self)
-  local quantity, requiredQuantity = self.objective.value, self.objective.maxValue
-  print('update vals:')
-  for k,v in pairs(self.line) do
-    print(k, v)
-  end
-
-  if self.line.format then
-    self.status:SetFormattedText(self.line.format, quantity, requiredQuantity)
-  end
-
-  local progress = (quantity / requiredQuantity)
-  if progress >= 1 then
-    self.fg:Show()
-    self.fg:SetWidth(self.width  - progressBorder * 2)
-  elseif progress > 0 then
-    self.fg:Show()
-    print('color:', 1-progress*2 , progress*2 - 1,0,1)
-    print('width:', (self.width  -progressBorder * 2) * progress)
-    self.fg:SetTexture(1-progress*2 , progress*2,0,1)
-    self.fg:SetWidth((self.width  -progressBorder * 2) * progress)
-  else
-    self.fg:Hide()
-  end
-end
-
-
-T.InitializeWidget.Hidden = function (self)
-  self.height = 0
-end
-T.UpdateWidget.Hidden = function (self)
-  self.height=  0
-end
\ No newline at end of file
--- a/ObjectiveTracker/ObjectiveWidgets.xml	Tue Oct 25 12:33:20 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-<Ui>
-  <!-- houses objective widget templates -->
-
-  <Frame name="VeneerObjectiveCriteriaProgressBar" virtual="true" hidden="true">
-    <Size x="250" y="30" />
-    <Scripts>
-      <OnLoad>
-        self.widgetType = 'ProgressBar'
-        Veneer.ObjectiveTracker.RegisterWidget(self)
-      </OnLoad>
-      <OnShow>
-        Veneer.ObjectiveTracker.InitializeWidget(self)
-      </OnShow>
-      <OnHide>
-        Veneer.ObjectiveTracker.ReleaseWidget(self)
-      </OnHide>
-      <OnEvent>
-
-      </OnEvent>
-    </Scripts>
-    <Layers>
-      <Layer level="BORDER">
-        <Texture name="$parentBackground" parentKey="bg">
-          <Color r="0" g="0" b="0" a="0.70" />
-          <Anchors>
-            <Anchor point="BOTTOMLEFT" />
-            <Anchor point="TOPRIGHT" />
-          </Anchors>
-        </Texture>
-      </Layer>
-      <Layer level="ARTWORK">
-
-        <Texture name="$parentForeground" parentKey="fg">
-          <Color r="1" g="1" b="1" a="0.7" />
-        </Texture>
-        <Texture name="$parentIcon" parentKey="icon" alphaMode="MOD">
-          <Anchors>
-            <Anchor point="TOPLEFT" relativeKey="$parent.fg" />
-            <Anchor point="BOTTOMRIGHT" relativeKey="$parent.fg" />
-          </Anchors>
-        </Texture>
-      </Layer>
-      <Layer level="OVERLAY">
-        <FontString name="$parentStatus" parentKey="status" inherits="VeneerCriteriaFont">
-          <Anchors>
-            <Anchor point="CENTER" />
-          </Anchors>
-        </FontString>
-      </Layer>
-    </Layers>
-  </Frame>
-
-  <Frame name="VeneerObjectiveCriteriaEvent" virtual="true" hidden="true">
-    <Size x="250" y="24" />
-    <Scripts>
-      <OnLoad>
-        self.widgetType = 'Event'
-        self.lines = 1
-        Veneer.ObjectiveTracker.RegisterWidget(self)
-      </OnLoad>
-      <OnShow>
-        Veneer.ObjectiveTracker.InitializeWidget(self)
-      </OnShow>
-      <OnHide>
-        Veneer.ObjectiveTracker.ReleaseWidget(self)
-      </OnHide>
-    </Scripts>
-    <Layers>
-      <Layer level="OVERLAY">
-        <FontString name="$parentStatusText" parentKey="status" inherits="VeneerCriteriaFont">
-
-        </FontString>
-      </Layer>
-    </Layers>
-  </Frame>
-
-  <Frame name="VeneerObjectiveCriteriaHidden" virtual="true" hidden="true">
-    <Size x="250" y="24" />
-    <Scripts>
-      <OnLoad>
-        self.widgetType = 'Hidden'
-        self.lines = 0
-        Veneer.ObjectiveTracker.RegisterWidget(self)
-      </OnLoad>
-      <OnShow>
-        Veneer.ObjectiveTracker.InitializeWidget(self)
-      </OnShow>
-      <OnHide>
-        Veneer.ObjectiveTracker.ReleaseWidget(self)
-      </OnHide>
-    </Scripts>
-    <Layers>
-      <Layer level="OVERLAY">
-        <FontString name="$parentStatusText" parentKey="status" inherits="VeneerCriteriaFont">
-
-        </FontString>
-      </Layer>
-    </Layers>
-  </Frame>
-</Ui>
\ No newline at end of file
--- a/ObjectiveTracker/QuestTracker.lua	Tue Oct 25 12:33:20 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,318 +0,0 @@
-local B = select(2,...).frame
-local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
-local _G, ipairs, max, min, unpack, floor, pairs, tostring, type, band = _G, ipairs, max, min, unpack, floor, pairs, tostring, type, bit.band
-local GetAutoQuestPopUp, GetQuestLogCompletionText = GetAutoQuestPopUp, GetQuestLogCompletionText
-local Default, Quest = T.DefaultHandler, T.Quest
-local format = format
-local print = B.print('Tracker')
-local lprint = B.print('Line')
-local iprint = B.print('Info')
-
-local colors = T.colors
-
-local tprint = B.print('Tracker')
-Quest.Update = function(self, reason, ...)
-  local print = tprint
-  print('QuestTracker:Update() received')
-  T.UpdateActionButtons()
-  Default.Update(self, reason, ...)
-end
-
-Quest.UpdateObjectives = function(handler, block)
-  local print = lprint
-  print('|cFF00FFFFUpdateObjectives()')
-  local info = block.info
-
-  local titlebg, textbg = colors.default.titlebg, colors.default.textbg
-  print((info.isAccount and 'isAccount' or ''), (info.isFaction and 'isFaction' or ''), (info.isDaily and 'isDaily' or ''), (info.isWeekly and 'isWeekly' or ''), info.tagID, info.tagName)
-
-  if info.isAccount then
-    if info.isFaction then
-      print('     faction', info.tagID)
-      titlebg, textbg = colors['faction_'..info.tagID].titlebg, colors.default.textbg
-    else
-      print('     account', info.isAccount, info.isFaction)
-      titlebg, textbg = colors.account.titlebg, colors.account.textbg
-    end
-  elseif info.isDaily then
-    print('     daily', info.frequency)
-    titlebg, textbg = colors.daily.titlebg, colors.daily.textbg
-  elseif info.isWeekly then
-    print('     weekly', info.frequency)
-    titlebg, textbg = colors.weekly.titlebg, colors.weekly.textbg
-  end
-
-  block.titlebg:SetGradientAlpha(unpack(titlebg))
-  block.statusbg:SetGradientAlpha(unpack(textbg))
-
-  local completionText
-  if info.isComplete then
-    if info.isAutoComplete then
-      local questID, popupType = GetAutoQuestPopUp(info.questLogIndex)
-      if popupType == 'COMPLETE' then
-        print('    :: auto-complete quest :: set the message')
-        info.completionText = T.strings.CLICK_TO_COMPLETE
-      end
-    else
-      if not completionText or info.completionText then
-        info.completionText = GetQuestLogCompletionText(info.questLogIndex)
-      end
-    end
-    print('    :: complete quest :: show instruction: "'.. tostring(info.completionText) .. '"')
-  end
-
-  Default.UpdateObjectives(handler, block)
-end
-
-Quest.UpdateLine = function(handler, block, line, data)
-  local print = lprint
-  local objectiveType = data.type
-  local r, g, b, a = 0, 1, 1, 1
-
-  line.progress = 0
-  if data.finished then
-    line.progress = 2
-    r, g, b, a = 0, 1, 0, 1
-  elseif objectiveType == 'monster' then
-    r, g, b, a = 1, .55, .2, 1
-  elseif objectiveType == 'item' then
-    r, g, b, a = .8, .8, .8, 1
-  elseif objectiveType == 'object' then
-    r, g, b, a = 1, 1, 1, 1
-  elseif objectiveType == 'player' then
-    r, g, b, a = 0, 0.8, 1, 1
-  end
-  print(format('     |cFF%02X%02X%02X%0.1f, %0.1f, %0.1f|r', (r * 255), g * 255, b * 255, r, g, b))
-
-  line.displayColor = {r, g, b, a}
-  line.status:SetTextColor(r, g, b, a)
-  line.displayText = data.text
-
-  return line
-end
-
------------------------------
---- QUEST
-Quest.POI = {}
-Quest.QuestBlock = {}
-Quest.LogBlock = {}
-Quest.LogInfo = {}
-
-function Quest:GetNumWatched ()
-  print(self.name, self)
-  self.numAll = GetNumQuestLogEntries()
-  self.numWatched = GetNumQuestWatches()
-  return self.numWatched, self.numAll
-end
-Quest.GetInfo = function (self, watchIndex)
-  local print = iprint
-  print('|cFF00DDFFQuest|r.|cFF0088FFGetInfo(|r'.. tostring(watchIndex)..'|r)')
-  local questID, title, questIndex, numObjectives, requiredMoney, _,
-  _, isAutoComplete, failureTime, timeElapsed, questType, _, _, _, _ = GetQuestWatchInfo(watchIndex)
-
-  if not questIndex then
-    return
-  end
-
-
-  local _, level, suggestedGroup, isHeader, isCollapsed, isComplete, frequency, _, startEvent, displayQuestID, isOnMap, hasLocalPOI, isTask, isStory = GetQuestLogTitle(questIndex)
-
-
-  if not questID then
-    return
-  end
-  Quest.Info[questID] = Quest.Info[questID] or {}
-
-  local q = Quest.Info[questID]
-  q.watchIndex = watchIndex
-  q.type = 'Quest'
-  q.questID = questID
-  q.title = title
-  q.level = level
-  q.displayQuestID = displayQuestID
-  q.suggestedGroup = suggestedGroup
-  q.questLogIndex = questIndex
-  q.numObjectives = numObjectives
-  q.requiredMoney = requiredMoney
-  q.isComplete = isComplete
-  q.startEvent = startEvent
-  q.isAutoComplete = isAutoComplete
-  q.failureTime = failureTime
-  q.timeElapsed = timeElapsed
-  q.questType = questType
-  q.isTask = isTask
-  q.isStory = isStory
-  q.isOnMap = isOnMap
-  q.hasLocalPOI = hasLocalPOI
-  q.frequency = frequency
-  q.isComplete = isComplete
-  q.isStory = isStory
-  q.isTask = isTask
-
-  --- resolve icon type and template
-  local questTagID, tagName = GetQuestTagInfo(questID)
-  local tagID
-
-  local factionGroup = GetQuestFactionGroup(questID);
-  if( questTagID and questTagID == QUEST_TAG_ACCOUNT ) then
-    if( factionGroup ) then
-      tagID = "ALLIANCE";
-      if ( factionGroup == LE_QUEST_FACTION_HORDE ) then
-        tagID = "HORDE";
-      end
-      q.isFaction = true
-    else
-      tagID = QUEST_TAG_ACCOUNT;
-      q.isAccount = true
-    end
-    q.typeTag = QUEST_TAG_TCOORDS[tagID]
-  elseif ( factionGroup) then
-    tagID = "ALLIANCE";
-    if ( factionGroup == LE_QUEST_FACTION_HORDE ) then
-      tagID = "HORDE";
-    end
-    q.isFaction = true
-  end
-
-  if( frequency == LE_QUEST_FREQUENCY_DAILY and (not isComplete or isComplete == 0) ) then
-    tagID = "DAILY";
-    q.frequencyTag = QUEST_TAG_TCOORDS["DAILY"]
-    q.isDaily = true
-  elseif( frequency == LE_QUEST_FREQUENCY_WEEKLY and (not isComplete or isComplete == 0) )then
-    tagID = "WEEKLY";
-    q.frequencyTag = QUEST_TAG_TCOORDS["WEEKLY"]
-    q.isWeekly = true
-  elseif( questTagID ) then
-    tagID = questTagID;
-  end
-
-  if ( isComplete and isComplete < 0 ) then
-    q.completionTag = QUEST_TAG_TCOORDS["FAILED"]
-    q.isFailed = true
-  elseif isComplete then
-    q.completionTag = QUEST_TAG_TCOORDS["COMPLETED"]
-  end
-
-
-  q.tagID = questTagID
-  q.tagName = tagName
-  --q.isBreadCrumb = isBreadCrumb
-  q.completionText= GetQuestLogCompletionText(questIndex)
-  q.numObjectives = GetNumQuestLeaderBoards(questIndex)
-  q.objectives = {}
-  for i = 1, q.numObjectives do
-    local text, type, finished = GetQuestLogLeaderBoard(i, questIndex)
-    print(format('   #%d %s %s %s', i, tostring(type), tostring(text), tostring(finished)))
-    q.objectives[i] = {
-      index = i,
-      type = type,
-      text = text,
-      finished = finished
-    }
-    if type == 'event' then
-    elseif type == 'monster' then
-    elseif type == 'object' then
-    elseif type == 'reputation' then
-    elseif type == 'item' then
-    end
-  end
-
-  if requiredMoney >= 1 then
-    local money = GetMoney()
-    local moneyText = money
-    local requiredSilver, requiredCopper
-    local requiredGold = (requiredMoney > 10000) and (floor(requiredMoney/10000)) or nil
-    if mod(requiredMoney, 10000) ~= 0 then
-      requiredSilver = (requiredMoney > 100) and (mod(requiredMoney, 10000) / 100) or nil
-      if mod(requiredMoney, 100) ~= 0 then
-        requiredCopper = mod(requiredMoney, 100)
-      end
-    end
-
-    -- round the money value down
-    if requiredMoney > 9999 and not (requiredSilver or requiredCopper) then
-      moneyText = floor(money/10000)
-    elseif requiredMoney < 10000 and mod(requiredMoney,100) == 0 then
-      moneyText = floor(money/100)
-    end
-
-    local text = moneyText
-    local index = #q.objectives + 1
-    local finished = (GetMoney() >= requiredMoney)
-
-    if not finished then
-      text = text .. ' / ' .. GetCoinTextureString(requiredMoney, 12)
-    else
-      text = '' .. GetCoinTextureString(requiredMoney, 12)
-    end
-    q.objectives[index] = {
-      index = index,
-      type = 'progressbar',
-      quantity = money,
-      requiredQuantity = requiredMoney,
-      text = text,
-      finished = finished
-    }
-    print(format('   #%d %s %s %s', index, 'money', text, tostring(finished)))
-  end
-
-
-  local link, icon, charges = GetQuestLogSpecialItemInfo(questIndex)
-  local start, duration, enable = GetQuestLogSpecialItemCooldown(questIndex)
-  if link or icon or charges then
-    q.specialItem = {
-      questID = questID,
-      questIndex = questIndex,
-      link = link,
-      charges = charges,
-      icon = icon,
-      start = start,
-      duration = duration,
-      enable = enable,
-    }
-  end
-
-  if QuestHasPOIInfo(questID) then
-    local distance, onContinent = GetDistanceSqToQuest(questIndex)
-    if distance ~= nil and distance > 0 then
-      self.POI[questIndex] = {
-        questIndex = questIndex,
-        questID = questID,
-        distance = distance,
-        onContinent = onContinent
-      }
-    end
-  end
-
-
-  q.selected =  (questID == GetSuperTrackedQuestID()) -- call directly so artifact data doesn't become an issue
-  self.WatchInfo[watchIndex] = q
-  self.LogInfo[questIndex] = q
-  print('- logIndex =', questIndex, 'title =', title)
-  for k,v in pairs(q) do
-    print('|cFFFFFF00'..k..'|r:', v)
-  end
-  return q
-end
-
-Quest.GetClosest = function()
-  local minID, minTitle
-  local minDist = math.huge
-  local numQuests = GetNumQuestLogEntries()
-  for questIndex =  1, numQuests do
-    local distance, onContinent = GetDistanceSqToQuest(questIndex)
-    local title, level, _, _, _, _, _, _, questID = GetQuestLogTitle(questIndex)
-    if onContinent and distance < minDist then
-      minDist = distance
-      minTitle = title
-      minID = questID
-    end
-  end
-
-  print('nearest quest is', minTitle, 'by', math.sqrt(minDist))
-  return minID, minTitle, minDist
-end
-
-Quest.OnTurnIn = function(self, questID, xp, money)
-
-end
\ No newline at end of file
--- a/ObjectiveTracker/XPTracker.lua	Tue Oct 25 12:33:20 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
---- ${PACKAGE_NAME}
--- @file-author@
--- @project-revision@ @project-hash@
--- @file-revision@ @file-hash@
--- Created: 4/6/2016 4:44 AM
-
-local B = select(2,...).frame
-local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
-local tostring = tostring
-local UnitLevel, IsResting, UnitXP, UnitXPMax, GetXPExhaustion, IsXPUserDisabled = UnitLevel, IsResting, UnitXP, UnitXPMax, GetXPExhaustion, IsXPUserDisabled
-local Wrapper = _G.VeneerObjectiveWrapper
-local print = B.print('XPTracker')
-
-mod.InitializeXPTracker = function()
-  local XPBar = Wrapper.XPBar
-  if UnitLevel('player') == 100 then
-    XPBar:Hide()
-    return
-  end
-
-  --- xp bar
-  XPBar:SetWidth(mod.Conf.Wrapper.WrapperWidth - Wrapper.CloseButton:GetWidth())
-  XPBar.statusbg:SetAllPoints(XPBar)
-  XPBar:RegisterEvent('DISABLE_XP_GAIN')
-  XPBar:RegisterEvent('ENABLE_XP_GAIN')
-  XPBar:SetScript('OnEvent', mod.UpdateXP)
-
-  if not IsXPUserDisabled() then
-    mod.EnableXP(XPBar)
-  else
-    mod.DisableXP(XPBar)
-  end
-
-  mod.UpdateXP(XPBar)
-end
-
-mod.EnableXP = function(self)
-  self:RegisterEvent('PLAYER_XP_UPDATE')
-  self:RegisterEvent('PLAYER_LEVEL_UP')
-  self:RegisterEvent('PLAYER_UPDATE_RESTING')
-  self.statusbg:SetTexture(0,0,0,.25)
-  self:Show()
-end
-
-mod.DisableXP = function(self)
-  self:UnregisterEvent('PLAYER_XP_UPDATE')
-  self:UnregisterEvent('PLAYER_LEVEL_UP')
-  self:UnregisterEvent('PLAYER_UPDATE_RESTING')
-  self.statusbg:SetTexture(0.5,0.5,0.5,0.5)
-  self:Hide()
-end
-
-mod.UpdateXP = function(self, event)
-  if event == 'DISABLE_XP_GAIN' then
-    mod.DisableXP(self)
-  elseif event == 'ENABLE_XP_GAIN' then
-    mod.EnableXP(self)
-  end
-
-  if not IsXPUserDisabled() then
-
-    local xp = UnitXP('player')
-    local xpmax = UnitXPMax('player')
-    local rest = GetXPExhaustion()
-    self.foreground:SetWidth((xp/xpmax) * self:GetWidth())
-    if rest then
-      self.rested:ClearAllPoints()
-      if xp == 0 then
-        self.rested:SetPoint('TOPLEFT', self, 'TOPLEFT', 0, 0)
-      else
-        self.rested:SetPoint('TOPLEFT', self.fg, 'TOPRIGHT', 0, 0)
-      end
-
-      if (xp + rest) > xpmax then
-        self.rested:SetPoint('BOTTOMRIGHT', self, 'BOTTOMRIGHT', 0, 0)
-      else
-        self.rested:SetWidth((rest/xpmax) * self:GetWidth())
-      end
-      self.rested:SetPoint('BOTTOM', self, 'BOTTOM')
-      self.rested:Show()
-    else
-      self.rested:Hide()
-    end
-
-    if IsResting() then
-      self.statusbg:SetTexture(.2,.8,.2,.5)
-    else
-      self.statusbg:SetTexture(0,0,0,.25)
-    end
-    self.xpText:SetText(xp .. '/'.. xpmax .. (rest and (' ('..tostring(rest)..')') or ''))
-  end
-end
\ No newline at end of file
--- a/Templates.lua	Tue Oct 25 12:33:20 2016 -0400
+++ b/Templates.lua	Sun Jan 01 18:25:26 2017 -0500
@@ -19,7 +19,6 @@
   end
 end
 
-
 function VeneerConfigLayerMixin:OnUpdate()
   local handler = self:GetParent()
   handler.ConfigLayers = handler.ConfigLayers or {}
@@ -28,20 +27,6 @@
   self.ConfigID:SetText(handler:GetID())
 end
 
-
-function VeneerHandlerMixin:OnShow()
-  self:Reanchor()
-  Veneer:StaticReanchor(self)
-end
-function VeneerHandlerMixin:OnHide()
-  Veneer:DynamicReanchor()
-end
-function VeneerHandlerMixin:Reanchor (anchorAll)
-  if not anchorAll then
-    Veneer:InternalReanchor(self)
-  end
-end
-
 function VeneerAnimationMixin:OnPlay()
   PlaySoundKitID(229)
   self.animating = true
@@ -56,4 +41,17 @@
   PlaySoundKitID(229)
   self.animating = nil
   print('|cFF00FF00Anim:OnFinish|r @', unpack(self.destPoint))
+end
+
+function VeneerHandlerMixin:OnShow()
+  self:Reanchor()
+  Veneer:StaticReanchor(self)
+end
+function VeneerHandlerMixin:OnHide()
+  Veneer:DynamicReanchor()
+end
+function VeneerHandlerMixin:Reanchor (anchorAll)
+  if not anchorAll then
+    Veneer:InternalReanchor(self)
+  end
 end
\ No newline at end of file
--- a/Veneer.lua	Tue Oct 25 12:33:20 2016 -0400
+++ b/Veneer.lua	Sun Jan 01 18:25:26 2017 -0500
@@ -8,6 +8,8 @@
 SLASH_VENEER1 = "/veneer"
 SLASH_VENEER2 = "/vn"
 local VENEER_VERSION = 703
+local type, strrep, ipairs, tinsert, tostring, select = type, string.rep, ipairs, tinsert, tostring, select
+local pairs, tremove = pairs, tremove
 
 SlashCmdList.VENEER = function(cmd)
 
@@ -27,7 +29,8 @@
   pendingCalls = {},
   AddOnCheck = {}
 }
-local print = DEVIAN_WORKSPACE and function(...) print('Veneer', ...) end or nop
+
+local print = DEVIAN_WORKSPACE and function(...) _G.print('Veneer', ...) end or nop
 local wipe = table.wipe
 
 local defaults = {
@@ -44,7 +47,6 @@
 
 local configMode
 local anonID = 0
-local tostring = tostring
 local IsFrameHandle = IsFrameHandle
 local GetAnonymousName = function(key)
   if not key then
@@ -148,28 +150,23 @@
   self:StopMovingOrSizing()
 end
 
+local VeneerModule_Setup = function(frame)
+  if (not frame.addonTrigger) or select(2,IsAddOnLoaded(frame.addonTrigger)) then
+    if not frame.initialized then
+      frame:Setup()
+      frame.initialized = true
+    end
+  end
+end
+
 function VeneerCore:Setup ()
   local resetConfig = (not VeneerData)
   if (not VeneerData) then
     VeneerData = defaults
     VeneerData.version = VENEER_VERSION
-    self:print('Fresh install.')
-  elseif (VeneerData.version and VeneerData.version < VENEER_VERSION) then
-    local oldVars = VeneerData
-    VeneerData = defaults
-    VeneerData.version = VENEER_VERSION
-    VeneerData.oldSettings = oldVars
-    self:print('Resetting to temp defaults. Use /vn retro to use old settings.')
   end
   self.data = VeneerData
-  self:ExecuteOnClusters(nil, function(frame)
-    if (not frame.addonTrigger) or select(2,IsAddOnLoaded(frame.addonTrigger)) then
-      if not frame.initialized then
-        frame:Setup()
-        frame.initialized = true
-      end
-    end
-  end)
+  self:ExecuteOnClusters(nil, VeneerModule_Setup)
 
   self.ConfigMode = VeneerData.ConfigMode
   self:UpdateConfigLayers()
@@ -208,6 +205,7 @@
   end)
 end
 
+
 function VeneerCore:GetClusterFromArgs (...)
   local primaryAnchor
   local insertPosition
@@ -224,7 +222,7 @@
       end
       clusterTable[arg] = clusterTable[arg] or {}
       clusterTable = clusterTable[arg]
-      print(string.rep(' ', i)..'anchor cluster', i, arg)
+      print(strrep(' ', i)..'anchor cluster', i, arg)
     elseif argType == 'boolean' then
       insertPosition = 1
     end
--- a/Veneer.toc	Tue Oct 25 12:33:20 2016 -0400
+++ b/Veneer.toc	Sun Jan 01 18:25:26 2017 -0500
@@ -7,11 +7,12 @@
 ## X-Category: Interface Enhancements
 ## DefaultState: Enabled
 ## LoadOnDemand: 0
-## OptionalDeps: LibKraken, Devian
+## OptionalDeps: Devian
 
 Veneer.xml
 ##Options.lua
-##Modules\PaperDoll.lua
+
 Modules\WorldState.xml
 Modules\TalkingHead.xml
-Modules\BuffFrame.xml
\ No newline at end of file
+Modules\BuffFrame.xml
+Modules\PaperDoll.xml
\ No newline at end of file
--- a/Veneer_Objectives/ObjectiveTracker.lua	Tue Oct 25 12:33:20 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,559 +0,0 @@
--- Veneer
--- Veneer_WorldQuests.lua
--- Created: 8/16/2016 8:19 AM
--- %file-revision%
--- This is more or less a copy of the blizzard code with some customization stuff added
-
-local plugin = VeneerObjectives
-local vn, print = LibStub("LibKraken").register(Veneer, VeneerObjectives)
-local ot
-local otvn
-
-local band, floor, min = bit.band, math.floor, math.min
-
-
-local X_QUEST						= 0x00001;
-local X_QUEST_ADDED				= 0x00002;
-local X_TASK_ADDED					= 0x00004;
-local X_WORLD_QUEST_ADDED			= 0x00008;
-local X_SCENARIO					= 0x00010;
-local X_SCENARIO_NEW_STAGE			= 0x00020;
-local X_ACHIEVEMENT				= 0x00040;
-local X_ACHIEVEMENT_ADDED			= 0x00080;
-local X_SCENARIO_BONUS_DELAYED		= 0x00100;
-local X_SUPER_TRACK_CHANGED		= 0x00200;
--- these are for the specific module ONLY!
-local X_MODULE_QUEST				= 0x00400;
-local X_MODULE_AUTO_QUEST_POPUP	= 0x00800;
-local X_MODULE_BONUS_OBJECTIVE		= 0x01000;
-local X_MODULE_WORLD_QUEST			= 0x02000;
-local X_MODULE_SCENARIO			= 0x04000;
-local X_MODULE_ACHIEVEMENT			= 0x08000;
-local X_SCENARIO_SPELLS			= 0x10000;
--- special updates
-local X_STATIC						= 0x0000;
-local X_ALL						= 0xFFFF;
-
--- state information
-local X_REASON = X_ALL;		-- default
-local X_MONEY = 0
-local X_ANIMATION = 0
-local X_ID = 0;
-
-local INSET_V = -20
-
-
-
-local trackerWidth = 240
-local blockIndent = 12
-local blockSpacing = 3
-
-local tracker = {
-  freeBlocks = {},
-  usedBlocks = {},
-  freeProgressBars = {},
-  usedProgressBars = {},
-  freeTimers = {},
-  usedTimers = {},
-  freeLines = {},
-
-  headerText = 'Default Header',
-  contentHeight = 0,
-  animationHeight = 0,
-  updateReasonModule = 0,
-  updateReasonEvents = 0,
-}
-local GetTrackerHandler = function(handler)
-  handler = handler or {}
-  setmetatable(handler, {__index=tracker})
-  return handler
-end
-
-local Header_OnAnimationStart = function (self, forced)
-  local header = self:GetParent()
-  header.animating = true
-  plugin:UpdateAnimation(header)
-end
-
-local Header_OnAnimationFinished = function (self, forced)
-  local header = self:GetParent()
-  header.animating = nil
-  plugin:Update(X_ANIMATION)
-end
-
--- reset generic flags for layout compilation
-function tracker:InitLayout (isStatic)
-  print('|cFF00FFFFlayout|r', self.headerText)
-  self.firstBlock = nil
-  self.lastBlock = nil
-  self.currentBlock = nil
-  self.oldContentHeight = self.contentHeight
-  self.oldAnimationHeight = self.animationHeight
-  self.numBlocks = 0
-  for id, block in pairs(self.usedBlocks) do
-    block.used = nil
-  end
-  if not isStatic then
-    self.hasSkippedBlocks = false
-  end
-
-  if not self.header then
-    self:SetHeader(self.headerText, X_REASON)
-    self.header:SetPoint('TOPLEFT', plugin, 'TOPLEFT', 0, -plugin.contentHeight)
-    plugin.contentHeight = plugin.contentHeight + self.header:GetHeight()
-  end
-
-
-  self.contentHeight = 0
-
-end
-
--- clear out generic flags and set aside block frames for re-use
-tracker.EndLayout = function(self)
-  self.lastBlock = self.currentBlock
-  for id, block in pairs(self.usedBlocks) do
-    if not block.used then
-      self:FreeBlock(block)
-    end
-  end
-end
-
-function tracker:SetHeader (text, animateReason)
-  if self.header then
-    return self.header
-  end
-
-  local block = CreateFrame('Button', nil, plugin, 'VeneerObjectiveHeader')
-  block.handler = self
-  block.text:SetText(self.headerText)
-
-  self.currentBlock = block
-  self.header = block
-  return block
-end
-
-function tracker:FreeBlock(block)
-  self.usedBlocks[block.id] = nil
-  print('|cFF0088FFfree|r', block:GetName())
-  tinsert(self.freeBlocks, block)
-
-  block.numLines = 0
-  block:SetHeight(0)
-  block:Hide()
-end
-
--- should only be used in an N-lastN loop
-function tracker:FreeLine(line)
-  if line.block then
-    line.block.lines[line.index] = nil
-  end
-  print('|cFF0088FFfree|r', line:GetName())
-  local freeLines = line.type or self.freeLines
-  tinsert(freeLines, line)
-end
-
-local blocksn = 0
-tracker.GetBlock = function(self, id)
-  local block = self.usedBlocks[id]
-  if not block then
-    local numFree = #self.freeBlocks
-    if numFree >= 1 then
-      block = tremove(self.freeBlocks, numFree)
-    else
-      blocksn = blocksn + 1
-      block = CreateFrame('Button', 'OTVNBlock'..blocksn, plugin, 'VeneerObjectiveBlock')
-      block.lines = {}
-    end
-    self.usedBlocks[id] = block
-    block.id = id
-    block.handler = self
-  end
-
-  block.used = true
-  block.currentLine = nil
-  block.numLines = 0
-
-  if block.lines then
-    for i, line in ipairs(block.lines) do
-      line.used = nil
-    end
-  end
-
-  block.contentHeight = blockSpacing
-  block:SetWidth(trackerWidth)
-  block:SetHeight(0)
-
-  return block
-end
-
--- obtain line
-local linesn = 0
-function tracker:GetLine(block, index, lineType)
-  local line = block.lines[index]
-  if line and line.lineType ~= lineType then
-
-    tinsert(self.freeLines, line)
-    line = nil
-  end
-
-  if not line then
-    local freeLines = (lineType and lineType.freeLines) or self.freeLines
-    local numFreeLines = #freeLines
-    if numFreeLines >= 1 then
-      line = tremove(freeLines, numFreeLines)
-    else
-      linesn = linesn + 1
-      line = CreateFrame('Frame', 'OTVNLine'.. linesn, block, (lineType and lineType.template) or 'VeneerObjectiveLine')
-    end
-    line:SetParent(block)
-  end
-
-  line.type = lineType
-  line.index = index
-  line.used = true
-  line.block = block
-  line.text:SetPoint('TOPLEFT', line, 'TOPLEFT', blockIndent, 0)
-  line:SetHeight(0) -- in order for GetStringHeight to be useful
-
-  block.lines[index] = line
-
-  return line
-end
-
-function tracker:AddProgressBar(block, line, questID)
-end
-
-function tracker:FreeProgressBar(block, line)
-end
-
-function tracker:AddTimerBar(block, line, duration, startTime)
-end
-
-function tracker:FreeTimerBar(block, line)
-end
-
--- Checks for space and anchors or frees the block accordingly
-function tracker:AddBlock (block, force)
-  local anchor = self.currentBlock or self.header
-  self.numBlocks = self.numBlocks + 1
-
-  if block.header then
-    print('header!', floor(block.contentHeight), '+', floor(block.header:GetStringHeight()))
-    block.contentHeight = block.contentHeight + block.header:GetStringHeight()
-    self.used = true
-  end
-
-
-  if self.currentBlock then
-    self.currentBlock.nextBlock = block
-    block.prevBlock = self.currentBlock
-  else
-    self.firstBlock = block
-  end
-
-  self.contentHeight = self.contentHeight + block.contentHeight
-  self.currentBlock = block
-
-  if not plugin.currentBlock then
-    plugin.firstBlock = block
-  end
-  plugin.currentBlock = block
-
-
-
-  block:SetHeight(block.contentHeight)
-  print('block|cFF88FF00', self.numBlocks, block, '|rto', anchor, 'size', block.contentHeight)
-  block:ClearAllPoints()
-  block:SetPoint('TOPLEFT', anchor, 'BOTTOMLEFT', 0, -blockSpacing)
-  block:Show()
-
-  -- free unused lines
-  local numLines = #block.lines
-  for i = 1, numLines do
-    local line = block.lines[i]
-    if not line.used or block.collapsed then
-      print('|cFFFF4400!|r')
-      self:FreeLine(line)
-    else
-      if not line:IsShown() then
-        line:Show()
-      end
-    end
-  end
-
-  return true
-end
-
-function tracker:SetLine(block, index, lineType, textOrFunc)
-  local anchor = block.currentLine or block.header
-  local line = self:GetLine(block, index, lineType)
-
-  if line.ticker then
-    line.ticker:Cancel()
-    line.ticker = nil
-  end
-
-  local text = textOrFunc
-  if type(textOrFunc) == 'function' then
-    text = textOrFunc()
-
-    line.ticker = C_Timer.NewTicker(10, function()
-      line.height = tracker:SetLineText(line.text, textOrTextFunc())
-      line:SetHeight(line.height)
-    end)
-  end
-  line.height = tracker:SetLineText(line.text, text)
-  line:SetHeight(line.height)
-
-  print('line|cFFFFFF00', line:GetName(), '|rto', anchor:GetName(), 'size', line.height)
-  line:SetPoint('TOPLEFT', anchor, 'BOTTOMLEFT', 0, 0)
-
-  block.contentHeight = block.contentHeight + line.height
-  block.numLines = block.numLines + 1
-
-  if block.currentLine then
-    line.prevLine = block.currentLine
-    block.currentLine.nextLine = line
-  else
-    block.firstLine = line
-  end
-
-  block.currentLine = line
-  plugin.currentLine = line
-
-end
-
-function tracker:SetLineText(fontString, text)
-  fontString:SetText(text)
-  return fontString:GetStringHeight()
-end
-
--- Update lite
-function tracker:ResetAnchors ()
-  self:InitLayout()
-
-  self:EndLayout()
-end
-
-
-local UpdateQuestTracker = function(watchIndex, logIndex)
-  return true
-end
-
--- top-down updaters
-
-local questTracker = GetTrackerHandler({
-  headerText = 'Quests',
-  updateReasonModule = X_MODULE_QUEST,
-  updateReasonEvents = (X_QUEST + X_QUEST_ADDED),
-})
-function questTracker:Update ()
-  self:InitLayout()
-  for watchIndex = 1, GetNumQuestWatches() do
-    local questID, title, questLogIndex, numObjectives, requiredMoney, isComplete, startEvent, isAutoComplete, failureTime, timeElapsed, questType, isTask, isBounty, isStory, isOnMap, hasLocalPOI = GetQuestWatchInfo(watchIndex)
-    if not questID then
-      -- stop parsing; end of data or variables haven't completely loaded
-      break
-    end
-    local showQuest = true
-    if isTask or (isBounty and not IsQuestComplete(questID)) then
-      -- do nothing
-    else
-      -- obtain a block
-      local block = self:GetBlock(questID)
-
-      block.header:SetText(title)
-
-      for i = 1, numObjectives do
-        local text, objectiveType, finished = GetQuestLogLeaderBoard(i, questLogIndex)
-        if text then
-          self:SetLine(block, i, nil, text)
-        end
-      end
-
-      block:SetScript('OnClick', self.OnClick)
-      block:RegisterForClicks('AnyDown')
-
-      self:AddBlock(block)
-    end
-  end
-
-  self:EndLayout()
-end
-questTracker.OnClick = function(block, button)
-  if button == 'RightButton' then
-    ObjectiveTracker_ToggleDropDown(block, QuestObjectiveTracker_OnOpenDropDown)
-  else
-    CloseDropDownMenus()
-
-    local questLogIndex = GetQuestLogIndexByID(block.id)
-    if ( IsModifiedClick("QUESTWATCHTOGGLE") ) then
-      QuestObjectiveTracker_UntrackQuest(nil, block.id);
-    else
-      if ( IsQuestComplete(block.id) and GetQuestLogIsAutoComplete(questLogIndex) ) then
-        AutoQuestPopupTracker_RemovePopUp(block.id);
-        ShowQuestComplete(questLogIndex);
-      else
-        QuestLogPopupDetailFrame_Show(questLogIndex);
-      end
-    end
-  end
-end
-
-local UpdateAchievementTracker = function() end
-local UpdateTaskTracker = function() end
-local UpdateScenarioTracker = function() end
-
-function plugin:Update(reason, id)
-
-  print('update', reason, #plugin.trackers)
-
-  if plugin.minimized then
-    for i, tracker in ipairs(plugin.trackers) do
-      tracker:Hide()
-    end
-    return
-  end
-
-
-  local X_REASON = reason or X_ALL
-  local X_ID = id
-
-  plugin.maxHeight = plugin:GetHeight()
-  plugin.oldContentsHeight = plugin.contentHeight
-  plugin.contentHeight = 0
-  plugin.currentBlock = nil
-  plugin.firstBlock = nil
-  plugin:SetWidth(trackerWidth)
-
-  -- pad for header
-  plugin.contentHeight = plugin.header:GetHeight()
-
-  for i, header in ipairs(plugin.trackers) do
-    header.used = nil
-  end
-
-
-  local addedSpace = false
-  for i, tracker in ipairs(plugin.trackers) do
-    if ( band(X_REASON, tracker.updateReasonModule + tracker.updateReasonEvents ) > 0 ) then
-      print('->', tracker.headerText)
-      tracker:Update()
-      if tracker.oldContentHeight - tracker.contentHeight >= 1 then
-        addedSpace = true
-      end
-    else
-      -- if we can fit another header or an animation handler popped, contents need to be generated
-      if addedSpace or (tracker.header and tracker.header.animating) then
-        print('->', tracker.headerText, 'added space')
-        tracker:Update()
-      else
-        print('->', tracker.headerText, 'lite update')
-        -- otherwise, measure contents and hide anything that won't fit
-        tracker:ResetAnchors()
-      end
-    end
-  end
-
-  for i, tracker in ipairs(plugin.trackers) do
-    if tracker.currentBlock then
-      if not tracker.header:IsShown() then
-        tracker.header:Show()
-      end
-    else
-      if tracker.header:IsShown() then
-        tracker.header:Hide()
-      end
-    end
-  end
-
-  if VeneerBuffFrame and VeneerBuffFrame.lastBuff then
-    plugin:ClearAllPoints()
-    plugin:SetPoint('TOP', VeneerBuffFrame.lastBuff, 'BOTTOM', 0, -4)
-    plugin:SetPoint('RIGHT', UIParent, 'RIGHT', -6, 0)
-  else
-    plugin:ClearAllPoints()
-    plugin:SetPoint('TOPRIGHT', UIParent, 'TOPRIGHT', -6, -120)
-  end
-
-  plugin:Show()
-end
-
-plugin.init = function()
-
-  plugin:RegisterEvent("QUEST_LOG_UPDATE")
-  plugin:RegisterEvent("TRACKED_ACHIEVEMENT_LIST_CHANGED")
-  plugin:RegisterEvent("QUEST_WATCH_LIST_CHANGED")
-  plugin:RegisterEvent("QUEST_AUTOCOMPLETE")
-  plugin:RegisterEvent("QUEST_ACCEPTED")
-  plugin:RegisterEvent("SUPER_TRACKED_QUEST_CHANGED")
-  plugin:RegisterEvent("SCENARIO_UPDATE")
-  plugin:RegisterEvent("SCENARIO_CRITERIA_UPDATE")
-  plugin:RegisterEvent("SCENARIO_SPELL_UPDATE")
-  plugin:RegisterEvent("TRACKED_ACHIEVEMENT_UPDATE")
-  plugin:RegisterEvent("ZONE_CHANGED_NEW_AREA");
-  plugin:RegisterEvent("ZONE_CHANGED");
-  plugin:RegisterEvent("QUEST_POI_UPDATE");
-  plugin:RegisterEvent("VARIABLES_LOADED");
-  plugin:RegisterEvent("QUEST_TURNED_IN");
-  plugin:RegisterEvent("PLAYER_MONEY");
-
-  plugin.trackers = {
-    questTracker,
-  }
-  print('bub')
-end
-function plugin:event(event, ...)
-  print('|cFFFF0088' .. event, ...)
-  if event == 'QUEST_WATCH_LIST_CHANGED' then
-    local questID, added = ...
-    if added then
-      if not IsQuestBounty(questID) or IsQuestComplete(questId) then
-        print(questID, added)
-        plugin:Update(X_QUEST_ADDED, questID)
-      end
-    else
-      print()
-      plugin:Update(X_QUEST)
-    end
-  elseif event == 'QUEST_LOG_UPDATE' then
-    plugin:Update(X_MODULE_QUEST)
-  elseif event == 'QUEST_POI_UPDATE' then
-    
-    if GetCVar("trackQuestSorting") == "proximity" then
-      -- todo: sort blocks
-    end
-    plugin:Update(X_MODULE_QUEST)
-    elseif event == 'PLAYER_MONEY' then
-    plugin:Update(X_MONEY)
-  end
-
-end
-
--- adjusts money events bitcode when a tracker is displaying money data
-function plugin:UpdateMoneyFlag(watchMoney, reason)
-  if watchMoney then
-    if (band(X_MONEY, reason) == 0) then
-      X_MONEY = X_MONEY - reason
-    end
-  else
-    if (band(X_MONEY, reason) > 0) then
-      X_MONEY = X_MONEY + reason
-    end
-  end
-end
-
--- used by framescripts to poke the updater when an animation has ended
-function plugin:UpdateAnimation(block)
-
-  local reason = block.handler.updateReasonEvents
-  if block.animating then
-    if (band(X_ANIMATION, reason) == 0) then
-      X_ANIMATION = X_ANIMATION - reason
-    end
-  else
-    if (band(X_ANIMATION, reason) > 0) then
-      X_ANIMATION = X_ANIMATION + reason
-    end
-  end
-end
\ No newline at end of file
--- a/Veneer_Objectives/Veneer_Objectives.iml	Tue Oct 25 12:33:20 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="LUA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
-    </content>
-    <orderEntry type="jdk" jdkName="WoW Lua (5.1.4)" jdkType="Lua SDK" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>
\ No newline at end of file
--- a/Veneer_Objectives/Veneer_Objectives.toc	Tue Oct 25 12:33:20 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-## Interface: 70000
-## Title: Veneer |cFF00FF00Objective Tracker|r
-## Notes: Objectives frame hooker-upper
-## Author: Krakyn
-## Version: 1.0-@project-revision@
-## SavedVariables: VeneerData
-## X-Category: Interface Enhancements
-## DefaultState: Enabled
-## LoadOnDemand: 0
-## Dependencies: Veneer
-
-Veneer_Objectives.xml
-ObjectiveTracker.lua
\ No newline at end of file
--- a/Veneer_Objectives/Veneer_Objectives.xml	Tue Oct 25 12:33:20 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
-..\FrameXML\UI.xsd">
-  <Frame name="VeneerObjectives" parent="UIParent">
-    <KeyValues>
-      <KeyValue key="DEVIAN_PNAME" value="Veneer"/>
-    </KeyValues>
-    <Size x="140" y="800" />
-    <Layers>
-      <Layer level="OVERLAY">
-        <FontString parentKey="header" inherits="VeneerHeaderFont" text="Objectives">
-          <Anchors>
-            <Anchor point="TOPLEFT" />
-          </Anchors>
-        </FontString>
-      </Layer>
-    </Layers>
-  </Frame>
-
-  <Button name="VeneerObjectiveHeader" virtual="true" hidden="true">
-    <Size x="140" y="32" />
-    <Layers>
-      <Layer level="OVERLAY">
-        <FontString name="$parentHeader" parentKey="text" inherits="VeneerHeader2Font">
-          <Anchors>
-            <Anchor point="TOPLEFT" />
-          </Anchors>
-        </FontString>
-      </Layer>
-    </Layers>
-    <Animations>
-      <!-- some fancy pants animation logic -->
-      <AnimationGroup parentKey="fadeIn">
-        <Alpha duration="0.14" fromAlpha="0" toAlpha="1" order="1" />
-        <Scripts>
-          <OnFinished>
-            VeneerObjectives:UpdateAnimation()
-          </OnFinished>
-        </Scripts>
-      </AnimationGroup>
-    </Animations>
-  </Button>
-
-  <Button name="VeneerObjectiveBlock" virtual="true" hidden="true">
-
-    <Size x="140" y="1" />
-    <Layers>
-
-      <Layer level="BACKGROUND">
-        <Texture setAllPoints="true" parentKey="background">
-          <Color a="0.5" r="0" g="0" b="0" />
-        </Texture>
-        <Texture parentKey="tag1">
-          <Size x="24" y="24" />
-          <Anchors>
-            <Anchor point="TOPRIGHT" />
-          </Anchors>
-        </Texture>
-      </Layer>
-      <Layer level="OVERLAY">
-        <FontString name="$parentHeader" parentKey="header" inherits="VeneerHeaderFont">
-          <Anchors>
-            <Anchor point="TOPLEFT" />
-          </Anchors>
-        </FontString>
-      </Layer>
-
-    </Layers>
-  </Button>
-
-  <Frame name="VeneerObjectiveLine" virtual="true" hidden="true">
-    <Size x="140" />
-    <Layers>
-
-      <Layer level="OVERLAY">
-
-        <FontString parentKey="text" inherits="VeneerNumberFont" wordwrap="true" justifyH="LEFT">
-          <Size x="140" />
-          <Anchors>
-            <Anchor point="TOPLEFT" />
-          </Anchors>
-        </FontString>
-      </Layer>
-    </Layers>
-  </Frame>
-</Ui>
\ No newline at end of file