Module:Data

From Tempest's Unofficial Solar Ash Speedrunning Wiki
Jump to navigation Jump to search

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

local p = {}

function p.addStrat( frame )
	local args = frame.args
	local out_args = {}
	for k, v in pairs(args) do
		if v == '' then
			out_args[k] = nil
		else
			out_args[k] = parseArg(v)
		end
	end
	out_args[1] = nil


    bucket("skips").put(out_args)
end

function p.addEye( frame )
    local args = frame.args
	local out_args = {}
	for k, v in pairs(args) do
		if v == '' then
			out_args[k] = nil
		else
			out_args[k] = parseArg(v)
		end
	end
	out_args[1] = nil


    bucket("eyes").put(out_args)
end

function p.getEyesInArea( frame )
    local args = frame.args
    local area = args[1]
    local raw_matches = bucket("eyes").select("page_name", "thumbnail")
        .where("area", area)
        .run()
    local output = ""
    for i,match in ipairs(raw_matches) do
        local thumbnail = match['thumbnail']
        local page_name = match['page_name']
        local gallery_item = frame:expandTemplate{ title = 'EyeGalleryItem', args = { eye = page_name, thumbnail = thumbnail } }
        output = output .. gallery_item
    end

    local output_len = string.len( output )
    if output_len >= 1 then
        return '<div class="solar-eyegallery">' .. output .. '</div>'
    else
        return '<div class="solar-eyegallery-empty">No eyes found</div>'
    end
end

function p.getStratsInArea( frame )
    local args = frame.args
    local area = args[1]
    local raw_matches = bucket("skips").select("page_name", "area", "description")
        .where("area", area)
        .run()

    local in_this_area = {}
    for i,match in ipairs(raw_matches) do
        local areas = match['area']
        if areas[1] == area then
            table.insert(in_this_area, match)
        end
    end

    if #in_this_area >= 1 then
        local output = mw.html.create('ul')
        for i,match in ipairs(in_this_area) do
            local item = output:tag('li'):wikitext("[[" .. match["page_name"] .. "]]")

            if match["description"] then
                item:wikitext(" (" .. match["description"] .. ")")
            end

            item:done()
        end

        return tostring(output)
    else
        return tostring(mw.html.create('p'):css('opacity', '.6'):wikitext('(No skips found)'))
    end
end

function p.getStratsLeadingToArea( frame )
    local args = frame.args
    local area = args[1]
    local raw_matches = bucket("skips").select("page_name", "area", "description")
        .where("area", area)
        .run()

    local not_starting_here = {}
    for i,match in ipairs(raw_matches) do
        local areas = match['area']
        if areas[1] ~= area then
            table.insert(not_starting_here, match)
        end
    end

    if #not_starting_here >= 1 then
        local output = mw.html.create('ul')
        for i,match in ipairs(not_starting_here) do
            local item = output:tag('li'):wikitext("[[" .. match["page_name"] .. "]]")

            if match["description"] then
                item:wikitext(" (" .. match["description"] .. ")")
            end

            item:done()
        end

        return tostring(output)
    else
        return tostring(mw.html.create('p'):css('opacity', '.6'):wikitext('(No skips found)'))
    end
end

function parseArg( arg )
    local arr = {}
    for word in mw.ustring.gmatch(arg, '([^,]+)') do
        table.insert(arr, mw.text.trim(word) )
    end
    if #arr > 1 then
        return arr
    else
        return arr[1]
    end
end

return p