<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.thegoonshow.co.uk/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AArtwork%2Fcore</id>
	<title>Module:Artwork/core - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.thegoonshow.co.uk/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AArtwork%2Fcore"/>
	<link rel="alternate" type="text/html" href="https://www.thegoonshow.co.uk/wiki/index.php?title=Module:Artwork/core&amp;action=history"/>
	<updated>2026-06-05T19:00:02Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://www.thegoonshow.co.uk/wiki/index.php?title=Module:Artwork/core&amp;diff=24397&amp;oldid=prev</id>
		<title>Kurt: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://www.thegoonshow.co.uk/wiki/index.php?title=Module:Artwork/core&amp;diff=24397&amp;oldid=prev"/>
		<updated>2022-10-23T22:34:49Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:34, 23 October 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Kurt</name></author>
	</entry>
	<entry>
		<id>https://www.thegoonshow.co.uk/wiki/index.php?title=Module:Artwork/core&amp;diff=24396&amp;oldid=prev</id>
		<title>commons&gt;Jarekt: correct &quot;part_of&quot; parameter</title>
		<link rel="alternate" type="text/html" href="https://www.thegoonshow.co.uk/wiki/index.php?title=Module:Artwork/core&amp;diff=24396&amp;oldid=prev"/>
		<updated>2022-03-08T02:41:22Z</updated>

		<summary type="html">&lt;p&gt;correct &amp;quot;part_of&amp;quot; parameter&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[  &lt;br /&gt;
  __  __           _       _           _         _                      _        __                 &lt;br /&gt;
 |  \/  | ___   __| |_   _| | ___ _   / \   _ __| |___      _____  _ __| | __   / /__ ___  _ __ ___ &lt;br /&gt;
 | |\/| |/ _ \ / _` | | | | |/ _ (_) / _ \ | '__| __\ \ /\ / / _ \| '__| |/ /  / / __/ _ \| '__/ _ \&lt;br /&gt;
 | |  | | (_) | (_| | |_| | |  __/_ / ___ \| |  | |_ \ V  V / (_) | |  |   &amp;lt;  / / (_| (_) | | |  __/&lt;br /&gt;
 |_|  |_|\___/ \__,_|\__,_|_|\___(_)_/   \_\_|   \__| \_/\_/ \___/|_|  |_|\_\/_/ \___\___/|_|  \___|&lt;br /&gt;
                                                                                                                                                                               &lt;br /&gt;
This submodule is intended for converting inputs into html.&lt;br /&gt;
&lt;br /&gt;
Please do not modify this code without applying the changes first at &lt;br /&gt;
&amp;quot;Module:Artwork/sandbox&amp;quot; and testing at &amp;quot;Template:&lt;br /&gt;
/testcases&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Authors and maintainers:&lt;br /&gt;
* User:Jarekt - original version &lt;br /&gt;
]]&lt;br /&gt;
require('Module:No globals') -- used for debugging purposes as it detects cases of unintended global variables&lt;br /&gt;
local getLabel = require(&amp;quot;Module:Wikidata label&amp;quot;)._getLabel            -- used for creation of name based on Wikidata&lt;br /&gt;
local core     = require(&amp;quot;Module:Core&amp;quot;)&lt;br /&gt;
local labels   = require(&amp;quot;Module:I18n/artwork&amp;quot;)                        -- internationalization of labels&lt;br /&gt;
local bit32    = require(&amp;quot;bit32&amp;quot;)&lt;br /&gt;
local TagQS    = require('Module:TagQS')&lt;br /&gt;
local City     = require(&amp;quot;Module:City&amp;quot;)                                -- used to add Wikidata based links to names of places&lt;br /&gt;
local ISOdate  = require('Module:ISOdate')                             -- used for simple date formating&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Lazy loading function: load them only if they are needed&lt;br /&gt;
local function ObjectLocation_label()&lt;br /&gt;
	return mw.loadData('Module:i18n/coordinates').ObjectLocation&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function Creator(args)&lt;br /&gt;
	return require(&amp;quot;Module:Creator&amp;quot;)._creator(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function Institution(args)&lt;br /&gt;
	return require(&amp;quot;Module:Institution&amp;quot;)._institution(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ==================================================&lt;br /&gt;
-- === Internal functions ===========================&lt;br /&gt;
-- ==================================================&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
local function isodate2timestamp(dateStr)&lt;br /&gt;
-- convert isodate to timestamp used by quick statements&lt;br /&gt;
	local tStamp = nil&lt;br /&gt;
	if string.match(dateStr,&amp;quot;^[0-1]%d%d%d$&amp;quot;) then               -- if YYYY  format &lt;br /&gt;
		tStamp = '+' .. dateStr .. '-00-00T00:00:00Z/9'&lt;br /&gt;
	elseif string.match(dateStr,&amp;quot;^[0-1]%d%d%d%-[0-1]%d$&amp;quot;) then      -- if YYYY-MM format &lt;br /&gt;
		tStamp = '+' .. dateStr .. '-00T00:00:00Z/10'&lt;br /&gt;
	elseif string.match(dateStr,&amp;quot;^[0-1]%d%d%d%-[0-1]%d%-[0-3]%d$&amp;quot;) then  -- if YYYY-MM-DD format &lt;br /&gt;
		tStamp = '+' .. dateStr .. 'T00:00:00Z/11'&lt;br /&gt;
	end&lt;br /&gt;
	return tStamp&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
local function if_else(Boolean, TrueStatement, FalseStatement)&lt;br /&gt;
	if Boolean then&lt;br /&gt;
		return TrueStatement&lt;br /&gt;
	else&lt;br /&gt;
		return FalseStatement&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
local function empty2nil(str)&lt;br /&gt;
	if str=='' then&lt;br /&gt;
		return nil&lt;br /&gt;
	else &lt;br /&gt;
		return str&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ====================================================================&lt;br /&gt;
-- This function is responsible for producing HTML of a single row of the template&lt;br /&gt;
-- At this stage all the fields are already filed. There is either one or two fields&lt;br /&gt;
-- INPUTS:&lt;br /&gt;
-- * param1 and param2 - structures for 2 fields containing fields:&lt;br /&gt;
--    - tag      - I18n tag used for localization of the field name. Usually name of page in MediaWiki &lt;br /&gt;
--                 namespace which was imported from translatewiki.org. &lt;br /&gt;
--                 Alternative is to pass already translated field name.&lt;br /&gt;
--    - field    - field content&lt;br /&gt;
--    - id       - ID tag added to HTML's &amp;lt;td&amp;gt; cell. if IDs of 2 fields are the same than we ignore the second one&lt;br /&gt;
--    - wrapper  - some fields need a &amp;lt;span class=...&amp;gt; wrapper around the field content &lt;br /&gt;
-- ====================================================================&lt;br /&gt;
local function Build_html_row(param, args)&lt;br /&gt;
	local LUT = {artwork=0, photograph=1, book=2}&lt;br /&gt;
    local demo = args.demo and bit32.extract( param.demo or 0, LUT[args.infobox])==1&lt;br /&gt;
	local field = args[param.field]&lt;br /&gt;
	if field=='' then field=nil; end&lt;br /&gt;
	if not (field or demo) then &lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if not param.id then -- &amp;quot;other fields&amp;quot; parameter&lt;br /&gt;
		return field&lt;br /&gt;
	end&lt;br /&gt;
	local tag = param.tag or 'bad'&lt;br /&gt;
	if string.sub(tag,1,10) == 'wm-license' then&lt;br /&gt;
		tag = mw.message.new( tag ):inLanguage(args.lang):plain() -- label message in args.lang language&lt;br /&gt;
	elseif string.match(tag, &amp;quot;^[QP]%d+$&amp;quot;) then&lt;br /&gt;
		tag = getLabel(tag, args.lang, &amp;quot;-&amp;quot;, &amp;quot;ucfirst&amp;quot;)&lt;br /&gt;
	elseif labels[tag] then&lt;br /&gt;
		tag = core.langSwitch(labels[tag], args.lang)&lt;br /&gt;
	end&lt;br /&gt;
	local cell1 = string.format('&amp;lt;td id=&amp;quot;%s&amp;quot; class=&amp;quot;fileinfo-paramfield&amp;quot; lang=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/td&amp;gt;\n', param.id, args.lang, tag)&lt;br /&gt;
	local cell2 = string.format('&amp;lt;td&amp;gt;\n'.. param.wrapper ..'&amp;lt;/td&amp;gt;', field or '')&lt;br /&gt;
	return string.format('&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;\n%s%s\n&amp;lt;/tr&amp;gt;\n\n', cell1, cell2)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ====================================================================&lt;br /&gt;
-- === This function is just responsible for producing HTML of the  ===&lt;br /&gt;
-- === template. At this stage all the fields are already filled    ===&lt;br /&gt;
-- ====================================================================&lt;br /&gt;
function p.build_html(args)&lt;br /&gt;
	-- get text direction&lt;br /&gt;
	local dir = if_else(mw.language.new( args.lang ):isRTL(),'rtl','ltr')&lt;br /&gt;
	&lt;br /&gt;
	-- original_description row has a different look than other rows&lt;br /&gt;
	if args.original_description and (args.original_description_info or args.biased) then&lt;br /&gt;
		local tag1, tag2 = &amp;quot;&amp;quot;, &amp;quot;&amp;quot;&lt;br /&gt;
		if args.original_description_info then&lt;br /&gt;
			tag1 = string.format('&amp;lt;div style=&amp;quot;background:#dde; font-size:86%%; direction:%s;&amp;quot;&amp;gt;%s&amp;lt;/div&amp;gt;', dir, args.original_description_info)&lt;br /&gt;
		end&lt;br /&gt;
		if args.biased then&lt;br /&gt;
			tag2 = core.langSwitch(labels.inaccurate_description, args.lang)&lt;br /&gt;
			tag2 = string.format('&amp;lt;div style=&amp;quot;padding:0.5ex; margin:0 0 0.5ex 0; border: 1px solid red;&amp;quot;&amp;gt;%s: %s&amp;lt;/div&amp;gt;', tag2, args.biased)&lt;br /&gt;
		end&lt;br /&gt;
		args.original_description = tag1 .. tag2 .. args.original_description&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- files with no source will be flagged&lt;br /&gt;
	if (not args.source) and (not args.source_) and (args.strict==true) and (args.namespace==6) then&lt;br /&gt;
		args.nosource = mw.getCurrentFrame():expandTemplate{ title = 'Source missing' }&lt;br /&gt;
	end&lt;br /&gt;
	if args.demo or args.coordinates then&lt;br /&gt;
		labels.ObjectLocation = ObjectLocation_label()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local nCol = 2&lt;br /&gt;
	if not args.image and args.demo then&lt;br /&gt;
		args.image = args.demo_image&lt;br /&gt;
	end&lt;br /&gt;
	if args.image  then&lt;br /&gt;
		nCol = 3&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Top line &lt;br /&gt;
	local top, results = {}, {}&lt;br /&gt;
	if args.name then&lt;br /&gt;
		table.insert(top, string.format('&amp;lt;span class=&amp;quot;fn&amp;quot; id=&amp;quot;artwork&amp;quot;&amp;gt;&amp;lt;bdi&amp;gt;%s\n&amp;lt;/bdi&amp;gt;&amp;lt;/span&amp;gt;', args.name ) )&lt;br /&gt;
	end&lt;br /&gt;
	if args.linkback then -- Wikidata Link&lt;br /&gt;
		table.insert(top, string.format('[[File:Blue pencil.svg|15px|%s|link=%s]]', args.linkback, args.linkback) )&lt;br /&gt;
	end	&lt;br /&gt;
	if args.wikidata then -- Wikidata Link&lt;br /&gt;
		table.insert(top, string.format('[[File:Wikidata-logo.svg|20px|wikidata:%s|link=wikidata:%s]]', args.wikidata, args.wikidata) )&lt;br /&gt;
		table.insert(top, string.format('[[File:Wikidata-Reasonator_small_logo.svg|5px|reasonator:%s|link=https://reasonator.toolforge.org/test/?q=%s]]', args.wikidata, args.wikidata) )&lt;br /&gt;
	end&lt;br /&gt;
	if args.wikisource then --Wikisource link&lt;br /&gt;
		table.insert(top, string.format('[[File:Wikisource-logo.svg|15px|%s|link=%s]]', args.wikisource, args.wikisource) )&lt;br /&gt;
	end&lt;br /&gt;
	if args.wikiquote then --Wikiquote link&lt;br /&gt;
		table.insert(top, string.format('[[File:Wikiquote-logo.svg|15px|%s|link=%s]]', args.wikiquote, args.wikiquote) )&lt;br /&gt;
	end&lt;br /&gt;
	if #top&amp;gt;0 and args.QS then -- quick_statement link to upload missing info to Wikidata (add if the row is not empty)&lt;br /&gt;
		table.insert(top, string.format('%s', args.QS) )&lt;br /&gt;
	end&lt;br /&gt;
	if #top&amp;gt;0 then&lt;br /&gt;
		local line = string.format('&amp;lt;th colspan=&amp;quot;%i&amp;quot; style=&amp;quot;background-color:#ccf; font-weight:bold; border:1px solid #aaa&amp;quot; text-align=&amp;quot;left&amp;quot;&amp;gt;%s&amp;lt;/th&amp;gt;', nCol, table.concat(top, '&amp;amp;nbsp;')) &lt;br /&gt;
		table.insert(results, string.format('&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;\n%s\n&amp;lt;/tr&amp;gt;\n', line))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Permissions tag&lt;br /&gt;
	local tag1 = mw.message.new( &amp;quot;wm-license-information-permission&amp;quot; ):inLanguage(args.lang):plain()&lt;br /&gt;
	local tag2 = mw.message.new( &amp;quot;wm-license-information-permission-reusing-link&amp;quot; ):inLanguage(args.lang):plain()&lt;br /&gt;
	local tag3 = mw.message.new( &amp;quot;wm-license-information-permission-reusing-text&amp;quot; ):inLanguage(args.lang):plain()&lt;br /&gt;
	local permission_tag = string.format(&amp;quot;%s&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;([[%s|%s]])&amp;lt;/small&amp;gt;&amp;quot;, tag1, tag2, tag3)&lt;br /&gt;
	&lt;br /&gt;
	-- define constants for readability&lt;br /&gt;
	-- demo=art+photo+book will show that row in demo mode in {{artwork}, {{Photograph}} and {{Book}} templates&lt;br /&gt;
	local none, art, photo, book  = 0, 1, 2, 4&lt;br /&gt;
	&lt;br /&gt;
	-- add other fields 'author_of_foreword', 'author_of_afterword'&lt;br /&gt;
	local param = {&lt;br /&gt;
		-- field name                   machine readable tag                         field name i18n approach                     show in demo mode?   field value wrapper&lt;br /&gt;
		{field='artist'               , id='fileinfotpl_aut'                       , tag='wm-license-artwork-artist',             demo=art,            wrapper='&amp;lt;div class=&amp;quot;fn value&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='author'               , id='fileinfotpl_aut'                       , tag='wm-license-information-author',         demo=          book, wrapper='&amp;lt;div class=&amp;quot;fn value&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='editor'               , id='fileinfotpl_book_editor'               , tag='wm-license-book-editor',                demo=          book, wrapper='&amp;lt;div class=&amp;quot;fn value&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='translator'           , id='fileinfotpl_book_translator'           , tag='wm-license-book-translator',            demo=          book, wrapper='&amp;lt;div class=&amp;quot;fn value&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='illustrator'          , id='fileinfotpl_book_illustrator'          , tag='wm-license-book-illustrator',           demo=          book, wrapper='&amp;lt;div class=&amp;quot;fn value&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='author_of_foreword'   , id='fileinfotpl_aut'                       , tag='P2679',                                 demo=          book, wrapper='&amp;lt;div class=&amp;quot;fn value&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='author_of_afterword'  , id='fileinfotpl_aut'                       , tag='P2680',                                 demo=          book, wrapper='&amp;lt;div class=&amp;quot;fn value&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='architect'            , id='fileinfotpl_aut'                       , tag='Q42973',                                demo=none,           wrapper='&amp;lt;div class=&amp;quot;fn value&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='designer'             , id='fileinfotpl_aut'                       , tag='Q5322166',                              demo=none,           wrapper='&amp;lt;div class=&amp;quot;fn value&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='photographer'         , id='fileinfotpl_aut'                       , tag='Q33231',                                demo=    photo,      wrapper='&amp;lt;div class=&amp;quot;fn value&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='other_fields_1'},&lt;br /&gt;
		-- title &amp;amp; desctiption block&lt;br /&gt;
		{field='title'                , id='fileinfotpl_art_title'                 , tag='wm-license-artwork-title',              demo=art+photo+book, wrapper='&amp;lt;div class=&amp;quot;fn&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='subtitle'             , id='fileinfotpl_book_subtitle'             , tag='wm-license-book-subtitle',              demo=          book, wrapper='%s'},&lt;br /&gt;
		{field='part_of'              , id='fileinfotpl_art_part_of'               , tag='P361',                                  demo=art+photo+book, wrapper='%s'},&lt;br /&gt;
		{field='series_title'         , id='fileinfotpl_book_series-title'         , tag='wm-license-book-series-title',          demo=          book, wrapper='%s'},&lt;br /&gt;
		{field='volume'               , id='fileinfotpl_book_volume'               , tag='wm-license-book-volume',                demo=          book, wrapper='%s'},&lt;br /&gt;
		{field='edition'              , id='fileinfotpl_edition'                   , tag='wm-license-book-edition',               demo=          book, wrapper='%s'},&lt;br /&gt;
		{field='publisher'            , id='fileinfotpl_book_publisher'            , tag='wm-license-book-publisher',             demo=          book, wrapper='&amp;lt;div class=&amp;quot;fn value&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='printer'              , id='fileinfotpl_book_printer'              , tag='wm-license-book-printer',               demo=          book, wrapper='&amp;lt;div class=&amp;quot;fn value&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='object_type'          , id='fileinfotpl_art_object_type'           , tag='object_type',                           demo=art,            wrapper='%s'},&lt;br /&gt;
		{field='genre'                , id='fileinfotpl_art_genre'                 , tag='Q483394',                               demo=          book, wrapper='%s'},&lt;br /&gt;
		{field='original_description' , id='fileinfotpl_desc'                      , tag='original_description',                  demo=    photo,      wrapper='&amp;lt;div class=&amp;quot;description&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='description'          , id='fileinfotpl_desc'                      , tag='wm-license-information-description',    demo=art+photo+book, wrapper='&amp;lt;div class=&amp;quot;description&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='pageoverview'         , id='fileinfotpl_book-page-overview'        , tag='wm-license-book-page-overview',         demo=none,           wrapper='%s'},&lt;br /&gt;
		{field='depicted_people'      , id='fileinfotpl_art_depicted_people'       , tag='depicted_people',                       demo=art+photo,      wrapper='%s'},&lt;br /&gt;
		{field='depicted_place'       , id='fileinfotpl_art_depicted_place'        , tag='depicted_place',                        demo=art+photo,      wrapper='%s'},&lt;br /&gt;
		{field='depicted_part'        , id='fileinfotpl_art_depicted_part'         , tag='P5961',                                 demo=art+photo+book, wrapper='%s'},&lt;br /&gt;
		{field='language'             , id='fileinfotpl_book_language'             , tag='wm-license-book-language',              demo=          book, wrapper='%s'},&lt;br /&gt;
		{field='other_fields_2'},&lt;br /&gt;
		-- date, object outside description, history, etc.&lt;br /&gt;
		{field='date'                 , id='fileinfotpl_date'                      , tag='wm-license-information-date',           demo=art+photo,      wrapper='%s'},&lt;br /&gt;
		{field='publication_date'     , id='fileinfotpl_publication_date'          , tag='P577',                                  demo=          book, wrapper='%s'},&lt;br /&gt;
		{field='medium'               , id='fileinfotpl_art_medium'                , tag='wm-license-artwork-medium',             demo=art+photo,      wrapper='%s'},&lt;br /&gt;
		{field='dimensions'           , id='fileinfotpl_art_dimensions'            , tag='wm-license-artwork-dimensions',         demo=art+photo,      wrapper='%s'},&lt;br /&gt;
		{field='institution'          , id='fileinfotpl_art_gallery'               , tag='Q2668072',                              demo=art+photo,      wrapper='%s'},&lt;br /&gt;
		{field='department'           , id='fileinfotpl_art_location'              , tag='wm-license-artwork-current-location',   demo=art+photo     , wrapper='&amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='id'                   , id='fileinfotpl_art_id'                    , tag='wm-license-artwork-id',                 demo=art+photo,      wrapper='&amp;lt;div class=&amp;quot;identifier&amp;quot;&amp;gt;\n%s&amp;lt;/div&amp;gt;'},&lt;br /&gt;
		{field='coordinates'          , id='fileinfo-paramfield'                   , tag='ObjectLocation',                        demo=art+photo,      wrapper='%s'}, &lt;br /&gt;
		{field='place_of_publication' , id='fileinfotpl_book_place-of-publication' , tag='wm-license-book-place-of-publication',  demo=          book, wrapper='%s'},&lt;br /&gt;
		{field='place_of_creation'    , id='fileinfotpl_art_creation_place'        , tag='place_of_creation',                     demo=art,            wrapper='%s'},&lt;br /&gt;
		{field='place_of_discovery'   , id='fileinfotpl_art_discovery_place'       , tag='place_of_discovery',                    demo=art,            wrapper='%s'},&lt;br /&gt;
		{field='object_history'       , id='fileinfotpl_art_object_history'        , tag='wm-license-artwork-object-history',     demo=art,            wrapper='%s'},&lt;br /&gt;
		{field='exhibition_history'   , id='fileinfotpl_art_exhibition_history'    , tag='exhibition_history',                    demo=art+photo,      wrapper='%s'},&lt;br /&gt;
		{field='credit_line'          , id='fileinfotpl_art_credit_line'           , tag='wm-license-artwork-credit-line',        demo=art,            wrapper='%s'},&lt;br /&gt;
		{field='inscriptions'         , id='fileinfotpl_art_inscriptions'          , tag='wm-license-artwork-inscriptions',       demo=art,            wrapper='%s'},&lt;br /&gt;
		{field='notes'                , id='fileinfotpl_art_notes'                 , tag='wm-license-artwork-notes',              demo=art+photo,      wrapper='%s'},&lt;br /&gt;
		{field='other_fields_3'},&lt;br /&gt;
		-- references, and sources&lt;br /&gt;
		{field='references'           , id='fileinfotpl_art_references'            , tag='wm-license-artwork-references',         demo=art+photo+book, wrapper='%s'},&lt;br /&gt;
		{field='authority'            , id='fileinfotpl_art_authority'             , tag='Q36524',                                demo=none,           wrapper='%s'},&lt;br /&gt;
		{field='source'               , id='fileinfotpl_src'                       , tag='wm-license-artwork-source',             demo=art,            wrapper='%s'}, -- source/photographer&lt;br /&gt;
		{field='source_'              , id='fileinfotpl_src'                       , tag='wm-license-information-source',         demo=    photo+book, wrapper='%s'}, -- source&lt;br /&gt;
		{field='nosource'             , id='fileinfotpl_nosrc'                     , tag='wm-license-information-source',         demo=none,           wrapper='%s'},&lt;br /&gt;
		{field='permission'           , id='fileinfotpl_perm'                      , tag=permission_tag,                          demo=art+photo+book, wrapper='%s'},&lt;br /&gt;
		{field='other_versions'       , id='fileinfotpl_ver'                       , tag='wm-license-information-other-versions', demo=art+photo+book, wrapper='%s'}, &lt;br /&gt;
		{field='other_fields'},&lt;br /&gt;
		{field='camera_coord'},&lt;br /&gt;
	}&lt;br /&gt;
	for i=1,#param do&lt;br /&gt;
		table.insert(results, Build_html_row(param[i], args))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- add material on the right: image, wikisource icon, etc.&lt;br /&gt;
	if args.image then &lt;br /&gt;
		if args.image_page and args.image  then -- page parameter for DjVu and PDF files&lt;br /&gt;
			args.image = string.format('%s|page=%i', args.image, args.image_page)&lt;br /&gt;
		end&lt;br /&gt;
		if args.infobox=='book' then -- page parameter for DjVu and PDF files&lt;br /&gt;
			tag1 = mw.message.new( 'wm-license-book-start-this-book' ):inLanguage(args.lang):plain()&lt;br /&gt;
			tag2 = string.format('|thumb|[[:File:%s|%s]]', args.image, tag1)&lt;br /&gt;
		else&lt;br /&gt;
			tag2 = ''&lt;br /&gt;
		end&lt;br /&gt;
		local field = string.format('[[File:%s|250x250px|alt=%s|class=photo%s]]', args.image, args.name or '', tag2) &lt;br /&gt;
		local nRow = #results -- number of rows below &lt;br /&gt;
		local line = string.format('&amp;lt;td rowspan=&amp;quot;%i&amp;quot; style=&amp;quot;width:200px; text-align: right;&amp;quot; id=&amp;quot;fileinfotpl_creator_image&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;wpImageAnnotatorControl wpImageAnnotatorOff&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;\n\n', nRow, field) &lt;br /&gt;
		results[2] = mw.ustring.gsub(results[2], &amp;quot;&amp;lt;/tr&amp;gt;%s*$&amp;quot;, line); -- attach image section to the right side of the table, by attaching to row #2&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- add table and outer layers&lt;br /&gt;
	local style = string.format('class=&amp;quot;fileinfotpl-type-artwork toccolours vevent mw-content-%s&amp;quot; dir=&amp;quot;%s&amp;quot; style=&amp;quot;width: 100%%&amp;quot; cellpadding=&amp;quot;4&amp;quot;', dir, dir)&lt;br /&gt;
	results = string.format('&amp;lt;table %s&amp;gt;\n%s\n&amp;lt;/table&amp;gt;\n', style, table.concat(results)) -- combine &amp;quot;results&amp;quot;, an array of strings into a single string&lt;br /&gt;
	results = string.format('&amp;lt;div class=&amp;quot;hproduct commons-file-information-table&amp;quot;&amp;gt;\n%s\n&amp;lt;/div&amp;gt;\n', results)&lt;br /&gt;
	return results&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Read input &amp;quot;frame&amp;quot;, normalize input parameters (lower case, etc.)   ===&lt;br /&gt;
-- === and resolve potential aliases                                       ===&lt;br /&gt;
-- === INPUTS:                                                             ===&lt;br /&gt;
-- ===  * frame - contains input parameters passed from the template       ===&lt;br /&gt;
-- === OUTPUTS:                                                            ===&lt;br /&gt;
-- ===  * args - cleaned up inputs                                         ===&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
function p.read_input_parameters(frame)&lt;br /&gt;
	-- switch to lowercase parameters to make them case independent&lt;br /&gt;
	local args = core.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	-- resolve aliases&lt;br /&gt;
	args.permission        = args.permission       or args.license&lt;br /&gt;
	args.medium            = args.medium           or args.technique&lt;br /&gt;
	args.date              = args.date             or args.year&lt;br /&gt;
	args.department        = args.department       or args.location&lt;br /&gt;
	args.id                = args.accession_number or args.id&lt;br /&gt;
	args.object_type       = args.object_type      or args.type&lt;br /&gt;
	args.dimensions        = args.dimensions       or args.size&lt;br /&gt;
	args.object_history    = args.object_history   or args.history&lt;br /&gt;
	args.coordinates       = args.coordinates      or args.object_location&lt;br /&gt;
	args.institution       = args.institution or args.gallery or args.museum&lt;br /&gt;
	args.place_of_creation = args.place_of_creation or args.place_of_origin or args.country&lt;br /&gt;
	args.original_description = args.original_description or args.original_caption&lt;br /&gt;
	&lt;br /&gt;
	-- remove unneeded parameters&lt;br /&gt;
	args.technique, args.year, args.size,   args.gallery           = nil, nil, nil, nil&lt;br /&gt;
	args.location,  args.type, args.museum, args.accession_number  = nil, nil, nil, nil&lt;br /&gt;
	args.place_of_origin, args.country, args.history, args.license = nil, nil, nil, nil&lt;br /&gt;
	args.object_location, args.original_caption = nil, nil&lt;br /&gt;
	&lt;br /&gt;
	-- ensure the right format&lt;br /&gt;
	args.wikidata_cat = core.yesno(args.wikidata_cat, true)&lt;br /&gt;
	args.strict       = core.yesno(args.strict, true)&lt;br /&gt;
	args.noimage      = core.yesno(args.noimage, false)&lt;br /&gt;
	args.no_qs        = core.yesno(args.no_qs, false)&lt;br /&gt;
	args.no_sdc       = core.yesno(args.no_sdc, false)&lt;br /&gt;
	args.image_page   = tonumber(args.image_page)&lt;br /&gt;
	if args.language and #args.language==2 then &lt;br /&gt;
		args.language = frame:callParserFunction( &amp;quot;#language&amp;quot;, { args.language, args.lang } ) -- get  language of the written work&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
function p.verify_input_parameters(args)&lt;br /&gt;
	local cats = '' -- categories &lt;br /&gt;
	&lt;br /&gt;
	-- add [[Category:Creator templates with unknown parameter]] category, if some parameter not on the following list is used&lt;br /&gt;
	local fields = { 'title', 'object_type', 'description', 'date', 'medium', 'permission', &lt;br /&gt;
		'artist', 'author', 'architect', 'designer', 'illustrator', 'publisher', 'editor', 'translator', 'printer', 'photographer', &lt;br /&gt;
		'dimensions',  'institution', 'department',  'references', 'object_history', 'genre',&lt;br /&gt;
		'exhibition_history', 'credit_line', 'other_versions', 'source', 'strict', 'inscriptions', 'notes', 'linkback', 'camera_coord',&lt;br /&gt;
		'other_fields', 'other_fields_1', 'other_fields_2', 'other_fields_3',  'demo', 'id', 'wikidata', 'year', 'homecat', 'authority',&lt;br /&gt;
		'place_of_creation', 'place_of_discovery', 'source_', 'wikidata_cat', 'namespace', 'lang', 'image', 'noimage', &lt;br /&gt;
		'depicted_people', 'depicted_place', 'original_description_info', 'original_description', 'biased', 'photo_date', 'infobox',&lt;br /&gt;
		'place_of_publication', 'publication_date', 'language', 'subtitle', 'series_title', 'volume', 'edition', 'edition_of', &lt;br /&gt;
		'pageoverview', 'wikisource', 'wikiquote', 'demo_image', 'image_page', 'depicted_part', 'mimeType', 'num_pages', &lt;br /&gt;
		'author_of_foreword', 'author_of_afterword', 'infobox', 'no_qs', 'no_sdc', 'part_of'&lt;br /&gt;
	}&lt;br /&gt;
	local set = {}&lt;br /&gt;
	for _, field in ipairs(fields) do set[field] = true end&lt;br /&gt;
	for field, _ in pairs( args ) do &lt;br /&gt;
		if not set[field] then&lt;br /&gt;
			local LUT = {artwork='Artwork', photograph='Photograph', book='Book'}&lt;br /&gt;
			local infobox = LUT[args.infobox]&lt;br /&gt;
			cats = cats .. '[[Category:Pages using ' .. infobox .. ' template with incorrect parameter]]'&lt;br /&gt;
			cats = cats .. string.format('\n;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Error in [[Template:%s|{{%s}} template]]: unknown parameter &amp;quot;%s&amp;quot;.&amp;lt;/span&amp;gt;', infobox, infobox, field)&lt;br /&gt;
		end&lt;br /&gt;
	end &lt;br /&gt;
	return cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
function p.clean_input_parameters(args)&lt;br /&gt;
	local lang = args.lang  -- user's language&lt;br /&gt;
	&lt;br /&gt;
	-- === Step 1: clean up of template arguments &amp;quot;args&amp;quot;&lt;br /&gt;
	local page = mw.title.getCurrentTitle()&lt;br /&gt;
	args.namespace   = page.namespace   -- get page namespace&lt;br /&gt;
	args.url         = page:canonicalUrl()&lt;br /&gt;
	args.pagename    = page.text&lt;br /&gt;
	if args.namespace==6 then -- file namespace&lt;br /&gt;
		args.mimeType  = page.file.mimeType&lt;br /&gt;
		args.num_pages = 1&lt;br /&gt;
		if page.file.pages then&lt;br /&gt;
			args.num_pages = #page.file.pages -- in case of DjVu or PDF files count pages&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if args.date then &lt;br /&gt;
		args.year = empty2nil(ISOdate._ISOyear(args.date)) -- get year&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- for places run them through {{City}} template&lt;br /&gt;
	local fields = { 'depicted_people', 'depicted_place', 'place_of_discovery', 'part_of'	}&lt;br /&gt;
	for _, field in ipairs( fields ) do &lt;br /&gt;
		if args[field] and not string.find(args[field], ' ') then&lt;br /&gt;
			args[field] = City._city(args[field], lang) -- single word depicted_people will get a link&lt;br /&gt;
		end	&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	-- for dates run them through {{ISOdate}} template and add invisible QS tag if possible&lt;br /&gt;
	local fields = { 'date', 'publication_date'}&lt;br /&gt;
	for _, field in ipairs( fields ) do &lt;br /&gt;
		if args[field] then &lt;br /&gt;
			local val  = isodate2timestamp(args[field])        -- if date is in YYYY, YYYY-MM or YYYY-MM-DD formats than it will be saved&lt;br /&gt;
			args[field] = ISOdate._ISOdate(args[field], lang) -- apply ISODate to function to date string to convert date in ISO format to translated date string &lt;br /&gt;
			if val then                                         -- if date is in ISO format than add an invisible tag which will be used to potentially add this date to QS used to move it to Wikidata&lt;br /&gt;
				args[field] = args[field] .. TagQS.createTag('date', nil, val)&lt;br /&gt;
			end		&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- collapse local {{Creator}} and {{Institution}} templates and extract item ID from them &lt;br /&gt;
	local fields = {author='creator', artist='creator', photographer='creator', architect='creator', printer='creator', &lt;br /&gt;
		designer='creator', editor='creator', translator='creator', illustrator='creator', institution='institution'}&lt;br /&gt;
	for field, keyword in pairs( fields ) do &lt;br /&gt;
		if args[field] then &lt;br /&gt;
			if string.match(args[field], &amp;quot;^Q%d+$&amp;quot;) and keyword=='creator' then -- this is wikidata item&lt;br /&gt;
				args[field..'_id'] = args[field]&lt;br /&gt;
				if keyword=='creator' then&lt;br /&gt;
					args[field] = Creator({wikidata=args[field], lang=lang, collapse=1})-- create creator based on item id &lt;br /&gt;
				elseif keyword=='institution' then&lt;br /&gt;
					args[field] = Institution({wikidata=args[field], lang=lang, collapse=1})-- create institution based on item id &lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- collapse local {{Creator}} and {{Institution}} templates&lt;br /&gt;
				args[field] = mw.ustring.gsub (args[field], 'table class=&amp;quot;toccolours collapsible%s*&amp;quot;', 'table class=&amp;quot;toccolours collapsible collapsed&amp;quot;')&lt;br /&gt;
				-- extract item ID: retrieve the tag and grab the second component&lt;br /&gt;
				local v = mw.text.split(  TagQS.readTag(args[field], keyword) or '', '|', true )&lt;br /&gt;
				if v and #v&amp;gt;=2 then &lt;br /&gt;
					args[field..'_id'] = v[2]&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- in case of invisible QS tags add correct property based on which field and infobox it come from &lt;br /&gt;
	local repList = { {'author', 'book',   'creator', 'P170', 'P50' }, &lt;br /&gt;
		{'artist',           'artwork',    'creator', 'P170', 'P170' },&lt;br /&gt;
		{'illustrator',      'book',       'creator', 'P170', 'P110'}, &lt;br /&gt;
		{'editor',           'book',       'creator', 'P170', 'P98' }, &lt;br /&gt;
		{'translator',       'book',       'creator', 'P170', 'P655'}, &lt;br /&gt;
		{'printer',          'book',       'creator', 'P170', 'P872'}, &lt;br /&gt;
		{'publication_date', 'book',       'date',     nil,   'P577'}, &lt;br /&gt;
		{'date',             'photograph', 'date',     nil,   'P571'}, &lt;br /&gt;
		{'date',             'artwork',    'date',     nil,   'P571'}}   &lt;br /&gt;
	for _, repItem in ipairs( repList ) do&lt;br /&gt;
		local field, infobox, tag, oldP, newP = unpack(repItem)&lt;br /&gt;
		if args[field] and args.infobox==infobox then 	&lt;br /&gt;
			args[field] = TagQS.changeProperty(args[field], tag, oldP, newP) &lt;br /&gt;
			args[field] = TagQS.changeField(args[field], tag, field) &lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if args.source and mw.ustring.find( args.source, 'www%.wga%.hu' ) then&lt;br /&gt;
		-- code to help copy links to www.wga.hu to Wikidata&lt;br /&gt;
		args.reference_wga = string.gsub(args.source, 'http://www%.wga%.hu', 'https://www.wga.hu')&lt;br /&gt;
	end&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
function p.test(frame)&lt;br /&gt;
	local args  = p.read_input_parameters(frame)&lt;br /&gt;
	args.infobox = 'artwork'&lt;br /&gt;
	local cats0 = p.verify_input_parameters(args)&lt;br /&gt;
	args  = p.clean_input_parameters(args)&lt;br /&gt;
	return p.build_html(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>commons&gt;Jarekt</name></author>
	</entry>
</feed>