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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/chaltron.js +0 -18
- data/app/assets/javascripts/chaltron/core.js.erb +62 -0
- data/app/assets/javascripts/chaltron/datatables.js +69 -0
- data/app/assets/javascripts/chaltron/flash_messages.js +14 -0
- data/app/assets/javascripts/chaltron/ldap_create.js +44 -0
- data/app/assets/javascripts/chaltron/locales/en.json +25 -0
- data/app/assets/javascripts/chaltron/locales/it.json +25 -0
- data/app/assets/javascripts/chaltron/navbar.js +86 -0
- data/app/assets/stylesheets/chaltron.scss +0 -27
- data/app/helpers/chaltron/ldap_helper.rb +9 -0
- data/app/views/chaltron/ldap/_entry.html.erb +3 -1
- data/app/views/chaltron/ldap/multi_new.html.erb +6 -2
- data/config/initializers/devise.rb +259 -255
- data/config/initializers/warden.rb +27 -25
- data/config/routes.rb +1 -1
- data/lib/chaltron.rb +0 -1
- data/lib/chaltron/engine.rb +17 -18
- data/lib/chaltron/form_builder/bootstrap_form.rb +23 -0
- data/lib/chaltron/ldap/connection.rb +154 -152
- data/lib/chaltron/version.rb +1 -1
- data/lib/generators/chaltron/install_generator.rb +59 -5
- data/lib/generators/chaltron/templates/Procfile +2 -0
- data/lib/generators/chaltron/templates/app/assets/javascripts/{home.js.coffee → home.coffee} +0 -0
- data/lib/generators/chaltron/templates/app/assets/stylesheets/chaltron_custom.scss +24 -10
- data/lib/generators/chaltron/templates/app/assets/stylesheets/datatables.scss +2 -0
- data/lib/generators/chaltron/templates/app/views/layouts/application.html.erb +2 -2
- data/lib/generators/chaltron/templates/config/navigation.rb +8 -8
- metadata +13 -234
- data/app/assets/javascripts/chaltron/datatables.js.coffee +0 -103
- data/app/assets/javascripts/chaltron/localization.js.coffee +0 -59
- data/app/assets/javascripts/chaltron/main.js.coffee +0 -7
- data/app/assets/javascripts/chaltron/navbar.js.coffee +0 -62
- data/app/assets/javascripts/dataTables/dataTables.bootstrap4.min.js +0 -8
- data/lib/chaltron/bootstrap_form.rb +0 -21
- 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,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> #{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="…";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
|