Difference between revisions of "Module:Excerpt"
Jump to navigation
Jump to search
blackwiki>Sophivorus (Update to new version) |
blackwiki>Sophivorus (Update to latest, see Module talk:Excerpt#New version) |
||
| Line 1: | Line 1: | ||
| − | + | local Transcluder = require('Module:Transcluder') | |
| − | local | ||
| − | local | + | local yesno = require('Module:Yesno') |
| − | + | local ok, config = pcall(require, 'Module:Excerpt/config') | |
| − | local | + | if not ok then config = {} end |
| − | |||
| − | |||
| − | |||
| − | |||
| − | end | ||
| − | + | local p = {} | |
| − | |||
| − | |||
| − | local | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | -- | + | -- Helper function to get arguments |
| − | + | local args | |
| − | + | function getArg(key, default) | |
| − | + | value = args[key] | |
| − | + | if value and mw.text.trim(value) ~= '' then | |
| − | + | return value | |
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| − | + | return default | |
| − | return | ||
end | end | ||
| − | -- Helper function to | + | -- Helper function to handle errors |
| − | + | function getError(message, value) | |
| − | + | if type(message) == 'string' then | |
| − | + | message = Transcluder.getError(message, value) | |
| − | |||
| − | |||
| − | |||
end | end | ||
| − | + | if config.categories and config.categories.errors and mw.title.getCurrentTitle().isContentPage then | |
| − | + | message:node('[[Category:' .. config.categories.errors .. ']]') | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| + | return message | ||
end | end | ||
| − | -- Helper function to | + | -- Helper function to get localized messages |
| − | + | function getMessage(key) | |
| − | + | local ok, TNT = pcall(require, 'Module:TNT') | |
| − | if not | + | if not ok then return key end |
| − | + | return TNT.format('I18n/Module:Excerpt.tab', key) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| − | + | function p.main(frame) | |
| − | + | args = Transcluder.parseArgs(frame) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | -- | + | -- Make sure the requested page exists |
| − | + | local page = getArg(1) | |
| − | + | if not page then return getError('no-page') end | |
| − | |||
| − | |||
| − | |||
| − | if | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
local title = mw.title.new(page) | local title = mw.title.new(page) | ||
| − | if not title then return | + | if not title then return getError('no-page') end |
| − | + | if title.isRedirect then title = title.redirectTarget end | |
| − | + | if not title.exists then return getError('page-not-found', page) end | |
| − | + | page = title.prefixedText | |
| − | |||
| − | |||
| − | end | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | -- | + | -- Set variables |
| − | local | + | local fragment = getArg('fragment') |
| − | local | + | local section = fragment or getArg(2, getArg('section', mw.ustring.match(getArg(1), '[^#]+#([^#]+)') ) ) |
| − | + | local hat = yesno( getArg('hat', true) ) | |
| − | + | local this = getArg('this') | |
| − | + | local only = getArg('only') | |
| − | + | local files = getArg('files') | |
| − | + | local lists = getArg('lists') | |
| + | local tables = getArg('tables') | ||
| + | local sections = not yesno( getArg('sections') ) | ||
| + | local templates = table.concat((config.templates or {}), ',') | ||
| + | local paragraphs = getArg('paragraphs') | ||
| + | local references = getArg('references') | ||
| + | local noBold = not yesno( getArg('bold') ) | ||
| + | local inline = yesno( getArg('inline') ) | ||
| + | local quote = yesno( getArg('quote') ) | ||
| + | local more = yesno( getArg('more') ) | ||
| + | local class = getArg('class') | ||
| − | + | -- Build the hatnote | |
| − | + | if hat and not inline then | |
| − | + | if this then | |
| − | + | hat = this | |
| − | + | elseif quote then | |
| − | + | hat = getMessage('this') | |
| − | + | elseif only then | |
| − | + | hat = getMessage(only) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | -- | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | if | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | if | ||
| − | |||
| − | elseif | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
else | else | ||
| − | + | hat = getMessage('section') | |
end | end | ||
| − | + | hat = hat .. ' ' .. getMessage('excerpt') .. ' ' | |
| − | + | if section and not fragment then | |
| − | + | hat = hat .. '[[' .. page .. '#' .. mw.uri.anchorEncode(section) .. '|' .. page | |
| − | + | .. ' § ' .. mw.ustring.gsub(section, '%[%[([^]|]+)|?[^]]*%]%]', '%1') .. ']]' -- remove nested links | |
| − | |||
| − | |||
| − | |||
| − | |||
else | else | ||
| − | + | hat = hat .. '[[' .. page .. ']]' | |
end | end | ||
| − | + | hat = hat .. "''" .. '<span class="mw-editsection-like plainlinks"><span class="mw-editsection-bracket">[</span>[' | |
| − | + | hat = hat .. title:fullUrl('action=edit') .. ' ' .. mw.message.new('editsection'):plain() | |
| − | + | hat = hat .. ']<span class="mw-editsection-bracket">]</span></span>' .. "''" | |
| − | + | local ok, Hatnote = pcall(require, 'Module:Hatnote') | |
| − | if | + | if ok then |
| − | + | hat = Hatnote._hatnote( hat, { extraclasses = 'dablink excerpt-hat', selfref = true } ) | |
| − | |||
| − | |||
| − | |||
| − | |||
else | else | ||
| − | + | hat = mw.html.create('div'):addClass('dablink excerpt-hat'):wikitext(hat) | |
end | end | ||
| + | else | ||
| + | hat = nil | ||
end | end | ||
| − | + | -- Build the "Read more" link | |
| − | + | if more and not inline then | |
| − | -- | + | more = "'''[[" .. page .. '#' .. (section or '') .. "|" .. getMessage('more') .. "]]'''" |
| − | + | more = mw.html.create('div'):addClass('noprint excerpt-more'):wikitext(more) | |
| − | + | else | |
| − | + | more = nil | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| − | -- | + | -- Build the options for Module:Transcluder out of the template arguments and the desired defaults |
| − | local | + | local options = { |
| − | + | files = files, | |
| − | + | lists = lists, | |
| + | tables = tables, | ||
| + | paragraphs = paragraphs, | ||
| + | templates = templates ~= '' and '-' .. templates, | ||
| + | sections = sections, | ||
| + | categories = 0, | ||
| + | references = references, | ||
| + | only = only and mw.text.trim(only, 's') .. 's', | ||
| + | noBold = noBold, | ||
| + | noSelfLinks = true, | ||
| + | noNonFreeFiles = true, | ||
| + | noBehaviorSwitches = true, | ||
| + | fixReferences = true, | ||
| + | linkBold = true, | ||
| + | } | ||
| − | + | -- Get the excerpt itself | |
| − | + | local title = page .. '#' .. (section or '') | |
| − | + | local ok, excerpt = pcall(Transcluder.get, title, options) | |
| − | + | if not ok then return getError(excerpt) end | |
| − | + | if mw.text.trim(excerpt) == '' then | |
| − | + | if section then return getError('section-empty', section) else return getError('lead-empty') end | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | if | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| − | -- | + | -- Add a line break in case the excerpt starts with a table or list |
| − | + | excerpt = '\n' .. excerpt | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | local | + | -- If no file was found, try to excerpt one from the removed infoboxes |
| − | if | + | local fileNamespaces = Transcluder.getNamespaces('File') |
| − | for _, | + | if (files ~= '0' or not files) and not Transcluder.matchAny(excerpt, '%[%[', fileNamespaces, ':') and config.captions then |
| − | + | local templates = Transcluder.get(title, { only = 'templates', templates = templates, fixReferences = true } ) | |
| − | + | local parameters = Transcluder.getParameters(templates) | |
| − | + | local file, captions, caption | |
| − | for _, | + | for _, pair in pairs(config.captions) do |
| − | if | + | file = pair[1] |
| + | file = parameters[file] | ||
| + | if file and Transcluder.matchAny(file, '^.*%.', {'[Jj][Pp][Ee]?[Gg]','[Pp][Nn][Gg]','[Gg][Ii][Ff]','[Ss][Vv][Gg]'}, '.*') then | ||
| + | file = mw.ustring.match(file, '%[?%[?.-:([^{|]+)%]?%]?') or file -- [[File:Example.jpg{{!}}upright=1.5]] to Example.jpg | ||
| + | captions = pair[2] | ||
| + | for _, p in pairs(captions) do | ||
| + | if parameters[p] then caption = parameters[p] break end | ||
end | end | ||
| + | excerpt = '[[File:' .. file .. '|thumb|' .. (caption or '') .. ']]' .. excerpt | ||
| + | break | ||
end | end | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
end | end | ||
| − | |||
| − | |||
| − | -- | + | -- Remove nested categories |
| − | + | excerpt = frame:preprocess(excerpt) | |
| − | + | local categories, excerpt = Transcluder.getCategories(excerpt, options.categories) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | local | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | -- Add tracking categories | |
| − | if | + | if config.categories then |
| − | + | local contentCategory = config.categories.content | |
| − | + | if contentCategory and mw.title.getCurrentTitle().isContentPage then | |
| − | + | excerpt = excerpt .. '[[Category:' .. contentCategory .. ']]' | |
end | end | ||
| − | + | local namespaceCategory = config.categories[ mw.title.getCurrentTitle().namespace ] | |
| − | + | if namespaceCategory then | |
| − | + | excerpt = excerpt .. '[[Category:' .. namespaceCategory .. ']]' | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | -- Load the styles | |
| − | + | local styles | |
| − | + | if config.styles then | |
| − | + | styles = frame:extensionTag( 'templatestyles', '', { src = config.styles } ) | |
| − | |||
| − | local | ||
| − | if | ||
| − | |||
| − | |||
| − | |||
end | end | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | -- Combine and return the elements | |
| − | + | local tag1 = 'div' | |
| − | + | local tag2 = 'div' | |
| − | + | if inline then | |
| − | + | tag1 = 'span' | |
| − | + | tag2 = 'span' | |
| − | + | elseif quote then | |
| − | + | tag2 = 'blockquote' | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | local | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | local | ||
| − | |||
| − | |||
| − | if | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| − | + | excerpt = mw.html.create(tag1):addClass('excerpt'):wikitext(excerpt) | |
| − | + | local block = mw.html.create(tag2):addClass('excerpt-block'):addClass(class) | |
| − | + | return block:node(styles):node(hat):node(excerpt):node(more) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
-- Entry points for backwards compatibility | -- Entry points for backwards compatibility | ||
| − | function p. | + | function p.lead(frame) return p.main(frame) end |
| − | + | function p.excerpt(frame) return p.main(frame) end | |
| − | |||
| − | function p. | ||
| − | |||
return p | return p | ||
Revision as of 15:06, 29 August 2020
| This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
| This Lua module is used on approximately 6,600 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages. Consider discussing changes on the talk page before implementing them.
Transclusion count updated automatically (see documentation). |
This module implements Template:Excerpt.
- See Template:Excerpt for documentation on the template parameters
- See mw:Module:Excerpt for documentation on this module
- See Module:Excerpt/config for configuration of this module
Portals
Portals still use a previous version of this module:
- Module:Excerpt/portals / sandbox — Used by:
- {{Transclude lead excerpt}} / sandbox / testcases
- {{Transclude linked excerpt}} / sandbox / testcases
- {{Transclude list item excerpt}} / sandbox / testcases
- {{Transclude random excerpt}} / sandbox / testcases
- {{Transclude selected excerpt}} / sandbox / testcases
- Module:Excerpt slideshow / sandbox — Uses Module:Excerpt/portals and is used by:
- Module:Random slideshow / sandbox — Uses Module:Excerpt/portals and is used by:
- {{Random slideshow}} / sandbox / testcases
- {{Transclude files as random slideshow}} / sandbox / testcases
local Transcluder = require('Module:Transcluder')
local yesno = require('Module:Yesno')
local ok, config = pcall(require, 'Module:Excerpt/config')
if not ok then config = {} end
local p = {}
-- Helper function to get arguments
local args
function getArg(key, default)
value = args[key]
if value and mw.text.trim(value) ~= '' then
return value
end
return default
end
-- Helper function to handle errors
function getError(message, value)
if type(message) == 'string' then
message = Transcluder.getError(message, value)
end
if config.categories and config.categories.errors and mw.title.getCurrentTitle().isContentPage then
message:node('[[Category:' .. config.categories.errors .. ']]')
end
return message
end
-- Helper function to get localized messages
function getMessage(key)
local ok, TNT = pcall(require, 'Module:TNT')
if not ok then return key end
return TNT.format('I18n/Module:Excerpt.tab', key)
end
function p.main(frame)
args = Transcluder.parseArgs(frame)
-- Make sure the requested page exists
local page = getArg(1)
if not page then return getError('no-page') end
local title = mw.title.new(page)
if not title then return getError('no-page') end
if title.isRedirect then title = title.redirectTarget end
if not title.exists then return getError('page-not-found', page) end
page = title.prefixedText
-- Set variables
local fragment = getArg('fragment')
local section = fragment or getArg(2, getArg('section', mw.ustring.match(getArg(1), '[^#]+#([^#]+)') ) )
local hat = yesno( getArg('hat', true) )
local this = getArg('this')
local only = getArg('only')
local files = getArg('files')
local lists = getArg('lists')
local tables = getArg('tables')
local sections = not yesno( getArg('sections') )
local templates = table.concat((config.templates or {}), ',')
local paragraphs = getArg('paragraphs')
local references = getArg('references')
local noBold = not yesno( getArg('bold') )
local inline = yesno( getArg('inline') )
local quote = yesno( getArg('quote') )
local more = yesno( getArg('more') )
local class = getArg('class')
-- Build the hatnote
if hat and not inline then
if this then
hat = this
elseif quote then
hat = getMessage('this')
elseif only then
hat = getMessage(only)
else
hat = getMessage('section')
end
hat = hat .. ' ' .. getMessage('excerpt') .. ' '
if section and not fragment then
hat = hat .. '[[' .. page .. '#' .. mw.uri.anchorEncode(section) .. '|' .. page
.. ' § ' .. mw.ustring.gsub(section, '%[%[([^]|]+)|?[^]]*%]%]', '%1') .. ']]' -- remove nested links
else
hat = hat .. '[[' .. page .. ']]'
end
hat = hat .. "''" .. '<span class="mw-editsection-like plainlinks"><span class="mw-editsection-bracket">[</span>['
hat = hat .. title:fullUrl('action=edit') .. ' ' .. mw.message.new('editsection'):plain()
hat = hat .. ']<span class="mw-editsection-bracket">]</span></span>' .. "''"
local ok, Hatnote = pcall(require, 'Module:Hatnote')
if ok then
hat = Hatnote._hatnote( hat, { extraclasses = 'dablink excerpt-hat', selfref = true } )
else
hat = mw.html.create('div'):addClass('dablink excerpt-hat'):wikitext(hat)
end
else
hat = nil
end
-- Build the "Read more" link
if more and not inline then
more = "'''[[" .. page .. '#' .. (section or '') .. "|" .. getMessage('more') .. "]]'''"
more = mw.html.create('div'):addClass('noprint excerpt-more'):wikitext(more)
else
more = nil
end
-- Build the options for Module:Transcluder out of the template arguments and the desired defaults
local options = {
files = files,
lists = lists,
tables = tables,
paragraphs = paragraphs,
templates = templates ~= '' and '-' .. templates,
sections = sections,
categories = 0,
references = references,
only = only and mw.text.trim(only, 's') .. 's',
noBold = noBold,
noSelfLinks = true,
noNonFreeFiles = true,
noBehaviorSwitches = true,
fixReferences = true,
linkBold = true,
}
-- Get the excerpt itself
local title = page .. '#' .. (section or '')
local ok, excerpt = pcall(Transcluder.get, title, options)
if not ok then return getError(excerpt) end
if mw.text.trim(excerpt) == '' then
if section then return getError('section-empty', section) else return getError('lead-empty') end
end
-- Add a line break in case the excerpt starts with a table or list
excerpt = '\n' .. excerpt
-- If no file was found, try to excerpt one from the removed infoboxes
local fileNamespaces = Transcluder.getNamespaces('File')
if (files ~= '0' or not files) and not Transcluder.matchAny(excerpt, '%[%[', fileNamespaces, ':') and config.captions then
local templates = Transcluder.get(title, { only = 'templates', templates = templates, fixReferences = true } )
local parameters = Transcluder.getParameters(templates)
local file, captions, caption
for _, pair in pairs(config.captions) do
file = pair[1]
file = parameters[file]
if file and Transcluder.matchAny(file, '^.*%.', {'[Jj][Pp][Ee]?[Gg]','[Pp][Nn][Gg]','[Gg][Ii][Ff]','[Ss][Vv][Gg]'}, '.*') then
file = mw.ustring.match(file, '%[?%[?.-:([^{|]+)%]?%]?') or file -- [[File:Example.jpg{{!}}upright=1.5]] to Example.jpg
captions = pair[2]
for _, p in pairs(captions) do
if parameters[p] then caption = parameters[p] break end
end
excerpt = '[[File:' .. file .. '|thumb|' .. (caption or '') .. ']]' .. excerpt
break
end
end
end
-- Remove nested categories
excerpt = frame:preprocess(excerpt)
local categories, excerpt = Transcluder.getCategories(excerpt, options.categories)
-- Add tracking categories
if config.categories then
local contentCategory = config.categories.content
if contentCategory and mw.title.getCurrentTitle().isContentPage then
excerpt = excerpt .. '[[Category:' .. contentCategory .. ']]'
end
local namespaceCategory = config.categories[ mw.title.getCurrentTitle().namespace ]
if namespaceCategory then
excerpt = excerpt .. '[[Category:' .. namespaceCategory .. ']]'
end
end
-- Load the styles
local styles
if config.styles then
styles = frame:extensionTag( 'templatestyles', '', { src = config.styles } )
end
-- Combine and return the elements
local tag1 = 'div'
local tag2 = 'div'
if inline then
tag1 = 'span'
tag2 = 'span'
elseif quote then
tag2 = 'blockquote'
end
excerpt = mw.html.create(tag1):addClass('excerpt'):wikitext(excerpt)
local block = mw.html.create(tag2):addClass('excerpt-block'):addClass(class)
return block:node(styles):node(hat):node(excerpt):node(more)
end
-- Entry points for backwards compatibility
function p.lead(frame) return p.main(frame) end
function p.excerpt(frame) return p.main(frame) end
return p