모듈 : Labelled list hatnote

이 페이지는 준보호되어 있습니다.
위키百科, 우리 모두의 百科事典.

--------------------------------------------------------------------------------

--                               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 />]]&nbsp;'
 ..

		options
.
explanation
 ..
  -- 韓國語 위키百科에서만 使用되는 非標準 變數

		mHatlist
.
andList
(
pages
,
 true
),

		label

	)

	local
 hnOptions
 =
 {

		extraclasses
 =
 options
.
extraclasses
,

		selfref
 =
 options
.
selfref

	}

	return
 mHatnote
.
_hatnote
(
text
,
 hnOptions
)

end


return
 p