トップ 最新

ただのにっき

2004-07-06(火) [長年日記]

tDiary TrackBack Script for Sleipnir

こないだ紹介したSleipnir用のTrackBackスクリプト、相手のページのURLを挿入してくれるとTrackBack的には完璧なんだが……と書いたら、hsbtさんがクリップボードにコピーするという苦肉の策を出してくれた。

まぁこのあたりが限度かと思っていたら(JavaScriptには詳しくないので何ができるのかもよくわからない)、別のテクを紹介してもらった(?)。おぉ、ちゃんとリンクが挿入される!

というわけで、両者を合体すると、こんな感じになった。もっとスマートに書けるかも知れないけど、動いてるからいいや。

TrackBackしたいページでこのスクリプトを実行すると

  1. 更新ページが開き
  2. 本文冒頭にそのページへのリンクが挿入され
  3. TrackBack ping URLも設定済み

という状態ですぐに反応を書き始めることができる。なお、挿入されるリンクはWikiスタイルなので、別のスタイルの場合にはスクリプト末尾のコードをちょっといじる必要がある。プラグイン集に入れちまおうか。

//
// tDiaryでTrackBack for Sleipnir
//
// 現在見ているページに対して実行すると、そのページにTrackBackを打つための
// 情報が入った更新ページが開きます
//

// 【要カスタマイズ】update.rbへのURL
//  ここに日記更新用のURLを記述してください

var td_update_url = "http://url.of.your.diary/update.rb";

//
// 以下、スクリプト本体
//
var pnir = new ActiveXObject( "Sleipnir.API" );
var id = pnir.GetDocumentID( pnir.ActiveIndex );
var document = pnir.GetDocumentObject( id );

if (document == null)  {
   pnir.MessageBox("Document オブジェクトを作成できません");
}
else {
   window = pnir.GetWindowObject( id );
   var org_title = document.selection.createRange().text
   if ( org_title == "" ) {
      org_title = document.title;
   }
   var org_url = pnir.url
   window = null;

   var str = document.body.innerHTML;
   str.match( /trackback:ping=[\'\"](http.+)[\'\"]/i );
   var ping_url = RegExp.$1;
   var td_id = pnir.NewWindow( td_update_url+'?plugin_tb_url='+escape(ping_url), true );
   while( pnir.IsBusy( td_id ) == true ) {
      WScript.Sleep( 500 );
   }

   //update.rbのドキュメントを取得
   var td_doc = pnir.GetDocumentObject( td_id );
   if( td_doc==null ){
      pnir.MessageBox("td_doc オブジェクトを作成できません");
   }
   else{
      //思いっきり場所決めうちでupdate.rbのtextareaに
      //(Wikiスタイル)見出しを挿入する
      var f = td_doc.forms[0];
      if( f!=null ){
         var t = f.elements[6];
         if( t!=null ){
            t.value = "";
            t.value += "! [[";
            t.value += org_title;
            t.value += "|";
            t.value += org_url;
            t.value += "]]";
            t.value += "\n";

            t.focus();
         }
      }
   }

  document = null;
}
pnir = null;