波形インデントの投稿から、分割された回答を連結・整形して取り出し易いようにする

そのブックマークレットなるものを作った

教えてgooの回答に波形インデントをつけるのは、迷惑な話だろう。
そこで簡単にテキストを取り出し易いように考えた。


まず、回答がされているタグ要素は、<div class="a_text">...</div>に囲まれている
連続した半角空白は、表示される段階で1文字分の隙間として表示される
なので、波形インデントを行の先頭に配置し、続いて半角空白のインデント、そしてテキストの構成にする
連続の回答の投稿のタイムラグで他の投稿があるかもしれない。投稿の並び替えも考慮しなければならない。
テキストを抽出するために回答文書の先頭は以下の用にする

    • // で始まり
    • @name 必要であれば名前
    • :文書番号

例:回答の始まりはこのような行で行う

//@babu_babu_baboo:1
...


例:

<div class="a_text">
//:1
一つの文章に
</div>

<div class="a_text">
//@pipi:1
abcdefg
</div>

<div class="a_text">
//@pipi:3
opqrstuv
</div>

<div class="a_text">
//@pipi:2
hijklmn
</div>

<div class="a_text">
//:3
正常である
</div>

<div class="a_text">
//:2
構成されて
</div>


取り出すプログラムは以下

<script>
javascript: (function() {
  let r = /^\s*\/\/(?:@(\D.*))?(?::(\d+))/;
  document.addEventListener('click', function(e) {
    let
      t = e.target,
      u = r.exec (t.textContent),
      v, d, n;

    if (t.className == 'a_text' && u) {
        [,n] = u;
        d = Array.from(t.ownerDocument.querySelectorAll('div.a_text'))
                .map(t => t.textContent)
                .filter (t =>
                  (u = r.exec (t))
                  ? u[1] == n
                    ? 1
                    : 0
                  : 0
                )
                .sort ((A,B)=>{
                  let [,,a] = r.exec (A), [,,b]= r.exec(B);
                  return a > b;
                })
               .join ('');
        alert(d);
    }
  }, false)
})()

</script>

これをショートコーディングする

<script>
javascript: ((l = /^\s*\/\/(?:@(\D.*))?(?::(\d+))/, I = 'a_text',c, o,O='textContent') =>
  document.addEventListener ('click',
     ({target:_}) => {
      _.className == I && (c = l.exec (_[O])) &&
        alert(
          Array.from(_.ownerDocument.querySelectorAll('div.' + I))
               .map(_ => _[O])
               .filter (_ => (o = l.exec (_)) && o[1] == c[1])
               .sort ((e,_) => l.exec (e) > l.exec(_))
               .join ('')
               .replace (/^( *)/gm,'')
        )
  }, !1)
)()

更に極限まで(?)圧縮する

javascript:((l=/^\s*\/\/(?:@(\D.*))?(?::(\d+))/,I='a_text',c,o,O='textContent')=>document.addEventListener('click',({target:_})=>{_.className==I&&(c=l.exec(_[O]))&&alert(Array.from(_.ownerDocument.querySelectorAll('div.'+I)).map(_=>_[O]).filter(_=>(o=l.exec(_))&&o[1]==c[1]).sort((e,_)=>l.exec(e)>l.exec(_)).join(''))},!1)

これでブックマークレットの完成!


早く試してぇ〜


OKWave 用はこちら

javascript:((l=/^\s*\/\/(?:@(\D.*))?(?::(\d+))/,I='a_text',c,o,O='textContent')=>document.addEventListener('click',({target:_})=>{_.className==I&&(c=l.exec(_[O]))&&alert(Array.from(_.ownerDocument.querySelectorAll('div.'+I)).map(_=>_[O]).filter(_=>(o=l.exec(_))&&o[1]==c[1]).sort((e,_)=>l.exec(e)>l.exec(_)).join('').replace(/^( *)/gm,''))},!1))()