Blame view

framework/admin/thirdparty/chosen/coffee/lib/select-parser.coffee 1.46 KB
5fb8f6f6   Administrator   update rep
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  class SelectParser
    
    constructor: ->
      @options_index = 0
      @parsed = []
  
    add_node: (child) ->
      if child.nodeName.toUpperCase() is "OPTGROUP"
        this.add_group child
      else
        this.add_option child
  
    add_group: (group) ->
      group_position = @parsed.length
      @parsed.push
        array_index: group_position
        group: true
        label: group.label
        children: 0
        disabled: group.disabled
      this.add_option( option, group_position, group.disabled ) for option in group.childNodes
  
    add_option: (option, group_position, group_disabled) ->
      if option.nodeName.toUpperCase() is "OPTION"
        if option.text != ""
          if group_position?
            @parsed[group_position].children += 1
          @parsed.push
            array_index: @parsed.length
            options_index: @options_index
            value: option.value
            text: option.text
            html: option.innerHTML
            selected: option.selected
            disabled: if group_disabled is true then group_disabled else option.disabled
            group_array_index: group_position
            classes: option.className
            style: option.style.cssText
        else
          @parsed.push
            array_index: @parsed.length
            options_index: @options_index
            empty: true
        @options_index += 1
  
  SelectParser.select_to_array = (select) ->
    parser = new SelectParser()
    parser.add_node( child ) for child in select.childNodes
    parser.parsed
  
  this.SelectParser = SelectParser