mountain-goat 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/README.md +5 -4
- data/generators/mg/mg_generator.rb +2 -2
- data/generators/mg/templates/update_mountain_goat_tables_v2.rb +73 -0
- data/lib/mountain-goat/controllers/mg/choices_controller.rb +81 -0
- data/lib/mountain-goat/controllers/mg/goals_controller.rb +136 -0
- data/lib/mountain-goat/controllers/mg/records_controller.rb +46 -0
- data/lib/mountain-goat/controllers/mg/tests_controller.rb +139 -0
- data/lib/mountain-goat/mg_core.rb +403 -0
- data/lib/mountain-goat/models/mg/choice.rb +50 -0
- data/lib/mountain-goat/models/mg/gi_meta.rb +10 -0
- data/lib/mountain-goat/models/mg/goal.rb +183 -0
- data/lib/mountain-goat/models/mg/goal_meta_type.rb +20 -0
- data/lib/mountain-goat/models/mg/gs_meta.rb +10 -0
- data/lib/mountain-goat/models/mg/record.rb +59 -0
- data/lib/mountain-goat/models/mg/test.rb +31 -0
- data/lib/mountain-goat/public/g-funnel.js +168 -0
- data/lib/mountain-goat/switch_choice.rb +32 -0
- data/lib/mountain-goat/version.rb +1 -1
- data/lib/mountain-goat/views/mountain_goat/layouts/.tmp_mountain_goat.html.erb.50680~ +76 -0
- data/lib/mountain-goat/views/mountain_goat/mg/choices/_choice_form.html.erb +37 -0
- data/lib/mountain-goat/views/mountain_goat/mg/choices/edit.html.erb +13 -0
- data/lib/mountain-goat/views/mountain_goat/mg/choices/index.html.erb +34 -0
- data/lib/mountain-goat/views/mountain_goat/mg/choices/new.html.erb +15 -0
- data/lib/mountain-goat/views/mountain_goat/mg/choices/show.html.erb +30 -0
- data/lib/mountain-goat/views/mountain_goat/mg/goals/.tmp__goal_form.html.erb.5027~ +0 -0
- data/lib/mountain-goat/views/mountain_goat/mg/goals/.tmp__goal_meta_type_form.html.erb.39992~ +0 -0
- data/lib/mountain-goat/views/mountain_goat/mg/goals/.tmp_edit.html.erb.55874~ +0 -0
- data/lib/mountain-goat/views/mountain_goat/mg/goals/.tmp_index.html.erb.97274~ +36 -0
- data/lib/mountain-goat/views/mountain_goat/mg/goals/_goal_form.html.erb +28 -0
- data/lib/mountain-goat/views/mountain_goat/mg/goals/_goal_meta_type_form.html.erb +34 -0
- data/lib/mountain-goat/views/mountain_goat/mg/goals/edit.html.erb +12 -0
- data/lib/mountain-goat/views/mountain_goat/mg/goals/index.html.erb +37 -0
- data/lib/mountain-goat/views/mountain_goat/mg/goals/new.html.erb +12 -0
- data/lib/mountain-goat/views/mountain_goat/mg/goals/show.html.erb +32 -0
- data/lib/mountain-goat/views/mountain_goat/mg/records/_record.html.erb +16 -0
- data/lib/mountain-goat/views/mountain_goat/mg/records/_records.html.erb +5 -0
- data/lib/mountain-goat/views/mountain_goat/mg/records/_records_form.html.erb +21 -0
- data/lib/mountain-goat/views/mountain_goat/mg/records/edit.html.erb +13 -0
- data/lib/mountain-goat/views/mountain_goat/mg/records/index.html.erb +17 -0
- data/lib/mountain-goat/views/mountain_goat/mg/records/new.html.erb +13 -0
- data/lib/mountain-goat/views/mountain_goat/mg/records/show.html.erb +14 -0
- data/lib/mountain-goat/views/mountain_goat/mg/report_items/.tmp__chart.html.erb.13419~ +18 -0
- data/lib/mountain-goat/views/mountain_goat/mg/report_items/.tmp__funnel.html.erb.60493~ +18 -0
- data/lib/mountain-goat/views/mountain_goat/mg/report_items/.tmp__report_item_form.html.erb.87420~ +10 -0
- data/lib/mountain-goat/views/mountain_goat/mg/report_items/.tmp__report_item_pivot_form.html.erb.77056~ +14 -0
- data/lib/mountain-goat/views/mountain_goat/mg/report_items/.tmp_edit.html.erb.31048~ +19 -0
- data/lib/mountain-goat/views/mountain_goat/mg/report_items/.tmp_new.html.erb.36371~ +17 -0
- data/lib/mountain-goat/views/mountain_goat/mg/report_items/_funnel.html.erb +13 -0
- data/lib/mountain-goat/views/mountain_goat/mg/reports/.tmp__report_form.html.erb.76535~ +21 -0
- data/lib/mountain-goat/views/mountain_goat/mg/reports/.tmp__report_report_items.html.erb.26030~ +5 -0
- data/lib/mountain-goat/views/mountain_goat/mg/reports/.tmp_edit.html.erb.78064~ +36 -0
- data/lib/mountain-goat/views/mountain_goat/mg/reports/.tmp_index.html.erb.74591~ +23 -0
- data/lib/mountain-goat/views/mountain_goat/mg/reports/.tmp_show.html.erb.58427~ +21 -0
- data/lib/mountain-goat/views/mountain_goat/mg/tests/_test_form.html.erb +25 -0
- data/lib/mountain-goat/views/mountain_goat/mg/tests/edit.html.erb +12 -0
- data/lib/mountain-goat/views/mountain_goat/mg/tests/index.html.erb +48 -0
- data/lib/mountain-goat/views/mountain_goat/mg/tests/new.html.erb +12 -0
- data/lib/mountain-goat/views/mountain_goat/mg/tests/show.html.erb +63 -0
- metadata +69 -6
- data/lib/mountain-goat/metric_tracking.rb +0 -401
- data/lib/mountain-goat/switch_variant.rb +0 -32
@@ -0,0 +1,32 @@
|
|
1
|
+
|
2
|
+
class SwitchChoice
|
3
|
+
def initialize(logger, test, chosen_choice)
|
4
|
+
@chosen_choice = chosen_choice
|
5
|
+
@test = test
|
6
|
+
@logger = logger
|
7
|
+
raise ArgumentError, "Test type must be switch-type" if !@test.is_switch
|
8
|
+
end
|
9
|
+
|
10
|
+
def method_missing(sym, *args, &block)
|
11
|
+
#priority = ( args.first || 1.0 ).to_f
|
12
|
+
|
13
|
+
if @chosen_choice.nil?
|
14
|
+
#If we have not chosen a choice, we are going to look through
|
15
|
+
# each option and make sure we have a back-end entry in choices
|
16
|
+
# for the type
|
17
|
+
@logger.warn "Looking at option #{sym.to_s}"
|
18
|
+
if @test.choices.find( :first, :conditions => { :switch_type => sym.to_s } ).nil?
|
19
|
+
@logger.warn "Creating switch-type choice #{sym.to_s}"
|
20
|
+
@test.choices.create!( :name => sym.to_s, :switch_type => sym.to_s, :value => nil )
|
21
|
+
end
|
22
|
+
else
|
23
|
+
if @chosen_choice.switch_type.to_s == sym.to_s
|
24
|
+
@logger.warn "Executing option #{sym.to_s}"
|
25
|
+
yield
|
26
|
+
else
|
27
|
+
@logger.warn "Bypassing option #{sym.to_s}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
|
3
|
+
<% is_mobile = false if local_assigns[:is_mobile].nil? %>
|
4
|
+
|
5
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
6
|
+
|
7
|
+
<head>
|
8
|
+
<title>Mountain Goat <% if @title %> - <%=h @title %><% end %></title>
|
9
|
+
|
10
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
11
|
+
|
12
|
+
<%# These are mobile specific settings. We are disabling zooming and fixing the width. %>
|
13
|
+
<meta content='True' name='HandheldFriendly' />
|
14
|
+
<!--<meta content='width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;' name='viewport' />-->
|
15
|
+
<meta name="viewport" content="width=device-width" />
|
16
|
+
|
17
|
+
<link rel="stylesheet" href="/mg/public/mg_css" type="text/css" />
|
18
|
+
<link rel="stylesheet" href="/mg/public/jqModel_css" type="text/css" />
|
19
|
+
|
20
|
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>
|
21
|
+
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.min.js" type="text/javascript"></script>
|
22
|
+
<script src="/mg/public/jqModel_js" type="text/javascript"></script>
|
23
|
+
<script src="/mg/public/raphael-min_js" type="text/javascript"></script>
|
24
|
+
<script src="/mg/public/g-raphael-min_js" type="text/javascript"></script>
|
25
|
+
<script src="/mg/public/g-bar-min_js" type="text/javascript"></script>
|
26
|
+
<script src="/mg/public/g-dot-min_js" type="text/javascript"></script>
|
27
|
+
<script src="/mg/public/g-line-min_js" type="text/javascript"></script>
|
28
|
+
<script src="/mg/public/g-pie-min_js" type="text/javascript"></script>
|
29
|
+
<script src="/mg/public/jquery_flot_js" type="text/javascript"></script>
|
30
|
+
<script src="/mg/public/jquery_timeago_js" type="text/javascript"></script>
|
31
|
+
<script src="/mg/public/jquery_raphael_js" type="text/javascript"></script>
|
32
|
+
<script src="/mg/public/mg_js" type="text/javascript"></script>
|
33
|
+
<script src="/mg/public/utils_js" type="text/javascript"></script>
|
34
|
+
|
35
|
+
</head>
|
36
|
+
|
37
|
+
<body>
|
38
|
+
<div class="mg-header structure">
|
39
|
+
<div class="container-center">
|
40
|
+
<div class="header">
|
41
|
+
<a href="/mg" class="logo">
|
42
|
+
<img src="/mg/public/mg_png" />
|
43
|
+
</a>
|
44
|
+
<ul class="nav">
|
45
|
+
<li><a href="<%= mg_goals_url %>">Goals</a></li>
|
46
|
+
<li><a href="<%= mg_tests_url %>">Tests</a></li>
|
47
|
+
<li><a href="<%= mg_records_url %>">Records</a></li>
|
48
|
+
<li><a href="<%= mg_reports_url %>">Reports</a></li>
|
49
|
+
<li><a href="/">Exit</a></li>
|
50
|
+
</ul>
|
51
|
+
</div>
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
|
55
|
+
<div class="mg-content structure">
|
56
|
+
<div class="container-center">
|
57
|
+
<% if !flash[:notice].blank? || !flash[:error].blank? %>
|
58
|
+
<div class="flash">
|
59
|
+
<% if !flash[:error].blank? %>
|
60
|
+
<div class="error"><%= flash[:error] %></div>
|
61
|
+
<% end %>
|
62
|
+
<% if !flash[:notice].blank? %>
|
63
|
+
<div class="notice"><%= flash[:notice] %></div>
|
64
|
+
<% end %>
|
65
|
+
</div>
|
66
|
+
<% end %>
|
67
|
+
<%= yield %>
|
68
|
+
</div>
|
69
|
+
</div>
|
70
|
+
|
71
|
+
<div class="mg-footer structure">
|
72
|
+
|
73
|
+
</div>
|
74
|
+
</body>
|
75
|
+
|
76
|
+
</html>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
<%# locals => f %>
|
2
|
+
|
3
|
+
<%= f.hidden_field :mg_test_id %>
|
4
|
+
|
5
|
+
<% if f.object.mg_test.is_switch %>
|
6
|
+
<span class="switch-type"><%=h f.object.switch_type %></span>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<div class="item name">
|
10
|
+
<%= f.label :name, 'Name (whatever you want)' %>
|
11
|
+
<%= f.text_field :name %>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<% if !f.object.mg_test.is_switch %>
|
15
|
+
<div class="item value">
|
16
|
+
<%= f.label :value, 'What\'s displayed' %>
|
17
|
+
<%= f.text_area :value %>
|
18
|
+
</div>
|
19
|
+
|
20
|
+
<input type='checkbox' id="my_slider" class='slider' data-slider='.options' />
|
21
|
+
<label for="my_slider">Add optional variants</label>
|
22
|
+
<div class="options" style="display:none;">
|
23
|
+
<div class="item opt1">
|
24
|
+
<%= f.label :opt1, 'Option 1' %>
|
25
|
+
<%= f.text_area :opt1 %>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<div class="item opt2">
|
29
|
+
<%= f.label :opt2, 'Option 2' %>
|
30
|
+
<%= f.text_area :opt2 %>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
<% end %>
|
34
|
+
|
35
|
+
<div class="item submit">
|
36
|
+
<%= f.submit 'Submit' %>
|
37
|
+
</div>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
<div id="container-main" class="mg-choices">
|
4
|
+
<div class="mountain-goat-panel centered">
|
5
|
+
<h1>Edit <%=h @choice.name %></h1>
|
6
|
+
|
7
|
+
<% form_for :choice, @choice, :url => mg_choice_url(:id => @choice.id), :html => { :method => :put } do |f| %>
|
8
|
+
<%= f.error_messages %>
|
9
|
+
|
10
|
+
<%= render 'choice_form', :f => f %>
|
11
|
+
<% end %>
|
12
|
+
</div>
|
13
|
+
</div>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
<div id="container-main" class="mg-choices">
|
3
|
+
<div class="mountain-goat-panel cenetered">
|
4
|
+
<h1>Listing Choices</h1>
|
5
|
+
|
6
|
+
<table>
|
7
|
+
<tr>
|
8
|
+
<th>Metric</th>
|
9
|
+
<th>Value</th>
|
10
|
+
<th>Opt1</th>
|
11
|
+
<th>Opt2</th>
|
12
|
+
<th>Served</th>
|
13
|
+
<th>Conversions</th>
|
14
|
+
</tr>
|
15
|
+
|
16
|
+
<% @choices.each do |choice| %>
|
17
|
+
<tr>
|
18
|
+
<td><%=h choice.mg_test_id %></td>
|
19
|
+
<td><%=h choice.value %></td>
|
20
|
+
<td><%=h choice.opt1 %></td>
|
21
|
+
<td><%=h choice.opt2 %></td>
|
22
|
+
<td><%=h choice.served %></td>
|
23
|
+
<td><%=h choice.conversions %></td>
|
24
|
+
<td><a href="<%= mg_choice_url choice %>">Show</a></td>
|
25
|
+
<td><a href="<%= edit_mg_choice_url choice %>">Edit</a></td>
|
26
|
+
</tr>
|
27
|
+
<% end %>
|
28
|
+
</table>
|
29
|
+
|
30
|
+
<br />
|
31
|
+
|
32
|
+
<%= link_to 'New Choice', new_mg_choice_url %>
|
33
|
+
</div>
|
34
|
+
</div>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
<div id="container-main" class="mg-choices">
|
4
|
+
<div class="mountain-goat-panel cenetered">
|
5
|
+
<h1>New Choice for <%=h @test.title %></h1>
|
6
|
+
|
7
|
+
<% form_for :choice, @choice, :url => mg_choices_url do |f| %>
|
8
|
+
<%= f.error_messages %>
|
9
|
+
|
10
|
+
<%= render 'choice_form', :f => f %>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<a href="<%= mg_test_url :id => @test.id %>">Back to <%=h @test.title %></a>
|
14
|
+
</div>
|
15
|
+
</div>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
<div id="container-main" class="mg-choices">
|
3
|
+
<div class="mountain-goat-panel cenetered">
|
4
|
+
<ul class="nav">
|
5
|
+
<li><a href="<%= mg_goals_url %>">Goals</a></li>
|
6
|
+
<li><a href="<%= mg_test_url :id => @choice.mg_test.id %>"><%=h @choice.mg_test.title %></a></li>
|
7
|
+
</ul>
|
8
|
+
|
9
|
+
<h1><%=h @choice.name %></h1>
|
10
|
+
|
11
|
+
<div class="test-category">
|
12
|
+
<div class="item rate">
|
13
|
+
<span class="rate-holder">
|
14
|
+
<span class="title"><a href="<%= mg_choice_url @choice %>"><%=h @choice.name %></a></span>
|
15
|
+
<span class="rates" style="width:<%= number_to_percentage(@choice.conversion_rate, :precision => 0) %>"></span>
|
16
|
+
</span>
|
17
|
+
|
18
|
+
<span class="percent-holder">
|
19
|
+
<span class="val"><%= number_to_percentage(@choice.conversion_rate, :precision => 0) %></span>
|
20
|
+
(<span class="conversions"><%= @choice.conversions %></span> /
|
21
|
+
<span class="served"><%= @choice.served %></span>)
|
22
|
+
</span>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
|
26
|
+
<div class="actions">
|
27
|
+
<a class="button" href="<%= edit_mg_choice_url :id => @choice.id %>">Edit</a>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
</div>
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<div id="container-main" class="mg-goals">
|
2
|
+
<h1>Your Goals</h1>
|
3
|
+
<div class="container-content">
|
4
|
+
<div class="title-bar">
|
5
|
+
<span class="category name">Goal</span>
|
6
|
+
<span class="category hit-total">Total</span>
|
7
|
+
<span class="category hit-recent">Recent</span>
|
8
|
+
<span class="category hit-points">Points</span>
|
9
|
+
<span class="category actions">Actions</span>
|
10
|
+
</div>
|
11
|
+
<ul class="listed">
|
12
|
+
<% @goals.each do |goal| %>
|
13
|
+
<li class="conversion-goal">
|
14
|
+
<span class="category name"><%=h goal.name %></span>
|
15
|
+
<span class="category hit-total"><%=h goal.mg_records.count %></span>
|
16
|
+
<span class="category hit-recent"><%=h goal.recent_records(1.week).count %></span>
|
17
|
+
<span class="category hit-points"><%=h goal.rewards_total || "None" %></span>
|
18
|
+
<span class="category actions">
|
19
|
+
<a href="<%= mg_goal_url :id => goal.id %>">View</a>
|
20
|
+
<a href="<%= hide_mg_goal_url :id => goal.id %>">Hide</a>
|
21
|
+
</span>
|
22
|
+
</li>
|
23
|
+
<% end %>
|
24
|
+
</ul>
|
25
|
+
<div class="action-bar">
|
26
|
+
<a class="button" href="<%= new_mg_goal_url %>">New Goal</a>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
|
30
|
+
<div class="hidden-goals">
|
31
|
+
<% @hidden_goals.each do |goal| %>
|
32
|
+
<span class="name"><%=h goal.name %></span>
|
33
|
+
<span class="unhide"><a href="<%= unhide_mg_goal_url :id => goal.id %>">Restore</a></span>
|
34
|
+
<% end %>
|
35
|
+
</div>
|
36
|
+
</div>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<%# locals => f %>
|
2
|
+
|
3
|
+
<% if f.object.new_record? %>
|
4
|
+
<div class="item type">
|
5
|
+
<%= f.text_field :goal_type %>
|
6
|
+
<%= f.label :goal_type, 'Type (this is technical)' %>
|
7
|
+
</div>
|
8
|
+
<% else %>
|
9
|
+
<div class="item goal">
|
10
|
+
<h2><%= f.object.goal_type %></h2>
|
11
|
+
<label>Goal Name</label>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<div class="item name">
|
16
|
+
<%= f.text_field :name %>
|
17
|
+
<%= f.label :name, 'Goal title' %>
|
18
|
+
</div>
|
19
|
+
|
20
|
+
<div class="metas">
|
21
|
+
<% f.fields_for :mg_goal_meta_types do |builder| %>
|
22
|
+
<%= render "goal_meta_type_form", :gmt_f => builder %>
|
23
|
+
<% end %>
|
24
|
+
</div>
|
25
|
+
|
26
|
+
<div class="item submit">
|
27
|
+
<%= f.submit 'Submit' %>
|
28
|
+
</div>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<%# locals => gmt_f %>
|
2
|
+
|
3
|
+
<div class="meta">
|
4
|
+
|
5
|
+
<div class="item meta-name">
|
6
|
+
<%= gmt_f.text_field :name %>
|
7
|
+
<%= gmt_f.label :name, 'Meta Name' %>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<% if gmt_f.object.new_record? %>
|
11
|
+
<div class="item meta-var">
|
12
|
+
<%= gmt_f.text_field :var %>
|
13
|
+
<%= gmt_f.label :var, 'Var' %>
|
14
|
+
</div>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
<div class="item meta-meta-type">
|
18
|
+
<%= gmt_f.select :meta_type, [ [ "Integer", "gi_meta" ], [ "String", "gs_meta" ] ] %>
|
19
|
+
<% if gmt_f.object.new_record? %>
|
20
|
+
<%= gmt_f.label :meta_type, 'Meta Type' %>
|
21
|
+
<% else %>
|
22
|
+
<%= gmt_f.label :meta_type, "#{gmt_f.object.var} Type" %>
|
23
|
+
<% end %>
|
24
|
+
</div>
|
25
|
+
|
26
|
+
<div class="item meta-destroy">
|
27
|
+
<%= gmt_f.check_box :_destroy %>
|
28
|
+
<% if gmt_f.object.new_record? %>
|
29
|
+
<%= gmt_f.label :_destroy, "Remove Meta" %>
|
30
|
+
<% else %>
|
31
|
+
<%= gmt_f.label :_destroy, "Remove #{gmt_f.object.var}" %>
|
32
|
+
<% end %>
|
33
|
+
</div>
|
34
|
+
</div>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<div id="container-main" class="mg-goal-edit">
|
2
|
+
<h1>Edit <%=h @goal.name.capitalize %></h1>
|
3
|
+
<div class="container-content">
|
4
|
+
<div class="edit-form">
|
5
|
+
<% form_for :goal, @goal, :url => mg_goal_url(:id => @goal.id), :html => { :method => :put } do |f| %>
|
6
|
+
<%= f.error_messages %>
|
7
|
+
|
8
|
+
<%= render :partial => 'mg/goals/goal_form', :locals => { :f => f } %>
|
9
|
+
<% end %>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
</div>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
<div id="container-main" class="mg-goals">
|
2
|
+
<h1>Your Goals</h1>
|
3
|
+
<div class="container-content">
|
4
|
+
<div class="title-bar">
|
5
|
+
<span class="category name">Goal</span>
|
6
|
+
<span class="category hit-total">Total</span>
|
7
|
+
<span class="category hit-recent">Recent</span>
|
8
|
+
<span class="category hit-points">Points</span>
|
9
|
+
<span class="category actions">Actions</span>
|
10
|
+
</div>
|
11
|
+
<ul class="listed">
|
12
|
+
<% @goals.each do |goal| %>
|
13
|
+
<li class="conversion-goal">
|
14
|
+
<span class="category name"><%=h goal.name %></span>
|
15
|
+
<span class="category hit-total"><%=h goal.mg_records.count %></span>
|
16
|
+
<span class="category hit-recent"><%=h goal.recent_records(1.week).count %></span>
|
17
|
+
<span class="category hit-points"><%=h goal.rewards_total || "None" %></span>
|
18
|
+
<span class="category actions">
|
19
|
+
<a href="<%= mg_goal_url :id => goal.id %>">View</a>
|
20
|
+
<a href="<%= edit_mg_goal_url :id => goal.id %>">Edit</a>
|
21
|
+
<a href="<%= hide_mg_goal_url :id => goal.id %>">Hide</a>
|
22
|
+
</span>
|
23
|
+
</li>
|
24
|
+
<% end %>
|
25
|
+
</ul>
|
26
|
+
<div class="action-bar">
|
27
|
+
<a class="button" href="<%= new_mg_goal_url %>">New Goal</a>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
<div class="hidden-goals">
|
32
|
+
<% @hidden_goals.each do |goal| %>
|
33
|
+
<span class="name"><%=h goal.name %></span>
|
34
|
+
<span class="unhide"><a href="<%= unhide_mg_goal_url :id => goal.id %>">Restore</a></span>
|
35
|
+
<% end %>
|
36
|
+
</div>
|
37
|
+
</div>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<div id="container-main" class="mg-goal-new">
|
2
|
+
<h1>Create New Goal</h1>
|
3
|
+
<div class="container-content">
|
4
|
+
<div class="edit-form">
|
5
|
+
<% form_for :goal, @goal, :url => mg_goals_url do |f| %>
|
6
|
+
<%= f.error_messages %>
|
7
|
+
|
8
|
+
<%= render :partial => 'mg/goals/goal_form', :locals => { :f => f } %>
|
9
|
+
<% end %>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
</div>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<div id="container-main" class="mg-goals show">
|
2
|
+
<h1><%=h @goal.name.capitalize %></h1>
|
3
|
+
<div class="container-content">
|
4
|
+
<div class="statboard">
|
5
|
+
<div class="flyer-analysis statpad">
|
6
|
+
<div class="title">Records by Day</div>
|
7
|
+
<div class="statbody">
|
8
|
+
<%= mg_chart("analysis_graph#{@goal.id}",
|
9
|
+
{ "Conversions" => { :collection => @results_per_day, :x => :date, :y => :val } },
|
10
|
+
{ :xaxis => {:mode => 'time', :timeformat => "%b %d" }, :yaxis => { :min => 0, :minTickSize => 1 }, :lines => { :show => true }, :legend => { :position => "ne" }, :grid => { :hoverable => true, :clickable => true }, :inline => false }, :placeholder_size => "420x260", :pie_hover => true, :line_hover_absolute => true, :item_title => "records(s)") %>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<% @goal.mg_goal_meta_types.each do |gmt| %>
|
15
|
+
<div class="flyer-analysis statpad">
|
16
|
+
<div class="title">Records by <%=h gmt.name %></div>
|
17
|
+
<div class="statbody">
|
18
|
+
<% if gmt.meta_type == 'ci_meta' || gmt.meta_type == 'gi_meta' %>
|
19
|
+
<%= mg_chart("analysis_graph#{gmt.id}",
|
20
|
+
{ "Records" => { :collection => @results_by_gmt[gmt.id], :x => :name, :y => :val } },
|
21
|
+
{ :xaxis => {:autoscaleMargin => 1, :minTickSize => 1 }, :yaxis => { :min => 0, :minTickSize => 1 }, :bars => { :show => true, :align => 'center', :barWidth => 1 }, :legend => { :position => "ne" }, :grid => { :hoverable => true, :clickable => true }, :inline => false }, :placeholder_size => "420x260", :pie_hover => true, :line_hover_absolute => true, :item_title => "records(s)") %>
|
22
|
+
<% elsif gmt.meta_type == 'cs_meta' || gmt.meta_type == 'gs_meta' %>
|
23
|
+
<%= mg_chart("analysis_graph#{gmt.id}",
|
24
|
+
{ "Conversions" => { :collection => @results_by_gmt[gmt.id], :x => :name, :y => :val } },
|
25
|
+
{ :xaxis => {:autoscaleMargin => 0.1, :ticks => @results_by_gmt_titles[gmt.id].map { |i,t| [i + 0.5, t] }.sort }, :yaxis => { :min => 0, :minTickSize => 1 }, :bars => { :show => true }, :legend => { :position => "ne" }, :grid => { :hoverable => true, :clickable => true }, :inline => false }, :placeholder_size => "420x260", :pie_hover => true, :line_hover_absolute => true, :item_title => "records(s)") %>
|
26
|
+
<% end %>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
<% end %>
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
</div>
|