mirror of
https://github.com/docmost/docmost.git
synced 2026-05-09 07:43:06 +08:00
d2629afff2
* feat: add heading extension with unique ID support and scroll functionality * Added unique id for heading * remove baseUrl heading storage * move heading to extensions package * WIP * support anchors in mentions * enhance scrolling functionality * nodeId function * fix nanoid import * Bring unique-id extension local * fixes * fix internal link scroll in public pages * add unique id server side * rename mention anchor to anchorId * capture first anchorId on paste --------- Co-authored-by: Romik <40670677+RomikMakavana@users.noreply.github.com>
44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
import slugify from "@sindresorhus/slugify";
|
|
|
|
const buildPageSlug = (pageSlugId: string, pageTitle?: string): string => {
|
|
const titleSlug = slugify(pageTitle?.substring(0, 70) || "untitled", {
|
|
customReplacements: [
|
|
["♥", ""],
|
|
["🦄", ""],
|
|
],
|
|
});
|
|
|
|
return `${titleSlug}-${pageSlugId}`;
|
|
};
|
|
|
|
export const buildPageUrl = (
|
|
spaceName: string,
|
|
pageSlugId: string,
|
|
pageTitle?: string,
|
|
anchorId?: string,
|
|
): string => {
|
|
let url: string;
|
|
if (spaceName === undefined) {
|
|
url = `/p/${buildPageSlug(pageSlugId, pageTitle)}`;
|
|
} else {
|
|
url = `/s/${spaceName}/p/${buildPageSlug(pageSlugId, pageTitle)}`;
|
|
}
|
|
return anchorId ? `${url}#${anchorId}` : url;
|
|
};
|
|
|
|
export const buildSharedPageUrl = (opts: {
|
|
shareId: string;
|
|
pageSlugId: string;
|
|
pageTitle?: string;
|
|
anchorId?: string;
|
|
}): string => {
|
|
const { shareId, pageSlugId, pageTitle, anchorId } = opts;
|
|
let url: string;
|
|
if (!shareId) {
|
|
url = `/share/p/${buildPageSlug(pageSlugId, pageTitle)}`;
|
|
} else {
|
|
url = `/share/${shareId}/p/${buildPageSlug(pageSlugId, pageTitle)}`;
|
|
}
|
|
return anchorId ? `${url}#${anchorId}` : url;
|
|
};
|