Module:QuestList

From Brighter Shores Wiki
Revision as of 08:15, 12 December 2024 by Drekryan (talk | contribs) (query episodes)
Jump to navigation Jump to search

Documentation for this module may be created at Module:QuestList/doc

require('strict')
require('Module:Mw.html extension')
local parse = require('Module:Param Parse')

local p = {}

function p.main(frame)
	local args = frame:getParent().args

	-- get all episodes by episode sequence order --
	local episodes = mw.smw.ask{ 
		'[[Category:Episodes]]',
		('[[Name::%s]]'):format( args.episode or '+' ),
		'[[Episode sequence number::+]]',
		'[[Release Date::+]]',
		'?Name#-',
		'order=asc',
		'sort=Episode sequence number',
		'link=none',
		'format=plainlist'
	}
	
	local table = mw.html.create('table')
		:addClass('wikitable quest-table align-center-2 align-center-3 align-left-4')
		:css{
			['width'] = '55%'
		}
		:attr{ cellspacing = '3' }
		
		for _, episode in ipairs(episodes) do
			table
				:tag('tr')
					:tag('th')
					:attr('colspan', 4)
						:wikitext('[[File:'.. episode.Name ..' episode icon.png|16px]] ' .. episode[1])
					:done()
				:done()
				:tag('tr')
					:tag('th')
						:wikitext('Quest')
					:done()
					:tag('th')
						:wikitext('Type')
					:done()
					:tag('th')
						:wikitext('Difficulty')
					:done()
					:tag('th')
						:wikitext('Requirements')
					:done()
				:done()
				
				if ( episode ) then
					-- get all quests for episode --
					local quests = mw.smw.ask{ 
						'[[Category:Quests]]',
						'[[Name::+]]',
						('[[Episode::%s]]'):format( episode.Name ),
						'?Quest type',
						'?Difficulty',
						'?Requirements',
						'order=asc',
						'sort=Quest type,override_seq,Difficulty'
					}
					
					if ( quests ) then
						-- get quests for episode --
						for _, quest in ipairs( quests ) do
							table
								:tag('tr')
									:tag('td')
										:wikitext( quest[1] )
									:done()
									:tag('td')
										:css {
											['width'] = '50px'
										}
										:wikitext( quest['Quest type'] )
									:done()
									:tag('td')
										:wikitext( parse.difficulty_func( tostring(quest.Difficulty ) ) )
									:done()
									:tag('td')
										:css {
											['width'] = '55%'
										}
										:tag('div')
											:addClass('lighttable checklist')
											:newline()
											:wikitext( quest.Requirements )
											:newline()
										:done()
									:done()
								:done()
						end
					end
				end
		end
		
		table:done()

	return table
end

return p