モジュール:File link

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

このモジュールは、ファイルへのリンクのウィキテキストを生成します。テンプレートとモジュールで(多くのオプションを指定する)複雑なファイルリンクを作成する場合に使用されます。オプションを1、2つ使う程度のシンプルなファイルリンクを作成する場合はウィキテキストをそのまま書いたほうが軽いです。ファイルリンクのウィキテキストに関する詳細はmediawiki.orgでの解説文を参照してください。

ウィキテキストにおける使い方

ウィキテキストで使用する場合は一般的にはモジュールを直接呼び出さず、{{File link}}を使用します(詳しくはテンプレートの解説文を参照)。モジュールを直接呼び出す場合の書式は{{#invoke:File link|main|引数}}です。

モジュールにおける使い方

まず、モジュールをインポートします。

local mFileLink = require('モジュール:File link')

そうすれば、_main関数でファイルインクを作成できます。

mFileLink._main(args)

argsは引数のテーブルであり、テーブルのキーには下記のものが使用できます。

  • file - 入力必須。ファイル名を拡張子付き、名前空間名なしで入力します。
  • format - ファイルのフォーマット。'thumb'、'thumbnail'、'frame'、'framed'、'frameless'を入力できます。
  • formatfile - 自動生成のサムネイルを使用しない場合、サムネイル画像のファイル名を指定します。
  • border - "yes"またはそれに類する値(モジュール:Yesnoで真と判定される値)を入力した場合、画像ボーダーが表示されます。
  • location - ファイルの水平位置。'right'、'left'、'center'、'none'を入力できます。
  • alignment - ファイルの垂直位置。'baseline'、'middle'、'sub'、'super'、'text-top'、'text-bottom'、'top'、'bottom'を入力できます。
  • size - 画像サイズ。例:'100px'、'x100px'、'100x100px'。
  • upright - 'upright'引数。縦長の画像の場合に指定します。
  • link - ファイルのリンク先を指定します。既定はファイルページですが、どこにもリンクしない場合は空文字列''を指定します。
  • alt - 代替テキスト。既定の代替テキストを表示させない場合は空文字列''を指定してください。
  • caption - キャプション。
  • page - PDFなど複数ページにわたるファイルの場合、ページ番号を指定します。
  • class - 画像リンクがHTMLにレンダリングされるとき、生成される<img />要素のclass="..."属性の値を入力します。
  • lang - ファイルのレンダリングが行われる言語を指定します。
  • start - 音声と動画ファイルの場合、開始時間を指定します。
  • end - 音声と動画ファイルの場合、終了時間を指定します。
  • thumbtime - 動画ファイルの場合、サムネイル画像に使用する時間を指定します。

これらのオプションの詳細はmediawiki.orgでの解説文を参照してください。

使用例

最低限の引数のみ:

mFileLink.main{file = 'Example.png'}
-- 返り値:[[File:Example.png]]

format、size、link、captionのオプションを使用した場合:

mFileLink.main{
	file = 'Example.png',
	format = 'thumb',
	size = '220px',
	link = 'Wikipedia:サンドボックス',
	caption = 'これは例です。'
}
-- 返り値:[[File:Example.png|thumb|220px|link=Wikipedia:サンドボックス|これは例です。]]

format、size、borderのオプションを使用した場合:

mFileLink.main{
	file = 'Example.png',
	format = 'frameless',
	size = '220px',
	border = true
}
-- 返り値:[[File:Example.png|frameless|border|220px]]

-- This module provides a library for formatting file wikilinks.

local yesno = require('Module:Yesno')
local checkType = require('libraryUtil').checkType

local p = {}

function p._main(args)
	checkType('_main', 1, args, 'table')

	-- This is basically libraryUtil.checkTypeForNamedArg, but we are rolling our
	-- own function to get the right error level.
	local function checkArg(key, val, level)
		if type(val) ~= 'string' then
			error(string.format(
				"'_main'関数における'%s'引数のタイプエラー(想定:文字列、実際:%s)",
				key, type(val)
			), level)
		end
	end

	local ret = {}

	-- Adds a positional parameter to the buffer.
	local function addPositional(key)
		local val = args[key]
		if not val then
			return nil
		end
		checkArg(key, val, 4)
		ret[#ret + 1] = val
	end

	-- Adds a named parameter to the buffer. We assume that the parameter name
	-- is the same as the argument key.
	local function addNamed(key)
		local val = args[key]
		if not val then
			return nil
		end
		checkArg(key, val, 4)
		ret[#ret + 1] = key .. '=' .. val
	end

	-- Filename
	checkArg('file', args.file, 3)
	ret[#ret + 1] = 'File:' .. args.file

	-- Format
	if args.format then
		checkArg('format', args.format)
		if args.formatfile then
			checkArg('formatfile', args.formatfile)
			ret[#ret + 1] = args.format .. '=' .. args.formatfile
		else
			ret[#ret + 1] = args.format
		end
	end

	-- Border
	if yesno(args.border) then
		ret[#ret + 1] = 'border'
	end

	addPositional('location')
	addPositional('alignment')
	addPositional('size')
	addNamed('upright')
	addNamed('link')
	addNamed('alt')
	addNamed('page')
	addNamed('class')
	addNamed('lang')
	addNamed('start')
	addNamed('end')
	addNamed('thumbtime')
	addPositional('caption')

	return string.format('[[%s]]', table.concat(ret, '|'))
end

function p.main(frame)
	local origArgs = require('Module:Arguments').getArgs(frame, {
		wrappers = 'Template:File link'
	})
	if not origArgs.file then
		error("[[Template:File link]]のエラー: 'file'引数が未入力です", 0)
	end

	-- Copy the arguments that were passed to a new table to avoid looking up
	-- every possible parameter in the frame object.
	local args = {}
	for k, v in pairs(origArgs) do
		-- Make _BLANK a special argument to add a blank parameter. For use in
		-- conditional templates etc. it is useful for blank arguments to be
		-- ignored, but we still need a way to specify them so that we can do
		-- things like [[File:Example.png|link=]].
		if v == '_BLANK' then
			v = ''
		end
		args[k] = v
	end
	return p._main(args)
end

return p