Modul:Pritoci

Izvor: Wikipedija
Dokumentacija modula[vidi] [uredi] [povijest] [osvježi]
{{#invoke:pritoci|Tok|Biđ}}
Bosut Sava Dunav Crno more
{{#invoke:pritoci|Pritoci|Sava}}
Bosut · Glogovica · Krapina · Kupa · Kutina · Lateralni kanal · Lonja-Trebež


{{#invoke:pritoci|Tok|Belaja (Kama)}}
Nižnjekamsko umjetno jezero Kama Volga Kaspijsko jezero
{{#invoke:pritoci|Pritoci|Belaja (Kama)}}
Aškadar · Bir · Čermasan · Karmasan · Sjun · Tanyp · Ufa · Uršak · Zigan · Zilim


local utjece = mw.loadData( 'Module:Pritoci/podatci' )

--------------------------------------------------------------------------------

local p = {}

local prikaz = {}
function prikaz.D(x)
  return '<span title="desni pritok">⤴ '..x..' </span>'
end

function prikaz.L(x)
  return '<span title="lijevi pritok">⤵ '..x..' </span>'
end

function prikaz.U(x) --rijeka se ulijeva u more ili jezero
  return '<span title="ulijeva se u">→ '..x..' </span>'
end

function prikaz.O(x) --jezero otječe u rijeku
  return '<span title="otječe u">↦ '..x..' </span>'
end

function prikaz.poveznica(voda)
	local tekst, nsub = voda:gsub(' %b()', '')
	if nsub>0 then
		return '[['.. voda .. '|' .. tekst .. ']]' 
	else 
		return '[[' .. voda .. ']]' 
	end
end

function p.tok(x) --tok voda rijeke x
    local za_ispis = {}
    while utjece[x] do
    	local smjer, voda = utjece[x][1], utjece[x][2]
    	local prikaz_smjera = prikaz[ smjer ]
    	if type(voda)=='string' and type(prikaz_smjera)=='function' then
        	table.insert(za_ispis, prikaz_smjera( prikaz.poveznica(voda) ))
        	x = voda
        else
        	break --ili return "[[Kategorija:...]]"
        end
    end
    return table.concat(za_ispis)
end

local function comp(a,b) --za table.sort
	local repl = {["Č"]="C~", ["Ć"]="C~~", ["Đ"]="D~", ["Š"]="S~", ["Ž"]="Z~", 
		          ["č"]="c~", ["ć"]="c~~", ["đ"]="d~", ["š"]="s~", ["ž"]="z~",
	}
	return mw.ustring.gsub(a, "[ČĆĐŠŽčćđšž]", repl) < mw.ustring.gsub(b, "[ČĆĐŠŽčćđšž]", repl)
end

function p.pritoci(x) --svi pritoci dane rijeke pronađeni u 'bazi' Modul:Pritoci/podatci
	local nadjeni_pritoci = {}
	for k, v in pairs(utjece) do
		if v[2] == x then
			table.insert( nadjeni_pritoci, prikaz.poveznica(k) )
		end
	end
    table.sort(nadjeni_pritoci, comp)
    return table.concat(nadjeni_pritoci, " · ")
end

function p.Tok(frame) --za pozivanje iz predložaka
	voda = frame.args[1] or frame:getParent().args[1] or ""
	return p.tok(voda)
end

function p.Pritoci(frame) --za pozivanje iz predložaka
	voda = frame.args[1] or frame:getParent().args[1] or ""
	return p.pritoci(voda)
end

function p.svi_podatci() --pomoćna funkcija, ispisuje sve rijeke/vode iz 'baze' Modul:Pritoci/podatci
	local abecedno = {}
	for k, _ in pairs(utjece) do
		--slijedi računski skupa operacija, zaustavlja se nakon 500 pretraga pa ju je bolje ne koristiti
		--if not mw.title.new(k).exists then mw.log( "[["..k.."]]" ) end
		--zato:
		table.insert(abecedno, "[[" .. k .. "]]")
	end
	table.sort(abecedno, comp)
	return table.concat(abecedno, " · ")
end

return p