Modul:Tablica

Izvor: Hrvatska internetska enciklopedija
Inačica 640314 od 12. siječanj 2026. u 11:12 koju je unio WikiSysop (razgovor | doprinosi) (Stvorena nova stranica sa sadržajem: »-- 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 Wikitab...«.)
(razl) ←Starija inačica | vidi trenutačnu inačicu (razl) | Novija inačica→ (razl)
Prijeđi na navigaciju Prijeđi na pretraživanje
Dokumentacija modula

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