管理 | 差分 || 新規作成 || カテゴリ一覧 | ページ一覧 | 更新履歴 | 差分履歴 || アンテナ || PUT || more≫ ≫omit
shortcut: FrontPage || WikiLab | StoreRoom/最新 | 日々の泡 | むず痒いパソコン日記/最新 || HelpPage ||[edit]
category: GuestPage/

GuestPage/ぜ/差分表示 - 差分の見せ方を変更します。

LastModified : Wed Jan 19 19:40:59 2005
[管理]

差分の見せ方を変更します。

BeginnerGuidanceBeginnerGuidance 追加分テキストのハイライト表示

[TOP↑] [管理]

「差分」ボタンをクリックすると

グローバル変数

[TOP↑] [管理]
my $diffmode = 0;

sub do_read() 内の変更

[TOP↑] [管理]
 sub do_read {
    &print_header($form{mypage});
     if ( $form{mypage} eq $RecentSearches ) {
         print "<p>$resource{recentsearchwords}</p>";
     }
+    if ( &is_editable($form{mypage}) ) {
+        &open_diff;
+        print &text_to_html($diffbase{$form{mypage}}, toc=>1, diff=>1 );
+        &close_diff;
+    } else {
         &print_content($database{$form{mypage}});
+    }
     &print_footer($form{mypage});
 }

sub text_to_html() 内の変更

[TOP↑] [管理]

リスト変数 @deleted と if 文を追加。

 sub text_to_html {
     my ($txt, %option) = @_;
     my (@txt) = split(/\r?\n/, $txt);
     my (@toc);
+    my (@deleted);
     my $verbatim;
     my $tocnum = 0;
     my (@saved, @result);
     unshift(@saved, "</p>");
     push(@result, "<p>");

     foreach (@txt) {

         chomp;
+        if( $option{diff} ) {
+            s/^(.)//;
+            if ( $1 eq '+' ) {
+                $diffmode = 1;
+            } elsif ( $1 eq '-' ) {
+                push(@deleted, &escape($_) . "<br>" ) if ( $_ );
+                next;
+            } else {
+                $diffmode = 0;
+            }
+        }

YukiWiki 2.1 ベースの場合は、verbatim-hard の関数を diff_escape に割り当てる。

               $verbatim = { func => \&diff_escape, done => '||<', class => 'verbatim-hard' };

pre 領域の処理。

        } elsif (/^(\s+.*)$/) {
            &back_push('pre', 1, \@saved, \@result);
#           push(@result, &escape($1)); # Not &inline, but &escape
            push(@result, &diff_escape($1)); # Not &inline, but &diff_escape

後ろの方に次の if 文を追加。

   push(@result, splice(@saved));

+  if ( @deleted ) {
+      @deleted = ( '<div class="del" style="display:none">',
+  	     '<hr><div class="diff">',
+  	     "<h2>$resource{diffdeleted}</h2>",
+  	     @deleted, '</div></div>');
+   }

   if ($option{toc}) {
       # Convert @toc (table of contents) to HTML.

末尾に @deleted を追加。

!        return join("\n", @tocresult, @result, @deleted);
     } else {
!        return join("\n", @result, @deleted);
     }
 }

sub print_header() 内の変更

[TOP↑] [管理]

html のヘッダー部分に下のスクリプトを追加します。

<script type="text/javascript">
<!--
// courtesy of Takabayashi-san
// ref. http://namazu.org/~satoru/blog/archives/000007.html
var diffmode = 0;
function toggle_diff () {
  diffmode = ( diffmode ? 0 : 1 );
  var s = document.getElementsByTagName('span');
  for ( i=0; i< s.length; i++ ) {
    if ( s[i].className == 'a' ) {
      s[i].style.backgroundColor = ( diffmode ? "#fcc" : "");
    }
  }
  var d = document.getElementsByTagName('div');
  for ( i=0; i< d.length; i++ ) {
    if ( d[i].className == 'del' ) {
      d[i].style.display = ( diffmode ? "block" : "none");
    }
  }
  return true;
}
//-->
</script>

sub inline() 内の変更

[TOP↑] [管理]

末尾に次のif文を追加。

+    if ( $diffmode ) {
+        return qq(<span class="a">$line</span>);
+    } else {
         return $line;
+    }
 }

sub diff_escape() を追加

[TOP↑] [管理]
sub diff_escape {
    my ($line) = @_;
    $line = &escape($line);
    if ( $diffmode ) {
        return qq(<span class="a">$line</span>);
    } else {
        return $line;
    }
}

リソースファイルの編集

[TOP↑] [管理]

resources.txt に次の行を追加。

diffdeleted=最後の更新で削除された行
shortcut: FrontPage || WikiLab | StoreRoom/最新 | 日々の泡 | むず痒いパソコン日記/最新 || HelpPage || [edit]
select css: default | sakura | mono | greenheck | snow | NN4.x用(多分) || LinuZau!! | VikiWiki!? || others |

管理 | 差分 || 新規作成 || カテゴリ一覧 | ページ一覧 | 更新履歴 | 差分履歴 || PUT