Modul:Lencong

Daripada Wikipedia, ensiklopedia bebas.

Modul ini menerima nama sebuah laman. Ia menentukan sama ada laman itu sebuah lencongan; jika ya, ia akan mencari laman, menyari sasaran dan memulangkan nama sasaran sebagai teks. Cara menggunanya ialah {{#invoke:lencong|main|nama-laman-sasaran-lencongan}}.

Templat lazimnya tidak menerima ataupun menyediakan tanda kurung siku [ ], justeru untuk memaparkan hasilan sebagai sebuah pautan, gunakan [[{{#invoke:lencong|main|nama-laman-sasaran-lencongan}}]]. Pautan merah akan ditimbulkan jika laman sasaran tidak wujud. Ralat akan ditimbulkan jika nama modul (dalam kes ini, lencong) disalah eja atau ditaip dengan huruf besar seperti yang biasa dilakukan (yakni, #LENCONG) akan tetapi tidak ada ralat akan dipaparkan jika fail bukan sebuah lencongan (teks asal dipulangkan) ataupun jika nama fail kosong (mulangkan laman kosong).

Walau bagaimanapun, jika parameter tanda kurung siku diberi sebagai nilai tak kosong, tanda kurung siku akan dilanjutkan dan dipaparkan pada laman.

Contoh[sunting sumber]

Lihat Modul:Lencong/kes ujian

{{#invoke:lencong|main|Wikipedia:Kedai Kopi/Jadual usul}}

menghasilkan

Wikipedia:Kedai Kopi (dasar)/Jadual usul

{{#invoke:lencong|main|[[Wikipedia:Kedai Kopi/Jadual usul]]|bracket=yes}}

menghasilkan

Wikipedia:Kedai Kopi (dasar)/Jadual usul

Jika sasaran bukan lencongan:

{{#invoke:lencong|main|Wikipedia:Kedai Kopi|}}

menghasilkan

Wikipedia:Kedai Kopi

Ejaan silap

{{#invoke:LENCONG|main|[[Wikipedia:Kedai Kopi/Jadual usul]]}}

menghasilkan

Ralat skrip: Modul "LENCONG" tidak wujud.


-- Given a single page name determines what page it redirects to and returns the target page name, or the
-- passed page name when not a redirect. The passed page name can be given as plain text or as a page link.
-- Returns page name as plain text, or when the bracket parameter is given, as a page link. Returns an
-- error message when page does not exist or the redirect target cannot be determined for some reason.

-- Thus these are roughly the same:
-- [[{{#invoke:redirect|main|redirect-page-name}}]] and {{#invoke:redirect|main|redirect-page-name|bracket=yes}}

local p = {}

function p.main(frame)
    -- If called via #invoke, use the args passed into the invoking
    -- template, or the args passed to #invoke if any exist. Otherwise
    -- assume args are being passed directly in from the debug console
    -- or from another Lua module.
    local origArgs
    if frame == mw.getCurrentFrame() then
        origArgs = frame:getParent().args
        for k, v in pairs( frame.args ) do
            origArgs = frame.args
            break
        end
    else
        origArgs = frame
    end
    -- Trim whitespace and remove blank arguments.
    local args = {}
    for k, v in pairs( origArgs ) do
        v = mw.text.trim( v )
        if v ~= '' then
            args[k] = v
        end
    end
    local rname, bracket = args[1], args.bracket
    
    if type(rname) ~= "string" or not mw.ustring.match(rname, "%S") then return end
    bracket = bracket and "[[%s]]" or "%s"
    rname = mw.ustring.match(rname, "%[%[(.+)%]%]") or rname
    
    -- Get the title object, passing the function through pcall 
    -- in case we are over the expensive function count limit.
    local noError, rpage = pcall(mw.title.new, rname)
    if not noError or noError and not rpage or not rpage.isRedirect then
        -- mw.title.new failed, or the page is not a redirect, so use the passed page name.
        return mw.ustring.format(bracket, rname)
    end

    local redirect = mw.ustring.match(rpage:getContent() or "", "^%s*#[Ll][Ee][Nn][Cc][Oo][Nn][Gg]%s*:?%s*%[%[([^%[%]]-)%]%]" )
    if redirect then
        -- Decode html entities and percent encodings.
        redirect = mw.text.decode(redirect, true)
        redirect = mw.uri.decode(redirect, 'WIKI')
        return mw.ustring.format(bracket, redirect)
    else
        return mw.ustring.format('<span class="error">[[Module:lencong]] ralat: tidak dapat menghuraikan lencongan - [[%s]]</span>', rname)
    end
end

return p