Module:Sandbox/User:Al97729/Temporary Test
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Sandbox/User:Al97729/Temporary Test/doc
-- from a given list of quests, find their quest requirements and add them to a list, ignoring any repeated quests
local p = {}
function p.main(frame)
-- retrieve list of quests in json format
local q = {
'[[Quest JSON::+]]',
'?Quest Requirements',
limit = 500,
format=json
}
local all_quests = mw.smw.ask(q)
-- populate table with headers
local t = mw.html.create('table')
t :addClass('wikitable sortable products-list align-right-4')
:tag('tr')
:tag('th')
:wikitext('Quests')
:done()
:tag('th')
:wikitext('Skills')
:done()
:done()
local quests_row = t:tag('tr')
local quests_cell = quests_row:tag('td') -- try making data into a checklist
local temp_list = {"%[%[%:Monkey Madness II%|Monkey Madness II%]%]", "%[%[%:Devious Minds%|Devious Minds%]%]"}
-- smw_item = full quest smw output
-- item = quest link
local required_quests = get_quests(temp_list, all_quests)
local quest_str = ""
for _, quest in ipairs(required_quests) do
quest_str = quest_str .. quest
end
quests_cell:wikitext(quest_str)
--[[
for _, smw_item in ipairs(all_quests) do
for _, item in ipairs(smw_item) do
-- for every quest the user has selected do:
if string.find(item, "%[%[%:Monkey Madness II%|Monkey Madness II%]%]") then
--quests_cell:wikitext(item)
--mw.logObject(smw_item)
--take quest requirements and add them to list of required quests
--table.insert(required_quests, "test")
--mw.log(smw_item["Quest Requirements"])
--take everything from between two brackets [] and put it into a temp array, search through them for any skill name and remove
-- get all links in Requirements
local quest_req_links = get_links(smw_item["Quest Requirements"])
-- filter links to remove anything that isnt a quest
local filtered_links = filter_links(quest_req_links)
required_quests = add_new_quests(required_quests, filtered_links)
end -- end of if string.find(item,
end -- end of for _,item in ipairs(smw_item)
end -- end of for _,smw_item in ipairs(all_quests)
]]
--[[
-- populate quests cell
local quests_row = t:tag('tr')
local quests_cell = quests_row:tag('td') -- try making data into a checklist
local i = 0
for _,smw_item in ipairs(all_quests) do
for _,item in ipairs(smw_item) do
mw.log(item)
if string.find(item, "Quick guide") then break end -- if its a quick guide, break the loop to prevent duplicate quests showing
quests_cell:wikitext(item .. "<br/>")
end
end
quests_cell:done()
quests_row:done()
]]
--[[
local skills_cell = mw.html.create('td')
local skills_ul = skills_cell:tag('ul')
skills_ul:addClass('Item 1')
:css({
['list-style-type'] = 'none',
['list-style-image'] = 'none',
margin = 0
})
local skill_li = skills_ul:tag('li')
skill_li:wikitext('Test')
]]
return tostring(t)
end
function get_links(list)
-- filter through quest requirements for links
local temp_list = {}
for i in string.gmatch(list, "%[%b[]%]") do
-- mw.log(i)
table.insert(temp_list, i)
end
return temp_list
end -- get_links
function filter_links(links)
--filter links so theres only quests left
local skills = {"Combat","Attack","Strength","Defence","Ranged","Prayer","Magic","Runecraft","Hitpoints","Crafting","Mining","Smithing","Fishing","Cooking","Firemaking","Woodcutting","Agility","Herblore","Thieving","Fletching","Slayer","Farming","Construction","Hunter"}
local num = 0
local list = {}
--mw.log("Previous table:")
--mw.logObject(links)
for _, item in ipairs(links) do
table.insert(list, item)
for _, skill in ipairs(skills) do
if string.find(item, skill) then -- if item is some sort of skill related thing, like an image, etc
table.remove(list)
break
end -- end of if string.find(item, skill)
end -- end of for skill in skills
num = num + 1
end -- end of for item in links
--mw.log("Finished table:")
--mw.logObject(list)
return list
end
function add_new_quests(list, links)
-- add non duplicate quests to the quest list
for _, new_quest in ipairs(links) do
local found = false
for _, quest in ipairs(list) do
-- if the new quest is the same as quest, dont add, otherwise, add
if new_quest == quest then
found = true
break
end -- if new_quest == quest
end -- for quest in ipairs(list)
if found == false then
mw.log("adding new quest " .. new_quest)
table.insert(list, new_quest)
end
end
--mw.logObject(list)
return list
end
function get_quests(quests, all_quests)
-- find quests in all quests
local required_quests = {}
for _, quest in ipairs(quests) do
local quest_req_links
for _, q in ipairs(all_quests) do
--if q[1] == quest then mw.log(q[1]) end
if string.find(q[1], quest) then
quest_req_links = get_links(q["Quest Requirements"])
local filtered_links = filter_links(quest_req_links)
required_quests = add_new_quests(required_quests, filtered_links)
end
end
end
--mw.logObject(required_quests)
return required_quests
end
return p