generated at
WebからコピペしたらSB記法に変換する - Scrapboxとあそぶ
web pageコピペ用script
やはり記事にもある通り、[* Firefoxでは動かない。]
2020-12-23 22:17:20 動くようにした
>まだまだ要検証なんだけど、なんとなく動いたから置いておきます。
> 相変わらず自己流で書いてるので手探りのゴリ押しです!
> そしてFirefoxでは動かない。
>
> WebページからコピーしてScrapboxにペーストしてみた
>
>
> このスクリプトを使うと、ペースト時にHTMLからScrapboxの記法に変換するようになるので、
> プレーンテキストで貼り付けたいときは右クリックメニューから「プレーンテキストとして貼り付け」等を使ってね。
> ショートカットはだいたい Ctrl + Shift + V だと思う
> ? スマホやタブレットで貼り付けする場合はどうやって回避したらいいのかな…

script.js
if (sessionStorage.getItem('scrasobox-paste') !== 'true') { document.addEventListener('paste', event => { const type = 'text/html' const d = event.clipboardData if (d.types && d.types.indexOf('Files') == -1 && -1 < d.types.indexOf(type)) { event.preventDefault() const dom = new DOMParser().parseFromString(d.getData(type), type) const ng = text => text.trim().replace(/[\[\]\n]/g, ' ') const q = query => dom.querySelectorAll(query) const f = (text, deco) => [].concat(text.split(/\n/) .filter(l => l.trim()).map(l => `[${deco} ${l.trim()}]` )).join('') q('pre').forEach(d => { d.innerText = 'code:code.*\n' + d.innerText.split('\n').map(l => ` ${l}`).join('\n') }) q('h3').forEach(d => { d.innerText = f(d.innerText, '**') }) q('h2').forEach(d => { d.innerText = f(d.innerText, '***') }) q('h1').forEach(d => { d.innerText = f(d.innerText, '****') }) q('em, i').forEach(d => { d.innerText = f(d.innerText, '/') }) q('strong, b').forEach(d => { d.innerText = f(d.innerText, '*') }) q('a[href] img[src]').forEach(d => { d.closest('a').outerHTML = `[${d.src.trim()}#.png ${d.closest('a').href}]` }) q('a[href]').forEach(d => { d.outerHTML = `[${d.href} ${ng(d.text).trim()}]` }) q('img[src]').forEach(d => { d.outerHTML = `[${d.src.trim()}#.png]` }) q('iframe[src*="//www.youtube.com/embed/"]').forEach(d => { d.outerHTML = `[https://www.youtube.com/watch?v=${d.src.split('/embed/')[1].split('?')[0]}]` }) q('code').forEach(d => { d.innerText = '`' + d.innerText + '`' }) let depth = -1 const li = node => { depth++ node.querySelectorAll('li').forEach(n => li(n)) return node.innerHTML = '@sp@'.repeat(depth--) + node.innerHTML } li(dom.body) const div = document.createElement('div') div.innerHTML = dom.body.innerHTML document.body.appendChild(div) const range = document.createRange() range.selectNode(div) //const text = range.toString() const text = div.innerText document.execCommand('insertText', null, text.replace(/(\s*\n){3,}/g, '\n\n').replace(/@sp@/gi, ' ')) document.body.removeChild(div) } }) sessionStorage.setItem('scrasobox-paste', true) } window.addEventListener('unload', () => { sessionStorage.setItem('scrasobox-paste', false) })

scrapbox-insert-textを使って書き換えた
これなら動くかな?takker
2020-12-23 22:09:59 うごいた!
firefoxだとplain textとして貼り付けが使えないのか
sessionStorageを使っている理由がわからないな
html2sbを使うように書き換えた
移動した
2024-08-18 15:04:33 動いていない
html2sbのバグ

script2.js
import {insertText} from '../scrapbox-insert-text/script.js'; import {scrapboxDOM} from '../scrapbox-dom-accessor/script.js'; import {parse} from '../html2sb/script.js'; document.addEventListener('paste', event => { const type = 'text/html'; const d = event.clipboardData; if (!(d.types && d.types.indexOf('Files') == -1 && -1 < d.types.indexOf(type))) return; event.preventDefault(); insertText({ text: parse({html: d.getData(type)}), cursor: scrapboxDOM.textInput, }); });

類似script
こっちのほうがシンプル?

#2024-08-18 15:04:39
#2022-05-23 16:49:43
#2020-12-24 00:48:49
#2020-12-23 22:06:09
Added on 2020-06-03