Дерево не раскрывает предков повторно после ручного сворачивания, предел опроса вложения, //host не ссылка, регистр схем page:/attachment:, тесты дерева, загрузки, плашки панели, 422/404. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
15 lines
1.1 KiB
TypeScript
15 lines
1.1 KiB
TypeScript
// адреса в Markdown вики: пропускаются внутренние page:/attachment:, http(s) и относительные; остальные схемы
|
|
// (javascript:, data:, vbscript:, file: …) и адреса вида //host заменяются пустой строкой. Управляющие символы и пробелы в схеме
|
|
// браузер игнорирует («java\nscript:»), поэтому схема определяется после их удаления.
|
|
const ALLOWED = new Set(["page", "attachment", "http", "https"]);
|
|
// eslint-disable-next-line no-control-regex
|
|
const IGNORED = /[\u0000- \u007f]/g;
|
|
|
|
export function wikiUrlTransform(url: string): string {
|
|
const bare = url.replace(IGNORED, "");
|
|
if (/^[/\\]{2}/.test(bare)) return ""; // «//host» и «/\host» — адрес без схемы, но на внешний сайт
|
|
const m = /^([a-z][a-z0-9+.-]*):/i.exec(bare);
|
|
if (!m) return url; // схемы нет — относительный адрес
|
|
return ALLOWED.has(m[1].toLowerCase()) ? url : "";
|
|
}
|