Module:ViewData URL

From BlazBlue Wiki
Revision as of 01:48, 31 July 2019 by Chao (talk | contribs) (initial)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Please go to Module:ViewData URL/doc to edit the documentation.

To be used with Template:Gallery Section (BBRadio) or Template:Gallery Section (Cargo)

Motivation

This module builds a URL to Special:ViewData to fix some undesirable behavior in the link that's generated by default:

  1. The first batch of results are excluded. We want to display all results, even ones that have already been returned.
  2. The results per page are limited to whatever was initially set as the limit, unless the limit was 0, in which case Special:ViewData shows 100 results per page. We want to be able to manually set this limit.

Usage

To create a link for Template: Gallery Section (BBRadio):

{{#invoke:ViewData URL|BBRadio|character|season
|intro=<h3>BlazBlue Radio D</h3>
|limit=100
}}

To create a link for Template:Gallery Section (Cargo):

{{#invoke:ViewData URL|Files
|character=
|cameo=
|location=
|weapon=
|source=
|section=
|artist=
|limit=
|widths=
|intro=
|limit=100
|order_by=Date DESC
}}

local p = {}
local cargo = mw.ext.cargo

function p.BBRadio( frame )
	intro = frame.args['intro'] or ''
	intro = html_escape(intro)
	
	limit = frame.args['limit'] or 100
	
	link_parts = {
		'tables=Files,BBRadio_Cuts',
		'fields=Files._pageName, Files.Caption',
		'where=Files.Characters HOLDS "' .. html_escape(frame.args[1]) .. '" AND BBRadio_Cuts.Season="' .. frame.args[2] .. '"',
		'join_on=Files._pageName=BBRadio_Cuts._pageName',
		'order_by=_pageName',
		'format=gallery',
		'offset=0',
		'limit=' .. limit,
		'default=',
		'intro=' .. intro,
		'show bytes=0',
		'show dimensions=0',
		'show filename=0',
		'caption field=Caption',
		'image width=250'
	}
	link = html_escape(concatvalues(link_parts,"&"))
	
	parts = {
		'https://blazblue.wiki/index.php\?title=Special:ViewData&',
		link
	}
	final_link = concatvalues(parts,"")
	return final_link
end

-- concat all the strings in table s together with the given delimiter
function concatvalues(s,delimiter)
    local t = { }
    for k,v in ipairs(s) do
        t[#t+1] = tostring(v)
    end
    return table.concat(t,delimiter)
end

function html_escape(s)
    return (string.gsub(s, "[<>\"'/ ,]", {
        ["<"] = "%3C",
        [">"] = "%3E",
        ['"'] = "%22",
        ["'"] = "%27",
        ["/"] = "%2F",
        [" "] = "+",
        [","] = "%2C"
    }))
end

return p