dash_creator 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +170 -0
- data/Rakefile +36 -0
- data/app/assets/config/dash_creator_manifest.js +2 -0
- data/app/assets/javascripts/dash_creator/application.js +24 -0
- data/app/assets/javascripts/dash_creator/chart.js +2 -0
- data/app/assets/javascripts/dash_creator/dashboard.js +2 -0
- data/app/assets/javascripts/dash_creator/dashboard_object.js +2 -0
- data/app/assets/javascripts/dash_creator/filter.js +2 -0
- data/app/assets/javascripts/dash_creator/libs/Chart.js +12269 -0
- data/app/assets/javascripts/dash_creator/libs/bootstrap.js +3535 -0
- data/app/assets/javascripts/dash_creator/libs/chartCreator.js +1582 -0
- data/app/assets/javascripts/dash_creator/libs/dashboardCreator.js +531 -0
- data/app/assets/javascripts/dash_creator/libs/daterangepicker.js +1626 -0
- data/app/assets/javascripts/dash_creator/libs/filterCreator.js +733 -0
- data/app/assets/javascripts/dash_creator/libs/jquery-ui.js +18706 -0
- data/app/assets/javascripts/dash_creator/libs/jquery.minicolors.js +1108 -0
- data/app/assets/javascripts/dash_creator/libs/moment.js +4301 -0
- data/app/assets/javascripts/dash_creator/libs/tether.js +1811 -0
- data/app/assets/javascripts/dash_creator/user.js +2 -0
- data/app/assets/stylesheets/dash_creator/application.css +16 -0
- data/app/assets/stylesheets/dash_creator/chart.css +4 -0
- data/app/assets/stylesheets/dash_creator/dashboard.css +4 -0
- data/app/assets/stylesheets/dash_creator/dashboard_object.css +4 -0
- data/app/assets/stylesheets/dash_creator/filter.css +4 -0
- data/app/assets/stylesheets/dash_creator/fonts/FontAwesome.otf +0 -0
- data/app/assets/stylesheets/dash_creator/fonts/fontawesome-webfont.eot +0 -0
- data/app/assets/stylesheets/dash_creator/fonts/fontawesome-webfont.svg +2671 -0
- data/app/assets/stylesheets/dash_creator/fonts/fontawesome-webfont.ttf +0 -0
- data/app/assets/stylesheets/dash_creator/fonts/fontawesome-webfont.woff +0 -0
- data/app/assets/stylesheets/dash_creator/fonts/fontawesome-webfont.woff2 +0 -0
- data/app/assets/stylesheets/dash_creator/libs/font-awesome.css +2199 -0
- data/app/assets/stylesheets/dash_creator/libs/jquery.minicolors.css +319 -0
- data/app/assets/stylesheets/dash_creator/libs/jquery.minicolors.png +0 -0
- data/app/assets/stylesheets/dash_creator/libs/style.css +13714 -0
- data/app/assets/stylesheets/dash_creator/user.css +4 -0
- data/app/controllers/dash_creator/application_controller.rb +3 -0
- data/app/controllers/dash_creator/chart_controller.rb +81 -0
- data/app/controllers/dash_creator/dashboard_controller.rb +37 -0
- data/app/controllers/dash_creator/dashboard_object_controller.rb +34 -0
- data/app/controllers/dash_creator/filter_controller.rb +60 -0
- data/app/controllers/dash_creator/user_controller.rb +82 -0
- data/app/helpers/dash_creator/application_helper.rb +4 -0
- data/app/helpers/dash_creator/chart_helper.rb +829 -0
- data/app/helpers/dash_creator/dashboard_helper.rb +4 -0
- data/app/helpers/dash_creator/dashboard_object_helper.rb +4 -0
- data/app/helpers/dash_creator/filter_helper.rb +237 -0
- data/app/helpers/dash_creator/user_helper.rb +4 -0
- data/app/jobs/dash_creator/application_job.rb +4 -0
- data/app/mailers/dash_creator/application_mailer.rb +6 -0
- data/app/models/dash_creator/application_record.rb +5 -0
- data/app/models/dash_creator/chart.rb +21 -0
- data/app/models/dash_creator/dashboard.rb +13 -0
- data/app/models/dash_creator/dashboard_object.rb +7 -0
- data/app/models/dash_creator/filter.rb +22 -0
- data/app/views/dash_creator/chart/_chart_creator.html.erb +230 -0
- data/app/views/dash_creator/chart/_modals.html.erb +74 -0
- data/app/views/dash_creator/chart/_plot_chart.html.erb +45 -0
- data/app/views/dash_creator/chart/create_chart.js.erb +53 -0
- data/app/views/dash_creator/dashboard/_dashboard_creator.html.erb +182 -0
- data/app/views/dash_creator/dashboard/_modals.html.erb +74 -0
- data/app/views/dash_creator/dashboard_object/_chart.html.erb +9 -0
- data/app/views/dash_creator/dashboard_object/_stat.html.erb +24 -0
- data/app/views/dash_creator/dashboard_object/_table.html.erb +16 -0
- data/app/views/dash_creator/filter/_filtering_card.html.erb +132 -0
- data/app/views/dash_creator/filter/_modals.html.erb +51 -0
- data/app/views/dash_creator/filter/_result_tables.html.erb +55 -0
- data/app/views/dash_creator/filter/apply_filtering.js.erb +46 -0
- data/app/views/dash_creator/filter/create_stat.js.erb +20 -0
- data/app/views/dash_creator/layouts/application.html.erb +64 -0
- data/app/views/dash_creator/layouts/menu/_left_menu.html.erb +12 -0
- data/app/views/dash_creator/user/_section_card.html.erb +17 -0
- data/app/views/dash_creator/user/creator.html.erb +11 -0
- data/app/views/dash_creator/user/dashboard.html.erb +10 -0
- data/config/initializers/dash_creator.rb +0 -0
- data/config/routes.rb +30 -0
- data/lib/dash_creator.rb +87 -0
- data/lib/dash_creator/acts_as_dash_creator.rb +16 -0
- data/lib/dash_creator/acts_as_dashboard_object.rb +19 -0
- data/lib/dash_creator/engine.rb +11 -0
- data/lib/dash_creator/version.rb +3 -0
- data/lib/generators/dash_creator/install/install_generator.rb +70 -0
- data/lib/generators/dash_creator/install/templates/_chart.html.erb +9 -0
- data/lib/generators/dash_creator/install/templates/_section_card.html.erb +17 -0
- data/lib/generators/dash_creator/install/templates/_stat.html.erb +24 -0
- data/lib/generators/dash_creator/install/templates/_table.html.erb +16 -0
- data/lib/generators/dash_creator/install/templates/add_indexes_to_dash_creator_tables.rb +15 -0
- data/lib/generators/dash_creator/install/templates/create_dash_creator_charts.rb +25 -0
- data/lib/generators/dash_creator/install/templates/create_dash_creator_dashboard_objects.rb +36 -0
- data/lib/generators/dash_creator/install/templates/create_dash_creator_dashboards.rb +28 -0
- data/lib/generators/dash_creator/install/templates/create_dash_creator_filters.rb +22 -0
- data/lib/generators/dash_creator/install/templates/dashboard.html.erb +10 -0
- data/lib/generators/dash_creator/install/templates/initializer.rb +48 -0
- data/lib/tasks/dash_creator_tasks.rake +4 -0
- metadata +196 -0
@@ -0,0 +1,74 @@
|
|
1
|
+
<div class="modal fade" id="save_chart_modal" tabindex="-1" role="dialog" aria-labelledby="Save Chart Modal" aria-hidden="true">
|
2
|
+
<div class="modal-dialog" role="document">
|
3
|
+
<div class="modal-content">
|
4
|
+
<div class="modal-header">
|
5
|
+
<h4 class="modal-title"><%=t :save_chart%></h4>
|
6
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
7
|
+
<span aria-hidden="true">×</span>
|
8
|
+
</button>
|
9
|
+
</div>
|
10
|
+
<div class="modal-body">
|
11
|
+
<div class="row">
|
12
|
+
<div class="col-sm-12">
|
13
|
+
<div class="form-group">
|
14
|
+
<label><%=t :name%></label>
|
15
|
+
<input type="text" name="chart-name" class="form-control">
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
<div class="modal-footer">
|
21
|
+
<button type="submit" class="pull-right btn btn-success" id="save-chart-btn" data-dismiss="modal">Submit</button>
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
<!-- /.modal-content -->
|
25
|
+
</div>
|
26
|
+
<!-- /.modal-dialog -->
|
27
|
+
</div>
|
28
|
+
<!-- /.modal -->
|
29
|
+
|
30
|
+
<div class="modal fade" id="delete_charts_modal" tabindex="-1" role="dialog" aria-labelledby="Delete Charts Modal" aria-hidden="true">
|
31
|
+
<div class="modal-dialog" role="document">
|
32
|
+
<div class="modal-content">
|
33
|
+
<div class="modal-header">
|
34
|
+
<h4 class="modal-title"><%=t :delete_charts%></h4>
|
35
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
36
|
+
<span aria-hidden="true">×</span>
|
37
|
+
</button>
|
38
|
+
</div>
|
39
|
+
<div class="modal-body">
|
40
|
+
<div class="row" id="charts-checkbox-list">
|
41
|
+
</div>
|
42
|
+
</div>
|
43
|
+
<div class="modal-footer">
|
44
|
+
<button type="submit" class="pull-right btn btn-success" id="delete-charts-btn" data-dismiss="modal">Submit</button>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
<!-- /.modal-content -->
|
48
|
+
</div>
|
49
|
+
<!-- /.modal-dialog -->
|
50
|
+
</div>
|
51
|
+
<!-- /.modal -->
|
52
|
+
|
53
|
+
<div class="modal fade" id="edit_chart_modal" tabindex="-1" role="dialog" aria-labelledby="Edit Chart Modal" aria-hidden="true">
|
54
|
+
<div class="modal-dialog" role="document">
|
55
|
+
<div class="modal-content">
|
56
|
+
<div class="modal-header">
|
57
|
+
<h4 class="modal-title"><%=t :edit_chart%></h4>
|
58
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
59
|
+
<span aria-hidden="true">×</span>
|
60
|
+
</button>
|
61
|
+
</div>
|
62
|
+
<div class="modal-body">
|
63
|
+
<h3 id="edit-message"></h3>
|
64
|
+
</div>
|
65
|
+
<div class="modal-footer">
|
66
|
+
<button type="submit" class="pull-left btn btn-success" id="confirm-edit-chart-btn" data-dismiss="modal">Confirm</button>
|
67
|
+
<button type="submit" class="pull-right btn btn-danger" id="cancel-edit-chart-btn" data-dismiss="modal">Cancel</button>
|
68
|
+
</div>
|
69
|
+
</div>
|
70
|
+
<!-- /.modal-content -->
|
71
|
+
</div>
|
72
|
+
<!-- /.modal-dialog -->
|
73
|
+
</div>
|
74
|
+
<!-- /.modal -->
|
@@ -0,0 +1,45 @@
|
|
1
|
+
<button class="pull-right btn" id="chart-refresh-btn">Refresh</button>
|
2
|
+
<span class="pull-right" id="last-updated"></span>
|
3
|
+
<canvas id="chart-<%= id %>" style="display: block; align-items: stretch;"></canvas>
|
4
|
+
|
5
|
+
<script>
|
6
|
+
var options = <%= raw options.to_json %>;
|
7
|
+
|
8
|
+
<% if type == 'mixed' %>
|
9
|
+
var labeling_step = options.scales.xAxes[0].ticks["callback"];
|
10
|
+
if (typeof labeling_step === "undefined")
|
11
|
+
labeling_step = 1;
|
12
|
+
options.scales.xAxes[0].ticks["callback"] = function(dataLabel, index) {
|
13
|
+
return index % labeling_step === 0 ? dataLabel : null;
|
14
|
+
};
|
15
|
+
|
16
|
+
<% else %>
|
17
|
+
options.tooltips["callbacks"] = {
|
18
|
+
label: function(tooltipItem, data) {
|
19
|
+
var dataset = data.datasets[tooltipItem.datasetIndex];
|
20
|
+
|
21
|
+
var total = dataset.data.reduce(function(previousValue, currentValue, currentIndex, array) {
|
22
|
+
return previousValue + currentValue;
|
23
|
+
});
|
24
|
+
|
25
|
+
var currentValue = dataset.data[tooltipItem.index];
|
26
|
+
|
27
|
+
var percentage = Math.floor(((currentValue/total) * 100) + 0.5);
|
28
|
+
|
29
|
+
var label = " " + currentValue + " - " + percentage + "%";
|
30
|
+
|
31
|
+
return label;
|
32
|
+
}
|
33
|
+
};
|
34
|
+
|
35
|
+
<% end %>
|
36
|
+
|
37
|
+
var canvas = document.getElementById("chart-<%= id %>");
|
38
|
+
canvas.width = "80%"; canvas.height = "80%";
|
39
|
+
var ctx = canvas.getContext("2d");
|
40
|
+
chart_<%= id.to_s.underscore %> = new Chart(ctx, {
|
41
|
+
type: "<%= type == 'mixed' ? 'bar' : type %>",
|
42
|
+
data: <%= raw data.to_json %>,
|
43
|
+
options: options
|
44
|
+
});
|
45
|
+
</script>
|
@@ -0,0 +1,53 @@
|
|
1
|
+
var in_creator = $('#chart-creator').length !== 0;
|
2
|
+
|
3
|
+
// Rebuild all chart creator fields if in creator
|
4
|
+
if (in_creator) {
|
5
|
+
var chart_creator = $('#chart-creator').data('chartCreator');
|
6
|
+
<% unless filters_data.nil? %>
|
7
|
+
chart_creator.filter_creator.data('filterCreator').buildFilters(<%= raw filters_data.to_json %>);
|
8
|
+
<% end %>
|
9
|
+
chart_creator.buildChartFields(<%= raw chart_data.to_json %>);
|
10
|
+
}
|
11
|
+
|
12
|
+
<% # Get main chart type %>
|
13
|
+
<% main_type = chart_data['types'][0] %>
|
14
|
+
<% main_type = 'mixed' if main_type == 'bar' || main_type == 'line' %>
|
15
|
+
|
16
|
+
<% options = chart_data['options'] == '' ? {} : chart_data['options'] %>
|
17
|
+
|
18
|
+
<% # Get data from redis if exists or query it %>
|
19
|
+
<% processed_data = chart_processed_data_from_redis(chart_data) %>
|
20
|
+
|
21
|
+
// Build chart script & append it to chart wrapper div
|
22
|
+
<% function_name = "plot_#{main_type}_chart" %>
|
23
|
+
var chart_script_string = '<%= raw public_send(function_name, id, processed_data, options).gsub("\n", '') %>';
|
24
|
+
|
25
|
+
var chart_wrapper_div = in_creator ? $('.chart-wrapper') : $('.chart-wrapper[data-id="<%= id %>"]');
|
26
|
+
|
27
|
+
chart_wrapper_div.children().remove();
|
28
|
+
$(chart_script_string).appendTo(chart_wrapper_div);
|
29
|
+
|
30
|
+
// Refresh option
|
31
|
+
chart_wrapper_div
|
32
|
+
.off('click') // Remove previous bound refresh event
|
33
|
+
.on('click', '#chart-refresh-btn', refreshChart); // Bind refresh event
|
34
|
+
|
35
|
+
function refreshChart() {
|
36
|
+
if (in_creator) {
|
37
|
+
var chart_data = chart_creator.getChartData();
|
38
|
+
chart_data['refresh'] = true;
|
39
|
+
sendChartDataCreate(chart_data);
|
40
|
+
}
|
41
|
+
else {
|
42
|
+
var params = {
|
43
|
+
chart_id: '<%= id %>',
|
44
|
+
refresh: 'true'
|
45
|
+
};
|
46
|
+
$.post("<%= get_chart_path %>", params);
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
chart_wrapper_div.find('span#last-updated').text('Last updated: ' + "<%= processed_data['last_updated'] %>");
|
51
|
+
|
52
|
+
|
53
|
+
<% # DashCreator.redis_store_variable.keys.each {|k| $redis.del(k)} # To delete what is stored in redis %>
|
@@ -0,0 +1,182 @@
|
|
1
|
+
<div class="row">
|
2
|
+
<div class="col-md-12">
|
3
|
+
<div class="card">
|
4
|
+
<div class="card-header">
|
5
|
+
Crazy Dashboard Creator
|
6
|
+
</div>
|
7
|
+
<div class="card-block" id="dashboard-creator" style="margin:20px 50px;">
|
8
|
+
|
9
|
+
</div>
|
10
|
+
<div class="card-footer">
|
11
|
+
<a href="#" data-toggle="modal" data-target="#delete_dashboards_modal" class="pull-right btn btn-sm btn-danger" id="dashboard-unsave-btn"><%=t :delete_dashboards%></a>
|
12
|
+
<a href="#" data-toggle="modal" data-target="#edit_dashboard_modal" class="pull-right btn btn-sm btn-primary" id="dashboard-edit-btn"><%=t :modify_dashboard%></a>
|
13
|
+
<a href="#" data-toggle="modal" data-target="#save_dashboard_modal" class="pull-right btn btn-sm btn-success"><%=t :save_new_dashboard%></a>
|
14
|
+
<%= select_tag 'dashboard-select', options_for_select([]), prompt: 'Choose a dashboard', id: '', class: 'form-control pull-right', style: 'width: 20%; margin-right: 10%;' %>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
<!--/.card-->
|
18
|
+
</div>
|
19
|
+
|
20
|
+
<!--<div class="col-md-12">-->
|
21
|
+
<!--<div class="card" id="crazy-dashboard-creator-objects">-->
|
22
|
+
<!--<div class="card-header">-->
|
23
|
+
<!--Dashboard Objects-->
|
24
|
+
<!--</div>-->
|
25
|
+
<!--<div class="card-block" style="margin:20px 50px;">-->
|
26
|
+
<!--<div class="row">-->
|
27
|
+
<!--<div class="col-md-12 px-2">-->
|
28
|
+
<!--<table>-->
|
29
|
+
<!--<thead>-->
|
30
|
+
<!--<tr>-->
|
31
|
+
<!--<th><%=t :name%></th>-->
|
32
|
+
<!--<th><%=t :code%></th>-->
|
33
|
+
<!--<th><%=t :information%></th>-->
|
34
|
+
<!--<th><%=t :options%></th>-->
|
35
|
+
<!--<th><%=t :edit%></th>-->
|
36
|
+
<!--<th><%=t :delete%></th>-->
|
37
|
+
<!--</thead>-->
|
38
|
+
<!--<tbody>-->
|
39
|
+
<!---->
|
40
|
+
<!--</tbody>-->
|
41
|
+
<!--</table>-->
|
42
|
+
<!--</div>-->
|
43
|
+
<!--</div>-->
|
44
|
+
<!--</div>-->
|
45
|
+
<!--</div>-->
|
46
|
+
<!--</div>-->
|
47
|
+
<!--<!–/.card–>-->
|
48
|
+
<!--</div>-->
|
49
|
+
</div>
|
50
|
+
|
51
|
+
<script>
|
52
|
+
var dashboards = <%= raw @dashboards %>;
|
53
|
+
|
54
|
+
<% objects_data = {} %>
|
55
|
+
<% @dashboard_objects.each do |o| %>
|
56
|
+
<% objects_data[o.code] = {name: o.name, related_model: o.related_model, objects: @model_objects[o.code] } %>
|
57
|
+
<% end %>
|
58
|
+
|
59
|
+
$('#dashboard-creator').dashboardCreator({
|
60
|
+
objects_data: <%= raw objects_data.to_json %>
|
61
|
+
});
|
62
|
+
var dashboard_creator = $('#dashboard-creator').data('dashboardCreator');
|
63
|
+
|
64
|
+
|
65
|
+
// --------------- Dashboard model handling ---------------
|
66
|
+
|
67
|
+
var dashboard_id = '';
|
68
|
+
|
69
|
+
// Save dashboard
|
70
|
+
$(document).on('click', '#save-dashboard-btn', function() {
|
71
|
+
var params = {options: dashboard_creator.getDashboardData()};
|
72
|
+
|
73
|
+
// Get the dashboard name
|
74
|
+
params['dashboard_name'] = $('.modal#save_dashboard_modal').find('[name="dashboard-name"]').val();
|
75
|
+
|
76
|
+
$.post("<%= save_dashboard_path %>", params, function(data) {
|
77
|
+
// Add to dashboards list
|
78
|
+
dashboard_id = data['dashboard_id'];
|
79
|
+
dashboards.push([params['dashboard_name'], dashboard_id]);
|
80
|
+
});
|
81
|
+
});
|
82
|
+
|
83
|
+
// Prepare modal display for edit
|
84
|
+
$('#dashboard-edit-btn').click(function() {
|
85
|
+
var confirm_edit_dashboard_btn = $('#confirm-edit-dashboard-btn');
|
86
|
+
|
87
|
+
var message_div = $('.modal#edit_dashboard_modal .modal-body #edit-message');
|
88
|
+
message_div.empty();
|
89
|
+
confirm_edit_dashboard_btn.prop('disabled', false);
|
90
|
+
|
91
|
+
var message;
|
92
|
+
if (dashboard_id !== '') {
|
93
|
+
message = 'Are you sure you want to edit dashboard ';
|
94
|
+
for (var i = 0; i < dashboards.length; i++) {
|
95
|
+
var dashboard_name = dashboards[i][0], id = dashboards[i][1];
|
96
|
+
if (dashboard_id === id) {
|
97
|
+
message += dashboard_name;
|
98
|
+
break;
|
99
|
+
}
|
100
|
+
}
|
101
|
+
message += ' ?'
|
102
|
+
}
|
103
|
+
else {
|
104
|
+
message = 'No dashboard to edit.';
|
105
|
+
confirm_edit_dashboard_btn.prop('disabled', true);
|
106
|
+
}
|
107
|
+
message_div.text(message);
|
108
|
+
});
|
109
|
+
|
110
|
+
// Prepare and send new dashboard data on dashboard edit confirm
|
111
|
+
$(document).on('click', '#confirm-edit-dashboard-btn', function() {
|
112
|
+
var params = {options: dashboard_creator.getDashboardData()};
|
113
|
+
params['dashboard_id'] = dashboard_id;
|
114
|
+
|
115
|
+
$.post("<%= edit_dashboard_path %>", params);
|
116
|
+
});
|
117
|
+
|
118
|
+
// Prepare list of dashboards for delete dashboards modal
|
119
|
+
$('#dashboard-unsave-btn').click(function() {
|
120
|
+
var dashboards_checkbox_list = $('#dashboards-checkbox-list');
|
121
|
+
// First empty the checkbox list
|
122
|
+
dashboards_checkbox_list.children().remove();
|
123
|
+
|
124
|
+
// Append dashboards list to div in modal
|
125
|
+
var checkbox_string_start = '<div class="col-sm-12"><div class="form-group">'
|
126
|
+
+ '<input type="checkbox" class="form-control" name="dashboard" value="';
|
127
|
+
for (var i = 0; i < dashboards.length; i++) {
|
128
|
+
var dashboard_name = dashboards[i][0], id = dashboards[i][1];
|
129
|
+
var dashboard_string = checkbox_string_start + id + '"><label>' + dashboard_name + '</label><br>';
|
130
|
+
$(dashboard_string).appendTo(dashboards_checkbox_list);
|
131
|
+
}
|
132
|
+
$('</div></div>').appendTo(dashboards_checkbox_list);
|
133
|
+
});
|
134
|
+
|
135
|
+
// Delete dashboards configs
|
136
|
+
$(document).on('click', '#delete-dashboards-btn', function() {
|
137
|
+
// Get the dashboards ids
|
138
|
+
var dashboards_ids = [];
|
139
|
+
$(this).closest('.modal').find('[name="dashboard"]:checked').each(function() {
|
140
|
+
dashboards_ids.push($(this).attr("value"));
|
141
|
+
});
|
142
|
+
|
143
|
+
var params = {dashboards_ids: dashboards_ids};
|
144
|
+
|
145
|
+
$.post("<%= delete_dashboards_path %>", params, function() {
|
146
|
+
// Remove from dashboards list
|
147
|
+
for (var i = 0; i < dashboards.length; i++) {
|
148
|
+
var id = dashboards[i][1];
|
149
|
+
if ($.inArray(id, dashboards_ids) !== -1) {
|
150
|
+
dashboards.splice(i, 1);
|
151
|
+
i--;
|
152
|
+
}
|
153
|
+
}
|
154
|
+
});
|
155
|
+
});
|
156
|
+
|
157
|
+
|
158
|
+
$('[name="dashboard-select"]')
|
159
|
+
.focusin(displaySavedDashboards)
|
160
|
+
.change(displayDashboard);
|
161
|
+
|
162
|
+
// Display saved configs
|
163
|
+
function displaySavedDashboards() {
|
164
|
+
$(this).children('option').not('[value=""]').remove();
|
165
|
+
for (var i = 0; i < dashboards.length; i++) {
|
166
|
+
var dashboard_name = dashboards[i][0], id = dashboards[i][1];
|
167
|
+
$('<option value="' + id + '">' + dashboard_name + '</option>').appendTo($('[name="dashboard-select"]'));
|
168
|
+
}
|
169
|
+
}
|
170
|
+
|
171
|
+
// Display chosen config (rebuild)
|
172
|
+
function displayDashboard() {
|
173
|
+
if ($(this).val() === '') { return false; }
|
174
|
+
|
175
|
+
dashboard_id = $(this).val();
|
176
|
+
var params = {dashboard_id: dashboard_id};
|
177
|
+
|
178
|
+
$.post("<%= get_dashboard_path %>", params, function(data) {
|
179
|
+
dashboard_creator.buildDashboard(data);
|
180
|
+
});
|
181
|
+
}
|
182
|
+
</script>
|
@@ -0,0 +1,74 @@
|
|
1
|
+
<div class="modal fade" id="save_dashboard_modal" tabindex="-1" role="dialog" aria-labelledby="Save Dashboard Modal" aria-hidden="true">
|
2
|
+
<div class="modal-dialog" role="document">
|
3
|
+
<div class="modal-content">
|
4
|
+
<div class="modal-header">
|
5
|
+
<h4 class="modal-title"><%=t :save_dashboard%></h4>
|
6
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
7
|
+
<span aria-hidden="true">×</span>
|
8
|
+
</button>
|
9
|
+
</div>
|
10
|
+
<div class="modal-body">
|
11
|
+
<div class="row">
|
12
|
+
<div class="col-sm-12">
|
13
|
+
<div class="form-group">
|
14
|
+
<label><%=t :name%></label>
|
15
|
+
<input type="text" name="dashboard-name" class="form-control">
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
<div class="modal-footer">
|
21
|
+
<button type="submit" class="pull-right btn btn-success" id="save-dashboard-btn" data-dismiss="modal">Submit</button>
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
<!-- /.modal-content -->
|
25
|
+
</div>
|
26
|
+
<!-- /.modal-dialog -->
|
27
|
+
</div>
|
28
|
+
<!-- /.modal -->
|
29
|
+
|
30
|
+
<div class="modal fade" id="delete_dashboards_modal" tabindex="-1" role="dialog" aria-labelledby="Delete Dashboards Modal" aria-hidden="true">
|
31
|
+
<div class="modal-dialog" role="document">
|
32
|
+
<div class="modal-content">
|
33
|
+
<div class="modal-header">
|
34
|
+
<h4 class="modal-title"><%=t :delete_dashboards%></h4>
|
35
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
36
|
+
<span aria-hidden="true">×</span>
|
37
|
+
</button>
|
38
|
+
</div>
|
39
|
+
<div class="modal-body">
|
40
|
+
<div class="row" id="dashboards-checkbox-list">
|
41
|
+
</div>
|
42
|
+
</div>
|
43
|
+
<div class="modal-footer">
|
44
|
+
<button type="submit" class="pull-right btn btn-success" id="delete-dashboards-btn" data-dismiss="modal">Submit</button>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
<!-- /.modal-content -->
|
48
|
+
</div>
|
49
|
+
<!-- /.modal-dialog -->
|
50
|
+
</div>
|
51
|
+
<!-- /.modal -->
|
52
|
+
|
53
|
+
<div class="modal fade" id="edit_dashboard_modal" tabindex="-1" role="dialog" aria-labelledby="Edit Dashboard Modal" aria-hidden="true">
|
54
|
+
<div class="modal-dialog" role="document">
|
55
|
+
<div class="modal-content">
|
56
|
+
<div class="modal-header">
|
57
|
+
<h4 class="modal-title"><%=t :edit_dashboard%></h4>
|
58
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
59
|
+
<span aria-hidden="true">×</span>
|
60
|
+
</button>
|
61
|
+
</div>
|
62
|
+
<div class="modal-body">
|
63
|
+
<h3 id="edit-message"></h3>
|
64
|
+
</div>
|
65
|
+
<div class="modal-footer">
|
66
|
+
<button type="submit" class="pull-left btn btn-success" id="confirm-edit-dashboard-btn" data-dismiss="modal">Confirm</button>
|
67
|
+
<button type="submit" class="pull-right btn btn-danger" id="cancel-edit-dashboard-btn" data-dismiss="modal">Cancel</button>
|
68
|
+
</div>
|
69
|
+
</div>
|
70
|
+
<!-- /.modal-content -->
|
71
|
+
</div>
|
72
|
+
<!-- /.modal-dialog -->
|
73
|
+
</div>
|
74
|
+
<!-- /.modal -->
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<div class="col-md-<%= chart['size'] %> offset-md-<%= chart['offset'] %>" style="margin-bottom: 50px;">
|
2
|
+
<div class="chart-wrapper" data-id="<%= chart['id'] %>" style="height: 400px;">
|
3
|
+
<iframe class="chartjs-hidden-iframe" tabindex="-1" style="display: flex; overflow: hidden; border: 0; margin: 0; top: 0; left: 0; bottom: 0; right: 0; height: 100%; width: 100%; position: absolute; pointer-events: none; z-index: -1;"></iframe>
|
4
|
+
</div>
|
5
|
+
<script>
|
6
|
+
var params = {chart_id: '<%= chart['id'] %>'};
|
7
|
+
$.post("<%= get_chart_path %>", params);
|
8
|
+
</script>
|
9
|
+
</div>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<% filter = DashCreator::Filter.find(stat['id']) %>
|
2
|
+
|
3
|
+
<div class="col-md-<%= stat['size'] %> offset-md-<%= stat['offset'] %>" style="margin-bottom: 50px;">
|
4
|
+
<div class="stat-wrapper text-center" data-id="<%= stat['id'] %>" style="padding: 20px; background-color: #a6d5ec; border-radius: 5px;">
|
5
|
+
|
6
|
+
<h3><%= filter.name %></h3><br>
|
7
|
+
|
8
|
+
<% filter.options.keys.each do |k| %>
|
9
|
+
<strong class="filter-count" data-key="<%= k %>"></strong><br>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<div class="refresh-container" style="margin-top: 30px;">
|
13
|
+
<span id="last-updated"></span>
|
14
|
+
<button id="stat-refresh-btn">Refresh</button>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<script>
|
18
|
+
var params = {
|
19
|
+
filter_id: '<%= stat['id'] %>'
|
20
|
+
};
|
21
|
+
$.post('<%= create_stat_path %>', params);
|
22
|
+
</script>
|
23
|
+
</div>
|
24
|
+
</div>
|