モジュ?ル : Official website

半永久的に保護されているモジュール
モジュ?ルの解? [ 表示 ] [ 編集 ] [ 履? ] [ キャッシュを破棄 ]

このモジュ?ルは{{ Official website }}を??しています。詳しい使い方についてはテンプレ?トの?明文をご?照ください。

追跡カテゴリ

?連項目

local
 makeUrl
 =
 require
(
'Module:URL'
).
_url


local
 p
 =
 {}


-- Wrapper for pcall which returns nil on failure.

local
 function
 quickPcall
(
func
)

	local
 success
,
 result
 =
 pcall
(
func
)

	if
 success
 then

		return
 result

	end

end


-- Gets the rank for a Wikidata property table. Returns 1, 0 or -1, in

-- order of rank.

local
 function
 getRank
(
prop
)

	local
 rank
 =
 prop
.
rank

	if
 rank
 ==
 'preferred'
 then

		return
 1

	elseif
 rank
 ==
 'normal'
 then

		return
 0

	elseif
 rank
 ==
 'deprecated'
 then

		return
 -
1

	else

		-- No rank or undefined rank is treated as "normal".

		return
 0

	end

end


-- Finds whether a Wikidata property is qualified as being in Japanese.

local
 function
 isJapanese
(
prop
)

	local
 ret
 =
 quickPcall
(
function
 ()

		for
 i
,
 lang
 in
 ipairs
(
prop
.
qualifiers
.
P407
)
 do

			if
 lang
.
datavalue
.
value
[
'numeric-id'
]
 ==
 5287
 then

				return
 true

			end

		end

		return
 false

	end
)

	return
 ret
 ==
 true

end


-- If prop is ended, return true.

local
 function
 isEnded
(
prop
)

	if
 prop
.
qualifiers
 ==
 nil
 then

		return
 false

	end

	local
 a
 =
 prop
.
qualifiers
.
P582

	if
 a
 ==
 nil
 then

		return
 false

	end

	return
 true

end


-- Fetches the official website URL from Wikidata.

local
 fetchWikidataUrl

fetchWikidataUrl
 =
 function
()

	-- Get objects for all official sites on Wikidata.

	local
 websites
 =
 quickPcall
(
function
 ()

		return
 mw
.
wikibase
.
getEntityObject
().
claims
.
P856

	end
)


	-- Clone the objects in case other code needs them in their original order.

	websites
 =
 websites
 and
 mw
.
clone
(
websites
)
 or
 {}


	-- Add the table index to the objects in case it is needed in the sort.

	for
 i
,
 website
 in
 ipairs
(
websites
)
 do

		website
.
_index
 =
 i

	end


	-- Sort the websites, first by highest rank, and then by websites in the

	-- Japanese language, then by the website's original position in the

	-- property list. When we are done, get the URL from the highest-sorted

	-- object.

	table.sort
(
websites
,
 function
(
ws1
,
 ws2
)

		local
 r1
 =
 getRank
(
ws1
)

		local
 r2
 =
 getRank
(
ws2
)

		if
 r1
 ~=
 r2
 then

			return
 r1
 >
 r2

		end

		local
 e1
 =
 isJapanese
(
ws1
)

		local
 e2
 =
 isJapanese
(
ws2
)

		if
 e1
 ~=
 e2
 then

			return
 e1

		end

		local
 f1
 =
 isEnded
(
ws1
)

		local
 f2
 =
 isEnded
(
ws2
)

		if
 f1
 ==
 true
 and
 f2
 ==
 false
 then

			return
 false

		end

		if
 f2
 ==
 true
 and
 f1
 ==
 false
 then

			return
 true

		end

		return
 ws1
.
_index
 <
 ws2
.
_index

	end
)

	local
 url
 =
 quickPcall
(
function
 ()

		return
 websites
[
1
].
mainsnak
.
datavalue
.
value

	end
)


	-- Cache the result so that we only do the heavy lifting once per #invoke.

	fetchWikidataUrl
 =
 function
 ()

		return
 url

	end


	return
 url

end


-- Render the URL link, plus other visible output.

local
 function
 renderUrl
(
options
)

	if
 not
 options
.
url
 and
 not
 options
.
wikidataurl
 then

		return
 '<strong class="error">'
 ..

			'URLが見つかりません。ここでURLを指定するかウィキデ?タに追加してください。'
 ..

			'</strong>'

	end

	local
 ret
 =
 {}

	ret
[
#
ret
 +
 1
]
 =
 string.format
(

		'<span class="official-website">%s</span>'
,

		makeUrl
(
options
.
url
 or
 options
.
wikidataurl
,
 options
.
display
)

	)

--	if options.wikidataurl and not options.url then

--		local entity = mw.wikibase.getEntityObject() or {}

--		local qid = entity.id

--		if qid then

--			ret[#ret + 1] = '[[File:Blue pencil.svg |frameless |text-top |10px |alt=Edit this at Wikidata |link=https://www.wikidata.org/wiki/' .. qid .. '#P856|Edit this at Wikidata]]'

--		end

--	end

	if
 options
.
format
 ==
 'flash'
 then

		ret
[
#
ret
 +
 1
]
 =
 mw
.
getCurrentFrame
():
expandTemplate
{

			title
 =
 'Link note'
,

			args
 =
 {
note
 =
 '要[[Adobe Flash Player]]'
}

		}

	end

	if
 options
.
mobile
 then

		ret
[
#
ret
 +
 1
]
 =
 '('
 ..
 makeUrl
(
options
.
mobile
,
 '携?'
)
 ..
 ')'

	end

	return
 table.concat
(
ret
,
 ' '
)

end


-- Render the tracking category.

local
 function
 renderTrackingCategory
(
url
,
 wikidataurl
)

	if
 mw
.
title
.
getCurrentTitle
().
namespace
 ~=
 0
 then

		return
 ''

	end

	local
 category

	if
 not
 url
 and
 not
 wikidataurl
 then

		category
 =
 'URLが指定されていない公式ウェブサイト'

	elseif
 not
 url
 and
 wikidataurl
 then

		return
 ''

	elseif
 url
 and
 wikidataurl
 then

		if
 url
:
gsub
(
'/%s*$'
,
 ''
)
 ~=
 wikidataurl
:
gsub
(
'/%s*$'
,
 ''
)
 then

			category
 =
 'ウィキペディアとウィキデ?タで異なる公式ウェブサイト'

		end

	else

		category
 =
 'ウィキデ?タにない公式ウェブサイト'

	end

	return
 category
 and
 string.format
(
'[[Category:%s]]'
,
 category
)
 or
 ''

end


function
 p
.
_main
(
args
)

	local
 url
 =
 args
[
1
]
 or
 args
.
URL
 or
 args
.
url

	local
 wikidataurl
 =
 fetchWikidataUrl
()

	local
 formattedUrl
 =
 renderUrl
{

		url
 =
 url
,

		wikidataurl
 =
 wikidataurl
,

		display
 =
 args
[
2
]
 or
 args
.
name
 or
 '公式ウェブサイト'
,

		format
 =
 args
.
format
,

		mobile
 =
 args
.
mobile

	}

	return
 formattedUrl
 ..
 renderTrackingCategory
(
url
,
 wikidataurl
)

end


function
 p
.
main
(
frame
)

	local
 args
 =
 require
(
'Module:Arguments'
).
getArgs
(
frame
,
 {

		wrappers
 =
 'Template:Official website'

	})

	return
 p
.
_main
(
args
)

end


return
 p