Template:Cats

From About PCs Wiki
Jump to navigation Jump to search
edit · history · refresh · system messages · page info
The template Cats is hidden and visible only in embedding pages.

Template documentation edit · raw · history · refresh · page infos
This template documentation is included from Template:Cats/doc

The template {{Cats}} is an interface for Module Hili and invokes procedure cats. All unnamed parameters are considered as category name unless the are more than 50 characters long.

Parameter list

x
namedescriptiondefaultstatus
1,2,...all unnamed parameters are used as categoryemptyoptional

Copy&paste

{{Cats|1,2,...=}}

Application

{{Cats}}

Wikitext

<includeonly><onlyinclude>{{#invoke:Hili|cats}}</onlyinclude></includeonly>{{Documentation}}

Lua Module Hili

local p = {} -- p stands for package
local t = require('Module:Subroutines')

function p.hili(frame)
	-- Syntaxhighlighting von Lilypond-Code
	-- standardmäßig als Latex formatiert, weil es keine spezielle Lilypond-Syntax gibt
	
	local a = frame.args             -- Direktaufruf via invoke
	local b = frame:getParent().args -- Aufruf via Vorlage

	local mus = ''

	for k, v in pairs(a) do
		if string.lower(k) ~= "lang" and string.lower(k) ~= 'class' then -- damit kann der Parameter beliebig benannt werden, nur lang wird ausgenommen
			mus = v 
			break 
		end
	end
	for k, v in pairs(b) do
		if string.lower(k) ~= "lang" and string.lower(k) ~= 'class' then -- damit kann der Parameter beliebig benannt werden, nur lang wird ausgenommen
			mus = v 
			break 
		end
	end
	local _lang = a.lang or b.lang or 'lua'
	local _ = frame:extensionTag { name = 'syntaxhighlight', content = mus, args = { lang = _lang } }
	return _
end

function p.cats(frame)

	local a = frame.args              -- per #invoke: 
	local b = frame:getParent().args  -- per template
	
	local sort = a["sort"] or b["sort"] or ""
	if t.tidy(sort) then sort = "|" .. t.tidy(sort) end
	local katz,vv = '', ''
	
	for i,v in pairs(a) do  -- direkt per #invoke: übergeben
		vv=t.tidy(v)
		if type(i) == 'number' and vv and #v < 50 then
			katz = katz .. "[[Category:" .. vv .. sort .. "]]"
		end
	end	

	for i,v in pairs(b) do -- an die Vorlage übergebene Parameter
		vv=t.tidy(v)
		if type(i) == 'number' and vv and #v < 50 then
			katz = katz .. "[[Category:" .. vv .. sort .. "]]"
		end
	end

	return katz

end

function p.lenplus(frame)
	-- liefert die Länge eines Strings plus eine Zahl
	
	local a = frame:getParent().args  -- bei Aufruf über Vorlage ist :getParent(). erforderlich
	if empty(a) then a = mw.getCurrentFrame().args end
	
	local _len  = ''
	local _text = a.text or a[1] or ''
	local _add  = tonumber(a[2]) or 1 -- Standardwert ist 1
	local _tlen = #_text + _add       -- #x ist der Längenoperator für einen Text
	
	return _tlen or ''
end

function p.tag(frame)
	-- Tag Auswertungen per Lua
	-- funktionieren viel besser als per #tag: weil unempfindlicher gegen Sonderzeichen
	
	local a = frame.args              -- direkt per #invoke: übergeben
	local b = frame:getParent().args  -- an die Vorlage übergebene Parameter
	
	local tag = a.tag or a[2] or b.tag or b[2] or 'syntaxhighlight'  -- Tagname, benannter oder unbenannter 2. Parameter
	local content = a.content or a[1] or b.content or b[1] or ''         -- Taginhalt, entweder benannter oder unbenannter 1. Parameter
	
	local tagparms = { }
	local ausgabe = ''
	for k, v in pairs(a) do                         -- alle restlichen Parameter werden gesammelt und in die tagparms Tabelle übergeben
		if string.lower(k) ~= "tag" and string.lower(k) ~= 'content' and k ~= '1' and k ~= 1 and k ~= 2 and k ~= '2' then
			tagparms[k] = v
			ausgabe = ausgabe .. '<br>index: ' .. k .. '<br>inhalt: ' .. v    -- für Testzwecke
		end
	end
	for k, v in pairs(b) do                         -- alle restlichen Parameter werden gesammelt und in die tagparms Tabelle übergeben
		if string.lower(k) ~= "tag" and string.lower(k) ~= 'content' and k ~= '1' and k ~= 1 and k ~= 2 and k ~= '2' then
			tagparms[k] = v
			ausgabe = ausgabe .. '<br>index: ' .. k .. '<br>inhalt: ' .. v    -- für Testzwecke
		end
	end
	
	--return 'Parameter: ' .. ausgabe .. ' tag: ' .. tag .. ' conten: ' .. content
	return frame:extensionTag { name = tag, content = content, args = tagparms }

end

function trim(s)
  -- entfernt Weißraum an den beiden Enden des Strings
  if type(s) ~= 'string' then return s end  -- falls kein string
  return s:match("^%s*(.-)%s*$")
end

function empty (self)
	-- es gibt keine eingebaute Funktion, um zu überprüfen, ob eine Tabelle leer ist
	-- diese Funktion liefert true, wenn die Tabelle leer ist
	-- hilfreich bei frame.args oder frame:parent().args etc.
    for _, _ in pairs(self) do
        return false
    end
    return true
end

function gibts(name, namespace)
	-- liefert true, wenn die Wikiseite "name" im namespace "namespace" existiert
	-- default namespace ist main
	local name = name
	local space = namespace or ''
  
	if space ~= '' then space = space .. ':' end
  
	local titel = mw.title.new(space .. name)

	if titel.exists then return titel end
	return false
end

return p

Where is this template used?

What links here?

bottom