Put it in the right module

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@890 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
David Heinemeier Hansson 2005-03-12 02:59:12 +00:00
parent 7d801ae1c8
commit ebb070e078

@ -1,160 +1,164 @@
require File.dirname(__FILE__) + '/tag_helper' require File.dirname(__FILE__) + '/tag_helper'
# You must call <%= define_javascript_functions %> in your application before using these helpers. module ActionView
module JavascriptHelper module Helpers
def link_to_display_toggle(name, tags, html_options = {}) # You must call <%= define_javascript_functions %> in your application before using these helpers.
toggle_functions = [ tags ].flatten.collect { |tag| "toggle_display_by_id('#{tag}'); " }.join module JavascriptHelper
content_tag( def link_to_toggle_display(name, tags, html_options = {})
"a", name, toggle_functions = [ tags ].flatten.collect { |tag| "toggle_display_by_id('#{tag}'); " }.join
html_options.symbolize_keys.merge(:href => "#", :onclick => "#{toggle_functions}; #{html_options['onclick']}; return false;") content_tag(
) "a", name,
end html_options.symbolize_keys.merge(:href => "#", :onclick => "#{toggle_functions}; #{html_options['onclick']}; return false;")
)
end
def link_to_function(name, function, html_options = {}) def link_to_function(name, function, html_options = {})
content_tag( content_tag(
"a", name, "a", name,
html_options.symbolize_keys.merge(:href => "#", :onclick => "#{function}; return false;") html_options.symbolize_keys.merge(:href => "#", :onclick => "#{function}; return false;")
) )
end end
def link_to_remote(name, options = {}) def link_to_remote(name, options = {})
link_to_function(name, remote_function(options)) link_to_function(name, remote_function(options))
end end
def form_remote_tag(options = {}) def form_remote_tag(options = {})
options[:form] = true options[:form] = true
options[:html] ||= { } options[:html] ||= { }
options[:html][:onsubmit] = "#{remote_function(options)}; return false;" options[:html][:onsubmit] = "#{remote_function(options)}; return false;"
tag("form", options[:html], true) tag("form", options[:html], true)
end end
def define_javascript_functions def define_javascript_functions
<<-EOF <<-EOF
<script language="JavaScript"> <script language="JavaScript">
/* XMLHttpRequest Methods */ /* XMLHttpRequest Methods */
function update_with_response() { function update_with_response() {
o(arguments[0]).innerHTML = xml_request(arguments[1], arguments[2]); o(arguments[0]).innerHTML = xml_request(arguments[1], arguments[2]);
}
function xml_request() {
var url = arguments[0];
var parameters = arguments[1];
var async = arguments[2];
var type = parameters ? "POST" : "GET";
req = xml_http_request_object();
req.open(type, url, async);
req.send(parameters);
return req.responseText;
}
function xml_http_request_object() {
var req = false;
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
req = false;
} }
}
if (!req && typeof XMLHttpRequest!='undefined') { function xml_request() {
req = new XMLHttpRequest(); var url = arguments[0];
} var parameters = arguments[1];
var async = arguments[2];
var type = parameters ? "POST" : "GET";
return req; req = xml_http_request_object();
} req.open(type, url, async);
req.send(parameters);
return req.responseText;
}
/* Common methods ------------------------------ */ function xml_http_request_object() {
var req = false;
function toggle_display_by_id(id) { try {
o(id).style.display = (o(id).style.display == "none") ? "" : "none"; req = new ActiveXObject("Msxml2.XMLHTTP");
} } catch (e) {
try {
function o(id) { req = new ActiveXObject("Microsoft.XMLHTTP");
return document.getElementById(id); } catch (E) {
} req = false;
}
/* Serialize a form by Sam Stephenson ------------------------------ */
Form = {
Serializers: {
input: function(element) {
switch (element.type.toLowerCase()) {
case 'hidden':
case 'text':
return Form.Serializers.textarea(element);
case 'checkbox':
case 'radio':
return Form.Serializers.inputSelector(element);
} }
},
if (!req && typeof XMLHttpRequest!='undefined') {
inputSelector: function(element) { req = new XMLHttpRequest();
if (element.checked) }
return [element.name, element.value];
}, return req;
textarea: function(element) {
return [element.name, element.value];
},
select: function(element) {
var index = element.selectedIndex;
return [element.name, element.options[index].value];
} }
},
serialize: function(form) { /* Common methods ------------------------------ */
var elements = Form.getFormElements(form);
var queryComponents = new Array(); function toggle_display_by_id(id) {
o(id).style.display = (o(id).style.display == "none") ? "" : "none";
}
function o(id) {
return document.getElementById(id);
}
/* Serialize a form by Sam Stephenson ------------------------------ */
Form = {
Serializers: {
input: function(element) {
switch (element.type.toLowerCase()) {
case 'hidden':
case 'text':
return Form.Serializers.textarea(element);
case 'checkbox':
case 'radio':
return Form.Serializers.inputSelector(element);
}
},
for (var i = 0; i < elements.length; i++) { inputSelector: function(element) {
var element = elements[i]; if (element.checked)
var method = element.tagName.toLowerCase(); return [element.name, element.value];
},
textarea: function(element) {
return [element.name, element.value];
},
select: function(element) {
var index = element.selectedIndex;
return [element.name, element.options[index].value];
}
},
serialize: function(form) {
var elements = Form.getFormElements(form);
var queryComponents = new Array();
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var method = element.tagName.toLowerCase();
var parameter = Form.Serializers[method](element); var parameter = Form.Serializers[method](element);
if (parameter) { if (parameter) {
var queryComponent = encodeURIComponent(parameter[0]) + '=' + var queryComponent = encodeURIComponent(parameter[0]) + '=' +
encodeURIComponent(parameter[1]); encodeURIComponent(parameter[1]);
queryComponents.push(queryComponent); queryComponents.push(queryComponent);
}
}
return queryComponents.join('&');
},
getFormElements: function(form) {
var elements = new Array();
for (tagName in Form.Serializers) {
var tagElements = form.getElementsByTagName(tagName);
for (var j = 0; j < tagElements.length; j++)
elements.push(tagElements[j]);
}
return elements;
} }
} }
</script>
return queryComponents.join('&'); EOF
}, end
getFormElements: function(form) {
var elements = new Array();
for (tagName in Form.Serializers) {
var tagElements = form.getElementsByTagName(tagName);
for (var j = 0; j < tagElements.length; j++)
elements.push(tagElements[j]);
}
return elements;
}
}
</script>
EOF
end
private private
def remote_function(options) def remote_function(options)
function = options[:update] ? function = options[:update] ?
"update_with_response('#{options[:update]}', '#{url_for(options[:url])}'#{', Form.serialize(this)' if options[:form]})" : "update_with_response('#{options[:update]}', '#{url_for(options[:url])}'#{', Form.serialize(this)' if options[:form]})" :
"xml_request('#{url_for(options[:url])}'#{', Form.serialize(this)' if options[:form]})" "xml_request('#{url_for(options[:url])}'#{', Form.serialize(this)' if options[:form]})"
function = "#{options[:before]};#{function}" if options[:before] function = "#{options[:before]};#{function}" if options[:before]
function = "#{function};#{options[:after]}" if options[:after] function = "#{function};#{options[:after]}" if options[:after]
return function return function
end
end end
end
end end