• R/O
  • SSH
  • HTTPS

fswiki: コミット


コミットメタ情報

リビジョン149 (tree)
日時2012-04-30 23:18:00
作者takezoe

ログメッセージ

編集画面でコンフリクトした場合もjsdifflibの差分表示に対応。

変更サマリ

差分

--- fswiki/trunk/fswiki/plugin/core/Diff.pm (revision 148)
+++ fswiki/trunk/fswiki/plugin/core/Diff.pm (revision 149)
@@ -166,9 +166,34 @@
166166 my $to = shift;
167167
168168 $wiki->set_title("$pageの変更点");
169- my ($diff, $rollback) = $self->get_diff_html($wiki,$page, $from, $to);
169+ my ($source1, $source2) = $self->get_diff_sources($wiki, $page, $from, $to);
170170
171171 my $theme_uri = $wiki->config('theme_uri');
172+ my $buf = _get_diff_html($wiki, $source1, $source2);
173+
174+ if($wiki->can_modify_page($page) && $wiki->get_CGI->param('diff') eq ''){
175+ $buf .= qq|
176+ <form action="@{[$wiki->create_url()]}" method="POST">
177+ <input type="submit" value="このバージョンに戻す"/>
178+ <input type="hidden" name="action" value="DIFF"/>
179+ <input type="hidden" name="page" value="@{[Util::escapeHTML($page)]}"/>
180+ <input type="hidden" name="rollback" value="@{[Util::escapeHTML($to)]}"/>
181+ </form>
182+ |;
183+ }
184+
185+ return $buf;
186+}
187+
188+#==============================================================================
189+# jsdifflibを使って差分の表示を行うHTMLを取得
190+#==============================================================================
191+sub _get_diff_html {
192+ my $wiki = shift;
193+ my $source1 = shift;
194+ my $source2 = shift;
195+
196+ my $theme_uri = $wiki->config('theme_uri');
172197 my $buf = qq|
173198 <script type="text/javascript" src="${theme_uri}/resources/jsdifflib/difflib.js"></script>
174199 <script type="text/javascript" src="${theme_uri}/resources/jsdifflib/diffview.js"></script>
@@ -202,25 +227,15 @@
202227 }));
203228 }
204229 </script>
205-$diff
230+<input id="newText" type="hidden" value="@{[Util::escapeHTML($source1)]}">
231+<input id="baseText" type="hidden" value="@{[Util::escapeHTML($source2)]}">
206232 <input type="checkbox" id="viewtype" onclick="diffUsingJS(this.checked ? 0 : 1)"><label for="viewtype">サイドバイサイドで表示</label>
207-<div id="diffoutputdiv"/>
233+<div id="diffoutputdiv"></div>
208234 <script type="text/javascript">
209235 diffUsingJS(1);
210236 </script>
211237 |;
212238
213- if($wiki->can_modify_page($page) && $rollback && $wiki->get_CGI->param('diff') eq ''){
214- $buf .= qq|
215- <form action="@{[$wiki->create_url()]}" method="POST">
216- <input type="submit" value="このバージョンに戻す"/>
217- <input type="hidden" name="action" value="DIFF"/>
218- <input type="hidden" name="page" value="@{[Util::escapeHTML($page)]}"/>
219- <input type="hidden" name="rollback" value="@{[Util::escapeHTML($to)]}"/>
220- </form>
221- |;
222- }
223-
224239 return $buf;
225240 }
226241
@@ -263,9 +278,9 @@
263278 }
264279
265280 #==============================================================================
266-# 差分文字列を表示用HTMLとして取得
281+# 差分表示用のソースを取得
267282 #==============================================================================
268-sub get_diff_html {
283+sub get_diff_sources {
269284 my $self = shift;
270285 my $wiki = shift;
271286 my $page = shift;
@@ -290,8 +305,7 @@
290305 $source1 = $wiki->convert_from_fswiki($source1, $format);
291306 $source2 = $wiki->convert_from_fswiki($source2, $format);
292307
293- return '<input id="newText" type="hidden" value="'.Util::escapeHTML($source1).'">'.
294- '<input id="baseText" type="hidden" value="'.Util::escapeHTML($source2).'">';
308+ return ($source1, $source2);
295309 }
296310
297311 #==============================================================================
--- fswiki/trunk/fswiki/plugin/core/EditPage.pm (revision 148)
+++ fswiki/trunk/fswiki/plugin/core/EditPage.pm (revision 149)
@@ -53,7 +53,7 @@
5353 }
5454 }
5555 if($wiki->page_exists($pagename) && $cgi->param("lastmodified") != $time){
56- $buf .= "<p><span class=\"error\">ページは既に別のユーザによって更新されています。</span></p>";
56+ $buf .= "<p><span class=\"error\">ページは既に別のユーザによって更新されています。最新版との差分を確認して再度編集を行ってください。</span></p>";
5757
5858 my $mode = $wiki->get_edit_format();
5959 my $orig_source = undef;
@@ -66,20 +66,9 @@
6666 $your_source =~ s/\r\n/\n/g;
6767 $your_source =~ s/\r/\n/g;
6868
69- my $diff = plugin::core::Diff::_get_diff_html($orig_source, $your_source);
70- $diff =~ s/\n/<br>/g;
69+ my $diff = plugin::core::Diff::_get_diff_html($wiki, $orig_source, $your_source);
70+ $buf .= $diff."<br>";
7171
72- $buf .= qq|
73- <ul>
74- <li>追加された部分は<ins class="diff">このように</ins>表示されます。</li>
75- <li>削除された部分は<del class="diff">このように</del>表示されます。</li>
76- </ul>
77- <p>
78- 最新版との差分を確認して再度編集を行ってください:
79- </p>
80- <div class="diff">$diff</div>
81- |;
82-
8372 $content = $orig_source;
8473
8574 } else {
@@ -133,19 +122,11 @@
133122 $your_source =~ s/\r\n/\n/g;
134123 $your_source =~ s/\r/\n/g;
135124
136- $buf .= qq|
137- <ul>
138- <li>追加された部分は<ins class="diff">このように</ins>表示されます。</li>
139- <li>削除された部分は<del class="diff">このように</del>表示されます。</li>
140- </ul>
141- |;
142-
143125 if($orig_source eq $your_source){
144126 $buf .= '<p class="error">差分はありません。</p>';
145127 } else {
146- my $diff = plugin::core::Diff::_get_diff_html($your_source, $orig_source);
147- $diff =~ s/\n/<br>/g;
148- $buf .= qq|<div class="diff">$diff</div>|;
128+ my $diff = plugin::core::Diff::_get_diff_html($wiki, $your_source, $orig_source);
129+ $buf .= $diff."<br>";
149130 }
150131
151132 #--------------------------------------------------------------------------
旧リポジトリブラウザで表示