chaltron 1.1.7 → 2.0.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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/chaltron.js +0 -18
  3. data/app/assets/javascripts/chaltron/core.js.erb +62 -0
  4. data/app/assets/javascripts/chaltron/datatables.js +69 -0
  5. data/app/assets/javascripts/chaltron/flash_messages.js +14 -0
  6. data/app/assets/javascripts/chaltron/ldap_create.js +44 -0
  7. data/app/assets/javascripts/chaltron/locales/en.json +25 -0
  8. data/app/assets/javascripts/chaltron/locales/it.json +25 -0
  9. data/app/assets/javascripts/chaltron/navbar.js +86 -0
  10. data/app/assets/stylesheets/chaltron.scss +0 -27
  11. data/app/helpers/chaltron/ldap_helper.rb +9 -0
  12. data/app/views/chaltron/ldap/_entry.html.erb +3 -1
  13. data/app/views/chaltron/ldap/multi_new.html.erb +6 -2
  14. data/config/initializers/devise.rb +259 -255
  15. data/config/initializers/warden.rb +27 -25
  16. data/config/routes.rb +1 -1
  17. data/lib/chaltron.rb +0 -1
  18. data/lib/chaltron/engine.rb +17 -18
  19. data/lib/chaltron/form_builder/bootstrap_form.rb +23 -0
  20. data/lib/chaltron/ldap/connection.rb +154 -152
  21. data/lib/chaltron/version.rb +1 -1
  22. data/lib/generators/chaltron/install_generator.rb +59 -5
  23. data/lib/generators/chaltron/templates/Procfile +2 -0
  24. data/lib/generators/chaltron/templates/app/assets/javascripts/{home.js.coffee → home.coffee} +0 -0
  25. data/lib/generators/chaltron/templates/app/assets/stylesheets/chaltron_custom.scss +24 -10
  26. data/lib/generators/chaltron/templates/app/assets/stylesheets/datatables.scss +2 -0
  27. data/lib/generators/chaltron/templates/app/views/layouts/application.html.erb +2 -2
  28. data/lib/generators/chaltron/templates/config/navigation.rb +8 -8
  29. metadata +13 -234
  30. data/app/assets/javascripts/chaltron/datatables.js.coffee +0 -103
  31. data/app/assets/javascripts/chaltron/localization.js.coffee +0 -59
  32. data/app/assets/javascripts/chaltron/main.js.coffee +0 -7
  33. data/app/assets/javascripts/chaltron/navbar.js.coffee +0 -62
  34. data/app/assets/javascripts/dataTables/dataTables.bootstrap4.min.js +0 -8
  35. data/lib/chaltron/bootstrap_form.rb +0 -21
  36. data/lib/generators/chaltron/install/templates/Procfile +0 -1
@@ -1,103 +0,0 @@
1
- class DataTableBuilder
2
- constructor: ->
3
- @defaultOptions = {
4
- destroy: true
5
- autoWidth: false
6
- responsive: true
7
- stateSave: true
8
- }
9
-
10
- go: ->
11
- # users
12
- div = $('table#users')
13
- @initTable(container: div)
14
- # ldap create
15
- div = $('table#ldap_create')
16
- @initTable(container: div, params: {
17
- paging: false
18
- # default sorting: username (2nd column) asc
19
- order: [[1,'asc']]
20
- columnDefs: [
21
- { orderable: false, className: 'select-checkbox', targets: 0 }
22
- ]
23
- select: { style: 'multi', info: false }
24
- })
25
-
26
- # logs
27
- div = $('table#logs')
28
- @initTable(container: div, params: {
29
- processing: true
30
- serverSide: true
31
- ajax: div.data('source')
32
- # default sorting: date (2nd column) desc
33
- order: [[1,'desc']]
34
- columns: [
35
- { data: 'severity', searchable: false }
36
- { data: 'date', searchable: false }
37
- { data: 'message' }
38
- { data: 'category', searchable: false }
39
- ]
40
- columnDefs: [
41
- { orderSequence: ['desc', 'asc'], targets: [ 1 ] },
42
- { className: 'text-center', "targets": [ 0 ] }
43
- ]
44
- })
45
-
46
- # datatable class
47
- div = $('table.datatable')
48
- @initTable(container: div)
49
-
50
- # datatable class (server side processing)
51
- div = $('table[remote=true].datatable')
52
- @initTable(container: div, params: {
53
- processing: true
54
- serverSide: true
55
- ajax: div.data('source')
56
- })
57
-
58
- initTable: ({container, params} = {}) ->
59
- if container.length > 0
60
- params ?= {}
61
- # add custom params if any
62
- settings = $.extend({}, @defaultOptions, params)
63
- # add language
64
- settings = $.extend({}, settings, {language: Chaltron.locales('datatable')})
65
-
66
- table = container.DataTable(settings)
67
- document.addEventListener 'turbolinks:before-cache', ->
68
- table.destroy()
69
-
70
- $(document).on 'turbolinks:load', ->
71
- table = new DataTableBuilder
72
- table.go()
73
-
74
- $ ->
75
- $('form#ldap_create').on 'submit', (e) ->
76
-
77
- count = $('table#ldap_create').DataTable().rows( { selected: true } ).count()
78
-
79
- if count == 0
80
- message = Chaltron.locales('error_message')
81
- label = Chaltron.locales('error_label')
82
-
83
- flash = $("div.alert-warning:contains('#{message}')")
84
- if flash.length == 0
85
- # display warning flash message
86
- flash = $("<div><strong>#{label}</strong>: #{message}</div>").addClass('alert alert-warning')
87
- $('.flash-container').append(flash)
88
- else
89
- flash.show()
90
- # closable
91
- flash.click -> $(@).fadeOut()
92
- # self disappearing
93
- setTimeout (-> flash.fadeOut()), 5000
94
-
95
- e.preventDefault()
96
-
97
- for i in [0..count-1]
98
- $('<input/>', {
99
- name: 'uids[]',
100
- type: 'hidden',
101
- multiple: 'multiple',
102
- value: $('table#ldap_create').DataTable().rows( { selected: true } ).data()[i][1]
103
- }).appendTo(@)
@@ -1,59 +0,0 @@
1
- class @Chaltron
2
- @locales: (field) ->
3
- lang = Chaltron::lang ? 'en'
4
- ret = switch lang
5
- when 'it' then {
6
- error_message: 'Selezionare almeno una riga',
7
- error_label: 'Attenzione',
8
- datatable: {
9
- sEmptyTable: 'Nessun dato presente nella tabella',
10
- sInfo: 'Vista da _START_ a _END_ di _TOTAL_ elementi',
11
- sInfoEmpty: 'Vista da 0 a 0 di 0 elementi',
12
- sInfoFiltered: '(filtrati da _MAX_ elementi totali)',
13
- sInfoPostFix: '',
14
- sInfoThousands: ',',
15
- sLengthMenu: 'Visualizza _MENU_ elementi',
16
- sLoadingRecords: 'Caricamento...',
17
- sProcessing: 'Elaborazione...',
18
- sSearch: 'Cerca:',
19
- sZeroRecords: 'La ricerca non ha portato alcun risultato.',
20
- oPaginate: {
21
- sFirst: 'Inizio',
22
- sPrevious: 'Precedente',
23
- sNext: 'Successivo',
24
- sLast: 'Fine'
25
- },
26
- oAria: {
27
- sSortAscending: ': attiva per ordinare la colonna in ordine crescente',
28
- sSortDescending: ': attiva per ordinare la colonna in ordine decrescente'
29
- }
30
- }
31
- }
32
- else {
33
- error_message: 'Select at least a row',
34
- error_label: 'Warning',
35
- datatable: {
36
- sEmptyTable: 'No data available in table',
37
- sInfo: 'Showing _START_ to _END_ of _TOTAL_ entries',
38
- sInfoEmpty: 'Showing 0 to 0 of 0 entries',
39
- sInfoFiltered: '(filtered from _MAX_ total entries)',
40
- sInfoPostFix: '',
41
- sInfoThousands: ',',
42
- sLengthMenu: 'Show _MENU_ entries',
43
- sLoadingRecords: 'Loading...',
44
- sProcessing: 'Processing...',
45
- sSearch: 'Search:',
46
- sZeroRecords: 'No matching records found',
47
- oPaginate: {
48
- sFirst: 'First',
49
- sLast: 'Last',
50
- sNext: 'Next',
51
- sPrevious: 'Previous'
52
- },
53
- oAria: {
54
- sSortAscending: ': activate to sort column ascending',
55
- sSortDescending: ': activate to sort column descending'
56
- }
57
- }
58
- }
59
- ret[field]
@@ -1,7 +0,0 @@
1
- $(document).on 'turbolinks:load', ->
2
- $('.dropdown-toggle').dropdown()
3
-
4
- # Flash
5
- if (flash = $('.flash-container div.alert')).length > 0
6
- flash.click -> $(@).fadeOut()
7
- setTimeout (-> flash.fadeOut()), 5000
@@ -1,62 +0,0 @@
1
- class NavbarBuilder
2
-
3
- teardown: ->
4
- # restore
5
- $('#navigation').html($('#navigation').data('navbar'))
6
-
7
- setup: ->
8
- # backup
9
- $('#navigation').data('navbar', $('#navigation').html())
10
-
11
- @prepend_class(i, 'navbar-nav mr-auto') for i in $('#navigation ul')
12
- $('#navigation ul li').addClass('nav-item')
13
- $('#navigation ul li a').addClass('nav-link')
14
- $('#navigation ul li ul').parent().addClass('dropdown')
15
- $('#navigation ul li.dropdown').children('a').addClass('dropdown-toggle').attr(
16
- {id: 'navbarDropdown', role: 'button', 'aria-haspopup': 'true', 'aria-expanded': 'false', 'data-toggle': 'dropdown'}
17
- )
18
- @render_dropdown_menu i for i in $('#navigation ul li.dropdown')
19
- @render_icon_a i for i in $('#navigation ul li a')
20
-
21
- render_dropdown_menu: (item) ->
22
- links = jQuery(item).find('ul li a')
23
- jQuery(l).addClass('dropdown-item').removeClass('nav-link') for l in links
24
- @render_dropdown_links (i) for i in jQuery(item).find('ul')
25
-
26
- render_dropdown_links: (item) ->
27
- el = jQuery(item)
28
- links = el.find('li a')
29
-
30
- klass = 'dropdown-menu'
31
- klass += ' dropdown-menu-right' if el.parent().hasClass('dropdown-menu-right')
32
-
33
- div = $('<div></div>').addClass(klass).attr('aria-labelledby': 'navbarDropdown').append(links)
34
- el.replaceWith(div)
35
-
36
- prepend_class: (item, klass) ->
37
- el = jQuery(item)
38
- if el.attr('class')
39
- klass += " #{el.attr('class')}"
40
- el.removeClass(jQuery(item).attr('class'))
41
-
42
- el.addClass(klass)
43
-
44
- if el.hasClass('justify-content-end')
45
- el.removeClass('mr-auto')
46
-
47
- render_icon_a: (item) ->
48
- el = jQuery(item)
49
- if el.attr('icon')
50
- el.html("<i class=\"fas fa-#{el.attr('icon')}\"></i>&nbsp;#{el.text()}")
51
-
52
- $(document).one 'turbolinks:load', ->
53
- navbar = new NavbarBuilder
54
- navbar.setup()
55
-
56
- $(document).on 'turbolinks:render', ->
57
- navbar = new NavbarBuilder
58
- navbar.setup()
59
-
60
- $(document).on 'turbolinks:before-render', ->
61
- navbar = new NavbarBuilder
62
- navbar.teardown()
@@ -1,8 +0,0 @@
1
- /*!
2
- DataTables Bootstrap 3 integration
3
- ©2011-2015 SpryMedia Ltd - datatables.net/license
4
- */
5
- (function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(a,d).$;return b(d,a,a.document)}:b(jQuery,window,document)})(function(b,a,d,m){var f=b.fn.dataTable;b.extend(!0,f.defaults,{dom:"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
6
- renderer:"bootstrap"});b.extend(f.ext.classes,{sWrapper:"dataTables_wrapper container-fluid dt-bootstrap4",sFilterInput:"form-control form-control-sm",sLengthSelect:"form-control form-control-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"});f.ext.renderer.pageButton.bootstrap=function(a,h,r,s,j,n){var o=new f.Api(a),t=a.oClasses,k=a.oLanguage.oPaginate,u=a.oLanguage.oAria.paginate||{},e,g,p=0,q=function(d,f){var l,h,i,c,m=function(a){a.preventDefault();!b(a.currentTarget).hasClass("disabled")&&
7
- o.page()!=a.data.action&&o.page(a.data.action).draw("page")};l=0;for(h=f.length;l<h;l++)if(c=f[l],b.isArray(c))q(d,c);else{g=e="";switch(c){case "ellipsis":e="&#x2026;";g="disabled";break;case "first":e=k.sFirst;g=c+(0<j?"":" disabled");break;case "previous":e=k.sPrevious;g=c+(0<j?"":" disabled");break;case "next":e=k.sNext;g=c+(j<n-1?"":" disabled");break;case "last":e=k.sLast;g=c+(j<n-1?"":" disabled");break;default:e=c+1,g=j===c?"active":""}e&&(i=b("<li>",{"class":t.sPageButton+" "+g,id:0===r&&
8
- "string"===typeof c?a.sTableId+"_"+c:null}).append(b("<a>",{href:"#","aria-controls":a.sTableId,"aria-label":u[c],"data-dt-idx":p,tabindex:a.iTabIndex,"class":"page-link"}).html(e)).appendTo(d),a.oApi._fnBindAction(i,{action:c},m),p++)}},i;try{i=b(h).find(d.activeElement).data("dt-idx")}catch(v){}q(b(h).empty().html('<ul class="pagination"/>').children("ul"),s);i!==m&&b(h).find("[data-dt-idx="+i+"]").focus()};return f});
@@ -1,21 +0,0 @@
1
- class BootstrapForm::FormBuilder
2
-
3
- def role_select(opts = {})
4
- collection = Chaltron.roles.map { |role| [role, I18n.translate("roles.#{role}")] }
5
- checked = @object.nil?? false : @object.roles
6
- html = inputs_collection(:roles, collection, :first, :last, checked: checked) do |name, value, options|
7
- options[:multiple] = true
8
- options[:inline] = opts.fetch(:inline, true)
9
-
10
- if value == opts[:disabled]
11
- options[:disabled] = true
12
- options[:checked] = true
13
- end
14
- check_box(name, options, value, nil)
15
- end
16
-
17
- hidden = opts[:disabled] || ''
18
- hidden_field(:roles, { value: hidden, multiple: true }).concat(html)
19
- end
20
-
21
- end
@@ -1 +0,0 @@
1
- webpacker: ./bin/webpack-dev-server