Highlighting Text fin red rom DB in view

Can anyone think of an easier way to do this?

How about using the 'highlight' helper method in your view instead?

I was just looking into Text::HTMLHighlighter....is that what you mean?

Aaron Chase wrote:

I was thinking about the one in ActionView::Helpers::TextHelper. The description is as follows:

highlight(text, phrases, highlighter = '<strong class="highlight">\1</

')

Highlights one or more phrases everywhere in text by inserting it into a highlighter string. The highlighter can be specialized by passing highlighter as a single-quoted string with \1 where the phrase is to be inserted (defaults to '<strong class="highlight">\1</strong>')

hmmmm....that looks like it might work...thanks

How do I include that Rails application. I tried just putting this in my view and it does nothing:

highlight('this is sample text', 'text')

How does rail know about it..maybe I should requiring action_view ?

Aaron Chase wrote:

It should be available in your view. I just tried adding this to my view and it worked as advertised:

<%= highlight("this is sample text", "text") %>

I'm using Rails 2.0.2.

sorry for that...I didn't even try it with the <%= at the beginning.....it does work for me too now....thanks for the help on this.

The only issue I have is that it makes the text strong bold....what I need is to make it highlighted in red or other colors....I don't see anything in the doco to do that.

I installed Text::HTMLHighlighter and all the tests ran successfully but I can't seem to figure out how to get it to work in my view. There is an .rb file that I'm supposed to call somehow and I can't figure you how to do it. The directions seem to make me think Text::HTMLHighlighter is made to work with other ruby files and not specifically for Rails...not sure...

jackster

Aaron Chase wrote:

As stated in the docs, you can specialize the highlighter by providing a value for the 3rd argument. The default is to highlight using <strong> text, but you can get the effect you want by doing something like:

<%= highlight('this is sample text', 'text', '<span class='highlight"> \1</span>') %>

and adding this to your CSS file:

.highlight {color: red}

Burning the candle at both ends, I see from the timestamp of your last message :slight_smile:

You've helped me alot, Aaron...and thank you for that.

As you have pointed out...defining highlight in my CSS works perfectly. In fact, I found that as soon as I defined it, the following statement works:

<%= highlight('this is simple text', 'text') %>

And I didn't have to add the <span class = "highlight"> part although that worked as well.

The last question I have is what happens when I want to highlight more than one word if it appears in my variable?

For instance, I have a variable that contains a date, what I need to be able to do is highlight Thu when it's Thursday but always highlight 2008. This works to always highlight 2008:

<%= highlight(trap.datetime.to_s, '2008') %>

I was hoping I could do something like this but it doesn't work because it looks for both of them in a string:

<%= highlight(trap.datetime.to_s, 'Thu, 2008') %>

What I'm actually trying to accomplish here, is to highlight certain words in my network traps in red. For instance, if I got a trap that contained the word "BGP", I want that highlighted in red as well as if the word "Spanning-tree" is contained in the trap. This is why I was hoping to be able to specify several words to be highlighted if they exist in my variable.

thanks alot Aaron,

jackster

Aaron Chase wrote:

Specifying an array for the 2nd argument should do the trick:

<%= highlight(trap.datetime.to_s, ['Thu', '2008']) %>

You may have to add spaces to your phrase strings to prevent the highlighter from highlighting things you didn't intend. For example, I tried this

<%= highlight('foo bar foobar', ['foo', 'bar']) %>

and it highlighted the 'foobar' substring since 'foo' matched the first part of the string and 'bar' matched the last part of it. Changing the phrase array to ['foo ', 'bar '] (note the embedded whitespace) fixed it.

I can't thank you enough for your help on this...I'm up and running on this now and all is looking good.

jackster

Aaron Chase wrote:

Aaron....I wanted to run one more thing by you on this subject if you don't mind?

I am using the following command which works nicely to highlight key words in red if they are contained in my network trap:

<%= highlight(trap.desc4.to_s,['DOWN', 'COLD', 'BGP', 'RESTART', 'SPAN']) %>

Can you think of an easy way to highlight some words in red and others in another color?

I have never used a conditional if statement in a view before and don't even know if that's possible....if it was, I was thinking something like this might be the a solution:

if <%= highlight(trap.desc4.to_s,['DOWN', 'COLD', 'BGP', 'RESTART', 'SPAN']) %> else <%= highlight_blue(trap.desc4.to_s,['UP', 'HOT', 'OSPF', 'START', 'LINK']) %>

...or perhaps you might know of an easier solution which I am overlooking?

thanks for all the help

jackster

jackster the jackle wrote:

Just off the top of my head, you could write your own helper something like this:

def highlight_with_color(text, phrases, color_spec)   highlight(text, phrases, '<span style="color:#{color_spec};">\1</

')

end

and then use it in your view like this:

<%= highlight_with_color("foo bar", ["foo, bar"], "#abcdef") %>

Disclaimer: I haven't actually tried this code, but I think something like this should work. Someone in this group may also have a better suggestion...