Module:Link: Difference between revisions
From Neodyland Wiki
More actions
m Protected Module:Link: Widely used template ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite)) |
m upd |
||
| Line 13: | Line 13: | ||
callback: Function that will be called on each wikilink with linkInfo as first parameter | callback: Function that will be called on each wikilink with linkInfo as first parameter | ||
linkInfo is a table consisting of the following properties: | linkInfo is a table consisting of the following properties: | ||
. | .redir (boolean) | ||
. | .red (boolean) | ||
.text (String) | .text (String) | ||
.link (String or nil) | .link (String or nil) | ||
| Line 40: | Line 40: | ||
for link in matches do | for link in matches do | ||
local linkInfo = { | local linkInfo = { | ||
redir = not not link:find('class="mw-redirect"', 1, true), | |||
red = not not link:find('class="new"', 1, true), | |||
text = link:match('>(.-)</a>'), | text = link:match('>(.-)</a>'), | ||
link = link:match('href="(.-)"'), | link = link:match('href="(.-)"'), | ||
Revision as of 14:30, 16 May 2013
This documentation is transcluded from Module:Link/doc.
local p = {}
--[=[
forEachLink
Parses wikilinks and returns information about them
Usage:
require( 'Module:Link' ).forEachLink("wikitext", function(linkInfo) end)
Parameters:
wikitext: String of wikitextformatted links. E.g. "[[Main Page]][[Main page]][[does not exist]]"
callback: Function that will be called on each wikilink with linkInfo as first parameter
linkInfo is a table consisting of the following properties:
.redir (boolean)
.red (boolean)
.text (String)
.link (String or nil)
.title (String or nil)
Returns:
A table (array-like) of all links
Example:
require( 'Module:Link' ).forEachLink("[[Main Page]][[Main page]][[does not exist]]", function(li)
mw.log(li.text .. " points to " .. li.link .. " and has title " .. title)
end)
]=]
function p.forEachLink(wikitext, callback)
local msg = mw.message.newRawMessage( wikitext )
local parsed = msg:parse()
local matches = parsed:gmatch( '<a.-</a>' )
local cbType = type(callback)
local cbCompat= cbType == 'function' or ( cbType == 'table' and getmetatable(callback).__call )
local allLinkInfos = {}
for link in matches do
local linkInfo = {
redir = not not link:find('class="mw-redirect"', 1, true),
red = not not link:find('class="new"', 1, true),
text = link:match('>(.-)</a>'),
link = link:match('href="(.-)"'),
title = link:match('title="(.-)"')
}
if text and cbCompat then
callback( linkInfo )
end
table.insert( allLinkInfos, linkInfo )
end
return allLinkInfos
end
return p