<?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%3ASandbox%2FRexxS%2FConcat</id>
	<title>Module:Sandbox/RexxS/Concat - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FRexxS%2FConcat"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/RexxS/Concat&amp;action=history"/>
	<updated>2026-05-24T03:22:56Z</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:Sandbox/RexxS/Concat&amp;diff=146065&amp;oldid=prev</id>
		<title>imported&gt;RexxS: default to use local lang code</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/RexxS/Concat&amp;diff=146065&amp;oldid=prev"/>
		<updated>2015-03-06T18:08:07Z</updated>

		<summary type="html">&lt;p&gt;default to use local lang code&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
p.test = function(frame)&lt;br /&gt;
	local mytable = {}&lt;br /&gt;
	for i=1,5 do&lt;br /&gt;
		mytable[i] = i*10&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(mytable, &amp;quot;, &amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- looking at Richard Burton Q151973 and his spouses P26&lt;br /&gt;
-- using {{#invoke:Sandbox/RexxS/Concat|getPropertyAndQualifier|P26|P580|FETCH_WIKIDATA}}&lt;br /&gt;
-- try {{#invoke:Wikidata|getRawQualifierValue|P26|P580|FETCH_WIKIDATA}} - which fails&lt;br /&gt;
-- see https://www.mediawiki.org/wiki/Wikibase/Notes/JSON&lt;br /&gt;
-- see https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua&lt;br /&gt;
-- see https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual&lt;br /&gt;
-- see https://en.wikipedia.org/wiki/Richard_Burton&lt;br /&gt;
-- see https://www.wikidata.org/wiki/Q151973&lt;br /&gt;
-- Also see {{#invoke:Sandbox/RexxS/Concat|getPropertyAndQualifier|P6|P580|FETCH_WIKIDATA}} for https://en.wikipedia.org/wiki/New_York_City&lt;br /&gt;
p.getPropertyAndQualifier = function(frame)&lt;br /&gt;
	local propertyID = mw.text.trim(frame.args[1] or &amp;quot;&amp;quot;)&lt;br /&gt;
	local qualifierID = mw.text.trim(frame.args[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
	local input_parm = mw.text.trim(frame.args[3] or &amp;quot;&amp;quot;)&lt;br /&gt;
	if input_parm == &amp;quot;FETCH_WIKIDATA&amp;quot; then&lt;br /&gt;
		local entity = mw.wikibase.getEntityObject()&lt;br /&gt;
		local props = entity.claims[propertyID]&lt;br /&gt;
		if props then&lt;br /&gt;
			local val, sitelink, label&lt;br /&gt;
			for k, v in pairs(props) do&lt;br /&gt;
				if v.mainsnak.snaktype == &amp;#039;value&amp;#039; then&lt;br /&gt;
					if v.mainsnak.datavalue.type == &amp;#039;wikibase-entityid&amp;#039; then&lt;br /&gt;
						-- type is entity&lt;br /&gt;
						sitelink = mw.wikibase.sitelink(&amp;#039;Q&amp;#039; .. v.mainsnak.datavalue.value[&amp;#039;numeric-id&amp;#039;])&lt;br /&gt;
						label = mw.wikibase.label(&amp;#039;Q&amp;#039; .. v.mainsnak.datavalue.value[&amp;#039;numeric-id&amp;#039;])&lt;br /&gt;
						if val then val = val .. &amp;#039;, &amp;#039; .. label else val = label end&lt;br /&gt;
						if v.qualifiers and v.qualifiers[qualifierID] then&lt;br /&gt;
							for kq, vq in pairs(v.qualifiers[qualifierID]) do&lt;br /&gt;
								if vq.datavalue.type == &amp;#039;time&amp;#039; then&lt;br /&gt;
									-- return the year&lt;br /&gt;
									local dt = vq.datavalue.value.time&lt;br /&gt;
									-- local dt = v.qualifiers[qualifierID][1].datavalue.value.time&lt;br /&gt;
									if #dt &amp;gt; 26 then --date later than 99 CE&lt;br /&gt;
										val = val .. &amp;#039; (&amp;#039; .. string.sub(dt, 9, 12) .. &amp;#039;)&amp;#039;&lt;br /&gt;
									else -- date earlier than 100 CE&lt;br /&gt;
										val = val .. &amp;#039; (&amp;#039; .. string.sub(dt, 9, 10) .. &amp;#039;)&amp;#039;&lt;br /&gt;
									end&lt;br /&gt;
								end&lt;br /&gt;
							end -- next kq, vq&lt;br /&gt;
						end&lt;br /&gt;
					elseif v.mainsnak.datavalue.type == &amp;#039;string&amp;#039; then&lt;br /&gt;
						-- type is string&lt;br /&gt;
						if val then val = val .. &amp;#039;, &amp;#039; .. v.mainsnak.datavalue.value else val = v.mainsnak.datavalue.value end&lt;br /&gt;
					elseif v.mainsnak.datavalue.type == &amp;#039;globecoordinate&amp;#039; then&lt;br /&gt;
						-- type is globecoordinate - do this later&lt;br /&gt;
						if val then val = val .. &amp;#039;, &amp;#039; .. &amp;#039;globecoordinate&amp;#039; else val = &amp;#039;globecoordinate&amp;#039; end&lt;br /&gt;
					elseif v.mainsnak.datavalue.type == &amp;#039;time&amp;#039; then&lt;br /&gt;
						-- type is time - do this later&lt;br /&gt;
						if val then val = val .. &amp;#039;, &amp;#039; .. &amp;#039;time&amp;#039; else val = &amp;#039;time&amp;#039; end&lt;br /&gt;
					elseif v.mainsnak.datavalue.type == &amp;#039;quantity&amp;#039; then&lt;br /&gt;
						-- type is quantity&lt;br /&gt;
						local quant = entity:formatPropertyValues(propertyID, mw.wikibase.entity.claimRanks).value&lt;br /&gt;
						quant = mw.ustring.gsub(quant, &amp;quot;(%d),(%d)&amp;quot;, &amp;quot;%1%2&amp;quot;) -- remove thousands separators&lt;br /&gt;
						if val then val = val .. &amp;#039;, &amp;#039; .. quant else val = quant end&lt;br /&gt;
					else&lt;br /&gt;
						-- type is not known (to be dealt with later)&lt;br /&gt;
						if val then val = val .. &amp;#039;, &amp;#039; .. &amp;#039;unknown&amp;#039; else val = &amp;#039;unknown&amp;#039; end&lt;br /&gt;
					end&lt;br /&gt;
				else -- mainsnaktype is unknown value or novalue&lt;br /&gt;
					if val then val = val .. &amp;#039;, noval&amp;#039; else val= &amp;#039;noval&amp;#039; end&lt;br /&gt;
				end&lt;br /&gt;
			end -- next k,v&lt;br /&gt;
			if ret then return ret else return val end&lt;br /&gt;
		else -- no props&lt;br /&gt;
			return &amp;quot;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	else -- wikidata value not required so return local value&lt;br /&gt;
		return input_parm&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.getRawPropertyValue = function(frame)&lt;br /&gt;
	local propertyID = mw.text.trim(frame.args[1] or &amp;quot;&amp;quot;)&lt;br /&gt;
	local input_parm = mw.text.trim(frame.args[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
	if input_parm == &amp;quot;FETCH_WIKIDATA&amp;quot; then&lt;br /&gt;
		local entity = mw.wikibase.getEntityObject()&lt;br /&gt;
		local props = entity.claims[propertyID]&lt;br /&gt;
		if props then&lt;br /&gt;
			local val, sitelink, label&lt;br /&gt;
			for k, v in pairs(props) do&lt;br /&gt;
				if v.mainsnak.snaktype == &amp;#039;value&amp;#039; then&lt;br /&gt;
					if v.mainsnak.datavalue.type == &amp;#039;wikibase-entityid&amp;#039; then&lt;br /&gt;
						-- type is entity&lt;br /&gt;
						sitelink = mw.wikibase.sitelink(&amp;#039;Q&amp;#039; .. v.mainsnak.datavalue.value[&amp;#039;numeric-id&amp;#039;])&lt;br /&gt;
						label = mw.wikibase.label(&amp;#039;Q&amp;#039; .. v.mainsnak.datavalue.value[&amp;#039;numeric-id&amp;#039;])&lt;br /&gt;
						if val then val = val .. &amp;#039;, &amp;#039; .. label else val = label end&lt;br /&gt;
					elseif v.mainsnak.datavalue.type == &amp;#039;string&amp;#039; then&lt;br /&gt;
						-- type is string&lt;br /&gt;
						if val then val = val .. &amp;#039;, &amp;#039; .. v.mainsnak.datavalue.value else val = v.mainsnak.datavalue.value end&lt;br /&gt;
					elseif v.mainsnak.datavalue.type == &amp;#039;globecoordinate&amp;#039; then&lt;br /&gt;
						-- type is globecoordinate - do this later&lt;br /&gt;
						if val then val = val .. &amp;#039;, &amp;#039; .. &amp;#039;globecoordinate&amp;#039; else val = &amp;#039;globecoordinate&amp;#039; end&lt;br /&gt;
					elseif v.mainsnak.datavalue.type == &amp;#039;time&amp;#039; then&lt;br /&gt;
						-- type is time - do this later&lt;br /&gt;
						if val then val = val .. &amp;#039;, &amp;#039; .. &amp;#039;time&amp;#039; else val = &amp;#039;time&amp;#039; end&lt;br /&gt;
					elseif v.mainsnak.datavalue.type == &amp;#039;quantity&amp;#039; then&lt;br /&gt;
						-- type is quantity&lt;br /&gt;
						local quant = entity:formatPropertyValues(propertyID, mw.wikibase.entity.claimRanks).value&lt;br /&gt;
						quant = mw.ustring.gsub(quant, &amp;quot;(%d),(%d)&amp;quot;, &amp;quot;%1%2&amp;quot;) -- remove thousands separators&lt;br /&gt;
						if val then val = val .. &amp;#039;, &amp;#039; .. quant else val = quant end&lt;br /&gt;
					else&lt;br /&gt;
						-- type is not known (to be dealt with later)&lt;br /&gt;
						if val then val = val .. &amp;#039;, &amp;#039; .. &amp;#039;unknown&amp;#039; else val = &amp;#039;unknown&amp;#039; end&lt;br /&gt;
					end&lt;br /&gt;
				else -- mainsnaktype is unknown value or novalue&lt;br /&gt;
					if val then val = val .. &amp;#039;, noval&amp;#039; else val= &amp;#039;noval&amp;#039; end&lt;br /&gt;
				end&lt;br /&gt;
			end -- next k,v&lt;br /&gt;
			return val&lt;br /&gt;
		else -- no props&lt;br /&gt;
			return &amp;quot;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	else -- wikidata value not required so return local value&lt;br /&gt;
		return input_parm&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- {{#invoke:Sandbox/RexxS/Concat|getDescription|FETCH_WIKIDATA|en}}&lt;br /&gt;
-- {{#invoke:Sandbox/RexxS/Concat|getDescription|FETCH_WIKIDATA}}&lt;br /&gt;
p.getDescription = function(frame)&lt;br /&gt;
	local input_parm = mw.text.trim(frame.args[1] or &amp;quot;&amp;quot;)&lt;br /&gt;
	local lang = mw.text.trim(frame.args[2] or mw.language.getContentLanguage().code) -- if language code not supplied, use lang code local to this wiki&lt;br /&gt;
	if input_parm == &amp;quot;FETCH_WIKIDATA&amp;quot; then&lt;br /&gt;
		local entity = mw.wikibase.getEntityObject()&lt;br /&gt;
		local desc = entity.descriptions[lang] -- check this exists to avoid index nul error&lt;br /&gt;
		if desc then&lt;br /&gt;
			return mw.ustring.upper(mw.ustring.sub(desc.value, 1, 1)) .. mw.ustring.sub(desc.value, 2)&lt;br /&gt;
		else -- no description in given language&lt;br /&gt;
			return &amp;quot;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	else -- wikidata value not required so return local value&lt;br /&gt;
		return input_parm&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;RexxS</name></author>
	</entry>
</feed>