วิกิพีเดีย
มอดูล:Episode list
คู่มือการใช้งานมอดูล[สร้าง]
คุณอาจจะต้องการสร้างคู่มือการใช้งานของมอดูลนี้ ผู้เขียนสามารถทำการทดลองได้ที่กระบะทราย (สร้าง | คัดลอก) และชุดทดสอบ (สร้าง) ของมอดูลนี้ โปรดเพิ่มหมวดหมู่ไปที่หน้าย่อย /doc หน้าย่อยของมอดูลนี้ |
local p = {} local getArgs local yesno = require('Module:Yesno') local mm = require('Module:Math') function p.sublist(frame) return main(frame,true) end function p.list(frame) return main(frame,false) end function main(frame, sublist) if not getArgs then getArgs = require('Module:Arguments').getArgs end local args -- Most parameters should still display when blank, so don't remove blanks if sublist then args = getArgs(frame, {removeBlanks = false, wrappers = 'แม่แบบ:Episode list/sublist'}) else args = getArgs(frame, {removeBlanks = false, wrappers = 'แม่แบบ:Episode list'}) end local title = mw.title.getCurrentTitle() local page_title = mw.title.getCurrentTitle().text local mainlist = args.MainList or args['1'] or '' -- Is this list on the same page as the page directly calling the template? local on_main_page -- Only sublist had anything about hiding, so only it needs to even check if sublist then on_main_page = mw.uri.anchorEncode(page_title) == mw.uri.anchorEncode(mainlist) else -- Normal lists can ALWAYS show the summary on_main_page = false end -- Declare all the possible <td>/<th> tags here, and the return string local EpisodeNumber,EpisodeNumber2,Title,Aux1,DirectedBy,WrittenBy, DirectedBy,Aux2,Aux3,OriginalAirDate,AltDate,ProdCode, Viewers,Aux4,return_table -- Need just this parameter removed if blank, no others if args.ShortSummary then if not args.ShortSummary:find('%S') then args.ShortSummary = nil end end -- Default color to light blue -- Hash (#) left out because it was left out in the original wikicode, so we can add it later local line_color = args.LineColor or 'CCCCFF' -- List of parameter names to test -- Keep this order as is local cell_names = { 'EpisodeNumber2', 'Title', 'Aux1', 'DirectedBy', 'WrittenBy', 'Aux2', 'Aux3', 'OriginalAirDate', 'AltDate', 'ProdCode', 'Viewers', 'Aux4' } -- Is there a way to call a variable by its name stored as a string? Doubt it -- This list matches strings with the table cell variables local td_tags = { ['EpisodeNumber2'] = EpisodeNumber2, ['Title'] = Title, ['Aux1'] = Aux1, ['DirectedBy'] = DirectedBy, ['WrittenBy'] = WrittenBy, ['DirectedBy'] = DirectedBy, ['Aux2'] = Aux2, ['Aux3'] = Aux3, ['OriginalAirDate'] = OriginalAirDate, ['AltDate'] = AltDate, ['ProdCode'] = ProdCode, ['Viewers'] = Viewers, ['Aux4'] = Aux4, } local table_row = mw.html.create('tr') :addClass('vevent') :css('text-align','center') local row_color = yesno(args.RowColor, false) if args.RowColor and string.lower(args.RowColor) == 'on' then row_color = true end local top_color local epn = mm._cleanNumber(args.EpisodeNumber) or 1 if args.TopColor then top_color = '#'..args.TopColor elseif row_color and not on_main_page and mm._mod(epn,2) == 0 then top_color = '#E9E9E9' elseif not on_main_page and args.ShortSummary then top_color = '#F2F2F2' else top_color = 'inherit' end table_row:css('background',top_color) -- This will decide the colspan= of the summary cell -- Start as 1 because EpisodeNumber is always created local nonnil_params = 1 -- Created separately because it is the only <th> tag if args.EpisodeNumber then EpisodeNumber = mw.html.create('th') :attr('scope','row') :attr('id','ep'..args.EpisodeNumber) :css('text-align','center') :wikitext(args.EpisodeNumber) table_row:css('background',top_color) table_row:node(EpisodeNumber) end -- The wikitext in the Title cell is a little more involved than the others local function add_title() local title_string = '' -- Surround the Title with quotes; no quotes if empty if args.Title and args.Title:find('%S') then title_string = title_string..'"'..args.Title..'"' end if args.RTitle then title_string = title_string..args.RTitle end -- Surround the AltTitle with quotes; no quotes if empty if args.AltTitle and args.AltTitle:find('%S') then title_string = title_string..'<br>"'..args.AltTitle..'"' end if args.RAltTitle then title_string = title_string..args.RAltTitle end return title_string end for _,v in ipairs(cell_names) do -- Title is in the middle, so it's probably better to just switch back and again instead of doing 2 nodes -- and then title, and then the rest in a loop if v == 'Title' then nonnil_params = nonnil_params + 1 local title_text = add_title() td_tags[v] = mw.html.create('td') td_tags[v]:wikitext(title_text) :addClass('summary') :css('text-align','left') table_row:node(td_tags[v]) elseif args[v] then nonnil_params = nonnil_params + 1 td_tags[v] = mw.html.create('td') td_tags[v]:wikitext(args[v]) table_row:node(td_tags[v]) end end -- Production code also has an additional attribute, so add it separately here if ProdCode and args.ProdCode then ProdCode:attr('id','pc'..args.ProdCode) end local categories = '' -- add these categories only in the mainspace and only if they are on the page where the template is used if not args.LineColor and not on_main_page and title.nsText == '' then categories = categories..'[[Category:Episode list using the default LineColor]]' end if args.TopColor and not on_main_page and title.nsText == '' then categories = categories..'[[Category:Episode lists with row deviations]]' end -- Do not show the summary if this is being transcluded on the mainlist page -- Do include it on all other lists if not on_main_page and args.ShortSummary then local bottom_wrapper = mw.html.create('tr') local ShortSummary = mw.html.create('td') :addClass('description') :css('border-bottom','solid 3px #'..line_color) :attr('colspan',nonnil_params) :wikitext('\n'..args.ShortSummary) bottom_wrapper:node(ShortSummary) return tostring(table_row)..tostring(bottom_wrapper)..categories else return tostring(table_row)..categories end end return p