Modulo:Panagduktal ti nagan ti espasio

Dokumentasion ti modulo

Daytoy a modulo ket mangpalubos a mangiparuar kadagiti nadumaduma a teksto depende iti nagan ti espasio nga ayan ti maysa a panid. Daytoy ket Lua a pannakayasentar iti plantilia ti {{panagduktal ti nagan ti espasio}} , amin a nagan dagiti espasio ken amin dagiti parbo a nagan dagiti espasio ket nasuportaran, ken dagiti nagan ti espasio ket automatiko a maduktalan para iti lokal a wiki.

Panagusar

{{#invoke: Panagduktal ti nagan ti espasio | main
| panid             = <!-- panid a mangduktal ti nagan ti espasio, no saan nga isu ti agdama a panid -->
| page              = <!-- panid a mangduktal ti nagan ti espasio, no saan nga isu ti agdama a panid -->
| umuna             = <!-- teksto a maited para iti umuna a nagan ti espasio -->
| nangruna          = <!-- teksto a maited para iti umuna a nagan ti espasio -->
| main              = <!-- teksto a maited para iti umuna a nagan ti espasio -->
| talk              = <!-- teksto a maited para kadagiti tungtungan a nagan ti espasio -->
| tungtungan        = <!-- teksto a maited para kadagiti tungtungan a nagan ti espasio -->

<!-- teksto a maited para iti naisangayan a suheto dagiti nagan ti espasio -->
| kategoria         = 
| category          = 
| agar-aramat	    = 
| user	            = 
| wikipedia         = 
| wp                = 
| mediawiki         = 
| plantilia         = 
| template          = 
| espesial          = 
| special           = 
| midia             = 
| media             = 
| papeles           = 
| file              = 
| image             = 
| tulong	    = 
| help	            = 
| modulo            = 
| module            = 

| other             = <!-- teksto a maited para kadagiti saan a nainaganann a nagan ti espasio -->
| sabali            = <!-- teksto a maited para kadagiti saan a nainaganann a nagan ti espasio -->
| demospace         = <!-- nagan ti espasio a pagiparangan ti teksto -->

| subjectns         = <!-- iyasentar iti "wen" wenno "yes' tapno matrato dagiti tungtungan a panid a kas kapada ti suheto a panid -->
}}

Dagiti parametro

  • umuna wenno main - teksto a maited no ti panid ket adda iti umuna a nagan ti espasio.
  • tungtungan wenno talk- teksto a maited no ti panid ket adda iti tungtungan a nagan ti espasio. Daytoy ket mabalin ti ania man a tungtungan a nagan ti espasio - daytoy ket ipadana ti ania man a "Tungtungan:", "Wikipedia tungtungan:", "Agar-aramat tungtungan:", kdpy.
  • Dagiti parametro ti proyekto a nagan ti espasio a kas ti wikipedia, agar-aramat, papeles... - ti teksto a maited no ti panid ket adda iti maipada a nagan ti espasio. Daytoy a modulo ket mangawat kadagiti amin a proyekto ti nagan ti espasio a kas dagiti parametro, a mairaman ti parbo a nagan dagiti espasio ken birtual a nagan dagiti espasio. Kitaen dita baba para iti listaan dagiti pateg a masuportaran.
  • sabali wenno other - teksto a maited no dagiti parametro para iti nagan ti espasio ti panid ket saan a nainaganan. Daytoy a teksto ket maited pay no ti |demospace= ket naiyasentar iti imbalido a pateg ti nagan ti espasio.
  • subjectns - no adda iti tungtungan a panid, usaren ti kapada a panid ti suheto. Mabalin a maiyasentar kadagiti pateg ti "wen", "w", "yes", "y", "true" wenno "1".
  • demopage - manginagan ti panid a mangduktal ti nagan ti espasio. No saan a mainaganan, ken no ti |demospace= parametro ken saan a naiyasentar, ti modulo ket agusarto ti agdama a panid.
  • demospace - mangpilit ti modulo nga agkukua a kasla ti panid ket adda iti nainaganan a nagan ti espasio. Masansan daytoy a naus-usar a kas dagiti panangipakita.

Dagiti parametro ti nagan ti espasio

Dagiti mabalin a pateg para kadagiti parametro ti gandat a nagan ti espasio ket dagiti sumaganad:

Nagan ti espasio Parbo a nagnagan
main umuna, nangruna
agar-aramat user
wikipedia project, wp
papeles file, image
mediawiki
plantilia template
tulong help
kategoria category
timedtext
modulo module

Annong ti tabla

Usaren ti sumaganad tapno maiparang ti tabla para kadagiti mabalin a parametro ti nagan ti espasio:

{{#invoke:Panagduktal ti nagan ti espasio|table|talk=wen}}

Tapno mairaman ti parametro para kadagiti espasio ti tungtungan, usaren ti |talk=wen.

Dagiti teknikal a salaysay

Ti modulo ket agus-usar ti panid ti datos iti Modulo:Panagduktal ti nagan ti espasio/datos. Daytoy a panid ket ikarga iti mw.loadData, a ti kayatna a sawen ket maproseso daytoy iti maminsan tunggal maysa a panid imbes a maminsan tunggal maysa nga #invoke. Daytoy ket naaramid para iti rason ti kasayaat ti panagandar.

--[[
--------------------------------------------------------------------------------
--                                                                            --
--                            NAMESPACE DETECT                                --
--                                                                            --
-- This module implements the template {{panagduktal ti nagan ti espasio}} in Lua, with a    --
-- few improvements: all namespaces and all namespace aliases are supported,  --
-- and namespace names are detected automatically for the local wiki. The     --
-- module can also use the corresponding subject namespace value if it is     --
-- used on a talk page. Parameter names can be configured for different wikis --
-- by altering the values in the "cfg" table in                               --
-- Modulo:Panagduktal ti nagan ti espasio/pannakaaramid.                                            --
--                                                                            --
--------------------------------------------------------------------------------
--]]

local data = mw.loadData('Modulo:Panagduktal ti nagan ti espasio/datos')
local argKeys = data.argKeys
local cfg = data.cfg
local mappings = data.mappings

local yesno = require('Modulo:Wensaan')
local mArguments -- Lazily initialise Module:Arguments
local mTableTools -- Lazily initilalise Module:TableTools
local ustringLower = mw.ustring.lower

local p = {}

local function fetchValue(t1, t2)
	-- Fetches a value from the table t1 for the first key in array t2 where
	-- a non-nil value of t1 exists.
	for i, key in ipairs(t2) do
		local value = t1[key]
		if value ~= nil then
			return value
		end
	end
	return nil
end

local function equalsArrayValue(t, value)
	-- Returns true if value equals a value in the array t. Otherwise
	-- returns false.
	for i, arrayValue in ipairs(t) do
		if value == arrayValue then
			return true
		end
	end
	return false
end

function p.getPageObject(page)
	-- Get the page object, passing the function through pcall in case of
	-- errors, e.g. being over the expensive function count limit.
	if page then
		local success, pageObject = pcall(mw.title.new, page)
		if success then
			return pageObject
		else
			return nil
		end
	else
		return mw.title.getCurrentTitle()
	end
end

-- Provided for backward compatibility with other modules
function p.getParamMappings()
	return mappings
end

local function getNamespace(args)
	-- This function gets the namespace name from the page object.
	local page = fetchValue(args, argKeys.demopage)
	if page == '' then
		page = nil
	end
	local demospace = fetchValue(args, argKeys.demospace)
	if demospace == '' then
		demospace = nil
	end
	local subjectns = fetchValue(args, argKeys.subjectns)
	local ret
	if demospace then
		-- Handle "demospace = main" properly.
		if equalsArrayValue(argKeys.main, ustringLower(demospace)) then
			ret = mw.site.namespaces[0].name
		else
			ret = demospace
		end
	else
		local pageObject = p.getPageObject(page)
		if pageObject then
			if pageObject.isTalkPage then
				-- Get the subject namespace if the option is set,
				-- otherwise use "talk".
				if yesno(subjectns) then
					ret = mw.site.namespaces[pageObject.namespace].subject.name
				else
					ret = 'talk'
				end
			else
				ret = pageObject.nsText
			end
		else
			return nil -- return nil if the page object doesn't exist.
		end
	end
	ret = ret:gsub('_', ' ')
	return ustringLower(ret)
end

function p._main(args)
	-- Check the parameters stored in the mappings table for any matches.
	local namespace = getNamespace(args) or 'other' -- "other" avoids nil table keys
	local params = mappings[namespace] or {}
	local ret = fetchValue(args, params)
	--[[
	-- If there were no matches, return parameters for other namespaces.
	-- This happens if there was no text specified for the namespace that
	-- was detected or if the demospace parameter is not a valid
	-- namespace. Note that the parameter for the detected namespace must be
	-- completely absent for this to happen, not merely blank.
	--]]
	if ret == nil then
		ret = fetchValue(args, argKeys.other)
	end
	return ret
end

function p.main(frame)
	mArguments = require('Modulo:Dagiti argumento')
	local args = mArguments.getArgs(frame, {removeBlanks = false})
	local ret = p._main(args)
	return ret or ''
end

function p.table(frame)
	--[[
	-- Create a wikitable of all subject namespace parameters, for
	-- documentation purposes. The talk parameter is optional, in case it
	-- needs to be excluded in the documentation.
	--]]
	
	-- Load modules and initialise variables.
	mTableTools = require('Modulo:Ramramit ti tabla')
	local namespaces = mw.site.namespaces
	local cfg = data.cfg
	local useTalk = type(frame) == 'table' 
		and type(frame.args) == 'table' 
		and yesno(frame.args.talk) -- Whether to use the talk parameter.
	
	-- Get the header names.
	local function checkValue(value, default)
		if type(value) == 'string' then
			return value
		else
			return default
		end
	end
	local nsHeader = checkValue(cfg.wikitableNamespaceHeader, 'Namespace')
	local aliasesHeader = checkValue(cfg.wikitableAliasesHeader, 'Aliases')

	-- Put the namespaces in order.
	local mappingsOrdered = {}
	for nsname, params in pairs(mappings) do
		if useTalk or nsname ~= 'talk' then
			local nsid = namespaces[nsname].id
			-- Add 1, as the array must start with 1; nsid 0 would be lost otherwise.
			nsid = nsid + 1 
			mappingsOrdered[nsid] = params
		end
	end
	mappingsOrdered = mTableTools.compressSparseArray(mappingsOrdered)

	-- Build the table.
	local ret = '{| class="wikitable"'
		.. '\n|-'
		.. '\n! ' .. nsHeader
		.. '\n! ' .. aliasesHeader
	for i, params in ipairs(mappingsOrdered) do
		for j, param in ipairs(params) do
			if j == 1 then
				ret = ret .. '\n|-'
					.. '\n| <code>' .. param .. '</code>'
					.. '\n| '
			elseif j == 2 then
				ret = ret .. '<code>' .. param .. '</code>'
			else
				ret = ret .. ', <code>' .. param .. '</code>'
			end
		end
	end
	ret = ret .. '\n|-'
		.. '\n|}'
	return ret
end

return p