Module:Link

-- This module is a replacement for Template:Lw and other link templates.

local p = {}

-- getSubpageLink tests to see if the subpage exists. If it does, it returns a link to the subpage. If not, it returns nil. local function getSubpageLink(link) local title local prefixedText local result title = mw.title.getCurrentTitle prefixedText = title.prefixedText title = mw.title.new(prefixedText .. '/' .. link) if title.exists then result = '/' .. link .. '/' else error end return result end

-- getWikiversityLink tests to see if the resource page exists. If it does, it returns a link to the page. If not, it returns nil. local function getWikiversityLink(link) local title local result title = mw.title.new(link) if title.exists then result =  .. link ..  else error end return result end

-- getWikipediaLink returns a link to Wikipedia as w:. local function getWikipediaLink(link) return  .. link ..  end

-- getSilentWikipediaLink returns a link to Wikipedia without displaying the w:. local function getSilentWikipediaLink(link) return  .. link ..  end

-- lsw takes two parameters. The first is a link title. The second is either nil or not. -- The function will return either a subpage link if it exists, or a Wikiversity link if it exists, -- or a Wikipedia link if no Wikiversity link exists. If the second parameter is not nil, the -- Wikipedia link is a silent redirect (no w: displayed). function p.lsw(frame) local link local result link = mw.text.trim(frame.args[1]) if pcall(function result = getSubpageLink(link) end) then return result end

if pcall(function result = getWikiversityLink(link) end) then return result end

if frame.args[2] == nil then return getWikipediaLink(link) else return getSilentWikipediaLink(link) end end

-- lw takes two parameters. The first is a link title. The second is either nil or not. -- The function will return either a Wikiversity link if it exists, or a Wikipedia link if -- no Wikiversity link exists. If the second parameter is not nil, the Wikipedia link is -- a silent redirect (no w: displayed). function p.lw(frame) local link local result link = mw.text.trim(frame.args[1])

if pcall(function result = getWikiversityLink(link) end) then return result end

if frame.args[2] == nil then return getWikipediaLink(link) else return getSilentWikipediaLink(link) end end return p