2011-07-29 10:42:34 +02:00
|
|
|
class SelectParser
|
|
|
|
|
|
|
|
constructor: ->
|
|
|
|
@options_index = 0
|
|
|
|
@parsed = []
|
|
|
|
|
|
|
|
add_node: (child) ->
|
|
|
|
if child.nodeName 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 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
|
2011-09-29 23:32:58 +02:00
|
|
|
classes: option.className
|
2011-09-30 00:19:21 +02:00
|
|
|
style: option.style.cssText
|
2011-07-29 10:42:34 +02:00
|
|
|
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
|