外部リンクをscrapbox形式に変換するScriptいろいろ
改良ver.を作りました
改善点
ほぼすべての文字コードに対応
変換が高速になった
URLごとに変換方法を変えられるようになった
/icons/hr.icon
https://gyazo.com/dd5646098129959f874f8af71204455f
使い方
下にあるコードを自分のページにコピペして下さい
dev版
こっちのほうが早くバグ修正されています
dependencies
Ctrl+Vに介入するver.
URL以外のものが混じっていたら何もしない
code:ctrlV.js
import {convert} from '/api/code/takker/scrapbox-url-customizer/convert.js';
import {insertText} from '/api/code/takker/scrapbox-insert-text/script.js';
const cursor = document.getElementById('text-input');
cursor.addEventListener('paste', async (event) => {
const url = (event.clipboardData ?? window.clipboardData).getData('text');
if (!/^https?:\/\/\S+$/.test(url)) return;
if (/^https:\/\/scrapbox.io/.test(url)) return;
event.preventDefault();
const link = await convert(url);
insertText({text: link, cursor: cursor});
});
PopupMenuに追加するver.
code:popup.js
import {convertWholeText} from '/api/code/customize/外部リンクをscrapbox形式に変換するScriptいろいろ/convert.js';
import {insertText} from '/api/code/customize/scrapbox-insert-text/script.js';
scrapbox.PopupMenu.addButton({
title: 'URL',
onClick: text => {
if (!/https?:\/\/\S+/.test(text)) return; // URLがなければ何もしない
const cursor = document.getElementById('text-input')
convertWholeText(text).then(text => insertText({text: text, cursor: cursor}));
// 選択範囲を先に消しておく
return '';
},
});
共通で使用する関数
code:convert.js
// 複数のURLを含んだテキストをまとめて変換する
export async function convertWholeText(text) {
const urls = text.match(/https?:\/\/\S+/g) ?? [];
if (urls.length === 0) return undefined;
const links = await Promise.all(urls.map(url => convert(url)));
let map = {};
for (const originalUrl of urls) {
const i = urls.indexOf(originalUrl);
}
//console.log(map);
const result = text.replace(/https?:\/\/\S+/g, match => mapmatch ?? match); //console.log(result);
return result;
}
// urlを外部リンク記法に変換する
export async function convert(url) {
if (!window.getUrlInfo) {
return;
}
const urlInfo = await window.getUrlInfo(https://url-info.vercel.app/api/page?url=${url})
.then(req => req.response);
if(!urlInfo.title) return undefined;
return [${urlInfo.url} ${urlInfo.title}];
}