Modül:Daraltılabilir gruplu dolaşım

Modül belgelemesi[gör] [değiştir] [geçmiş] [temizle]
-- This module implements {{Daraltılabilir gruplu dolaşım}}
local q = {}
local Navbox = require('Modül:Dolaşım')

-- helper functions
local function concatstrings(s)
	local r = table.concat(s, '')
	if r:match('^%s*$') then r = nil end
	return r
end

local function concatstyles(s)
	local r = table.concat(s, ';')
	while r:match(';%s*;') do
		r = mw.ustring.gsub(r, ';%s*;', ';')
	end
	if r:match('^%s*;%s*$') then r = nil end
	return r
end

function q._navbox(pargs)
	-- table for args passed to navbox
	local targs = {}

	-- process args
	local passthrough = {
		['ad']=true,['dolçub']=true,['durum']=true,['kenar']=true,
		['gövdesınıfı']=true,['grupsınıfı']=true,['listesınıfı']=true,
		['biçim']=true,['gövdebiçimi']=true,['temelbiçim']=true,
		['başlık']=true,['başlıksınıfı']=true,['başlıkbiçimi']=true,
		['üst']=true,['üstsınıf']=true,['üstbiçim']=true,
		['alt']=true,['altsınıf']=true,['altbiçim']=true,
		['resim']=true,['resimsınıfı']=true,['resimbiçimi']=true,
		['resimsol']=true,['resimsolbiçimi']=true
	}
	for k,v in pairs(pargs) do
		if k and type(k) == 'string' then
			if passthrough[k] then
				targs[k] = v
			elseif k:match('^liste[0-9][0-9]*$')  then
				local n = mw.ustring.gsub(k, '^[a-z]*([0-9]*)$', '%1')
				if targs['liste' .. n] == nil and pargs['grup' .. n] == nil then
					targs['liste' .. n] = concatstrings(
						{pargs['liste' .. n] or ''})
				end
			elseif (k:match('^grup[0-9][0-9]*$') 
					or k:match('^seç[0-9][0-9]*$') ) then
				local n = mw.ustring.gsub(k, '^[a-z]*([0-9]*)$', '%1')
				if targs['liste' .. n] == nil then
					local titlestyle = concatstyles(
						{pargs['grupbiçimi'] or '',pargs['seçbaşlıkbiçimi'] or '', 
							pargs['grup' .. n .. 'biçimi'] or '', 
							pargs['seç' .. n ..'başlıkbiçimi'] or ''})
					local liststyle = concatstyles(
						{pargs['listebiçimi'] or '', pargs['liste' .. n .. 'biçimi'] or ''})
					local title = concatstrings(
						{pargs['grup' .. n] or '', pargs['seç' .. n] or ''})
					local list = concatstrings(
						{pargs['liste' .. n] or ''})
					local state = (pargs['kısaltma' .. n] and pargs['kısaltma' .. n] == pargs['seç']) 
						and 'uncollapsed' or pargs['durum' .. n] or 'collapsed'
					
					targs['liste' .. n] = Navbox._navbox(
						{'child', ["dolçub"] = 'sade', durum = state,
						["temelbiçim"] = pargs['temelbiçim'],
						["başlık"] = title, ["başlıkbiçimi"] = titlestyle,
						["liste1"] = list, ["listebiçimi"] = liststyle,
						["listesınıfı"] = pargs['liste' .. n .. 'sınıfı'],
						resim = pargs['resim' .. n],
						resimsol = pargs['resimsol' .. n],
						listedolgusu = pargs['listedolgusu']})
				end
			end
		end
	end
	-- ordering of style and bodystyle
	targs['biçim'] = concatstyles({targs['biçim'] or '', targs['gövdebiçimi'] or ''})
	targs['gövdebiçimi'] = nil
	
	-- child or subgroup
	if targs['kenar'] == nil then targs['kenar'] = pargs[1] end

	return Navbox._navbox(targs)
end

function q.navbox(frame)
	local pargs = require('Modül:Bağımsız değişkenler').getArgs(frame, {wrappers = {'Şablon:Daraltılabilir gruplu dolaşım'}})

	-- Read the arguments in the order they'll be output in, to make references number in the right order.
	local _
	_ = pargs["başlık"]
	_ = pargs["üst"]
	for i = 1, 20 do
		_ = pargs["grup" .. tostring(i)]
		_ = pargs["liste" .. tostring(i)]
	end
	_ = pargs.alt

	return q._navbox(pargs)
end

return q