ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

CとC++コミュのmixiへのコードペースト時に空白を保つブックマークレット

  • mixiチェック
  • このエントリーをはてなブックマークに追加
javascript:(function(){function replace(name){var t=document.getElementsByName(name)[0];if(t==null||t.tagName!="TEXTAREA")return;var s=t.value;var d='';var c='';for(var i=0;i<s.length;i++)d+=((c=s.charAt(i))=='&')?'&amp;amp;':(c=='\x20'&&s.charAt(i+1)=='\x20')?'&amp;nbsp;':c;t.value=d;}replace("comment");replace("comment_body");replace("bbs_body");})()

実体参照(&amp;など)の変換も抑止します。

コメント(18)

元はsock/vuela氏の作ったもの。
トピック作成、日記への投稿にも対応。
> 実体参照(&など)の変換も抑止します。

抑止というより、
投稿処理を通じて結果的に2回decodeされることに対抗して
意図的に2回encodeさせるものです。

画面が横長にならないように、空白を混ぜながら1行に詰め込んだもの。
encode忘れたjavascriptを投稿して、
しかもそれで動作チェックしてましたー

うっかり同じことをしてしまう人を防ぐために動かない4は消しておきます
いい感じのscriptですね。
普段使いにします。
今の仕様だと
「空白が2個以上並んでいたら、最後の1つを除いてnbspにする」
になっています。

全ての空白をnbspにしなかった理由は
「横に長い行を含むソースを投稿したとき、
その途中に含まれる全ての空白をnbspにしてしまうと
firefox等で自動折り返しが効かなくなって
画面レイアウトが崩れてしまうことがある」を防ぐためです。

しかし、可能ならば「2個以上の空白が並べば、そこに含まれる空白を全てnbspに」
にしたいところです。
そうしておけばインデント部分は折られずしっかり空白として残りますからね。
焼鳥さん。がんばって!
勝手に改造させてもらいました。
タブも変換してみたりします。
javascript:(
    function(){
        function replace(name){
            var t=document.getElementsByName(name)[0];
            if(t==null||t.tagName!="TEXTAREA")return;
            var s=t.value;
            var d='';
            var c='';
            for(var i=0;i<s.length;i++)
                d+=
                    ((c=s.charAt(i))=='&')?'&amp;amp;':
                        (c=='\x20'&&(
                            (s.charAt(i+1)=='\x20')||
                            (s.charAt(i+(i>=1?-1:1))=='\x20')
                        ))?'&amp;nbsp;':
                            (c=='\x09')?'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;':
                                c;
            t.value=d;
        }
        replace("comment");
        replace("comment_body");
        replace("bbs_body");
    }
)()
これじゃダメですか? 単純に連続する2つのスペースを2つの&nbsp;に置き換えます。ついでにtextareaに対して適用します。

javascript:(
  function() {
    function replace(name) {
      var t=document.getElementsByTagName(name)[0];
      if (t==null)return;
      t.value=t.value.replace(/&/g,'&amp;amp;').replace(/\x20\x20/g,'&amp;nbsp;&amp;nbsp;').replace(/\x09/g,'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;');
    }
    replace('textarea');
  }
)()
3個の空白を3個のnbspにできないですか?
>3個の空白を3個のnbspに
こんなのでいかがでしょうか。「&amp;nbsp;\x20」を「&amp;nbsp;&amp;nbsp;」に置き換える処理を追加したので、奇数個のスペースの最後の端数も置き換わります。

javascript:(
  function() {
    function replace(name) {
      var t=document.getElementsByTagName(name)[0];
      if (t==null)return;
      t.value=t.value.replace(/&/g,'&amp;amp;').replace(/\x20\x20/g,'&amp;nbsp;&amp;nbsp;').replace(/&amp;nbsp;\x20/g,'&amp;nbsp;&amp;nbsp;').replace(/\x09/g,'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;');
    }
    replace('textarea');
  }
)()
そういや、replaceでいいんですね。
タブの後の1つのスペースが変換できないっぽいので順序を入れ替えてみた。
javascript:(
    function(){
        var n='&amp;nbsp;',t=document.getElementsByTagName('textarea')[0];
        if(t)
            t.value=t.value.replace(/&/g,'&amp;amp;')
                .replace(/\x20{2}/g,n+n)
                .replace(/\t/g,n+n+n+n)
                .replace(/&amp;nbsp;\x20/g,n+n);
    }
)()
こういうこと?
javascript:(
    function(){
        var n='&amp;nbsp;',t=document.getElementsByTagName('textarea')[0];
        if(t)
            t.value=t.value.replace(/&/g,'&amp;amp;')
                .replace(/\t/g,'    ')
                .replace(/\x20{2}/g,n+n)
                .replace(/&amp;nbsp;\x20/g,n+n);
    }
)()

あー、でもこっちのほうが短くなった。
javascript:(
    function(){
        var n='&amp;nbsp;',t=document.getElementsByTagName('textarea')[0];
        n+=n;
        if(t)
            t.value=t.value.replace(/&/g,'&amp;amp;')
                .replace(/\x20{2}/g,n)
                .replace(/\t/g,n+n)
                .replace(/&amp;nbsp;\x20/g,n);
    }
)()
\x20\x09の羅列を考えると、やっぱtab to spaceかも
気が付かなかった。…tab to spaceのほうがよさそうですね。

ログインすると、残り1件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

CとC++ 更新情報

CとC++のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング