* 編集中に「テキスト整形のルールを表示」しても、メッセージがクリアされないようにする。 [#f1df1243] - ページ: [[BugTrack2]] - 投稿者: [[ぃぉぃぉ]] - 優先順位: 低 - 状態: 提案 - カテゴリー: 本体新機能 - 投稿日: 2007-08-04 (土) 10:35:44 - バージョン: 1.4.7 ---- #contents ---- **編集フォームの「テキスト整形のルールを表示する」をPOSTメソッドにして、編集中のメッセージが引き継がれるようにする。 [#pb64d14c] 使い始めた頃、編集し始めてから「表はどう記載するんだっけな?」と、整形ルールを表示したら、「あ゛~、今まで入力した内容が消えた ><」なんてことがよくあったのですが、そうならないようにする方法です。&br; 周り(パソコンに不慣れな人たち)に自分のPukiWikiを紹介して使ってもらったら、この苦情がでてきたもので、対応してみました。 #ref(BugTrack2-266_ioio_01_buttonA.png,nolink) #br #ref(BugTrack2-266_ioio_01_buttonB.png,nolink) ***フォーム生成部改造 [#zf9d8829] -html.php --function edit_form() ---L.166あたり - global $_btn_preview, $_btn_repreview, $_btn_update, $_btn_cancel, $_msg_help; + global $_btn_preview, $_btn_repreview, $_btn_update, $_btn_cancel, $_msg_help, $_msg_help_off; ---L.240あたり&br; value=$_msg_help(_off)を""でくくり忘れていたので修正。(2007-08-09 (木) 00:09:29) + //ヘルプ非表示中はヘルプ呼び出しボタン表示 + if (isset($vars['helpoff']) || !isset($vars['help'])) { + $help_button = "<input type=\"submit\" name=\"help\" value=\"$_msg_help\" />"; + $help_on = FALSE; + } else { + //ヘルプ表示中はヘルプ消去ボタン表示とヘルプ表示中ポストデータ(hidden)作成 + $help_button = "<input type=\"submit\" name=\"helpoff\" value=\"$_msg_help_off\" /><input type=\"hidden\" name=\"help\" />"; + $help_on = TRUE; + } + $body = <<<EOD <div class="edit_form"> <form action="$script" method="post" style="margin-bottom:0px;"> $template $addtag <input type="hidden" name="cmd" value="edit" /> <input type="hidden" name="page" value="$s_page" /> <input type="hidden" name="digest" value="$s_digest" /> <textarea name="msg" rows="$rows" cols="$cols">$s_postdata</textarea> <br /> <div style="float:left;"> <input type="submit" name="preview" value="$btn_preview" accesskey="p" /> <input type="submit" name="write" value="$_btn_update" accesskey="s" /> $add_top $add_notimestamp - </div> <textarea name="original" rows="1" cols="1" style="display:none">$s_original</textarea> - </form> - <form action="$script" method="post" style="margin-top:0px;"> - <input type="hidden" name="cmd" value="edit" /> - <input type="hidden" name="page" value="$s_page" /> <input type="submit" name="cancel" value="$_btn_cancel" accesskey="c" /> + </div> + <br /> + <div style="clear:left;"> + $help_button + </div> </form> </div> EOD; - if (isset($vars['help'])) { - $body .= $hr . catrule(); - } else { - $body .= '<ul><li><a href="' . - $script . '?cmd=edit&help=true&page=' . $r_page . - '">' . $_msg_help . '</a></li></ul>'; - } - - return $body; + if ($help_on) { + $body .= $hr . catrule(); + } return $body; ***edit.inc.php呼び出し時に表示するtextareaの中身決定。 [#dafc40a8] -global - global $vars, $_title_edit, $load_template_func; + global $post, $vars, $_title_edit, $load_template_func; -L.30あたり&br; プレビューかフォーマットルール表示の場合には引数から渡された(=ポストされた)msgを使用。 + if (!isset($post['msg'])) { $postdata = @join('', get_source($page)); if ($postdata == '') $postdata = auto_template($page); + } else { + $postdata = $post['msg']; + } ***ボタン表示切り替えに、消すときのメッセージ作成 [#gd8ebceb] -ja.lng.php l.57あたり $_msg_help = 'テキスト整形のルールを表示する'; +$_msg_help_off = 'テキスト整形のルールを隠す'; $_msg_week = array('日','月','火','水','木','金','土'); -en.lng.php l.54あたり $_msg_help = 'View Text Formatting Rules'; +$_msg_help_off = 'Hide Text Formatting Rules'; $_msg_week = array('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); -------- **コメント [#kf831b9b] - こんにちは :) 確かに私もついクリックしてしまい、「戻る」機能の世話になることがあります。問題が何かという件ですが、この件については「ハイパーリンクは非常にクリックしやすい。またついクリックしてしまう場所にリンクがある。」というUIの特徴とレイアウトに関する問題ではないでしょうか。勘違いでなければ、他の回避策ないし解決策として、レイアウトや表示デザイン上の修正というのが入ってくると思います。(1)マウスアローが通過する操作コースとの兼ね合い(例えば、ボタンの直下におかずに、もう一~二行分下にずらせば抑えられるかもしれない) (2)周辺の強調度合いの少なさ(例えば、周囲が色付け/強調されていればある程度抑えられるかもしれない)等、どんな要素(無要素)でソレが誘発されたのか、どの用に感じられたのかについて、その方にお話を聞いてみたくなりますね。準備時間がそこそこあるなら、そうしたデザイン上の変化を絵で何パターンかを用意して、それらを見せながら意見を得たりとか。 -- [[henoheno]] &new{2007-08-04 (土) 10:43:45}; -- 失礼しました (^^; クリックするまでの話ではなく、クリックしてから後の話なのですね。 -- [[henoheno]] &new{2007-08-04 (土) 18:27:40}; -- 挙動的にはプレビューの亜種なのだなあ。 -- [[henoheno]] &new{2007-08-04 (土) 18:23:55}; -- そうですね。送るデータはsubmitがpreviewかhelp関係かという以外同じです。 -- [[ぃぉぃぉ]] &new{2007-08-04 (土) 23:18:00}; - 自分の場合はついついクリックしたのではなく、Formatting Ruleを調べるために故意に押していました。ブラウザによるようですが、IE6の場合は、「戻る」で戻ったら、編集内容は保存されておらず、編集モードに入った時点の状態に戻ってしまいます。 -- [[ぃぉぃぉ]] &new{2007-08-04 (土) 11:20:56}; -- 最近は消えることが分かっていますから、shift+クリックで別画面に表示したりしますが、これでは編集画面+フォーマットのヘルプという構成になっている意味がありません。 -- [[ぃぉぃぉ]] &new{2007-08-04 (土) 11:18:08}; --- これならツールバー(? 最上部のメニュー)や下部のアイコンのヘルプで十分ですよね。 -- [[ぃぉぃぉ]] &new{2007-08-04 (土) 11:22:10}; -- つまり、現状では編集モードに入った''直後''に「テキスト整形のルールを表示する」をクリックした場合のみ意味があります。 -- [[ぃぉぃぉ]] &new{2007-08-04 (土) 11:21:37}; --- 一度プレビュー表示をした後なら、プレビュー表示に「戻る」+「更新」で編集内容を送りなおす(復活させる)、とできなくはない(IE6の場合)ですけど... -- &new{2007-08-04 (土) 12:32:27}; --- プレビューの後でも、プレビューの''直後''しかだめですよね。その後編集していたものは残りませんT_T&br;この改造を適用すれば大丈夫v(^_^) -- [[ぃぉぃぉ]] &new{2007-08-04 (土) 23:24:32}; -- ということで、このBugTrackのように、「テキスト整形のルールを表示する」をクリックした場合にも編集状態が保持されるようにするのがよいと思います。 -- [[ぃぉぃぉ]] &new{2007-08-04 (土) 11:22:52}; - アイデアだけな関連 : [[BugTrack/570]]の注釈 - 今までの実装が $vars['help'] を見ているということは、cmd=edit&help=on&page=<ページ名> といった GET method でも意図通りの状態になるということです。そのへんと上手く合わせられないでしょうか -- [[henoheno]] &new{2007-08-05 (日) 17:34:09}; -- 今でもL.240あたりの「+ if (isset($vars['helpoff']) || !isset($vars['help'])) {」でvars['help']を見てますのでGETでもいけますよ~。&br;この条件文のelseの時、つまり$vars['help']がある時にヘルプが表示されます。 -- [[ぃぉぃぉ]] &new{2007-08-07 (火) 01:29:16}; - なんだかシングルクォートがエスケープされてました。spamか何かで引っかかって、復活してもらったときに入ってたのかな。修正しました。失礼しました。 -- [[ぃぉぃぉ]] &new{2007-08-07 (火) 12:34:04}; - とりあえず、こちらにデモページを%%用意しました%%設置してました。henohenoさん、よろしかったらご覧下さい。id/passはguest/guestです。 -- [[ぃぉぃぉ]] &new{2007-08-19 (日) 02:18:30}; -- 助かります。ページの先頭に、外見と動作が理解できるような絵を貼り付けました。(ファイル添付は我々にしかできませんが、こうした物を用意いただければこちらで対応します) -- [[henoheno]] &new{2007-08-19 (日) 21:11:46}; --- 動作確認ありがとうございました。&br;画像作成、添付ありがとうございます。デモページは閉鎖しました。 -- [[ぃぉぃぉ]] &new{2007-08-22 (水) 01:20:46}; - edit.inc.php の部分ですが、msgを POSTのみから得ることを強制して安心したいシチュエーションでは $vars['msg'] でなく $post['msg'] にされるのがいいでしょう。・・・でも既存コードがそうしてるな・・・今まとめて見直します。上のパッチも直しておきます-- [[henoheno]] &new{2007-08-19 (日) 21:27:29}; -- [[cvs:plugin/edit.inc.php]] (r1.42) - 「プレビューのボタン」と、「プレビューの亜種であるところのこのボタン」は、「一つのボタンと、二つのチェックボックス」で表現できないでしょうか。ボタン名が悩ましいですが例えば「リロード」とか。そんな方向に持って行くと、すぐには実現できないでしょうが、編集中に他人が同じページを更新してしまったかどうかをチェックする機構や、それを解決させる機構に収斂することができるのではないかナーと、ちょっと思いますがいかがでしょう -- [[henoheno]] &new{2007-08-20 (月) 00:21:15}; -- なるほど、編集の衝突のチェックですか。衝突対策の良い案があるといいですね。&br;「一つのボタンと二つのチェックボックス」で表現は簡単そうな気がしますが、良いレイアウトが浮かびません。現状の「整形ルール表示」や「プレビュー」ボタンは1クリックでその動作をしてくれますので直感的に操作できますが、チェックボックスのチェックをしてからボタンクリック、という1アクション増えると、パソコンに不慣れな人には辛くなるかな、と。&br;おじいちゃんおばあちゃんに使わせようと頑張っているのでw -- [[ぃぉぃぉ]] &new{2007-08-22 (水) 01:36:56}; #comment ** メタコメント: 既存実装とのバッティング (cancel時のpayload) [#g276085f] - lib/html.php の edit_form() で、cancelが本文をPOSTしないようになった [[BugTrack2/160]] の工夫が殺されてしまっておるようです -- [[henoheno]] &new{2007-08-12 (日) 23:34:02}; -- 動作的にはplugin/edit.inc.phpで対応済みの様です。$vars['cancel']が存在するとリロードするようになっています。([[BugTrack2/160]]の工夫とはこのことでよろしいのでしょうか?) -- [[ぃぉぃぉ]] &new{2007-08-14 (火) 20:27:14}; -- お疲れ様です。BugTrack2/160 の工夫 というのは、"「キャンセル」ボタンを別formに。" とある部分の事を差しています。別formでなくなってしまっているので、cancelボタンをクリックした時のペイロードが大きくなります(不要なデータを沢山送りつけてしまいます)。 -- [[henoheno]] &new{2007-08-16 (木) 00:06:46}; -- なるほど。cancel時はPOSTデータのほとんどが不要ということですね。この不要なPOSTデータをやめるには、 +++「テキスト整形のルールを表示する」ボタンをCANCELボタンより上に持ってくる +++CANCELをボタンではなくリロードと同じリンクとする&br; という方法が考えられますね。自分としてはCANCELボタンの使用頻度は低いので、CANCEL時の冗長なデータは気にしませんが^^; -- [[ぃぉぃぉ]] &new{2007-08-16 (木) 04:11:22}; - ふむふむ、考え方が理解できました。edit_form の payload はそもそも無駄なものを抱えている節がある (('original'の件。設計上の、またはアーキテクチャの問題と思われる))ため、別のいいアイデアやデザインの都合があって、どうしてもformを一つにしなければならないなら、それは仕方ないと思っています。また、cancelのformが分けてあるかどうかは確かに死活問題ではないので、とりあえず cancel のために form が分けてあるかどうかという件は無視して、パッチを理解する方に戻りたいと思います -- [[henoheno]] &new{2007-08-19 (日) 00:26:36}; -- よろしくお願いします。 -- [[ぃぉぃぉ]] &new{2007-08-19 (日) 02:18:30}; #comment ** メタコメント: パッチ(差分)に関して [#z0182e6c] - 見た目を含めて検討したかったのですが、上記のパッチはそれぞれどのリビジョンに対するものでしょう。 html.php で言えば $help_on といった変数は無いので、何か部分的なパッチのようにも思えます。 -- [[henoheno]] &new{2007-08-05 (日) 17:32:51}; -- 元になっているのはPukiWiki Ver.1.4.7_notbです。&br;$help_onはローカル変数で上記パッチで新設したものです。getメソッドでの&help=onの場合の挙動は変更ありません。(上記パッチを当ててもヘルプありの編集画面となります。) -- [[ぃぉぃぉ]] &new{2007-08-05 (日) 18:08:20}; --- はい、$help_on はこのパッチで用意された変数ですよね。それなのに以下の部分は $help_on が以前から存在したかのような表現になっているのです -- [[henoheno]] &new{2007-08-05 (日) 19:00:38}; if ($help_on) { $body .= $hr . catrule(); } --- [[フォーム生成部改造のhtml.phpのfunction edit_form() のL.240あたり>./#l240]]、の最初の部分で$help_onの値を生成しています。 -- [[ぃぉぃぉ]] &new{2007-08-05 (日) 19:04:49}; --- はい、そしてそのパッチの最後の部分にある、 + でも - でもない部分で $help_on が登場していますが、そこの部分が不思議なのです。何か勘違いしているかな・・・ -- [[henoheno]] &new{2007-08-05 (日) 21:00:42}; --- 失礼しました。その3行も+です。(修正しました) -- [[ぃぉぃぉ]] &new{2007-08-05 (日) 22:52:47}; #comment