(Translated by https://www.hiragana.jp/)
模組:Ilh - 维基百科,自由的百科全书
文档图示 かたぎ块文档[查看] [编辑] [历史] [きよしじょ缓存]

ほん块为{{Internal link helper}}てきLua实现。

ほん支持しじどおり过传にゅうLua调用さんすう代替だいたいばん调用さんすう

local ilh = {}
local getArgs
local yesno = require('Module:Yesno')
local lan = require('Module:Lan')
local langData = mw.loadData( 'Module:Ilh/data' )

--local frameArgs
local COMMON_TAIL='</span>'
local MODEL={
	 frame_head='<span class="ilh-all %s" data-orig-title="%s" data-lang-code="%s" data-lang-name="%s" data-foreign-title="%s">'
	,frame_tail=COMMON_TAIL
	,page_head='<span class="ilh-page">'
	,page_tail=COMMON_TAIL
	,comment_head='<span class="noprint ilh-comment">('
	,comment_tail=')'..COMMON_TAIL
	,lang_head='<span class="ilh-lang">'
	,lang_tail=COMMON_TAIL
	,colon='<span class="ilh-colon">:</span>'
	,link_head='<span class="ilh-link">'
	,link_body='-{[[:%s:%s|<span lang="%s" dir="auto">%s</span>]]}-'
	,link_tail=COMMON_TAIL
}
local clazz_pageExist_framehead='ilh-blue'
local TRA_CAT='[[Category:ゆう蓝链却未うつりじょ内部ないぶ链接助手じょしゅばんてき页面]]'

function ilh.main(frame)
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	local args = getArgs(frame)
	
	if langData[args['lang-code']] == nil then
		args['lang'] = mw.language.fetchLanguageName( args['lang-code'], mw.getContentLanguage():getCode() ) 	
	elseif langData[args['lang-code']]['lang-hans'] and langData[args['lang-code']]['lang-hans'] then
		args['lang'] = lan._main({['zh-hans']=langData[args['lang-code']]['lang-hans'], ['zh-hant']=langData[args['lang-code']]['lang-hant']}, frame)
	elseif langData[args['lang-code']]['lang'] == nil then
		args['lang'] = mw.language.fetchLanguageName( args['lang-code'], mw.getContentLanguage():getCode() ) 	
	else 
		args['lang'] = langData[args['lang-code']]['lang']
	end

	return ilh._ilh(args)
end

function ilh._ilh(args)
	--frameArgs = getArgs(frame, {frameOnly=true})

	local context={}
	context["isMainPage"]=ilh.isMainPage()
	context["localPage"]=args[1]
	context["foreignPage"]=args[2] or args[1] --如果{{{2}}}传入てき
	context["displayName"]=args["d"] or args[1]
	context["langCode"]=args["lang-code"]
	context["lang"]=args["lang"]
	context["nocat"]=yesno( args["nocat"] , false )

	context["isExist"]= (args["$exist$"] and args["$exist$"]==1) or ilh.isExist(context["localPage"])
	
	local curPage_obj=mw.title.getCurrentTitle()
	context["isNoCatWithNamespace"]=curPage_obj:inNamespaces(2,828) --User,Module
	--context["curPageNamespace"]=curPage_obj.namespace

	return (context["isMainPage"] and ilh.onlyLink(context)) or ilh.functionLink(context)
end

function ilh.onlyLink(context)
	return ( context["isExist"] and mw.ustring.format( '[[%s|%s]]', context["localPage"], context["displayName"] ) ) or context["displayName"]
end

function ilh.functionLink(context)
	context["_localPage"]=mw.ustring.gsub(context["localPage"],'"','&quot;')
	context["_foreignPage"]=mw.ustring.gsub(context["foreignPage"],'"','&quot;')
	local need_cat=
				   (not context["nocat"])
				   and
				   (not context["isNoCatWithNamespace"])
				   --[[not (
					   context["curPageNamespace"]==2 --User
					or context["curPageNamespace"]==828 --Module
				   )]]
	--mw.log(context["nocat"])
	--mw.log(context["curPageNamespace"])
	--mw.log(need_cat)

	local output_context={}
	table.insert(output_context,
					mw.ustring.format(MODEL.frame_head ,
						 (context["isExist"] and clazz_pageExist_framehead) or ''
						,context["_localPage"]
						,context["langCode"]
						,context["lang"]
						,context["_foreignPage"]
					)
				)
		table.insert(output_context,MODEL.page_head)
			table.insert(output_context,
							mw.ustring.format('[[:%s|%s]]' ,
								context["localPage"],context["displayName"]
							)
						)
		table.insert(output_context,MODEL.page_tail)
		if context["isExist"] then
			if need_cat then
				table.insert(output_context,TRA_CAT)
			end
		else
			table.insert(output_context,MODEL.comment_head)
				table.insert(output_context,MODEL.lang_head)
					table.insert(output_context,context["lang"])
				table.insert(output_context,MODEL.lang_tail)

				table.insert(output_context,MODEL.colon)

				table.insert(output_context,MODEL.link_head)
					table.insert(output_context,
									mw.ustring.format(MODEL.link_body,
										 context["langCode"]
										,(context["foreignPage"] or context["localPage"])
										,context["langCode"]
										,(context["foreignPage"] or context["localPage"])
									)
								)
				table.insert(output_context,MODEL.link_tail)
			table.insert(output_context,MODEL.comment_tail)
		end
	table.insert(output_context,MODEL.frame_tail)

	return table.concat(output_context,"")
end

--以下いか需要じゅようさらだかこうてき实现

--确定ぬし
--使用しようmwしんじいき获得ぬし页名
--使用しようlanguage库获得本とくもと站默认语げんだい码(zh)らい确定しんいきてき对应语言,获得ぜんしゅ页名
---いん为其zhぶん语言ただ有名ゆうめいぼつゆう命名めいめいそら间,以识别出来できただしあさ
--しかきさき判断はんだんとうぜん页和ぬし页是一致いっち
---计划做重ていこう判断はんだんただしぼっ需要じゅよう
function ilh.isMainPage()
	local mainpage_msgobj=mw.message.new('Mainpage')
	mainpage_msgobj=mainpage_msgobj:inLanguage(mw.getContentLanguage():getCode())
	local mainPage_obj=mw.title.makeTitle(0,mainpage_msgobj:plain())
	local curpage_obj=mw.title.getCurrentTitle()
	--local curpage_redirectFrom_obj=curpage_obj.redirectTarget
	--[[if curpage_redirectFrom_obj ~=false then
		curpage_obj=curpage_redirectFrom_obj
	end]]
	return mw.title.equals(mainPage_obj,curpage_obj) --and curpage_obj.namespace==4
end

--确定页面存在そんざい
---existsだか开销方法ほうほう需要じゅようさらだかこうてき实现
--带保护的包装ほうそう方法ほうほう
--よし于exists解析かいせき函数かんすうifexistだか开销方法ほうほう
--而ifexist达到げんせい时默认返かい结果为falseてき操作そうさ
--而existsかい直接ちょくせつほう错误而中断ちゅうだん执行
--所以ゆえんしょうしょう应调ようつつみ裹,压制existsてきほう错,按照ifexistてき理念りねんかえしかいfalse
--正常せいじょうじょう况下则一切いっさい正常せいじょう
function ilh.isExist(pageName)
	local execStatus,result=pcall(ilh._isExist,pageName)
	
	if execStatus then
		return result
	else
		return false
	end
end
--实方ほう
function ilh._isExist(pageName)
	local localPage_obj=mw.title.makeTitle(0,pageName)
	return localPage_obj.exists
end
--end

return ilh