サマリ | リストボックスプラグイン |
---|---|
リビジョン | 1.2 |
対応バージョン | 1.4 |
投稿者 | KaWaZ |
投稿日 | 2003-10-06 (MON) 10:41:53 |
第1引数に現在の値、第2引数以降にリストボックスの内容を指定します。
&listbox(いちご,りんご,いちご,みかん,秋刀魚,スイカ);
#listbox2(いちご,りんご,いちご,みかん,秋刀魚,スイカ)
以下のURLでプラグインの動作の確認が出来ます。
ボックス型プラグインにしてタグの不整合を無くしたものです。【推奨】
インライン型プラグインのままタグの不整合を無くしたものですが残っています。
javascriptを使ってHTML/XHTMLの制限を回避しています回避できてません。
bugtrack プラグインで状態や優先度の変更をするのにソース編集しなきゃいけないのが不満で、それを改善するための第一歩として作ってみました。
面白いですね。こういうののスタイルはcssに分けた方がいいのかなぁ? とりあえずこっちでもデモ
ネットスケープで上手く表示できない不具合があったので修正しました&ref(): File not found: "listbox.inc.php-1.3" at page "自作プラグイン/listbox.inc.php";。
これはいいですね。www.kawaz.jpには行けませんでしたよ。Javascriptを使っているようですので、「ブラウザでJavascriptを有効にするように」と説明を付け加えておいてはどうでしょうか。
XHTML 1.1 Strictで not validになります。理由はインライン型プラグインにしているからです。インラインプラグインでは、XHTMLのブロックレベル要素は使用できません。XHTMLのインライン要素のみ使用できます。XHTMLのブロックレベル要素である<form>タグを使用するプラグインはブロック型プラグインでなければいけません。現状では下記のように出力されており、タグの不整合が発生しています。
<p> <form action="http://www.kawaz.jp/pukiwiki/" method="post" style="display:inline;margin:0;"> <select name="value" style="vertical-align:middle;" onchange="this.form.submit();"> <option value='あべし' selected>あべし</option> (中略) <input type="hidden" name="number" value="13" /> <input type="hidden" name="plugin" value="listbox" /> <input type="hidden" name="refer" value="SandBox/listboxプラグインの試験" /> </form> </p>
<form>は<p>の子要素にはできません。<p>の子要素にできるのは、XHTMLのインライン要素のみです。
<select>や<input>は<form>の子要素にはできません。<div>などを間に入れる必要があります。<form>を使用している他のブロック型プラグインのソースを参照してください。
そうかぁ ソース見てなんか変だと思ったのはそれだったんですね。ちゃんと勉強しなくちゃ..デモページにXHTMLチェックも入れよう。
ボックス型プラグインにした listbox2 と、インライン型プラグインのまま XHTML1 の不整合をなくしたバージョン 1.5 をアップロードしました。
デモページでも書いていますが、僕としてはデザインや使い勝手上、lsitboxはインライン型プラグインとして実装したいのですが現在の PukiWiki ではそう実装しようとすると矛盾が起きてしまいどうするのが良いのか悩んでます。1.5 では、とりあえず javascript で回避してみました。
可能かどうか確認していませんが、getメソッドを使ってプラグインのaction()へパラメータを引き渡せばJavascriptの中でも<form>を使わずに記述できませんか?
listbox.inc.phpのインライン型プラグインのタグの不整合は直ってないです。
<p>優先度:<script type="text/javascript"> (中略) </script> <select style="vertical-align:middle;" onchange="plugin_listbox_onchange(0,this.value);"> <option value='CVS待ち' selected='selected'>CVS待ち</option> <option value='完了'>完了</option> <option value='保留'>保留</option> <option value='却下'>却下</option> </select> </p>
<p>タグは<select>を子要素にできません。<p>タグの中にインライン要素のタグしか子要素にできないのは、XHTML 1.1だけでなくXHTML 1.0/HTML 4.01のSctrict/Transitional/Frameset共通です。
それとlistbox.inc.phpのブロック型プラグインの中でdisplay:inlineが指定されていますが、意味ないです。指定するのならdisplay:run-inです。但し、CSS2のプロパティなのでInternet Explorerではサポートされていません(代わりにInternet ExplorerではCSS3のdisplay:inline-blockがサポートされています)。そもそも個々の<input>タグを<div>で囲む必要はないです。<form>~</form>の子要素に<div>~</div>を置けば、<div>の子要素として好きな配置で複数の<input>や<select>を置けます(各<input><select>の間に改行が入らなくて済む)。
1.4 rc3以降では、テーブルの各セルの中でブロック型プラグインが使用可能(dev:開発日記/2003-05-29)なので、trackerプラグインの中でブロック型プラグインのlistboxプラグインを指定することで、trackerプラグインによるbugtrackの「状態」や「優先度」の変更が可能になります。trackerプラグインでbugtrackを実現する方法は、しろくろのへや::config/plugin/tracker/default参照。
tracker + listbox2 でのサンプルを merlin:Plugin/Demo/tracker.inc.php/todotest に置きました。
listbox2 v1.1 は、XHTML1.1 Invalid です。 以下を変更することが必要です。
function plugin_listbox2_getOptions($value, $options) { $options_html = ''; foreach($options as $option) { if($option == '') { continue; } $option_enc = htmlspecialchars($option); if($value == $option) { - $options_html .= "<option value='$option_enc' selected>$option_enc</option>"; + $options_html .= "<option value='$option_enc' selected='selected'>$option_enc</option>"; } else { $options_html .= "<option value='$option_enc'>$option_enc</option>"; } } return $options_html;
listbox2 を v1.2 として修正しました。merlin さんの XHTML1.1 valid のパッチを当てました。また、check_editable 関数を使って編集に認証が必要なページではリストボックスの値を変更できないようにしました。