Modul:Wikiproject
Aspect
Documentația acestui modul poate fi creată la Modul:Wikiproject/doc
local getArgs = require('Modul:Arguments').getArgs
local TableTools = require('Modul:TableTools')
local wpData = mw.loadData('Modul:Wikiproject/data')
local importances = {
['IMPORTANCE_UNSPECIFIED'] = -1,
['IMPORTANCE_MICĂ'] = 0,
['IMPORTANCE_MEDIE'] = 1,
['IMPORTANCE_MARE'] = 2,
['IMPORTANCE_TOP'] = 3,
['IMPORTANCE_0'] = 3,
['IMPORTANCE_1'] = 3,
['IMPORTANCE_2'] = 2,
['IMPORTANCE_3'] = 1,
['IMPORTANCE_4'] = 0,
['IMPORTANCE_5'] = 0,
}
local p = {}
local function clasament(parentElement, class)
local newTag = parentElement:tag('td')
:css('background', class.background)
:css('color', class.color or '#000')
:css('text-align', 'center')
:wikitext(class.image and ('[[Fișier:' .. class.image .. '|14px]]') or '', class.classname)
return newTag
end
local function getNamespaceDescription(crtTitle)
local namespaceIndex = math.floor(crtTitle.namespace / 2) * 2
local namespaceNameData = wpData.nsdata[namespaceIndex]
local intro
if namespaceNameData then
qualifiedIntro = (namespaceNameData.fem and 'Această ' or 'Acest ') .. namespaceNameData.displayName
unqualifiedIntro = namespaceNameData.artDisplayName
qualifiedEval = (namespaceNameData.fem and 'evaluată' or 'evaluat')
else
qualifiedIntro = 'Acest ' .. mw.ustring.lower(mw.site.namespaces[namespaceIndex].name)
unqualifiedIntro = mw.ustring.lower(mw.site.namespaces[namespaceIndex].name) .. 'ul'
qualifiedEval = 'evaluat'
end
return qualifiedIntro, unqualifiedIntro, qualifiedEval
end
p.fromArgs = function(project, display, evaluation)
local crtTitle = mw.title.getCurrentTitle()
local tableDiv = mw.html.create('div')
tableDiv:attr('lang', 'x-sic')
local mainTable = tableDiv: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 .. (evaluation.importance and (', importanță ' .. evaluation.importance) or '') .. ')') or nil)
end
local qualifiedIntro
local unqualifiedIntro
local qualifiedEval
qualifiedIntro, unqualifiedIntro, qualifiedEval = getNamespaceDescription(crtTitle)
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 wpData.classes[mw.ustring.lower(evaluation.class)] or wpData.noclass
local qualityScaleTitle = mw.title.new(project.page .. '/Clasificare')
local qualityScaleLink = qualityScaleTitle.exists and qualityScaleTitle.fullText or 'WP:EVAL'
local qualityRow = mainTable:tag('tr')
clasament(qualityRow, classData)
qualityRow:tag('td')
:wikitext(qualifiedIntro, ' ', evaluation.class and '' or 'încă nu ', 'a fost [[' .. project.page .. '/rezumat|' .. qualifiedEval .. ']]', evaluation.class and (' ca făcând parte din grupa ' .. evaluation.class) or '', ' pe [[' .. qualityScaleLink .. '|scala de calitate]].')
local importanceData = evaluation.importance and wpData.importanceClasses[mw.ustring.lower(evaluation.importance)] or wpData.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|' .. qualifiedEval .. ']]', 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(tableDiv) .. tostring(categoriesSpan)
end
p.fromFrame = function(frame)
local args = getArgs(frame)
local bpv = args['bpv'] or args['living'] or args['în_viață'] or args['în viață']
local project = {}
project.name = args['nume_proiect']
local knownProjectData = wpData.knownProjects[project.name]
project.page = args['pagina_proiect'] or args['pagină_proiect'] or (knownProjectData and knownProjectData['pagină']) or ('Proiect:' .. project.name)
project.image = args['imagine_proiect'] or (knownProjectData and knownProjectData['imagine'])
project.description = args['descriere_proiect'] or (knownProjectData and knownProjectData['descriere']) or ('o inițiativă de dezvoltare a unei serii de articole complete și documentate despre ' .. project.name)
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']
if evaluation.class then
evaluation.class = wpData.classes[mw.ustring.lower(evaluation.class)] and wpData.classes[mw.ustring.lower(evaluation.class)].classname or nil
end
evaluation.importance = args['importanță'] or args['importanţă']
local out = ''
if bpv == 'yes' or bpv == 'da' then
out = out .. frame:expandTemplate{title = 'bpv'}
end
out = out .. p.fromArgs(project, display, evaluation)
if evaluation.importance then
local importanceIdx = importances['IMPORTANCE_' .. mw.ustring.upper(evaluation.importance)]
if importanceIdx ~= nil and type(importanceIdx) == 'number' then
local theClass = wpData.orderedImportanceClasses[1 + importanceIdx]
if theClass.classcat then
out = out .. '[[Categorie:' .. theClass.classcat .. '|' .. theClass.classname .. ']]'
end
end
end
return out.. mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Modul:Wikiproject/styles.css'} }
end
local function extractProject(argumentData)
local project = {}
project.name = argumentData['proiect']
if not project.name then return nil, nil end
local knownProjectData = wpData.knownProjects[project.name]
project.name = knownProjectData and knownProjectData['nume'] or project.name
project.page = argumentData['pagină'] or (knownProjectData and knownProjectData['pagină']) or ('Proiect:' .. project.name)
project.image = argumentData['imagine'] or (knownProjectData and knownProjectData['imagine'])
project.description = argumentData['descriere'] or (knownProjectData and knownProjectData['descriere']) or ('o inițiativă de dezvoltare a unei serii de articole complete și documentate despre ' .. project.name)
local evaluation = {}
evaluation.importance = argumentData['importanță']
return project, evaluation
end
p.multipleFromFrame = function(frame)
local args = getArgs(frame)
local bpv = args['bpv'] or args['living'] or args['în_viață'] or args['în viață']
local collapsed = args['collapsed'] or args['pliat']
local qualityClassification = args['clasament'] or args['class']
if qualityClassification then
qualityClassification = wpData.classes[mw.ustring.lower(qualityClassification)] and wpData.classes[mw.ustring.lower(qualityClassification)].classname or nil
end
local currentProjs = TableTools.numData(args, true)
local out = ''
if bpv == 'yes' or bpv == 'da' then
out = out .. frame:expandTemplate{title = 'bpv'}
end
local importanceLevel = -1
if #currentProjs == 1 and currentProjs[1]['proiect'] then
local project, evaluation = extractProject(currentProjs[1])
evaluation.class = qualityClassification
importanceLevel = evaluation.importance and importances['IMPORTANCE_' .. mw.ustring.upper(evaluation.importance)] or importanceLevel
out = out .. p.fromArgs(project, {}, evaluation)
else
local mainTable = mw.html.create('table')
:attr('role', 'presentation')
:addClass('tmbox'):addClass('tmbox-notice'):addClass('wpbs'):addClass('mbox-inside'):addClass('mw-collapsible')
if collapsed == 'yes' or collapsed == 'da' then
mainTable:addClass('mw-collapsed')
end
local multiMessageText = frame:expandTemplate{title='Show button'}
local qual, unqual = getNamespaceDescription(mw.title.getCurrentTitle())
multiMessageText = multiMessageText .. qual .. ' este de interes pentru'
if collapsed == 'yes' or collapsed == 'da' then
multiMessageText = multiMessageText .. ' multiple [[Wikipedia:WikiProiect|WikiProiecte]]. Faceți click pe [Extinde] pentru mai multe detalii.'
else
multiMessageText = multiMessageText .. ' următoarele [[Wikipedia:WikiProiect|WikiProiecte]]:'
end
local projectsTableCell = mainTable:attr('cellspacing', '4')
:css('border-collapse', 'separate')
:tag('tr')
:tag('td'):addClass('mbox-image'):wikitext('[[Fișier:WikiProject Council with transparent background.svg|32px|link=Wikipedia:Wikiproiect]]'):done()
:tag('td'):addClass('mbox-text'):css('text-align', 'center'):css('font-weight', 'bold'):wikitext(multiMessageText):done()
:done()
:tag('tr')
:tag('td'):attr('colspan', '2'):addClass('wpbs-inner'):addClass('outercollapse'):addClass('messagebox-backk'):cssText('background:#fffaef; color:inherit; border:1px dotted gray; padding:2px 4px')
if args[1] then
projectsTableCell:wikitext(args[1])
else
local projectsTableContent = ''
for idx,eachProj in ipairs(currentProjs) do
local project, evaluation = extractProject(eachProj)
mw.logObject(evaluation, '[Wikiproject] evaluation')
local crtImportance = evaluation.importance and importances['IMPORTANCE_' .. mw.ustring.upper(evaluation.importance)] or -1
if crtImportance > importanceLevel then importanceLevel = crtImportance end
if evaluation then
evaluation.class = qualityClassification
projectsTableContent = projectsTableContent .. p.fromArgs(project, {nested='yes'}, evaluation)
end
end
projectsTableCell:wikitext(projectsTableContent)
end
out = out .. tostring(mainTable)
end
if importanceLevel >= 0 then
local bestClass = wpData.orderedImportanceClasses[1 + importanceLevel]
if bestClass.classcat then out = out .. '[[Categorie:' .. bestClass.classcat .. '|' .. bestClass.classname .. ']]' end
end
return out.. mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Modul:Wikiproject/styles.css'} }
end
return p