پودمان:Uses TemplateStyles: تفاوت میان نسخه‌ها

از امامت‌پدیا، دانشنامهٔ امامت و ولایت
(فارسی)
جز (۱ نسخه واردشده)
 
(۷ نسخهٔ میانی ویرایش شده توسط ۴ کاربر نشان داده نشد)
خط ۱: خط ۱:
-- This module implements the {{Uses TemplateStyles}} template.
local yesno = require('Module:Yesno')
local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local mMessageBox = require('Module:Message box')
local TNT = require('Module:TNT')


local p = {}
local p = {}


function p.main(frame)
local function format(msg, ...)
local origArgs = frame:getParent().args
return TNT.format('I18n/Uses TemplateStyles', msg, ...)
local args = {}
for k, v in pairs(origArgs) do
v = v:match('^%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
end


function p._main(args)
local function getConfig()
local tStyles = mTableTools.compressSparseArray(args)
return mw.loadData('Module:Uses TemplateStyles/config')
local box = p.renderBox(tStyles)
local trackingCategories = p.renderTrackingCategories(args, tStyles)
return box .. trackingCategories
end
end


function p.renderBox(tStyles)
local function renderBox(tStyles)
local boxArgs = {}
local boxArgs = {
type = 'notice',
small = true,
image = string.format('[[File:Farm-Fresh css add.svg|32px|alt=%s]]', format('logo-alt'))
}
if #tStyles < 1 then
if #tStyles < 1 then
boxArgs.text = '<strong class="error">خطا: هیچ الگوسبکی مشخص نشده</strong>'
boxArgs.text = string.format('<strong class="error">%s</strong>', format('error-emptylist'))
else
else
local cfg = getConfig()
local tStylesLinks = {}
local tStylesLinks = {}
for i, ts in ipairs(tStyles) do
for i, ts in ipairs(tStyles) do
local link = string.format('[[:%s]]', ts)
local sandboxLink = nil
local sandboxLink = nil
local tsTitle = mw.title.new(ts)
local tsTitle = mw.title.new(ts)
if tsTitle then
if tsTitle and cfg['sandbox_title'] then
local tsSandboxTitle = mw.title.new(string.format('%s:%s/تمرین/%s', tsTitle.nsText, tsTitle.baseText, tsTitle.subpageText))
local tsSandboxTitle = mw.title.new(string.format(
'%s:%s/%s/%s', tsTitle.nsText, tsTitle.baseText, cfg['sandbox_title'], tsTitle.subpageText))
if tsSandboxTitle and tsSandboxTitle.exists then
if tsSandboxTitle and tsSandboxTitle.exists then
sandboxLink = string.format(' ([[:%s|تمرین]])', tsSandboxTitle.prefixedText)
sandboxLink = format('sandboxlink', link, ':' .. tsSandboxTitle.prefixedText)
end
end
end
end
tStylesLinks[i] = string.format('[[:%s]]%s', ts, sandboxLink or '')
tStylesLinks[i] = sandboxLink or link
end
end
local tStylesList = mList.makeList('bulleted', tStylesLinks)
local tStylesList = mList.makeList('bulleted', tStylesLinks)
boxArgs.text = 'این ' ..
boxArgs.text = format(
(mw.title.getCurrentTitle():inNamespaces(828,829) and 'پودمان' or 'الگو') ..
mw.title.getCurrentTitle():inNamespaces(828,829) and 'header-module' or 'header-template') ..
' از [[امامت‌پدیا:الگوسبک|الگوسبک]] استفاده می‌کند:\n' .. tStylesList
'\n' .. tStylesList
end
end
boxArgs.type = 'notice'
boxArgs.small = true
boxArgs.image = '[[File:Farm-Fresh css add.svg|32px|alt=CSS]]'
return mMessageBox.main('mbox', boxArgs)
return mMessageBox.main('mbox', boxArgs)
end
end


function p.renderTrackingCategories(args, tStyles, titleObj)
local function renderTrackingCategories(args, tStyles, titleObj)
if yesno(args.nocat) then
if yesno(args.nocat) then
return ''
return ''
end
end
local cfg = getConfig()
local cats = {}
local cats = {}
-- Error category
-- Error category
if #tStyles < 1 then
if #tStyles < 1 and cfg['error_category'] then
cats[#cats + 1] = 'الگوهای از الگوسبک استفاده می‌کند دارای خطا'
cats[#cats + 1] = cfg['error_category']
end
end
-- TemplateStyles category
-- TemplateStyles category
titleObj = titleObj or mw.title.getCurrentTitle()
titleObj = titleObj or mw.title.getCurrentTitle()
local subpageBlacklist = {
doc = true,
sandbox = true,
sandbox2 = true,
testcases = true
}
if (titleObj.namespace == 10 or titleObj.namespace == 828)
if (titleObj.namespace == 10 or titleObj.namespace == 828)
and not subpageBlacklist[titleObj.subpageText]
and not cfg['subpage_blacklist'][titleObj.subpageText]
then
then
local category = args.category
local category = args.category or cfg['default_category']
if not category then
if category then
category = category or 'الگوهایی که از الگوسبک استفاده می‌کنند'
cats[#cats + 1] = category
end
end
cats[#cats + 1] = category
if not yesno(args.noprotcat) and (cfg['protection_conflict_category'] or cfg['padlock_pattern']) then
if not yesno(args.noprotcat) then
local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil
local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil
local addedLevelCat = false
local addedLevelCat = false
خط ۸۹: خط ۷۷:
local tsTitleObj = mw.title.new(ts)
local tsTitleObj = mw.title.new(ts)
local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil
local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil
if tsProt ~= currentProt and not addedLevelCat then
if cfg['padlock_pattern'] and tsProt and not addedPadlockCat then
cats[#cats + 1] = "الگوهایی که از الگوسبک با سطح حفاظت متفاوت استفاده می‌کنند"
end
if tsProt and not addedPadlockCat then
local content = tsTitleObj:getContent()
local content = tsTitleObj:getContent()
if not content:find("{{pp-") then
if not content:find(cfg['padlock_pattern']) then
cats[#cats + 1] = "الگوهایی که از الگوسبک بدون آیکون قفل استفاده می‌کنند"
cats[#cats + 1] = cfg['missing_padlock_category']
addedPadlockCat = true
addedPadlockCat = true
end
end
if cfg['protection_conflict_category'] and currentProt and tsProt ~= currentProt and not addedLevelCat then
currentProt = cfg['protection_hierarchy'][currentProt] or 0
tsProt = cfg['protection_hierarchy'][tsProt] or 0
if tsProt < currentProt then
addedLevelCat = true
cats[#cats + 1] = cfg['protection_conflict_category']
end
end
end
end
خط ۱۰۳: خط ۹۶:
end
end
for i, cat in ipairs(cats) do
for i, cat in ipairs(cats) do
cats[i] = string.format('[[رده:%s]]', cat)
cats[i] = string.format('[[Category:%s]]', cat)
end
end
return table.concat(cats)
return table.concat(cats)
end
function p._main(args, cfg)
local tStyles = mTableTools.compressSparseArray(args)
local box = renderBox(tStyles)
local trackingCategories = renderTrackingCategories(args, tStyles)
return box .. trackingCategories
end
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('^%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
end


return p
return p

نسخهٔ کنونی تا ‏۱۸ نوامبر ۲۰۲۲، ساعت ۱۳:۳۸

توضیحات این پودمان می‌تواند در پودمان:Uses TemplateStyles/توضیحات قرار گیرد.

local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local TNT = require('Module:TNT')

local p = {}

local function format(msg, ...)
	return TNT.format('I18n/Uses TemplateStyles', msg, ...)
end

local function getConfig()
	return mw.loadData('Module:Uses TemplateStyles/config')
end

local function renderBox(tStyles)
	local boxArgs = {
		type = 'notice',
		small = true,
		image = string.format('[[File:Farm-Fresh css add.svg|32px|alt=%s]]', format('logo-alt'))
	}
	if #tStyles < 1 then
		boxArgs.text = string.format('<strong class="error">%s</strong>', format('error-emptylist'))
	else
		local cfg = getConfig()
		local tStylesLinks = {}
		for i, ts in ipairs(tStyles) do
			local link = string.format('[[:%s]]', ts)
			local sandboxLink = nil
			local tsTitle = mw.title.new(ts)
			if tsTitle and cfg['sandbox_title'] then
				local tsSandboxTitle = mw.title.new(string.format(
					'%s:%s/%s/%s', tsTitle.nsText, tsTitle.baseText, cfg['sandbox_title'], tsTitle.subpageText))
				if tsSandboxTitle and tsSandboxTitle.exists then
					sandboxLink = format('sandboxlink', link, ':' .. tsSandboxTitle.prefixedText)
				end
			end
			tStylesLinks[i] = sandboxLink or link
		end
		local tStylesList = mList.makeList('bulleted', tStylesLinks)
		boxArgs.text = format(
			mw.title.getCurrentTitle():inNamespaces(828,829) and 'header-module' or 'header-template') ..
			'\n' .. tStylesList
	end
	return mMessageBox.main('mbox', boxArgs)
end

local function renderTrackingCategories(args, tStyles, titleObj)
	if yesno(args.nocat) then
		return ''
	end
	
	local cfg = getConfig()
	
	local cats = {}
	
	-- Error category
	if #tStyles < 1 and cfg['error_category'] then
		cats[#cats + 1] = cfg['error_category']
	end
	
	-- TemplateStyles category
	titleObj = titleObj or mw.title.getCurrentTitle()
	if (titleObj.namespace == 10 or titleObj.namespace == 828)
		and not cfg['subpage_blacklist'][titleObj.subpageText]
	then
		local category = args.category or cfg['default_category']
		if category then
			cats[#cats + 1] = category
		end
		if not yesno(args.noprotcat) and (cfg['protection_conflict_category'] or cfg['padlock_pattern']) then
			local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil
			local addedLevelCat = false
			local addedPadlockCat = false
			for i, ts in ipairs(tStyles) do
				local tsTitleObj = mw.title.new(ts)
				local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil
				if cfg['padlock_pattern'] and tsProt and not addedPadlockCat then
					local content = tsTitleObj:getContent()
					if not content:find(cfg['padlock_pattern']) then
						cats[#cats + 1] = cfg['missing_padlock_category']
						addedPadlockCat = true
					end
				end
				if cfg['protection_conflict_category'] and currentProt and tsProt ~= currentProt and not addedLevelCat then
					currentProt = cfg['protection_hierarchy'][currentProt] or 0
					tsProt = cfg['protection_hierarchy'][tsProt] or 0
					if tsProt < currentProt then
						addedLevelCat = true
						cats[#cats + 1] = cfg['protection_conflict_category']
					end
				end
			end
		end
	end
	for i, cat in ipairs(cats) do
		cats[i] = string.format('[[Category:%s]]', cat)
	end
	return table.concat(cats)
end

function p._main(args, cfg)
	local tStyles = mTableTools.compressSparseArray(args)
	local box = renderBox(tStyles)
	local trackingCategories = renderTrackingCategories(args, tStyles)
	return box .. trackingCategories
end

function p.main(frame)
	local origArgs = frame:getParent().args
	local args = {}
	for k, v in pairs(origArgs) do
		v = v:match('^%s*(.-)%s*$')
		if v ~= '' then
			args[k] = v
		end
	end
	return p._main(args)
end

return p