Modul:Tablica
Lua pogreška: expandTemplate: template loop detected.
Modul:Tablica
Modul:Tablica je napredni Lua modul za generiranje tablica na Hrvatskoj internetskoj enciklopediji. Podržava više načina rada, automatsko formatiranje, sortiranje, bojanje i responzivni prikaz.
Modul se koristi putem predloška Predložak:Tablica ili izravno s Script error: The function "..." does not exist..
Funkcionalnosti
Modul omogućuje:
- generiranje tablica iz Lua podataka
- generiranje tablica iz parametara predloška (r1c1, r2c3…)
- parsiranje klasične wikitable sintakse
- generiranje tablica iz JSON podataka
- automatsko bojanje redova (zebra striping)
- automatsko bojanje stupaca (kombinacija automatski + ručno)
- hover efekti (red + stupac + ćelija)
- pametno sortiranje:
- brojevi
- brojevi s razmacima (1 234)
- brojevi s točkama (1.234)
- decimale (1,23 i 1.23)
- postoci (%)
- valute (€, kn)
- vremena (HH:MM)
- svi hrvatski formati datuma
- ISO datumi
- godine
- responzivni prikaz za mobitele
Načini rada
Modul ima četiri glavne funkcije, birane parametrom mode=.
1) mode=simple – tablica iz Lua podataka
Generira tablicu iz unaprijed definiranog Lua niza.
{{Tablica|mode=simple}}
2) mode=args – tablica iz parametara predloška
Podaci se unose kao rXcY parametri.
{{Tablica
|mode=args
|r1c1=Ime |r1c2=Prezime |r1c3=Godina
|r2c1=Marko |r2c2=Ivić |r2c3=2020
|r3c1=Ana |r3c2=Horvat |r3c3=2021
}}
Ručno bojanje stupaca
|colorcols=1,3
3) mode=parse – parsiranje wikitable sintakse
Modul pretvara klasičnu wikitable sintaksu u naprednu tablicu.
{{Tablica|mode=parse}}
{| class="wikitable"
! Ime !! Prezime !! Godina
|-
| Marko || Ivić || 2020
|-
| Ana || Horvat || 2021
|}
4) mode=json – tablica iz JSON podataka
{{Tablica
|mode=json
|data={
"header":["Ime","Prezime","Godina"],
"rows":[
["Marko","Ivić","2020"],
["Ana","Horvat","2021"]
]
}
}}
Automatsko sortiranje
Modul automatski prepoznaje i sortira:
- brojeve (1, 1.234, 1 234, 1,23…)
- postotke (12%)
- valute (12 kn, 12 €, €12)
- vremena (12:30)
- datume:
- DD.MM.YYYY
- YYYY-MM-DD
- 1. siječnja 2020.
- YYYY
Sortiranje radi putem data-sort-value atributa.
Automatsko bojanje redova i stupaca
Redovi
- svaki drugi red automatski se boja (zebra striping)
Stupci
- automatski se boja svaki drugi stupac
- korisnik može ručno zadati stupce:
|colorcols=1,3,5
Hover efekti
Modul automatski dodaje:
- isticanje reda pod mišem
- isticanje stupca pod mišem
- isticanje ćelije pod mišem
Sve je implementirano putem inline CSS-a.
Responzivni prikaz
Sve tablice se automatski prikazuju u:
<div style="overflow-x:auto">
što omogućuje horizontalno pomicanje na mobitelima.
Korištenje izravno iz modula
{{#invoke:Tablica|simple}}
{{#invoke:Tablica|fromArgs}}
{{#invoke:Tablica|parse}}
{{#invoke:Tablica|json|data=...}}
Vidi još
-- Modul:Tablica
-- Univerzalni modul za generiranje tablica na enciklopedija.cc
-- Podržava:
-- 1) Lua tablice
-- 2) Argumente predloška (r1c1, r2c3…)
-- 3) Parsiranje wikitable sintakse
-- 4) JSON podatke
-- Stil tablica je ujednačen i lako prilagodljiv.
-- Koristenje - jednostavna
-- {{#invoke:Tablica|simple}}
-- Iz argumenata
-- {{#invoke:Tablica|fromArgs
-- |r1c1=Ime |r1c2=Prezime
-- |r2c1=Marko |r2c2=Ivić
-- }}
-- Tablica iz Wikitablice
-- {{#invoke:Tablica|parse}}
-- {| class="wikitable"
-- ! Ime !! Prezime
-- |-
-- | Marko || Ivić
-- |}
-- Tablica iz JSON
-- {{#invoke:Tablica|json
-- |data={
-- "header":["Ime","Prezime","Godina"],
-- "rows":[
-- ["Marko","Ivić","2020"],
-- ["Ana","Horvat","2021"]
-- ]
-- }
-- }}
local p = {}
function p.mainSwitch(frame)
local mode = frame.args.mode or frame:getParent().args.mode or ""
if mode == "simple" then
return p.simple(frame)
elseif mode == "args" then
return p.fromArgs(frame)
elseif mode == "parse" then
return p.parse(frame)
elseif mode == "json" then
return p.json(frame)
else
return "Greška: nepoznat način rada. Koristi mode=simple, args, parse ili json."
end
end
--------------------------------------------------------------------
-- GLOBALNI STIL TABLICA
--------------------------------------------------------------------
local function baseTable()
return mw.html.create("table")
:addClass("wikitable")
:addClass("sortable")
:css("width", "100%")
:css("text-align", "left")
end
--------------------------------------------------------------------
-- 1) TABLICA IZ LUA PODATAKA
--------------------------------------------------------------------
function p.simple(frame)
local data = {
{"Ime", "Prezime", "Godina"},
{"Marko", "Ivić", "2020"},
{"Ana", "Horvat", "2021"},
}
local html = baseTable()
for i, row in ipairs(data) do
local tr = html:tag("tr")
for _, cell in ipairs(row) do
tr:tag(i == 1 and "th" or "td"):wikitext(cell)
end
end
return tostring(html)
end
--------------------------------------------------------------------
-- 2) TABLICA IZ ARGUMENATA PREDLOŠKA
-- Sintaksa:
-- {{Tablica
-- |r1c1=Ime |r1c2=Prezime
-- |r2c1=Marko |r2c2=Ivić
-- }}
--------------------------------------------------------------------
function p.fromArgs(frame)
local args = frame:getParent().args
local html = baseTable()
local i = 1
while args["r"..i.."c1"] do
local tr = html:tag("tr")
local j = 1
while args["r"..i.."c"..j] do
local cell = args["r"..i.."c"..j]
tr:tag(i == 1 and "th" or "td"):wikitext(cell)
j = j + 1
end
i = i + 1
end
return tostring(html)
end
--------------------------------------------------------------------
-- 3) PARSER WIKITABLICA
-- Pretvara klasičnu wikitable sintaksu u HTML tablicu
--------------------------------------------------------------------
function p.parse(frame)
local text = frame:getParent():getContent()
local html = baseTable()
local currentRow = nil
for line in mw.text.gsplit(text, "\n") do
if line:match("^|%-") then
currentRow = html:tag("tr")
elseif line:match("^!%s*") then
currentRow = html:tag("tr")
for cell in mw.text.gsplit(line:gsub("^!%s*", ""), "!!") do
currentRow:tag("th"):wikitext(cell)
end
elseif line:match("^|%s*") then
currentRow = html:tag("tr")
for cell in mw.text.gsplit(line:gsub("^|%s*", ""), "||") do
currentRow:tag("td"):wikitext(cell)
end
end
end
return tostring(html)
end
--------------------------------------------------------------------
-- 4) TABLICA IZ JSON PODATAKA
-- Sintaksa:
-- {{#invoke:Tablica|json|data={...json...} }}
--------------------------------------------------------------------
function p.json(frame)
local raw = frame.args.data or frame:getParent().args.data
if not raw then
return "Greška: nedostaje JSON podatak."
end
local data = mw.text.jsonDecode(raw)
local html = baseTable()
-- header
if data.header then
local tr = html:tag("tr")
for _, h in ipairs(data.header) do
tr:tag("th"):wikitext(h)
end
end
-- rows
if data.rows then
for _, row in ipairs(data.rows) do
local tr = html:tag("tr")
for _, cell in ipairs(row) do
tr:tag("td"):wikitext(cell)
end
end
end
return tostring(html)
end
--------------------------------------------------------------------
-- 5) GLAVNI POZIV (fallback)
--------------------------------------------------------------------
function p.main(frame)
return "Modul:Tablica – dostupne funkcije: simple, fromArgs, parse, json."
end
return p