Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:ViewData URL: Difference between revisions

From BlazBlue Wiki
(strip apostrophes from character names (like Taro and Susano'o) so they don't break the query)
m (strip apostrophes from character names (like Taro and Susano'o) in "cameo" as well as characters)
Line 46: Line 46:
character = frame.args['character'] or ''
character = frame.args['character'] or ''
character = string.gsub(character, "'", '')
character = string.gsub(character, "'", '')
cameo = frame.args['cameo'] or ''
cameo = string.gsub(cameo, "'", '')
-- build where clause
-- build where clause
Line 52: Line 55:
return 'Files.Characters HOLDS "' .. character .. '"' else return "" end end)(),
return 'Files.Characters HOLDS "' .. character .. '"' else return "" end end)(),
(function() if not (frame.args['cameo'] == "" or frame.args['cameo'] == nil ) then  
(function() if not (frame.args['cameo'] == "" or frame.args['cameo'] == nil ) then  
return 'Files.Cameos HOLDS "' .. frame.args['cameo'] .. '"' else return "" end end)(),
return 'Files.Cameos HOLDS "' .. cameo .. '"' else return "" end end)(),
(function() if not (frame.args['location'] == "" or frame.args['location'] == nil ) then  
(function() if not (frame.args['location'] == "" or frame.args['location'] == nil ) then  
return 'Files.Locations HOLDS "' .. frame.args['location'] .. '"' else return "" end end)(),
return 'Files.Locations HOLDS "' .. frame.args['location'] .. '"' else return "" end end)(),

Revision as of 15:40, 3 August 2019

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
	
	character = frame.args[1] or ''
	character = string.gsub(character, "'", '')
	
	link_parts = {
		'tables=Files,BBRadio_Cuts',
		'fields=Files._pageName, Files.Caption',
		'where=Files.Characters HOLDS "' .. html_escape(character) .. '" 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

function p.Files( frame )
	intro = frame.args['intro'] or ''
	intro = html_escape(intro)
	
	limit = frame.args['limit'] or 100
	
	character = frame.args['character'] or ''
	character = string.gsub(character, "'", '')
	
	cameo = frame.args['cameo'] or ''
	cameo = string.gsub(cameo, "'", '')
	
	-- build where clause
	where_clause_parts = {
		(function() if not (frame.args['character'] == "" or frame.args['character'] == nil ) then 
			return 'Files.Characters HOLDS "' .. character .. '"' else return "" end end)(),
		(function() if not (frame.args['cameo'] == "" or frame.args['cameo'] == nil ) then 
			return 'Files.Cameos HOLDS "' .. cameo .. '"' else return "" end end)(),
		(function() if not (frame.args['location'] == "" or frame.args['location'] == nil ) then 
			return 'Files.Locations HOLDS "' .. frame.args['location'] .. '"' else return "" end end)(),
		(function() if not (frame.args['weapon'] == "" or frame.args['weapon'] == nil ) then 
			return 'Files.Weapons HOLDS "' .. frame.args['weapon'] .. '"' else return "" end end)(),
		(function() if not (frame.args['artist'] == "" or frame.args['artist'] == nil ) then 
			return 'Files.Artists HOLDS "' .. frame.args['artist'] .. '"' else return "" end end)(),
		(function() if not (frame.args['section'] == "" or frame.args['section'] == nil ) then 
			return 'Files.Gallery_Sections HOLDS "' .. frame.args['section'] .. '"' else return "" end end)(),
		(function() if not (frame.args['source'] == "" or frame.args['source'] == nil ) then 
			return 'Files.Source HOLDS "' .. frame.args['source'] .. '"' else return "" end end)()
	}
	where_clause = concatvalues(where_clause_parts, " AND ")
	
	-- build url arguments
	link_parts = {
		'tables=Files',
		'fields=_pageName, Caption, Date',
		'where=' .. where_clause,
		'order_by=Date DESC',
		'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
-- skips blank entries (where value v = "")
function concatvalues(s,delimiter)
    local t = { }
    for k,v in ipairs(s) do
    	if not (v == '') then
    		t[#t+1] = tostring(v)
    	end
    end
    return table.concat(t,delimiter)
end

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

return p