Module:Map variants: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 101: | Line 101: | ||
map_level = true, | map_level = true, | ||
map_series = true, | map_series = true, | ||
large = | large = tpl_args.large, | ||
responsive = | responsive = tpl_args.responsive, | ||
} | } | ||
return html | return html | ||
Line 117: | Line 117: | ||
-- | -- | ||
p.map_variants = m_util.misc.invoker_factory(_map_variants, { | p.map_variants = m_util.misc.invoker_factory(_map_variants, { | ||
parentFirst = true, | |||
}) | }) | ||
return p | return p |
Revision as of 20:46, 25 January 2022
The above documentation is transcluded from Module:Map variants/doc.
Editors can experiment in this module's sandbox and testcases pages.
Subpages of this module.
Editors can experiment in this module's sandbox and testcases pages.
Subpages of this module.
-------------------------------------------------------------------------------
--
-- Module:Map variants
--
-- This module implements Template:Map variants.
-------------------------------------------------------------------------------
require('Module:No globals')
local m_util = require('Module:Util')
local m_item_util = require('Module:Item util')
local m_cargo = require('Module:Cargo')
-- Should we use the sandbox version of our submodules?
local use_sandbox = m_util.misc.maybe_sandbox('Map variants')
-- Lazy loading
local f_item_table -- require('Module:Item table').item_table
-- The cfg table contains all localisable strings and configuration, to make it
-- easier to port this module to another wiki.
local cfg = use_sandbox and mw.loadData('Module:Map variants/config/sandbox') or mw.loadData('Module:Map variants/config')
local i18n = cfg.i18n
-- ----------------------------------------------------------------------------
-- Helper functions
-- ----------------------------------------------------------------------------
local h = {}
-- Lazy loading for Module:Item table
function h.item_table(args)
if not f_item_table then
f_item_table = require('Module:Item table').item_table
end
return f_item_table(args)
end
function h.get_map_name(tpl_args)
if tpl_args.item_name then
return tpl_args.item_name
end
-- Get the name of a map from a page title
local page = tpl_args.page or mw.title.getCurrentTitle().prefixedText
local results = m_cargo.query(
{
'items',
'_pageData',
},
{
'items.name=name'
},
{
join = 'items._pageName = _pageData._pageNameOrRedirect',
where = string.format(
'_pageData._pageName = "%s" AND items.class_id = "Map"',
m_cargo.addslashes(page)
),
limit = 1,
}
)
if #results == 0 then
error(i18n.errors.no_map_on_page)
end
return results[1].name
end
function h.list_variant_names(name)
-- Returns a list of map names to include map variant query
local name_list = {
m_cargo.addslashes(name),
}
for _, v in ipairs(i18n.named_variants) do
name_list[#name_list+1] = m_cargo.addslashes( string.format(v, name) )
end
return table.concat({
'"',
table.concat(name_list, '", "'),
'"',
})
end
-- ----------------------------------------------------------------------------
-- Main functions
-- ----------------------------------------------------------------------------
local function _map_variants(tpl_args)
tpl_args.item_name = tpl_args.item_name or tpl_args[1]
local name = h.get_map_name(tpl_args)
local html = h.item_table{
q_tables = 'items, items__name_list, maps, map_series',
q_join = 'items._pageID = maps._pageID, maps.series = map_series.name, items._ID = items__name_list._rowID',
q_where = string.format(
'items._pageNamespace IN (%s) AND items.class_id = "Map" AND items__name_list._value IN (%s)',
m_item_util.get_item_namespaces{format = 'list'},
h.list_variant_names(name)
),
q_groupBy = 'items._pageID',
q_orderBy = 'map_series.ordinal DESC, maps.tier ASC, items.name ASC',
map_tier = true,
map_level = true,
map_series = true,
large = tpl_args.large,
responsive = tpl_args.responsive,
}
return html
end
-- ----------------------------------------------------------------------------
-- Exported functions
-- ----------------------------------------------------------------------------
local p = {}
--
-- Template:Map variants
--
p.map_variants = m_util.misc.invoker_factory(_map_variants, {
parentFirst = true,
})
return p