Sari la conținut

Modul:Wikiproject

Permanently protected module
De la Wikipedia, enciclopedia liberă
local getArgs = require('Modul:Arguments').getArgs

local p = {}
local nsdata = { 
	[0] = { displayName = "articol", artDisplayName = "Articolul",  fem = false},
	[2] = { displayName = "pagină de utilizator", artDisplayName = "Pagina de utilizator", fem = true},
	[4] = { displayName = "pagină de proiect", artDisplayName = "Pagina de proiect", fem = true},
	[6] = { displayName = "fișier", artDisplayName = "Fișierul", fem = false},
	[8] = { displayName = "pagină de cod sau interfață", artDisplayName = "Pagina de cod sau interfață", fem = true},
	[10] = { displayName = "format", artDisplayName = "Formatul", fem = false},
	[100] = { displayName = "portal", artDisplayName = "Portalul", fem = false},
	[108] = { displayName = "carte", artDisplayName = "Cartea", fem = true},
	[128] = { displayName = "modul", artDisplayName = "Modulul", fem = false}
}

local classes = {
	['a'] = {
		['background'] = '#66ffff',
		['image'] = 'Symbol a class.svg',
		['classname'] = 'A',
		['classcat'] = 'Articole de clasa „A”',
		['specificcat'] = 'Articole de clasa „A” ale proiectului $1'
	},
	['ab'] = {
		['background'] = '#66ff66',
		['image'] = 'Symbol support vote.svg',
		['classname'] = 'AB',
		['classcat'] = 'Articole bune (clasament)',
		['specificcat'] = 'Articole bune ale proiectului $1'
	},
	['ac'] = {
		['background'] = '#6699ff',
		['image'] = 'LinkFA-star.png',
		['classname'] = 'AC',
		['classcat'] = 'Articole de calitate (clasament)',
		['specificcat'] = 'Articole de calitate ale proiectului $1'
	},
	['b'] = {
		['background'] = '#c2ff66',
		['classname'] = 'B',
		['classcat'] = 'Articole de clasa „B”',
		['specificcat'] = 'Articole de clasa „B” ale proiectului $1'
	},
	['c'] = {
		['background'] = '#ffff66',
		['classname'] = 'C',
		['classcat'] = 'Articole de clasa „C”',
		['specificcat'] = 'Articole de clasa „C” ale proiectului $1'
	},
	['ciot'] = {
		['background'] = '#ff6666',
		['classname'] = 'Ciot',
		['classcat'] = 'Articole de clasa „ciot”',
		['specificcat'] = 'Articole de clasa „ciot” ale proiectului $1'
	},
	['format'] = {
		['background'] = '#fbceb1',
		['classname'] = 'Format',
		['classcat'] = 'Articole de clasa „format”',
		['specificcat'] = 'Articole de clasa „format” ale proiectului $1'
	},
	['început'] = {
		['background'] = '#ffaa66',
		['classname'] = 'Început',
		['classcat'] = 'Articole de clasa „început”',
		['specificcat'] = 'Articole de clasa „început” ale proiectului $1'
	},
	['lc'] = {
		['background'] = '#aa88ff',
		['classname'] = 'LC',
		['image'] = 'Vista-keditbookmarks.png',
		['classcat'] = 'Liste de calitate (clasament)',
		['specificcat'] = 'Articole de clasa „listă” ale proiectului $1'
	},
	['listă'] = {
		['background'] = '#aa88ff',
		['classname'] = 'Listă',
		['clascat'] = 'Articole de clasa „listă”',
		['specificcat'] = 'Articole de clasa „listă” ale proiectului $1'
	},
	['portal'] = {
		['background'] = '#cc8899',
		['classname'] = 'Portal',
		['clascat'] = 'Articole de clasa „portal”',
		['specificcat'] = 'Articole de clasa „portal” ale proiectului $1'
	},
	['viitor'] = {
		['background'] = '#8a95c9',
		['classname'] = 'Viitor',
		['clascat'] = 'Viitor (clasament)'
	}
}
classes['start'] = classes['început']

local importanceClasses = {
	['top'] = {
		['background'] = '#ff00ff',
		['classcat'] = 'Cele mai importante articole',
		['classname'] = 'Top',
		['specificcat'] = 'Cele mai importante articole ale proiectului $1'
	},
	['mare'] = {
		['background'] = '#ff88ff',
		['classcat'] = 'Articole de importanță mare',
		['classname'] = 'Mare',
		['specificcat'] = 'Articole de importanță mare pentru proiectul $1'
	},
	['medie'] = {
		['background'] = '#ffccff',
		['classcat'] = 'Articole de importanță medie',
		['classname'] = 'Medie',
		['specificcat'] = 'Articole de importanță medie pentru proiectul $1'
	},
	['mică'] = {
		['background'] = '#ffddff',
		['classcat'] = 'Articole de importanță mică',
		['classname'] = 'Mică',
		['specificcat'] = 'Articole de importanță mică pentru proiectul $1'
	}
}

local noclass = {
	['background'] = 'transparent',
	['classname'] = 'Neclasificat'
}

local function clasament(parentElement, class)
	local newTag = parentElement:tag('td')
		:css('background', class.background)
		:css('text-align', 'center')
		:wikitext(class.image and ('[[Fișier:' .. class.image .. '|14px]]') or '', class.classname, class.classcat and ('[[Categorie:' .. class.classcat .. '|' .. class.classname .. ']]') or '')
	return newTag
end

p.fromArgs = function(project, display, evaluation) 
	local crtTitle = mw.title.getCurrentTitle()

	local tableSpan = mw.html.create('span')
	tableSpan:attr('lang', 'x-sic')
	local mainTable = tableSpan:tag('table')
	mainTable:addClass('messagebox')
	if display.nested then
		mainTable
			:addClass('collapsible')
			:addClass('collapsed')
			:addClass('nested-talk')
	elseif display.small then
		mainTable:addClass('small-talk')
	else
		mainTable:addClass('standard-talk')
	end
	
	if display.nested then
		mainTable
			:tag('tr')
				:tag('th')
					:attr('colspan', '2')
					:css('text-align', 'center')
					:wikitext('[[' .. project.page .. '|Proiect ' .. project.name .. ']]', evaluation.class and (' (evaluat ca făcând parte din grupa ' .. evaluation.class .. ')') or nil)
	end

	local namespaceIndex = math.floor(crtTitle.namespace / 2) * 2
	local namespaceNameData = nsdata[namespaceIndex]
	local intro
	if namespaceNameData then 
		qualifiedIntro = (namespaceNameData.fem and 'Această ' or 'Acest ') .. namespaceNameData.displayName
		unqualifiedIntro = namespaceNameData.artDisplayName
	else
		qualifiedIntro = 'Acest ' .. mw.ustring.lower(mw.site.namespaces[namespaceIndex].name)
		unqualifiedIntro = mw.ustring.lower(mw.site.namespaces[namespaceIndex].name) .. 'ul'
	end

	mainTable
		:tag('tr')
			:tag('td')
				:attr('valign', 'center')
				:attr('align', 'center')
				:wikitext(project.image and ('[[Fișier:' .. project.image .. '|60px]]') or '')
				:done()
			:tag('td')
				:wikitext(unqualifiedIntro, ' ', "'''" .. crtTitle.text .. "'''", " este un subiect de care se ocupă '''''[[" .. project.page .. "|Proiectul " .. project.name .. "]]'''''", project.description and (', ' .. project.description))
				:newline()
				:tag('small')
					:wikitext("''Dacă doriți să participați la acest proiect, vă rugăm să vă înscrieți [[" .. project.page .. "/Participanți|aici]].''", '[[Categorie:Articole din domeniul proiectului ' .. project.name .. ']]')
					
	local classData = evaluation.class and classes[mw.ustring.lower(evaluation.class)] or noclass
	local qualityRow = mainTable:tag('tr')
	clasament(qualityRow, classData)
	qualityRow:tag('td')
			:wikitext(qualifiedIntro, ' ', evaluation.class and '' or 'încă nu ', 'a fost [[' .. project.page .. '/rezumat|evaluat]]', evaluation.class and (' ca făcând parte din grupa ' .. evaluation.class) or '', ' pe [[' .. project.page .. '/Clasificare|scala de calitate]].')
			
	local importanceData = evaluation.importance and importanceClasses[mw.ustring.lower(evaluation.importance)] or noclass
	local importanceRow = mainTable:tag('tr')
	clasament(importanceRow, importanceData)
	importanceRow:tag('td')
			:wikitext(qualifiedIntro, ' ', evaluation.importance and '' or 'încă nu ', 'a fost [[' .. project.page .. '/rezumat|evaluat]]', evaluation.importance and (' ca făcând parte din grupa ' .. evaluation.importance) or '', ' pe [[' .. project.page .. '/Clasificare|scala de importanță]].')
	
	local categoriesSpan = mw.html.create('span'):addClass('x-sic')
	
	if evaluation.class and classData.specificcat then
		categoriesSpan:wikitext('[[Categorie:' .. mw.ustring.gsub(classData.specificcat, '$1', project.name) .. '|' .. crtTitle.text .. ']]')
	end
	if evaluation.importance and importanceData.specificcat then
		categoriesSpan:wikitext('[[Categorie:' .. mw.ustring.gsub(importanceData.specificcat, '$1', project.name) .. '|' .. crtTitle.text .. ']]')
	end
	if not evaluation.class then
		categoriesSpan:wikitext('[[Categorie:Articole neclasificate ale proiectului ' .. project.name .. ' (calitate)|' .. crtTitle.text .. ']]')
	end
	if not evaluation.importance then
		categoriesSpan:wikitext('[[Categorie:Articole neclasificate ale proiectului ' .. project.name .. ' (importanță)|' .. crtTitle.text .. ']]')
	end
	
	local warning = ''
	if crtTitle.namespace %2 == 0 and crtTitle.namespace ~= 10 and crtTitle.namespace ~= 4 then
		local warningTable = mw.html.create('table')
			:addClass('messagebox'):addClass('plainlinks'):addClass('articletalkheader')
			:tag('tr')
				:tag('td'):wikitext('[[Fișier:Attention yellow.svg|80px]]'):done()
				:tag('td'):wikitext("Avertisment: Acest format a fost plasat pe o pagină care nu este pagină de discuții, un format sau o pagină proiect. '''Acest format trebuie să fie plasat <u>doar</u> pe paginile de discuții.'''"):allDone()
		warning = tostring(warningTable)
	end
	return warning .. tostring(tableSpan) .. tostring(categoriesSpan)
end

p.fromFrame = function(frame)
	local args = getArgs(frame)
	
	local project = {}
	project.name = args['nume_proiect']
	project.page = args['pagina_proiect'] or args['pagină_proiect']
	project.image = args['imagine_proiect']
	project.description = args['descriere_proiect']
	
	local display = {}
	display.nested = args['nested'] == 'yes' or args['nested'] == 'da'
	display.small = args['small'] == 'yes' or args['small'] == 'da'
	local evaluation = {}
	evaluation.class = args['class'] or args['clasament']
	evaluation.importance = args['importanță'] or args['importanţă']
	
	return p.fromArgs(project, display, evaluation)
end

return p