FANDOM


 
--[[ <pre> Displays content from randomly featured live article from a list or lua table (e.g. Module:Top/data)
Syntax :
{{#invoke:feature page|page1|page2|page3}}
{{#invoke:feature page|#table=datamodule}}
{{#invoke:feature page|#table=Module:Holocron/data}}
{{#invoke:feature page|#chars=500|#table=Module:Holocron/data}}
{{#invoke:feature page|#chars=inf|#table=Module:Holocron/data}}
{{#invoke:feature page|#sanitize=0|#table:Module:Holocron/data}}
--]]
local p = {}
local utility = require("Dev:Utility")
 
function p.main(frame)
    local tArgs = utility.getArgs(frame)
    local extTable
 
    if not (tArgs and type(tArgs) == "table") then
        return "Nothing to display..."
    end
 
    extTable = mw.clone(tArgs)
    chars = tArgs["#chars"] or 300
 
    if tArgs["#table"] then
        extTable = require(tArgs["#table"])
    end
 
    math.randomseed(os.time())
    math.random()
 
    local iRand = math.random(#extTable)
 
    if not extTable[iRand] or extTable[iRand] == "" then
        return
    end
 
    local pagename = extTable[iRand]
    local titleFeatured = mw.title.new(pagename)
 
    -- Follow redirect once
    if not (titleFeatured and titleFeatured.exists) then
        return
    end
 
    if titleFeatured.isRedirect then
        local pageContents = mw.clone(titleFeatured:getContent())
 
        pageContents = pageContents:match("%[%[(.-)%]%]")
        titleFeatured = mw.title.new(pageContents)
    end
 
    -- Sanitize content and display
    if not (titleFeatured and titleFeatured.exists) then
        return
    end
 
    pageContents = mw.clone(titleFeatured:getContent())
 
    if not tArgs["#sanitize"] or tArgs["#sanitize"] ~= "0" then
        if not (tArgs["#notable"] and tArgs["#notables"] == "1") then
            pageContents = pageContents:gsub("%{%s*%|.-%|%s*%}", "")
        end
 
        pageContents = pageContents:gsub("%<%s*ref.-%>.-%<%/%s*ref%s*>", "")
        pageContents = pageContents:gsub("%<%s*ref.-%/%>", "")
        pageContents = pageContents:gsub("%[%[File%:.-%]%]", "")
        pageContents = pageContents:gsub("%=%=.-%=%=.*", "")
    end
 
    if not (tArgs["#notemplate"] and tArgs["#notemplate"] == "1") then
        pageContents = pageContents:gsub("%{%{.-%}%}", "")
    end
 
    if chars == "inf" then
        return frame:preprocess(pageContents)
    end
 
    -- Don't break on a link!
    local inlink = false
    local intemp = false
    local i = 2
    while i < tonumber(chars) or inlink or intemp do
        local substr = pageContents:sub(i - 1, i)
        if substr == "[[" then inlink = true
        elseif substr == "{{" then intemp = true
        elseif substr == "]]" then inlink = false
        elseif substr == "}}" then intemp = false
        end
        i = i + 1
    end
 
    -- Truncation
    pageContents = mw.text.truncate(pageContents, i)
    pageContents = mw.text.trim(pageContents)
 
    return frame:preprocess(pageContents .. " [[" .. pagename .. "|(more)]]")
end
 
return p

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.