Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:Sandbox/Wnt/FindAndReplace

From Wikipedia, the free encyclopedia
 ---- NOTE: while I haven't looked through quite carefully enough, I think that [[Module:String]]
 ---- can do everything that this can do.  I may put it up for deletion soon.
 ---- Sorry, this doesn't work for many applications because all templates are destroyed.  It does work on plain text though.

---- This module is meant to be processed by putting 
 ---- "{{#invoke:FindAndReplace|main|(string to find)|(string to replace)}}"
 ---- into an existing page.  Add "|pattern=yes" to enjoy all the wild and wooly
 ---- features of Lua pattern strings.  This should deliver back all the text,
 ---- as modified, in wiki source form, for you to copy and paste back into the
 ---- page while editing.  Caveat: I don't presently know if things like comments
 ---- will be lost.  This is intended as a handy tool for editors who don't have
 ---- find and replace on their browser and don't want to open another program -
 ---- or to provide better Lua find and replace where their word processors come
 ---- up short.  NOTE that text MUST be saved to be processed with this unless
 ---- you use an additional parameter |input=(the text to find and replace from)

local p = {}

function p.main(frame)
   local args=frame.args
   local parent=frame.getParent(frame)
   local pargs={}
   if parent then pargs=parent.args end
   local find=args.find or pargs.find or args[1] or pargs[1]
   if not(find) then return "error you need to say what to find! (first unnamed parameter ''or'' find=(text)" end
   local replace=args.replace or pargs.replace or args[2] or pargs[2] or ""
   local pattern=args.pattern or pargs.pattern or "no"
   if pattern=="no" then pattern = nil end
   local input=args.input or pargs.input or args[3] or pargs[3] or ""
   if input == nil or input == "" then return "failed to get any text" end
   input=mw.ustring.gsub(input,"{{#invoke:FindAndReplace.-}}","") or input --we don't want shrapnel from this usage in the new page.
   if not(pattern) then find=string.gsub(find,"[%^%$%(%)%%%.%[%]%*%+%-%?%]]","%%1") end -- exterminate all delimiters
   input=mw.ustring.gsub(input,find,replace)
    ---- I have no idea why {{x gets returned as [[:Template:x but I don't like it.
   --input=mw.ustring.gsub(input,[=[%[%[:Template:]=].."(.-)"..[=[%]%]]=],"{{%1}}")
   -- no good - it still loses all the parameters out of all the templates!
   return frame.preprocess(frame, "<pre><nowiki>" .. input .. [[</nowiki></pre>]])
end

return p

-- I wonder if there's a way to put this directly back into an open edit window...