<?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%3AMultiple_releases%2Fsandbox</id>
	<title>Module:Multiple releases/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%3AMultiple_releases%2Fsandbox"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Multiple_releases/sandbox&amp;action=history"/>
	<updated>2026-05-26T04:31:19Z</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:Multiple_releases/sandbox&amp;diff=144025&amp;oldid=prev</id>
		<title>imported&gt;Gonnym at 12:43, 19 January 2022</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Multiple_releases/sandbox&amp;diff=144025&amp;oldid=prev"/>
		<updated>2022-01-19T12:43:55Z</updated>

		<summary type="html">&lt;p&gt;&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;
local wikidata = require(&amp;quot;Module:Wd&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local properties = {&lt;br /&gt;
	platform = &amp;quot;P400&amp;quot;,&lt;br /&gt;
	publication_date = &amp;quot;P577&amp;quot;,&lt;br /&gt;
	software_version_identifier = &amp;quot;P348&amp;quot;,&lt;br /&gt;
	version_type = &amp;quot;P548&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local version_types = {&lt;br /&gt;
	pre_release = &amp;quot;Q51930650&amp;quot;,&lt;br /&gt;
	stable = &amp;quot;Q2804309&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local platforms = {&lt;br /&gt;
	android = {id = &amp;quot;Q94&amp;quot;, label = &amp;quot;[[Android (operating system)|Android]]&amp;quot;},&lt;br /&gt;
	ios = {id = &amp;quot;Q48493&amp;quot;, label = &amp;quot;[[iOS]]&amp;quot;},&lt;br /&gt;
	linux = {id = &amp;quot;Q388&amp;quot;, label = &amp;quot;[[Linux]]&amp;quot;},&lt;br /&gt;
	macos = {id = &amp;quot;Q14116&amp;quot;, label = &amp;quot;[[macOS]]&amp;quot;},&lt;br /&gt;
	windows = {id = &amp;quot;Q1406&amp;quot;, label = &amp;quot;[[Microsoft Windows|Windows]]&amp;quot;},&lt;br /&gt;
	web = {id = &amp;quot;Q6368&amp;quot;, label = &amp;quot;[[Web application|Web]]&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local labels = {&lt;br /&gt;
	final = &amp;quot;[[Software release life cycle|Final release]]&amp;quot;,&lt;br /&gt;
	stable = &amp;quot;[[Software release life cycle|Stable release]]&amp;quot;,&lt;br /&gt;
	beta = &amp;quot;[[Software release life cycle#BETA|Preview release]]&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local date_template = &amp;quot;Start date and age&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--- Returns a date formatted with the {{Start date and age}} template.&lt;br /&gt;
---&lt;br /&gt;
--- @param date string&lt;br /&gt;
--- @return string&lt;br /&gt;
local function get_formatted_date(date)&lt;br /&gt;
	local formatted_date = mw.getCurrentFrame():expandTemplate{title = date_template, args = {date}}&lt;br /&gt;
	return formatted_date&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Returns a Wikidata qualifier request for the date.&lt;br /&gt;
--- @param args []&lt;br /&gt;
--- @return string&lt;br /&gt;
local function get_wikidata_date(args)&lt;br /&gt;
	local wikidata_args = mw.clone(args)&lt;br /&gt;
	table.insert(wikidata_args, 1, &amp;quot;single&amp;quot;)&lt;br /&gt;
	table.insert(wikidata_args, properties.publication_date)&lt;br /&gt;
	local result = wikidata._qualifier(wikidata_args)&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Returns a Wikidata property request for the version number.&lt;br /&gt;
---&lt;br /&gt;
--- @param args []&lt;br /&gt;
--- @return string&lt;br /&gt;
local function get_wikidata_version(args)&lt;br /&gt;
	local wikidata_args = mw.clone(args)&lt;br /&gt;
	table.insert(wikidata_args, 1, &amp;quot;references&amp;quot;)&lt;br /&gt;
	table.insert(wikidata_args, 2, &amp;quot;preferred&amp;quot;)&lt;br /&gt;
	table.insert(wikidata_args, 3, &amp;quot;sourced&amp;quot;)&lt;br /&gt;
	table.insert(wikidata_args, 4, &amp;quot;edit&amp;quot;)&lt;br /&gt;
	local result = wikidata._property(wikidata_args)&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Returns an entity for Wikidata.&lt;br /&gt;
---&lt;br /&gt;
--- @param software string&lt;br /&gt;
--- @param platform string&lt;br /&gt;
--- @param version_type string&lt;br /&gt;
--- @param use_platform boolean&lt;br /&gt;
--- @return table&lt;br /&gt;
local function get_wikidata_args(software, platform, version_type, use_platform)&lt;br /&gt;
	local args = {&lt;br /&gt;
		software,&lt;br /&gt;
		properties.software_version_identifier,&lt;br /&gt;
		[properties.version_type] = version_type,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if use_platform then&lt;br /&gt;
		args[properties.platform] = platform&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Creates an infobox row with the label and either a version number or a version number and date value.&lt;br /&gt;
--- Returns the number of the next infobox row.&lt;br /&gt;
---&lt;br /&gt;
--- @param infobox_args table&lt;br /&gt;
--- @param software_id string&lt;br /&gt;
--- @param platform_id string&lt;br /&gt;
--- @param version_type string&lt;br /&gt;
--- @param use_platform boolean&lt;br /&gt;
--- @param row_number number&lt;br /&gt;
--- @param label string&lt;br /&gt;
--- @return number&lt;br /&gt;
local function get_infobox_row(infobox_args, software_id, platform_id, version_type, use_platform, row_number, label)&lt;br /&gt;
	local wikidata_args = get_wikidata_args(software_id, platform_id, version_type, use_platform)&lt;br /&gt;
	local version = get_wikidata_version(wikidata_args)&lt;br /&gt;
	if version and version ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		row_number = row_number + 1&lt;br /&gt;
		infobox_args[&amp;quot;label&amp;quot; .. row_number] = label&lt;br /&gt;
		local date = get_wikidata_date(wikidata_args)&lt;br /&gt;
		if date and date ~= &amp;quot;&amp;quot; then&lt;br /&gt;
			date = get_formatted_date(date)&lt;br /&gt;
			infobox_args[&amp;quot;data&amp;quot; .. row_number] = version .. &amp;quot; / &amp;quot; .. date&lt;br /&gt;
		else&lt;br /&gt;
			infobox_args[&amp;quot;data&amp;quot; .. row_number] = version&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return row_number&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Creates an infobox row.&lt;br /&gt;
--- A row consists of a label of the version type and a data value of either a version number or a version number and date value.&lt;br /&gt;
--- Returns the total number of rows created.&lt;br /&gt;
---&lt;br /&gt;
--- @param infobox_args table&lt;br /&gt;
--- @param software_id string&lt;br /&gt;
--- @param version_type string&lt;br /&gt;
--- @param isDiscontinued string&lt;br /&gt;
--- @return number&lt;br /&gt;
local function get_single_row(infobox_args, software_id, version_type, isDiscontinued)&lt;br /&gt;
	local label = &amp;quot;&amp;quot;&lt;br /&gt;
	if version_type == version_types.stable then&lt;br /&gt;
		if isDiscontinued then&lt;br /&gt;
			label = labels.final&lt;br /&gt;
		else&lt;br /&gt;
			label = labels.stable&lt;br /&gt;
		end&lt;br /&gt;
	elseif version_type == version_types.pre_release then&lt;br /&gt;
		label = labels.beta&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return get_infobox_row(infobox_args, software_id, nil, version_type, false, 0, label)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Creates one or more infobox rows.&lt;br /&gt;
--- A row consists of a label of the platform name and a data value of either a version number or a version number and date value.&lt;br /&gt;
--- Returns the total number of rows created.&lt;br /&gt;
---&lt;br /&gt;
--- @param infobox_args table&lt;br /&gt;
--- @param software_id string&lt;br /&gt;
--- @param requested_platforms string&lt;br /&gt;
--- @param version_type string&lt;br /&gt;
--- @return number&lt;br /&gt;
local function get_multiple_rows(infobox_args, software_id, requested_platforms, version_type)&lt;br /&gt;
	---@type table&lt;br /&gt;
	local used_platforms = {}&lt;br /&gt;
	for platform in string.gmatch(requested_platforms, &amp;quot;[^,]+&amp;quot;) do&lt;br /&gt;
		used_platforms[platform] = true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ordered_pairs = require(&amp;quot;Module:Ordered pairs&amp;quot;).orderedPairs&lt;br /&gt;
	local row_number = 0&lt;br /&gt;
	for platform, _ in ordered_pairs(used_platforms) do&lt;br /&gt;
		local platform_id = platforms[platform].id&lt;br /&gt;
		row_number = get_infobox_row(infobox_args, software_id, platform_id, version_type, true, row_number, platforms[platform].label)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return row_number&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Returns a child Infobox with one or more infobox rows for a software release or an empty string.&lt;br /&gt;
---&lt;br /&gt;
---	The list of platforms is a comma separated list. Valid platforms are listed in the platforms table at the top.&lt;br /&gt;
--- If args.platforms is empty then only the latest release is returned.&lt;br /&gt;
--- Valid version types are listed at the version_types table at the top.&lt;br /&gt;
---&lt;br /&gt;
--- Infobox parameters used:&lt;br /&gt;
---- |discontinued=&lt;br /&gt;
---- |platforms=&lt;br /&gt;
---- |version_type=&lt;br /&gt;
---&lt;br /&gt;
--- Testing parameters used:&lt;br /&gt;
---- |software=&lt;br /&gt;
---&lt;br /&gt;
--- @param args table&lt;br /&gt;
--- @return string&lt;br /&gt;
local function _main(args)&lt;br /&gt;
	if not args.version_type then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local version_type = version_types[args.version_type]&lt;br /&gt;
	if not version_type then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local software_id = args.software or &amp;quot;&amp;quot;&lt;br /&gt;
    local infobox_args = {child = &amp;quot;yes&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
	local row_number&lt;br /&gt;
	if args.platforms then&lt;br /&gt;
		row_number = get_multiple_rows(infobox_args, software_id, args.platforms, version_type)&lt;br /&gt;
	else&lt;br /&gt;
		row_number = get_single_row(infobox_args, software_id, version_type, args.discontinued)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if row_number == 0 then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local infobox = require(&amp;quot;Module:Infobox&amp;quot;).infobox&lt;br /&gt;
	return infobox(infobox_args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Returns a subbox Infobox with one or more infobox rows for a software release or an empty string.&lt;br /&gt;
---&lt;br /&gt;
--- @param frame table&lt;br /&gt;
--- @return string&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local getArgs = require(&amp;quot;Module:Arguments&amp;quot;).getArgs&lt;br /&gt;
    local args = getArgs(frame)&lt;br /&gt;
	return _main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Gonnym</name></author>
	</entry>
</feed>