Module:Fish
local p = {}
local FishData = mw.loadData [[Module:Fish/Data]]
local Icons = require [[Module:Icons]]
local Shared = require [[Module:Utils]]
local rarityOrder = {'Common','Uncommon','Rare','Epic','Legendary'}
function p.findFish(frame)
local sorted, unsorted = Shared.getFilteredTableStack(frame,nil,FishData,rarityOrder)
sorted.unsorted= unsorted
return p.drawTableByNames(sorted, {Header=true,NestedOrder=classOrder})
end
function p.drawTableByNames(itemNames, args)
args = args or {}
args.RowFunction = args.RowFunction or p.drawFishRow
args.HeaderClass = args.HeaderClass or 'article-table navtable with-image binding-table mw-collapsible'
args.NestedOrder = args.NestedOrder or rarityOrder
if args.Header==true then
args.Header = mw.html.create('table'):addClass(args.HeaderClass):tag('tr')
:tag('th'):attr('colspan','3'):wikitext('Name'):done()
:tag('th'):wikitext('Rarity'):done()
:tag('th'):wikitext('Effect'):attr('colspan','5'):addClass('mobile-hidden'):done()
:allDone()
end
return Shared.drawNavTable(itemNames,args)
end
--wraws one row for vestige-table containing Vestige image, Name, Stats and description
function p.drawFishRow(Name,args)
args = args or {}
local Fish
if type(Name)=='table' then
Fish = Name --binding table passed as a first argument
else
Fish = p.getFish(Name)
end
return mw.html.create('tr')
:addClass(Fish.Rarity)
:tag('td'):attr('colspan','2'):tag('div')
:tag('span'):css('display','none'):wikitext('[[', Fish.Link, '|', Fish.Name or Name or '', ']]<br>'):done()
:wikitext('[[File:', Fish.Image or (Fish.Name or Name or '')..' wiki.png', '|',
args.mini and '65px' or '100px',
'|link=', Fish.Link or Fish.Name or Name or '', ']]')
:done()
:tag('td'):addClass('mobile-hidden'):node(p.drawFish(Fish)):done()
:tag('td')
:wikitext(Fish.Type)
:tag('br'):done()
:tag('span'):addClass('rarity-text'):addClass(Fish.Rarity)
:node(Fish.Rarity):done()
:done()
:tag('td'):attr('colspan','5')
:node(Icons.convertTooltipText(Fish.Desc,true)):done()
:allDone()
end
--Returns copy of a specified table from DB or creates a new one
function p.getFish(Name)
if Name then
if not FishData[Name] then
Name = mw.text.decode(Name) --converts ' in PAGENAME into '
Name = Shared.trim(Name)
end
if not FishData[Name] and FishData[Shared.titleCase(Name)] then
Name = Shared.titleCase(Name)
end
end
local Item = {Name=Name}
setmetatable(Item, {__index = FishData[Name]})
Item.Link = Item.Link or "Consumables"
return Item
end
--Draws an inline string with tooltip
function p.drawFish(Name,displayName)
local Fish
if type(Name)=='table' then Fish = Name else Fish = p.getFish(Name) end
return mw.html.create('span')
:addClass('vestige-tooltip')
:attr('data-param', Fish.Name)
:tag('span'):addClass('dottedText')
:wikitext('[[', Fish.Link or Fish.Name, '|', displayName or Fish.Name, ']]'):allDone()
end
return p