Skip to content

Commit

Permalink
point master to koenpunt/chosen for adding new results
Browse files Browse the repository at this point in the history
  • Loading branch information
waymondo committed Aug 22, 2012
1 parent ed54d94 commit dbfedd2
Show file tree
Hide file tree
Showing 6 changed files with 147 additions and 30 deletions.
2 changes: 1 addition & 1 deletion lib/chosen-rails/source_file.rb
Expand Up @@ -6,7 +6,7 @@ class SourceFile < Thor
desc "fetch source files", "fetch source files from GitHub"
def fetch
self.destination_root = "vendor/assets"
remote = "https://github.com/harvesthq/chosen"
remote = "https://github.com/koenpunt/chosen"
get "#{remote}/raw/master/chosen/chosen-sprite.png", "images/chosen-sprite.png"
get "#{remote}/raw/master/chosen/chosen.css", "stylesheets/chosen.css"
get "#{remote}/raw/master/coffee/lib/abstract-chosen.coffee", "javascripts/lib/abstract-chosen.coffee"
Expand Down
2 changes: 1 addition & 1 deletion lib/chosen-rails/version.rb
@@ -1,6 +1,6 @@
module Chosen
module Rails
VERSION = "0.9.8.2"
VERSION = "0.9.8"
EDITOR_VERSION = "0.9.8"
end
end
61 changes: 57 additions & 4 deletions vendor/assets/javascripts/chosen.jquery.coffee
Expand Up @@ -205,6 +205,23 @@ class Chosen extends AbstractChosen
else
""

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()

result_do_highlight: (el) ->
if el.length
this.result_clear_highlight()
Expand Down Expand Up @@ -287,7 +304,6 @@ class Chosen extends AbstractChosen
search_results_mouseout: (evt) ->
this.result_clear_highlight() if $(evt.target).hasClass "active-result" or $(evt.target).parents('.active-result').first()


choices_click: (evt) ->
evt.preventDefault()
if( @active_field and not($(evt.target).hasClass "search-choice" or $(evt.target).parents('.search-choice').first) and not @results_showing )
Expand Down Expand Up @@ -335,6 +351,11 @@ class Chosen extends AbstractChosen
result_select: (evt) ->
if @result_highlight
high = @result_highlight

if high.hasClass 'create-option'
this.select_create_option(@search_field.val())
return this.results_hide()

high_id = high.attr "id"

this.result_clear_highlight()
Expand Down Expand Up @@ -393,14 +414,18 @@ class Chosen extends AbstractChosen

winnow_results: ->
this.no_results_clear()
this.create_option_clear()

results = 0

searchText = if @search_field.val() is @default_text then "" else $('<div/>').text($.trim(@search_field.val())).html()
regexAnchor = if @search_contains then "" else "^"
regex = new RegExp(regexAnchor + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i')
zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i')

eregex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") + '$', 'i')

exact_result = false

for option in @results_data
if not option.disabled and not option.empty
if option.group
Expand All @@ -413,6 +438,10 @@ class Chosen extends AbstractChosen
if regex.test option.html
found = true
results += 1
if eregex.test option.html
exact_result = true


else if option.html.indexOf(" ") >= 0 or option.html.indexOf("[") == 0
#TODO: replace this substitution of /\[\]/ with a list of characters to skip.
parts = option.html.replace(/\[|\]/g, "").split(" ")
Expand Down Expand Up @@ -441,6 +470,7 @@ class Chosen extends AbstractChosen
if results < 1 and searchText.length
this.no_results searchText
else
this.show_create_option( searchText ) if @create_option and not exact_result and @persistent_create_option and searchText.length
this.winnow_results_set_highlight()

winnow_results_clear: ->
Expand All @@ -465,9 +495,32 @@ class Chosen extends AbstractChosen
no_results: (terms) ->
no_results_html = $('<li class="no-results">' + @results_none_found + ' "<span></span>"</li>')
no_results_html.find("span").first().html(terms)

@search_results.append no_results_html


if @create_option #and not selected
this.show_create_option( terms )

show_create_option: (terms) ->
create_option_html = $('<li class="create-option active-result"><a href="javascript:void(0);">' + @create_option_text + '</a>: "' + terms + '"</li>').bind "click", (evt) => this.select_create_option(terms)
@search_results.append create_option_html

create_option_clear: ->
@search_results.find(".create-option").remove()

select_create_option: (terms) ->
if $.isFunction(@create_option)
@create_option.call this, terms
else
this.select_append_option {value: terms, text: terms}

select_append_option: ( options ) ->
option = $('<option />', options ).attr('selected', 'selected')
@form_field_jq.append option
@form_field_jq.trigger "liszt:updated"
#@active_field = false
@search_field.trigger('focus')

no_results_clear: ->
@search_results.find(".no-results").remove()

Expand Down
60 changes: 51 additions & 9 deletions vendor/assets/javascripts/chosen.proto.coffee
Expand Up @@ -20,7 +20,10 @@ class Chosen extends AbstractChosen
@single_temp = new Template('<a href="javascript:void(0)" class="chzn-single chzn-default"><span>#{default}</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" autocomplete="off" /></div><ul class="chzn-results"></ul></div>')
@multi_temp = new Template('<ul class="chzn-choices"><li class="search-field"><input type="text" value="#{default}" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>')
@choice_temp = new Template('<li class="search-choice" id="#{id}"><span>#{choice}</span><a href="javascript:void(0)" class="search-choice-close" rel="#{position}"></a></li>')
@no_results_temp = new Template('<li class="no-results">' + @results_none_found + ' "<span>#{terms}</span>"</li>')
@no_results_temp = new Template('<li class="no-results">#{text} "<span>#{terms}</span>"</li>')
@new_option_temp = new Template('<option value="#{value}">#{text}</option>')
@create_option_temp = new Template('<li class="create-option active-result"><a href="javascript:void(0);">#{text}</a>: #{terms}</li>')


set_up_html: ->
@container_id = @form_field.identify().replace(/[^\w]/g, '_') + "_chzn"
Expand Down Expand Up @@ -328,6 +331,11 @@ class Chosen extends AbstractChosen
result_select: (evt) ->
if @result_highlight
high = @result_highlight

if high.hasClassName 'create-option'
this.select_create_option(@search_field.value)
return this.results_hide()

this.result_clear_highlight()

if @is_multiple
Expand Down Expand Up @@ -385,13 +393,17 @@ class Chosen extends AbstractChosen

winnow_results: ->
this.no_results_clear()
this.create_option_clear()

results = 0

searchText = if @search_field.value is @default_text then "" else @search_field.value.strip().escapeHTML()
regexAnchor = if @search_contains then "" else "^"
regex = new RegExp(regexAnchor + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i')
zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i')
eregex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") + '$', 'i')

exact_result = false

for option in @results_data
if not option.disabled and not option.empty
Expand All @@ -400,10 +412,15 @@ class Chosen extends AbstractChosen
else if not (@is_multiple and option.selected)
found = false
result_id = option.dom_id
result = $(result_id)

if regex.test option.html
found = true
results += 1
if eregex.test option.html
exact_result = true


else if option.html.indexOf(" ") >= 0 or option.html.indexOf("[") == 0
#TODO: replace this substitution of /\[\]/ with a list of characters to skip.
parts = option.html.replace(/\[|\]/g, "").split(" ")
Expand All @@ -421,18 +438,18 @@ class Chosen extends AbstractChosen
else
text = option.html

$(result_id).update text if $(result_id).innerHTML != text

this.result_activate $(result_id)
result.update text if result.innerHTML != text
this.result_activate result

$(@results_data[option.group_array_index].dom_id).setStyle({display: 'list-item'}) if option.group_array_index?
else
this.result_clear_highlight() if $(result_id) is @result_highlight
this.result_deactivate $(result_id)

if results < 1 and searchText.length
this.no_results(searchText)
this.no_results searchText
else
this.show_create_option( searchText ) if @create_option and not exact_result and @persistent_create_option and searchText.length
this.winnow_results_set_highlight()

winnow_results_clear: ->
Expand All @@ -455,15 +472,40 @@ class Chosen extends AbstractChosen
do_high = @search_results.down(".active-result")

this.result_do_highlight do_high if do_high?

no_results: (terms) ->
@search_results.insert @no_results_temp.evaluate( terms: terms )

no_results_html = @no_results_temp.evaluate( terms: terms, text: @results_none_found )

@search_results.insert no_results_html

if @create_option #and not selected
this.show_create_option( terms )

show_create_option: (terms) ->
create_option_html = @create_option_temp.evaluate( terms: terms, text: @create_option_text )
@search_results.insert create_option_html
@search_results.down(".create-option").observe "click", (evt) => this.select_create_option(terms)

create_option_clear: ->
co = null
co.remove() while co = @search_results.down(".create-option")

select_create_option: ( terms ) ->
if Object.isFunction( @create_option )
@create_option.call this, terms
else
this.select_append_option( value: terms, text: terms )

select_append_option: ( options ) ->
option = @new_option_temp.evaluate( options )
@form_field.insert option
Event.fire @form_field, "liszt:updated"
this.result_select()

no_results_clear: ->
nr = null
nr.remove() while nr = @search_results.down(".no-results")


keydown_arrow: ->
actives = @search_results.select("li.active-result")
if actives.length
Expand Down
8 changes: 7 additions & 1 deletion vendor/assets/javascripts/lib/abstract-chosen.coffee
Expand Up @@ -33,6 +33,8 @@ class AbstractChosen
@choices = 0
@single_backstroke_delete = @options.single_backstroke_delete || false
@max_selected_options = @options.max_selected_options || Infinity
@create_option = @options.create_option || false
@persistent_create_option = @options.persistent_create_option || false

set_default_text: ->
if @form_field.getAttribute("data-placeholder")
Expand All @@ -43,6 +45,7 @@ class AbstractChosen
@default_text = @options.placeholder_text_single || @options.placeholder_text || "Select an Option"

@results_none_found = @form_field.getAttribute("data-no_results_text") || @options.no_results_text || "No results match"
@create_option_text = @form_field.getAttribute("data-create_option_text") || @options.create_option_text || "Add option"

mouse_enter: -> @mouse_on_container = true
mouse_leave: -> @mouse_on_container = false
Expand All @@ -69,7 +72,10 @@ class AbstractChosen
'<li id="' + option.dom_id + '" class="' + classes.join(' ') + '"'+style+'>' + option.html + '</li>'
else
""


append_option: (option) ->
this.select_append_option(option)

results_update_field: ->
this.results_reset_cleanup() if not @is_multiple
this.result_clear_highlight()
Expand Down

0 comments on commit dbfedd2

Please sign in to comment.