Moduuli:Kirjaviite-testi
Siirry navigaatioon
Siirry hakuun
Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:Kirjaviite-testi/ohje
local p = {}
function p.kirjaviite(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
local content = {}
local categories = {}
local frame = frame -- Määritellään frame paikallisena muuttujana
-- Apufunktio puuttuvien arvojen käsittelyyn
local function handleMissingValue(varName)
-- Lisää punainen lihavoitu teksti
local missingText = "{{{" .. varName .. "}}}"
-- Lisää seurantaluokka
table.insert(categories, '[[Luokka:' .. varName .. '-parametri puuttuu]]')
return missingText
end
-- Tekijä
if args['Tekijä'] and args['Tekijä'] ~= '' then
table.insert(content, args['Tekijä'] .. ': ')
else
local missingTekija = handleMissingValue('Tekijä')
table.insert(content, missingTekija .. ': ')
end
-- Kappale
if args['Kappale'] and args['Kappale'] ~= '' then
table.insert(content, '”' .. args['Kappale'] .. '”, ')
elseif args['Kappale'] == '' then
local missingKappale = handleMissingValue('Kappale')
table.insert(content, '”' .. missingKappale .. '”, ')
end
-- Luku
if args['Luku'] and args['Luku'] ~= '' then
table.insert(content, '”' .. args['Luku'] .. '”, ')
elseif args['Luku'] == '' then
local missingLuku = handleMissingValue('Luku')
table.insert(content, '”' .. missingLuku .. '”, ')
end
-- Nimeke tai Nimike
local nimeke = args['Nimeke'] or args['Nimike'] or ''
if nimeke ~= '' then
table.insert(content, "''" .. nimeke .. "''")
else
local missingNimeke = handleMissingValue('Nimeke')
table.insert(content, "''" .. missingNimeke .. "''")
end
-- Sivut tai Sivu
local lopetusmerkki = args['Lopetusmerkki']
local sivut = args['Sivut']
local sivu = args['Sivu']
local palstat = args['Palstat']
local palsta = args['Palsta']
local separator = ','
if lopetusmerkki == 'pois' then
separator = ' '
end
if sivut and sivut ~= '' then
table.insert(content, separator .. ' s. ' .. sivut .. '.')
elseif sivu and sivu ~= '' then
table.insert(content, separator .. ' s. ' .. sivu .. '.')
else
-- Jos sivut ja sivu puuttuvat
if lopetusmerkki ~= 'pois' then
if (palstat and palstat ~= '') or (palsta and palsta ~= '') then
table.insert(content, ',')
else
table.insert(content, '.')
end
end
end
-- Palstat tai Palsta
if palstat and palstat ~= '' then
table.insert(content, ' palstat ' .. palstat .. '.')
elseif palsta and palsta ~= '' then
table.insert(content, ' palsta ' .. palsta .. '.')
end
-- Selite
if args['Selite'] and args['Selite'] ~= '' then
table.insert(content, ' ' .. args['Selite'] .. '.')
elseif args['Selite'] == '' then
local missingSelite = handleMissingValue('Selite')
table.insert(content, ' ' .. missingSelite .. '.')
end
-- Suomentaja
if args['Suomentaja'] and args['Suomentaja'] ~= '' then
table.insert(content, ' Suomentanut ' .. args['Suomentaja'] .. '.')
table.insert(categories, '[[Luokka:Suomentaja-parametria käyttävät viitteet]]')
elseif args['Suomentaja'] == '' then
local missingSuomentaja = handleMissingValue('Suomentaja')
table.insert(content, ' ' .. missingSuomentaja .. '.')
end
-- Julkaisupaikka
if args['Julkaisupaikka'] and args['Julkaisupaikka'] ~= '' and args['Julkaisupaikka'] ~= '-' then
table.insert(content, ' ' .. args['Julkaisupaikka'] .. ': ')
elseif args['Julkaisupaikka'] == '' then
local missingJulkaisupaikka = handleMissingValue('Julkaisupaikka')
table.insert(content, ' ' .. missingJulkaisupaikka .. ': ')
end
-- Julkaisija
if args['Julkaisija'] and args['Julkaisija'] ~= '' then
table.insert(content, args['Julkaisija'])
else
local missingJulkaisija = handleMissingValue('Julkaisija')
table.insert(content, missingJulkaisija)
end
-- Vuosi
if args['Vuosi'] and args['Vuosi'] ~= '' then
table.insert(content, ', ' .. args['Vuosi'])
else
local missingVuosi = handleMissingValue('Vuosi')
table.insert(content, ', ' .. missingVuosi)
end
table.insert(content, '.')
-- Tunniste
if args['Tunniste'] and args['Tunniste'] ~= '' then
table.insert(content, ' ' .. args['Tunniste'] .. '.')
elseif args['Tunniste'] == '' then
local missingTunniste = handleMissingValue('Tunniste')
table.insert(content, ' ' .. missingTunniste .. '.')
end
-- ISBN
local isbn = args['Isbn'] or args['ISBN']
if isbn and isbn ~= '' then
table.insert(content, ' ISBN ' .. isbn .. '.')
elseif args['Isbn'] == '' or args['ISBN'] == '' then
local missingISBN = handleMissingValue('ISBN')
table.insert(content, ' ' .. missingISBN .. '.')
end
-- www-linkki
local www = args['www']
if www and www ~= '' and not www:match('^https://www%.wikidata%.org/wiki/') then
local www_teksti = args['www-teksti'] or 'Teoksen verkkoversio'
local link = '[' .. www .. ' ' .. www_teksti .. ']'
table.insert(content, ' ' .. link)
-- Tiedostomuoto
if args['Tiedostomuoto'] and args['Tiedostomuoto'] ~= '' then
table.insert(content, ' <small>(' .. args['Tiedostomuoto'] .. ')</small>')
elseif args['Tiedostomuoto'] == '' then
local missingTiedostomuoto = handleMissingValue('Tiedostomuoto')
table.insert(content, ' <small>(' .. missingTiedostomuoto .. ')</small>')
end
-- Viitattu tai Luettu
local viitattu = args['Viitattu'] or args['Luettu']
if viitattu and viitattu ~= '' then
-- Käytetään frame:expandTemplate laajentamaan Kotoista_päiväys-malline
local date_template = frame:expandTemplate{ title = 'Kotoista_päiväys', args = { viitattu } }
table.insert(content, ' (viitattu ' .. date_template .. ').')
else
local missingViitattu = handleMissingValue('Viitattu')
table.insert(content, ' (' .. missingViitattu .. ').')
end
elseif www == '' then
local missingWww = handleMissingValue('www')
table.insert(content, ' ' .. missingWww)
end
-- OCLC
if args['Oclc'] and args['Oclc'] ~= '' and args['Oclc'] ~= '-' then
-- Laajennetaan OCLC-malline
local oclc_template = frame:expandTemplate{ title = 'OCLC', args = { args['Oclc'] } }
table.insert(content, ' ' .. oclc_template .. '. ')
elseif args['Oclc'] == '' then
local missingOclc = handleMissingValue('Oclc')
table.insert(content, ' ' .. missingOclc .. '. ')
end
-- DOI
if args['Doi'] and args['Doi'] ~= '' and args['Doi'] ~= '-' then
-- Laajennetaan doi-malline
local doi_template = frame:expandTemplate{ title = 'doi', args = { args['Doi'] } }
table.insert(content, ' ' .. doi_template .. '. ')
elseif args['Doi'] == '' then
local missingDoi = handleMissingValue('Doi')
table.insert(content, ' ' .. missingDoi .. '. ')
end
-- Kieli
if args['Kieli'] and args['Kieli'] ~= '' and args['Kieli'] ~= '-' then
table.insert(content, ' ' .. args['Kieli'])
elseif args['Kieli'] == '' then
local missingKieli = handleMissingValue('Kieli')
table.insert(content, ' ' .. missingKieli)
end
-- Luo span-elementti
local span = mw.html.create('span')
span
:addClass('kirjaviite')
:attr('title', 'Kirjaviite')
:wikitext(table.concat(content))
-- Lisää puuttuvien parametrien luokat (jo lisätty aiemmin)
-- Palautetaan tuloste ja luokat
return tostring(span) .. table.concat(categories)
end
return p