Module:ATA
Appearance
Documentation for this module may be created at Module:ATA/doc
-- The purpose of this module ("Articles To Avoid") is to allow people
-- who want to avoid editing specific articles to add the following in their signature:
-- {{subst:#invoke:ATA|block|User:Wnt/MyATABlacklist|allow=Some Article}}
-- The Lua script will go to the first anon parameter and import its content.
-- This is a list of articles you don't want to edit
-- (say, because you're topic banned, or you're worried Putin is out to get you),
-- does a frame.preprocess on it to ensure (???) any transclusions are done,
-- gets the current page you are editing, and sees if currentpage is in the list.
-- If so, it returns the link to Encyclopedia Dramatica
-- (eventually, a proposal should be made to add an error message added to the blacklist
-- that explains the program that is doing it and what you need to do to your signature to undo it).
-- Note that the signature preferences are not directly accessible to very many people,
-- maintaining a certain sort of privacy
-- (if you elect to make a call to an existing blacklist posted by someone else, for example, or
-- if you opt out of the blacklist hoping you'll get away with it)
-- but of course, right now anyone can see what articles you've edited.
-- starting below from a straight copy of my Module:TrainingPages:
local p = {}
function anonymize(name)
return mw.ustring.gsub(name,"^"..mw.site.siteName,"Project") or name
end
function p.block(frame)
local debuglog=""
local parent=frame.getParent(frame)
local currentpage,indexmodule,defaultpage,noerr
---- args in the #invoke itself trump args in the parent frame
currentpage = frame.args.page -- this is only useful for testing!
debugout = frame.args.debug
indexmodule = frame.args[1] or frame.args.index
noerr=frame.args.noerr
anonymizereturn = frame.args.anonymize
whitelist = frame.args.allow
---- args in the parent frame come next
if parent then
currentpage=currentpage or parent.args.page
indexmodule=indexmodule or parent.args[1] or parent.args.index
-- index here is NOT generally a module, unlike TrainingPages,
-- because it needs to be accessible to newbies and possibly support transclusions
noerr=noerr or parent.args.noerr
debugout = debugout or parent.args.debug
anonymizereturn = anonymizereturn or parent.args.anonymize
whitelist = whitelist or parent.args.allow
end
---- default values if parameters aren't provided
whitelist = whitelist or ""
if not(indexmodule) then
if noerr then
return ""
else
return "[[Module:ATA]] error:no index parameter specified"
end
end
if not(currentpage) then
local pp=mw.title.getCurrentTitle()
if not pp then
if noerr then
return ""
else return "[[Module:ATA]] error:failed to access getCurrentTitle" -- this shouldn't happen anyway, I don't think....
end
end
currentpage=pp.fullText
end
-- process parameters
whiteitem = {}
for i in string.gmatch(whitelist, "%[%[(.-)%]%]") do
debuglog = debuglog .. "WHITELIST" .. i
whiteitem [mw.uri.encode(anonymize(i),"WIKI")] = true
end
currentpage = anonymize(currentpage) --- convert "Wikipedia:, "Meta:" etc. into "Project:
currentpage = mw.uri.encode(currentpage,"WIKI") --- hopefully this gets the +'s and diacritics right...
debuglog = debuglog .. currentpage
local index={}
if mw.ustring.sub(indexmodule,1,6)=="Module" then
---- get a table of the pages in order from indexmodule
index=mw.loadData(indexmodule)
else pp=mw.title.new(indexmodule)
if not pp then
if noerr then
return ""
else return "[[Module:ATA]] error (''index'' parameter): failed to access mw.title.new("..tostring(indexmodule)..") to load the index file"
end
end
local textindex=pp.getContent(pp)
if not textindex then
if noerr then
return ""
else return "[[Module:ATA]] error (''index'' parameter):failed to access mw.title.new("..indexmodule.."):getContent() to load the index data",pp.fullText
end
end
prowl=mw.ustring.gmatch(textindex,"%[%[(.-)[%]|]") -- first half of any wikilink
index={}
repeat
link=prowl()
if not(link) then break end
link = mw.uri.encode(anonymize(link),"WIKI")
debuglog = debuglog .. "," .. link .. "?" .. tostring(link == currentpage) .. (tostring(whiteitem[link]) or "nope")
if not(whiteitem[link]) and (link == currentpage) and not(debugout) then
return "http://".."encyclopediadramatica.com/" -- blacklist token to STOP THE EDIT
end
until false
end
debuglog = "(begin debug)" .. debuglog .. "(end debug)"
if debugout then
return debuglog
else
return ""
end
-- successful return. Detoxification of mainspace sigs should go here, IF it can be done.
end
return p