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

WalWiki/カスタマイズ/検索キーワードハイライト表示

編集

検索に使用したキーワードをハイライト表示します。

[highlight search keywords]

編集

CSSに下記のような定義を追加しておいて下さい。

em.keyword {
    font-weight: bold;
    background-color: yellow;
}

関連するカスタマイズ

編集

グローバル変数定義

編集

検索キーワードをクッキーで保持しています。
キーワードを覚えておく時間を設定します。

my $highlightexpires = '+10m';                               # yakty add [highlight search keywords]

日本語を正しくマッチさせるためのEUC文字の定義です。(参考:Perlメモ)

my $EUC_PRE   = qr{(?<!\x8F)};
my $EUC_POST  = qr{
    (?=
        (?:[\xA1-\xFE][\xA1-\xFE])* # JIS X 0208 が 0文字以上続いて
        (?:[\x00-\x7F\x8E\x8F]|\z)  # ASCII, SS2, SS3 または終端
    )
}x;

init_form()内の変更

編集
    $form{mymsg} = &code_convert(\$form{mymsg}, $kanjicode);
    $form{myname} = &code_convert(\$form{myname}, $kanjicode);
    # yakty add [highlight search keywords] start
    if($form{mycmd} eq 'search'){
        &set_cookie('mysearchwords', $form{mymsg}, expires => $highlightexpires);
    }
    # yakty add [highlight search keywords] end

print_content()内の変更

編集
sub print_content {
    my ($rawcontent) = @_;
#   print &text_to_html($rawcontent, toc=>1);               # Walrus add [part edit]
    #print &text_to_html($rawcontent, toc=>1, partinfo=>1);  # Walrus add [part edit]     # yakty del [highlight search keywords]
    # yakty add [highlight search keywords] start
    my $content = &text_to_html($rawcontent, toc=>1, partinfo=>1);  # Walrus add [part edit]
    $_ = cookie(-name => 'mysearchwords');
    if($_){
        s/(?:\x0D\x0A|[\x0D\x0A])?$/ /;
        my @search_words = map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_} (/("[^"]*(?:""[^"]*)*"|[^ ]*) /g);
        #@search_words = grep { length($_) > 2 } @search_words;
        if(@search_words){
            @search_words = map { "(\Q@{[&escape($_)]}\E)" } @search_words;
            my $highlightkeywords = join("|", @search_words);
            #$content =~ s|($highlightkeywords)(?![^<]*>)|<em class="keyword">$1</em>|gs;
            #$content =~ s|\G((?:$EUC_CHAR)*?)($highlightkeywords)(?![^<]*>)|$1<em class="keyword">$2</em>|gs;
            $content =~ s|$EUC_PRE($highlightkeywords)$EUC_POST(?![^<]*>)|<em class="keyword">$1</em>|gs;
        }
    }
    print $content;
    # yakty add [highlight search keywords] end
}

do_search()内の変更

編集
    $_ = $form{mymsg};
    s/(?:\x0D\x0A|[\x0D\x0A])?$/ /;
    my @search_words = map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_} (/("[^"]*(?:""[^"]*)*"|[^ ]*) /g);
    # yakty add [highlight search keywords] start
    #my @highlight_words = grep { length($_) > 2 } @search_words;
    my @highlight_words = @search_words;
    if(@highlight_words){
        @highlight_words = map { "(\Q@{[&escape($_)]}\E)" } @highlight_words;
    }
    my $highlightkeywords = join("|", @highlight_words);
    # yakty add [highlight search keywords] end
    if (@search_words) {
            next unless ($list);
            print "<ul>\n" unless ($counter);
            #$list =~ s|($highlightkeywords)(?![^<]*>)|<em class="keyword">$1</em>|go if(@highlight_words);                       # yakty add [highlight search keywords]
            $list =~ s|\G((?:$EUC_CHAR)*?)($highlightkeywords)(?![^<]*>)|$1<em class="keyword">$2</em>|go if(@highlight_words);   # yakty add [highlight search keywords]
            $list = "<li><b>".&make_link($page)."</b>$list</li>\n";
            &code_convert(\$list, $kanjicode);
            print $list;
            $counter++;

02983