Introduce abstract-chosen, try to start sharing more code between platforms
This commit is contained in:
parent
df6345465a
commit
4e463669d2
8 changed files with 555 additions and 542 deletions
102
coffee/lib/abstract-chosen.coffee
Normal file
102
coffee/lib/abstract-chosen.coffee
Normal file
|
@ -0,0 +1,102 @@
|
|||
###
|
||||
Chosen source: generate output using 'cake build'
|
||||
Copyright (c) 2011 by Harvest
|
||||
###
|
||||
root = this
|
||||
|
||||
class AbstractChosen
|
||||
|
||||
constructor: (elmn) ->
|
||||
this.set_default_values()
|
||||
|
||||
@form_field = elmn
|
||||
@is_multiple = @form_field.multiple
|
||||
@default_text_default = if @is_multiple then "Select Some Options" else "Select an Option"
|
||||
|
||||
this.setup()
|
||||
|
||||
this.set_up_html()
|
||||
this.register_observers()
|
||||
|
||||
this.finish_setup()
|
||||
|
||||
set_default_values: ->
|
||||
@click_test_action = (evt) => this.test_active_click(evt)
|
||||
@active_field = false
|
||||
@mouse_on_container = false
|
||||
@results_showing = false
|
||||
@result_highlighted = null
|
||||
@result_single_selected = null
|
||||
@choices = 0
|
||||
|
||||
mouse_enter: -> @mouse_on_container = true
|
||||
mouse_leave: -> @mouse_on_container = false
|
||||
|
||||
input_focus: (evt) ->
|
||||
setTimeout (=> this.container_mousedown()), 50 unless @active_field
|
||||
|
||||
input_blur: (evt) ->
|
||||
if not @mouse_on_container
|
||||
@active_field = false
|
||||
setTimeout (=> this.blur_test()), 100
|
||||
|
||||
result_add_option: (option) ->
|
||||
if not option.disabled
|
||||
option.dom_id = @container_id + "_o_" + option.array_index
|
||||
|
||||
classes = if option.selected and @is_multiple then [] else ["active-result"]
|
||||
classes.push "result-selected" if option.selected
|
||||
classes.push "group-option" if option.group_array_index?
|
||||
|
||||
'<li id="' + option.dom_id + '" class="' + classes.join(' ') + '">' + option.html + '</li>'
|
||||
else
|
||||
""
|
||||
|
||||
results_update_field: ->
|
||||
this.result_clear_highlight()
|
||||
@result_single_selected = null
|
||||
this.results_build()
|
||||
|
||||
results_toggle: ->
|
||||
if @results_showing
|
||||
this.results_hide()
|
||||
else
|
||||
this.results_show()
|
||||
|
||||
results_search: (evt) ->
|
||||
if @results_showing
|
||||
this.winnow_results()
|
||||
else
|
||||
this.results_show()
|
||||
|
||||
keyup_checker: (evt) ->
|
||||
stroke = evt.which ? evt.keyCode
|
||||
this.search_field_scale()
|
||||
|
||||
switch stroke
|
||||
when 8
|
||||
if @is_multiple and @backstroke_length < 1 and @choices > 0
|
||||
this.keydown_backstroke()
|
||||
else if not @pending_backstroke
|
||||
this.result_clear_highlight()
|
||||
this.results_search()
|
||||
when 13
|
||||
evt.preventDefault()
|
||||
this.result_select(evt) if this.results_showing
|
||||
when 27
|
||||
this.results_hide() if @results_showing
|
||||
when 9, 38, 40, 16, 91, 17
|
||||
# don't do anything on these keys
|
||||
else this.results_search()
|
||||
|
||||
generate_field_id: ->
|
||||
new_id = this.generate_random_id()
|
||||
@form_field.id = new_id
|
||||
new_id
|
||||
|
||||
generate_random_char: ->
|
||||
chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ"
|
||||
rand = Math.floor(Math.random() * chars.length)
|
||||
newchar = chars.substring rand, rand+1
|
||||
|
||||
root.AbstractChosen = AbstractChosen
|
Loading…
Add table
Add a link
Reference in a new issue