Module:Information: Difference between revisions
From Neodyland Wiki
More actions
fix issue with source observed in some files |
No edit summary |
||
| (8 intermediate revisions by 6 users not shown) | |||
| Line 25: | Line 25: | ||
-- ================================================== | -- ================================================== | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
| Line 98: | Line 76: | ||
end | end | ||
local templatestyles = mw.getCurrentFrame():extensionTag{ | -- To save space in the templatelinks table, skip templatestyles in the File namespace on Commons; | ||
-- files get a copy of these styles via [[MediaWiki:Filepage.css]] instead. | |||
-- See [[Module talk:Information/styles.css]]. | |||
local templatestyles = '' | |||
if args.namespace ~= 6 or not(mw.site.server:match('//commons.wikimedia.org$')) then | |||
templatestyles = mw.getCurrentFrame():extensionTag{ | |||
name = 'templatestyles', args = { src = 'Module:Information/styles.css' } | |||
} | |||
end | |||
-- add table and outer layers | -- add table and outer layers | ||
local style = mw.ustring.format('class="fileinfotpl-type-information vevent | local style = mw.ustring.format('class="fileinfotpl-type-information vevent" dir="%s"', dir) | ||
results = mw.ustring.format('<table %s>\n\n%s\n</table>\n', style, table.concat(results)) | results = mw.ustring.format('<table %s>\n\n%s\n</table>\n', style, table.concat(results)) | ||
results = mw.ustring.format('<div class="hproduct commons-file-information-table">\n%s\n%s\n</div>', templatestyles, results) | results = mw.ustring.format('<div class="hproduct commons-file-information-table">\n%s\n%s\n</div>', templatestyles, results) | ||
| Line 121: | Line 104: | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
-- _information function creates a wikicode for {{Information}} template based on | -- _information function creates a wikicode for {{Information}} template based on | ||
-- passed arguments (through "args") | -- passed arguments (through "args"). Allowed fields of | ||
-- "args" are : 'description', 'date', 'permission', 'author', 'other_versions', | -- "args" are : 'description', 'date', 'permission', 'author', 'other_versions', | ||
-- 'source','other_fields', 'other_fields_0', 'other_fields_1', 'demo' and 'lang' | -- 'source','other_fields', 'other_fields_0', 'other_fields_1', 'demo' and 'lang' | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
-- Dependencies: | -- Dependencies: Build_html, Module:ISOdate (_date) | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
function p._information(args) | function p._information(args) | ||
| Line 149: | Line 131: | ||
end | end | ||
if #badField>0 then | if #badField>0 then | ||
cats = mw.ustring.format('\n;<span style="color:red">Error in [[Template:Information| | cats = mw.ustring.format('\n;<span style="color:var(--color-error,red)">Error in [[Template:Information|Information'.. | ||
' template]]: unknown parameter "%s".</span>', table.concat(badField,'", "')) | ' template]]: unknown parameter "%s".</span>', table.concat(badField,'", "')) | ||
cats = cats .. '\n[[Category:Pages using Information template with incorrect parameter]]' | cats = cats .. '\n[[Category:Pages using Information template with incorrect parameter]]' | ||
| Line 159: | Line 141: | ||
end | end | ||
args.pagename = page.text | args.pagename = page.text | ||
args.namespace = namespace | |||
-- ==================================================== | -- ==================================================== | ||
| Line 189: | Line 159: | ||
if not args[field] then | if not args[field] then | ||
-- code equivalent to Template:Source missing, Template:Author missing, Template:Description missing | -- code equivalent to Template:Source missing, Template:Author missing, Template:Description missing | ||
local tag1 = 'class="boilerplate metadata" id="cleanup" style="text-align: center; background: #ffe; '.. | local tag1 = 'class="boilerplate metadata" id="cleanup" style="text-align: center; color: inherit;background: var(--background-color-warning-subtle,#ffe); '.. | ||
'margin: .75em 15%; padding: .5em; border: 1px solid #e3e3b0;' | 'margin: .75em 15%; padding: .5em; border: 1px solid var(--border-color-content-removed,#e3e3b0);' | ||
local tag2 = message(field..'-missing', lang) | local tag2 = message(field..'-missing', lang) | ||
local tag3 = message(field..'-missing-request', lang) | local tag3 = message(field..'-missing-request', lang) | ||
| Line 206: | Line 176: | ||
end | end | ||
-- =========================================================================== | -- =========================================================================== | ||
| Line 395: | Line 183: | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
-- information function creates a wikicode for {{Information}} template based on | -- information function creates a wikicode for {{Information}} template based on | ||
-- passed arguments (through "frame") | -- passed arguments (through "frame"). Allowed template | ||
-- arguments are : 'description', 'date', 'permission', 'author', 'other_versions', | -- arguments are : 'description', 'date', 'permission', 'author', 'other_versions', | ||
-- 'source','other_fields', 'other_fields_0', 'other_fields_1', 'demo' and 'lang'. All inputs do not | -- 'source','other_fields', 'other_fields_0', 'other_fields_1', 'demo' and 'lang'. | ||
-- All inputs do not depend on capitalization and all "_" can be replaced with spaces. | |||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
-- Dependencies: p._information | -- Dependencies: p._information | ||
| Line 408: | Line 196: | ||
end | end | ||
return p | return p | ||
| Line 451: | Line 203: | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
-- information | -- information | ||
Latest revision as of 08:24, 9 August 2026
This documentation is transcluded from Module:Information/doc.
--[[
__ __ _ _ ___ __ _ _
| \/ | ___ __| |_ _| | ___ _|_ _|_ __ / _| ___ _ __ _ __ ___ __ _| |_(_) ___ _ __
| |\/| |/ _ \ / _` | | | | |/ _ (_)| || '_ \| |_ / _ \| '__| '_ ` _ \ / _` | __| |/ _ \| '_ \
| | | | (_) | (_| | |_| | | __/_ | || | | | _| (_) | | | | | | | | (_| | |_| | (_) | | | |
|_| |_|\___/ \__,_|\__,_|_|\___(_)___|_| |_|_| \___/|_| |_| |_| |_|\__,_|\__|_|\___/|_| |_|
This module is intended to be the engine behind "Template:Information".
Please do not modify this code without applying the changes first at
"Module:Information/sandbox" and testing at "Module:Information/testcases".
Authors and maintainers:
* User:Jarekt - original version
]]
-- =======================================
-- === Dependencies ======================
-- =======================================
require('strict') -- used for debugging purposes as it detects cases of unintended global variables
local ISOdate = require('Module:ISOdate')._ISOdate -- date localization
local core = require('Module:Core')
-- ==================================================
-- === Internal functions ===========================
-- ==================================================
-------------------------------------------------------------------------------
local function message(name, lang)
return mw.message.new( 'wm-license-information-'..name ):inLanguage(lang):plain()
end
-- ====================================================================
-- === This function is just responsible for producing HTML of the ===
-- === template. At this stage all the fields are already filed ===
-- ====================================================================
local function Build_html(args)
local lang = args.lang -- user's language
local dir = mw.language.new( lang ):getDir() -- get text direction
local desTag = mw.ustring.format('<span class="summary fn" style="display:none">%s</span>', args.pagename)
local prmTag = mw.ustring.format("<br /><small>([[%s|%s]])</small>", message('permission-reusing-link', lang),
message('permission-reusing-text', lang))
-- field specific preferences
local params = {
{field='other_fields_0'},
{field='description' , id='fileinfotpl_desc', tag2=desTag, td='class="description"'},
{field='other_fields_1'},
{field='date' , id='fileinfotpl_date', td=mw.ustring.format('lang="%s"', lang)},
{field='source' , id='fileinfotpl_src'},
{field='author' , id='fileinfotpl_aut'},
{field='permission' , id='fileinfotpl_perm', tag2=prmTag },
{field='other_versions' , id='fileinfotpl_ver', tag='other-versions'},
{field='other_fields'},
}
local results = {}
for _, param in ipairs(params) do
local field, tag, cell1, cell2, id
field = args[param.field]
if param.id then -- skip "other fields" parameter
if type(field) == 'string' then -- add "id" to first <td> cell only if the field is present
id = mw.ustring.format('id="%s" ', param.id)
elseif type(field) == 'table' then
-- the field was initially not present, it contains only our
-- warning text; flatten it so that mw.ustring.format() gets a string
field = field.missing
end
if field or (args.demo and param.tag) then -- skip the row if still no field
tag = message(param.tag or param.field, lang) .. (param.tag2 or '')
cell1 = mw.ustring.format('<td %sclass="fileinfo-paramfield" lang="%s">%s</td>\n', id or '', lang, tag)
cell2 = mw.ustring.format('<td %s>\n%s</td>', param.td or '', field or '')
field = mw.ustring.format('<tr>\n%s%s\n</tr>\n\n', cell1, cell2)
end
end
table.insert(results, field)
end
-- To save space in the templatelinks table, skip templatestyles in the File namespace on Commons;
-- files get a copy of these styles via [[MediaWiki:Filepage.css]] instead.
-- See [[Module talk:Information/styles.css]].
local templatestyles = ''
if args.namespace ~= 6 or not(mw.site.server:match('//commons.wikimedia.org$')) then
templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Module:Information/styles.css' }
}
end
-- add table and outer layers
local style = mw.ustring.format('class="fileinfotpl-type-information vevent" dir="%s"', dir)
results = mw.ustring.format('<table %s>\n\n%s\n</table>\n', style, table.concat(results))
results = mw.ustring.format('<div class="hproduct commons-file-information-table">\n%s\n%s\n</div>', templatestyles, results)
return results
end
-- ==================================================
-- === External functions ===========================
-- ==================================================
local p = {}
-- ===========================================================================
-- === Version of the function to be called from other LUA codes
-- ===========================================================================
-------------------------------------------------------------------------------
-- _information function creates a wikicode for {{Information}} template based on
-- passed arguments (through "args"). Allowed fields of
-- "args" are : 'description', 'date', 'permission', 'author', 'other_versions',
-- 'source','other_fields', 'other_fields_0', 'other_fields_1', 'demo' and 'lang'
-------------------------------------------------------------------------------
-- Dependencies: Build_html, Module:ISOdate (_date)
-------------------------------------------------------------------------------
function p._information(args)
local cats = ''
-- ============================================================================================
-- === add [[Category:Pages using Information template with incorrect parameter]] if needed ===
-- ============================================================================================
local page = mw.title.getCurrentTitle()
local lang = args.lang
local namespace = page.namespace -- get page namespace
if namespace==6 or namespace==10 then
local allowedFields = {'description', 'date', 'permission', 'author', 'other_versions',
'source','other_fields', 'other_fields_0', 'other_fields_1', 'demo', 'lang', 'strict'}
local set, badField = {}, {}
for _, field in ipairs(allowedFields) do set[field] = true end
for field, _ in pairs( args ) do
if not set[field] then
table.insert(badField, field)
end
end
if #badField>0 then
cats = mw.ustring.format('\n;<span style="color:var(--color-error,red)">Error in [[Template:Information|Information'..
' template]]: unknown parameter "%s".</span>', table.concat(badField,'", "'))
cats = cats .. '\n[[Category:Pages using Information template with incorrect parameter]]'
end
end
if args.date then
-- apply ISODate to function to date string to convert date in ISO format to translated date string
args.date = ISOdate(args.date, lang, '', 'dtstart', '100-999')
end
args.pagename = page.text
args.namespace = namespace
-- ====================================================
-- === add tracking templates and categories ===
-- ====================================================
-- add the template tag (all official infoboxes transclude {{Infobox template tag}} so files without that tag do not have an infobox
mw.getCurrentFrame():expandTemplate{ title = 'Infobox template tag' }
-- files are required to have at least the 3 fields below
if args.strict~=false then
local reqFields = {description='Media lacking a description', author='Media lacking author information', source='Images without source'}
for field, errCat in pairs(reqFields) do
if args[field] and mw.ustring.match(args[field],"^[%s%p]+$") then
args[field]=nil;
end -- ignore punctuation only fields
if not args[field] then
-- code equivalent to Template:Source missing, Template:Author missing, Template:Description missing
local tag1 = 'class="boilerplate metadata" id="cleanup" style="text-align: center; color: inherit;background: var(--background-color-warning-subtle,#ffe); '..
'margin: .75em 15%; padding: .5em; border: 1px solid var(--border-color-content-removed,#e3e3b0);'
local tag2 = message(field..'-missing', lang)
local tag3 = message(field..'-missing-request', lang)
local dir = mw.language.new( lang ):getDir() -- get text direction
args[field] = {missing = mw.ustring.format('<div %s direction: %s;" lang="%s">%s\n%s\n</div>', tag1, dir, lang, tag2, tag3)}
cats = cats .. '\n[[Category:'.. errCat ..']]'
end
end
end
if namespace~=6 then
cats = '' -- categories are added only to files
end
return Build_html(args) .. cats
end
-- ===========================================================================
-- === Version of the functions to be called from template namespace
-- ===========================================================================
-------------------------------------------------------------------------------
-- information function creates a wikicode for {{Information}} template based on
-- passed arguments (through "frame"). Allowed template
-- arguments are : 'description', 'date', 'permission', 'author', 'other_versions',
-- 'source','other_fields', 'other_fields_0', 'other_fields_1', 'demo' and 'lang'.
-- All inputs do not depend on capitalization and all "_" can be replaced with spaces.
-------------------------------------------------------------------------------
-- Dependencies: p._information
-------------------------------------------------------------------------------
function p.information(frame)
local args = core.getArgs(frame)
args.strict = true
return p._information(args)
end
return p
-------------------------------------------------------------------------------
-- List of exported functions
-------------------------------------------------------------------------------
-- information