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,16 @@
|
|
1
|
+
<% filter = DashCreator::Filter.find(table['id']) %>
|
2
|
+
|
3
|
+
<div class="col-md-<%= table['size'] %> offset-md-<%= table['offset'] %>" style="margin-bottom: 50px;">
|
4
|
+
<div class="table-wrapper" data-id="<%= table['id'] %>" style="padding: 20px;">
|
5
|
+
|
6
|
+
<h3><%= filter.name + ' - Table' %></h3><br>
|
7
|
+
|
8
|
+
<script>
|
9
|
+
var params = {
|
10
|
+
filters: <%= raw filter.options.to_json %>,
|
11
|
+
id: '<%= table['id'] %>'
|
12
|
+
};
|
13
|
+
$.post('<%= filtering_result_path %>', params);
|
14
|
+
</script>
|
15
|
+
</div>
|
16
|
+
</div>
|
@@ -0,0 +1,132 @@
|
|
1
|
+
<div class="row">
|
2
|
+
<div class="col-md-12">
|
3
|
+
<div class="card">
|
4
|
+
<div class="card-header">
|
5
|
+
Filters
|
6
|
+
</div>
|
7
|
+
<div class="card-block" id="filter-creator">
|
8
|
+
</div>
|
9
|
+
<div class="card-footer">
|
10
|
+
<button type="submit" class="pull-left btn btn-success" id="apply-btn">Apply filtering</button>
|
11
|
+
<a href="#" data-toggle="modal" data-target="#delete_filters_modal" class="pull-right btn btn-sm btn-danger" id="unsave-btn"><%=t :delete_filters%></a>
|
12
|
+
<a href="#" data-toggle="modal" data-target="#save_filter_modal" class="pull-right btn btn-sm btn-success"><%=t :save_filter%></a>
|
13
|
+
<select name="filter-select" class="form-control pull-right" style="width: 20%; margin-right: 10%;">
|
14
|
+
<option value="">Choose a filter</option>
|
15
|
+
</select>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
<!--/.card-->
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
|
22
|
+
<div class="container" id="result-container">
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<script>
|
26
|
+
var filters = <%= raw @filters %>;
|
27
|
+
|
28
|
+
var models_data = <%= raw @models_data.to_json %>;
|
29
|
+
|
30
|
+
$('#filter-creator').filterCreator({
|
31
|
+
models_data: models_data,
|
32
|
+
attributes_aliases: <%= raw DashCreator.attributes_aliases.to_json %>,
|
33
|
+
displayed_model_names: <%= raw DashCreator.displayed_model_names.to_json %>,
|
34
|
+
displayed_attribute_names: <%= raw DashCreator.displayed_attribute_names.to_json %>
|
35
|
+
});
|
36
|
+
var filter_creator = $('#filter-creator').data('filterCreator');
|
37
|
+
|
38
|
+
|
39
|
+
// --------------- Send data ---------------
|
40
|
+
$('#apply-btn').click(sendFilterData);
|
41
|
+
function sendFilterData() {
|
42
|
+
var params = {
|
43
|
+
filters: filter_creator.getFiltersData(),
|
44
|
+
id: 0
|
45
|
+
};
|
46
|
+
|
47
|
+
// Post filters
|
48
|
+
$.post("<%= filtering_result_path %>", params);
|
49
|
+
}
|
50
|
+
|
51
|
+
|
52
|
+
// --------------- Save & delete saved filters ---------------
|
53
|
+
// Save a filter config
|
54
|
+
$(document).on('click', '#save-filter-btn', function() {
|
55
|
+
var params = {filters: filter_creator.getFiltersData()};
|
56
|
+
|
57
|
+
// Get the filter name
|
58
|
+
params['filter_name'] = $('.modal').find('[name="filter-name"]').val();
|
59
|
+
|
60
|
+
$.post("<%= save_filter_path %>", params, function(data) {
|
61
|
+
// Add to filters list
|
62
|
+
filters.push([params['filter_name'], data['filter_id']]);
|
63
|
+
});
|
64
|
+
});
|
65
|
+
|
66
|
+
// Prepare list of filters for delete filters modal
|
67
|
+
$('#unsave-btn').click(function() {
|
68
|
+
var filters_checkbox_list = $('#filters-checkbox-list');
|
69
|
+
// First empty the checkbox list
|
70
|
+
filters_checkbox_list.children().remove();
|
71
|
+
|
72
|
+
// Append filters list to div in modal
|
73
|
+
var checkbox_string_start = '<div class="col-sm-12"><div class="form-group">'
|
74
|
+
+ '<input type="checkbox" class="form-control" name="filter" value="';
|
75
|
+
for (var i = 0; i < filters.length; i++) {
|
76
|
+
var filter_name = filters[i][0], filter_id = filters[i][1];
|
77
|
+
var filter_string = checkbox_string_start + filter_id + '"><label>' + filter_name + '</label><br>';
|
78
|
+
$(filter_string).appendTo(filters_checkbox_list);
|
79
|
+
}
|
80
|
+
$('</div></div>').appendTo(filters_checkbox_list);
|
81
|
+
});
|
82
|
+
|
83
|
+
// Delete filters configs
|
84
|
+
$(document).on('click', '#delete-filters-btn', function() {
|
85
|
+
// Get the filters ids
|
86
|
+
var filters_ids = [];
|
87
|
+
$(this).closest('.modal').find('[type="checkbox"]:checked').each(function() {
|
88
|
+
filters_ids.push($(this).attr("value"));
|
89
|
+
});
|
90
|
+
|
91
|
+
var params = {filters_ids: filters_ids};
|
92
|
+
|
93
|
+
$.post("<%= delete_filters_path %>", params, function() {
|
94
|
+
// Remove from filters list
|
95
|
+
for (var i = 0; i < filters.length; i++) {
|
96
|
+
var filter_id = filters[i][1];
|
97
|
+
if ($.inArray(filter_id, filters_ids) !== -1) {
|
98
|
+
filters.splice(i, 1);
|
99
|
+
i--;
|
100
|
+
}
|
101
|
+
}
|
102
|
+
});
|
103
|
+
});
|
104
|
+
|
105
|
+
|
106
|
+
// --------------- Display save filter ---------------
|
107
|
+
$('[name="filter-select"]')
|
108
|
+
.focusin(displaySavedFilters)
|
109
|
+
.change(displayFilter);
|
110
|
+
|
111
|
+
// Display saved configs
|
112
|
+
function displaySavedFilters() {
|
113
|
+
$(this).children().not('[value=""]').remove();
|
114
|
+
for (var i = 0; i < filters.length; i++) {
|
115
|
+
var filter_name = filters[i][0], filter_id = filters[i][1];
|
116
|
+
$('<option value="' + filter_id + '">' + filter_name + '</option>').appendTo($('[name="filter-select"]'));
|
117
|
+
}
|
118
|
+
}
|
119
|
+
|
120
|
+
// Display chosen config (rebuild)
|
121
|
+
function displayFilter() {
|
122
|
+
var filter_id = $(this).val();
|
123
|
+
if (filter_id === '')
|
124
|
+
return false;
|
125
|
+
|
126
|
+
var params = {filter_id: filter_id};
|
127
|
+
|
128
|
+
$.post("<%= get_filter_path %>", params, function(data) {
|
129
|
+
filter_creator.buildFilters(data);
|
130
|
+
});
|
131
|
+
}
|
132
|
+
</script>
|
@@ -0,0 +1,51 @@
|
|
1
|
+
<div class="modal fade" id="save_filter_modal" tabindex="-1" role="dialog" aria-labelledby="Save Filter 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_filter%></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="filter-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-filter-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_filters_modal" tabindex="-1" role="dialog" aria-labelledby="Delete Filters 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_filters%></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="filters-checkbox-list">
|
41
|
+
</div>
|
42
|
+
</div>
|
43
|
+
<div class="modal-footer">
|
44
|
+
<button type="submit" class="pull-right btn btn-success" id="delete-filters-btn" data-dismiss="modal">Submit</button>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
<!-- /.modal-content -->
|
48
|
+
</div>
|
49
|
+
<!-- /.modal-dialog -->
|
50
|
+
</div>
|
51
|
+
<!-- /.modal -->
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<% unless mods.nil? %>
|
2
|
+
<% mods.each do |model, objects| %>
|
3
|
+
<% next if objects.nil? || objects.empty? %>
|
4
|
+
|
5
|
+
<% model_attributes = objects.first.class.columns_hash %>
|
6
|
+
|
7
|
+
<div class="row">
|
8
|
+
<div class="col-md-12">
|
9
|
+
<h3 class="text-center"><%= model %></h3><br>
|
10
|
+
|
11
|
+
<div>
|
12
|
+
<a href="" target="_blank" class="btn btn-primary csv-download" data-model="<%= model %>" data-turbolinks="false">Download CSV</a>
|
13
|
+
</div>
|
14
|
+
|
15
|
+
</div>
|
16
|
+
<div class="col-md-2">
|
17
|
+
<% model_attributes.each do |attribute, value| %>
|
18
|
+
<% if @starting_types.include?(value.type.to_s) %>
|
19
|
+
<input type="checkbox" name="<%= model %>" value="<%= attribute %>" checked="checked">
|
20
|
+
|
21
|
+
<% else %>
|
22
|
+
<input type="checkbox" name="<%= model %>" value="<%= attribute %>">
|
23
|
+
|
24
|
+
<% end %>
|
25
|
+
|
26
|
+
<label><%= attribute.humanize %></label><br>
|
27
|
+
<% end %>
|
28
|
+
</div>
|
29
|
+
<div class="offset-md-2 col-md-8">
|
30
|
+
<table class="table table-hover table-outline mb-0 hidden-sm-down" name="<%= model %>">
|
31
|
+
<thead class="thead-default">
|
32
|
+
<tr>
|
33
|
+
<% model_attributes.each do |attribute, value| %>
|
34
|
+
<th class="text-center" value="<%= attribute %>"><%= attribute.humanize %></th>
|
35
|
+
<% end %>
|
36
|
+
</tr>
|
37
|
+
</thead>
|
38
|
+
|
39
|
+
<tbody>
|
40
|
+
<% objects.each do |object| %>
|
41
|
+
<tr>
|
42
|
+
<% object.attributes.each do |key, value| %>
|
43
|
+
<td value="<%= key %>"><%= value %></td>
|
44
|
+
<% end %>
|
45
|
+
</tr>
|
46
|
+
<% end %>
|
47
|
+
</tbody>
|
48
|
+
</table>
|
49
|
+
</div>
|
50
|
+
</div>
|
51
|
+
<% if mods.length > 1 %>
|
52
|
+
<hr><br>
|
53
|
+
<% end %>
|
54
|
+
<% end %>
|
55
|
+
<% end %>
|
@@ -0,0 +1,46 @@
|
|
1
|
+
var in_creator = <%= id == 0 %>;
|
2
|
+
|
3
|
+
<% mods = filter_data(data) %>
|
4
|
+
|
5
|
+
var result_container = in_creator ? $('#result-container') : $('.table-wrapper[data-id="<%= id %>"]');
|
6
|
+
|
7
|
+
var results_string = '<%= raw "#{render 'result_tables', {mods: mods}}".gsub("\n", '') %>';
|
8
|
+
result_container.children().remove();
|
9
|
+
$(results_string).appendTo(result_container);
|
10
|
+
|
11
|
+
result_container.find('[type="checkbox"]').each(updateTableColumns);
|
12
|
+
|
13
|
+
function updateTableColumns() {
|
14
|
+
var name = $(this).attr("name"), value = $(this).attr("value");
|
15
|
+
var change_column = result_container.find('table[name="' + name + '"]').find('[value="' + value + '"]');
|
16
|
+
this.checked ? change_column.show() : change_column.hide();
|
17
|
+
}
|
18
|
+
|
19
|
+
function downloadCSV() {
|
20
|
+
<% mods.each do |model, objects| %>
|
21
|
+
|
22
|
+
var columns = [];
|
23
|
+
result_container.find('[name="<%= model %>"]:checked').each(function() {
|
24
|
+
columns.push($(this).val());
|
25
|
+
});
|
26
|
+
|
27
|
+
var ids = <%= raw objects.map{ |o| o.id } %>;
|
28
|
+
|
29
|
+
var params = {
|
30
|
+
model: "<%= model %>",
|
31
|
+
columns: columns,
|
32
|
+
ids: ids
|
33
|
+
};
|
34
|
+
var url_params = $.param(params);
|
35
|
+
|
36
|
+
var link = '<%= download_csv_path %>?' + url_params;
|
37
|
+
var download_csv_link = result_container.find('[data-model="<%= model %>"]');
|
38
|
+
download_csv_link.attr("href", link);
|
39
|
+
|
40
|
+
<% end %>
|
41
|
+
}
|
42
|
+
|
43
|
+
result_container
|
44
|
+
.off("click")
|
45
|
+
.on("click", '[type="checkbox"]', updateTableColumns)
|
46
|
+
.on("click", '.csv-download', downloadCSV);
|
@@ -0,0 +1,20 @@
|
|
1
|
+
var stat_wrapper = $('.stat-wrapper[data-id="<%= id %>"]');
|
2
|
+
|
3
|
+
<% data = filter_data_count_from_redis(filters_data.deep_stringify_keys) %>
|
4
|
+
<% last_updated = data.delete('last_updated') %>
|
5
|
+
|
6
|
+
stat_wrapper.find('#last-updated').text('<%= last_updated %>');
|
7
|
+
|
8
|
+
<% data.keys.each do |k| %>
|
9
|
+
stat_wrapper.find('.filter-count[data-key="<%= k %>"]').text('<%= data[k] %>');
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
stat_wrapper.off("click").on("click", "#stat-refresh-btn", function() {
|
13
|
+
var params = {
|
14
|
+
filter_id: '<%= id %>',
|
15
|
+
refresh: true
|
16
|
+
};
|
17
|
+
$.post("<%= create_stat_path %>", params);
|
18
|
+
});
|
19
|
+
|
20
|
+
<% # DashCreator.redis_store_variable.keys.each {|k| $redis.del(k)} # To delete what is stored in redis %>
|
@@ -0,0 +1,64 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
7
|
+
<meta name="description" content="DashCreator">
|
8
|
+
<meta name="author" content="Elie Oriol">
|
9
|
+
<meta name="keyword" content="DashCreator">
|
10
|
+
|
11
|
+
|
12
|
+
<title>DashCreator</title>
|
13
|
+
<%= csrf_meta_tags %>
|
14
|
+
<%= stylesheet_link_tag 'dash_creator/application', media: 'all', 'data-turbolinks-track': 'reload' %>
|
15
|
+
<%= javascript_include_tag 'dash_creator/application', 'data-turbolinks-track': 'reload' %>
|
16
|
+
</head>
|
17
|
+
|
18
|
+
<body class="app header-fixed">
|
19
|
+
<header class="app-header navbar">
|
20
|
+
<ul class="nav navbar-nav ml-auto">
|
21
|
+
<li class="nav-item">
|
22
|
+
<%= link_to 'Creator', creator_path, class: 'nav-link' %>
|
23
|
+
</li>
|
24
|
+
<li style='width:20px;'></li>
|
25
|
+
<li class="nav-item">
|
26
|
+
<%= link_to (t :app_home), main_app.root_path, class: 'nav-link' %>
|
27
|
+
</li>
|
28
|
+
<li style='width:50px;'></li>
|
29
|
+
</ul>
|
30
|
+
</header>
|
31
|
+
|
32
|
+
<div class="app-body">
|
33
|
+
<%= render 'dash_creator/layouts/menu/left_menu' %>
|
34
|
+
<!-- Main content -->
|
35
|
+
<main class="main">
|
36
|
+
<div class="container-fluid">
|
37
|
+
<% flash.each do |name, msg| %>
|
38
|
+
<div class="row justify-content-center">
|
39
|
+
<div class="col-md-8">
|
40
|
+
<div class="card card-inverse card-<%= name %> text-center">
|
41
|
+
<div class="card-block">
|
42
|
+
<blockquote class="card-blockquote">
|
43
|
+
<p><%= msg %></p>
|
44
|
+
</blockquote>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
</div>
|
49
|
+
<% end %>
|
50
|
+
<%= yield %>
|
51
|
+
</div>
|
52
|
+
</main>
|
53
|
+
|
54
|
+
</div>
|
55
|
+
</div>
|
56
|
+
<footer class="app-footer">
|
57
|
+
<span class="float-right">
|
58
|
+
DashCreator
|
59
|
+
</span>
|
60
|
+
</footer>
|
61
|
+
|
62
|
+
|
63
|
+
</body>
|
64
|
+
</html>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<div class="sidebar">
|
2
|
+
<nav class="sidebar-nav">
|
3
|
+
<ul class="nav">
|
4
|
+
<li class="nav-title">Dashboards</li>
|
5
|
+
<% @dashboards.each do |d| %>
|
6
|
+
<li class="nav-item">
|
7
|
+
<%= link_to d[0], dashboard_path(d[1]), class: 'nav-link' %>
|
8
|
+
</li>
|
9
|
+
<% end %>
|
10
|
+
</ul>
|
11
|
+
</nav>
|
12
|
+
</div>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<div class="col-md-<%= section['size'] %> offset-md-<%= section['offset'] %>">
|
2
|
+
<div class="card">
|
3
|
+
<div class="card-header">
|
4
|
+
<%= section['name'] %>
|
5
|
+
</div>
|
6
|
+
<div class="card-block">
|
7
|
+
<div class="row">
|
8
|
+
<% unless section['objects'].nil? %>
|
9
|
+
<% section['objects'].each do |index, object| %>
|
10
|
+
<%= render 'dash_creator/dashboard_object/' + object['type'], {"#{object['type']}": object} %>
|
11
|
+
<% end %>
|
12
|
+
<% end %>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
<!--/.card-->
|
17
|
+
</div>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<div class="animated fadeIn" style="margin: 50px 30px 0px 30px;">
|
2
|
+
<h1 class="text-center">Dash Creator</h1>
|
3
|
+
|
4
|
+
<%= render 'dash_creator/filter/filtering_card' %>
|
5
|
+
<%= render 'dash_creator/chart/chart_creator' %>
|
6
|
+
<%= render 'dash_creator/dashboard/dashboard_creator' %>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<%= render 'dash_creator/filter/modals' %>
|
10
|
+
<%= render 'dash_creator/chart/modals' %>
|
11
|
+
<%= render 'dash_creator/dashboard/modals' %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<div class="animated fadeIn" style="margin: 50px 20px 0px 20px;">
|
2
|
+
<h1 class="text-center"><%= @dashboard.name %></h1>
|
3
|
+
<div class="row" style="margin-top: 20px;">
|
4
|
+
<% unless @dashboard.options.blank? %>
|
5
|
+
<% @dashboard.options.each do |index, section| %>
|
6
|
+
<%= render 'section_card', {section: section} %>
|
7
|
+
<% end %>
|
8
|
+
<% end %>
|
9
|
+
</div>
|
10
|
+
</div>
|