local ToolbarBuilder = require('Module:Toolbar')
local p = -- Page objectlocal trackingCategories = -- Table for storing the tracking categories.local demo
-- Define a custom error message for this module.local function err(msg, section) local help if section then help = ' (help)' else help = end local cat if demo
------------------------------------------------------------------------------------------------ To add more link types, write a function that produces an individual link, and put ---- it at the bottom of the list below. Then, add a link code for your function to the ---- "linktypes" table. Try and make the code three letters or less. ---- If you want more helper strings, you can define them in the generatePageDataStrings ---- function below. ------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------ LINK FUNCTIONS START ------------------------------------------------------------------------------------------------
local function makePageLink return p.fullText and '' .. p.fullText .. '' or end
local function makeTalkLink return 'talk'end
local function makeTalkOrSubjectLink if p.isTalkPage then return 'subject' else return 'talk' endend
local function makeWhatLinksHereLink return 'links'end
local function makeRelatedChangesLink return 'related'end
local function makeEditLink return 'edit'end
local function makeHistoryLink return 'history'end
local function makeWatchLink return '[' .. p:fullUrl('action=watch') .. ' watch]'end
local function makeTargetLogsLink local url = mw.uri.fullUrl('Special:Log', 'page=' .. mw.uri.encode(p.fullText)) return '[' .. tostring(url) .. ' logs]'end
local function makeEditFilterLogLink local url = mw.uri.fullUrl('Special:AbuseLog', 'wpSearchTitle=' .. mw.uri.encode(p.fullText)) return '[' .. tostring(url) .. ' abuse filter log]'end
local function makePageViewsLink(args) local endDate, startDate = "", "" if args.date then local date = string.gsub(args.date,"-","") date = os.time endDate = os.date("%Y-%m-%d", date - (1*86400)) startDate = os.date("%Y-%m-%d", date - (30*86400)) else endDate = os.date("%Y-%m-%d") startDate = os.date("%Y-%m-%d", os.time - (60*86400)) end local project = string.sub(mw.site.server,3) local url = mw.uri.encode(p.fullText, "WIKI") local urlargs = '?start=' .. startDate .. '&end=' .. endDate .. '&project=' .. project .. '&pages=' .. tostring(url) if #urlargs > 255 then -- Extra chars can tip it over the max length for an IW link. return '.. urlargs .. ' stats' end return 'stats'end
local function makeHistory500Link local url = p:fullUrl('action=history&limit=500'); return '[' .. url .. ' long history]'end
------------------------------------------------------------------------------------------------ LINK FUNCTIONS END ---- To enable new link functions, add the code to the "linktypes" table directly below. ------------------------------------------------------------------------------------------------
local linktypes =
local function getLink(linktype, args) local func = linktypes[linktype] if func then return func(args) else return err('"' .. linktype .. '" is not a valid link code', 'Not a valid link code') endend
local function makeToolbar(args) local targs = local numArgsExist = false for k, v in pairs(args) do if type(k)
false then return nil -- Don't return a toolbar if no numeric arguments exist. -- this bit looks odd else return ToolbarBuilder.main(targs) endend
local function generatePageDataStrings(args) -- If the page name is absent or blank, return an error and a tracking category. if args.page
0) then return err('page not found') endend
local function generateTrackingCategories if demo
-- This function generates a table of all available link types, with their previews.-- It is used in the module documentation.local function getLinkTable(args) demo = args.demo -- Set the demo variable. -- Generate the page data strings and return any errors. local dataStringError = generatePageDataStrings(args) if dataStringError then return dataStringError end -- Build a table of all of the links. local result = '
Code | Preview |
---|---|
" .. code .. " | " .. getLink(code, args) .. ' |
local function getSingleLink(args) demo = args.demo -- Set the demo variable. -- Generate the page data strings and return any errors. local dataStringError = generatePageDataStrings(args) if dataStringError then return dataStringError end local linktype = args[1] if not linktype then return err('no link type specified') end local result = getLink(linktype, args) result = result .. generateTrackingCategories return resultend
local function getLinksToolbar(args) demo = args.demo -- Set the demo variable. -- Generate the page data strings and return any errors. local dataStringError = generatePageDataStrings(args) if dataStringError then return dataStringError end -- Build the template output. local result = makeToolbar(args) -- Get the toolbar contents. result = (result or ) .. generateTrackingCategories return resultend
local function getLinks(args) local result = getLinksToolbar(args)
if result then if args.sup then result = '' .. result .. '' end result = ' ' .. result else result = -- If there are no links specified, don't return the toolbar at all. end if args.nopage then result = '
' .. result .. '' else if p then result = '' .. makePageLink .. result .. '' else result = '' .. args.page .. '' .. result .. '' end endreturn resultend
local function getExampleLinks(args) -- This function enables example output without having to specify any -- parameters to #invoke. args.demo = 'yes' args.page = 'Example' return getLinks(args)end
local function makeWrapper(func) return function (frame) -- If called via #invoke, use the args passed into the invoking template. -- Otherwise, for testing purposes, assume args are being passed directly in. local origArgs if frame
'page' or k
return