import { addToInbox } from "./addToInbox.ts"; import { caret, patch, getLines, makeSocket, } from "../scrapbox-userscript-std/mod.ts"; import type { Scrapbox } from "https://raw.githubusercontent.com/scrapbox-jp/types/0.0.8/mod.ts"; declare const scrapbox: Scrapbox; /** Promptからinboxに投入する * * @param project 投入先inboxページがあるproject * @param title 投入先inboxページのタイトル */ export const addToInboxFromPrompt = async ( project: string, title: string, ): Promise => { const text = window.prompt("Type all you think of", ""); if (!text || text.trim() === "") return; const items = text.trim().split(/\s+/); await addToInbox(project, title, items); }; /** 選択範囲にかかっている行をinboxに投入する * * @param project 投入先inboxページがあるproject * @param title 投入先inboxページのタイトル * @param option `fallbackToPrompt`を`true`にすると、選択範囲がないとに`addToInboxFromPrompt()`を起動するようになる */ export const addToInboxFromSelection = async ( project: string, title: string, option?: { fallbackToPrompt?: boolean }, ): Promise => { // scrapbox.Page.title がnullでない条件 if (scrapbox.Layout !== "page") return; const { selectionRange, selectedText } = caret(); if (selectedText === "") { if (!option?.fallbackToPrompt) return; return addToInboxFromPrompt(project, title); } const start = Math.min( selectionRange.start.line, selectionRange.end.line, ); const end = Math.max( selectionRange.start.line, selectionRange.end.line, ); const lines = getLines().slice(start, end + 1); const socket = await makeSocket(); await addToInbox(project, title, lines.map((line) => line.text), { socket }); await patch( scrapbox.Project.name, scrapbox.Page.title, (lines_) => { const lines2 = lines_.map((line) => line.text); return [ ...lines2.slice(0, start), ...lines2.slice(end + 1), ]; }, { socket }, ); };