মডিউল:Infobox
local p = {}
local Html = mw.html
-- Utility
local function trim( value ) if not value then return nil end
value = tostring( value ) value = mw.text.trim( value )
if value == then return nil end
return value end
local function exists( value ) return trim( value ) ~= nil end
-- Create Infobox
local function createBox()
local root = Html.create( 'table' ) root :addClass( 'infobox' ) :css( 'width', '22em' ) :css( 'float', 'right' ) :css( 'clear', 'right' ) :css( 'margin', '0 0 1em 1em' ) :css( 'border', '1px solid #a2a9b1' ) :css( 'border-collapse', 'collapse' ) :css( 'background', '#fff' ) :css( 'font-size', '90%' )
return root
end
-- Header
local function addHeader( box, title )
title = trim( title )
if not title then title = mw.title.getCurrentTitle().text end
box :tag( 'tr' ) :tag( 'th' ) :attr( 'colspan', '2' ) :addClass( 'infobox-title' ) :wikitext( title )
end
-- Subtitle
local function addSubtitle( box, subtitle )
if not exists( subtitle ) then return end
box :tag( 'tr' ) :tag( 'td' ) :attr( 'colspan', '2' ) :addClass( 'infobox-subtitle' ) :wikitext( subtitle )
end
-- Image
local function addImage( box, image, caption )
if not exists( image ) then return end
local td = box :tag( 'tr' ) :tag( 'td' ) :attr( 'colspan', '2' ) :addClass( 'infobox-image' )
td:wikitext( string.format(
'
',
image ) )
if exists( caption ) then
td :tag( 'div' ) :addClass( 'infobox-caption' ) :wikitext( caption )
end
end
-- Row
local function addRow( box, label, value )
value = trim( value )
if not value then return end
local tr = box:tag( 'tr' )
tr :tag( 'th' ) :addClass( 'infobox-label' ) :wikitext( label )
tr :tag( 'td' ) :addClass( 'infobox-data' ) :wikitext( value )
end
-- Section
local function addSection( box, title )
title = trim( title )
if not title then return end
box :tag( 'tr' ) :tag( 'th' ) :attr( 'colspan', '2' ) :addClass( 'infobox-section' ) :wikitext( title )
end
-- Footer
local function addFooter( box, footer )
footer = trim( footer )
if not footer then return end
box :tag( 'tr' ) :tag( 'td' ) :attr( 'colspan', '2' ) :addClass( 'infobox-footer' ) :wikitext( footer )
end
-- Website
local function addWebsite( box, url )
url = trim( url )
if not url then return end
addRow( box, 'ওয়েবসাইট', string.format( '[%s %s]', url, url ) )
end
-- Standard Person Fields
local function addStandardRows( box, args )
addRow( box, 'জন্ম', args['জন্ম'] ) addRow( box, 'জন্মস্থান', args['জন্মস্থান'] ) addRow( box, 'মৃত্যু', args['মৃত্যু'] ) addRow( box, 'মৃত্যুস্থান', args['মৃত্যুস্থান'] ) addRow( box, 'জাতীয়তা', args['জাতীয়তা'] ) addRow( box, 'নাগরিকত্ব', args['নাগরিকত্ব'] ) addRow( box, 'পেশা', args['পেশা'] ) addRow( box, 'কর্মজীবন', args['কর্মজীবন'] ) addRow( box, 'শিক্ষাপ্রতিষ্ঠান', args['শিক্ষাপ্রতিষ্ঠান'] ) addRow( box, 'শিক্ষাগত যোগ্যতা', args['শিক্ষাগত_যোগ্যতা'] ) addRow( box, 'পরিচিতি', args['পরিচিতি'] ) addRow( box, 'পিতা', args['পিতা'] ) addRow( box, 'মাতা', args['মাতা'] ) addRow( box, 'দাম্পত্য সঙ্গী', args['দাম্পত্য_সঙ্গী'] ) addRow( box, 'সন্তান', args['সন্তান'] ) addRow( box, 'পুরস্কার', args['পুরস্কার'] )
addWebsite( box, args['ওয়েবসাইট'] )
end
-- Build infobox
function p.render( args )
local box = createBox()
addHeader( box, args["নাম"] )
addSubtitle( box, args["উপশিরোনাম"] )
addImage( box, args["ছবি"], args["ছবির_বিবরণ"] )
addStandardRows( box, args )
addFooter( box, args["ফুটার"] or "মুক্তপিডিয়া তথ্যছক" )
return tostring( box )
end
-- Template entry
function p.main( frame )
local args = frame:getParent().args
return p.render( args )
end
-- Direct invoke support
function p.infobox( frame )
local args
if frame == mw.getCurrentFrame() then args = frame:getParent().args else args = frame.args end
return p.render( args )
end
-- Export
p._render = p.render p._main = p.main
return p