derailed-ziya 2.0.8 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest.txt +240 -432
- data/README.txt +104 -97
- data/Rakefile +3 -2
- data/bin/ziyafy +33 -10
- data/examples/charts/basic_chart.rb +47 -0
- data/{charts → examples/charts/public/charts}/AC_RunActiveContent.js +0 -0
- data/{charts → examples/charts/public/charts}/charts.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/ar3d.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/arno.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/ars3.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/arst.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/brfl.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/brno.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/brst.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/buno.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/cl3d.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/clfl.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/clim.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/clno.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/clp3.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/cls3.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/clst.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/cnno.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/dono.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/lnno.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/mxno.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/pi3d.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/piim.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/pino.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/pono.swf +0 -0
- data/{charts → examples/charts/public/charts}/charts_library/scno.swf +0 -0
- data/{charts → examples/charts/public/charts}/full_screen.swf +0 -0
- data/{charts → examples/charts/public/charts}/scripts/output_jpg.php +0 -0
- data/{charts → examples/charts/public/charts}/sliders/black.swf +0 -0
- data/{charts → examples/charts/public/charts}/sliders/preview_handle_1.swf +0 -0
- data/{charts → examples/charts/public/charts}/sliders/preview_handle_2.swf +0 -0
- data/examples/charts/public/charts/themes/cool_theme/column_chart.yml +150 -0
- data/{charts → examples/charts/public/charts}/themes/readme.txt +0 -0
- data/examples/charts/views/index.erb +12 -0
- data/examples/maps/basic_map.rb +72 -0
- data/examples/maps/helpers/map_helper.rb +15 -0
- data/examples/maps/models/confidential_herpes_report.rb +78 -0
- data/examples/maps/public/javascripts/jquery-1.3.2.js +4376 -0
- data/examples/maps/public/map.xml +336 -0
- data/examples/maps/public/maps/js/Exception.js +45 -0
- data/examples/maps/public/maps/js/FlashProxy.js +72 -0
- data/examples/maps/public/maps/js/FlashSerializer.js +165 -0
- data/examples/maps/public/maps/js/FlashTag.js +111 -0
- data/examples/maps/public/maps/js/JavaScriptFlashGateway.js +455 -0
- data/examples/maps/public/maps/js/JavaScriptFlashGateway.swf +0 -0
- data/examples/maps/public/maps/map_library/australia.swf +0 -0
- data/examples/maps/public/maps/map_library/belgium.swf +0 -0
- data/examples/maps/public/maps/map_library/brazil.swf +0 -0
- data/examples/maps/public/maps/map_library/canada.swf +0 -0
- data/examples/maps/public/maps/map_library/europe.swf +0 -0
- data/examples/maps/public/maps/map_library/france.swf +0 -0
- data/examples/maps/public/maps/map_library/germany.swf +0 -0
- data/examples/maps/public/maps/map_library/italy.swf +0 -0
- data/examples/maps/public/maps/map_library/mexico.swf +0 -0
- data/examples/maps/public/maps/map_library/sweden.swf +0 -0
- data/examples/maps/public/maps/map_library/uk_ireland.swf +0 -0
- data/examples/maps/public/maps/map_library/us.swf +0 -0
- data/examples/maps/public/maps/map_library/us_canada.swf +0 -0
- data/examples/maps/public/maps/map_library/world.swf +0 -0
- data/examples/maps/public/maps/themes/default/base_map.yml +27 -0
- data/examples/maps/public/maps/themes/default/us_map.yml +20 -0
- data/examples/maps/public/maps/themes/default/us_map_2.yml +17 -0
- data/examples/maps/public/maps/themes/readme.txt +13 -0
- data/examples/maps/public/stylesheets/map.css +16 -0
- data/examples/maps/views/index.erb +26 -0
- data/examples/maps/views/layout.erb +21 -0
- data/lib/ziya/charts/base.rb +15 -14
- data/lib/ziya/{components → charts/support}/area.rb +2 -2
- data/lib/ziya/{components → charts/support}/axis_category.rb +1 -1
- data/lib/ziya/{components → charts/support}/axis_ticks.rb +1 -1
- data/lib/ziya/{components → charts/support}/axis_value.rb +1 -1
- data/lib/ziya/{components → charts/support}/base.rb +9 -21
- data/lib/ziya/{components → charts/support}/bevel.rb +1 -1
- data/lib/ziya/{components → charts/support}/blur.rb +1 -1
- data/lib/ziya/{components → charts/support}/button.rb +1 -1
- data/lib/ziya/{components → charts/support}/chart_border.rb +1 -1
- data/lib/ziya/{components → charts/support}/chart_grid_h.rb +1 -1
- data/lib/ziya/{components → charts/support}/chart_grid_v.rb +1 -1
- data/lib/ziya/{components → charts/support}/chart_guide.rb +1 -1
- data/lib/ziya/{components → charts/support}/chart_label.rb +1 -1
- data/lib/ziya/{components → charts/support}/chart_note.rb +1 -1
- data/lib/ziya/{components → charts/support}/chart_pref.rb +1 -1
- data/lib/ziya/{components → charts/support}/chart_rect.rb +1 -1
- data/lib/ziya/{components → charts/support}/chart_transition.rb +1 -1
- data/lib/ziya/{components → charts/support}/circle.rb +1 -1
- data/lib/ziya/{components → charts/support}/context_menu.rb +1 -3
- data/lib/ziya/{components → charts/support}/draw.rb +31 -8
- data/lib/ziya/{components → charts/support}/draw_base.rb +1 -1
- data/lib/ziya/{components → charts/support}/filter.rb +1 -1
- data/lib/ziya/{components → charts/support}/flash_to_javascript.rb +1 -3
- data/lib/ziya/{components → charts/support}/glow.rb +1 -1
- data/lib/ziya/{components → charts/support}/image.rb +1 -1
- data/lib/ziya/{components → charts/support}/legend.rb +1 -1
- data/lib/ziya/{components → charts/support}/line.rb +1 -1
- data/lib/ziya/{components → charts/support}/link.rb +1 -1
- data/lib/ziya/{components → charts/support}/link_data.rb +1 -1
- data/lib/ziya/{components → charts/support}/rect.rb +1 -1
- data/lib/ziya/{components → charts/support}/scroll.rb +1 -3
- data/lib/ziya/{components → charts/support}/series.rb +1 -3
- data/lib/ziya/{components → charts/support}/series_color.rb +1 -1
- data/lib/ziya/{components → charts/support}/series_explode.rb +1 -1
- data/lib/ziya/{components → charts/support}/shadow.rb +1 -1
- data/lib/ziya/{components → charts/support}/text.rb +9 -1
- data/lib/ziya/{components → charts/support}/tooltip.rb +1 -1
- data/lib/ziya/{components → charts/support}/update.rb +1 -1
- data/lib/ziya/core_ext/string.rb +31 -0
- data/lib/ziya/gauges/base.rb +17 -12
- data/lib/ziya/gauges/support/base.rb +4 -12
- data/lib/ziya/gauges/support/radial_numbers.rb +1 -1
- data/lib/ziya/html_helpers/base.rb +91 -0
- data/lib/ziya/html_helpers/charts.rb +200 -0
- data/lib/ziya/html_helpers/gauges.rb +90 -0
- data/lib/ziya/html_helpers/maps.rb +74 -0
- data/lib/ziya/html_helpers.rb +1 -0
- data/lib/ziya/maps/australia.rb +9 -0
- data/lib/ziya/maps/base.rb +409 -0
- data/lib/ziya/maps/belgium.rb +7 -0
- data/lib/ziya/maps/brazil.rb +7 -0
- data/lib/ziya/maps/canada.rb +7 -0
- data/lib/ziya/maps/europe.rb +7 -0
- data/lib/ziya/maps/france.rb +7 -0
- data/lib/ziya/maps/geocode.rb +18 -0
- data/lib/ziya/maps/germany.rb +7 -0
- data/lib/ziya/maps/italy.rb +7 -0
- data/lib/ziya/maps/mexico.rb +7 -0
- data/lib/ziya/maps/support/arc.rb +7 -0
- data/lib/ziya/maps/support/arc_color.rb +7 -0
- data/lib/ziya/maps/support/arc_range.rb +7 -0
- data/lib/ziya/maps/support/background_color.rb +7 -0
- data/lib/ziya/maps/support/base.rb +34 -0
- data/lib/ziya/maps/support/default_color.rb +7 -0
- data/lib/ziya/maps/support/default_point.rb +7 -0
- data/lib/ziya/maps/support/first_zoom.rb +7 -0
- data/lib/ziya/maps/support/heat_range.rb +35 -0
- data/lib/ziya/maps/support/hover.rb +7 -0
- data/lib/ziya/maps/support/line.rb +7 -0
- data/lib/ziya/maps/support/line_color.rb +7 -0
- data/lib/ziya/maps/support/line_range.rb +7 -0
- data/lib/ziya/maps/support/outline_color.rb +7 -0
- data/lib/ziya/maps/support/point.rb +8 -0
- data/lib/ziya/maps/support/point_range.rb +7 -0
- data/lib/ziya/maps/support/range.rb +31 -0
- data/lib/ziya/maps/support/ranges.rb +18 -0
- data/lib/ziya/maps/support/region.rb +7 -0
- data/lib/ziya/maps/support/scale_points.rb +7 -0
- data/lib/ziya/maps/support/show_name.rb +7 -0
- data/lib/ziya/maps/support/state.rb +7 -0
- data/lib/ziya/maps/support/state_info_icon.rb +7 -0
- data/lib/ziya/maps/support/zoom_mode.rb +7 -0
- data/lib/ziya/maps/support/zoom_out_button.rb +7 -0
- data/lib/ziya/maps/support/zoom_out_scale.rb +7 -0
- data/lib/ziya/maps/sweden.rb +7 -0
- data/lib/ziya/maps/uk.rb +7 -0
- data/lib/ziya/maps/us.rb +7 -0
- data/lib/ziya/maps/world.rb +7 -0
- data/lib/ziya/version.rb +3 -3
- data/lib/ziya/yaml_helpers/base.rb +20 -0
- data/lib/ziya/yaml_helpers/charts.rb +49 -0
- data/lib/ziya/yaml_helpers/gauges.rb +33 -0
- data/lib/ziya/yaml_helpers/maps.rb +17 -0
- data/lib/ziya/yaml_helpers.rb +1 -0
- data/lib/ziya.rb +20 -11
- data/resources/charts/AC_RunActiveContent.js +292 -0
- data/resources/charts/charts.swf +0 -0
- data/resources/charts/charts_library/ar3d.swf +0 -0
- data/resources/charts/charts_library/arno.swf +0 -0
- data/resources/charts/charts_library/ars3.swf +0 -0
- data/resources/charts/charts_library/arst.swf +0 -0
- data/resources/charts/charts_library/brfl.swf +0 -0
- data/resources/charts/charts_library/brno.swf +0 -0
- data/resources/charts/charts_library/brst.swf +0 -0
- data/resources/charts/charts_library/buno.swf +0 -0
- data/resources/charts/charts_library/cl3d.swf +0 -0
- data/resources/charts/charts_library/clfl.swf +0 -0
- data/resources/charts/charts_library/clim.swf +0 -0
- data/resources/charts/charts_library/clno.swf +0 -0
- data/resources/charts/charts_library/clp3.swf +0 -0
- data/resources/charts/charts_library/cls3.swf +0 -0
- data/resources/charts/charts_library/clst.swf +0 -0
- data/resources/charts/charts_library/cnno.swf +0 -0
- data/resources/charts/charts_library/dono.swf +0 -0
- data/resources/charts/charts_library/lnno.swf +0 -0
- data/resources/charts/charts_library/mxno.swf +0 -0
- data/resources/charts/charts_library/pi3d.swf +0 -0
- data/resources/charts/charts_library/piim.swf +0 -0
- data/resources/charts/charts_library/pino.swf +0 -0
- data/resources/charts/charts_library/pono.swf +0 -0
- data/resources/charts/charts_library/scno.swf +0 -0
- data/resources/charts/full_screen.swf +0 -0
- data/resources/charts/scripts/output_jpg.php +23 -0
- data/resources/charts/sliders/black.swf +0 -0
- data/resources/charts/sliders/preview_handle_1.swf +0 -0
- data/resources/charts/sliders/preview_handle_2.swf +0 -0
- data/resources/charts/themes/readme.txt +13 -0
- data/{gauges → resources/gauges}/designs/circle.yml +0 -0
- data/{gauges → resources/gauges}/designs/signal.yml +0 -0
- data/{gauges → resources/gauges}/designs/thermo.yml +0 -0
- data/{gauges → resources/gauges}/designs/title.yml +0 -0
- data/{gauges → resources/gauges}/gauge.swf +0 -0
- data/resources/maps/js/Exception.js +45 -0
- data/resources/maps/js/FlashProxy.js +72 -0
- data/resources/maps/js/FlashSerializer.js +165 -0
- data/resources/maps/js/FlashTag.js +111 -0
- data/resources/maps/js/JavaScriptFlashGateway.js +455 -0
- data/resources/maps/js/JavaScriptFlashGateway.swf +0 -0
- data/resources/maps/map_library/australia.swf +0 -0
- data/resources/maps/map_library/belgium.swf +0 -0
- data/resources/maps/map_library/brazil.swf +0 -0
- data/resources/maps/map_library/canada.swf +0 -0
- data/resources/maps/map_library/europe.swf +0 -0
- data/resources/maps/map_library/france.swf +0 -0
- data/resources/maps/map_library/germany.swf +0 -0
- data/resources/maps/map_library/italy.swf +0 -0
- data/resources/maps/map_library/mexico.swf +0 -0
- data/resources/maps/map_library/sweden.swf +0 -0
- data/resources/maps/map_library/uk_ireland.swf +0 -0
- data/resources/maps/map_library/us.swf +0 -0
- data/resources/maps/map_library/us_canada.swf +0 -0
- data/resources/maps/map_library/world.swf +0 -0
- data/resources/maps/themes/readme.txt +13 -0
- data/spec/charts/base_spec.rb +2 -2
- data/spec/charts/chart_type_spec.rb +3 -4
- data/spec/{components → charts/support}/area_spec.rb +8 -8
- data/spec/charts/support/draw_spec.rb +41 -0
- data/spec/{components → charts/support}/filter_spec.rb +6 -6
- data/spec/{components → charts/support}/link_spec.rb +6 -6
- data/spec/{components → charts/support}/series.rb +4 -4
- data/spec/{components → charts/support}/series_color_spec.rb +4 -4
- data/spec/{components → charts/support}/series_explode.rb +4 -4
- data/spec/{components → charts/support}/series_explode_spec.rb +4 -4
- data/spec/core_ext/string_spec.rb +40 -0
- data/spec/gauges/base_spec.rb +1 -1
- data/spec/html_helpers/base_spec.rb +50 -0
- data/spec/html_helpers/charts_spec.rb +23 -0
- data/spec/html_helpers/gauges_spec.rb +16 -0
- data/spec/html_helpers/maps_spec.rb +20 -0
- data/spec/maps/base_spec.rb +82 -0
- data/spec/maps/support/default_color_spec.rb +29 -0
- data/spec/maps/support/heat_range_spec.rb +29 -0
- data/spec/maps/us_spec.rb +12 -0
- data/spec/maps/world_spec.rb +18 -0
- data/spec/spec_helper.rb +5 -4
- data/spec/themes/maps/base_map.yml +81 -0
- data/spec/themes/maps/us_map.yml +6 -0
- data/spec/themes/maps/world_map.yml +6 -0
- data/spec/themes/maps/world_ov_map.yml +6 -0
- data/spec/{helpers/base_helper_spec.rb → yaml_helpers/charts_spec.rb} +10 -13
- data/spec/yaml_helpers/gauges_spec.rb +15 -0
- data/spec/ziya_helper_spec.rb +118 -116
- data/tasks/gem.rake +1 -1
- data/tasks/setup.rb +1 -1
- data/ziya.gemspec +39 -0
- metadata +259 -438
- data/lib/ziya/helpers/base_helper.rb +0 -91
- data/lib/ziya/utils/text.rb +0 -39
- data/lib/ziya/ziya_helper.rb +0 -362
- data/spec/components/draw_spec.rb +0 -37
- data/spec/utils/text_spec.rb +0 -33
@@ -0,0 +1,409 @@
|
|
1
|
+
# -----------------------------------------------------------------------------
|
2
|
+
# == Ziya::Maps::Base
|
3
|
+
#
|
4
|
+
# Maps mother ship
|
5
|
+
#
|
6
|
+
# Author:: Fernand Galiana
|
7
|
+
# Date:: Jan 01 2009
|
8
|
+
# -----------------------------------------------------------------------------
|
9
|
+
require 'ziya/yaml_helpers/maps'
|
10
|
+
require 'ziya/html_helpers/maps'
|
11
|
+
|
12
|
+
module Ziya::Maps
|
13
|
+
class Base
|
14
|
+
include Ziya::YamlHelpers::Maps, Ziya::HtmlHelpers::Maps
|
15
|
+
|
16
|
+
# =========================================================================
|
17
|
+
protected
|
18
|
+
def self.map_types
|
19
|
+
@map_types ||= [
|
20
|
+
:australia,
|
21
|
+
:belgium,
|
22
|
+
:brazil,
|
23
|
+
:canada,
|
24
|
+
:europe,
|
25
|
+
:france,
|
26
|
+
:germany,
|
27
|
+
:italy,
|
28
|
+
:mexico,
|
29
|
+
:sweden,
|
30
|
+
:uk_ireland,
|
31
|
+
:us,
|
32
|
+
:us_canada,
|
33
|
+
:world ]
|
34
|
+
end
|
35
|
+
|
36
|
+
# defines the various map components
|
37
|
+
def self.declare_components # :nodoc:
|
38
|
+
@components =
|
39
|
+
[
|
40
|
+
:arc,
|
41
|
+
:arc_color,
|
42
|
+
:arc_range,
|
43
|
+
:background_color,
|
44
|
+
:default_color,
|
45
|
+
:default_point,
|
46
|
+
:first_zoom,
|
47
|
+
:hover,
|
48
|
+
:heat_range,
|
49
|
+
:line,
|
50
|
+
:line_color,
|
51
|
+
:line_range,
|
52
|
+
:outline_color,
|
53
|
+
:point,
|
54
|
+
:point_range,
|
55
|
+
:ranges,
|
56
|
+
:range,
|
57
|
+
:region,
|
58
|
+
:scale_points,
|
59
|
+
:show_name,
|
60
|
+
:state,
|
61
|
+
:state_info_icon,
|
62
|
+
:zoom_mode,
|
63
|
+
:zoom_out_button,
|
64
|
+
:zoom_out_scale
|
65
|
+
]
|
66
|
+
@components.each { |a| attr_accessor a }
|
67
|
+
end
|
68
|
+
declare_components
|
69
|
+
|
70
|
+
|
71
|
+
# =========================================================================
|
72
|
+
public
|
73
|
+
|
74
|
+
attr_accessor :id, :theme, :options # :nodoc:
|
75
|
+
attr_reader :map_type # :nodoc:
|
76
|
+
|
77
|
+
# create a new map.
|
78
|
+
# <tt>chart_id</tt> -- the name of the map stylesheet.
|
79
|
+
# NOTE: If map_id is specified the framework will attempt to load the map styles
|
80
|
+
# from public/maps/themes/theme_name/map_id.yml
|
81
|
+
def initialize( map_type, map_id=nil ) # :nodoc:
|
82
|
+
raise "Invalid map type '#{map_type.inspect}'" unless Ziya::Maps::Base.map_types.include?( map_type )
|
83
|
+
@id = map_id
|
84
|
+
@options = @series = @points = @arcs = @lines = {}
|
85
|
+
@line_colors = @range_colors = @point_colors = @arc_colors = {}
|
86
|
+
@theme = default_theme
|
87
|
+
@map_type = map_type
|
88
|
+
initialize_components
|
89
|
+
load_helpers( Ziya.helpers_dir ) if Ziya.helpers_dir
|
90
|
+
end
|
91
|
+
|
92
|
+
# class component accessor...
|
93
|
+
def self.components # :nodoc:
|
94
|
+
@components
|
95
|
+
end
|
96
|
+
|
97
|
+
# default ZiYa theme
|
98
|
+
def default_theme # :nodoc:
|
99
|
+
File.join( Ziya.map_themes_dir, %w[default] )
|
100
|
+
end
|
101
|
+
|
102
|
+
# load up ERB style helpers
|
103
|
+
def load_helpers( helper_dir ) # :nodoc:
|
104
|
+
Dir.foreach(helper_dir) do |helper_file|
|
105
|
+
next unless helper_file =~ /^([a-z][a-z_]*_helper).rb$/
|
106
|
+
Ziya.logger.debug( ">>> ZiYa loading custom helper `#{$1}" )
|
107
|
+
# check rails env for autoloader ?
|
108
|
+
if defined?(RAILS_ROOT)
|
109
|
+
require_dependency File.join(helper_dir, $1)
|
110
|
+
else
|
111
|
+
require File.join(helper_dir, $1)
|
112
|
+
end
|
113
|
+
helper_module_name = "Ziya::" + $1.gsub(/(^|_)(.)/) { $2.upcase }
|
114
|
+
# helper_module_name = $1.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
|
115
|
+
# if Ziya::Helpers.const_defined?(helper_module_name)
|
116
|
+
Ziya.logger.debug( "Include module #{helper_module_name}")
|
117
|
+
Ziya::Maps::Base.class_eval("include #{helper_module_name}")
|
118
|
+
# end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
# Add chart components to a given chart.
|
123
|
+
#
|
124
|
+
# The <tt>args</tt> must contain certain keys for the chart
|
125
|
+
# to be displayed correctly.
|
126
|
+
#
|
127
|
+
# === Directives
|
128
|
+
# * <tt>:series</tt> -- Specifies the data points for the map. This must be a hash
|
129
|
+
# of region, data pairs. Where the data is also a hash of attributes such as
|
130
|
+
# :name, :data, :hover, :url and :target.
|
131
|
+
# * <tt>:range_colors</tt> -- Specifies the map of ranges of data values from the
|
132
|
+
# series to a color on the map. The range may be an exact value such as 10 or an
|
133
|
+
# actual range in the form of 1 - 10. The color must be an hexadecimal value of the
|
134
|
+
# form 'ff00ff'.
|
135
|
+
# * <tt>:point_colors</tt> -- Specifies a map of valid color ranges to color the points
|
136
|
+
# on the map. Valid key/value pairs are a number or range for the key and an
|
137
|
+
# associated color.
|
138
|
+
# * <tt>:arc_colors</tt> -- Specifies a map of valid color ranges to color the arcs
|
139
|
+
# on the map. Valid key/value pairs are a number or range for the key and an
|
140
|
+
# associated color.
|
141
|
+
# * <tt>:line_colors</tt> -- Specifies a map of valid color ranges to color the lines
|
142
|
+
# on the map. Valid key/value pairs are a number or range for the key and an
|
143
|
+
# associated color.
|
144
|
+
# * <tt>:lines</tt> -- Specifies a map of lines to plot on the map. These are key/value pairs.
|
145
|
+
# The value represent the name of the line to be displayed. The value is a hash of attributes
|
146
|
+
# as follows: :start, the geocode location of the point, :stop, the geocode location of the arc to end at
|
147
|
+
# :stroke, the thickness of the line and :data for the range value of the arc.
|
148
|
+
# * <tt>:arcs</tt> -- Specifies a map of arcs to plot on the map. These are key/value pairs.
|
149
|
+
# The value represent the name of the arc to be displayed. The value is a hash of attributes
|
150
|
+
# as follows: :start, the geocode location of the point, :stop, the geocode location of the arc to end at
|
151
|
+
# and :data for the range value of the arc.
|
152
|
+
# * <tt>:points</tt> -- Specifies a map of points to plot on the map. These are key/value pairs.
|
153
|
+
# The value represent the name of the point to be displayed. The value is a hash of attributes
|
154
|
+
# as follows: :loc for the geocode location of the point and :data for the range value of the point.
|
155
|
+
# * <tt>:theme</tt> -- Specify the use of a given named theme. The named theme must
|
156
|
+
# reside in a directory named equaly under your application public/charts/themes.
|
157
|
+
#
|
158
|
+
# === Examples
|
159
|
+
# Colorize colorado and california on a US map
|
160
|
+
# my_map.add( :series, { :CO => { :name => "Colorado", :data => 1 }, :CA => { :name => "California", :data => 2 } )
|
161
|
+
def add( *args )
|
162
|
+
# TODO Validation categories = series, series = labels, etc...
|
163
|
+
directive = args.shift
|
164
|
+
case directive
|
165
|
+
when :series
|
166
|
+
if args.first.is_a?( Hash )
|
167
|
+
points = args.shift || {}
|
168
|
+
raise ArgumentError, "Must specify an hash of data points" if points.empty?
|
169
|
+
@series = points
|
170
|
+
else
|
171
|
+
raise ArgumentError, "Must specify an hash of data points"
|
172
|
+
end
|
173
|
+
when :range_colors
|
174
|
+
@range_colors = args.shift || {}
|
175
|
+
raise ArgumentError, "You must specify a hash of data range/color pairs" if @range_colors.empty?
|
176
|
+
when :lines
|
177
|
+
@lines = args.shift || {}
|
178
|
+
raise ArgumentError, "You must specify a hash of lines attributes" if @lines.empty?
|
179
|
+
when :line_colors
|
180
|
+
@line_colors = args.shift || {}
|
181
|
+
raise ArgumentError, "You must specify a hash of line range/color pairs" if @line_colors.empty?
|
182
|
+
when :arcs
|
183
|
+
@arcs = args.shift || {}
|
184
|
+
raise ArgumentError, "You must specify a hash of arcs attributes" if @arcs.empty?
|
185
|
+
when :arc_colors
|
186
|
+
@arc_colors = args.shift || {}
|
187
|
+
raise ArgumentError, "You must specify a hash of arc range/color pairs" if @arc_colors.empty?
|
188
|
+
when :points
|
189
|
+
@points = args.shift || {}
|
190
|
+
raise ArgumentError, "You must specify a hash of points attributes" if @points.empty?
|
191
|
+
when :point_colors
|
192
|
+
@point_colors = args.shift || {}
|
193
|
+
raise ArgumentError, "You must specify a hash of point range/color pairs" if @point_colors.empty?
|
194
|
+
when :user_data
|
195
|
+
key = args.first.is_a?(Symbol) ? args.shift : ""
|
196
|
+
raise ArgumentError, "Must specify a key" if key.to_s.empty?
|
197
|
+
value = args.shift
|
198
|
+
# raise ArgumentError, "Must specify a value" if value.empty?
|
199
|
+
@options[key] = value
|
200
|
+
when :theme
|
201
|
+
theme = args.first.is_a?(String) ? args.shift : ""
|
202
|
+
raise ArgumentError, "Must specify a theme name" if theme.to_s.empty?
|
203
|
+
@theme = "#{Ziya.map_themes_dir}/#{theme}"
|
204
|
+
else raise ArgumentError, "Invalid directive must be one of " +
|
205
|
+
":series, :theme, :user_data"
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
# spews the map specification to a string
|
210
|
+
def to_s
|
211
|
+
@xml = Builder::XmlMarkup.new
|
212
|
+
# Forces utf8 encoding on xml stream
|
213
|
+
@xml.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
|
214
|
+
if map_type == :us
|
215
|
+
@xml.us_states do
|
216
|
+
setup_lnf
|
217
|
+
setup_series
|
218
|
+
end
|
219
|
+
else
|
220
|
+
@xml.countrydata do
|
221
|
+
setup_lnf
|
222
|
+
setup_series
|
223
|
+
end
|
224
|
+
end
|
225
|
+
@xml.to_s.gsub( /<to_s\/>/, '' )
|
226
|
+
end
|
227
|
+
# dumps the map design to xml for client side consumption
|
228
|
+
alias to_xml to_s
|
229
|
+
|
230
|
+
# =========================================================================
|
231
|
+
private
|
232
|
+
|
233
|
+
# inflate object state based on object hierarchy
|
234
|
+
def setup_state( state )
|
235
|
+
override = self.class.name == state.class.name
|
236
|
+
Base.components.each do |comp|
|
237
|
+
instance_eval "#{comp}.merge( state.#{comp}, override ) unless state.#{comp}.nil?"
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
# load yaml file associated with class if any
|
242
|
+
def inflate( clazz, theme, instance=nil )
|
243
|
+
class_name = clazz.to_s.gsub( /Ziya::Maps/, '' ).underscore.gsub( /\//, '' )
|
244
|
+
class_name += '_map' unless class_name.match( /.?_map$/ )
|
245
|
+
begin
|
246
|
+
file_name = "#{theme}/#{class_name}"
|
247
|
+
file_name = "#{theme}/#{instance}" unless instance.nil?
|
248
|
+
Ziya.logger.debug ">>> Ziya attempt to load map stylesheet file '#{file_name}"
|
249
|
+
yml = IO.read( "#{file_name}.yml" )
|
250
|
+
processed = erb_render( yml )
|
251
|
+
# puts ">>> Processed yaml", processed
|
252
|
+
load = YAML::load( processed )
|
253
|
+
Ziya.logger.debug ">>> ZiYa [loading map styles] -- #{file_name}.yml"
|
254
|
+
# puts load.inspect
|
255
|
+
return load
|
256
|
+
rescue SystemCallError => boom
|
257
|
+
Ziya.logger.debug "ERROR #{boom}"
|
258
|
+
; # ignore if no style file...
|
259
|
+
rescue => bang
|
260
|
+
Ziya.logger.debug ">>> ZiYa -- Error encountered loading map file `#{file_name} -- #{bang}"
|
261
|
+
bang.backtrace.each { |l| Ziya.logger.debug( l ) }
|
262
|
+
end
|
263
|
+
nil
|
264
|
+
end
|
265
|
+
|
266
|
+
# parse erb template if any
|
267
|
+
def erb_render(fixture_content)
|
268
|
+
b = binding
|
269
|
+
ERB.new(fixture_content).result b
|
270
|
+
end
|
271
|
+
|
272
|
+
# lay down the map data points and color ranges
|
273
|
+
def setup_series
|
274
|
+
@series.keys.sort{ |a,b| a.to_s <=> b.to_s }.each do |s|
|
275
|
+
hash = @series[s]
|
276
|
+
@xml.state( :id => s ) do |xml|
|
277
|
+
hash.keys.sort{ |a,b| a.to_s <=> b.to_s}.each do |k|
|
278
|
+
self.class.module_eval "xml.#{k}( '#{hash[k]}' )"
|
279
|
+
end
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
# lay down points if any?
|
284
|
+
@points.keys.sort.each do |name|
|
285
|
+
@xml.state( :id => "point" ) do |xml|
|
286
|
+
xml.name( name )
|
287
|
+
@points[name].keys.sort { |a,b| a.to_s <=> b.to_s }.each do |attr|
|
288
|
+
self.class.module_eval "xml.#{attr}( '#{@points[name][attr]}' )"
|
289
|
+
end
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
# lay down points if any?
|
294
|
+
@lines.keys.sort.each do |name|
|
295
|
+
@xml.state( :id => "line" ) do |xml|
|
296
|
+
xml.name( name )
|
297
|
+
@lines[name].keys.sort { |a,b| a.to_s <=> b.to_s }.each do |attr|
|
298
|
+
self.class.module_eval "xml.#{attr}( '#{@lines[name][attr]}' )"
|
299
|
+
end
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
@arcs.keys.sort.each do |name|
|
304
|
+
@xml.state( :id => "arc" ) do |xml|
|
305
|
+
xml.name( name )
|
306
|
+
@arcs[name].keys.sort { |a,b| a.to_s <=> b.to_s }.each do |attr|
|
307
|
+
self.class.module_eval "xml.#{attr}( '#{@arcs[name][attr]}' )"
|
308
|
+
end
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
312
|
+
# lay down range colors if any
|
313
|
+
unless @range_colors.empty?
|
314
|
+
@range_colors.each_pair do |range, color|
|
315
|
+
@xml.state( :id => 'range' ) do
|
316
|
+
@xml.data( range )
|
317
|
+
@xml.color( color )
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
# lay down point range colors if any
|
323
|
+
unless @point_colors.empty?
|
324
|
+
@point_colors.each_pair do |range, color|
|
325
|
+
@xml.state( :id => 'point_range' ) do
|
326
|
+
@xml.data( range )
|
327
|
+
@xml.color( color )
|
328
|
+
end
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
# lay down line range colors if any
|
333
|
+
unless @line_colors.empty?
|
334
|
+
@line_colors.each_pair do |range, color|
|
335
|
+
@xml.state( :id => 'line_range' ) do
|
336
|
+
@xml.data( range )
|
337
|
+
@xml.color( color )
|
338
|
+
end
|
339
|
+
end
|
340
|
+
end
|
341
|
+
|
342
|
+
# lay down arc range colors if any
|
343
|
+
unless @arc_colors.empty?
|
344
|
+
@arc_colors.each_pair do |range, color|
|
345
|
+
@xml.state( :id => 'arc_range' ) do
|
346
|
+
@xml.data( range )
|
347
|
+
@xml.color( color )
|
348
|
+
end
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
end
|
353
|
+
|
354
|
+
# walk up class hierarchy to find chart inheritance classes
|
355
|
+
def ancestors
|
356
|
+
ancestors = self.class.ancestors.reverse
|
357
|
+
allow = false
|
358
|
+
ancestors.map do |k|
|
359
|
+
allow = true if k == Ziya::Maps::Base
|
360
|
+
k if allow
|
361
|
+
end.compact!
|
362
|
+
end
|
363
|
+
|
364
|
+
# load up look and feel data
|
365
|
+
def load_lnf
|
366
|
+
unless @partial
|
367
|
+
ancestors.each do |super_class|
|
368
|
+
# Load class instance prefs
|
369
|
+
if ( super_class == self.class )
|
370
|
+
o = inflate( super_class, theme )
|
371
|
+
setup_state( o ) unless o.nil?
|
372
|
+
# Now load instance prefs if any
|
373
|
+
unless id.nil?
|
374
|
+
o = inflate( super_class, theme, id )
|
375
|
+
setup_state( o ) unless o.nil?
|
376
|
+
end
|
377
|
+
# Otherwise load parent prefs...
|
378
|
+
else
|
379
|
+
o = inflate( super_class, theme, nil )
|
380
|
+
setup_state( o ) unless o.nil?
|
381
|
+
end
|
382
|
+
end
|
383
|
+
end
|
384
|
+
# Additional styles specified ? if so load them
|
385
|
+
unless @options[:styles].nil?
|
386
|
+
o = YAML::load( erb_render( @options[:styles] ) )
|
387
|
+
setup_state( o ) unless o.nil?
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
# generates xml for look and feel data
|
392
|
+
def setup_lnf
|
393
|
+
load_lnf
|
394
|
+
Base.components.sort { |a,b| a.to_s <=> b.to_s }.each do |comp|
|
395
|
+
next unless self.send( comp ).configured?
|
396
|
+
instance_eval "#{comp}.flatten( @xml )"
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
400
|
+
# load up the allowable map components
|
401
|
+
def initialize_components
|
402
|
+
# Setup instance vars
|
403
|
+
Base.components.each do |comp|
|
404
|
+
instance_var = lambda { |v| self.instance_eval{ instance_variable_set "@#{comp}", v } }
|
405
|
+
instance_var.call(Ziya::Maps::Support.const_get( comp.to_s.classify ).new)
|
406
|
+
end
|
407
|
+
end
|
408
|
+
end
|
409
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# -----------------------------------------------------------------------------
|
2
|
+
# Geocode representations
|
3
|
+
#
|
4
|
+
# Author: Fernand
|
5
|
+
# -----------------------------------------------------------------------------
|
6
|
+
module Ziya::Maps
|
7
|
+
class Geocode
|
8
|
+
attr_reader :long, :lat
|
9
|
+
|
10
|
+
def initialize( lat, long )
|
11
|
+
@lat, @long = lat, long
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_s
|
15
|
+
"#{lat},#{long}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'ziya/yaml_helpers/gauges'
|
2
|
+
|
3
|
+
module Ziya::Maps::Support
|
4
|
+
class Base < Ziya::Charts::Support::Base
|
5
|
+
include Ziya::YamlHelpers::Gauges
|
6
|
+
|
7
|
+
# flatten component to xml
|
8
|
+
def flatten( xml )
|
9
|
+
xml.state( :id => to_component_id ) do |b|
|
10
|
+
options.keys.sort { |a,b| a.to_s <=> b.to_s }.each{ |k| self.class.module_eval "xml.#{k}( '#{options[k]}' )" }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# -----------------------------------------------------------------------
|
15
|
+
# converts component to yaml style component for yaml parser consumption
|
16
|
+
def to_comp_yaml( indent_multiplier=1 )
|
17
|
+
buff = []
|
18
|
+
tab = indent( indent_multiplier )
|
19
|
+
buff << "#{dial( self.class.name.demodulize, name )}"
|
20
|
+
options.each_pair do |k,v|
|
21
|
+
buff << "#{tab}#{k}: #{v}" if options[k] and !options[k].to_s.empty?
|
22
|
+
end
|
23
|
+
buff.join( "\n" )
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
# converts class name to underscore name
|
29
|
+
def to_component_id
|
30
|
+
class_name = self.class.name.underscore.split( "/" ).last
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'ziya/maps/support/base'
|
2
|
+
require 'color'
|
3
|
+
|
4
|
+
module Ziya::Maps::Support
|
5
|
+
class HeatRange < Base
|
6
|
+
has_attribute :base_color, :min, :max, :step, :color_step, :color_method
|
7
|
+
|
8
|
+
def flatten( xml )
|
9
|
+
ranges = compute_ranges
|
10
|
+
ranges.each_pair do |range, color|
|
11
|
+
xml.state( :id => 'range' ) do
|
12
|
+
xml.data( range )
|
13
|
+
xml.color( color )
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# -------------------------------------------------------------------------
|
19
|
+
private
|
20
|
+
|
21
|
+
# Compute heat color ranges
|
22
|
+
def compute_ranges
|
23
|
+
ranges = {}
|
24
|
+
color = Color::RGB.from_html( base_color )
|
25
|
+
current = min
|
26
|
+
|
27
|
+
while current < max do
|
28
|
+
ranges["#{current} - #{current+step-1}" ] = color.html.gsub( /#/, '' )
|
29
|
+
color = color.send( color_method || :darken_by, color_step )
|
30
|
+
current += step
|
31
|
+
end
|
32
|
+
ranges
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|