Module:Sidebar games events: Difference between revisions
From Thetacola Wiki
Jump to navigationJump to search
en>Frietjes (no more lists, removing) |
m (1 revision imported) |
(No difference)
|
Latest revision as of 00:22, 15 August 2022
File:Full-protection-shackle.svg | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
File:Lua-Logo.svg | This module depends on the following other modules: |
Script error: No such module "Uses TemplateStyles". This module implements template {{Sidebar games events}}.
-- -- This module implements {{Sidebar games events}} -- This module was created using code taken directly from [[Module:Sidebar]] -- require('Module:No globals') 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 == 'event' or k == 'games' or k == 'name' or k == 'image' or k == 'imageright' or k =='caption' or k =='above' or k == 'title' or k == 'alignresults' or k == 'alignevents' or k == 'width' or k == 'maxwidth' or k == 'float' or k == 'below' or k == 'prev' or k == 'next' then -- valid elseif k:match('^title%d+$') or k:match('^event%d+$') or k:match('^image%d+$') or k:match('^type%d+[a-e]$') or k:match('^event%d+%.%d+$') or k:match('^results%d+%.%d+[a-e]?$') or k:match('^border%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, '[[Category:Pages using sidebar games events with unknown parameters|' .. 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.width or nil) :css('max-width', args.maxwidth 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('^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 columns if k:match('^results%d+%.(%d+)$') then cols = (2 > cols) and 2 or cols end -- 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] then local n = tonumber(colindex[let]) cols = (n > cols) and n or cols end -- find subevents local subnum = k:match('^results%d+%.(%d+)[a-e]?$') or k:match('^event%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('^(event%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.event or args.title then local t = args.event if args.title then t = args.title elseif args.games then t = '[[' .. args.event .. ' at the ' .. args.games .. '|' .. args.event .. ']]' .. ' at the<br>' .. '[[' .. args.games .. ']]' end local cell = root:tag('tr'):tag('th') cell :addClass('sidebar-games-events-title') :attr('colspan', cols) if args.imageright 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.imageright) else cell:wikitext(t) end end if args.image then local imageCell = root:tag('tr'):tag('td') imageCell :addClass('sidebar-games-events-image') :attr('colspan', cols) :wikitext(args.image) if args.caption then imageCell :tag('div') :addClass('sidebar-games-events-caption') :wikitext(args.caption) end end if args.above then local cell = root:tag('tr'):tag('td') cell:attr('colspan', cols) :wikitext(args.above) end -- start adding rows for i, num in ipairs(rowNums) do local heading = nil local event = args['event' .. num] local image = args['image' .. num] local title = args['title' .. num] if title then root:tag('tr') :tag('th') :addClass('event-title') :attr('colspan', cols) :wikitext(title) end if event and image then heading = event .. '<br>' .. image elseif event then heading = event elseif image then heading = image 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['type' .. 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['type' .. 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['results' .. num .. '.' .. k] then hasresults = true else for j, let in ipairs(lets) do if j < cols then if args['results' .. 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['event' .. num .. '.' .. k] local border = args['border' .. num .. '.' .. k] and 'erl-border' or nil if t then cell :addClass('event') :addClass(alignevents) :addClass(border) :wikitext(t) end if args['results' .. num .. '.' .. k] then row:tag('td') :addClass(border) :addClass(alignresults) :attr('colspan', cols - 1) :wikitext(args['results' .. num .. '.' .. k]) else for j, let in ipairs(lets) do if j < cols then t = args['results' .. num .. '.' .. k .. let] row:tag('td') :addClass(border) :addClass(alignresults) :wikitext(t) end end end end end end if args.below then root :tag('tr') :tag('td') :addClass(args.belowclass) :attr('colspan', cols) :cssText(args.belowstyle) :wikitext(args.below) end if args.prev or args.next 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.prev) row:tag('div') :addClass('sidebar-games-events-next') :wikitext(args.next) end if args.navbar ~= 'none' and args.navbar ~= 'off' and (args.name or frame:getParent():getTitle():gsub('/sandbox$', '') ~= 'Template:Sidebar games events') then root :tag('tr') :tag('td') :addClass('sidebar-games-events-navbar') :attr('colspan', cols) :wikitext(require('Module:Navbar')._navbar{ args.name, mini = 1, fontstyle = args.navbarfontstyle }) end if 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]]") 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 = 'Module:Sidebar games events/styles.css' } } .. tostring(root) .. trackstr end return p