/
checkbox-toggler.js.coffee
36 lines (29 loc) · 1.17 KB
/
checkbox-toggler.js.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class ActiveAdmin.CheckboxToggler
constructor: (@options, @container)->
defaults = {}
@options = $.extend defaults, @options
@_init()
@_bind()
_init: ->
if not @container
throw new Error('Container element not found')
else
@$container = $(@container)
if not @$container.find('.toggle_all').length
throw new Error('"toggle all" checkbox not found')
else
@toggle_all_checkbox = @$container.find '.toggle_all'
@checkboxes = @$container.find(':checkbox').not @toggle_all_checkbox
_bind: ->
@checkboxes.change (e)=> @_didChangeCheckbox e.target
@toggle_all_checkbox.change => @_didChangeToggleAllCheckbox()
_didChangeCheckbox: (checkbox)->
switch @checkboxes.filter(':checked').length
when @checkboxes.length - 1 then @toggle_all_checkbox.prop checked: null
when @checkboxes.length then @toggle_all_checkbox.prop checked: true
_didChangeToggleAllCheckbox: ->
setting = if @toggle_all_checkbox.prop 'checked' then true else null
@checkboxes.each (index, el)=>
$(el).prop checked: setting
@_didChangeCheckbox(el)
$.widget.bridge 'checkboxToggler', ActiveAdmin.CheckboxToggler