snowtears... another

注目情報

  • N/A

Feb 27 2005

[][] 数値参照変換スクリプト for はてなダイアリー 01:35

コピペ支援Script ちょこっと改 for はてなダイアリー (http://sagiri.s7.xrea.com/hatena/cppe_kai.html) の JavaScript Actions 版。 ようやく Mozilla 系での textarea 内の選択範囲の取得法がわかったので作ってみた。

以下、コード。


/** NCR_for_Hatena.js
  *  スクリプト名 : 数値参照変換スクリプト for はてなダイアリー
  *  バージョン   : 1.1.0 (2005/03/04 (Fri) 06:40:57)
  *  説明         : 選択範囲文字列内の半角カナ等の一部の文字を数値参照に変換する。
  *                 はてなダイアリー(http://d.hatena.ne.jp/)での使用に特化
  *  設定         : NCR4Hatena 関数内のコメント参照。
  *                 このスクリプトは JavaScript Actions 用ディレクトリ配下の
  *                 global ディレクトリに保存してください
  *  ライセンス   : NYSL Version 0.9982
  *  参考         : 「コピペ支援Script」 by TakeponG (http://www.chomkoubou.com/d/)
  */

NCR4Hatena();

function NCR4Hatena() {
  // 設定 ============================
  var flgCnvNCRAll = 0;    // 選択範囲を全力で数値参照変換する  yes:1, no:0
  var flgBr     = 0;    // 行末に<BR>を挿入する  yes:1, no:0
  
  var flgKana   = 1;    // 半角カナを数値参照に置きかえる  yes:1, no:0  注)flgCnvNCRAll=1の場合この設定は無視される
  var flgTag    = 1;    // 変換元のHTMLタグを無効化する  yes:1, no:0  注)同上
  var flgHatena = 1;    // はてなダイアリー特殊記号対策(「(」「)」「*」「+」「-」「:」「[」「]」「|」を数値参照に置き換える)  yes:1, no:0  注)同上
  
  var insTagInline = '<span class="aa-i">%|%</span>';    // 選択範囲の前後に挿入するタグ(選択範囲に改行を含まない場合)(※注)「%|%」は選択範囲に、「\n」は改行文字に置き換えられる)
  var insTagBlock  = '><pre class="aa">\n%|%\n</pre><';    // 選択範囲の前後に挿入するタグ (選択範囲に改行を含む場合)
  // 設定終わり =====================
  
  var objTA = _jsaCScript.context.target;
  if (objTA.tagName.toUpperCase() == "TEXTAREA") {
    var selStart      = objTA.selectionStart;
    var selEnd        = objTA.selectionEnd;
    var allTextLength = objTA.textLength;
    
    var selText   = objTA.value.substring(selStart, selEnd);
    var textHead  = objTA.value.substring(0, selStart);
    var textFoot  = objTA.value.substring(selEnd, allTextLength);
    
    var scrollPos = objTA.scrollTop;
    
    var cnvSelText = cnvStr2NCR(selText, flgCnvNCRAll, flgBr, flgKana, flgTag, flgHatena);
    
    var arrTags = ((/[\r\n]/).test(cnvSelText))? insTagBlock.split("%|%") : insTagInline.split("%|%");
    if (typeof(arrTags[1]) == "undefined") arrTags[1] = "";
    cnvSelText = arrTags[0] + cnvSelText + arrTags[1];
    
    objTA.value = textHead + cnvSelText + textFoot;
    objTA.setSelectionRange(selStart, selStart + cnvSelText.length);
    
    objTA.focus();
    objTA.scrollTop = scrollPos;
    
    return true;
  } else {
    return false;
  }
}

function cnvStr2NCR (str, flgCnvNCRAll, flgBr, flgKana, flgTag, flgHatena) {
  var res = "";
  var chrtmp  = "";
  var chrCode = "";
  var strLength = str.length;
  for (var i = 0; i < strLength; i++) {
    chrCode = str.charCodeAt(i);
    switch (chrtmp = str.charAt(i)) {
      case "\r": res += (flgBr)? "" : chrtmp;break;
      case "\n": res += (flgBr)? "<br>\n" : chrtmp;break;
      case "\"":
      case "<":
      case ">":
      case "&": res += (flgCnvNCRAll || flgTag)? "&#" + chrCode + ";" : chrtmp;break;
      case "(":
      case ")":
      case "*":
      case "+":
      case "-":
      case ":":
      case "[":
      case "]":
      case "|": res += (flgCnvNCRAll || flgHatena)? "&#" + chrCode + ";" : chrtmp;break;
      default : res += (flgCnvNCRAll || (flgKana && chrCode >=65337 && chrCode <= 65439))? "&#" + chrCode + ";" : chrtmp;break;
    }
  }
  return res;
}

「コピペ支援Script〜」だといちいち変換用ページに行って文字入力→変換→コピー→戻ってきて貼り付けという手順を踏まなきゃいけなかったけど、この JavaScript Actions 用のスクリプトなら はてなダイアリーの記事編集テキストエリアで変換したい箇所を選択→コンテクストメニューからスクリプト呼び出し→選択範囲が変換されて置き換わる という風に変換作業がかなり楽になって(゚д゚)ウマー

ただ、「コピペ支援Script〜」のようにその都度設定を変更することができないのが欠点。

ちなみに昔作った InternetExplorer 用のやつはここ→ (ttp://sagiri.s7.xrea.com/hatena/ie_cppe_rm.html)素人にはマジお勧めできないし無保証サポート無しでおねがいします。


  • 動作確認
    • 2005/03/04 (Fri) 06:40:57
      • JavaScript Actions ver.1.9.1.1.0
      • Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8b2) Gecko/20050301 Firefox/1.0+
  • 更新履歴
    • 2005/03/04 (Fri) 06:40:57 : ver. 1.1.0
      • 選択範囲の改行以外の文字列をすべて数値参照変換するかどうかの設定追加 (flgCnvNCRAll)
      • 上記の変更に伴い数値参照変換を行う関数を書き直した
      • 選択範囲の前後の改行を削除していたのをやめた
    • 2005/02/27 (Sun) 02:32:59 : ver. 1.0.1
      • 微修正
    • 2005/02/27 (Sun) 01:32:40 : ver. 1.0.0
      • 初公開

newest diary / jump to pagetop