--------------------------------------------------------------------------------
-- Labelled list --
-- --
-- This module does the core work of creating a hatnote composed of a list --
-- prefixed by a colon-terminated label, i.e. "LABEL: [andList of pages]", --
-- for {{see also}} and similar templates. --
--------------------------------------------------------------------------------
local
mHatnote
=
require
(
'Module:Hatnote'
)
local
mHatlist
=
require
(
'Module:Hatnote list'
)
local
mArguments
--initialize lazily
local
p
=
{}
-- Defaults global to this module
local
defaults
=
{
label
=
'文書를 參考하십시오'
,
--Final fallback for label argument
labelForm
=
'%s %s'
,
prefixes
=
{
'label'
,
'label '
,
'l'
},
template
=
'Module:Labelled list hatnote'
}
-- Helper function that pre-combines display parameters into page arguments.
-- Also compresses sparse arrays, as a desirable side-effect.
function
p
.
preprocessDisplays
(
args
,
prefixes
)
-- Prefixes specify which parameters, in order, to check for display options
-- They each have numbers auto-appended, e.g. 'label1', 'label 1', & 'l1'
prefixes
=
prefixes
or
defaults
.
prefixes
local
pages
=
{}
for
k
,
v
in
pairs
(
args
)
do
if
type
(
k
)
==
'number'
then
local
display
for
i
=
1
,
#
prefixes
do
display
=
args
[
prefixes
[
i
]
..
k
]
if
display
then
break
end
end
local
page
=
display
and
string.format
(
'%s|%s'
,
string.gsub
(
v
,
'|.*$'
,
''
),
display
)
or
v
pages
[
#
pages
+
1
]
=
page
end
end
return
pages
end
-- Produces a labelled pages-list hatnote.
-- The main frame (template definition) takes 1 or 2 arguments, for a singular
-- and (optionally) plural label respectively:
-- * {{#invoke:Labelled list hatnote|labelledList|Singular label|Plural label}}
-- The resulting template takes pagename & label parameters normally.
function
p
.
labelledList
(
frame
)
mArguments
=
require
(
'Module:Arguments'
)
local
labels
=
{
frame
.
args
[
1
]
or
defaults
.
label
}
labels
[
2
]
=
frame
.
args
[
2
]
or
labels
[
1
]
local
template
=
frame
:
getParent
():
getTitle
()
local
args
=
mArguments
.
getArgs
(
frame
,
{
parentOnly
=
true
})
local
pages
=
p
.
preprocessDisplays
(
args
)
local
options
=
{
extraclasses
=
frame
.
args
.
extraclasses
,
category
=
args
.
category
,
selfref
=
frame
.
args
.
selfref
or
args
.
selfref
,
explanation
=
frame
.
args
[
'說明'
]
or
args
[
'說明'
]
or
''
,
-- 韓國語 위키百科에서만 使用되는 非標準 變數
template
=
template
}
if
frame
.
args
[
'說明'
]
or
args
[
'說明'
]
then
options
.
explanation
=
options
.
explanation
..
' '
-- 韓國語 위키百科에서만 使用되는 非標準 變數
end
return
p
.
_labelledList
(
pages
,
labels
,
options
)
end
function
p
.
_labelledList
(
pages
,
labels
,
options
)
labels
=
labels
or
{}
if
#
pages
==
0
then
return
mHatnote
.
makeWikitextError
(
'文書 이름을 指定하지 않았습니다'
,
(
options
.
template
or
defaults
.
template
)
..
'#誤謬'
,
options
.
category
)
end
label
=
(
#
pages
==
1
and
labels
[
1
]
or
labels
[
2
])
or
defaults
.
label
local
text
=
string.format
(
options
.
labelForm
or
defaults
.
labelForm
,
'[[파일:Icons8 flat search.svg|18px|링크=|<nowiki />]] '
..
options
.
explanation
..
-- 韓國語 위키百科에서만 使用되는 非標準 變數
mHatlist
.
andList
(
pages
,
true
),
label
)
local
hnOptions
=
{
extraclasses
=
options
.
extraclasses
,
selfref
=
options
.
selfref
}
return
mHatnote
.
_hatnote
(
text
,
hnOptions
)
end
return
p