sinatra-hexacta 0.0.2 → 0.1.0

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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/lib/sinatra/extensions/antiquity.rb +34 -0
  3. data/lib/sinatra/extensions/date.rb +49 -0
  4. data/lib/sinatra/extensions/init.rb +4 -0
  5. data/lib/sinatra/extensions/notification.rb +41 -0
  6. data/lib/sinatra/handlers/errors.rb +10 -3
  7. data/lib/sinatra/handlers/init.rb +3 -1
  8. data/lib/sinatra/handlers/notifications.rb +17 -28
  9. data/lib/sinatra/handlers/params.rb +26 -0
  10. data/lib/sinatra/handlers/reports.rb +28 -1
  11. data/lib/sinatra/helpers/alerts.rb +27 -0
  12. data/lib/sinatra/helpers/cas.rb +92 -0
  13. data/lib/sinatra/helpers/charts.rb +20 -4
  14. data/lib/sinatra/helpers/init.rb +4 -0
  15. data/lib/sinatra/helpers/inputs.rb +2 -2
  16. data/lib/sinatra/helpers/libraries.rb +2 -2
  17. data/lib/sinatra/helpers/mailer.rb +74 -0
  18. data/lib/sinatra/helpers/reports.rb +27 -0
  19. data/lib/sinatra/helpers/schedule.rb +68 -0
  20. data/lib/sinatra/helpers/subscriptions.rb +1 -1
  21. data/lib/sinatra/hexacta.rb +13 -5
  22. data/lib/sinatra/public/css/app.min.1.css +130 -12
  23. data/lib/sinatra/public/js/app.js +49 -42
  24. data/lib/sinatra/public/vendors/chartist/chartist-plugin-legend.js +237 -0
  25. data/lib/sinatra/views/alerts/empty.slim +7 -0
  26. data/lib/sinatra/views/alerts/error.slim +7 -0
  27. data/lib/sinatra/views/alerts/info.slim +7 -0
  28. data/lib/sinatra/views/alerts/warning.slim +7 -0
  29. data/lib/sinatra/views/charts/bar.slim +56 -0
  30. data/lib/sinatra/views/charts/gauge.slim +30 -0
  31. data/lib/sinatra/views/charts/{simple_line.slim → line.slim} +7 -8
  32. data/lib/sinatra/views/charts/pie.slim +34 -0
  33. data/lib/sinatra/views/charts/stacked_bar.slim +36 -0
  34. data/lib/sinatra/views/inputs/multiple_select.slim +4 -0
  35. data/lib/sinatra/views/inputs/select.slim +3 -0
  36. data/lib/sinatra/views/libraries/include_js_after.slim +0 -24
  37. data/lib/sinatra/views/libraries/include_js_before.slim +1 -0
  38. data/lib/sinatra/views/notifications.slim +37 -31
  39. data/lib/sinatra/views/notifications/form.slim +4 -4
  40. data/lib/sinatra/views/notifications/new.slim +4 -4
  41. data/lib/sinatra/views/notifications/widget.slim +9 -5
  42. data/lib/sinatra/views/reports/pick_date.slim +14 -0
  43. data/lib/sinatra/views/reports/pick_dates.slim +16 -0
  44. data/lib/sinatra/views/reports/pick_month.slim +14 -0
  45. data/lib/sinatra/views/reports/pick_year.slim +14 -0
  46. metadata +26 -3
@@ -0,0 +1,30 @@
1
+ .ct-chart id="#{id}"
2
+
3
+ .table-responsive.chart-table
4
+ table.table.table-striped
5
+ tbody
6
+ tr
7
+ th Serie
8
+ -for label in labels
9
+ th #{label}
10
+ -for serie in series
11
+ tr
12
+ th #{names[series.index(serie)]}
13
+ -for element in serie
14
+ td #{element}
15
+
16
+
17
+ javascript:
18
+ var labels = #{{labels}};
19
+ var series = #{{series}};
20
+
21
+ new Chartist.Pie('.ct-chart', {
22
+ series: series
23
+ }, {
24
+ donut: true,
25
+ donutWidth: 60,
26
+ donutSolid: true,
27
+ startAngle: 270,
28
+ total: 200,
29
+ showLabel: true
30
+ });
@@ -1,4 +1,4 @@
1
- .ct-chart id="#{id}"
1
+ .ct-chart.line-chart id="#{id}"
2
2
 
3
3
  .table-responsive.chart-table
4
4
  table.table.table-striped
@@ -26,11 +26,10 @@ javascript:
26
26
  right: 40
27
27
  },
28
28
  height: '300px',
29
- showLabel: true
29
+ plugins: [
30
+ Chartist.plugins.legend({
31
+ legendNames: #{{names}}
32
+ })
33
+ ]
30
34
  }
31
- );
32
-
33
- css:
34
- .chart-table table {
35
- font-size: 11px;
36
- }
35
+ );
@@ -0,0 +1,34 @@
1
+ .ct-chart.pie id="#{id}"
2
+
3
+ .table-responsive.chart-table
4
+ table.table.table-striped
5
+ tbody
6
+ tr
7
+ -for label in labels
8
+ th #{label}
9
+ tr
10
+ -for element in serie
11
+ td #{element}
12
+
13
+ javascript:
14
+ var labels = #{{labels}};
15
+ var serie = #{{serie}};
16
+
17
+ new Chartist.Pie("##{id}", {
18
+ labels: labels,
19
+ series: serie
20
+ }, {
21
+ fullWidth: true,
22
+ showLabel: false,
23
+ height: '300px',
24
+ plugins: [
25
+ Chartist.plugins.legend()
26
+ ]
27
+ }
28
+ );
29
+
30
+ css:
31
+ .pie .ct-legend.ct-legend-inside {
32
+ position: absolute;
33
+ top: 60px;
34
+ }
@@ -0,0 +1,36 @@
1
+ .ct-chart id="#{id}"
2
+
3
+ .table-responsive.chart-table
4
+ table.table.table-striped
5
+ tbody
6
+ tr
7
+ th Serie
8
+ -for label in labels
9
+ th #{label}
10
+ -for serie in series
11
+ tr
12
+ th #{names[series.index(serie)]}
13
+ -for element in serie
14
+ td #{element}
15
+
16
+ javascript:
17
+ var labels = #{{labels}};
18
+ var series = #{{series}};
19
+
20
+ new Chartist.Bar("##{id}", {
21
+ labels: labels,
22
+ series: series
23
+ }, {
24
+ stackBars: true,
25
+ axisY: {
26
+ labelInterpolationFnc: function(value) {
27
+ return value;
28
+ }
29
+ }
30
+ }).on('draw', function(data) {
31
+ if(data.type === 'bar') {
32
+ data.element.attr({
33
+ style: 'stroke-width: 30px'
34
+ });
35
+ }
36
+ });
@@ -4,8 +4,12 @@
4
4
  - id = "#{name}_#{rand(1000)}"
5
5
  - unless defined? placeholder
6
6
  - placeholder = "Selecciona..."
7
+
7
8
  - unless defined? selected_elements
8
9
  - selected_elements = []
10
+ - if selected_elements.nil?
11
+ - selected_elements = []
12
+ - selected_elements = selected_elements.collect { |element| element.to_s }
9
13
 
10
14
  -if required
11
15
  .form-group.has-success
@@ -4,6 +4,9 @@
4
4
  - id = "#{name}_#{rand(1000)}"
5
5
  - unless defined? placeholder
6
6
  - placeholder = "Selecciona..."
7
+ - unless defined? chosen
8
+ - chosen = nil
9
+
7
10
 
8
11
  -if required
9
12
  .form-group.has-success
@@ -27,27 +27,3 @@ script src="/sinatra-hexacta/vendors/bootstrap-validator/validator.js"
27
27
 
28
28
  /check
29
29
  /script src="/vendors/sparklines/jquery.sparkline.min.js"
30
-
31
- javascript:
32
- $(function() { //shorthand document.ready function
33
- $('form').on('submit', function(e) { //use on if jQuery 1.7+
34
- $(this).find(':input[required]').each(function() {
35
- if ($(this).val() == "" || $(this).val() == null) {
36
- $(this).parent().removeClass("success");
37
- $(this).parent().addClass("error");
38
- } else {
39
- $(this).parent().removeClass("error");
40
- $(this).parent().addClass("success");
41
- }
42
- })
43
- });
44
- $('.chosen').on('change', function(change, deselected) { //selected OR deselected
45
- if ($(this).val() == "" || $(this).val() == null) {
46
- $(this).parent().removeClass("success");
47
- $(this).parent().addClass("error");
48
- } else {
49
- $(this).parent().removeClass("error");
50
- $(this).parent().addClass("success");
51
- }
52
- });
53
- });
@@ -3,5 +3,6 @@ script src="/sinatra-hexacta/vendors/bootstrap/bootstrap.min.js"
3
3
  script src="/sinatra-hexacta/vendors/typeahead.js/handlebars.js"
4
4
  script src="/sinatra-hexacta/vendors/typeahead.js/typeahead.bundle.min.js"
5
5
  script src="/sinatra-hexacta/vendors/chartist/chartist.min.js"
6
+ script src="/sinatra-hexacta/vendors/chartist/chartist-plugin-legend.js"
6
7
 
7
8
  script src="/sinatra-hexacta/js/app.js?ver=#{settings.version}" type='text/javascript'
@@ -1,39 +1,45 @@
1
- -pages = (total.to_f / filters["limit"].to_f).ceil
1
+ -pages = (total.to_f / filters[:limit].to_f).ceil
2
2
  .block-header
3
3
  h2
4
4
  | Notificaciones
5
5
  .pull-right #{total} notificaciones en #{pages} páginas
6
6
 
7
- .row
8
- .col-xs-3
9
- == slim "sinatra-hexacta/notifications/form".to_sym, locals: { :notifications => notifications, :total => total, :filters => filters, :query => query }
10
- .col-xs-9
11
- .card
12
- .listview
13
- .lv-body
14
- -for notification in notifications
15
- .lv-item style="padding:10px 15px;border-bottom:1px solid #eee;#{notification.pending?? 'background-color: #ECF9FF;' : ''}"
16
- .media
17
- .pull-left.text-center.p-r-15
18
- img.lv-img-sm alt="" src="#{Configuration::USER_PHOTO_URL}#{notification.creator.hxt_id}" title="#{notification.creator.full_name}"
19
- input type="checkbox" name="notifications[]" value="#{notification.id}" style="position: absolute;left: 5px;bottom: 5px;"
20
- .media-body
21
- small.lv-small
22
- -if notification.label == 'error'
23
- .btn.btn-link.bgm-red.btn-xs style="font-size:6pt" #{notification.label}
24
- -else
25
- .btn.btn-link.bgm-blue.btn-xs style="font-size:6pt" #{notification.label}
26
- .di-block.m-l-5 #{notification.creation_date.display}
27
- .lv-title #{notification.title}
28
- small.lv-small style="white-space: normal;" #{notification.message.truncate(300)}
29
- .pull-right
30
- ul.lv-actions.actions
31
- li
32
- a role="button" title="Borrar" onclick="rm_object('notifications','#{notification.id}')"
33
- i.zmdi.zmdi-delete
34
- li
35
- a role="button" onclick="#{notification.pending?? "read_notify(#{notification.id},'#{notification.link}');this.onclick=''" : ''}" href="#{notification.pending?? '#' : notification.link}"
36
- i.zmdi.zmdi-open-in-new
7
+ -if notifications.empty?
8
+ == empty_alert({ :title => "No tienes notificaciones", :message => "Cuando recibas notificaciones podrás verlas en esta pantalla."})
9
+ -else
10
+ .row
11
+ .col-xs-3
12
+ == slim "sinatra-hexacta/notifications/form".to_sym, locals: { :notifications => notifications, :total => total, :filters => filters, :query => query }
13
+ .col-xs-9
14
+ .m-b-5
15
+ a.btn.bgm-blue.m-r-5 role="button" onclick="$('input[type=checkbox]').prop('checked', false);$('input[type=checkbox]').click();"Seleccionar todos
16
+ a.btn.btn-default.m-r-5 role="button" onclick="$('input[type=checkbox]').prop('checked', true);$('input[type=checkbox]').click();" Deseleccionar todos
17
+ .card
18
+ .listview
19
+ .lv-body
20
+ -for notification in notifications
21
+ .lv-item style="padding:10px 15px;border-bottom:1px solid #eee;#{notification.pending?? 'background-color: #ECF9FF;' : ''}"
22
+ .media
23
+ .pull-left.text-center.p-r-15
24
+ img.lv-img-sm alt="" src="#{Configuration::USER_PHOTO_URL}#{notification.creator.hxt_id}" title="#{notification.creator.full_name}"
25
+ input type="checkbox" name="notifications[]" value="#{notification.id}" style="position: absolute;left: 5px;bottom: 5px;"
26
+ .media-body
27
+ small.lv-small
28
+ -if notification.label == 'error'
29
+ .btn.btn-link.bgm-red.btn-xs style="font-size:6pt" #{notification.label}
30
+ -else
31
+ .btn.btn-link.bgm-blue.btn-xs style="font-size:6pt" #{notification.label}
32
+ .di-block.m-l-5 #{notification.creation_date.display}
33
+ .lv-title #{notification.title}
34
+ small.lv-small style="white-space: normal;" #{notification.message.truncate(300)}
35
+ .pull-right
36
+ ul.lv-actions.actions
37
+ li
38
+ a role="button" title="Borrar" onclick="rm_object('notifications','#{notification.id}')"
39
+ i.zmdi.zmdi-delete
40
+ li
41
+ a role="button" onclick="#{notification.pending?? "read_notify(#{notification.id},'#{notification.link}');this.onclick=''" : ''}" href="#{notification.pending?? '#' : notification.link}"
42
+ i.zmdi.zmdi-open-in-new
37
43
 
38
44
 
39
45
  -total_pending = Notification.pending.for(authenticated(User)).exclude_message.count
@@ -1,14 +1,14 @@
1
- -offset = filters["offset"].nil? ? 0 : filters["offset"].to_i
2
- -pages = (total.to_f / filters["limit"].to_f).ceil
1
+ -offset = filters[:offset].nil? ? 0 : filters[:offset].to_i
2
+ -pages = (total.to_f / filters[:limit].to_f).ceil
3
3
  -position = offset % 5
4
4
 
5
5
  .card#form.no-print.m-b-10
6
6
  .card-body.card-padding
7
7
  .row
8
8
  .col-sm-12
9
- == slim :'forms/multiple_select', locals: { :name => "user_id", :elements => notifications.collect { |notification| { :value => notification.creator.id, :text => notification.creator.full_name } }.uniq, :placeholder => "Empleados", :filters => filters }
9
+ == multiple_select_input({ :name => "user_id", :elements => notifications.collect { |notification| { :value => notification.creator.id, :text => notification.creator.full_name } }.uniq, :placeholder => "Empleados", :selected_elements => filters[:user_id] })
10
10
  .col-md-12
11
- == slim :'forms/multiple_select', locals: { :name => "label", :elements => Notification.labels.collect { |notification| { :value => notification.label, :text => notification.label.upcase } }, :placeholder => "Etiquetas", :filters => filters }
11
+ == multiple_select_input({ :name => "label", :elements => Notification.labels.collect { |notification| { :value => notification.label, :text => notification.label.upcase } }, :placeholder => "Etiquetas", :selected_elements => filters[:label] })
12
12
  .pm-body.clearfix
13
13
  ul.tab-nav.tn-justified role="tablist"
14
14
  li.waves-effect.active role="presentation"
@@ -1,6 +1,6 @@
1
1
  .modal.fade id="new-notification" tabindex="-1" role="dialog" aria-labelledby="newNotification"
2
2
  .modal-dialog
3
- form.modal-content action="/notification" method="POST" onsubmit="submit.disabled = true; return true;"
3
+ form.modal-content action="/notification" method="POST"
4
4
  .modal-content
5
5
  .modal-header
6
6
  h4.modal-title Enviar mensaje directo a
@@ -8,13 +8,13 @@
8
8
  input.hidden name="label" value="message"
9
9
  .row
10
10
  .col-sm-12
11
- == slim :'forms/multiple_select', locals: { :name => "user_ids", :elements => User.active.all.collect { |user| { :value => user.id, :text => user.full_name } }, :placeholder => "Empleados", :filters => {} }
11
+ == multiple_select_input({ :name => "user_ids", :elements => User.active.all.collect { |user| { :value => user.id, :text => user.full_name } }, :placeholder => "Empleados", :required => true })
12
12
  .row
13
13
  .col-xs-12
14
- == slim :'forms/input', locals: { :id => "", :type => "text", :name => "title", :value => "", :title => "Título", :required => true }
14
+ == input({ :type => "text", :name => "title", :value => "", :title => "Título", :required => true })
15
15
  .row
16
16
  .col-xs-12
17
- == slim :'forms/textarea', locals: { :name => "message", :value => nil, :title => "Comentarios", :length => 10000, :rows => 6 }
17
+ == textarea_input({ :name => "message", :value => nil, :title => "Comentarios", :length => 10000, :rows => 6, :required => true })
18
18
 
19
19
  .modal-footer
20
20
  button.btn.btn-link.waves-effect data-dismiss="modal" type="button" Cerrar
@@ -1,9 +1,13 @@
1
- -total = Notification.pending.for(authenticated(User)).exclude_message.count
2
- -notifications = Notification.for(authenticated(User)).exclude_message.order(:read_date,Sequel.desc(:id)).limit(5).all
1
+ -total = Notification.pending.for(authenticated(User)).count
2
+ -notifications = Notification.pending.for(authenticated(User)).order(Sequel.desc(:id)).limit(20).all
3
+
3
4
  li.dropdown.hidden-xs
4
- a.notifications-menu data-toggle="dropdown" href=""
5
- i.tm-icon.zmdi.zmdi-notifications
6
- -unless total == 0
5
+ -if total == 0
6
+ a href="/notifications" title="No tienes notificaciones pendientes"
7
+ i.tm-icon.zmdi.zmdi-notifications-none
8
+ -else
9
+ a.notifications-menu data-toggle="dropdown" href=""
10
+ i.tm-icon.zmdi.zmdi-notifications
7
11
  i.notification-count.tmn-counts.animated.bounceIn #{total}
8
12
  .dropdown-menu.dropdown-menu-lg.pull-right
9
13
  .listview
@@ -0,0 +1,14 @@
1
+ .modal.fade id="#{report}_date" tabindex="-1" role="dialog" aria-labelledby="pickDate"
2
+ .modal-dialog.modal-sm
3
+ form.modal-content action="#{url}" method="GET"
4
+ .modal-content
5
+ .modal-header
6
+ h4.modal-title Selecciona una fecha...
7
+ .modal-body
8
+ .row
9
+ .col-xs-12
10
+ == date_input({ :name => "date", :value => Date.today.short_display, :title => "Fecha de referencia", :required => true })
11
+
12
+ .modal-footer
13
+ button.btn.btn-link.waves-effect data-dismiss="modal" type="button" Cerrar
14
+ button.btn.btn-link.waves-effect#submit Descargar reporte
@@ -0,0 +1,16 @@
1
+ .modal.fade id="#{report}_dates" tabindex="-1" role="dialog" aria-labelledby="pickDate"
2
+ .modal-dialog.modal-sm
3
+ form.modal-content action="#{url}" method="GET"
4
+ .modal-content
5
+ .modal-header
6
+ h4.modal-title Selecciona una fecha...
7
+ .modal-body
8
+ .row
9
+ .col-xs-6
10
+ == date_input({ :name => "from", :value => Date.today.short_display, :title => "Desde", :required => true })
11
+ .col-xs-6
12
+ == date_input({ :name => "to", :value => (Date.today + 30).short_display, :title => "Hasta", :required => true })
13
+
14
+ .modal-footer
15
+ button.btn.btn-link.waves-effect data-dismiss="modal" type="button" Cerrar
16
+ button.btn.btn-link.waves-effect#submit Descargar reporte
@@ -0,0 +1,14 @@
1
+ .modal.fade id="#{report}_month" tabindex="-1" role="dialog" aria-labelledby="pickDate"
2
+ .modal-dialog.modal-sm
3
+ form.modal-content action="#{url}" method="GET"
4
+ .modal-content
5
+ .modal-header
6
+ h4.modal-title Selecciona un mes...
7
+ .modal-body
8
+ .row
9
+ .col-xs-12
10
+ == month_input({ :name => "date", :value => Date.today.short_display, :title => "Mes de referencia", :required => true })
11
+
12
+ .modal-footer
13
+ button.btn.btn-link.waves-effect data-dismiss="modal" type="button" Cerrar
14
+ button.btn.btn-link.waves-effect#submit Descargar reporte
@@ -0,0 +1,14 @@
1
+ .modal.fade id="#{report}_year" tabindex="-1" role="dialog" aria-labelledby="pickDate"
2
+ .modal-dialog.modal-sm
3
+ form.modal-content action="#{url}" method="GET"
4
+ .modal-content
5
+ .modal-header
6
+ h4.modal-title Selecciona un año...
7
+ .modal-body
8
+ .row
9
+ .col-xs-12
10
+ == year_input({ :name => "date", :value => Date.today.year, :title => "Año de referencia", :required => true })
11
+
12
+ .modal-footer
13
+ button.btn.btn-link.waves-effect data-dismiss="modal" type="button" Cerrar
14
+ button.btn.btn-link.waves-effect#submit Descargar reporte
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-hexacta
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marco Zanger
@@ -10,20 +10,30 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2020-05-12 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: A simple hello world gem
13
+ description: A gem to support general functionality accross all apps
14
14
  email: mzanger@hexacta.com
15
15
  executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
+ - lib/sinatra/extensions/antiquity.rb
20
+ - lib/sinatra/extensions/date.rb
21
+ - lib/sinatra/extensions/init.rb
22
+ - lib/sinatra/extensions/notification.rb
19
23
  - lib/sinatra/handlers/errors.rb
20
24
  - lib/sinatra/handlers/init.rb
21
25
  - lib/sinatra/handlers/notifications.rb
26
+ - lib/sinatra/handlers/params.rb
22
27
  - lib/sinatra/handlers/reports.rb
28
+ - lib/sinatra/helpers/alerts.rb
29
+ - lib/sinatra/helpers/cas.rb
23
30
  - lib/sinatra/helpers/charts.rb
24
31
  - lib/sinatra/helpers/init.rb
25
32
  - lib/sinatra/helpers/inputs.rb
26
33
  - lib/sinatra/helpers/libraries.rb
34
+ - lib/sinatra/helpers/mailer.rb
35
+ - lib/sinatra/helpers/reports.rb
36
+ - lib/sinatra/helpers/schedule.rb
27
37
  - lib/sinatra/helpers/subscriptions.rb
28
38
  - lib/sinatra/hexacta.rb
29
39
  - lib/sinatra/public/css/app.min.1.css
@@ -60,6 +70,7 @@ files:
60
70
  - lib/sinatra/public/vendors/animate.css/animate.min.css
61
71
  - lib/sinatra/public/vendors/bootstrap-validator/validator.js
62
72
  - lib/sinatra/public/vendors/bootstrap/bootstrap.min.js
73
+ - lib/sinatra/public/vendors/chartist/chartist-plugin-legend.js
63
74
  - lib/sinatra/public/vendors/chartist/chartist.min.css
64
75
  - lib/sinatra/public/vendors/chartist/chartist.min.js
65
76
  - lib/sinatra/public/vendors/chosen/chosen-sprite.png
@@ -87,7 +98,15 @@ files:
87
98
  - lib/sinatra/public/vendors/typeahead.js/typeahead.bundle.min.js
88
99
  - lib/sinatra/public/vendors/waves/waves.min.css
89
100
  - lib/sinatra/public/vendors/waves/waves.min.js
90
- - lib/sinatra/views/charts/simple_line.slim
101
+ - lib/sinatra/views/alerts/empty.slim
102
+ - lib/sinatra/views/alerts/error.slim
103
+ - lib/sinatra/views/alerts/info.slim
104
+ - lib/sinatra/views/alerts/warning.slim
105
+ - lib/sinatra/views/charts/bar.slim
106
+ - lib/sinatra/views/charts/gauge.slim
107
+ - lib/sinatra/views/charts/line.slim
108
+ - lib/sinatra/views/charts/pie.slim
109
+ - lib/sinatra/views/charts/stacked_bar.slim
91
110
  - lib/sinatra/views/errors/403.slim
92
111
  - lib/sinatra/views/errors/404.slim
93
112
  - lib/sinatra/views/errors/500.slim
@@ -110,6 +129,10 @@ files:
110
129
  - lib/sinatra/views/notifications/new.slim
111
130
  - lib/sinatra/views/notifications/view.slim
112
131
  - lib/sinatra/views/notifications/widget.slim
132
+ - lib/sinatra/views/reports/pick_date.slim
133
+ - lib/sinatra/views/reports/pick_dates.slim
134
+ - lib/sinatra/views/reports/pick_month.slim
135
+ - lib/sinatra/views/reports/pick_year.slim
113
136
  homepage: https://rubygems.org/gems/sinatra-hexacta
114
137
  licenses:
115
138
  - MIT