<?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%2FDavid-ri93%2FTimeline_Fedora_Linux_Wikidata</id>
	<title>Module:Sandbox/David-ri93/Timeline Fedora Linux Wikidata - 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%2FDavid-ri93%2FTimeline_Fedora_Linux_Wikidata"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/David-ri93/Timeline_Fedora_Linux_Wikidata&amp;action=history"/>
	<updated>2026-04-17T18:44:47Z</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/David-ri93/Timeline_Fedora_Linux_Wikidata&amp;diff=145315&amp;oldid=prev</id>
		<title>imported&gt;David-ri93: Support choice of multiple keys</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/David-ri93/Timeline_Fedora_Linux_Wikidata&amp;diff=145315&amp;oldid=prev"/>
		<updated>2020-04-27T23:18:31Z</updated>

		<summary type="html">&lt;p&gt;Support choice of multiple keys&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
This is a proof of concept trying to build a timeline from wikidata&lt;br /&gt;
--]]&lt;br /&gt;
local p = {}&lt;br /&gt;
local wd = require(&amp;#039;Module:Wikidata&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local aliasesP = {&lt;br /&gt;
	softwareVersionIdentifier = &amp;quot;P348&amp;quot;,&lt;br /&gt;
	publicationDate           = &amp;quot;P577&amp;quot;,&lt;br /&gt;
	endTime                   = &amp;quot;P582&amp;quot;,&lt;br /&gt;
	discontinuedDate          = &amp;quot;P2669&amp;quot;,&lt;br /&gt;
	versionType               = &amp;quot;P548&amp;quot;,&lt;br /&gt;
	title                     = &amp;quot;P1476&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local aliasesQ = {&lt;br /&gt;
	fedora              = &amp;quot;Q48267&amp;quot;,&lt;br /&gt;
	stableVersion       = &amp;quot;Q2804309&amp;quot;,&lt;br /&gt;
	softwareBetaVersion = &amp;quot;Q3295609&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function recConcat(t)&lt;br /&gt;
	if type(t) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
		return t&lt;br /&gt;
	end&lt;br /&gt;
	local first = true&lt;br /&gt;
	local s = &amp;quot;(&amp;quot;&lt;br /&gt;
	for _, value in ipairs(t) do&lt;br /&gt;
		s = s .. recConcat(value)&lt;br /&gt;
		if not first then&lt;br /&gt;
			s = s .. &amp;quot;, &amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		first = false&lt;br /&gt;
	end&lt;br /&gt;
	return s .. &amp;quot;)&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getValueOrUnknown(object, keys)&lt;br /&gt;
	local stepper = object&lt;br /&gt;
	for _, key in ipairs(keys) do&lt;br /&gt;
		if type(key) == &amp;#039;table&amp;#039; then&lt;br /&gt;
			for _, testKey in ipairs(key) do&lt;br /&gt;
				if stepper[testKey] then&lt;br /&gt;
					key = testKey&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if not stepper[key] then&lt;br /&gt;
			mw.logObject(&amp;quot;Key not found &amp;quot; .. recConcat(key) .. &lt;br /&gt;
				&amp;quot; in order &amp;quot; .. recConcat(keys))&lt;br /&gt;
			--mw.logObject(keys)&lt;br /&gt;
			--mw.logObject(stepper)&lt;br /&gt;
			return &amp;quot;Unknown&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		stepper = stepper[key]&lt;br /&gt;
	end&lt;br /&gt;
	return stepper&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.hello()&lt;br /&gt;
	local versions = mw.wikibase.getAllStatements(aliasesQ.fedora, &lt;br /&gt;
		aliasesP.softwareVersionIdentifier)&lt;br /&gt;
	-- mw.logObject(versions)&lt;br /&gt;
	local counter = 0&lt;br /&gt;
	for k, v in pairs(versions) do&lt;br /&gt;
		counter = counter + 1&lt;br /&gt;
		&lt;br /&gt;
		-- there surly is a smarter way to write this&lt;br /&gt;
		local version = getValueOrUnknown(v, {&amp;quot;mainsnak&amp;quot;, &amp;quot;datavalue&amp;quot;, &amp;quot;value&amp;quot;})&lt;br /&gt;
		local startTime = getValueOrUnknown(v, {&amp;quot;qualifiers&amp;quot;, &lt;br /&gt;
			aliasesP.publicationDate, 1, &amp;quot;datavalue&amp;quot;, &amp;quot;value&amp;quot;, &amp;quot;time&amp;quot;})&lt;br /&gt;
		local endTime = getValueOrUnknown(v, {&amp;quot;qualifiers&amp;quot;, &lt;br /&gt;
			{aliasesP.discontinuedDate, aliasesP.endTime}, 1, &amp;quot;datavalue&amp;quot;, &amp;quot;value&amp;quot;, &amp;quot;time&amp;quot;})&lt;br /&gt;
		mw.logObject(&amp;quot;(Key &amp;quot; .. k .. &amp;quot;), Version &amp;quot; .. version .. &amp;quot;, start &amp;quot; .. startTime .. &amp;quot;, endTime &amp;quot; .. endTime)&lt;br /&gt;
		if counter == 3 then&lt;br /&gt;
			mw.logObject(v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
    return &amp;quot;TODO count is &amp;quot; .. counter&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;David-ri93</name></author>
	</entry>
</feed>