Moduuli:Kuuntele
Siirry navigaatioon
Siirry hakuun
Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:Kuuntele/ohje
local p = {}
-- ei esitetä ohjetekstiä: teksti pitäisi näyttää vähintään kerran
-- mutta jos on muu painava syy ja vähennetään toistoa
local nohelptext = false
-- ei esitetä kuvaa soittimessa: oletuksena näkyy vasemmalla puolella
-- mutta jos esitetään muutoin se helpottaa mobiilisovelluksen toimintaa
local noimage = false
local function seurantaluokat(noFile, noName, notAvailable)
-- toistaiseksi vain yksi
local luokat = '[[Luokka:Ääninäytteelliset sivut]]'
if (noFile == true) then
luokat = luokat .. '[[Luokka:Ääninäytelaatikot ilman tiedostoja]]'
end
if (noName == true) then
luokat = luokat .. '[[Luokka:Ääninäytelaatikot ilman nimeä]]'
end
if (notAvailable == true) then
luokat = luokat .. '[[Luokka:Ääninäytelaatikon tiedosto ei ole saatavilla]]'
end
return luokat
end
-- soittimen aikajana
local function kappalelohko(tiedosto, nimi, leveys)
--local text1 = string.format('[[:File:%s|%s]]', filename, title)
--local text2 = string.format('[[File:%s|%spx|noicon]]', filename, leveys)
local text1 = '[[:File:' .. tiedosto ..'|' .. nimi ..']]'
local text2 = '[[File:' .. tiedosto .. '|' .. leveys .. 'px|noicon]]'
return text1 .. text2
end
-- kuvaileva teksti aikajanan alle
local function kuvauslohko(parent, teksti)
local desc = parent:tag('div')
:cssText('font-size:10pt;text-align:left;padding:0pt;padding-left:0pt;line-height:1.25em')
:wikitext(teksti)
end
-- soitin, jossa aikajana ja kuvaus yhdelle kappaleelle
local function soitinlohko(parent, tiedosto, nimi, kuvaus, leveys)
local alaluokka = 'listenlist'
if (noimage == true) then
alaluokka = 'listen-noimage'
end
if (tiedosto and nimi) then
local lista = parent:tag('div')
lista:addClass('medialist ' .. alaluokka)
:cssText('width:' .. leveys .. 'px;padding-top:0em;padding-bottom:0em;')
local entry = lista:tag('div')
:wikitext(
kappalelohko(tiedosto, nimi, leveys))
if (kuvaus) then
kuvauslohko(lista, kuvaus)
end
end
end
-- kaksoispisteet pisteeksi
-- TODO: kesto pitäisi esittää pisteellä eroteltuna, ei kaksoispisteellä..
-- katso saako sen jotenkin pakotettua soittimen parametreihin vai käyttääkö se aina itse haettua
local function korjaakesto(kesto)
if kesto == nil then
return nil
end
local tunnit, minuutit, sekunnit
-- Try to match times like "1:23:45".
tunnit, minuutit, sekunnit = kesto:match('^(%d+):(%d%d):(%d%d)$')
if tunnit and minuutit and sekunnit then
kesto = tunnit .. '.' .. minuutit .. '.' .. sekunnit
return kesto
end
-- The previous attempt didn't match. Try to match times like "1:23".
minuutit, sekunnit = kesto:match('^(%d?%d):(%d%d)$')
if minuutit and sekunnit then
-- allow minutes.seconds even if either is zero (it is used in some articles)
kesto = minuutit .. '.' .. sekunnit
return kesto
end
return kesto
end
local function rivinumero(args, field)
local maxnum = 0
for k, v in pairs(args) do
local num = tostring(k):match('^' .. field .. '([1-9]%d*)$')
if num then
local numero = tonumber(num)
if numero > maxnum then
maxnum = numero
end
end
end
return maxnum
end
function p._main(args)
-- ohjeteksti (pitäisi olla vähintään kerran sivulla mutta kerran laatikossa voi olla ok?)
if args['helpnote'] and args['helpnote'] == 'no' then
nohelptext = true
end
if args['eiohjetta'] and args['eiohjetta'] == 'kyllä' then
nohelptext = true
end
if args['eikuvaa'] and args['eikuvaa'] == 'kyllä' then
noimage = true
end
-- laske leveydet jos piilotetaan kuva
local leveys = 300
local leveysali = 265
if (args['leveys']) then
leveys = args['leveys']
if (args['leveysali']) then
leveysali = args['leveysali']
end
elseif (noimage == true) then
-- ei ole pakotettu leveyksiä ja ei esitetä kuvaa
leveys = 250
leveysali = 245
end
-- TODO: virheen tarkistus
--if (leveys < 250 or leveysali < 240) then
-- virhe: liian pieni laatikko -> soitin ei toimi oikein mobiiliversiossa
--end
-- vasen tai oikea reuna
-- TODO: keskitys ? vain jos upotetaan?
local sijoitus = 'right'
if (args['sijoitus']) then
if (args['sijoitus'] == 'vasen' or args['sijoitus'] == 'left') then
sijoitus = 'left'
end
if (args['sijoitus'] == 'oikea' or args['sijoitus'] == 'right') then
sijoitus = 'right'
end
end
local rivit = rivinumero(args, 'tiedosto')
-- laatikon tiedot
local rootnode = mw.html.create()
local margin
if (sijoitus == 'left') then
margin = 'margin:3px 1em 3px 0; padding: 0 2em 0 0;'
else
margin = 'margin:3px 0 3px 1em; padding: 0 2em 0 0;'
end
-- laatikon ulkokehys
local juuri = rootnode:tag('div')
:cssText('float:' .. sijoitus .. '; clear:' .. sijoitus .. '; border:1px solid #CCC; background:#FFF; width:' .. leveys .. 'px; '.. margin .. ';')
-- laatikon ylälaidan otsikko
if (args['otsikko']) then
local otsake = juuri:tag('div')
:cssText('font-weight:bold;padding-top:1em;padding-left:1em;margin-bottom:-0.5em;')
:wikitext(args['otsikko'])
end
-- jos ei ole tiedostoa tai numeroituja rivejä -> virhe -> näytetään laatikossa
if (not args['tiedosto'] and rivit == 0) then
local virheteksti = juuri:tag('span')
virheteksti:addClass('error')
:wikitext('Ei tiedostoa')
local laatikonteksti = tostring(rootnode)
return laatikonteksti .. seurantaluokat(true, false, false)
end
-- jos ei ole nimeä tai numeroituja rivejä -> virhe -> näytetään laatikossa
if (not args['nimi'] and rivit == 0) then
local virheteksti = juuri:tag('span')
virheteksti:addClass('error')
:wikitext('Ei nimeä')
local laatikonteksti = tostring(rootnode)
return laatikonteksti .. seurantaluokat(false, true, false)
end
-- TODO: tarkista yritetäänkö ulkoista linkkiä
-- -> virhe, ei sallita
--if (args['tiedosto'].substr('http:// ')) then
-- virhe: ei voida sallia ulkoisia linkkejä? vai voidaanko?
--end
-- numeroimaton kappale ja soitin
if (args['tiedosto'] and args['nimi']) then
soitinlohko(juuri, args['tiedosto'], args['nimi'], args['kuvaus'], leveysali)
end
-- numeroidut lisärivit
local rivinro = 1
while (rivinro <= rivit) do
local numero = tostring(rivinro)
if (args['tiedosto' .. numero] and args['nimi' .. numero]) then
soitinlohko(juuri, args['tiedosto' .. numero], args['nimi' .. numero], args['kuvaus' .. numero], leveysali)
end
-- TODO: jos vain jompikumpi annettu voi olla typo -> seurantaluokka
rivinro = rivinro +1
end
-- ohjeteksti
if (nohelptext == false) then
local helptext = juuri:tag('p')
:cssText('text-align:right;font-style:italic;font-size:10pt;line-height:1em;')
:wikitext('Äänitiedostojen [[Wikipedia:Ääni ja video|kuunteluohjeet]]')
end
local laatikonteksti = tostring(rootnode)
return laatikonteksti .. seurantaluokat(false, false, false)
end
function p.main(frame)
local origArgs
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
for k, v in pairs( frame.args ) do
origArgs = frame.args
break
end
else
origArgs = frame
end
local args = {}
for k, v in pairs(origArgs) do
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
return p