وحدة:WritingCredits
الاستخدام
[عدل]يُنشِئ قائمة اعتامدات الكتابة القياسية والمنسَّقة من أجل جداول حلقات التلفزيون، وذلك باستخدام {main} مع الوسائط المعرَّفة في توثيق القالب.
تصنيفات التتبع
[عدل]
-- This module implements {{WritingCredits}}.
--------------------------------------------------------------------------------
-- WritingCredits class
-- The main class.
--------------------------------------------------------------------------------
local WritingCredits = {}
function WritingCredits.splitTable(tab)
-- Split comma-separated values by letter/number
local t = {}
for v in string.gmatch(tab, "[%w%d]+") do
t[#t+1] = v
end
return t
end
function WritingCredits.hasValue(tab, val)
-- Check for value within table
for k, v in ipairs(tab) do
if v == val then
return true
end
end
return false
end
function WritingCredits.new(frame, args)
args = args or {}
local categories = ""
local aliases = {
['الكاتب'] = 'w',
['القصة'] = 's',
['السيناريو'] = 't',
['لوحة القصة'] = 'sb',
['اختياري 1'] = 'ex1',
['اختياري 2'] = 'ex2',
['اختياري 3'] = 'ex3',
['الترتيب'] = 'order',
['عنوان الكاتب'] = 'wlabel',
['عنوان القصة'] = 'slabel',
['عنوان السيناريو'] = 'tlabel',
['عنوان لوحة القصة'] = 'sblabel',
['عنوان اختياري 1'] = 'ex1label',
['عنوان اختياري 2'] = 'ex2label',
['عنوان اختياري 3'] = 'ex3label'
}
for k,v in pairs(aliases) do
if args[k] then
args[v] = args[k]
end
end
-- Default order: writer, story, teleplay, storyboard, extras
local defaultOrder = "w,s,t,sb,ex1,ex2,ex3"
local defaultOrder_split = WritingCredits.splitTable(defaultOrder)
local givenOrder = args.order or ""
local givenOrder_split = WritingCredits.splitTable(givenOrder)
-- Order of parameters: any provided by template call in their order, then any undeclared in their default order
for k, v in ipairs(defaultOrder_split) do
if WritingCredits.hasValue(givenOrder_split, v) == false then
table.insert(givenOrder_split, v)
end
end
-- Default or custom labels
local labels = {}
local extraDefault = "Additional credits"
labels['w'] = args['wlabel'] or "الكاتب"
labels['s'] = args['slabel'] or "القصة"
labels['t'] = args['tlabel'] or "السيناريو"
labels['sb'] = args['sblabel'] or "لوحة القصة"
labels['ex1'] = args['ex1label'] or extraDefault
labels['ex2'] = args['ex2label'] or extraDefault
labels['ex3'] = args['ex3label'] or extraDefault
-- Format labels and values
local redundantLabel = false
local writingCredits = args[1] or ""
for _num, para in ipairs(givenOrder_split) do
if args[para] then
writingCredits = writingCredits .. (writingCredits ~= "" and "<br />" or "") .. ("<i>" .. labels[para] .. "</i> : " .. args[para])
-- Redundant label check; e.g. |slabel=Written by |s=John Doe (this should just be |w=John Doe)
for l_para, l_label in pairs(labels) do
-- e.g.: sb ~= t (and) labels[sb] == labels[t] (and) labels[sb] ~= extraDefault
if l_para ~= para and labels[l_para] == labels[para] and l_label ~= extraDefault then
redundantLabel = true
end
end
end
end
local title = mw.title.getCurrentTitle()
if title.namespace == 0 and redundantLabel then
categories = categories .. "[[Category:Pages using Template:WritingCredits with redundant labels]]"
end
return writingCredits .. categories
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {
removeBlanks = false,
wrappers = 'قالب:اعتمادات الكتابة'
})
return WritingCredits.new(frame, args)
end
return p