익명
×
새 문서 만들기
여기에 문서 제목을 쓰세요:
We currently have 962 articles on 루리위키. Type your article name above or click on one of the titles below and start writing!



962Articles

모듈:샤인 포스트 Be your Idol/캐릭터 메모리: 두 판 사이의 차이

편집 요약 없음
편집 요약 없음
2번째 줄: 2번째 줄:


function p.render(frame)
function p.render(frame)
     local args = frame.args
    local parent = frame:getParent()
     local args = parent and parent.args or frame.args
 
     local html = mw.html.create('table')
     local html = mw.html.create('table')
 
        :addClass('wikitable')
    html:addClass('wikitable')
         :css({
         :css({
             ['width'] = '100%',
             width = '100%',
             ['border-collapse'] = 'collapse',
             ['border-collapse'] = 'collapse',
             ['table-layout'] = 'fixed'
             ['table-layout'] = 'fixed',
            border = 'none',
            ['margin-bottom'] = '20px' -- 메모리 묶음 사이의 간격 추가
         })
         })


15번째 줄: 18번째 줄:
     local hasRow = false
     local hasRow = false


     while args['타입' .. i] or args['이름' .. i] do
     while args['이름' .. i] or args['타입' .. i] do
         hasRow = true
         hasRow = true


21번째 줄: 24번째 줄:
         local m_name  = args['이름' .. i]  or ''
         local m_name  = args['이름' .. i]  or ''
         local m_guest  = args['게스트' .. i] or ''
         local m_guest  = args['게스트' .. i] or ''
        local m_stat  = args['스텟' .. i]  or ''
         local m_detail = args['내용' .. i]  or ''
         local m_detail = args['내용' .. i]  or ''


         -- ① 요약 행 (외곽 상단)
         -- ① 요약 행 (타입 / 이름 / 게스트)
         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'
40번째 줄: 43번째 줄:


         if m_guest == '' then
         if m_guest == '' then
            -- 게스트 없음 → 이름 2칸 합침
             row:tag('td')
             row:tag('td')
                 :attr('colspan', '2')
                 :attr('colspan', '2')
46번째 줄: 48번째 줄:
                     ['font-weight'] = 'bold',
                     ['font-weight'] = 'bold',
                     ['border-top'] = '2px solid #000',
                     ['border-top'] = '2px solid #000',
                     ['border-right'] = '2px solid #000'
                     ['border-right'] = '2px solid #000',
                    ['padding-left'] = '10px'
                 })
                 })
                 :wikitext(m_name)
                 :wikitext(m_name)
         else
         else
            -- 이름
             row:tag('td')
             row:tag('td')
                 :css({
                 :css({
                     ['font-weight'] = 'bold',
                     ['font-weight'] = 'bold',
                            ['width'] = '65%',
                    width = '55%',
                     ['border-top'] = '2px solid #000'
                     ['border-top'] = '2px solid #000',
                    ['padding-left'] = '10px'
                 })
                 })
                 :wikitext(m_name)
                 :wikitext(m_name)


             -- 게스트
             local guestCell = row:tag('td')
            row:tag('td')
                 :css({
                 :css({
                     ['text-align'] = 'center',
                     ['text-align'] = 'center',
                     ['width'] = '15%',
                     width = '25%',
                     ['border-top'] = '2px solid #000',
                     ['border-top'] = '2px solid #000',
                     ['border-right'] = '2px solid #000'
                     ['border-right'] = '2px solid #000'
                 })
                 })
                :wikitext('with ' .. m_guest)
            guestCell:tag('span'):css({ color = '#666', ['font-size'] = '0.9em' }):wikitext('with ')
            guestCell:wikitext(m_guest)
         end
         end


         -- ② 상세 행 (외곽 하단)
         -- ② 추가 스텟
        if m_detail ~= '' then
        html:tag('tr')
            local detailRow = html:tag('tr')
            :tag('td')
            detailRow:tag('td')
            :attr('colspan', '3')
                :attr('colspan', '3')
            :css({
                :css({
                ['background-color'] = '#f0f4f9',
                    ['padding'] = '10px',
                ['border-left'] = '2px solid #000',
                    ['border-left'] = '2px solid #000',
                ['border-right'] = '2px solid #000',
                    ['border-right'] = '2px solid #000',
                ['padding'] = '6px 12px',
                    ['border-bottom'] = '2px solid #000'
                ['font-size'] = '0.9em'
                })
            })
                :wikitext(m_detail)
            :wikitext("'''추가 스탯:''' " .. (m_stat ~= '' and m_stat or '없음'))
         else
 
             -- 상세 없을 때도 하단 외곽선 닫기
        -- ③ 상세 내용 (개선된 접기 구조)
             row:allDone()
        local detailRow = html:tag('tr')
             row:tag('td')
        local detailCell = detailRow:tag('td')
        end
            :attr('colspan', '3')
            :css({
                padding = '0',
                ['border-left'] = '2px solid #000',
                ['border-right'] = '2px solid #000',
                ['border-bottom'] = '2px solid #000'
            })
 
        -- 접기 블록 (mw-collapsible-toggle 위치 조정)
        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',
                ['line-height'] = '1.6'
            })
            :wikitext(m_detail ~= '' and m_detail or '상세 내용이 없습니다.')


         i = i + 1
         i = i + 1
     end
     end


     if not hasRow then
     if not hasRow then return '' end
        return ''
    end


     return tostring(html)
     return tostring(html)

2026년 1월 26일 (월) 09:35 판


사용 예시

숫자를 늘리면 무한히 늘어납니다

{{#invoke:샤인 포스트 Be your Idol/캐릭터 메모리|render
|타입1 = 
|이름1 = 
|게스트1 =
|내용1 = 

|타입2 = 
|이름2 = 
|게스트2 = 
|내용2 = 
}}

local p = {}

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

    local html = mw.html.create('table')
        :addClass('wikitable')
        :css({
            width = '100%',
            ['border-collapse'] = 'collapse',
            ['table-layout'] = 'fixed',
            border = 'none',
            ['margin-bottom'] = '20px' -- 메모리 묶음 사이의 간격 추가
        })

    local i = 1
    local hasRow = false

    while args['이름' .. i] or args['타입' .. i] do
        hasRow = true

        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 ''

        -- ① 요약 행 (타입 / 이름 / 게스트)
        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 == '' 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

        -- ② 추가 스텟 행
        html:tag('tr')
            :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'
            })

        -- 접기 블록 (mw-collapsible-toggle 위치 조정)
        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',
                ['line-height'] = '1.6'
            })
            :wikitext(m_detail ~= '' and m_detail or '상세 내용이 없습니다.')

        i = i + 1
    end

    if not hasRow then return '' end

    return tostring(html)
end

return p