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.
Files changed (96) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +170 -0
  4. data/Rakefile +36 -0
  5. data/app/assets/config/dash_creator_manifest.js +2 -0
  6. data/app/assets/javascripts/dash_creator/application.js +24 -0
  7. data/app/assets/javascripts/dash_creator/chart.js +2 -0
  8. data/app/assets/javascripts/dash_creator/dashboard.js +2 -0
  9. data/app/assets/javascripts/dash_creator/dashboard_object.js +2 -0
  10. data/app/assets/javascripts/dash_creator/filter.js +2 -0
  11. data/app/assets/javascripts/dash_creator/libs/Chart.js +12269 -0
  12. data/app/assets/javascripts/dash_creator/libs/bootstrap.js +3535 -0
  13. data/app/assets/javascripts/dash_creator/libs/chartCreator.js +1582 -0
  14. data/app/assets/javascripts/dash_creator/libs/dashboardCreator.js +531 -0
  15. data/app/assets/javascripts/dash_creator/libs/daterangepicker.js +1626 -0
  16. data/app/assets/javascripts/dash_creator/libs/filterCreator.js +733 -0
  17. data/app/assets/javascripts/dash_creator/libs/jquery-ui.js +18706 -0
  18. data/app/assets/javascripts/dash_creator/libs/jquery.minicolors.js +1108 -0
  19. data/app/assets/javascripts/dash_creator/libs/moment.js +4301 -0
  20. data/app/assets/javascripts/dash_creator/libs/tether.js +1811 -0
  21. data/app/assets/javascripts/dash_creator/user.js +2 -0
  22. data/app/assets/stylesheets/dash_creator/application.css +16 -0
  23. data/app/assets/stylesheets/dash_creator/chart.css +4 -0
  24. data/app/assets/stylesheets/dash_creator/dashboard.css +4 -0
  25. data/app/assets/stylesheets/dash_creator/dashboard_object.css +4 -0
  26. data/app/assets/stylesheets/dash_creator/filter.css +4 -0
  27. data/app/assets/stylesheets/dash_creator/fonts/FontAwesome.otf +0 -0
  28. data/app/assets/stylesheets/dash_creator/fonts/fontawesome-webfont.eot +0 -0
  29. data/app/assets/stylesheets/dash_creator/fonts/fontawesome-webfont.svg +2671 -0
  30. data/app/assets/stylesheets/dash_creator/fonts/fontawesome-webfont.ttf +0 -0
  31. data/app/assets/stylesheets/dash_creator/fonts/fontawesome-webfont.woff +0 -0
  32. data/app/assets/stylesheets/dash_creator/fonts/fontawesome-webfont.woff2 +0 -0
  33. data/app/assets/stylesheets/dash_creator/libs/font-awesome.css +2199 -0
  34. data/app/assets/stylesheets/dash_creator/libs/jquery.minicolors.css +319 -0
  35. data/app/assets/stylesheets/dash_creator/libs/jquery.minicolors.png +0 -0
  36. data/app/assets/stylesheets/dash_creator/libs/style.css +13714 -0
  37. data/app/assets/stylesheets/dash_creator/user.css +4 -0
  38. data/app/controllers/dash_creator/application_controller.rb +3 -0
  39. data/app/controllers/dash_creator/chart_controller.rb +81 -0
  40. data/app/controllers/dash_creator/dashboard_controller.rb +37 -0
  41. data/app/controllers/dash_creator/dashboard_object_controller.rb +34 -0
  42. data/app/controllers/dash_creator/filter_controller.rb +60 -0
  43. data/app/controllers/dash_creator/user_controller.rb +82 -0
  44. data/app/helpers/dash_creator/application_helper.rb +4 -0
  45. data/app/helpers/dash_creator/chart_helper.rb +829 -0
  46. data/app/helpers/dash_creator/dashboard_helper.rb +4 -0
  47. data/app/helpers/dash_creator/dashboard_object_helper.rb +4 -0
  48. data/app/helpers/dash_creator/filter_helper.rb +237 -0
  49. data/app/helpers/dash_creator/user_helper.rb +4 -0
  50. data/app/jobs/dash_creator/application_job.rb +4 -0
  51. data/app/mailers/dash_creator/application_mailer.rb +6 -0
  52. data/app/models/dash_creator/application_record.rb +5 -0
  53. data/app/models/dash_creator/chart.rb +21 -0
  54. data/app/models/dash_creator/dashboard.rb +13 -0
  55. data/app/models/dash_creator/dashboard_object.rb +7 -0
  56. data/app/models/dash_creator/filter.rb +22 -0
  57. data/app/views/dash_creator/chart/_chart_creator.html.erb +230 -0
  58. data/app/views/dash_creator/chart/_modals.html.erb +74 -0
  59. data/app/views/dash_creator/chart/_plot_chart.html.erb +45 -0
  60. data/app/views/dash_creator/chart/create_chart.js.erb +53 -0
  61. data/app/views/dash_creator/dashboard/_dashboard_creator.html.erb +182 -0
  62. data/app/views/dash_creator/dashboard/_modals.html.erb +74 -0
  63. data/app/views/dash_creator/dashboard_object/_chart.html.erb +9 -0
  64. data/app/views/dash_creator/dashboard_object/_stat.html.erb +24 -0
  65. data/app/views/dash_creator/dashboard_object/_table.html.erb +16 -0
  66. data/app/views/dash_creator/filter/_filtering_card.html.erb +132 -0
  67. data/app/views/dash_creator/filter/_modals.html.erb +51 -0
  68. data/app/views/dash_creator/filter/_result_tables.html.erb +55 -0
  69. data/app/views/dash_creator/filter/apply_filtering.js.erb +46 -0
  70. data/app/views/dash_creator/filter/create_stat.js.erb +20 -0
  71. data/app/views/dash_creator/layouts/application.html.erb +64 -0
  72. data/app/views/dash_creator/layouts/menu/_left_menu.html.erb +12 -0
  73. data/app/views/dash_creator/user/_section_card.html.erb +17 -0
  74. data/app/views/dash_creator/user/creator.html.erb +11 -0
  75. data/app/views/dash_creator/user/dashboard.html.erb +10 -0
  76. data/config/initializers/dash_creator.rb +0 -0
  77. data/config/routes.rb +30 -0
  78. data/lib/dash_creator.rb +87 -0
  79. data/lib/dash_creator/acts_as_dash_creator.rb +16 -0
  80. data/lib/dash_creator/acts_as_dashboard_object.rb +19 -0
  81. data/lib/dash_creator/engine.rb +11 -0
  82. data/lib/dash_creator/version.rb +3 -0
  83. data/lib/generators/dash_creator/install/install_generator.rb +70 -0
  84. data/lib/generators/dash_creator/install/templates/_chart.html.erb +9 -0
  85. data/lib/generators/dash_creator/install/templates/_section_card.html.erb +17 -0
  86. data/lib/generators/dash_creator/install/templates/_stat.html.erb +24 -0
  87. data/lib/generators/dash_creator/install/templates/_table.html.erb +16 -0
  88. data/lib/generators/dash_creator/install/templates/add_indexes_to_dash_creator_tables.rb +15 -0
  89. data/lib/generators/dash_creator/install/templates/create_dash_creator_charts.rb +25 -0
  90. data/lib/generators/dash_creator/install/templates/create_dash_creator_dashboard_objects.rb +36 -0
  91. data/lib/generators/dash_creator/install/templates/create_dash_creator_dashboards.rb +28 -0
  92. data/lib/generators/dash_creator/install/templates/create_dash_creator_filters.rb +22 -0
  93. data/lib/generators/dash_creator/install/templates/dashboard.html.erb +10 -0
  94. data/lib/generators/dash_creator/install/templates/initializer.rb +48 -0
  95. data/lib/tasks/dash_creator_tasks.rake +4 -0
  96. 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
+ <!--&lt;!&ndash;/.card&ndash;&gt;-->
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>