OSDN Git Service

編集画面で差分を確認できるようにした。
authortakezoe <takezoe@users.osdn.me>
Sun, 18 Sep 2011 14:33:56 +0000 (14:33 +0000)
committertakezoe <takezoe@users.osdn.me>
Sun, 18 Sep 2011 14:33:56 +0000 (14:33 +0000)
plugin/core/EditPage.pm
tmpl/editform.tmpl

index e33d217..4cc6f5e 100644 (file)
@@ -56,7 +56,12 @@ sub do_action {
                        $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 $orig_source = undef;
+                       if($artno eq ""){
+                               $orig_source = $wiki->convert_from_fswiki($wiki->get_page($pagename), $mode);
+                       } else {
+                               $orig_source = $wiki->convert_from_fswiki(&read_by_part($wiki->get_page($pagename), $artno), $mode);
+                       }
                        my $your_source = $content;
                        $your_source =~ s/\r\n/\n/g;
                        $your_source =~ s/\r/\n/g;
@@ -70,7 +75,7 @@ sub do_action {
                                  <li>ºï½ü¤µ¤ì¤¿Éôʬ¤Ï<del class="diff">¤³¤Î¤è¤¦¤Ë</del>ɽ¼¨¤µ¤ì¤Þ¤¹¡£</li>
                                </ul>
                                <p>
-                                 º¹Ê¬¤ò³Îǧ¤·¤ÆºÆÅÙÊÔ½¸¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡§
+                                 ºÇ¿·ÈǤȤκ¹Ê¬¤ò³Îǧ¤·¤ÆºÆÅÙÊÔ½¸¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡§
                                </p>
                                <div class="diff">$diff</div>
                        |;
@@ -84,7 +89,7 @@ sub do_action {
 
                        # ¥Ñ¡¼¥ÈÊÔ½¸¤Î¾ì¹ç
                        if($artno ne ""){
-                               $save_content = &make_save_source($wiki->get_page($pagename),$save_content,$artno,$wiki);
+                               $save_content = &make_save_source($wiki->get_page($pagename), $save_content, $artno, $wiki);
                        }
                        # FrontPage¤Ïºï½üÉÔ²Ä
                        if($pagename eq $wiki->config("frontpage") && $save_content eq ""){
@@ -92,7 +97,7 @@ sub do_action {
 
                        # ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï½èÍý¤ò¼Â¹Ô¤·¤Æ¥á¥Ã¥»¡¼¥¸¤òÊÖµÑ
                        } else {
-                               $wiki->save_page($pagename,$save_content,$sage);
+                               $wiki->save_page($pagename, $save_content, $sage);
                                
                                if($content ne ""){
                                        $wiki->redirect($pagename, $artno);
@@ -108,6 +113,42 @@ sub do_action {
                        }
                }
        #--------------------------------------------------------------------------
+       # º¹Ê¬³Îǧ½èÍý
+       } elsif($cgi->param("diff") ne ""){
+               if($wiki->config('page_max') ne '' && $wiki->config('page_max') > 0){
+                       if(length($content) > $wiki->config('page_max')){
+                               return $wiki->error('¥Ú¡¼¥¸¤¬Êݸ²Äǽ¤ÊºÇÂ祵¥¤¥º¤òĶ¤¨¤Æ¤¤¤Þ¤¹¡£');
+                       }
+               }
+               $time = $cgi->param("lastmodified");
+               
+               my $mode = $wiki->get_edit_format();
+               my $orig_source = undef;
+               if($artno eq ""){
+                       $orig_source = $wiki->convert_from_fswiki($wiki->get_page($pagename), $mode);
+               } else {
+                       $orig_source = $wiki->convert_from_fswiki(&read_by_part($wiki->get_page($pagename), $artno), $mode);
+               }
+               my $your_source = $content;
+               $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>|;
+               }
+               
+       #--------------------------------------------------------------------------
        # ¥×¥ì¥Ó¥å¡¼½èÍý
        } elsif($cgi->param("preview") ne ""){
                if($wiki->config('page_max') ne '' && $wiki->config('page_max') > 0){
@@ -136,7 +177,7 @@ sub do_action {
                if($artno eq ""){
                        $content = $wiki->get_page($pagename);
                } else {
-                       $content = &read_by_part($wiki->get_page($pagename),$artno);
+                       $content = &read_by_part($wiki->get_page($pagename), $artno);
                }
        } elsif($template ne ""){
                #¥Æ¥ó¥×¥ì¡¼¥È¤ò»ØÄꤵ¤ì¤¿¾ì¹ç
@@ -152,14 +193,14 @@ sub do_action {
 
        $tmpl->param({SCRIPT_NAME   => $wiki->create_url(),
                                  PAGE_NAME     => $pagename,
-                                 CONTENT       => $wiki->convert_from_fswiki($content,$format),
+                                 CONTENT       => $wiki->convert_from_fswiki($content, $format),
                                  LAST_MODIFIED => $time,
                                  ACTION        => 'EDIT',
                                  EXISTS_PAGE   => $wiki->page_exists($pagename),
                                  SAGE          => $sage});
        
        if($artno ne ""){
-               $tmpl->param(OPTIONAL_PARAMS=>[{NAME=>'artno',VALUE=>$artno}]);
+               $tmpl->param(OPTIONAL_PARAMS=>[{NAME=>'artno', VALUE=>$artno}]);
        }
 
        $buf .= $tmpl->output();
index beb9243..11fec55 100644 (file)
@@ -10,6 +10,7 @@
     ><label for="sage">¥¿¥¤¥à¥¹¥¿¥ó¥×¤ò¹¹¿·¤·¤Ê¤¤</label>
     <!--/TMPL_IF-->
     <input type="submit"   name="save"         value=" Êݠ¸ ">
+    <input type="submit"   name="diff"         value="º¹Ê¬¤ò³Îǧ">
     <input type="submit"   name="preview"      value="¥×¥ì¥Ó¥å¡¼">
     <input type="hidden"   name="action"       value="<!--TMPL_VAR NAME="ACTION"-->">
     <input type="hidden"   name="lastmodified" value="<!--TMPL_VAR NAME="LAST_MODIFIED"-->">