Modul:Redirect hatnote: Perbedaan antara revisi

Dari Wiki Javasatu
Loncat ke navigasi Loncat ke pencarian
dw>Nihiltres
(Updated from sandbox: Migrated p._quote to Module:Hatnote)
(←Membuat halaman berisi '--[[ -- This module produces a "redirect" hatnote. It looks like this: -- '"X" redirects here. For other uses, see Y.' -- It implements the {{redirect}} template. --]] local mHatnote = require('Module:Hatnote') local mHatList = require('Module:Hatnote list') local mArguments --lazily initialize local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local checkTypeMulti = libraryUtil.checkTypeMulti local p = {} local function getTitl...')
Baris 13: Baris 13:


local p = {}
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------


local function getTitle(...)
local function getTitle(...)
--Calls mw.title.new and returns either a title object, or nil on error
local success, titleObj = pcall(mw.title.new, ...)
local success, titleObj = pcall(mw.title.new, ...)
return success and titleObj or nil
if success then
return titleObj
else
return nil
end
end
end
--------------------------------------------------------------------------------
-- Main functions
--------------------------------------------------------------------------------


function p.redirect(frame)
function p.redirect(frame)
Baris 64: Baris 59:
local formattedRedirect = {}
local formattedRedirect = {}
for k,v in pairs(redirect) do
for k,v in pairs(redirect) do
formattedRedirect[k] = mHatnote.quote(v)
formattedRedirect[k] = '"' .. v .. '"'
end
end
local text = {
local text = {
mHatList.andList(formattedRedirect) .. ' ' .. (#redirect == 1 and 'redirects' or 'redirect') .. ' here.',
mHatList.andList(formattedRedirect) .. ' ' .. (#redirect == 1 and 'beralih' or 'dialihkan') .. ' ke halaman ini.',
mHatList._forSee(args, #redirect + 1, {title = redirect[1], extratext = args.text})
mHatList._forSee(args, #redirect + 1, {title = redirect[1], extratext = args.text})
}
}
Baris 73: Baris 68:
-- Functionality for adding categories
-- Functionality for adding categories
local categoryTable = {}
local categoryTable = {}
local function addCategory(cat)
function addCategory(cat)
if cat and cat ~= '' then
if cat and cat ~= '' then
-- Add by index to avoid duplicates
-- Add by index to avoid duplicates
categoryTable[string.format('[[Category:%s]]', cat)] = true
categoryTable[string.format('[[Kategori:%s]]', cat)] = true
end
end
end
end
--Generate tracking categories
--Generate tracking categories
local mhOptions = {}
local mhOptions = {}
local redirTitle
for k,v in pairs(redirect) do
for k,v in pairs(redirect) do
-- We don't need a tracking category if the template invocation has been
-- We don't need a tracking category if the template invocation has been
Baris 88: Baris 82:
and currentTitle.namespace == 0 or currentTitle.namespace == 14
and currentTitle.namespace == 0 or currentTitle.namespace == 14
then
then
redirTitle = redirectTitle or getTitle(v)
redirectTitle = redirectTitle or getTitle(v)
if not redirTitle or not redirTitle.exists then
if not redirectTitle or not redirectTitle.exists then
addCategory('Missing redirects')
addCategory('Missing redirects')
elseif not redirTitle.isRedirect then
elseif not redirectTitle.isRedirect then
if string.find(redirTitle:getContent(), '#invoke:RfD') then
addCategory('Articles with redirect hatnotes needing review')
addCategory('Articles with redirect hatnotes impacted by RfD')
else
addCategory('Articles with redirect hatnotes needing review')
end
else
else
local target = targetTitle or redirTitle.redirectTarget
local mRedirect = require('Module:Redirect')
if target and target ~= currentTitle then
local target = mRedirect.getTarget(redirectTitle)
targetTitle = targetTitle or target and getTitle(target)
if targetTitle and targetTitle ~= currentTitle then
addCategory('Articles with redirect hatnotes needing review')
addCategory('Articles with redirect hatnotes needing review')
end
end
Baris 107: Baris 99:
-- Generate the options to pass to [[Module:Hatnote]].
-- Generate the options to pass to [[Module:Hatnote]].
if currentTitle.namespace == 0 and not mhOptions.selfref
if currentTitle.namespace == 0 and not mhOptions.selfref
and redirTitle and redirTitle.namespace ~= 0
and redirectTitle and redirectTitle.namespace ~= 0
then
then
-- We are on a mainspace page, and the hatnote starts with something
-- We are on a mainspace page, and the hatnote starts with something

Revisi per 21 September 2023 15.23

This module produces a hatnote for disambiguating a page that is linked to by a given redirect. It implements the {{redirect}} hatnote template.

Penggunaan dari teks wiki

Modul tidak dapat dijalankan secara langsung dari teks wiki. Untuk itu gunakanlah templat {{redirect}}.

Penggunaan dari Lua

Untuk menggunakan modul ini dari Lua, pertama kita harus memuat modulnya.

local mRedirectHatnote = require('Modul:Redirect hatnote')

Modul dapat digunakan dengan sintaks berikut:

mRedirectHatnote._redirect(redirect, data, options, titleObj)



--[[
-- This module produces a "redirect" hatnote. It looks like this:
-- '"X" redirects here. For other uses, see Y.'
-- It implements the {{redirect}} template.
--]]

local mHatnote = require('Module:Hatnote')
local mHatList = require('Module:Hatnote list')
local mArguments --lazily initialize
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local checkTypeMulti = libraryUtil.checkTypeMulti

local p = {}

local function getTitle(...)
	local success, titleObj = pcall(mw.title.new, ...)
	if success then
		return titleObj
	else
		return nil
	end
end

function p.redirect(frame)
	mArguments = require('Module:Arguments')
	local args = mArguments.getArgs(frame, {parentOnly=true})
	--Get number of redirects
	local numRedirects = tonumber(frame.args[1]) or 1
	-- Create the options table.
	local options = {}
	options.selfref = args.selfref
	return p._redirect(args, numRedirects, options)
end

function p._redirect(args, numRedirects, options, currentTitle, redirectTitle, targetTitle)
	-- Validate the input. Don't bother checking currentTitle, redirectTitle or
	-- targetTitle, as they are only used in testing.
	checkType('_redirect', 1, args, 'table')
	checkType('_redirect', 2, numRedirects, 'number', true)
	numRedirects = numRedirects or 1
	checkType('_redirect', 3, options, 'table', true)
	options = options or {}
	currentTitle = currentTitle or mw.title.getCurrentTitle()
	-- Get the table of redirects
	local redirect = {}
	for i = 1, numRedirects do
		-- Return an error if a redirect parameter is missing.
		if not args[i] then
			return mHatnote.makeWikitextError(
				'missing redirect parameter',
				'Template:Redirect#Errors',
				args.category
			)
		end
		redirect[i] = args[i]
	end
	-- Generate the text.
	local formattedRedirect = {}
	for k,v in pairs(redirect) do
		formattedRedirect[k] = '"' .. v .. '"'
	end
	local text = {
		mHatList.andList(formattedRedirect) .. ' ' .. (#redirect == 1 and 'beralih' or 'dialihkan') .. ' ke halaman ini.',
		mHatList._forSee(args, #redirect + 1, {title = redirect[1], extratext = args.text})
	}
	text = table.concat(text, ' ')
	-- Functionality for adding categories	
	local categoryTable = {}
	function addCategory(cat)
		if cat and cat ~= '' then
			-- Add by index to avoid duplicates
			categoryTable[string.format('[[Kategori:%s]]', cat)] = true
		end
	end
	--Generate tracking categories
	local mhOptions = {}
	for k,v in pairs(redirect) do
		-- We don't need a tracking category if the template invocation has been
		-- copied directly from the docs, or if we aren't in main- or category-space.
		if not v:find('^REDIRECT%d*$') and v ~= 'TERM' -- 
			and currentTitle.namespace == 0 or currentTitle.namespace == 14
		then
			redirectTitle = redirectTitle or getTitle(v)
			if not redirectTitle or not redirectTitle.exists then
				addCategory('Missing redirects')
			elseif not redirectTitle.isRedirect then
				addCategory('Articles with redirect hatnotes needing review')
			else
				local mRedirect = require('Module:Redirect')
				local target = mRedirect.getTarget(redirectTitle)
				targetTitle = targetTitle or target and getTitle(target)
				if targetTitle and targetTitle ~= currentTitle then
					addCategory('Articles with redirect hatnotes needing review')
				end
			end
		end

		-- Generate the options to pass to [[Module:Hatnote]].
		if currentTitle.namespace == 0 and not mhOptions.selfref
			and redirectTitle and redirectTitle.namespace ~= 0
		then
			-- We are on a mainspace page, and the hatnote starts with something
			-- like "Wikipedia:Foo redirects here", so automatically label it as
			-- a self-reference.
			mhOptions.selfref = true
		else
			mhOptions.selfref = options.selfref
		end
	end
	--concatenate all the categories
	local category = ''
	for k,v in pairs(categoryTable) do
		category = category .. k
	end

	return mHatnote._hatnote(text, mhOptions) .. category
end
 
return p