Home
Random
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:GANList3
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
-- This module implements {{GANList3}}. -- Load modules require('strict') local yesno = require('Module:Yesno') local data = mw.loadData('Module:GANList3/data') local responseIcons = data.responseIcons local 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]) == val then args[key] = val end end -- 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 false end -- Make a wikitext error message. local function makeWikitextError(msg) return string.format([['''<span style="color: red;">%s</span>''']], 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 ) end end -- 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 == false or ( t.isResolved ~= true and not yesno(t.status) ) then return false end end return true end -- 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 end end -------------------------------------------------------------------------------- -- Section functions -- Each of these functions makes a single section of the DYK checklist. -------------------------------------------------------------------------------- local function makeWellWrittenEligibilitySection(args) return makeSection{ unresolvedHeader = "'''Well written?:'''", resolvedHeader = "'''Writing:''' article reasonably well written", mainIssues = { { issue = '[[Wikipedia:What the Good article criteria are not#(1) Well-written|Prose]]', status = args.prose, }, { issue = '[[Wikipedia:Copyright violations|Copyvio]]', status = args.nocopyvio, }, { issue = '[[Wikipedia:Manual of Style|MOS compliance]]', status = args.moscomply, }, }, otherIssues = args.writingother, } end local function makeVerifiabilityComplianceSection(args) return makeSection{ unresolvedHeader = "'''Verifiable?:'''", resolvedHeader = "'''Verifiability:''' Article is factually accurate, verifiable, and contains no original research", mainIssues = { { issue = '[[Wikipedia:Manual of Style/Layout#Notes and references|Reference section]]', status = args.refsection, }, { issue = '[[Wikipedia:Reliable sources|Reliable sourcing]]', status = args.sourcing, }, { issue = '[[Wikipedia:No original research|Original research]]', status = args.origresearch, }, }, otherIssues = args.verifyother, } end 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 == true then return makeUncollapsedWikitable("'''Neutral''': Acceptable.") else local ret = makeChecklistItem( "'''[[Wikipedia:Neutral point of view|Neutral]]'''", isGood == false and 'Not good' or args.neutral ) return ret .. '<br />' end end local function makeStableEligibilitySection(args) local isStable = yesno(args.stable) if isStable == true then return makeUncollapsedWikitable("'''Stable''': Yes.") else local ret = makeChecklistItem( "'''[[Wikipedia:What the Good article criteria are not#(5) Stable|Stable]]'''", isStable == false and 'Not stable' or args.stable ) return ret .. '<br />' end end local function makeImageEligibilitySection(args) -- Deal with nonfree special case for images local imagesUsedStatus, isImageFairUse if args.picfree == 'fair' then imagesUsedStatus = 'Valid fair use image rationale supplied' isImageFairUse = true else imagesUsedStatus = args.picfree isImageFairUse = nil -- use default behaviour end -- Generate output return makeSection{ unresolvedHeader = "'''Images?:'''", resolvedHeader = "'''Images:''' Article provides sufficient illustration relevant to topic.", mainIssues = { { issue = '[[Wikipedia:What the Good article criteria are not#(6) Appropriately illustrated|Illustrated appropriately]]', status = args.illustrated, }, { issue = '[[Wikipedia:File copyright tags#For image creators|Freely licensed]]', status = imagesUsedStatus, isResolved = isImageFairUse }, { issue = '[[MOS:IMAGERELEVANCE|Relevant]] with captions', status = args.picused, }, }, otherIssues = args.picother, } end 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 == true then if args.picfree == 'fair' then table.insert(ret, statusIcons.YES_FAIR) else table.insert(ret, statusIcons.YES) end elseif isOK == false then table.insert(ret, statusIcons.NO) elseif args.status == '?' then table.insert(ret, statusIcons.QUESTION) elseif args.status == 'neutral' then table.insert(ret, statusIcons.NETURAL) elseif args.status == 'hold' then table.insert(ret, statusIcons.HOLD) elseif args.status == 'wtf' then table.insert(ret, statusIcons.CONFUSED) end if args.comments then table.insert(ret, ' ') table.insert(ret, args.comments) end if args.sign then table.insert(ret, ' ') table.insert(ret, args.sign) end return table.concat(ret) end -------------------------------------------------------------------------------- -- 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 = { 'prose', 'nocopyvio', 'moscomply', 'writingother', 'refsection', 'sourcing', 'origresearch', 'verifyother', 'neutral', 'stable', 'illustrated', 'picfree', 'picused', 'picother', 'picfree', } if not anyKeysInTable(args, params) then return 'Review not started' end -- The review has been started, so assemble all the review sections. local funcs = { makeWellWrittenEligibilitySection, makeVerifiabilityComplianceSection, makeNeutralEligibilitySection, makeStableEligibilitySection, makeImageEligibilitySection, makeStatusSection, } 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, { wrappers = 'Template:GANList3', }) return p._main(args) end return p
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Templates used on this page:
Template:Tl
(
edit
)
Module:GANList3/doc
(
edit
)