<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AAttached_KML%2Fsandbox</id>
	<title>Module:Attached KML/sandbox - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AAttached_KML%2Fsandbox"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Attached_KML/sandbox&amp;action=history"/>
	<updated>2026-04-15T16:09:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Attached_KML/sandbox&amp;diff=135291&amp;oldid=prev</id>
		<title>imported&gt;TheDJ: keep #coordinates in place for now, because WMA only hooks into that</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Attached_KML/sandbox&amp;diff=135291&amp;oldid=prev"/>
		<updated>2022-07-28T19:28:08Z</updated>

		<summary type="html">&lt;p&gt;keep #coordinates in place for now, because WMA only hooks into that&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Note: Originally written on English Wikipedia as [[w:en:Module:Attached_KML]]&lt;br /&gt;
-- ##### Localisation (L10n) settings #####&lt;br /&gt;
local L10n = {&lt;br /&gt;
	-- Template parameter names&lt;br /&gt;
	-- (replace values in quotes with local parameter names)&lt;br /&gt;
	para = {&lt;br /&gt;
		display = &amp;quot;display&amp;quot;,&lt;br /&gt;
		from = &amp;quot;from&amp;quot;,&lt;br /&gt;
		header = &amp;quot;header&amp;quot;,&lt;br /&gt;
		title = &amp;quot;title&amp;quot;,&lt;br /&gt;
		wikidata = &amp;quot;wikidata&amp;quot;,&lt;br /&gt;
		demo = &amp;quot;demo&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	-- Other configuration settings&lt;br /&gt;
	config = {&lt;br /&gt;
		-- controls the format used for inline display, can be set to &amp;quot;box&amp;quot; (default) or &amp;quot;line&amp;quot;&lt;br /&gt;
		-- &amp;quot;box&amp;quot; example: https://en.wikipedia.org/wiki/Template:Attached_KML&lt;br /&gt;
		-- &amp;quot;line&amp;quot; example: https://sv.wikipedia.org/wiki/Mall:KML&lt;br /&gt;
		inline_format = &amp;quot;box&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	-- Other strings&lt;br /&gt;
	str = {&lt;br /&gt;
		inline = &amp;quot;inline&amp;quot;, -- used with display parameter: (|display=inline) or (|display=title) or (|display=inline,title) or (|display=title,inline)&lt;br /&gt;
		title = &amp;quot;title&amp;quot;, -- (as above)&lt;br /&gt;
		dsep = &amp;quot;,&amp;quot;, -- separator between inline and title (comma in the example above)&lt;br /&gt;
		kml_prefix = &amp;quot;Template:Attached KML/&amp;quot;, -- local KML files are stored as subpages of this location&lt;br /&gt;
		default_title = &amp;quot;Route map&amp;quot;, -- default title for links at top of page, when title parameter not used in transclusion&lt;br /&gt;
		default_header = &amp;quot;&amp;quot;, -- default header for links in inline box, when header parameter not used in transclusion&lt;br /&gt;
		kml_file = &amp;quot;KML file&amp;quot;, -- text to display for link to raw KML file&lt;br /&gt;
		edit = &amp;quot;edit&amp;quot;, -- text to display for link to edit KML file&lt;br /&gt;
		help = &amp;quot;help&amp;quot;, -- text to display for help page link&lt;br /&gt;
		help_location	= &amp;quot;Help:Attached KML&amp;quot;, -- page to link to for help page link&lt;br /&gt;
		err_prepend	= &amp;quot;Attached KML&amp;quot;, -- text to prepend to the error messages, when shown at top of page (display=title)&lt;br /&gt;
		cat	= { -- tracking categories: full wikimarkup required, or set to the empty string (&amp;quot;&amp;quot;) to not to track the condition&lt;br /&gt;
			wikidata_kml = &amp;quot;[[Category:Articles using KML from Wikidata]]&amp;quot;, -- tracks mainspace articles using KML from Wikidata&lt;br /&gt;
			local_kml = &amp;quot;[[Category:Articles using KML not from Wikidata]]&amp;quot;, -- tracks mainspace articles not using KML from Wikidata&lt;br /&gt;
			error_mqid = &amp;quot;[[Category:Attached KML errors|M]]&amp;quot;, -- tracks malformed_qid error&lt;br /&gt;
			error_badqid = &amp;quot;[[Category:Attached KML errors|W]]&amp;quot;, -- tracks bad_qid error&lt;br /&gt;
			error_noitem = &amp;quot;[[Category:Attached KML errors|N]]&amp;quot;, -- tracks no_item error&lt;br /&gt;
			error_from = &amp;quot;[[Category:Attached KML errors|F]]&amp;quot;, -- tracks bad_from error&lt;br /&gt;
			error_nokml = &amp;quot;[[Category:Attached KML errors|K]]&amp;quot;, -- tracks no_kml error&lt;br /&gt;
		},&lt;br /&gt;
		line = { -- these strings are only needed if using &amp;#039;inline_format = &amp;quot;line&amp;quot;&amp;#039; configuration&lt;br /&gt;
			start = &amp;quot;&amp;quot;, -- wikitext to display at start of line, may include image markup, should start with a space&lt;br /&gt;
			separator = &amp;quot;&amp;quot;, -- text to display between links to external mapping providers, should include spaces&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
L10n.str.err = { -- error messages&lt;br /&gt;
	malformed_qid	= &amp;quot;Error: malformed  item id in &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;quot; .. L10n.para.wikidata .. &amp;quot;=&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;,	-- item id doesn&amp;#039;t match pattern (number with Q prefix)&lt;br /&gt;
	bad_qid		= &amp;quot;Error: item specified on Wikidata, or in &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;quot; .. L10n.para.wikidata .. &amp;quot;=&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, is not a KML file &amp;lt;small&amp;gt;(P31→Q26267864 not found)&amp;lt;/small&amp;gt;&amp;quot;,	-- item doesn&amp;#039;t have a P31→Q26267864 statement&lt;br /&gt;
	no_item		= &amp;quot;Error: item specified in &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;quot; .. L10n.para.wikidata .. &amp;quot;=&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; not found on Wikidata&amp;quot;,	-- item not found on wikidata&lt;br /&gt;
	bad_from	= &amp;quot;Error: KML file not found, check &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;quot; .. L10n.para.from .. &amp;quot;=&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;,	-- KML specified by from parameter doesn&amp;#039;t exist&lt;br /&gt;
	no_kml		= &amp;quot;Error: KML file not found&amp;quot;,	-- no KML file found&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Masks for external mapping providers, in the form:&lt;br /&gt;
--   externalLinkMasks[index-number] = { short = &amp;quot;short-label&amp;quot;, long = &amp;quot;long-label&amp;quot;, link = &amp;quot;url&amp;quot; }&amp;#039;&lt;br /&gt;
-- The short label is used for the title links; the long label is used for the inline links&lt;br /&gt;
-- Links in the output will be ordered by index-number&lt;br /&gt;
-- Instead of kml file&amp;#039;s raw url or encoded raw url, use  __KML_URL__  or  __KML_URL_E__&lt;br /&gt;
local externalLinks = {}&lt;br /&gt;
--externalLinks[1] = { &lt;br /&gt;
--	short = &amp;quot;Bing&amp;quot;,&lt;br /&gt;
--	long  = &amp;quot;Display on Bing Maps&amp;quot;,&lt;br /&gt;
--	link  = &amp;quot;http://www.bing.com/maps/?mapurl=__KML_URL__&amp;quot;&lt;br /&gt;
--}&lt;br /&gt;
&lt;br /&gt;
-- #### End of L10n settings ####&lt;br /&gt;
&lt;br /&gt;
-- Table of available wikis, in the order that they are to be searched for kml files&lt;br /&gt;
-- (once a kml file is found, further sites are not checked)&lt;br /&gt;
local sites = {&lt;br /&gt;
	{&lt;br /&gt;
		mw.ustring.match( mw.site.server, &amp;quot;%w+&amp;quot; )  ..  mw.ustring.gsub( mw.ustring.lower(mw.site.siteName), &amp;quot;[mp]edia&amp;quot;, &amp;quot;&amp;quot;), &lt;br /&gt;
		mw.ustring.sub(mw.site.server, 3),&lt;br /&gt;
		&amp;quot;&amp;quot;&lt;br /&gt;
	}, -- local wiki (listed first so local files can override files on other wikis)&lt;br /&gt;
	{ &amp;quot;commonswiki&amp;quot;, &amp;quot;commons.wikimedia.org&amp;quot;, &amp;quot;c:&amp;quot; }, -- Commons would be a logical central repository for KML files (but has no files as of August 2016)&lt;br /&gt;
	{ &amp;quot;enwiki&amp;quot;, &amp;quot;en.wikipedia.org&amp;quot;, &amp;quot;w:en:&amp;quot; }, -- largest source of KML files (as of August 2016)&lt;br /&gt;
	{ &amp;quot;bnwiki&amp;quot;, &amp;quot;bn.wikipedia.org&amp;quot;, &amp;quot;w:bn:&amp;quot; }, -- other sites with a KML template, listed in alphabetical order&lt;br /&gt;
	{ &amp;quot;cswiki&amp;quot;, &amp;quot;cs.wikipedia.org&amp;quot;, &amp;quot;w:cs:&amp;quot; },&lt;br /&gt;
	{ &amp;quot;fawiki&amp;quot;, &amp;quot;fa.wikipedia.org&amp;quot;, &amp;quot;w:fa:&amp;quot; },&lt;br /&gt;
	{ &amp;quot;frwiki&amp;quot;, &amp;quot;fr.wikipedia.org&amp;quot;, &amp;quot;w:fr:&amp;quot; },&lt;br /&gt;
	{ &amp;quot;jawiki&amp;quot;, &amp;quot;ja.wikipedia.org&amp;quot;, &amp;quot;w:ja:&amp;quot; },&lt;br /&gt;
	{ &amp;quot;mlwiki&amp;quot;, &amp;quot;ml.wikipedia.org&amp;quot;, &amp;quot;w:ml:&amp;quot; },&lt;br /&gt;
	{ &amp;quot;svwiki&amp;quot;, &amp;quot;sv.wikipedia.org&amp;quot;, &amp;quot;w:sv:&amp;quot; },&lt;br /&gt;
	{ &amp;quot;zhwiki&amp;quot;, &amp;quot;zh.wikipedia.org&amp;quot;, &amp;quot;w:zh:&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function setCleanArgs(argsTable)&lt;br /&gt;
	local cleanArgs = {}&lt;br /&gt;
	for key, val in pairs(argsTable) do&lt;br /&gt;
		if type(val) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			val = val:match(&amp;#039;^%s*(.-)%s*$&amp;#039;)&lt;br /&gt;
			if val ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				cleanArgs[key] = val&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			cleanArgs[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return cleanArgs&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function safeReplace(string, pattern, replacement)&lt;br /&gt;
	-- avoids &amp;quot;Lua error: invalid capture index&amp;quot; that occurs with string.gsub when the replacement contains one or more literal % character&lt;br /&gt;
	local nonpattern_parts = mw.text.split( string, pattern )&lt;br /&gt;
	return table.concat(nonpattern_parts, replacement)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTitleWikitext(titletext, err)&lt;br /&gt;
	if err and L10n.str.err_prepend then&lt;br /&gt;
		err =  mw.ustring.gsub( err, &amp;quot;&amp;gt;&amp;quot;, &amp;quot;&amp;gt;&amp;quot; .. L10n.str.err_prepend .. &amp;quot; &amp;quot;, 1 )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleLinks = {}&lt;br /&gt;
	for i, v in ipairs( externalLinks ) do&lt;br /&gt;
		titleLinks[i] =  mw.ustring.format( &amp;quot;[%s %s]&amp;quot;, v.link , v.short)&lt;br /&gt;
	end&lt;br /&gt;
	return mw.getCurrentFrame():extensionTag{&lt;br /&gt;
				name = &amp;#039;indicator&amp;#039;,&lt;br /&gt;
				args = { name = &amp;#039;attached-kml&amp;#039; },&lt;br /&gt;
				content = mw.ustring.format(&lt;br /&gt;
					&amp;quot;&amp;lt;span id=\&amp;quot;coordinates\&amp;quot;&amp;gt;\&amp;#039;\&amp;#039;\&amp;#039;%s\&amp;#039;\&amp;#039;\&amp;#039;: %s&amp;lt;/span&amp;gt;&amp;quot;,&lt;br /&gt;
					titletext,&lt;br /&gt;
					err or table.concat(titleLinks, &amp;quot; / &amp;quot;)&lt;br /&gt;
				)&lt;br /&gt;
			}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeInlineWikitext(headertext, url, err)&lt;br /&gt;
	local inlineLinks = {}&lt;br /&gt;
	for i, v in ipairs( externalLinks ) do&lt;br /&gt;
		inlineLinks[i] =  mw.ustring.format(&amp;quot;[%s %s]&amp;quot;, v.link , v.long)&lt;br /&gt;
	end&lt;br /&gt;
	local editUrl =  mw.ustring.gsub( url, &amp;quot;action=raw&amp;quot;, &amp;quot;action=edit&amp;quot; )&lt;br /&gt;
	local wiki_link_class&lt;br /&gt;
	if  mw.ustring.find( editUrl, mw.site.server, 1, true ) then&lt;br /&gt;
		wiki_link_class = &amp;quot;plainlinks&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		wiki_link_class = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if L10n.config.inline_format == &amp;quot;line&amp;quot; then&lt;br /&gt;
		return  mw.ustring.format(&lt;br /&gt;
			&amp;quot;&amp;lt;li&amp;gt;%s%s%s (&amp;lt;span class=\&amp;quot;%s\&amp;quot;&amp;gt;[%s %s] &amp;lt;span style=\&amp;quot;font-size:85%%;\&amp;quot;&amp;gt;([%s %s] • [[%s|%s]])&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;)&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
			headertext, L10n.str.line.start,&lt;br /&gt;
			err or table.concat(inlineLinks, L10n.str.line.separator),&lt;br /&gt;
			wiki_link_class, url, L10n.str.kml_file, editUrl, L10n.str.edit,&lt;br /&gt;
			L10n.str.help_location, L10n.str.help&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local text = mw.ustring.format(&lt;br /&gt;
		&amp;#039;%s&amp;lt;span class=&amp;quot;%s&amp;quot;&amp;gt;\&amp;#039;\&amp;#039;\&amp;#039;[%s %s]\&amp;#039;\&amp;#039;\&amp;#039; ([%s %s] • [[%s|%s]])&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
		headertext, wiki_link_class, url, L10n.str.kml_file, editUrl,&lt;br /&gt;
		L10n.str.edit, L10n.str.help_location, L10n.str.help&lt;br /&gt;
	)&lt;br /&gt;
	&lt;br /&gt;
	if err or #inlineLinks &amp;gt; 0 then&lt;br /&gt;
		text = mw.ustring.format(&lt;br /&gt;
			&amp;quot;%s&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;%s&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
			text,&lt;br /&gt;
			err or table.concat(inlineLinks, &amp;quot;&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&amp;quot;)&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return require(&amp;#039;Module:Side box&amp;#039;)._main({&lt;br /&gt;
		class = &amp;#039;attached-kml&amp;#039;,&lt;br /&gt;
		text = text&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeKmldataDiv(link, s_index)&lt;br /&gt;
	return mw.ustring.format(&lt;br /&gt;
		&amp;#039;&amp;lt;div class=&amp;quot;kmldata&amp;quot; data-server=&amp;quot;%s&amp;quot; title=&amp;quot;%s&amp;quot;&amp;gt;[[%s%s]]&amp;lt;/div&amp;gt;&amp;#039;,&lt;br /&gt;
		sites[s_index][2], link, sites[s_index][3], link&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeError(msg, cat)&lt;br /&gt;
	return  mw.ustring.format(&lt;br /&gt;
		&amp;#039;&amp;lt;strong class=&amp;quot;attached-kml-error&amp;quot;&amp;gt;%s&amp;lt;/strong&amp;gt;%s&amp;#039;,&lt;br /&gt;
		msg,&lt;br /&gt;
		mw.title.getCurrentTitle():inNamespaces(0, 118) and cat or &amp;#039;&amp;#039;&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getUrlFromQid( kml_qid )&lt;br /&gt;
	local pcall_result, kml_entity = pcall(mw.wikibase.getEntity, kml_qid)&lt;br /&gt;
	if not pcall_result then return nil, nil, nil, makeError(L10n.str.err.no_item, L10n.str.cat.error_noitem) end -- Error if entity doesn&amp;#039;t exist&lt;br /&gt;
&lt;br /&gt;
	local p31_claim = kml_entity:getBestStatements(&amp;quot;P31&amp;quot;) -- P31 is property &amp;quot;instance of&amp;quot;&lt;br /&gt;
	local has_good_p31&lt;br /&gt;
	for k, v in pairs( p31_claim ) do&lt;br /&gt;
		if (p31_claim[k] and p31_claim[k].mainsnak.snaktype == &amp;quot;value&amp;quot; and&lt;br /&gt;
			p31_claim[k].mainsnak.datavalue.type == &amp;quot;wikibase-entityid&amp;quot; and&lt;br /&gt;
			p31_claim[k].mainsnak.datavalue.value[&amp;quot;numeric-id&amp;quot;] == 26267864) then&lt;br /&gt;
			has_good_p31 = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not (has_good_p31) then -- Error if item isn&amp;#039;t a kml file&lt;br /&gt;
		return nil, nil, nil, makeError(L10n.str.err.bad_qid, L10n.str.cat.error_badqid)&lt;br /&gt;
	end &lt;br /&gt;
&lt;br /&gt;
	local kml_sitelink&lt;br /&gt;
	local kml_siteindex&lt;br /&gt;
	local kml_url&lt;br /&gt;
	for i, v in ipairs( sites ) do&lt;br /&gt;
		kml_sitelink = kml_entity:getSitelink( v[1] )&lt;br /&gt;
		if kml_sitelink then&lt;br /&gt;
			kml_url = &amp;quot;https://&amp;quot; .. v[2] .. &amp;quot;/w/index.php?title=&amp;quot; .. mw.uri.encode( kml_sitelink, &amp;quot;WIKI&amp;quot; ) .. &amp;quot;&amp;amp;action=raw&amp;quot;&lt;br /&gt;
			kml_siteindex = i&lt;br /&gt;
		end&lt;br /&gt;
		if kml_url then break end&lt;br /&gt;
	end&lt;br /&gt;
	return kml_url or nil, kml_sitelink or nil, kml_siteindex or nil, nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Attempts to get url from linked wikidata items, will return nil if it can&amp;#039;t&lt;br /&gt;
local function getUrlFromWikidata()&lt;br /&gt;
	local entity = mw.wikibase.getEntityObject()&lt;br /&gt;
	if not entity then return nil end			&lt;br /&gt;
&lt;br /&gt;
	local kml_claim = entity:getBestStatements(&amp;quot;P3096&amp;quot;)	-- P3096 is property &amp;quot;KML file&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	if kml_claim then&lt;br /&gt;
		-- get the QID of the first value of the property&lt;br /&gt;
		if (kml_claim[1] and kml_claim[1].mainsnak.snaktype == &amp;quot;value&amp;quot; and kml_claim[1].mainsnak.datavalue.type == &amp;quot;wikibase-entityid&amp;quot;) then&lt;br /&gt;
			local kml_qid = &amp;quot;Q&amp;quot; .. kml_claim[1].mainsnak.datavalue.value[&amp;quot;numeric-id&amp;quot;]&lt;br /&gt;
			return getUrlFromQid( kml_qid )&lt;br /&gt;
		else&lt;br /&gt;
			return nil	-- TODO: error message&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return nil	-- TODO: error message&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local parent = frame.getParent(frame)&lt;br /&gt;
	local Args = setCleanArgs(parent.args)&lt;br /&gt;
&lt;br /&gt;
	local qid = Args[L10n.para.wikidata] or nil&lt;br /&gt;
&lt;br /&gt;
	-- get KML file url&lt;br /&gt;
	local wikiUrl, wikiTitle, wikiLink, trackingWikitext, kmlError&lt;br /&gt;
	if not (Args[L10n.para.from]) then&lt;br /&gt;
		if not qid then&lt;br /&gt;
			wikiUrl, wikiLink, siteindex, kmlError = getUrlFromWikidata()&lt;br /&gt;
		elseif  mw.ustring.find( qid, &amp;quot;^Q%d+&amp;quot; ) then&lt;br /&gt;
			wikiUrl, wikiLink, siteindex, kmlError = getUrlFromQid(qid)&lt;br /&gt;
		else&lt;br /&gt;
			kmlError = makeError(L10n.str.err.malformed_qid, L10n.str.cat.error_mqid)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not (wikiUrl) then&lt;br /&gt;
		-- FIXME? this smells bad. shouldn&amp;#039;t need to make a new title of a to_string&lt;br /&gt;
		-- from the current title and then turn it into text form&lt;br /&gt;
		wikiLink = Args[L10n.para.from] or mw.title.new(tostring(mw.title.getCurrentTitle())).text&lt;br /&gt;
		wikiLink = L10n.str.kml_prefix .. wikiLink&lt;br /&gt;
		wikiTitle = mw.title.new( wikiLink )&lt;br /&gt;
		if not (wikiTitle.exists) and not (kmlError) then&lt;br /&gt;
			if Args[L10n.para.from] then&lt;br /&gt;
				kmlError = makeError(L10n.str.err.bad_from, L10n.str.cat.error_from)&lt;br /&gt;
			else&lt;br /&gt;
				kmlError = makeError(L10n.str.err.no_kml, L10n.str.cat.error_nokml)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		wikiUrl = wikiTitle:fullUrl(&amp;quot;action=raw&amp;quot;, &amp;quot;https&amp;quot;)&lt;br /&gt;
		siteindex = 1&lt;br /&gt;
		trackingWikitext =  mw.ustring.format(&lt;br /&gt;
			&amp;#039;&amp;lt;div title=&amp;quot;KML &amp;amp; Wikidata&amp;quot; class=&amp;quot;attached-kml-wikidata&amp;quot;&amp;gt;KML is not from Wikidata&amp;lt;/div&amp;gt;%s&amp;#039;,&lt;br /&gt;
			mw.title.getCurrentTitle():inNamespace(0) and L10n.str.cat.local_kml or &amp;#039;&amp;#039;&lt;br /&gt;
		)&lt;br /&gt;
	else&lt;br /&gt;
		trackingWikitext =  mw.ustring.format(&lt;br /&gt;
			&amp;#039;&amp;lt;div title=&amp;quot;KML &amp;amp; Wikidata&amp;quot; class=&amp;quot;attached-kml-wikidata&amp;quot;&amp;gt;KML is from Wikidata&amp;lt;/div&amp;gt;%s&amp;#039;,&lt;br /&gt;
			mw.title.getCurrentTitle():inNamespace(0) and L10n.str.cat.wikidata_kml or &amp;#039;&amp;#039;&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- replace __KML_URL__ or __KML_URL_E__ with actual values&lt;br /&gt;
	local encodedWikiUrl = mw.uri.encode(wikiUrl, &amp;quot;PATH&amp;quot;)&lt;br /&gt;
	for i, v in ipairs( externalLinks ) do&lt;br /&gt;
		local el1 = safeReplace( v.link, &amp;quot;__KML_URL__&amp;quot;, wikiUrl )&lt;br /&gt;
		local el2 = safeReplace( el1, &amp;quot;__KML_URL_E__&amp;quot;, encodedWikiUrl )&lt;br /&gt;
		externalLinks[i][&amp;quot;link&amp;quot;] = el2&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- suppress errors and categories if demo parameter is set&lt;br /&gt;
	if Args[L10n.para.demo] then&lt;br /&gt;
		kmlError = nil&lt;br /&gt;
		trackingWikitext = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local wikitext = &amp;quot;&amp;quot;&lt;br /&gt;
	if Args[L10n.para.display] then&lt;br /&gt;
		local display = mw.text.split(Args[L10n.para.display], &amp;#039;%s*&amp;#039; .. L10n.str.dsep .. &amp;#039;%s*&amp;#039;)&lt;br /&gt;
		if display[1] == L10n.str.title or display[2] == L10n.str.title then&lt;br /&gt;
			wikitext = makeTitleWikitext(Args[L10n.para.title] or L10n.str.default_title, kmlError)&lt;br /&gt;
		end&lt;br /&gt;
		if display[1] == L10n.str.inline or display[2] == L10n.str.inline or (display[1] ~= L10n.str.title and display[2] ~= L10n.str.title) then&lt;br /&gt;
			local inlineWikitext = makeInlineWikitext(Args[L10n.para.header] or L10n.str.default_header, wikiUrl, kmlError)&lt;br /&gt;
			wikitext = wikitext .. inlineWikitext&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		wikitext = makeInlineWikitext(Args[L10n.para.header] or L10n.str.default_header, wikiUrl, kmlError)&lt;br /&gt;
	end&lt;br /&gt;
	wikitext = wikitext .. makeKmldataDiv(wikiLink, siteindex) .. trackingWikitext&lt;br /&gt;
&lt;br /&gt;
	return frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;, args = { src = &amp;#039;Module:Attached KML/styles.css&amp;#039; }&lt;br /&gt;
	} .. frame:preprocess( wikitext )&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;TheDJ</name></author>
	</entry>
</feed>