Moduuli:Sidebar games events
Siirry navigaatioon
Siirry hakuun
[ muokkaa ] Tämä on en:Module:Sidebar games events -sivulta kopioitu moduuli ja siihen on tehty muutoksina pelkästään lokalisoinnit.
|
--
-- This module implements {{Sidebar games events}}
-- This module was created using code taken directly from [[Module:Sidebar]]
--
require('strict')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local tracking, preview = {}, {}
local function checkargs(args)
for k, v in pairs(args) do
if v ~= '' then
if k and type(k) == 'string' then
if k == 'laji' or k == 'kisat' or k == 'kisoissa' or k == 'nimi' or k == 'kuva' or
k == 'kuvaoikea' or k =='kuvateksti' or k =='ylateksti' or
k == 'otsikko' or k == 'alignresults' or k == 'alignevents' or
k == 'leveys' or k == 'maksimileveys' or k == 'float' or
k == 'alateksti' or k == 'edellinen' or k == 'seuraava' then
-- valid
elseif k:match('^otsikko%d+$') or k:match('^laji%d+$') or
k:match('^kuva%d+$') or k:match('^tyyppi%d+[a-e]$') or
k:match('^laji%d+%.%d+$') or
k:match('^tulokset%d+%.%d+[a-e]?$') or
k:match('^viiva%d+%.%d+$') then
-- valid
elseif k == 'categories' or k == 'nocat' or k == 'demo' then
-- valid for doc page
else
-- invalid
local vlen = mw.ustring.len(k)
k = mw.ustring.sub(k, 1, (vlen < 25) and vlen or 25)
k = mw.ustring.gsub(k, '[^%w\-_ ]', '?')
table.insert(tracking, '[[Luokka:Sivut, joiden Sivupalkki urheilutapahtuma -mallineessa on tuntemattomia parametreja|' .. k .. ']]')
table.insert(preview, '"' .. k .. '"')
end
end
end
end
end
function p.sidebar(frame, args)
if not args then
args = getArgs(frame)
end
local root = mw.html.create()
root = root
:tag('table')
:addClass('sidebar-games-events')
:addClass(args.float == 'left' and 'sidebar-games-events-left' or nil)
:addClass(args.float == 'none' and 'sidebar-games-events-none' or nil)
:addClass('sidebar')
:addClass('nomobile')
:css('width', args.leveys or nil)
:css('max-width', args.maksimileveys or nil)
-- enumerate the rows and count the columns
local cols = 1
local colindex = {a = '2', b = '3', c = '4', d = '5', e = '6'}
local lets = {'a', 'b', 'c', 'd', 'e'}
local rowNums = {}
local subevents = 0
local hasevents = false
for k, v in pairs(args) do
k = '' .. k
-- find rows
local num = k:match('^laji(%d+)$')
or k:match('^kuva(%d+)$')
or k:match('^otsikko(%d+)$')
or k:match('^tyyppi(%d+)[a-e]$')
or k:match('^laji(%d+)%.%d+$')
or k:match('^tulokset(%d+)%.%d+[a-e]?$')
if num then table.insert(rowNums, tonumber(num)) end
-- find number of columns
if k:match('^tulokset%d+%.(%d+)$') then
cols = (2 > cols) and 2 or cols
end
-- find number of columns based on let(s)
local let = k:match('^tulokset%d+%.%d+([a-e])$')
or k:match('^tyyppi%d+([a-e])$')
if let and colindex[let] then
local n = tonumber(colindex[let])
cols = (n > cols) and n or cols
end
-- find subevents
local subnum = k:match('^tulokset%d+%.(%d+)[a-e]?$')
or k:match('^laji%d+%.(%d+)$')
if subnum then
subnum = tonumber(subnum)
subevents = (subnum > subevents) and subnum or subevents
end
-- identify events (that match looks awfully similar to subevents)
if k:match('^(laji%d+%.%d+)$') then
hasevents = true
end
end
-- remove duplicates from the list (e.g. 3 will be duplicated if both event3 and image3 are specified)
table.sort(rowNums)
for i = #rowNums, 1, -1 do
if rowNums[i] == rowNums[i - 1] then
table.remove(rowNums, i)
end
end
-- alignment
local alignevents = nil
if args.alignevents and args.alignevents == 'right' then
alignevents = 'event-r'
end
local alignresults = nil
if args.alignresults and args.alignresults == 'right' then
alignresults = 'result-r'
elseif args.alignresults and args.alignresults == 'left' then
alignresults = 'result-l'
end
-- add the top level header
if args.laji or args.otsikko then
local t = args.laji
if args.otsikko then
t = args.otsikko
elseif args.kisat and args.kisoissa then
t = '[[' .. args.laji .. ' ' .. args.kisoissa .. '|' .. args.laji .. ']]' .. ' <br>' .. '[[' .. args.kisat .. '|' .. args.kisoissa .. ']]'
end
local cell = root:tag('tr'):tag('th')
cell
:addClass('sidebar-games-events-title')
:attr('colspan', cols)
if args.kuvaoikea then
local d = cell:tag('div')
:addClass('sidebar-games-events-ir-cont')
d:tag('div')
:addClass('sidebar-games-events-ir-title')
:wikitext(t)
d:tag('div')
:addClass('sidebar-games-events-ir')
:wikitext(args.kuvaoikea)
else
cell:wikitext(t)
end
end
if args.kuva then
local imageCell = root:tag('tr'):tag('td')
imageCell
:addClass('sidebar-games-events-image')
:attr('colspan', cols)
:wikitext(args.kuva)
if args.kuvateksti then
imageCell
:tag('div')
:addClass('sidebar-games-events-caption')
:wikitext(args.kuvateksti)
end
end
if args.ylateksti then
local cell = root:tag('tr'):tag('td')
cell:attr('colspan', cols)
:wikitext(args.ylateksti)
end
-- start adding rows
for i, num in ipairs(rowNums) do
local heading = nil
local laji = args['laji' .. num]
local kuva = args['kuva' .. num]
local otsikko = args['otsikko' .. num]
if otsikko then
root:tag('tr')
:tag('th')
:addClass('event-title')
:attr('colspan', cols)
:wikitext(otsikko)
end
if laji and kuva then
heading = laji .. '<br>' .. kuva
elseif laji then
heading = laji
elseif kuva then
heading = kuva
end
if heading then
root
:tag('tr')
:tag('th')
:addClass('sidebar-games-events-heading')
:attr('colspan', cols)
:wikitext(heading)
end
local showtypes = false
for j, let in ipairs(lets) do
if j < cols then
if args['tyyppi' .. num .. let] then
showtypes = true
end
end
end
if showtypes == true then
local row = root:tag('tr')
row:tag('th'):addClass((hasevents == false) and 'no-event' or nil)
for j, let in ipairs(lets) do
if j < cols then
local t = args['tyyppi' .. num .. let]
local cell = row:tag('th')
if t then
cell
:addClass('type-let')
:css('width', (cols > 2) and tostring(math.floor(100/(cols-1))) .. '%' or nil)
:wikitext(t)
end
end
end
end
for k=1,subevents do
local hasresults = false
if args['tulokset' .. num .. '.' .. k] then
hasresults = true
else
for j, let in ipairs(lets) do
if j < cols then
if args['tulokset' .. num .. '.' .. k .. let] then
hasresults = true
end
end
end
end
if hasresults then
local row = root:tag('tr')
local cell = row:tag('th'):addClass((hasevents == false) and 'no-event' or nil)
local t = args['laji' .. num .. '.' .. k]
local border = args['viiva' .. num .. '.' .. k] and 'erl-border' or nil
if t then
cell
:addClass('event')
:addClass(alignevents)
:addClass(border)
:wikitext(t)
end
if args['tulokset' .. num .. '.' .. k] then
row:tag('td')
:addClass(border)
:addClass(alignresults)
:attr('colspan', cols - 1)
:wikitext(args['tulokset' .. num .. '.' .. k])
else
for j, let in ipairs(lets) do
if j < cols then
t = args['tulokset' .. num .. '.' .. k .. let]
row:tag('td')
:addClass(border)
:addClass(alignresults)
:wikitext(t)
end
end
end
end
end
end
if args.alateksti then
root
:tag('tr')
:tag('td')
:addClass(args.belowclass)
:attr('colspan', cols)
:cssText(args.belowstyle)
:wikitext(args.alateksti)
end
if args.edellinen or args.seuraava then
local row = root:tag('tr'):tag('td')
:addClass('sidebar-games-events-prevnext')
:attr('colspan', cols)
:tag('div')
row:tag('div')
:addClass('sidebar-games-events-prev')
:wikitext(args.edellinen)
row:tag('div')
:addClass('sidebar-games-events-next')
:wikitext(args.seuraava)
end
if args.navbar ~= 'none' and args.navbar ~= 'off' and
(args.nimi or frame:getParent():getTitle():gsub('/sandbox$', '') ~= 'Malline:Sivupalkki urheilutapahtuma') then
root
:tag('tr')
:tag('td')
:addClass('sidebar-games-events-navbar')
:attr('colspan', cols)
:wikitext(require('Module:Navbar')._navbar{
args.nimi,
mini = 1,
fontstyle = args.navbarfontstyle
})
end
-- if mw.title.getCurrentTitle().namespace == 10 and (args.nimi ~= mw.title.getCurrentTitle().text) and not (mw.title.getCurrentTitle().text:match('Sivupalkki urheilutapahtuma')) then
-- root:wikitext("[[Category:Templates using sidebar games events without correct name]]")
-- end
checkargs(args)
local trackstr = (#tracking > 0) and table.concat(tracking, '') or ''
if #preview > 0 then
trackstr = require('Module:If preview')._warning({
'Unknown parameters ' .. table.concat(preview, '; ') .. '.'
}) .. trackstr
end
return mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Moduuli:Sidebar games events/styles.css' }
} .. tostring(root) .. trackstr
end
return p