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.

// request.cf · coarse context

A page that knows where it met you.

Only coarse request metadata is shown. This demo does not display or persist visitor IP addresses.

Country
US
Cloudflare location
CMH
Connection
HTTP/2
Language
Not provided

Ray ID: a22475352caccc36

Jump to content

Module:Aside

From Wikipedia, the free encyclopedia

-- This module is an experiment in an altered discussion dynamic for Wikipedia forums.
-- It presents a brief digest of the referenced discussion on a user's talk subpage.
-- The full conversation remains available via V-D-E buttons (V = view the talk subpage, 
-- D = file a comment to the user's MAIN talk page like if there's something you want him to 'admin' or to request an invite as applicable
-- E = edit the talk subpage
-- The digest should present usernames and the first words of each comment, for the past N comments
-- One intention is to allow off-topic conversations to be less obtrusive on the parent thread.
-- Another is that, potentially, some of these may be invite-only conversations in some forum where that is deemed appropriate.
-- Discussions of this type might be indexed in multiple specialized forums.
-- Part of the experiment is that if users feel *invited* to a discussion, it gives editors a chance to express mutual esteem,
-- as a counterbalance against the usual where they only really talk personally when in conflict.  Not sure this will really happen...

-- To try to keep things more accessible, I think the Lua module should only do the text processing to create the talk page extract
-- This then should get wrapped up in V-D-E boxes and cute formatting by an enveloping template.
-- There are some things I can't be perfect about - if you reply in the middle of someone's comment you'll get their beginning attributed to you.

local p = {}

function p.main(frame,header)
    local parent=frame.getParent(frame) or {}
    local currentpage,top
    user = frame.args.user or parent.args.user
    page = frame.args.page or parent.args.page
    local basepage, section = mw.ustring.match(page, "(.-)#(.*)")
    if section then page = basepage end
    comments = frame.args.comments or parent.args.comments
    length = frame.args.length or parent.args.length
    order = frame.args.order or parent.args.order or "new"
    if (order == "") then order = "new" end
    comments = comments or 6
    comments = tonumber(comments)
    if (comments == 0 or not(comments)) then comments = 6 end
    length = length or 80
    length = tonumber(length)
    local pagepointer=mw.title.new(page)
    if not(pagepointer) then return "''[[Module:Aside]]: The page " .. '"' .. page .. '"' .. " could not be accessed.''" end
    local text=pagepointer.getContent(pagepointer)
    
    if not(text) then return "''[[Module:Aside]]: The page " .. '"' .. page .. '"' .. " could not be read. Make sure it exists and is not empty.''" end

    if section then
    	local textbits = mw.text.split(text, section, true)
    	if #textbits > 1 then
    		local i = 2
    		repeat
    		    if (mw.ustring.match(textbits[i-1], "==*%s*$")) and (mw.ustring.match(textbits[i], "^%s*==*")) then
    			    text = mw.ustring.gsub(table.concat(textbits, "", i), "%s*==*", "", 1)
    			    text = mw.ustring.gsub(text, "\n%s*==*.*", "", 1)
    			    break
    		    end
    		    i = i + 1
	        until (i > #textbits)
	    else
	    	return "''[[Module:Aside]]: The section " .. '"' .. section .. '"' .. " could not be found in " .. '"' .. page .. '"'
	    end
    end
    		
    local output=mw.ustring.match(text, "<!%-%-+banner%-%-+>(.-)<!%-%-+/banner%-%-+>") or ""
    output = output .. "<br />"
    text = mw.ustring.gsub(text, "<!%-%-+banner%-%-+>(.-)<!%-%-+/banner%-%-+>%s*", "", 1)
    text = mw.ustring.gsub(text, "==+([^\n=]*)=+=%s*", "")
    text = mw.ustring.gsub(text, "<!%-%-+.-%-%-+>", "")
    
    local signaturematch = "%[%[(.-)%]%]%s*%(%[%[(.-)%]%]%)%s*(%d+):(%d+)%s*,%s*(%d+)%s*(.-)%s*(%d+)%s*%(%a%a%a%)%s*"
    local monthlookup = {["January"] = "01", ["February"] = "02", ["March"] = "03", ["April"] = "04", ["May"] = "05", ["June"] = "06", ["July"] = "07", ["August"] = "08", ["September"] = "09", ["October"] = "10", ["November"] = "11", ["December"] = "12"}
    local prowl = mw.ustring.gmatch(text,":*%s*(.-)"..signaturematch)
    local archive = {}
    local keys = {}
    repeat
        local comment, commentuser, commenttalk, commenthour, commentminute, commentday, commentmonth, commentyear = prowl()
        if not (comment) then break end
        comment = mw.ustring.gsub(comment, "$[:%s\n]*", "", 1)
        comment = mw.ustring.gsub(comment, "\n:*", "  ")
        comment = mw.ustring.gsub(comment, "<br ?\\?>", "  ")
        local commentmonthno = monthlookup[commentmonth] or "00"
        if mw.ustring.len(commentday) == 1 then commentday = "0" .. commentday end
        local key = commentyear .. commentmonthno .. commentday .. commenthour .. commentminute
        commentuser = mw.ustring.match(commentuser, "(.-)|") or commentuser
        commentuser = mw.ustring.match(commentuser, "User:(.*)") or commentuser
        commenttalk = mw.ustring.match(commenttalk, "(.-)|") or commenttalk
        commenttalk = mw.ustring.match(commenttalk, "(.-)#") or commenttalk
     
        commentdate = commentmonthno .. "/" .. commentday .. " " .. commenthour .. ":" .. commentminute
        archive[key] = {comment, commentuser, commenttalk, commentdate}
        table.insert(keys, key)
    until false

    if (order == "new") then table.sort(keys) end
    
  
    local lastkey = #keys
    local firstkey = math.max(1, lastkey - comments + 1)
    for i = firstkey, lastkey do
    	local key = keys[i]
    	local comment, commentuser, commenttalk, commentdate = archive[key][1], archive[key][2], archive[key][3], archive[key][4]
    	local longuser = mw.ustring.len(commentuser)
    	if (longuser>12) then commentuser = mw.ustring.sub(commentuser, 1, 5) .. ".." .. mw.ustring.sub(commentuser, longuser - 4, longuser) end
        output=output.. commentdate .." [["..commenttalk.."|"..commentuser.."]]: "..(mw.ustring.sub(comment, 1, length) or "").."<br />"
    end
    return frame.preprocess(frame,output)
end

return p