Bookmarklet関連の改造

  • 投稿日:
  • by
  • カテゴリ:
bookmarklet を使うと、ping 先を複数の中から選択できること。たとえば、わたしの Main Index page で bookmarklet を使うと、ページ内のエントリーを pull down menu で選択できるのです。便利です。もう知っていました?

というわけで、BOOKMARKLET使うと、簡単にトラックバック出来るなぁ。と、非常に便利に使っていた。

でも、なにか、かゆいところに手が届いていない。TrackBackPingを送る先は選べるようになるんだけど、Entry中のリンク先がMainのURLのままになっている。

気持ち悪い。せっかくping先を選べるんだから、それにあわせてEntry中のURLもpermalinkにしてくれたらいいのに……。

というわけで、改造開始。

<MTDIR>/tmpl/cms/bm_entry.tmplの「function setMenu (f) {」の上あたりに以下を追加

<TMPL_IF NAME=TO_LINK_URL_LOOP>
var entry = new Array('<TMPL_VAR NAME=LINK_HREF>',
<TMPL_LOOP NAME=TO_LINK_URL_LOOP>'<TMPL_VAR NAME=PERMALINK ESCAPE=HTML>',</TMPL_LOOP>'');
var linkto = '<TMPL_VAR NAME=LINK_HREF>';
</TMPL_IF>
function replaceEntry( f ){
    var i = f.to_ping_urls.selectedIndex;
    var w = f.text.value;
    var t = entry[f.to_ping_urls.selectedIndex];
    var r = new RegExp(linkto);
    w = w.replace(r,t);
    f.text.value = w;
    linkto = t;
}

また、同じファイルの

<select name="to_ping_urls" class="menu-long" >


<select name="to_ping_urls" class="menu-long" onchange="replaceEntry(this.form)">

に変更する。

あと、
lib/MT/App/CMS.pmの

$param{to_ping_url_loop} = [ grep { $_->{title} = Jcode->new($_->{title})->$charset() } @$items ];

の下に、以下を追加
$param{to_link_url_loop} = [ grep { $_->{title} = Jcode->new($_->{title})->$charset() } @$items ];
$param{'link_href'} = $url;

で、大丈夫だと思う。
<と>を&gt;などに変換し忘れていたり、そもそもおいらが他のファイルも書き換えていたりしたら、ごめんなさい。あと、WindowsのIE6でしか試してないから、うまく動かなかったらごめんなさい。

というか、IEでしか動かないような気がする。JavaScriptのreplaceって、regrepオブジェクト作らないとダメなんだっけ?

とりあえず、ここでいったん寝ます。(06:45)

起きて、さらに変更して、Mozilla Firefox/0.8でも動作することを確認。(13:30)