Modul:Smiles: razlika između inačica
Prijeđi na navigaciju
Prijeđi na pretraživanje
Stvorena nova stranica sa sadržajem: »local p = {} -- Glavna funkcija function p.render(frame) local args = frame:getParent().args local smiles = args[1] or args.smiles or "" -- Ako nema SMILES stringa if smiles == "" then return '<span class="error">[SMILES nije naveden]</span>' end -- HTML output local html = mw.html.create("div") :addClass("mw-smiles") :attr("data-smiles", smiles) return tostring(html) end return p«. |
mNema sažetka uređivanja |
||
| Nije prikazano 6 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) | ||
local args = frame:getParent().args | local args = frame.args | ||
local smiles = args[1] or args.smiles or "" | 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 | |||
if smiles | return '[Neispravan SMILES: ' .. smiles .. ']' .. | ||
return ' | '[[Kategorija:Stranice s neispravnim SMILES zapisima]]' | ||
end | end | ||
local html = mw.html.create("div") | local html = mw.html.create("div") | ||
:addClass("mw-smiles") | :addClass("mw-smiles") | ||
:attr("data-smiles", 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) | return tostring(html) | ||
Posljednja izmjena od 20. svibanj 2026. u 12:43
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