From a24675c6be5932f8f5808692b3c0dcc9c943323e Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Tue, 3 Jan 2012 12:07:33 +0100 Subject: [PATCH] MINOR Updated chosen.js to 0.9.5 --- admin/thirdparty/chosen/.piston.yml | 2 +- admin/thirdparty/chosen/Cakefile | 55 +- admin/thirdparty/chosen/README.md | 4 +- admin/thirdparty/chosen/VERSION | 2 +- .../chosen/chosen/chosen-sprite.png | Bin 742 -> 396 bytes admin/thirdparty/chosen/chosen/chosen.css | 88 ++- .../thirdparty/chosen/chosen/chosen.jquery.js | 587 +++++++++++------- .../chosen/chosen/chosen.jquery.min.js | 4 +- .../thirdparty/chosen/chosen/chosen.proto.js | 562 ++++++++++------- .../chosen/chosen/chosen.proto.min.js | 4 +- .../chosen/coffee/chosen.jquery.coffee | 227 +++---- .../chosen/coffee/chosen.proto.coffee | 200 +++--- .../chosen/coffee/lib/abstract-chosen.coffee | 108 ++++ .../chosen/coffee/lib/select-parser.coffee | 2 + admin/thirdparty/chosen/example.jquery.html | 42 +- .../{example.html => example.proto.html} | 54 +- 16 files changed, 1173 insertions(+), 768 deletions(-) create mode 100644 admin/thirdparty/chosen/coffee/lib/abstract-chosen.coffee rename admin/thirdparty/chosen/{example.html => example.proto.html} (97%) diff --git a/admin/thirdparty/chosen/.piston.yml b/admin/thirdparty/chosen/.piston.yml index 19734fa66..65c32c6f1 100644 --- a/admin/thirdparty/chosen/.piston.yml +++ b/admin/thirdparty/chosen/.piston.yml @@ -1,7 +1,7 @@ --- format: 1 handler: - commit: b7a531f211b3074c922edf10a4a14b2ab9e9b6c8 + commit: 880a30dcb49555996a875cf4474999a2341aa055 branch: master lock: false repository_class: Piston::Git::Repository diff --git a/admin/thirdparty/chosen/Cakefile b/admin/thirdparty/chosen/Cakefile index 91ed87e13..89486e6fd 100644 --- a/admin/thirdparty/chosen/Cakefile +++ b/admin/thirdparty/chosen/Cakefile @@ -11,12 +11,14 @@ CoffeeScript = require 'coffee-script' javascripts = { 'chosen/chosen.jquery.js': [ - 'coffee/chosen.jquery.coffee' 'coffee/lib/select-parser.coffee' + 'coffee/lib/abstract-chosen.coffee' + 'coffee/chosen.jquery.coffee' ] 'chosen/chosen.proto.js': [ - 'coffee/chosen.proto.coffee' 'coffee/lib/select-parser.coffee' + 'coffee/lib/abstract-chosen.coffee' + 'coffee/chosen.proto.coffee' ] } @@ -57,20 +59,27 @@ write_chosen_javascript = (filename, body) -> // This file is generated by `cake build`, do not edit it by hand. #{body} """ + console.log "Wrote #{filename}" # Build Chosen. # task 'build', 'build Chosen from source', build = (cb) -> - for javascript, sources of javascripts - code = '' - for source in sources - code += CoffeeScript.compile "#{fs.readFileSync source}" - write_chosen_javascript javascript, code - unless process.env.MINIFY is 'false' - write_chosen_javascript javascript.replace(/\.js$/,'.min.js'), ( - uglify.gen_code uglify.ast_squeeze uglify.ast_mangle parser.parse code - ) - cb() if typeof cb is 'function' + file_name = null; file_contents = null + try + for javascript, sources of javascripts + code = '' + for source in sources + file_name = source + file_contents = "#{fs.readFileSync source}" + code += CoffeeScript.compile file_contents + write_chosen_javascript javascript, code + unless process.env.MINIFY is 'false' + write_chosen_javascript javascript.replace(/\.js$/,'.min.js'), ( + uglify.gen_code uglify.ast_squeeze uglify.ast_mangle parser.parse code + ) + cb() if typeof cb is 'function' + catch e + print_error e, file_name, file_contents task 'watch', 'watch coffee/ for changes and build Chosen', -> console.log "Watching for changes in coffee/" @@ -118,6 +127,28 @@ untag_release = (e) -> push_repo = (args=[], cb, cb_err) -> run 'git', ['push'].concat(args), cb, cb_err +print_error = (error, file_name, file_contents) -> + line = error.message.match /line ([0-9]+):/ + if line && line[1] && line = parseInt(line[1]) + contents_lines = file_contents.split "\n" + first = if line-4 < 0 then 0 else line-4 + last = if line+3 > contents_lines.size then contents_lines.size else line+3 + console.log "Error compiling #{file_name}. \"#{error.message}\"\n" + index = 0 + for line in contents_lines[first...last] + index++ + line_number = first + 1 + index + console.log "#{(' ' for [0..(3-(line_number.toString().length))]).join('')} #{line}" + else + console.log """ +Error compiling #{file_name}: + + #{error.message} + +""" + + + task 'release', 'build, tag the current release, and push', -> console.log "Trying to tag #{version_tag()}..." with_clean_repo -> diff --git a/admin/thirdparty/chosen/README.md b/admin/thirdparty/chosen/README.md index cee8ed1cc..e19ddbb9f 100644 --- a/admin/thirdparty/chosen/README.md +++ b/admin/thirdparty/chosen/README.md @@ -36,11 +36,11 @@ If you're interested, you can find the recipes in Cakefile. ### Chosen Credits -- Built by [Harvest](http://www.getharvest.com/) +- Built by [Harvest](http://www.getharvest.com/). Want to work on projects like this? [We’re hiring](http://www.getharvest.com/careers)! - Concept and development by [Patrick Filler](http://www.patrickfiller.com/) - Design and CSS by [Matthew Lettini](http://matthewlettini.com/) ### Notable Forks - [Chosen for MooTools](https://github.com/julesjanssen/chosen), by Jules Janssen -- [Chosen Drupal 7 Module](https://github.com/Polzme/chosen), by Pol Dell'Aiera \ No newline at end of file +- [Chosen Drupal 7 Module](http://drupal.org/project/chosen), by Pol Dell'Aiera, Arshad Chummun, Bart Feenstra, Kálmán Hosszu, etc. \ No newline at end of file diff --git a/admin/thirdparty/chosen/VERSION b/admin/thirdparty/chosen/VERSION index f374f6662..b0bb87854 100644 --- a/admin/thirdparty/chosen/VERSION +++ b/admin/thirdparty/chosen/VERSION @@ -1 +1 @@ -0.9.1 +0.9.5 diff --git a/admin/thirdparty/chosen/chosen/chosen-sprite.png b/admin/thirdparty/chosen/chosen/chosen-sprite.png index f20db4439ea5c1038126bf326c8fd048b03a8226..d08e4b7e624c44f4fb862f23f046262780847490 100644 GIT binary patch delta 382 zcmV-^0fGMJ1&jlb7k?-S00000htS3&00004XF*Lt006O%3;baP00002bW%=J004HA z%{Tx60X0cPK~xwS?ZKgng+LSr;QwhSPVgyC5hj?XOfd*1H{4*Ds3NnUF zz&i_$Rb*l;sKOg_k#H!Lk$I{UUT*aCfxVg<9AajGnembeA~Fd(JrNB!Wgwy+JIN4H zk#I^wHTFK}>4pPyJ^<0o_?C(pCmE&3kSW5C1!s+!(pqIBBsgfLbYO^tOesA=BxFi! zrAJ8QDhnY~26qxO1?EsBNH8+!|4xX!hBT5N~wTKB-_ZhKr8Z56QGom(IpKI{yFvKXc~Hw6wJT z{{AOVo_zoQeZqtZ&!0cvw{PF?-@ki%d;k6WS6EoMdiClhOP1WeeS7cTz4PYH`}FD4 zt5>h?-n~0()~rX59=&++V%xTD`T6-@zI<7}eEIzO^LOst`S@T)vFse zZ0PFhnmc#y*RNl9?AVc)msea|{PX9}Ns}gR+O%o+?%jtD9eVii;l+y=r%jvo;K760 zvu76+6kNZ4ed^SyPoF-WIC0|Z*ROy4_>r5N`~Lm=&!0c{_4O@WxbWAnUpYBBmoHy_ z_Uzfgg9n!`T{?O4j}$9Asc%4D@ty45_&F_R{g9Lk0qD52mW_e8hCD#Hn3?L-tbj`>OxT zJ7v;md~}?7W?s>W`VVqX@=db;D+pYCKd;4N)z`osoP6iyoB9teW8`B#?2;Ii#BfGM zL+6u_bqvF)z6Qwy7F^e#>{}{m61e02bdHnN$L$~3eq~pF@_OO1hcV%@q4${;^UfV+ znXY)w;%ghbu4vj9l}FCEd^hZyc+KPP6}AS4MsdBpQGw+X69gF?tV83O8O(MiJx^-A zboXW1bFqq*pAC;_YOi~??#RV$D!*(*_VfK;FjaJ|%YuJ~uPm<26>Fce&`YSSyXC`g zaTdR+Ec5IClowvmjG1!3;Krqz>yXh1n|0' + option.html + ''; + } else { + return ""; + } + }; + AbstractChosen.prototype.results_update_field = function() { + this.result_clear_highlight(); + this.result_single_selected = null; + return this.results_build(); + }; + AbstractChosen.prototype.results_toggle = function() { + if (this.results_showing) { + return this.results_hide(); + } else { + return this.results_show(); + } + }; + AbstractChosen.prototype.results_search = function(evt) { + if (this.results_showing) { + return this.winnow_results(); + } else { + return this.results_show(); + } + }; + AbstractChosen.prototype.keyup_checker = function(evt) { + var stroke, _ref; + stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; + this.search_field_scale(); + switch (stroke) { + case 8: + if (this.is_multiple && this.backstroke_length < 1 && this.choices > 0) { + return this.keydown_backstroke(); + } else if (!this.pending_backstroke) { + this.result_clear_highlight(); + return this.results_search(); + } + break; + case 13: + evt.preventDefault(); + if (this.results_showing) { + return this.result_select(evt); + } + break; + case 27: + if (this.results_showing) { + return this.results_hide(); + } + break; + case 9: + case 38: + case 40: + case 16: + case 91: + case 17: + break; + default: + return this.results_search(); + } + }; + AbstractChosen.prototype.generate_field_id = function() { + var new_id; + new_id = this.generate_random_id(); + this.form_field.id = new_id; + return new_id; + }; + AbstractChosen.prototype.generate_random_char = function() { + var chars, newchar, rand; + chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ"; + rand = Math.floor(Math.random() * chars.length); + return newchar = chars.substring(rand, rand + 1); + }; + return AbstractChosen; + })(); + root.AbstractChosen = AbstractChosen; +}).call(this); +(function() { + /* + Chosen source: generate output using 'cake build' + Copyright (c) 2011 by Harvest + */ + var $, Chosen, get_side_border_padding, root; + var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) { + for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } + function ctor() { this.constructor = child; } + ctor.prototype = parent.prototype; + child.prototype = new ctor; + child.__super__ = parent.prototype; + return child; + }, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + root = this; + $ = jQuery; + $.fn.extend({ + chosen: function(options) { + if ($.browser.msie && ($.browser.version === "6.0" || $.browser.version === "7.0")) { + return this; + } + return $(this).each(function(input_field) { + if (!($(this)).hasClass("chzn-done")) { + return new Chosen(this, options); + } + }); + } + }); + Chosen = (function() { + __extends(Chosen, AbstractChosen); + function Chosen() { + Chosen.__super__.constructor.apply(this, arguments); + } + Chosen.prototype.setup = function() { + this.form_field_jq = $(this.form_field); + return this.is_rtl = this.form_field_jq.hasClass("chzn-rtl"); + }; + Chosen.prototype.finish_setup = function() { + return this.form_field_jq.addClass("chzn-done"); }; Chosen.prototype.set_up_html = function() { var container_div, dd_top, dd_width, sf_width; this.container_id = this.form_field.id.length ? this.form_field.id.replace(/(:|\.)/g, '_') : this.generate_field_id(); this.container_id += "_chzn"; - this.f_width = this.form_field_jq.width(); + this.f_width = this.form_field_jq.outerWidth(); this.default_text = this.form_field_jq.data('placeholder') ? this.form_field_jq.data('placeholder') : this.default_text_default; container_div = $("
", { id: this.container_id, - "class": "chzn-container " + (this.is_rtl ? 'chzn-rtl' : ''), + "class": "chzn-container" + (this.is_rtl ? ' chzn-rtl' : ''), style: 'width: ' + this.f_width + 'px;' }); if (this.is_multiple) { @@ -89,11 +311,17 @@ }); } this.results_build(); - return this.set_tab_index(); + this.set_tab_index(); + return this.form_field_jq.trigger("liszt:ready", { + chosen: this + }); }; Chosen.prototype.register_observers = function() { - this.container.click(__bind(function(evt) { - return this.container_click(evt); + this.container.mousedown(__bind(function(evt) { + return this.container_mousedown(evt); + }, this)); + this.container.mouseup(__bind(function(evt) { + return this.container_mouseup(evt); }, this)); this.container.mouseenter(__bind(function(evt) { return this.mouse_enter(evt); @@ -101,8 +329,8 @@ this.container.mouseleave(__bind(function(evt) { return this.mouse_leave(evt); }, this)); - this.search_results.click(__bind(function(evt) { - return this.search_results_click(evt); + this.search_results.mouseup(__bind(function(evt) { + return this.search_results_mouseup(evt); }, this)); this.search_results.mouseover(__bind(function(evt) { return this.search_results_mouseover(evt); @@ -129,51 +357,52 @@ return this.search_field.focus(__bind(function(evt) { return this.input_focus(evt); }, this)); - } else { - return this.selected_item.focus(__bind(function(evt) { - return this.activate_field(evt); - }, this)); } }; - Chosen.prototype.container_click = function(evt) { - if (evt && evt.type === "click") { - evt.stopPropagation(); - } - if (!this.pending_destroy_click) { - if (!this.active_field) { - if (this.is_multiple) { - this.search_field.val(""); - } - $(document).click(this.click_test_action); - this.results_show(); - } else if (!this.is_multiple && evt && ($(evt.target) === this.selected_item || $(evt.target).parents("a.chzn-single").length)) { - evt.preventDefault(); - this.results_toggle(); + Chosen.prototype.search_field_disabled = function() { + this.is_disabled = this.form_field_jq[0].disabled; + if (this.is_disabled) { + this.container.addClass('chzn-disabled'); + this.search_field[0].disabled = true; + if (!this.is_multiple) { + this.selected_item.unbind("focus", this.activate_action); } - return this.activate_field(); + return this.close_field(); } else { - return this.pending_destroy_click = false; + this.container.removeClass('chzn-disabled'); + this.search_field[0].disabled = false; + if (!this.is_multiple) { + return this.selected_item.bind("focus", this.activate_action); + } } }; - Chosen.prototype.mouse_enter = function() { - return this.mouse_on_container = true; - }; - Chosen.prototype.mouse_leave = function() { - return this.mouse_on_container = false; - }; - Chosen.prototype.input_focus = function(evt) { - if (!this.active_field) { - return setTimeout((__bind(function() { - return this.container_click(); - }, this)), 50); + Chosen.prototype.container_mousedown = function(evt) { + var target_closelink; + if (!this.is_disabled) { + target_closelink = evt != null ? ($(evt.target)).hasClass("search-choice-close") : false; + if (evt && evt.type === "mousedown") { + evt.stopPropagation(); + } + if (!this.pending_destroy_click && !target_closelink) { + if (!this.active_field) { + if (this.is_multiple) { + this.search_field.val(""); + } + $(document).click(this.click_test_action); + this.results_show(); + } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chzn-single").length)) { + evt.preventDefault(); + this.results_toggle(); + } + return this.activate_field(); + } else { + return this.pending_destroy_click = false; + } } }; - Chosen.prototype.input_blur = function(evt) { - if (!this.mouse_on_container) { - this.active_field = false; - return setTimeout((__bind(function() { - return this.blur_test(); - }, this)), 100); + Chosen.prototype.container_mouseup = function(evt) { + if (evt.target.nodeName === "ABBR") { + return this.results_reset(evt); } }; Chosen.prototype.blur_test = function(evt) { @@ -213,8 +442,7 @@ } }; Chosen.prototype.results_build = function() { - var content, data, startTime, _i, _len, _ref; - startTime = new Date(); + var content, data, _i, _len, _ref; this.parsing = true; this.results_data = root.SelectParser.select_to_array(this.form_field); if (this.is_multiple && this.choices > 0) { @@ -222,6 +450,11 @@ this.choices = 0; } else if (!this.is_multiple) { this.selected_item.find("span").text(this.default_text); + if (this.form_field.options.length <= this.disable_search_threshold) { + this.container.addClass("chzn-container-single-nosearch"); + } else { + this.container.removeClass("chzn-container-single-nosearch"); + } } content = ''; _ref = this.results_data; @@ -235,9 +468,13 @@ this.choice_build(data); } else if (data.selected && !this.is_multiple) { this.selected_item.find("span").text(data.text); + if (this.allow_single_deselect) { + this.single_deselect_control_build(); + } } } } + this.search_field_disabled(); this.show_search_field_default(); this.search_field_scale(); this.search_results.html(content); @@ -251,27 +488,6 @@ return ""; } }; - Chosen.prototype.result_add_option = function(option) { - var classes; - if (!option.disabled) { - option.dom_id = this.container_id + "_o_" + option.array_index; - classes = option.selected && this.is_multiple ? [] : ["active-result"]; - if (option.selected) { - classes.push("result-selected"); - } - if (option.group_array_index != null) { - classes.push("group-option"); - } - return '
  • ' + option.html + '
  • '; - } else { - return ""; - } - }; - Chosen.prototype.results_update_field = function() { - this.result_clear_highlight(); - this.result_single_selected = null; - return this.results_build(); - }; Chosen.prototype.result_do_highlight = function(el) { var high_bottom, high_top, maxHeight, visible_bottom, visible_top; if (el.length) { @@ -296,13 +512,6 @@ } return this.result_highlight = null; }; - Chosen.prototype.results_toggle = function() { - if (this.results_showing) { - return this.results_hide(); - } else { - return this.results_show(); - } - }; Chosen.prototype.results_show = function() { var dd_top; if (!this.is_multiple) { @@ -353,12 +562,12 @@ return this.search_field.removeClass("default"); } }; - Chosen.prototype.search_results_click = function(evt) { + Chosen.prototype.search_results_mouseup = function(evt) { var target; target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); if (target.length) { this.result_highlight = target; - return this.result_select(); + return this.result_select(evt); } }; Chosen.prototype.search_results_mouseover = function(evt) { @@ -391,8 +600,12 @@ }; Chosen.prototype.choice_destroy_link_click = function(evt) { evt.preventDefault(); - this.pending_destroy_click = true; - return this.choice_destroy($(evt.target)); + if (!this.is_disabled) { + this.pending_destroy_click = true; + return this.choice_destroy($(evt.target)); + } else { + return evt.stopPropagation; + } }; Chosen.prototype.choice_destroy = function(link) { this.choices -= 1; @@ -403,18 +616,29 @@ this.result_deselect(link.attr("rel")); return link.parents('li').first().remove(); }; - Chosen.prototype.result_select = function() { + Chosen.prototype.results_reset = function(evt) { + this.form_field.options[0].selected = true; + this.selected_item.find("span").text(this.default_text); + this.show_search_field_default(); + $(evt.target).remove(); + this.form_field_jq.trigger("change"); + if (this.active_field) { + return this.results_hide(); + } + }; + Chosen.prototype.result_select = function(evt) { var high, high_id, item, position; if (this.result_highlight) { high = this.result_highlight; high_id = high.attr("id"); this.result_clear_highlight(); - high.addClass("result-selected"); if (this.is_multiple) { this.result_deactivate(high); } else { + this.search_results.find(".result-selected").removeClass("result-selected"); this.result_single_selected = high; } + high.addClass("result-selected"); position = high_id.substr(high_id.lastIndexOf("_") + 1); item = this.results_data[position]; item.selected = true; @@ -423,18 +647,23 @@ this.choice_build(item); } else { this.selected_item.find("span").first().text(item.text); + if (this.allow_single_deselect) { + this.single_deselect_control_build(); + } + } + if (!(evt.metaKey && this.is_multiple)) { + this.results_hide(); } - this.results_hide(); this.search_field.val(""); this.form_field_jq.trigger("change"); return this.search_field_scale(); } }; Chosen.prototype.result_activate = function(el) { - return el.addClass("active-result").show(); + return el.addClass("active-result"); }; Chosen.prototype.result_deactivate = function(el) { - return el.removeClass("active-result").hide(); + return el.removeClass("active-result"); }; Chosen.prototype.result_deselect = function(pos) { var result, result_data; @@ -448,16 +677,13 @@ this.form_field_jq.trigger("change"); return this.search_field_scale(); }; - Chosen.prototype.results_search = function(evt) { - if (this.results_showing) { - return this.winnow_results(); - } else { - return this.results_show(); + Chosen.prototype.single_deselect_control_build = function() { + if (this.allow_single_deselect && this.selected_item.find("abbr").length < 1) { + return this.selected_item.find("span").first().after(""); } }; Chosen.prototype.winnow_results = function() { - var found, option, part, parts, regex, result_id, results, searchText, startTime, startpos, text, zregex, _i, _j, _len, _len2, _ref; - startTime = new Date(); + var found, option, part, parts, regex, result, result_id, results, searchText, startpos, text, zregex, _i, _j, _len, _len2, _ref; this.no_results_clear(); results = 0; searchText = this.search_field.val() === this.default_text ? "" : $('
    ').text($.trim(this.search_field.val())).html(); @@ -468,10 +694,11 @@ option = _ref[_i]; if (!option.disabled && !option.empty) { if (option.group) { - $('#' + option.dom_id).hide(); + $('#' + option.dom_id).css('display', 'none'); } else if (!(this.is_multiple && option.selected)) { found = false; result_id = option.dom_id; + result = $("#" + result_id); if (regex.test(option.html)) { found = true; results += 1; @@ -495,18 +722,16 @@ } else { text = option.html; } - if ($("#" + result_id).html !== text) { - $("#" + result_id).html(text); - } - this.result_activate($("#" + result_id)); + result.html(text); + this.result_activate(result); if (option.group_array_index != null) { - $("#" + this.results_data[option.group_array_index].dom_id).show(); + $("#" + this.results_data[option.group_array_index].dom_id).css('display', 'list-item'); } } else { if (this.result_highlight && result_id === this.result_highlight.attr('id')) { this.result_clear_highlight(); } - this.result_deactivate($("#" + result_id)); + this.result_deactivate(result); } } } @@ -525,14 +750,14 @@ for (_i = 0, _len = lis.length; _i < _len; _i++) { li = lis[_i]; li = $(li); - _results.push(li.hasClass("group-result") ? li.show() : !this.is_multiple || !li.hasClass("result-selected") ? this.result_activate(li) : void 0); + _results.push(li.hasClass("group-result") ? li.css('display', 'auto') : !this.is_multiple || !li.hasClass("result-selected") ? this.result_activate(li) : void 0); } return _results; }; Chosen.prototype.winnow_results_set_highlight = function() { var do_high, selected_results; if (!this.result_highlight) { - selected_results = !this.is_multiple ? this.search_results.find(".result-selected") : []; + selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : []; do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first(); if (do_high != null) { return this.result_do_highlight(do_high); @@ -541,7 +766,7 @@ }; Chosen.prototype.no_results = function(terms) { var no_results_html; - no_results_html = $('
  • No results match ""
  • '); + no_results_html = $('
  • ' + this.results_none_found + ' ""
  • '); no_results_html.find("span").first().html(terms); return this.search_results.append(no_results_html); }; @@ -596,39 +821,6 @@ } return this.pending_backstroke = null; }; - Chosen.prototype.keyup_checker = function(evt) { - var stroke, _ref; - stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; - this.search_field_scale(); - switch (stroke) { - case 8: - if (this.is_multiple && this.backstroke_length < 1 && this.choices > 0) { - return this.keydown_backstroke(); - } else if (!this.pending_backstroke) { - this.result_clear_highlight(); - return this.results_search(); - } - break; - case 13: - evt.preventDefault(); - if (this.results_showing) { - return this.result_select(); - } - break; - case 27: - if (this.results_showing) { - return this.results_hide(); - } - break; - case 9: - case 38: - case 40: - case 16: - break; - default: - return this.results_search(); - } - }; Chosen.prototype.keydown_checker = function(evt) { var stroke, _ref; stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; @@ -641,6 +833,9 @@ this.backstroke_length = this.search_field.val().length; break; case 9: + if (this.results_showing && !this.is_multiple) { + this.result_select(evt); + } this.mouse_on_container = false; break; case 13: @@ -685,12 +880,6 @@ }); } }; - Chosen.prototype.generate_field_id = function() { - var new_id; - new_id = this.generate_random_id(); - this.form_field.id = new_id; - return new_id; - }; Chosen.prototype.generate_random_id = function() { var string; string = "sel" + this.generate_random_char() + this.generate_random_char() + this.generate_random_char(); @@ -699,12 +888,6 @@ } return string; }; - Chosen.prototype.generate_random_char = function() { - var chars, newchar, rand; - chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ"; - rand = Math.floor(Math.random() * chars.length); - return newchar = chars.substring(rand, rand + 1); - }; return Chosen; })(); get_side_border_padding = function(elmt) { @@ -713,75 +896,3 @@ }; root.get_side_border_padding = get_side_border_padding; }).call(this); -(function() { - var SelectParser; - SelectParser = (function() { - function SelectParser() { - this.options_index = 0; - this.parsed = []; - } - SelectParser.prototype.add_node = function(child) { - if (child.nodeName === "OPTGROUP") { - return this.add_group(child); - } else { - return this.add_option(child); - } - }; - SelectParser.prototype.add_group = function(group) { - var group_position, option, _i, _len, _ref, _results; - group_position = this.parsed.length; - this.parsed.push({ - array_index: group_position, - group: true, - label: group.label, - children: 0, - disabled: group.disabled - }); - _ref = group.childNodes; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - option = _ref[_i]; - _results.push(this.add_option(option, group_position, group.disabled)); - } - return _results; - }; - SelectParser.prototype.add_option = function(option, group_position, group_disabled) { - if (option.nodeName === "OPTION") { - if (option.text !== "") { - if (group_position != null) { - this.parsed[group_position].children += 1; - } - this.parsed.push({ - array_index: this.parsed.length, - options_index: this.options_index, - value: option.value, - text: option.text, - html: option.innerHTML, - selected: option.selected, - disabled: group_disabled === true ? group_disabled : option.disabled, - group_array_index: group_position - }); - } else { - this.parsed.push({ - array_index: this.parsed.length, - options_index: this.options_index, - empty: true - }); - } - return this.options_index += 1; - } - }; - return SelectParser; - })(); - SelectParser.select_to_array = function(select) { - var child, parser, _i, _len, _ref; - parser = new SelectParser(); - _ref = select.childNodes; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - child = _ref[_i]; - parser.add_node(child); - } - return parser.parsed; - }; - this.SelectParser = SelectParser; -}).call(this); diff --git a/admin/thirdparty/chosen/chosen/chosen.jquery.min.js b/admin/thirdparty/chosen/chosen/chosen.jquery.min.js index c2d47e8e2..339985189 100644 --- a/admin/thirdparty/chosen/chosen/chosen.jquery.min.js +++ b/admin/thirdparty/chosen/chosen/chosen.jquery.min.js @@ -1,10 +1,10 @@ // Chosen, a Select Box Enhancer for jQuery and Protoype // by Patrick Filler for Harvest, http://getharvest.com // -// Version 0.9.1 +// Version 0.9.5 // Full source at https://github.com/harvesthq/chosen // Copyright (c) 2011 Harvest http://getharvest.com // MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md // This file is generated by `cake build`, do not edit it by hand. -(function(){var a,b,c,d,e=function(a,b){return function(){return a.apply(b,arguments)}};d=this,a=jQuery,a.fn.extend({chosen:function(c,d){return a(this).each(function(e){if(!a(this).hasClass("chzn-done"))return new b(this,c,d)})}}),b=function(){function b(b){this.set_default_values(),this.form_field=b,this.form_field_jq=a(this.form_field),this.is_multiple=this.form_field.multiple,this.is_rtl=this.form_field_jq.hasClass("chzn-rtl"),this.default_text_default=this.form_field.multiple?"Select Some Options":"Select an Option",this.set_up_html(),this.register_observers(),this.form_field_jq.addClass("chzn-done")}b.prototype.set_default_values=function(){this.click_test_action=e(function(a){return this.test_active_click(a)},this),this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.result_single_selected=null;return this.choices=0},b.prototype.set_up_html=function(){var b,d,e,f;this.container_id=this.form_field.id.length?this.form_field.id.replace(/(:|\.)/g,"_"):this.generate_field_id(),this.container_id+="_chzn",this.f_width=this.form_field_jq.width(),this.default_text=this.form_field_jq.data("placeholder")?this.form_field_jq.data("placeholder"):this.default_text_default,b=a("
    ",{id:this.container_id,"class":"chzn-container "+(this.is_rtl?"chzn-rtl":""),style:"width: "+this.f_width+"px;"}),this.is_multiple?b.html('
      '):b.html(''+this.default_text+'
        '),this.form_field_jq.hide().after(b),this.container=a("#"+this.container_id),this.container.addClass("chzn-container-"+(this.is_multiple?"multi":"single")),this.dropdown=this.container.find("div.chzn-drop").first(),d=this.container.height(),e=this.f_width-c(this.dropdown),this.dropdown.css({width:e+"px",top:d+"px"}),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chzn-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chzn-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chzn-search").first(),this.selected_item=this.container.find(".chzn-single").first(),f=e-c(this.search_container)-c(this.search_field),this.search_field.css({width:f+"px"})),this.results_build();return this.set_tab_index()},b.prototype.register_observers=function(){this.container.click(e(function(a){return this.container_click(a)},this)),this.container.mouseenter(e(function(a){return this.mouse_enter(a)},this)),this.container.mouseleave(e(function(a){return this.mouse_leave(a)},this)),this.search_results.click(e(function(a){return this.search_results_click(a)},this)),this.search_results.mouseover(e(function(a){return this.search_results_mouseover(a)},this)),this.search_results.mouseout(e(function(a){return this.search_results_mouseout(a)},this)),this.form_field_jq.bind("liszt:updated",e(function(a){return this.results_update_field(a)},this)),this.search_field.blur(e(function(a){return this.input_blur(a)},this)),this.search_field.keyup(e(function(a){return this.keyup_checker(a)},this)),this.search_field.keydown(e(function(a){return this.keydown_checker(a)},this));if(this.is_multiple){this.search_choices.click(e(function(a){return this.choices_click(a)},this));return this.search_field.focus(e(function(a){return this.input_focus(a)},this))}return this.selected_item.focus(e(function(a){return this.activate_field(a)},this))},b.prototype.container_click=function(b){b&&b.type==="click"&&b.stopPropagation();if(!this.pending_destroy_click){this.active_field?!this.is_multiple&&b&&(a(b.target)===this.selected_item||a(b.target).parents("a.chzn-single").length)&&(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(document).click(this.click_test_action),this.results_show());return this.activate_field()}return this.pending_destroy_click=!1},b.prototype.mouse_enter=function(){return this.mouse_on_container=!0},b.prototype.mouse_leave=function(){return this.mouse_on_container=!1},b.prototype.input_focus=function(a){if(!this.active_field)return setTimeout(e(function(){return this.container_click()},this),50)},b.prototype.input_blur=function(a){if(!this.mouse_on_container){this.active_field=!1;return setTimeout(e(function(){return this.blur_test()},this),100)}},b.prototype.blur_test=function(a){if(!this.active_field&&this.container.hasClass("chzn-container-active"))return this.close_field()},b.prototype.close_field=function(){a(document).unbind("click",this.click_test_action),this.is_multiple||(this.selected_item.attr("tabindex",this.search_field.attr("tabindex")),this.search_field.attr("tabindex",-1)),this.active_field=!1,this.results_hide(),this.container.removeClass("chzn-container-active"),this.winnow_results_clear(),this.clear_backstroke(),this.show_search_field_default();return this.search_field_scale()},b.prototype.activate_field=function(){!this.is_multiple&&!this.active_field&&(this.search_field.attr("tabindex",this.selected_item.attr("tabindex")),this.selected_item.attr("tabindex",-1)),this.container.addClass("chzn-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val());return this.search_field.focus()},b.prototype.test_active_click=function(b){return a(b.target).parents("#"+this.container_id).length?this.active_field=!0:this.close_field()},b.prototype.results_build=function(){var a,b,c,e,f,g;c=new Date,this.parsing=!0,this.results_data=d.SelectParser.select_to_array(this.form_field),this.is_multiple&&this.choices>0?(this.search_choices.find("li.search-choice").remove(),this.choices=0):this.is_multiple||this.selected_item.find("span").text(this.default_text),a="",g=this.results_data;for(e=0,f=g.length;e'+a("
        ").text(b.label).html()+""}return""},b.prototype.result_add_option=function(a){var b;if(!a.disabled){a.dom_id=this.container_id+"_o_"+a.array_index,b=a.selected&&this.is_multiple?[]:["active-result"],a.selected&&b.push("result-selected"),a.group_array_index!=null&&b.push("group-option");return'
      • '+a.html+"
      • "}return""},b.prototype.results_update_field=function(){this.result_clear_highlight(),this.result_single_selected=null;return this.results_build()},b.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight();if(b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(c'+b.html+''),d=a("#"+c).find("a").first();return d.click(e(function(a){return this.choice_destroy_link_click(a)},this))},b.prototype.choice_destroy_link_click=function(b){b.preventDefault(),this.pending_destroy_click=!0;return this.choice_destroy(a(b.target))},b.prototype.choice_destroy=function(a){this.choices-=1,this.show_search_field_default(),this.is_multiple&&this.choices>0&&this.search_field.val().length<1&&this.results_hide(),this.result_deselect(a.attr("rel"));return a.parents("li").first().remove()},b.prototype.result_select=function(){var a,b,c,d;if(this.result_highlight){a=this.result_highlight,b=a.attr("id"),this.result_clear_highlight(),a.addClass("result-selected"),this.is_multiple?this.result_deactivate(a):this.result_single_selected=a,d=b.substr(b.lastIndexOf("_")+1),c=this.results_data[d],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.is_multiple?this.choice_build(c):this.selected_item.find("span").first().text(c.text),this.results_hide(),this.search_field.val(""),this.form_field_jq.trigger("change");return this.search_field_scale()}},b.prototype.result_activate=function(a){return a.addClass("active-result").show()},b.prototype.result_deactivate=function(a){return a.removeClass("active-result").hide()},b.prototype.result_deselect=function(b){var c,d;d=this.results_data[b],d.selected=!1,this.form_field.options[d.options_index].selected=!1,c=a("#"+this.container_id+"_o_"+b),c.removeClass("result-selected").addClass("active-result").show(),this.result_clear_highlight(),this.winnow_results(),this.form_field_jq.trigger("change");return this.search_field_scale()},b.prototype.results_search=function(a){return this.results_showing?this.winnow_results():this.results_show()},b.prototype.winnow_results=function(){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;j=new Date,this.no_results_clear(),h=0,i=this.search_field.val()===this.default_text?"":a("
        ").text(a.trim(this.search_field.val())).html(),f=new RegExp("^"+i.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),m=new RegExp(i.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),r=this.results_data;for(n=0,p=r.length;n=0||c.html.indexOf("[")===0){e=c.html.replace(/\[|\]/g,"").split(" ");if(e.length)for(o=0,q=e.length;o"+c.html.substr(k+i.length),l=l.substr(0,k)+""+l.substr(k)):l=c.html,a("#"+g).html!==l&&a("#"+g).html(l),this.result_activate(a("#"+g)),c.group_array_index!=null&&a("#"+this.results_data[c.group_array_index].dom_id).show()):(this.result_highlight&&g===this.result_highlight.attr("id")&&this.result_clear_highlight(),this.result_deactivate(a("#"+g)))}}return h<1&&i.length?this.no_results(i):this.winnow_results_set_highlight()},b.prototype.winnow_results_clear=function(){var b,c,d,e,f;this.search_field.val(""),c=this.search_results.find("li"),f=[];for(d=0,e=c.length;dNo results match ""'),c.find("span").first().html(b);return this.search_results.append(c)},b.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},b.prototype.keydown_arrow=function(){var b,c;this.result_highlight?this.results_showing&&(c=this.result_highlight.nextAll("li.active-result").first(),c&&this.result_do_highlight(c)):(b=this.search_results.find("li.active-result").first(),b&&this.result_do_highlight(a(b)));if(!this.results_showing)return this.results_show()},b.prototype.keyup_arrow=function(){var a;if(!this.results_showing&&!this.is_multiple)return this.results_show();if(this.result_highlight){a=this.result_highlight.prevAll("li.active-result");if(a.length)return this.result_do_highlight(a.first());this.choices>0&&this.results_hide();return this.result_clear_highlight()}},b.prototype.keydown_backstroke=function(){if(this.pending_backstroke){this.choice_destroy(this.pending_backstroke.find("a").first());return this.clear_backstroke()}this.pending_backstroke=this.search_container.siblings("li.search-choice").last();return this.pending_backstroke.addClass("search-choice-focus")},b.prototype.clear_backstroke=function(){this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus");return this.pending_backstroke=null},b.prototype.keyup_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale();switch(b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0)return this.keydown_backstroke();if(!this.pending_backstroke){this.result_clear_highlight();return this.results_search()}break;case 13:a.preventDefault();if(this.results_showing)return this.result_select();break;case 27:if(this.results_showing)return this.results_hide();break;case 9:case 38:case 40:case 16:break;default:return this.results_search()}},b.prototype.keydown_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale(),b!==8&&this.pending_backstroke&&this.clear_backstroke();switch(b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:this.keydown_arrow()}},b.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(i=0,j=g.length;i",{style:f}),c.text(this.search_field.val()),a("body").append(c),h=c.width()+25,c.remove(),h>this.f_width-10&&(h=this.f_width-10),this.search_field.css({width:h+"px"}),b=this.container.height();return this.dropdown.css({top:b+"px"})}},b.prototype.generate_field_id=function(){var a;a=this.generate_random_id(),this.form_field.id=a;return a},b.prototype.generate_random_id=function(){var b;b="sel"+this.generate_random_char()+this.generate_random_char()+this.generate_random_char();while(a("#"+b).length>0)b+=this.generate_random_char();return b},b.prototype.generate_random_char=function(){var a,b,c;a="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ",c=Math.floor(Math.random()*a.length);return b=a.substring(c,c+1)};return b}(),c=function(a){var b;return b=a.outerWidth()-a.width()},d.get_side_border_padding=c}).call(this),function(){var a;a=function(){function a(){this.options_index=0,this.parsed=[]}a.prototype.add_node=function(a){return a.nodeName==="OPTGROUP"?this.add_group(a):this.add_option(a)},a.prototype.add_group=function(a){var b,c,d,e,f,g;b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:a.label,children:0,disabled:a.disabled}),f=a.childNodes,g=[];for(d=0,e=f.length;d"+a.html+"")},a.prototype.results_update_field=function(){return this.result_clear_highlight(),this.result_single_selected=null,this.results_build()},a.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},a.prototype.results_search=function(a){return this.results_showing?this.winnow_results():this.results_show()},a.prototype.keyup_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale();switch(b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:a.preventDefault();if(this.results_showing)return this.result_select(a);break;case 27:if(this.results_showing)return this.results_hide();break;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},a.prototype.generate_field_id=function(){var a;return a=this.generate_random_id(),this.form_field.id=a,a},a.prototype.generate_random_char=function(){var a,b,c;return a="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ",c=Math.floor(Math.random()*a.length),b=a.substring(c,c+1)},a}(),b.AbstractChosen=a}.call(this),function(){var a,b,c,d,e=Object.prototype.hasOwnProperty,f=function(a,b){function d(){this.constructor=a}for(var c in b)e.call(b,c)&&(a[c]=b[c]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a},g=function(a,b){return function(){return a.apply(b,arguments)}};d=this,a=jQuery,a.fn.extend({chosen:function(c){return!a.browser.msie||a.browser.version!=="6.0"&&a.browser.version!=="7.0"?a(this).each(function(d){if(!a(this).hasClass("chzn-done"))return new b(this,c)}):this}}),b=function(){function b(){b.__super__.constructor.apply(this,arguments)}return f(b,AbstractChosen),b.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.is_rtl=this.form_field_jq.hasClass("chzn-rtl")},b.prototype.finish_setup=function(){return this.form_field_jq.addClass("chzn-done")},b.prototype.set_up_html=function(){var b,d,e,f;return this.container_id=this.form_field.id.length?this.form_field.id.replace(/(:|\.)/g,"_"):this.generate_field_id(),this.container_id+="_chzn",this.f_width=this.form_field_jq.outerWidth(),this.default_text=this.form_field_jq.data("placeholder")?this.form_field_jq.data("placeholder"):this.default_text_default,b=a("
        ",{id:this.container_id,"class":"chzn-container"+(this.is_rtl?" chzn-rtl":""),style:"width: "+this.f_width+"px;"}),this.is_multiple?b.html('
          '):b.html(''+this.default_text+'
            '),this.form_field_jq.hide().after(b),this.container=a("#"+this.container_id),this.container.addClass("chzn-container-"+(this.is_multiple?"multi":"single")),this.dropdown=this.container.find("div.chzn-drop").first(),d=this.container.height(),e=this.f_width-c(this.dropdown),this.dropdown.css({width:e+"px",top:d+"px"}),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chzn-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chzn-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chzn-search").first(),this.selected_item=this.container.find(".chzn-single").first(),f=e-c(this.search_container)-c(this.search_field),this.search_field.css({width:f+"px"})),this.results_build(),this.set_tab_index(),this.form_field_jq.trigger("liszt:ready",{chosen:this})},b.prototype.register_observers=function(){this.container.mousedown(g(function(a){return this.container_mousedown(a)},this)),this.container.mouseup(g(function(a){return this.container_mouseup(a)},this)),this.container.mouseenter(g(function(a){return this.mouse_enter(a)},this)),this.container.mouseleave(g(function(a){return this.mouse_leave(a)},this)),this.search_results.mouseup(g(function(a){return this.search_results_mouseup(a)},this)),this.search_results.mouseover(g(function(a){return this.search_results_mouseover(a)},this)),this.search_results.mouseout(g(function(a){return this.search_results_mouseout(a)},this)),this.form_field_jq.bind("liszt:updated",g(function(a){return this.results_update_field(a)},this)),this.search_field.blur(g(function(a){return this.input_blur(a)},this)),this.search_field.keyup(g(function(a){return this.keyup_checker(a)},this)),this.search_field.keydown(g(function(a){return this.keydown_checker(a)},this));if(this.is_multiple)return this.search_choices.click(g(function(a){return this.choices_click(a)},this)),this.search_field.focus(g(function(a){return this.input_focus(a)},this))},b.prototype.search_field_disabled=function(){this.is_disabled=this.form_field_jq[0].disabled;if(this.is_disabled)return this.container.addClass("chzn-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus",this.activate_action),this.close_field();this.container.removeClass("chzn-disabled"),this.search_field[0].disabled=!1;if(!this.is_multiple)return this.selected_item.bind("focus",this.activate_action)},b.prototype.container_mousedown=function(b){var c;if(!this.is_disabled)return c=b!=null?a(b.target).hasClass("search-choice-close"):!1,b&&b.type==="mousedown"&&b.stopPropagation(),!this.pending_destroy_click&&!c?(this.active_field?!this.is_multiple&&b&&(a(b.target)[0]===this.selected_item[0]||a(b.target).parents("a.chzn-single").length)&&(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(document).click(this.click_test_action),this.results_show()),this.activate_field()):this.pending_destroy_click=!1},b.prototype.container_mouseup=function(a){if(a.target.nodeName==="ABBR")return this.results_reset(a)},b.prototype.blur_test=function(a){if(!this.active_field&&this.container.hasClass("chzn-container-active"))return this.close_field()},b.prototype.close_field=function(){return a(document).unbind("click",this.click_test_action),this.is_multiple||(this.selected_item.attr("tabindex",this.search_field.attr("tabindex")),this.search_field.attr("tabindex",-1)),this.active_field=!1,this.results_hide(),this.container.removeClass("chzn-container-active"),this.winnow_results_clear(),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},b.prototype.activate_field=function(){return!this.is_multiple&&!this.active_field&&(this.search_field.attr("tabindex",this.selected_item.attr("tabindex")),this.selected_item.attr("tabindex",-1)),this.container.addClass("chzn-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},b.prototype.test_active_click=function(b){return a(b.target).parents("#"+this.container_id).length?this.active_field=!0:this.close_field()},b.prototype.results_build=function(){var a,b,c,e,f;this.parsing=!0,this.results_data=d.SelectParser.select_to_array(this.form_field),this.is_multiple&&this.choices>0?(this.search_choices.find("li.search-choice").remove(),this.choices=0):this.is_multiple||(this.selected_item.find("span").text(this.default_text),this.form_field.options.length>this.disable_search_threshold?this.container.removeClass("chzn-container-single-nosearch"):this.container.addClass("chzn-container-single-nosearch")),a="",f=this.results_data;for(c=0,e=f.length;c'+a("
            ").text(b.label).html()+"")},b.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight();if(b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(c'+b.html+''),d=a("#"+c).find("a").first(),d.click(g(function(a){return this.choice_destroy_link_click(a)},this))},b.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),this.is_disabled?b.stopPropagation:(this.pending_destroy_click=!0,this.choice_destroy(a(b.target)))},b.prototype.choice_destroy=function(a){return this.choices-=1,this.show_search_field_default(),this.is_multiple&&this.choices>0&&this.search_field.val().length<1&&this.results_hide(),this.result_deselect(a.attr("rel")),a.parents("li").first().remove()},b.prototype.results_reset=function(b){this.form_field.options[0].selected=!0,this.selected_item.find("span").text(this.default_text),this.show_search_field_default(),a(b.target).remove(),this.form_field_jq.trigger("change");if(this.active_field)return this.results_hide()},b.prototype.result_select=function(a){var b,c,d,e;if(this.result_highlight)return b=this.result_highlight,c=b.attr("id"),this.result_clear_highlight(),this.is_multiple?this.result_deactivate(b):(this.search_results.find(".result-selected").removeClass("result-selected"),this.result_single_selected=b),b.addClass("result-selected"),e=c.substr(c.lastIndexOf("_")+1),d=this.results_data[e],d.selected=!0,this.form_field.options[d.options_index].selected=!0,this.is_multiple?this.choice_build(d):(this.selected_item.find("span").first().text(d.text),this.allow_single_deselect&&this.single_deselect_control_build()),(!a.metaKey||!this.is_multiple)&&this.results_hide(),this.search_field.val(""),this.form_field_jq.trigger("change"),this.search_field_scale()},b.prototype.result_activate=function(a){return a.addClass("active-result")},b.prototype.result_deactivate=function(a){return a.removeClass("active-result")},b.prototype.result_deselect=function(b){var c,d;return d=this.results_data[b],d.selected=!1,this.form_field.options[d.options_index].selected=!1,c=a("#"+this.container_id+"_o_"+b),c.removeClass("result-selected").addClass("active-result").show(),this.result_clear_highlight(),this.winnow_results(),this.form_field_jq.trigger("change"),this.search_field_scale()},b.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect&&this.selected_item.find("abbr").length<1)return this.selected_item.find("span").first().after('')},b.prototype.winnow_results=function(){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;this.no_results_clear(),i=0,j=this.search_field.val()===this.default_text?"":a("
            ").text(a.trim(this.search_field.val())).html(),f=new RegExp("^"+j.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),m=new RegExp(j.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),r=this.results_data;for(n=0,p=r.length;n=0||c.html.indexOf("[")===0){e=c.html.replace(/\[|\]/g,"").split(" ");if(e.length)for(o=0,q=e.length;o"+c.html.substr(k+j.length),l=l.substr(0,k)+""+l.substr(k)):l=c.html,g.html(l),this.result_activate(g),c.group_array_index!=null&&a("#"+this.results_data[c.group_array_index].dom_id).css("display","list-item")):(this.result_highlight&&h===this.result_highlight.attr("id")&&this.result_clear_highlight(),this.result_deactivate(g))}}return i<1&&j.length?this.no_results(j):this.winnow_results_set_highlight()},b.prototype.winnow_results_clear=function(){var b,c,d,e,f;this.search_field.val(""),c=this.search_results.find("li"),f=[];for(d=0,e=c.length;d'+this.results_none_found+' ""'),c.find("span").first().html(b),this.search_results.append(c)},b.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},b.prototype.keydown_arrow=function(){var b,c;this.result_highlight?this.results_showing&&(c=this.result_highlight.nextAll("li.active-result").first(),c&&this.result_do_highlight(c)):(b=this.search_results.find("li.active-result").first(),b&&this.result_do_highlight(a(b)));if(!this.results_showing)return this.results_show()},b.prototype.keyup_arrow=function(){var a;if(!this.results_showing&&!this.is_multiple)return this.results_show();if(this.result_highlight)return a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices>0&&this.results_hide(),this.result_clear_highlight())},b.prototype.keydown_backstroke=function(){return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(this.pending_backstroke=this.search_container.siblings("li.search-choice").last(),this.pending_backstroke.addClass("search-choice-focus"))},b.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},b.prototype.keydown_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale(),b!==8&&this.pending_backstroke&&this.clear_backstroke();switch(b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:this.keydown_arrow()}},b.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(i=0,j=g.length;i",{style:f}),c.text(this.search_field.val()),a("body").append(c),h=c.width()+25,c.remove(),h>this.f_width-10&&(h=this.f_width-10),this.search_field.css({width:h+"px"}),b=this.container.height(),this.dropdown.css({top:b+"px"})}},b.prototype.generate_random_id=function(){var b;b="sel"+this.generate_random_char()+this.generate_random_char()+this.generate_random_char();while(a("#"+b).length>0)b+=this.generate_random_char();return b},b}(),c=function(a){var b;return b=a.outerWidth()-a.width()},d.get_side_border_padding=c}.call(this) \ No newline at end of file diff --git a/admin/thirdparty/chosen/chosen/chosen.proto.js b/admin/thirdparty/chosen/chosen/chosen.proto.js index 5443d5cda..aec1c7fa8 100644 --- a/admin/thirdparty/chosen/chosen/chosen.proto.js +++ b/admin/thirdparty/chosen/chosen/chosen.proto.js @@ -1,44 +1,266 @@ // Chosen, a Select Box Enhancer for jQuery and Protoype // by Patrick Filler for Harvest, http://getharvest.com // -// Version 0.9.1 +// Version 0.9.5 // Full source at https://github.com/harvesthq/chosen // Copyright (c) 2011 Harvest http://getharvest.com // MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md // This file is generated by `cake build`, do not edit it by hand. +(function() { + var SelectParser; + SelectParser = (function() { + function SelectParser() { + this.options_index = 0; + this.parsed = []; + } + SelectParser.prototype.add_node = function(child) { + if (child.nodeName === "OPTGROUP") { + return this.add_group(child); + } else { + return this.add_option(child); + } + }; + SelectParser.prototype.add_group = function(group) { + var group_position, option, _i, _len, _ref, _results; + group_position = this.parsed.length; + this.parsed.push({ + array_index: group_position, + group: true, + label: group.label, + children: 0, + disabled: group.disabled + }); + _ref = group.childNodes; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + _results.push(this.add_option(option, group_position, group.disabled)); + } + return _results; + }; + SelectParser.prototype.add_option = function(option, group_position, group_disabled) { + if (option.nodeName === "OPTION") { + if (option.text !== "") { + if (group_position != null) { + this.parsed[group_position].children += 1; + } + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + value: option.value, + text: option.text, + html: option.innerHTML, + selected: option.selected, + disabled: group_disabled === true ? group_disabled : option.disabled, + group_array_index: group_position, + classes: option.className, + style: option.style.cssText + }); + } else { + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + empty: true + }); + } + return this.options_index += 1; + } + }; + return SelectParser; + })(); + SelectParser.select_to_array = function(select) { + var child, parser, _i, _len, _ref; + parser = new SelectParser(); + _ref = select.childNodes; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + child = _ref[_i]; + parser.add_node(child); + } + return parser.parsed; + }; + this.SelectParser = SelectParser; +}).call(this); (function() { /* Chosen source: generate output using 'cake build' Copyright (c) 2011 by Harvest - */ var Chosen, get_side_border_padding, root; + */ + var AbstractChosen, root; var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; root = this; - Chosen = (function() { - function Chosen(elmn) { + AbstractChosen = (function() { + function AbstractChosen(form_field, options) { + this.form_field = form_field; + this.options = options != null ? options : {}; this.set_default_values(); - this.form_field = elmn; this.is_multiple = this.form_field.multiple; - this.is_rtl = this.form_field.hasClassName("chzn-rtl"); - this.default_text_default = this.form_field.multiple ? "Select Some Options" : "Select an Option"; + this.default_text_default = this.is_multiple ? "Select Some Options" : "Select an Option"; + this.setup(); this.set_up_html(); this.register_observers(); - this.form_field.addClassName("chzn-done"); + this.finish_setup(); } - Chosen.prototype.set_default_values = function() { + AbstractChosen.prototype.set_default_values = function() { this.click_test_action = __bind(function(evt) { return this.test_active_click(evt); }, this); + this.activate_action = __bind(function(evt) { + return this.activate_field(evt); + }, this); this.active_field = false; this.mouse_on_container = false; this.results_showing = false; this.result_highlighted = null; this.result_single_selected = null; + this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false; + this.disable_search_threshold = this.options.disable_search_threshold || 0; this.choices = 0; + return this.results_none_found = this.options.no_results_text || "No results match"; + }; + AbstractChosen.prototype.mouse_enter = function() { + return this.mouse_on_container = true; + }; + AbstractChosen.prototype.mouse_leave = function() { + return this.mouse_on_container = false; + }; + AbstractChosen.prototype.input_focus = function(evt) { + if (!this.active_field) { + return setTimeout((__bind(function() { + return this.container_mousedown(); + }, this)), 50); + } + }; + AbstractChosen.prototype.input_blur = function(evt) { + if (!this.mouse_on_container) { + this.active_field = false; + return setTimeout((__bind(function() { + return this.blur_test(); + }, this)), 100); + } + }; + AbstractChosen.prototype.result_add_option = function(option) { + var classes, style; + if (!option.disabled) { + option.dom_id = this.container_id + "_o_" + option.array_index; + classes = option.selected && this.is_multiple ? [] : ["active-result"]; + if (option.selected) { + classes.push("result-selected"); + } + if (option.group_array_index != null) { + classes.push("group-option"); + } + if (option.classes !== "") { + classes.push(option.classes); + } + style = option.style.cssText !== "" ? " style=\"" + option.style + "\"" : ""; + return '
          • ' + option.html + '
          • '; + } else { + return ""; + } + }; + AbstractChosen.prototype.results_update_field = function() { + this.result_clear_highlight(); + this.result_single_selected = null; + return this.results_build(); + }; + AbstractChosen.prototype.results_toggle = function() { + if (this.results_showing) { + return this.results_hide(); + } else { + return this.results_show(); + } + }; + AbstractChosen.prototype.results_search = function(evt) { + if (this.results_showing) { + return this.winnow_results(); + } else { + return this.results_show(); + } + }; + AbstractChosen.prototype.keyup_checker = function(evt) { + var stroke, _ref; + stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; + this.search_field_scale(); + switch (stroke) { + case 8: + if (this.is_multiple && this.backstroke_length < 1 && this.choices > 0) { + return this.keydown_backstroke(); + } else if (!this.pending_backstroke) { + this.result_clear_highlight(); + return this.results_search(); + } + break; + case 13: + evt.preventDefault(); + if (this.results_showing) { + return this.result_select(evt); + } + break; + case 27: + if (this.results_showing) { + return this.results_hide(); + } + break; + case 9: + case 38: + case 40: + case 16: + case 91: + case 17: + break; + default: + return this.results_search(); + } + }; + AbstractChosen.prototype.generate_field_id = function() { + var new_id; + new_id = this.generate_random_id(); + this.form_field.id = new_id; + return new_id; + }; + AbstractChosen.prototype.generate_random_char = function() { + var chars, newchar, rand; + chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ"; + rand = Math.floor(Math.random() * chars.length); + return newchar = chars.substring(rand, rand + 1); + }; + return AbstractChosen; + })(); + root.AbstractChosen = AbstractChosen; +}).call(this); +(function() { + /* + Chosen source: generate output using 'cake build' + Copyright (c) 2011 by Harvest + */ + var Chosen, get_side_border_padding, root; + var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) { + for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } + function ctor() { this.constructor = child; } + ctor.prototype = parent.prototype; + child.prototype = new ctor; + child.__super__ = parent.prototype; + return child; + }, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + root = this; + Chosen = (function() { + __extends(Chosen, AbstractChosen); + function Chosen() { + Chosen.__super__.constructor.apply(this, arguments); + } + Chosen.prototype.setup = function() { + return this.is_rtl = this.form_field.hasClassName("chzn-rtl"); + }; + Chosen.prototype.finish_setup = function() { + return this.form_field.addClassName("chzn-done"); + }; + Chosen.prototype.set_default_values = function() { + Chosen.__super__.set_default_values.call(this); this.single_temp = new Template('#{default}
              '); this.multi_temp = new Template('
                '); this.choice_temp = new Template('
              • #{choice}
              • '); - return this.no_results_temp = new Template('
              • No results match "#{terms}"
              • '); + return this.no_results_temp = new Template('
              • ' + this.results_none_found + ' "#{terms}"
              • '); }; Chosen.prototype.set_up_html = function() { var base_template, container_props, dd_top, dd_width, sf_width; @@ -46,7 +268,7 @@ this.f_width = this.form_field.getStyle("width") ? parseInt(this.form_field.getStyle("width"), 10) : this.form_field.getWidth(); container_props = { 'id': this.container_id, - 'class': "chzn-container " + (this.is_rtl ? 'chzn-rtl' : ''), + 'class': "chzn-container" + (this.is_rtl ? ' chzn-rtl' : ''), 'style': 'width: ' + this.f_width + 'px' }; this.default_text = this.form_field.readAttribute('data-placeholder') ? this.form_field.readAttribute('data-placeholder') : this.default_text_default; @@ -83,11 +305,17 @@ }); } this.results_build(); - return this.set_tab_index(); + this.set_tab_index(); + return this.form_field.fire("liszt:ready", { + chosen: this + }); }; Chosen.prototype.register_observers = function() { - this.container.observe("click", __bind(function(evt) { - return this.container_click(evt); + this.container.observe("mousedown", __bind(function(evt) { + return this.container_mousedown(evt); + }, this)); + this.container.observe("mouseup", __bind(function(evt) { + return this.container_mouseup(evt); }, this)); this.container.observe("mouseenter", __bind(function(evt) { return this.mouse_enter(evt); @@ -95,8 +323,8 @@ this.container.observe("mouseleave", __bind(function(evt) { return this.mouse_leave(evt); }, this)); - this.search_results.observe("click", __bind(function(evt) { - return this.search_results_click(evt); + this.search_results.observe("mouseup", __bind(function(evt) { + return this.search_results_mouseup(evt); }, this)); this.search_results.observe("mouseover", __bind(function(evt) { return this.search_results_mouseover(evt); @@ -123,46 +351,51 @@ return this.search_field.observe("focus", __bind(function(evt) { return this.input_focus(evt); }, this)); - } else { - return this.selected_item.observe("focus", __bind(function(evt) { - return this.activate_field(evt); - }, this)); } }; - Chosen.prototype.container_click = function(evt) { - if (evt && evt.type === "click") { - evt.stop(); - } - if (!this.pending_destroy_click) { - if (!this.active_field) { - if (this.is_multiple) { - this.search_field.clear(); - } - document.observe("click", this.click_test_action); - this.results_show(); - } else if (!this.is_multiple && evt && (evt.target === this.selected_item || evt.target.up("a.chzn-single"))) { - this.results_toggle(); + Chosen.prototype.search_field_disabled = function() { + this.is_disabled = this.form_field.disabled; + if (this.is_disabled) { + this.container.addClassName('chzn-disabled'); + this.search_field.disabled = true; + if (!this.is_multiple) { + this.selected_item.stopObserving("focus", this.activate_action); } - return this.activate_field(); + return this.close_field(); } else { - return this.pending_destroy_click = false; + this.container.removeClassName('chzn-disabled'); + this.search_field.disabled = false; + if (!this.is_multiple) { + return this.selected_item.observe("focus", this.activate_action); + } } }; - Chosen.prototype.mouse_enter = function() { - return this.mouse_on_container = true; - }; - Chosen.prototype.mouse_leave = function() { - return this.mouse_on_container = false; - }; - Chosen.prototype.input_focus = function(evt) { - if (!this.active_field) { - return setTimeout(this.container_click.bind(this), 50); + Chosen.prototype.container_mousedown = function(evt) { + var target_closelink; + if (!this.is_disabled) { + target_closelink = evt != null ? evt.target.hasClassName("search-choice-close") : false; + if (evt && evt.type === "mousedown") { + evt.stop(); + } + if (!this.pending_destroy_click && !target_closelink) { + if (!this.active_field) { + if (this.is_multiple) { + this.search_field.clear(); + } + document.observe("click", this.click_test_action); + this.results_show(); + } else if (!this.is_multiple && evt && (evt.target === this.selected_item || evt.target.up("a.chzn-single"))) { + this.results_toggle(); + } + return this.activate_field(); + } else { + return this.pending_destroy_click = false; + } } }; - Chosen.prototype.input_blur = function(evt) { - if (!this.mouse_on_container) { - this.active_field = false; - return setTimeout(this.blur_test.bind(this), 100); + Chosen.prototype.container_mouseup = function(evt) { + if (evt.target.nodeName === "ABBR") { + return this.results_reset(evt); } }; Chosen.prototype.blur_test = function(evt) { @@ -202,8 +435,7 @@ } }; Chosen.prototype.results_build = function() { - var content, data, startTime, _i, _len, _ref; - startTime = new Date(); + var content, data, _i, _len, _ref; this.parsing = true; this.results_data = root.SelectParser.select_to_array(this.form_field); if (this.is_multiple && this.choices > 0) { @@ -211,6 +443,11 @@ this.choices = 0; } else if (!this.is_multiple) { this.selected_item.down("span").update(this.default_text); + if (this.form_field.options.length <= this.disable_search_threshold) { + this.container.addClassName("chzn-container-single-nosearch"); + } else { + this.container.removeClassName("chzn-container-single-nosearch"); + } } content = ''; _ref = this.results_data; @@ -224,9 +461,13 @@ this.choice_build(data); } else if (data.selected && !this.is_multiple) { this.selected_item.down("span").update(data.html); + if (this.allow_single_deselect) { + this.single_deselect_control_build(); + } } } } + this.search_field_disabled(); this.show_search_field_default(); this.search_field_scale(); this.search_results.update(content); @@ -240,27 +481,6 @@ return ""; } }; - Chosen.prototype.result_add_option = function(option) { - var classes; - if (!option.disabled) { - option.dom_id = this.container_id + "_o_" + option.array_index; - classes = option.selected && this.is_multiple ? [] : ["active-result"]; - if (option.selected) { - classes.push("result-selected"); - } - if (option.group_array_index != null) { - classes.push("group-option"); - } - return '
              • ' + option.html + '
              • '; - } else { - return ""; - } - }; - Chosen.prototype.results_update_field = function() { - this.result_clear_highlight(); - this.result_single_selected = null; - return this.results_build(); - }; Chosen.prototype.result_do_highlight = function(el) { var high_bottom, high_top, maxHeight, visible_bottom, visible_top; this.result_clear_highlight(); @@ -283,13 +503,6 @@ } return this.result_highlight = null; }; - Chosen.prototype.results_toggle = function() { - if (this.results_showing) { - return this.results_hide(); - } else { - return this.results_show(); - } - }; Chosen.prototype.results_show = function() { var dd_top; if (!this.is_multiple) { @@ -340,12 +553,12 @@ return this.search_field.removeClassName("default"); } }; - Chosen.prototype.search_results_click = function(evt) { + Chosen.prototype.search_results_mouseup = function(evt) { var target; target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result"); if (target) { this.result_highlight = target; - return this.result_select(); + return this.result_select(evt); } }; Chosen.prototype.search_results_mouseover = function(evt) { @@ -384,8 +597,10 @@ }; Chosen.prototype.choice_destroy_link_click = function(evt) { evt.preventDefault(); - this.pending_destroy_click = true; - return this.choice_destroy(evt.target); + if (!this.is_disabled) { + this.pending_destroy_click = true; + return this.choice_destroy(evt.target); + } }; Chosen.prototype.choice_destroy = function(link) { this.choices -= 1; @@ -396,17 +611,30 @@ this.result_deselect(link.readAttribute("rel")); return link.up('li').remove(); }; - Chosen.prototype.result_select = function() { + Chosen.prototype.results_reset = function(evt) { + this.form_field.options[0].selected = true; + this.selected_item.down("span").update(this.default_text); + this.show_search_field_default(); + evt.target.remove(); + if (typeof Event.simulate === 'function') { + this.form_field.simulate("change"); + } + if (this.active_field) { + return this.results_hide(); + } + }; + Chosen.prototype.result_select = function(evt) { var high, item, position; if (this.result_highlight) { high = this.result_highlight; this.result_clear_highlight(); - high.addClassName("result-selected"); if (this.is_multiple) { this.result_deactivate(high); } else { + this.search_results.descendants(".result-selected").invoke("removeClassName", "result-selected"); this.result_single_selected = high; } + high.addClassName("result-selected"); position = high.id.substr(high.id.lastIndexOf("_") + 1); item = this.results_data[position]; item.selected = true; @@ -415,8 +643,13 @@ this.choice_build(item); } else { this.selected_item.down("span").update(item.html); + if (this.allow_single_deselect) { + this.single_deselect_control_build(); + } + } + if (!(evt.metaKey && this.is_multiple)) { + this.results_hide(); } - this.results_hide(); this.search_field.value = ""; if (typeof Event.simulate === 'function') { this.form_field.simulate("change"); @@ -425,10 +658,10 @@ } }; Chosen.prototype.result_activate = function(el) { - return el.addClassName("active-result").show(); + return el.addClassName("active-result"); }; Chosen.prototype.result_deactivate = function(el) { - return el.removeClassName("active-result").hide(); + return el.removeClassName("active-result"); }; Chosen.prototype.result_deselect = function(pos) { var result, result_data; @@ -444,16 +677,15 @@ } return this.search_field_scale(); }; - Chosen.prototype.results_search = function(evt) { - if (this.results_showing) { - return this.winnow_results(); - } else { - return this.results_show(); + Chosen.prototype.single_deselect_control_build = function() { + if (this.allow_single_deselect && !this.selected_item.down("abbr")) { + return this.selected_item.down("span").insert({ + after: "" + }); } }; Chosen.prototype.winnow_results = function() { - var found, option, part, parts, regex, result_id, results, searchText, startTime, startpos, text, zregex, _i, _j, _len, _len2, _ref; - startTime = new Date(); + var found, option, part, parts, regex, result_id, results, searchText, startpos, text, zregex, _i, _j, _len, _len2, _ref; this.no_results_clear(); results = 0; searchText = this.search_field.value === this.default_text ? "" : this.search_field.value.strip().escapeHTML(); @@ -496,7 +728,9 @@ } this.result_activate($(result_id)); if (option.group_array_index != null) { - $(this.results_data[option.group_array_index].dom_id).show(); + $(this.results_data[option.group_array_index].dom_id).setStyle({ + display: 'list-item' + }); } } else { if ($(result_id) === this.result_highlight) { @@ -528,7 +762,7 @@ var do_high; if (!this.result_highlight) { if (!this.is_multiple) { - do_high = this.search_results.down(".result-selected"); + do_high = this.search_results.down(".result-selected.active-result"); } if (!(do_high != null)) { do_high = this.search_results.down(".active-result"); @@ -603,39 +837,6 @@ } return this.pending_backstroke = null; }; - Chosen.prototype.keyup_checker = function(evt) { - var stroke, _ref; - stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; - this.search_field_scale(); - switch (stroke) { - case 8: - if (this.is_multiple && this.backstroke_length < 1 && this.choices > 0) { - return this.keydown_backstroke(); - } else if (!this.pending_backstroke) { - this.result_clear_highlight(); - return this.results_search(); - } - break; - case 13: - evt.preventDefault(); - if (this.results_showing) { - return this.result_select(); - } - break; - case 27: - if (this.results_showing) { - return this.results_hide(); - } - break; - case 9: - case 38: - case 40: - case 16: - break; - default: - return this.results_search(); - } - }; Chosen.prototype.keydown_checker = function(evt) { var stroke, _ref; stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; @@ -645,16 +846,24 @@ } switch (stroke) { case 8: - return this.backstroke_length = this.search_field.value.length; + this.backstroke_length = this.search_field.value.length; + break; case 9: - return this.mouse_on_container = false; + if (this.results_showing && !this.is_multiple) { + this.result_select(evt); + } + this.mouse_on_container = false; + break; case 13: - return evt.preventDefault(); + evt.preventDefault(); + break; case 38: evt.preventDefault(); - return this.keyup_arrow(); + this.keyup_arrow(); + break; case 40: - return this.keydown_arrow(); + this.keydown_arrow(); + break; } }; Chosen.prototype.search_field_scale = function() { @@ -689,16 +898,11 @@ return Chosen; })(); root.Chosen = Chosen; - document.observe('dom:loaded', function(evt) { - var select, selects, _i, _len, _results; - selects = $$(".chzn-select"); - _results = []; - for (_i = 0, _len = selects.length; _i < _len; _i++) { - select = selects[_i]; - _results.push(new Chosen(select)); + if (Prototype.Browser.IE) { + if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { + Prototype.BrowserFeatures['Version'] = new Number(RegExp.$1); } - return _results; - }); + } get_side_border_padding = function(elmt) { var layout, side_border_padding; layout = new Element.Layout(elmt); @@ -706,75 +910,3 @@ }; root.get_side_border_padding = get_side_border_padding; }).call(this); -(function() { - var SelectParser; - SelectParser = (function() { - function SelectParser() { - this.options_index = 0; - this.parsed = []; - } - SelectParser.prototype.add_node = function(child) { - if (child.nodeName === "OPTGROUP") { - return this.add_group(child); - } else { - return this.add_option(child); - } - }; - SelectParser.prototype.add_group = function(group) { - var group_position, option, _i, _len, _ref, _results; - group_position = this.parsed.length; - this.parsed.push({ - array_index: group_position, - group: true, - label: group.label, - children: 0, - disabled: group.disabled - }); - _ref = group.childNodes; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - option = _ref[_i]; - _results.push(this.add_option(option, group_position, group.disabled)); - } - return _results; - }; - SelectParser.prototype.add_option = function(option, group_position, group_disabled) { - if (option.nodeName === "OPTION") { - if (option.text !== "") { - if (group_position != null) { - this.parsed[group_position].children += 1; - } - this.parsed.push({ - array_index: this.parsed.length, - options_index: this.options_index, - value: option.value, - text: option.text, - html: option.innerHTML, - selected: option.selected, - disabled: group_disabled === true ? group_disabled : option.disabled, - group_array_index: group_position - }); - } else { - this.parsed.push({ - array_index: this.parsed.length, - options_index: this.options_index, - empty: true - }); - } - return this.options_index += 1; - } - }; - return SelectParser; - })(); - SelectParser.select_to_array = function(select) { - var child, parser, _i, _len, _ref; - parser = new SelectParser(); - _ref = select.childNodes; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - child = _ref[_i]; - parser.add_node(child); - } - return parser.parsed; - }; - this.SelectParser = SelectParser; -}).call(this); diff --git a/admin/thirdparty/chosen/chosen/chosen.proto.min.js b/admin/thirdparty/chosen/chosen/chosen.proto.min.js index 7e4688ba1..d0f68d0b3 100644 --- a/admin/thirdparty/chosen/chosen/chosen.proto.min.js +++ b/admin/thirdparty/chosen/chosen/chosen.proto.min.js @@ -1,10 +1,10 @@ // Chosen, a Select Box Enhancer for jQuery and Protoype // by Patrick Filler for Harvest, http://getharvest.com // -// Version 0.9.1 +// Version 0.9.5 // Full source at https://github.com/harvesthq/chosen // Copyright (c) 2011 Harvest http://getharvest.com // MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md // This file is generated by `cake build`, do not edit it by hand. -(function(){var a,b,c,d=function(a,b){return function(){return a.apply(b,arguments)}};c=this,a=function(){function a(a){this.set_default_values(),this.form_field=a,this.is_multiple=this.form_field.multiple,this.is_rtl=this.form_field.hasClassName("chzn-rtl"),this.default_text_default=this.form_field.multiple?"Select Some Options":"Select an Option",this.set_up_html(),this.register_observers(),this.form_field.addClassName("chzn-done")}a.prototype.set_default_values=function(){this.click_test_action=d(function(a){return this.test_active_click(a)},this),this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.result_single_selected=null,this.choices=0,this.single_temp=new Template('#{default}
                  '),this.multi_temp=new Template('
                    '),this.choice_temp=new Template('
                  • #{choice}
                  • ');return this.no_results_temp=new Template('
                  • No results match "#{terms}"
                  • ')},a.prototype.set_up_html=function(){var a,c,d,e,f;this.container_id=this.form_field.identify().replace(/(:|\.)/g,"_")+"_chzn",this.f_width=this.form_field.getStyle("width")?parseInt(this.form_field.getStyle("width"),10):this.form_field.getWidth(),c={id:this.container_id,"class":"chzn-container "+(this.is_rtl?"chzn-rtl":""),style:"width: "+this.f_width+"px"},this.default_text=this.form_field.readAttribute("data-placeholder")?this.form_field.readAttribute("data-placeholder"):this.default_text_default,a=this.is_multiple?(new Element("div",c)).update(this.multi_temp.evaluate({"default":this.default_text})):(new Element("div",c)).update(this.single_temp.evaluate({"default":this.default_text})),this.form_field.hide().insert({after:a}),this.container=$(this.container_id),this.container.addClassName("chzn-container-"+(this.is_multiple?"multi":"single")),this.dropdown=this.container.down("div.chzn-drop"),d=this.container.getHeight(),e=this.f_width-b(this.dropdown),this.dropdown.setStyle({width:e+"px",top:d+"px"}),this.search_field=this.container.down("input"),this.search_results=this.container.down("ul.chzn-results"),this.search_field_scale(),this.search_no_results=this.container.down("li.no-results"),this.is_multiple?(this.search_choices=this.container.down("ul.chzn-choices"),this.search_container=this.container.down("li.search-field")):(this.search_container=this.container.down("div.chzn-search"),this.selected_item=this.container.down(".chzn-single"),f=e-b(this.search_container)-b(this.search_field),this.search_field.setStyle({width:f+"px"})),this.results_build();return this.set_tab_index()},a.prototype.register_observers=function(){this.container.observe("click",d(function(a){return this.container_click(a)},this)),this.container.observe("mouseenter",d(function(a){return this.mouse_enter(a)},this)),this.container.observe("mouseleave",d(function(a){return this.mouse_leave(a)},this)),this.search_results.observe("click",d(function(a){return this.search_results_click(a)},this)),this.search_results.observe("mouseover",d(function(a){return this.search_results_mouseover(a)},this)),this.search_results.observe("mouseout",d(function(a){return this.search_results_mouseout(a)},this)),this.form_field.observe("liszt:updated",d(function(a){return this.results_update_field(a)},this)),this.search_field.observe("blur",d(function(a){return this.input_blur(a)},this)),this.search_field.observe("keyup",d(function(a){return this.keyup_checker(a)},this)),this.search_field.observe("keydown",d(function(a){return this.keydown_checker(a)},this));if(this.is_multiple){this.search_choices.observe("click",d(function(a){return this.choices_click(a)},this));return this.search_field.observe("focus",d(function(a){return this.input_focus(a)},this))}return this.selected_item.observe("focus",d(function(a){return this.activate_field(a)},this))},a.prototype.container_click=function(a){a&&a.type==="click"&&a.stop();if(!this.pending_destroy_click){this.active_field?!this.is_multiple&&a&&(a.target===this.selected_item||a.target.up("a.chzn-single"))&&this.results_toggle():(this.is_multiple&&this.search_field.clear(),document.observe("click",this.click_test_action),this.results_show());return this.activate_field()}return this.pending_destroy_click=!1},a.prototype.mouse_enter=function(){return this.mouse_on_container=!0},a.prototype.mouse_leave=function(){return this.mouse_on_container=!1},a.prototype.input_focus=function(a){if(!this.active_field)return setTimeout(this.container_click.bind(this),50)},a.prototype.input_blur=function(a){if(!this.mouse_on_container){this.active_field=!1;return setTimeout(this.blur_test.bind(this),100)}},a.prototype.blur_test=function(a){if(!this.active_field&&this.container.hasClassName("chzn-container-active"))return this.close_field()},a.prototype.close_field=function(){document.stopObserving("click",this.click_test_action),this.is_multiple||(this.selected_item.tabIndex=this.search_field.tabIndex,this.search_field.tabIndex=-1),this.active_field=!1,this.results_hide(),this.container.removeClassName("chzn-container-active"),this.winnow_results_clear(),this.clear_backstroke(),this.show_search_field_default();return this.search_field_scale()},a.prototype.activate_field=function(){!this.is_multiple&&!this.active_field&&(this.search_field.tabIndex=this.selected_item.tabIndex,this.selected_item.tabIndex=-1),this.container.addClassName("chzn-container-active"),this.active_field=!0,this.search_field.value=this.search_field.value;return this.search_field.focus()},a.prototype.test_active_click=function(a){return a.target.up("#"+this.container_id)?this.active_field=!0:this.close_field()},a.prototype.results_build=function(){var a,b,d,e,f,g;d=new Date,this.parsing=!0,this.results_data=c.SelectParser.select_to_array(this.form_field),this.is_multiple&&this.choices>0?(this.search_choices.select("li.search-choice").invoke("remove"),this.choices=0):this.is_multiple||this.selected_item.down("span").update(this.default_text),a="",g=this.results_data;for(e=0,f=g.length;e'+a.label.escapeHTML()+""}return""},a.prototype.result_add_option=function(a){var b;if(!a.disabled){a.dom_id=this.container_id+"_o_"+a.array_index,b=a.selected&&this.is_multiple?[]:["active-result"],a.selected&&b.push("result-selected"),a.group_array_index!=null&&b.push("group-option");return'
                  • '+a.html+"
                  • "}return""},a.prototype.results_update_field=function(){this.result_clear_highlight(),this.result_single_selected=null;return this.results_build()},a.prototype.result_do_highlight=function(a){var b,c,d,e,f;this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClassName("highlighted"),d=parseInt(this.search_results.getStyle("maxHeight"),10),f=this.search_results.scrollTop,e=d+f,c=this.result_highlight.positionedOffset().top,b=c+this.result_highlight.getHeight();if(b>=e)return this.search_results.scrollTop=b-d>0?b-d:0;if(c0&&this.search_field.value.length<1&&this.results_hide(),this.result_deselect(a.readAttribute("rel"));return a.up("li").remove()},a.prototype.result_select=function(){var a,b,c;if(this.result_highlight){a=this.result_highlight,this.result_clear_highlight(),a.addClassName("result-selected"),this.is_multiple?this.result_deactivate(a):this.result_single_selected=a,c=a.id.substr(a.id.lastIndexOf("_")+1),b=this.results_data[c],b.selected=!0,this.form_field.options[b.options_index].selected=!0,this.is_multiple?this.choice_build(b):this.selected_item.down("span").update(b.html),this.results_hide(),this.search_field.value="",typeof Event.simulate=="function"&&this.form_field.simulate("change");return this.search_field_scale()}},a.prototype.result_activate=function(a){return a.addClassName("active-result").show()},a.prototype.result_deactivate=function(a){return a.removeClassName("active-result").hide()},a.prototype.result_deselect=function(a){var b,c;c=this.results_data[a],c.selected=!1,this.form_field.options[c.options_index].selected=!1,b=$(this.container_id+"_o_"+a),b.removeClassName("result-selected").addClassName("active-result").show(),this.result_clear_highlight(),this.winnow_results(),typeof Event.simulate=="function"&&this.form_field.simulate("change");return this.search_field_scale()},a.prototype.results_search=function(a){return this.results_showing?this.winnow_results():this.results_show()},a.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;i=new Date,this.no_results_clear(),g=0,h=this.search_field.value===this.default_text?"":this.search_field.value.strip().escapeHTML(),e=new RegExp("^"+h.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),l=new RegExp(h.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),q=this.results_data;for(m=0,o=q.length;m=0||b.html.indexOf("[")===0){d=b.html.replace(/\[|\]/g,"").split(" ");if(d.length)for(n=0,p=d.length;n"+b.html.substr(j+h.length),k=k.substr(0,j)+""+k.substr(j)):k=b.html,$(f).innerHTML!==k&&$(f).update(k),this.result_activate($(f)),b.group_array_index!=null&&$(this.results_data[b.group_array_index].dom_id).show()):($(f)===this.result_highlight&&this.result_clear_highlight(),this.result_deactivate($(f)))}}return g<1&&h.length?this.no_results(h):this.winnow_results_set_highlight()},a.prototype.winnow_results_clear=function(){var a,b,c,d,e;this.search_field.clear(),b=this.search_results.select("li"),e=[];for(c=0,d=b.length;c0&&this.results_hide();return this.result_clear_highlight()}},a.prototype.keydown_backstroke=function(){if(this.pending_backstroke){this.choice_destroy(this.pending_backstroke.down("a"));return this.clear_backstroke()}this.pending_backstroke=this.search_container.siblings("li.search-choice").last();return this.pending_backstroke.addClassName("search-choice-focus")},a.prototype.clear_backstroke=function(){this.pending_backstroke&&this.pending_backstroke.removeClassName("search-choice-focus");return this.pending_backstroke=null},a.prototype.keyup_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale();switch(b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0)return this.keydown_backstroke();if(!this.pending_backstroke){this.result_clear_highlight();return this.results_search()}break;case 13:a.preventDefault();if(this.results_showing)return this.result_select();break;case 27:if(this.results_showing)return this.results_hide();break;case 9:case 38:case 40:case 16:break;default:return this.results_search()}},a.prototype.keydown_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale(),b!==8&&this.pending_backstroke&&this.clear_backstroke();switch(b){case 8:return this.backstroke_length=this.search_field.value.length;case 9:return this.mouse_on_container=!1;case 13:return a.preventDefault();case 38:a.preventDefault();return this.keyup_arrow();case 40:return this.keydown_arrow()}},a.prototype.search_field_scale=function(){var a,b,c,d,e,f,g,h,i;if(this.is_multiple){c=0,g=0,e="position:absolute; left: -1000px; top: -1000px; display:none;",f=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(h=0,i=f.length;hthis.f_width-10&&(g=this.f_width-10),this.search_field.setStyle({width:g+"px"}),a=this.container.getHeight();return this.dropdown.setStyle({top:a+"px"})}};return a}(),c.Chosen=a,document.observe("dom:loaded",function(b){var c,d,e,f,g;d=$$(".chzn-select"),g=[];for(e=0,f=d.length;e"+a.html+"")},a.prototype.results_update_field=function(){return this.result_clear_highlight(),this.result_single_selected=null,this.results_build()},a.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},a.prototype.results_search=function(a){return this.results_showing?this.winnow_results():this.results_show()},a.prototype.keyup_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale();switch(b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:a.preventDefault();if(this.results_showing)return this.result_select(a);break;case 27:if(this.results_showing)return this.results_hide();break;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},a.prototype.generate_field_id=function(){var a;return a=this.generate_random_id(),this.form_field.id=a,a},a.prototype.generate_random_char=function(){var a,b,c;return a="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ",c=Math.floor(Math.random()*a.length),b=a.substring(c,c+1)},a}(),b.AbstractChosen=a}.call(this),function(){var a,b,c,d=Object.prototype.hasOwnProperty,e=function(a,b){function e(){this.constructor=a}for(var c in b)d.call(b,c)&&(a[c]=b[c]);return e.prototype=b.prototype,a.prototype=new e,a.__super__=b.prototype,a},f=function(a,b){return function(){return a.apply(b,arguments)}};c=this,a=function(){function a(){a.__super__.constructor.apply(this,arguments)}return e(a,AbstractChosen),a.prototype.setup=function(){return this.is_rtl=this.form_field.hasClassName("chzn-rtl")},a.prototype.finish_setup=function(){return this.form_field.addClassName("chzn-done")},a.prototype.set_default_values=function(){return a.__super__.set_default_values.call(this),this.single_temp=new Template('#{default}
                      '),this.multi_temp=new Template('
                        '),this.choice_temp=new Template('
                      • #{choice}
                      • '),this.no_results_temp=new Template('
                      • '+this.results_none_found+' "#{terms}"
                      • ')},a.prototype.set_up_html=function(){var a,c,d,e,f;return this.container_id=this.form_field.identify().replace(/(:|\.)/g,"_")+"_chzn",this.f_width=this.form_field.getStyle("width")?parseInt(this.form_field.getStyle("width"),10):this.form_field.getWidth(),c={id:this.container_id,"class":"chzn-container"+(this.is_rtl?" chzn-rtl":""),style:"width: "+this.f_width+"px"},this.default_text=this.form_field.readAttribute("data-placeholder")?this.form_field.readAttribute("data-placeholder"):this.default_text_default,a=this.is_multiple?(new Element("div",c)).update(this.multi_temp.evaluate({"default":this.default_text})):(new Element("div",c)).update(this.single_temp.evaluate({"default":this.default_text})),this.form_field.hide().insert({after:a}),this.container=$(this.container_id),this.container.addClassName("chzn-container-"+(this.is_multiple?"multi":"single")),this.dropdown=this.container.down("div.chzn-drop"),d=this.container.getHeight(),e=this.f_width-b(this.dropdown),this.dropdown.setStyle({width:e+"px",top:d+"px"}),this.search_field=this.container.down("input"),this.search_results=this.container.down("ul.chzn-results"),this.search_field_scale(),this.search_no_results=this.container.down("li.no-results"),this.is_multiple?(this.search_choices=this.container.down("ul.chzn-choices"),this.search_container=this.container.down("li.search-field")):(this.search_container=this.container.down("div.chzn-search"),this.selected_item=this.container.down(".chzn-single"),f=e-b(this.search_container)-b(this.search_field),this.search_field.setStyle({width:f+"px"})),this.results_build(),this.set_tab_index(),this.form_field.fire("liszt:ready",{chosen:this})},a.prototype.register_observers=function(){this.container.observe("mousedown",f(function(a){return this.container_mousedown(a)},this)),this.container.observe("mouseup",f(function(a){return this.container_mouseup(a)},this)),this.container.observe("mouseenter",f(function(a){return this.mouse_enter(a)},this)),this.container.observe("mouseleave",f(function(a){return this.mouse_leave(a)},this)),this.search_results.observe("mouseup",f(function(a){return this.search_results_mouseup(a)},this)),this.search_results.observe("mouseover",f(function(a){return this.search_results_mouseover(a)},this)),this.search_results.observe("mouseout",f(function(a){return this.search_results_mouseout(a)},this)),this.form_field.observe("liszt:updated",f(function(a){return this.results_update_field(a)},this)),this.search_field.observe("blur",f(function(a){return this.input_blur(a)},this)),this.search_field.observe("keyup",f(function(a){return this.keyup_checker(a)},this)),this.search_field.observe("keydown",f(function(a){return this.keydown_checker(a)},this));if(this.is_multiple)return this.search_choices.observe("click",f(function(a){return this.choices_click(a)},this)),this.search_field.observe("focus",f(function(a){return this.input_focus(a)},this))},a.prototype.search_field_disabled=function(){this.is_disabled=this.form_field.disabled;if(this.is_disabled)return this.container.addClassName("chzn-disabled"),this.search_field.disabled=!0,this.is_multiple||this.selected_item.stopObserving("focus",this.activate_action),this.close_field();this.container.removeClassName("chzn-disabled"),this.search_field.disabled=!1;if(!this.is_multiple)return this.selected_item.observe("focus",this.activate_action)},a.prototype.container_mousedown=function(a){var b;if(!this.is_disabled)return b=a!=null?a.target.hasClassName("search-choice-close"):!1,a&&a.type==="mousedown"&&a.stop(),!this.pending_destroy_click&&!b?(this.active_field?!this.is_multiple&&a&&(a.target===this.selected_item||a.target.up("a.chzn-single"))&&this.results_toggle():(this.is_multiple&&this.search_field.clear(),document.observe("click",this.click_test_action),this.results_show()),this.activate_field()):this.pending_destroy_click=!1},a.prototype.container_mouseup=function(a){if(a.target.nodeName==="ABBR")return this.results_reset(a)},a.prototype.blur_test=function(a){if(!this.active_field&&this.container.hasClassName("chzn-container-active"))return this.close_field()},a.prototype.close_field=function(){return document.stopObserving("click",this.click_test_action),this.is_multiple||(this.selected_item.tabIndex=this.search_field.tabIndex,this.search_field.tabIndex=-1),this.active_field=!1,this.results_hide(),this.container.removeClassName("chzn-container-active"),this.winnow_results_clear(),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},a.prototype.activate_field=function(){return!this.is_multiple&&!this.active_field&&(this.search_field.tabIndex=this.selected_item.tabIndex,this.selected_item.tabIndex=-1),this.container.addClassName("chzn-container-active"),this.active_field=!0,this.search_field.value=this.search_field.value,this.search_field.focus()},a.prototype.test_active_click=function(a){return a.target.up("#"+this.container_id)?this.active_field=!0:this.close_field()},a.prototype.results_build=function(){var a,b,d,e,f;this.parsing=!0,this.results_data=c.SelectParser.select_to_array(this.form_field),this.is_multiple&&this.choices>0?(this.search_choices.select("li.search-choice").invoke("remove"),this.choices=0):this.is_multiple||(this.selected_item.down("span").update(this.default_text),this.form_field.options.length>this.disable_search_threshold?this.container.removeClassName("chzn-container-single-nosearch"):this.container.addClassName("chzn-container-single-nosearch")),a="",f=this.results_data;for(d=0,e=f.length;d'+a.label.escapeHTML()+"")},a.prototype.result_do_highlight=function(a){var b,c,d,e,f;this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClassName("highlighted"),d=parseInt(this.search_results.getStyle("maxHeight"),10),f=this.search_results.scrollTop,e=d+f,c=this.result_highlight.positionedOffset().top,b=c+this.result_highlight.getHeight();if(b>=e)return this.search_results.scrollTop=b-d>0?b-d:0;if(c0&&this.search_field.value.length<1&&this.results_hide(),this.result_deselect(a.readAttribute("rel")),a.up("li").remove()},a.prototype.results_reset=function(a){this.form_field.options[0].selected=!0,this.selected_item.down("span").update(this.default_text),this.show_search_field_default(),a.target.remove(),typeof Event.simulate=="function"&&this.form_field.simulate("change");if(this.active_field)return this.results_hide()},a.prototype.result_select=function(a){var b,c,d;if(this.result_highlight)return b=this.result_highlight,this.result_clear_highlight(),this.is_multiple?this.result_deactivate(b):(this.search_results.descendants(".result-selected").invoke("removeClassName","result-selected"),this.result_single_selected=b),b.addClassName("result-selected"),d=b.id.substr(b.id.lastIndexOf("_")+1),c=this.results_data[d],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.is_multiple?this.choice_build(c):(this.selected_item.down("span").update(c.html),this.allow_single_deselect&&this.single_deselect_control_build()),(!a.metaKey||!this.is_multiple)&&this.results_hide(),this.search_field.value="",typeof Event.simulate=="function"&&this.form_field.simulate("change"),this.search_field_scale()},a.prototype.result_activate=function(a){return a.addClassName("active-result")},a.prototype.result_deactivate=function(a){return a.removeClassName("active-result")},a.prototype.result_deselect=function(a){var b,c;return c=this.results_data[a],c.selected=!1,this.form_field.options[c.options_index].selected=!1,b=$(this.container_id+"_o_"+a),b.removeClassName("result-selected").addClassName("active-result").show(),this.result_clear_highlight(),this.winnow_results(),typeof Event.simulate=="function"&&this.form_field.simulate("change"),this.search_field_scale()},a.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect&&!this.selected_item.down("abbr"))return this.selected_item.down("span").insert({after:''})},a.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;this.no_results_clear(),g=0,h=this.search_field.value===this.default_text?"":this.search_field.value.strip().escapeHTML(),e=new RegExp("^"+h.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),k=new RegExp(h.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),p=this.results_data;for(l=0,n=p.length;l=0||b.html.indexOf("[")===0){d=b.html.replace(/\[|\]/g,"").split(" ");if(d.length)for(m=0,o=d.length;m"+b.html.substr(i+h.length),j=j.substr(0,i)+""+j.substr(i)):j=b.html,$(f).innerHTML!==j&&$(f).update(j),this.result_activate($(f)),b.group_array_index!=null&&$(this.results_data[b.group_array_index].dom_id).setStyle({display:"list-item"})):($(f)===this.result_highlight&&this.result_clear_highlight(),this.result_deactivate($(f)))}}return g<1&&h.length?this.no_results(h):this.winnow_results_set_highlight()},a.prototype.winnow_results_clear=function(){var a,b,c,d,e;this.search_field.clear(),b=this.search_results.select("li"),e=[];for(c=0,d=b.length;c0&&this.results_hide(),this.result_clear_highlight())},a.prototype.keydown_backstroke=function(){return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.down("a")),this.clear_backstroke()):(this.pending_backstroke=this.search_container.siblings("li.search-choice").last(),this.pending_backstroke.addClassName("search-choice-focus"))},a.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClassName("search-choice-focus"),this.pending_backstroke=null},a.prototype.keydown_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale(),b!==8&&this.pending_backstroke&&this.clear_backstroke();switch(b){case 8:this.backstroke_length=this.search_field.value.length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:this.keydown_arrow()}},a.prototype.search_field_scale=function(){var a,b,c,d,e,f,g,h,i;if(this.is_multiple){c=0,g=0,e="position:absolute; left: -1000px; top: -1000px; display:none;",f=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(h=0,i=f.length;hthis.f_width-10&&(g=this.f_width-10),this.search_field.setStyle({width:g+"px"}),a=this.container.getHeight(),this.dropdown.setStyle({top:a+"px"})}},a}(),c.Chosen=a,Prototype.Browser.IE&&/MSIE (\d+\.\d+);/.test(navigator.userAgent)&&(Prototype.BrowserFeatures.Version=new Number(RegExp.$1)),b=function(a){var b,c;return b=new Element.Layout(a),c=b.get("border-left")+b.get("border-right")+b.get("padding-left")+b.get("padding-right")},c.get_side_border_padding=b}.call(this) \ No newline at end of file diff --git a/admin/thirdparty/chosen/coffee/chosen.jquery.coffee b/admin/thirdparty/chosen/coffee/chosen.jquery.coffee index ad64e6e09..56b3b3f9f 100644 --- a/admin/thirdparty/chosen/coffee/chosen.jquery.coffee +++ b/admin/thirdparty/chosen/coffee/chosen.jquery.coffee @@ -6,49 +6,34 @@ root = this $ = jQuery $.fn.extend({ - chosen: (data, options) -> + chosen: (options) -> + # Do no harm and return as soon as possible for unsupported browsers, namely IE6 and IE7 + return this if $.browser.msie and ($.browser.version is "6.0" or $.browser.version is "7.0") $(this).each((input_field) -> - new Chosen(this, data, options) unless ($ this).hasClass "chzn-done" + new Chosen(this, options) unless ($ this).hasClass "chzn-done" ) -}) +}) -class Chosen +class Chosen extends AbstractChosen - constructor: (elmn) -> - this.set_default_values() - - @form_field = elmn + setup: -> @form_field_jq = $ @form_field - @is_multiple = @form_field.multiple @is_rtl = @form_field_jq.hasClass "chzn-rtl" - @default_text_default = if @form_field.multiple then "Select Some Options" else "Select an Option" - - this.set_up_html() - this.register_observers() + finish_setup: -> @form_field_jq.addClass "chzn-done" - 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 - set_up_html: -> @container_id = if @form_field.id.length then @form_field.id.replace(/(:|\.)/g, '_') else this.generate_field_id() @container_id += "_chzn" - @f_width = @form_field_jq.width() + @f_width = @form_field_jq.outerWidth() @default_text = if @form_field_jq.data 'placeholder' then @form_field_jq.data 'placeholder' else @default_text_default container_div = ($ "
                        ", { id: @container_id - class: "chzn-container #{ if @is_rtl then 'chzn-rtl' else '' }" + class: "chzn-container#{ if @is_rtl then ' chzn-rtl' else '' }" style: 'width: ' + (@f_width) + 'px;' #use parens around @f_width so coffeescript doesn't think + ' px' is a function parameter }) @@ -84,14 +69,15 @@ class Chosen this.results_build() this.set_tab_index() - + @form_field_jq.trigger("liszt:ready", {chosen: this}) register_observers: -> - @container.click (evt) => this.container_click(evt) + @container.mousedown (evt) => this.container_mousedown(evt) + @container.mouseup (evt) => this.container_mouseup(evt) @container.mouseenter (evt) => this.mouse_enter(evt) @container.mouseleave (evt) => this.mouse_leave(evt) - @search_results.click (evt) => this.search_results_click(evt) + @search_results.mouseup (evt) => this.search_results_mouseup(evt) @search_results.mouseover (evt) => this.search_results_mouseover(evt) @search_results.mouseout (evt) => this.search_results_mouseout(evt) @@ -104,35 +90,39 @@ class Chosen if @is_multiple @search_choices.click (evt) => this.choices_click(evt) @search_field.focus (evt) => this.input_focus(evt) + + search_field_disabled: -> + @is_disabled = @form_field_jq[0].disabled + if(@is_disabled) + @container.addClass 'chzn-disabled' + @search_field[0].disabled = true + @selected_item.unbind "focus", @activate_action if !@is_multiple + this.close_field() else - @selected_item.focus (evt) => this.activate_field(evt) + @container.removeClass 'chzn-disabled' + @search_field[0].disabled = false + @selected_item.bind "focus", @activate_action if !@is_multiple - container_click: (evt) -> - if evt and evt.type is "click" - evt.stopPropagation() - if not @pending_destroy_click - if not @active_field - @search_field.val "" if @is_multiple - $(document).click @click_test_action - this.results_show() - else if not @is_multiple and evt and ($(evt.target) is @selected_item || $(evt.target).parents("a.chzn-single").length) - evt.preventDefault() - this.results_toggle() + container_mousedown: (evt) -> + if !@is_disabled + target_closelink = if evt? then ($ evt.target).hasClass "search-choice-close" else false + if evt and evt.type is "mousedown" + evt.stopPropagation() + if not @pending_destroy_click and not target_closelink + if not @active_field + @search_field.val "" if @is_multiple + $(document).click @click_test_action + this.results_show() + else if not @is_multiple and evt and (($(evt.target)[0] == @selected_item[0]) || $(evt.target).parents("a.chzn-single").length) + evt.preventDefault() + this.results_toggle() - this.activate_field() - else - @pending_destroy_click = false + this.activate_field() + else + @pending_destroy_click = false - mouse_enter: -> @mouse_on_container = true - mouse_leave: -> @mouse_on_container = false - - input_focus: (evt) -> - setTimeout (=> this.container_click()), 50 unless @active_field - - input_blur: (evt) -> - if not @mouse_on_container - @active_field = false - setTimeout (=> this.blur_test()), 100 + container_mouseup: (evt) -> + this.results_reset(evt) if evt.target.nodeName is "ABBR" blur_test: (evt) -> this.close_field() if not @active_field and @container.hasClass "chzn-container-active" @@ -173,7 +163,6 @@ class Chosen this.close_field() results_build: -> - startTime = new Date() @parsing = true @results_data = root.SelectParser.select_to_array @form_field @@ -182,6 +171,10 @@ class Chosen @choices = 0 else if not @is_multiple @selected_item.find("span").text @default_text + if @form_field.options.length <= @disable_search_threshold + @container.addClass "chzn-container-single-nosearch" + else + @container.removeClass "chzn-container-single-nosearch" content = '' for data in @results_data @@ -193,7 +186,9 @@ class Chosen this.choice_build data else if data.selected and not @is_multiple @selected_item.find("span").text data.text + this.single_deselect_control_build() if @allow_single_deselect + this.search_field_disabled() this.show_search_field_default() this.search_field_scale() @@ -208,23 +203,6 @@ class Chosen 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? - - '
                      • ' + option.html + '
                      • ' - 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() @@ -248,12 +226,6 @@ class Chosen @result_highlight.removeClass "highlighted" if @result_highlight @result_highlight = null - results_toggle: -> - if @results_showing - this.results_hide() - else - this.results_show() - results_show: -> if not @is_multiple @selected_item.addClass "chzn-single-with-drop" @@ -295,11 +267,11 @@ class Chosen @search_field.val("") @search_field.removeClass "default" - search_results_click: (evt) -> + search_results_mouseup: (evt) -> target = if $(evt.target).hasClass "active-result" then $(evt.target) else $(evt.target).parents(".active-result").first() if target.length @result_highlight = target - this.result_select() + this.result_select(evt) search_results_mouseover: (evt) -> target = if $(evt.target).hasClass "active-result" then $(evt.target) else $(evt.target).parents(".active-result").first() @@ -323,8 +295,11 @@ class Chosen choice_destroy_link_click: (evt) -> evt.preventDefault() - @pending_destroy_click = true - this.choice_destroy $(evt.target) + if not @is_disabled + @pending_destroy_click = true + this.choice_destroy $(evt.target) + else + evt.stopPropagation choice_destroy: (link) -> @choices -= 1 @@ -335,20 +310,29 @@ class Chosen this.result_deselect (link.attr "rel") link.parents('li').first().remove() - result_select: -> + results_reset: (evt) -> + @form_field.options[0].selected = true + @selected_item.find("span").text @default_text + this.show_search_field_default() + $(evt.target).remove(); + @form_field_jq.trigger "change" + this.results_hide() if @active_field + + result_select: (evt) -> if @result_highlight high = @result_highlight high_id = high.attr "id" this.result_clear_highlight() - high.addClass "result-selected" - if @is_multiple this.result_deactivate high else + @search_results.find(".result-selected").removeClass "result-selected" @result_single_selected = high + high.addClass "result-selected" + position = high_id.substr(high_id.lastIndexOf("_") + 1 ) item = @results_data[position] item.selected = true @@ -359,18 +343,20 @@ class Chosen this.choice_build item else @selected_item.find("span").first().text item.text + this.single_deselect_control_build() if @allow_single_deselect + + this.results_hide() unless evt.metaKey and @is_multiple - this.results_hide() @search_field.val "" @form_field_jq.trigger "change" this.search_field_scale() result_activate: (el) -> - el.addClass("active-result").show() + el.addClass("active-result") result_deactivate: (el) -> - el.removeClass("active-result").hide() + el.removeClass("active-result") result_deselect: (pos) -> result_data = @results_data[pos] @@ -386,14 +372,10 @@ class Chosen @form_field_jq.trigger "change" this.search_field_scale() - results_search: (evt) -> - if @results_showing - this.winnow_results() - else - this.results_show() + single_deselect_control_build: -> + @selected_item.find("span").first().after "" if @allow_single_deselect and @selected_item.find("abbr").length < 1 winnow_results: -> - startTime = new Date() this.no_results_clear() results = 0 @@ -405,10 +387,11 @@ class Chosen for option in @results_data if not option.disabled and not option.empty if option.group - $('#' + option.dom_id).hide() + $('#' + option.dom_id).css('display', 'none') 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 @@ -429,16 +412,15 @@ class Chosen text = text.substr(0, startpos) + '' + text.substr(startpos) else text = option.html + + result.html(text) + this.result_activate result - $("#" + result_id).html text if $("#" + result_id).html != text - - this.result_activate $("#" + result_id) - - $("#" + @results_data[option.group_array_index].dom_id).show() if option.group_array_index? + $("#" + @results_data[option.group_array_index].dom_id).css('display', 'list-item') if option.group_array_index? else this.result_clear_highlight() if @result_highlight and result_id is @result_highlight.attr 'id' - this.result_deactivate $("#" + result_id) - + this.result_deactivate result + if results < 1 and searchText.length this.no_results searchText else @@ -451,20 +433,20 @@ class Chosen for li in lis li = $(li) if li.hasClass "group-result" - li.show() + li.css('display', 'auto') else if not @is_multiple or not li.hasClass "result-selected" this.result_activate li winnow_results_set_highlight: -> if not @result_highlight - selected_results = if not @is_multiple then @search_results.find(".result-selected") else [] + selected_results = if not @is_multiple then @search_results.find(".result-selected.active-result") else [] do_high = if selected_results.length then selected_results.first() else @search_results.find(".active-result").first() this.result_do_highlight do_high if do_high? no_results: (terms) -> - no_results_html = $('
                      • No results match ""
                      • ') + no_results_html = $('
                      • ' + @results_none_found + ' ""
                      • ') no_results_html.find("span").first().html(terms) @search_results.append no_results_html @@ -505,31 +487,10 @@ class Chosen @pending_backstroke.removeClass "search-choice-focus" if @pending_backstroke @pending_backstroke = null - 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() if this.results_showing - when 27 - this.results_hide() if @results_showing - when 9, 38, 40, 16 - # don't do anything on these keys - else this.results_search() - - keydown_checker: (evt) -> stroke = evt.which ? evt.keyCode this.search_field_scale() - + this.clear_backstroke() if stroke != 8 and this.pending_backstroke switch stroke @@ -537,6 +498,7 @@ class Chosen @backstroke_length = this.search_field.val().length break when 9 + this.result_select(evt) if this.results_showing and not @is_multiple @mouse_on_container = false break when 13 @@ -549,8 +511,7 @@ class Chosen when 40 this.keydown_arrow() break - - + search_field_scale: -> if @is_multiple h = 0 @@ -577,22 +538,12 @@ class Chosen dd_top = @container.height() @dropdown.css({"top": dd_top + "px"}) - generate_field_id: -> - new_id = this.generate_random_id() - @form_field.id = new_id - new_id - generate_random_id: -> string = "sel" + this.generate_random_char() + this.generate_random_char() + this.generate_random_char() while $("#" + string).length > 0 string += this.generate_random_char() string - generate_random_char: -> - chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ"; - rand = Math.floor(Math.random() * chars.length) - newchar = chars.substring rand, rand+1 - get_side_border_padding = (elmt) -> side_border_padding = elmt.outerWidth() - elmt.width() diff --git a/admin/thirdparty/chosen/coffee/chosen.proto.coffee b/admin/thirdparty/chosen/coffee/chosen.proto.coffee index 6c4c8f95b..db747d1fd 100644 --- a/admin/thirdparty/chosen/coffee/chosen.proto.coffee +++ b/admin/thirdparty/chosen/coffee/chosen.proto.coffee @@ -4,38 +4,22 @@ Copyright (c) 2011 by Harvest ### root = this -class Chosen +class Chosen extends AbstractChosen - constructor: (elmn) -> - this.set_default_values() - - @form_field = elmn - @is_multiple = @form_field.multiple + setup: -> @is_rtl = @form_field.hasClassName "chzn-rtl" - @default_text_default = if @form_field.multiple then "Select Some Options" else "Select an Option" - - this.set_up_html() - this.register_observers() + finish_setup: -> @form_field.addClassName "chzn-done" - set_default_values: -> + super() - @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 - # HTML Templates @single_temp = new Template('#{default}
                          ') @multi_temp = new Template('
                            ') @choice_temp = new Template('
                          • #{choice}
                          • ') - @no_results_temp = new Template('
                          • No results match "#{terms}"
                          • ') - + @no_results_temp = new Template('
                          • ' + @results_none_found + ' "#{terms}"
                          • ') set_up_html: -> @container_id = @form_field.identify().replace(/(:|\.)/g, '_') + "_chzn" @@ -44,7 +28,7 @@ class Chosen container_props = 'id': @container_id - 'class': "chzn-container #{ if @is_rtl then 'chzn-rtl' else '' }" + 'class': "chzn-container#{ if @is_rtl then ' chzn-rtl' else '' }" 'style': 'width: ' + (@f_width) + 'px' #use parens around @f_width so coffeescript doesn't think + ' px' is a function parameter @default_text = if @form_field.readAttribute 'data-placeholder' then @form_field.readAttribute 'data-placeholder' else @default_text_default @@ -78,14 +62,15 @@ class Chosen this.results_build() this.set_tab_index() - + @form_field.fire("liszt:ready", {chosen: this}) register_observers: -> - @container.observe "click", (evt) => this.container_click(evt) + @container.observe "mousedown", (evt) => this.container_mousedown(evt) + @container.observe "mouseup", (evt) => this.container_mouseup(evt) @container.observe "mouseenter", (evt) => this.mouse_enter(evt) @container.observe "mouseleave", (evt) => this.mouse_leave(evt) - @search_results.observe "click", (evt) => this.search_results_click(evt) + @search_results.observe "mouseup", (evt) => this.search_results_mouseup(evt) @search_results.observe "mouseover", (evt) => this.search_results_mouseover(evt) @search_results.observe "mouseout", (evt) => this.search_results_mouseout(evt) @@ -98,35 +83,38 @@ class Chosen if @is_multiple @search_choices.observe "click", (evt) => this.choices_click(evt) @search_field.observe "focus", (evt) => this.input_focus(evt) + + search_field_disabled: -> + @is_disabled = @form_field.disabled + if(@is_disabled) + @container.addClassName 'chzn-disabled' + @search_field.disabled = true + @selected_item.stopObserving "focus", @activate_action if !@is_multiple + this.close_field() else - @selected_item.observe "focus", (evt) => this.activate_field(evt) + @container.removeClassName 'chzn-disabled' + @search_field.disabled = false + @selected_item.observe "focus", @activate_action if !@is_multiple + container_mousedown: (evt) -> + if !@is_disabled + target_closelink = if evt? then evt.target.hasClassName "search-choice-close" else false + if evt and evt.type is "mousedown" + evt.stop() + if not @pending_destroy_click and not target_closelink + if not @active_field + @search_field.clear() if @is_multiple + document.observe "click", @click_test_action + this.results_show() + else if not @is_multiple and evt and (evt.target is @selected_item || evt.target.up("a.chzn-single")) + this.results_toggle() - container_click: (evt) -> - if evt and evt.type is "click" - evt.stop() - if not @pending_destroy_click - if not @active_field - @search_field.clear() if @is_multiple - document.observe "click", @click_test_action - this.results_show() - else if not @is_multiple and evt and (evt.target is @selected_item || evt.target.up("a.chzn-single")) - this.results_toggle() - - this.activate_field() - else - @pending_destroy_click = false - - mouse_enter: -> @mouse_on_container = true - mouse_leave: -> @mouse_on_container = false - - input_focus: (evt) -> - setTimeout this.container_click.bind(this), 50 unless @active_field + this.activate_field() + else + @pending_destroy_click = false - input_blur: (evt) -> - if not @mouse_on_container - @active_field = false - setTimeout this.blur_test.bind(this), 100 + container_mouseup: (evt) -> + this.results_reset(evt) if evt.target.nodeName is "ABBR" blur_test: (evt) -> this.close_field() if not @active_field and @container.hasClassName("chzn-container-active") @@ -167,7 +155,6 @@ class Chosen this.close_field() results_build: -> - startTime = new Date() @parsing = true @results_data = root.SelectParser.select_to_array @form_field @@ -176,6 +163,10 @@ class Chosen @choices = 0 else if not @is_multiple @selected_item.down("span").update(@default_text) + if @form_field.options.length <= @disable_search_threshold + @container.addClassName "chzn-container-single-nosearch" + else + @container.removeClassName "chzn-container-single-nosearch" content = '' for data in @results_data @@ -187,7 +178,9 @@ class Chosen this.choice_build data else if data.selected and not @is_multiple @selected_item.down("span").update( data.html ) + this.single_deselect_control_build() if @allow_single_deselect + this.search_field_disabled() this.show_search_field_default() this.search_field_scale() @@ -202,23 +195,6 @@ class Chosen 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? - - '
                          • ' + option.html + '
                          • ' - else - "" - - results_update_field: -> - this.result_clear_highlight() - @result_single_selected = null - this.results_build() - result_do_highlight: (el) -> this.result_clear_highlight() @@ -241,12 +217,6 @@ class Chosen @result_highlight.removeClassName('highlighted') if @result_highlight @result_highlight = null - results_toggle: -> - if @results_showing - this.results_hide() - else - this.results_show() - results_show: -> if not @is_multiple @selected_item.addClassName('chzn-single-with-drop') @@ -288,11 +258,11 @@ class Chosen @search_field.value = "" @search_field.removeClassName "default" - search_results_click: (evt) -> + search_results_mouseup: (evt) -> target = if evt.target.hasClassName("active-result") then evt.target else evt.target.up(".active-result") if target @result_highlight = target - this.result_select() + this.result_select(evt) search_results_mouseover: (evt) -> target = if evt.target.hasClassName("active-result") then evt.target else evt.target.up(".active-result") @@ -320,8 +290,9 @@ class Chosen choice_destroy_link_click: (evt) -> evt.preventDefault() - @pending_destroy_click = true - this.choice_destroy evt.target + if not @is_disabled + @pending_destroy_click = true + this.choice_destroy evt.target choice_destroy: (link) -> @choices -= 1 @@ -332,17 +303,26 @@ class Chosen this.result_deselect link.readAttribute("rel") link.up('li').remove() - result_select: -> + results_reset: (evt) -> + @form_field.options[0].selected = true + @selected_item.down("span").update(@default_text) + this.show_search_field_default() + evt.target.remove() + @form_field.simulate("change") if typeof Event.simulate is 'function' + this.results_hide() if @active_field + + result_select: (evt) -> if @result_highlight high = @result_highlight this.result_clear_highlight() - high.addClassName("result-selected") - if @is_multiple this.result_deactivate high else + @search_results.descendants(".result-selected").invoke "removeClassName", "result-selected" @result_single_selected = high + + high.addClassName("result-selected") position = high.id.substr(high.id.lastIndexOf("_") + 1 ) item = @results_data[position] @@ -354,18 +334,20 @@ class Chosen this.choice_build item else @selected_item.down("span").update(item.html) + this.single_deselect_control_build() if @allow_single_deselect + + this.results_hide() unless evt.metaKey and @is_multiple - this.results_hide() @search_field.value = "" @form_field.simulate("change") if typeof Event.simulate is 'function' this.search_field_scale() result_activate: (el) -> - el.addClassName("active-result").show() + el.addClassName("active-result") result_deactivate: (el) -> - el.removeClassName("active-result").hide() + el.removeClassName("active-result") result_deselect: (pos) -> result_data = @results_data[pos] @@ -380,15 +362,11 @@ class Chosen @form_field.simulate("change") if typeof Event.simulate is 'function' this.search_field_scale() - - results_search: (evt) -> - if @results_showing - this.winnow_results() - else - this.results_show() + + single_deselect_control_build: -> + @selected_item.down("span").insert { after: "" } if @allow_single_deselect and not @selected_item.down("abbr") winnow_results: -> - startTime = new Date() this.no_results_clear() results = 0 @@ -429,7 +407,7 @@ class Chosen this.result_activate $(result_id) - $(@results_data[option.group_array_index].dom_id).show() if option.group_array_index? + $(@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) @@ -453,7 +431,7 @@ class Chosen if not @result_highlight if not @is_multiple - do_high = @search_results.down(".result-selected") + do_high = @search_results.down(".result-selected.active-result") if not do_high? do_high = @search_results.down(".active-result") @@ -505,27 +483,6 @@ class Chosen @pending_backstroke.removeClassName("search-choice-focus") if @pending_backstroke @pending_backstroke = null - 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() if this.results_showing - when 27 - this.results_hide() if @results_showing - when 9, 38, 40, 16 - # don't do anything on these keys - else this.results_search() - - keydown_checker: (evt) -> stroke = evt.which ? evt.keyCode this.search_field_scale() @@ -535,16 +492,21 @@ class Chosen switch stroke when 8 @backstroke_length = this.search_field.value.length + break when 9 + this.result_select(evt) if this.results_showing and not @is_multiple @mouse_on_container = false + break when 13 evt.preventDefault() + break when 38 evt.preventDefault() this.keyup_arrow() + break when 40 this.keydown_arrow() - + break search_field_scale: -> if @is_multiple @@ -573,9 +535,11 @@ class Chosen root.Chosen = Chosen -document.observe 'dom:loaded', (evt) -> - selects = $$(".chzn-select") - new Chosen select for select in selects +# Prototype does not support version numbers so we add it ourselves +if Prototype.Browser.IE + if /MSIE (\d+\.\d+);/.test(navigator.userAgent) + Prototype.BrowserFeatures['Version'] = new Number(RegExp.$1); + get_side_border_padding = (elmt) -> layout = new Element.Layout(elmt) diff --git a/admin/thirdparty/chosen/coffee/lib/abstract-chosen.coffee b/admin/thirdparty/chosen/coffee/lib/abstract-chosen.coffee new file mode 100644 index 000000000..b9ca3315e --- /dev/null +++ b/admin/thirdparty/chosen/coffee/lib/abstract-chosen.coffee @@ -0,0 +1,108 @@ +### +Chosen source: generate output using 'cake build' +Copyright (c) 2011 by Harvest +### +root = this + +class AbstractChosen + + constructor: (@form_field, @options={}) -> + this.set_default_values() + + @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) + @activate_action = (evt) => this.activate_field(evt) + @active_field = false + @mouse_on_container = false + @results_showing = false + @result_highlighted = null + @result_single_selected = null + @allow_single_deselect = if @options.allow_single_deselect? and @form_field.options[0]? and @form_field.options[0].text is "" then @options.allow_single_deselect else false + @disable_search_threshold = @options.disable_search_threshold || 0 + @choices = 0 + @results_none_found = @options.no_results_text or "No results match" + + 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? + classes.push option.classes if option.classes != "" + + style = if option.style.cssText != "" then " style=\"#{option.style}\"" else "" + + '
                          • ' + option.html + '
                          • ' + 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 diff --git a/admin/thirdparty/chosen/coffee/lib/select-parser.coffee b/admin/thirdparty/chosen/coffee/lib/select-parser.coffee index 69f9bd717..82b6ce1cc 100644 --- a/admin/thirdparty/chosen/coffee/lib/select-parser.coffee +++ b/admin/thirdparty/chosen/coffee/lib/select-parser.coffee @@ -34,6 +34,8 @@ class SelectParser 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 diff --git a/admin/thirdparty/chosen/example.jquery.html b/admin/thirdparty/chosen/example.jquery.html index c1e8a2486..7d36dcbc2 100644 --- a/admin/thirdparty/chosen/example.jquery.html +++ b/admin/thirdparty/chosen/example.jquery.html @@ -50,6 +50,7 @@ +

                            Chosen

                            Chosen is a JavaScript plugin for Prototype and jQuery that makes long, unwieldy select boxes much more user-friendly. For more information (including usage, explanation and faqs), check out the online documentation.

                            @@ -1063,7 +1064,7 @@ Single Select with Groups - + @@ -1187,8 +1188,8 @@
                            - Multiple Select with Groups - @@ -1205,9 +1206,35 @@

                            Default Text Support

                            Chosen automatically sets the default field text ("Choose a country...") by reading the select element's data-placeholder value. If no data-placeholder value is present, it will default to "Select Some Option" or "Select Some Options" depending on whether the select is single or multiple. You can change these elements in the plugin js file as you see fit.

                            - <select data-placehoder="Choose a country..." style="width:350px;" multiple class="chzn-select"> + <select data-placeholder="Choose a country..." style="width:350px;" multiple class="chzn-select">

                            Note: on single selects, the first element is assumed to be selected by the browser. To take advantage of the default text support, you will need to include a blank option as the first element of your select list.

                            + +

                            No Results Text Support

                            +
                            +

                            Setting the "No results" search text is as easy as passing an option when you create Chosen:

                            + + $(".chzn-select").chosen({no_results_text: "No results matched"}); + +
                            + +

                            Allow Deselect on Single Selects

                            +
                            +

                            When a single select box isn't a required field, you can set allow_single_deselect: true and Chosen will add a UI element for option deselection. This will only work if the first option has blank text.

                            +
                            + +
                            +

                            Right to Left Support

                            @@ -1268,7 +1295,8 @@
                            - + - + + diff --git a/admin/thirdparty/chosen/example.html b/admin/thirdparty/chosen/example.proto.html similarity index 97% rename from admin/thirdparty/chosen/example.html rename to admin/thirdparty/chosen/example.proto.html index f36e4fcdf..daddecbb2 100644 --- a/admin/thirdparty/chosen/example.html +++ b/admin/thirdparty/chosen/example.proto.html @@ -1063,7 +1063,7 @@ Single Select with Groups - + @@ -1187,7 +1187,7 @@
                            - Multiple Select with Groups + Multiple Select + + + + + + + + + + +
                            +
                            +

                            Right to Left Support

                            Chosen supports right to left select boxes too. just add "chzn-rtl" in addition to "chzn-select" to your select tags and you are good to go.

                            @@ -1263,11 +1289,31 @@

                            Using Chosen is easy as can be.

                            1. Download the plugin and copy the chosen files to your app.
                            2. -
                            3. Add the class chzn-select to any select box.
                            4. +
                            5. Activate the plugin by creating a new instance of Chosen: New Chosen(some_form_field);
                            6. Disco.
                            +