알려진 문제
순환 참조가 발생했을 시 ?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
function p.main(frame)
local argc = argumentCount(frame)
local returnText = ''
--만약 "{{#invoke:Category|main|성격|단체|분야|페미니즘}}""
--과 같이 호출되었다면 다음 작업을 수행합니다.
-- 우선 문서에 "[[분류:성격/단체]]"를 추가합니다.
-- "분류:성격/단체"라는 문서가 있는지, 있다면 상위분류가 있는지를 확인합니다.
-- 둘다 맞다면 문서에 "분류:성격/단체"를 전개하여 추가합니다.(해당 틀은 이 함수를 재귀호출합니다.)
-- 분야/페미니즘에 대해서도 같은 작업을 수행합니다.
for i=1,argc/2 do
returnText = returnText .. '[[분류:' .. frame.args[(i*2)-1] .. '/' .. frame.args[(i*2)] .. '|'.. frame.args[(i*2)] ..']]'
if mw.title.new('분류:' .. frame.args[(i*2)-1] .. '/' .. frame.args[(i*2)]).exists then
if frame:expandTemplate{ title = '분류:' .. frame.args[(i*2)-1] .. '/' .. frame.args[(i*2)], args = {'상위분류'} } == '있음' then
returnText = returnText .. frame:expandTemplate{ title = '분류:' .. frame.args[(i*2)-1] .. "/" .. frame.args[(i*2)] }
end
end
end
--분류 문서면서 catlinks이 전달되었으면 → 분류 div를 출력합니다.
if mw.title.getCurrentTitle():inNamespace('분류') and frame.args['catlinks'] == 'yes' then
local lis = ""
for i=1,(argc)/2 do
lis = lis .. frame:callParserFunction( '#tag:li', '[[:분류:'..frame.args[(i*2)-1]..'/'..frame.args[(i*2)]..'|'..frame.args[(i*2)-1]..'/'..frame.args[(i*2)]..']]' )
end
returnText = returnText .. 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
return returnText
end
function p.cat(frame)
local argc = argumentCount(frame)
local returnText = ''
returnText = returnText .. '<onlyinclude>{{#ifeq:{{{1|}}}|상위분류|있음|{{#invoke:category|main'
for i=1,argc do
returnText = returnText .. '|' .. frame.args[i]
end
returnText = returnText .. '<noinclude>|catlinks=yes</noinclude>}}}}</onlyinclude>'
return returnText
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