Slackの箇条書きを普通のul入れ子にする
by
unarist
2021-04-26 [2021/04/26 22:05:19]
@@ -19,5 +19,18 @@
document.querySelectorAll('.p-rich_text_list').forEach(x => x.classList.remove('p-rich_text_list', 'p-rich_text_list__bullet'));
[...document.querySelectorAll('.p-rich_text_block')]
.map(x => x.querySelectorAll('ul[data-indent]'))
- .forEach(([x, ...xs]) => xs.reduce((p,c) => (p.dataset.indent < c.dataset.indent ? p : p.dataset.indent > c.dataset.indent ? p.parentNode.parentNode : p.parentNode).appendChild(c), x));
+ .forEach(([x, ...xs]) => xs.reduce((stack,c) => {
+ const p = stack[stack.length - 1];
+ if (p.dataset.indent < c.dataset.indent) {
+ if (c.dataset.indent - p.dataset.indent > 1) {
+ alert('2段以上一気にインデントするのは非対応');
+ throw new Error();
+ }
+ p.append(c);
+ return stack.concat(c);
+ } else {
+ stack[c.dataset.indent].append(...c.children);
+ return stack.slice(0, c.dataset.indent + 1);
+ }
+ }, [x]));
})();
/*
* @title Slackの箇条書きを普通のul入れ子にする
* @include https://app.slack.com/client/*
* @license MIT License
* @javascript_url
*/
/*
## これはなに
Slackの箇条書きをコピペするとインデントや●が消えるやつをなんとかしよう
## 使い方
1. Slackのブラウザ版で変換したい箇条書きのある投稿を表示する
2. これを実行する
3. DOMツリー上の全ての箇条書きが変換されているので、コピペしたりする
*/
(() => {
document.querySelectorAll('.p-rich_text_list').forEach(x => x.classList.remove('p-rich_text_list', 'p-rich_text_list__bullet'));
[...document.querySelectorAll('.p-rich_text_block')]
.map(x => x.querySelectorAll('ul[data-indent]'))
.forEach(([x, ...xs]) => xs.reduce((stack,c) => {
const p = stack[stack.length - 1];
if (p.dataset.indent < c.dataset.indent) {
if (c.dataset.indent - p.dataset.indent > 1) {
alert('2段以上一気にインデントするのは非対応');
throw new Error();
}
p.append(c);
return stack.concat(c);
} else {
stack[c.dataset.indent].append(...c.children);
return stack.slice(0, c.dataset.indent + 1);
}
}, [x]));
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。