모듈:Category

최근 편집: 2017년 3월 9일 (목) 12:08
낙엽1124 (토론 | 기여)님의 2017년 3월 9일 (목) 12:08 판 (분류 문서에도 소속 분류 문단 표시)

알려진 문제

순환 참조가 발생했을 시 ?action=edit으로 내용을 변경하기 전까지 문서 로딩이 되지 않습니다.


local p = {}

--frame.args의 원소 수를 세어서 반환하는 함수, --더 쉬운 방법이 있다면 알려주세요.
local function argumentCount(frame) 
    local count = 0
    for i,v in frame:argumentPairs() do
        count = count+1
    end
    return count
end

--
--만약 "{{#invoke:Category Template|category|성격|단체|분야|페미니즘}}""
--과 같이 호출되었다면 다음 작업을 수행합니다.
--호출한 문서의 (이름공간을 제외한) 이름이 "성격/단체"가 아니라면 (이것은 "분류:성격/단체"를 포함합니다.)
--    문서에 "[[분류:성격/단체]]"를 추가합니다.
--"틀:분야/페미니즘 분류"라는 문서가 있는지를 검사합니다.
--    존재한다면, 문서에 "틀:분야/페미니즘"을 전개하여 추가합니다.(해당 틀은 이 함수를 재귀호출합니다.)
--존재하지 않는다면, 문서에 "[[분류:분야/페미니즘]]"을 추가합니다.
function p.category(frame) 
    local argc = argumentCount(frame)
    if argc % 2 ~= 0 then return '매개변수가 짝이 맞지 않습니다.[[분류:매개변수가 잘못된 문서]]' end

    local text = ''
    if (mw.title.getCurrentTitle().text ~= frame.args[1] .. '/' .. frame.args[2]) then
        text = text .. '[[분류:' .. frame.args[1] .. '/' .. frame.args[2] .. ']]'
    else
        local lis = ""
        for i=1,(argc-2)/2 do
            lis = lis .. frame:callParserFunction( '#tag:li', '[[:분류:'..frame.args[(i*2)+1]..'/'..frame.args[(i*2)+2]..'|'..frame.args[(i*2)+1]..'/'..frame.args[(i*2)+2]..']]' )
        end

        text = text .. frame:callParserFunction{
            name = '#tag:div', 
            args = {
                class = 'fw-catlinks', 
                ['data-mw'] = 'interface', 
                frame:callParserFunction{
                    name = '#tag:div', args = {
                        class = 'mw-normal-catlinks',
                        '[[특수:분류|분류]]:'.. frame:callParserFunction('#tag:ul', lis)
                    }
                }
            }
        }
    end

    for i=1,(argc-2)/2 do
        if mw.title.new('틀:' .. frame.args[(i*2)+1] .. '/' .. frame.args[(i*2)+2] .. ' 분류').exists then
            text = text .. frame:expandTemplate{ title = frame.args[(i*2)+1] .. "/" .. frame.args[(i*2)+2] .. ' 분류'}
        else
            text = text .. '[[분류:' .. frame.args[(i*2)+1] .. '/' .. frame.args[(i*2)+2] .. '|'.. frame.args[(i*2)+2] ..']]'
        end
    end

    return text
end

--틀 설명문서를 만들 때 도움을 주는 함수(분류에는 영향을 끼치지 않습니다).
--만약 "{{#invoke:모듈 이름|category|성격|단체|분야|페미니즘}}"
--과 같이 호출되었다면 다음과 같은 문자열을 반환합니다.
--"*[[:분류:성격/단체]]
--*[[:분류:분야/페미니즘]]"
function p.document(frame)
    local argc = argumentCount(frame)
    if argc % 2 ~= 0 then return "매개변수가 짝이 맞지 않습니다.[[분류:매개변수가 잘못된 문서]]" end

    local text = ""

    text = text .. "* [[:분류:" .. frame.args[1] .. "/" .. frame.args[2] .. "]]\n"
    for i=1,(argc-2)/2 do
        text = text .. "* [[:분류:" .. frame.args[(i*2)+1] .. "/" .. frame.args[(i*2)+2] .. "]]\n"
    end

    return text
end

--"A/B"를 인자로 받으면 패싯인 A를 반환하는 함수
function p.facet(frame)
    local slash = string.find(frame.args[1],'/')
    if slash == nil then return frame.args[1] end 
    return string.sub(frame.args[1],1,slash-1)
end

--"A/B"를 인자로 받으면 멤버인 B를 반환하는 함수
function p.member(frame)
    local slash = string.find(frame.args[1],'/')
    if slash == nil then return frame.args[1] end
    return string.sub(frame.args[1],slash+1,#frame.args[1])
end

return p