Difference between revisions of "Module:Video game release"
(Full support for Module:List arguments.) |
m (1 revision imported) |
(No difference)
|
Latest revision as of 22:40, 24 October 2018
This module uses Lua: |
This Lua module is used on approximately 14,000 pages, so changes to it will be widely noticed. Please test any changes in the module's /sandbox or /testcases subpages. Please consider discussing changes on the talk page before implementing them. |
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
This module implements the {{Video game release}} and {{Video game release hlist}} templates. The parameter "format" is passed to Module:List to set the output format. Please see the template page for usage instructions and tracking categories.
require('Module:No globals') local getArgs = require('Module:Arguments').getArgs local cd = require('Module:CountryData') local list = require('Module:List'); local p = {} local knownargs = { ['format'] = true, ['class'] = true, ['style'] = true, ['list_style'] = true, ['item_style'] = true, ['item1_style'] = true, ['indent'] = true } local labels = { ['NA'] = "[[North America|NA]]", ['EU'] = "[[Europe|EU]]", ['EUR'] = "[[Europe|EU]]", ['AU'] = "[[Australasia|AU]]", ['AUS'] = "[[Australasia|AU]]", ['PAL'] = "[[PAL region|PAL]]", ['SEA'] = "[[Southeast Asia|SEA]]", ['AS'] = "[[Asia|AS]]", ['SA'] = "[[South America|SA]]", ['OC'] = "[[Oceania|OC]]", ['WW'] = "<abbr title=\"Worldwide\">WW</abbr>", ['?'] = "<abbr title=\"Unknown\">?</abbr>" } local function getLocalLabel(alias) local label = labels[string.upper(alias)] return label end local countryData = {}; -- Used to store country data to avoid the need of repeated calls to Module:CountryData. This saves a little time if the same abbreviation appears multiple times in the template. local function getCountryData(frame, alias) local ualias = string.upper(alias) if(countryData[ualias] == nil) then local cdtable = cd.gettable(frame,alias,{}) countryData[ualias] = cdtable['alias'] end return countryData[ualias] end function p.main(frame) local args = getArgs(frame) local listformat = args['format'] if(listformat == nil or listformat == "") then listformat = "unbulleted" end local items = {} -- Old syntax "Two parameter region" use case, where param 1 is an article, param 2 is a label, and param 3 is the date. We assume this case if argument 4 is nil. if(args[3] ~= nil and args[4] == nil) then local item = "<span style=\"font-size:95%;\">[[" if(args[1] ~= nil) then item = item .. args[1] end item = item .. "|" if(args[2] ~= nil) then item = item .. args[2] end item = item .. "]]:</span> " .. args[3] .. "[[Category:Pages using vgrelease with two parameter region]]" table.insert(items, item) -- Old syntax "Blank region" use case, where param 1 is empty, and param 2 is the date. elseif(args[1] == nil and args[2] ~= nil) then local item = args[2] .. "[[Category:Pages using vgrelease without a region]]" table.insert(items, item) -- Normal use cases, region/date pairs in 1/2, 3/4, 5/6, etc. else local i = 1 local j = 2 while(args[i] and args[j]) do local label = getLocalLabel(args[i]); -- Didn't find a local label? Check for country data. if(label == nil) then label = getCountryData(frame, args[i]) -- Found something? Build a sitelink with it. if(label ~= nil) then label = "[[" .. label .. "|" .. args[i] .. "]]" else label = args[i] end end local item = "<span style=\"font-size:95%;\">" .. label .. ":</span> " .. args[j] table.insert(items, item) i = i + 2 j = j + 2 end end -- Add known parameters of Module:List to the table for k, v in pairs(args) do if(knownargs[k] == true) then items[k] = v end end local out = list.makeList(listformat, items) -- Set message for invalid parameters. Decide catagory based on list format chosen. local parameterMsg if(listformat == "horizontal") then parameterMsg = "[[Category:Pages using vgrelease hlist with named parameters|_VALUE_]]" else parameterMsg = "[[Category:Pages using vgrelease with named parameters|_VALUE_]]" end -- Preview message. if(frame:preprocess( "{{REVISIONID}}" ) == "") then parameterMsg = "<div class=\"hatnote\" style=\"color:red\"><strong>Warning:</strong> unknown parameter \"_VALUE_\" (this message is shown only in preview).</div>" end -- Check for invalid parameters for k, v in pairs(args) do if(type(k) ~= 'number' and knownargs[k] ~= true) then local msg = parameterMsg:gsub('_VALUE_', k) out = out .. msg end end return out end return p