Module:Achievement

From Satisfactory Wiki
Jump to navigation Jump to search


This module is used to automatically generate achievements sourced from the Template:Achievements.json data file.

Invocation

This module should be invocated using {{Achievement}} and {{AchievementsTableRow}}.

Updating the data file

Navigate to https://steamdb.info/app/526870/stats/ and execute the following script in the browser's console:

JSON.stringify(Object.fromEntries([...document.querySelectorAll('#js-achievements tbody > tr')].map(e => ({
    internal: e.querySelector('td').textContent,
    title: e.querySelector('td:nth-child(2)').firstChild.data.trim(),
    description: e.querySelector('td:nth-child(2) > p').textContent.trim(),
})).map(({internal, ...remaining}) => [internal, remaining])));

local p = {}
local achievementsJSON = mw.loadJsonData('Template:Achievements.json')

function p.renderAchievement(frame)
	local key = frame.args[1] or frame:getParent().args[1]
	local title = achievementsJSON[key].title
	local description = achievementsJSON[key].description
	if (description ~= 'Hidden.') then
		return string.format([=[<div class="descriptionbox achievement">[[File:%s unlocked.jpg|64px|link=Achievements]]'''[[Achievements#%s|%s]]'''&nbsp;&bull;&nbsp;''"%s"''</div>]=], key, title, title, description)
	else
		return string.format([=[<div class="descriptionbox achievement mw-collapsible mw-collapsed">Hidden achievement<div class="mw-collapsible-content">[[File:%s unlocked.jpg|64px|link=Achievements]]'''[[Achievements#%s|%s]]'''&nbsp;&bull;&nbsp;''"%s"''</div></div>]=], key, title, title, description)
	end
end

function p.renderAchievementsTableRow(frame)
	local key = frame.args[1] or frame:getParent().args[1]
	local note = frame.args[2] or frame:getParent().args[2] or ""
	local title = achievementsJSON[key].title
	local description = achievementsJSON[key].description
	return string.format("|-\n" .. [=[|style="white-space:pre;"|<span id="%s">[[File:%s unlocked.jpg|64px]] %s</span>||%s||%s]=], title, key, title, description, note)
end
return p