Compare commits

..

71 commits

Author SHA1 Message Date
Patrick Filler 96c1751d27 No margin on intro h2 2012-01-20 10:22:35 -06:00
Patrick Filler 428b55ca5c Update to new css doc 2012-01-20 10:20:48 -06:00
Patrick Filler f3cf4ff7e2 Update to latest version of Chosen 2012-01-19 17:48:26 -06:00
Patrick Filler fb141af8ac Ignore node_modules directory 2012-01-19 17:46:36 -06:00
Patrick Filler df3d8c2571 Merge pull request #410 from fatfreecrm/gh-pages
Fixed Setup step for Prototype version
2012-01-12 15:17:05 -08:00
Nathan Broadbent af26922106 Corrected Setup instructions for Prototype Version - 'New' -> 'new'. Improved formatting. 2011-12-21 12:13:26 +08:00
Patrick Filler 13f5487733 Use jQuery 1.7.1 2011-12-05 11:48:43 -05:00
T.J. Schuck b5e1521fe1 Add careers page link 2011-11-10 17:13:22 -05:00
Patrick Filler a983801f10 Fix bad variable spelling 2011-11-07 15:09:48 -05:00
Patrick Filler a3bda96ce9 Updating to latest version 2011-11-03 10:51:30 -04:00
Patrick Filler 18ea6aa7a6 Update drupal link 2011-10-24 13:27:44 -04:00
Patrick Filler 54aad85b25 Silly Typo 2011-10-24 11:03:14 -04:00
Patrick Filler bdd5d3a6ae Update to latest sprite / css / chosen version. 2011-09-29 16:03:33 -04:00
Patrick Filler 7be245ef19 Add deselect example and update to latest version of Chosen. 2011-09-28 14:12:04 -04:00
Patrick Filler fe40a09860 Merge branch 'gh-pages' of github.com:harvesthq/chosen into gh-pages 2011-09-26 11:08:48 -04:00
Patrick Filler bf79c44a06 Use data-placeholder on example (not title) 2011-09-26 11:07:58 -04:00
T.J. Schuck 554343e3ea Fix typo
Pointed out by @alpha123 on https://github.com/harvesthq/chosen/issues/270
2011-09-23 15:25:09 -04:00
Patrick Filler 31a708028d Update chosen to latest version and use latest version of jQuery 2011-09-22 15:43:46 -05:00
Patrick Filler 9cd2fcbb3a Update to latest chosen version. 2011-09-19 15:17:51 -05:00
Patrick Filler 742f008c78 Update documentation to reflect prototype initialization method. 2011-09-12 18:36:18 -04:00
Patrick Filler 5d58979891 Switch Chosen example to the jQuery version -- more people choose jQuery! 2011-09-12 18:06:05 -04:00
Patrick Filler b3611d24fc Add no results text support to docs 2011-09-12 18:02:57 -04:00
Patrick Filler cd59bcbd77 Update div width because IE8 doesn't like 50% divs for whatever reason. 2011-09-12 16:42:59 -04:00
Patrick Filler 3a64fd05c3 Latest css for chosen 2011-09-12 16:30:48 -04:00
Patrick Filler 5d5b7bd6fb Update to latest version of Chosen 2011-09-12 16:10:38 -04:00
Patrick Filler 82dac4c279 Copy/paste typo 2011-08-25 11:09:51 -04:00
Patrick Filler 8ede1f6486 update to latest version of chosen 2011-08-16 15:26:37 -04:00
Patrick Filler ead88bcb00 Update docs to latest css, sprite and js 2011-08-08 14:59:47 -04:00
Patrick Filler 4262412d01 Missing 'L' 2011-08-05 15:16:18 -04:00
Patrick Filler 39a5ef7ec6 Update docs to show new data-placeholder attribute support and blank option requirement. 2011-07-29 11:33:31 -04:00
Patrick Filler 67ba16b47d Update CSS / JS to latest versions. 2011-07-28 12:12:00 -04:00
pfiller 32a1b719f6 Update to latest version of prototype and drop ids from example page. 2011-07-26 15:19:39 -04:00
pfiller d99cf46f0c Update chosen docs to latest CSS (with IE fixes) 2011-07-26 11:43:53 -04:00
Patrick Filler 1b9c85d5bc Use jQuery spelling of plugin 2011-07-25 13:18:50 -04:00
pfiller 1abfe52c39 Remove references to Province of China 2011-07-24 17:47:11 -04:00
Patrick Filler 5714f843d8 Update country list. 2011-07-22 12:17:12 -04:00
Patrick Filler 99970f2c4d Instructions for bug reporting. 2011-07-21 11:51:54 -04:00
Patrick Filler 2e7e48b725 Change page title, intro text. 2011-07-21 11:50:54 -04:00
Patrick Filler e5a32e27ca Add update / change documentation. 2011-07-21 11:41:48 -04:00
Patrick Filler 19c67ec5e8 Go back to relying on a local version of chosen js. Git hub mime types and IE9 don't play nice together.
Closes Gh-20
2011-07-21 11:18:43 -04:00
Patrick Filler 4ddeab1783 Update docs to clarify usage in prototype vs. jQuery.
Closes Gh-9
2011-07-21 10:40:06 -04:00
Patrick Filler 3741c6149e Specify type/javascript on script tags. 2011-07-21 10:31:04 -04:00
Patrick Filler edd7dac03a Add "Notable Forks" section to docs. 2011-07-20 12:02:02 -04:00
Patrick Filler e251aff62a Proper english. 2011-07-20 10:33:21 -04:00
Patrick Filler 266274575c Add examples for selected / deselcted and description of title behavior. 2011-07-19 17:34:25 -04:00
Patrick Filler a42cdb77a0 Language on multiple demo. 2011-07-19 16:27:29 -04:00
Patrick Filler 6659b47b75 Always use the latest version of prototype. 2011-07-19 16:23:29 -04:00
Patrick Filler 48c3dd229d Update docs to latest version of plug-in 2011-07-19 16:00:28 -04:00
Patrick Filler 873244e4cb Add demos with groups. 2011-07-19 14:45:46 -04:00
Patrick Filler 5f201b19ee Add credits. 2011-07-19 14:18:03 -04:00
Patrick Filler b9ab5c5176 Update to latest version of Chosen. 2011-07-19 14:05:28 -04:00
Patrick Filler a2c74e01c5 Add Chosen analytics tracking. 2011-07-19 10:17:22 -04:00
Patrick Filler 85f839d767 Add a link to issue tracker. 2011-07-18 11:32:57 -04:00
Patrick Filler 3884c55c8b Updating to latest version of chosen.js 2011-07-15 18:05:22 -04:00
Matthew Lettini 68722b9070 chosen logo 2011-07-14 14:28:44 -04:00
Patrick Filler 0616f2af69 jQuery is now supported!
Update to latest version of Chosen.
2011-07-13 17:30:34 -04:00
Patrick Filler 6d81952999 Updating to latest version of chosen. 2011-07-08 16:55:04 -04:00
Patrick Filler cffe5a09a7 Update to latest version of Chosen 2011-07-08 16:31:15 -04:00
Patrick Filler cc9cb2a8e8 Update to latest version of chosen plug-in 2011-06-29 09:57:44 -04:00
Patrick Filler a82baf9fec Updating to latest version of chosen / css. 2011-06-28 16:30:05 -04:00
Patrick Filler 2d4430be99 Add IE support for headers / footers. 2011-06-23 18:34:28 -04:00
Patrick Filler 482db243bc Updating chosen to latest version. 2011-06-23 17:42:55 -04:00
Patrick Filler d1d016a331 Turn off link outlines. 2011-06-23 12:48:01 -04:00
Patrick Filler 08ef56fef5 Update to latest Chosen 2011-06-23 12:45:50 -04:00
Patrick Filler e9d4a2fbf1 Clean up docs some more. 2011-06-23 12:25:25 -04:00
Patrick Filler 203da6c409 Some more docs updates 2011-06-23 12:17:56 -04:00
Patrick Filler b281455a14 Removing unused docs files. 2011-06-22 17:48:08 -04:00
Patrick Filler 3cb8fc1b44 Chosen Docus are better now 2011-06-22 17:47:14 -04:00
Patrick Filler 68c6d991f1 More document page stubs. 2011-05-05 11:43:09 -04:00
Patrick Filler f20cff7fb1 Adding a base framework for github docs 2011-05-05 11:16:16 -04:00
Patrick Filler 200c3e63e2 Empty Github documentation directory 2011-05-05 11:06:38 -04:00
21 changed files with 1610 additions and 5384 deletions

2
.gitignore vendored
View file

@ -1,2 +1,2 @@
.DS_Store .DS_Store
node_modules node_modules/

176
Cakefile
View file

@ -1,176 +0,0 @@
# Building Chosen requires coffee-script and uglify-js. For
# help installing, try:
#
# `npm -g install coffee-script uglify-js`
#
fs = require 'fs'
path = require 'path'
{spawn, exec} = require 'child_process'
CoffeeScript = require 'coffee-script'
{parser, uglify} = require 'uglify-js'
javascripts = {
'chosen/chosen.jquery.js': [
'coffee/lib/select-parser.coffee'
'coffee/lib/abstract-chosen.coffee'
'coffee/chosen.jquery.coffee'
]
'chosen/chosen.proto.js': [
'coffee/lib/select-parser.coffee'
'coffee/lib/abstract-chosen.coffee'
'coffee/chosen.proto.coffee'
]
}
Array::unique = ->
output = {}
output[@[key]] = @[key] for key in [0...@length]
value for key, value of output
# Gather a list of unique source files.
#
source_files = ->
all_sources = []
for javascript, sources of javascripts
for source in sources
all_sources.push source
all_sources.unique()
# Get the version number
#
version = ->
"#{fs.readFileSync('VERSION')}".replace /[^0-9a-zA-Z.]*/gm, ''
version_tag = ->
"v#{version()}"
# Write chosen files with a header
#
write_chosen_javascript = (filename, body) ->
fs.writeFileSync filename, """
// Chosen, a Select Box Enhancer for jQuery and Protoype
// by Patrick Filler for Harvest, http://getharvest.com
//
// Version #{version()}
// 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.
#{body}
"""
console.log "Wrote #{filename}"
# Build Chosen.
#
task 'build', 'build Chosen from source', build = (cb) ->
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
)
package_npm () ->
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/"
for file in source_files()
# Coffeescript wasn't scoping file correctly-
# without this closure the file name displayed
# is incorrect.
((file) ->
fs.watchFile file, (curr, prev) ->
if +curr.mtime isnt +prev.mtime
console.log "Saw change in #{file}"
invoke 'build'
)(file)
task 'package_npm', 'generate the package.json file for npm', package_npm = (cb) ->
try
package_file = 'package.json'
package = JSON.parse("#{fs.readFileSync package_file}")
package['version'] = version()
fs.writeFileSync package_file, JSON.stringify(package, null, 2)
console.log "Wrote #{package_file}"
cb() if typeof cb is 'function'
catch e
print_error e, package_file
run = (cmd, args, cb, err_cb) ->
exec "#{cmd} #{args.join(' ')}", (err, stdout, stderr) ->
if err isnt null
console.error stderr
if typeof err_cb is 'function'
err_cb()
else
throw "Failed command execution (#{err})."
else
cb(stdout) if typeof cb is 'function'
with_clean_repo = (cb) ->
run 'git', ['diff', '--exit-code'], cb, ->
throw 'There are files that need to be committed first.'
without_existing_tag = (cb) ->
run 'git', ['tag'], (stdout) ->
if stdout.split("\n").indexOf( version_tag() ) >= 0
throw 'This tag has already been committed to the repo.'
else
cb()
tag_release = (cb, cb_err) ->
run 'git', ['tag', '-a', '-m', "\"Version #{version()}\"", version_tag()], cb, cb_err
untag_release = (e) ->
console.log "Failure to tag caught: #{e}"
console.log "Removing tag #{version_tag()}"
run 'git', ['tag', '-d', version_tag()]
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 ->
without_existing_tag ->
build ->
tag_release ->
push_repo [], ->
push_repo ['--tags'], ->
console.log "Successfully tagged #{version_tag()}: https://github.com/harvesthq/chosen/tree/#{version_tag()}"
, untag_release
, untag_release
, untag_release

View file

@ -1,24 +0,0 @@
# Chosen, a Select Box Enhancer for jQuery and Protoype
## by Patrick Filler for [Harvest](http://getharvest.com)
Available for use under the [MIT License](http://en.wikipedia.org/wiki/MIT_License)
Copyright (c) 2011 by Harvest
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View file

@ -1,50 +0,0 @@
# Chosen
Chosen is a library for making long, unwieldy select boxes more user friendly.
- jQuery support: 1.4+
- Prototype support: 1.7+
For documentation, usage, and examples, see:
http://harvesthq.github.com/chosen
### Contributing to Chosen
Contributions and pull requests are very welcome. Please follow these guidelines when submitting new code.
1. Make all changes in Coffeescript files, **not** JavaScript files.
2. For feature changes, update both jQuery *and* Prototype versions
3. Use `npm install -d` to install the correct development dependencies.
4. Use `cake build` or `cake watch` to generate Chosen's JavaScript file and minified version.
5. Don't touch the `VERSION` file
6. Submit a Pull Request using GitHub.
### Using CoffeeScript & Cake
First, make sure you have the proper CoffeeScript / Cake set-up in place. We have added a package.json that makes this easy:
```
npm install -d
```
This will install `coffee-script` and `uglifyjs`.
Once you're configured, building the JavasScript from the command line is easy:
cake build # build Chosen from source
cake watch # watch coffee/ for changes and build Chosen
If you're interested, you can find the recipes in Cakefile.
### Chosen Credits
- Built by [Harvest](http://www.getharvest.com/). Want to work on projects like this? [Were 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](http://drupal.org/project/chosen), by Pol Dell'Aiera, Arshad Chummun, Bart Feenstra, Kálmán Hosszu, etc.
- [Chosen CakePHP Plugin](https://github.com/paulredmond/chosen-cakephp), by Paul Redmond

View file

@ -1 +0,0 @@
0.9.7

View file

@ -24,13 +24,13 @@
/* @group Single Chosen */ /* @group Single Chosen */
.chzn-container-single .chzn-single { .chzn-container-single .chzn-single {
background-color: #ffffff; background-color: #ffffff;
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0 ); background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #f4f4f4), color-stop(0.48, #eeeeee), color-stop(0.5, #f6f6f6), color-stop(0.8, #ffffff));
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4)); background-image: -webkit-linear-gradient(center bottom, #f4f4f4 0%, #eeeeee 48%, #f6f6f6 50%, #ffffff 80%);
background-image: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); background-image: -moz-linear-gradient(center bottom, #f4f4f4 0%, #eeeeee 48%, #f6f6f6 50%, #ffffff 80%);
background-image: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); background-image: -o-linear-gradient(top, #f4f4f4 0%, #eeeeee 48%, #f6f6f6 50%, #ffffff 80%);
background-image: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); background-image: -ms-linear-gradient(top, #f4f4f4 0%, #eeeeee 48%, #f6f6f6 50%, #ffffff 80%);
background-image: -ms-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#ffffff',GradientType=0 );
background-image: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); background-image: linear-gradient(top, #f4f4f4 0%, #eeeeee 48%, #f6f6f6 50%, #ffffff 80%);
-webkit-border-radius: 5px; -webkit-border-radius: 5px;
-moz-border-radius : 5px; -moz-border-radius : 5px;
border-radius : 5px; border-radius : 5px;
@ -96,12 +96,12 @@
} }
.chzn-container-single .chzn-search input { .chzn-container-single .chzn-search input {
background: #fff url('chosen-sprite.png') no-repeat 100% -22px; background: #fff url('chosen-sprite.png') no-repeat 100% -22px;
background: url('chosen-sprite.png') no-repeat 100% -22px, -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff)); background: url('chosen-sprite.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));
background: url('chosen-sprite.png') no-repeat 100% -22px, -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%);
background: url('chosen-sprite.png') no-repeat 100% -22px, -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);
background: url('chosen-sprite.png') no-repeat 100% -22px, -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat 100% -22px, -o-linear-gradient(bottom, white 85%, #eeeeee 99%);
background: url('chosen-sprite.png') no-repeat 100% -22px, -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat 100% -22px, -ms-linear-gradient(top, #ffffff 85%,#eeeeee 99%);
background: url('chosen-sprite.png') no-repeat 100% -22px, linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat 100% -22px, linear-gradient(top, #ffffff 85%,#eeeeee 99%);
margin: 1px 0; margin: 1px 0;
padding: 4px 20px 4px 5px; padding: 4px 20px 4px 5px;
outline: 0; outline: 0;
@ -127,12 +127,13 @@
/* @group Multi Chosen */ /* @group Multi Chosen */
.chzn-container-multi .chzn-choices { .chzn-container-multi .chzn-choices {
background-color: #fff; background-color: #fff;
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff)); background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));
background-image: -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background-image: -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%);
background-image: -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background-image: -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);
background-image: -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background-image: -o-linear-gradient(bottom, white 85%, #eeeeee 99%);
background-image: -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background-image: -ms-linear-gradient(top, #ffffff 85%, #eeeeee 99%);
background-image: linear-gradient(top, #eeeeee 1%, #ffffff 15%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eeeeee',GradientType=0 );
background-image: linear-gradient(top, #ffffff 85%, #eeeeee 99%);
border: 1px solid #aaa; border: 1px solid #aaa;
margin: 0; margin: 0;
padding: 0; padding: 0;
@ -177,13 +178,13 @@
-webkit-background-clip: padding-box; -webkit-background-clip: padding-box;
background-clip : padding-box; background-clip : padding-box;
background-color: #e4e4e4; background-color: #e4e4e4;
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f4f4', endColorstr='#eeeeee', GradientType=0 ); background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.48, #e8e8e8), color-stop(0.5, #f0f0f0), color-stop(0.8, #f4f4f4));
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee)); background-image: -webkit-linear-gradient(center bottom, #eeeeee 0%, #e8e8e8 48%, #f0f0f0 50%, #f4f4f4 80%);
background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, #e8e8e8 48%, #f0f0f0 50%, #f4f4f4 80%);
background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -o-linear-gradient(top, #eeeeee 0%, #e8e8e8 48%, #f0f0f0 50%, #f4f4f4 80%);
background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -ms-linear-gradient(top, #eeeeee 0%, #e8e8e8 48%, #f0f0f0 50%, #f4f4f4 80%);
background-image: -ms-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#f4f4f4',GradientType=0 );
background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: linear-gradient(top, #eeeeee 0%, #e8e8e8 48%, #f0f0f0 50%, #f4f4f4 80%);
-webkit-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05); -webkit-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
-moz-box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05); -moz-box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05); box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
@ -193,6 +194,8 @@
padding: 3px 20px 3px 5px; padding: 3px 20px 3px 5px;
margin: 3px 0 3px 5px; margin: 3px 0 3px 5px;
position: relative; position: relative;
}
.chzn-container-multi .chzn-choices .search-choice span {
cursor: default; cursor: default;
} }
.chzn-container-multi .chzn-choices .search-choice-focus { .chzn-container-multi .chzn-choices .search-choice-focus {
@ -242,13 +245,13 @@
} }
.chzn-container .chzn-results .highlighted { .chzn-container .chzn-results .highlighted {
background-color: #3875d7; background-color: #3875d7;
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3875d7', endColorstr='#2a62bc', GradientType=0 ); background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.1, #2a62bc), color-stop(0.8, #3875d7));
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -webkit-linear-gradient(center bottom, #2a62bc 10%, #3875d7 80%);
background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -moz-linear-gradient(center bottom, #2a62bc 10%, #3875d7 80%);
background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -o-linear-gradient(bottom, #2a62bc 10%, #3875d7 80%);
background-image: -o-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -ms-linear-gradient(top, #2a62bc 10%, #3875d7 80%);
background-image: -ms-linear-gradient(top, #3875d7 20%, #2a62bc 90%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#2a62bc', endColorstr='#3875d7',GradientType=0 );
background-image: linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(top, #2a62bc 10%, #3875d7 80%);
color: #fff; color: #fff;
} }
.chzn-container .chzn-results li em { .chzn-container .chzn-results li em {
@ -275,7 +278,7 @@
} }
.chzn-container .chzn-results-scroll { .chzn-container .chzn-results-scroll {
background: white; background: white;
margin: 0 4px; margin: 0px 4px;
position: absolute; position: absolute;
text-align: center; text-align: center;
width: 321px; /* This should by dynamic with js */ width: 321px; /* This should by dynamic with js */
@ -313,13 +316,13 @@
-o-box-shadow : 0 1px 0 #fff inset; -o-box-shadow : 0 1px 0 #fff inset;
box-shadow : 0 1px 0 #fff inset; box-shadow : 0 1px 0 #fff inset;
background-color: #eee; background-color: #eee;
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0 ); background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.2, white), color-stop(0.8, #eeeeee));
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff)); background-image: -webkit-linear-gradient(center bottom, white 20%, #eeeeee 80%);
background-image: -webkit-linear-gradient(top, #eeeeee 20%, #ffffff 80%); background-image: -moz-linear-gradient(center bottom, white 20%, #eeeeee 80%);
background-image: -moz-linear-gradient(top, #eeeeee 20%, #ffffff 80%); background-image: -o-linear-gradient(bottom, white 20%, #eeeeee 80%);
background-image: -o-linear-gradient(top, #eeeeee 20%, #ffffff 80%); background-image: -ms-linear-gradient(top, #ffffff 20%,#eeeeee 80%);
background-image: -ms-linear-gradient(top, #eeeeee 20%, #ffffff 80%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eeeeee',GradientType=0 );
background-image: linear-gradient(top, #eeeeee 20%, #ffffff 80%); background-image: linear-gradient(top, #ffffff 20%,#eeeeee 80%);
-webkit-border-bottom-left-radius : 0; -webkit-border-bottom-left-radius : 0;
-webkit-border-bottom-right-radius: 0; -webkit-border-bottom-right-radius: 0;
-moz-border-radius-bottomleft : 0; -moz-border-radius-bottomleft : 0;
@ -359,31 +362,29 @@
} }
/* @group Right to Left */ /* @group Right to Left */
.chzn-rtl { text-align: right; } .chzn-rtl { direction:rtl;text-align: right; }
.chzn-rtl .chzn-single { padding: 0 8px 0 0; overflow: visible; } .chzn-rtl .chzn-single { padding-left: 0; padding-right: 8px; }
.chzn-rtl .chzn-single span { margin-left: 26px; margin-right: 0; direction: rtl; } .chzn-rtl .chzn-single span { margin-left: 26px; margin-right: 0; }
.chzn-rtl .chzn-single div { left: 3px; right: auto; } .chzn-rtl .chzn-single div { left: 3px; right: auto; }
.chzn-rtl .chzn-single abbr { .chzn-rtl .chzn-single abbr {
left: 26px; left: 26px;
right: auto; right: auto;
} }
.chzn-rtl .chzn-choices .search-field input { direction: rtl; }
.chzn-rtl .chzn-choices li { float: right; } .chzn-rtl .chzn-choices li { float: right; }
.chzn-rtl .chzn-choices .search-choice { padding: 3px 5px 3px 19px; margin: 3px 5px 3px 0; } .chzn-rtl .chzn-choices .search-choice { padding: 3px 5px 3px 19px; margin: 3px 5px 3px 0; }
.chzn-rtl .chzn-choices .search-choice .search-choice-close { left: 4px; right: auto; background-position: right top;} .chzn-rtl .chzn-choices .search-choice .search-choice-close { left: 4px; right: auto; background-position: right top;}
.chzn-rtl.chzn-container-single .chzn-results { margin: 0 0 4px 4px; padding: 0 4px 0 0; } .chzn-rtl.chzn-container-single .chzn-results { margin-left: 4px; margin-right: 0; padding-left: 0; padding-right: 4px; }
.chzn-rtl .chzn-results .group-option { padding-left: 0; padding-right: 15px; } .chzn-rtl .chzn-results .group-option { padding-left: 0; padding-right: 20px; }
.chzn-rtl.chzn-container-active .chzn-single-with-drop div { border-right: none; } .chzn-rtl.chzn-container-active .chzn-single-with-drop div { border-right: none; }
.chzn-rtl .chzn-search input { .chzn-rtl .chzn-search input {
background: #fff url('chosen-sprite.png') no-repeat -38px -22px; background: url('chosen-sprite.png') no-repeat -38px -22px, #ffffff;
background: url('chosen-sprite.png') no-repeat -38px -22px, -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff)); background: url('chosen-sprite.png') no-repeat -38px -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));
background: url('chosen-sprite.png') no-repeat -38px -22px, -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat -38px -22px, -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%);
background: url('chosen-sprite.png') no-repeat -38px -22px, -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat -38px -22px, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);
background: url('chosen-sprite.png') no-repeat -38px -22px, -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat -38px -22px, -o-linear-gradient(bottom, white 85%, #eeeeee 99%);
background: url('chosen-sprite.png') no-repeat -38px -22px, -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat -38px -22px, -ms-linear-gradient(top, #ffffff 85%,#eeeeee 99%);
background: url('chosen-sprite.png') no-repeat -38px -22px, linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat -38px -22px, linear-gradient(top, #ffffff 85%,#eeeeee 99%);
padding: 4px 5px 4px 20px; padding: 4px 5px 4px 20px;
direction: rtl;
} }
/* @end */ /* @end */

View file

@ -1,7 +1,7 @@
// Chosen, a Select Box Enhancer for jQuery and Protoype // Chosen, a Select Box Enhancer for jQuery and Protoype
// by Patrick Filler for Harvest, http://getharvest.com // by Patrick Filler for Harvest, http://getharvest.com
// //
// Version 0.9.7 // Version 0.9.6
// Full source at https://github.com/harvesthq/chosen // Full source at https://github.com/harvesthq/chosen
// Copyright (c) 2011 Harvest http://getharvest.com // Copyright (c) 2011 Harvest http://getharvest.com
@ -9,14 +9,11 @@
// This file is generated by `cake build`, do not edit it by hand. // This file is generated by `cake build`, do not edit it by hand.
(function() { (function() {
var SelectParser; var SelectParser;
SelectParser = (function() { SelectParser = (function() {
function SelectParser() { function SelectParser() {
this.options_index = 0; this.options_index = 0;
this.parsed = []; this.parsed = [];
} }
SelectParser.prototype.add_node = function(child) { SelectParser.prototype.add_node = function(child) {
if (child.nodeName === "OPTGROUP") { if (child.nodeName === "OPTGROUP") {
return this.add_group(child); return this.add_group(child);
@ -24,7 +21,6 @@
return this.add_option(child); return this.add_option(child);
} }
}; };
SelectParser.prototype.add_group = function(group) { SelectParser.prototype.add_group = function(group) {
var group_position, option, _i, _len, _ref, _results; var group_position, option, _i, _len, _ref, _results;
group_position = this.parsed.length; group_position = this.parsed.length;
@ -43,11 +39,12 @@
} }
return _results; return _results;
}; };
SelectParser.prototype.add_option = function(option, group_position, group_disabled) { SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
if (option.nodeName === "OPTION") { if (option.nodeName === "OPTION") {
if (option.text !== "") { if (option.text !== "") {
if (group_position != null) this.parsed[group_position].children += 1; if (group_position != null) {
this.parsed[group_position].children += 1;
}
this.parsed.push({ this.parsed.push({
array_index: this.parsed.length, array_index: this.parsed.length,
options_index: this.options_index, options_index: this.options_index,
@ -70,11 +67,8 @@
return this.options_index += 1; return this.options_index += 1;
} }
}; };
return SelectParser; return SelectParser;
})(); })();
SelectParser.select_to_array = function(select) { SelectParser.select_to_array = function(select) {
var child, parser, _i, _len, _ref; var child, parser, _i, _len, _ref;
parser = new SelectParser(); parser = new SelectParser();
@ -85,23 +79,17 @@
} }
return parser.parsed; return parser.parsed;
}; };
this.SelectParser = SelectParser; this.SelectParser = SelectParser;
}).call(this); }).call(this);
/*
Chosen source: generate output using 'cake build'
Copyright (c) 2011 by Harvest
*/
(function() { (function() {
/*
Chosen source: generate output using 'cake build'
Copyright (c) 2011 by Harvest
*/
var AbstractChosen, root; var AbstractChosen, root;
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
root = this; root = this;
AbstractChosen = (function() { AbstractChosen = (function() {
function AbstractChosen(form_field, options) { function AbstractChosen(form_field, options) {
this.form_field = form_field; this.form_field = form_field;
this.options = options != null ? options : {}; this.options = options != null ? options : {};
@ -113,15 +101,13 @@ Copyright (c) 2011 by Harvest
this.register_observers(); this.register_observers();
this.finish_setup(); this.finish_setup();
} }
AbstractChosen.prototype.set_default_values = function() { AbstractChosen.prototype.set_default_values = function() {
var _this = this; this.click_test_action = __bind(function(evt) {
this.click_test_action = function(evt) { return this.test_active_click(evt);
return _this.test_active_click(evt); }, this);
}; this.activate_action = __bind(function(evt) {
this.activate_action = function(evt) { return this.activate_field(evt);
return _this.activate_field(evt); }, this);
};
this.active_field = false; this.active_field = false;
this.mouse_on_container = false; this.mouse_on_container = false;
this.results_showing = false; this.results_showing = false;
@ -132,55 +118,52 @@ Copyright (c) 2011 by Harvest
this.choices = 0; this.choices = 0;
return this.results_none_found = this.options.no_results_text || "No results match"; return this.results_none_found = this.options.no_results_text || "No results match";
}; };
AbstractChosen.prototype.mouse_enter = function() { AbstractChosen.prototype.mouse_enter = function() {
return this.mouse_on_container = true; return this.mouse_on_container = true;
}; };
AbstractChosen.prototype.mouse_leave = function() { AbstractChosen.prototype.mouse_leave = function() {
return this.mouse_on_container = false; return this.mouse_on_container = false;
}; };
AbstractChosen.prototype.input_focus = function(evt) { AbstractChosen.prototype.input_focus = function(evt) {
var _this = this;
if (!this.active_field) { if (!this.active_field) {
return setTimeout((function() { return setTimeout((__bind(function() {
return _this.container_mousedown(); return this.container_mousedown();
}), 50); }, this)), 50);
} }
}; };
AbstractChosen.prototype.input_blur = function(evt) { AbstractChosen.prototype.input_blur = function(evt) {
var _this = this;
if (!this.mouse_on_container) { if (!this.mouse_on_container) {
this.active_field = false; this.active_field = false;
return setTimeout((function() { return setTimeout((__bind(function() {
return _this.blur_test(); return this.blur_test();
}), 100); }, this)), 100);
} }
}; };
AbstractChosen.prototype.result_add_option = function(option) { AbstractChosen.prototype.result_add_option = function(option) {
var classes, style; var classes, style;
if (!option.disabled) { if (!option.disabled) {
option.dom_id = this.container_id + "_o_" + option.array_index; option.dom_id = this.container_id + "_o_" + option.array_index;
classes = option.selected && this.is_multiple ? [] : ["active-result"]; classes = option.selected && this.is_multiple ? [] : ["active-result"];
if (option.selected) classes.push("result-selected"); if (option.selected) {
if (option.group_array_index != null) classes.push("group-option"); classes.push("result-selected");
if (option.classes !== "") classes.push(option.classes); }
if (option.group_array_index != null) {
classes.push("group-option");
}
if (option.classes !== "") {
classes.push(option.classes);
}
style = option.style.cssText !== "" ? " style=\"" + option.style + "\"" : ""; style = option.style.cssText !== "" ? " style=\"" + option.style + "\"" : "";
return '<li id="' + option.dom_id + '" class="' + classes.join(' ') + '"' + style + '>' + option.html + '</li>'; return '<li id="' + option.dom_id + '" class="' + classes.join(' ') + '"' + style + '>' + option.html + '</li>';
} else { } else {
return ""; return "";
} }
}; };
AbstractChosen.prototype.results_update_field = function() { AbstractChosen.prototype.results_update_field = function() {
this.result_clear_highlight(); this.result_clear_highlight();
this.result_single_selected = null; this.result_single_selected = null;
return this.results_build(); return this.results_build();
}; };
AbstractChosen.prototype.results_toggle = function() { AbstractChosen.prototype.results_toggle = function() {
if (this.results_showing) { if (this.results_showing) {
return this.results_hide(); return this.results_hide();
@ -188,7 +171,6 @@ Copyright (c) 2011 by Harvest
return this.results_show(); return this.results_show();
} }
}; };
AbstractChosen.prototype.results_search = function(evt) { AbstractChosen.prototype.results_search = function(evt) {
if (this.results_showing) { if (this.results_showing) {
return this.winnow_results(); return this.winnow_results();
@ -196,7 +178,6 @@ Copyright (c) 2011 by Harvest
return this.results_show(); return this.results_show();
} }
}; };
AbstractChosen.prototype.keyup_checker = function(evt) { AbstractChosen.prototype.keyup_checker = function(evt) {
var stroke, _ref; var stroke, _ref;
stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
@ -212,10 +193,14 @@ Copyright (c) 2011 by Harvest
break; break;
case 13: case 13:
evt.preventDefault(); evt.preventDefault();
if (this.results_showing) return this.result_select(evt); if (this.results_showing) {
return this.result_select(evt);
}
break; break;
case 27: case 27:
if (this.results_showing) this.results_hide(); if (this.results_showing) {
this.results_hide();
}
return true; return true;
case 9: case 9:
case 38: case 38:
@ -228,71 +213,62 @@ Copyright (c) 2011 by Harvest
return this.results_search(); return this.results_search();
} }
}; };
AbstractChosen.prototype.generate_field_id = function() { AbstractChosen.prototype.generate_field_id = function() {
var new_id; var new_id;
new_id = this.generate_random_id(); new_id = this.generate_random_id();
this.form_field.id = new_id; this.form_field.id = new_id;
return new_id; return new_id;
}; };
AbstractChosen.prototype.generate_random_char = function() { AbstractChosen.prototype.generate_random_char = function() {
var chars, newchar, rand; var chars, newchar, rand;
chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ"; chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ";
rand = Math.floor(Math.random() * chars.length); rand = Math.floor(Math.random() * chars.length);
return newchar = chars.substring(rand, rand + 1); return newchar = chars.substring(rand, rand + 1);
}; };
return AbstractChosen; return AbstractChosen;
})(); })();
root.AbstractChosen = AbstractChosen; root.AbstractChosen = AbstractChosen;
}).call(this); }).call(this);
/*
Chosen source: generate output using 'cake build'
Copyright (c) 2011 by Harvest
*/
(function() { (function() {
var $, Chosen, get_side_border_padding, root, /*
__hasProp = Object.prototype.hasOwnProperty, Chosen source: generate output using 'cake build'
__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; }; 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; root = this;
$ = jQuery; $ = jQuery;
$.fn.extend({ $.fn.extend({
chosen: function(options) { chosen: function(options) {
if ($.browser.msie && ($.browser.version === "6.0" || $.browser.version === "7.0")) { if ($.browser.msie && ($.browser.version === "6.0" || $.browser.version === "7.0")) {
return this; return this;
} }
return $(this).each(function(input_field) { return $(this).each(function(input_field) {
if (!($(this)).hasClass("chzn-done")) return new Chosen(this, options); if (!($(this)).hasClass("chzn-done")) {
return new Chosen(this, options);
}
}); });
} }
}); });
Chosen = (function() {
Chosen = (function(_super) { __extends(Chosen, AbstractChosen);
__extends(Chosen, _super);
function Chosen() { function Chosen() {
Chosen.__super__.constructor.apply(this, arguments); Chosen.__super__.constructor.apply(this, arguments);
} }
Chosen.prototype.setup = function() { Chosen.prototype.setup = function() {
this.form_field_jq = $(this.form_field); this.form_field_jq = $(this.form_field);
return this.is_rtl = this.form_field_jq.hasClass("chzn-rtl"); return this.is_rtl = this.form_field_jq.hasClass("chzn-rtl");
}; };
Chosen.prototype.finish_setup = function() { Chosen.prototype.finish_setup = function() {
return this.form_field_jq.addClass("chzn-done"); return this.form_field_jq.addClass("chzn-done");
}; };
Chosen.prototype.set_up_html = function() { Chosen.prototype.set_up_html = function() {
var container_div, dd_top, dd_width, sf_width; 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 = this.form_field.id.length ? this.form_field.id.replace(/(:|\.)/g, '_') : this.generate_field_id();
@ -340,56 +316,53 @@ Copyright (c) 2011 by Harvest
chosen: this chosen: this
}); });
}; };
Chosen.prototype.register_observers = function() { Chosen.prototype.register_observers = function() {
var _this = this; this.container.mousedown(__bind(function(evt) {
this.container.mousedown(function(evt) { return this.container_mousedown(evt);
return _this.container_mousedown(evt); }, this));
}); this.container.mouseup(__bind(function(evt) {
this.container.mouseup(function(evt) { return this.container_mouseup(evt);
return _this.container_mouseup(evt); }, this));
}); this.container.mouseenter(__bind(function(evt) {
this.container.mouseenter(function(evt) { return this.mouse_enter(evt);
return _this.mouse_enter(evt); }, this));
}); this.container.mouseleave(__bind(function(evt) {
this.container.mouseleave(function(evt) { return this.mouse_leave(evt);
return _this.mouse_leave(evt); }, this));
}); this.search_results.mouseup(__bind(function(evt) {
this.search_results.mouseup(function(evt) { return this.search_results_mouseup(evt);
return _this.search_results_mouseup(evt); }, this));
}); this.search_results.mouseover(__bind(function(evt) {
this.search_results.mouseover(function(evt) { return this.search_results_mouseover(evt);
return _this.search_results_mouseover(evt); }, this));
}); this.search_results.mouseout(__bind(function(evt) {
this.search_results.mouseout(function(evt) { return this.search_results_mouseout(evt);
return _this.search_results_mouseout(evt); }, this));
}); this.form_field_jq.bind("liszt:updated", __bind(function(evt) {
this.form_field_jq.bind("liszt:updated", function(evt) { return this.results_update_field(evt);
return _this.results_update_field(evt); }, this));
}); this.search_field.blur(__bind(function(evt) {
this.search_field.blur(function(evt) { return this.input_blur(evt);
return _this.input_blur(evt); }, this));
}); this.search_field.keyup(__bind(function(evt) {
this.search_field.keyup(function(evt) { return this.keyup_checker(evt);
return _this.keyup_checker(evt); }, this));
}); this.search_field.keydown(__bind(function(evt) {
this.search_field.keydown(function(evt) { return this.keydown_checker(evt);
return _this.keydown_checker(evt); }, this));
});
if (this.is_multiple) { if (this.is_multiple) {
this.search_choices.click(function(evt) { this.search_choices.click(__bind(function(evt) {
return _this.choices_click(evt); return this.choices_click(evt);
}); }, this));
return this.search_field.focus(function(evt) { return this.search_field.focus(__bind(function(evt) {
return _this.input_focus(evt); return this.input_focus(evt);
}); }, this));
} else { } else {
return this.container.click(function(evt) { return this.container.click(__bind(function(evt) {
return evt.preventDefault(); return evt.preventDefault();
}); }, this));
} }
}; };
Chosen.prototype.search_field_disabled = function() { Chosen.prototype.search_field_disabled = function() {
this.is_disabled = this.form_field_jq[0].disabled; this.is_disabled = this.form_field_jq[0].disabled;
if (this.is_disabled) { if (this.is_disabled) {
@ -407,15 +380,18 @@ Copyright (c) 2011 by Harvest
} }
} }
}; };
Chosen.prototype.container_mousedown = function(evt) { Chosen.prototype.container_mousedown = function(evt) {
var target_closelink; var target_closelink;
if (!this.is_disabled) { if (!this.is_disabled) {
target_closelink = evt != null ? ($(evt.target)).hasClass("search-choice-close") : false; target_closelink = evt != null ? ($(evt.target)).hasClass("search-choice-close") : false;
if (evt && evt.type === "mousedown") evt.stopPropagation(); if (evt && evt.type === "mousedown") {
evt.stopPropagation();
}
if (!this.pending_destroy_click && !target_closelink) { if (!this.pending_destroy_click && !target_closelink) {
if (!this.active_field) { if (!this.active_field) {
if (this.is_multiple) this.search_field.val(""); if (this.is_multiple) {
this.search_field.val("");
}
$(document).click(this.click_test_action); $(document).click(this.click_test_action);
this.results_show(); this.results_show();
} else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chzn-single").length)) { } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chzn-single").length)) {
@ -428,17 +404,16 @@ Copyright (c) 2011 by Harvest
} }
} }
}; };
Chosen.prototype.container_mouseup = function(evt) { Chosen.prototype.container_mouseup = function(evt) {
if (evt.target.nodeName === "ABBR") return this.results_reset(evt); if (evt.target.nodeName === "ABBR") {
return this.results_reset(evt);
}
}; };
Chosen.prototype.blur_test = function(evt) { Chosen.prototype.blur_test = function(evt) {
if (!this.active_field && this.container.hasClass("chzn-container-active")) { if (!this.active_field && this.container.hasClass("chzn-container-active")) {
return this.close_field(); return this.close_field();
} }
}; };
Chosen.prototype.close_field = function() { Chosen.prototype.close_field = function() {
$(document).unbind("click", this.click_test_action); $(document).unbind("click", this.click_test_action);
if (!this.is_multiple) { if (!this.is_multiple) {
@ -453,7 +428,6 @@ Copyright (c) 2011 by Harvest
this.show_search_field_default(); this.show_search_field_default();
return this.search_field_scale(); return this.search_field_scale();
}; };
Chosen.prototype.activate_field = function() { Chosen.prototype.activate_field = function() {
if (!this.is_multiple && !this.active_field) { if (!this.is_multiple && !this.active_field) {
this.search_field.attr("tabindex", this.selected_item.attr("tabindex")); this.search_field.attr("tabindex", this.selected_item.attr("tabindex"));
@ -464,7 +438,6 @@ Copyright (c) 2011 by Harvest
this.search_field.val(this.search_field.val()); this.search_field.val(this.search_field.val());
return this.search_field.focus(); return this.search_field.focus();
}; };
Chosen.prototype.test_active_click = function(evt) { Chosen.prototype.test_active_click = function(evt) {
if ($(evt.target).parents('#' + this.container_id).length) { if ($(evt.target).parents('#' + this.container_id).length) {
return this.active_field = true; return this.active_field = true;
@ -472,7 +445,6 @@ Copyright (c) 2011 by Harvest
return this.close_field(); return this.close_field();
} }
}; };
Chosen.prototype.results_build = function() { Chosen.prototype.results_build = function() {
var content, data, _i, _len, _ref; var content, data, _i, _len, _ref;
this.parsing = true; this.parsing = true;
@ -500,7 +472,9 @@ Copyright (c) 2011 by Harvest
this.choice_build(data); this.choice_build(data);
} else if (data.selected && !this.is_multiple) { } else if (data.selected && !this.is_multiple) {
this.selected_item.find("span").text(data.text); this.selected_item.find("span").text(data.text);
if (this.allow_single_deselect) this.single_deselect_control_build(); if (this.allow_single_deselect) {
this.single_deselect_control_build();
}
} }
} }
} }
@ -510,7 +484,6 @@ Copyright (c) 2011 by Harvest
this.search_results.html(content); this.search_results.html(content);
return this.parsing = false; return this.parsing = false;
}; };
Chosen.prototype.result_add_group = function(group) { Chosen.prototype.result_add_group = function(group) {
if (!group.disabled) { if (!group.disabled) {
group.dom_id = this.container_id + "_g_" + group.array_index; group.dom_id = this.container_id + "_g_" + group.array_index;
@ -519,7 +492,6 @@ Copyright (c) 2011 by Harvest
return ""; return "";
} }
}; };
Chosen.prototype.result_do_highlight = function(el) { Chosen.prototype.result_do_highlight = function(el) {
var high_bottom, high_top, maxHeight, visible_bottom, visible_top; var high_bottom, high_top, maxHeight, visible_bottom, visible_top;
if (el.length) { if (el.length) {
@ -538,12 +510,12 @@ Copyright (c) 2011 by Harvest
} }
} }
}; };
Chosen.prototype.result_clear_highlight = function() { Chosen.prototype.result_clear_highlight = function() {
if (this.result_highlight) this.result_highlight.removeClass("highlighted"); if (this.result_highlight) {
this.result_highlight.removeClass("highlighted");
}
return this.result_highlight = null; return this.result_highlight = null;
}; };
Chosen.prototype.results_show = function() { Chosen.prototype.results_show = function() {
var dd_top; var dd_top;
if (!this.is_multiple) { if (!this.is_multiple) {
@ -562,7 +534,6 @@ Copyright (c) 2011 by Harvest
this.search_field.val(this.search_field.val()); this.search_field.val(this.search_field.val());
return this.winnow_results(); return this.winnow_results();
}; };
Chosen.prototype.results_hide = function() { Chosen.prototype.results_hide = function() {
if (!this.is_multiple) { if (!this.is_multiple) {
this.selected_item.removeClass("chzn-single-with-drop"); this.selected_item.removeClass("chzn-single-with-drop");
@ -573,7 +544,6 @@ Copyright (c) 2011 by Harvest
}); });
return this.results_showing = false; return this.results_showing = false;
}; };
Chosen.prototype.set_tab_index = function(el) { Chosen.prototype.set_tab_index = function(el) {
var ti; var ti;
if (this.form_field_jq.attr("tabindex")) { if (this.form_field_jq.attr("tabindex")) {
@ -587,7 +557,6 @@ Copyright (c) 2011 by Harvest
} }
} }
}; };
Chosen.prototype.show_search_field_default = function() { Chosen.prototype.show_search_field_default = function() {
if (this.is_multiple && this.choices < 1 && !this.active_field) { if (this.is_multiple && this.choices < 1 && !this.active_field) {
this.search_field.val(this.default_text); this.search_field.val(this.default_text);
@ -597,7 +566,6 @@ Copyright (c) 2011 by Harvest
return this.search_field.removeClass("default"); return this.search_field.removeClass("default");
} }
}; };
Chosen.prototype.search_results_mouseup = function(evt) { Chosen.prototype.search_results_mouseup = function(evt) {
var target; var target;
target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
@ -606,38 +574,34 @@ Copyright (c) 2011 by Harvest
return this.result_select(evt); return this.result_select(evt);
} }
}; };
Chosen.prototype.search_results_mouseover = function(evt) { Chosen.prototype.search_results_mouseover = function(evt) {
var target; var target;
target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
if (target) return this.result_do_highlight(target); if (target) {
return this.result_do_highlight(target);
}
}; };
Chosen.prototype.search_results_mouseout = function(evt) { Chosen.prototype.search_results_mouseout = function(evt) {
if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) { if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) {
return this.result_clear_highlight(); return this.result_clear_highlight();
} }
}; };
Chosen.prototype.choices_click = function(evt) { Chosen.prototype.choices_click = function(evt) {
evt.preventDefault(); evt.preventDefault();
if (this.active_field && !($(evt.target).hasClass("search-choice" || $(evt.target).parents('.search-choice').first)) && !this.results_showing) { if (this.active_field && !($(evt.target).hasClass("search-choice" || $(evt.target).parents('.search-choice').first)) && !this.results_showing) {
return this.results_show(); return this.results_show();
} }
}; };
Chosen.prototype.choice_build = function(item) { Chosen.prototype.choice_build = function(item) {
var choice_id, link, var choice_id, link;
_this = this;
choice_id = this.container_id + "_c_" + item.array_index; choice_id = this.container_id + "_c_" + item.array_index;
this.choices += 1; this.choices += 1;
this.search_container.before('<li class="search-choice" id="' + choice_id + '"><span>' + item.html + '</span><a href="javascript:void(0)" class="search-choice-close" rel="' + item.array_index + '"></a></li>'); this.search_container.before('<li class="search-choice" id="' + choice_id + '"><span>' + item.html + '</span><a href="javascript:void(0)" class="search-choice-close" rel="' + item.array_index + '"></a></li>');
link = $('#' + choice_id).find("a").first(); link = $('#' + choice_id).find("a").first();
return link.click(function(evt) { return link.click(__bind(function(evt) {
return _this.choice_destroy_link_click(evt); return this.choice_destroy_link_click(evt);
}); }, this));
}; };
Chosen.prototype.choice_destroy_link_click = function(evt) { Chosen.prototype.choice_destroy_link_click = function(evt) {
evt.preventDefault(); evt.preventDefault();
if (!this.is_disabled) { if (!this.is_disabled) {
@ -647,7 +611,6 @@ Copyright (c) 2011 by Harvest
return evt.stopPropagation; return evt.stopPropagation;
} }
}; };
Chosen.prototype.choice_destroy = function(link) { Chosen.prototype.choice_destroy = function(link) {
this.choices -= 1; this.choices -= 1;
this.show_search_field_default(); this.show_search_field_default();
@ -657,16 +620,16 @@ Copyright (c) 2011 by Harvest
this.result_deselect(link.attr("rel")); this.result_deselect(link.attr("rel"));
return link.parents('li').first().remove(); return link.parents('li').first().remove();
}; };
Chosen.prototype.results_reset = function(evt) { Chosen.prototype.results_reset = function(evt) {
this.form_field.options[0].selected = true; this.form_field.options[0].selected = true;
this.selected_item.find("span").text(this.default_text); this.selected_item.find("span").text(this.default_text);
this.show_search_field_default(); this.show_search_field_default();
$(evt.target).remove(); $(evt.target).remove();
this.form_field_jq.trigger("change"); this.form_field_jq.trigger("change");
if (this.active_field) return this.results_hide(); if (this.active_field) {
return this.results_hide();
}
}; };
Chosen.prototype.result_select = function(evt) { Chosen.prototype.result_select = function(evt) {
var high, high_id, item, position; var high, high_id, item, position;
if (this.result_highlight) { if (this.result_highlight) {
@ -688,23 +651,24 @@ Copyright (c) 2011 by Harvest
this.choice_build(item); this.choice_build(item);
} else { } else {
this.selected_item.find("span").first().text(item.text); this.selected_item.find("span").first().text(item.text);
if (this.allow_single_deselect) this.single_deselect_control_build(); if (this.allow_single_deselect) {
this.single_deselect_control_build();
}
}
if (!(evt.metaKey && this.is_multiple)) {
this.results_hide();
} }
if (!(evt.metaKey && this.is_multiple)) this.results_hide();
this.search_field.val(""); this.search_field.val("");
this.form_field_jq.trigger("change"); this.form_field_jq.trigger("change");
return this.search_field_scale(); return this.search_field_scale();
} }
}; };
Chosen.prototype.result_activate = function(el) { Chosen.prototype.result_activate = function(el) {
return el.addClass("active-result"); return el.addClass("active-result");
}; };
Chosen.prototype.result_deactivate = function(el) { Chosen.prototype.result_deactivate = function(el) {
return el.removeClass("active-result"); return el.removeClass("active-result");
}; };
Chosen.prototype.result_deselect = function(pos) { Chosen.prototype.result_deselect = function(pos) {
var result, result_data; var result, result_data;
result_data = this.results_data[pos]; result_data = this.results_data[pos];
@ -717,13 +681,11 @@ Copyright (c) 2011 by Harvest
this.form_field_jq.trigger("change"); this.form_field_jq.trigger("change");
return this.search_field_scale(); return this.search_field_scale();
}; };
Chosen.prototype.single_deselect_control_build = function() { Chosen.prototype.single_deselect_control_build = function() {
if (this.allow_single_deselect && this.selected_item.find("abbr").length < 1) { if (this.allow_single_deselect && this.selected_item.find("abbr").length < 1) {
return this.selected_item.find("span").first().after("<abbr class=\"search-choice-close\"></abbr>"); return this.selected_item.find("span").first().after("<abbr class=\"search-choice-close\"></abbr>");
} }
}; };
Chosen.prototype.winnow_results = function() { Chosen.prototype.winnow_results = function() {
var found, option, part, parts, regex, result, result_id, results, searchText, startpos, text, zregex, _i, _j, _len, _len2, _ref; var found, option, part, parts, regex, result, result_id, results, searchText, startpos, text, zregex, _i, _j, _len, _len2, _ref;
this.no_results_clear(); this.no_results_clear();
@ -784,7 +746,6 @@ Copyright (c) 2011 by Harvest
return this.winnow_results_set_highlight(); return this.winnow_results_set_highlight();
} }
}; };
Chosen.prototype.winnow_results_clear = function() { Chosen.prototype.winnow_results_clear = function() {
var li, lis, _i, _len, _results; var li, lis, _i, _len, _results;
this.search_field.val(""); this.search_field.val("");
@ -793,49 +754,46 @@ Copyright (c) 2011 by Harvest
for (_i = 0, _len = lis.length; _i < _len; _i++) { for (_i = 0, _len = lis.length; _i < _len; _i++) {
li = lis[_i]; li = lis[_i];
li = $(li); li = $(li);
if (li.hasClass("group-result")) { _results.push(li.hasClass("group-result") ? li.css('display', 'auto') : !this.is_multiple || !li.hasClass("result-selected") ? this.result_activate(li) : void 0);
_results.push(li.css('display', 'auto'));
} else if (!this.is_multiple || !li.hasClass("result-selected")) {
_results.push(this.result_activate(li));
} else {
_results.push(void 0);
}
} }
return _results; return _results;
}; };
Chosen.prototype.winnow_results_set_highlight = function() { Chosen.prototype.winnow_results_set_highlight = function() {
var do_high, selected_results; var do_high, selected_results;
if (!this.result_highlight) { if (!this.result_highlight) {
selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : []; 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(); 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); if (do_high != null) {
return this.result_do_highlight(do_high);
}
} }
}; };
Chosen.prototype.no_results = function(terms) { Chosen.prototype.no_results = function(terms) {
var no_results_html; var no_results_html;
no_results_html = $('<li class="no-results">' + this.results_none_found + ' "<span></span>"</li>'); no_results_html = $('<li class="no-results">' + this.results_none_found + ' "<span></span>"</li>');
no_results_html.find("span").first().html(terms); no_results_html.find("span").first().html(terms);
return this.search_results.append(no_results_html); return this.search_results.append(no_results_html);
}; };
Chosen.prototype.no_results_clear = function() { Chosen.prototype.no_results_clear = function() {
return this.search_results.find(".no-results").remove(); return this.search_results.find(".no-results").remove();
}; };
Chosen.prototype.keydown_arrow = function() { Chosen.prototype.keydown_arrow = function() {
var first_active, next_sib; var first_active, next_sib;
if (!this.result_highlight) { if (!this.result_highlight) {
first_active = this.search_results.find("li.active-result").first(); first_active = this.search_results.find("li.active-result").first();
if (first_active) this.result_do_highlight($(first_active)); if (first_active) {
this.result_do_highlight($(first_active));
}
} else if (this.results_showing) { } else if (this.results_showing) {
next_sib = this.result_highlight.nextAll("li.active-result").first(); next_sib = this.result_highlight.nextAll("li.active-result").first();
if (next_sib) this.result_do_highlight(next_sib); if (next_sib) {
this.result_do_highlight(next_sib);
}
}
if (!this.results_showing) {
return this.results_show();
} }
if (!this.results_showing) return this.results_show();
}; };
Chosen.prototype.keyup_arrow = function() { Chosen.prototype.keyup_arrow = function() {
var prev_sibs; var prev_sibs;
if (!this.results_showing && !this.is_multiple) { if (!this.results_showing && !this.is_multiple) {
@ -845,12 +803,13 @@ Copyright (c) 2011 by Harvest
if (prev_sibs.length) { if (prev_sibs.length) {
return this.result_do_highlight(prev_sibs.first()); return this.result_do_highlight(prev_sibs.first());
} else { } else {
if (this.choices > 0) this.results_hide(); if (this.choices > 0) {
this.results_hide();
}
return this.result_clear_highlight(); return this.result_clear_highlight();
} }
} }
}; };
Chosen.prototype.keydown_backstroke = function() { Chosen.prototype.keydown_backstroke = function() {
if (this.pending_backstroke) { if (this.pending_backstroke) {
this.choice_destroy(this.pending_backstroke.find("a").first()); this.choice_destroy(this.pending_backstroke.find("a").first());
@ -860,25 +819,27 @@ Copyright (c) 2011 by Harvest
return this.pending_backstroke.addClass("search-choice-focus"); return this.pending_backstroke.addClass("search-choice-focus");
} }
}; };
Chosen.prototype.clear_backstroke = function() { Chosen.prototype.clear_backstroke = function() {
if (this.pending_backstroke) { if (this.pending_backstroke) {
this.pending_backstroke.removeClass("search-choice-focus"); this.pending_backstroke.removeClass("search-choice-focus");
} }
return this.pending_backstroke = null; return this.pending_backstroke = null;
}; };
Chosen.prototype.keydown_checker = function(evt) { Chosen.prototype.keydown_checker = function(evt) {
var stroke, _ref; var stroke, _ref;
stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
this.search_field_scale(); this.search_field_scale();
if (stroke !== 8 && this.pending_backstroke) this.clear_backstroke(); if (stroke !== 8 && this.pending_backstroke) {
this.clear_backstroke();
}
switch (stroke) { switch (stroke) {
case 8: case 8:
this.backstroke_length = this.search_field.val().length; this.backstroke_length = this.search_field.val().length;
break; break;
case 9: case 9:
if (this.results_showing && !this.is_multiple) this.result_select(evt); if (this.results_showing && !this.is_multiple) {
this.result_select(evt);
}
this.mouse_on_container = false; this.mouse_on_container = false;
break; break;
case 13: case 13:
@ -893,7 +854,6 @@ Copyright (c) 2011 by Harvest
break; break;
} }
}; };
Chosen.prototype.search_field_scale = function() { Chosen.prototype.search_field_scale = function() {
var dd_top, div, h, style, style_block, styles, w, _i, _len; var dd_top, div, h, style, style_block, styles, w, _i, _len;
if (this.is_multiple) { if (this.is_multiple) {
@ -912,7 +872,9 @@ Copyright (c) 2011 by Harvest
$('body').append(div); $('body').append(div);
w = div.width() + 25; w = div.width() + 25;
div.remove(); div.remove();
if (w > this.f_width - 10) w = this.f_width - 10; if (w > this.f_width - 10) {
w = this.f_width - 10;
}
this.search_field.css({ this.search_field.css({
'width': w + 'px' 'width': w + 'px'
}); });
@ -922,7 +884,6 @@ Copyright (c) 2011 by Harvest
}); });
} }
}; };
Chosen.prototype.generate_random_id = function() { Chosen.prototype.generate_random_id = function() {
var string; var string;
string = "sel" + this.generate_random_char() + this.generate_random_char() + this.generate_random_char(); string = "sel" + this.generate_random_char() + this.generate_random_char() + this.generate_random_char();
@ -931,16 +892,11 @@ Copyright (c) 2011 by Harvest
} }
return string; return string;
}; };
return Chosen; return Chosen;
})();
})(AbstractChosen);
get_side_border_padding = function(elmt) { get_side_border_padding = function(elmt) {
var side_border_padding; var side_border_padding;
return side_border_padding = elmt.outerWidth() - elmt.width(); return side_border_padding = elmt.outerWidth() - elmt.width();
}; };
root.get_side_border_padding = get_side_border_padding; root.get_side_border_padding = get_side_border_padding;
}).call(this); }).call(this);

File diff suppressed because one or more lines are too long

View file

@ -1,960 +0,0 @@
// Chosen, a Select Box Enhancer for jQuery and Protoype
// by Patrick Filler for Harvest, http://getharvest.com
//
// Version 0.9.7
// 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);
/*
Chosen source: generate output using 'cake build'
Copyright (c) 2011 by Harvest
*/
(function() {
var AbstractChosen, root;
root = this;
AbstractChosen = (function() {
function AbstractChosen(form_field, options) {
this.form_field = form_field;
this.options = options != null ? options : {};
this.set_default_values();
this.is_multiple = this.form_field.multiple;
this.default_text_default = this.is_multiple ? "Select Some Options" : "Select an Option";
this.setup();
this.set_up_html();
this.register_observers();
this.finish_setup();
}
AbstractChosen.prototype.set_default_values = function() {
var _this = this;
this.click_test_action = function(evt) {
return _this.test_active_click(evt);
};
this.activate_action = function(evt) {
return _this.activate_field(evt);
};
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) {
var _this = this;
if (!this.active_field) {
return setTimeout((function() {
return _this.container_mousedown();
}), 50);
}
};
AbstractChosen.prototype.input_blur = function(evt) {
var _this = this;
if (!this.mouse_on_container) {
this.active_field = false;
return setTimeout((function() {
return _this.blur_test();
}), 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 '<li id="' + option.dom_id + '" class="' + classes.join(' ') + '"' + style + '>' + option.html + '</li>';
} 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) this.results_hide();
return true;
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);
/*
Chosen source: generate output using 'cake build'
Copyright (c) 2011 by Harvest
*/
(function() {
var Chosen, get_side_border_padding, root,
__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; };
root = this;
Chosen = (function(_super) {
__extends(Chosen, _super);
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('<a href="javascript:void(0)" class="chzn-single"><span>#{default}</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" autocomplete="off" /></div><ul class="chzn-results"></ul></div>');
this.multi_temp = new Template('<ul class="chzn-choices"><li class="search-field"><input type="text" value="#{default}" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>');
this.choice_temp = new Template('<li class="search-choice" id="#{id}"><span>#{choice}</span><a href="javascript:void(0)" class="search-choice-close" rel="#{position}"></a></li>');
return this.no_results_temp = new Template('<li class="no-results">' + this.results_none_found + ' "<span>#{terms}</span>"</li>');
};
Chosen.prototype.set_up_html = function() {
var base_template, container_props, dd_top, dd_width, sf_width;
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();
container_props = {
'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;
base_template = this.is_multiple ? new Element('div', container_props).update(this.multi_temp.evaluate({
"default": this.default_text
})) : new Element('div', container_props).update(this.single_temp.evaluate({
"default": this.default_text
}));
this.form_field.hide().insert({
after: base_template
});
this.container = $(this.container_id);
this.container.addClassName("chzn-container-" + (this.is_multiple ? "multi" : "single"));
this.dropdown = this.container.down('div.chzn-drop');
dd_top = this.container.getHeight();
dd_width = this.f_width - get_side_border_padding(this.dropdown);
this.dropdown.setStyle({
"width": dd_width + "px",
"top": dd_top + "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');
if (this.is_multiple) {
this.search_choices = this.container.down('ul.chzn-choices');
this.search_container = this.container.down('li.search-field');
} else {
this.search_container = this.container.down('div.chzn-search');
this.selected_item = this.container.down('.chzn-single');
sf_width = dd_width - get_side_border_padding(this.search_container) - get_side_border_padding(this.search_field);
this.search_field.setStyle({
"width": sf_width + "px"
});
}
this.results_build();
this.set_tab_index();
return this.form_field.fire("liszt:ready", {
chosen: this
});
};
Chosen.prototype.register_observers = function() {
var _this = this;
this.container.observe("mousedown", function(evt) {
return _this.container_mousedown(evt);
});
this.container.observe("mouseup", function(evt) {
return _this.container_mouseup(evt);
});
this.container.observe("mouseenter", function(evt) {
return _this.mouse_enter(evt);
});
this.container.observe("mouseleave", function(evt) {
return _this.mouse_leave(evt);
});
this.search_results.observe("mouseup", function(evt) {
return _this.search_results_mouseup(evt);
});
this.search_results.observe("mouseover", function(evt) {
return _this.search_results_mouseover(evt);
});
this.search_results.observe("mouseout", function(evt) {
return _this.search_results_mouseout(evt);
});
this.form_field.observe("liszt:updated", function(evt) {
return _this.results_update_field(evt);
});
this.search_field.observe("blur", function(evt) {
return _this.input_blur(evt);
});
this.search_field.observe("keyup", function(evt) {
return _this.keyup_checker(evt);
});
this.search_field.observe("keydown", function(evt) {
return _this.keydown_checker(evt);
});
if (this.is_multiple) {
this.search_choices.observe("click", function(evt) {
return _this.choices_click(evt);
});
return this.search_field.observe("focus", function(evt) {
return _this.input_focus(evt);
});
} else {
return this.container.observe("click", function(evt) {
return evt.preventDefault();
});
}
};
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.close_field();
} else {
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.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.container_mouseup = function(evt) {
if (evt.target.nodeName === "ABBR") return this.results_reset(evt);
};
Chosen.prototype.blur_test = function(evt) {
if (!this.active_field && this.container.hasClassName("chzn-container-active")) {
return this.close_field();
}
};
Chosen.prototype.close_field = function() {
document.stopObserving("click", this.click_test_action);
if (!this.is_multiple) {
this.selected_item.tabIndex = this.search_field.tabIndex;
this.search_field.tabIndex = -1;
}
this.active_field = false;
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();
};
Chosen.prototype.activate_field = function() {
if (!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 = true;
this.search_field.value = this.search_field.value;
return this.search_field.focus();
};
Chosen.prototype.test_active_click = function(evt) {
if (evt.target.up('#' + this.container_id)) {
return this.active_field = true;
} else {
return this.close_field();
}
};
Chosen.prototype.results_build = function() {
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) {
this.search_choices.select("li.search-choice").invoke("remove");
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;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
data = _ref[_i];
if (data.group) {
content += this.result_add_group(data);
} else if (!data.empty) {
content += this.result_add_option(data);
if (data.selected && this.is_multiple) {
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);
return this.parsing = false;
};
Chosen.prototype.result_add_group = function(group) {
if (!group.disabled) {
group.dom_id = this.container_id + "_g_" + group.array_index;
return '<li id="' + group.dom_id + '" class="group-result">' + group.label.escapeHTML() + '</li>';
} else {
return "";
}
};
Chosen.prototype.result_do_highlight = function(el) {
var high_bottom, high_top, maxHeight, visible_bottom, visible_top;
this.result_clear_highlight();
this.result_highlight = el;
this.result_highlight.addClassName("highlighted");
maxHeight = parseInt(this.search_results.getStyle('maxHeight'), 10);
visible_top = this.search_results.scrollTop;
visible_bottom = maxHeight + visible_top;
high_top = this.result_highlight.positionedOffset().top;
high_bottom = high_top + this.result_highlight.getHeight();
if (high_bottom >= visible_bottom) {
return this.search_results.scrollTop = (high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0;
} else if (high_top < visible_top) {
return this.search_results.scrollTop = high_top;
}
};
Chosen.prototype.result_clear_highlight = function() {
if (this.result_highlight) {
this.result_highlight.removeClassName('highlighted');
}
return this.result_highlight = null;
};
Chosen.prototype.results_show = function() {
var dd_top;
if (!this.is_multiple) {
this.selected_item.addClassName('chzn-single-with-drop');
if (this.result_single_selected) {
this.result_do_highlight(this.result_single_selected);
}
}
dd_top = this.is_multiple ? this.container.getHeight() : this.container.getHeight() - 1;
this.dropdown.setStyle({
"top": dd_top + "px",
"left": 0
});
this.results_showing = true;
this.search_field.focus();
this.search_field.value = this.search_field.value;
return this.winnow_results();
};
Chosen.prototype.results_hide = function() {
if (!this.is_multiple) {
this.selected_item.removeClassName('chzn-single-with-drop');
}
this.result_clear_highlight();
this.dropdown.setStyle({
"left": "-9000px"
});
return this.results_showing = false;
};
Chosen.prototype.set_tab_index = function(el) {
var ti;
if (this.form_field.tabIndex) {
ti = this.form_field.tabIndex;
this.form_field.tabIndex = -1;
if (this.is_multiple) {
return this.search_field.tabIndex = ti;
} else {
this.selected_item.tabIndex = ti;
return this.search_field.tabIndex = -1;
}
}
};
Chosen.prototype.show_search_field_default = function() {
if (this.is_multiple && this.choices < 1 && !this.active_field) {
this.search_field.value = this.default_text;
return this.search_field.addClassName("default");
} else {
this.search_field.value = "";
return this.search_field.removeClassName("default");
}
};
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(evt);
}
};
Chosen.prototype.search_results_mouseover = function(evt) {
var target;
target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result");
if (target) return this.result_do_highlight(target);
};
Chosen.prototype.search_results_mouseout = function(evt) {
if (evt.target.hasClassName('active-result') || evt.target.up('.active-result')) {
return this.result_clear_highlight();
}
};
Chosen.prototype.choices_click = function(evt) {
evt.preventDefault();
if (this.active_field && !(evt.target.hasClassName('search-choice') || evt.target.up('.search-choice')) && !this.results_showing) {
return this.results_show();
}
};
Chosen.prototype.choice_build = function(item) {
var choice_id, link,
_this = this;
choice_id = this.container_id + "_c_" + item.array_index;
this.choices += 1;
this.search_container.insert({
before: this.choice_temp.evaluate({
id: choice_id,
choice: item.html,
position: item.array_index
})
});
link = $(choice_id).down('a');
return link.observe("click", function(evt) {
return _this.choice_destroy_link_click(evt);
});
};
Chosen.prototype.choice_destroy_link_click = function(evt) {
evt.preventDefault();
if (!this.is_disabled) {
this.pending_destroy_click = true;
return this.choice_destroy(evt.target);
}
};
Chosen.prototype.choice_destroy = function(link) {
this.choices -= 1;
this.show_search_field_default();
if (this.is_multiple && this.choices > 0 && this.search_field.value.length < 1) {
this.results_hide();
}
this.result_deselect(link.readAttribute("rel"));
return link.up('li').remove();
};
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();
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;
this.form_field.options[item.options_index].selected = true;
if (this.is_multiple) {
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.search_field.value = "";
if (typeof Event.simulate === 'function') {
this.form_field.simulate("change");
}
return this.search_field_scale();
}
};
Chosen.prototype.result_activate = function(el) {
return el.addClassName("active-result");
};
Chosen.prototype.result_deactivate = function(el) {
return el.removeClassName("active-result");
};
Chosen.prototype.result_deselect = function(pos) {
var result, result_data;
result_data = this.results_data[pos];
result_data.selected = false;
this.form_field.options[result_data.options_index].selected = false;
result = $(this.container_id + "_o_" + pos);
result.removeClassName("result-selected").addClassName("active-result").show();
this.result_clear_highlight();
this.winnow_results();
if (typeof Event.simulate === 'function') this.form_field.simulate("change");
return this.search_field_scale();
};
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: "<abbr class=\"search-choice-close\"></abbr>"
});
}
};
Chosen.prototype.winnow_results = function() {
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();
regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i');
zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i');
_ref = this.results_data;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
option = _ref[_i];
if (!option.disabled && !option.empty) {
if (option.group) {
$(option.dom_id).hide();
} else if (!(this.is_multiple && option.selected)) {
found = false;
result_id = option.dom_id;
if (regex.test(option.html)) {
found = true;
results += 1;
} else if (option.html.indexOf(" ") >= 0 || option.html.indexOf("[") === 0) {
parts = option.html.replace(/\[|\]/g, "").split(" ");
if (parts.length) {
for (_j = 0, _len2 = parts.length; _j < _len2; _j++) {
part = parts[_j];
if (regex.test(part)) {
found = true;
results += 1;
}
}
}
}
if (found) {
if (searchText.length) {
startpos = option.html.search(zregex);
text = option.html.substr(0, startpos + searchText.length) + '</em>' + option.html.substr(startpos + searchText.length);
text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
} else {
text = option.html;
}
if ($(result_id).innerHTML !== text) $(result_id).update(text);
this.result_activate($(result_id));
if (option.group_array_index != null) {
$(this.results_data[option.group_array_index].dom_id).setStyle({
display: 'list-item'
});
}
} else {
if ($(result_id) === this.result_highlight) {
this.result_clear_highlight();
}
this.result_deactivate($(result_id));
}
}
}
}
if (results < 1 && searchText.length) {
return this.no_results(searchText);
} else {
return this.winnow_results_set_highlight();
}
};
Chosen.prototype.winnow_results_clear = function() {
var li, lis, _i, _len, _results;
this.search_field.clear();
lis = this.search_results.select("li");
_results = [];
for (_i = 0, _len = lis.length; _i < _len; _i++) {
li = lis[_i];
if (li.hasClassName("group-result")) {
_results.push(li.show());
} else if (!this.is_multiple || !li.hasClassName("result-selected")) {
_results.push(this.result_activate(li));
} else {
_results.push(void 0);
}
}
return _results;
};
Chosen.prototype.winnow_results_set_highlight = function() {
var do_high;
if (!this.result_highlight) {
if (!this.is_multiple) {
do_high = this.search_results.down(".result-selected.active-result");
}
if (!(do_high != null)) {
do_high = this.search_results.down(".active-result");
}
if (do_high != null) return this.result_do_highlight(do_high);
}
};
Chosen.prototype.no_results = function(terms) {
return this.search_results.insert(this.no_results_temp.evaluate({
terms: terms
}));
};
Chosen.prototype.no_results_clear = function() {
var nr, _results;
nr = null;
_results = [];
while (nr = this.search_results.down(".no-results")) {
_results.push(nr.remove());
}
return _results;
};
Chosen.prototype.keydown_arrow = function() {
var actives, nexts, sibs;
actives = this.search_results.select("li.active-result");
if (actives.length) {
if (!this.result_highlight) {
this.result_do_highlight(actives.first());
} else if (this.results_showing) {
sibs = this.result_highlight.nextSiblings();
nexts = sibs.intersect(actives);
if (nexts.length) this.result_do_highlight(nexts.first());
}
if (!this.results_showing) return this.results_show();
}
};
Chosen.prototype.keyup_arrow = function() {
var actives, prevs, sibs;
if (!this.results_showing && !this.is_multiple) {
return this.results_show();
} else if (this.result_highlight) {
sibs = this.result_highlight.previousSiblings();
actives = this.search_results.select("li.active-result");
prevs = sibs.intersect(actives);
if (prevs.length) {
return this.result_do_highlight(prevs.first());
} else {
if (this.choices > 0) this.results_hide();
return this.result_clear_highlight();
}
}
};
Chosen.prototype.keydown_backstroke = function() {
if (this.pending_backstroke) {
this.choice_destroy(this.pending_backstroke.down("a"));
return this.clear_backstroke();
} else {
this.pending_backstroke = this.search_container.siblings("li.search-choice").last();
return this.pending_backstroke.addClassName("search-choice-focus");
}
};
Chosen.prototype.clear_backstroke = function() {
if (this.pending_backstroke) {
this.pending_backstroke.removeClassName("search-choice-focus");
}
return this.pending_backstroke = null;
};
Chosen.prototype.keydown_checker = function(evt) {
var stroke, _ref;
stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
this.search_field_scale();
if (stroke !== 8 && this.pending_backstroke) this.clear_backstroke();
switch (stroke) {
case 8:
this.backstroke_length = this.search_field.value.length;
break;
case 9:
if (this.results_showing && !this.is_multiple) this.result_select(evt);
this.mouse_on_container = false;
break;
case 13:
evt.preventDefault();
break;
case 38:
evt.preventDefault();
this.keyup_arrow();
break;
case 40:
this.keydown_arrow();
break;
}
};
Chosen.prototype.search_field_scale = function() {
var dd_top, div, h, style, style_block, styles, w, _i, _len;
if (this.is_multiple) {
h = 0;
w = 0;
style_block = "position:absolute; left: -1000px; top: -1000px; display:none;";
styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];
for (_i = 0, _len = styles.length; _i < _len; _i++) {
style = styles[_i];
style_block += style + ":" + this.search_field.getStyle(style) + ";";
}
div = new Element('div', {
'style': style_block
}).update(this.search_field.value.escapeHTML());
document.body.appendChild(div);
w = Element.measure(div, 'width') + 25;
div.remove();
if (w > this.f_width - 10) w = this.f_width - 10;
this.search_field.setStyle({
'width': w + 'px'
});
dd_top = this.container.getHeight();
return this.dropdown.setStyle({
"top": dd_top + "px"
});
}
};
return Chosen;
})(AbstractChosen);
root.Chosen = Chosen;
if (Prototype.Browser.IE) {
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
Prototype.BrowserFeatures['Version'] = new Number(RegExp.$1);
}
}
get_side_border_padding = function(elmt) {
var layout, side_border_padding;
layout = new Element.Layout(elmt);
return side_border_padding = layout.get("border-left") + layout.get("border-right") + layout.get("padding-left") + layout.get("padding-right");
};
root.get_side_border_padding = get_side_border_padding;
}).call(this);

File diff suppressed because one or more lines are too long

View file

@ -1,552 +0,0 @@
###
Chosen source: generate output using 'cake build'
Copyright (c) 2011 by Harvest
###
root = this
$ = jQuery
$.fn.extend({
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, options) unless ($ this).hasClass "chzn-done"
)
})
class Chosen extends AbstractChosen
setup: ->
@form_field_jq = $ @form_field
@is_rtl = @form_field_jq.hasClass "chzn-rtl"
finish_setup: ->
@form_field_jq.addClass "chzn-done"
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.outerWidth()
@default_text = if @form_field_jq.data 'placeholder' then @form_field_jq.data 'placeholder' else @default_text_default
container_div = ($ "<div />", {
id: @container_id
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
})
if @is_multiple
container_div.html '<ul class="chzn-choices"><li class="search-field"><input type="text" value="' + @default_text + '" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>'
else
container_div.html '<a href="javascript:void(0)" class="chzn-single"><span>' + @default_text + '</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" autocomplete="off" /></div><ul class="chzn-results"></ul></div>'
@form_field_jq.hide().after container_div
@container = ($ '#' + @container_id)
@container.addClass( "chzn-container-" + (if @is_multiple then "multi" else "single") )
@dropdown = @container.find('div.chzn-drop').first()
dd_top = @container.height()
dd_width = (@f_width - get_side_border_padding(@dropdown))
@dropdown.css({"width": dd_width + "px", "top": dd_top + "px"})
@search_field = @container.find('input').first()
@search_results = @container.find('ul.chzn-results').first()
this.search_field_scale()
@search_no_results = @container.find('li.no-results').first()
if @is_multiple
@search_choices = @container.find('ul.chzn-choices').first()
@search_container = @container.find('li.search-field').first()
else
@search_container = @container.find('div.chzn-search').first()
@selected_item = @container.find('.chzn-single').first()
sf_width = dd_width - get_side_border_padding(@search_container) - get_side_border_padding(@search_field)
@search_field.css( {"width" : sf_width + "px"} )
this.results_build()
this.set_tab_index()
@form_field_jq.trigger("liszt:ready", {chosen: this})
register_observers: ->
@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.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)
@form_field_jq.bind "liszt:updated", (evt) => this.results_update_field(evt)
@search_field.blur (evt) => this.input_blur(evt)
@search_field.keyup (evt) => this.keyup_checker(evt)
@search_field.keydown (evt) => this.keydown_checker(evt)
if @is_multiple
@search_choices.click (evt) => this.choices_click(evt)
@search_field.focus (evt) => this.input_focus(evt)
else
@container.click (evt) => evt.preventDefault() # gobble click of anchor
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
@container.removeClass 'chzn-disabled'
@search_field[0].disabled = false
@selected_item.bind "focus", @activate_action if !@is_multiple
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
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"
close_field: ->
$(document).unbind "click", @click_test_action
if not @is_multiple
@selected_item.attr "tabindex", @search_field.attr("tabindex")
@search_field.attr "tabindex", -1
@active_field = false
this.results_hide()
@container.removeClass "chzn-container-active"
this.winnow_results_clear()
this.clear_backstroke()
this.show_search_field_default()
this.search_field_scale()
activate_field: ->
if not @is_multiple and not @active_field
@search_field.attr "tabindex", (@selected_item.attr "tabindex")
@selected_item.attr "tabindex", -1
@container.addClass "chzn-container-active"
@active_field = true
@search_field.val(@search_field.val())
@search_field.focus()
test_active_click: (evt) ->
if $(evt.target).parents('#' + @container_id).length
@active_field = true
else
this.close_field()
results_build: ->
@parsing = true
@results_data = root.SelectParser.select_to_array @form_field
if @is_multiple and @choices > 0
@search_choices.find("li.search-choice").remove()
@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
if data.group
content += this.result_add_group data
else if !data.empty
content += this.result_add_option data
if data.selected and @is_multiple
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()
@search_results.html content
@parsing = false
result_add_group: (group) ->
if not group.disabled
group.dom_id = @container_id + "_g_" + group.array_index
'<li id="' + group.dom_id + '" class="group-result">' + $("<div />").text(group.label).html() + '</li>'
else
""
result_do_highlight: (el) ->
if el.length
this.result_clear_highlight()
@result_highlight = el
@result_highlight.addClass "highlighted"
maxHeight = parseInt @search_results.css("maxHeight"), 10
visible_top = @search_results.scrollTop()
visible_bottom = maxHeight + visible_top
high_top = @result_highlight.position().top + @search_results.scrollTop()
high_bottom = high_top + @result_highlight.outerHeight()
if high_bottom >= visible_bottom
@search_results.scrollTop if (high_bottom - maxHeight) > 0 then (high_bottom - maxHeight) else 0
else if high_top < visible_top
@search_results.scrollTop high_top
result_clear_highlight: ->
@result_highlight.removeClass "highlighted" if @result_highlight
@result_highlight = null
results_show: ->
if not @is_multiple
@selected_item.addClass "chzn-single-with-drop"
if @result_single_selected
this.result_do_highlight( @result_single_selected )
dd_top = if @is_multiple then @container.height() else (@container.height() - 1)
@dropdown.css {"top": dd_top + "px", "left":0}
@results_showing = true
@search_field.focus()
@search_field.val @search_field.val()
this.winnow_results()
results_hide: ->
@selected_item.removeClass "chzn-single-with-drop" unless @is_multiple
this.result_clear_highlight()
@dropdown.css {"left":"-9000px"}
@results_showing = false
set_tab_index: (el) ->
if @form_field_jq.attr "tabindex"
ti = @form_field_jq.attr "tabindex"
@form_field_jq.attr "tabindex", -1
if @is_multiple
@search_field.attr "tabindex", ti
else
@selected_item.attr "tabindex", ti
@search_field.attr "tabindex", -1
show_search_field_default: ->
if @is_multiple and @choices < 1 and not @active_field
@search_field.val(@default_text)
@search_field.addClass "default"
else
@search_field.val("")
@search_field.removeClass "default"
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(evt)
search_results_mouseover: (evt) ->
target = if $(evt.target).hasClass "active-result" then $(evt.target) else $(evt.target).parents(".active-result").first()
this.result_do_highlight( target ) if target
search_results_mouseout: (evt) ->
this.result_clear_highlight() if $(evt.target).hasClass "active-result" or $(evt.target).parents('.active-result').first()
choices_click: (evt) ->
evt.preventDefault()
if( @active_field and not($(evt.target).hasClass "search-choice" or $(evt.target).parents('.search-choice').first) and not @results_showing )
this.results_show()
choice_build: (item) ->
choice_id = @container_id + "_c_" + item.array_index
@choices += 1
@search_container.before '<li class="search-choice" id="' + choice_id + '"><span>' + item.html + '</span><a href="javascript:void(0)" class="search-choice-close" rel="' + item.array_index + '"></a></li>'
link = $('#' + choice_id).find("a").first()
link.click (evt) => this.choice_destroy_link_click(evt)
choice_destroy_link_click: (evt) ->
evt.preventDefault()
if not @is_disabled
@pending_destroy_click = true
this.choice_destroy $(evt.target)
else
evt.stopPropagation
choice_destroy: (link) ->
@choices -= 1
this.show_search_field_default()
this.results_hide() if @is_multiple and @choices > 0 and @search_field.val().length < 1
this.result_deselect (link.attr "rel")
link.parents('li').first().remove()
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()
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
@form_field.options[item.options_index].selected = true
if @is_multiple
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
@search_field.val ""
@form_field_jq.trigger "change"
this.search_field_scale()
result_activate: (el) ->
el.addClass("active-result")
result_deactivate: (el) ->
el.removeClass("active-result")
result_deselect: (pos) ->
result_data = @results_data[pos]
result_data.selected = false
@form_field.options[result_data.options_index].selected = false
result = $("#" + @container_id + "_o_" + pos)
result.removeClass("result-selected").addClass("active-result").show()
this.result_clear_highlight()
this.winnow_results()
@form_field_jq.trigger "change"
this.search_field_scale()
single_deselect_control_build: ->
@selected_item.find("span").first().after "<abbr class=\"search-choice-close\"></abbr>" if @allow_single_deselect and @selected_item.find("abbr").length < 1
winnow_results: ->
this.no_results_clear()
results = 0
searchText = if @search_field.val() is @default_text then "" else $('<div/>').text($.trim(@search_field.val())).html()
regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i')
zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i')
for option in @results_data
if not option.disabled and not option.empty
if option.group
$('#' + 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
results += 1
else if option.html.indexOf(" ") >= 0 or option.html.indexOf("[") == 0
#TODO: replace this substitution of /\[\]/ with a list of characters to skip.
parts = option.html.replace(/\[|\]/g, "").split(" ")
if parts.length
for part in parts
if regex.test part
found = true
results += 1
if found
if searchText.length
startpos = option.html.search zregex
text = option.html.substr(0, startpos + searchText.length) + '</em>' + option.html.substr(startpos + searchText.length)
text = text.substr(0, startpos) + '<em>' + text.substr(startpos)
else
text = option.html
result.html(text)
this.result_activate result
$("#" + @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
if results < 1 and searchText.length
this.no_results searchText
else
this.winnow_results_set_highlight()
winnow_results_clear: ->
@search_field.val ""
lis = @search_results.find("li")
for li in lis
li = $(li)
if li.hasClass "group-result"
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.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 = $('<li class="no-results">' + @results_none_found + ' "<span></span>"</li>')
no_results_html.find("span").first().html(terms)
@search_results.append no_results_html
no_results_clear: ->
@search_results.find(".no-results").remove()
keydown_arrow: ->
if not @result_highlight
first_active = @search_results.find("li.active-result").first()
this.result_do_highlight $(first_active) if first_active
else if @results_showing
next_sib = @result_highlight.nextAll("li.active-result").first()
this.result_do_highlight next_sib if next_sib
this.results_show() if not @results_showing
keyup_arrow: ->
if not @results_showing and not @is_multiple
this.results_show()
else if @result_highlight
prev_sibs = @result_highlight.prevAll("li.active-result")
if prev_sibs.length
this.result_do_highlight prev_sibs.first()
else
this.results_hide() if @choices > 0
this.result_clear_highlight()
keydown_backstroke: ->
if @pending_backstroke
this.choice_destroy @pending_backstroke.find("a").first()
this.clear_backstroke()
else
@pending_backstroke = @search_container.siblings("li.search-choice").last()
@pending_backstroke.addClass "search-choice-focus"
clear_backstroke: ->
@pending_backstroke.removeClass "search-choice-focus" if @pending_backstroke
@pending_backstroke = null
keydown_checker: (evt) ->
stroke = evt.which ? evt.keyCode
this.search_field_scale()
this.clear_backstroke() if stroke != 8 and this.pending_backstroke
switch stroke
when 8
@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
evt.preventDefault()
break
when 38
evt.preventDefault()
this.keyup_arrow()
break
when 40
this.keydown_arrow()
break
search_field_scale: ->
if @is_multiple
h = 0
w = 0
style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"
styles = ['font-size','font-style', 'font-weight', 'font-family','line-height', 'text-transform', 'letter-spacing']
for style in styles
style_block += style + ":" + @search_field.css(style) + ";"
div = $('<div />', { 'style' : style_block })
div.text @search_field.val()
$('body').append div
w = div.width() + 25
div.remove()
if( w > @f_width-10 )
w = @f_width - 10
@search_field.css({'width': w + 'px'})
dd_top = @container.height()
@dropdown.css({"top": dd_top + "px"})
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
get_side_border_padding = (elmt) ->
side_border_padding = elmt.outerWidth() - elmt.width()
root.get_side_border_padding = get_side_border_padding

View file

@ -1,550 +0,0 @@
###
Chosen source: generate output using 'cake build'
Copyright (c) 2011 by Harvest
###
root = this
class Chosen extends AbstractChosen
setup: ->
@is_rtl = @form_field.hasClassName "chzn-rtl"
finish_setup: ->
@form_field.addClassName "chzn-done"
set_default_values: ->
super()
# HTML Templates
@single_temp = new Template('<a href="javascript:void(0)" class="chzn-single"><span>#{default}</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" autocomplete="off" /></div><ul class="chzn-results"></ul></div>')
@multi_temp = new Template('<ul class="chzn-choices"><li class="search-field"><input type="text" value="#{default}" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>')
@choice_temp = new Template('<li class="search-choice" id="#{id}"><span>#{choice}</span><a href="javascript:void(0)" class="search-choice-close" rel="#{position}"></a></li>')
@no_results_temp = new Template('<li class="no-results">' + @results_none_found + ' "<span>#{terms}</span>"</li>')
set_up_html: ->
@container_id = @form_field.identify().replace(/(:|\.)/g, '_') + "_chzn"
@f_width = if @form_field.getStyle("width") then parseInt @form_field.getStyle("width"), 10 else @form_field.getWidth()
container_props =
'id': @container_id
'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
base_template = if @is_multiple then new Element('div', container_props).update( @multi_temp.evaluate({ "default": @default_text}) ) else new Element('div', container_props).update( @single_temp.evaluate({ "default":@default_text }) )
@form_field.hide().insert({ after: base_template })
@container = $(@container_id)
@container.addClassName( "chzn-container-" + (if @is_multiple then "multi" else "single") )
@dropdown = @container.down('div.chzn-drop')
dd_top = @container.getHeight()
dd_width = (@f_width - get_side_border_padding(@dropdown))
@dropdown.setStyle({"width": dd_width + "px", "top": dd_top + "px"})
@search_field = @container.down('input')
@search_results = @container.down('ul.chzn-results')
this.search_field_scale()
@search_no_results = @container.down('li.no-results')
if @is_multiple
@search_choices = @container.down('ul.chzn-choices')
@search_container = @container.down('li.search-field')
else
@search_container = @container.down('div.chzn-search')
@selected_item = @container.down('.chzn-single')
sf_width = dd_width - get_side_border_padding(@search_container) - get_side_border_padding(@search_field)
@search_field.setStyle( {"width" : sf_width + "px"} )
this.results_build()
this.set_tab_index()
@form_field.fire("liszt:ready", {chosen: this})
register_observers: ->
@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 "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)
@form_field.observe "liszt:updated", (evt) => this.results_update_field(evt)
@search_field.observe "blur", (evt) => this.input_blur(evt)
@search_field.observe "keyup", (evt) => this.keyup_checker(evt)
@search_field.observe "keydown", (evt) => this.keydown_checker(evt)
if @is_multiple
@search_choices.observe "click", (evt) => this.choices_click(evt)
@search_field.observe "focus", (evt) => this.input_focus(evt)
else
@container.observe "click", (evt) => evt.preventDefault() # gobble click of anchor
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
@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()
this.activate_field()
else
@pending_destroy_click = false
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")
close_field: ->
document.stopObserving "click", @click_test_action
if not @is_multiple
@selected_item.tabIndex = @search_field.tabIndex
@search_field.tabIndex = -1
@active_field = false
this.results_hide()
@container.removeClassName "chzn-container-active"
this.winnow_results_clear()
this.clear_backstroke()
this.show_search_field_default()
this.search_field_scale()
activate_field: ->
if not @is_multiple and not @active_field
@search_field.tabIndex = @selected_item.tabIndex
@selected_item.tabIndex = -1
@container.addClassName "chzn-container-active"
@active_field = true
@search_field.value = @search_field.value
@search_field.focus()
test_active_click: (evt) ->
if evt.target.up('#' + @container_id)
@active_field = true
else
this.close_field()
results_build: ->
@parsing = true
@results_data = root.SelectParser.select_to_array @form_field
if @is_multiple and @choices > 0
@search_choices.select("li.search-choice").invoke("remove")
@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
if data.group
content += this.result_add_group data
else if !data.empty
content += this.result_add_option data
if data.selected and @is_multiple
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()
@search_results.update content
@parsing = false
result_add_group: (group) ->
if not group.disabled
group.dom_id = @container_id + "_g_" + group.array_index
'<li id="' + group.dom_id + '" class="group-result">' + group.label.escapeHTML() + '</li>'
else
""
result_do_highlight: (el) ->
this.result_clear_highlight()
@result_highlight = el
@result_highlight.addClassName "highlighted"
maxHeight = parseInt @search_results.getStyle('maxHeight'), 10
visible_top = @search_results.scrollTop
visible_bottom = maxHeight + visible_top
high_top = @result_highlight.positionedOffset().top
high_bottom = high_top + @result_highlight.getHeight()
if high_bottom >= visible_bottom
@search_results.scrollTop = if (high_bottom - maxHeight) > 0 then (high_bottom - maxHeight) else 0
else if high_top < visible_top
@search_results.scrollTop = high_top
result_clear_highlight: ->
@result_highlight.removeClassName('highlighted') if @result_highlight
@result_highlight = null
results_show: ->
if not @is_multiple
@selected_item.addClassName('chzn-single-with-drop')
if @result_single_selected
this.result_do_highlight( @result_single_selected )
dd_top = if @is_multiple then @container.getHeight() else (@container.getHeight() - 1)
@dropdown.setStyle {"top": dd_top + "px", "left":0}
@results_showing = true
@search_field.focus()
@search_field.value = @search_field.value
this.winnow_results()
results_hide: ->
@selected_item.removeClassName('chzn-single-with-drop') unless @is_multiple
this.result_clear_highlight()
@dropdown.setStyle({"left":"-9000px"})
@results_showing = false
set_tab_index: (el) ->
if @form_field.tabIndex
ti = @form_field.tabIndex
@form_field.tabIndex = -1
if @is_multiple
@search_field.tabIndex = ti
else
@selected_item.tabIndex = ti
@search_field.tabIndex = -1
show_search_field_default: ->
if @is_multiple and @choices < 1 and not @active_field
@search_field.value = @default_text
@search_field.addClassName "default"
else
@search_field.value = ""
@search_field.removeClassName "default"
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(evt)
search_results_mouseover: (evt) ->
target = if evt.target.hasClassName("active-result") then evt.target else evt.target.up(".active-result")
this.result_do_highlight( target ) if target
search_results_mouseout: (evt) ->
this.result_clear_highlight() if evt.target.hasClassName('active-result') or evt.target.up('.active-result')
choices_click: (evt) ->
evt.preventDefault()
if( @active_field and not(evt.target.hasClassName('search-choice') or evt.target.up('.search-choice')) and not @results_showing )
this.results_show()
choice_build: (item) ->
choice_id = @container_id + "_c_" + item.array_index
@choices += 1
@search_container.insert
before: @choice_temp.evaluate
id: choice_id
choice: item.html
position: item.array_index
link = $(choice_id).down('a')
link.observe "click", (evt) => this.choice_destroy_link_click(evt)
choice_destroy_link_click: (evt) ->
evt.preventDefault()
if not @is_disabled
@pending_destroy_click = true
this.choice_destroy evt.target
choice_destroy: (link) ->
@choices -= 1
this.show_search_field_default()
this.results_hide() if @is_multiple and @choices > 0 and @search_field.value.length < 1
this.result_deselect link.readAttribute("rel")
link.up('li').remove()
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()
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]
item.selected = true
@form_field.options[item.options_index].selected = true
if @is_multiple
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
@search_field.value = ""
@form_field.simulate("change") if typeof Event.simulate is 'function'
this.search_field_scale()
result_activate: (el) ->
el.addClassName("active-result")
result_deactivate: (el) ->
el.removeClassName("active-result")
result_deselect: (pos) ->
result_data = @results_data[pos]
result_data.selected = false
@form_field.options[result_data.options_index].selected = false
result = $(@container_id + "_o_" + pos)
result.removeClassName("result-selected").addClassName("active-result").show()
this.result_clear_highlight()
this.winnow_results()
@form_field.simulate("change") if typeof Event.simulate is 'function'
this.search_field_scale()
single_deselect_control_build: ->
@selected_item.down("span").insert { after: "<abbr class=\"search-choice-close\"></abbr>" } if @allow_single_deselect and not @selected_item.down("abbr")
winnow_results: ->
this.no_results_clear()
results = 0
searchText = if @search_field.value is @default_text then "" else @search_field.value.strip().escapeHTML()
regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i')
zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i')
for option in @results_data
if not option.disabled and not option.empty
if option.group
$(option.dom_id).hide()
else if not (@is_multiple and option.selected)
found = false
result_id = option.dom_id
if regex.test option.html
found = true
results += 1
else if option.html.indexOf(" ") >= 0 or option.html.indexOf("[") == 0
#TODO: replace this substitution of /\[\]/ with a list of characters to skip.
parts = option.html.replace(/\[|\]/g, "").split(" ")
if parts.length
for part in parts
if regex.test part
found = true
results += 1
if found
if searchText.length
startpos = option.html.search zregex
text = option.html.substr(0, startpos + searchText.length) + '</em>' + option.html.substr(startpos + searchText.length)
text = text.substr(0, startpos) + '<em>' + text.substr(startpos)
else
text = option.html
$(result_id).update text if $(result_id).innerHTML != text
this.result_activate $(result_id)
$(@results_data[option.group_array_index].dom_id).setStyle({display: 'list-item'}) if option.group_array_index?
else
this.result_clear_highlight() if $(result_id) is @result_highlight
this.result_deactivate $(result_id)
if results < 1 and searchText.length
this.no_results(searchText)
else
this.winnow_results_set_highlight()
winnow_results_clear: ->
@search_field.clear()
lis = @search_results.select("li")
for li in lis
if li.hasClassName("group-result")
li.show()
else if not @is_multiple or not li.hasClassName("result-selected")
this.result_activate li
winnow_results_set_highlight: ->
if not @result_highlight
if not @is_multiple
do_high = @search_results.down(".result-selected.active-result")
if not do_high?
do_high = @search_results.down(".active-result")
this.result_do_highlight do_high if do_high?
no_results: (terms) ->
@search_results.insert @no_results_temp.evaluate( terms: terms )
no_results_clear: ->
nr = null
nr.remove() while nr = @search_results.down(".no-results")
keydown_arrow: ->
actives = @search_results.select("li.active-result")
if actives.length
if not @result_highlight
this.result_do_highlight actives.first()
else if @results_showing
sibs = @result_highlight.nextSiblings()
nexts = sibs.intersect(actives)
this.result_do_highlight nexts.first() if nexts.length
this.results_show() if not @results_showing
keyup_arrow: ->
if not @results_showing and not @is_multiple
this.results_show()
else if @result_highlight
sibs = @result_highlight.previousSiblings()
actives = @search_results.select("li.active-result")
prevs = sibs.intersect(actives)
if prevs.length
this.result_do_highlight prevs.first()
else
this.results_hide() if @choices > 0
this.result_clear_highlight()
keydown_backstroke: ->
if @pending_backstroke
this.choice_destroy @pending_backstroke.down("a")
this.clear_backstroke()
else
@pending_backstroke = @search_container.siblings("li.search-choice").last()
@pending_backstroke.addClassName("search-choice-focus")
clear_backstroke: ->
@pending_backstroke.removeClassName("search-choice-focus") if @pending_backstroke
@pending_backstroke = null
keydown_checker: (evt) ->
stroke = evt.which ? evt.keyCode
this.search_field_scale()
this.clear_backstroke() if stroke != 8 and this.pending_backstroke
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
h = 0
w = 0
style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"
styles = ['font-size','font-style', 'font-weight', 'font-family','line-height', 'text-transform', 'letter-spacing']
for style in styles
style_block += style + ":" + @search_field.getStyle(style) + ";"
div = new Element('div', { 'style' : style_block }).update(@search_field.value.escapeHTML())
document.body.appendChild(div)
w = Element.measure(div, 'width') + 25
div.remove()
if( w > @f_width-10 )
w = @f_width - 10
@search_field.setStyle({'width': w + 'px'})
dd_top = @container.getHeight()
@dropdown.setStyle({"top": dd_top + "px"})
root.Chosen = Chosen
# 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)
side_border_padding = layout.get("border-left") + layout.get("border-right") + layout.get("padding-left") + layout.get("padding-right")
root.get_side_border_padding = get_side_border_padding

View file

@ -1,109 +0,0 @@
###
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 ""
'<li id="' + option.dom_id + '" class="' + classes.join(' ') + '"'+style+'>' + option.html + '</li>'
else
""
results_update_field: ->
this.result_clear_highlight()
@result_single_selected = null
this.results_build()
results_toggle: ->
if @results_showing
this.results_hide()
else
this.results_show()
results_search: (evt) ->
if @results_showing
this.winnow_results()
else
this.results_show()
keyup_checker: (evt) ->
stroke = evt.which ? evt.keyCode
this.search_field_scale()
switch stroke
when 8
if @is_multiple and @backstroke_length < 1 and @choices > 0
this.keydown_backstroke()
else if not @pending_backstroke
this.result_clear_highlight()
this.results_search()
when 13
evt.preventDefault()
this.result_select(evt) if this.results_showing
when 27
this.results_hide() if @results_showing
return true
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

View file

@ -1,51 +0,0 @@
class SelectParser
constructor: ->
@options_index = 0
@parsed = []
add_node: (child) ->
if child.nodeName is "OPTGROUP"
this.add_group child
else
this.add_option child
add_group: (group) ->
group_position = @parsed.length
@parsed.push
array_index: group_position
group: true
label: group.label
children: 0
disabled: group.disabled
this.add_option( option, group_position, group.disabled ) for option in group.childNodes
add_option: (option, group_position, group_disabled) ->
if option.nodeName is "OPTION"
if option.text != ""
if group_position?
@parsed[group_position].children += 1
@parsed.push
array_index: @parsed.length
options_index: @options_index
value: option.value
text: option.text
html: option.innerHTML
selected: option.selected
disabled: if group_disabled is true then group_disabled else option.disabled
group_array_index: group_position
classes: option.className
style: option.style.cssText
else
@parsed.push
array_index: @parsed.length
options_index: @options_index
empty: true
@options_index += 1
SelectParser.select_to_array = (select) ->
parser = new SelectParser()
parser.add_node( child ) for child in select.childNodes
parser.parsed
this.SelectParser = SelectParser

BIN
docsupport/.DS_Store vendored Normal file

Binary file not shown.

BIN
docsupport/chosen.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

67
docsupport/style.css Normal file
View file

@ -0,0 +1,67 @@
/* Reset */
html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; }
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; }
blockquote, q { quotes: none; }
blockquote:before, blockquote:after, q:before, q:after { content: ""; content: none; }
ins { background-color: #ff9; color: #000; text-decoration: none; }
mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; }
del { text-decoration: line-through; }
abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; }
table { border-collapse: collapse; border-spacing: 0; }
hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
input, select { vertical-align: middle; }
body { font:13px/1.231 sans-serif; *font-size:small; } /* Hack retained to preserve specificity */
select, input, textarea, button { font:99% sans-serif; }
pre, code, kbd, samp { font-family: monospace, sans-serif; }
body { background: #EEE; color: #444; line-height: 1.4em; }
header { background: #222; background: -moz-linear-gradient(center bottom , #222 0%, #444 80%) repeat scroll 0 0 transparent; background: -webkit-gradient(linear, 0% 100%, 0% 0%, color-stop(0, #222), color-stop(0.8, #444)); height: 59px; margin: 0 auto; padding: 0 50px; width: 740px; }
header h1 { color: white; font-size: 2em; line-height: 1.1em; text-indent: -5000px; display: inline-block; width: 109px; height: 27px; background: url(chosen.png); margin-top: 13px; }
header a { color: white; float: right; font-size: .825em; line-height: 60px; }
div#content { background: white; border: 1px solid #ccc; border-width: 0 1px 1px; margin: 0 auto; padding: 40px 50px 40px; width: 738px; }
footer { color: #999; padding-top: 40px; font-size: 0.8em; text-align: center; }
body { font-family: sans-serif; font-size: 1em; }
p { margin: 0 0 .7em; max-width: 700px; }
h2 { border-bottom: 1px solid #ccc; font-size: 1.2em; margin: 3em 0 1em 0; font-weight: bold;}
h3 { font-weight: bold; }
h2.intro { border-bottom: none; font-size: 1em; font-weight: normal; margin-top:0; }
ul li { list-style: disc; margin-left: 1em; margin-bottom: 1.25em; }
ol li { margin-left: 1.25em; }
ol ul, ul ul { margin: .25em 0 0; }
ol ul li, ul ul li { list-style-type: circle; margin: 0 0 .25em 1em; }
li > p { margin-top: .25em; }
div.side-by-side { width: 100%; margin-bottom: 1em; }
div.side-by-side > div { float: left; width: 49%; }
div.side-by-side > div > em { margin-bottom: 10px; display: block; }
.faqs em { display: block; }
.clearfix:after {
content: "\0020";
display: block;
height: 0;
clear: both;
overflow: hidden;
visibility: hidden;
}
a { color: #F36C00; outline: none; text-decoration: none; }
a:hover { text-decoration: underline; }
ul.credits li { margin-bottom: .25em; }
strong { font-weight: bold; }

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

1334
index.html Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,18 +0,0 @@
{
"author": "harvest",
"name": "chosen",
"version": "0.9.7",
"description": "Chosen is a JavaScript plugin that makes long, unwieldy select boxes much more user-friendly. It is currently available in both jQuery and Prototype flavors.",
"repository": {
"type": "git",
"url": "https://github.com/harvesthq/chosen"
},
"engines": {
"node": ">=0.4.0"
},
"dependencies": {},
"devDependencies": {
"coffee-script": ">= 1.2",
"uglify-js": ">= 1.2.5"
}
}