OSDN Git Service

編集画面でコンフリクトした場合もjsdifflibの差分表示に対応。
authortakezoe <takezoe@users.osdn.me>
Mon, 30 Apr 2012 14:18:00 +0000 (14:18 +0000)
committertakezoe <takezoe@users.osdn.me>
Mon, 30 Apr 2012 14:18:00 +0000 (14:18 +0000)
plugin/core/Diff.pm
plugin/core/EditPage.pm

index e892043..734360f 100644 (file)
@@ -166,9 +166,34 @@ sub show_diff {
        my $to   = shift;
        
        $wiki->set_title("$page¤ÎÊѹ¹ÅÀ");
-       my ($diff, $rollback) = $self->get_diff_html($wiki,$page, $from, $to);
+       my ($source1, $source2) = $self->get_diff_sources($wiki, $page, $from, $to);
        
        my $theme_uri = $wiki->config('theme_uri');
+       my $buf = _get_diff_html($wiki, $source1, $source2);
+
+       if($wiki->can_modify_page($page) && $wiki->get_CGI->param('diff') eq ''){
+               $buf .= qq|
+                       <form action="@{[$wiki->create_url()]}" method="POST">
+                               <input type="submit" value="¤³¤Î¥Ð¡¼¥¸¥ç¥ó¤ËÌ᤹"/>
+                               <input type="hidden" name="action" value="DIFF"/>
+                               <input type="hidden" name="page" value="@{[Util::escapeHTML($page)]}"/>
+                               <input type="hidden" name="rollback" value="@{[Util::escapeHTML($to)]}"/>
+                       </form>
+               |;
+       }
+       
+       return $buf;
+}
+
+#==============================================================================
+# jsdifflib¤ò»È¤Ã¤Æº¹Ê¬¤Îɽ¼¨¤ò¹Ô¤¦HTML¤ò¼èÆÀ
+#==============================================================================
+sub _get_diff_html {
+       my $wiki = shift;
+       my $source1 = shift;
+       my $source2 = shift;
+
+       my $theme_uri = $wiki->config('theme_uri');
        my $buf = qq|
 <script type="text/javascript" src="${theme_uri}/resources/jsdifflib/difflib.js"></script>
 <script type="text/javascript" src="${theme_uri}/resources/jsdifflib/diffview.js"></script>
@@ -202,25 +227,15 @@ function diffUsingJS(type) {
     }));
 }
 </script>
-$diff
+<input id="newText"  type="hidden" value="@{[Util::escapeHTML($source1)]}">
+<input id="baseText" type="hidden" value="@{[Util::escapeHTML($source2)]}">
 <input type="checkbox" id="viewtype" onclick="diffUsingJS(this.checked ? 0 : 1)"><label for="viewtype">¥µ¥¤¥É¥Ð¥¤¥µ¥¤¥É¤Çɽ¼¨</label>
-<div id="diffoutputdiv"/>
+<div id="diffoutputdiv"></div>
 <script type="text/javascript">
   diffUsingJS(1);
 </script>
        |;
        
-       if($wiki->can_modify_page($page) && $rollback && $wiki->get_CGI->param('diff') eq ''){
-               $buf .= qq|
-                       <form action="@{[$wiki->create_url()]}" method="POST">
-                               <input type="submit" value="¤³¤Î¥Ð¡¼¥¸¥ç¥ó¤ËÌ᤹"/>
-                               <input type="hidden" name="action" value="DIFF"/>
-                               <input type="hidden" name="page" value="@{[Util::escapeHTML($page)]}"/>
-                               <input type="hidden" name="rollback" value="@{[Util::escapeHTML($to)]}"/>
-                       </form>
-               |;
-       }
-       
        return $buf;
 }
 
@@ -263,9 +278,9 @@ sub get_diff_text {
 }
 
 #==============================================================================
-# º¹Ê¬Ê¸»úÎó¤òɽ¼¨ÍÑHTML¤È¤·¤Æ¼èÆÀ
+# º¹Ê¬É½¼¨ÍѤΥ½¡¼¥¹¤ò¼èÆÀ
 #==============================================================================
-sub get_diff_html {
+sub get_diff_sources {
        my $self = shift;
        my $wiki = shift;
        my $page = shift;
@@ -290,8 +305,7 @@ sub get_diff_html {
        $source1 = $wiki->convert_from_fswiki($source1, $format);
        $source2 = $wiki->convert_from_fswiki($source2, $format);
        
-       return '<input id="newText" type="hidden" value="'.Util::escapeHTML($source1).'">'.
-              '<input id="baseText" type="hidden" value="'.Util::escapeHTML($source2).'">';
+       return ($source1, $source2);
 }
 
 #==============================================================================
index 4cc6f5e..5a37e28 100644 (file)
@@ -53,7 +53,7 @@ sub do_action {
                        }
                }
                if($wiki->page_exists($pagename) && $cgi->param("lastmodified") != $time){
-                       $buf .= "<p><span class=\"error\">¥Ú¡¼¥¸¤Ï´û¤ËÊ̤Υ桼¥¶¤Ë¤è¤Ã¤Æ¹¹¿·¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</span></p>";
+                       $buf .= "<p><span class=\"error\">¥Ú¡¼¥¸¤Ï´û¤ËÊ̤Υ桼¥¶¤Ë¤è¤Ã¤Æ¹¹¿·¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ºÇ¿·ÈǤȤκ¹Ê¬¤ò³Îǧ¤·¤ÆºÆÅÙÊÔ½¸¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£</span></p>";
                        
                        my $mode = $wiki->get_edit_format();
                        my $orig_source = undef;
@@ -66,19 +66,8 @@ sub do_action {
                        $your_source =~ s/\r\n/\n/g;
                        $your_source =~ s/\r/\n/g;
                        
-                       my $diff = plugin::core::Diff::_get_diff_html($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>
-                               <p>
-                                 ºÇ¿·ÈǤȤκ¹Ê¬¤ò³Îǧ¤·¤ÆºÆÅÙÊÔ½¸¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡§
-                               </p>
-                               <div class="diff">$diff</div>
-                       |;
+                       my $diff = plugin::core::Diff::_get_diff_html($wiki, $orig_source, $your_source);
+                       $buf .= $diff."<br>";
                        
                        $content = $orig_source;
                        
@@ -133,19 +122,11 @@ sub do_action {
                $your_source =~ s/\r\n/\n/g;
                $your_source =~ s/\r/\n/g;
                
-               $buf .= qq|
-                       <ul>
-                         <li>Äɲ䵤줿Éôʬ¤Ï<ins class="diff">¤³¤Î¤è¤¦¤Ë</ins>ɽ¼¨¤µ¤ì¤Þ¤¹¡£</li>
-                         <li>ºï½ü¤µ¤ì¤¿Éôʬ¤Ï<del class="diff">¤³¤Î¤è¤¦¤Ë</del>ɽ¼¨¤µ¤ì¤Þ¤¹¡£</li>
-                       </ul>
-               |;
-                       
                if($orig_source eq $your_source){
                        $buf .= '<p class="error">º¹Ê¬¤Ï¤¢¤ê¤Þ¤»¤ó¡£</p>';
                } else {
-                       my $diff = plugin::core::Diff::_get_diff_html($your_source, $orig_source);
-                       $diff =~ s/\n/<br>/g;
-                       $buf .= qq|<div class="diff">$diff</div>|;
+                       my $diff = plugin::core::Diff::_get_diff_html($wiki, $your_source, $orig_source);
+                       $buf .= $diff."<br>";
                }
                
        #--------------------------------------------------------------------------