<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="nl">
	<id>https://wiki-raamsdonk.nl/index.php?action=history&amp;feed=atom&amp;title=Module%3AInstitution</id>
	<title>Module:Institution - Bewerkingsoverzicht</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-raamsdonk.nl/index.php?action=history&amp;feed=atom&amp;title=Module%3AInstitution"/>
	<link rel="alternate" type="text/html" href="https://wiki-raamsdonk.nl/index.php?title=Module:Institution&amp;action=history"/>
	<updated>2026-04-03T23:57:30Z</updated>
	<subtitle>Bewerkingsoverzicht voor deze pagina op de wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://wiki-raamsdonk.nl/index.php?title=Module:Institution&amp;diff=74101&amp;oldid=prev</id>
		<title>Colani: 1 versie geïmporteerd</title>
		<link rel="alternate" type="text/html" href="https://wiki-raamsdonk.nl/index.php?title=Module:Institution&amp;diff=74101&amp;oldid=prev"/>
		<updated>2024-03-22T20:17:02Z</updated>

		<summary type="html">&lt;p&gt;1 versie geïmporteerd&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nieuwe pagina&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[  &lt;br /&gt;
  __  __           _       _        ___           _   _ _         _   _             &lt;br /&gt;
 |  \/  | ___   __| |_   _| | ___ _|_ _|_ __  ___| |_(_) |_ _   _| |_(_) ___  _ __  &lt;br /&gt;
 | |\/| |/ _ \ / _` | | | | |/ _ (_)| || &amp;#039;_ \/ __| __| | __| | | | __| |/ _ \| &amp;#039;_ \ &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(&amp;#039;strict&amp;#039;) -- 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;#039;&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; &amp;#039;..&lt;br /&gt;
		&amp;#039;border-color:#f28500; background:#ffe; border-left-width: 8px; &amp;quot;&amp;gt;&amp;#039;..&lt;br /&gt;
		&amp;#039;&amp;lt;tr&amp;gt;&amp;#039;..&lt;br /&gt;
		&amp;#039;&amp;lt;td class=&amp;quot;mbox-image&amp;quot; style=&amp;quot;padding-left:.9em;&amp;quot;&amp;gt;&amp;#039;..&lt;br /&gt;
		&amp;#039; [[File:Commons-emblem-issue.svg|class=noviewer|45px]]&amp;lt;/td&amp;gt;&amp;#039;..&lt;br /&gt;
		&amp;#039;&amp;lt;td class=&amp;quot;mbox-text&amp;quot; style=&amp;quot;&amp;quot;&amp;gt;%s&amp;lt;/td&amp;gt;&amp;#039;..&lt;br /&gt;
		&amp;#039;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;#039;, 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==&amp;#039;&amp;#039; 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)==&amp;#039;string&amp;#039; 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;#039;&amp;lt;td style=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/td&amp;gt;\n&amp;#039;, args.style2, tag)&lt;br /&gt;
	local cell2 = string.format(&amp;#039;&amp;lt;td colspan=&amp;quot;2&amp;quot; style=&amp;quot;word-break:break-word;%s&amp;quot;&amp;gt;&amp;#039;.. param.wrapper ..&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;, args.style1, field or &amp;#039;&amp;#039;)&lt;br /&gt;
	return string.format(&amp;#039;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;\n%s%s&amp;lt;/tr&amp;gt;\n&amp;#039;, 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 = &amp;#039;border:1px solid #aaa;&amp;#039;&lt;br /&gt;
	args.style2 = &amp;#039;background-color:#e0e0ee; font-weight:bold; &amp;#039; .. args.style1&lt;br /&gt;
	args.style3 = &amp;#039;min-width:130px; &amp;#039; .. 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 = &amp;#039;rtl&amp;#039;, &amp;#039;right&amp;#039;, &amp;#039;left&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		dir, text_align, odir = &amp;#039;ltr&amp;#039;, &amp;#039;left&amp;#039;, &amp;#039;right&amp;#039;&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;#039;&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;&amp;#039;, args.name or &amp;#039;missing name&amp;#039;) )&lt;br /&gt;
	if args.linkback then &lt;br /&gt;
	    table.insert(top, string.format(&amp;#039;[[File:Blue pencil.svg|15px|link=Institution:%s]]&amp;#039;, args.linkback) )&lt;br /&gt;
	end&lt;br /&gt;
	if args.wikidata then -- Wikidata Link&lt;br /&gt;
		table.insert(top, string.format(&amp;#039;[[File:Wikidata-logo.svg|20px|wikidata:%s|link=wikidata:%s]]&amp;#039;, 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(&amp;#039;%s&amp;#039;, args.QS) )&lt;br /&gt;
	end&lt;br /&gt;
	if args.inventory then&lt;br /&gt;
		local formatStr = &amp;quot;&amp;lt;span style=&amp;#039;float:%s; font-size:80%%; margin-%s:20px;&amp;#039;&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;#039;&amp;lt;th colspan=&amp;quot;4&amp;quot; style=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/th&amp;gt;&amp;#039;, args.style2, table.concat(top, &amp;#039;&amp;amp;nbsp;&amp;#039;)) &lt;br /&gt;
	local results = {}&lt;br /&gt;
	table.insert(results, string.format(&amp;#039;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;\n%s\n&amp;lt;/tr&amp;gt;\n&amp;#039;, line))&lt;br /&gt;
	&lt;br /&gt;
	-- add other fields&lt;br /&gt;
	local param = {&lt;br /&gt;
		{field=&amp;#039;native_name&amp;#039; 	, wrapper=&amp;#039;%s&amp;#039;},&lt;br /&gt;
		{field=&amp;#039;parent&amp;#039;         , wrapper=&amp;#039;%s&amp;#039;},&lt;br /&gt;
		{field=&amp;#039;location&amp;#039; 		, wrapper=&amp;#039;&amp;lt;div class=&amp;quot;locality&amp;quot;&amp;gt;%s&amp;lt;/div&amp;gt;&amp;#039;},&lt;br /&gt;
		{field=&amp;#039;coordinates&amp;#039;	, wrapper=&amp;#039;%s&amp;#039;},&lt;br /&gt;
		{field=&amp;#039;established&amp;#039; 	, wrapper=&amp;#039;%s&amp;#039;},&lt;br /&gt;
		{field=&amp;#039;website&amp;#039;        , wrapper=&amp;#039;%s&amp;#039;},&lt;br /&gt;
		{field=&amp;#039;authority&amp;#039;		, wrapper=&amp;#039;%s&amp;#039;},&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 = &amp;#039;MarksburgSilhouette.svg&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if args.image then --Wikiquote link&lt;br /&gt;
		field = string.format(&amp;#039;[[File:%s|200x140px|alt=%s|class=photo]]&amp;#039;, args.image, args.name or &amp;#039;&amp;#039;) &lt;br /&gt;
		local n = #results -- number of rows below &lt;br /&gt;
		line  = string.format(&amp;#039;&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;&amp;#039;, n, field) &lt;br /&gt;
		table.insert(results, 2, string.format(&amp;#039;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;\n%s\n&amp;lt;/tr&amp;gt;\n&amp;#039;, 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 = &amp;#039;&amp;#039;&lt;br /&gt;
	if args.collapse or args.namespace == 6 then&lt;br /&gt;
		collapsed = &amp;#039;collapsed&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local style = string.format(&amp;#039;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;&amp;#039;,&lt;br /&gt;
		collapsed, dir, text_align, args.lang)&lt;br /&gt;
	results = string.format(&amp;#039;&amp;lt;table %s&amp;gt;\n%s\n&amp;lt;/table&amp;gt;\n&amp;#039;, style, results)&lt;br /&gt;
	results = string.format(&amp;#039;&amp;lt;div class=&amp;quot;vcard&amp;quot;&amp;gt;\n%s\n&amp;lt;/div&amp;gt;\n&amp;#039;, 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 =&amp;#039;&amp;#039;&lt;br /&gt;
		if args.wikidata and string.match(cats,&amp;#039;missing linkback&amp;#039;) then&lt;br /&gt;
			box = info_box(&amp;#039;missing_linkback&amp;#039;, args.lang, args.wikidata)&lt;br /&gt;
		elseif args.wikidata and string.match(cats,&amp;#039;without home category&amp;#039;) then&lt;br /&gt;
			box = info_box(&amp;#039;missing_homecat&amp;#039;, args.lang, args.wikidata)&lt;br /&gt;
		end&lt;br /&gt;
		local doc = mw.getCurrentFrame():expandTemplate{ title =&amp;#039;documentation&amp;#039;, args = { &amp;#039;Template:Institution/documentation&amp;#039; } }&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(&amp;#039;//www.openstreetmap.org/index.html?mlat=%s&amp;amp;mlon=%s&amp;amp;zoom=17&amp;#039;, lat, lon)&lt;br /&gt;
	if osm then&lt;br /&gt;
		osmlink = string.format(&amp;#039;//www.openstreetmap.org/?way=%s&amp;#039;, osm)&lt;br /&gt;
	end&lt;br /&gt;
	osmlink = string.format(&amp;#039;&amp;lt;span class=&amp;quot;wpImageAnnotatorControl wpImageAnnotatorOff&amp;quot;&amp;gt;[[File:Openstreetmap logo.svg|20x20px|Link to OpenStreetMap|link=%s]]&amp;lt;/span&amp;gt;&amp;#039;, osmlink)&lt;br /&gt;
	-- Google maps link&lt;br /&gt;
	local gmaplink = string.format(&amp;#039;//maps.google.com/maps?hl=%s&amp;amp;q=%s,%s&amp;amp;tab=wl&amp;#039;, lang, lat, lon)&lt;br /&gt;
	if geopoly then&lt;br /&gt;
		--gmaplink = string.format(&amp;#039;//tools.wmflabs.org/dschwenbot/geo_poly/?t=unnamed&amp;amp;p=%s&amp;#039;, mw.text.encode(geopoly)) -- not working at the moment&lt;br /&gt;
	end&lt;br /&gt;
	gmaplink = string.format(&amp;#039;&amp;lt;span class=&amp;quot;wpImageAnnotatorControl wpImageAnnotatorOff&amp;quot;&amp;gt;[[File:Google Maps icon (2020).svg|20x20px|Link to Google Maps|link=%s]]&amp;lt;/span&amp;gt;&amp;#039;, gmaplink)&lt;br /&gt;
	return str .. &amp;#039; &amp;#039; .. osmlink .. &amp;#039; &amp;#039; .. 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 = &amp;#039;&amp;#039; -- 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(&amp;#039;Category:&amp;#039; .. args.homecat):localUrl() == mw.title.getCurrentTitle():localUrl() then&lt;br /&gt;
	&lt;br /&gt;
		cats = cats .. &amp;#039;\n[[Category:Institution template home categories]]&amp;#039;&lt;br /&gt;
		--cats = cats .. string.format(&amp;#039;\n[[Category:namespace %i]]&amp;#039;,args.namespace)&lt;br /&gt;
		-- check for wikidata q-code&lt;br /&gt;
		if not args.wikidata then&lt;br /&gt;
			cats = cats .. &amp;#039;\n[[Category:Institution template home categories without Wikidata link]]&amp;#039;&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(&amp;#039;\n[[Category:Institution templates]]&amp;#039;)&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 .. &amp;#039;\n[[Category:Institution templates without linkback]]&amp;#039;&lt;br /&gt;
	end	&lt;br /&gt;
	if not args.name then&lt;br /&gt;
		cats = cats .. &amp;#039;\n[[Category:Institution templates without name]]&amp;#039;&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(&amp;#039;\n[[Category:%s]]&amp;#039;,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 .. &amp;#039;\n[[Category:Institution templates without images]]&amp;#039;&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 .. &amp;#039;\n[[Category:Institution templates without Wikidata link]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- check for homecat&lt;br /&gt;
	if not args.homecat then&lt;br /&gt;
		cats = cats .. &amp;#039;\n[[Category:Institution templates without home category]]&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		local hc = mw.title.new(&amp;#039;Category:&amp;#039;..args.homecat)&lt;br /&gt;
		if not hc or not hc.exists then&lt;br /&gt;
			cats = cats .. &amp;#039;\n[[Category:Institution templates without home category]]&amp;#039;&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 = &amp;#039;&amp;#039;     -- 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 = {&amp;#039;%s|%s|%s&amp;#039;, &amp;#039;%s|%s|&amp;quot;%s&amp;quot;&amp;#039;}&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;#039;&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;#039;&amp;amp;#39;&amp;#039;, &amp;quot;&amp;#039;&amp;quot;)&lt;br /&gt;
		linkback = mw.ustring.gsub(linkback, &amp;#039;&amp;amp;#38;&amp;#039;, &amp;quot;&amp;amp;&amp;quot;)&lt;br /&gt;
		if linkback~=args0.pagename then&lt;br /&gt;
			cats = cats .. &amp;#039;\n[[Category:Institution templates with mismatching linkback]]&amp;#039;&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 = {&amp;#039;name&amp;#039;, &amp;#039;native_name&amp;#039;, &amp;#039;inventory&amp;#039;, &amp;#039;parent&amp;#039;, &amp;#039;location&amp;#039;, &amp;#039;latitude&amp;#039;, &amp;#039;longitude&amp;#039;, &amp;#039;osm&amp;#039;, &amp;#039;geopoly&amp;#039;, &lt;br /&gt;
									&amp;#039;image&amp;#039;, &amp;#039;homecat&amp;#039;, &amp;#039;established&amp;#039;, &amp;#039;website&amp;#039;, &amp;#039;authority&amp;#039;, &amp;#039;stub&amp;#039;, &amp;#039;demo&amp;#039;,&lt;br /&gt;
									&amp;#039;namespace&amp;#039;, &amp;#039;linkback&amp;#039;, &amp;#039;wikidata&amp;#039;, &amp;#039;lang&amp;#039;, &amp;#039;pagename&amp;#039;, &amp;#039;option&amp;#039;, &amp;#039;collapse&amp;#039; }&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(&amp;#039;%s\n[[Category:Institution templates with unknown parameter|%s]]&amp;#039;, 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(&amp;#039;%s\n[[Category:Institution templates based only on Wikidata]]&amp;#039;, 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 = {&amp;#039;name&amp;#039;, &amp;#039;native_name&amp;#039;, &amp;#039;parent&amp;#039;, &amp;#039;location&amp;#039;, &amp;#039;image&amp;#039;, &amp;#039;homecat&amp;#039;, &amp;#039;established&amp;#039;, &amp;#039;website&amp;#039;, &amp;#039;authority&amp;#039;, &amp;#039;linkback&amp;#039;}&lt;br /&gt;
	for _, field in ipairs( fields ) do&lt;br /&gt;
		if args0[field] then&lt;br /&gt;
			comp[field] = &amp;#039;local&amp;#039;&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 = {&amp;#039;established&amp;#039;, &amp;#039;native name‎&amp;#039;}&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] = &amp;#039;redundant&amp;#039;&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 = &amp;#039;redundant&amp;#039;&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 = &amp;#039;redundant&amp;#039;&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 = &amp;#039;local&amp;#039;&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 = &amp;#039;redundant&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			comp.coordinates = &amp;#039;mismatching&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	elseif lat1 and not lat2 and lon1 and not lon2 then&lt;br /&gt;
		comp.coordinates = &amp;#039;item missing&amp;#039;&lt;br /&gt;
		table.insert( qsTable, string.format(qsCommand[1], args0.wikidata, &amp;#039;P625&amp;#039;, string.format(&amp;#039;@%09.5f/%09.5f&amp;#039;, 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 = &amp;#039;redundant&amp;#039;	&lt;br /&gt;
	elseif a1 and not d1 then&lt;br /&gt;
		comp.website = &amp;#039;item missing&amp;#039;&lt;br /&gt;
		table.insert( qsTable, string.format(qsCommand[2], args0.wikidata, &amp;#039;P856&amp;#039;, 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=&amp;#039;P18&amp;#039;, linkback=&amp;#039;P1612&amp;#039;, homecat=&amp;#039;P373&amp;#039;}&lt;br /&gt;
	for field, prop in pairs( fields ) do&lt;br /&gt;
		a1 = args0[field..&amp;#039;_&amp;#039;] -- 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] = &amp;#039;mismatching&amp;#039;&lt;br /&gt;
		elseif a1 and d1 and a1==d1 then &lt;br /&gt;
			comp[field] = &amp;#039;redundant&amp;#039;	&lt;br /&gt;
		elseif a1 and not d1 then&lt;br /&gt;
			comp[field] = &amp;#039;item missing&amp;#039;&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 == &amp;#039;redundant&amp;#039; 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(&amp;#039;%s\n[[Category:Institution templates with Wikidata link: %s %s]]&amp;#039;, cats, outcome, field)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- convert QS table to a string&lt;br /&gt;
	local QS   = &amp;#039;&amp;#039;     -- quick_statements final string&lt;br /&gt;
	if #qsTable&amp;gt;0 then&lt;br /&gt;
		local today = &amp;#039;+&amp;#039; .. os.date(&amp;#039;!%F&amp;#039;) .. &amp;#039;T00:00:00Z/11&amp;#039; -- today&amp;#039;s date in QS format&lt;br /&gt;
	    local url   = mw.title.getCurrentTitle():canonicalUrl()&lt;br /&gt;
	    local source = &amp;#039;|S143|Q24731821|S813|&amp;#039; .. today .. &amp;#039;|S4656|&amp;quot;&amp;#039; .. url .. &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
		local qsWrapper = &amp;#039;&amp;amp;nbsp;[[File:Commons_to_Wikidata_QuickStatements.svg|15px|link=%s]]&amp;#039;&lt;br /&gt;
		QS = table.concat( qsTable, source..&amp;#039;||&amp;#039;) .. source    -- combine multiple statements into a single command separated by ||&lt;br /&gt;
		QS = mw.ustring.gsub(QS, &amp;#039; &amp;#039;, &amp;quot;%%20&amp;quot;)&lt;br /&gt;
		QS = mw.ustring.gsub (mw.uri.encode(QS),&amp;#039;%%2520&amp;#039;,&amp;#039;%%20&amp;#039;)&lt;br /&gt;
		QS = &amp;#039;https://quickstatements.toolforge.org/#/v1=&amp;#039; .. QS    -- create full URL link&lt;br /&gt;
		QS = string.format(qsWrapper, QS)&lt;br /&gt;
		cats = cats .. &amp;#039;\n[[Category:Institution templates with Wikidata link: quick statements]]&amp;#039;&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 = &amp;#039;&amp;#039;&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 = &amp;#039;[[Category:Institution templates with bad Wikidata link|invalid]]&amp;#039; &lt;br /&gt;
		elseif entity.id~=qCode then&lt;br /&gt;
			 cats = &amp;#039;[[Category:Institution templates with redirected Wikidata link]]&amp;#039;&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 = &amp;#039;P1619&amp;#039;&lt;br /&gt;
	local d = getDate(entity, prop , lang)  -- date of official opening&lt;br /&gt;
	if not d.str or d.str==&amp;#039;&amp;#039; then&lt;br /&gt;
		prop = &amp;#039;P571&amp;#039;&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( &amp;#039;P856&amp;#039; )) 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 &amp;#039;en&amp;#039;] = 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 , &amp;#039;^https?\:\/\/&amp;#039;, &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;#039;\/$&amp;#039;, &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, &amp;#039;P856&amp;#039;, 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=&amp;#039;image&amp;#039;, P154=&amp;#039;logo_image&amp;#039;, P373=&amp;#039;homecat&amp;#039;, P1612=&amp;#039;linkback&amp;#039;, P1448=&amp;#039;official_name&amp;#039;, &lt;br /&gt;
					P1705=&amp;#039;native_name&amp;#039;, P131=&amp;#039;city&amp;#039;, P276=&amp;#039;location&amp;#039;, P159=&amp;#039;HQ_location&amp;#039;, P749=&amp;#039;parent&amp;#039;, P361=&amp;#039;partOf&amp;#039;, P17=&amp;#039;country&amp;#039;}&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}, &amp;#039;, &amp;#039;, &amp;#039;, &amp;#039;)&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( &amp;#039;P625&amp;#039; ) --  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( &amp;#039;P159&amp;#039; ) &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 == &amp;#039;http://www.wikidata.org/entity/Q2&amp;#039; 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, &amp;#039;en&amp;#039;) -- 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&amp;#039;s language&lt;br /&gt;
	local cats = &amp;#039;&amp;#039;         -- 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 = {&amp;#039;native_name&amp;#039;, &amp;#039;inventory&amp;#039;, &amp;#039;parent&amp;#039;, &amp;#039;location&amp;#039;, &amp;#039;latitude&amp;#039;, &amp;#039;longitude&amp;#039;, &amp;#039;demo&amp;#039;, &amp;#039;image&amp;#039;, &amp;#039;homecat&amp;#039;, &lt;br /&gt;
					&amp;#039;established&amp;#039;, &amp;#039;website&amp;#039;, &amp;#039;authority&amp;#039;, &amp;#039;linkback&amp;#039;, &amp;#039;wikidata&amp;#039;, &amp;#039;lang&amp;#039;, &amp;#039;namespace&amp;#039;, &amp;#039;collapse&amp;#039; }&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;#039;&amp;#039;, &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, &amp;#039;P625&amp;#039;, 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] == &amp;#039;&amp;#039; 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 == &amp;#039;collapse&amp;#039; 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 = &amp;#039;&amp;#039;&lt;br /&gt;
	if args.wikidata and string.match(args.wikidata or &amp;#039;&amp;#039;, &amp;quot;^Q%d+$&amp;quot;) then -- invisible language independent marking&lt;br /&gt;
		QS = string.format(&amp;#039;&amp;lt;div style=&amp;quot;display: none;&amp;quot;&amp;gt;institution QS:P195,%s&amp;lt;/div&amp;gt;\n&amp;#039;, 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>Colani</name></author>
	</entry>
</feed>