Modul:Smiles: razlika između inačica

Izvor: Hrvatska internetska enciklopedija
Prijeđi na navigaciju Prijeđi na pretraživanje
mNema sažetka uređivanja
mNema sažetka uređivanja
 
Nije prikazano 5 međuinačica
Redak 1: Redak 1:
local p = {}
local p = {}
local function sanitize(v)
    if not v then return nil end
    v = mw.ustring.gsub(v, "[\226\128\139\194\160]", "")
    v = mw.text.trim(v)
    if v == "" then return nil end
    return v
end
-- jednostavna validacija SMILES-a
local function isValidSmiles(s)
    -- minimalna provjera: mora imati barem jedno slovo i ne smije imati razmake
    if mw.ustring.match(s, "%s") then return false end
    if not mw.ustring.match(s, "[A-Za-z]") then return false end
    return true
end


function p.render(frame)
function p.render(frame)
     -- 1) pokušaj uzeti pozicijski argument
    local args = frame.args
     local smiles = frame.args[1]
    local par  = frame:getParent() and frame:getParent().args or {}
 
     -- normalni slučajevi
     local smiles =
        sanitize(args[1]) or
        sanitize(args.smiles) or
        sanitize(par[1]) or
        sanitize(par.smiles)


     -- 2) ako nije tu, pokušaj imenovani parametar
     -- fallback: MediaWiki je SMILES razbio u "C1" = "CC=CC=C1"
     if not smiles or smiles == '' then
     if not smiles then
        smiles = frame.args.smiles
        -- provjeri frame.args
        for k, v in pairs(args) do
            if type(k) == "string" and mw.ustring.match(k, "^C%d") then
                smiles = k .. "=" .. v
            end
        end
        -- provjeri parent.args
        for k, v in pairs(par) do
            if type(k) == "string" and mw.ustring.match(k, "^C%d") then
                smiles = k .. "=" .. v
            end
        end
     end
     end


    -- 3) ako nije tu, pokušaj iz roditeljskog framea (predložak)
     if not smiles then
     if (not smiles or smiles == '') and frame:getParent() then
         return "[SMILES nije naveden]"
         smiles = frame:getParent().args[1] or frame:getParent().args.smiles
     end
     end


     -- 4) ako i dalje nema — prijavi grešku
     local size  = tonumber(args.size or par.size) or 260
     if not smiles or smiles == '' then
    local theme = (args.theme or par.theme or "light"):lower()
         return '[SMILES nije naveden]'
    local svg  = (args.svg or par.svg or ""):lower()
 
     if theme ~= "light" and theme ~= "dark" then
         theme = "light"
     end
     end


     -- 5) generiraj HTML
     if not isValidSmiles(smiles) then
     return string.format(
        return '[Neispravan SMILES: ' .. smiles .. ']' ..
         '<div class="mw-smiles" data-smiles="%s"></div>',
          '[[Kategorija:Stranice s neispravnim SMILES zapisima]]'
         mw.text.encode(smiles)
     end
     )
 
    local html = mw.html.create("div")
         :addClass("mw-smiles")
        :attr("data-smiles", smiles)
        :attr("data-size", size)
        :attr("data-theme", theme)
         :attr("data-svg", svg)
    html:tag("noscript")
      :wikitext("[[Datoteka:Smiles-fallback.png|200px]]")
 
     return tostring(html)
end
end


return p
return p

Posljednja izmjena od 20. svibanj 2026. u 12:43

Dokumentacija modula


local p = {}

local function sanitize(v)
    if not v then return nil end
    v = mw.ustring.gsub(v, "[\226\128\139\194\160]", "")
    v = mw.text.trim(v)
    if v == "" then return nil end
    return v
end

-- jednostavna validacija SMILES-a
local function isValidSmiles(s)
    -- minimalna provjera: mora imati barem jedno slovo i ne smije imati razmake
    if mw.ustring.match(s, "%s") then return false end
    if not mw.ustring.match(s, "[A-Za-z]") then return false end
    return true
end

function p.render(frame)
    local args = frame.args
    local par  = frame:getParent() and frame:getParent().args or {}

    -- normalni slučajevi
    local smiles =
        sanitize(args[1]) or
        sanitize(args.smiles) or
        sanitize(par[1]) or
        sanitize(par.smiles)

    -- fallback: MediaWiki je SMILES razbio u "C1" = "CC=CC=C1"
    if not smiles then
        -- provjeri frame.args
        for k, v in pairs(args) do
            if type(k) == "string" and mw.ustring.match(k, "^C%d") then
                smiles = k .. "=" .. v
            end
        end
        -- provjeri parent.args
        for k, v in pairs(par) do
            if type(k) == "string" and mw.ustring.match(k, "^C%d") then
                smiles = k .. "=" .. v
            end
        end
    end

    if not smiles then
        return "[SMILES nije naveden]"
    end

    local size  = tonumber(args.size or par.size) or 260
    local theme = (args.theme or par.theme or "light"):lower()
    local svg   = (args.svg or par.svg or ""):lower()

    if theme ~= "light" and theme ~= "dark" then
        theme = "light"
    end

    if not isValidSmiles(smiles) then
        return '[Neispravan SMILES: ' .. smiles .. ']' ..
           '[[Kategorija:Stranice s neispravnim SMILES zapisima]]'
    end

    local html = mw.html.create("div")
        :addClass("mw-smiles")
        :attr("data-smiles", smiles)
        :attr("data-size", size)
        :attr("data-theme", theme)
        :attr("data-svg", svg)
    html:tag("noscript")
       :wikitext("[[Datoteka:Smiles-fallback.png|200px]]")

    return tostring(html)
end

return p