More actions
mNo edit summary |
m (add handler for Gallery Section (BBRadio)) |
||
Line 27: | Line 27: | ||
--fill in any missing template arguments | --fill in any missing template arguments | ||
--Gallery Section (Cargo) | |||
params.character = _char | params.character = _char | ||
params.source = v2.source or '' | params.source = v2.source or '' | ||
Line 37: | Line 38: | ||
params.see_all = v2.see_all or '' | params.see_all = v2.see_all or '' | ||
params.see_cameos = v2.see_cameos or '' | params.see_cameos = v2.see_cameos or '' | ||
--Gallery Section (BBRadio) | |||
params.season = v2.season or '' | |||
params.widths = v2.widths or '' | |||
if v2.template == 'Gallery Section (Cargo)' then | if v2.template == 'Gallery Section (Cargo)' then | ||
params.count_all = p. | params.count_all = p._countImages_GallerySectionCargo(params, false) or 0 | ||
params.count_cameos = p. | params.count_cameos = p._countImages_GallerySectionCargo(params, true) or 0 | ||
total_images = params.count_all + params.count_cameos | total_images = params.count_all + params.count_cameos | ||
Line 48: | Line 52: | ||
if params.count_cameos > 0 then | if params.count_cameos > 0 then | ||
params. | params.see_cameos = 'y' | ||
end | end | ||
if total_images > 0 then | if total_images > 0 then | ||
expanded_template = p. | expanded_template = p._expandTemplate_GallerySectionCargo(frame, params) | ||
table.insert(t, expanded_template) | table.insert(t, expanded_template) | ||
end | end | ||
elseif v2.template == 'Gallery Section (BBRadio)' then | |||
params.count_all = p._countImages_GallerySectionBBRadio(params) or 0 | |||
expanded_template = p._expandTemplate_GallerySectionBBRadio(frame, params) | |||
table.insert(t, expanded_template) | |||
elseif v2.template == 'Gallery Section' then | |||
end | end | ||
end | end | ||
Line 72: | Line 82: | ||
end | end | ||
function p. | -- counts the number of images with this character (or cameo) for sections using Template:Gallery Section (Cargo) | ||
-- countCameos: boolean | |||
function p._countImages_GallerySectionCargo(params, countCameos) | |||
tables = 'Files' | tables = 'Files' | ||
fields = 'COUNT(Files._pageName)' | fields = 'COUNT(Files._pageName)' | ||
character = | character = params.character or '' | ||
source = | source = params.source or '' | ||
section = | section = params.section or '' | ||
where_clause_parts = {} | where_clause_parts = {} | ||
Line 96: | Line 108: | ||
table.insert(where_clause_parts, "Files.Gallery_Sections HOLDS '" .. section .. "'") | table.insert(where_clause_parts, "Files.Gallery_Sections HOLDS '" .. section .. "'") | ||
end | end | ||
where_clause = | where_clause = concatparams.lues(where_clause_parts, " AND ") | ||
local args = { | local args = { | ||
Line 108: | Line 120: | ||
end | end | ||
function p. | function p._countImages_GallerySectionBBRadio(params) | ||
_character = | tables = 'Files,BBRadio_Cuts' | ||
_source = | fields = 'COUNT(Files._pageName)' | ||
_section = | join_on = 'Files._pageName=BBRadio_Cuts._pageName' | ||
_limit = tonumber( | |||
_title = | where_clause = 'Files.Characters HOLDS "' .. html_escape(character) .. '" AND BBRadio_Cuts.Season="' .. frame.args[2] .. '"' | ||
_header = | |||
_see_all = | local args = { | ||
_see_cameos = | where = where_clause, | ||
_count_all = | join = join_on | ||
} | |||
result = cargo.query( tables, fields, args ) | |||
count = result[1][fields] or '0' | |||
return tonumber(count) | |||
end | |||
function p._expandTemplate_GallerySectionCargo(frame, params) | |||
_character = params.character or '' | |||
_source = params.source or '' | |||
_section = params.section or '' | |||
_limit = tonumber(params.limit) or 4 | |||
_title = params.title or '' | |||
_header = params.header or '' | |||
_see_all = params.see_all or '' | |||
_see_cameos = params.see_cameos or '' | |||
_count_all = params.count_all or '' | |||
gallery = frame:expandTemplate{ title = 'Gallery Section (Cargo)', args = { | gallery = frame:expandTemplate{ title = 'Gallery Section (Cargo)', args = { | ||
Line 130: | Line 160: | ||
count_all = _count_all, | count_all = _count_all, | ||
count_cameos = _count_cameos | count_cameos = _count_cameos | ||
} } | }} | ||
return gallery | return gallery | ||
end | end | ||
function p. | function p._expandTemplate_GallerySectionBBRadio(frame, params) | ||
_character = params.character or '' | |||
_season = params.season or '' | |||
_episode = params.episode or '' | |||
_header = params.header or '' | |||
_title = params.title or '' | |||
_limit = tonumber(params.limit) or 4 | |||
_widths = tonumber(params.widths) or 250 | |||
_count_all = params.count_all or '' | |||
gallery = frame:expandTemplate { tile = 'Gallery Section (BBRadio)', args = { | |||
_character, | |||
_season, | |||
_episode, | |||
_header, | |||
_title, | |||
widths = _widths, | |||
limit = _limit, | |||
count_all = _count_all | |||
}} | |||
end | |||
function p.testExpandTemplate_1(frame) | |||
v = { | v = { | ||
Line 148: | Line 200: | ||
count_all = '7' | count_all = '7' | ||
} | } | ||
text = p. | text = p._expandTemplate_GallerySectionCargo(frame, v) | ||
return text | |||
end | |||
function p.testExpandTemplate_2(frame) | |||
v = { | |||
character = 'Noel Vermillion', | |||
season = 'NEO', | |||
limit = 8, | |||
title = 'title', | |||
header = 'h3', | |||
see_all = 'y', | |||
count_all = '7', | |||
} | |||
text = p._expandTemplate_GallerySectionBBRadio(frame, v) | |||
return text | return text |
Revision as of 18:10, 22 September 2019
--[[
{{#invoke:Sandbox/Chao|GallerySection|character=Noel Vermillion|section=Portraits}}
simulate passing a frame to the function in the console with:
myFrame = { args = { character='Noel Vermillion', section='Portraits' } }
=p.GallerySection ( myFrame )
=p.testExpandTemplate( myFrame )
=p.render(myFrame)
--]]
local p = {}
local cargo = mw.ext.cargo
local sections = mw.loadData('Module:Sandbox/Chao/data').sections
function p.render(frame)
text = {}
_char = frame.args['character'] or ''
for k,v in pairs (sections) do
section = k
-- v is a table of templates in this section
t = {}
for k2,v2 in pairs (v) do
params = {}
--fill in any missing template arguments
--Gallery Section (Cargo)
params.character = _char
params.source = v2.source or ''
params.section = v2.section or ''
params.limit = v2.limit or ''
params.widths = v2.widths or ''
params.header = v2.header or ''
params.title = v2.title or v2.section or ''
params.sort = v2.sort or ''
params.see_all = v2.see_all or ''
params.see_cameos = v2.see_cameos or ''
--Gallery Section (BBRadio)
params.season = v2.season or ''
params.widths = v2.widths or ''
if v2.template == 'Gallery Section (Cargo)' then
params.count_all = p._countImages_GallerySectionCargo(params, false) or 0
params.count_cameos = p._countImages_GallerySectionCargo(params, true) or 0
total_images = params.count_all + params.count_cameos
if params.count_all > 0 then
params.see_all = 'y'
end
if params.count_cameos > 0 then
params.see_cameos = 'y'
end
if total_images > 0 then
expanded_template = p._expandTemplate_GallerySectionCargo(frame, params)
table.insert(t, expanded_template)
end
elseif v2.template == 'Gallery Section (BBRadio)' then
params.count_all = p._countImages_GallerySectionBBRadio(params) or 0
expanded_template = p._expandTemplate_GallerySectionBBRadio(frame, params)
table.insert(t, expanded_template)
elseif v2.template == 'Gallery Section' then
end
end
--templates = concatvalues(t,"")
templates = table.concat(t)
if templates == "" then
else
-- insert the section, prepended by its header, to the final text
table.insert(text, '<h2>' .. k .. '</h2>\n' .. templates)
end
end
gallery = table.concat(text)
mw.log(dump(gallery))
return gallery
end
-- counts the number of images with this character (or cameo) for sections using Template:Gallery Section (Cargo)
-- countCameos: boolean
function p._countImages_GallerySectionCargo(params, countCameos)
tables = 'Files'
fields = 'COUNT(Files._pageName)'
character = params.character or ''
source = params.source or ''
section = params.section or ''
where_clause_parts = {}
if countCameos then
table.insert(where_clause_parts, "Files.Cameos HOLDS '" .. character .. "'")
else
table.insert(where_clause_parts, "Files.Characters HOLDS '" .. character .. "'")
end
if source == '' then
else
table.insert(where_clause_parts, "Files.Source HOLDS '" .. source .. "'")
end
if section == '' then
else
table.insert(where_clause_parts, "Files.Gallery_Sections HOLDS '" .. section .. "'")
end
where_clause = concatparams.lues(where_clause_parts, " AND ")
local args = {
where = where_clause
}
result = cargo.query( tables, fields, args )
count = result[1][fields] or '0'
return tonumber(count)
end
function p._countImages_GallerySectionBBRadio(params)
tables = 'Files,BBRadio_Cuts'
fields = 'COUNT(Files._pageName)'
join_on = 'Files._pageName=BBRadio_Cuts._pageName'
where_clause = 'Files.Characters HOLDS "' .. html_escape(character) .. '" AND BBRadio_Cuts.Season="' .. frame.args[2] .. '"'
local args = {
where = where_clause,
join = join_on
}
result = cargo.query( tables, fields, args )
count = result[1][fields] or '0'
return tonumber(count)
end
function p._expandTemplate_GallerySectionCargo(frame, params)
_character = params.character or ''
_source = params.source or ''
_section = params.section or ''
_limit = tonumber(params.limit) or 4
_title = params.title or ''
_header = params.header or ''
_see_all = params.see_all or ''
_see_cameos = params.see_cameos or ''
_count_all = params.count_all or ''
gallery = frame:expandTemplate{ title = 'Gallery Section (Cargo)', args = {
character = _character,
source = _source,
section = _section,
limit = _limit,
title = _title,
header = _header,
see_all = _see_all,
see_cameos = _see_cameos,
count_all = _count_all,
count_cameos = _count_cameos
}}
return gallery
end
function p._expandTemplate_GallerySectionBBRadio(frame, params)
_character = params.character or ''
_season = params.season or ''
_episode = params.episode or ''
_header = params.header or ''
_title = params.title or ''
_limit = tonumber(params.limit) or 4
_widths = tonumber(params.widths) or 250
_count_all = params.count_all or ''
gallery = frame:expandTemplate { tile = 'Gallery Section (BBRadio)', args = {
_character,
_season,
_episode,
_header,
_title,
widths = _widths,
limit = _limit,
count_all = _count_all
}}
end
function p.testExpandTemplate_1(frame)
v = {
character = 'Noel Vermillion',
source = 'BlazBlue: Central Fiction',
section = '',
limit = 8,
title = 'title',
header = 'h3',
see_all = 'y',
see_cameos = 'y',
count_all = '7'
}
text = p._expandTemplate_GallerySectionCargo(frame, v)
return text
end
function p.testExpandTemplate_2(frame)
v = {
character = 'Noel Vermillion',
season = 'NEO',
limit = 8,
title = 'title',
header = 'h3',
see_all = 'y',
count_all = '7',
}
text = p._expandTemplate_GallerySectionBBRadio(frame, v)
return text
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
-- concat all the strings in table s together with the given delimiter
-- skips blank entries (where value v = "")
function concatvaluesonly(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 quote_escape(s)
return (string.gsub(s, "[\"']", {
["\'"] = "\\'",
['\"'] = '\\"'
}))
end
function html_escape(s)
return (string.gsub(s, "[<>\"'/ ,]", {
["<"] = "%3C",
[">"] = "%3E",
['"'] = "%22",
["'"] = "%27",
["/"] = "%2F",
[" "] = "+",
[","] = "%2C"
}))
end
-- helpful for printing tables
function dump(o)
if type(o) == 'table' then
local s = '{ '
for k,v in pairs(o) do
if type(k) ~= 'number' then k = '"'..k..'"' end
s = s .. '['..k..'] = ' .. dump(v) .. ','
end
return s .. '} '
else
return tostring(o)
end
end
return p