<?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%3AInstitution</id>
	<title>Module:Institution - 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%3AInstitution"/>
	<link rel="alternate" type="text/html" href="https://www.thegoonshow.co.uk/wiki/index.php?title=Module:Institution&amp;action=history"/>
	<updated>2026-05-04T05:23:54Z</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:Institution&amp;diff=24385&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:Institution&amp;diff=24385&amp;oldid=prev"/>
		<updated>2022-10-23T22:34:48Z</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:Institution&amp;diff=24384&amp;oldid=prev</id>
		<title>commons&gt;Jarekt: Fulfilling edit request by Neveselbert (mobile). Thanks for helping!</title>
		<link rel="alternate" type="text/html" href="https://www.thegoonshow.co.uk/wiki/index.php?title=Module:Institution&amp;diff=24384&amp;oldid=prev"/>
		<updated>2021-06-19T00:39:54Z</updated>

		<summary type="html">&lt;p&gt;Fulfilling &lt;a href=&quot;/wiki/index.php?title=Template:Edit_request&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Template:Edit request (page does not exist)&quot;&gt;edit request&lt;/a&gt; by &lt;a href=&quot;/wiki/index.php?title=User:Neveselbert_(mobile)&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:Neveselbert (mobile) (page does not exist)&quot;&gt;Neveselbert (mobile)&lt;/a&gt;. Thanks for helping!&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;
 | |  | | (_) | (_| | |_| | |  __/_ | || | | \__ \ |_| | |_| |_| | |_| | (_) | | | |&lt;br /&gt;
 |_|  |_|\___/ \__,_|\__,_|_|\___(_)___|_| |_|___/\__|_|\__|\__,_|\__|_|\___/|_| |_|&lt;br /&gt;
                                                                                    &lt;br /&gt;
&lt;br /&gt;
This module is intended to be the engine behind &amp;quot;Template:Institution&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Please do not modify this code without applying the changes first at &lt;br /&gt;
&amp;quot;Module:Institution/sandbox&amp;quot; and testing at &amp;quot;Module:Institution/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;
]]&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 getDate          = require(&amp;quot;Module:Wikidata date&amp;quot;)._date                 -- used for processing of date properties&lt;br /&gt;
local authorityControl = require(&amp;quot;Module:Authority control&amp;quot;)._authorityControl -- used for formatting of Authority control row&lt;br /&gt;
local City             = require(&amp;quot;Module:City&amp;quot;)._city                          -- used to add wikidata bases links to names of places&lt;br /&gt;
local Coordinates      = require(&amp;quot;Module:Coordinates&amp;quot;)&lt;br /&gt;
local labels           = require(&amp;quot;Module:I18n/institution&amp;quot;)&lt;br /&gt;
local ISOdate          = require(&amp;quot;Module:ISOdate&amp;quot;)._ISOdate                    -- used for internationalization of dates&lt;br /&gt;
local LanguageCodes    = require(&amp;quot;Module:LanguageCodes&amp;quot;)                       &lt;br /&gt;
local core             = require(&amp;quot;Module:core&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
-- ==================================================&lt;br /&gt;
-- === Internal functions ===========================&lt;br /&gt;
-- ==================================================&lt;br /&gt;
&lt;br /&gt;
local function info_box(text, lang, qCode)&lt;br /&gt;
	return string.format('&amp;lt;table class=&amp;quot;messagebox plainlinks layouttemplate&amp;quot; dir=&amp;quot;ltr&amp;quot; style=&amp;quot;border-collapse:collapse; border-width:2px; border-style:solid; width:100%%; clear: both; '..&lt;br /&gt;
		'border-color:#f28500; background:#ffe; border-left-width: 8px; &amp;quot;&amp;gt;'..&lt;br /&gt;
		'&amp;lt;tr&amp;gt;'..&lt;br /&gt;
		'&amp;lt;td class=&amp;quot;mbox-image&amp;quot; style=&amp;quot;padding-left:.9em;&amp;quot;&amp;gt;'..&lt;br /&gt;
		' [[File:Commons-emblem-issue.svg|class=noviewer|45px]]&amp;lt;/td&amp;gt;'..&lt;br /&gt;
		'&amp;lt;td class=&amp;quot;mbox-text&amp;quot; style=&amp;quot;&amp;quot;&amp;gt;%s&amp;lt;/td&amp;gt;'..&lt;br /&gt;
		'&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;', string.format(core.langSwitch(labels[text],lang), qCode))&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;
-- * param - structures for 2 fields containing fields:&lt;br /&gt;
--    - field    - field name&lt;br /&gt;
--    - wrapper  - some fields need a &amp;lt;span class=...&amp;gt; wrapper around the field content &lt;br /&gt;
-- * args - table with all the parameters&lt;br /&gt;
-- ====================================================================&lt;br /&gt;
local function Build_html_row(param, args)&lt;br /&gt;
	local field = args[param.field]&lt;br /&gt;
	if field=='' then field=nul; end&lt;br /&gt;
	if not (field or args.demo) then &lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local tag = labels[param.field]&lt;br /&gt;
	if type(tag)=='string' and string.match(tag, &amp;quot;^Q%d+$&amp;quot;) then&lt;br /&gt;
		tag = getLabel(tag, args.lang, &amp;quot;-&amp;quot;, &amp;quot;ucfirst&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		tag = core.langSwitch(tag, args.lang)&lt;br /&gt;
	end&lt;br /&gt;
	local cell1 = string.format('&amp;lt;td style=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/td&amp;gt;\n', args.style2, tag)&lt;br /&gt;
	local cell2 = string.format('&amp;lt;td colspan=&amp;quot;2&amp;quot; style=&amp;quot;word-break:break-word;%s&amp;quot;&amp;gt;'.. param.wrapper ..'&amp;lt;/td&amp;gt;', args.style1, field or '')&lt;br /&gt;
	return string.format('&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;\n%s%s&amp;lt;/tr&amp;gt;\n', cell1, cell2)&lt;br /&gt;
end&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 filed     ===&lt;br /&gt;
-- ====================================================================&lt;br /&gt;
local function Build_html(args, cats)&lt;br /&gt;
	local field&lt;br /&gt;
	args.style1 = 'border:1px solid #aaa;'&lt;br /&gt;
	args.style2 = 'background-color:#e0e0ee; font-weight:bold; ' .. args.style1&lt;br /&gt;
	args.style3 = 'min-width:130px; ' .. args.style1&lt;br /&gt;
	&lt;br /&gt;
	-- get text direction&lt;br /&gt;
	local dir, text_align, odir&lt;br /&gt;
	if mw.language.new( args.lang ):isRTL() then&lt;br /&gt;
		dir, text_align, odir = 'rtl', 'right', 'left'&lt;br /&gt;
	else&lt;br /&gt;
		dir, text_align, odir = 'ltr', 'left', 'right'&lt;br /&gt;
	end &lt;br /&gt;
	&lt;br /&gt;
	-- Top line with Creator name, lifespan and link icons -&lt;br /&gt;
	local top = {}&lt;br /&gt;
	table.insert(top, string.format('&amp;lt;span class=&amp;quot;fn&amp;quot; id=&amp;quot;creator&amp;quot;&amp;gt;&amp;lt;bdi&amp;gt;%s\n&amp;lt;/bdi&amp;gt;&amp;lt;/span&amp;gt;', args.name or 'missing name') )&lt;br /&gt;
	if args.linkback then &lt;br /&gt;
	    table.insert(top, string.format('[[File:Blue pencil.svg|15px|link=Institution:%s]]', 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;
	end&lt;br /&gt;
	if args.QS then -- quick_statement link to upload missing info to wikidata&lt;br /&gt;
		table.insert(top, string.format('%s', args.QS) )&lt;br /&gt;
	end&lt;br /&gt;
	if args.inventory then&lt;br /&gt;
		local formatStr = &amp;quot;&amp;lt;span style='float:%s; font-size:80%%; margin-%s:20px;'&amp;gt; ([[%s|%s]])&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
		table.insert(top, string.format(formatStr, odir, odir, args.inventory, core.langSwitch(labels.inventory, args.lang)  ))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local line = string.format('&amp;lt;th colspan=&amp;quot;4&amp;quot; style=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/th&amp;gt;', args.style2, table.concat(top, '&amp;amp;nbsp;')) &lt;br /&gt;
	local results = {}&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;
	&lt;br /&gt;
	-- add other fields&lt;br /&gt;
	local param = {&lt;br /&gt;
		{field='native_name' 	, wrapper='%s'},&lt;br /&gt;
		{field='parent'         , wrapper='%s'},&lt;br /&gt;
		{field='location' 		, wrapper='&amp;lt;span class=&amp;quot;locality&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;'},&lt;br /&gt;
		{field='coordinates'	, wrapper='%s'},&lt;br /&gt;
		{field='established' 	, wrapper='%s'},&lt;br /&gt;
		{field='website'        , wrapper='%s'},&lt;br /&gt;
		{field='authority'		, wrapper='%s'},&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;
	-- Image on the Left&lt;br /&gt;
	if not args.image and args.demo then&lt;br /&gt;
		args.image = 'MarksburgSilhouette.svg'&lt;br /&gt;
	end&lt;br /&gt;
	if args.image then --Wikiquote link&lt;br /&gt;
		field = string.format('[[File:%s|200x140px|alt=%s|class=photo]]', args.image, args.name or '') &lt;br /&gt;
		local n = #results -- number of rows below &lt;br /&gt;
		line  = string.format('&amp;lt;td rowspan=&amp;quot;%i&amp;quot; style=&amp;quot;width:120px&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;', n, field) &lt;br /&gt;
		table.insert(results, 2, 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;
	results = table.concat(results)&lt;br /&gt;
&lt;br /&gt;
	-- build table&lt;br /&gt;
	local collapsed = ''&lt;br /&gt;
	if args.collapse or args.namespace == 6 then&lt;br /&gt;
		collapsed = 'collapsed'&lt;br /&gt;
	end&lt;br /&gt;
	local style = string.format('class=&amp;quot;toccolours collapsible %s&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; dir=&amp;quot;%s&amp;quot; style=&amp;quot;text-align:%s; border-collapse:collapse; background:#f0f0ff; border:1px solid #aaa;&amp;quot; lang=&amp;quot;%s&amp;quot;',&lt;br /&gt;
		collapsed, dir, text_align, args.lang)&lt;br /&gt;
	results = string.format('&amp;lt;table %s&amp;gt;\n%s\n&amp;lt;/table&amp;gt;\n', style, results)&lt;br /&gt;
	results = string.format('&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;\n%s\n&amp;lt;/div&amp;gt;\n', results)&lt;br /&gt;
	&lt;br /&gt;
	-- add references and documentation which are only visible in creator namespace&lt;br /&gt;
	if args.namespace==106 then&lt;br /&gt;
		local box =''&lt;br /&gt;
		if args.wikidata and string.match(cats,'missing linkback') then&lt;br /&gt;
			box = info_box('missing_linkback', args.lang, args.wikidata)&lt;br /&gt;
		elseif args.wikidata and string.match(cats,'without home category') then&lt;br /&gt;
			box = info_box('missing_homecat', args.lang, args.wikidata)&lt;br /&gt;
		end&lt;br /&gt;
		local doc = mw.getCurrentFrame():expandTemplate{ title ='documentation', args = { 'Template:Institution/documentation' } }&lt;br /&gt;
		results = results .. box .. doc -- add documentation to pages in creator namespace&lt;br /&gt;
	end&lt;br /&gt;
	return results&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Create coordinate link                                              ===&lt;br /&gt;
-- === INPUTS:                                                             ===&lt;br /&gt;
-- ===  * lat - latitude of the institution                                ===&lt;br /&gt;
-- ===  * lon - longitude of the institution                               ===&lt;br /&gt;
-- ===  * osm - &amp;quot;waypoint&amp;quot; ID gives better www.openstreetmap.org link      ===&lt;br /&gt;
-- ===  * geopoly - not woring at the moment                               ===&lt;br /&gt;
-- ===  * lang  - language id of the desired language                      ===&lt;br /&gt;
-- ===  * namespace - namespace number of the page calling the module      ===&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
local function coords(lat, lon, osm, geopoly, namespace, lang)&lt;br /&gt;
	if not lat or not lon then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- add OSM polygon, title etc.&lt;br /&gt;
	local str, prec&lt;br /&gt;
	if namespace == 6 then -- in files&lt;br /&gt;
		str = Coordinates._lat_lon(lat, lon, prec, lang)&lt;br /&gt;
	else&lt;br /&gt;
		local args = { lat=lat, lon=lon, lang=lang, prec=&amp;quot;50&amp;quot;, mode=&amp;quot;institution&amp;quot;}&lt;br /&gt;
		str = Coordinates._GeoHack_link(args)&lt;br /&gt;
	end&lt;br /&gt;
	-- OSM link&lt;br /&gt;
	local osmlink = string.format('//www.openstreetmap.org/index.html?mlat=%s&amp;amp;mlon=%s&amp;amp;zoom=17', lat, lon)&lt;br /&gt;
	if osm then&lt;br /&gt;
		osmlink = string.format('//www.openstreetmap.org/?way=%s', osm)&lt;br /&gt;
	end&lt;br /&gt;
	osmlink = string.format('&amp;lt;span class=&amp;quot;wpImageAnnotatorControl wpImageAnnotatorOff&amp;quot;&amp;gt;[[File:Openstreetmap logo.svg|20px|Link to OpenStreetMap|link=%s]]&amp;lt;/span&amp;gt;', osmlink)&lt;br /&gt;
	-- Google maps link&lt;br /&gt;
	local gmaplink = string.format('//maps.google.com/maps?hl=%s&amp;amp;q=%s,%s&amp;amp;tab=wl', lang, lat, lon)&lt;br /&gt;
	if geopoly then&lt;br /&gt;
		--gmaplink = string.format('//tools.wmflabs.org/dschwenbot/geo_poly/?t=unnamed&amp;amp;p=%s', mw.text.encode(geopoly)) -- not working at the moment&lt;br /&gt;
	end&lt;br /&gt;
	gmaplink = string.format('&amp;lt;span class=&amp;quot;wpImageAnnotatorControl wpImageAnnotatorOff&amp;quot;&amp;gt;[[File:Google Maps icon (2020).svg|20px|Link to Google Maps|link=%s]]&amp;lt;/span&amp;gt;', gmaplink)&lt;br /&gt;
	return str .. ' ' .. osmlink .. ' ' .. gmaplink&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === This function is responsible for adding maintenance categories      ===&lt;br /&gt;
-- === which are not related to wikidata                                   ===&lt;br /&gt;
-- === INPUTS:                                                             ===&lt;br /&gt;
-- ===  * args  - merged data from the local arguments and Wikidata        ===&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
local function add_maintenance_categories(args)&lt;br /&gt;
	local cats = '' -- categories &lt;br /&gt;
	&lt;br /&gt;
	-- if home category than&lt;br /&gt;
	if args.namespace==14 and args.homecat and mw.title.new('Category:' .. args.homecat):localUrl() == mw.title.getCurrentTitle():localUrl() then&lt;br /&gt;
	&lt;br /&gt;
		cats = cats .. '\n[[Category:Institution template home categories]]'&lt;br /&gt;
		--cats = cats .. string.format('\n[[Category:namespace %i]]',args.namespace)&lt;br /&gt;
		-- check for wikidata q-code&lt;br /&gt;
		if not args.wikidata then&lt;br /&gt;
			cats = cats .. '\n[[Category:Institution template home categories without Wikidata link]]'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	-- ===============================================================&lt;br /&gt;
	-- === automatic categorization of pages in Institution: namespace === &lt;br /&gt;
	-- ===============================================================&lt;br /&gt;
	if args.namespace~=106 then&lt;br /&gt;
		return cats&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- add [[Category:Institution templates]] category&lt;br /&gt;
	cats = cats .. string.format('\n[[Category:Institution templates]]')&lt;br /&gt;
	&lt;br /&gt;
	-- check for key information&lt;br /&gt;
	if not args.linkback and not args.wikidata then&lt;br /&gt;
		cats = cats .. '\n[[Category:Institution templates without linkback]]'&lt;br /&gt;
	end	&lt;br /&gt;
	if not args.name then&lt;br /&gt;
		cats = cats .. '\n[[Category:Institution templates without name]]'&lt;br /&gt;
	end	&lt;br /&gt;
	&lt;br /&gt;
	-- add homecat category&lt;br /&gt;
	if args.homecat then&lt;br /&gt;
		cats = cats .. string.format('\n[[Category:%s]]',args.homecat)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- check for image&lt;br /&gt;
	if not args.image then&lt;br /&gt;
		cats = cats .. '\n[[Category:Institution templates without images]]'&lt;br /&gt;
	end&lt;br /&gt;
	-- check for wikidata q-code&lt;br /&gt;
	if not args.wikidata then&lt;br /&gt;
		cats = cats .. '\n[[Category:Institution templates without Wikidata link]]'&lt;br /&gt;
	end&lt;br /&gt;
	-- check for homecat&lt;br /&gt;
	if not args.homecat then&lt;br /&gt;
		cats = cats .. '\n[[Category:Institution templates without home category]]'&lt;br /&gt;
	else&lt;br /&gt;
		local hc = mw.title.new('Category:'..args.homecat)&lt;br /&gt;
		if not hc or not hc.exists then&lt;br /&gt;
			cats = cats .. '\n[[Category:Institution templates without home category]]'&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === This function is responsible for adding maintenance categories      ===&lt;br /&gt;
-- === to pages in Institution namespace which are related to wikidata     ===&lt;br /&gt;
-- === INPUTS:                                                             ===&lt;br /&gt;
-- ===  * args0 - local inputs from the Institution template page          ===&lt;br /&gt;
-- ===  * args1 - merge of local and wikidata metadata                     ===&lt;br /&gt;
-- ===  * data  - data pulled from Wikidata                                ===&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
local function add_categories_to_institution_namespace(args0, args1, data)&lt;br /&gt;
	local cats = ''     -- categories &lt;br /&gt;
	local qsTable = {}  -- table to store QuickStatements &lt;br /&gt;
	local comp    = {}  -- outcome of argument vs. wikidata comparison&lt;br /&gt;
	-- two forms of QuickStatements command with and without quotes&lt;br /&gt;
	local qsCommand = {'%s|%s|%s', '%s|%s|&amp;quot;%s&amp;quot;'}&lt;br /&gt;
&lt;br /&gt;
	-- compare Linkback to the actual page name. Many &amp;quot;Linkbacks&amp;quot; are created with &lt;br /&gt;
	-- tool which produces &amp;amp;#38; and &amp;amp;#39;  instead of &amp;quot;&amp;amp;&amp;quot; and &amp;quot;'&amp;quot;&lt;br /&gt;
	if args0.linkback then&lt;br /&gt;
		local linkback = args0.linkback&lt;br /&gt;
		linkback = mw.ustring.gsub(linkback, '&amp;amp;#39;', &amp;quot;'&amp;quot;)&lt;br /&gt;
		linkback = mw.ustring.gsub(linkback, '&amp;amp;#38;', &amp;quot;&amp;amp;&amp;quot;)&lt;br /&gt;
		if linkback~=args0.pagename then&lt;br /&gt;
			cats = cats .. '\n[[Category:Institution templates with mismatching linkback]]'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- add [[Category:Institution templates with unknown parameter]] category, if some parameter not on the following list is used&lt;br /&gt;
	local fields = {'name', 'native_name', 'inventory', 'parent', 'location', 'latitude', 'longitude', 'osm', 'geopoly', &lt;br /&gt;
									'image', 'homecat', 'established', 'website', 'authority', 'stub', 'demo',&lt;br /&gt;
									'namespace', 'linkback', 'wikidata', 'lang', 'pagename', 'option', 'collapse' }&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( args0 ) do &lt;br /&gt;
		if not set[field] then&lt;br /&gt;
			cats = string.format('%s\n[[Category:Institution templates with unknown parameter|%s]]', cats, field)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- skip the rest if no q-code&lt;br /&gt;
	if not args0.wikidata then&lt;br /&gt;
		return cats, args1&lt;br /&gt;
	end	&lt;br /&gt;
	&lt;br /&gt;
	-- add [[Category:Wikidata based Institution templates]] and [[Category:Institution templates with Wikidata link: local linkback]]&lt;br /&gt;
	local val = {wikidata=1, linkback=0, lang=0, namespace=0, pagename=0 }&lt;br /&gt;
	local hash = 0;&lt;br /&gt;
	for field, _ in pairs( args0 ) do &lt;br /&gt;
		hash = hash + (val[field] or 10)&lt;br /&gt;
	end&lt;br /&gt;
	if hash==1 then&lt;br /&gt;
		cats = string.format('%s\n[[Category:Institution templates based only on Wikidata]]', cats)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- mark parameters as &amp;quot;local&amp;quot; if they are present in Institution template&lt;br /&gt;
	local fields = {'name', 'native_name', 'parent', 'location', 'image', 'homecat', 'established', 'website', 'authority', 'linkback'}&lt;br /&gt;
	for _, field in ipairs( fields ) do&lt;br /&gt;
		if args0[field] then&lt;br /&gt;
			comp[field] = 'local'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- redundant if commons Institution template and wikidata have those fields and they are the same&lt;br /&gt;
	local fields = {'established', 'native name‎'}&lt;br /&gt;
	for _, field in ipairs( fields ) do&lt;br /&gt;
		if args0[field] and data[field] and args0[field]==data[field] then&lt;br /&gt;
			comp[field] = 'redundant'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- redundant name if wikidata has at least English label&lt;br /&gt;
	if args0.name and data.name_ and not string.match(data.name_, &amp;quot;^%[%[d:Q%d+%|.+%]%]&amp;quot;)  then&lt;br /&gt;
		comp.name = 'redundant'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- redundant if commons Institution template and wikidata have those fields, without checking values&lt;br /&gt;
	if args0.location and data.location then&lt;br /&gt;
		--comp.location = 'redundant'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- ==================================================&lt;br /&gt;
	-- === coordinates  ================================= &lt;br /&gt;
	-- ==================================================&lt;br /&gt;
	-- calculate distance&lt;br /&gt;
	local lat1, lat2, lon1, lon2 = args0.latitude, data.latitude, args0.longitude, data.longitude&lt;br /&gt;
	if lat1 and lat2 then&lt;br /&gt;
		comp.coordinates = 'local'&lt;br /&gt;
	end&lt;br /&gt;
	if lat1 and lat2 and lon1 and lon2 then&lt;br /&gt;
		local dLat = math.rad(lat1-lat2)&lt;br /&gt;
		local dLon = math.rad(lon1-lon2)&lt;br /&gt;
		local d = math.pow(math.sin(dLat/2),2) + math.pow(math.sin(dLon/2),2) * math.cos(math.rad(lat1)) * math.cos(math.rad(lat2))&lt;br /&gt;
		d = 2 * math.atan2(math.sqrt(d), math.sqrt(1-d))  -- angular distance in radians&lt;br /&gt;
		d = 6371000 * d       -- radians to meters conversion&lt;br /&gt;
		if d&amp;lt;100 then&lt;br /&gt;
			comp.coordinates = 'redundant'&lt;br /&gt;
		else&lt;br /&gt;
			comp.coordinates = 'mismatching'&lt;br /&gt;
		end&lt;br /&gt;
	elseif lat1 and not lat2 and lon1 and not lon2 then&lt;br /&gt;
		comp.coordinates = 'item missing'&lt;br /&gt;
		table.insert( qsTable, string.format(qsCommand[1], args0.wikidata, 'P625', string.format('@%09.5f/%09.5f', lat1, lon1)) )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
  -- ==================================================&lt;br /&gt;
	-- === website  ===================================== &lt;br /&gt;
	-- ==================================================	&lt;br /&gt;
	args0.website_ = args0.website&lt;br /&gt;
	if args0.website then&lt;br /&gt;
		local str = string.match(args0.website, &amp;quot;%[([^ %]]+)[ %]]&amp;quot;)&lt;br /&gt;
		if str then -- strip off [] brackets if detected&lt;br /&gt;
		  args0.website_ = str&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local a1 = args0.website_    -- creator template value  &lt;br /&gt;
	local d1 = data.website      -- wikidata q-code&lt;br /&gt;
	if a1 and d1 and a1==d1 then &lt;br /&gt;
		comp.website = 'redundant'	&lt;br /&gt;
	elseif a1 and not d1 then&lt;br /&gt;
		comp.website = 'item missing'&lt;br /&gt;
		table.insert( qsTable, string.format(qsCommand[2], args0.wikidata, 'P856', a1) )&lt;br /&gt;
	end	&lt;br /&gt;
	&lt;br /&gt;
	-- ==================================================&lt;br /&gt;
	-- === odds and ends  =============================== &lt;br /&gt;
	-- ==================================================	&lt;br /&gt;
	if args0.image then &lt;br /&gt;
		args0.image_ = mw.uri.decode( args0.image, &amp;quot;WIKI&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
	args0.linkback_ = args0.pagename;&lt;br /&gt;
	args0.homecat_  = args0.homecat;	&lt;br /&gt;
	&lt;br /&gt;
	local fields = {image='P18', linkback='P1612', homecat='P373'}&lt;br /&gt;
	for field, prop in pairs( fields ) do&lt;br /&gt;
		a1 = args0[field..'_'] -- creator template value  &lt;br /&gt;
		d1 = data[field]       -- wikidata q-code&lt;br /&gt;
		if a1 and d1 and a1~=d1 then &lt;br /&gt;
			comp[field] = 'mismatching'&lt;br /&gt;
		elseif a1 and d1 and a1==d1 then &lt;br /&gt;
			comp[field] = 'redundant'	&lt;br /&gt;
		elseif a1 and not d1 then&lt;br /&gt;
			comp[field] = 'item missing'&lt;br /&gt;
			table.insert( qsTable, string.format(qsCommand[2], args0.wikidata, prop, a1) )&lt;br /&gt;
		end	&lt;br /&gt;
	end&lt;br /&gt;
	if comp.linkback == 'redundant' and (hash~=1 or not args0.linkback) then&lt;br /&gt;
		comp.linkback = nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- ==================================================&lt;br /&gt;
	-- === Create categories and QuickStatement codes === &lt;br /&gt;
	-- ==================================================&lt;br /&gt;
	-- create categories based on comp structure&lt;br /&gt;
	for field, outcome in pairs( comp ) do&lt;br /&gt;
		cats = string.format('%s\n[[Category:Institution templates with Wikidata link: %s %s]]', cats, outcome, field)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- convert QS table to a string&lt;br /&gt;
	local QS   = ''     -- quick_statements final string&lt;br /&gt;
	if #qsTable&amp;gt;0 then&lt;br /&gt;
		local today = '+' .. os.date('!%F') .. 'T00:00:00Z/11' -- today's date in QS format&lt;br /&gt;
	    local url   = mw.title.getCurrentTitle():canonicalUrl()&lt;br /&gt;
	    local source = '|S143|Q24731821|S813|' .. today .. '|S4656|&amp;quot;' .. url .. '&amp;quot;'&lt;br /&gt;
		local qsWrapper = '&amp;amp;nbsp;[[File:Commons_to_Wikidata_QuickStatements.svg|15px|link=%s]]'&lt;br /&gt;
		QS = table.concat( qsTable, source..'||') .. source    -- combine multiple statements into a single command separated by ||&lt;br /&gt;
		QS = mw.ustring.gsub(QS, ' ', &amp;quot;%%20&amp;quot;)&lt;br /&gt;
		QS = mw.ustring.gsub (mw.uri.encode(QS),'%%2520','%%20')&lt;br /&gt;
		QS = 'https://quickstatements.toolforge.org/#/v1=' .. QS    -- create full URL link&lt;br /&gt;
		QS = string.format(qsWrapper, QS)&lt;br /&gt;
		cats = cats .. '\n[[Category:Institution templates with Wikidata link: quick statements]]'&lt;br /&gt;
	end&lt;br /&gt;
	args1.QS = QS;&lt;br /&gt;
	return cats, args1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Harvest wikidata properties matching creator template fields        ===&lt;br /&gt;
-- === INPUTS:                                                             ===&lt;br /&gt;
-- ===  * qCode - item id or a q-code                                      ===&lt;br /&gt;
-- ===  * lang  - language id of the desired language                      ===&lt;br /&gt;
-- ===  * namespace - namespace number of the page calling the module      ===&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
local function harvest_wikidata(qCode, lang, namespace)&lt;br /&gt;
-- INPUTS:&lt;br /&gt;
-- * qCode - item id or a q-code&lt;br /&gt;
-- * lang  - language id of the desired language&lt;br /&gt;
-- * namespace - namespace number of the page calling the module&lt;br /&gt;
	local str, d, v&lt;br /&gt;
	local data = {} -- structure similar to &amp;quot;args&amp;quot; but filled with wikidata data&lt;br /&gt;
	local cats = ''&lt;br /&gt;
	local entity = nil&lt;br /&gt;
	if mw.wikibase and qCode then&lt;br /&gt;
		entity = mw.wikibase.getEntity(qCode)&lt;br /&gt;
		if not entity then&lt;br /&gt;
			 cats = '[[Category:Institution templates with bad Wikidata link|invalid]]' &lt;br /&gt;
		elseif entity.id~=qCode then&lt;br /&gt;
			 cats = '[[Category:Institution templates with redirected Wikidata link]]'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not entity then&lt;br /&gt;
		return data, cats&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- ===========================================================================&lt;br /&gt;
	-- === Step 1: time properties&lt;br /&gt;
	-- ===========================================================================	&lt;br /&gt;
	-- harvest time properties: translated date and year number&lt;br /&gt;
	local prop = 'P1619'&lt;br /&gt;
	local d = getDate(entity, prop , lang)  -- date of official opening&lt;br /&gt;
	if not d.str or d.str=='' then&lt;br /&gt;
		prop = 'P571'&lt;br /&gt;
		d = getDate(entity, prop, lang) -- inception date&lt;br /&gt;
	end&lt;br /&gt;
	if d.str then&lt;br /&gt;
		data.established_ = d.iso&lt;br /&gt;
		data.established  = d.str .. core.editAtWikidata(entity.id, prop, lang)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- ===========================================================================&lt;br /&gt;
	-- === Step 1a: website&lt;br /&gt;
	-- ===========================================================================	&lt;br /&gt;
	-- look for multiple values each with a language code&lt;br /&gt;
	local website = {}&lt;br /&gt;
	local url&lt;br /&gt;
	for _, statement in pairs( entity:getBestStatements( 'P856' )) do&lt;br /&gt;
		if (statement.mainsnak.snaktype == &amp;quot;value&amp;quot;) then &lt;br /&gt;
			url = statement.mainsnak.datavalue.value&lt;br /&gt;
			local lng = nil&lt;br /&gt;
			if statement.qualifiers and statement.qualifiers.P407 then&lt;br /&gt;
				lng = statement.qualifiers.P407[1].datavalue.value.id&lt;br /&gt;
				lng = LanguageCodes[lng]&lt;br /&gt;
		  end&lt;br /&gt;
			website[lng or 'en'] = url&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	data.website = core.langSwitch(website, lang)&lt;br /&gt;
	if data.website and url then&lt;br /&gt;
		local label   = mw.ustring.gsub(url , '^https?\:\/\/', &amp;quot;&amp;quot;)   -- remove &amp;quot;http://&amp;quot; or &amp;quot;https://&amp;quot; at the beginning&lt;br /&gt;
		label         = mw.ustring.gsub(label , '\/$', &amp;quot;&amp;quot;)         -- &amp;quot;/&amp;quot; at the end&lt;br /&gt;
		data.website  = string.format(&amp;quot;[%s %s]&amp;quot;, data.website, label) &lt;br /&gt;
	end&lt;br /&gt;
	if data.website then&lt;br /&gt;
		data.website = data.website .. core.editAtWikidata(entity.id, 'P856', lang)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	-- ===========================================================================&lt;br /&gt;
	-- === Step 2: simple string and Q-code properties&lt;br /&gt;
	-- ===========================================================================	&lt;br /&gt;
	-- harvest string and Q-code properties&lt;br /&gt;
	local property = {P18='image', P154='logo_image', P373='homecat', P1612='linkback', P1448='official_name', &lt;br /&gt;
					P1705='native_name', P131='city', P276='location', P159='HQ_location', P749='parent', P361='partOf', P17='country'}&lt;br /&gt;
	local addIcon = {P1448=1, P1705=1, P131=1, P276=1, P159=1, P749=1, P361=1}&lt;br /&gt;
	for prop, field in pairs( property ) do&lt;br /&gt;
		if entity.claims and entity.claims[prop] then -- if we have wikidata item and item has the property&lt;br /&gt;
			-- capture single &amp;quot;best&amp;quot; Wikidata value&lt;br /&gt;
			for _, statement in pairs( entity:getBestStatements( prop )) do&lt;br /&gt;
				if (statement.mainsnak.snaktype == &amp;quot;value&amp;quot;) then &lt;br /&gt;
					local v = statement.mainsnak.datavalue.value&lt;br /&gt;
					if v.id then &lt;br /&gt;
						v = core.getLabel(v.id, lang)&lt;br /&gt;
					elseif v.text then&lt;br /&gt;
						v = v.text&lt;br /&gt;
					end&lt;br /&gt;
					if addIcon[prop] then&lt;br /&gt;
						v = v .. core.editAtWikidata(entity.id, prop, lang)&lt;br /&gt;
					end&lt;br /&gt;
					data[field] = v &lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	data.native_name = data.official_name or data.native_name&lt;br /&gt;
	data.image       = data.logo_image or data.image&lt;br /&gt;
	data.location    = data.city or data.HQ_location or data.location&lt;br /&gt;
	data.parent      = data.parent or data.partOf&lt;br /&gt;
	if data.location and data.country then&lt;br /&gt;
		data.location = mw.text.listToText( {data.location, data.country}, ', ', ', ')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- ===========================================================================&lt;br /&gt;
	-- === Step 3: geographic coordinates&lt;br /&gt;
	-- ===========================================================================	&lt;br /&gt;
	local P625 = entity:getBestStatements( 'P625' ) --  coordinate location&lt;br /&gt;
	v = nil&lt;br /&gt;
	if P625[1] and P625[1].mainsnak.datavalue.value.latitude then &lt;br /&gt;
		v = P625[1].mainsnak.datavalue.value&lt;br /&gt;
	end&lt;br /&gt;
	if not v then -- check for location of  headquarters location (P159) &lt;br /&gt;
		local P159 = entity:getBestStatements( 'P159' ) &lt;br /&gt;
		if P159[1] and P159[1].qualifiers and P159[1].qualifiers.P625 then&lt;br /&gt;
			v = P159[1].qualifiers.P625[1].datavalue.value&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if v and v.globe == 'http://www.wikidata.org/entity/Q2' then&lt;br /&gt;
		data.latitude, data.longitude = v.latitude, v.longitude&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- =================================================================================&lt;br /&gt;
	-- === Step 4: name and authority control&lt;br /&gt;
	-- =================================================================================	&lt;br /&gt;
	-- get name field&lt;br /&gt;
	data.name  = getLabel(entity, lang) -- create name based on wikidata label&lt;br /&gt;
	data.name_ = getLabel(entity, 'en') -- try english label label&lt;br /&gt;
&lt;br /&gt;
	-- get authority control template		&lt;br /&gt;
	local AC_cats&lt;br /&gt;
	data.authority, AC_cats = authorityControl(entity, {wikidata = qCode}, lang, 5) &lt;br /&gt;
	if not (namespace == 2 or namespace == 6 or namespace == 828 or math.fmod(namespace,2)==1) then&lt;br /&gt;
		cats = cats .. AC_cats -- lets not add authorityControl categories to user pages, files, modules or talk pages and concentrate on templates and categories instead&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return data, cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ==================================================&lt;br /&gt;
-- === External functions ===========================&lt;br /&gt;
-- ==================================================&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Version of the function to be called from other LUA codes&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
function p._institution(args0)&lt;br /&gt;
	local lang = args0.lang  -- user's language&lt;br /&gt;
	local cats = ''         -- categories &lt;br /&gt;
	local str, data&lt;br /&gt;
	&lt;br /&gt;
	-- look up title info&lt;br /&gt;
	args0.namespace  = mw.title.getCurrentTitle().namespace   -- get page namespace&lt;br /&gt;
	args0.pagename   = mw.title.getCurrentTitle().text        -- get {{PAGENAME}}&lt;br /&gt;
&lt;br /&gt;
	-- ===========================================================================&lt;br /&gt;
	-- === Step 1: clean up of template arguments &amp;quot;args0&amp;quot;&lt;br /&gt;
	-- ===========================================================================&lt;br /&gt;
	if args0.linkback then&lt;br /&gt;
		args0.linkback = string.sub(args0.linkback,13)&lt;br /&gt;
	end&lt;br /&gt;
	if args0.established then&lt;br /&gt;
		args0.established = ISOdate(args0.established, lang)&lt;br /&gt;
	end&lt;br /&gt;
	if not tonumber(args0.latitude) or not tonumber(args0.longitude) then&lt;br /&gt;
		args0.longitude = nil&lt;br /&gt;
		args0.latitude  = nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- ===========================================================================&lt;br /&gt;
	-- === Step 2: one by one merge wikidata and creator data&lt;br /&gt;
	-- ===========================================================================&lt;br /&gt;
	data, cats = harvest_wikidata(args0.wikidata, lang, args0.namespace)&lt;br /&gt;
	&lt;br /&gt;
	-- mass merge (prioritize local values)&lt;br /&gt;
	local args = {}&lt;br /&gt;
	local fields = {'native_name', 'inventory', 'parent', 'location', 'latitude', 'longitude', 'demo', 'image', 'homecat', &lt;br /&gt;
					'established', 'website', 'authority', 'linkback', 'wikidata', 'lang', 'namespace', 'collapse' }&lt;br /&gt;
	for _, field in ipairs( fields ) do &lt;br /&gt;
		args[field] = args0[field] or data[field]&lt;br /&gt;
	end&lt;br /&gt;
	args.name = data.name&lt;br /&gt;
	if not args.name or string.match(args.name or '', &amp;quot;^%[%[d:Q%d+%|Q.+%]%]&amp;quot;) then &lt;br /&gt;
		args.name = args0.name -- no name on Wikidata&lt;br /&gt;
	end&lt;br /&gt;
	--args.name = data.name or args0.name&lt;br /&gt;
&lt;br /&gt;
	args.location = City(args.location, lang) &lt;br /&gt;
	args.coordinates = coords(args.latitude, args.longitude, args0.osm, args0.geopoly, args0.namespace, lang)&lt;br /&gt;
	if not args0.latitude and data.latitude then&lt;br /&gt;
		args.coordinates = args.coordinates .. core.editAtWikidata(args0.wikidata, 'P625', args.lang)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- convert all empty strings to nils&lt;br /&gt;
	for _, field in ipairs( fields ) do &lt;br /&gt;
		if args[field] == '' then &lt;br /&gt;
			args[field] = nil; &lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- ===========================================================================&lt;br /&gt;
	-- === Step 3: create maintenance categories and render html of the table&lt;br /&gt;
	-- ===========================================================================&lt;br /&gt;
	cats = cats .. add_maintenance_categories(args)&lt;br /&gt;
	-- If institution namespace than add maintenance categories&lt;br /&gt;
	args.QS = nil;&lt;br /&gt;
	if args.namespace==106  then&lt;br /&gt;
		str, args = add_categories_to_institution_namespace(args0, args, data)&lt;br /&gt;
		cats = cats .. str&lt;br /&gt;
	end&lt;br /&gt;
	local results = Build_html(args, cats)&lt;br /&gt;
	return results, cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Version of the function to be called from template namespace&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
function p.institution(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;
	if args.option == 'collapse' then&lt;br /&gt;
		args.collapse = 1 -- some &amp;quot;options&amp;quot; are to modify the name and some are commands to do things&lt;br /&gt;
		args.option  = nil&lt;br /&gt;
	end&lt;br /&gt;
	local QS = ''&lt;br /&gt;
	if args.wikidata and string.match(args.wikidata or '', &amp;quot;^Q%d+$&amp;quot;) then -- invisible language independent marking&lt;br /&gt;
		QS = string.format('&amp;lt;div style=&amp;quot;display: none;&amp;quot;&amp;gt;institution QS:P195,%s&amp;lt;/div&amp;gt;\n', args.wikidata)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- call the inner &amp;quot;core&amp;quot; function&lt;br /&gt;
	local results, cats = p._institution(args)	&lt;br /&gt;
	return results .. QS .. cats&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>