Module:Sandbox/Nettrom/SuggestBot

local p = {}

-- List of all columns and their respective header titles
local table_columns = {'Views/Day', 'Quality', 'Title', 'Content', 'Headings',
	'Images', 'Links', 'Sources', 'Tagged with…'}

-- Mapping of shortnames for task categories and their respective text
-- For more information, see User:SuggestBot/Documentation/Task categories
local task_map = {source='Add sources', cleanup='Cleanup', expand='Expand',
	unenc='Unencyclopaedic', merge='Merge', wikify='Wikify', orphan='Orphan',
	stub='Stub'}

-- Mapping of assessment class names to indexes for sorting
local rating_sort = {FA=7, A=6, GA=5, B=4, C=3, Start=2, Stub=1, NA=0}

-- Mapping of quality levels into images
local rating_level = {FA='High', A='High', GA='High', B='Medium', C='Medium',
	Start='Low', Stub='Low', NA='Unassessed'}
local rating_images = {High='File:Stars330.svg', Medium='File:Stars320.svg',
	Low='File:Stars310.svg', Unassessed='File:Stars300.svg'}

-- List of task columns in order so we can flag if in need of improvement
local task_list = {'content', 'headings', 'images', 'links', 'sources'}
-- Mapping of tasks to explanations (used in the image alt-text)
local task_explanations = {content='Please add more content',
	headings='Please create proper section headings',
	images='Please add more images', links='Please add more wikilinks',
	sources='Please add more sources'}
-- Title of the image file we use to flag tasks
local task_image = 'Flag icon red 3.svg'
-- [[File:Flag icon red 3.svg|18px|alt=Please add more content|link=Yamaha electric guitar models|Please add more content]]

-- Hello world to test that the module works...
function p.hello_world()
	return "Hello, world!"
end

function translate_quality(tbl_row, title, rating, prediction)
	-- Add a table cell with quality information
	local qual_lvl = rating_level[prediction]
	local qual_text = '[[' .. rating_images[qual_lvl] ..
		'|60px|alt=Quality: ' .. qual_lvl .. ', Assessed class: ' ..
		rating .. ', Predicted class: ' .. prediction .. '|link=' ..
		title .. '|Quality: ' .. qual_lvl .. ', Assessed class: ' ..
		rating .. ', Predicted class: ' .. prediction .. ']]'

	-- Create a table cell with information about article quality
	local qualcell = tbl_row:tag('td')
	-- Add the sortkey from mapping predicted class to a number
	add_sortkey(qualcell, rating_sort[prediction])
	qualcell:wikitext(qual_text)
end

function add_sortkey(tblcell, value)
	return tblcell:tag('span')
		:addClass('sortkey')
		:wikitext(value)
end

function add_tasks(tbl_row, tasks, title)
	-- For each task we now about, see if it's in task and act accordingly
	for i, task in ipairs(task_list) do
		local taskcell = tbl_row:tag('td')
		if string.find(tasks, task) then
			add_sortkey(taskcell, '0')
			taskcell:wikitext('[[File:' .. task_image .. '|18px|alt=' ..
				task_explanations[task] .. '|link=' .. title .. '|' .. 
				task_explanations[task] .. ']]')
		else
			add_sortkey(taskcell, '2')
		end
	end
end

function build_header(tbl)
	local t_row = tbl:tag('tr')
	for i, title in ipairs(table_columns) do
		t_row:tag('th')
			:attr('scope', 'col')
			:wikitext(title)
			:newline()
	end
end

function add_row(tbl)
	-- Adds a suggestion row to the table
	return tbl:tag('tr')
		:css('text-align', 'center')
		:css('height', '30px')
		:newline()
end

function add_cells(tbl_row, tag, title, views, rating, prediction, tasks)
	-- 	Add the table cells for the suggestion based on the given parameters
	local tag_text = task_map[tag]
	
	-- First column is number of views
	tbl_row:tag('td')
		:css('text-align', 'right')
		:wikitext(views)
		
	-- Second column is article quality
	translate_quality(tbl_row, title, rating, prediction)
	
	-- Third column is a link to the article and its talk page
	tbl_row:tag('td')
		:css('text-align', 'left')
		:wikitext('[[' .. title .. ']] <small>([[Talk:' .. title .. '|talk]])</small>')
		
	-- Fourth through eighth columns are the tasks
	add_tasks(tbl_row, tasks, title)
	
	-- Last column is the article's task category
	tbl_row:tag('td'):wikitext(task_map[tag])
end

function p.build_table(frame)
	-- Build the entire suggestion table.
	-- Expects a set of 'n' suggestions, where each suggestion has
	-- a total of six parameters, in order as follows:
	-- 1: Task category
	-- 2: Article title
	-- 3: Avg. no. of article views/day for past 14 days
	-- 4: Assessed quality class
	-- 5: Predicted quality class
	-- 6: Comma-separated list of tasks to flag
	
	-- What language are we talking?
	local lang = mw.language.getContentLanguage()
	
	local table = mw.html.create('table')
		:addClass('wikitable')
		:addClass('sortable')
		:css('text-align', 'center')
		:attr('border', '1')
	build_header(table)

	-- 0-based index of the current article being processed	
	local cur_art = 0

	while frame.args[(cur_art * 6) + 1] do
		local cur_idx = cur_art * 6
		local newrow = add_row(table)
		-- Use the formatnum parser function to format number of views
		local n_views = lang:formatNum(tonumber(frame.args[cur_idx + 3]))
		add_cells(newrow, frame.args[cur_idx + 1], frame.args[cur_idx + 2],
			n_views, frame.args[cur_idx + 4],
			frame.args[cur_idx + 5], frame.args[cur_idx + 6])
		cur_art = cur_art + 1
	end

	return tostring(table)
end

function p.nargs(frame)
	local i = 0
	local output = ''
	while frame.args[(i * 6) + 1] do
		output = output .. 'Processing article ' .. i .. '... '
		i = i + 1
	end
	return output
end

return p

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.