Module:anchors

From Linguifex
Revision as of 23:43, 24 March 2026 by Sware (talk | contribs) (Created page with "local export = {} local string_utilities_module = "Module:string utilities" local anchor_encode = mw.uri.anchorEncode local concat = table.concat local insert = table.insert local language_anchor -- Defined below. local function decode_entities(...) decode_entities = require(string_utilities_module).decode_entities return decode_entities(...) end local function encode_entities(...) encode_entities = require(string_utilities_module).encode_entities return encode_e...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Documentation for this module may be created at Module:anchors/doc

local export = {}

local string_utilities_module = "Module:string utilities"

local anchor_encode = mw.uri.anchorEncode
local concat = table.concat
local insert = table.insert
local language_anchor -- Defined below.

local function decode_entities(...)
	decode_entities = require(string_utilities_module).decode_entities
	return decode_entities(...)
end

local function encode_entities(...)
	encode_entities = require(string_utilities_module).encode_entities
	return encode_entities(...)
end

-- Returns the anchor text to be used as the fragment of a link to a language section.
function export.language_anchor(lang, id)
	return anchor_encode(lang:getFullName() .. ": " .. id)
end
language_anchor = export.language_anchor

-- Normalizes input text (removes formatting etc.), which can then be used as an anchor in an `id=` field.
function export.normalize_anchor(str)
	return decode_entities(anchor_encode(str))
end

function export.make_anchors(ids)
	local anchors = {}
	for i = 1, #ids do
		local id = ids[i]
		local el = mw.html.create("span")
			:addClass("template-anchor")
			:attr("id", anchor_encode(id))
			:attr("data-id", id)
		insert(anchors, tostring(el))
	end
	return concat(anchors)
end

function export.senseid(lang, id, tag_name)
	-- The following tag is opened but never closed, where is it supposed to be closed?
	--         with <li> it doesn't matter, as it is closed automatically.
	--         with <p> it is a problem
	-- Cannot use mw.html here as it always closes tags
	return "<" .. tag_name .. " class=\"senseid\" id=\"" .. language_anchor(lang, id) .. "\" data-lang=\"" .. lang:getCode() .. "\" data-id=\"" .. encode_entities(id) .. "\">"
end

function export.etymid(lang, id)
	-- Use a <ul> tag to ensure spacing doesn't get messed up.
	local el = mw.html.create("ul")
		:addClass("etymid")
		:attr("id", language_anchor(lang, id))
		:attr("data-lang", lang:getCode())
		:attr("data-id", id)
	return tostring(el)
end

function export.etymonid(lang, id, opts)
	opts = opts or {}
	-- Use a <ul> tag to ensure spacing doesn't get messed up.
	local el = mw.html.create("ul")
		:addClass("etymonid")
		:attr("data-lang", lang:getCode())
	
	if id then
		el:attr("id", language_anchor(lang, id))
		el:attr("data-id", id)
	end
	if opts.no_tree then
		el:attr("data-no-tree", "1")
	end
	if opts.title then
		el:attr("data-title", opts.title)
	end
	if opts.empty_tree then
		el:attr("data-empty-tree", "1")
	end
	
	return tostring(el)
end

return export