Slackの箇条書きを普通のul入れ子にする

    @@ -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 です。

History

  1. 2021/04/26 22:05:19 - 2021-04-26
  2. 2021/04/26 21:43:40 - 2021-04-26