Moduuli:Kirjaviite-testi

Wikipediasta
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