Modul:Senarai runut
Pendokumenan untuk modul ini boleh diciptakan di Modul:Senarai runut/doc
-- -------------------------------------------------------------------------- --
-- Senarai runut
--
-- Templat : {{Senarai runut}}
-- Versi : 1.0.3
-- Penulis : Jose Buelvas (Usuario:Iho jose)
-- Catatan : Pengekodan asal daripada Módulo:Lista de canciones di Wikipedia bahasa Sepanyol
-- -------------------------------------------------------------------------- --
-- Pemboleh ubah
local HtmlBuilder = require('Modul:HtmlBuilder')
local p = {}
local marco = {}
local raiz
local objeto
local infodisco
local args
-- Penyatuan
function union(t1, t2)
local vals = {}
for k, v in pairs(t1) do
vals[v] = true
end
for k, v in pairs(t2) do
vals[v] = true
end
local ret = {}
for k, v in pairs(vals) do
table.insert(ret, k)
end
return ret
end
-- Menyahpepijatan teg kosong
local function depuracion(contenido)
if contenido and contenido ~= '' then
return contenido
end
end
-- Dapatkan nombor dalam parameter {{{1}}}
local function obtenerNumero(prefijo)
local nums = {}
for k, v in pairs(args) do
local num = tostring(k):match('^' .. prefijo .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
-- Maklumat terdahulu
function informacion()
infodisco = raiz.wikitext()
if (args['semua_penulisan'] or args['all_writing']) then -- {{{semua_penulisan}}}
if args['semua_penulisan'] then infodisco.wikitext('Kesemua runut ditulis dan digubah oleh ' .. args.semua_penulisan .. '. ') end
if args['all_writing'] then infodisco.wikitext('Kesemua runut ditulis dan digubah oleh ' .. args.all_writing .. '. ') end
else
if (args['semua_lirik'] or args ['semua_seni_kata'] or args['all_lyrics']) then -- {{{semua_seni_kata}}}
if args['semua_lirik'] then infodisco.wikitext('Kesemua seni kata ditulis oleh ' .. args.semua_lirik) end
if args['semua_seni_kata'] then infodisco.wikitext('Kesemua seni kata ditulis oleh ' .. args.semua_seni_kata) end
if args['all_lyrics'] then infodisco.wikitext('Kesemua seni kata ditulis oleh ' .. args.all_lyrics) end
if not args['all_music'] and not args['semua_muzik'] then
infodisco.wikitext('.')
end
end
local compositor = ''
if args['all_music'] then
compositor = args['all_music']
elseif args['semua_muzik'] then
compositor = args['semua_muzik']
end
if args['all_music'] or args['semua_muzik'] then -- {{{semua_muzik}}}
if (args['semua_lirik'] or args ['semua_seni_kata'] or args['all_lyrics']) then -- Mengabungkan dua ayat dengan koma (,)
infodisco.wikitext(', kesemua muzik digubah oleh ' .. compositor .. '. ')
else
infodisco.wikitext('Kesemua muzik digubah oleh ' .. compositor .. '. ')
end
end
end
end
-- Tambahkan baris pada jadual kandungan sejagat
local function agregarPista(filaArgs)
-- Pemboleh ubah sejagat dalaman
local pista = objeto.tag('tr')
pista
.tag('td')
.cssText('padding-right: 10px; text-align: right; cursor: default; -webkit-user-select:none; -moz-user-select:none; background-color: ' .. filaArgs.bgcolor)
.wikitext(filaArgs.numero .. '.') -- Nombor runut ( 1.)
-- Tajuk runut dan catatan
local titulopista, notaspista
if filaArgs.titulo and filaArgs.titulo ~= '' then
titulopista = filaArgs.titulo
else
titulopista = "''Tiada tajuk''"
end
if filaArgs.notas and filaArgs.notas ~= '' then
notaspista = ' <span style="font-size: smaller; color: #555">(' .. filaArgs.notas .. ')</span> '
else
notaspista = ''
end
local nombrepista = pista.tag('td')
nombrepista
.cssText('text-align: left; background-color: ' .. filaArgs.bgcolor)
.wikitext('"' .. titulopista .. '"' .. notaspista)
-- Kredit seni kata
if args['lyrics_credits'] and args['lyrics_credits'] == 'yes' or args['kredit_lirik'] and args['kredit_lirik'] == 'ya' or args['kredit_seni_kata'] and args['kredit_seni_kata'] == 'ya' then
local letraspista = pista.tag('td')
letraspista
.cssText('background-color: ' .. filaArgs.bgcolor)
.wikitext(filaArgs.letraspor)
end
-- Kredit muzik
if args['music_credits'] and args['music_credits'] == 'yes' or args['kredit_muzik'] and args['kredit_muzik'] == 'ya' then
local musicapista = pista.tag('td')
musicapista
.cssText('background-color: ' .. filaArgs.bgcolor)
.wikitext(filaArgs.musicapor)
end
-- Kredit penulis
if args['writing_credits'] and args['writing_credits'] == 'yes' or args['kredit_penulisan'] and args['kredit_penulisan'] == 'ya' then
local escritopista = pista.tag('td')
escritopista
.cssText('background-color: ' .. filaArgs.bgcolor)
.wikitext(filaArgs.escritopor)
end
-- Lajur tambahan
if args['extra_column'] or args['lajur_tambahan'] then
local columnapista = pista.tag('td')
columnapista
.cssText('background-color: ' .. filaArgs.bgcolor)
.wikitext(filaArgs.extrapor)
end
-- Tempoh masa runut
local duracionpista = pista.tag('td')
duracionpista
.cssText('padding-right: 10px; text-align: right; background-color: ' .. filaArgs.bgcolor)
.wikitext(filaArgs.duracionpor)
end
-- Membuat tajuk jadual
local function titulosContenido()
if args['title'] or args['tajuk'] or args['tajuk_utama'] or args['headline'] then
local titulopadding = ''
if args['collapsed'] and args['collapsed'] == 'yes' or args['sorokkan'] and args['sorokkan'] == 'ya' then
titulopadding = 'padding: 2px 4px'
end
local encabezado = objeto.tag('tr')
encabezado
.tag('th')
.addClass('tlheader mbox-text')
.attr('colspan', 10)
.cssText('text-align: left; background-color: #fff; width: 100%; ' .. titulopadding)
.wikitext(args['title'] or args['tajuk'] or args['tajuk_utama'] or args['headline'])
local cel2 = encabezado.tag('td')
cel2.addClass('mbox-empty-cell')
else
if args['sorokkan'] and args['sorokkan'] == 'ya' or args['collapsed'] and args['collapsed'] == 'yes' then
local coloculto = objeto.tag('tr')
coloculto
.tag('th')
.addClass('tlheader mbox-text')
.attr('colspan', 10)
.cssText('text-align: left; background-color: #fff')
local cel3 = coloculto.tag('td')
cel3.addClass('mbox-empty-cell')
end
end
local estilopista, num, num2, num3, num4, totalnum, estilomore
num = 0
num2 = 0
num3 = 0
num4 = 0
if
args['lyrics_credits'] and args['lyrics_credits'] == 'yes' or args['kredit_lirik'] and args['kredit_lirik'] == 'ya' or args['kredit_seni_kata'] and args['kredit_seni_kata'] == 'ya' or
args['music_credits'] and args['music_credits'] == 'yes' or args['kredit_muzik'] and args['kredit_muzik'] == 'ya' or
args['writing_credits'] and args['writing_credits'] == 'yes' or args['kredit_penulisan'] and args['kredit_penulisan'] == 'ya' or
args['extra_column'] or args['lajur_tambahan']
then
if args['lyrics_credits'] and args['lyrics_credits'] == 'yes' or args['kredit_lirik'] and args['kredit_lirik'] == 'ya' or args['kredit_seni_kata'] and args['kredit_seni_kata'] == 'ya' then
num = 1
end
if args['music_credits'] and args['music_credits'] == 'yes' or args['kredit_muzik'] and args['kredit_muzik'] == 'ya' then
num2 = 1
end
if args['writing_credits'] and args['writing_credits'] == 'yes' or args['kredit_penulisan'] and args['kredit_penulisan'] == 'ya' then
num3 = 1
end
if args['extra_column'] or args['lajur_tambahan'] then
num4 = 1
end
-- Gaya
totalnum = num+num2+num3+num4
if totalnum == 1 then
estilopista = 'width: 60%'
estilomore = 'width: 40%'
elseif totalnum == 2 then
estilopista = 'width: 40%'
estilomore = 'width: 30%'
elseif totalnum == 3 then
estilopista = 'width: 30%'
estilomore = 'width: 20%'
elseif totalnum == 4 then
estilopista = 'width: 20%'
estilomore = 'width: 20%'
end
else
estilopista = 'width: 100%'
estilomore = ''
end
local titulares = objeto.tag('tr')
titulares
.tag('th')
.cssText('width: 20px; padding-left: 10px; padding-right: 10px; text-align: center; background-color: #eee; height: 20px')
.wikitext('No.') -- Nombor runut
local nombrepista = titulares.tag('th')
nombrepista
.cssText('text-align: left; background-color: #eee; ' .. estilopista)
.wikitext('Tajuk')
if args['lyrics_credits'] and args['lyrics_credits'] == 'yes' or args['kredit_lirik'] and args['kredit_lirik'] == 'ya' or args['kredit_seni_kata'] and args['kredit_seni_kata'] == 'ya' then
local letrista = titulares.tag('th')
letrista
.cssText('text-align: left; background-color: #eee; ' .. estilomore)
.wikitext('Seni kata')
end
if args['music_credits'] and args['music_credits'] == 'yes' or args['kredit_muzik'] and args['kredit_muzik'] == 'ya' then
local musicapista = titulares.tag('th')
musicapista
.cssText('text-align: left; background-color: #eee; ' .. estilomore)
.wikitext('Gubahan')
end
if args['writing_credits'] and args['writing_credits'] == 'yes' or args['kredit_penulisan'] and args['kredit_penulisan'] == 'ya' then
local escritorespista = titulares.tag('th')
escritorespista
.cssText('text-align: left; background-color: #eee; ' .. estilomore)
.wikitext('Penulis')
end
if args['extra_column'] or args['lajur_tambahan'] then
local columnaextra = titulares.tag('th')
columnaextra
.cssText('text-align: left; background-color: #eee; ' .. estilomore)
.wikitext(args['extra_column'] or args['lajur_tambahan'])
end
local duraciones = titulares.tag('th')
duraciones
.cssText('padding-right: 5px; width: 60px; text-align: center; background-color: #eee')
.wikitext('Masa')
local cel5 = titulares.tag('td')
cel5.addClass('mbox-empty-cell')
end
-- Membuat baris berturut-turut seperti yang ditulis
local function hacerLista()
-- Mengesan bahasa parameter (Melayu/Inggeris)
local numeroPista = union(obtenerNumero('tajuk'), obtenerNumero('title'))
table.sort(numeroPista)
for k, num in ipairs(numeroPista) do
-- Warna latar belakang baris (runut)
local colorfondo
if (num % 2) == 0 then
colorfondo = '#f7f7f7'
else
colorfondo = '#fff'
end
-- Menambahkan data mengikut parameter (dalam bahasa Melayu atau Inggeris)
agregarPista({
bgcolor = colorfondo,
numero = num,
titulo = depuracion(args['tajuk' .. num] or args['title' .. num]),
notas = depuracion(args['catatan' .. num] or args ['nota' .. num] or args['note' .. num]),
letraspor = depuracion(args['lirik' .. num] or args ['seni_kata' .. num] or args['lyrics' .. num]),
musicapor = depuracion(args['muzik' .. num] or args['music' .. num]),
escritopor = depuracion(args['penulis' .. num] or args['writer' .. num]),
extrapor = depuracion(args['extra' .. num] or args['tambahan' .. num]),
duracionpor = depuracion(args['masa' .. num] or args['length' .. num])
})
end
end
-- Jumlah masa
local function duracionTotal()
local duraciontotal = objeto.tag('tr')
if args['jumlah_masa'] or args['total_length'] then
duraciontotal
.tag('td')
.attr('colspan', 10)
.cssText('padding-right: 10px; text-align: right; background-color: #eee; border-width: 0; font-weight: bold')
.wikitext('Jumlah masa: ', args['jumlah_masa'] or args ['total_length'])
local cel8 = duraciontotal.tag('td')
cel8.addClass('mbox-empty-cell')
end
end
-- Menentusahkan bahasa parameter mempunyai data
function existenciaDatos(pista)
-- TRUE jika ia mempunyai data, FALSE secara lalai
if depuracion(pista[1]) or depuracion(pista['tajuk']) then
return true
end
return false
end
-- Membuat senarai runut di dalam jadual
function hacerListaTabla(tabla)
for k, pista in ipairs(tabla) do
if existenciaDatos(pista) then
agregarPista({
titulo = depuracion(pista['tajuk'] or pista['title']),
notas = depuracion(args['catatan'] or args['nota'] or args['note']),
letraspor = depuracion(args['lirik'] or args['seni_kata'] or args['lyrics']),
musicapor = depuracion(args['muzik'] or args['music']),
escritopor = depuracion(args['penulis'] or args['writer']),
extrapor = depuracion(args['extra'] or args['tambahan']),
duracionpor = depuracion(args['masa'] or args['length'])
})
end
end
end
-- Templat senarai runut
function _canciones()
--Pemboleh ubah
local ocultar, estilos
-- Syarat dalam _canciones
if args['sorokkan'] and args['sorokkan'] == 'ya' or args['collapsed'] and args['collapsed'] == 'yes' then
ocultar = 'collapsible collapsed'
estilos = 'border: #aaa 1px solid; padding: 3px; margin-bottom: .4em'
else
ocultar = ''
estilos = 'padding: 2px'
end
-- Pembina HtmlBuilder sejagat
raiz = HtmlBuilder.create()
-- Maklumat
informacion()
-- Mengandungi jadual
objeto = raiz.tag('table')
objeto
.addClass('tracklist ')
.addClass(ocultar)
.attr('cellpadding', 0)
.cssText('border-collapse: collapse; ' .. estilos)
-- Bahagian indeks
titulosContenido()
if not args[1] then
hacerLista()
else
hacerListaTabla(args)
end
duracionTotal()
-- Mengindeks semua dalam pemboleh ubah sejagat
return tostring(raiz)
end
-- Indeks
function p.main(frame)
local origArgs
marco = frame
-- Memanggil #invoke untuk penggunaan teg templat
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame
end
-- Untuk pasangan
args = {}
for k, v in pairs(origArgs) do
if v ~= '' then
args[k] = v
end
end
-- Templat indeks bagi senarai runut
return _canciones()
end
return p