OSDN Git Service

コンフリクト時に差分を表示するようにした。
authortakezoe <takezoe@users.osdn.me>
Tue, 26 Jul 2011 23:04:31 +0000 (23:04 +0000)
committertakezoe <takezoe@users.osdn.me>
Tue, 26 Jul 2011 23:04:31 +0000 (23:04 +0000)
plugin/core/Diff.pm
plugin/core/EditPage.pm

index 9963e68..c3faea3 100644 (file)
@@ -226,19 +226,25 @@ sub get_diff_html {
        $source1 = $wiki->convert_from_fswiki($source1, $format);
        $source2 = $wiki->convert_from_fswiki($source2, $format);
        
-       my $diff_text = "";
-=pod
-       my @msg1 = split(/\n/,$source1);
-       return "¥Ú¡¼¥¸¤¬Â礭¤¹¤®¤ë¤¿¤áº¹Ê¬¤òɽ¼¨¤Ç¤­¤Þ¤»¤ó¡£" if($#msg1 >= 999);
-       my @msg2 = split(/\n/,$source2);
-       return "¥Ú¡¼¥¸¤¬Â礭¤¹¤®¤ë¤¿¤áº¹Ê¬¤òɽ¼¨¤Ç¤­¤Þ¤»¤ó¡£" if($#msg2 >= 999);
-=cut
+       return (&_get_diff_html($source1, $source2), $source2 ne "");
+}
+
+#==============================================================================
+# º¹Ê¬HTML¤òÀ¸À®¤¹¤ë´Ø¿ô
+#==============================================================================
+sub _get_diff_html {
+       my $self = shift;
+       my $source1 = shift;
+       my $source2 = shift;
+       
        my @msg1 = _str_jfold($source1, 1);
        my @msg2 = _str_jfold($source2, 1);
        
        my $msgrefA = \@msg2;
        my $msgrefB = \@msg1;
        
+       my $diff_text = "";
+       
        traverse_sequences($msgrefA, $msgrefB,
                {
                        MATCH => sub {
@@ -255,7 +261,7 @@ sub get_diff_html {
                        }
                });
        
-       return ($diff_text, $source2 ne "");
+       return $diff_text;
 }
 
 #==============================================================================
index bc1d3f0..381d783 100644 (file)
@@ -5,6 +5,7 @@
 ###############################################################################
 package plugin::core::EditPage;
 use strict;
+use plugin::core::Diff;
 #==============================================================================
 # ¥³¥ó¥¹¥È¥é¥¯¥¿
 #==============================================================================
@@ -46,36 +47,55 @@ sub do_action {
        #--------------------------------------------------------------------------
        # Êݸ½èÍý
        if($cgi->param("save") ne ""){
-               if($wiki->page_exists($pagename)){
-                       if($cgi->param("lastmodified") != $time){
-                               return $wiki->error("¥Ú¡¼¥¸¤Ï´û¤ËÊ̤Υ桼¥¶¤Ë¤è¤Ã¤Æ¹¹¿·¤µ¤ì¤Æ¤¤¤Þ¤¹¡£");
-                       }
-               }
-               #my $save_content = $content;
-               my $mode = $wiki->get_edit_format();
-               my $save_content = $wiki->convert_to_fswiki($content,$mode);
+               if($wiki->page_exists($pagename) && $cgi->param("lastmodified") != $time){
+                       $buf .= "<p><span class=\"error\">¥Ú¡¼¥¸¤Ï´û¤ËÊ̤Υ桼¥¶¤Ë¤è¤Ã¤Æ¹¹¿·¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</span></p>";
+                       
+                       my $mode = $wiki->get_edit_format();
+                       my $orig_source = $wiki->convert_from_fswiki($wiki->get_page($pagename), $mode);
+                       my $your_source = $content;
+                       $your_source =~ s/\r\n/\n/g;
+                       $your_source =~ s/\r/\n/g;
+                       
+                       my $diff = plugin::core::Diff::_get_diff_html($wiki, $orig_source, $your_source);
+                       $diff =~ s/\n/<br>/g;
+                       
+                       $buf .= qq|
+                               <ul>
+                                 <li>Äɲ䵤줿Éôʬ¤Ï<ins class="diff">¤³¤Î¤è¤¦¤Ë</ins>ɽ¼¨¤µ¤ì¤Þ¤¹¡£</li>
+                                 <li>ºï½ü¤µ¤ì¤¿Éôʬ¤Ï<del class="diff">¤³¤Î¤è¤¦¤Ë</del>ɽ¼¨¤µ¤ì¤Þ¤¹¡£</li>
+                               </ul>
+                               <div class="diff">$diff</div>
+                       |;
+                       
+                       $content = $orig_source;
+                       
+               } else {
+                       #my $save_content = $content;
+                       my $mode = $wiki->get_edit_format();
+                       my $save_content = $wiki->convert_to_fswiki($content,$mode);
 
-               # ¥Ñ¡¼¥ÈÊÔ½¸¤Î¾ì¹ç
-               if($artno ne ""){
-                       $save_content = &make_save_source($wiki->get_page($pagename),$save_content,$artno,$wiki);
-               }
-               # FrontPage¤Ïºï½üÉÔ²Ä
-               if($pagename eq $wiki->config("frontpage") && $save_content eq ""){
-                       $buf = "<b>".&Util::escapeHTML($wiki->config("frontpage"))."¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£</b>\n";
+                       # ¥Ñ¡¼¥ÈÊÔ½¸¤Î¾ì¹ç
+                       if($artno ne ""){
+                               $save_content = &make_save_source($wiki->get_page($pagename),$save_content,$artno,$wiki);
+                       }
+                       # FrontPage¤Ïºï½üÉÔ²Ä
+                       if($pagename eq $wiki->config("frontpage") && $save_content eq ""){
+                               $buf = "<b>".&Util::escapeHTML($wiki->config("frontpage"))."¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£</b>\n";
 
-               # ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï½èÍý¤ò¼Â¹Ô¤·¤Æ¥á¥Ã¥»¡¼¥¸¤òÊÖµÑ
-               } else {
-                       $wiki->save_page($pagename,$save_content,$sage);
-                       
-                       if($content ne ""){
-                               $wiki->redirect($pagename);
+                       # ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï½èÍý¤ò¼Â¹Ô¤·¤Æ¥á¥Ã¥»¡¼¥¸¤òÊÖµÑ
                        } else {
-                               if($artno eq ""){
-                                       $wiki->set_title($pagename."¤òºï½ü¤·¤Þ¤·¤¿");
-                                       return Util::escapeHTML($pagename)."¤òºï½ü¤·¤Þ¤·¤¿¡£";
+                               $wiki->save_page($pagename,$save_content,$sage);
+                               
+                               if($content ne ""){
+                                       $wiki->redirect($pagename);
                                } else {
-                                       $wiki->set_title($pagename."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿");
-                                       return Util::escapeHTML($pagename)."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿¡£";
+                                       if($artno eq ""){
+                                               $wiki->set_title($pagename."¤òºï½ü¤·¤Þ¤·¤¿");
+                                               return Util::escapeHTML($pagename)."¤òºï½ü¤·¤Þ¤·¤¿¡£";
+                                       } else {
+                                               $wiki->set_title($pagename."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿");
+                                               return Util::escapeHTML($pagename)."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿¡£";
+                                       }
                                }
                        }
                }