مواد ڏانھن هلو

ماڊيول:Redirect

کليل ڄاڻ چيڪلي، وڪيپيڊيا مان


هي ماڊيول ريڊائريڪٽ صفحي جي حدف کي ڳولڻ لاءِ فنڪشنون رکي ٿو۔

مکيه

[سنواريو]

مکيه فنڪشن هڪ واحد صفحي جو نالو قبول ڪري ٿو۔ اهو طئي ڪري ٿو ته صفحو ريڊائريڪٽ آهي يا نه؛ جيڪڏهن هجي ته اهو صفحو ڳولي ٿو، حدف ڪڍي ٿو، ۽ حدف جو نالو متن طور موٽائي ٿو۔ ان جو استعمال هي آهي: {{#invoke:redirect|main|page-name}}۔ جيڪڏهن page-name موجود نه هجي يا ريڊائريڪٽ نه هجي ته page-name ئي موٽايو ويندو۔ جيڪڏهن page-name خالي هجي ته خالي ئي موٽايو ويندو۔

هي فنڪشن عام طور نه چورس قوسون وٺي ٿو ۽ نه ڏئي ٿو، تنهن ڪري نتيجي کي ڳنڍڻي طور ڏيکارڻ لاءِ [[{{#invoke:redirect|main|page-name}}]] استعمال ڪريو۔

جيڪڏهن پيرا ميٽر bracket کي ڪا غيرخالي قيمت ڏني وڃي ته، جيڪڏهن قوسون موجود هونديون ته اهي به گڏ اڳتي منتقل ڪيون وينديون۔

مثال

[سنواريو]
  • {{#invoke:redirect|main|WP:AFC}} → وڪيپيڊيا:AFC
  • {{#invoke:redirect|main|[[WP:AFD]]|bracket=yes}}وڪيپيڊيا:AFD
  • {{#invoke:redirect|main|Wikipedia:Articles for deletion}} → وڪيپيڊيا:Articles for deletion
  • {{#invoke:redirect|main|Red link example}} → Red link example

نوٽ: WP:AFC ۽ WP:AFD ٻئي ريڊائريڪٽ آهن، پر Wikipedia:Articles for deletion ريڊائريڪٽ ناهي، ۽ Red link example موجود ئي ناهي۔ ان کان سواءِ، Wikipedia:Red link تي ڳاڙهين ڳنڍڻين جي نمائش لاءِ، آخري صفحو غير-منتظمين طرفان ٺاهڻ کان مستقل طور محفوظ ڪيل آهي۔

جيڪڏهن توهان مکيه فنڪشن کي ڪنهن ٻئي لوا ماڊيول مان استعمال ڪرڻ چاهيو ٿا، ته توهان luaMain فنڪشن استعمال ڪرڻ چاهيندا۔ اهو مکيه فنڪشن جهڙي ئي سهولت ڏئي ٿو، پر ان لاءِ frame object موجود هجڻ ضروري ناهي۔

هن کي استعمال ڪرڻ لاءِ، پهرين ماڊيول لوڊ ڪريو۔

local mRedirect = require('Module:Redirect')

پوءِ هيٺين نحو سان فنڪشن استعمال ڪريو:

mRedirect.luaMain(rname, bracket)

rname ريڊائريڪٽ صفحي جو نالو آهي، ۽ جيڪڏهن bracket false يا nil کان سواءِ ڪجهه به هجي، ته ماڊيول رڳو صفحي جي نالي بدران هڪ ڳنڍڻو پيدا ڪندو۔

IsRedirect

[سنواريو]

isRedirect فنڪشن وڪي صفحن مان اهو معلوم ڪرڻ لاءِ استعمال ٿيندو آهي ته ڏنل صفحو ريڊائريڪٽ آهي يا نه۔ جيڪڏهن صفحو ريڊائريڪٽ هجي، ته فنڪشن "yes" موٽائيندو، ۽ جيڪڏهن نه هجي ته نتيجو خالي هوندو۔ ان جو استعمال هي آهي: {{#invoke:redirect|isRedirect|page-name}}۔

مثال

[سنواريو]
  • {{#invoke:redirect|isRedirect|WP:AFC}}
  • {{#invoke:redirect|isRedirect|Wikipedia:Articles for deletion}}
  • {{#invoke:redirect|isRedirect|Wikipedia:Articles for rumination}}

LuaIsRedirect

[سنواريو]

isRedirect تائين ٻين لوا ماڊيولن مان ساڳئي نموني پهچي سگهجي ٿو جيئن مکيه فنڪشن تائين:

local mRedirect = require('Module:Redirect')
mRedirect.luaIsRedirect(rname)

GetTarget

[سنواريو]

getTarget فنڪشن ريڊائريڪٽ صفحي جي حدف صفحي جو نالو حاصل ڪري ٿو، ۽ اهو فقط لوا مان استعمال لائق آهي۔ جيڪڏهن ڄاڻايل صفحو ريڊائريڪٽ هجي، ته حدف موٽايو ويندو؛ ٻي صورت ۾ فنڪشن nil موٽائيندو۔

ان کي استعمال ڪرڻ لاءِ، پهرين ماڊيول لوڊ ڪريو۔

local mRedirect = require('Module:Redirect')

پوءِ هيٺين نحو سان فنڪشن استعمال ڪريو:

mRedirect.getTarget(page)

page يا ته ريڊائريڪٽ صفحي جو نالو string طور ٿي سگهي ٿو، يا mw.title object ٿي سگهي ٿو۔

پڻ ڏسو

[سنواريو]

-- هي ماڊيول ريڊائريڪٽ صفحي جو حدف حاصل ڪرڻ لاءِ فنڪشن فراهم ڪري ٿو.

local p = {}

-- mw.title آبجيڪٽ حاصل ڪري ٿو؛ pcall استعمال ڪيو ويو آهي ته جيئن اسڪرپٽ جون
-- غلطيون پيدا نه ٿين، جيڪڏهن اسان expensive function count جي حد کان وڌي وڃون
-- يا ڪو ٻيو ممڪن سبب ٿئي.
local function getTitle(...)
	local success, titleObj = pcall(mw.title.new, ...)
	if success then
		return titleObj
	else
		return nil
	end
end

-- ان صفحي جو نالو حاصل ڪري ٿو جنهن ڏانهن ريڊائريڪٽ وڃي ٿو،
-- يا nil واپس ڪري ٿو جيڪڏهن اهو ريڊائريڪٽ نه هجي.
function p.getTargetFromText(text)
	local target = string.match(
		text,
		"^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)%]%]"
	) or string.match(
		text,
		"^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]"
	)
	return target and mw.uri.decode(target, 'PATH')
end

-- ريڊائريڪٽ جو حدف حاصل ڪري ٿو. جيڪڏهن ڏنل صفحو ريڊائريڪٽ نه هجي،
-- ته nil واپس ڪري ٿو.
function p.getTarget(page, fulltext)
	-- title object حاصل ڪريو. صفحن جا نالا ۽ title objects ٻنهي کي
	-- input طور قبول ڪيو وڃي ٿو.
	local titleObj
	if type(page) == 'string' or type(page) == 'number' then
		titleObj = getTitle(page)
	elseif type(page) == 'table' and type(page.getContent) == 'function' then
		titleObj = page
	else
		error(string.format(
			"bad argument #1 to 'getTarget'"
				.. " (string, number, or title object expected, got %s)",
			type(page)
		), 2)
	end
	if not titleObj then
		return nil
	end
	local targetTitle = titleObj.redirectTarget
	if targetTitle then
		if fulltext then
			return targetTitle.fullText
		else
			return targetTitle.prefixedText
		end
	else
		return nil
	end
end

--[[
-- هڪ واحد صفحي جو نالو وٺي اهو طئي ڪري ٿو ته اهو ڪهڙي صفحي ڏانهن ريڊائريڪٽ ٿئي ٿو،
-- ۽ حدف صفحي جو نالو واپس ڪري ٿو، يا جيڪڏهن ريڊائريڪٽ نه هجي ته ڏنل صفحي جو نالو
-- واپس ڪري ٿو. ڏنل صفحي جو نالو سادي متن طور يا صفحي جي لنڪ طور ڏئي سگهجي ٿو.
--
-- صفحي جو نالو سادي متن طور واپس ڪري ٿو، يا bracket پيراميٽر ڏنل هجي ته
-- صفحي جي لنڪ طور واپس ڪري ٿو. جيڪڏهن صفحو موجود نه هجي يا ريڊائريڪٽ حدف
-- ڪنهن سبب معلوم نه ٿي سگهي، ته غلطي جو پيغام واپس ڪري ٿو.
--]]
function p.luaMain(rname, bracket, fulltext)
	if type(rname) ~= "string" or not rname:find("%S") then
		return nil
	end
	bracket = bracket and "[[%s]]" or "%s"
	rname = rname:match("%[%[(.+)%]%]") or rname
	local target = p.getTarget(rname, fulltext)
	local ret = target or rname
	ret = getTitle(ret)
	if ret then
		if fulltext then
			ret = ret.fullText
		else
			ret = ret.prefixedText
		end
		return bracket:format(ret)
	else
		return nil
	end
end

-- وڪي ٽيڪسٽ مان luaMain فنڪشن تائين رسائي فراهم ڪري ٿو.
function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame, {frameOnly = true})
	return p.luaMain(args[1], args.bracket, args.fulltext) or ''
end

-- جيڪڏهن ڏنل صفحو ريڊائريڪٽ هجي ته true واپس ڪري ٿو، ٻي صورت ۾ false.
function p.luaIsRedirect(page)
	local titleObj = getTitle(page)
	if not titleObj then
		return false
	end
	if titleObj.isRedirect then
		return true
	else
		return false
	end
end

-- وڪي ٽيڪسٽ مان luaIsRedirect فنڪشن تائين رسائي فراهم ڪري ٿو؛
-- جيڪڏهن ڏنل صفحو ريڊائريڪٽ هجي ته 'yes' واپس ڪري ٿو،
-- ٻي صورت ۾ خالي اسٽرنگ واپس ڪري ٿو.
function p.isRedirect(frame)
	local args = require('Module:Arguments').getArgs(frame, {frameOnly = true})
	if p.luaIsRedirect(args[1]) then
		return 'yes'
	else
		return ''
	end
end

return p