リビジョン | f77c1cf4c1f57dd3943e33a024a6149bc9bd11a6 (tree) |
---|---|
日時 | 2011-09-18 23:33:56 |
作者 | takezoe <takezoe@user...> |
コミッター | takezoe |
編集画面で差分を確認できるようにした。
@@ -56,7 +56,12 @@ sub do_action { | ||
56 | 56 | $buf .= "<p><span class=\"error\">ページは既に別のユーザによって更新されています。</span></p>"; |
57 | 57 | |
58 | 58 | my $mode = $wiki->get_edit_format(); |
59 | - my $orig_source = $wiki->convert_from_fswiki($wiki->get_page($pagename), $mode); | |
59 | + my $orig_source = undef; | |
60 | + if($artno eq ""){ | |
61 | + $orig_source = $wiki->convert_from_fswiki($wiki->get_page($pagename), $mode); | |
62 | + } else { | |
63 | + $orig_source = $wiki->convert_from_fswiki(&read_by_part($wiki->get_page($pagename), $artno), $mode); | |
64 | + } | |
60 | 65 | my $your_source = $content; |
61 | 66 | $your_source =~ s/\r\n/\n/g; |
62 | 67 | $your_source =~ s/\r/\n/g; |
@@ -70,7 +75,7 @@ sub do_action { | ||
70 | 75 | <li>削除された部分は<del class="diff">このように</del>表示されます。</li> |
71 | 76 | </ul> |
72 | 77 | <p> |
73 | - 差分を確認して再度編集を行ってください: | |
78 | + 最新版との差分を確認して再度編集を行ってください: | |
74 | 79 | </p> |
75 | 80 | <div class="diff">$diff</div> |
76 | 81 | |; |
@@ -84,7 +89,7 @@ sub do_action { | ||
84 | 89 | |
85 | 90 | # パート編集の場合 |
86 | 91 | if($artno ne ""){ |
87 | - $save_content = &make_save_source($wiki->get_page($pagename),$save_content,$artno,$wiki); | |
92 | + $save_content = &make_save_source($wiki->get_page($pagename), $save_content, $artno, $wiki); | |
88 | 93 | } |
89 | 94 | # FrontPageは削除不可 |
90 | 95 | if($pagename eq $wiki->config("frontpage") && $save_content eq ""){ |
@@ -92,7 +97,7 @@ sub do_action { | ||
92 | 97 | |
93 | 98 | # それ以外の場合は処理を実行してメッセージを返却 |
94 | 99 | } else { |
95 | - $wiki->save_page($pagename,$save_content,$sage); | |
100 | + $wiki->save_page($pagename, $save_content, $sage); | |
96 | 101 | |
97 | 102 | if($content ne ""){ |
98 | 103 | $wiki->redirect($pagename, $artno); |
@@ -108,6 +113,42 @@ sub do_action { | ||
108 | 113 | } |
109 | 114 | } |
110 | 115 | #-------------------------------------------------------------------------- |
116 | + # 差分確認処理 | |
117 | + } elsif($cgi->param("diff") ne ""){ | |
118 | + if($wiki->config('page_max') ne '' && $wiki->config('page_max') > 0){ | |
119 | + if(length($content) > $wiki->config('page_max')){ | |
120 | + return $wiki->error('ページが保存可能な最大サイズを超えています。'); | |
121 | + } | |
122 | + } | |
123 | + $time = $cgi->param("lastmodified"); | |
124 | + | |
125 | + my $mode = $wiki->get_edit_format(); | |
126 | + my $orig_source = undef; | |
127 | + if($artno eq ""){ | |
128 | + $orig_source = $wiki->convert_from_fswiki($wiki->get_page($pagename), $mode); | |
129 | + } else { | |
130 | + $orig_source = $wiki->convert_from_fswiki(&read_by_part($wiki->get_page($pagename), $artno), $mode); | |
131 | + } | |
132 | + my $your_source = $content; | |
133 | + $your_source =~ s/\r\n/\n/g; | |
134 | + $your_source =~ s/\r/\n/g; | |
135 | + | |
136 | + $buf .= qq| | |
137 | + <ul> | |
138 | + <li>追加された部分は<ins class="diff">このように</ins>表示されます。</li> | |
139 | + <li>削除された部分は<del class="diff">このように</del>表示されます。</li> | |
140 | + </ul> | |
141 | + |; | |
142 | + | |
143 | + if($orig_source eq $your_source){ | |
144 | + $buf .= '<p class="error">差分はありません。</p>'; | |
145 | + } 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>|; | |
149 | + } | |
150 | + | |
151 | + #-------------------------------------------------------------------------- | |
111 | 152 | # プレビュー処理 |
112 | 153 | } elsif($cgi->param("preview") ne ""){ |
113 | 154 | if($wiki->config('page_max') ne '' && $wiki->config('page_max') > 0){ |
@@ -136,7 +177,7 @@ sub do_action { | ||
136 | 177 | if($artno eq ""){ |
137 | 178 | $content = $wiki->get_page($pagename); |
138 | 179 | } else { |
139 | - $content = &read_by_part($wiki->get_page($pagename),$artno); | |
180 | + $content = &read_by_part($wiki->get_page($pagename), $artno); | |
140 | 181 | } |
141 | 182 | } elsif($template ne ""){ |
142 | 183 | #テンプレートを指定された場合 |
@@ -152,14 +193,14 @@ sub do_action { | ||
152 | 193 | |
153 | 194 | $tmpl->param({SCRIPT_NAME => $wiki->create_url(), |
154 | 195 | PAGE_NAME => $pagename, |
155 | - CONTENT => $wiki->convert_from_fswiki($content,$format), | |
196 | + CONTENT => $wiki->convert_from_fswiki($content, $format), | |
156 | 197 | LAST_MODIFIED => $time, |
157 | 198 | ACTION => 'EDIT', |
158 | 199 | EXISTS_PAGE => $wiki->page_exists($pagename), |
159 | 200 | SAGE => $sage}); |
160 | 201 | |
161 | 202 | if($artno ne ""){ |
162 | - $tmpl->param(OPTIONAL_PARAMS=>[{NAME=>'artno',VALUE=>$artno}]); | |
203 | + $tmpl->param(OPTIONAL_PARAMS=>[{NAME=>'artno', VALUE=>$artno}]); | |
163 | 204 | } |
164 | 205 | |
165 | 206 | $buf .= $tmpl->output(); |
@@ -10,6 +10,7 @@ | ||
10 | 10 | ><label for="sage">タイムスタンプを更新しない</label> |
11 | 11 | <!--/TMPL_IF--> |
12 | 12 | <input type="submit" name="save" value=" 保 存 "> |
13 | + <input type="submit" name="diff" value="差分を確認"> | |
13 | 14 | <input type="submit" name="preview" value="プレビュー"> |
14 | 15 | <input type="hidden" name="action" value="<!--TMPL_VAR NAME="ACTION"-->"> |
15 | 16 | <input type="hidden" name="lastmodified" value="<!--TMPL_VAR NAME="LAST_MODIFIED"-->"> |