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

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

編集

[multi comment]

編集

グローバル変数を使ってるのがちょっと気にくわないんだけどこれ以上スマートな実装を思いつかなかった…
もっとスマートな実装方法があれば教えて下さい。
こんな感じに動作します。

グローバル変数定義

編集
my $comment_no = -1;

inline()内の変更

編集
    $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()内の変更

編集
        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()内の変更

編集
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

04479