در حال ویرایش پودمان:Protection banner

هشدار: شما وارد نشده‌اید. نشانی آی‌پی شما برای عموم قابل مشاهده خواهد بود اگر هر تغییری ایجاد کنید. اگر وارد شوید یا یک حساب کاربری بسازید، ویرایش‌هایتان به نام کاربری‌تان نسبت داده خواهد شد، همراه با مزایای دیگر.

این ویرایش را می‌توان خنثی کرد. لطفاً تفاوت زیر را بررسی کنید تا تأیید کنید که این چیزی است که می‌خواهید انجام دهید، سپس تغییرات زیر را ذخیره کنید تا خنثی‌سازی ویرایش را به پایان ببرید.

نسخهٔ فعلی متن شما
خط ۱: خط ۱:
-- 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)
if cat then
if cat then
return mw.ustring.format(
return string.format(
'[[%s:%s|%s]]',
'[[%s:%s|%s]]',
mw.site.namespaces[14].name,
mw.site.namespaces[14].name,
خط ۵۹: خط ۳۳:
local function validateDate(dateString, dateType)
local function validateDate(dateString, dateType)
if not lang then
if not lang then
-- در خط زیر جای mw.language.getContentLanguage() از mw.getLanguage('en') استفاده کردم.
lang = mw.language.getContentLanguage()
lang = mw.getLanguage('en')
end
end
local success, result = pcall(lang.formatDate, lang, 'U', converter('en', dateString))
local success, result = pcall(lang.formatDate, lang, 'U', dateString)
if success then
if success then
result = tonumber(result)
result = tonumber(result)
خط ۶۹: خط ۴۲:
end
end
end
end
error(mw.ustring.format(
error(string.format(
'%s نامعتبر: %s',
'invalid %s: %s',
dateType,
dateType,
tostring(dateString)
tostring(dateString)
خط ۷۷: خط ۵۰:


local function makeFullUrl(page, query, display)
local function makeFullUrl(page, query, display)
return mw.ustring.format(
return string.format(
'[%s %s]',
'[%s %s]',
tostring(mw.uri.fullUrl(page, query)),
tostring(mw.uri.fullUrl(page, query)),
خط ۱۳۹: خط ۱۱۲:
obj.action = args.action
obj.action = args.action
else
else
error(mw.ustring.format(
error(string.format(
'اقدام نامعتبر: %s',
'invalid action: %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, 'تاریخ انقضا')
obj.expiry = validateDate(effectiveExpiry, 'expiry date')
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('دلایل نمی‌تواند شامل نویسه خط عمودی («|») باشد', 3)
error('reasons cannot contain the pipe character ("|")', 3)
end
end
end
end
خط ۱۷۱: خط ۱۴۴:
-- Set protection date
-- Set protection date
if args.date then
if args.date then
obj.protectionDate = validateDate(args.date, 'تاریخ حفاظت')
obj.protectionDate = validateDate(args.date, 'protection 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.
-- در خط زیر جای mw.language.getContentLanguage() از mw.getLanguage('en') استفاده کردم.
lang = lang or mw.language.getContentLanguage()
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 'xij xiF xiY', -- The 'xi' prefix is the prefix for displaying Iranian time
self._cfg.msg['expiry-date-format'] or 'j F Y',
'@' .. replacePersianGreMonthName{converter('en', tostring(num))}
'@' .. 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')
خط ۵۲۸: خط ۵۰۰:
msg = explanations[action].default.default
msg = explanations[action].default.default
else
else
error(mw.ustring.format(
error(string.format(
'نمی‌توان explanation blurb را برای عمل «%s»، سطح «%s» و کلید بحث «%s» پیدا کرد',
'could not find explanation blurb for action "%s", level "%s" and talk key "%s"',
action,
action,
level,
level,
خط ۵۵۵: خط ۵۲۷:
function Blurb:_makeIntroBlurbParameter()
function Blurb:_makeIntroBlurbParameter()
if self._protectionObj:isTemporary() then
if self._protectionObj:isTemporary() then
return converter('fa', replacePersianMonthName(self:_getExpandedMessage('intro-blurb-expiry')))
return 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 converter('fa', replacePersianMonthName(self:_getExpandedMessage('intro-fragment-expiry')))
return 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('هیچ نوع صفحه پیش‌فرضی تعریف نشده‌است', 8)
or error('no default pagetype defined', 8)
end
end


خط ۵۸۸: خط ۵۶۰:
msg = protectionBlurbs.edit.default
msg = protectionBlurbs.edit.default
else
else
error('هیچ blurb حفاظتی برای protectionBlurbs.edit.default تعریف نشده‌است', 8)
error('no protection blurb defined for 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('هیچ سطح حفاظتی برای protectionLevels.edit.default تعریف نشده‌است', 8)
error('no protection level defined for 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:_makeTalkPageParameter()
function Blurb:_makeTalkPageParameter()
return mw.ustring.format(
return string.format(
'[[%s:%s#%s|%s]]',
'[[%s:%s#%s|%s]]',
mw.site.namespaces[self._protectionObj.title.namespace].talk.name,
mw.site.namespaces[self._protectionObj.title.namespace].talk.name,
خط ۶۵۰: خط ۶۲۲:
function Blurb:_makeTooltipBlurbParameter()
function Blurb:_makeTooltipBlurbParameter()
if self._protectionObj:isTemporary() then
if self._protectionObj:isTemporary() then
return converter('fa', replacePersianMonthName(self:_getExpandedMessage('tooltip-blurb-expiry')))
return 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 converter('fa', replacePersianMonthName(self:_getExpandedMessage('tooltip-fragment-expiry')))
return self:_getExpandedMessage('tooltip-fragment-expiry')
else
else
return self:_getExpandedMessage('tooltip-fragment-noexpiry')
return self:_getExpandedMessage('tooltip-fragment-noexpiry')
خط ۶۷۵: خط ۶۴۷:
-- Validate input.
-- Validate input.
if not key or not Blurb.bannerTextFields[key] then
if not key or not Blurb.bannerTextFields[key] then
error(mw.ustring.format(
error(string.format(
'«%s» زمینه پیکربندی بنر معتبری نیست',
'"%s" is not a valid banner config field',
tostring(key)
tostring(key)
), 2)
), 2)
خط ۶۸۸: خط ۶۶۰:
msg = msg(self._protectionObj, self._args)
msg = msg(self._protectionObj, self._args)
if type(msg) ~= 'string' then
if type(msg) ~= 'string' then
error(mw.ustring.format(
error(string.format(
'خروجی نامناسب از تابع پیکربندی بنر همراه کلید "%s"'
'bad output from banner config function with key "%s"'
.. ' (رشته انتظار می‌رود، %s داده شده‌است)',
.. ' (expected string, got %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('هیچ متن دلیلی تعیین نشده‌است', 2)
local reasonText = self._reasonText or error('no reason text set', 2)
local explanationText = self._explanationText
local explanationText = self._explanationText
local mbargs = {
local mbargs = {
خط ۷۸۹: خط ۷۶۱:
type = 'protection',
type = 'protection',
image = self:renderImage(),
image = self:renderImage(),
text = mw.ustring.format(
text = string.format(
"'''%s'''%s",
"'''%s'''%s",
reasonText,
reasonText,
خط ۸۴۶: خط ۸۱۸:
function p._main(args, cfg, title)
function p._main(args, cfg, title)
args = args or {}
args = args or {}
-- local args
if args['کوچک'] then args.small = args['کوچک'] end
if args['عمل'] then args.action = args['عمل'] end
if args['تاریخ'] then args.date = args['تاریخ'] end
if args['کاربر'] then args.user = args['کاربر'] end
if args['بخش'] then args.section = args['بخش'] end
if args['رده'] then args.category = args['رده'] end
if args['فقط رده'] then args.catonly = args['فقط رده'] end
cfg = cfg or require(CONFIG_MODULE)
cfg = cfg or require(CONFIG_MODULE)


خط ۸۹۷: خط ۸۵۹:
-- 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[mw.ustring.gsub(parent:getTitle(), '/تمرین$', '')]
local defaultArgs = parent and cfg.wrappers[parent:getTitle():gsub('/sandbox$', '')]


-- 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
لطفاً توجه داشته‌باشید که همهٔ مشارکت‌ها در ویکی حج منتشرشده تحت Creative Commons Attribution-NonCommercial-ShareAlike در نظر گرفته‌می‌شوند (برای جزئیات بیش‌تر ویکی حج:حق تکثیر را ببینید). اگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش و توزیع شوند؛ بنابراین، آنها را اینجا ارائه نکنید.
شما همچنین به ما تعهد می‌کنید که خودتان این را نوشته‌اید یا آن را از یک منبع با مالکیت عمومی یا مشابه آزاد آن برداشته‌اید (برای جزئیات بیش‌تر ویکی حج:حق تکثیر را ببینید). کارهای دارای حق تکثیر را بدون اجازه ارائه نکنید!
لغو راهنمای ویرایش‌کردن (در پنجرهٔ تازه باز می‌شود)

الگوی به‌کاررفته در این صفحه: