def construct_live_tree_function(name, options = {})
options = options.dup;
if options[:id] != nil
tree_id = options[:id]
else
tree_id = name
end
for k in [:on_click_item, :on_expand_item, :on_collapse_item, :on_load_item]
if options[k] != nil
options[k] = "function(item){" + options[k] + "}"
end
end
if options[:data_url] == nil
if options[:data_action] == nil
act = name.to_s + "_live_tree_data"
else
act = options[:data_action]
end
if options[:data_controller] == nil
options[:data_url] = { :action => act }
else
options[:data_url] = { :controller => options[:data_controller], :action => act }
end
end
options[:data_url] = '"' + escape_javascript(url_for(options[:data_url])) + '"'
for k in [:css_class, :css_style]
if options[k] != nil
options[k] = '"' + escape_javascript(options[k]) + '"'
end
end
if options[:root_item_id] != nil
options[:root_item_id] = _id_to_javascript(options[:root_item_id])
end
if options[:initial_data_root] != nil
item = options[:initial_data_root]
if (options[:initial_data_whole_tree])
depth = nil
elsif (options[:expand_root_item] == nil || options[:expand_root_item] || options[:hide_root_item])
depth = 2
else
depth = 1
end
if options[:initial_data_options] == nil
data_options_method = controller.method("_#{name}_live_tree_options")
if data_options_method
data_options = data_options_method.call
else
data_options = {}
end
else
data_options = options[:initial_data_options]
end
data_options = data_options.dup
data_options[:depth] = depth;
options[:initial_data] = construct_live_tree_data(item, data_options)
end
options.delete :id
options.delete :data_action
options.delete :data_controller
options.delete :initial_data_root
options.delete :initial_data_options
options.delete :initial_data_whole_tree
options_js = "{\n" + options.map {|k, v| LiveTreeHelper.live_tree_js_name(k) + ":#{v}"}.join(",\n") + "\n}"
"new LiveTree(\"" + tree_id.to_s + "\"," + options_js + ")"
end