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:Good Articles

From Wikipedia, the free encyclopedia
local p = {}

p.main = function (frame)
	local NNN = 2 -- provide counts only over this threshold
	local args = require("Module:Arguments").getArgs(frame)
	-- expect args.shortcut e.g. GA/H, args.type e.g. History, args.text a long list
	local subpage = frame:preprocess("{{SUBPAGENAME}}") -- I never did look up if there's a better way to do this...
	local header, shortcuts = '', ''
	local type = args.type or "error: specify type = Good Articles type"
	local image = args.image and '[[' .. args.image .. '|22px|left]]'  or ''
	local sectioncount = 0
	if (subpage == type or args.override) then -- I haven't figured out how to deal with missing shortcut so why pretend
		shortcuts = frame:expandTemplate{ title = 'shortcut', args = { args.shortcut } }
		header = frame:expandTemplate{ title = 'Wikipedia:Good articles/Summary', args = { shortcuts = shortcuts } }
    end
    local introtext = args.text or ''
    replace = function(t)
        local xxxx, links = mw.ustring.gsub(t, "(%[%[[^%[%]]-%]%])", "%1", nil) -- count how many links
        if links >= NNN then
            t = t .. "<small> (" .. tostring(links) .. "&nbsp;articles)</small>"
        end
        return t .. "\n"
    end
    local sectionfooter = [===[
</div>
</div>
<!-- end of list -->]===]
    -- comments in the text below are historical from the page's own markup
    local output = header .. [===[<!-- only include header on this page -->
__NOTOC__
<div style="clear:both;">
<!-- DO NOT REMOVE THIS DIV, USED TO FORCE IE TO DISPLAY BACKGROUND FOR ARTS DIV -->
</div>
<div style="clear:both;">
<span id="]===] .. type .. [===[" ></span>
<div style="padding:5px 5px 8px 5px; background-color:#66CC66; text-align:left; font-size:larger;">]===] .. image .. [===[''']===] .. type .. [===['''</div>
<div style="text-align:left;">
</div>
</div>
]===] .. introtext
    local section = 0
    local finaltext = ''
    repeat
    	local wrap = true
    	section = section + 1
        local text = (args['section' .. tostring(section)] or args[section] or '')
        local title = args['title' .. tostring(section)]
    	if (not title) then
    		if (text == '') then
    			break
            else
    		    local wrap = false
    		    output = output .. text  -- sections without headers go in unwrapped
    	    end
    	else
    		local image = args['image' .. tostring(section)]
            text = mw.ustring.gsub(text .. "\n=", "(==.-)\n%s*%f[=]", replace)
            text = mw.ustring.sub(text,1,-2) -- ditching "=" mark from line above
    	    if (image) then 
    		    image = '[[' .. image .. '|22px|left]]'
    	    else
    		    image = '' -- make section without an image
    	    end
    	    
    		output = output .. [===[<div class="mw-collapsible" style="clear:both;padding: 4px;border: 1px solid #a2a9b1;font-size: 95%;">
<div style="padding:2px 2px 2px 30px; background-color:#FFFAF0; font-size:larger;font-weight: bold;">]===] .. image .. title .. [===[</div>
<div class="mw-collapsible-content" style="font-size: 100%">

==&shy;&nbsp;==
]===] .. text .. sectionfooter
        end
    until false
    return output
end

function p.subsection(frame)
	if not mw.ustring.find( (frame.args[1] or frame:getParent().args[1] or '') ,'[[',1,true) then
		return '<small>(0&nbsp;articles)</small>'
	else
		local linkList, count = mw.ustring.gsub(mw.text.trim(frame.args[1] or frame:getParent().args[1]), '\n', '&nbsp;–\n')
		return linkList .. '<small>&nbsp;&nbsp;(' .. (count + 1) .. '&nbsp;article' .. ( (count ~= 0) and 's' or '') .. ')</small>'
	end
end

return p