当サイト管理者であるIOによる当Wiki CGI等の開発進捗メモ(多分IO以外が見てもあまり良く分からず意味無いかも)。とりあえずIO自身が読んで分かればいいのでテキトーに書きなぐり
- common.plを修正
- Wiki書式によるリンクで、新たにiPhoneアプリのURLスキームを設定出来るようにした
- (通常文として書く可能性を考え)文中の自動リンク化は行わず、「[」と「]」で囲んで「|」で前後に分けるリンク書式でのみ使用可能とした
- 移動用プルダウンメニュー書式でも使用可能
- これにより、iPhoneのSafari経由で、URLスキームを持ったiPhoneアプリのランチャー(ページ)を作る事が可能になった
- 具体的には以下のような書式となる
[任意の文字|app:iPhoneアプリのURLスキーム]
[Map|app:maps]
%%,[任意の文字|app:iPhoneアプリのURLスキーム%%] プルダウンメニュー書式
Map
- buttonプラグインを修正
- 移動URL指定にiPhoneアプリのURLスキームを設定出来るようにした
- 「app:〜」と指定すると、「〜:」のリンクとなる
- これにより、iPhoneのSafari経由で、URLスキームを持ったiPhoneアプリのランチャー(ページ)を作る事が可能になった
{{button Map,app:maps}}
- latest_sプラグインを追加
- 各ページの更新日時をリストアップするプラグインはあるが、任意のページ名で絞り込んだ複数ページの更新日時をリストアップするものはなかった、気がする(^^;)ちゃんとチェックしてないのでもしかしたら既に作ってたかも
- そこでこのプラグインを使うと、設定した文字がページ名の頭に含まれてるページのみリストアップする。ページ名(もしくはsettitleプラグインで設定しているページタイトル)、更新日時をリスト表示し、リンクする
{{latest_s 検索文字,ソート順}}
例 {{latest_s App/}}
- 引数「検索文字」は省略不可。ページ名の頭に該当するものがあればリストアップする
- 引数「ソート順」は省略可能(省略時「time」)。「time」更新日時順でソートし表示。「name」ページ名順でソートし表示。「timet」更新日時順でソートし表示(settitleプラグインを使っているページはページ名でなく、settitleプラグインで設定したタイトルで表示)。「namet」ページ名順でソートし表示(settitleプラグインを使っているページはページ名でなく、settitleプラグインで設定したタイトルで表示)
- 当方が作ったiPhoneアプリページは「App/数字」というページ名になっていて、ページ名だと何のアプリのページか分からない。またiPhoneアプリページだけをリストアップしたいとも思ったので、こういうものを用意してみた次第
- formプラグイン(form.cgi)を修正
- レシーブ整形用特殊パーツに、ランダムな10英文字を生成する「rw」(random word)を追加した
- レシーブ整形用Wikiページに書く。書き方は「%rw%」。フォームで追加された文ではこれを書いたところがランダムな10英文字に置き換わる
- プラグイン等と絡めて利用するために用意 (今回はldeleteプラグインの削除行認識文字を設定するのに利用)
- HTMLキャッシュ機能を変えるため、setup.pl、wiki.cgiを修正
- テスト的に導入したが、案の定問題の種になってるので、setup.plでオンオフの指定を出来るようにした
- 標準的なプラグイン位しか使わないFSWikiなら問題ないのだろうが、私のWikiはバリバリ改造してあって、色々な機能をプラグインで追加してあり、HTMLキャッシュをこまめに更新しないと最新の状態との差が出てしまう。つまり、WIKIファイルとHTMLキャッシュが一致しないで、最新の状態が反映されずに表示されてしまう
- 抜けがないよう保存にかかわる全てのタイミングでキャッシュを更新する、もしくは、定期的に差がないかチェックしてHTMLキャッシュを更新するような作り等にすれば問題は起きないかもしれないが、ともかく修正しないと使い物にならない
- というわけで、とりあえず今は設定でHTMLキャッシュ機能をオフにしてある。落ち着いたらどうするか、また考えようと思う
- ldeleteプラグイン、ldelete.cgiを追加
- フォームで入力したコメント等、Wikiのソースを直接いじらず、行単位で書いたものを削除したい(させたい)場合に利用する
- このプラグインを書いたところには [削除] のリンクが表示され、それをクリックするとそれが書かれた行のみがソースから削除される(安全のため削除前に削除するか聞く)
{{ldelete 削除行認識文字,オプション}}
- 引数として削除行認識文字を必ず設定。この文字で消す行を探すため、他にないランダムな文字等を設定しておかなければならない
- 引数「オプション」は省略可能。「van」と設定すると、行削除でなくコメント行に変えて非表示にする。削除は危険に思えるとか、もしものために残しておきたいと思うなら「van」で
- youtubeプラグインを修正
- iPhoneで表示する際、横幅を280pxより大きく設定しているなら(未設定は425pxになるので、その場合も)、280pxに縮小して表示するようにした
- gselプラグインを修正
- 3つの画像を切り替えられる仕様を、5つまで設定し切り替えられるようにした
- iPhoneで表示する際、大きい画像を縮小表示するようにした
- プラグインが判断してサイズを縮小する機能も付けたが、それはとりあえずきってある。その代わりにIMGタグにCLASS「ippic」を設定し、利用するCSSでCLASS「ippic」のmax-widthを設定した。ちなみにCSSはWiki表示する際、common.plがアクセスするマシンやページ等に応じて切り替えるようになっている(今回common.plも修正し、iphoneappipというCSSを追加)
- iPhoneアプリページ作成用のappedit.cgi(テスト運用)で、htmlキャッシュファイル作成を省いていて更新が反映されてなかったので、edit.cgi同様htmlキャッシュファイルを作成するように修正
- imageプラグインを修正
- 表示サイズ指定で縦横ピクセル指定を出来るようにした (横60px、縦40pxなら「60:40」)
- これにより、外部画像ファイルも表示サイズ指定出来るようになった
- comment.cgiを修正
- スパム投稿等の処理をちょっと修正。comment.cgi(commentプラグイン)は極力使わず、より柔軟性あって便利なform.cgi(formプラグイン)を使うように当サイト等ではしているが、ANA-NOTE等の初期に立てたWikiサイトではまだ結構使っていて当面必要なので修正を加えた
- edit.cgiのHTMLキャッシュ出力を修正
- ファイル(名)重複時上書きしていたのをエラー表示を出して上書き出来ないようにした
- Wiki表示にhtmlファイルを利用するように修正。そのためにwiki.cgi、edit.cgi等を修正
- そもそもWikiはWikiソースの状態でファイルに保存し、ユーザーがWikiページを見ようとした際にwiki.cgiがファイルを開いてWikiソースを読み出しhtmlに変換して表示する仕組みとなっている。ただプレーンなテキストが書かれているだけなら問題ないのだが、当Wikiのように色々なプラグインを使っていたりすると、プラグインを一つ一つ照らし合わせて展開してhtml化するのにサーバの負担となり、表示に時間がかかってしまう懸念が生じる。アクセスが多くなる程にその懸念は強まる
- それを解決するのに最も良い方法は、CGIによる動的ページ表示(閲覧時CGIアクセスしてページを生成する)から、CGIで静的ページ生成しての表示にする(閲覧時CGIにアクセスせず生成済みのhtmlページを利用する)事だが、動的から静的にした際のリンク置き換えや最新状態の反映を考慮しなければならず、出来ない事はないものの整合性を考えるとそう簡単ではない(特にうちのなんかバリバリ改造してるし(^^;))
- なのでとりあえずの妥協として、ページ修正保存時にWikiソースファイルとhtml変換済みファイルを生成して、表示のアクセス先はこれまで同様wiki.cgiとし、wiki.cgiがページを表示する際にhtml変換済みファイルが存在していればそのファイルを読み込んで表示、html変換済みファイルが存在してなければWikiソースファイルを読み込んで展開するようにした
- どちらにしても結局CGIがファイルを読み込んで展開するのにかわりなく、どこまで軽くなるかは分からないが、プラグインの解釈展開が必要なくなるだけでも結構意味あるのではと思う
- 今のところhtml生成はedit.cgiで新規作成や修正した際、form.cgiで新規作成や書き加えた際、vote.cgiのcb、vote利用時のみ。ページ内で他ページを内包するプラグイン(include、menu、db、stamp_list、topic_list)、htodayプラグインを使用している場合は最新の状態が反映されてないのを防ぐため、html生成はしない(毎回htmlファイルを一旦消去し、そこらへんの変更に対応)
- 結構大きい変更なので、しばらくは様子見で運用
- 「movie」プラグインを追加
- 各動画共有サイトのムービー(リンク)をページに埋め込み表示するプラグイン。YouTube専用のyoutubeプラグインは今後使わず、こちらに置き換えていく
{{movie 種類,ID,横幅(省略可),縦幅(省略可),その他オプション(省略可)}}
- テストページ
- 主要な動画サイトに対応させようとしたが・・・動画サイト多すぎ(^^;)。現時点ではとりあえずYouTube、ニコニコ動画(ムービー埋め込みは対応サイト以外では利用出来なく不可)、AmebaVision、Googleビデオ、FlipClip、FC2動画、Veoh、livedoor動画(作った後に気づいたが、ここは他サイトの動画を利用しているだけだった)、zoome、@niftyビデオ共有までは作った。キリないので、あとは暇と様子を見て追加しよう(^^;)
- youtubeプラグインを修正。パラグラフプラグインからインラインプラグインにした。出力されるhtmlソースを最新のYouTubeのものにあわせて修正した(殆ど変わらないが)
- 「ptrans」プラグインを追加
- ページ翻訳リンク(プルダウンメニュー式)を表示するプラグイン。Google翻訳を使い、選んだ翻訳パターンでページを翻訳表示する
- 「sbookmark」プラグインを追加
- ページのソーシャルブックマークを可能にするプラグイン。AddClipsを利用し、AddClipsのリンクアイコンを表示する
- form.cgiを修正。Cookie処理を若干修正した
- wiki.cgiを修正。ページ名が「App/」から始まるものはiPhoneAppページとみなし、専用の表示処理をするようにした
- common.plを修正。iPhoneAppページ用、appedit.cgi用のヘッダ処理を加えた
- iPhoneAppページを作成、修正するためのappedit.cgiを追加(edit.cgiをベースに作成)。このサイトに導入して開発テストを行ったが、最終的には別にサイトを立ててそちらで運用する予定
- インクリメンタルサーチを可能にするsuggest.js、list.jsを追加
- 画像切替プラグイン「gsel」を追加
- 3つまでの任意画像を切替えて表示できるプラグイン。1〜3つまでの設定したURLの画像を表示、画像下に表示されるボタンで画像を切替えられる(JavaScript使用)。画像数はもっと増やせられるが、今はとりあえず3つまで
- JavaScriptによって画像の横幅をチェックし、iPhoneの場合は260pixel以上なら260pixelで表示、それ以外では3000以上なら3000pixelで表示する
- 画像URLは、httpから始まらずJPG、JPEG、PNG、GIFの拡張子が付いていればimageプラグインの保存ディレクトリ内の画像と見なして表示する (「$IMAGEUP_URL/画像URLで指定したファイル名」)
{{gsel 画像URL1}}
{{gsel 画像URL1,画像URL2}}
{{gsel 画像URL1,画像URL2,画像URL3}}
- common.plを修正
- Cookieをセット、ブラウザから取得するユーティリティ「setcookie」「recookie」を修正した
- Cookieのセットと一緒に使えるIDジェネレートユーティリティ「idgen」を追加した
- wiki.cgiを修正
- 将来の使用に備え、また、voteプラグインでの使用を考え、wiki.cgiラウンチ時にユーザID Cookieをセットするようにした(既にあればセットしない)
- SafariやiCabだとCookieのセットが上手くいかない事がある(Firefox、OperaはOKだった・SafariはSafariPlusあたりが影響している可能性も)。なのでCookieセット専用のCGIも一応設置した
- voteプラグイン、vote.cgiを修正
- プラグイン構文を以下のように変更した(前は数値前の文字しか設定出来なかった)
{{vote voteファイル名,数値前に表示する文字,数値後ろに表示する文字,voteボタンに表示する文字}}
- Cookieを使い、既に投票済みの場合は投票出来ないようにした (Cookieが使えない場合は投票不可)
- それに伴い、投票ユーザIDをファイル(投票数とは別ファイル)に記録するようにした
- 投票記録ファイルを保存するのにattachディレクトリでなく専用ディレクトリを使うようにした(これに伴いsetup.plも修正)
- 最初はcb(checkbox)プラグインのように、個別ファイルを用意せず直接wikiページを書き換えて記録する形に修正しようと思ったが、同時書き換えアクセスが起こる可能性が高そうだし、万が一ファイルが壊れてもやっかいな事にならないよう、これまでと同じままにした
- これら修正はこのサイト用に、というより、本当はiPhoneにも関係する、あるサイトを立ち上げるのに必要なので作ったんだけれども(しばらくそういうフィードバック的な開発が続くかと)
- rssfeedプラグイン、form.cgiを修正
- 引数「オプション設定」に「rform:〜〜〜」を追加した。「|」で分けて他のオプションとの併用使用可能
- 表示をformスタイルにすると、チェックボックスと送信ボタンが表示され、選んだ記事を設定したページに追加する事が出来るが、ページに追加される際の整形はWikiの設定(setup.pl)で決められたレシーブ整形用ページに沿ったものとなり、管理者以外のユーザーは使うレシーブ整形用ページを選ぶ事は出来なかった。また、整形パターンはレシーブ整形用ページに書かれた一つだけに決められていた
- そこで、オプション設定「rform:レシーブ整形用ページ名」を設定する事で、使用するレシーブ整形用ページを選ぶ事が出来るようにした
- それに加えて、レシーブ整形用ページに書くレシーブ整形用クエリー置き換えパーツ「%rss%」の仕様も変更した。これまで整形はリスト形式に決められていたが、引数を付けて整形パターンを選べるようにした
- 「%rss%」「%rss l%」とするとリスト形式に、「%rss ln%」とすると改行(空白行)を伴うリスト形式に、「%rss ll%」とするとリストリンク形式(iPhoneバー風)に、「%rss tv%」とすると改行(空白行)を伴うリスト形式(リストが複数の場合ソートされる)に整形する。バターンは今後増える可能性あり (本当はパターン選択でなく、レシーブ整形用ページで直接整形パターンを書いて決められるようにしようとしたが、上手くいかず諦め(^^;))
- これら変更に伴い、form.cgiの該当部分も修正した
- 表示スタイル「tv」はlivedoor番組表RSSを取得して整形表示するために用意したが、livedoor番組表のRSS提供が2008年末で終わっていたらしく、使えないものになっていた
- そこで代替はないかと探したところ、iPhoneアプリ「テレビ番組表」が利用しているというTVニッカンスポーツ・コムが使えそうに思え、試したら上手くいったので、それにあわせる形でCGIを修正した (タイトル等に「〜」等含まれるとUTF8からの変換が上手くいかず、その部分が文字化けするが、そんなには出ないしとりあえずスルーした・時間のところだけは専用の置き換え処理を入れて直している)
- TVニッカンスポーツ・コムのサイトを見ると使い方的にもしかしたら問題ありかも、という気もしないでもないが、他でもRSS使ってるところもあるようだし、(正式に許可取った話が見られない)iPhoneアプリでもクリア出来てるのであればいいのかな、と(^^;)。TVニッカンスポーツ・コムはクエリーで表示するものを色々変えられたり、iCal出力を用意してあったりと進んでてなかなか良い
- rssfeedプラグインを修正
- 引数「オプション設定」に「tsuiki」を追加した。「|」で分けて他のオプションとの併用使用可能
- 引数で「tsuiki」を設定すると、取得したRSSをキャッシュファイルに上書き保存するのでなく、キャッシュファイルに含まれてない記事だけを追加保存する
- テストして、とりあえず上手くいってるように思えるが、まだちょっと安心出来ないのでしばらく様子見
- rssfeedプラグインを修正、rssfeed.cgiを追加 (それにあわせsetup.plも修正)
- 引数「オプション設定」を新たに追加した。これで現在設定出来る引数は8項目となる
{{rssfeed URL,chan,encode,num,desc,style,rtime,option}}
- オプションは今後必要に応じて設定出来るものを増やす可能性あり(「|」で分けて複数指定可能)。とりあえず今は「dbutton」「key:〜〜〜」を設定可能(両方設定するなら「dbutton|key:〜〜〜」のように書く・逆でもOK)。
- オプション引数を設定する時は「rtime」も設定するのを忘れないようにする (RSSを連続して読み取りにいかないよう、間をあける時間・秒指定で省略時は「3600」、つまり1時間以上経ってたらキャッシュファイルから出すのでなくRSSを読み取りにいく)
- オプション引数「dbutton」について。引数でこれを設定すると、キャッシュファイルを削除するためのボタンを表示する
- これまでキャッシュファイルの削除には管理者によるFTPか、「encode」引数に「delete」を指定する隠し機能で対応してたが、それだけだと不便なので
- 上手くRSSを取得出来なかった場合に(特に初めて試す際に失敗がありえる)、rssfeedプラグインの構文を書き直してもキャッシュファイルがある事で直ぐに反映されないため、キャッシュファイルを消してやり直す必要が生じる
- この処理をするために、キャッシュファイルを消すための処理を担当するrssfeed.cgiを設置した
- 今はこの処理しかしないが、指定のRSSから設定したキーワード抜き出しをして自動ファイル化する処理を加える予定 (例えば「iPhone」という文字が含まれる記事リンクを自動的に抜き出し、Wikiページで見られるようにする)。ベースは下にあるように既に完成している
- オプション引数「key:〜〜〜」について。引数でこれを設定すると、設定したキーワードが記事タイトルに含まれるもののみを抜き出して表示する
- 例えばiPhoneの記事のみを抜き出したいなら「key:iPhone」と指定する。複数キーワード指定(andでなくor)も可能で、例えばiPhoneとMacの記事のみを抜き出したいなら「key:iPhone/Mac」と指定する
- form.cgiを修正
- レシーブ整形用クエリー置き換えパーツの「name」で、「name」クエリーが送信されていない時に置き換える文字を引数指定出来るが、「time:」と指定すると現在日時を表す数値(現在日時を表すtime関数の秒数値)に置き換えられる機能を追加した
- レシーブ整形用特殊パーツの「time」で、引数指定出来るものに「time:」(現在日時を表すtime関数の秒数値)を追加した
- common.plを修正
- ユーティリティライブラリに任意のCookieをセット、もしくはユーザーブラウザのCookieからキーを取得する機能を追加した
- form.cgi、form.plを修正
- 保存時名前とページ名をCookieに保存するようにした。戻りページ名の処理をちょっと修正(後で問題は他にあったと分かり、余計な事したかも)
- フォーム送信して名前を記したCookieが保存されていれば、名前のテキストフィールドでその名前を利用する(表示する)ようにした
- フォーム生成パーツの1行テキストフィールドで第4引数のvalueを「cname」とする
{{formtext name,30,200,cname}}
- rssfeedプラグインとの連動で、レシーブ整形用クエリー置き換えパーツに「rss」(利用時「%rss%」)を追加した。生成するフォームで「rss」クエリーを利用する事はとりあえず考えていない
- RSSから選択抽出したリンクが複数ある場合は、区切りに設定されている「____」で自動的に切り分けられる。「リスト(行頭*)+リンク文+改行」という形で出力される
- rssfeedプラグインを修正 (それにあわせsetup.plも修正)
- 表示スタイルに「form」を追加した。「form」スタイルではRSSフィードから取得した各記事(リンク)毎のチェックボックスとページ名フィールド、追加ボタンを表示する
- チェックボックスをクリックして記事(リンク)を選択し、ページ名を記入して(Cookieによって二度目からは記入省略)追加ボタンを押すと、選んだ内容がform.cgiに送られ、設定したページに記事リンクが追加される (予めリンクを追加していくためのページを作っておき、そこにリンク追加のための決められた文「//form rss」を書いておかなければならない)
- 存在しないページやリンク追加のための文が書かれていないページには追加されないため、その点は安心
- これまでRSSフィードから取得した各記事(リンク)はヘッダとフッタにあたる部分も含めテキストファイル化していたが、今回の修正にあわせ記事(リンク)部分のみファイル化に変更した
- 表示スタイル「iphone」も上手く表示出来てなかったのでちょっと修正した
- 取得した説明文(description、dc:subject)からタグ部分を削除するようにした
- buttonプラグインを修正
- 「URL最後にアスタリスクを二つ(**)付ける」リダイレクトURLに対応させた
- set_themeプラグインを修正
- set_themeプラグインはページ毎に任意のCSSテーマを設定出来るプラグイン。しかしアクセスするユーザーエージェント(機種・ブラウザ)によってはCSSの設定が上手く合わない事も起きるので、オプション引数を追加し、ユーザーエージェントによってCSSを変えられるようにした
- 具体的には、オプションの引数でユーザーエージェントに含まれる文字を指定し、アクセスしてきたユーザーエージェントにそれが含まれていれば、指定のCSSテーマを使うように出来る。例えばiPhone用なら下のような感じで書く
{{set_theme CSS名,iPhone}}
- これだけだとiPhone以外にはCSSは設定されない(WikiデフォルトのCSSが適用される)。例えばiPhoneではAのCSS、それ以外ではBのCSSというようにしたい場合は、最初にオプション引数を指定しないでBのCSSを指定し、次にiPhone用のCSSを指定すれば良い。下のような感じで
{{set_theme B}}
{{set_theme A,iPhone}}
- 切替えるCSSによっては上手くいかない。前のCSS(WikiデフォルトのCSS含む)の設定を次に当てはまるCSSの設定で上書きする事になるが、その際次のCSSにない項目が前のCSSにあると起きる模様、多分(^^;)
- この機能のテストページ
- Cookieアクセス制限機能を追加。それに伴いアクセス制限する各CGIを修正、setup.plに設定変数を追加
- 当Wikiは広くオープンにしてあるので荒らし以外の利用者を制限する必要はないが、利用者を制限してクローズドで利用したいという場合に、この機能を使えばCookieによって限られた者のみがWikiを利用出来るようになる (別に立てたWikiでそのような利用をしているので、こちらにも一応機能を追加した)
- 原理は単純で、ある場所のあるCGIによって発行されたCookieをブラウザが保持していれば(Cookieの内容が設定と一致していれば)アクセスが可能になり、保持していない、設定と一致しなければアクセスが不可能になる仕組み。一度発行されれば任意で消さない限り長期に渡って有効で、以降利用者が制限を意識する必要はない
- Cookieを発行するCGIは管理者のみが設定、設置できる。Wiki毎にCookieを発行するCGIの設置場所(Wikiのディレクトリとは全く異なる場所にある)やCGI名が異なるため、Cookieを発行するCGIのありかを直接教える事がない限り、まずアクセスする事は出来ないはず
- この機能のオンオフはsetup.plの設定で行える(当Wikiにおいては当然今はオフにしてある)
- redirect.cgiを作成、common.plを修正、それに伴いsetup.plに設定変数を追加
- リンクしたURLのリファラ(リンク元)を隠す機能を追加
- WikiでURLを書くと自動的にリンクとなるが、リンク先にリンクした事を知られたくない時もあり、そういった場合にこの機能を使う
- Wiki内で指定の書式「URL最後にアスタリスクを二つ(**)付ける」でURLを書くと、リンクがredirect.cgiへのリンクとなり、リンクをクリックするとredirect.cgiから指定したURLのページへと繋がる。そのためリンク先からはredirect.cgiのアドレスまでしか知られない
- また、(URLコピペ含み)Wiki外からredirect.cgiにアクセスした場合には何も表示されない仕組みとなっている(踏み台防止も兼ねて)
http://www.yahoo.co.jp/**
http://www.yahoo.co.jp/
[Yahoo! JAPAN|http://www.yahoo.co.jp/**]
Yahoo! JAPAN
- iPhone App関連を色々作成や修正
- setup.plに設定変数を色々追加、それに伴い関係するCGIを修正
- ついでにcommon.plではフッタの商標説明文も追加
- common.pl内のユーティリティを除きiPhone関連のプラグインをiphone.plに集約
- 新たにリストをテーブル形式で表示するiphonelistプラグインや、リストファイルを作成するプラグイン等を作成
- textlistプラグインを作成
- 任意のテキストファイルから行単位で文字を抜き出し表示するプラグイン(何でも開けてしまうと問題あるのでsetup.plで設定してある物の中から順番番号で指定)
{{textlist テキストファイル番号,区切り文字,抜き出し番号}}
- とりあえずiPhone App List表示のために作成。これまではリストをWikiソースとして書いていたが、更新の手間や管理等考え、このプラグインでテキストファイルを参照するようにした
- dbプラグイン、dbedit.cgiを修正
- 項目編集画面で、「/head」ページのソースをあれば取得して各フィールドの前に項目名を表示するようにした
- これまではただフィールドだけの表示だったので何の項目か分かりづらく、使いづらかった
- dbプラグインのオプションに「l」編集リンク位置指定を追加した。「l:列番号」で指定した列の文字を編集へのリンクに出来る。
- 各データを編集するリンクはこれまで最後の列に表示される「e」のみだったが、場合によっては最後の列を非表示にしている時もあり、また、iPhoneからだと「e」の文字クリックが文字の小ささから若干しづらい時もあったので、任意の列の文字を編集へのリンクにする事でそれらを解決する事が出来るはず
- etrailプラグインを作成
- iPhoneの無料App「EveryTrail」(iPhone以外にもあるらしい)のGPS記録ブログパーツを表示するプラグイン
{{etrail Trip ID,タイトル,地図タイプ}}
Trip ID:各トリップ記録に付けられたID (数値)
タイトル:表示するタイトル文字 (記録に付けたものと違ってもOK)
地図タイプ:表示する地図のタイプ。省略時「Hybrid」。「Map」地図、
「Satellite」航空写真、「Hybrid」地図+航空写真、「Terrain」地形、
「Frame」iframeで地図のみ表示(これはFlashではないため一応iPhoneでも見られる)
- 「EveryTrail」はGPS機能を利用して現在地、移動距離や速度を記録し、通ったルートをGoogleの地図上に表示出来るアプリ。更にカメラ機能と連動し、「EveryTrail」から写真を撮ると位置を記録し地図の上に撮ったポイントが表示されて写真を見る事が出来る。利用するには登録が必要で(無料)、ブラウザから記録の修正等も可能。旅行時等に使うと面白いと思う
- 記録した各トリップにはIDが割り振られていて、etrailプラグインでそのID等を設定する事でブログパーツを表示する事が出来る。ただ、残念ながらiPhoneだとFlashを利用したパーツは表示出来ず、Flashではないiframeの方もGoogleMapのコントロールや写真表示等が上手くいかない(一回写真表示出来たので、全く出来ない事はないようだが、相当困難で今の仕様ではまず無理かと)。下のはそのサンプル書式 (借り物)
{{etrail 38390,麦草峠サイクリング Aug/09/2008 by dsugiyam,Terrain}}
- form.cgiを修正
- 「title」レシーブパーツ、「url」レシーブパーツで省略(未送信)時の代替文字引数を設定可能に
- レシーブ用新deleteパーツ「deletew」レシーブパーツを追加。変換終わったソースから「%deletew 文字%」「%deletew 文字|||文字|||・・・%」(複数設定)で指定した文字を消去する
- 誤動作を防ぐため等に利用出来る「kesi」レシーブパーツを追加。「per」レシーブパーツを修正してより正確に
- common.plを修正
- iPhone Appを検索し名前等を返す変換ユーティリティパッケージ「iphoneapp」を作成
- 「+」や「*」を「\」付き(\+)に変換して返すユーティリティパッケージ「purahen」を作成
- テストしてたら、何故かformから単独で「+」「++」「+++」や「*」「**」「***」を送信するとCGIエラー等になる事が判明。特定のフォームだけか、form CGI 全部か、form CGIに限らずクエリー送信するもの全てかはまだ不明。もしかしたら多くのもので問題になり、しかし「\」を付ければとりあえず大丈夫そうなので変換するユーテリティを作成した
- itsappプラグインを作成
- iTunes StoreのiPhone App List(独自用意)から検索し結果を表示するプラグイン
{{itsapp App名かApp番号,表示方式}}
App名かApp番号:引数設定されたものを検索する。App名かApp番号、表示方式を
省略すると検索フォームを表示し、フォームで検索した結果をページ表示する
表示方式:
「省略時」最初に該当したApp (リンク付き)
「nolink」最初に該当したApp (リンク無し)
「olink」最初に該当したApp (名前の前に●を表示し、●からリンク)
「n」最初に該当したApp (番号表示付き)
「list」該当したApp全てリスト
「nlist」該当したApp全てリスト(番号付き)
- これのためにsearch.cgiを作成。必要なら他の検索用にも利用する
- dbプラグインを修正、機能を拡張 (詳しくは下のdbプラグイン説明にあり)
- これでショッピングリストを作れる目処がついた
- dbedit.cgiを修正し、iCal用To Doファイルを出力出来るようにした (それにあわせdbプラグインも修正)。iCalを見たらTo Doが利用出来るようで(でもiCalで作ったTo DoはiPhoneでは現状見られないかな)、Phoneとの話/2008-8-1でicsを出力出来れば、、、という事を書いたし、To Do Appにはなく、連携出来たらMac使いとしちゃ便利そうなので作ってみた。こうやってポンポン新しい機能が付いてくのは我ながらちょっと感動というか(^^;)
- dbプラグインの引数設定によってTo Do(i:ics)ではiCal To Do用icsを出力、Shopping List(i:icss)ではiCal 予定表用icsを出力出来るようにした。Shopping List(i:icss)ではGoogleカレンダー用リンクも生成
- Shopping ListではiPhone Appに対応、書いた文字(App名の一部や番号)を当方のiPhone App Listで参照して該当するものがあれば名前等生成する(common.plに変換ユーティリティパッケージ作成)。
- icsのフォーマットはここを参考にした。
- Googleカレンダーの予定表フォーマット (リンクから生成)
http://www.google.com/calendar/event?action=TEMPLATE&text=予定&dates=スタート日時/終了日時&details=ディテールが書かれたページURL
予定はURL encode、日時は日にちのみ20080920、もしくは時間も20080920T210000
- iCalが吐き出したicsファイルを逆にWikiで取り込むのもファイル添付とか利用すれば可能かもしれないが、まあ今はいいかなと
- recentdaysプラグインを修正
- recentdaysプラグインは更新されたページを日付毎に一覧表示するプラグインで、通常は全ページの更新日時データを取得して指定された日数分を表示するが、ページ数やアクセスが多くなるとサーバにとって多少負担となるので、引数の頭に「c」を付けたらキャッシュファイル(recentdays.txt)から生成するようにした
- キャッシュファイルはページを作成したり修正したりした時に更新される (common.plにある、ページ作成時等にメール送信されるルーチンに追加)
- dbプラグイン(データベースプラグイン)、dbedit.cgiを作成
- Wikiはカード型データベースとしては非常に優れてるが、各カードからデータを抜き出してリストアップする形のデータベースとしては使いづらく(というかそういう機能が基本的にはなく)、それを実現するためのプラグイン
- データベースは「データを記録するページ」と、データの項目名等を書いておく「ヘッドページ」、「データ一覧を表示するページ」からなり、データを記録するページは自分で決めた順で各行にデータを書き記す。例えば、一行目は名前、二行目はカテゴリ、三行目は数等のように。データベースのデータとして使えるのは10行までで、11行以降は無視される。同じデータベースとして扱うデータページのタイトルは、全て同じ名前から始まるように名前をつける(例えばKAIMONO/〜〜〜とか)
- データページに付けたタイトル+「head」を付けた「ヘッドページ」を作成し(例えばKAIMONO/headとか)、そのページにテーブル書式で項目名を記す(例えば「,名前,カテゴリ,数」のように)。このページに書くのは基本的にはそれだけで構わないが、ヘッドページのソースはそのままテーブルの上に使われる(表示される)ので、テーブル書式で表示方法を設定したり、説明文等書いたりしても良い
- 「データ一覧を表示するページ」に必ず書かなければならないのは「dbプラグイン」のみ。それだけで一覧が表示される。テーブルのソート機能を必要とするならtable_sortプラグインも書く。データ入力フォームを置きたいならformプラグインでフォームを設置する(データページは勿論普通にWikiのページを作るのと同じく新規ページから作成する事も出来るが、formを利用する方が圧倒的に楽なので大抵formを使う事になるはず)。データ項目の一部を非表示にするならcdisplayプラグインを書く。例としては下のような感じになる(たった3行のみで実現)
{{form form/KAIMONO,formrec/KAIMONO,買い物メモform,買い物メモ,買い物メモ}}
{{table_sort}}
{{db KAIMONO/}}
{{db データベースタイトル,オプション,オプション,オプション・・・}}
{{db SampleDB/}}
{{db SampleDB/,w:仕事}}
データベースタイトル:データベースの名前。省略不可。この名前から始まるページがデータを記した
ページとしてデータベースに利用される(データページ名に区切り文字「/」等使っている場合は
それも付ける「〜〜〜/」)
オプション:引数の設定によって表示方法を色々変えられる。省略可能。カンマで区切って複数設定する
事も可能(同じオプションパターンのものは一つのみ有効)。
オプションの引数は「オプションパターン:設定」という形で書く。オプションパターン無く、文字のみ
の場合は検索ワードの指定と見なす
オプションパターン
「w:検索ワード」検索ワードで指定した文字が含まれているデータページのみ表示する
「n:表示数」表示数で指定した数だけ表示する
「s:スタート番号」一番上(最新)のデータページを1として、指定した番号以降のデータを表示する
「e:エンド番号」一番上(最新)のデータページを1として、指定した番号までのデータを表示する
「c:列番号」指定した列の数値を合計し、一覧の下に表示する
- データベースタイトルの引数で指定したタイトルがついたデータページの内容がテーブル形式で一覧表示される。各ページのデータはテーブルの一行に収められ、行毎に各データページへの移動リンク、各データページの編集リンク、各データページの削除リンクが自動的に埋め込まれる
- 編集削除には専用のdbedit.cgiが使われ、編集はデータページの各行を行毎にテキストフィールド分けし、編集保存出来る(保存した後は保存したデータページでなく、データ一覧ページに移動)
- 現状データのソート機能はなく、必要ならtable_sortプラグインでテーブルの列毎ソートを行う (若干あてにならないが)
- テーブルの列には一列目から「hid0」「hid1」「hid2」・・・とclass名が付けられていて、cdisplayプラグインで「cdisplay hid0,none」とすれば一列目の項目を非表示にする事も可能
- ページ内検索は保留 (これとは別にsearchプラグインを修正し、ページ名を指定しての検索機能をいずれ作る予定)
- form.cgiを修正
- 利用可能クエリー名でwikinameを廃止しwikipageを新たに追加。makepageで新たにページを作る際、wikipageクエリーを使う事でページ名をフォーム入力から設定出来、プラグイン構文を埋め込んで使う時等にそのページ名を設定出来るようにした
- レシーブパーツのmakepageを改造、wikinameを利用してページ名を設定したり、ページ名を置き換え利用出来るようにした
{{cb checkbox名,フラグ,設置ページ名,戻りページ名}}
- チェックボックスを表示し、クリック(チェック)するとその状態を保存して表示する。To Do等に利用出来る
- チェックボックスを表示し、そのチェック状態をファイルに保存してTo Do等に利用するtodoプラグインが既にあったが、今後cbプラグインに置き換える
- todoプラグインはチェックの状態をテキストファイルに記す形だったが、cbプラグインはページに書いたプラグイン構文を直接書き換える。cbプラグインならチェックボックス毎にテキストファイルを作らないので多く設置しても無駄無く問題起きづらいが、そのかわり、同時に同じページを書き換えようとする際の問題がないとはいえない(頻繁に書き変わる事がなければ大丈夫だとは思うが)
- あわせてvote、radioプラグインもいずれ作り直し
- cdisplayプラグインを作成
- 任意のclassの(CSS)displayプロパティを変えられるプラグイン
{{cdisplay Class名,表示方式}}
- 例えばこのプラグインでテーブルの任意列のclassをnoneにすれば、その列を非表示に出来る
- spanやdiv系プラグインと組み合わせて使ったり、色々活用出来るかと
- _ex_table.plを修正
- 各列毎にclass名を自動設定するようにした(hid+数字・hid1等)
- スタイルシートやhtmlのstyleタグでdisplayを設定して任意の列を非表示にしたり出来るよう
- CSSCプラグインを修正
- ここでは今のところ使ってないけど、別場所で作り替えたのでそれにあわせて。作成者のCSS指定とは別に、利用者が任意にCSSをメニューから切替える事が出来るプラグインで、切替えるCSSリストを記したファイルを指定出来るようにし、メニューの前に表示する文字を設定出来るようにした
- common.pl、edit.cgiを修正
- form.cgi等からの書き込み後ページ移動にアンカーが対応してないため、common.plの「redirect」を改造し、アンカー対応するようにした。それによりformプラグインの戻りページ名にアンカー(#〜〜)を付けられるようになった
- あわせてedit.cgiの新規ページ作成の説明文を修正
- rssfeedプラグインの修正
- RSS再読み込み時間を1時間固定からプラグイン構文毎に引数設定出来るようにした (あまりに短いと問題あるので15分以下は15分に)
- descriptionがない場合はdc:subjectを代わりに出すようにした
- 表示スタイルで省略時や通常を「bun」に、テレビ番組RSS表示用(とりあえずlivedoor番組表用)に「tv」を追加
- edit.cgi、editor.jsを改良
- iPhoneのSafariは結構な頻度で落ちる。ただブラウジングしてる最中なら落ちてもそんなには困らないが、文字を打っている最中に落ちられるのはとても困る。コピーペーストが無い事とあわせ、iPhoneのSafariであまり文章を書きたいと思わせない理由となっている。このFSWikiLiteでもそれは同様で、せっかくメモ代わりやデータベースとして使えるというのに安心して使う事が出来ない
- FSWikiLiteの編集画面には「保存」「プレビュー」ボタンがあり、「保存」を押すと保存してページ表示に戻り、「プレビュー」を押すと保存しないでページプレビュー表示する。こまめに保存する事で突然落ちて失うのを少しは防げるが、保存の度にページ遷移するのでちょっと面倒だったり
- そこで「編集続ける」チェックボックスを用意し、それをチェックしておくと「保存」ボタンを押しても編集画面に留まるようにした(チェックボックスはチェックされたまま)。本当はAjaxを使って入力位置を変えず完全に遷移しないようもっとスマートに作れると思うが、勉強不足なので(^^;)まあいずれ
- ついでにちょっとレイアウトを変え、SafariやiCabで動かないWiki書式挿入編集ボタン (Wikiに慣れてない人でも書式やプラグイン構文を挿入利用出来るようにするためのもの)を修正した。FirefoxやOperaだとボタンもコンボ(セレクトメニュー)も動くが、SafariやiCabだとボタンしか動かない。そこでCGIでブラウザをチェックし、生成作動させるeditor.jsを切替えるようにした
- SafariやiCabたどセレクトメニューは出ず、文字によるリンクとなる(メニューにある全部でなく一部)。リンククリックするとプラグイン構文がフィールドに挿入される
- よそのRSSを取得して整形表示するrssfeedプラグインを作成
- iPhone向けに作られたYahooニューストピックスのページは見やすく使いやすいのだけれど、同一ウインドウでリンク先を開くため、記事を見た後一々一覧に戻らなければならない(新規ウインドウでリンク先を表示するブックマークレットがあり、個人的には度々それを利用)。まあそれでも戻れればいいのだが、Safariが落ちてしまう事があり、その場合は一覧から再び見直しとなってしまう。また、全ジャンルトピックス一覧表示でアンカーも振られていないので、ズズッーとスクロールする必要があってちょっと面倒かつ使いづらい
- iPhoneを手に入れてNetNewsWire(iPhone版、Mac版)を使い始め、RSSの利用頻度が上がった。NetNewsWireは非常に便利なのだが、とりあえずさっと見たいならやはりブラウザが早く、自分好みの表示スタイルで見られればいいなと
- というわけで、RSSを取得整形して表示するプラグインでも、と思ったが、よく考えたら昔作ってあったような。ANA-NOTE2を見たら確かにrssプラグインはあったが、それは俺スタ、moondakotaのRSS取得サービスを介して表示するもので、自前で取得してなく、表示スタイルの自由度も低い。FSWikiなら取得表示するプラグインがあるが、FSWikiLiteにはなく、かといってこのためだけにFSWikiを設置して使うのも馬鹿らしい
- なにか使えるCGIはないかと探したところ、これが分かりやすく組み込みやすそうだったので、改造設置し、テスト。getHTTP.cgiとrssfeed.cgiにクエリーを送る事でRSSを取得できた。EUCに変換するのはLaCoocanのEncodeライブラリを利用(Socket等もLaCoocanにあったから使えた・@nifty@homepageじゃ無理)
- スクリプト構造をよく見て、もしかしたら直接プラグインに組み込めるかなとやってみたらどうにか組み込めた(なのでrssfeed.cgiは不要に)。新しく作ったのはrssfeedプラグインとし、rssプラグインも一応残して、両方をrss.plファイルに組み込み
- このRSS CGIは呼び出される(ページを表示する)とRSSを取得し生成する。しかしそれだと呼び出される度に取得しようとするためサーバに負担となる(アクセス多いと特に)。なので、取得したらファイルに保存し、ファイルがあって前回更新した時間から1時間以上経ってないなら新たに取得せずファイルから読み出すように改造した
- どうも取得出来ないところがあったり、取得出来ない事もあるような。ITmediaのRSSが取れないのは弾かれてるからのような(rssプラグインでmoondakotaとか経由だと取れるんだけれど)。画像ダウンロード防止のITmediaだし、ITmediaのRSSをブラウザで開くとFeeMoに飛ばされるところからいっても、厳しくしてるんでは(FeeMoが吐き出すITmediaのRSSなら取得表示出来るが、変なリンクが加わってるのがちょっとイヤ)
- tabプラグインと組み合わせ、(iPhoneだと特に)なかなか使いやすいのが出来たと思う RSS/Yahoo!ニュース トピックス
- コンテンツ切替タブを設置出来るtabプラグイン(tab_s、tab_e)を作成。プラグインによってタブを生成し、タブによってページ移動せずコンテンツ表示を切替える事が可能(JavaScript使用)
- iPhone向けWebサービスのページが拡充してきて、ジャンル別タブで表示を切替えられると良いなと
- JavaScriptでタブを実現しているものを色々見たが、FSWiki(&プラグイン)に組み込んで使うとなると、凝ってるの程なかなか難しい(ほんとはjQueryとかいいのだけれど・iPhone風表示ライブラリも同様の理由で見送ってる)
- そんな中で偶々見つけたここのはScriptもCSSも簡素だったので組み込めそうだなと思い、少し変えてプラグイン化した。必要なCSSの設定を利用しているCSSにも埋め込む必要がある(とりあえずここのデフォルトであるiPhone01テーマに組み込み、他はそのうち順次)
- 実際の利用にはtab_sプラグインをページ頭の方に、表示を切替えるコンテンツをdiv_s、div_eプラグインで囲み(idはpage1、page2、〜)、tab_eプラグインをページ最後に書く。1つのプラグインだけで済まずちょっと複雑だが、まあ仕方ない。タブ項目はWikiページや外部URLへのリンクにする事も可能
{{tab_s タブ項目,タブ項目,タブ項目,・・・・}}
タブ項目は「:」で分けるとWikiページか外部URLへのリンク(httpで始まっていれば)となる(タブ名:URL)
{{tab_e タブ数}}
タブの項目数にあわせて指定
- 検索CGI変更にあわせ、searchプラグインも改造
- 検索CGI(wiki.cgi)を改造し、これまでの大文字小文字分けて検索するのに加え、チェックボックスで大文字小文字関係なくも検索出来るように (デフォルトは大文字小文字関係なく・これでSudokuでも、sudokuでも、SUDOKUでも検索出来るようになった)
- 大文字小文字関係なくの場合、キーワード、検索ソース(Wikiページ)共に小文字化して検索する事で対処
- そもそものFSWikiLite標準の検索は、大文字小文字を分けて検索し、検索結果は該当するページ名だけしか出てこない作りなのだが、改造によってそれらを変えている
- 同一ページ内の見つけた結果全て表示とか、and orや正規表現で検索とか、要望はあるかもしれないが、今は技術と時間が足らず無理(^^;)
- 移植してなかったrepプラグイン、repwithプラグイン、selectプラグイン追加
- form.cgiを最新版+αに
- 説明まだ(ANA-NOTE2の方で説明を完成させる)
- makepage、random1〜10、textfile、message(name同様、代替文字引数設定可能に)といったところが新しくなった
- q1〜10も文字引数設定可能にした方が使い勝手いいかも
- 作成日時URL(ショートリダイレクトURL)でのページリダイレクト
- edit.cgi(新規ページ作成時にリダイレクトURLのためのタイトル&日時テキスト記録)、wiki.cgi(リダイレクトURLでのアクセスに対しテキスト参照してリダイレクト処理)、permalinkプラグイン(テキスト参照してページのリダイレクトURL表示)、common.pl(リダイレクトURL用Wikiリンク)といったあたりを作成
- formプラグインのdate picker(JavaScript「calendarlay.js」「HolidayChk.js」)が上手く動いてないので修正する
- ページ毎のapple-touch-icon任意設定プラグイン
- サイドメニュー非表示プラグイン (CSSで最初から非表示にしたり、div使ってクリックで消す事は出来るが、それらを使わずプラグインで出来るようにする・でもやってみないと出来るかは分からない(^^;))
- vote.cgiなどのテキストファイル入出力処理で行うロック処理直し (edit.cgi参考に)
- iPhoneボタン型ラウンチャーページ生成フォーム
- 直接Wiki編集すればなんてことはないが、誰でも自分用のを作って使えるように。ボタン画像をどうするかがちょっと難点