وحدة:زر طلب
توثيق الوحدة [أنشئ] [محو الاختزان][استخدامات] [قوالب]
local p = {}
function p.main(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
return p._main(args)
end
function p._main(args)
-- إذا لم يتم توفير مدخل في args[1]، لا يتم عرض شيء.
if not args[1] then
return ''
end
local data = p.makeDisplayData(args)
return p.renderDisplay(data)
end
function p.makeDisplayData(args)
local data = {}
-- النص المعروض يعتمد فقط على args[1]
data.display = args[1]
-- الألوان: اللون الافتراضي هو الأزرق
local colour = args.color and args.color:lower() or 'blue'
-- الأصناف (Classes)
data.classes = {}
table.insert(data.classes, 'btnrequestui') -- إضافة الصنف دائمًا
table.insert(data.classes, 'mw-ui-button') -- صنف افتراضي
-- تحديد الصنف بناءً على اللون
local class = args.class and args.class:lower()
if not class then
if colour == 'blue' then
class = 'mw-ui-progressive'
elseif colour == 'red' then
class = 'mw-ui-destructive'
elseif colour == 'green' then
class = 'mw-ui-constructive'
end
end
if class then
table.insert(data.classes, class)
end
-- الأنماط (Styles)
data.style = args.style
-- جمع جميع الصفات التي تبدأ بـ `data-input-*`
data.dataAttributes = {}
for key, value in pairs(args) do
if type(key) == 'string' and key:match("^data%-input%-") then
data.dataAttributes[key] = value
end
end
-- إضافة الخصائص الإضافية
data.dataAttributes['data-pre'] = args[2] or args.pre or ""
data.dataAttributes['data-title'] = args[3] or args.title or ""
data.dataAttributes['data-page'] = args[4] or args.page or ""
return data
end
function p.renderDisplay(data)
-- إنشاء النص المعروض
local displaySpan = mw.html.create('span')
for _, class in ipairs(data.classes or {}) do
displaySpan:addClass(class)
end
displaySpan:css{
['background-color'] = data.backgroundColor,
color = data.color
}
if data.style then
displaySpan:cssText(data.style)
end
displaySpan:wikitext(data.display)
-- إضافة الصفات `data-input-*`
for key, value in pairs(data.dataAttributes) do
displaySpan:attr(key, value)
end
return tostring(displaySpan)
end
return p