Module:Sysreq

From Eli's Software Encyclopedia
Revision as of 12:31, December 10, 2025 by WikiVisor (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Documentation for this module may be created at Module:Sysreq/doc

local utils = require('Module:Utils')

local p = {}

function p.semanticStore(frame)

	local titleObj    = mw.title.getCurrentTitle()
	local args        = frame:getParent().args or {}
	
	-- Get infobox helper params
	local collapsible = args['collapsible'] or 'no'
	local state       = args['state'] or 'autocollapse'
	local showImage   = args['show image'] or 'no'

	-- Get other properties	
	local title       = args['title'] or titleObj.text 
	
	local reqCPU = args['reqCPU'] or '' --  Required CPU 
	local reqRAM = args['reqRAM'] or '' --  Required RAM 
	local ConRAM = args['ConRAM'] or '' --  Conventional RAM 
	local reqHD = args['reqHD'] or '' --  Req. Hard Drive 
	local reqDD = args['reqDD'] or '' --  Req. Dual Drives 
	local reqMouse = args['reqMouse'] or '' --  Requires Mouse 
	local reqJoystick = args['reqJoystick'] or '' --  Requires Joystick 
	local reqPaddle = args['reqPaddle'] or '' --  Requires Paddle 
	local reqCD = args['reqCD'] or '' --  Required CD Speed 
	local recCPU = args['recCPU'] or '' --  Recommend CPU 
	local recRAM = args['recRAM'] or '' --  Recommend RAM 
	local recHD = args['recHD'] or '' --  Rec. Hard Drive 
	local recDD = args['recDD'] or '' --  Rec. Dual Drives 
	local recMouse = args['recMouse'] or '' --  Recommend Mouse 
	local recJoystick = args['recJoystick'] or '' --  Recommend Joystick 
	local recPaddle = args['recPaddle'] or '' --  Recommend Paddle 
	local recCD = args['recCD'] or '' --  Recommend CD Speed 
	local supDD = args['supDD'] or '' --  Supports Dual Drives 
	local supMouse = args['supMouse'] or '' --  Supports Mouse 
	local supJoystick = args['supJoystick'] or '' --  Supports Joystick 
	local supPaddle = args['supPaddle'] or '' --  Supports Paddle 
	local reqSound = args['reqSound'] or '' --  Required Audio 
	local recSound = args['recSound'] or '' --  Recommend Audio 
	local supSound = args['supSound'] or '' --  Supported Audio 
	local supVideo = args['supVideo'] or '' --  Supported Video 
	local supMisc = args['supMisc'] or '' --  Misc Support 
	local supPrint = args['supPrint'] or '' --  Supported Printers 
	local reqNet = args['reqNet'] or '' --  Required Network 
	local supNet = args['supNet'] or '' --  Supported Network 

	-- Set properties
    local data = {
    	'Has Title=' .. title,
		'Required CPU=' .. reqCPU,
		'Required RAM=' .. reqRAM,
		'Conventional RAM=' .. ConRAM,
		'Required Hard Drive=' .. reqHD,
		'Required Dual Drives=' .. reqDD,
		'Requires Mouse=' .. reqMouse,
		'Requires Joystick=' .. reqJoystick,
		'Requires Paddle=' .. reqPaddle,
		'Required CD Speed=' .. reqCD,
		'Recommend CPU=' .. recCPU,
		'Recommend RAM=' .. recRAM,
		'Recommend Hard Drive=' .. recHD,
		'Recommend Dual Drives=' .. recDD,
		'Recommend Mouse=' .. recMouse,
		'Recommend Joystick=' .. recJoystick,
		'Recommend Paddle=' .. recPaddle,
		'Recommend CD Speed=' .. recCD,
		'Supports Dual Drives=' .. supDD,
		'Supports Mouse=' .. supMouse,
		'Supports Joystick=' .. supJoystick,
		'Supports Paddle=' .. supPaddle,
		'Required Audio=' .. reqSound,
		'Recommend Audio=' .. recSound,
		'Supported Audio=' .. supSound,
		'Supported Video=' .. supVideo,
		'Misc Support=' .. supMisc,
		'Supported Printers=' .. supPrint,
		'Required Network=' .. reqNet,
		'Supported Network=' .. supNet 	
	}
	mw.smw.subobject( data )

	-- Infobox variables
	local infoboxClass = 'chameleon-infobox smwtable-clean d-table w-100 w-md-30 d-md-flex float-none float-md-left border shadow-sm mr-md-4 mb-4 text-left'
	local pad = ''
	if collapsible == 'yes' then
		infoboxClass = infoboxClass .. ' collapsible ' .. state
		pad = frame:preprocess('{{pad|5em}}')
	end
	-- Build infobox
	local html   = mw.html.create()
	local infobox = html:tag('table'):addClass(infoboxClass)
    	:css('font-size', '90%')
		:attr('cellpadding', '0')
		:attr('cellspacing', '0')
		
	-- Header row (title + optional image)
	local headerTr = mw.html.create('tr')
	headerTr:tag('td'):attr('colspan', '2')
       	:tag('div'):addClass('summary text-center font-italic font-weight-bold')
			:css('font-size', '110%')
			:wikitext(pad .. title):done()
		infobox:node(headerTr)

	-- Print data rows
	local function appendIfExists(label, value, link)
    	local tr = utils.addLabelValue(label, value, link)
    	if tr then infobox:node(tr) end
	end
	
	-- appendIfExists('Title', title)
	appendIfExists('Required CPU', reqCPU)
	appendIfExists('Required RAM', reqRAM)
	appendIfExists('Conventional RAM', ConRAM)
	appendIfExists('Req. Hard Drive', reqHD)
	appendIfExists('Req. Dual Drives', reqDD)
	appendIfExists('Requires Mouse', reqMouse)
	appendIfExists('Requires Joystick', reqJoystick)
	appendIfExists('Requires Paddle', reqPaddle)
	appendIfExists('Required CD Speed', reqCD)
	appendIfExists('Recommend CPU', recCPU)
	appendIfExists('Recommend RAM', recRAM)
	appendIfExists('Rec. Hard Drive', recHD)
	appendIfExists('Rec. Dual Drives', recDD)
	appendIfExists('Recommend Mouse', recMouse)
	appendIfExists('Recommend Joystick', recJoystick)
	appendIfExists('Recommend Paddle', recPaddle)
	appendIfExists('Recommend CD Speed', recCD)
	appendIfExists('Supports Dual Drives', supDD)
	appendIfExists('Supports Mouse', supMouse)
	appendIfExists('Supports Joystick', supJoystick)
	appendIfExists('Supports Paddle', supPaddle)
	appendIfExists('Required Audio', reqSound)
	appendIfExists('Recommend Audio', recSound)
	appendIfExists('Supported Audio', supSound)
	appendIfExists('Supported Video', supVideo)
	appendIfExists('Misc Support', supMisc)
	appendIfExists('Supported Printers', supPrint)
	appendIfExists('Required Network', reqNet)
	appendIfExists('Supported Network', supNet)
	return html
end

return p