-- This module implements .
-- Load modulesrequire('strict')local yesno = require('Module:Yesno')local data = mw.loadData('Module:GANList3/data')local responseIcons = data.responseIconslocal statusIcons = data.statusIcons
-- Template for making collapsed sections.local COLLAPSED_WIKITABLE = class="mw-collapsible mw-collapsed" border="1" style="border-collapse:collapse;"|-! style="font-weight:normal; " | %s|-| %s|}
-- Template for making uncollapsed sections.local UNCOLLAPSED_WIKITABLE = border="1" style="border-collapse:collapse;"|-| %s|}
---------------------------------------------------------------------------------- Helper functions--------------------------------------------------------------------------------
-- Make the given key in args lowercase if when lowercased it equals val.local function makeArgLowerCase(args, key, val) if args[key] and string.lower(args[key])
-- Normalize the args table to make it easier to work with elsewhere in the-- module.local function normalizeArguments(args) -- Consolidate aliases args.nocopyvio = args.nocopyvio or args.plagiarismfree args.plagiarismfree = nil
-- Normalize special values makeArgLowerCase(args, 'picfree', 'fair') makeArgLowerCase(args, 'status', 'wtf')end
-- If any of the keys in the keys array are in the table t, return true;-- otherwise, return false.local function anyKeysInTable(t, keys) for i, key in ipairs(keys) do if t[key] then return true end end return falseend
-- Make a wikitext error message.local function makeWikitextError(msg) return string.format(msg)end
-- Format a user-supplied string for display in error messages.-- This prevents input from being displayed as special wiki markup, converts-- multi-line strings to a single line, and truncates long strings so that they-- are easier to read.local function escapeUserString(s) if #s > 28 then s = s:sub(1, 12) .. '...' .. s:sub(-12, -1) end s = s:gsub("\n", " ") return mw.text.nowiki(s)end
-- Make a collapsed wikitable with the given header and content. local function makeCollapsedWikitable(header, content) return string.format(COLLAPSED_WIKITABLE, header, content)end
-- Make an uncollapsed wikitable with the given content. local function makeUncollapsedWikitable(content) return string.format(UNCOLLAPSED_WIKITABLE, content)end
-- Make a bulleted list from an array of strings.local function makeBulletedList(items) local ret = for i, item in ipairs(items) do ret[i] = '* ' .. item end return table.concat(ret, '\n')end
-- Make a checklist item from the given issue and status.local function makeChecklistItem(issue, status, defaultMarker) if not status then return string.format('%s: %s', issue, responseIcons.UNKNOWN) elseif yesno(status) then return string.format('%s: %s', issue, responseIcons.YES) else return string.format('%s: %s - %s', issue, defaultMarker or responseIcons.NO, status ) endend
-- Return true if all issues have been resolved; return false otherwise.-- mainIssues is an array of tables as passed to makeSection. otherIssues is a-- string value or nil (hold, as passed to makeSection).local function allIssuesAreResolved(mainIssues, otherIssues) if otherIssues then return false end for i, t in ipairs(mainIssues) do if t.isResolved
-- Assemble a section of the DYK checklist.local function makeSection(options) local issues =
-- Add main issues options.mainIssues = options.mainIssues or for i, t in ipairs(options.mainIssues) do local checklistItem if t.isResolved then checklistItem = makeChecklistItem(t.issue, t.status, responseIcons.YES) else checklistItem = makeChecklistItem(t.issue, t.status) end table.insert(issues, checklistItem) end
-- Add other issues if options.otherIssues then table.insert(issues, makeChecklistItem('Other problems', options.otherIssues)) end
-- Make the section output. local content = makeBulletedList(issues) if allIssuesAreResolved(options.mainIssues, options.otherIssues) then return makeCollapsedWikitable(options.resolvedHeader, '\n' .. content) else return options.unresolvedHeader .. '\n' .. content endend
---------------------------------------------------------------------------------- Section functions-- Each of these functions makes a single section of the DYK checklist.--------------------------------------------------------------------------------
local function makeWellWrittenEligibilitySection(args) return makeSectionend
local function makeVerifiabilityComplianceSection(args) return makeSectionend
local function makeNeutralEligibilitySection(args) -- The Neutrality and Stablity sections are different enough from the others -- that we will just do everything here rather than trying to use the -- makeSection function. local isGood = yesno(args.neutral) if isGood
false and 'Not good' or args.neutral ) return ret .. '
' endend
local function makeStableEligibilitySection(args) local isStable = yesno(args.stable) if isStable
false and 'Not stable' or args.stable ) return ret .. '
' endend
local function makeImageEligibilitySection(args) -- Deal with nonfree special case for images local imagesUsedStatus, isImageFairUse if args.picfree
-- Generate output return makeSectionend
local function makeStatusSection(args) if not args.status then return makeWikitextError('Review is incomplete - please fill in the "status" field') elseif args.status ~= 'y' and args.status ~= '?' and args.status ~= 'neu' and args.status ~= 'no' and args.status ~= 'hold' and args.status ~= 'wtf' then return makeWikitextError(string.format('Invalid status "%s" - use one of "y", "?", "neu", "no" or "hold"', escapeUserString(args.status) )) end
local ret = table.insert(ret, "Overall: ") local isOK = yesno(args.status) if isOK
'fair' then table.insert(ret, statusIcons.YES_FAIR) else table.insert(ret, statusIcons.YES) end elseif isOK
'?' then table.insert(ret, statusIcons.QUESTION) elseif args.status
'hold' then table.insert(ret, statusIcons.HOLD) elseif args.status
---------------------------------------------------------------------------------- Exports--------------------------------------------------------------------------------
local p =
function p._main(args) -- Normalize the args table to make it easier to work with in other -- functions. normalizeArguments(args)
-- Check whether the review has been started. local params = if not anyKeysInTable(args, params) then return 'Review not started' end
-- The review has been started, so assemble all the review sections. local funcs = local ret = for i, func in ipairs(funcs) do table.insert(ret, func(args)) end return table.concat(ret, '\n')end
function p.main(frame) local args = require('Module:Arguments').getArgs(frame,) return p._main(args)end
return p