Module:Discussion ping explained

--- This module extracts all the users in either a marked LST or in wikitext and-- generates links reflecting a courtesy ping.-- -- @module Courtesy ping-- @require Module:Arguments-- @release alpha

local p = local getArgs = require("Module:Arguments").getArgs

--- Makes a user link-- @param userTitle the title for the user object-- @return the formatted user link in the form of a pingfunction makeUserLink(userTitle) return mw.ustring.format('@%s', userTitle.prefixedText, userTitle.text)end

--- Entry point for module-- @param frame processing frame-- @return wikitextfunction p.main(frame) local args = getArgs(frame) return p._main(args, frame)end

function p._main(args, frame) frame = frame or mw.getCurrentFrame if not mw.isSubsting and not args['__demo'] then error(" must be substituted") end local links = local noPing = local i = 1 while args["noping" .. i] do noPing[args[ "noping" .. i ] ] = true i = i + 1 end local wikitext = args['wikitext'] or args[1] or nil local pageToInclude = args['title'] or local lstTitle = mw.title.new(pageToInclude) if not wikitext and lstTitle then if lstTitle.fragment and lstTitle.fragment ~= then wikitext = frame:callParserFunction('#lsth',) else wikitext = frame:preprocess(lstTitle:getContent) end elseif not wikitext then error("Wikitext or a page title with section must be specified!") end mw.log(wikitext) -- Thanks ChatGPT for link, display in mw.ustring.gmatch(wikitext, "%[%[([^%[%]|]+)%|?([^%[%]]*)%]%]") do mw.logObject if display

"" then display = link -- No display text, so use the link itself end if not links[link ] then links[link ] = mw.title.new(link) end end -- local wikitextArray = mw.text.split(wikitext, ) -- local inWikiLink = false -- local inPipedLink = false -- local trimmed = false -- local toProcess = -- for k,v in ipairs(wikitextArray) do -- if k ~= 1 then -- if inWikiLink then -- toProcess = toProcess .. v -- if wikitextArray[k ]

'|' then -- toProcess = mw.ustring.sub(toProcess, 0, -- mw.ustring.len(toProcess) - 1) -- trimmed = true -- inPipedLink = true -- inWikiLink = false -- end -- end -- if not inWikiLink and not inPipedLink then -- trimmed = false -- if wikitextArray[k ]

'[' and wikitextArray[ k - 1 ]

'[' -- then -- toProcess = '' -- inWikiLink = true -- end -- else -- if wikitextArray[ k ]

']' and wikitextArray[k - 1 ]

']' -- then -- if not trimmed then -- toProcess = mw.ustring.sub(toProcess, 0, -- mw.ustring.len(toProcess) - 2) -- trimmed = true -- end -- links[toProcess ] = mw.title.new(toProcess) -- toProcess = -- inWikiLink = false -- inPipedLink = false -- end -- end -- end -- end mw.logObject(links) local out = for k,v in pairs(links) do mw.logObject(v) if v ~= nil then if v.namespace

2 and not v.isSubpage and not noPing[v.text ] then table.insert(out, makeUserLink(v)) end end end return '' .. mw.text.trim(table.concat(out, ' ')) .. '' end

return p