mirror of
https://github.com/outline/outline.git
synced 2026-06-13 03:14:59 +03:00
170 lines
3.9 KiB
TypeScript
170 lines
3.9 KiB
TypeScript
import queryString from "query-string";
|
|
import type Collection from "~/models/Collection";
|
|
import type Comment from "~/models/Comment";
|
|
import type Document from "~/models/Document";
|
|
import env from "~/env";
|
|
|
|
export function homePath(): string {
|
|
return env.ROOT_SHARE_ID ? "/" : "/home";
|
|
}
|
|
|
|
export function logoutPath() {
|
|
return {
|
|
pathname: "/",
|
|
search: "logout=true",
|
|
};
|
|
}
|
|
|
|
export function draftsPath(): string {
|
|
return "/drafts";
|
|
}
|
|
|
|
export function archivePath(): string {
|
|
return "/archive";
|
|
}
|
|
|
|
export function trashPath(): string {
|
|
return "/trash";
|
|
}
|
|
|
|
export function debugPath(): string {
|
|
return "/debug";
|
|
}
|
|
|
|
export function debugChangesetsPath(): string {
|
|
return "/debug/changesets";
|
|
}
|
|
|
|
export function settingsPath(...args: string[]): string {
|
|
return "/settings" + (args.length > 0 ? `/${args.join("/")}` : "");
|
|
}
|
|
|
|
export function commentPath(document: Document, comment: Comment): string {
|
|
return `${documentPath(document)}?commentId=${comment.id}${
|
|
comment.isResolved ? "&resolved=1" : ""
|
|
}`;
|
|
}
|
|
|
|
export function collectionPath(
|
|
collection: Collection,
|
|
section?: string
|
|
): string {
|
|
if (section) {
|
|
return `${collection.path}/${section}`;
|
|
}
|
|
return collection.path;
|
|
}
|
|
|
|
export function collectionEditPath(collection: Collection): string {
|
|
return collectionPath(collection, "overview/edit");
|
|
}
|
|
|
|
export function updateCollectionPath(
|
|
oldUrl: string,
|
|
collection: Collection
|
|
): string {
|
|
// Update url to match the current one
|
|
return oldUrl.replace(
|
|
new RegExp("/collection/[0-9a-zA-Z-_~]*"),
|
|
collection.path
|
|
);
|
|
}
|
|
|
|
export function documentPath(doc: Document): string {
|
|
return doc.path;
|
|
}
|
|
|
|
export function documentEditPath(doc: Document): string {
|
|
return `${documentPath(doc)}/edit`;
|
|
}
|
|
|
|
export function documentHistoryPath(
|
|
doc: Document,
|
|
revisionId?: string
|
|
): string {
|
|
let base = `${documentPath(doc)}/history`;
|
|
if (revisionId) {
|
|
base += `/${revisionId}`;
|
|
}
|
|
return base;
|
|
}
|
|
|
|
/**
|
|
* Replace full url's document part with the new one in case
|
|
* the document slug has been updated
|
|
*/
|
|
export function updateDocumentPath(oldUrl: string, document: Document): string {
|
|
// Update url to match the current one
|
|
return oldUrl.replace(
|
|
new RegExp("/doc/([0-9a-zA-Z-_~]*-[a-zA-z0-9]{10,15})"),
|
|
document.url
|
|
);
|
|
}
|
|
|
|
export function newTemplatePath(collectionId?: string) {
|
|
return collectionId
|
|
? settingsPath("templates") + `/new?collectionId=${collectionId}`
|
|
: `${settingsPath("templates")}/new`;
|
|
}
|
|
|
|
export function newDocumentPath(
|
|
collectionId?: string | null,
|
|
params: {
|
|
templateId?: string;
|
|
} = {}
|
|
): string {
|
|
return collectionId
|
|
? `/collection/${collectionId}/new?${queryString.stringify(params)}`
|
|
: `/doc/new?${queryString.stringify(params)}`;
|
|
}
|
|
|
|
export function newNestedDocumentPath(parentDocumentId?: string): string {
|
|
return `/doc/new?${queryString.stringify({ parentDocumentId })}`;
|
|
}
|
|
|
|
export function searchPath({
|
|
query,
|
|
collectionId,
|
|
documentId,
|
|
ref,
|
|
}: {
|
|
query?: string;
|
|
collectionId?: string;
|
|
documentId?: string;
|
|
ref?: string;
|
|
} = {}): string {
|
|
let search = queryString.stringify({
|
|
q: query,
|
|
collectionId,
|
|
documentId,
|
|
ref,
|
|
});
|
|
|
|
search = search ? `?${search}` : "";
|
|
return `/search${search}`;
|
|
}
|
|
|
|
export function sharedModelPath(shareId: string, modelPath?: string) {
|
|
if (shareId === env.ROOT_SHARE_ID) {
|
|
return modelPath ? modelPath : "/";
|
|
}
|
|
|
|
return modelPath ? `/s/${shareId}${modelPath}` : `/s/${shareId}`;
|
|
}
|
|
|
|
export function urlify(path: string): string {
|
|
return `${window.location.origin}${path}`;
|
|
}
|
|
|
|
export const matchCollectionSlug =
|
|
":collectionSlug([0-9a-zA-Z-_~]*-[a-zA-z0-9]{10,15})";
|
|
|
|
export const matchCollectionEdit = `/collection/${matchCollectionSlug}/overview/edit`;
|
|
|
|
export const matchDocumentSlug =
|
|
":documentSlug([0-9a-zA-Z-_~]*-[a-zA-z0-9]{10,15})";
|
|
|
|
export const matchDocumentEdit = `/doc/${matchDocumentSlug}/edit`;
|
|
|
|
export const matchDocumentHistory = `/doc/${matchDocumentSlug}/history/:revisionId?`;
|