Module:Sandbox/User:DerBambusbar
Jump to navigation
Jump to search
Module documentation
This documentation is transcluded from Module:Sandbox/User:DerBambusbar/doc. [edit] [history] [purge]
-- <nowiki>
local p = {}
local images = {
agility = '<span class="drops-agility" style="margin-left:0.3em;">[[File:Agility icon.png|link=Agility|frameless|20px]]</span>',
combat = '<span class="drops-combat" style="margin-left:0.3em;">[[File:Multicombat.png|link=Combat level|frameless|20px]]</span>',
hunter = '<span class="drops-hunter" style="margin-left:0.3em;">[[File:Hunter icon.png|link=Hunter|frameless|20px]]</span>',
farming = '<span class="drops-farming" style="margin-left:0.3em;">[[File:Farming icon.png|link=Farming|frameless|20px]]</span>',
firemaking = '<span class="drops-firemaking" style="margin-left:0.3em;">[[File:Firemaking icon.png|link=Firemaking|frameless|20px]]</span>',
fishing = '<span class="drops-fishing" style="margin-left:0.3em;">[[File:Fishing icon.png|link=Fishing|frameless|20px]]</span>',
mining = '<span class="drops-mining" style="margin-left:0.3em;">[[File:Mining icon.png|link=Mining|frameless|20px]]</span>',
reward = '<span class="drops-reward" style="margin-left:0.3em;">[[File:Casket.png|link=Reward|frameless|20px]]</span>',
woodcutting = '<span class="drops-woodcutting" style="margin-left:0.3em;">[[File:Woodcutting icon.png|link=Woodcutting|frameless|20px]]</span>',
smithing = '<span class="drops-smithing" style="margin-left:0.3em;">[[File:Smithing icon.png|link=Smithing|frameless|20px]]</span>',
thieving = '<span class="drops-thieving" style="margin-left:0.3em;">[[File:Thieving icon.png|link=Thieving|frameless|20px]]</span>'
}
function p.main(frame)
local args = frame:getParent().args
local itemToSearch = args.itemToSearch or args[1] or 'buttons'
local sourceType = args.sourceType or args[2] or 'skilling'
local includeQuantity = args.sourceType or args[3] or 'false'
--load data
local q = {
'[[Dropped item::'..itemToSearch..']',
'?Drop JSON',
limit = 500,
}
--buttons is a good example
--clue scrolls 'beginner clue,easy clue,medium clue,hard clue, elite clue, master clue'
local smwdata = mw.smw.ask(q)
if not smwdata then
return ":''No Data was found "
end
--create arrays
local combat = {}
local reward = {}
local skilling = {}
if smwdata then
for dataIndex,dataTable in ipairs(smwdata) do
--load JSON and filter out other categories
local dropJSON = mw.text.jsonDecode(dataTable['Drop JSON'] or '{}')
--sort output into arrays of type
if dropJSON['Drop type'] == 'reward' then
table.insert(reward,loadDataFromJSON(dropJSON))
elseif dropJSON['Drop type'] == 'combat' then
table.insert(combat,loadDataFromJSON(dropJSON))
else
local dropArray=loadDataFromJSON(dropJSON)
dropArray['Drop type']=dropJSON['Drop type']
dropArray['Drop level']=dropJSON['Drop level']
table.insert(skilling,dropArray)
end
end
end
--print details
--print table header and create table
local htmlTable = mw.html.create('table')
if includeQuantity=='true' then
htmlTable :addClass('wikitable sortable filterable item-drops align-center-2 align-center-3 align-center-4 autosort=4,a')
:tag('tr')
:tag('th'):addClass('drop-disp-btn btn-first'):wikitext('Source'):done()
:tag('th'):wikitext('Level'):done()
:tag('th'):wikitext('Quantity'):done()
:tag('th'):wikitext('Rarity'):addClass('drops-rarity-header'):done()
else
htmlTable :addClass('wikitable sortable filterable item-drops align-center-2 align-center-3 align-center-4 autosort=4,a')
:tag('tr')
:tag('th'):addClass('drop-disp-btn btn-first'):wikitext('Source'):done()
:tag('th'):wikitext('Level'):done()
:tag('th'):wikitext('Rarity'):addClass('drops-rarity-header'):done()
end
if sourceType=='combat' then
for index,dropObj in pairs(combat) do
htmlTable:node(printTableRow(dropObj,includeQuantity))
end
elseif sourceType=='reward' then
for index,dropObj in pairs(reward) do
htmlTable:node(printTableRow(dropObj,includeQuantity))
end
else
for index,dropObj in pairs(skilling) do
htmlTable:node(printTableRow(dropObj,includeQuantity))
end
end
return tostring(htmlTable)
end
function printTableRow(dropJSON,includeQuantity)
local levelText=dropJSON['Drop level']
local levelImage=images[dropJSON['Drop type']] or ''
--print table row
local htmlTableRow = mw.html.create('tr')
if includeQuantity==true then
htmlTableRow
:tag('td')
:wikitext('[['..dropJSON['Dropped from']..']]')
:done()
:tag('td')
:wikitext(levelImage..' '..levelText)
:done()
:tag('td'):wikitext(dropJSON['Drop Quantity']):done()
:tag('td'):wikitext(dropJSON['Rarity']):done()
else
htmlTableRow
:tag('td')
:wikitext('[['..dropJSON['Dropped from']..']]')
:done()
:tag('td')
:wikitext(levelImage..' '..levelText)
:done()
:tag('td'):wikitext(dropJSON['Rarity']):done()
end
return tostring(htmlTableRow)
end
function loadDataFromJSON(dropJSON)
local dropArray = {}
dropArray['Drop type']=dropJSON['Drop type']
dropArray['Dropped from']=dropJSON['Dropped from']
dropArray['Drop level']=dropJSON['Drop level']
--if dropArray['Drop level']=='' then dropArray['Drop level']='—' end
dropArray['Drop Quantity']=dropJSON['Drop Quantity']
dropArray['Rarity']=dropJSON['Rarity']
return dropArray
end
function dropDataLine(dropJSON)
local dropString=""
dropString=dropJSON['Drop type'] .. ' - ' .. dropJSON['Dropped from']
mw.log(dropString)
end
return p
-- </nowiki>