aboutsummaryrefslogtreecommitdiffstats
path: root/app/javascript/helpers/master_slave.coffee
blob: e1bd46281b80d63fac23351666ab12f2fdf2ef5f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class MasterSlave
  constructor: (selector)->
    $(selector).find('[data-master]').each (i, slave)->
      $slave = $(slave)
      master = $($slave.data().master)
      if $slave.find('[data-master]').length == 0
        $slave.find("input:disabled, select:disabled").attr "data-slave-force-disabled", "true"
      toggle = (disableInputs=true)->
        val = master.filter(":checked").val() if master.filter("[type=radio]").length > 0
        val ||= master.val()
        selected = "#{val}" == "#{$slave.data().value}"
        $slave.toggle selected
        $slave.toggleClass "active", selected
        if disableInputs
          disabled = !selected
          disabled = disabled || $slave.parents("[data-master]:not(.active)").length > 0
          $slave.find("input, select").filter(":not([data-slave-force-disabled])").attr "disabled", disabled
        if selected
          $("[data-select2ed='true']").select2()
      master.change toggle
      toggle($slave.find('[data-master]').length == 0)

export default MasterSlave