Модуль:Платформы
Материал из ВикиФур
local p={}
local d
local s=require('Модуль:Работа со строками')
local str_replace=s.str_replace
p.map=false
p.platforms_gallery='<center>{{#tag:gallery|%platforms%|caption="[[Игровые платформы|Платформы]]"|widths=50px|heights=50px}}</center>';
p.platform_template='Файл:%image%{{!}}%link%<sup>[[:Категория:%category%|К]]</sup>%categories%'
p.SRC_KEY='_list'
function p.expand_platforms_from_template(frame)
return p.expand_platforms_from_frame(frame:getParent())
end
function p.expand_platforms_from_frame(frame)
local result=p.expand_platforms(p.list_from_args(frame.args), true)
-- return result
return frame:preprocess(result)
end
function p.test_platforms(frame)
p.load_data(frame.args[p.SRC_KEY])
local result=p.expand_platforms(p.list_all(), false)
-- return result
return frame:preprocess(result)
end
function p.expand_platforms_from_console(list)
list=p.list_from_args(list)
return p.expand_platforms(list, true)
end
function p.list_all(src)
p.load_data(src)
p.map_platforms()
local list={}
for i, v in pairs(d.platforms) do
list[p.normal_code(i)]=true
end
return list
end
function p.list_from_args(args)
p.load_data(args[p.SRC_KEY])
p.map_platforms()
local list={}, platform_code;
for i, v in pairs(args) do
if i~=p.SRC_KEY then
if string.match(i, '^%d+$') then platform_code=v else platform_code=i end
platform_code=p.normal_code(platform_code)
if not list[platform_code] then list[platform_code]=true end
end
end
return list
end
function p.load_data(src)
if d then return end
if not src then src='Модуль:Платформы/Список' end
d=require(src)
end
function p.normalize_list(list)
p.map_platforms()
local platform_code
local normal_list={}
for i, v in pairs(list) do
platform_code=i
if p.map[platform_code] then normal_list[p.map[platform_code]]=d.platforms[p.map[platform_code]] end
end
return normal_list
end
function p.normal_code(code)
-- не учитывается заглавное/мелкое написание, пробелы, подчёркивания, дефисы
local res = mw.ustring.lower(code)
res = str_replace(res, ' ', '')
res = str_replace(res, '_', '')
res = str_replace(res, '-', '')
return res
end
function p.expand_platforms(list, cat)
list=p.normalize_list(list)
local result=''
for i, v in ipairs(d.platform_order) do
if list[v] then
result=result..p.expand_platform(list[v], cat).."\n"
list[v]=nil
end
end
for i, v in pairs(list) do
result=result..p.expand_platform(v, cat).."\n"
end
result=str_replace(p.platforms_gallery, '%platforms%', result);
return result
end
function p.expand_platform(data, cat)
result=p.platform_template;
result=str_replace(result, '%link%', p.get_platform_link(data))
result=str_replace(result, '%category%', p.get_platform_category(data))
result=str_replace(result, '%image%', p.get_platform_image(data))
if cat then result=str_replace(result, '%categories%', p.expand_categories(data)) else result=str_replace(result, '%categories%', '') end
return result
end
function p.expand_categories(data)
return '[[Категория:'..p.get_platform_category(data)..']]'
end
function p.map_platforms()
if p.map~=false then return end
p.map={}
for i, v in pairs(d.platforms) do
p.map[p.normal_code(i)]=i
if v.title then p.map[p.normal_code(v.title)]=i end
if v.syns then
for i2, syn in pairs(v.syns) do
p.map[p.normal_code(syn)]=i
end
end
end
end
function p.get_platform_link(data)
if data.link then return data.link end
return '[['..data.title..']]'
end
function p.get_platform_category(data)
if data.category then return data.category end
return data.title
end
function p.get_platform_image(data)
if data.image then return data.image end
return data.title..'.png'
end
function p.test_parent_args(frame)
local parent_frame=frame:getParent()
local result='Parent arguments are:\n'
for i, v in pairs(parent_frame.args) do
result=result..'key '..i..'='..v..'<br>'
end
return result
end
return p