モジュール:SafeCate

提供: 萌えっ娘百科事典
移動先: 案内検索

本モジュール当サイトで発生するテンプレート展開異常とキャッシュ机能による分類異常への対応が目的。

本モジュールテンプレート名空間にのみ適用。

パラメータ

  • 1:追加されたカテゴリー名。
  • 2:分類インデックスは、一般的に順序付けを修正したり、分類ページで系列エントリのメインエントリを繰り上げたりするために使用される。
  • nsid:有効な名前空間、デジタルコードを埋め、名前空間を参照。半角コンマの使用に対応します。
  • nsidExclude:除外された名前空間。nsidパラメータが埋められ空でなければ、このパラメータは有効にならない。
  • noSubpage: ページに適用されず、ユーザマスターページのエラーテンプレート参照を処理するために使用できる。
  • strict:用{{safecate}}以外の包装テンプレート、これこそこのテンプレートパラメータの発効を使ったように{{templatecate}}、空間を厳しく制限の名前に使われる。

local module = {}

local function _isvalid(value)
	return value ~= nil and type(value) == "string" and mw.text.trim(value) ~= ""
end

function module.main(frame)
	local strict = frame
	local parent = frame:getParent()
	if not _isvalid(frame.args[1]) then
		if not (parent and _isvalid(parent.args[1])) then return end
		local title = parent:getTitle()
		if title == "Template:SafeCate" then
			strict, frame = parent, parent
		elseif mw.title.new(title).namespace == 10 and frame.args["strict"]=="1" then
			frame = parent
		else return end
	end
	local cate = frame.args[1]
	local mod = frame.args[2]
	local nsMap = { }
	local bExclude, nsids = false, nil
	if strict.args["nsid"] then
		nsids = mw.text.split(strict.args["nsid"], ",", true)
	elseif strict.args["nsidExclude"] then
		bExclude = true
		nsids = mw.text.split(strict.args["nsidExclude"], ",", true)
	end
	if nsids then
		for _, value in ipairs(nsids) do
			nsMap[tonumber(value)] = true
		end
	else
		nsMap[0] = true
	end
	local noSubpage = (strict).args["noSubpage"]=="1"
	local title = mw.title.getCurrentTitle()
	local curNsid = title.namespace
	if ((nsMap[curNsid] and (not bExclude)) or ((not nsMap[curNsid]) and bExclude)) and ((not noSubpage) or (not title.isSubpage)) then
		if curNsid == 10 and title.isSubpage and title.subpageText == "doc" then return end
		if mod then
			return "[[Category:"..cate.."|"..mod.."]]"
		else
			return "[[Category:"..cate.."]]"
		end
	end
end

return module