Module:Sidebar games events

---- 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').getArgslocal tracking, preview = {}, {}local function checkargs(args)    for k, v in pairs(args) do    if v ~= '' thenif k and type(k) == 'string' thenif k == 'event' or k == 'games' or k == 'name' or k == 'image' ork == 'imageright' or k =='caption' or k =='above' ork == 'title' or k == 'alignresults' or k == 'alignevents' ork == 'width' or k == 'maxwidth' or k == 'float' ork == 'below' or k == 'prev' or k == 'next' then-- validelseif k:match('^title%d+$') or k:match('^event%d+$') ork:match('^image%d+$') or k:match('^type%d+[a-e]$') ork:match('^event%d+%.%d+$') or k:match('^results%d+%.%d+[a-e]?$') ork:match('^border%d+%.%d+$') then-- validelseif k == 'categories' or k == 'nocat' or k == 'demo' then-- valid for doc pageelse-- invalidlocal 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, '[[Category:Pages using sidebar games events with unknown parameters|' .. k .. ']]')table.insert(preview, '"' .. k .. '"')endendendendendfunction p.sidebar(frame, args)if not args thenargs = getArgs(frame)endlocal 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.width or nil):css('max-width', args.maxwidth or nil)-- enumerate the rows and count the columnslocal cols = 1local colindex = {a = '2', b = '3', c = '4', d = '5', e = '6'}local lets = {'a', 'b', 'c', 'd', 'e'}local rowNums = {}local subevents = 0local hasevents = falsefor k, v in pairs(args) dok = '' .. k-- find rowslocal num = k:match('^event(%d+)$') or k:match('^image(%d+)$')or k:match('^title(%d+)$')or k:match('^type(%d+)[a-e]$')or k:match('^event(%d+)%.%d+$')or k:match('^results(%d+)%.%d+[a-e]?$')if num then table.insert(rowNums, tonumber(num)) end-- find number of columnsif k:match('^results%d+%.(%d+)$') thencols = (2 > cols) and 2 or colsend-- find number of columns based on let(s)local let = k:match('^results%d+%.%d+([a-e])$')or k:match('^type%d+([a-e])$')if let and colindex[let] thenlocal n = tonumber(colindex[let])cols = (n > cols) and n or colsend-- find subeventslocal subnum = k:match('^results%d+%.(%d+)[a-e]?$')or k:match('^event%d+%.(%d+)$')if subnum thensubnum = tonumber(subnum)subevents = (subnum > subevents) and subnum or subeventsend-- identify events (that match looks awfully similar to subevents)if k:match('^(event%d+%.%d+)$') thenhasevents = trueendend-- 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 doif rowNums[i] == rowNums[i - 1] thentable.remove(rowNums, i)endend-- alignmentlocal alignevents = nilif args.alignevents and args.alignevents == 'right' thenalignevents = 'event-r'endlocal alignresults = nilif args.alignresults and args.alignresults == 'right' thenalignresults = 'result-r'elseif args.alignresults and args.alignresults == 'left' thenalignresults = 'result-l'end-- add the top level headerif args.event or args.title thenlocal t = args.eventif args.title thent = args.titleelseif args.games thent = '[[' .. args.event .. ' at the ' .. args.games .. '|' .. args.event .. ']]'.. ' at the<br>' .. '[[' .. args.games .. ']]'endlocal cell = root:tag('tr'):tag('th')cell:addClass('sidebar-games-events-title'):attr('colspan', cols)if args.imageright thenlocal 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.imageright)elsecell:wikitext(t)endendif args.image thenlocal imageCell = root:tag('tr'):tag('td')imageCell:addClass('sidebar-games-events-image'):attr('colspan', cols):wikitext(args.image)if args.caption thenimageCell:tag('div'):addClass('sidebar-games-events-caption'):wikitext(args.caption)endendif args.above thenlocal cell = root:tag('tr'):tag('td')cell:attr('colspan', cols):wikitext(args.above)end-- start adding rowsfor i, num in ipairs(rowNums) dolocal heading = nillocal event = args['event' .. num]local image = args['image' .. num]local title = args['title' .. num]if title thenroot:tag('tr'):tag('th'):addClass('event-title'):attr('colspan', cols):wikitext(title)endif event and image thenheading = event .. '<br>' .. imageelseif event thenheading = eventelseif image thenheading = imageendif heading thenroot:tag('tr'):tag('th'):addClass('sidebar-games-events-heading'):attr('colspan', cols):wikitext(heading)endlocal showtypes = falsefor j, let in ipairs(lets) doif j < cols thenif args['type' .. num .. let] thenshowtypes = trueendendendif showtypes == true thenlocal row = root:tag('tr')row:tag('th'):addClass((hasevents == false) and 'no-event' or nil)for j, let in ipairs(lets) doif j < cols thenlocal t = args['type' .. num .. let]local cell = row:tag('th')if t thencell:addClass('type-let'):css('width', (cols > 2) and tostring(math.floor(100/(cols-1))) .. '%' or nil):wikitext(t)endendendendfor k=1,subevents dolocal hasresults = falseif args['results' .. num .. '.' .. k] thenhasresults = trueelsefor j, let in ipairs(lets) doif j < cols thenif args['results' .. num .. '.' .. k .. let] thenhasresults = trueendendendendif hasresults thenlocal row = root:tag('tr')local cell = row:tag('th'):addClass((hasevents == false) and 'no-event' or nil)local t = args['event' .. num .. '.' .. k]local border = args['border' .. num .. '.' .. k]  and 'erl-border' or nilif t thencell:addClass('event'):addClass(alignevents):addClass(border):wikitext(t)endif args['results' .. num .. '.' .. k] thenrow:tag('td'):addClass(border):addClass(alignresults):attr('colspan', cols - 1):wikitext(args['results' .. num .. '.' .. k])elsefor j, let in ipairs(lets) doif j < cols thent = args['results' .. num .. '.' .. k .. let]row:tag('td'):addClass(border):addClass(alignresults):wikitext(t)endendendendendendif args.below thenroot:tag('tr'):tag('td'):addClass(args.belowclass):attr('colspan', cols):cssText(args.belowstyle):wikitext(args.below)endif args.prev or args.next thenlocal 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.prev)row:tag('div'):addClass('sidebar-games-events-next'):wikitext(args.next)endif args.navbar ~= 'none' and args.navbar ~= 'off' and(args.name or frame:getParent():getTitle():gsub('/sandbox$', '') ~= 'Template:Sidebar games events') thenroot:tag('tr'):tag('td'):addClass('sidebar-games-events-navbar'):attr('colspan', cols):wikitext(require('Module:Navbar')._navbar{args.name,mini = 1,fontstyle = args.navbarfontstyle})endif mw.title.getCurrentTitle().namespace == 10 and (args.name ~= mw.title.getCurrentTitle().text) and not (mw.title.getCurrentTitle().text:match('Sidebar games events')) then    root:wikitext("[[Category:Templates using sidebar games events without correct name]]")endcheckargs(args)local trackstr = (#tracking > 0) and table.concat(tracking, '') or ''if #preview > 0 thentrackstr = require('Module:If preview')._warning({'Unknown parameters ' .. table.concat(preview, '; ') .. '.'}) .. trackstrendreturn mw.getCurrentFrame():extensionTag{name = 'templatestyles', args = { src = 'Module:Sidebar games events/styles.css' }} .. tostring(root) .. trackstrendreturn p