Arclight changed the content model of the page Module:RemoteControl from "wikitext" to "Scribunto module"
Add complete inline styles for border, backgrounds to match CRT model infobox (via update-page on MediaWiki MCP Server)
Line 22: Line 22:
local section = container:tag('div')
local section = container:tag('div')
section:addClass('infobox-section-header')
section:addClass('infobox-section-header')
css(section, 'grid-column: 1 / -1; text-align:center; padding:0.5em; font-weight:bold;')
css(section, 'grid-column: 1 / -1; text-align:center; padding:0.5em; font-weight:bold; background-color:#c8ccd1;')
section:wikitext(title)
section:wikitext(title)
end
end
Line 29: Line 29:
local labelDiv = container:tag('div')
local labelDiv = container:tag('div')
labelDiv:addClass('infobox-label')
labelDiv:addClass('infobox-label')
css(labelDiv, 'padding:0.2em 0.4em; font-weight:bold; text-align:left;')
css(labelDiv, 'padding:0.2em 0.4em; font-weight:bold; text-align:left; background-color:#eaecf0;')
labelDiv:wikitext(label)
labelDiv:wikitext(label)


local valueDiv = container:tag('div')
local valueDiv = container:tag('div')
valueDiv:addClass('infobox-value')
valueDiv:addClass('infobox-value')
css(valueDiv, 'padding:0.2em 0.4em;')
css(valueDiv, 'padding:0.2em 0.4em; background-color:#f8f9fa;')


if isRawHtml then
if isRawHtml then
Line 74: Line 74:
container:addClass('infobox')
container:addClass('infobox')
container:addClass('infobox-remote-control')
container:addClass('infobox-remote-control')
css(container, 'float:right; clear:right; margin:0 0 1em 1em; width:22em; font-size:88%; line-height:1.5em; display:grid; grid-template-columns:auto 1fr; gap:3px; padding:3px;')
css(container, 'float:right; clear:right; margin:0 0 1em 1em; width:22em; font-size:88%; line-height:1.5em; display:grid; grid-template-columns:auto 1fr; gap:0; padding:0; border:1px solid #a2a9b1; background-color:#f8f9fa;')


-- Title row (no background color, centered, bold)
-- Title row
addFullRow(
addFullRow(
container,
container,
(brand or '') .. ' ' .. (model_code or ''),
(brand or '') .. ' ' .. (model_code or ''),
'text-align:center; font-size:125%; font-weight:bold; padding:0.5em;',
'text-align:center; font-size:125%; font-weight:bold; padding:0.5em; background-color:#c8ccd1;',
false,
false,
'infobox-title'
'infobox-title'
Line 90: Line 90:
container,
container,
string.format('[[File:%s|frameless|300px]]', file),
string.format('[[File:%s|frameless|300px]]', file),
'text-align:center; padding:0;',
'text-align:center; padding:0.5em; background-color:#f8f9fa;',
false,
false,
'infobox-image'
'infobox-image'
Line 128: Line 128:
-- Create the edit button div
-- Create the edit button div
local editDiv = container:tag('div')
local editDiv = container:tag('div')
css(editDiv, 'grid-column: 1 / -1; padding:0.2em 0.4em; text-align:center;')
css(editDiv, 'grid-column: 1 / -1; padding:0.5em; text-align:center; background-color:#f8f9fa;')
-- Add edit button with primary action styling
-- Add edit button with inline styling for the button
editDiv:wikitext('[' .. tostring(editUrl) .. ' <span class="infobox-button infobox-button-primary">Edit this data</span>]')
editDiv:wikitext('[' .. tostring(editUrl) .. ' <span style="display:inline-block; padding:0.5em 1em; background-color:#36c; color:#fff; border-radius:3px; text-decoration:none;">Edit this data</span>]')


-- Return templatestyles tag + container HTML
-- Return templatestyles tag + container HTML

Revision as of 00:21, 28 December 2025

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

-- Module:RemoteControl
-- Builds the Remote Control infobox matching CRT model style

local p = {}

local function trim(s)
	if s == nil then return nil end
	s = tostring(s)
	s = s:gsub('^%s+', ''):gsub('%s+$', '')
	if s == '' then return nil end
	return s
end

local function css(node, cssText)
	if cssText and cssText ~= '' then
		node:cssText(cssText)
	end
	return node
end

local function addSectionRow(container, title)
	local section = container:tag('div')
	section:addClass('infobox-section-header')
	css(section, 'grid-column: 1 / -1; text-align:center; padding:0.5em; font-weight:bold; background-color:#c8ccd1;')
	section:wikitext(title)
end

local function addRow(container, label, valueHtmlOrWikitext, isRawHtml)
	local labelDiv = container:tag('div')
	labelDiv:addClass('infobox-label')
	css(labelDiv, 'padding:0.2em 0.4em; font-weight:bold; text-align:left; background-color:#eaecf0;')
	labelDiv:wikitext(label)

	local valueDiv = container:tag('div')
	valueDiv:addClass('infobox-value')
	css(valueDiv, 'padding:0.2em 0.4em; background-color:#f8f9fa;')

	if isRawHtml then
		valueDiv:node(mw.html.create('span'):wikitext(valueHtmlOrWikitext))
	else
		valueDiv:wikitext(valueHtmlOrWikitext)
	end
end

local function addFullRow(container, valueHtmlOrWikitext, cssText, isRawHtml, extraClass)
	local fullDiv = container:tag('div')
	css(fullDiv, 'grid-column: 1 / -1; ' .. (cssText or ''))
	if extraClass then
		fullDiv:addClass(extraClass)
	end

	if isRawHtml then
		fullDiv:wikitext(valueHtmlOrWikitext)
	else
		fullDiv:wikitext(valueHtmlOrWikitext)
	end
end

function p.infobox(frame)
	local parent = frame:getParent()
	local args = parent and parent.args or frame.args

	local title = mw.title.getCurrentTitle()
	local pageName = title.text

	local brand = trim(args.brand)
	local model_code = trim(args.model_code)
	local image_main = trim(args.image_main)

	-- Use frame:extensionTag to create a proper <style> tag that won't be escaped
	local styleTag = frame:extensionTag('templatestyles', '', {src = 'Template:CRT model/styles.css'})

	local container = mw.html.create('div')
	container:addClass('infobox')
	container:addClass('infobox-remote-control')
	css(container, 'float:right; clear:right; margin:0 0 1em 1em; width:22em; font-size:88%; line-height:1.5em; display:grid; grid-template-columns:auto 1fr; gap:0; padding:0; border:1px solid #a2a9b1; background-color:#f8f9fa;')

	-- Title row
	addFullRow(
		container,
		(brand or '') .. ' ' .. (model_code or ''),
		'text-align:center; font-size:125%; font-weight:bold; padding:0.5em; background-color:#c8ccd1;',
		false,
		'infobox-title'
	)

	if image_main then
		local file = image_main:gsub('^File:', '')
		addFullRow(
			container,
			string.format('[[File:%s|frameless|300px]]', file),
			'text-align:center; padding:0.5em; background-color:#f8f9fa;',
			false,
			'infobox-image'
		)
	end

	addSectionRow(container, 'Overview')

	-- Brand row using #formredlink (must preprocess)
	if brand then
		local brandWikitext = string.format(
			'{{#formredlink: target=%s |form=Manufacturer |existing page link text=%s }}',
			brand, brand
		)
		local brandHtml = frame:preprocess(brandWikitext)
		addRow(container, 'Brand', brandHtml, true)
	end

	if model_code then
		addRow(container, 'Model', model_code, false)
	end

	addRow(container, 'Type', 'Remote', false)

	-- Contribute section
	addSectionRow(container, 'Contribute')
	
	-- Build the edit link URL
	local editUrl = mw.uri.fullUrl(
		"Special:FormStart",
		{
			form = "Remote control",
			page_name = pageName
		}
	)
	
	-- Create the edit button div
	local editDiv = container:tag('div')
	css(editDiv, 'grid-column: 1 / -1; padding:0.5em; text-align:center; background-color:#f8f9fa;')
	
	-- Add edit button with inline styling for the button
	editDiv:wikitext('[' .. tostring(editUrl) .. ' <span style="display:inline-block; padding:0.5em 1em; background-color:#36c; color:#fff; border-radius:3px; text-decoration:none;">Edit this data</span>]')

	-- Return templatestyles tag + container HTML
	return styleTag .. tostring(container)
end

return p
MediaWiki Appliance - Powered by TurnKey Linux