2004-07-06(火) [長年日記]
■ tDiary TrackBack Script for Sleipnir
こないだ紹介したSleipnir用のTrackBackスクリプト、相手のページのURLを挿入してくれるとTrackBack的には完璧なんだが……と書いたら、hsbtさんがクリップボードにコピーするという苦肉の策を出してくれた。
まぁこのあたりが限度かと思っていたら(JavaScriptには詳しくないので何ができるのかもよくわからない)、別のテクを紹介してもらった(?)。おぉ、ちゃんとリンクが挿入される!
というわけで、両者を合体すると、こんな感じになった。もっとスマートに書けるかも知れないけど、動いてるからいいや。
TrackBackしたいページでこのスクリプトを実行すると
- 更新ページが開き
- 本文冒頭にそのページへのリンクが挿入され
- 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;
[ツッコミを入れる]