| Modul Lua ini digunakan pada banyak halaman dan perubahannya kemungkinan memicu perubahan massal pada semua halaman yang menggunakannya. Uji cobalah di subhalaman /bak pasir atau /kasus uji Modul:Episode table, atau bak pasir modul Anda. Pertimbangkan untuk mendiskusikan perubahan di halaman pembicaraan sebelum mengimplementasikannya. |
| Modul ini dilindungi. Modul ini sangat mencolok yang digunakan oleh banyak halaman, atau sangat sering disubstitusikan. Karena vandalisme atau kesalahan akan mempengaruhi banyak halaman, dan suntingan kecil dapat memberi beban besar pada server, modul ini dilindungi dari penyuntingan. |
| Modul ini menggunakan Lua: |
| Modul ini menggunakan TemplateStyles: |
PenggunaanPenggunaan
Membuat salah satu dari tiga kegunaan yang terkait dengan {{Episode table}} dengan parameter yang didefinisikan dalam dokumentasi templat:
Sebuah standar tabel episode dengan
{{#invoke:Episode table|main}}
Sebuah baris untuk musim berbagian dengan
{{#invoke:Episode table|part}}
Latar belakang putih untuk referensi yang digunakan di baris header tabel episode dengan
{{#invoke:Episode table|ref}}
Kategori pelacakKategori pelacak
Dokumentasi di atas ditransklusikan dari Modul:Episode table/doc. (sunting | riwayat)
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
-- This module implements {{Episode table}} and {{Episode table/part}}. localHTMLcolor=mw.loadData('Modul:Color contrast/colors') -------------------------------------------------------------------------------- -- EpisodeTable class -- The main class. -------------------------------------------------------------------------------- localcontrast_ratio=require('Modul:Color contrast')._ratio localEpisodeTable={} functionEpisodeTable.cell(background,width,text,reference,textColor) localcell=mw.html.create('th') -- Width localcell_width ifwidth=='auto'then cell_width='auto' elseiftonumber(width)~=nilthen cell_width=width..'%' else cell_width=nil end -- Cell cell:attr('scope','col') :css('background',backgroundor'#CCCCFF') :css('width',cell_width) :css('color',textColor) :wikitext(text) -- Reference ifreferenceandreference~=''then cell:wikitext(" "..EpisodeTable.reference(reference,background)) end returncell end functionEpisodeTable.reference(reference,background) locallink1_cr=contrast_ratio{'#0645AD',backgroundor'#CCCCFF',['error']=0} locallink2_cr=contrast_ratio{'#0B0080',backgroundor'#CCCCFF',['error']=0} localrefspan=mw.html.create('span') :wikitext(reference) iflink1_cr<7orlink2_cr<7then refspan :css('background-color','white') :css('padding','1px') :css('display','inline-block') :css('line-height','50%') end returntostring(refspan) end functionEpisodeTable.abbr(text,title) localabbr=mw.html.create('abbr') :attr('title',title) :wikitext(text) returntostring(abbr) end functionEpisodeTable.part(frame,args) localrow=mw.html.create('tr') if(args.c==nilorargs.c=='')thenargs.c='#CCCCFF'end -- Add # to color if necessary ifargs.c~=nilandHTMLcolor[args.c]==nilthen args.c='#'..(mw.ustring.match(args.c,'^[%s#]*([a-fA-F0-9]*)[%s]*$')or'') end localblack_cr=contrast_ratio{args.cor'#CCCCFF','black',['error']=0} localwhite_cr=contrast_ratio{'white',args.cor'#CCCCFF',['error']=0} localpartTypes={ {'act','Adegan'}, {'chapter','Bab'}, {'part','Bagian'}, {'volume','Volume'}, {'week','Minggu'}, } localdisplaytext='' localisAnyPartSet=false fork,vinpairs(partTypes)do ifargs[v[1]]then isAnyPartSet=true displaytext=v[2]..' '..args[v[1]] end end ifargs.subtitlethen displaytext=displaytext..((isAnyPartSetand': 'or'')..args.subtitle) end localplainText=require('Modul:Plain text')._main localdisplayTextAnchor=plainText(displaytext) row:tag('td') :attr('colspan',13) :attr('id',args.idordisplayTextAnchor) :css('text-align','center') :css('background-color',args.cor'#CCCCFF') :css('color',black_cr>white_crand'black'or'white') :wikitext((args.noboldanddisplaytextor"'''"..displaytext.."'''")..(args.rand" "..EpisodeTable.reference(args.r,args.c)or'')) returntostring(row) end functionEpisodeTable.new(frame,args) args=argsor{} localcategories='' localbackground=(args.backgroundandargs.background~=''andargs.background~='#')andargs.backgroundornil -- Add # to background if necessary ifbackground~=nilandHTMLcolor[background]==nilthen background='#'..(mw.ustring.match(background,'^[%s#]*([a-fA-F0-9]*)[%s]*$')or'') end -- Default widths noted by local consensus localdefaultwidths={}; defaultwidths.overall=5; defaultwidths.overall2=5; defaultwidths.season=5; defaultwidths.series=5; defaultwidths.prodcode=7; defaultwidths.viewers=10; -- Create episode table localroot=mw.html.create('table') -- Table width localtable_width=string.gsub(args.total_widthor'','%%','') ifargs.total_width=='auto'orargs.total_width==''then table_width='auto' elseiftonumber(table_width)~=nilthen table_width=table_width..'%' else table_width='100%' end root :addClass('wikitable') :addClass('plainrowheaders') :addClass('wikiepisodetable') :css('width',table_width) -- Caption ifargs.show_captionthen -- Visible caption option, with a tracking category root:tag('caption'):wikitext(args.caption) categories=categories..'[[Kategori:Artikel yang menggunakan Templat:Episode table dengan keterangan yang terlihat]]' elseifargs.captionthen -- If a visible caption isn't defined, then default to the screenreader-only caption root:tag('caption'):wikitext(frame:expandTemplate{title='Screen reader-only',args={args.caption}}) end -- Colour contrast; add to category only if it's in the mainspace localtitle=mw.title.getCurrentTitle() localblack_cr=contrast_ratio{background,'black',['error']=0} localwhite_cr=contrast_ratio{'white',background,['error']=0} iftitle.namespace==0and(args.backgroundandargs.background~=''andargs.background~='#')andblack_cr<7andwhite_cr<7then categories=categories..'[[Kategori:Artikel yang menggunakan Templat:Episode table dengan kombinasi warna yang tidak sah]]' end -- Main row localtextColor=backgroundand(black_cr>white_crand'black'or'white')or'black' localmainRow=root:tag('tr') mainRow :css('color',textColor) :css('text-align','center') -- Cells do localused_column=false localused_season=false localcountry=args.country~=''andargs.country~=nil localviewers='Penonton'..(countryand(' '..args.country)or'').. ((notargs.viewers_typeorargs.viewers_type~='')and'<br />('..(args.viewers_typeor'juta')..')'or'') localcellNames={ {'overall','EpisodeNumber',EpisodeTable.abbr('No.','Nomor episode dalam keseluruhan cerita').. ((args.seasonorargs.seriesorargs.EpisodeNumber2orargs.EpisodeNumber2Seriesorargs.forceoverall)and'<br />'..(args.overall_typeor'total')or'')}, {'overall2','*',''}, {'season','EpisodeNumber2',EpisodeTable.abbr('No.','Nomor episode dalam musim ini')..'<br />'..(args.season_typeor'musim')}, {'series','EpisodeNumber2Series',EpisodeTable.abbr('No.','Nomor episode dalam seri ini')..'<br />'..(args.series_typeor'seri')}, {'title','Title','Judul'}, {'aux1','Aux1',''}, {'director','DirectedBy','Sutradara'}, {'writer','WrittenBy','Penulis skenario'}, {'aux2','Aux2',''}, {'aux3','Aux3',''}, {'airdate','OriginalAirDate','Tanggal '..(args.releasedand'rilis'or'tayang')..' asli'}, {'altdate','AltDate',''}, {'guests','Guests','Bintang tamu'}, {'musicalguests','MusicalGuests','Bintang tamu musik/hiburan'}, {'prodcode','ProdCode',EpisodeTable.abbr('Prod.','Kode')..'<br />produksi'}, {'viewers','Viewers',viewers}, {'aux4','Aux4',''} } fork,vinpairs(cellNames)do localthisCell=args[v[1]]orargs[v[2]] ifthisCelland(v[1]~='series'or(v[1]=='series'andused_season==false))then used_column=true ifv[1]=='season'thenused_season=trueend if(k<=3andthisCell=='')thenthisCell='5'end if(thisCell==''anddefaultwidths[v[1]])thenthisCell=defaultwidths[v[1]]end ifv[1]=='title'then localthisCellT=args[v[1]..'T']orargs[v[2]..'T'] localthisCellR=args[v[1]..'R']orargs[v[2]..'R'] thisCellT=(thisCellTorv[3])..(thisCellRand(" "..EpisodeTable.reference(thisCellR,background))or'') localaltTitle={"alttitle","AltTitle"} ifargs[altTitle[1]..'T']orargs[altTitle[2]..'T']then localaltCellT=args[altTitle[1]..'T']orargs[altTitle[2]..'T'] localaltCellR=args[altTitle[1]..'R']orargs[altTitle[2]..'R'] thisCellT=thisCellT.."<br /> "..altCellT..(altCellRand(" "..EpisodeTable.reference(altCellR,background))or'') end mainRow:node(EpisodeTable.cell(background,thisCell,thisCellT,false,textColor)) else localthisCellT=args[v[1]..'T']orargs[v[2]..'T'] localthisCellR=args[v[1]..'R']orargs[v[2]..'R'] mainRow:node(EpisodeTable.cell(background,thisCell,thisCellTorv[3],thisCellR,textColor)) end end end iftitle.namespace==0andused_column==falsethen categories=categories..'[[Kategori:Artikel yang menggunakan Templat:Episode table dengan parameter kolom kosong]]' end -- Episodes ifargs.episodesthen ifargs.anchorthen args.episodes=string.gsub(args.episodes,"(id=\")(ep%w+\")","%1"..args.anchor.."%2") end root:node(args.episodes) end end localtemplateStyles=mw.getCurrentFrame():extensionTag{ name='templatestyles',args={src='Modul:Episode table/styles.css'} } return(((args.dontcloseor'')~='')andmw.ustring.gsub(tostring(root),"</table>","")ortostring(root))..categories..templateStyles end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- localp={} functionp.main(frame) localargs=require('Modul:Arguments').getArgs(frame,{ removeBlanks=false, wrappers='Templat:Episode table' }) localcheck=require('Modul:Check for unknown parameters')._check localtracking='' localtitle=mw.title.getCurrentTitle() iftitle.namespace==0then tracking=check({ ['unknown']='[[Kategori:Halaman menggunakan episode table dengan parametere yang tidak diketahui|_VALUE_'..title.text..']]', ['preview']='Halaman menggunakan [[Templat:Episode table]] dengan parameter yang tidak diketahui "_VALUE_"', ['showblankpositional']='y', ['regexp1']='[%w_]+NULL', 'airdate','airdateR','airdateT','altdate','AltDate','altdateR','AltDateR', 'altdateT','AltDateT','alttitleT','alttitleR','AltTitleT','AltTitleR', 'anchor','aux1','Aux1','aux1R','Aux1R','aux1T', 'Aux1T','aux2','Aux2','aux2R','Aux2R','aux2T','Aux2T','aux3','Aux3', 'aux3R','Aux3R','aux3T','Aux3T','aux4','Aux4','aux4R','Aux4R','aux4T', 'Aux4T','b','background','c','caption','country','DirectedBy','DirectedByR', 'DirectedByT','director','directorR','directorT','dontclose','EpisodeNumber', 'EpisodeNumber2','EpisodeNumber2R','EpisodeNumber2Series','EpisodeNumber2SeriesR', 'EpisodeNumber2SeriesT','EpisodeNumber2T','EpisodeNumberR','EpisodeNumberT', 'episodes','forceoverall','guests','Guests','guestsR','GuestsR','guestsT', 'GuestsT','id','musicalguests','MusicalGuests','musicalguestsR','MusicalGuestsR', 'musicalguestsT','MusicalGuestsT','OriginalAirDate','OriginalAirDateR', 'OriginalAirDateT','overall','overall_type','overall2','overall2R', 'overall2T','overallR','overallT','prodcode','ProdCode','prodcodeR', 'ProdCodeR','prodcodeT','ProdCodeT','r','season','season_type','seasonR', 'seasonT','series','series_type','seriesR','seriesT','show_caption', 'subtitle','title','Title','titleR','TitleR','titleT','TitleT','total_width', 'viewers','Viewers','viewers_type','viewersR','ViewersR','viewersT', 'ViewersT','writer','writerR','writerT','WrittenBy','WrittenByR','WrittenByT' },args) end returnEpisodeTable.new(frame,args)..tracking end functionp.part(frame) localargs=require('Modul:Arguments').getArgs(frame,{ removeBlanks=false, wrappers='Templat:Episode table/part' }) returnEpisodeTable.part(frame,args) end functionp.ref(frame) localargs=require('Modul:Arguments').getArgs(frame,{ removeBlanks=false, }) returnEpisodeTable.reference(args.r,args.b) end returnp