How to use Javascript onclick functionality via Rails helpers

Hello,

I am trying to implement a functionality similar to the onclick method
of Javascript, using Rails Helpers.

I have implemented a auto complete feature for more than one field in
Rails 2.0.2 and Ruby 1.8.7. This configuration is run on Ubuntu 10.04
and yes , I know.. you might feel why Rails 2.x when we have Rails 3.x ,
it is so because of project specific purposes. I don't have much of a
choice on that ..:slight_smile: .

I am able to successfully retrieve a group specific profile pic, a group
title and a the total number of members belonging to a group based on
the given "title" as the basic search query that a user inputs in the
text field where auto complete functionality is being performed. Getting
the auto complete functionality to work for the scenario above was a
challenge in itself.

In case you aren't able to get a better understanding of what I have
implemented wrt autocomplete, kindly refer to
http://stackoverflow.com/questions/5399991/implementing-auto-complete-for-more-than-one-field-in-rails
.

Please note the name of group specific profile pic is same as that of
the group title with the exception that the pic would also have .jpg
appended to it.

I am making use of a customized auto complete method, an auto complete
plugin and also making use of Rails partials. The cusotmized auto
complete method is allowing me to modify the basic functionality to suit
my requirement.

Coming to my question, Now say if a user enters "I" in the text field as
per the auto complete feature that I have implemented, the results(for
more than one matches found(i.e. if more than one group exists which
start with an "I") on a specific search query) populated on the User
Interface would have all the following :-

- Group Specific Profile Pic(s) starting
   with name same as title, in this case
   "I%".jpg
- Group title name.
- Total number of members belonging to
   a group

Say I have India and Independence as my group names I would obtain the
following results displayed in my auto complete text field.

         India.jpg(image will be displayed) India(Group title name
displayed) 3(dummy value here)

and similarly

         Independence.jpg Independence
4

All this would come in one text field. Please note the comments in
parentheses are not part of the results returned via auto complete.

In case you are not able to get the picture in your mind of how the UI
would look, Kindly register in www.diasp.org and search for any random
user using its search feature , once your account is created.

Please observe that the spacing between image, title name and total
number of group members is too much. I will be referring back to this in
the comments that follow.

The code for the partial that renders all this is:-

    <ul>
      <% for inv_group in @investor_group2 %>
      <%=image_tag "investor_groups/#{inv_group.title}.jpg" , :width =>
'40', :height => '22', :align => 'left' %><li><%=h inv_group.title
%>(<%=h inv_group.activated_members.size %>)</li>
      <%end%>
    </ul>

Now if a user hovers his/her mouse over say India and then clicks on it,
the text field is populated with `**India(3)**` .

What I need is to implement is a **on click in Rails** which will
**select only Group title**. I tried to implement the group title and
group size with separate `<li>` tags , I was then able to mouseover and
select only the title and get it populated for the text field.

The problem with this approach is it completely spoils the formatting
and the spacings/gaps between the image, the title and the group size.
This requires formatting in order to obtain a better look and feel of
the UI.

If I can figure out how to reduce the formatting space between each of
the three title.jpg,title and group size. This option could be
considered to be an alternative fix but might not be the best fix.

I am not too sure how can I go about the same(the suggested fix) as I am
a newbie wrt many things in RoR. I am not too sure on what commands of
RoR I can make use of which would help me simplify/solve my task. Can
you please help me on this.

I would be also grateful for any suggestions on a more efficient fix to
this scenario.

I later on, in a way was able to figure out that by using javascript's
onclick event, I could solve my problem. I am not too sure about the
equivalent syntax for the same using Rails Helpers.I referred to
http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-javascript_tag
, to get a hang of how the javascript_tag can be used for my purpose,
but if this is the way out, I am really clueless on how to modify the
basic syntax to suit my requirements. Kindly help me with the same if
feasible.

Thank you..

Script.aculo.us Ajax.Autocompleter has a feature for just this purpose. You can strip your entire onclick business back out, and use just plain vanilla Autocompleter. All you need to do is change a tiny thing in your Rails view that returns the autocomplete results. Everything that you don't want to be populated into the result field when a user clicks should be wrapped in a span.informal.

<li><span class="informal">[image tag]</span>India<span class="informal">Some other descriptive text.</span></li>

If a user clicks on that option in the suggestion list, only the word India will be entered into the text field that spawned the autocompleter.

So in your Rails template for the autocompleter results, just wrap everything that you don't want to be entered in a span.informal, and you can have at it. If you wanted fake columns in your results, you could do:

<li><span class="informal icon">[image tag]</span>India<span class="informal description">Some other descriptive text.</span></li>

and use more CSS on .icon and .description to make those "columns" a particular width.

Walter

Walter Davis wrote in post #992117:

choice on that ..:slight_smile: .
In case you aren't able to get a better understanding of what I have
complete method is allowing me to modify the basic functionality to
- Group Specific Profile Pic(s) starting
displayed) 3(dummy value here)
would look, Kindly register in www.diasp.org and search for any random
     <% for inv_group in @investor_group2 %>
What I need is to implement is a **on click in Rails** which will
If I can figure out how to reduce the formatting space between each of
to

Thank you..

Script.aculo.us Ajax.Autocompleter has a feature for just this
purpose. You can strip your entire onclick business back out, and use
just plain vanilla Autocompleter. All you need to do is change a tiny
thing in your Rails view that returns the autocomplete results.
Everything that you don't want to be populated into the result field
when a user clicks should be wrapped in a span.informal.

<li><span class="informal">[image tag]</span>India<span
class="informal">Some other descriptive text.</span></li>

If a user clicks on that option in the suggestion list, only the word
India will be entered into the text field that spawned the
autocompleter.

So in your Rails template for the autocompleter results, just wrap
everything that you don't want to be entered in a span.informal, and
you can have at it. If you wanted fake columns in your results, you
could do:

<li><span class="informal icon">[image tag]</span>India<span
class="informal description">Some other descriptive text.</span></li>

and use more CSS on .icon and .description to make those "columns" a
particular width.

Walter

Hi Walter,

Thanks a lot , your solution of using the span tag did exactly what I
needed. I have to still play around with trying to fix the width wrt the
fields using CSS. I shall post queries on this , if any.

I have posted the same question on stackoverflow(
http://stackoverflow.com/questions/5595613/implementing-a-onclick-kind-of-functionality-and-formatting-wrt-rails-partial-vie
).

If you have a profile there, kindly post your answer there so that I
could accept the same. Or if you wouldn't want to do it, I with your
permission would submit the same for it to be useful to anyone in the
open source community....

Thanks again..

Mohnish J. wrote in post #992221:

Walter Davis wrote in post #992117:

choice on that ..:slight_smile: .
In case you aren't able to get a better understanding of what I have
complete method is allowing me to modify the basic functionality to
- Group Specific Profile Pic(s) starting
displayed) 3(dummy value here)
would look, Kindly register in www.diasp.org and search for any random
     <% for inv_group in @investor_group2 %>
What I need is to implement is a **on click in Rails** which will
If I can figure out how to reduce the formatting space between each of
to

Thank you..

Script.aculo.us Ajax.Autocompleter has a feature for just this
purpose. You can strip your entire onclick business back out, and use
just plain vanilla Autocompleter. All you need to do is change a tiny
thing in your Rails view that returns the autocomplete results.
Everything that you don't want to be populated into the result field
when a user clicks should be wrapped in a span.informal.

<li><span class="informal">[image tag]</span>India<span
class="informal">Some other descriptive text.</span></li>

If a user clicks on that option in the suggestion list, only the word
India will be entered into the text field that spawned the
autocompleter.

So in your Rails template for the autocompleter results, just wrap
everything that you don't want to be entered in a span.informal, and
you can have at it. If you wanted fake columns in your results, you
could do:

<li><span class="informal icon">[image tag]</span>India<span
class="informal description">Some other descriptive text.</span></li>

and use more CSS on .icon and .description to make those "columns" a
particular width.

Walter

Hi Walter,

Thanks a lot , your solution of using the span tag did exactly what I
needed. I have to still play around with trying to fix the width wrt the
fields using CSS. I shall post queries on this , if any.

I have posted the same question on stackoverflow(

http://stackoverflow.com/questions/5595613/implementing-a-onclick-kind-of-functionality-and-formatting-wrt-rails-partial-vie

).

If you have a profile there, kindly post your answer there so that I
could accept the same. Or if you wouldn't want to do it, I with your
permission would submit the same for it to be useful to anyone in the
open source community....

Thanks again..

Hi Walter,

I am a novice wrt sytlesheets and still don't have a good stronghold on
html concepts,

I tried some code below in my _index.html.erb :-

<div class="description">
<ul>
  <%= javascript_include_tag :defaults, :cache => true %>
  <%=stylesheet_link_tag "groups"%>
  <% for inv_group in @investor_group2 %>

  <%=image_tag "investor_groups/#{inv_group.title}.jpg" , :width =>
'40', :height => '22', :align => 'left' %><li><%=h
inv_group.title%>(<%=h inv_group.activated_members.size %>)</li>

  <%end%>
</ul>
</div>

and In my groups.css I did something like:-

.description{
    width: 40%
}
.icon{
    width: 40%
}
.

This change in the code had an affect on the auto complete functionality
and now a particular group doesn't get highlighted on doing a mouse over
to it(Kindly refer:-
http://imagepaste.nullnetwork.net/viewimage.php?id=2054 ). I am not sure
where I am doing what wrong that the functionality is getting affected
as a result.

Kindly guide me to correct my mistake(s) on this

Thanks..

Not sure if you've already sorted this out, but if I'm reading this correctly, your code will be generating something similar to this cut-down example:

ul
  img/
  li
    some text
  /li
  img/
  li
    some text
  /li
  ...
/ul

This is completely invalid HTML, so getting CSS to do anything useful with it will be next to impossible.

What you must do is get that image inside the li, where it belongs, and if you don't want it to be in your autocompleter populated content, then wrap the image in a span.informal. If this isn't for your autocompleter results, then you still must put the images inside the li tags, but you have all sorts of tools to get the layout to work the way you expect once you do that.

One of the best tools you can use to get this sort of problem sorted is first to go the validator.w3.org and either put in the URL of your (public) site, or paste in the View Source rendered code from your browser in the Direct Input field. Either one will point out where your layout fails to validate. Once you have valid HTML (think of it as the foundation for your skyscraper) then you can start with the fancy mullions and whatnot of CSS.

And when you get into that end of things, you can use a tool like CSSEdit, which can "override" a stylesheet from your site (either localhost or live) and present you with a preview showing the results of your tinkering in real-time. No need to save, upload, etc. What you see is a "visual merge" between the actual HTML+CSS and HTML+CSS+your changes.

Walter

Walter Davis wrote in post #992312:

would look, Kindly register in www.diasp.org and search for any

class="informal">Some other descriptive text.</span></li>

If you have a profile there, kindly post your answer there so that I

html concepts,
<%=image_tag "investor_groups/#{inv_group.title}.jpg" , :width =>
.description{
over
to it(Kindly refer:-
http://imagepaste.nullnetwork.net/viewimage.php?id=2054 ). I am not
sure
where I am doing what wrong that the functionality is getting affected
as a result.

Kindly guide me to correct my mistake(s) on this

Thanks..

Not sure if you've already sorted this out, but if I'm reading this
correctly, your code will be generating something similar to this cut-
down example:

ul
  img/
  li
    some text
  /li
  img/
  li
    some text
  /li
  ...
/ul

This is completely invalid HTML, so getting CSS to do anything useful
with it will be next to impossible.

What you must do is get that image inside the li, where it belongs,
and if you don't want it to be in your autocompleter populated
content, then wrap the image in a span.informal. If this isn't for
your autocompleter results, then you still must put the images inside
the li tags, but you have all sorts of tools to get the layout to work
the way you expect once you do that.

One of the best tools you can use to get this sort of problem sorted
is first to go the validator.w3.org and either put in the URL of your
(public) site, or paste in the View Source rendered code from your
browser in the Direct Input field. Either one will point out where
your layout fails to validate. Once you have valid HTML (think of it
as the foundation for your skyscraper) then you can start with the
fancy mullions and whatnot of CSS.

And when you get into that end of things, you can use a tool like
CSSEdit, which can "override" a stylesheet from your site (either
localhost or live) and present you with a preview showing the results
of your tinkering in real-time. No need to save, upload, etc. What you
see is a "visual merge" between the actual HTML+CSS and HTML+CSS+your
changes.

Walter

Hi Walter,

Based on your inputs..

This code below did the magic for me...

<ul>
  <%= javascript_include_tag :defaults, :cache => true %>
  <%=stylesheet_link_tag "groups"%>
  <% for inv_group in @investor_group2 %>

   <li><div class="autocomp_field_width_modify" ><%=image_tag
"investor_groups/#{inv_group.title}.jpg" , :width => '40', :height =>
'22', :align => 'left' %><%=h inv_group.title%><span
class="informal">(<%=h inv_group.activated_members.size
%>)</span></div></li>

  <%end%>
</ul>

and in my groups.css I added the following:-

.autocomp_field_width_modify
{
      text-align: justify;
      text-indent: 3%;
}

Thanks for your suggestion Walter, I know I might not be exactly
following HTML Markup standards( I have still a lot ground to cover to
strengthen my concepts in HTML.. ). But I am just happy that finally
this works based on the requirement.

Thanks again.. Walter..