Open a (redbox) modal popup from inside a controller?

Hi,

I'm trying to open a modal popup window using redbox to display a
styled notification/alert to the user. The helpers in the redbox
documentation only describe how to open a redbox when the user clicks
on a link, e.g., link_to_redbox() or link_to_remote_redbox().

Is there any way to open a redbox, or a different type rails-
compatible modal popup, from inside a controller action?

Thanks.

ermmm I'm a newb but I think you should look into the redbox.js file and
see if you can call some of the functions in there directly instead of
via link_to_redbox calls....activateRBWindow might be a useful one?

Phil Tayo wrote:

ermmm I'm a newb but I think you should look into the redbox.js file and
see if you can call some of the functions in there directly instead of
via link_to_redbox calls....activateRBWindow might be a useful one?

also maybe you can help me out with my problem...do you know how to get
the redbox to appear in the centre of the page? at the moment it seems
stuck to the top of the window...

This interested me. There may be better modal solutions than redbox
for your need, but if you are already using redbox then you may want
to use it. The easiest way I found was to create a hidden div in the
normal view.

eg a div with id='my_box'
Set the div style to display: none

It doesnt matter where it is positioned because redBox clones it

In the controller I am assuming that you are already responding to an
ajax call so in the
render : update

add
page << "RedBox.showInline('my_box')"

There may be some bits and pieces to tidy, but that worked for me.

hth
Tonypm

Phil wrote:

also maybe you can help me out with my problem...do you know how to get
the redbox to appear in the centre of the page? at the moment it seems
stuck to the top of the window...

In the redbox.js file (in public/javascripts)
in setOverlaySize: function()
I have done this. (addition of one line of code)

// added by APM to account for using absolute positioning in my
content.
  // for some reason, the above calculations dont give a large enough
height. It is
  // only the size of the banner.
  // When the scrollbars appear on the windon, then all is ok. This is
because the first
  // option innerHeight+scrollMaxY is used.
  if (yScroll < window.innerHeight)
  {
    yScroll=window.innerHeight //Added by APM
  }

    $("RB_overlay").style['height'] = yScroll +"px";
  },

I believe that there are some other solutions in the comments on the
web page for redbox, (version 2). I have not worked with redbox for a
while, so I do not have it at my fingertips. There is also something
I recall about using position:fixed which also helps position
calculations.

hth
Tonypm

tonypm said the following on 20/01/08 12:12 PM:

In the controller I am assuming that you are already responding to an
ajax call so in the
render : update

add
page << "RedBox.showInline('my_box')"

There may be some bits and pieces to tidy, but that worked for me.

I don't think that's a valid assumption.
I can envision a whole pile of applications where view, delete, hoojum,
snarf and many other methods in the controller trigger the redbox..
As in

   ...
   record = Page.find(:first, ... param[ whatever ] ..)
   begin
   if ! record.can_do(action, current_user) then
      if current_user.nil? then
         Redbox.login("You need to be logged in")
         retry
      end
      Redbox.alert("You don't have permission to #{action} this record")
      # don't redisplay anything.
   end
   ...
   end

You can argue that things like the 'edit' button should be grayed out
and inoperative if the can_do for it is negative. I can argue that it
shouldn't be and that the controller should respond with a login prompt.
Ultimately its up to the guy paying for the application to decide on the
policy. But I, and I think others, would like to know how to handle it
in the controller pretty much the way I've sketched out and to have
anything in the 'update' or 'render'. Access control issues should be
dealt with earlier.