815ad7141e
fixed bugs after relogging/reloading UI when last opened page was WishList or Search removed redundant menu of world epics, removed fashion table (I don't see the point of keeping it since you can preview everything in the turtle shop itself anyway) tooltip source is now more accurate and lighter on performance moved buttons in atlasloot panel in Atlas to save some space
160 lines
6.4 KiB
Lua
160 lines
6.4 KiB
Lua
local GREY = "|cff999999";
|
|
local RED = "|cffff0000";
|
|
local WHITE = "|cffFFFFFF";
|
|
local GREEN = "|cff1eff00";
|
|
local PURPLE = "|cff9F3FFF";
|
|
local BLUE = "|cff0070dd";
|
|
local ORANGE = "|cffFF8400";
|
|
|
|
local AL = AceLibrary("AceLocale-2.2"):new("AtlasLoot");
|
|
local currentPage = 1;
|
|
local SearchResult = nil;
|
|
|
|
function AtlasLoot:ShowSearchResult()
|
|
AtlasLoot_ShowItemsFrame("SearchResult", "SearchResultPage"..currentPage, string.format((AL["Search Result: %s"]), AtlasLootCharDB.LastSearchedText or ""), AtlasLoot_AnchorPoint);
|
|
end
|
|
|
|
local function strtrim(s)
|
|
return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
|
|
end
|
|
|
|
function AtlasLoot:Search(Text)
|
|
if not Text then return end
|
|
Text = strtrim(Text);
|
|
if Text == "" then return end
|
|
local text = string.lower(Text);
|
|
local search = function(dataSource)
|
|
if dataSource == "AtlasLootFallback" then return end
|
|
local partial = AtlasLootCharDB.PartialMatching;
|
|
for dataID, data in pairs(AtlasLoot_Data[dataSource]) do
|
|
if type(data) == "table" then
|
|
for _, v in ipairs(data) do
|
|
if type(v[1]) ~= "table" then
|
|
-- item
|
|
if type(v[1]) == "number" and v[1] > 0 then
|
|
local itemName = GetItemInfo(v[1]);
|
|
if not itemName then itemName = gsub(v[3], "=q%d=", "") end
|
|
local found;
|
|
if partial then
|
|
found = string.find(string.lower(itemName), text);
|
|
else
|
|
found = string.lower(itemName) == text;
|
|
end
|
|
if found then
|
|
local _, _, quality = string.find(v[3], "=q(%d)=");
|
|
if quality then itemName = "=q"..quality.."="..itemName end
|
|
table.insert(AtlasLootCharDB["SearchResult"], { v[1], v[2], itemName, v[4], dataID.."|"..dataSource });
|
|
end
|
|
-- spell
|
|
elseif (v[1] ~= nil) and (v[1] ~= "") and (string.sub(v[1], 1, 1) == "s") then
|
|
local spellName
|
|
if not spellName then
|
|
if (string.sub(v[3], 1, 2) == "=d") then
|
|
spellName = gsub(v[3], "=ds=", "");
|
|
else
|
|
spellName = gsub(v[3], "=q%d=", "");
|
|
end
|
|
end
|
|
local found;
|
|
if partial then
|
|
found = string.find(string.lower(spellName), text);
|
|
else
|
|
found = string.lower(spellName) == text;
|
|
end
|
|
if found then
|
|
spellName = string.sub(v[3], 1, 4)..spellName;
|
|
table.insert(AtlasLootCharDB["SearchResult"], { v[1], v[2], spellName, v[4], dataID.."|"..dataSource });
|
|
end
|
|
-- enchant
|
|
elseif (v[1] ~= nil) and (v[1] ~= "") and (string.sub(v[1], 1, 1) == "e") then
|
|
local spellName
|
|
if not spellName then
|
|
if (string.sub(v[3], 1, 2) == "=d") then
|
|
spellName = gsub(v[3], "=ds=", "");
|
|
else
|
|
spellName = gsub(v[3], "=q%d=", "");
|
|
end
|
|
end
|
|
local found;
|
|
if partial then
|
|
found = string.find(string.lower(spellName), text);
|
|
else
|
|
found = string.lower(spellName) == text;
|
|
end
|
|
if found then
|
|
spellName = string.sub(v[3], 1, 4)..spellName;
|
|
table.insert(AtlasLootCharDB["SearchResult"], { v[1], v[2], spellName, v[4], dataID.."|"..dataSource });
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
AtlasLootCharDB["SearchResult"] = {};
|
|
AtlasLootCharDB.LastSearchedText = Text;
|
|
for dataSource in pairs(AtlasLoot_Data) do search(dataSource) end
|
|
|
|
if getn(AtlasLootCharDB["SearchResult"]) == 0 then
|
|
DEFAULT_CHAT_FRAME:AddMessage(RED..AL["AtlasLoot"]..": "..WHITE..AL["No match found for"].." \""..Text.."\".");
|
|
else
|
|
currentPage = 1;
|
|
SearchResult = AtlasLoot_CategorizeWishList(AtlasLootCharDB["SearchResult"]);
|
|
AtlasLoot_ShowItemsFrame("SearchResult", "SearchResultPage1", string.format((AL["Search Result: %s"]), AtlasLootCharDB.LastSearchedText or ""), AtlasLoot_AnchorPoint);
|
|
end
|
|
end
|
|
|
|
function AtlasLoot:ShowSearchOptions(button)
|
|
local Hewdrop = AceLibrary("Hewdrop-2.0");
|
|
if Hewdrop:IsOpen(button) then
|
|
Hewdrop:Close(1);
|
|
else
|
|
local setOptions = function()
|
|
Hewdrop:AddLine(
|
|
"text", AL["Search options"],
|
|
"isTitle", true,
|
|
"notCheckable", true
|
|
);
|
|
Hewdrop:AddLine(
|
|
"text", AL["Partial matching"],
|
|
"checked", AtlasLootCharDB.PartialMatching,
|
|
"tooltipTitle", AL["Partial matching"],
|
|
"tooltipText", AL["If checked, AtlasLoot searches item names for a partial match."],
|
|
"func", function() AtlasLootCharDB.PartialMatching = not AtlasLootCharDB.PartialMatching end
|
|
);
|
|
end;
|
|
Hewdrop:Open(button,
|
|
'point', function(parent)
|
|
return "BOTTOMLEFT", "BOTTOMRIGHT";
|
|
end,
|
|
"children", setOptions
|
|
);
|
|
end
|
|
end
|
|
|
|
function AtlasLoot:GetOriginalDataFromSearchResult(itemID)
|
|
for i, v in ipairs(AtlasLootCharDB["SearchResult"]) do
|
|
if v[1] == itemID then return unpack(v) end
|
|
end
|
|
end
|
|
|
|
-- Copied and modified from AtlasLoot_GetWishListPage
|
|
function AtlasLoot:GetSearchResultPage(page)
|
|
if not SearchResult then SearchResult = AtlasLoot_CategorizeWishList(AtlasLootCharDB["SearchResult"]) end
|
|
-- Calc for maximal pages
|
|
local pageMax = math.ceil(getn(SearchResult) / 30);
|
|
if page < 1 then page = 1 end
|
|
if page > pageMax then page = pageMax end
|
|
currentPage = page;
|
|
|
|
-- Table copy
|
|
local result = {};
|
|
local start = (page - 1) * 30 + 1;
|
|
for i = start, start + 29 do
|
|
if not SearchResult[i] then break end
|
|
table.insert(result, SearchResult[i]);
|
|
end
|
|
return result, pageMax;
|
|
end
|