Skip to content

Commit

Permalink
Merge remote-tracking branch 'michelson/master' into devel
Browse files Browse the repository at this point in the history
  • Loading branch information
xiaods committed Aug 26, 2012
2 parents 8662976 + 6a44d90 commit 253d3bc
Showing 1 changed file with 48 additions and 25 deletions.
73 changes: 48 additions & 25 deletions lib/lazy_high_charts/layout_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,37 @@ def build_html_output(type, placeholder, object, &block)
options_collection = [ generate_json_from_hash(object.options) ]

options_collection << %|"series": #{object.data.to_json}|

graph =<<-EOJS
<script type="text/javascript">
(function() {
var onload = window.onload;
window.onload = function(){
if (typeof onload == "function") onload();
var options, chart;
options = { #{options_collection.join(',')} };
#{capture(&block) if block_given?}
chart = new Highcharts.#{type}(options);
};
})()
</script>

core_js =<<-EOJS
var options, chart;
options = { #{options_collection.join(',')} };
#{capture(&block) if block_given?}
chart = new Highcharts.#{type}(options);
EOJS

if defined?(request) && request.respond_to?(:xhr?) && request.xhr?
graph =<<-EOJS
<script type="text/javascript">
(function() {
#{core_js}
})()
</script>
EOJS
else
graph =<<-EOJS
<script type="text/javascript">
(function() {
var onload = window.onload;
window.onload = function(){
if (typeof onload == "function") onload();
#{core_js}
};
})()
</script>
EOJS
end


if defined?(raw)
return raw(graph)
else
Expand All @@ -52,21 +67,29 @@ def build_html_output(type, placeholder, object, &block)
end

private
def generate_json_from_hash hash

def generate_json_from_hash hash
hash.each_pair.map do |key, value|
k = key.to_s.camelize.gsub!(/\b\w/) { $&.downcase }
if value.is_a? Hash
%|"#{k}": { #{generate_json_from_hash(value)} }|
else
if value.respond_to?(:js_code) && value.js_code?
%|"#{k}": #{value}|
else
%|"#{k}": #{value.to_json}|
end
end
%|"#{k}": #{generate_json_from_value value}|
end.flatten.join(',')
end

def generate_json_from_value value
if value.is_a? Hash
%|{ #{generate_json_from_hash value} }|
elsif value.is_a? Array
%|[ #{generate_json_from_array value} ]|
elsif value.respond_to?(:js_code) && value.js_code?
value
else
value.to_json
end
end

def generate_json_from_array array
array.map{|value| generate_json_from_value(value)}.join(",")
end

end
end

0 comments on commit 253d3bc

Please sign in to comment.