Module:RemoteControl: Difference between revisions
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: | 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 | -- 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. | css(editDiv, 'grid-column: 1 / -1; padding:0.5em; text-align:center; background-color:#f8f9fa;') | ||
-- Add edit button with | -- Add edit button with inline styling for the button | ||
editDiv:wikitext('[' .. tostring(editUrl) .. ' <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