Module:Get short description and Module:Get short description/sandbox: Difference between pages
Appearance
(Difference between pages)
Content deleted Content added
[Factotum] |
lightweight rewrite of the current (2024-08-15) module; |
||
Line 1: | Line 1: | ||
require ('strict') |
|||
⚫ | |||
--[[--------------------------< P A T T E R N S _ T >---------------------------------------------------------- |
|||
a sequence of patterns to match canonical template name and its redirects by transclusion counts as of 2024-08-15: |
|||
'Short description', -- 6,090,442 (canonical form) |
|||
'Short Description', -- 124 |
|||
'Des', -- 20 |
|||
'Shortdesc', -- 10 |
|||
'Short desc', -- 8 |
|||
'Shortdescription', -- 6 |
|||
]] |
|||
⚫ | |||
'[Ss]hort [Dd]escription', |
|||
'[Dd]es', |
|||
'[Ss]hort *desc', |
|||
'[Ss]hortdescription', |
|||
} |
|||
--[[-----------------------------< G E T C O N T E N T >------------------------------------------------------- |
|||
fetch the article's raw wikitext |
|||
]] |
|||
local function getContent(title) |
local function getContent(title) |
||
local success, titleObj = pcall(mw.title.new, title) |
local success, titleObj = pcall(mw.title.new, title) -- get a title object for title |
||
if not success then return nil end |
if not success then return nil end -- return nil if sommat went wron |
||
return titleObj:getContent() |
return titleObj:getContent() -- return wikitext else |
||
end |
end |
||
function p.main(frame, title) |
|||
--[[-----------------------------< M A I N >------------------------------------------------------------------- |
|||
]] |
|||
local function main(frame, title) -- do we really need <title> here? |
|||
local title = frame.args[1] |
local title = frame.args[1] |
||
local wikitext = getContent(title) |
local wikitext = getContent(title) |
||
if wikitext == nil then return "" end |
if wikitext == nil then return "" end -- sommat went wrong, abandon |
||
wikitext = frame:preprocess(wikitext) |
|||
for _, pattern in ipairs (patterns_t) do -- for each pattern in the sequence of redirect patterns |
|||
local startIndex, endIndex = string.find(wikitext, "<div class=\"shortdescription nomobile noexcerpt noprint searchaux\" style=\"display:none\">") |
|||
local description = wikitext:match ('{{%s*' .. pattern .. '%s*|%s*([^|}]+)%s*'); -- try to find a match |
|||
if startIndex == nil then |
|||
if description then |
|||
return nil |
|||
return description; -- found one, stop looking and done |
|||
end |
|||
local descriptionStart = endIndex + 1 |
|||
end |
|||
local descriptionEnd = string.find(wikitext, "</div>", descriptionStart) |
|||
if descriptionEnd == nil then |
|||
return nil |
|||
end |
|||
return string.sub(wikitext, descriptionStart, descriptionEnd - 1) |
|||
end |
end |
||
⚫ | |||
--[[-----------------------------< E X P O R T S >------------------------------------------------------------- |
|||
]] |
|||
⚫ | |||
main = main, |
|||
} |