Module:Sandbox/User:DerBambusbar

From Illerai

This is the current revision of this page, as edited by Mark (Sọ̀rọ̀ | contribs) at 21:48, 2 November 2024 (1 revision imported). The present address (URL) is a permanent link to this version.

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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>