Sha256: 0c58078723ba6b55e8e979ccdadb7b7dd31616e60af921ca9394b7eec3e7ae9e

Contents?: true

Size: 1.83 KB

Versions: 14

Compression:

Stored size: 1.83 KB

Contents

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: this.escapeExpression(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

  escapeExpression: (text) ->
    if not text? or text is false
      return ""
    unless /[\&\<\>\"\'\`]/.test(text)
      return text
    map =
      "<": "&lt;"
      ">": "&gt;"
      '"': "&quot;"
      "'": "&#x27;"
      "`": "&#x60;"
    unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g
    text.replace unsafe_chars, (chr) ->
      map[chr] || "&amp;"

SelectParser.select_to_array = (select) ->
  parser = new SelectParser()
  parser.add_node( child ) for child in select.childNodes
  parser.parsed

window.SelectParser = SelectParser

Version data entries

14 entries across 14 versions & 3 rubygems

Version Path
intesys_asset_manager-1.2.4 vendor/assets/javascripts/asset_manager/chosen-rails/lib/select-parser.coffee
chosen-rails-1.2.0 vendor/assets/javascripts/lib/select-parser.coffee
chosen-rails-1.1.1 vendor/assets/javascripts/lib/select-parser.coffee
intesys_asset_manager-1.2.3 vendor/assets/javascripts/asset_manager/chosen-rails/lib/select-parser.coffee
intesys_asset_manager-1.2.2 vendor/assets/javascripts/asset_manager/chosen-rails/lib/select-parser.coffee
intesys_asset_manager-1.2.1 vendor/assets/javascripts/asset_manager/chosen-rails/lib/select-parser.coffee
intesys_asset_manager-1.2.0 vendor/assets/javascripts/asset_manager/chosen-rails/lib/select-parser.coffee
intesys_asset_manager-1.1.3 vendor/assets/javascripts/asset_manager/chosen-rails/lib/select-parser.coffee
chosen-rails-1.1.0 vendor/assets/javascripts/lib/select-parser.coffee
chosen-rails-adding-1.0.2.2 vendor/assets/javascripts/lib/select-parser.coffee
chosen-rails-adding-1.0.2.1 vendor/assets/javascripts/lib/select-parser.coffee
chosen-rails-1.0.2 vendor/assets/javascripts/lib/select-parser.coffee
chosen-rails-1.0.1 vendor/assets/javascripts/lib/select-parser.coffee
chosen-rails-1.0.0 vendor/assets/javascripts/lib/select-parser.coffee