トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BugTrack-plugin/408

ページの作成や編集にはユーザ登録が必要です。

Wiki ソース内の日時表示を抽出してページ内アンカーを生成するプラグイン

  • 投稿者: ぐうます
  • カテゴリ: 新規
  • 優先度: 低
  • 状態: 提案
  • 日時: 2009年08月19日 21時47分08秒

 内容

  • ページ表示時、Wiki ソース内の日時表示を検出し、その直前にページ内アンカーを自動的に生成します。
  • 上記ページ内アンカーへのリンクを表示する fdatelink プラグインを提供します。
  • 投稿系プラグインにおいて、投稿直後のページ表示の際、直前に投稿した記事が見えるように、当該投稿記事の日時表示から生成されるページ内アンカーにジャンプします。

コンセプト

BugTrack-plugin/195:ページ内anchorの設定と利用 などのプラグインを導入することにより、FSWiki でも自由にページ内アンカーを作成することができます。これは任意の位置にページ内アンカーを設定できるので細かい調整が可能である反面、ひとつひとつアンカーを Wiki ソース内に記述する手間を要します。これに対し、各見出しにページ内アンカーを自動的に設定する機能が FSWiki には標準で備わっているので、アンカーを手動設定することなく各見出しへのページ内リンクを利用することができます。このような自動設定のページ内アンカーを増やそうというのが本プラグインのコンセプトです。本プラグインでは、主に投稿系プラグインにより Wiki ソース内に記述される日時表示を検出して、ページ内アンカーを生成します。

詳細

  • 日時表示より生成されるページ内アンカー
    • 投稿系プラグインで記事を投稿すると、記事に対して日時表示が付加されて Wiki ソースに保存されます。このときに日時表示文字列を生成するのが Util::format_date() 関数です。本プラグインは、表示しようとしているページの Wiki ソース内に Util::format_date() で出力したと思われる日時表示パターンが見つかったら、その直前にその日時表示から決定されるアンカー名をもつページ内アンカーを自動的に生成します。
    • アンカー名は、日時表示から数字以外の文字を除去して先頭に 'D' をつけたものになります。

例:次のような日時表示がある場合、

(2009年08月19日 13時11分39秒)

自動生成されるページ内アンカーのアンカー名は次のようになります。

D20090819131139
    • Util::format_date() を改造して日時表示を変更している FSWiki の場合でも、実行時に使用している Util::format_date() から日時表示検出用パターンを生成しますので一部の場合を除き問題ありません。
      • Util::format_date() の出力に曜日や am, pm 等、数字以外に日時により変化する文字がある場合には非対応です。
      • Util::format_date() の改造以前に Wiki ページ内に保存された日時表示にはパターンが一致しないことから反応しません。
      • 同一ページ内に同日同時刻の日時表示が複数存在する場合には、そのアンカーにジャンプしたときの挙動は使用しているブラウザに依存します。できるだけ同じ日時表示が存在しないようにするため、Util::format_date() を改造する際には、日時表示に「年月日時分秒」のすべてが出力されるようにした方がよいでしょう。
    • Util::format_date() が生成する日時表示パターンが同じなら、本プラグイン導入前に Wiki ページ内に保存された日時表示にも反応します。
    • Wiki ソース 1 行毎に、そのパース前に日時表示の有無がチェックされます。日時表示が見つかると対応するアンカーは行の先頭付近に出力されるので、日時表示より若干前に設定されます。
    • Wiki ソースの 1 行内に複数の日時表示がある場合には、最も行末に近い日時表示からアンカー名が決まります。それら全てに対応する複数のページ内アンカーが生成されます。
  • ページ内アンカーへのリンク作成方法
    • 次のように FSWiki 標準の別名 url リンクを使用することでページ内アンカーへのリンクを作成することができます。また、次項に示す「リンク生成プラグイン」を用いても作成することができます。

日時表示 (2009年08月19日 13時11分39秒) へのリンク

[LinkLabel|./wiki.cgi(/farm)?page=PageName#D20090819131139]
  • リンク生成プラグイン
    • 日時表示より生成されるページ内アンカーへジャンプするためのリンクを表示する fdatelink プラグインを提供します。
{{fdatelink リンクラベル,アンカー文字列}}
    • アンカー文字列が数字以外の文字を含む場合、それらの文字を無視した数字のみの文字列の先頭に 'D' を付けた文字列が実際のアンカーとして使われます。
    • アンカー文字列が省略された場合には、リンクラベルをアンカー文字列として使用します。
    • 第 3 引数にページ名を指定すると、別ページ内の日時表示アンカーにもリンクすることができます。
{{fdatelink リンクラベル,アンカー文字列,ページ名}}
{{fdatelink リンクラベル,,ページ名}}
    • 例:本ページの最初のコメントにページ内リンクしたいとき
      • リンクラベルが日時表示を含み、かつ、他に数字を含まないなら、第 2 引数のアンカー文字列を省略することができます。
{{fdatelink ぐうますのコメント(2009年08月20日 00時26分02秒)}}

ぐうますのコメント(2009年08月20日 00時26分02秒) (←※出力されるリンクのイメージ。実際には wiki リンクになります。)

      • そうでないなら、第 2 引数のアンカー文字列を省略することはできません。
{{fdatelink 本ページの 1 番目のコメント,2009年08月20日 00時26分02秒}}

本ページの 1 番目のコメント (←※出力されるリンクのイメージ。実際には wiki リンクになります。)

  • 投稿系プラグインの投稿直後のページ表示
    • 次の投稿系プラグインにおいて、投稿直後のページ表示の際、直前に投稿した記事が見えるように、当該投稿記事の日時表示から生成されるページ内アンカーにジャンプします。

本プラグインパッケージの構成とインストール

  • 構成:添付ファイル fdatelink.20090823.zip(640) に含まれるファイルは、次の 9 つです。
    • plugin/fdatelink/Install.pm
    • plugin/fdatelink/FDateLink.pm
    • plugin/fdatelink/Redirect.pm
    • plugin/fdatelink/BBSHandler.pm
    • plugin/fdatelink/BBS2Handler.pm
    • plugin/fdatelink/CommentHandler.pm
    • plugin/fdatelink/PCommentHandler.pm
    • plugin/fdatelink/BBSXHandler.pm
    • plugin/fdatelink/BBSXCommentHandler.pm
  • インストール:
    1. fdatelink.20090823.zip(640) をダウンロードし、FSWiki の動作しているサーバに展開して下さい。
    2. 管理メニューのプラグイン設定ページから、fdatelink プラグインパッケージを有効にしてください。

適用可能な FSWiki バージョン

特に FSWiki のバージョンに依存していないと考えています。

制限事項

  • 同一ページ内に同日同時刻の日時表示が複数存在する場合には、そのアンカーにジャンプしたときの挙動は使用しているブラウザに依存します。
  • Util::format_date() を改造している場合、
    • 改造前に Wiki ページ内に保存された日時表示からはアンカーが生成されません。
    • Util::format_date() の出力に曜日や am, pm 等、数字以外に日時により変化する文字がある場合には対応できません。
    • 同一ページ内にできるだけ同日同時刻の日時表示が存在しないようにするため、Util::format_date() を改造する際には、日時表示に「年月日時分秒」のすべてが出力されるようにした方がよいでしょう。

更新履歴

2009-08-23 版:fdatelink.20090823.zip(640)
次の変更を実施しました。
  • 機能改善:投稿記事が番号無しリストになる投稿(comment プラグイン等)に付加された日時表示から生成されるページ内アンカーの位置を是正。
  • 仕様変更:Wiki ソース 1 行内に複数の日時表示がある場合に、それら全てに対応する複数のページ内アンカーを生成するようにした。
2009-08-20 版:fdatelink.20090820.zip
次の変更を実施しました。
  • バグ修正:fdatelink プラグインを下記書式で使用した場合に、不正なリンク先 URL 指定が出力されるバグを修正。
{{fdatelink リンクラベル,,ページ名}}
2009-08-19 版:fdatelink.20090819.zip
初版公開

ライセンス

GPL

 コメント

  • 早速ですがバグがありましたので修正版 fdatelink.20090820.zip を添付しました。 - ぐうます (2009年08月20日 00時26分02秒)
  • 適用してみました。commentプラグインやpcommentプラグインで、アンカーがコメントひとつづつズレているようですがこれは仕様ですか?リンク先としては近くにあるので、大きな問題ではないのですが。 - kuwa (2009年08月21日 00時14分44秒)
  • ご指摘の通り、「現状版ではアンカーの位置精度が甘い」と私も思います。現状版は、まずはコンセプト実証のための動作サンプルというのが目的でしたので、簡単に実装できる方法をとったらこうなってしまいました。まだ工夫の余地はあると思います。 - ぐうます (2009年08月21日 02時52分39秒)
  • comment プラグインや pcomment プラグインでのアンカーのズレを無くした新版 fdatelink.20090823.zip(640) を添付しました。 - ぐうます (2009年08月23日 15時27分04秒)
お名前: コメント:
fdatelink.20090819.zip fdatelink.20090820.zip fdatelink.20090823.zip

最終更新時間:2012年02月25日 05時45分45秒