Moduuli:Kielilinkki/hiekkalaatikko
Moduulin Kielilinkki/hiekkalaatikko käyttöohje [näytä tämä käyttöohje omalla sivullaan] [muokkaa tätä käyttöohjetta] [päivitä] [testit] [hiekkalaatikko]
Kielilinkki-moduulin hiekkalaatikko. Testaa muutoksia tässä ennen kuin muutat varsinaista moduulia!
--- Moduuli linkkien tekemiseksi tietyn kielen osioon ja linkkitekstin tyylin merkkaukseen.
local p = {}
local kielikoodit = require("Moduuli:kielikoodit")
local kjdata = require("Moduuli:Kirjoitusjärjestelmät")
local autolink = require("Moduuli:Automaattilinkki")
local apu = require("Moduuli:Mallinetyokalut")
local function teksti(parametrit)
local lgsc = parametrit["kieli"]
local text = parametrit["teksti"]
assert ( lgsc, "Pakollinen kieliparametri puuttuu!" )
assert ( text, "Pakollinen tekstiparametri puuttuu!" )
local lang, script = kjdata.avaaKielikoodi(lgsc)
if not script then
script = kjdata.yleinenKirjoitusjarjestelma(lang)
end
local span = mw.html.create(parametrit["elem"] or "span")
:addClass(script)
:wikitext(text)
if lang then
span:attr('lang', lang)
end
if parametrit["class"] then
span:addClass(parametrit["class"])
end
-- Linkin kohteen kuvailutiedot. Kuvaus on samall myös artikkelipohjan nimi.
if parametrit["kuvaus"] then
span:attr('data-kuvaus', parametrit["kuvaus"])
-- Artikkelipohjan parametrit.
if parametrit["kuvaus-param"] then
span:attr('data-kuvaus-param', mw.text.encode(mw.text.jsonEncode(parametrit["kuvaus-param"])))
end
end
return tostring(span)
end
local function linkki(parametrit)
local lgsc = parametrit.kieli
local link = parametrit.kohde
local text = parametrit.teksti
assert ( lgsc, "Pakollinen kieliparametri puuttuu!" )
assert ( link, "Pakollinen linkkiparametri puuttuu!" )
if parametrit["autolinkki"] then
if not text then
text = link
end
link = autolink.muuta(lgsc, link)
end
local lang, _ = kjdata.avaaKielikoodi(lgsc)
if not lang then
lang = lgsc
end
-- Otsikko johon linkataan.
local otsikko = kielikoodit.kieliotsikko(lang)
if lang == "kans" then
otsikko = "Kansainvälinen"
end
parametrit["class"] = parametrit["class"] or "linkki"
if text and otsikko then
parametrit.teksti = "[[" .. link .. "#" .. otsikko .. "|" .. text .. "]]"
elseif not text and otsikko then
parametrit.teksti = "[[" .. link .. "#" .. otsikko .. "|" .. link .. "]]"
elseif text and not otsikko then
parametrit.teksti = "[[" .. link .. "|" .. text .. "]]"
else -- if not text and not otsikko then
parametrit.teksti = "[[" .. link .. "]]"
end
return teksti(parametrit)
end
--- Tekee kielen tyylillä (fonttikoolla) varustetun linkin kieliotsikkoon.
--
-- Funktiota voi kutsua kahdella tapaa:
-- 1. yksinkertaisen linkin voi tehdä paikkaparametreilla
-- linkki(kieli, linkki, teksti)
-- tai 2. nimetyillä parametreilla
-- linkki{ kieli, linkki, teksti, elem, class, kuvaus, kuvaus-param }
--
-- @param kieli: kielikoodi (+ mahdollinen kirjoitusjärjestelmä), esim. "en" tai "sr-Cyrl"
-- @param linkki: linkin kohde (ja linkkiteksti, jos text-parametria ei anneta).
-- @param teksti: valinnainen linkin teksti
-- @param elem: html-elementti, johon teksti tulee (oletus "span")
-- @param class: html:n class-attribuutti elementille (oletus "linkki")
-- @param kuvaus: artikkelipohjan nimi
-- @param kuvaus-param: (taulukko) artikkelipohjan parametrit
-- @return: linkki tekstinä
function p.linkki(eka, link, text)
local parametrit
if type(eka) == "table" then
assert ( link == nil and text == nil )
parametrit = eka
else
parametrit = {}
parametrit["kieli"] = eka
parametrit["kohde"] = link
parametrit["teksti"] = text
end
return linkki(parametrit)
end
--- Tekee kielen tyylillä (fonttikoolla) varustetun linkin kieliotsikkoon.
-- VANHENTUNUT
-- @param lang: kielikoodi (+ mahdollinen kirjoitusjärjestelmä), esim. "en" tai "sr-Cyrl"
-- @param link: linkin kohde (ja linkkiteksti, jos text-parametria ei anneta).
-- @param text: valinnainen linkin teksti
-- @param lisaparametrit: parametrit, joilla voi vaikuttaa tekstin tulostukseen:
-- ["elem"] = html-elementti, johon teksti tulee (oletus "span")
-- ["class"] = html:n class-attribuutti elementille (oletus "linkki")
-- @return: linkki tekstinä
function p.linkki_vanha(lgsc, link, text, lisaparametrit)
lisaparametrit = lisaparametrit or {}
lisaparametrit["kieli"] = lgsc
lisaparametrit["kohde"] = link
lisaparametrit["teksti"] = text
return linkki(lisaparametrit)
end
-- Muuten sama kuin p.linkki, mutta ei anna virhettä, jos linkin kohdetta ei ole annettu,
-- vaan palauttaa nil. Käyttö on yksinkertaisempaa sanarivimoduuleissa.
function p.linkki_tai_nil(eka, link, text)
local parametrit
if type(eka) == "table" then
parametrit = eka
else
parametrit = {}
parametrit["kieli"] = eka
parametrit["kohde"] = link
parametrit["teksti"] = text
end
if parametrit["kohde"] == nil or parametrit["kohde"] == "" then
return nil
end
return linkki(parametrit)
end
-- Muuten sama kuin p.linkki_vanha, mutta ei anna virhettä, jos linkkiä ei ole annettu,
-- vaan palauttaa nil. Käyttö on yksinkertaisempaa tietyissä yhteyksissä.
-- VANHENTUNUT
function p.linkki_tai_nil_vanha(lgsc, link, text, lisaparametrit)
if link == nil or link == "" then
return nil
end
return p.linkki(lgsc, link, text, lisaparametrit)
end
function p.Linkki(frame)
if frame.args.frame == 'parent' then
frame = frame:getParent()
end
local args = frame.args
-- Oletuksena on suomi ja nykyinen sivu, kuten l-mallineessa alunperin.
args.kieli = apu.ensimmainen_ei_tyhja{ args.kieli, args[1], "fi" }
args.kohde = apu.ensimmainen_ei_tyhja{ args.kohde, args[2], mw.title.getCurrentTitle().fullText }
args.teksti = apu.ensimmainen_ei_tyhja{ args.teksti, args[3] }
-- Muutetaan numeroidut kuvaus-param-parametrit taulukoksi.
local args_t = apu.numeroidut_parametrit(frame.args, { "kuvaus-param-" })
args["kuvaus-param"] = args_t["kuvaus-param-"]
return p.linkki(args)
end
--- Tekee kielen tyylillä (fonttikoolla) varustetun tekstipätkän.
--
-- Funktiota voi kutsua kahdella tapaa:
-- 1. yksinkertaisen linkin voi tehdä paikkaparametreilla
-- linkki(kieli, linkki, teksti)
-- tai 2. nimetyillä parametreilla
-- linkki{ kieli, linkki, teksti, elem, class, kuvaus, kuvaus-param }
--
-- @param kieli: kielikoodi (+ mahdollinen kirjoitusjärjestelmä), esim. "en" tai "sr-Cyrl"
-- @param teksti: valinnainen linkin teksti
-- @param elem: html-elementti, johon teksti tulee (oletus "span")
-- @param class: html:n class-attribuutti elementille (oletus "linkki")
-- @param kuvaus: artikkelipohjan nimi
-- @param kuvaus-param: (taulukko) artikkelipohjan parametrit
-- @return: linkki tekstinä
function p.teksti(eka, text)
local parametrit
if type(eka) == "table" then
assert ( text == nil, "Virheelliset parametrit" )
parametrit = eka
else
parametrit = {}
parametrit["kieli"] = eka
parametrit["teksti"] = text
end
return teksti(parametrit)
end
--- Tekee kielen tyylillä (fonttikoolla) varustetun tekstipätkän.
-- VANHENTUNUT
-- @param lang: kielikoodi
-- @param text: tekstipätkä annetulla kielellä
-- @param lisaparametrit: parametrit, joilla voi vaikuttaa tekstin tulostukseen:
-- ["elem"] = html-elementti, johon teksti tulee (oletus span)
-- ["class"] = html:n class-attribuutti elementille (oletus tyhjä)
-- @return: span-elementillä ympäröity teksti, jossa on kielen tyyli
function p.teksti_vanha(lgsc, text, lisaparametrit)
lisaparametrit = lisaparametrit or {}
lisaparametrit["kieli"] = eka
lisaparametrit["teksti"] = text
return teksti(lisaparametrit)
end
function p.Teksti(frame)
if frame.args.frame == 'parent' then
frame = frame:getParent()
end
local args = frame.args
args.kieli = apu.ensimmainen_ei_tyhja{ args.kieli, args[1] }
args.teksti = apu.ensimmainen_ei_tyhja{ args.teksti, args[2] }
return p.teksti(args)
end
return p