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

ماڊيول:Hatnote

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



هي هڪ ميٽا-ماڊيول آهي جيڪو هيٽ نوٽ ٺاهڻ لاءِ مختلف فنڪشن مهيا ڪري ٿو. اهو {{hatnote}} سانچي کي لاڳو ڪري ٿو، جيڪو صفحن جي مٿي حصي تي هيٽ نوٽ طور استعمال ٿيندو آهي. ان کان علاوه، هن ۾ ٻيا Lua هيٽ نوٽ ماڊيول استعمال ڪرڻ لاءِ ڪيترائي مددگار فنڪشن پڻ شامل آهن.

وڪي ٽيڪسٽ مان استعمال

[سنواريو]

هن ماڊيول جا فنڪشن سڌو سنئون #invoke ذريعي استعمال نٿا ڪري سگهجن؛ انهن کي سانچن وسيلي استعمال ڪرڻو پوندو. مهرباني ڪري دستاويز لاءِ سانچو:Hatnote ۽ سانچو:Format link ڏسو.

ٻين Lua ماڊيولن مان استعمال

[سنواريو]

ٻئي Lua ماڊيول مان هن ماڊيول کي لوڊ ڪرڻ لاءِ هي ڪوڊ استعمال ڪريو:

local mHatnote = require('Module:Hatnote')

ان کان پوءِ توهان هيٺ بيان ڪيل فنڪشن استعمال ڪري سگهو ٿا.

هيٽ نوٽ

[سنواريو]
mHatnote._hatnote(s, options)

هي فنڪشن اسٽرنگ s کي هيٽ نوٽ طور فارميٽ ڪري ٿو. اهو s کي <div class="hatnote">...</div> ٽيگ اندر رکي ٿو. اختيار options ٽيبل ۾ ڏنا ويندا آهن. اختيارن ۾ شامل آهن:

  • options.extraclasses — اضافي CSS ڪلاس ڏيڻ لاءِ اسٽرنگ
  • options.selfref — جيڪڏهن nil يا false نه هجي ته "selfref" ڪلاس شامل ڪري ٿو، جيڪو وڪيپيڊيا ڏانهن خود حوالن لاءِ استعمال ٿيندو آهي (ڏسو Template:Selfref)

هيٽ نوٽ ڪلاس جي CSS وضاحت Module:Hatnote/styles.css ۾ ڏنل آهي.

مثال 1
mHatnote._hatnote('This is a hatnote.')

پيدا ڪندو: <div class="hatnote">This is a hatnote.</div>

ڏيکاريندو:

مثال 2
mHatnote._hatnote('This is a hatnote.', {extraclasses = 'boilerplate seealso', selfref = true})

پيدا ڪندو: <div class="hatnote boilerplate seealso selfref">This is a hatnote.</div>

ڏيکاريندو:

نيم اسپيس سڃاڻپ ڳوليو

[سنواريو]
mHatnote.findNamespaceId(link, removeColon)

هي فنڪشن link اسٽرنگ جو نيم اسپيس آئي ڊي ڳولي ٿو، جيڪو صحيح صفحي جو نالو هجڻ گهرجي (سيڪشن نالي سان يا بغير). جيڪڏهن صفحي جو نالو چورس بریکٽن اندر هجي ته هي فنڪشن ڪم نه ڪندو. نيم اسپيس نالي جي سڃاڻپ دوران، شروع ۾ ايندڙ ڪولن ڊيفالٽ طور هٽايا ويندا آهن. اهو ان حالت ۾ مددگار آهي جڏهن استعمال ڪندڙ غير ضروري ڪولن شامل ڪن ٿا. جيڪڏهن توهان کي شروع وارن ڪولن کي نظرانداز نه ڪرڻو هجي ته removeColon کي false مقرر ڪريو.

مثال
mHatnote.findNamespaceId('Lion') → 0
mHatnote.findNamespaceId('Category:Lions') → 14
mHatnote.findNamespaceId(':Category:Lions') → 14
mHatnote.findNamespaceId(':Category:Lions', false) → 0

وڪي ٽيڪسٽ غلطي ٺاهيو

[سنواريو]
mHatnote.makeWikitextError(msg, helpLink, addTrackingCategory)

هي فنڪشن msg کي ڳاڙهي وڪي ٽيڪسٽ غلطي پيغام طور فارميٽ ڪري ٿو، ۽ اختياري طور مدد صفحي ڏانهن لنڪ (helpLink) شامل ڪري سگهي ٿو. عام طور تي هي فنڪشن Category:Hatnote templates with errors (0) زمرو پڻ شامل ڪري ٿو. جيڪڏهن زمرو شامل ڪرڻ کان روڪڻو هجي ته ٽئين پيرا ميٽر (addTrackingCategory) طور false پاس ڪريو.

مثال
mHatnote.makeWikitextError('an error has occurred')Error: an error has occurred.
mHatnote.makeWikitextError('an error has occurred', 'Template:Example#Errors')Error: an error has occurred (help).

مثال

[سنواريو]

ٻين Lua ماڊيولن ۾ هن ماڊيول جي استعمال جو مثال ڏسڻ لاءِ Module:Labelled list hatnote ڏسو.



--------------------------------------------------------------------------------
--                              ماڊيول:Hatnote                                --
--                                                                            --
-- هي ماڊيول هيٽ نوٽ ڳنڍڻيون ۽ لاڳاپيل مضمونن ڏانهن ڳنڍڻيون پيدا ڪري ٿو.  --
-- اهو {{hatnote}} ۽ {{format link}} ميٽا-سانچن کي لاڳو ڪري ٿو ۽ ٻين Lua   --
-- هيٽ نوٽ ماڊيولن لاءِ مددگار فنڪشن شامل ڪري ٿو.                          --
--------------------------------------------------------------------------------

local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg
local mArguments -- [[ماڊيول:Arguments]] کي سست طريقي سان شروع ڪري ٿو
local yesno -- [[ماڊيول:Yesno]] کي سست طريقي سان شروع ڪري ٿو
local formatLink -- [[ماڊيول:Format link]] ._formatLink کي سست طريقي سان شروع ڪري ٿو

local p = {}

--------------------------------------------------------------------------------
-- مددگار فنڪشن
--------------------------------------------------------------------------------

local function getArgs(frame)
	-- parent frame مان آرگومينٽ وٺي ٿو. خالي جڳهون ڪٽيون وڃن ٿيون ۽
	-- خالي آرگومينٽ هٽايا وڃن ٿا.
	mArguments = require('ماڊيول:Arguments')
	return mArguments.getArgs(frame, {parentOnly = true})
end

local function removeInitialColon(s)
	-- جيڪڏهن موجود هجي ته string مان شروعاتي colon هٽائي ٿو.
	return s:match('^:?(.*)')
end

function p.defaultClasses(inline)
	-- ڊفالٽ هيٽ نوٽ classes کي space-separated string طور مهيا ڪري ٿو؛
	-- [[ماڊيول:Hatnote group]] جهڙن هيٽ نوٽ سنڀاليندڙ ماڊيولن لاءِ مفيد.
	return
		(inline == 1 and 'hatnote-inline' or 'hatnote') .. ' ' ..
		'navigation-not-searchable'
end

function p.disambiguate(page, disambiguator)
	-- صفحي جي عنوان کي ابهام سلجهائپ واري parenthetical سان format ڪري ٿو،
	-- يعني "Example" → "Example (disambiguation)".
	checkType('disambiguate', 1, page, 'string')
	checkType('disambiguate', 2, disambiguator, 'string', true)
	disambiguator = disambiguator or 'disambiguation'
	return mw.ustring.format('%s (%s)', page, disambiguator)
end

function p.findNamespaceId(link, removeColon)
	-- ڪنهن ڳنڍڻي يا صفحي جي نالي جو namespace id (namespace number) ڳولي ٿو.
	-- هي فنڪشن ڪم نه ڪندو جيڪڏهن ڳنڍڻي double brackets ۾ بند ٿيل هجي.
	-- ڊفالٽ طور ڳنڍڻي جي شروعات مان colons ڪٽيا وڃن ٿا. colon ڪٽڻ کان
	-- بچڻ لاءِ removeColon پيراميٽر کي false مقرر ڪريو.
	checkType('findNamespaceId', 1, link, 'string')
	checkType('findNamespaceId', 2, removeColon, 'boolean', true)
	if removeColon ~= false then
		link = removeInitialColon(link)
	end
	local namespace = link:match('^(.-):')
	if namespace then
		local nsTable = mw.site.namespaces[namespace]
		if nsTable then
			return nsTable.id
		end
	end
	return 0
end

function p.makeWikitextError(msg, helpLink, addTrackingCategory, title)
	-- error پيغام کي wikitext ڏانهن واپس ڪرڻ لاءِ format ڪري ٿو. جيڪڏهن
	-- addTrackingCategory، [[ماڊيول:Yesno]] مان واپس اچڻ بعد false نه هجي،
	-- ۽ جيڪڏهن اسان talk page تي نه هجون، ته tracking category شامل ڪئي وڃي ٿي.
	checkType('makeWikitextError', 1, msg, 'string')
	checkType('makeWikitextError', 2, helpLink, 'string', true)
	yesno = require('ماڊيول:Yesno')
	title = title or mw.title.getCurrentTitle()
	-- مدد واري ڳنڍڻي جو متن ٺاهيو.
	local helpText
	if helpLink then
		helpText = ' ([[' .. helpLink .. '|مدد]])'
	else
		helpText = ''
	end
	-- زمري جو متن ٺاهيو.
	local category
	if not title.isTalkPage -- talk pages کي زمرو بندي نه ڪريو
		and title.namespace ~= 2 -- userspace کي زمرو بندي نه ڪريو
		and yesno(addTrackingCategory) ~= false -- opt out جي اجازت ڏيو
	then
		category = 'غلطين وارا هيٽ نوٽ سانچا'
		category = mw.ustring.format(
			'[[%s:%s]]',
			mw.site.namespaces[14].name,
			category
		)
	else
		category = ''
	end
	return mw.ustring.format(
		'<strong class="error">غلطي: %s%s.</strong>%s',
		msg,
		helpText,
		category
	)
end

local curNs = mw.title.getCurrentTitle().namespace
p.missingTargetCat =
	-- ڊفالٽ missing target category، لاڳاپيل ماڊيولن ۾ استعمال لاءِ export ٿيل
	((curNs ==  0) or (curNs == 14)) and
	'اهڙا مضمون جن ۾ هيٽ نوٽ سانچا غير موجود صفحي کي نشانو بڻائن ٿا' or nil

function p.quote(title)
	-- عنوانن کي quotation marks ۾ wrap ڪري ٿو. جيڪڏهن عنوان quotation
	-- mark سان شروع/ختم ٿئي، ته انهي پاسي کي {{-'}} وانگر kern ڪري ٿو.
	local quotationMarks = {
		["'"]=true, ['"']=true, ['“']=true, ["‘"]=true, ['”']=true, ["’"]=true
	}
	local quoteLeft, quoteRight = -- جانچيو ته شروعات/پڇاڙي quotation marks آهن يا نه
		quotationMarks[string.sub(title,  1,  1)],
		quotationMarks[string.sub(title, -1, -1)]
	if quoteLeft or quoteRight then
		title = mw.html.create("span"):wikitext(title)
	end
	if quoteLeft  then title:css("padding-left",  "0.15em") end
	if quoteRight then title:css("padding-right", "0.15em") end
	return '"' .. tostring(title) .. '"'
end

--------------------------------------------------------------------------------
-- هيٽ نوٽ
--
-- معياري هيٽ نوٽ متن پيدا ڪري ٿو. {{hatnote}} سانچي کي لاڳو ڪري ٿو.
--------------------------------------------------------------------------------
p[''] = function (frame) return p.hatnote(frame:newChild{ title = "سانچو:Hatnote" }) end

function p.hatnote(frame)
	local args = getArgs(frame)
	local s = args[1]
	if not s then
		return p.makeWikitextError(
			'ڪو به متن مقرر نه ڪيو ويو',
			'Template:Hatnote#Errors',
			args.category
		)
	end
	return p._hatnote(s, {
		extraclasses = args.extraclasses,
		selfref = args.selfref
	})
end

function p._hatnote(s, options)
	checkType('_hatnote', 1, s, 'string')
	checkType('_hatnote', 2, options, 'table', true)
	options = options or {}
	local inline = options.inline
	local hatnote = mw.html.create(inline == 1 and 'span' or 'div')
	local extraclasses
	if type(options.extraclasses) == 'string' then
		extraclasses = options.extraclasses
	end

	hatnote
		:attr('role', 'note')
		:addClass(p.defaultClasses(inline))
		:addClass(extraclasses)
		:addClass(options.selfref and 'selfref' or nil)
		:wikitext(s)

	return mw.getCurrentFrame():extensionTag{
		name = 'templatestyles', args = { src = 'Module:Hatnote/styles.css' }
	} .. tostring(hatnote)
end

return p