|
|
| (未显示同一用户的1个中间版本) |
| 第1行: |
第1行: |
| local p = {}
| |
|
| |
|
| -- 辅助函数:检查参数是否存在且不为空
| |
| local function hasValue(arg)
| |
| return arg and arg:match('%S')
| |
| end
| |
|
| |
| -- 构建分组子标题行 (浅灰色背景,靠左对齐)
| |
| local function buildSubheader(label)
| |
| if hasValue(label) then
| |
| local row = mw.html.create('tr')
| |
| row:tag('th')
| |
| :attr('colspan', '2')
| |
| :css('background', '#f0f0f0') -- 浅灰色
| |
| :css('text-align', 'left')
| |
| :css('padding-left', '0.4em')
| |
| :css('font-weight', 'bold')
| |
| :wikitext(label)
| |
| return tostring(row)
| |
| end
| |
| return ''
| |
| end
| |
|
| |
| -- 构建信息框的单行数据(标签+数据)
| |
| local function buildRow(label, data)
| |
| if hasValue(data) then
| |
| local row = mw.html.create('tr')
| |
| -- 使用 vertical-align:top 确保长短不一的内容对齐
| |
| row:tag('th'):css('width', '30%'):css('text-align', 'left'):css('vertical-align', 'top'):wikitext(label)
| |
| row:tag('td'):wikitext(data)
| |
| return tostring(row)
| |
| end
| |
| return ''
| |
| end
| |
|
| |
| -- 主函数,生成整个信息框
| |
| function p.main(frame)
| |
| local args = frame:getParent().args
| |
| local root = mw.html.create('table')
| |
| root:addClass('infobox')
| |
| :css('width', '300px')
| |
| :css('font-size', '90%')
| |
|
| |
| -- 1. 标题 和 副标题
| |
| local title = args.name or mw.title.getCurrentTitle().text
| |
| local title_cell = root:tag('tr'):tag('th')
| |
| :attr('colspan', '2')
| |
| :css('text-align', 'center')
| |
| :css('font-size', '125%')
| |
| :css('padding', '0.2em')
| |
| :wikitext(title)
| |
| if hasValue(args.native_name) then
| |
| title_cell:wikitext('<br /><span style="font-size:85%; font-weight:normal;">' .. args.native_name .. '</span>')
| |
| end
| |
|
| |
| -- 2. 行政区分类子标题 (模仿维基百科样式)
| |
| if hasValue(args.type) then
| |
| local type_row = mw.html.create('tr')
| |
| type_row:tag('th')
| |
| :attr('colspan', '2')
| |
| :css('background', '#cddeff') -- 淡蓝色背景
| |
| :css('text-align', 'center')
| |
| :css('font-weight', 'bold')
| |
| :wikitext(args.type)
| |
| root:wikitext(tostring(type_row))
| |
| end
| |
|
| |
| -- 3. 图片和图注
| |
| if hasValue(args.image) then
| |
| local image_cell = root:tag('tr'):tag('td')
| |
| :attr('colspan', '2')
| |
| :css('text-align', 'center')
| |
| local image_wikitext = '[[File:' .. args.image .. '|290x220px|frameless]]'
| |
| if hasValue(args.image_caption) then
| |
| image_wikitext = image_wikitext .. '<br /><span style="font-size:90%;">' .. args.image_caption .. '</span>'
| |
| end
| |
| image_cell:wikitext(image_wikitext)
| |
| end
| |
|
| |
| -- 4. 坐标行 (模仿维基百科样式)
| |
| if hasValue(args.lon) or hasValue(args.lat) then
| |
| local coord_row = mw.html.create('tr')
| |
| coord_row:tag('td')
| |
| :attr('colspan', '2')
| |
| :css('text-align', 'center')
| |
| :css('font-size', '95%')
| |
| :wikitext('坐标:' .. (args.lat or '') .. ' ' .. (args.lon or ''))
| |
| root:wikitext(tostring(coord_row))
| |
| end
| |
|
| |
| -- 5. 开始构建数据行
| |
| local rows = {}
| |
|
| |
| -- 【已恢复】地理位置与行政部分
| |
| table.insert(rows, buildRow('国家', args.country))
| |
| table.insert(rows, buildRow('省', args.province))
| |
| table.insert(rows, buildRow('设立', args.established))
| |
| table.insert(rows, buildRow('市长', args.mayor))
| |
|
| |
| -- 人口信息
| |
| if hasValue(args.population) then
| |
| local pop_header_text = '人口'
| |
| if hasValue(args.population_as_of) then
| |
| pop_header_text = pop_header_text .. ' (' .. args.population_as_of .. ')'
| |
| end
| |
| table.insert(rows, buildSubheader(pop_header_text))
| |
| table.insert(rows, buildRow(' • 总计', args.population .. '人'))
| |
| end
| |
|
| |
| -- 时区信息
| |
| if hasValue(args.timezone) then
| |
| table.insert(rows, buildSubheader('时区'))
| |
| local tz_data = args.timezone
| |
| if hasValue(args.utc_offset) then
| |
| tz_data = tz_data .. ' (' .. args.utc_offset .. ')'
| |
| end
| |
| table.insert(rows, buildRow(' ', tz_data)) -- 标签留空,让内容靠左
| |
|
| |
| if hasValue(args.timezone_DST) then
| |
| local tz_dst_data = args.timezone_DST
| |
| if hasValue(args.utc_offset_DST) then
| |
| tz_dst_data = tz_dst_data .. ' (' .. args.utc_offset_DST .. ')'
| |
| end
| |
| table.insert(rows, buildRow(' • 夏时制', tz_dst_data))
| |
| end
| |
| end
| |
|
| |
| -- 将所有行添加到表格中
| |
| root:wikitext(table.concat(rows))
| |
|
| |
| return tostring(root)
| |
| end
| |
|
| |
| return p
| |