[13] [CITE[はてなスター]]
[1] [CITE[はてなスターをブログに設置するには - はてなスター日記]] ([TIME[2008-12-15 23:19:20 +09:00]] 版)
* SuikaWiki をはてなスターに対応させてみた
[2] [[SuikaWiki]] を[[はてなスター]]に対応させてみました (2008年12月16日)。
** はてなアカウントとの対応付け
[3] [[SuikaWiki]] は匿名なので、アカウントとの対応は付けようがありません。
幸い[[はてなスター]]はアカウントと紐付けせずとも使えるようになっているので、
そのまま匿名で使うことにします。
** ☆を付ける対象
[11] [[SuikaWiki4]] では名前 ([[WikiName]]) と頁 ([[WikiPage]]) が多対多対応になっています。
「ある名前」や「ある名前に属するある頁」には [[URL]] がありますが、「ある頁」
には [[URL]] がありません。スターを付けたい対象となり得るのはきっと「ある頁」
でしょうけど、 [[URL]] がない以上使えませんから、「ある名前」に付けることにします。
;; 「ある名前に属するある頁」にスターをつけると、別の名前で同じ頁を見たときのスターと別になってしまいます。
;; 「ある頁」に [[URL]] がないのは、現時点では仕様です。将来変えるかもしれませんが、
変えないかもしれません。
[12] 章や段落にも付けられた方がいいかもですが、とりあえず保留。
** スクリプト内での動的な読み込み
[4] 普通は[[はてなスター]]の [[JavaScript]] 実行コードを [[HTML]] 内に
[CODE(HTMLe)@en[[[script]]]] [[タグ]]を直接書き込んで呼び出すのでしょうが、
あまり [[HTML]] をいじりたくなかったので、既に参照するようになっている sw.js
[WEAK[()]]
の中で [[DOM]] 的に [CODE(HTMLe)@en[[[script]]]] [[要素]]を挿入する形にしました。
[5] そういう使い方は想定外のようで、[[文書]]の[[構文解析]]が終わった後から[[はてなスター]]の[[スクリプト]]を読み込んでも初期化が実行されなかったり
[WEAK[([[Firefox]] や [[Opera]] の場合 ― [CODE(DOMe)@en[[[load]]]] が既に終わっているため)]]、
Ten.DOM が読み込まれた時点で中途半端な初期化が行われたり
[WEAK[([[Safari]] や [[Chrome]] や [[WinIE]] の場合 ― バグ対策なのか謎のループを使っていますが、[[構文解析]]終了後は待ちなしで即実行されるため)]]
してしまいます。仕方がないので無理矢理 dispatchEvent して初期化させています。
** [CODE(HTMLe)@en[body]] 要素の entryNode 化
[6] SiteConfig では[[選択子]]を指定しますが、 Ten.Selector.getElementsBySelector
の呼び出し時に使われる[[親要素]]が [CODE(JS)@en[[[document.body]]]] になっています。
[7] [[SuikaWiki]] の出力する [[HTML]] では頁全体が一つの記事で、
その[[子要素]]に[[大見出し]]である [CODE(HTMLe)@en[[[h1]]]] [[要素]]や[[ナビゲーション]]の
[CODE(HTMLe)@en[[[div]]]] [[要素]]があります。
その [CODE(HTMLe)@en[[[h1]]]] や [CODE(HTMLe)@en[[[div]]]] を[[題名]]や [[URL]]
やスターの container に使いたいのですが、 >>6 のため、
「body」と指定しても思ったようにはなりません。
[8] 仕方がないので、 Hatena.Star.EntryLoader.loadNewEntries を動的に書き換えて、
[CODE(JS)@en[[[document.documentElement]]]] を[[親要素]]に使うようにしました。
[9] でも後から気づきましたが、実は[[選択子]]を[[空文字列]]にするだけでよかったみたいです。
;; 本家 [[W3C]] の[[選択子]]は[[空文字列]]にできませんけどね。
** onLoadFunctions
[10] Hatena.Star.onLoadFunctions という Array (最初はないので自分で用意する必要があります。)
に Function を突っ込んでおくと、初期化の直前の丁度いいタイミングで呼び出してくれます。
>>4 や >>8 のような変な使い方をする時には便利です。
[14] [CITE[はてなスターSiteConfig作成方法とは - はてなキーワード]]
([TIME[2010-02-20 00:43:41 +09:00]] 版)