///
///
///
import { encodeTitleURI } from "../../title.ts";
import type { Scrapbox } from "../../deps/scrapbox.ts";
declare const scrapbox: Scrapbox;
export interface OpenOptions {
/** line id */
id?: string;
/** ページに追記するテキスト */
body?: string;
/** 新しいタブで開くかどうか
*
* @default 同じタブで開く
*/
newTab?: boolean;
/** 同じタブでページを開く場合、ページを再読込するかどうか
*
* @default 同じprojectの場合は再読み込みせず、違うprojectの場合は再読込する
*/
reload?: boolean;
}
/** ページを開く
*
* @param project 開くページのproject名
* @param title 開くページのタイトル
* @param options
*/
export const open = (
project: string,
title: string,
options?: OpenOptions,
) => {
const url = new URL(`/${project}/${encodeTitleURI(title)}`, location.href);
if (options?.body) url.search = `?body=${encodeURIComponent(options.body)}`;
if (options?.id) url.hash = `#${options.id}`;
if (
options?.newTab !== false &&
(options?.newTab === true || project !== scrapbox.Project.name)
) {
window.open(url);
return;
}
if (
options?.reload !== false &&
(options?.reload === true || project !== scrapbox.Project.name)
) {
window.open(url, "_self");
return;
}
const a = document.createElement("a");
a.href = url.toString();
document.body.append(a);
a.click();
a.remove();
};
/** 同じタブでページを開く
*
* このとき、ページは再読み込みされない
*
* @param project 開くページのproject名
* @param title 開くページのタイトル
* @param [body] ページに追記するテキスト
*/
export const openInTheSameTab = (
project: string,
title: string,
body?: string,
) => open(project, title, { newTab: false, reload: false, body });