편집 요약 없음 |
편집 요약 없음 |
||
| 2번째 줄: | 2번째 줄: | ||
function p.render(frame) | function p.render(frame) | ||
local args = {} | |||
local parent = frame:getParent() | local parent = frame:getParent() | ||
if parent then | |||
for k, v in pairs(parent.args) do args[k] = v end | |||
end | |||
for k, v in pairs(frame.args) do args[k] = v end | |||
local html = mw.html.create('table') | local html = mw.html.create('table') | ||
| 17번째 줄: | 21번째 줄: | ||
local hasAnyData = false | local hasAnyData = false | ||
for i = 1, 50 do | for i = 1, 50 do | ||
local m_type = args['타입' .. i] or '' | |||
local m_name = args['이름' .. i] or '' | |||
local m_guest = args['게스트' .. i] or '' | |||
local m_stat = args['스텟' .. i] or '' | |||
local m_detail = args['내용' .. i] or '' | |||
if m_type ~= '' or m_name ~= '' or m_guest ~= '' or m_detail ~= '' then | |||
hasAnyData = true | hasAnyData = true | ||
local row = html:tag('tr') | local row = html:tag('tr') | ||
row:tag('td') | row:tag('td') | ||
:css({ | :css({ | ||
['background-color'] = '#3478bf', | ['background-color'] = '#3478bf', | ||
color = 'white', | ['color'] = 'white', | ||
['font-weight'] = 'bold', | ['font-weight'] = 'bold', | ||
['text-align'] = 'center', | ['text-align'] = 'center', | ||
width = '20%', | ['width'] = '20%', | ||
['border-top'] = '2px solid #000', | ['border-top'] = '2px solid #000', | ||
['border-left'] = '2px solid #000' | ['border-left'] = '2px solid #000' | ||
| 43번째 줄: | 44번째 줄: | ||
:wikitext(m_type) | :wikitext(m_type) | ||
if m_guest == '' or m_guest == nil or m_guest:match("^%s*$") then | if m_guest == '' or m_guest == nil or m_guest:match("^%s*$") then | ||
row:tag('td') | row:tag('td') | ||
| 58번째 줄: | 58번째 줄: | ||
:css({ | :css({ | ||
['font-weight'] = 'bold', | ['font-weight'] = 'bold', | ||
width = '55%', | ['width'] = '55%', | ||
['border-top'] = '2px solid #000', | ['border-top'] = '2px solid #000', | ||
['padding-left'] = '10px' | ['padding-left'] = '10px' | ||
| 67번째 줄: | 67번째 줄: | ||
:css({ | :css({ | ||
['text-align'] = 'center', | ['text-align'] = 'center', | ||
width = '25%', | ['width'] = '25%', | ||
['border-top'] = '2px solid #000', | ['border-top'] = '2px solid #000', | ||
['border-right'] = '2px solid #000' | ['border-right'] = '2px solid #000' | ||
}) | }) | ||
guestCell:tag('span'):css({ color = '#666', ['font-size'] = '0.9em' }):wikitext('with ') | guestCell:tag('span'):css({ ['color'] = '#666', ['font-size'] = '0.9em' }):wikitext('with ') | ||
guestCell:wikitext(m_guest) | guestCell:wikitext(m_guest) | ||
end | end | ||
local statRow = html:tag('tr') | |||
statRow:tag('td') | |||
:attr('colspan', '3') | :attr('colspan', '3') | ||
:css({ | :css({ | ||
| 88번째 줄: | 87번째 줄: | ||
:wikitext("'''추가 스탯:''' " .. (m_stat ~= '' and m_stat or '없음')) | :wikitext("'''추가 스탯:''' " .. (m_stat ~= '' and m_stat or '없음')) | ||
local detailRow = html:tag('tr') | local detailRow = html:tag('tr') | ||
local detailCell = detailRow:tag('td') | local detailCell = detailRow:tag('td') | ||
:attr('colspan', '3') | :attr('colspan', '3') | ||
:css({ | :css({ | ||
padding = '0', | ['padding'] = '0', | ||
['border-left'] = '2px solid #000', | ['border-left'] = '2px solid #000', | ||
['border-right'] = '2px solid #000', | ['border-right'] = '2px solid #000', | ||
| 101번째 줄: | 99번째 줄: | ||
local collapse = detailCell:tag('div') | local collapse = detailCell:tag('div') | ||
:addClass('mw-collapsible mw-collapsed') | :addClass('mw-collapsible mw-collapsed') | ||
:css({ width = '100%' }) | :css({ ['width'] = '100%' }) | ||
collapse:tag('div') | collapse:tag('div') | ||
| 108번째 줄: | 106번째 줄: | ||
['float'] = 'none', | ['float'] = 'none', | ||
['text-align'] = 'center', | ['text-align'] = 'center', | ||
background = '#eee', | ['background'] = '#eee', | ||
['font-size'] = '0.85em', | ['font-size'] = '0.85em', | ||
['padding'] = '4px', | ['padding'] = '4px', | ||
| 119번째 줄: | 117번째 줄: | ||
:addClass('mw-collapsible-content') | :addClass('mw-collapsible-content') | ||
:css({ | :css({ | ||
padding = '12px', | ['padding'] = '12px', | ||
background = '#fff' | ['background'] = '#fff' | ||
}) | }) | ||
:wikitext((m_detail ~= '' and m_detail ~= '-') and m_detail or '상세 내용이 없습니다.') | :wikitext((m_detail ~= '' and m_detail ~= '-') and m_detail or '상세 내용이 없습니다.') | ||
| 127번째 줄: | 125번째 줄: | ||
if not hasAnyData then | if not hasAnyData then | ||
return '<div style="color:red; font-weight:bold;"> | return '<div style="color:red; font-weight:bold;">데이터를 찾을 수 없습니다.</div>' | ||
end | end | ||
2026년 1월 26일 (월) 09:41 판
| 교류 #1 | 반짝이는 이미테이션 | |
| 추가 스탯: 없음 | ||
▼ 상세 내용 보기 / 닫기 ▼ 상세 내용이 없습니다. | ||
| 교류 #2 | 이상의 아이돌 | |
| 추가 스탯: 없음 | ||
▼ 상세 내용 보기 / 닫기 ▼ 상세 내용이 없습니다. | ||
사용 예시
숫자를 늘리면 무한히 늘어납니다
{{#invoke:샤인 포스트 Be your Idol/캐릭터 메모리|render
|타입1 =
|이름1 =
|게스트1 =
|내용1 =
|타입2 =
|이름2 =
|게스트2 =
|내용2 =
}}
local p = {}
function p.render(frame)
local args = {}
local parent = frame:getParent()
if parent then
for k, v in pairs(parent.args) do args[k] = v end
end
for k, v in pairs(frame.args) do args[k] = v end
local html = mw.html.create('table')
:addClass('wikitable')
:css({
width = '100%',
['border-collapse'] = 'collapse',
['table-layout'] = 'fixed',
border = 'none',
['margin-bottom'] = '20px'
})
local hasAnyData = false
for i = 1, 50 do
local m_type = args['타입' .. i] or ''
local m_name = args['이름' .. i] or ''
local m_guest = args['게스트' .. i] or ''
local m_stat = args['스텟' .. i] or ''
local m_detail = args['내용' .. i] or ''
if m_type ~= '' or m_name ~= '' or m_guest ~= '' or m_detail ~= '' then
hasAnyData = true
local row = html:tag('tr')
row:tag('td')
:css({
['background-color'] = '#3478bf',
['color'] = 'white',
['font-weight'] = 'bold',
['text-align'] = 'center',
['width'] = '20%',
['border-top'] = '2px solid #000',
['border-left'] = '2px solid #000'
})
:wikitext(m_type)
if m_guest == '' or m_guest == nil or m_guest:match("^%s*$") then
row:tag('td')
:attr('colspan', '2')
:css({
['font-weight'] = 'bold',
['border-top'] = '2px solid #000',
['border-right'] = '2px solid #000',
['padding-left'] = '10px'
})
:wikitext(m_name)
else
row:tag('td')
:css({
['font-weight'] = 'bold',
['width'] = '55%',
['border-top'] = '2px solid #000',
['padding-left'] = '10px'
})
:wikitext(m_name)
local guestCell = row:tag('td')
:css({
['text-align'] = 'center',
['width'] = '25%',
['border-top'] = '2px solid #000',
['border-right'] = '2px solid #000'
})
guestCell:tag('span'):css({ ['color'] = '#666', ['font-size'] = '0.9em' }):wikitext('with ')
guestCell:wikitext(m_guest)
end
local statRow = html:tag('tr')
statRow:tag('td')
:attr('colspan', '3')
:css({
['background-color'] = '#f0f4f9',
['border-left'] = '2px solid #000',
['border-right'] = '2px solid #000',
['padding'] = '6px 12px',
['font-size'] = '0.9em'
})
:wikitext("'''추가 스탯:''' " .. (m_stat ~= '' and m_stat or '없음'))
local detailRow = html:tag('tr')
local detailCell = detailRow:tag('td')
:attr('colspan', '3')
:css({
['padding'] = '0',
['border-left'] = '2px solid #000',
['border-right'] = '2px solid #000',
['border-bottom'] = '2px solid #000'
})
local collapse = detailCell:tag('div')
:addClass('mw-collapsible mw-collapsed')
:css({ ['width'] = '100%' })
collapse:tag('div')
:addClass('mw-collapsible-toggle')
:css({
['float'] = 'none',
['text-align'] = 'center',
['background'] = '#eee',
['font-size'] = '0.85em',
['padding'] = '4px',
['border-top'] = '1px solid #ccc',
['cursor'] = 'pointer'
})
:wikitext("'''▼ 상세 내용 보기 / 닫기 ▼'''")
collapse:tag('div')
:addClass('mw-collapsible-content')
:css({
['padding'] = '12px',
['background'] = '#fff'
})
:wikitext((m_detail ~= '' and m_detail ~= '-') and m_detail or '상세 내용이 없습니다.')
end
end
if not hasAnyData then
return '<div style="color:red; font-weight:bold;">데이터를 찾을 수 없습니다.</div>'
end
return tostring(html)
end
return p