Modul:link

Definition från Wiktionary, den fria ordlistan.
Hoppa till: navigering, sök

Dokumentation för denna modul finns på /dok (redigera), /test


Syfte[redigera]

Kan användas av moduler eller mallar för att länka en textsträng om det är möjligt, annars lämna den olänkad, samt svara på om en textsträng över huvud taget kan länkas. Hanterar specialfall som "", "-" och "?". Används typiskt av grammmatikmoduler men används med fördel av alla typer av mallar och moduler där motsvarande funktionalitet är väntad.

Användning[redigera]

Från modul:

local lk = require("Modul:link")

local can_create_page      = lk.isValidLinkTarget("sidnamn")     -- true
local cannot_create_page   = lk.isValidLinkTarget("[[sidnamn]]") -- false
local modified_string      = lk.link("sidnamn")                  -- [[sidnamn]]
local unmodified_string    = lk.link("[[sidnamn]]")              -- [[sidnamn]]
local special_case_1       = lk.link("")                         -- &‌nbsp;
local special_case_2       = lk.link("-")                        -- –
local special_case_3       = lk.link("?")                        -- ?

  Från mall:

{{#invoke:link|isValidLinkTarget|sidnamn}}     -- true
{{#invoke:link|isValidLinkTarget|[[sidnamn]]}} -- false
{{#invoke:link|link|sidnamn}}                  -- [[sidnamn]]
{{#invoke:link|link|[[sidnamn]]}}              -- [[sidnamn]]
{{#invoke:link|link|}}                         -- &‌nbsp;
{{#invoke:link|link|-}}                        -- –
{{#invoke:link|link|?}}                        -- ?

Tester[redigera]

All tests passed.

test01_basic:

Text Expected Actual
mut.link("ord") [[ord]] [[ord]]

test02_special_cases:

Text Expected Actual
mut.link("-")
mut.link("?")  ?  ?
mut.link("")    

test03_namespaces:

Text Expected Actual
mut.link(":Kategori:Index") [[:Kategori:Index]] [[:Kategori:Index]]
mut.link("w:Portal:Huvudsida") [[w:Portal:Huvudsida]] [[w:Portal:Huvudsida]]
mut.link(":en:Wiktionary:Main Page") [[:en:Wiktionary:Main Page]] [[:en:Wiktionary:Main Page]]

test04_links_with_special_chars:

Text Expected Actual
mut.link("abc#åäö") [[abc#åäö]] [[abc#åäö]]
mut.link("...") [[...]] [[...]]
mut.link("(") [[(]] [[(]]
mut.link("\"") [["]] [["]]

test05_phrases:

Text Expected Actual
mut.link("compound word") [[compound word]] [[compound word]]
mut.link("Surt, sa räven") [[Surt, sa räven]] [[Surt, sa räven]]
mut.link("Surt, sa räven om rönnbären.") [[Surt, sa räven om rönnbären.]] [[Surt, sa räven om rönnbären.]]

test06_already_linked_should_not_double_link:

Text Expected Actual
mut.link("[[ord]]") [[ord]] [[ord]]
mut.link("[[ord|text]]") [[ord|text]] [[ord|text]]
mut.link("[[ord]], ord2") [[ord]], ord2 [[ord]], ord2
mut.link("[[ord]]<sup>1</sup>") [[ord]]<sup>1</sup> [[ord]]<sup>1</sup>

test07_invalid_titles:

Text Expected Actual
mut.link(".") . .
mut.link("..") .. ..
mut.link(":") : :
mut.link("> abc") > abc > abc


local export = {}

function export.isValidLinkTarget(arg)
	local str

	if arg == mw.getCurrentFrame() then
		local frame = arg
		str = frame.args[1]
	else
		str = arg
	end

	local success, res = pcall(mw.title.new, str)
	
	return not not res
end

function export.link(arg)
	local str

	if arg == mw.getCurrentFrame() then
		local frame = arg
		str = frame.args[1]
	else
		str = arg
	end

	local is_special_string = str == "" or str == "-" or str == "?"
	str = str == "-" and "–" or str
	str = str == "" and "&nbsp;" or str

	local should_add_brackets = not is_special_string and export.isValidLinkTarget(str)
	
	if should_add_brackets then
		str = "[[" .. str .. "]]"
	end
	
	return str 
end

return export