ochalog

Ruby と MediaWiki が好きな電子・情報系の学生のブログ。

Hiki2MediaWiki for SRW Wiki 2.2.1 をリリースしました

Hiki2MediaWiki for SRW Wiki 2.2.1 をリリースしました。以下から利用可能です。

http://www.li-sa.jp/ocha3/hiki2mw/srw/

今回、新しく GitHub レポジトリを作り、そちらに説明書を加えました。また、更新履歴ページを新スパロボ Wiki利用者ページから移植しました。

変更点

更新履歴ページに書いたことの補足として。

  • このアプリケーションは私が JavaScript をかじって初めて作ったものだった。これを、『JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス』に触発されて、一度リファクタリングを行った。しかしそれが不十分であったためと、その後機能を追加したために、新しい書き方のコードと古い書き方のコードが混在する複雑な状態になってしまっていた。そこで、今回の更新では現在の自分のスタイルでコードをすべて書き直し、コーディングスタイルの統一を図った。Ruby の影響が出ているかもしれない。
  • オプションで指定する通常の変換とは別の機能(リンクの解析、SRW 作品の省略表記へのリンクの変換)を別ファイルに分離した。管理しやすくするため。 } 見出しのレベル調整のアルゴリズムの見直し。幅優先探索のコードが複雑で冗長に感じられたため、より簡潔に書ける深さ優先探索で書き直した。どのみち全探索しているので、探索の順番は違えど出力は同じ。
  • SRW 作品の省略表記へのリンクの変換は、普段自分が記事を移植するときに行っていた作業を組み込んだもの。半分自己満足だが、利点はあるはず(例えば「D」というリンクで「スパロボD」が表示されてほしい機会は非常に多いと思うが、現状では多義語ページで止まってしまう。この機能により、直接「スパロボD」まで表示されるようになる)。副作用がある可能性もあるので、オン、オフできるようにしてある。
  • 変換中のマウスカーソル変化処理の合理化。これまでは CSS をなぞるように、指定した個々の要素(テキストボックスなど)について設定していたが、これではメンテナンスの負担が増えてしまうため。Array.prototype.slice(document.getElementsByTagName('*'), []) で全要素のスナップショットを作成し、window.getComputedStyle() に各々を渡して返還前のカーソルを取得、保存し、変換後に保存していた値に戻すという手法で、汎用化を達成した。
  • これらのほか、プレースホルダーの文字列を各書式に合わせたり、変換前は MediaWiki 書式のソースのテキストボックスを無効化したりと、細かく UI を調整している。