Commit 0be5d3e8655d19ea7e1359429cdeff48c47cb722
Exists in
master
and in
29 other branches
Merge commit 'refs/merge-requests/229' of git://gitorious.org/noosfero/noosfero …
…into merge-requests/229
Showing
38 changed files
with
1033 additions
and
382 deletions
Show diff stats
plugins/mezuro/controllers/mezuro_plugin_myprofile_controller.rb
... | ... | @@ -2,7 +2,15 @@ class MezuroPluginMyprofileController < ProfileController |
2 | 2 | |
3 | 3 | append_view_path File.join(File.dirname(__FILE__) + '/../views') |
4 | 4 | |
5 | - | |
5 | + rescue_from Exception do |exception| | |
6 | + message = URI.escape(CGI.escape(exception.message),'.') | |
7 | + redirect_to_error_page message | |
8 | + end | |
9 | + | |
10 | + def error_page | |
11 | + @message = params[:message] | |
12 | + end | |
13 | + | |
6 | 14 | def choose_base_tool |
7 | 15 | @configuration_content = profile.articles.find(params[:id]) |
8 | 16 | @base_tools = Kalibro::BaseTool.all_names |
... | ... | @@ -11,19 +19,23 @@ class MezuroPluginMyprofileController < ProfileController |
11 | 19 | def choose_metric |
12 | 20 | @configuration_content = profile.articles.find(params[:id]) |
13 | 21 | @base_tool = params[:base_tool] |
14 | - @supported_metrics = Kalibro::BaseTool.find_by_name(@base_tool).supported_metrics | |
22 | + base_tool = Kalibro::BaseTool.find_by_name(@base_tool) | |
23 | + @supported_metrics = base_tool.nil? ? [] : base_tool.supported_metrics | |
15 | 24 | end |
16 | - | |
25 | + | |
17 | 26 | def new_metric_configuration |
18 | 27 | @configuration_content = profile.articles.find(params[:id]) |
19 | 28 | @metric = Kalibro::BaseTool.find_by_name(params[:base_tool]).metric params[:metric_name] |
20 | 29 | end |
21 | - | |
30 | + | |
22 | 31 | def new_compound_metric_configuration |
23 | 32 | @configuration_content = profile.articles.find(params[:id]) |
24 | 33 | @metric_configurations = @configuration_content.metric_configurations |
34 | + if configuration_content_has_errors? | |
35 | + redirect_to_error_page @configuration_content.errors[:base] | |
36 | + end | |
25 | 37 | end |
26 | - | |
38 | + | |
27 | 39 | def edit_metric_configuration |
28 | 40 | @configuration_content = profile.articles.find(params[:id]) |
29 | 41 | @metric_configuration = Kalibro::MetricConfiguration.find_by_configuration_name_and_metric_name(@configuration_content.name, params[:metric_name]) |
... | ... | @@ -36,19 +48,29 @@ class MezuroPluginMyprofileController < ProfileController |
36 | 48 | @metric_configurations = @configuration_content.metric_configurations |
37 | 49 | @metric = @metric_configuration.metric |
38 | 50 | end |
39 | - | |
51 | + | |
40 | 52 | def create_metric_configuration |
41 | 53 | id = params[:id] |
42 | 54 | metric_name = params[:metric_configuration][:metric][:name] |
43 | - (Kalibro::MetricConfiguration.new(params[:metric_configuration])).save | |
44 | - redirect_to "/myprofile/#{profile.identifier}/plugin/mezuro/edit_metric_configuration?id=#{id}&metric_name=#{metric_name.gsub(/\s/, '+')}" | |
55 | + metric_configuration = Kalibro::MetricConfiguration.new(params[:metric_configuration]) | |
56 | + metric_configuration.save | |
57 | + if metric_configuration_has_errors? metric_configuration | |
58 | + redirect_to_error_page metric_configuration.errors[0].message | |
59 | + else | |
60 | + redirect_to "/myprofile/#{profile.identifier}/plugin/mezuro/edit_metric_configuration?id=#{id}&metric_name=#{metric_name.gsub(/\s/, '+')}" | |
61 | + end | |
45 | 62 | end |
46 | - | |
63 | + | |
47 | 64 | def create_compound_metric_configuration |
48 | 65 | id = params[:id] |
49 | 66 | metric_name = params[:metric_configuration][:metric][:name] |
50 | - Kalibro::MetricConfiguration.new(params[:metric_configuration]).save | |
51 | - redirect_to "/myprofile/#{profile.identifier}/plugin/mezuro/edit_compound_metric_configuration?id=#{id}&metric_name=#{metric_name.gsub(/\s/, '+')}" | |
67 | + metric_configuration = Kalibro::MetricConfiguration.new(params[:metric_configuration]) | |
68 | + metric_configuration.save | |
69 | + if metric_configuration_has_errors? metric_configuration | |
70 | + redirect_to_error_page metric_configuration.errors[0].message | |
71 | + else | |
72 | + redirect_to "/myprofile/#{profile.identifier}/plugin/mezuro/edit_compound_metric_configuration?id=#{id}&metric_name=#{metric_name.gsub(/\s/, '+')}" | |
73 | + end | |
52 | 74 | end |
53 | 75 | |
54 | 76 | def update_metric_configuration |
... | ... | @@ -56,7 +78,11 @@ class MezuroPluginMyprofileController < ProfileController |
56 | 78 | metric_name = params[:metric_configuration][:metric][:name] |
57 | 79 | metric_configuration = Kalibro::MetricConfiguration.find_by_configuration_name_and_metric_name(@configuration_content.name, metric_name) |
58 | 80 | metric_configuration.update_attributes params[:metric_configuration] |
59 | - redirect_to "/#{profile.identifier}/#{@configuration_content.slug}" | |
81 | + if metric_configuration_has_errors? metric_configuration | |
82 | + redirect_to_error_page metric_configuration.errors[0].message | |
83 | + else | |
84 | + redirect_to "/#{profile.identifier}/#{@configuration_content.slug}" | |
85 | + end | |
60 | 86 | end |
61 | 87 | |
62 | 88 | def update_compound_metric_configuration |
... | ... | @@ -64,7 +90,11 @@ class MezuroPluginMyprofileController < ProfileController |
64 | 90 | metric_name = params[:metric_configuration][:metric][:name] |
65 | 91 | metric_configuration = Kalibro::MetricConfiguration.find_by_configuration_name_and_metric_name(@configuration_content.name, metric_name) |
66 | 92 | metric_configuration.update_attributes params[:metric_configuration] |
67 | - redirect_to "/#{profile.identifier}/#{@configuration_content.slug}" | |
93 | + if metric_configuration_has_errors? metric_configuration | |
94 | + redirect_to_error_page metric_configuration.errors[0].message | |
95 | + else | |
96 | + redirect_to "/#{profile.identifier}/#{@configuration_content.slug}" | |
97 | + end | |
68 | 98 | end |
69 | 99 | |
70 | 100 | def remove_metric_configuration |
... | ... | @@ -72,32 +102,41 @@ class MezuroPluginMyprofileController < ProfileController |
72 | 102 | metric_name = params[:metric_name] |
73 | 103 | metric_configuration = Kalibro::MetricConfiguration.find_by_configuration_name_and_metric_name(configuration_content.name, metric_name) |
74 | 104 | metric_configuration.destroy |
75 | - redirect_to "/#{profile.identifier}/#{configuration_content.slug}" | |
105 | + if metric_configuration_has_errors? metric_configuration | |
106 | + redirect_to_error_page metric_configuration.errors[0].message | |
107 | + else | |
108 | + redirect_to "/#{profile.identifier}/#{configuration_content.slug}" | |
109 | + end | |
76 | 110 | end |
77 | - | |
111 | + | |
78 | 112 | def new_range |
79 | 113 | @configuration_content = profile.articles.find(params[:id]) |
80 | 114 | @metric_name = params[:metric_name] |
81 | 115 | @range = Kalibro::Range.new |
116 | + @range_color = "#000000" | |
82 | 117 | end |
83 | - | |
118 | + | |
84 | 119 | def edit_range |
85 | 120 | @configuration_content = profile.articles.find(params[:id]) |
86 | 121 | @metric_name = params[:metric_name] |
87 | 122 | @beginning_id = params[:beginning_id] |
88 | 123 | metric_configuration = Kalibro::MetricConfiguration.find_by_configuration_name_and_metric_name(@configuration_content.name, @metric_name) |
89 | 124 | @range = metric_configuration.ranges.find{|range| range.beginning == @beginning_id.to_f || @beginning_id =="-INF" } |
125 | + @range_color = "#" + @range.color.to_s.gsub(/^ff/, "") | |
90 | 126 | end |
91 | 127 | |
92 | 128 | def create_range |
93 | 129 | @configuration_content = profile.articles.find(params[:id]) |
94 | 130 | @range = Kalibro::Range.new params[:range] |
95 | 131 | metric_name = params[:metric_name] |
96 | - metric_configuration = Kalibro::MetricConfiguration.find_by_configuration_name_and_metric_name(@configuration_content.name, metric_name) | |
132 | + metric_configuration = Kalibro::MetricConfiguration.find_by_configuration_name_and_metric_name(@configuration_content.name, metric_name) | |
97 | 133 | metric_configuration.add_range(@range) |
98 | 134 | metric_configuration.save |
135 | + if metric_configuration_has_errors? metric_configuration | |
136 | + redirect_to_error_page metric_configuration.errors[0].message | |
137 | + end | |
99 | 138 | end |
100 | - | |
139 | + | |
101 | 140 | def update_range |
102 | 141 | configuration_content = profile.articles.find(params[:id]) |
103 | 142 | metric_name = params[:metric_name] |
... | ... | @@ -106,8 +145,11 @@ class MezuroPluginMyprofileController < ProfileController |
106 | 145 | index = metric_configuration.ranges.index{ |range| range.beginning == beginning_id.to_f || beginning_id == "-INF" } |
107 | 146 | metric_configuration.ranges[index] = Kalibro::Range.new params[:range] |
108 | 147 | metric_configuration.save |
148 | + if metric_configuration_has_errors? metric_configuration | |
149 | + redirect_to_error_page metric_configuration.errors[0].message | |
150 | + end | |
109 | 151 | end |
110 | - | |
152 | + | |
111 | 153 | def remove_range |
112 | 154 | configuration_content = profile.articles.find(params[:id]) |
113 | 155 | metric_name = params[:metric_name] |
... | ... | @@ -115,12 +157,31 @@ class MezuroPluginMyprofileController < ProfileController |
115 | 157 | metric_configuration = Kalibro::MetricConfiguration.find_by_configuration_name_and_metric_name(configuration_content.name, metric_name) |
116 | 158 | metric_configuration.ranges.delete_if { |range| range.beginning == beginning_id.to_f || beginning_id == "-INF" } |
117 | 159 | metric_configuration.save |
118 | - formatted_metric_name = metric_name.gsub(/\s/, '+') | |
119 | - if metric_configuration.metric.class == Kalibro::CompoundMetric | |
120 | - redirect_to "/myprofile/#{profile.identifier}/plugin/mezuro/edit_compound_metric_configuration?id=#{configuration_content.id}&metric_name=#{formatted_metric_name}" | |
160 | + if metric_configuration_has_errors? metric_configuration | |
161 | + redirect_to_error_page metric_configuration.errors[0].message | |
121 | 162 | else |
122 | - redirect_to "/myprofile/#{profile.identifier}/plugin/mezuro/edit_metric_configuration?id=#{configuration_content.id}&metric_name=#{formatted_metric_name}" | |
163 | + formatted_metric_name = metric_name.gsub(/\s/, '+') | |
164 | + if metric_configuration.metric.class == Kalibro::CompoundMetric | |
165 | + redirect_to "/myprofile/#{profile.identifier}/plugin/mezuro/edit_compound_metric_configuration?id=#{configuration_content.id}&metric_name=#{formatted_metric_name}" | |
166 | + else | |
167 | + redirect_to "/myprofile/#{profile.identifier}/plugin/mezuro/edit_metric_configuration?id=#{configuration_content.id}&metric_name=#{formatted_metric_name}" | |
168 | + end | |
123 | 169 | end |
124 | 170 | end |
125 | 171 | |
172 | + private | |
173 | + | |
174 | + def redirect_to_error_page(message) | |
175 | + message = URI.escape(CGI.escape(message),'.') | |
176 | + redirect_to "/myprofile/#{profile.identifier}/plugin/mezuro/error_page?message=#{message}" | |
177 | + end | |
178 | + | |
179 | + def configuration_content_has_errors? | |
180 | + not @configuration_content.errors[:base].nil? | |
181 | + end | |
182 | + | |
183 | + def metric_configuration_has_errors? metric_configuration | |
184 | + not metric_configuration.errors.empty? | |
185 | + end | |
186 | + | |
126 | 187 | end | ... | ... |
plugins/mezuro/controllers/mezuro_plugin_profile_controller.rb
1 | 1 | class MezuroPluginProfileController < ProfileController |
2 | 2 | |
3 | 3 | append_view_path File.join(File.dirname(__FILE__) + '/../views') |
4 | - | |
4 | + | |
5 | + def error_page | |
6 | + @message = params[:message] | |
7 | + end | |
8 | + | |
5 | 9 | def project_state |
6 | 10 | @content = profile.articles.find(params[:id]) |
7 | 11 | project = @content.project |
8 | - state = project.error.nil? ? project.state : "ERROR" | |
9 | - render :text => state | |
12 | + if project_content_has_errors? | |
13 | + redirect_to_error_page(@content.errors[:base]) | |
14 | + else | |
15 | + state = project.kalibro_error.nil? ? project.state : "ERROR" | |
16 | + render :text => state | |
17 | + end | |
10 | 18 | end |
11 | 19 | |
12 | 20 | def project_error |
13 | 21 | @content = profile.articles.find(params[:id]) |
14 | 22 | @project = @content.project |
15 | - render :partial => 'content_viewer/project_error' | |
23 | + if project_content_has_errors? | |
24 | + redirect_to_error_page(@content.errors[:base]) | |
25 | + else | |
26 | + render :partial => 'content_viewer/project_error' | |
27 | + end | |
16 | 28 | end |
17 | 29 | |
18 | 30 | def project_result |
19 | 31 | @content = profile.articles.find(params[:id]) |
20 | 32 | date = params[:date] |
21 | 33 | @project_result = date.nil? ? @content.project_result : @content.project_result_with_date(date) |
22 | - render :partial => 'content_viewer/project_result' | |
23 | - end | |
34 | + if project_content_has_errors? | |
35 | + redirect_to_error_page(@content.errors[:base]) | |
36 | + else | |
37 | + render :partial => 'content_viewer/project_result' | |
38 | + end | |
39 | + end | |
24 | 40 | |
25 | 41 | def module_result |
26 | 42 | @content = profile.articles.find(params[:id]) |
27 | 43 | @module_result = @content.module_result(params) |
28 | - render :partial => 'content_viewer/module_result' | |
44 | + @module = @module_result.module | |
45 | + @module_label = "#{@module.name} (#{@module.granularity})" | |
46 | + if project_content_has_errors? | |
47 | + redirect_to_error_page(@content.errors[:base]) | |
48 | + else | |
49 | + render :partial => 'content_viewer/module_result' | |
50 | + end | |
29 | 51 | end |
30 | 52 | |
31 | 53 | def project_tree |
32 | 54 | @content = profile.articles.find(params[:id]) |
33 | 55 | date = params[:date] |
34 | 56 | project_result = date.nil? ? @content.project_result : @content.project_result_with_date(date) |
35 | - @project_name = @content.project.name | |
36 | - @source_tree = project_result.node_of(params[:module_name]) | |
37 | - render :partial =>'content_viewer/source_tree' | |
57 | + @project_name = @content.project.name if not @content.project.nil? | |
58 | + if project_content_has_errors? | |
59 | + redirect_to_error_page(@content.errors[:base]) | |
60 | + else | |
61 | + @source_tree = project_result.node(params[:module_name]) | |
62 | + render :partial =>'content_viewer/source_tree' | |
63 | + end | |
38 | 64 | end |
39 | 65 | |
40 | 66 | def module_metrics_history |
41 | 67 | metric_name = params[:metric_name] |
42 | 68 | @content = profile.articles.find(params[:id]) |
43 | 69 | module_history = @content.result_history(params[:module_name]) |
44 | - @score_history = filtering_metric_history(metric_name, module_history) | |
45 | - render :partial => 'content_viewer/score_history' | |
70 | + if project_content_has_errors? | |
71 | + redirect_to_error_page(@content.errors[:base]) | |
72 | + else | |
73 | + @score_history = filtering_metric_history(metric_name, module_history) | |
74 | + render :partial => 'content_viewer/score_history' | |
75 | + end | |
46 | 76 | end |
47 | 77 | |
48 | 78 | def module_grade_history |
49 | 79 | @content = profile.articles.find(params[:id]) |
50 | 80 | modules_results = @content.result_history(params[:module_name]) |
51 | - @score_history = modules_results.collect { |module_result| module_result.grade } | |
52 | - render :partial => 'content_viewer/score_history' | |
81 | + if project_content_has_errors? | |
82 | + redirect_to_error_page(@content.errors[:base]) | |
83 | + else | |
84 | + @score_history = modules_results.map do |module_result| | |
85 | + [module_result.grade, format_date_to_simple_form(module_result.date)] | |
86 | + end | |
87 | + render :partial => 'content_viewer/score_history' | |
88 | + end | |
53 | 89 | end |
54 | - | |
90 | + | |
55 | 91 | private |
56 | - | |
92 | + | |
57 | 93 | def filtering_metric_history(metric_name, module_history) |
58 | 94 | metrics_history = module_history.map do |module_result| |
59 | - module_result.metric_results | |
95 | + [module_result.metric_results, format_date_to_simple_form(module_result.date)] | |
60 | 96 | end |
61 | - metric_history = metrics_history.map do |array_of_metric_result| | |
62 | - (array_of_metric_result.select do |metric_result| | |
97 | + metric_history = metrics_history.map do |metric_results_with_date| | |
98 | + [(metric_results_with_date.first.select do |metric_result| | |
63 | 99 | metric_result.metric.name.delete("() ") == metric_name |
64 | - end).first | |
100 | + end).first, metric_results_with_date.last] | |
65 | 101 | end |
66 | - metric_history.map do |metric_result| | |
67 | - metric_result.value | |
102 | + metric_history.map do |metric_result_with_date| | |
103 | + [metric_result_with_date.first.value, metric_result_with_date.last] | |
68 | 104 | end |
69 | 105 | end |
106 | + | |
107 | + def redirect_to_error_page(message) | |
108 | + message = URI.escape(CGI.escape(message),'.') | |
109 | + redirect_to "/profile/#{profile.identifier}/plugins/mezuro/error_page?message=#{message}" | |
110 | + end | |
111 | + | |
112 | + def project_content_has_errors? | |
113 | + not @content.errors[:base].nil? | |
114 | + end | |
115 | + | |
116 | + def format_date_to_simple_form date | |
117 | + date.to_s[0..9] | |
118 | + end | |
119 | + | |
70 | 120 | end | ... | ... |
plugins/mezuro/lib/kalibro/configuration.rb
... | ... | @@ -7,11 +7,7 @@ class Kalibro::Configuration < Kalibro::Model |
7 | 7 | end |
8 | 8 | |
9 | 9 | def metric_configurations |
10 | - if @metric_configuration != nil | |
11 | - @metric_configuration | |
12 | - else | |
13 | - [] | |
14 | - end | |
10 | + @metric_configuration.nil? ? [] : @metric_configuration | |
15 | 11 | end |
16 | 12 | |
17 | 13 | def metric_configurations=(metric_configurations) |
... | ... | @@ -19,19 +15,11 @@ class Kalibro::Configuration < Kalibro::Model |
19 | 15 | end |
20 | 16 | |
21 | 17 | def self.find_by_name(configuration_name) |
22 | - begin | |
23 | - new request("Configuration", :get_configuration, {:configuration_name => configuration_name})[:configuration] | |
24 | - rescue Exception => error | |
25 | - nil | |
26 | - end | |
18 | + new request("Configuration", :get_configuration, {:configuration_name => configuration_name})[:configuration] | |
27 | 19 | end |
28 | 20 | |
29 | 21 | def self.all_names |
30 | - begin | |
31 | - request("Configuration", :get_configuration_names)[:configuration_name] | |
32 | - rescue Exception | |
33 | - [] | |
34 | - end | |
22 | + request("Configuration", :get_configuration_names)[:configuration_name] | |
35 | 23 | end |
36 | 24 | |
37 | 25 | def update_attributes(attributes={}) | ... | ... |
plugins/mezuro/lib/kalibro/metric_configuration.rb
... | ... | @@ -49,10 +49,14 @@ class Kalibro::MetricConfiguration < Kalibro::Model |
49 | 49 | end |
50 | 50 | |
51 | 51 | def destroy |
52 | - self.class.request("MetricConfiguration", :remove_metric_configuration, { | |
52 | + begin | |
53 | + self.class.request("MetricConfiguration", :remove_metric_configuration, { | |
53 | 54 | :configuration_name => configuration_name, |
54 | 55 | :metric_name=> metric.name |
55 | 56 | }) |
57 | + rescue Exception => exception | |
58 | + add_error exception | |
59 | + end | |
56 | 60 | end |
57 | 61 | |
58 | 62 | def to_hash | ... | ... |
plugins/mezuro/lib/kalibro/model.rb
1 | 1 | class Kalibro::Model |
2 | 2 | |
3 | + attr_accessor :errors | |
4 | + | |
3 | 5 | def initialize(attributes={}) |
4 | 6 | attributes.each { |field, value| send("#{field}=", value) if self.class.is_valid?(field) } |
7 | + @errors = [] | |
5 | 8 | end |
6 | 9 | |
7 | 10 | def to_hash(options={}) |
8 | 11 | hash = Hash.new |
9 | 12 | excepts = !options[:except].nil? ? options[:except] : [] |
13 | + excepts << :errors | |
10 | 14 | fields.each do |field| |
11 | 15 | if(!excepts.include?(field)) |
12 | 16 | field_value = send(field) |
... | ... | @@ -46,15 +50,17 @@ class Kalibro::Model |
46 | 50 | begin |
47 | 51 | self.class.request(save_endpoint, save_action, save_params) |
48 | 52 | true |
49 | - rescue Exception => error | |
50 | - false | |
53 | + rescue Exception => exception | |
54 | + add_error exception | |
55 | + false | |
51 | 56 | end |
52 | 57 | end |
53 | 58 | |
54 | 59 | def destroy |
55 | 60 | begin |
56 | 61 | self.class.request(destroy_endpoint, destroy_action, destroy_params) |
57 | - rescue Exception | |
62 | + rescue Exception => exception | |
63 | + add_error exception | |
58 | 64 | end |
59 | 65 | end |
60 | 66 | |
... | ... | @@ -123,4 +129,9 @@ class Kalibro::Model |
123 | 129 | {"#{class_name.underscore}_name".to_sym => self.name} |
124 | 130 | end |
125 | 131 | |
132 | + def add_error(exception) | |
133 | + @errors << exception | |
134 | + end | |
135 | + | |
126 | 136 | end |
137 | + | ... | ... |
plugins/mezuro/lib/kalibro/project.rb
1 | 1 | class Kalibro::Project < Kalibro::Model |
2 | 2 | |
3 | - attr_accessor :name, :license, :description, :repository, :configuration_name, :state, :error | |
3 | + attr_accessor :name, :license, :description, :repository, :configuration_name, :state, :kalibro_error | |
4 | 4 | |
5 | 5 | def self.all_names |
6 | 6 | request("Project", :get_project_names)[:project_name] |
... | ... | @@ -15,23 +15,35 @@ class Kalibro::Project < Kalibro::Model |
15 | 15 | end |
16 | 16 | |
17 | 17 | def error=(value) |
18 | - @error = Kalibro::Error.to_object value | |
18 | + @kalibro_error = Kalibro::Error.to_object value | |
19 | 19 | end |
20 | 20 | |
21 | 21 | def process_project(days = '0') |
22 | - if days.to_i.zero? | |
23 | - self.class.request("Kalibro", :process_project, {:project_name => name}) | |
24 | - else | |
25 | - self.class.request("Kalibro", :process_periodically, {:project_name => name, :period_in_days => days}) | |
26 | - end | |
22 | + begin | |
23 | + if days.to_i.zero? | |
24 | + self.class.request("Kalibro", :process_project, {:project_name => name}) | |
25 | + else | |
26 | + self.class.request("Kalibro", :process_periodically, {:project_name => name, :period_in_days => days}) | |
27 | + end | |
28 | + rescue Exception => exception | |
29 | + add_error exception | |
30 | + end | |
27 | 31 | end |
28 | 32 | |
29 | 33 | def process_period |
30 | - self.class.request("Kalibro", :get_process_period, {:project_name => name})[:period] | |
34 | + begin | |
35 | + self.class.request("Kalibro", :get_process_period, {:project_name => name})[:period] | |
36 | + rescue Exception => exception | |
37 | + add_error exception | |
38 | + end | |
31 | 39 | end |
32 | 40 | |
33 | 41 | def cancel_periodic_process |
34 | - self.class.request("Kalibro", :cancel_periodic_process, {:project_name => name}) | |
42 | + begin | |
43 | + self.class.request("Kalibro", :cancel_periodic_process, {:project_name => name}) | |
44 | + rescue Exception => exception | |
45 | + add_error exception | |
46 | + end | |
35 | 47 | end |
36 | 48 | |
37 | 49 | end | ... | ... |
plugins/mezuro/lib/kalibro/project_result.rb
... | ... | @@ -75,21 +75,17 @@ class Kalibro::ProjectResult < Kalibro::Model |
75 | 75 | ('%2d' % amount).sub(/\s/, '0') |
76 | 76 | end |
77 | 77 | |
78 | - def node_of(module_name) | |
78 | + def node(module_name) | |
79 | 79 | if module_name.nil? or module_name == project.name |
80 | 80 | node = source_tree |
81 | 81 | else |
82 | - node = get_node(module_name) | |
83 | - end | |
84 | - end | |
85 | - | |
86 | - def get_node(module_name) | |
87 | - path = Kalibro::Module.parent_names(module_name) | |
88 | - parent = @source_tree | |
89 | - path.each do |node_name| | |
90 | - parent = get_leaf_from(parent, node_name) | |
91 | - end | |
92 | - return parent | |
82 | + path = Kalibro::Module.parent_names(module_name) | |
83 | + parent = @source_tree | |
84 | + path.each do |node_name| | |
85 | + parent = get_leaf_from(parent, node_name) | |
86 | + end | |
87 | + parent | |
88 | + end | |
93 | 89 | end |
94 | 90 | |
95 | 91 | private | ... | ... |
plugins/mezuro/lib/kalibro/range.rb
... | ... | @@ -34,4 +34,12 @@ class Kalibro::Range < Kalibro::Model |
34 | 34 | @grade = value.to_f |
35 | 35 | end |
36 | 36 | |
37 | + def mezuro_color | |
38 | + @color.nil? ? "#e4ca2d" : @color.gsub(/^ff/, "#") | |
39 | + end | |
40 | + | |
41 | + def color=(new_color) | |
42 | + @color = new_color.gsub(/^#/, "ff") | |
43 | + end | |
44 | + | |
37 | 45 | end | ... | ... |
plugins/mezuro/lib/mezuro_plugin/configuration_content.rb
... | ... | @@ -3,8 +3,8 @@ class MezuroPlugin::ConfigurationContent < Article |
3 | 3 | |
4 | 4 | settings_items :description, :configuration_to_clone_name |
5 | 5 | |
6 | - after_save :send_configuration_to_service | |
7 | - after_destroy :remove_configuration_from_service | |
6 | + after_save :send_kalibro_configuration_to_service | |
7 | + after_destroy :remove_kalibro_configuration_from_service | |
8 | 8 | |
9 | 9 | def self.short_description |
10 | 10 | 'Kalibro configuration' |
... | ... | @@ -21,54 +21,60 @@ class MezuroPlugin::ConfigurationContent < Article |
21 | 21 | end |
22 | 22 | end |
23 | 23 | |
24 | - def configuration | |
25 | - @configuration ||= Kalibro::Configuration.find_by_name(self.name) | |
26 | - if @configuration.nil? | |
27 | - errors.add_to_base("Kalibro Configuration not found") | |
24 | + def kalibro_configuration | |
25 | + begin | |
26 | + @kalibro_configuration ||= Kalibro::Configuration.find_by_name(self.name) | |
27 | + rescue Exception => exception | |
28 | + errors.add_to_base(exception.message) | |
28 | 29 | end |
29 | - @configuration | |
30 | + @kalibro_configuration | |
30 | 31 | end |
31 | 32 | |
32 | 33 | def metric_configurations |
33 | - configuration.metric_configurations | |
34 | + kalibro_configuration.metric_configurations | |
34 | 35 | end |
35 | 36 | |
36 | - def configuration_names | |
37 | - ["None"] + Kalibro::Configuration.all_names.sort | |
37 | + def kalibro_configuration_names | |
38 | + begin | |
39 | + ["None"] + Kalibro::Configuration.all_names.sort | |
40 | + rescue Exception => exception | |
41 | + errors.add_to_base(exception.message) | |
42 | + ["None"] | |
43 | + end | |
38 | 44 | end |
39 | 45 | |
40 | 46 | private |
41 | 47 | |
42 | 48 | def validate_kalibro_configuration_name |
43 | - existing = configuration_names.map { |a| a.downcase} | |
49 | + existing = kalibro_configuration_names.map { |a| a.downcase} | |
44 | 50 | |
45 | 51 | if existing.include?(name.downcase) |
46 | 52 | errors.add_to_base("Configuration name already exists in Kalibro") |
47 | 53 | end |
48 | 54 | end |
49 | 55 | |
50 | - def send_configuration_to_service | |
51 | - if editing_configuration? | |
52 | - configuration.update_attributes({:description => description}) | |
56 | + def send_kalibro_configuration_to_service | |
57 | + if editing_kalibro_configuration? | |
58 | + kalibro_configuration.update_attributes({:description => description}) | |
53 | 59 | else |
54 | 60 | create_kalibro_configuration |
55 | 61 | end |
56 | 62 | end |
57 | 63 | |
58 | - def remove_configuration_from_service | |
59 | - configuration.destroy | |
64 | + def remove_kalibro_configuration_from_service | |
65 | + kalibro_configuration.destroy unless kalibro_configuration.nil? | |
60 | 66 | end |
61 | 67 | |
62 | 68 | def create_kalibro_configuration |
63 | 69 | attributes = {:name => name, :description => description} |
64 | - if cloning_configuration? | |
70 | + if cloning_kalibro_configuration? | |
65 | 71 | attributes[:metric_configuration] = configuration_to_clone.metric_configurations_hash |
66 | 72 | end |
67 | 73 | Kalibro::Configuration.create attributes |
68 | 74 | end |
69 | 75 | |
70 | - def editing_configuration? | |
71 | - configuration.present? | |
76 | + def editing_kalibro_configuration? | |
77 | + kalibro_configuration.present? | |
72 | 78 | end |
73 | 79 | |
74 | 80 | def configuration_to_clone |
... | ... | @@ -76,10 +82,10 @@ class MezuroPlugin::ConfigurationContent < Article |
76 | 82 | end |
77 | 83 | |
78 | 84 | def find_configuration_to_clone |
79 | - configuration_to_clone_name.nil? ? nil : Kalibro::Configuration.find_by_name(configuration_to_clone_name) | |
85 | + (configuration_to_clone_name == "None") ? nil : Kalibro::Configuration.find_by_name(configuration_to_clone_name) | |
80 | 86 | end |
81 | 87 | |
82 | - def cloning_configuration? | |
88 | + def cloning_kalibro_configuration? | |
83 | 89 | configuration_to_clone.present? |
84 | 90 | end |
85 | 91 | ... | ... |
plugins/mezuro/lib/mezuro_plugin/helpers/content_viewer_helper.rb
1 | 1 | class MezuroPlugin::Helpers::ContentViewerHelper |
2 | + | |
3 | + MAX_NUMBER_OF_LABELS = 5 | |
4 | + | |
2 | 5 | def self.format_grade(grade) |
3 | 6 | sprintf("%.2f", grade.to_f) |
4 | 7 | end |
... | ... | @@ -6,15 +9,31 @@ class MezuroPlugin::Helpers::ContentViewerHelper |
6 | 9 | def self.create_periodicity_options |
7 | 10 | [["Not Periodically", 0], ["1 day", 1], ["2 days", 2], ["Weekly", 7], ["Biweeky", 15], ["Monthly", 30]] |
8 | 11 | end |
9 | - | |
10 | - def self.generate_chart(values) | |
11 | - Gchart.line( | |
12 | + | |
13 | + def self.create_license_options | |
14 | + options = YAML.load_file("#{RAILS_ROOT}/plugins/mezuro/licenses.yaml") | |
15 | + options = options.split(";") | |
16 | + formated_options = [] | |
17 | + options.each { |option| formated_options << [option, option] } | |
18 | + formated_options | |
19 | + end | |
20 | + | |
21 | + def self.generate_chart(score_history) | |
22 | + values = [] | |
23 | + labels = [] | |
24 | + score_history.each do |score_data| | |
25 | + values << score_data.first | |
26 | + labels << score_data.last | |
27 | + end | |
28 | + labels = discretize_array labels | |
29 | + Gchart.line( | |
12 | 30 | :title_color => 'FF0000', |
13 | 31 | :size => '600x180', |
14 | 32 | :bg => {:color => 'efefef', :type => 'stripes'}, |
15 | 33 | :line_colors => 'c4a000', |
16 | 34 | :data => values, |
17 | - :axis_with_labels => 'y', | |
35 | + :labels => labels, | |
36 | + :axis_with_labels => ['y','x'], | |
18 | 37 | :max_value => values.max, |
19 | 38 | :min_value => values.min |
20 | 39 | ) |
... | ... | @@ -25,8 +44,33 @@ class MezuroPlugin::Helpers::ContentViewerHelper |
25 | 44 | selected_option = options.find { |option| option.last == index.to_i } |
26 | 45 | selected_option.first |
27 | 46 | end |
28 | - | |
47 | + | |
29 | 48 | def self.format_name(metric_result) |
30 | 49 | metric_result.metric.name.delete("() ") |
31 | 50 | end |
51 | + | |
52 | + def self.get_license_option(selected) | |
53 | + options = YAML.load_file("#{RAILS_ROOT}/plugins/mezuro/licenses.yaml") | |
54 | + options.split(";") | |
55 | + selected_option = options.find { |license| license == selected } | |
56 | + end | |
57 | + | |
58 | + private | |
59 | + | |
60 | + def self.discretize_array(array) | |
61 | + if array.size > MAX_NUMBER_OF_LABELS | |
62 | + range_array.map { |i| discrete_element(array, i)} | |
63 | + else | |
64 | + array | |
65 | + end | |
66 | + end | |
67 | + | |
68 | + def self.range_array | |
69 | + (0..(MAX_NUMBER_OF_LABELS - 1)).to_a | |
70 | + end | |
71 | + | |
72 | + def self.discrete_element(array, i) | |
73 | + array[(i*(array.size - 1))/(MAX_NUMBER_OF_LABELS - 1)] | |
74 | + end | |
75 | + | |
32 | 76 | end | ... | ... |
plugins/mezuro/lib/mezuro_plugin/project_content.rb
1 | 1 | class MezuroPlugin::ProjectContent < Article |
2 | 2 | include ActionView::Helpers::TagHelper |
3 | 3 | |
4 | - settings_items :license, :description, :repository_type, :repository_url, :configuration_name, :periodicity_in_days | |
4 | + settings_items :project_license, :description, :repository_type, :repository_url, :configuration_name, :periodicity_in_days | |
5 | 5 | |
6 | 6 | validate_on_create :validate_kalibro_project_name |
7 | 7 | validate_on_create :validate_repository_url |
... | ... | @@ -26,6 +26,7 @@ class MezuroPlugin::ProjectContent < Article |
26 | 26 | rescue Exception => error |
27 | 27 | errors.add_to_base(error.message) |
28 | 28 | end |
29 | + @project | |
29 | 30 | end |
30 | 31 | |
31 | 32 | def project_result |
... | ... | @@ -34,6 +35,7 @@ class MezuroPlugin::ProjectContent < Article |
34 | 35 | rescue Exception => error |
35 | 36 | errors.add_to_base(error.message) |
36 | 37 | end |
38 | + @project_result | |
37 | 39 | end |
38 | 40 | |
39 | 41 | def project_result_with_date(date) |
... | ... | @@ -43,6 +45,7 @@ Kalibro::ProjectResult.first_result_after(name, date) |
43 | 45 | rescue Exception => error |
44 | 46 | errors.add_to_base(error.message) |
45 | 47 | end |
48 | + @project_result | |
46 | 49 | end |
47 | 50 | |
48 | 51 | def module_result(attributes) |
... | ... | @@ -53,6 +56,7 @@ Kalibro::ProjectResult.first_result_after(name, date) |
53 | 56 | rescue Exception => error |
54 | 57 | errors.add_to_base(error.message) |
55 | 58 | end |
59 | + @module_result | |
56 | 60 | end |
57 | 61 | |
58 | 62 | def result_history(module_name) |
... | ... | @@ -73,6 +77,7 @@ Kalibro::ProjectResult.first_result_after(name, date) |
73 | 77 | existing = Kalibro::Project.all_names |
74 | 78 | rescue Exception => error |
75 | 79 | errors.add_to_base(error.message) |
80 | + existing = [] | |
76 | 81 | end |
77 | 82 | |
78 | 83 | if existing.any?{|existing_name| existing_name.casecmp(name)==0} # existing.include?(name) + case insensitive |
... | ... | @@ -94,7 +99,7 @@ Kalibro::ProjectResult.first_result_after(name, date) |
94 | 99 | def create_kalibro_project |
95 | 100 | Kalibro::Project.create( |
96 | 101 | :name => name, |
97 | - :license => license, | |
102 | + :license => project_license, | |
98 | 103 | :description => description, |
99 | 104 | :repository => { |
100 | 105 | :type => repository_type, |
... | ... | @@ -105,7 +110,7 @@ Kalibro::ProjectResult.first_result_after(name, date) |
105 | 110 | end |
106 | 111 | |
107 | 112 | def destroy_project_from_service |
108 | - project.destroy | |
113 | + project.destroy unless project.nil? | |
109 | 114 | end |
110 | 115 | |
111 | 116 | end | ... | ... |
... | ... | @@ -0,0 +1,69 @@ |
1 | +Academic Free License 3.0 (AFL-3.0); | |
2 | +Affero GNU Public License (AGPL-3.0); | |
3 | +Adaptive Public License (APL-1.0); | |
4 | +Apache License 2.0 (Apache-2.0); | |
5 | +Apple Public Source License (APSL-2.0); | |
6 | +Artistic license 2.0 (Artistic-2.0); | |
7 | +Attribution Assurance Licenses (AAL); | |
8 | +BSD 3-Clause "New" or "Revised" License (BSD-3-Clause); | |
9 | +BSD 2-Clause "Simplified" or "FreeBSD" License (BSD-2-Clause); | |
10 | +Boost Software License (BSL-1.0); | |
11 | +Computer Associates Trusted Open Source License 1.1 (CATOSL-1.1); | |
12 | +Common Development and Distribution License 1.0 (CDDL-1.0); | |
13 | +Common Public Attribution License 1.0 (CPAL-1.0); | |
14 | +CUA Office Public License Version 1.0 (CUA-OPL-1.0); | |
15 | +EU DataGrid Software License (EUDatagrid); | |
16 | +Eclipse Public License 1.0 (EPL-1.0); | |
17 | +Educational Community License, Version 2.0 (ECL-2.0); | |
18 | +Eiffel Forum License V2.0 (EFL-2.0); | |
19 | +Entessa Public License (Entessa); | |
20 | +European Union Public License, Version 1.1 (EUPL-1.1); | |
21 | +Fair License (FAIR); | |
22 | +Frameworx License (Frameworx-1.0); | |
23 | +GNU Affero General Public License v3 (AGPL-3.0); | |
24 | +GNU General Public License version 2.0 (GPL-2.0); | |
25 | +GNU General Public License version 3.0 (GPL-3.0); | |
26 | +GNU Library or "Lesser" General Public License version 2.1 (LGPL-2.1); | |
27 | +GNU Library or "Lesser" General Public License version 3.0 (LGPL-3.0); | |
28 | +Historical Permission Notice and Disclaimer (HPND); | |
29 | +IBM Public License 1.0 (IPL-1.0); | |
30 | +IPA Font License (IPA); | |
31 | +ISC License (ISC); | |
32 | +LaTeX Project Public License 1.3c (LPPL-1.3c); | |
33 | +Lucent Public License Version 1.02 (LPL-1.02); | |
34 | +MirOS Licence (MirOS); | |
35 | +Microsoft Public License (Ms-PL); | |
36 | +Microsoft Reciprocal License (Ms-RL); | |
37 | +MIT license (MIT); | |
38 | +Motosoto License (Motosoto); | |
39 | +Mozilla Public License 2.0 (MPL-2.0); | |
40 | +Multics License (Multics); | |
41 | +NASA Open Source Agreement 1.3 (NASA 1.3); | |
42 | +NTP License (NTP); | |
43 | +Naumen Public License (Naumen); | |
44 | +Nethack General Public License (NGPL); | |
45 | +Nokia Open Source License (Nokia); | |
46 | +Non-Profit Open Software License 3.0 (NPOSL-3.0); | |
47 | +OCLC Research Public License 2.0 (OCLC-2.0); | |
48 | +Open Font License 1.1 (OFL 1.1); | |
49 | +Open Group Test Suite License (OGTSL); | |
50 | +Open Software License 3.0 (OSL-3.0); | |
51 | +PHP License 3.0 (PHP-3.0); | |
52 | +The PostgreSQL License (PostgreSQL); | |
53 | +Python License (Python-2.0); | |
54 | +CNRI Python license (CNRI-Python); | |
55 | +Q Public License (QPL-1.0); | |
56 | +RealNetworks Public Source License V1.0 (RPSL-1.0); | |
57 | +Reciprocal Public License 1.5 (RPL-1.5); | |
58 | +Ricoh Source Code Public License (RSCPL); | |
59 | +Simple Public License 2.0 (SimPL-2.0); | |
60 | +Sleepycat License (Sleepycat); | |
61 | +Sun Public License 1.0 (SPL-1.0); | |
62 | +Sybase Open Watcom Public License 1.0 (Watcom-1.0); | |
63 | +University of Illinois/NCSA Open Source License (NCSA); | |
64 | +Vovida Software License v. 1.0 (VSL-1.0); | |
65 | +W3C License (W3C); | |
66 | +wxWindows Library License (WXwindows); | |
67 | +X.Net License (Xnet); | |
68 | +Zope Public License 2.0 (ZPL-2.0); | |
69 | +zlib/libpng license (Zlib); | ... | ... |
... | ... | @@ -0,0 +1,31 @@ |
1 | +div.colorPicker-picker { | |
2 | + height: 16px; | |
3 | + width: 16px; | |
4 | + padding: 0 !important; | |
5 | + border: 1px solid #ccc; | |
6 | + background: url(arrow.gif) no-repeat top right; | |
7 | + cursor: pointer; | |
8 | + line-height: 16px; | |
9 | +} | |
10 | + | |
11 | +div.colorPicker-palette { | |
12 | + width: 110px; | |
13 | + position: absolute; | |
14 | + border: 1px solid #598FEF; | |
15 | + background-color: #EFEFEF; | |
16 | + padding: 2px; | |
17 | + z-index: 9999; | |
18 | +} | |
19 | + div.colorPicker_hexWrap {width: 100%; float:left } | |
20 | + div.colorPicker_hexWrap label {font-size: 95%; color: #2F2F2F; margin: 5px 2px; width: 25%} | |
21 | + div.colorPicker_hexWrap input {margin: 5px 2px; padding: 0; font-size: 95%; border: 1px solid #000; width: 65%; } | |
22 | + | |
23 | +div.colorPicker-swatch { | |
24 | + height: 12px; | |
25 | + width: 12px; | |
26 | + border: 1px solid #000; | |
27 | + margin: 2px; | |
28 | + float: left; | |
29 | + cursor: pointer; | |
30 | + line-height: 12px; | |
31 | +} | ... | ... |
... | ... | @@ -0,0 +1,22 @@ |
1 | +Copyright (c) 2012 Lakshan Perera | |
2 | + | |
3 | +Permission is hereby granted, free of charge, to any person | |
4 | +obtaining a copy of this software and associated documentation | |
5 | +files (the "Software"), to deal in the Software without | |
6 | +restriction, including without limitation the rights to use, | |
7 | +copy, modify, merge, publish, distribute, sublicense, and/or sell | |
8 | +copies of the Software, and to permit persons to whom the | |
9 | +Software is furnished to do so, subject to the following | |
10 | +conditions: | |
11 | + | |
12 | +The above copyright notice and this permission notice shall be | |
13 | +included in all copies or substantial portions of the Software. | |
14 | + | |
15 | +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
16 | +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES | |
17 | +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |
18 | +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT | |
19 | +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |
20 | +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | |
21 | +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | |
22 | +OTHER DEALINGS IN THE SOFTWARE. | ... | ... |
plugins/mezuro/public/javascripts/colorPicker/jquery.colorPicker.js
0 → 100644
... | ... | @@ -0,0 +1,328 @@ |
1 | +/** | |
2 | + * Really Simple Color Picker in jQuery | |
3 | + * | |
4 | + * Licensed under the MIT (MIT-LICENSE.txt) licenses. | |
5 | + * | |
6 | + * Copyright (c) 2008-2012 | |
7 | + * Lakshan Perera (www.laktek.com) & Daniel Lacy (daniellacy.com) | |
8 | + * | |
9 | + * Permission is hereby granted, free of charge, to any person obtaining a copy | |
10 | + * of this software and associated documentation files (the "Software"), to | |
11 | + * deal in the Software without restriction, including without limitation the | |
12 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | |
13 | + * sell copies of the Software, and to permit persons to whom the Software is | |
14 | + * furnished to do so, subject to the following conditions: | |
15 | + * | |
16 | + * The above copyright notice and this permission notice shall be included in | |
17 | + * all copies or substantial portions of the Software. | |
18 | + * | |
19 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
20 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
21 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
22 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
23 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | |
24 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | |
25 | + * IN THE SOFTWARE. | |
26 | + */ | |
27 | + | |
28 | +(function ($) { | |
29 | + /** | |
30 | + * Create a couple private variables. | |
31 | + **/ | |
32 | + var selectorOwner, | |
33 | + activePalette, | |
34 | + cItterate = 0, | |
35 | + templates = { | |
36 | + control : $('<div class="colorPicker-picker"> </div>'), | |
37 | + palette : $('<div id="colorPicker_palette" class="colorPicker-palette" />'), | |
38 | + swatch : $('<div class="colorPicker-swatch"> </div>'), | |
39 | + hexLabel: $('<label for="colorPicker_hex">Hex</label>'), | |
40 | + hexField: $('<input type="text" id="colorPicker_hex" />') | |
41 | + }, | |
42 | + transparent = "transparent", | |
43 | + lastColor; | |
44 | + | |
45 | + /** | |
46 | + * Create our colorPicker function | |
47 | + **/ | |
48 | + $.fn.colorPicker = function (options) { | |
49 | + | |
50 | + return this.each(function () { | |
51 | + // Setup time. Clone new elements from our templates, set some IDs, make shortcuts, jazzercise. | |
52 | + var element = $(this), | |
53 | + opts = $.extend({}, $.fn.colorPicker.defaults, options), | |
54 | + defaultColor = $.fn.colorPicker.toHex( | |
55 | + (element.val().length > 0) ? element.val() : opts.pickerDefault | |
56 | + ), | |
57 | + newControl = templates.control.clone(), | |
58 | + newPalette = templates.palette.clone().attr('id', 'colorPicker_palette-' + cItterate), | |
59 | + newHexLabel = templates.hexLabel.clone(), | |
60 | + newHexField = templates.hexField.clone(), | |
61 | + paletteId = newPalette[0].id, | |
62 | + swatch; | |
63 | + | |
64 | + | |
65 | + /** | |
66 | + * Build a color palette. | |
67 | + **/ | |
68 | + $.each(opts.colors, function (i) { | |
69 | + swatch = templates.swatch.clone(); | |
70 | + | |
71 | + if (opts.colors[i] === transparent) { | |
72 | + swatch.addClass(transparent).text('X'); | |
73 | + $.fn.colorPicker.bindPalette(newHexField, swatch, transparent); | |
74 | + } else { | |
75 | + swatch.css("background-color", "#" + this); | |
76 | + $.fn.colorPicker.bindPalette(newHexField, swatch); | |
77 | + } | |
78 | + swatch.appendTo(newPalette); | |
79 | + }); | |
80 | + | |
81 | + newHexLabel.attr('for', 'colorPicker_hex-' + cItterate); | |
82 | + | |
83 | + newHexField.attr({ | |
84 | + 'id' : 'colorPicker_hex-' + cItterate, | |
85 | + 'value' : defaultColor | |
86 | + }); | |
87 | + | |
88 | + newHexField.bind("keydown", function (event) { | |
89 | + if (event.keyCode === 13) { | |
90 | + var hexColor = $.fn.colorPicker.toHex($(this).val()); | |
91 | + $.fn.colorPicker.changeColor(hexColor ? hexColor : element.val()); | |
92 | + } | |
93 | + if (event.keyCode === 27) { | |
94 | + $.fn.colorPicker.hidePalette(); | |
95 | + } | |
96 | + }); | |
97 | + | |
98 | + newHexField.bind("keyup", function (event) { | |
99 | + var hexColor = $.fn.colorPicker.toHex($(event.target).val()); | |
100 | + $.fn.colorPicker.previewColor(hexColor ? hexColor : element.val()); | |
101 | + }); | |
102 | + | |
103 | + $('<div class="colorPicker_hexWrap" />').append(newHexLabel).appendTo(newPalette); | |
104 | + | |
105 | + newPalette.find('.colorPicker_hexWrap').append(newHexField); | |
106 | + | |
107 | + $("body").append(newPalette); | |
108 | + | |
109 | + newPalette.hide(); | |
110 | + | |
111 | + | |
112 | + /** | |
113 | + * Build replacement interface for original color input. | |
114 | + **/ | |
115 | + newControl.css("background-color", defaultColor); | |
116 | + | |
117 | + newControl.bind("click", function () { | |
118 | + $.fn.colorPicker.togglePalette($('#' + paletteId), $(this)); | |
119 | + }); | |
120 | + | |
121 | + if( options && options.onColorChange ) { | |
122 | + newControl.data('onColorChange', options.onColorChange); | |
123 | + } else { | |
124 | + newControl.data('onColorChange', function() {} ); | |
125 | + } | |
126 | + element.after(newControl); | |
127 | + | |
128 | + element.bind("change", function () { | |
129 | + element.next(".colorPicker-picker").css( | |
130 | + "background-color", $.fn.colorPicker.toHex($(this).val()) | |
131 | + ); | |
132 | + }); | |
133 | + | |
134 | + // Hide the original input. | |
135 | + element.val(defaultColor).hide(); | |
136 | + | |
137 | + cItterate++; | |
138 | + }); | |
139 | + }; | |
140 | + | |
141 | + /** | |
142 | + * Extend colorPicker with... all our functionality. | |
143 | + **/ | |
144 | + $.extend(true, $.fn.colorPicker, { | |
145 | + /** | |
146 | + * Return a Hex color, convert an RGB value and return Hex, or return false. | |
147 | + * | |
148 | + * Inspired by http://code.google.com/p/jquery-color-utils | |
149 | + **/ | |
150 | + toHex : function (color) { | |
151 | + // If we have a standard or shorthand Hex color, return that value. | |
152 | + if (color.match(/[0-9A-F]{6}|[0-9A-F]{3}$/i)) { | |
153 | + return (color.charAt(0) === "#") ? color : ("#" + color); | |
154 | + | |
155 | + // Alternatively, check for RGB color, then convert and return it as Hex. | |
156 | + } else if (color.match(/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/)) { | |
157 | + var c = ([parseInt(RegExp.$1, 10), parseInt(RegExp.$2, 10), parseInt(RegExp.$3, 10)]), | |
158 | + pad = function (str) { | |
159 | + if (str.length < 2) { | |
160 | + for (var i = 0, len = 2 - str.length; i < len; i++) { | |
161 | + str = '0' + str; | |
162 | + } | |
163 | + } | |
164 | + | |
165 | + return str; | |
166 | + }; | |
167 | + | |
168 | + if (c.length === 3) { | |
169 | + var r = pad(c[0].toString(16)), | |
170 | + g = pad(c[1].toString(16)), | |
171 | + b = pad(c[2].toString(16)); | |
172 | + | |
173 | + return '#' + r + g + b; | |
174 | + } | |
175 | + | |
176 | + // Otherwise we wont do anything. | |
177 | + } else { | |
178 | + return false; | |
179 | + | |
180 | + } | |
181 | + }, | |
182 | + | |
183 | + /** | |
184 | + * Check whether user clicked on the selector or owner. | |
185 | + **/ | |
186 | + checkMouse : function (event, paletteId) { | |
187 | + var selector = activePalette, | |
188 | + selectorParent = $(event.target).parents("#" + selector.attr('id')).length; | |
189 | + | |
190 | + if (event.target === $(selector)[0] || event.target === selectorOwner[0] || selectorParent > 0) { | |
191 | + return; | |
192 | + } | |
193 | + | |
194 | + $.fn.colorPicker.hidePalette(); | |
195 | + }, | |
196 | + | |
197 | + /** | |
198 | + * Hide the color palette modal. | |
199 | + **/ | |
200 | + hidePalette : function () { | |
201 | + $(document).unbind("mousedown", $.fn.colorPicker.checkMouse); | |
202 | + | |
203 | + $('.colorPicker-palette').hide(); | |
204 | + }, | |
205 | + | |
206 | + /** | |
207 | + * Show the color palette modal. | |
208 | + **/ | |
209 | + showPalette : function (palette) { | |
210 | + var hexColor = selectorOwner.prev("input").val(); | |
211 | + | |
212 | + palette.css({ | |
213 | + top: selectorOwner.offset().top + (selectorOwner.outerHeight()), | |
214 | + left: selectorOwner.offset().left | |
215 | + }); | |
216 | + | |
217 | + $("#color_value").val(hexColor); | |
218 | + | |
219 | + palette.show(); | |
220 | + | |
221 | + $(document).bind("mousedown", $.fn.colorPicker.checkMouse); | |
222 | + }, | |
223 | + | |
224 | + /** | |
225 | + * Toggle visibility of the colorPicker palette. | |
226 | + **/ | |
227 | + togglePalette : function (palette, origin) { | |
228 | + // selectorOwner is the clicked .colorPicker-picker. | |
229 | + if (origin) { | |
230 | + selectorOwner = origin; | |
231 | + } | |
232 | + | |
233 | + activePalette = palette; | |
234 | + | |
235 | + if (activePalette.is(':visible')) { | |
236 | + $.fn.colorPicker.hidePalette(); | |
237 | + | |
238 | + } else { | |
239 | + $.fn.colorPicker.showPalette(palette); | |
240 | + | |
241 | + } | |
242 | + }, | |
243 | + | |
244 | + /** | |
245 | + * Update the input with a newly selected color. | |
246 | + **/ | |
247 | + changeColor : function (value) { | |
248 | + selectorOwner.css("background-color", value); | |
249 | + selectorOwner.prev("input").val(value).change(); | |
250 | + | |
251 | + $.fn.colorPicker.hidePalette(); | |
252 | + | |
253 | + selectorOwner.data('onColorChange').call(selectorOwner, $(selectorOwner).prev("input").attr("id"), value); | |
254 | + }, | |
255 | + | |
256 | + | |
257 | + /** | |
258 | + * Preview the input with a newly selected color. | |
259 | + **/ | |
260 | + previewColor : function (value) { | |
261 | + selectorOwner.css("background-color", value); | |
262 | + }, | |
263 | + | |
264 | + /** | |
265 | + * Bind events to the color palette swatches. | |
266 | + */ | |
267 | + bindPalette : function (paletteInput, element, color) { | |
268 | + color = color ? color : $.fn.colorPicker.toHex(element.css("background-color")); | |
269 | + | |
270 | + element.bind({ | |
271 | + click : function (ev) { | |
272 | + lastColor = color; | |
273 | + | |
274 | + $.fn.colorPicker.changeColor(color); | |
275 | + }, | |
276 | + mouseover : function (ev) { | |
277 | + lastColor = paletteInput.val(); | |
278 | + | |
279 | + $(this).css("border-color", "#598FEF"); | |
280 | + | |
281 | + paletteInput.val(color); | |
282 | + | |
283 | + $.fn.colorPicker.previewColor(color); | |
284 | + }, | |
285 | + mouseout : function (ev) { | |
286 | + $(this).css("border-color", "#000"); | |
287 | + | |
288 | + paletteInput.val(selectorOwner.css("background-color")); | |
289 | + | |
290 | + paletteInput.val(lastColor); | |
291 | + | |
292 | + $.fn.colorPicker.previewColor(lastColor); | |
293 | + } | |
294 | + }); | |
295 | + } | |
296 | + }); | |
297 | + | |
298 | + /** | |
299 | + * Default colorPicker options. | |
300 | + * | |
301 | + * These are publibly available for global modification using a setting such as: | |
302 | + * | |
303 | + * $.fn.colorPicker.defaults.colors = ['151337', '111111'] | |
304 | + * | |
305 | + * They can also be applied on a per-bound element basis like so: | |
306 | + * | |
307 | + * $('#element1').colorPicker({pickerDefault: 'efefef', transparency: true}); | |
308 | + * $('#element2').colorPicker({pickerDefault: '333333', colors: ['333333', '111111']}); | |
309 | + * | |
310 | + **/ | |
311 | + $.fn.colorPicker.defaults = { | |
312 | + // colorPicker default selected color. | |
313 | + pickerDefault : "FFFFFF", | |
314 | + | |
315 | + // Default color set. | |
316 | + colors : [ | |
317 | + '000000', '993300', '333300', '000080', '333399', '333333', '800000', 'FF6600', | |
318 | + '808000', '008000', '008080', '0000FF', '666699', '808080', 'FF0000', 'FF9900', | |
319 | + '99CC00', '339966', '33CCCC', '3366FF', '800080', '999999', 'FF00FF', 'FFCC00', | |
320 | + 'FFFF00', '00FF00', '00FFFF', '00CCFF', '993366', 'C0C0C0', 'FF99CC', 'FFCC99', | |
321 | + 'FFFF99', 'CCFFFF', '99CCFF', 'FFFFFF' | |
322 | + ], | |
323 | + | |
324 | + // If we want to simply add more colors to the default set, use addColors. | |
325 | + addColors : [] | |
326 | + }; | |
327 | + | |
328 | +})(jQuery); | ... | ... |
plugins/mezuro/public/javascripts/colorPicker/jquery.colorPicker.min.js
0 → 100644
... | ... | @@ -0,0 +1,26 @@ |
1 | +/** | |
2 | + * Really Simple Color Picker in jQuery | |
3 | + * | |
4 | + * Licensed under the MIT (MIT-LICENSE.txt) licenses. | |
5 | + * | |
6 | + * Copyright (c) 2008-2012 | |
7 | + * Lakshan Perera (www.laktek.com) & Daniel Lacy (daniellacy.com) | |
8 | + * | |
9 | + * Permission is hereby granted, free of charge, to any person obtaining a copy | |
10 | + * of this software and associated documentation files (the "Software"), to | |
11 | + * deal in the Software without restriction, including without limitation the | |
12 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | |
13 | + * sell copies of the Software, and to permit persons to whom the Software is | |
14 | + * furnished to do so, subject to the following conditions: | |
15 | + * | |
16 | + * The above copyright notice and this permission notice shall be included in | |
17 | + * all copies or substantial portions of the Software. | |
18 | + * | |
19 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
20 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
21 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
22 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
23 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | |
24 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | |
25 | + * IN THE SOFTWARE. | |
26 | + */(function(a){var b,c,d=0,e={control:a('<div class="colorPicker-picker"> </div>'),palette:a('<div id="colorPicker_palette" class="colorPicker-palette" />'),swatch:a('<div class="colorPicker-swatch"> </div>'),hexLabel:a('<label for="colorPicker_hex">Hex</label>'),hexField:a('<input type="text" id="colorPicker_hex" />')},f="transparent",g;a.fn.colorPicker=function(b){return this.each(function(){var c=a(this),g=a.extend({},a.fn.colorPicker.defaults,b),h=a.fn.colorPicker.toHex(c.val().length>0?c.val():g.pickerDefault),i=e.control.clone(),j=e.palette.clone().attr("id","colorPicker_palette-"+d),k=e.hexLabel.clone(),l=e.hexField.clone(),m=j[0].id,n;a.each(g.colors,function(b){n=e.swatch.clone(),g.colors[b]===f?(n.addClass(f).text("X"),a.fn.colorPicker.bindPalette(l,n,f)):(n.css("background-color","#"+this),a.fn.colorPicker.bindPalette(l,n)),n.appendTo(j)}),k.attr("for","colorPicker_hex-"+d),l.attr({id:"colorPicker_hex-"+d,value:h}),l.bind("keydown",function(b){if(b.keyCode===13){var d=a.fn.colorPicker.toHex(a(this).val());a.fn.colorPicker.changeColor(d?d:c.val())}b.keyCode===27&&a.fn.colorPicker.hidePalette()}),l.bind("keyup",function(b){var d=a.fn.colorPicker.toHex(a(b.target).val());a.fn.colorPicker.previewColor(d?d:c.val())}),a('<div class="colorPicker_hexWrap" />').append(k).appendTo(j),j.find(".colorPicker_hexWrap").append(l),a("body").append(j),j.hide(),i.css("background-color",h),i.bind("click",function(){a.fn.colorPicker.togglePalette(a("#"+m),a(this))}),b&&b.onColorChange?i.data("onColorChange",b.onColorChange):i.data("onColorChange",function(){}),c.after(i),c.bind("change",function(){c.next(".colorPicker-picker").css("background-color",a.fn.colorPicker.toHex(a(this).val()))}),c.val(h).hide(),d++})},a.extend(!0,a.fn.colorPicker,{toHex:function(a){if(a.match(/[0-9A-F]{6}|[0-9A-F]{3}$/i))return a.charAt(0)==="#"?a:"#"+a;if(!a.match(/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/))return!1;var b=[parseInt(RegExp.$1,10),parseInt(RegExp.$2,10),parseInt(RegExp.$3,10)],c=function(a){if(a.length<2)for(var b=0,c=2-a.length;b<c;b++)a="0"+a;return a};if(b.length===3){var d=c(b[0].toString(16)),e=c(b[1].toString(16)),f=c(b[2].toString(16));return"#"+d+e+f}},checkMouse:function(d,e){var f=c,g=a(d.target).parents("#"+f.attr("id")).length;if(d.target===a(f)[0]||d.target===b[0]||g>0)return;a.fn.colorPicker.hidePalette()},hidePalette:function(){a(document).unbind("mousedown",a.fn.colorPicker.checkMouse),a(".colorPicker-palette").hide()},showPalette:function(c){var d=b.prev("input").val();c.css({top:b.offset().top+b.outerHeight(),left:b.offset().left}),a("#color_value").val(d),c.show(),a(document).bind("mousedown",a.fn.colorPicker.checkMouse)},togglePalette:function(d,e){e&&(b=e),c=d,c.is(":visible")?a.fn.colorPicker.hidePalette():a.fn.colorPicker.showPalette(d)},changeColor:function(c){b.css("background-color",c),b.prev("input").val(c).change(),a.fn.colorPicker.hidePalette(),b.data("onColorChange").call(b,a(b).prev("input").attr("id"),c)},previewColor:function(a){b.css("background-color",a)},bindPalette:function(c,d,e){e=e?e:a.fn.colorPicker.toHex(d.css("background-color")),d.bind({click:function(b){g=e,a.fn.colorPicker.changeColor(e)},mouseover:function(b){g=c.val(),a(this).css("border-color","#598FEF"),c.val(e),a.fn.colorPicker.previewColor(e)},mouseout:function(d){a(this).css("border-color","#000"),c.val(b.css("background-color")),c.val(g),a.fn.colorPicker.previewColor(g)}})}}),a.fn.colorPicker.defaults={pickerDefault:"FFFFFF",colors:["000000","993300","333300","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","999999","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFFF","99CCFF","FFFFFF"],addColors:[]}})(jQuery) | |
0 | 27 | \ No newline at end of file | ... | ... |
plugins/mezuro/public/javascripts/project_content.js
... | ... | @@ -2,7 +2,6 @@ var processingTree = false; |
2 | 2 | var metricName; |
3 | 3 | jQuery(function (){ |
4 | 4 | jQuery('.source-tree-link').live("click", reloadModule); |
5 | - jQuery('[data-show]').live("click", toggle_mezuro); | |
6 | 5 | jQuery('[show-metric-history]').live("click", display_metric_history); |
7 | 6 | jQuery('[show-grade-history]').live("click", display_grade_history); |
8 | 7 | jQuery('#project_date_submit').live("click", reloadProjectWithDate); |
... | ... | @@ -16,7 +15,8 @@ function showProjectContent() { |
16 | 15 | |
17 | 16 | function display_metric_history() { |
18 | 17 | var module_name = jQuery(this).attr('data-module-name'); |
19 | - var metric_name = jQuery(this).attr('data-metric-name'); | |
18 | + var metric_name = jQuery(this).attr('show-metric-history'); | |
19 | + toggle_mezuro("." + metric_name); | |
20 | 20 | metricName = metric_name; |
21 | 21 | callAction('module_metrics_history', {module_name: module_name, metric_name: metric_name}, show_metrics); |
22 | 22 | return false; |
... | ... | @@ -24,6 +24,7 @@ function display_metric_history() { |
24 | 24 | |
25 | 25 | function display_grade_history() { |
26 | 26 | var module_name = jQuery(this).attr('data-module-name'); |
27 | + toggle_mezuro("#historical-grade"); | |
27 | 28 | callAction('module_grade_history', {module_name: module_name}, show_grades); |
28 | 29 | return false; |
29 | 30 | } |
... | ... | @@ -36,8 +37,7 @@ function show_grades(content) { |
36 | 37 | jQuery('#historical-grade').html(content); |
37 | 38 | } |
38 | 39 | |
39 | -function toggle_mezuro(){ | |
40 | - var element = jQuery(this).attr('data-show'); | |
40 | +function toggle_mezuro(element){ | |
41 | 41 | jQuery(element).toggle(); |
42 | 42 | return false; |
43 | 43 | } |
... | ... | @@ -51,23 +51,8 @@ function reloadModule(){ |
51 | 51 | return false; |
52 | 52 | } |
53 | 53 | |
54 | -function reloadProjectWithDate(){ | |
55 | - var day = jQuery("#project_date_day").val(); | |
56 | - var month = jQuery("#project_date_month").val(); | |
57 | - var year = jQuery("#project_date_year").val(); | |
58 | - | |
59 | - if(day.length == 1) | |
60 | - day = "0" + day; | |
61 | - if(month.length == 1) | |
62 | - month = "0" + month; | |
63 | - | |
64 | - var date = new Date(year + "-" + month + "-" + day + "T00:00:00+00:00"); | |
65 | - | |
66 | - if(isNaN(date)){ | |
67 | - alert("Invalid date! " + date); | |
68 | - return false; | |
69 | - } | |
70 | - reloadProject(date); | |
54 | +function reloadProjectWithDate(date){ | |
55 | + reloadProject(date + "T00:00:00+00:00"); | |
71 | 56 | return false; |
72 | 57 | } |
73 | 58 | ... | ... |
plugins/mezuro/public/javascripts/validations.js
... | ... | @@ -3,7 +3,9 @@ jQuery(function (){ |
3 | 3 | jQuery('#metric_configuration_submit').live("click", validate_metric_configuration); |
4 | 4 | }); |
5 | 5 | |
6 | - | |
6 | +function validate_code(code){ | |
7 | + return true; | |
8 | +} | |
7 | 9 | |
8 | 10 | function validate_metric_configuration(){ |
9 | 11 | var code = jQuery('#metric_configuration_code').val(); |
... | ... | @@ -37,14 +39,6 @@ function IsNotInfinite(value){ |
37 | 39 | return true; |
38 | 40 | } |
39 | 41 | |
40 | -function IsNotHexadecimal(value){ | |
41 | - if(value.match(/^[0-9a-fA-F]{1,8}$/)) | |
42 | - { | |
43 | - return false; | |
44 | - } | |
45 | - return true; | |
46 | -} | |
47 | - | |
48 | 42 | function validate_new_range_configuration(event){ |
49 | 43 | var label = jQuery("#range_label").val(); |
50 | 44 | var beginning = jQuery("#range_beginning").val(); |
... | ... | @@ -54,24 +48,20 @@ function validate_new_range_configuration(event){ |
54 | 48 | |
55 | 49 | if (is_null(label) || is_null(beginning) || is_null(end) || is_null(color) || is_null(grade)) |
56 | 50 | { |
57 | - alert("Please fill all fields marked with (*)"); | |
51 | + alert("Please fill all fields marked with (*)."); | |
58 | 52 | return false; |
59 | 53 | } |
60 | 54 | if ( (IsNotNumeric(beginning) && IsNotInfinite(beginning)) || (IsNotNumeric(end) && IsNotInfinite(end)) || IsNotNumeric(grade)) |
61 | 55 | { |
62 | - alert("Beginning, End and Grade must be numeric values"); | |
56 | + alert("Beginning, End and Grade must be numeric values."); | |
63 | 57 | return false; |
64 | 58 | } |
65 | 59 | if (parseInt(beginning) > parseInt(end)) |
66 | 60 | { |
67 | 61 | if(IsNotInfinite(beginning) && IsNotInfinite(end)){ |
68 | - alert("End must be greater than Beginning"); | |
62 | + alert("End must be greater than Beginning."); | |
69 | 63 | return false; |
70 | 64 | } |
71 | 65 | } |
72 | - if (IsNotHexadecimal(color)){ | |
73 | - alert("Color must be an hexadecimal value"); | |
74 | - return false; | |
75 | - } | |
76 | 66 | return true; |
77 | 67 | } | ... | ... |
plugins/mezuro/public/style.css
plugins/mezuro/test/fixtures/project_fixtures.rb
... | ... | @@ -28,7 +28,7 @@ class ProjectFixtures |
28 | 28 | def self.project_content |
29 | 29 | content = MezuroPlugin::ProjectContent.new |
30 | 30 | content.name = 'Qt-Calculator' |
31 | - content.license = 'GPL' | |
31 | + content.project_license = 'GPL' | |
32 | 32 | content.description = 'Calculator for Qt' |
33 | 33 | content.repository_type = RepositoryFixtures.repository_hash[:type] |
34 | 34 | content.repository_url = RepositoryFixtures.repository_hash[:address] | ... | ... |
plugins/mezuro/test/functional/mezuro_plugin_myprofile_controller_test.rb
... | ... | @@ -27,7 +27,7 @@ class MezuroPluginMyprofileControllerTest < ActionController::TestCase |
27 | 27 | |
28 | 28 | Kalibro::Configuration.expects(:all_names).returns([]) |
29 | 29 | @content = MezuroPlugin::ConfigurationContent.new(:profile => @profile, :name => @configuration.name) |
30 | - @content.expects(:send_configuration_to_service).returns(nil) | |
30 | + @content.expects(:send_kalibro_configuration_to_service).returns(nil) | |
31 | 31 | @content.stubs(:solr_save) |
32 | 32 | @content.save |
33 | 33 | |
... | ... | @@ -39,7 +39,7 @@ class MezuroPluginMyprofileControllerTest < ActionController::TestCase |
39 | 39 | @range = RangeFixtures.range_excellent |
40 | 40 | @range_hash = RangeFixtures.range_excellent_hash |
41 | 41 | end |
42 | - | |
42 | + | |
43 | 43 | should 'test choose base tool' do |
44 | 44 | Kalibro::BaseTool.expects(:request).with("BaseTool", :get_base_tool_names).returns({:base_tool_name => @base_tool.name}) |
45 | 45 | get :choose_base_tool, :profile => @profile.identifier, :id => @content.id | ... | ... |
plugins/mezuro/test/functional/mezuro_plugin_profile_controller_test.rb
... | ... | @@ -25,14 +25,14 @@ class MezuroPluginProfileControllerTest < ActionController::TestCase |
25 | 25 | @content.save |
26 | 26 | end |
27 | 27 | |
28 | - should 'test project state without error' do | |
28 | + should 'test project state without kalibro_error' do | |
29 | 29 | Kalibro::Project.expects(:request).with("Project", :get_project, :project_name => @project.name).returns({:project => @project.to_hash}) |
30 | 30 | get :project_state, :profile => @profile.identifier, :id => @content.id |
31 | 31 | assert_response 200 |
32 | 32 | assert_equal @content, assigns(:content) |
33 | 33 | end |
34 | 34 | |
35 | - should 'test project state with error' do | |
35 | + should 'test project state with kalibro_error' do | |
36 | 36 | Kalibro::Project.expects(:request).with("Project", :get_project, :project_name => @project.name).returns({:project => @project.to_hash.merge({:error => ErrorFixtures.error_hash})}) |
37 | 37 | get :project_state, :profile => @profile.identifier, :id => @content.id |
38 | 38 | assert_response 200 |
... | ... | @@ -126,7 +126,7 @@ class MezuroPluginProfileControllerTest < ActionController::TestCase |
126 | 126 | get :module_metrics_history, :profile => @profile.identifier, :id => @content.id, :module_name => @project.name, |
127 | 127 | :metric_name => @module_result.metric_result.first.metric.name.delete("() ") |
128 | 128 | assert_equal @content, assigns(:content) |
129 | - assert_equal [@module_result.metric_result[0].value], assigns(:score_history) | |
129 | + assert_equal [[@module_result.metric_result[0].value, @module_result.date.to_s[0..9]]], assigns(:score_history) | |
130 | 130 | assert_response 200 |
131 | 131 | end |
132 | 132 | |
... | ... | @@ -134,7 +134,7 @@ class MezuroPluginProfileControllerTest < ActionController::TestCase |
134 | 134 | Kalibro::ModuleResult.expects(:request).with("ModuleResult", :get_result_history, {:project_name => @project.name, :module_name => @project.name}).returns({:module_result => @module_result}) |
135 | 135 | get :module_grade_history, :profile => @profile.identifier, :id => @content.id, :module_name => @project.name |
136 | 136 | assert_equal @content, assigns(:content) |
137 | - assert_equal [@module_result.grade], assigns(:score_history) | |
137 | + assert_equal [[@module_result.grade, @module_result.date.to_s[0..9]]], assigns(:score_history) | |
138 | 138 | assert_response 200 |
139 | 139 | end |
140 | 140 | ... | ... |
plugins/mezuro/test/unit/kalibro/configuration_test.rb
... | ... | @@ -44,7 +44,9 @@ class ConfigurationTest < ActiveSupport::TestCase |
44 | 44 | should 'return nil when configuration doesnt exist' do |
45 | 45 | request_body = {:configuration_name => @configuration.name} |
46 | 46 | Kalibro::Configuration.expects(:request).with("Configuration", :get_configuration, request_body).raises(Exception.new) |
47 | - assert_nil Kalibro::Configuration.find_by_name(@configuration.name) | |
47 | + assert_raise Exception do | |
48 | + Kalibro::Configuration.find_by_name(@configuration.name) | |
49 | + end | |
48 | 50 | end |
49 | 51 | |
50 | 52 | should 'destroy configuration by name' do | ... | ... |
plugins/mezuro/test/unit/kalibro/project_result_test.rb
... | ... | @@ -69,26 +69,20 @@ class ProjectResultTest < ActiveSupport::TestCase |
69 | 69 | assert_equal '00:00:01', @project_result.formatted_analysis_time |
70 | 70 | end |
71 | 71 | |
72 | - should 'retrieve module node' do | |
73 | - node = @project_result.get_node("main") | |
74 | - assert_equal @hash[:source_tree][:child][2], node.to_hash | |
75 | - end | |
76 | - | |
77 | 72 | should 'retrive complex module' do |
78 | - node = @project_result.get_node("org.Window") | |
79 | - assert_equal @hash[:source_tree][:child][0][:child].first, node.to_hash | |
73 | + assert_equal @hash[:source_tree][:child][0][:child].first, @project_result.node("org.Window").to_hash | |
80 | 74 | end |
81 | 75 | |
82 | 76 | should 'return source tree node when nil is given' do |
83 | - assert_equal @hash[:source_tree], @project_result.node_of(nil).to_hash | |
77 | + assert_equal @hash[:source_tree], @project_result.node(nil).to_hash | |
84 | 78 | end |
85 | 79 | |
86 | 80 | should 'return source tree node when project name is given' do |
87 | - assert_equal @hash[:source_tree], @project_result.node_of(@project_result.project.name).to_hash | |
81 | + assert_equal @hash[:source_tree], @project_result.node(@project_result.project.name).to_hash | |
88 | 82 | end |
89 | 83 | |
90 | 84 | should 'return correct node when module name is given' do |
91 | - assert_equal @hash[:source_tree][:child][2], @project_result.node_of("main").to_hash | |
85 | + assert_equal @hash[:source_tree][:child][2], @project_result.node("main").to_hash | |
92 | 86 | end |
93 | 87 | |
94 | 88 | end | ... | ... |
plugins/mezuro/test/unit/kalibro/range_test.rb
... | ... | @@ -17,4 +17,16 @@ class RangeTest < ActiveSupport::TestCase |
17 | 17 | assert_equal @hash, @range.to_hash |
18 | 18 | end |
19 | 19 | |
20 | + should 'create a default color for new range' do | |
21 | + assert_equal "#e4ca2d", Kalibro::Range.new.mezuro_color | |
22 | + end | |
23 | + | |
24 | + should "convert color from 'ff' to '#'" do | |
25 | + assert_equal "#ff0000", @range.mezuro_color | |
26 | + end | |
27 | + | |
28 | + should "convert color from '#' to 'ff' when creating a new range" do | |
29 | + assert_equal "ffff0000", Kalibro::Range.new({:color => '#ff0000'}).color | |
30 | + end | |
31 | + | |
20 | 32 | end | ... | ... |
plugins/mezuro/test/unit/mezuro_plugin/configuration_content_test.rb
... | ... | @@ -6,9 +6,7 @@ class ConfigurationContentTest < ActiveSupport::TestCase |
6 | 6 | |
7 | 7 | def setup |
8 | 8 | @configuration = ConfigurationFixtures.configuration |
9 | - @content = MezuroPlugin::ConfigurationContent.new | |
10 | - @content.name = @configuration.name | |
11 | - @content.description = @configuration.description | |
9 | + @content = ConfigurationFixtures.configuration_content("None") | |
12 | 10 | end |
13 | 11 | |
14 | 12 | should 'be an article' do |
... | ... | @@ -35,19 +33,19 @@ class ConfigurationContentTest < ActiveSupport::TestCase |
35 | 33 | |
36 | 34 | should 'get configuration from service' do |
37 | 35 | Kalibro::Configuration.expects(:find_by_name).with(@content.name).returns(@configuration) |
38 | - assert_equal @configuration, @content.configuration | |
36 | + assert_equal @configuration, @content.kalibro_configuration | |
39 | 37 | end |
40 | 38 | |
41 | 39 | should 'send configuration to service after saving' do |
42 | - @content.expects :send_configuration_to_service | |
40 | + @content.expects :send_kalibro_configuration_to_service | |
43 | 41 | @content.stubs(:solr_save) |
44 | 42 | @content.run_callbacks :after_save |
45 | 43 | end |
46 | 44 | |
47 | 45 | should 'create new configuration' do |
48 | 46 | Kalibro::Configuration.expects(:create).with(:name => @content.name, :description => @content.description) |
49 | - Kalibro::Configuration.expects(:find_by_name).with(@content.name).returns(nil) | |
50 | - @content.send :send_configuration_to_service | |
47 | + Kalibro::Configuration.expects(:find_by_name).with(@content.name) | |
48 | + @content.send :send_kalibro_configuration_to_service | |
51 | 49 | end |
52 | 50 | |
53 | 51 | should 'clone configuration' do |
... | ... | @@ -55,25 +53,25 @@ class ConfigurationContentTest < ActiveSupport::TestCase |
55 | 53 | Kalibro::Configuration.expects(:create).with(:name => @content.name, :description => @content.description, :metric_configuration => @configuration.metric_configurations_hash) |
56 | 54 | Kalibro::Configuration.expects(:find_by_name).with(@content.name).returns(nil) |
57 | 55 | Kalibro::Configuration.expects(:find_by_name).with('clone name').returns(@configuration) |
58 | - @content.send :send_configuration_to_service | |
56 | + @content.send :send_kalibro_configuration_to_service | |
59 | 57 | end |
60 | 58 | |
61 | 59 | should 'edit configuration' do |
62 | 60 | Kalibro::Configuration.expects(:find_by_name).with(@content.name).returns(@configuration) |
63 | 61 | @configuration.expects(:update_attributes).with(:description => @content.description) |
64 | - @content.send :send_configuration_to_service | |
62 | + @content.send :send_kalibro_configuration_to_service | |
65 | 63 | end |
66 | 64 | |
67 | 65 | should 'send correct configuration to service but comunication fails' do |
68 | 66 | Kalibro::Configuration.expects(:find_by_name).with(@content.name).returns(@configuration) |
69 | 67 | @configuration.expects(:save).returns(false) |
70 | - @content.send :send_configuration_to_service | |
68 | + @content.send :send_kalibro_configuration_to_service | |
71 | 69 | end |
72 | 70 | |
73 | 71 | should 'remove configuration from service' do |
74 | 72 | Kalibro::Configuration.expects(:find_by_name).with(@content.name).returns(@configuration) |
75 | 73 | @configuration.expects(:destroy) |
76 | - @content.send :remove_configuration_from_service | |
74 | + @content.send :remove_kalibro_configuration_from_service | |
77 | 75 | end |
78 | 76 | |
79 | 77 | end | ... | ... |
plugins/mezuro/views/cms/mezuro_plugin/_configuration_content.html.erb
1 | 1 | <h1> <%= _(MezuroPlugin::ConfigurationContent.short_description) %> </h1> |
2 | 2 | |
3 | 3 | <% |
4 | - begin | |
5 | - configuration = @article.title.nil? ? nil : @article.configuration | |
6 | - rescue | |
7 | - configuration = nil | |
8 | - end | |
4 | + kalibro_configuration = @article.title.nil? ? nil : @article.kalibro_configuration | |
5 | + kalibro_configuration_names = @article.kalibro_configuration_names | |
9 | 6 | %> |
10 | 7 | |
11 | 8 | <%= error_messages_for 'kalibro_configuration' %> |
... | ... | @@ -13,20 +10,19 @@ |
13 | 10 | <%= hidden_field_tag 'kalibro_configuration[profile_id]', profile.id %> |
14 | 11 | <%= hidden_field_tag 'id', @article.id %> |
15 | 12 | |
16 | -<% configuration_names = @article.configuration_names %> | |
17 | - | |
18 | -<% selected = (configuration.nil? ? "None" : @article.configuration_to_clone_name) %> | |
13 | + | |
14 | +<% selected = (kalibro_configuration.nil? ? "None" : @article.configuration_to_clone_name) %> | |
19 | 15 | |
20 | 16 | <%= required_fields_message %> |
21 | 17 | |
22 | 18 | <%= required labelled_form_field _('Clone Configuration'), |
23 | -if !configuration.nil? && !@article.id.nil? | |
24 | - f.select(:configuration_to_clone_name, configuration_names, {:selected => selected}, :disabled => 'true') | |
19 | +if !kalibro_configuration.nil? && !@article.id.nil? | |
20 | + f.select(:configuration_to_clone_name, kalibro_configuration_names, {:selected => selected}, :disabled => 'true') | |
25 | 21 | else |
26 | - f.select(:configuration_to_clone_name, configuration_names, {:selected => selected}) | |
22 | + f.select(:configuration_to_clone_name, kalibro_configuration_names, {:selected => selected}) | |
27 | 23 | end %> |
28 | 24 | <br/> |
29 | 25 | |
30 | -<%= required f.text_field(:name, :disabled => !(configuration.nil? || @article.id.nil?)) %> | |
26 | +<%= required f.text_field(:name, :disabled => !(kalibro_configuration.nil? || @article.id.nil?)) %> | |
31 | 27 | |
32 | 28 | <%= f.text_field :description %><br/> | ... | ... |
plugins/mezuro/views/cms/mezuro_plugin/_project_content.html.erb
1 | 1 | <h1> <%= _(MezuroPlugin::ProjectContent.short_description) %> </h1> |
2 | 2 | |
3 | 3 | <% |
4 | + @project = @article.title.nil? ? nil : @article.project | |
4 | 5 | begin |
5 | - @project = @article.title.nil? ? nil : Kalibro::Project.find_by_name(@article.title) | |
6 | - rescue | |
7 | - @project = nil | |
6 | + @repository_types = Kalibro::Repository.repository_types.sort | |
7 | + @configuration_names = Kalibro::Configuration.all_names.sort | |
8 | + rescue Exception => exception | |
9 | + @article.errors.add_to_base(exception.message) | |
10 | + @repository_types = [] | |
11 | + @configuration_names = [] | |
8 | 12 | end |
9 | 13 | %> |
10 | 14 | |
... | ... | @@ -20,18 +24,18 @@ |
20 | 24 | <%= required f.text_field(:name) %> |
21 | 25 | <% end %> |
22 | 26 | |
23 | -<%= f.text_field :license %><br/> | |
27 | +<% selected = (@project.nil? ? "" : @project.license) %> | |
28 | +<%= required labelled_form_field _('License'), | |
29 | + f.select(:project_license, MezuroPlugin::Helpers::ContentViewerHelper.create_license_options ,{:selected => selected}) %><br/> | |
24 | 30 | |
25 | 31 | <%= f.text_field :description %><br/> |
26 | 32 | |
27 | -<% @repository_types = Kalibro::Repository.repository_types.sort %> | |
28 | 33 | <% @selected = (@project.nil? ? @repository_types : @project.repository.type) %> |
29 | 34 | <%= required labelled_form_field _('Repository type'), |
30 | 35 | f.select(:repository_type, @repository_types, {:selected => @selected}) %><br/> |
31 | 36 | |
32 | 37 | <%= required f.text_field(:repository_url) %><br/> |
33 | 38 | |
34 | -<% @configuration_names = Kalibro::Configuration.all_names.sort %> | |
35 | 39 | <% @selected = (@project.nil? ? @configuration_names[0] : @project.configuration_name) %> |
36 | 40 | |
37 | 41 | <% if !@project.nil? && !@article.id.nil? %> | ... | ... |
plugins/mezuro/views/content_viewer/_module_result.rhtml
1 | -<% unless @content.errors[:base].nil? %> | |
2 | - <%= @content.errors[:base] %> | |
3 | -<% else %> | |
4 | - <% the_module = @module_result.module %> | |
5 | - <% module_label = "#{the_module.name} (#{the_module.granularity})" %> | |
1 | +<h5><%= _('Metric results for: ') + @module_label %> </h5> | |
6 | 2 | |
7 | - <h5><%= _('Metric results for: ') + module_label %> </h5> | |
8 | - | |
9 | - <hr/> | |
10 | - <div class="zoomable-image"> | |
11 | - <table> | |
12 | - <thead> | |
13 | - <tr> | |
14 | - <th>Metric</th> | |
15 | - <th>Value</th> | |
16 | - <th>Weight</th> | |
17 | - <th>Threshold</th> | |
18 | - </tr> | |
19 | - </thead> | |
20 | - <tbody> | |
21 | - <% @module_result.metric_results.each do |metric_result| %> | |
22 | - <% range = metric_result.range %> | |
23 | - <% if !range.nil? %> | |
24 | - <tr> | |
25 | - <td><a href="#" data-show=".<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>"><%= metric_result.metric.name %></a></td> | |
26 | - <td><%= MezuroPlugin::Helpers::ContentViewerHelper.format_grade(metric_result.value) %></td> | |
27 | - <td><%= metric_result.weight %></td> | |
28 | - <td style="background-color: #<%= range.color[2..-1] %>"><%= range.label %></td> | |
29 | - </tr> | |
30 | - <tr class="<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>" style="display: none;"> | |
31 | - <td colspan="3"> | |
32 | - <div id='historical-<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>'> | |
33 | - <a href="#" show-metric-history="<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>" data-module-name="<%= the_module.name %>" data-metric-name="<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>"> <p style="text-indent: 3em;"> Get Historical Values </p> </a> | |
34 | - </div> | |
35 | - </td> | |
36 | - <td align="right"> | |
37 | - <%= range.comments.nil? ? '' : range.comments %> | |
38 | - </td> | |
39 | - </tr> | |
40 | - <% end %> | |
3 | +<hr/> | |
4 | +<div class="zoomable-image"> | |
5 | +<table> | |
6 | + <thead> | |
7 | + <tr> | |
8 | + <th>Metric</th> | |
9 | + <th>Value</th> | |
10 | + <th>Weight</th> | |
11 | + <th>Threshold</th> | |
12 | + </tr> | |
13 | + </thead> | |
14 | + <tbody> | |
15 | + <% @module_result.metric_results.each do |metric_result| %> | |
16 | + <% range = metric_result.range %> | |
17 | + <% if !range.nil? %> | |
18 | + <tr> | |
19 | + <td><a href="#" show-metric-history="<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>" data-module-name="<%= @module.name %>"><%= metric_result.metric.name %></a></td> | |
20 | + <td><%= MezuroPlugin::Helpers::ContentViewerHelper.format_grade(metric_result.value) %></td> | |
21 | + <td><%= metric_result.weight %></td> | |
22 | + <td style="background-color: #<%= range.color[2..-1] %>"><%= range.label %></td> | |
23 | + </tr> | |
24 | + <tr class="<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>" style="display: none;"> | |
25 | + <td colspan="3"> | |
26 | + <div id='historical-<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>'> | |
27 | + </div> | |
28 | + </td> | |
29 | + <td align="right"> | |
30 | + <%= range.comments.nil? ? '' : range.comments %> | |
31 | + </td> | |
32 | + </tr> | |
41 | 33 | <% end %> |
42 | - </tbody> | |
43 | - <tfoot> | |
44 | - <tr> | |
45 | - <td colspan = "3"> | |
46 | - <div id='historical-grade'></div> | |
47 | - </td> | |
48 | - <td align = "right"> | |
49 | - <a href="#" show-grade-history="<%= @module_result.module.name %>" data-module-name="<%= the_module.name%>" > | |
50 | - <strong> | |
51 | - <%= _('Grade:') %> | |
52 | - <%= "%.02f" % @module_result.grade %> | |
53 | - </strong> | |
54 | - </a> | |
55 | - </td> | |
56 | - </tr> | |
57 | - </tfoot> | |
58 | - </table> | |
59 | - </div> | |
60 | -<% end %> | |
34 | + <% end %> | |
35 | + </tbody> | |
36 | + <tfoot> | |
37 | + <tr> | |
38 | + <td colspan = "3"> | |
39 | + <div id='historical-grade' style="display: none;"></div> | |
40 | + </td> | |
41 | + <td align = "right"> | |
42 | + <a href="#" show-grade-history="<%= @module_result.module.name %>" data-module-name="<%= @module.name%>" > | |
43 | + <strong> | |
44 | + <%= _('Grade:') %> | |
45 | + <%= "%.02f" % @module_result.grade %> | |
46 | + </strong> | |
47 | + </a> | |
48 | + </td> | |
49 | + </tr> | |
50 | + </tfoot> | |
51 | +</table> | |
52 | +</div> | ... | ... |
plugins/mezuro/views/content_viewer/_project_error.rhtml
plugins/mezuro/views/content_viewer/_project_result.rhtml
1 | 1 | <% unless @content.errors[:base].nil? %> |
2 | 2 | <%= @content.errors[:base] %> |
3 | 3 | <% else %> |
4 | - <% form_for :project_date, :html=>{:id=>"project_history_date"} do |f| %> | |
5 | - <%= f.label :day, "Choose project date:" %> | |
6 | - | |
7 | - <table> | |
8 | - <tr> | |
9 | - <td> | |
10 | - Day | |
11 | - </td> | |
12 | - <td> | |
13 | - Month | |
14 | - </td> | |
15 | - <td> | |
16 | - Year | |
17 | - </td> | |
18 | - </tr> | |
19 | - <tr> | |
20 | - <td> | |
21 | - <%= f.text_field :day, :size => 1, :maxlength => 2, :placeholder =>"dd" %> | |
22 | - </td> | |
23 | - <td> | |
24 | - <%= f.text_field :month, :size => 1, :maxlength => 2, :placeholder =>"mm" %> | |
25 | - </td> | |
26 | - <td> | |
27 | - <%= f.text_field :year, :size => 1, :maxlength => 4, :placeholder =>"yyyy" %> | |
28 | - </td> | |
29 | - </tr> | |
30 | - </table> | |
31 | - <%= f.submit "Refresh" %> | |
32 | - <% end %> | |
33 | - | |
4 | + <p> Choose a date to see specific project results: </p> | |
5 | + <div id="datepicker" data-date="<%= @project_result.date %>"> | |
6 | + <input id="datepicker_field" style="display:none"/> | |
7 | + </div> | |
34 | 8 | |
35 | 9 | <h4><%= _('Last Result') %></h4> |
36 | 10 | |
... | ... | @@ -48,4 +22,18 @@ |
48 | 22 | <td><%= @project_result.formatted_analysis_time %></td> |
49 | 23 | </tr> |
50 | 24 | </table> |
25 | + | |
26 | + | |
27 | + <script> | |
28 | + jQuery(document).ready(function($) { | |
29 | + $("#datepicker").datepicker({ altField: '#datepicker_field', showOn: 'button', dateFormat: "yy-mm-dd", | |
30 | + buttonImageOnly: true, buttonImage: '/images/calendar_date_select/calendar.png', | |
31 | + onSelect: function(dateText, inst) { | |
32 | + reloadProjectWithDate(dateText) } }); | |
33 | + var date = jQuery("#datepicker").attr('data-date').substr(0,10); | |
34 | + $("#datepicker").datepicker( "setDate" , date ); | |
35 | + | |
36 | + }); | |
37 | + </script> | |
38 | + | |
51 | 39 | <% end %> | ... | ... |
plugins/mezuro/views/content_viewer/show_configuration.rhtml
1 | 1 | <% @configuration_content = @page |
2 | -@configuration = @page.configuration %> | |
2 | +@kalibro_configuration = @page.kalibro_configuration %> | |
3 | +<% unless @page.errors[:base].nil? %> | |
4 | + <% if @page.errors[:base] =~ /There is no configuration named/ %> | |
5 | + <h3>Warning:</h3> | |
6 | + <p>This Configuration doesn't exist on the Web Service. Do you want to <a href="/myprofile/<%= @page.profile.name %>/cms/destroy/<%= @page.id%>">delete</a> or <a href="/myprofile/<%= @page.profile.name %>/cms/edit/<%= @page.id%>">save it again</a>?</p> | |
7 | + <% else %> | |
8 | + <%= @page.errors[:base] %> | |
9 | + <% end %> | |
10 | +<% else %> | |
3 | 11 | |
4 | -<table id="project_info"> | |
5 | - <tr> | |
6 | - <td><%= _('Name') %></td> | |
7 | - <td><%= @configuration.name %></td> | |
8 | - </tr> | |
9 | - <tr> | |
10 | - <td><%= _('Description') %></td> | |
11 | - <td><%= @configuration.description %></td> | |
12 | - </tr> | |
13 | -</table> | |
12 | + <table id="project_info"> | |
13 | + <tr> | |
14 | + <td><%= _('Name') %></td> | |
15 | + <td><%= @kalibro_configuration.name %></td> | |
16 | + </tr> | |
17 | + <tr> | |
18 | + <td><%= _('Description') %></td> | |
19 | + <td><%= @kalibro_configuration.description %></td> | |
20 | + </tr> | |
21 | + </table> | |
14 | 22 | |
15 | -<br/> | |
23 | + <br/> | |
16 | 24 | |
17 | -<%= link_to "#{image_tag ('/plugins/mezuro/images/plus.png')}Add Metric", :controller => "mezuro_plugin_myprofile", | |
18 | -:action => "choose_base_tool", :params => { :id => @configuration_content.id } %><br/> | |
25 | + <%= link_to "#{image_tag ('/plugins/mezuro/images/plus.png')}Add Metric", :controller => "mezuro_plugin_myprofile", | |
26 | + :action => "choose_base_tool", :params => { :id => @configuration_content.id } %><br/> | |
19 | 27 | |
20 | -<table> | |
21 | - <tr class="titles"> | |
22 | - <td><h5>Metric Name</h5></td> | |
23 | - <td><h5>Collector Name</h5></td> | |
24 | - <td><h5>Metric Code</h5></td> | |
25 | - <td/><td/> | |
26 | - </tr> | |
27 | - <% @configuration.metric_configurations.each do |metric_configuration| %> | |
28 | - <tr class="metric"> | |
29 | - <td><%= metric_configuration.metric.name %></td> | |
30 | - <% if metric_configuration.metric.instance_of? Kalibro::NativeMetric %> | |
31 | - <td> | |
32 | - <%= metric_configuration.metric.origin %> | |
33 | - </td> | |
34 | - <td><%= metric_configuration.code %></td> | |
35 | - <td><%= link_to "Edit", :controller => "mezuro_plugin_myprofile", :action => "edit_metric_configuration", :params => | |
36 | - {:metric_name => metric_configuration.metric.name, :id => @configuration_content.id} %></td> | |
37 | - <% else %> | |
38 | - <td> | |
39 | - Compound Metric | |
40 | - </td> | |
41 | - <td><%= metric_configuration.code %></td> | |
42 | - <td><%= link_to "Edit", :controller => "mezuro_plugin_myprofile", :action => "edit_compound_metric_configuration", :params => | |
43 | - {:metric_name => metric_configuration.metric.name, :id => @configuration_content.id} %></td> | |
44 | - <% end %> | |
45 | - | |
46 | - <td><%= link_to "Remove", :controller => "mezuro_plugin_myprofile", :action => "remove_metric_configuration", :params => | |
47 | - {:metric_name => metric_configuration.metric.name, :id => @configuration_content.id} %></td> | |
28 | + <table> | |
29 | + <tr class="titles"> | |
30 | + <td><h5>Metric Name</h5></td> | |
31 | + <td><h5>Collector Name</h5></td> | |
32 | + <td><h5>Metric Code</h5></td> | |
33 | + <td/><td/> | |
48 | 34 | </tr> |
49 | - <% end %> | |
50 | -</table> | |
35 | + <% @kalibro_configuration.metric_configurations.each do |metric_configuration| %> | |
36 | + <tr class="metric"> | |
37 | + <td><%= metric_configuration.metric.name %></td> | |
38 | + <% if metric_configuration.metric.instance_of? Kalibro::NativeMetric %> | |
39 | + <td> | |
40 | + <%= metric_configuration.metric.origin %> | |
41 | + </td> | |
42 | + <td><%= metric_configuration.code %></td> | |
43 | + <td><%= link_to "Edit", :controller => "mezuro_plugin_myprofile", :action => "edit_metric_configuration", :params => | |
44 | + {:metric_name => metric_configuration.metric.name, :id => @configuration_content.id} %></td> | |
45 | + <% else %> | |
46 | + <td> | |
47 | + Compound Metric | |
48 | + </td> | |
49 | + <td><%= metric_configuration.code %></td> | |
50 | + <td><%= link_to "Edit", :controller => "mezuro_plugin_myprofile", :action => "edit_compound_metric_configuration", :params => | |
51 | + {:metric_name => metric_configuration.metric.name, :id => @configuration_content.id} %></td> | |
52 | + <% end %> | |
53 | + | |
54 | + <td><%= link_to "Remove", :controller => "mezuro_plugin_myprofile", :action => "remove_metric_configuration", :params => | |
55 | + {:metric_name => metric_configuration.metric.name, :id => @configuration_content.id} %></td> | |
56 | + </tr> | |
57 | + <% end %> | |
58 | + </table> | |
59 | +<% end %> | ... | ... |
plugins/mezuro/views/content_viewer/show_project.rhtml
... | ... | @@ -2,60 +2,58 @@ |
2 | 2 | |
3 | 3 | <% @project = @page.project %> |
4 | 4 | <% unless @page.errors[:base].nil? %> |
5 | - <%= @page.errors[:base] %> | |
6 | -<% else %> | |
7 | - | |
8 | - <% if (@project==nil) %> | |
5 | + <% if @page.errors[:base] =~ /There is no project named/ %> | |
9 | 6 | <h3>Warning:</h3> |
10 | 7 | <p>This project doesn't exist on the Web Service. Do you want to <a href="/myprofile/<%= @page.profile.name %>/cms/destroy/<%= @page.id%>">delete</a> or <a href="/myprofile/<%= @page.profile.name %>/cms/edit/<%= @page.id%>">save it again</a>?</p> |
11 | 8 | <% else %> |
9 | + <%= @page.errors[:base] %> | |
10 | + <% end %> | |
11 | +<% else %> | |
12 | 12 | |
13 | + <table> | |
14 | + <tr> | |
15 | + <td><%= _('Name') %></td> | |
16 | + <td><%= @project.name %></td> | |
17 | + </tr> | |
18 | + <tr> | |
19 | + <td><%= _('License') %></td> | |
20 | + <td><%= @project.license %></td> | |
21 | + </tr> | |
22 | + <tr> | |
23 | + <td><%= _('Description') %></td> | |
24 | + <td><%= @project.description %></td> | |
25 | + </tr> | |
26 | + <tr> | |
27 | + <td><%= _('Repository type') %></td> | |
28 | + <td><%= @project.repository.type %></td> | |
29 | + </tr> | |
30 | + <tr> | |
31 | + <td><%= _('Repository address') %></td> | |
32 | + <td><%= @project.repository.address %></td> | |
33 | + </tr> | |
34 | + <tr> | |
35 | + <td><%= _('Configuration') %></td> | |
36 | + <td><%= @project.configuration_name %></td> | |
37 | + </tr> | |
38 | + <tr> | |
39 | + <td><%= _('Periodicity') %></td> | |
40 | + <td><%= MezuroPlugin::Helpers::ContentViewerHelper.get_periodicity_option(@page.periodicity_in_days) %></td> | |
41 | + </tr> | |
42 | + <tr> | |
43 | + <td><%= _('Status')%></td> | |
44 | + <td> | |
45 | + <div id="project-state"><%= @project.state %></div> | |
46 | + <div id="msg-time"></div> | |
47 | + </td> | |
48 | + </tr> | |
49 | + </table> | |
13 | 50 | |
14 | - <table> | |
15 | - <tr> | |
16 | - <td><%= _('Name') %></td> | |
17 | - <td><%= @project.name %></td> | |
18 | - </tr> | |
19 | - <tr> | |
20 | - <td><%= _('License') %></td> | |
21 | - <td><%= @project.license %></td> | |
22 | - </tr> | |
23 | - <tr> | |
24 | - <td><%= _('Description') %></td> | |
25 | - <td><%= @project.description %></td> | |
26 | - </tr> | |
27 | - <tr> | |
28 | - <td><%= _('Repository type') %></td> | |
29 | - <td><%= @project.repository.type %></td> | |
30 | - </tr> | |
31 | - <tr> | |
32 | - <td><%= _('Repository address') %></td> | |
33 | - <td><%= @project.repository.address %></td> | |
34 | - </tr> | |
35 | - <tr> | |
36 | - <td><%= _('Configuration') %></td> | |
37 | - <td><%= @project.configuration_name %></td> | |
38 | - </tr> | |
39 | - <tr> | |
40 | - <td><%= _('Periodicity') %></td> | |
41 | - <td><%= MezuroPlugin::Helpers::ContentViewerHelper.get_periodicity_option(@page.periodicity_in_days) %></td> | |
42 | - </tr> | |
43 | - <tr> | |
44 | - <td><%= _('Status')%></td> | |
45 | - <td> | |
46 | - <div id="project-state"><%= @project.state %></div> | |
47 | - <div id="msg-time"></div> | |
48 | - </td> | |
49 | - </tr> | |
50 | - </table> | |
51 | - | |
52 | - <br /> | |
51 | + <br /> | |
53 | 52 | |
54 | - <div id="project-result" data-profile="<%= @page.profile.identifier %>" data-content="<%= @page.id %>" | |
55 | - data-project-name="<%= @project.name %>"> | |
56 | - </div> | |
57 | - <div id="project-tree"></div> | |
58 | - <div id="module-result"> | |
59 | - </div> | |
60 | - <% end %> | |
53 | + <div id="project-result" data-profile="<%= @page.profile.identifier %>" data-content="<%= @page.id %>" | |
54 | + data-project-name="<%= @project.name %>"> | |
55 | + </div> | |
56 | + <div id="project-tree"></div> | |
57 | + <div id="module-result"> | |
58 | + </div> | |
61 | 59 | <% end %> | ... | ... |
plugins/mezuro/views/mezuro_plugin_myprofile/_range_form.html.erb
... | ... | @@ -38,7 +38,7 @@ |
38 | 38 | <%= f.label :color, "(*) Color:" %> |
39 | 39 | </td> |
40 | 40 | <td> |
41 | - <%= f.text_field :color %> | |
41 | + <%= f.text_field(:color, :id => "range_color", :value => @range.mezuro_color) %> | |
42 | 42 | </td> |
43 | 43 | </tr> |
44 | 44 | <tr> |
... | ... | @@ -51,3 +51,11 @@ |
51 | 51 | </tr> |
52 | 52 | </table> |
53 | 53 | <%= f.submit "Save Range" %> |
54 | + | |
55 | +<script>jQuery(document).ready(function($) { | |
56 | + $('#range_color').colorPicker({ | |
57 | + onColorChange : function(id, newValue) { | |
58 | + jQuery('#range_color').val(newValue); | |
59 | + } | |
60 | + }); | |
61 | +});</script> | ... | ... |
plugins/mezuro/views/mezuro_plugin_myprofile/edit_compound_metric_configuration.html.erb
1 | +<script src="/plugins/mezuro/javascripts/validations.js" type="text/javascript"></script> | |
2 | +<script src="/plugins/mezuro/javascripts/colorPicker/jquery.colorPicker.min.js" type="text/javascript"></script> | |
3 | +<script src="/plugins/mezuro/javascripts/colorPicker/jquery.colorPicker.js" type="text/javascript"></script> | |
4 | + | |
1 | 5 | <h2><%= @configuration_content.name %> Configuration</h2> |
2 | 6 | |
3 | 7 | <% form_for :metric_configuration, :url => {:action =>"update_compound_metric_configuration", :controller => "mezuro_plugin_myprofile"}, :method => :get do |f| %> | ... | ... |
plugins/mezuro/views/mezuro_plugin_myprofile/edit_metric_configuration.html.erb
1 | 1 | <script src="/plugins/mezuro/javascripts/validations.js" type="text/javascript"></script> |
2 | +<script src="/plugins/mezuro/javascripts/colorPicker/jquery.colorPicker.min.js" type="text/javascript"></script> | |
3 | +<script src="/plugins/mezuro/javascripts/colorPicker/jquery.colorPicker.js" type="text/javascript"></script> | |
2 | 4 | |
3 | 5 | <h2><%= @configuration_content.name %> Configuration</h2> |
4 | 6 | |
... | ... | @@ -84,3 +86,4 @@ |
84 | 86 | <%= link_to_remote "New Range", :url => {:action =>"new_range", :controller => "mezuro_plugin_myprofile", :id => @configuration_content.id, :metric_name => @metric.name} %> |
85 | 87 | <div id="range_form" style="display:none"></div> |
86 | 88 | |
89 | + | ... | ... |
plugins/mezuro/views/mezuro_plugin_myprofile/error_page.html.erb
0 → 100644
plugins/mezuro/views/mezuro_plugin_profile/error_page.html.erb
0 → 100644