-- Bu modül ve şablonlarını yürütür. local HTMLcolor = mw.loadData('Modül:Renk karşıtlığı/renkler') -------------------------------------------------------------------------------- -- EpisodeTable class -- The main class. -------------------------------------------------------------------------------- local contrast_ratio = require('Modül:Renk karşıtlığı')._ratio local EpisodeTable = {} function EpisodeTable.cell(background, width, text, reference) local cell = mw.html.create('th') -- Cell cell:attr('scope','col') :css('background',background or '#CCCCFF') :css('width',width ~= and width .. '%' or nil) :wikitext(text) -- Reference if reference and reference ~= then cell:wikitext(" " .. EpisodeTable.reference(reference, background)) end return cell end function EpisodeTable.reference(reference, background) local link1_cr = contrast_ratio{'#0645AD', background or '#CCCCFF', ['error'] = 0} local link2_cr = contrast_ratio{'#0B0080', background or '#CCCCFF', ['error'] = 0} local refspan = mw.html.create('span') :wikitext(reference) if link1_cr < 7 or link2_cr < 7 then refspan :css('background-color','white') :css('padding','1px') :css('display','inline-block') :css('line-height','50%') end return tostring(refspan) end function EpisodeTable.abbr(text,title) local abbr = mw.html.create('abbr') :attr('title',title) :wikitext(text) return tostring(abbr) end function EpisodeTable.part(frame,args) local row = mw.html.create('tr') local black_cr = contrast_ratio{args.r, 'black', ['error'] = 0} local white_cr = contrast_ratio{'white', args.r, ['error'] = 0} local displaytext = (args["k"] or ) .. (not args["kyok"] and '. kısım' or ) local plainText = require('Modülüz metin')._main local displayTextAnchor = plainText(displaytext) row:tag('td') :attr('colspan', 13) :attr('id', displayTextAnchor) :css('text-align', 'center') :css('background-color', args.r) :css('color', black_cr > white_cr and 'black' or 'white') :wikitext("" .. displaytext .. "" .. (args.ka and " " .. EpisodeTable.reference(args.ka, args.r) or )) return tostring(row) end function EpisodeTable.new(args) args = args or {} local categories = local background = (args.arkaplan and args.arkaplan ~= and args.arkaplan ~= '#') and args.arkaplan or nil -- Add # to background if necessary if background ~= nil and HTMLcolor[background] nil then background '#'..(mw.ustring.match(background, '^[%s#]*([a-fA-F0-9]*)[%s]*$') or ) end -- Default widths noted by local consensus local defaultwidths {}; defaultwidths.numara1 5; defaultwidths.numara2 5; defaultwidths.series 5; defaultwidths["yapımkodu"] 7; defaultwidths.seyirci 10; -- Create episode table local root mw.html.create('table') root :addClass('wikitable') :addClass('plainrowheaders') :addClass('wikiepisodetable') :css('width', args["toplamgenişlik"] and string.gsub(args["toplamgenişlik"],'%%',) .. '%' or '100%') -- Caption if args["tablobaşlığı"] then root:tag('caption'):wikitext(args["tablobaşlığı"]) end -- Colour contrast; add to category only if it's in the mainspace local title mw.title.getCurrentTitle local black_cr contrast_ratio{background, 'black', ['error'] 0} local white_cr contrast_ratio{'white', background, ['error'] 0} if title.namespace 0 and (args.arkaplan and args.arkaplan ~= and args.arkaplan ~= '#') and black_cr < 7 and white_cr < 7 then categories = categories .. 'Kategori:Geçersiz renk bileşimi içeren bölüm tablosu şablonu kullanılan maddeler' end -- Main row local mainRow = root:tag('tr') mainRow :css('color', background and (black_cr > white_cr and 'black' or 'white') or 'black') :css('text-align', 'center') -- Cells do local used_season = false local country = args["ülke"] ~= and args["ülke"] ~= nil local viewers = (country and args["ülke"] or ) .. ' ' .. (country and 'seyircisi' or 'Seyirci') .. ((not args["seyircitürü"] or args["seyircitürü"] ~= ) and '(' .. (args["seyircitürü"] or 'milyon') .. ')' or ) local cellNames = { {'numara1',EpisodeTable.abbr('No','Bölüm sırası') .. ((args.sezon or args.series or args["numara2"] or args.forceoverall) and 'genel' or )}, {'numara2',EpisodeTable.abbr('No','Bölüm sırası') .. 'sezon'}, {'başlık','Bölüm adı'}, {'ilave1',}, {'yönetmen','Yönetmen'}, {'yazar','Senarist'}, {'ilave2',}, {'ilave3',}, {'yayıntarihi','Yayın tarihi'}, {'alttarih',}, {'yapımkodu','Yapım kodu'}, {'seyirci', viewers}, {'ilave4',} } for k,v in pairs(cellNames) do local thisCell = args[v[1]] if thisCell and (v[1] ~= 'series' or (v[1] 'series' and used_season false)) then if v[1] 'sezon' then used_season true end --if (k < 3 and thisCell ) then thisCell = '5' end if (thisCell == and defaultwidths[v[1]]) then thisCell = defaultwidths[v[1]] end local thisCellB = args[v[1] .. 'B'] local thisCellR = args[v[1] .. 'R'] local thisCellK = args[v[1] .. 'K'] mainRow:node(EpisodeTable.cell(background, thisCell, thisCellB or v[2], (thisCellR or thisCellK))) end end -- Episodes root:node(args["bölümler"]) end return (args.dontclose and mw.ustring.gsub(tostring(root), "", "") or tostring(root)) .. categories end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- local p = {} function p.main(frame) local args = require('Modül:Bağımsız değişkenler').getArgs(frame, { removeBlanks = false, wrappers = 'Şablon:Bölüm tablosu' }) return EpisodeTable.new(args) end function p.part(frame) local args = require('Modül:Bağımsız değişkenler').getArgs(frame, { removeBlanks = false, wrappers = 'Şablon:Bölüm tablosu/kısım' }) return EpisodeTable.part(frame,args) end function p.ref(frame) local args = require('Modül:Bağımsız değişkenler').getArgs(frame, { removeBlanks = false, }) return EpisodeTable.reference(args.ka,args.b) end return p