Modulo:Sandbox/WHacko

La documentazione per questo modulo può essere creata in Modulo:Sandbox/WHacko/man

local p = {}

-- Restituisce il sorgente di una pagina con tutti i link che puntano a
-- linkErrato. Inoltre reindirizza [[wikilink|nomeWikilink]] a nuovoWikilink
-- e gli aggiunge un bordo rosso
function p.sostituisciLink(frame)
	local nomePagina = frame.args.nomePagina
	local linkErrato = frame.args.linkErrato
    local wikilink = frame.args.wikilink
    local nuovoWikilink = frame.args.nuovoWikilink
    local nomeWikilink = frame.args.nomeWikilink and '|' .. frame.args.nomeWikilink or ''
    
    local sorgentePagina = frame:expandTemplate{ title = ':' .. nomePagina }
    local escapedWikilink = ''
    if wikilink then
    	escapedWikilink = mw.ustring.gsub(wikilink, '([%-%(%)])', '%%%1')
    end
    
    -- Rimuovi categorie ma tieni l'avviso sulla pagina del corso
    sorgentePagina = mw.ustring.gsub(sorgentePagina, 'puoi %[%[:Categoria:Corso di .-|crearla%]%] tu sei vuoi!',
    	'puoi [[' .. linkErrato .. '|crearla]] tu sei vuoi!')
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[%s-Categoria:.-%]%]', '')
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[%s-:Categoria:.-%]%]', '')
    
    -- Espandi sottopagine
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[:[^|]-' .. mw.title.getCurrentTitle().text .. '(/[^/|]-)%]%]',
    	function (n)
    		return frame:expandTemplate{ title = ':' .. nomePagina .. n }
    	end)
    
    -- Rimuovi titolo modificato
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '<div id="RealTitleBanner".-</div>', '')
    
    -- Per prima cosa, marca i link che non vogliamo reindirizzare
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[%s-File:', '[{[File:')
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[%s-Image:', '[{[Image:')
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[%s-Immagine:', '[{[Immagine:')
    if wikilink then
        sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[%s-' .. escapedWikilink, '[{[' .. wikilink)
    end
    
    -- Sostituisci {{FULLPAGENAME}} e {{PAGENAME}}
    sorgentePagina = mw.ustring.gsub(sorgentePagina, mw.title.getCurrentTitle().prefixedText, nomePagina)
    sorgentePagina = mw.ustring.gsub(sorgentePagina, mw.title.getCurrentTitle().text, nomePagina)
    
    -- Fix link di modifica alle sottopagine
    sorgentePagina = mw.ustring.gsub(sorgentePagina, 'w/index.php%?title=.-&action=edit',
    	'w/index.php?title=' .. mw.ustring.gsub(linkErrato, '%s', '_'))
    
    -- Reindirizza tutti gli altri link a linkErrato
    -- First we remove all wikilinks to differentiate between those that are labelled
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[[^%]]-|', '[[')
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[', '[[' .. linkErrato .. '|')
    
    -- Fix the links that we have marked previously
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[{%[', '[[')
    
    -- Add red border to marked link
    if wikilink then
        sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[%s-' .. escapedWikilink .. '(.-%]%])',
            '<span style="border:3px solid red;">[[' .. nuovoWikilink .. '%1</span>')
    end
    
    return sorgentePagina
end

function p.stampa(frame)
	local nomePagina = frame.args.nomePagina
	local linkErrato = frame.args.linkErrato
    local wikilink = frame.args.wikilink
    local nuovoWikilink = frame.args.nuovoWikilink
    local nomeWikilink = frame.args.nomeWikilink and '|' .. frame.args.nomeWikilink or ''
    
    local sorgentePagina = frame:expandTemplate{ title = ':' .. nomePagina }
    
    -- Rimuovi categorie
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[%s-Categoria:.-%]%]', '')
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[%s-:Categoria:.-%]%]', '')
    
    -- Espandi sottopagine
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[:[^|]-' .. mw.title.getCurrentTitle().text .. '(/[^/|]-)%]%]',
    	function (n)
    		return frame:expandTemplate{ title = ':' .. nomePagina .. n }
    	end)
    
    -- Rimuovi titolo modificato
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '<div id="RealTitleBanner".-</div>', '')
    
    -- Per prima cosa, marca i link che non vogliamo reindirizzare
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[%s-File:', '[{[File:')
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[%s-Image:', '[{[Image:')
    sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[%s-Immagine:', '[{[Immagine:')
    
    -- Print
    local allLinks = {}
    allLinks[#allLinks+1] = mw.text.nowiki(nomePagina)
    allLinks[#allLinks+1] = mw.text.nowiki(wikilink)
    for link in mw.ustring.gmatch(sorgentePagina, '....' .. wikilink .. '..............') do
		allLinks[#allLinks+1] = mw.text.nowiki(link)
	end
    for link in mw.ustring.gmatch(sorgentePagina, '%[%[%s-' .. wikilink) do
		allLinks[#allLinks+1] = mw.text.nowiki(link)
	end
	
    if wikilink then
        sorgentePagina = mw.ustring.gsub(sorgentePagina, '%[%[%s-' .. wikilink, '[{[' .. wikilink)
    end
    
    -- Print
    local allLinks = {}
    for link in mw.ustring.gmatch(sorgentePagina, wikilink .. '.-%]%]') do
		allLinks[#allLinks+1] = mw.text.nowiki(link)
	end

	return table.concat(allLinks, '\n\n')
end

return p