[ 新規 ] [ 検索 | 一覧 | FrontPage ] [ 履歴 (RSS) | 差分履歴 (RSS) ] [ ログイン ]
【PR】Amazon | SL-C3000 | SL-C1000(3/18発売!) | SL-C860 | SL-6000W | SL-6000L | SL-6000N

WalWiki/カスタマイズ/同一ページ内複数コメント

差分表示


編集前の状態に戻します。
*[multi comment]
グローバル変数を使ってるのがちょっと気にくわないんだけどこれ以上スマートな実装を思いつかなかった…
もっとスマートな実装方法があれば教えて下さい。
[[こんな感じ 複数コメントテスト]]に動作します。

**グローバル変数定義
-グローバル変数定義に下記の変数を追加してついでに-1に初期化

 my $comment_no = -1;

**inline()内の変更
-inline() 内で $embed_comment、$embed_rcomment に対しては %link_cache を使用しないように変更

     $line =~ s!
                 (
                     ((mailto|http|https|ftp):([^\x00-\x20()<>\x7F-\xFF])*)  # Direct http://...
                         |
                     ($bracket_name)             # [[likethis]], [[#comment]], [[Friend:remotelink]]
                         |
                     ($interwiki_definition)     # [[Friend http://somewhere/?q=sjis($1)]]
                         |
                     ($wiki_name)                # LocalLinkLikeThis
                 )
             !
 #               &make_link($1)                  # Walrus del [link cache]
 #                (defined($link_cache{$1})) ? $link_cache{$1} : (length($_ = &make_link($1)) < 1024) ? ($link_cache{$1} = $_) : $_ # Walrus add [link cache] # yakty del [multi comment]
                 # yakty add [multi comment] start
                 (defined($link_cache{$1})) ? $link_cache{$1} :
                 ($1 eq $embed_comment or $1 eq $embed_rcomment) ? &make_link($1) :
                 (length($_ = &make_link($1)) < 1024) ? ($link_cache{$1} = $_) : $_
                 # yakty add [multi comment] end
             !gex;

**embedded_to_html()内の変更
-embedded_to_html() で コメントの場合には $comment_no をインクリメントし、フォームのhidden属性に name="mycmtno" value="$comment_no" を追加

         my $lastmodified = &get_info($form{mypage}, $info_LastModified);
         $comment_no++; # yakty add [multi comment]
         return <<"EOD";
 <form action="$url_cgi" method="post">
     <input type="hidden" name="mycmd" value="comment">
     <input type="hidden" name="mypage" value="$escapedmypage">
     <input type="hidden" name="myLastModified" value="$lastmodified">
     <input type="hidden" name="mytouch" value="on">
     <input type="hidden" name="mycmtno" value="$comment_no"><!-- yakty add [multi comment] -->
     $resource{yourname}
     <input type="text" name="myname" value="" size="10">
     <input type="text" name="mymsg" value="" size="80">
     <input type="submit" value="$resource{commentbutton}">
 </form>
 EOD

**do_comment()内の変更
-do_comment() で $form{mycmtno} 分だけ、コメントのブロックを読み飛ばしてから
追加されたコメントを付加
--WalWiki2.0.5.wal.4.2対応(似たような正規表現を使ってるだけ…処理は全然違うし…(苦笑))
--WalWiki2.0.5.wal.4.3対応

 sub do_comment {
     my ($content) = $database{$form{mypage}};
     my $datestr = &get_now;
     my $namestr = $form{myname} ? " ''[[$form{myname}]]'' : " : " ";
     # yakty del [multi comment] start
     #if ($content =~ s/(^|\n)(\Q$embed_comment\E)/- $datestr$namestr$form{mymsg}\n$1$2/) {
     #    ;
     #} else {
     #    $content =~ s/(^|\n)(\Q$embed_rcomment\E)/$1$2\n- $datestr$namestr$form{mymsg}/;
     #}
     # yakty del [multi comment] end
     # yakty add [multi comment] start
     my $cmtno = 0 + $form{mycmtno};
     my $contenthead = "";
     for(my $i=0; $i<=$cmtno; $i++){
         if($content =~ /(^|\n)((\Q$embed_comment\E)|(\Q$embed_rcomment\E))/){
             $contenthead .= $`;
             $content = $';
             my $matchstr = $&;
             if($i == $cmtno){
                 if ($matchstr =~ s/(\Q$embed_comment\E)/- $datestr$namestr$form{mymsg}\n$1/) {
                     ;
                 } else {
                     $matchstr =~ s/(\Q$embed_rcomment\E)/$1\n- $datestr$namestr$form{mymsg}/;
                 }
             }
             $contenthead .= $matchstr;
         }
     }
     $content = $contenthead . $content;
     # yakty add [multi comment] end


04507