-- SPDX-FileCopyrightText: 2025 toastal -- SPDX-License-Identifier: MPL-2.0 -- -- address-url-encoding.lua -- -- This plugin percent-encodes certain URI scheme which prevents lazy amount -- of scrapers Plugin.require_version("4.0.0") function url_encode_fn(c) return format("%%%02X", ascii(c)) end function split_url_encode(elem) local href = HTML.get_attribute(elem, "href") local splat = Regex.split(String.url_decode(href), ":") local scheme = splat[1] local addr = "" local idx = 2 while splat[idx] do local part = splat[idx] if addr == "" then addr = part else addr = addr .. ":" .. part end idx = idx + 1 end local addr_chars = Regex.split(addr, "") Table.apply_to_values(url_encode_fn, addr_chars) -- URL encodes *all* characters—including ASCII local new_href = scheme .. ":" .. String.join("", addr_chars) HTML.set_attribute(elem, "href", new_href) end local address_likes = HTML.select_all_of(page, { "[href^=\"mailto:\"]", "[href^=\"matrix:\"]", "[href^=\"tel:\"]", "[href^=\"xmpp:\"]" }) Table.iter_values(split_url_encode, address_likes)