| 1 |
module AjaxRender |
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 |
|
|---|
| 5 |
|
|---|
| 6 |
|
|---|
| 7 |
|
|---|
| 8 |
|
|---|
| 9 |
|
|---|
| 10 |
|
|---|
| 11 |
|
|---|
| 12 |
|
|---|
| 13 |
|
|---|
| 14 |
|
|---|
| 15 |
|
|---|
| 16 |
def render_ajax(options) |
|---|
| 17 |
render_text render_ajax_to_string(options) |
|---|
| 18 |
end |
|---|
| 19 |
|
|---|
| 20 |
def render_ajax_to_string(options) |
|---|
| 21 |
|
|---|
| 22 |
if options[:template] |
|---|
| 23 |
text = escape_javascript(render_to_string(options[:template])) |
|---|
| 24 |
else |
|---|
| 25 |
text = escape_javascript(render_to_string) |
|---|
| 26 |
end |
|---|
| 27 |
|
|---|
| 28 |
case options[:action] |
|---|
| 29 |
when :insert |
|---|
| 30 |
case options[:position] |
|---|
| 31 |
when :before |
|---|
| 32 |
"new Insertion.Before('#{options[:target]}', '#{text}');" |
|---|
| 33 |
when :top |
|---|
| 34 |
"new Insertion.Top('#{options[:target]}', '#{text}');" |
|---|
| 35 |
when :bottom |
|---|
| 36 |
"new Insertion.Bottom('#{options[:target]}', '#{text}');" |
|---|
| 37 |
when :after |
|---|
| 38 |
"new Insertion.After('#{options[:target]}', '#{text}');" |
|---|
| 39 |
else |
|---|
| 40 |
raise ArgumentError, "Invalid position, choose one of :before, :top, :bottom, :after" |
|---|
| 41 |
end |
|---|
| 42 |
when :replace |
|---|
| 43 |
"$('#{options[:target]}').innerHTML = '#{text}'; for (i = 0; i < #{options[:target]}.getElementsByTagName('script').length; ++i){eval(#{options[:target]}.getElementsByTagName('script')[i].firstChild.data)};" |
|---|
| 44 |
when :empty |
|---|
| 45 |
"$('#{options[:target]}').innerHTML = '';" |
|---|
| 46 |
when :delete |
|---|
| 47 |
"$('#{options[:target]}').parentNode.removeChild($('#{options[:target]}'));" |
|---|
| 48 |
when :formfill |
|---|
| 49 |
raise ArgumentError, ":formfill requires :formobject" unless options[:formobject] |
|---|
| 50 |
ret = '' |
|---|
| 51 |
objectname = options[:formobject].class.to_s.underscore |
|---|
| 52 |
for key,value in options[:formobject].attributes |
|---|
| 53 |
ret << "$('#{objectname}_#{key}').value = '#{escape_javascript(value.to_s)}';\n" |
|---|
| 54 |
end |
|---|
| 55 |
return ret |
|---|
| 56 |
else |
|---|
| 57 |
raise ArgumentError, "Invalid action, choose one of :insert, :replace, :delete, :empty, :formfill" |
|---|
| 58 |
end |
|---|
| 59 |
|
|---|
| 60 |
end |
|---|
| 61 |
|
|---|
| 62 |
def escape_javascript(javascript) |
|---|
| 63 |
javascript.gsub(/\r\n|\n|\r/, "\\n").gsub(/["']/) { |m| "\\ |
|---|
| 64 |
end |
|---|
| 65 |
|
|---|
| 66 |
end |
|---|