پرش به محتوا

پودمان:Protection banner: تفاوت میان نسخه‌ها

۲٬۸۶۵ بایت اضافه‌شده ،  ‏۹ آوریل ۲۰۲۰
جز
ویرایش Huji (بحث) به آخرین تغییری که Dalba انجام داده بود واگردانده شد
جز (1 revision imported)
جز (ویرایش Huji (بحث) به آخرین تغییری که Dalba انجام داده بود واگردانده شد)
خط ۱: خط ۱:
-- This module implements {{pp-meta}} and its daughter templates such as
-- This module implements {{pp-meta}} and its daughter templates such as
-- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}.
-- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}.
-- بخش‌هایی از این پودمان برای فارسی‌سازی بهتر تغییریافته است. لطفاً هنگام به‌روزرسانی دقت کنید.


-- Initialise necessary modules.
-- Initialise necessary modules.
require('Module:No globals')
require('Module:No globals')
local converter = require("Module:Numeral converter").convert
local makeFileLink = require('Module:File link')._main
local makeFileLink = require('Module:File link')._main
local effectiveProtectionLevel = require('Module:Effective protection level')._main
local effectiveProtectionLevel = require('Module:Effective protection level')._main
خط ۱۸: خط ۲۰:
-- Helper functions
-- Helper functions
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- چون ممکنه نام ماه میلادی رو به فارسی کاربران بنویسند من این تابع رو تعریف کردم که به انگلیسی برگرداند تا خطای تاریخ نامعتبر ندهد.
local function replacePersianGreMonthName(frame)
getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
local greMonth = {'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'}
local perGreMonth = {'ژانویه', 'فوریه', 'مارس', 'آوریل', 'مه', 'ژوئن', 'ژوئیه', 'اوت', 'سپتامبر', 'اکتبر', 'نوامبر', 'دسامبر'}
for k, v in ipairs(perGreMonth) do
args[1] = mw.ustring.gsub(args[1], v, greMonth[k])
end
return converter("en", args[1])
end
-- از آنجا که تاریخ‌ها به صورت انگلیسی به پودمان داده می‌شوند، از mw.getLanguage('en') استفاده شده‌است
-- و خروجی formatDate() از آبجکت زبان مربوطه با فرمت xi انگلیسی است.
-- برای تبدیل نام انگلیسی ماه‌های فارسی به نوشتهٔ فارسی از این تابع استفاده می‌شود.
local function replacePersianMonthName(str)
local engMonth = {'Farvardin', 'Ordibehesht', 'Khordad', 'Tir', 'Mordad', 'Shahrivar', 'Mehr', 'Aban', 'Azar', 'Dey', 'Bahman', 'Esfand'}
local faMonth = {'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'}
for k, v in ipairs(engMonth) do
str = mw.ustring.gsub(str, v, faMonth[k])
end
return str
end


local function makeCategoryLink(cat, sort)
local function makeCategoryLink(cat, sort)
خط ۳۳: خط ۵۹:
local function validateDate(dateString, dateType)
local function validateDate(dateString, dateType)
if not lang then
if not lang then
lang = mw.language.getContentLanguage()
-- در خط زیر جای mw.language.getContentLanguage() از mw.getLanguage('en') استفاده کردم.
lang = mw.getLanguage('en')
end
end
local success, result = pcall(lang.formatDate, lang, 'U', dateString)
local success, result = pcall(lang.formatDate, lang, 'U', converter('en', dateString))
if success then
if success then
result = tonumber(result)
result = tonumber(result)
خط ۴۳: خط ۷۰:
end
end
error(string.format(
error(string.format(
'invalid %s: %s',
'%s نامعتبر: %s',
dateType,
dateType,
tostring(dateString)
tostring(dateString)
خط ۱۱۳: خط ۱۴۰:
else
else
error(string.format(
error(string.format(
'invalid action: %s',
'اقدام نامعتبر: %s',
tostring(args.action)
tostring(args.action)
), 3)
), 3)
خط ۱۳۱: خط ۱۵۸:
obj.expiry = 'indef'
obj.expiry = 'indef'
elseif effectiveExpiry ~= 'unknown' then
elseif effectiveExpiry ~= 'unknown' then
obj.expiry = validateDate(effectiveExpiry, 'expiry date')
obj.expiry = validateDate(effectiveExpiry, 'تاریخ انقضا')
end
end


خط ۱۳۸: خط ۱۶۵:
obj.reason = mw.ustring.lower(args[1])
obj.reason = mw.ustring.lower(args[1])
if obj.reason:find('|') then
if obj.reason:find('|') then
error('reasons cannot contain the pipe character ("|")', 3)
error('دلایل نمی‌تواند شامل نویسه خط عمودی («|») باشد', 3)
end
end
end
end
خط ۱۴۴: خط ۱۷۱:
-- Set protection date
-- Set protection date
if args.date then
if args.date then
obj.protectionDate = validateDate(args.date, 'protection date')
obj.protectionDate = validateDate(args.date, 'تاریخ حفاظت')
end
end
خط ۳۶۷: خط ۳۹۴:
function Blurb:_formatDate(num)
function Blurb:_formatDate(num)
-- Formats a Unix timestamp into dd Month, YYYY format.
-- Formats a Unix timestamp into dd Month, YYYY format.
lang = lang or mw.language.getContentLanguage()
-- در خط زیر جای mw.language.getContentLanguage() از mw.getLanguage('en') استفاده کردم.
lang = lang or mw.getLanguage('en')
local success, date = pcall(
local success, date = pcall(
lang.formatDate,
lang.formatDate,
lang,
lang,
self._cfg.msg['expiry-date-format'] or 'j F Y',
self._cfg.msg['expiry-date-format'] or 'xij xiF xiY', -- The 'xi' prefix is the prefix for displaying Iranian time
'@' .. tostring(num)
'@' .. replacePersianGreMonthName{converter('en', tostring(num))}
)
)
if success then
if success then
خط ۴۲۸: خط ۴۵۶:
-- We need the move log link.
-- We need the move log link.
return makeFullUrl(
return makeFullUrl(
'Special:Log',
'ویژه:سیاهه‌ها',
{type = 'move', page = pagename},
{type = 'move', page = pagename},
self:_getExpandedMessage('current-version-move-display')
self:_getExpandedMessage('current-version-move-display')
خط ۵۰۱: خط ۵۲۹:
else
else
error(string.format(
error(string.format(
'could not find explanation blurb for action "%s", level "%s" and talk key "%s"',
'نمی‌توان explanation blurb را برای عمل «%s»، سطح «%s» و کلید بحث «%s» پیدا کرد',
action,
action,
level,
level,
خط ۵۲۷: خط ۵۵۵:
function Blurb:_makeIntroBlurbParameter()
function Blurb:_makeIntroBlurbParameter()
if self._protectionObj:isTemporary() then
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('intro-blurb-expiry')
return converter('fa', replacePersianMonthName(self:_getExpandedMessage('intro-blurb-expiry')))
else
else
return self:_getExpandedMessage('intro-blurb-noexpiry')
return self:_getExpandedMessage('intro-blurb-noexpiry')
خط ۵۳۵: خط ۵۶۳:
function Blurb:_makeIntroFragmentParameter()
function Blurb:_makeIntroFragmentParameter()
if self._protectionObj:isTemporary() then
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('intro-fragment-expiry')
return converter('fa', replacePersianMonthName(self:_getExpandedMessage('intro-fragment-expiry')))
else
else
return self:_getExpandedMessage('intro-fragment-noexpiry')
return self:_getExpandedMessage('intro-fragment-noexpiry')
خط ۵۴۵: خط ۵۷۳:
return pagetypes[self._protectionObj.title.namespace]
return pagetypes[self._protectionObj.title.namespace]
or pagetypes.default
or pagetypes.default
or error('no default pagetype defined', 8)
or error('هیچ نوع صفحه پیش‌فرضی تعریف نشده‌است', 8)
end
end


خط ۵۶۰: خط ۵۸۸:
msg = protectionBlurbs.edit.default
msg = protectionBlurbs.edit.default
else
else
error('no protection blurb defined for protectionBlurbs.edit.default', 8)
error('هیچ blurb حفاظتی برای protectionBlurbs.edit.default تعریف نشده‌است', 8)
end
end
return self:_substituteParameters(msg)
return self:_substituteParameters(msg)
خط ۵۸۶: خط ۶۱۴:
msg = protectionLevels.edit.default
msg = protectionLevels.edit.default
else
else
error('no protection level defined for protectionLevels.edit.default', 8)
error('هیچ سطح حفاظتی برای protectionLevels.edit.default تعریف نشده‌است', 8)
end
end
return self:_substituteParameters(msg)
return self:_substituteParameters(msg)
خط ۵۹۶: خط ۶۲۴:
-- We need the pending changes log.
-- We need the pending changes log.
return makeFullUrl(
return makeFullUrl(
'Special:Log',
'ویژه:سیاهه‌ها',
{type = 'stable', page = pagename},
{type = 'stable', page = pagename},
self:_getExpandedMessage('pc-log-display')
self:_getExpandedMessage('pc-log-display')
خط ۶۰۳: خط ۶۳۱:
-- We need the protection log.
-- We need the protection log.
return makeFullUrl(
return makeFullUrl(
'Special:Log',
'ویژه:سیاهه‌ها',
{type = 'protect', page = pagename},
{type = 'protect', page = pagename},
self:_getExpandedMessage('protection-log-display')
self:_getExpandedMessage('protection-log-display')
خط ۶۲۲: خط ۶۵۰:
function Blurb:_makeTooltipBlurbParameter()
function Blurb:_makeTooltipBlurbParameter()
if self._protectionObj:isTemporary() then
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('tooltip-blurb-expiry')
return converter('fa', replacePersianMonthName(self:_getExpandedMessage('tooltip-blurb-expiry')))
else
else
return self:_getExpandedMessage('tooltip-blurb-noexpiry')
return self:_getExpandedMessage('tooltip-blurb-noexpiry')
خط ۶۳۰: خط ۶۵۸:
function Blurb:_makeTooltipFragmentParameter()
function Blurb:_makeTooltipFragmentParameter()
if self._protectionObj:isTemporary() then
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('tooltip-fragment-expiry')
return converter('fa', replacePersianMonthName(self:_getExpandedMessage('tooltip-fragment-expiry')))
else
else
return self:_getExpandedMessage('tooltip-fragment-noexpiry')
return self:_getExpandedMessage('tooltip-fragment-noexpiry')
خط ۶۴۸: خط ۶۷۶:
if not key or not Blurb.bannerTextFields[key] then
if not key or not Blurb.bannerTextFields[key] then
error(string.format(
error(string.format(
'"%s" is not a valid banner config field',
'«%s» زمینه پیکربندی بنر معتبری نیست',
tostring(key)
tostring(key)
), 2)
), 2)
خط ۶۶۱: خط ۶۸۹:
if type(msg) ~= 'string' then
if type(msg) ~= 'string' then
error(string.format(
error(string.format(
'bad output from banner config function with key "%s"'
'خروجی نامناسب از تابع پیکربندی بنر همراه کلید "%s"'
.. ' (expected string, got %s)',
.. ' (رشته انتظار می‌رود، %s داده شده‌است)',
tostring(key),
tostring(key),
type(msg)
type(msg)
خط ۷۵۵: خط ۷۸۳:
-- Renders the banner.
-- Renders the banner.
makeMessageBox = makeMessageBox or require('Module:Message box').main
makeMessageBox = makeMessageBox or require('Module:Message box').main
local reasonText = self._reasonText or error('no reason text set', 2)
local reasonText = self._reasonText or error('هیچ متن دلیلی تعیین نشده‌است', 2)
local explanationText = self._explanationText
local explanationText = self._explanationText
local mbargs = {
local mbargs = {
خط ۸۵۹: خط ۸۸۷:
-- Find default args, if any.
-- Find default args, if any.
local parent = frame.getParent and frame:getParent()
local parent = frame.getParent and frame:getParent()
local defaultArgs = parent and cfg.wrappers[parent:getTitle():gsub('/sandbox$', '')]
local defaultArgs = parent and cfg.wrappers[mw.ustring.gsub(parent:getTitle(), '/تمرین$', '')]


-- Find user args, and use the parent frame if we are being called from a
-- Find user args, and use the parent frame if we are being called from a
کاربر ناشناس