kylekthompson-shoppe 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (239) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +55 -0
  4. data/Rakefile +36 -0
  5. data/app/assets/images/shoppe/chosen-sprite.png +0 -0
  6. data/app/assets/images/shoppe/chosen-sprite@2x.png +0 -0
  7. data/app/assets/images/shoppe/document.svg +1 -0
  8. data/app/assets/images/shoppe/icons/bag.svg +1 -0
  9. data/app/assets/images/shoppe/icons/balance.svg +1 -0
  10. data/app/assets/images/shoppe/icons/box.svg +1 -0
  11. data/app/assets/images/shoppe/icons/building.svg +1 -0
  12. data/app/assets/images/shoppe/icons/chart.svg +1 -0
  13. data/app/assets/images/shoppe/icons/chat.svg +1 -0
  14. data/app/assets/images/shoppe/icons/checkbox.svg +1 -0
  15. data/app/assets/images/shoppe/icons/checkbox2.svg +1 -0
  16. data/app/assets/images/shoppe/icons/cloud.svg +1 -0
  17. data/app/assets/images/shoppe/icons/cone.svg +1 -0
  18. data/app/assets/images/shoppe/icons/credit_card.svg +1 -0
  19. data/app/assets/images/shoppe/icons/currency.svg +1 -0
  20. data/app/assets/images/shoppe/icons/edit.svg +14 -0
  21. data/app/assets/images/shoppe/icons/flowchart.svg +1 -0
  22. data/app/assets/images/shoppe/icons/gift.svg +1 -0
  23. data/app/assets/images/shoppe/icons/globe.svg +1 -0
  24. data/app/assets/images/shoppe/icons/id.svg +1 -0
  25. data/app/assets/images/shoppe/icons/id2.svg +1 -0
  26. data/app/assets/images/shoppe/icons/locked.svg +1 -0
  27. data/app/assets/images/shoppe/icons/report.svg +1 -0
  28. data/app/assets/images/shoppe/icons/search.svg +1 -0
  29. data/app/assets/images/shoppe/icons/support.svg +1 -0
  30. data/app/assets/images/shoppe/icons/tags.svg +1 -0
  31. data/app/assets/images/shoppe/icons/toolbox.svg +1 -0
  32. data/app/assets/images/shoppe/icons/unlocked.svg +1 -0
  33. data/app/assets/images/shoppe/icons/wallet.svg +1 -0
  34. data/app/assets/images/shoppe/logo.svg +47 -0
  35. data/app/assets/images/shoppe/move.svg +1 -0
  36. data/app/assets/images/shoppe/shoppe.svg +25 -0
  37. data/app/assets/images/shoppe/square.svg +9 -0
  38. data/app/assets/images/shoppe/statuses/accepted.svg +14 -0
  39. data/app/assets/images/shoppe/statuses/paid.svg +16 -0
  40. data/app/assets/images/shoppe/statuses/received.svg +15 -0
  41. data/app/assets/images/shoppe/statuses/rejected.svg +14 -0
  42. data/app/assets/images/shoppe/statuses/shipped.svg +14 -0
  43. data/app/assets/images/shoppe/table-tear-off.png +0 -0
  44. data/app/assets/javascripts/shoppe/application.coffee +123 -0
  45. data/app/assets/javascripts/shoppe/chosen.jquery.js +1166 -0
  46. data/app/assets/javascripts/shoppe/jquery_ui.js +6 -0
  47. data/app/assets/javascripts/shoppe/mousetrap.js +9 -0
  48. data/app/assets/javascripts/shoppe/order_form.coffee +47 -0
  49. data/app/assets/stylesheets/shoppe/application.scss +601 -0
  50. data/app/assets/stylesheets/shoppe/chosen.scss +424 -0
  51. data/app/assets/stylesheets/shoppe/dialog.scss +25 -0
  52. data/app/assets/stylesheets/shoppe/elements.scss +79 -0
  53. data/app/assets/stylesheets/shoppe/printable.scss +67 -0
  54. data/app/assets/stylesheets/shoppe/reset.scss +93 -0
  55. data/app/assets/stylesheets/shoppe/sub.scss +106 -0
  56. data/app/assets/stylesheets/shoppe/variables.scss +1 -0
  57. data/app/controllers/shoppe/addresses_controller.rb +47 -0
  58. data/app/controllers/shoppe/application_controller.rb +46 -0
  59. data/app/controllers/shoppe/attachments_controller.rb +14 -0
  60. data/app/controllers/shoppe/countries_controller.rb +47 -0
  61. data/app/controllers/shoppe/customers_controller.rb +55 -0
  62. data/app/controllers/shoppe/dashboard_controller.rb +9 -0
  63. data/app/controllers/shoppe/delivery_service_prices_controller.rb +45 -0
  64. data/app/controllers/shoppe/delivery_services_controller.rb +47 -0
  65. data/app/controllers/shoppe/orders_controller.rb +119 -0
  66. data/app/controllers/shoppe/payments_controller.rb +33 -0
  67. data/app/controllers/shoppe/product_categories_controller.rb +47 -0
  68. data/app/controllers/shoppe/product_category_localisations_controller.rb +58 -0
  69. data/app/controllers/shoppe/product_localisations_controller.rb +58 -0
  70. data/app/controllers/shoppe/products_controller.rb +58 -0
  71. data/app/controllers/shoppe/sessions_controller.rb +34 -0
  72. data/app/controllers/shoppe/settings_controller.rb +16 -0
  73. data/app/controllers/shoppe/stock_level_adjustments_controller.rb +40 -0
  74. data/app/controllers/shoppe/tax_rates_controller.rb +49 -0
  75. data/app/controllers/shoppe/users_controller.rb +53 -0
  76. data/app/controllers/shoppe/variants_controller.rb +50 -0
  77. data/app/helpers/shoppe/application_helper.rb +60 -0
  78. data/app/helpers/shoppe/product_category_helper.rb +36 -0
  79. data/app/mailers/shoppe/order_mailer.rb +25 -0
  80. data/app/mailers/shoppe/user_mailer.rb +10 -0
  81. data/app/models/shoppe/address.rb +44 -0
  82. data/app/models/shoppe/country.rb +27 -0
  83. data/app/models/shoppe/customer.rb +41 -0
  84. data/app/models/shoppe/delivery_service.rb +33 -0
  85. data/app/models/shoppe/delivery_service_price.rb +31 -0
  86. data/app/models/shoppe/order.rb +100 -0
  87. data/app/models/shoppe/order/actions.rb +94 -0
  88. data/app/models/shoppe/order/billing.rb +105 -0
  89. data/app/models/shoppe/order/delivery.rb +229 -0
  90. data/app/models/shoppe/order/states.rb +69 -0
  91. data/app/models/shoppe/order_item.rb +239 -0
  92. data/app/models/shoppe/payment.rb +86 -0
  93. data/app/models/shoppe/product.rb +189 -0
  94. data/app/models/shoppe/product/product_attributes.rb +20 -0
  95. data/app/models/shoppe/product/variants.rb +51 -0
  96. data/app/models/shoppe/product_attribute.rb +66 -0
  97. data/app/models/shoppe/product_categorization.rb +14 -0
  98. data/app/models/shoppe/product_category.rb +75 -0
  99. data/app/models/shoppe/setting.rb +68 -0
  100. data/app/models/shoppe/stock_level_adjustment.rb +19 -0
  101. data/app/models/shoppe/tax_rate.rb +46 -0
  102. data/app/models/shoppe/user.rb +49 -0
  103. data/app/validators/permalink_validator.rb +7 -0
  104. data/app/views/layouts/shoppe/application.html.haml +34 -0
  105. data/app/views/layouts/shoppe/printable.html.haml +11 -0
  106. data/app/views/layouts/shoppe/sub.html.haml +10 -0
  107. data/app/views/shoppe/addresses/_form.html.haml +33 -0
  108. data/app/views/shoppe/addresses/edit.html.haml +5 -0
  109. data/app/views/shoppe/addresses/new.html.haml +5 -0
  110. data/app/views/shoppe/countries/_form.html.haml +35 -0
  111. data/app/views/shoppe/countries/edit.html.haml +6 -0
  112. data/app/views/shoppe/countries/index.html.haml +25 -0
  113. data/app/views/shoppe/countries/new.html.haml +7 -0
  114. data/app/views/shoppe/customers/_addresses.html.haml +20 -0
  115. data/app/views/shoppe/customers/_form.html.haml +30 -0
  116. data/app/views/shoppe/customers/_search_form.html.haml +13 -0
  117. data/app/views/shoppe/customers/edit.html.haml +5 -0
  118. data/app/views/shoppe/customers/index.html.haml +32 -0
  119. data/app/views/shoppe/customers/new.html.haml +5 -0
  120. data/app/views/shoppe/customers/show.html.haml +53 -0
  121. data/app/views/shoppe/delivery_service_prices/_form.html.haml +44 -0
  122. data/app/views/shoppe/delivery_service_prices/edit.html.haml +6 -0
  123. data/app/views/shoppe/delivery_service_prices/index.html.haml +23 -0
  124. data/app/views/shoppe/delivery_service_prices/new.html.haml +6 -0
  125. data/app/views/shoppe/delivery_services/_form.html.haml +38 -0
  126. data/app/views/shoppe/delivery_services/edit.html.haml +9 -0
  127. data/app/views/shoppe/delivery_services/index.html.haml +27 -0
  128. data/app/views/shoppe/delivery_services/new.html.haml +6 -0
  129. data/app/views/shoppe/order_mailer/accepted.text.erb +12 -0
  130. data/app/views/shoppe/order_mailer/received.text.erb +9 -0
  131. data/app/views/shoppe/order_mailer/rejected.text.erb +10 -0
  132. data/app/views/shoppe/order_mailer/shipped.text.erb +16 -0
  133. data/app/views/shoppe/orders/_form.html.haml +58 -0
  134. data/app/views/shoppe/orders/_order_details.html.haml +57 -0
  135. data/app/views/shoppe/orders/_order_items.html.haml +38 -0
  136. data/app/views/shoppe/orders/_order_items_form.html.haml +61 -0
  137. data/app/views/shoppe/orders/_payments_form.html.haml +15 -0
  138. data/app/views/shoppe/orders/_payments_table.html.haml +37 -0
  139. data/app/views/shoppe/orders/_search_form.html.haml +24 -0
  140. data/app/views/shoppe/orders/_status_bar.html.haml +35 -0
  141. data/app/views/shoppe/orders/despatch_note.html.haml +45 -0
  142. data/app/views/shoppe/orders/edit.html.haml +21 -0
  143. data/app/views/shoppe/orders/index.html.haml +39 -0
  144. data/app/views/shoppe/orders/new.html.haml +14 -0
  145. data/app/views/shoppe/orders/show.html.haml +25 -0
  146. data/app/views/shoppe/payments/refund.html.haml +13 -0
  147. data/app/views/shoppe/product_categories/_form.html.haml +50 -0
  148. data/app/views/shoppe/product_categories/edit.html.haml +8 -0
  149. data/app/views/shoppe/product_categories/index.html.haml +27 -0
  150. data/app/views/shoppe/product_categories/new.html.haml +6 -0
  151. data/app/views/shoppe/product_category_localisations/form.html.haml +29 -0
  152. data/app/views/shoppe/product_category_localisations/index.html.haml +26 -0
  153. data/app/views/shoppe/product_localisations/form.html.haml +32 -0
  154. data/app/views/shoppe/product_localisations/index.html.haml +26 -0
  155. data/app/views/shoppe/products/_form.html.haml +118 -0
  156. data/app/views/shoppe/products/_table.html.haml +42 -0
  157. data/app/views/shoppe/products/edit.html.haml +9 -0
  158. data/app/views/shoppe/products/import.html.haml +67 -0
  159. data/app/views/shoppe/products/index.html.haml +9 -0
  160. data/app/views/shoppe/products/new.html.haml +7 -0
  161. data/app/views/shoppe/sessions/new.html.haml +12 -0
  162. data/app/views/shoppe/sessions/reset.html.haml +12 -0
  163. data/app/views/shoppe/settings/edit.html.haml +19 -0
  164. data/app/views/shoppe/shared/error.html.haml +6 -0
  165. data/app/views/shoppe/stock_level_adjustments/index.html.haml +40 -0
  166. data/app/views/shoppe/tax_rates/form.html.haml +28 -0
  167. data/app/views/shoppe/tax_rates/index.html.haml +17 -0
  168. data/app/views/shoppe/user_mailer/new_password.text.erb +9 -0
  169. data/app/views/shoppe/users/_form.html.haml +27 -0
  170. data/app/views/shoppe/users/edit.html.haml +5 -0
  171. data/app/views/shoppe/users/index.html.haml +17 -0
  172. data/app/views/shoppe/users/new.html.haml +7 -0
  173. data/app/views/shoppe/variants/form.html.haml +68 -0
  174. data/app/views/shoppe/variants/index.html.haml +33 -0
  175. data/config/locales/de.yml +653 -0
  176. data/config/locales/en.yml +744 -0
  177. data/config/locales/es.yml +653 -0
  178. data/config/locales/pl.yml +662 -0
  179. data/config/locales/pt-BR.yml +655 -0
  180. data/config/routes.rb +53 -0
  181. data/db/countries.txt +252 -0
  182. data/db/migrate/20130926094549_create_shoppe_initial_schema.rb +175 -0
  183. data/db/migrate/20131024201501_add_address_type_to_shoppe_tax_rates.rb +5 -0
  184. data/db/migrate/20131024204815_create_shoppe_payments.rb +32 -0
  185. data/db/migrate/20131102143930_remove_default_on_order_item_weight.rb +9 -0
  186. data/db/migrate/20141013192427_create_shoppe_customers.rb +14 -0
  187. data/db/migrate/20141026175622_add_indexes_to_shoppe_order_items.rb +6 -0
  188. data/db/migrate/20141026175943_add_indexes_to_shoppe_orders.rb +7 -0
  189. data/db/migrate/20141026180333_add_indexes_to_shoppe_payments.rb +6 -0
  190. data/db/migrate/20141026180835_add_indexes_to_shoppe_product_attributes.rb +7 -0
  191. data/db/migrate/20141026180952_add_indexes_to_shoppe_product_categories.rb +5 -0
  192. data/db/migrate/20141026181040_add_indexes_to_shoppe_products.rb +8 -0
  193. data/db/migrate/20141026181312_add_indexes_to_shoppe_settings.rb +5 -0
  194. data/db/migrate/20141026181354_add_indexes_to_shoppe_stock_level_adjustments.rb +6 -0
  195. data/db/migrate/20141026181559_add_indexes_to_shoppe_users.rb +5 -0
  196. data/db/migrate/20141026181716_add_indexes_to_shoppe_delivery_services.rb +9 -0
  197. data/db/migrate/20141026181717_allow_multiple_shoppe_products_per_shoppe_product_category.rb +46 -0
  198. data/db/migrate/20141026181718_add_nested_to_product_categories.rb +30 -0
  199. data/db/migrate/20141027215005_create_shoppe_addresses.rb +17 -0
  200. data/db/migrate/20150315215633_add_customer_to_shoppe_orders.rb +5 -0
  201. data/db/migrate/20150513171350_create_shoppe_product_category_translation_table.rb +17 -0
  202. data/db/migrate/20150519173350_create_shoppe_product_translation_table.rb +18 -0
  203. data/db/schema.rb +308 -0
  204. data/db/seeds.rb +137 -0
  205. data/db/seeds_data/poe400.jpg +0 -0
  206. data/db/seeds_data/snom-870-blk.jpg +0 -0
  207. data/db/seeds_data/snom-870-grey.jpg +0 -0
  208. data/db/seeds_data/snom-mm2.jpg +0 -0
  209. data/db/seeds_data/spa303.jpg +0 -0
  210. data/db/seeds_data/t18p.jpg +0 -0
  211. data/db/seeds_data/t20p.jpg +0 -0
  212. data/db/seeds_data/t22p.jpg +0 -0
  213. data/db/seeds_data/t26p.jpg +0 -0
  214. data/db/seeds_data/t41pn.jpg +0 -0
  215. data/db/seeds_data/t46gn.jpg +0 -0
  216. data/db/seeds_data/w52p.jpg +0 -0
  217. data/db/seeds_data/yhs32.jpg +0 -0
  218. data/lib/shoppe.rb +60 -0
  219. data/lib/shoppe/associated_countries.rb +20 -0
  220. data/lib/shoppe/country_importer.rb +15 -0
  221. data/lib/shoppe/default_navigation.rb +21 -0
  222. data/lib/shoppe/engine.rb +55 -0
  223. data/lib/shoppe/error.rb +21 -0
  224. data/lib/shoppe/errors/inappropriate_delivery_service.rb +6 -0
  225. data/lib/shoppe/errors/insufficient_stock_to_fulfil.rb +15 -0
  226. data/lib/shoppe/errors/invalid_configuration.rb +6 -0
  227. data/lib/shoppe/errors/not_enough_stock.rb +15 -0
  228. data/lib/shoppe/errors/payment_declined.rb +6 -0
  229. data/lib/shoppe/errors/refund_failed.rb +6 -0
  230. data/lib/shoppe/errors/unorderable_item.rb +6 -0
  231. data/lib/shoppe/navigation_manager.rb +81 -0
  232. data/lib/shoppe/orderable_item.rb +39 -0
  233. data/lib/shoppe/settings.rb +26 -0
  234. data/lib/shoppe/settings_loader.rb +16 -0
  235. data/lib/shoppe/setup_generator.rb +10 -0
  236. data/lib/shoppe/version.rb +3 -0
  237. data/lib/shoppe/view_helpers.rb +16 -0
  238. data/lib/tasks/shoppe.rake +29 -0
  239. metadata +662 -0
@@ -0,0 +1,1166 @@
1
+ // Chosen, a Select Box Enhancer for jQuery and Prototype
2
+ // by Patrick Filler for Harvest, http://getharvest.com
3
+ //
4
+ // Version 1.0.0
5
+ // Full source at https://github.com/harvesthq/chosen
6
+ // Copyright (c) 2011 Harvest http://getharvest.com
7
+
8
+ // MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
9
+ // This file is generated by `grunt build`, do not edit it by hand.
10
+ (function() {
11
+ var $, AbstractChosen, Chosen, SelectParser, _ref,
12
+ __hasProp = {}.hasOwnProperty,
13
+ __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; };
14
+
15
+ SelectParser = (function() {
16
+ function SelectParser() {
17
+ this.options_index = 0;
18
+ this.parsed = [];
19
+ }
20
+
21
+ SelectParser.prototype.add_node = function(child) {
22
+ if (child.nodeName.toUpperCase() === "OPTGROUP") {
23
+ return this.add_group(child);
24
+ } else {
25
+ return this.add_option(child);
26
+ }
27
+ };
28
+
29
+ SelectParser.prototype.add_group = function(group) {
30
+ var group_position, option, _i, _len, _ref, _results;
31
+
32
+ group_position = this.parsed.length;
33
+ this.parsed.push({
34
+ array_index: group_position,
35
+ group: true,
36
+ label: this.escapeExpression(group.label),
37
+ children: 0,
38
+ disabled: group.disabled
39
+ });
40
+ _ref = group.childNodes;
41
+ _results = [];
42
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
43
+ option = _ref[_i];
44
+ _results.push(this.add_option(option, group_position, group.disabled));
45
+ }
46
+ return _results;
47
+ };
48
+
49
+ SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
50
+ if (option.nodeName.toUpperCase() === "OPTION") {
51
+ if (option.text !== "") {
52
+ if (group_position != null) {
53
+ this.parsed[group_position].children += 1;
54
+ }
55
+ this.parsed.push({
56
+ array_index: this.parsed.length,
57
+ options_index: this.options_index,
58
+ value: option.value,
59
+ text: option.text,
60
+ html: option.innerHTML,
61
+ selected: option.selected,
62
+ disabled: group_disabled === true ? group_disabled : option.disabled,
63
+ group_array_index: group_position,
64
+ classes: option.className,
65
+ style: option.style.cssText
66
+ });
67
+ } else {
68
+ this.parsed.push({
69
+ array_index: this.parsed.length,
70
+ options_index: this.options_index,
71
+ empty: true
72
+ });
73
+ }
74
+ return this.options_index += 1;
75
+ }
76
+ };
77
+
78
+ SelectParser.prototype.escapeExpression = function(text) {
79
+ var map, unsafe_chars;
80
+
81
+ if ((text == null) || text === false) {
82
+ return "";
83
+ }
84
+ if (!/[\&\<\>\"\'\`]/.test(text)) {
85
+ return text;
86
+ }
87
+ map = {
88
+ "<": "&lt;",
89
+ ">": "&gt;",
90
+ '"': "&quot;",
91
+ "'": "&#x27;",
92
+ "`": "&#x60;"
93
+ };
94
+ unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g;
95
+ return text.replace(unsafe_chars, function(chr) {
96
+ return map[chr] || "&amp;";
97
+ });
98
+ };
99
+
100
+ return SelectParser;
101
+
102
+ })();
103
+
104
+ SelectParser.select_to_array = function(select) {
105
+ var child, parser, _i, _len, _ref;
106
+
107
+ parser = new SelectParser();
108
+ _ref = select.childNodes;
109
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
110
+ child = _ref[_i];
111
+ parser.add_node(child);
112
+ }
113
+ return parser.parsed;
114
+ };
115
+
116
+ AbstractChosen = (function() {
117
+ function AbstractChosen(form_field, options) {
118
+ this.form_field = form_field;
119
+ this.options = options != null ? options : {};
120
+ if (!AbstractChosen.browser_is_supported()) {
121
+ return;
122
+ }
123
+ this.is_multiple = this.form_field.multiple;
124
+ this.set_default_text();
125
+ this.set_default_values();
126
+ this.setup();
127
+ this.set_up_html();
128
+ this.register_observers();
129
+ }
130
+
131
+ AbstractChosen.prototype.set_default_values = function() {
132
+ var _this = this;
133
+
134
+ this.click_test_action = function(evt) {
135
+ return _this.test_active_click(evt);
136
+ };
137
+ this.activate_action = function(evt) {
138
+ return _this.activate_field(evt);
139
+ };
140
+ this.active_field = false;
141
+ this.mouse_on_container = false;
142
+ this.results_showing = false;
143
+ this.result_highlighted = null;
144
+ this.result_single_selected = null;
145
+ 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;
146
+ this.disable_search_threshold = this.options.disable_search_threshold || 0;
147
+ this.disable_search = this.options.disable_search || false;
148
+ this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true;
149
+ this.group_search = this.options.group_search != null ? this.options.group_search : true;
150
+ this.search_contains = this.options.search_contains || false;
151
+ this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true;
152
+ this.max_selected_options = this.options.max_selected_options || Infinity;
153
+ this.inherit_select_classes = this.options.inherit_select_classes || false;
154
+ this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true;
155
+ return this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true;
156
+ };
157
+
158
+ AbstractChosen.prototype.set_default_text = function() {
159
+ if (this.form_field.getAttribute("data-placeholder")) {
160
+ this.default_text = this.form_field.getAttribute("data-placeholder");
161
+ } else if (this.is_multiple) {
162
+ this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text;
163
+ } else {
164
+ this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text;
165
+ }
166
+ return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text;
167
+ };
168
+
169
+ AbstractChosen.prototype.mouse_enter = function() {
170
+ return this.mouse_on_container = true;
171
+ };
172
+
173
+ AbstractChosen.prototype.mouse_leave = function() {
174
+ return this.mouse_on_container = false;
175
+ };
176
+
177
+ AbstractChosen.prototype.input_focus = function(evt) {
178
+ var _this = this;
179
+
180
+ if (this.is_multiple) {
181
+ if (!this.active_field) {
182
+ return setTimeout((function() {
183
+ return _this.container_mousedown();
184
+ }), 50);
185
+ }
186
+ } else {
187
+ if (!this.active_field) {
188
+ return this.activate_field();
189
+ }
190
+ }
191
+ };
192
+
193
+ AbstractChosen.prototype.input_blur = function(evt) {
194
+ var _this = this;
195
+
196
+ if (!this.mouse_on_container) {
197
+ this.active_field = false;
198
+ return setTimeout((function() {
199
+ return _this.blur_test();
200
+ }), 100);
201
+ }
202
+ };
203
+
204
+ AbstractChosen.prototype.results_option_build = function(options) {
205
+ var content, data, _i, _len, _ref;
206
+
207
+ content = '';
208
+ _ref = this.results_data;
209
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
210
+ data = _ref[_i];
211
+ if (data.group) {
212
+ content += this.result_add_group(data);
213
+ } else {
214
+ content += this.result_add_option(data);
215
+ }
216
+ if (options != null ? options.first : void 0) {
217
+ if (data.selected && this.is_multiple) {
218
+ this.choice_build(data);
219
+ } else if (data.selected && !this.is_multiple) {
220
+ this.single_set_selected_text(data.text);
221
+ }
222
+ }
223
+ }
224
+ return content;
225
+ };
226
+
227
+ AbstractChosen.prototype.result_add_option = function(option) {
228
+ var classes, style;
229
+
230
+ if (!option.search_match) {
231
+ return '';
232
+ }
233
+ if (!this.include_option_in_results(option)) {
234
+ return '';
235
+ }
236
+ classes = [];
237
+ if (!option.disabled && !(option.selected && this.is_multiple)) {
238
+ classes.push("active-result");
239
+ }
240
+ if (option.disabled && !(option.selected && this.is_multiple)) {
241
+ classes.push("disabled-result");
242
+ }
243
+ if (option.selected) {
244
+ classes.push("result-selected");
245
+ }
246
+ if (option.group_array_index != null) {
247
+ classes.push("group-option");
248
+ }
249
+ if (option.classes !== "") {
250
+ classes.push(option.classes);
251
+ }
252
+ style = option.style.cssText !== "" ? " style=\"" + option.style + "\"" : "";
253
+ return "<li class=\"" + (classes.join(' ')) + "\"" + style + " data-option-array-index=\"" + option.array_index + "\">" + option.search_text + "</li>";
254
+ };
255
+
256
+ AbstractChosen.prototype.result_add_group = function(group) {
257
+ if (!(group.search_match || group.group_match)) {
258
+ return '';
259
+ }
260
+ if (!(group.active_options > 0)) {
261
+ return '';
262
+ }
263
+ return "<li class=\"group-result\">" + group.search_text + "</li>";
264
+ };
265
+
266
+ AbstractChosen.prototype.results_update_field = function() {
267
+ this.set_default_text();
268
+ if (!this.is_multiple) {
269
+ this.results_reset_cleanup();
270
+ }
271
+ this.result_clear_highlight();
272
+ this.result_single_selected = null;
273
+ this.results_build();
274
+ if (this.results_showing) {
275
+ return this.winnow_results();
276
+ }
277
+ };
278
+
279
+ AbstractChosen.prototype.results_toggle = function() {
280
+ if (this.results_showing) {
281
+ return this.results_hide();
282
+ } else {
283
+ return this.results_show();
284
+ }
285
+ };
286
+
287
+ AbstractChosen.prototype.results_search = function(evt) {
288
+ if (this.results_showing) {
289
+ return this.winnow_results();
290
+ } else {
291
+ return this.results_show();
292
+ }
293
+ };
294
+
295
+ AbstractChosen.prototype.winnow_results = function() {
296
+ var escapedSearchText, option, regex, regexAnchor, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref;
297
+
298
+ this.no_results_clear();
299
+ results = 0;
300
+ searchText = this.get_search_text();
301
+ escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
302
+ regexAnchor = this.search_contains ? "" : "^";
303
+ regex = new RegExp(regexAnchor + escapedSearchText, 'i');
304
+ zregex = new RegExp(escapedSearchText, 'i');
305
+ _ref = this.results_data;
306
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
307
+ option = _ref[_i];
308
+ option.search_match = false;
309
+ results_group = null;
310
+ if (this.include_option_in_results(option)) {
311
+ if (option.group) {
312
+ option.group_match = false;
313
+ option.active_options = 0;
314
+ }
315
+ if ((option.group_array_index != null) && this.results_data[option.group_array_index]) {
316
+ results_group = this.results_data[option.group_array_index];
317
+ if (results_group.active_options === 0 && results_group.search_match) {
318
+ results += 1;
319
+ }
320
+ results_group.active_options += 1;
321
+ }
322
+ if (!(option.group && !this.group_search)) {
323
+ option.search_text = option.group ? option.label : option.html;
324
+ option.search_match = this.search_string_match(option.search_text, regex);
325
+ if (option.search_match && !option.group) {
326
+ results += 1;
327
+ }
328
+ if (option.search_match) {
329
+ if (searchText.length) {
330
+ startpos = option.search_text.search(zregex);
331
+ text = option.search_text.substr(0, startpos + searchText.length) + '</em>' + option.search_text.substr(startpos + searchText.length);
332
+ option.search_text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
333
+ }
334
+ if (results_group != null) {
335
+ results_group.group_match = true;
336
+ }
337
+ } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) {
338
+ option.search_match = true;
339
+ }
340
+ }
341
+ }
342
+ }
343
+ this.result_clear_highlight();
344
+ if (results < 1 && searchText.length) {
345
+ this.update_results_content("");
346
+ return this.no_results(searchText);
347
+ } else {
348
+ this.update_results_content(this.results_option_build());
349
+ return this.winnow_results_set_highlight();
350
+ }
351
+ };
352
+
353
+ AbstractChosen.prototype.search_string_match = function(search_string, regex) {
354
+ var part, parts, _i, _len;
355
+
356
+ if (regex.test(search_string)) {
357
+ return true;
358
+ } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) {
359
+ parts = search_string.replace(/\[|\]/g, "").split(" ");
360
+ if (parts.length) {
361
+ for (_i = 0, _len = parts.length; _i < _len; _i++) {
362
+ part = parts[_i];
363
+ if (regex.test(part)) {
364
+ return true;
365
+ }
366
+ }
367
+ }
368
+ }
369
+ };
370
+
371
+ AbstractChosen.prototype.choices_count = function() {
372
+ var option, _i, _len, _ref;
373
+
374
+ if (this.selected_option_count != null) {
375
+ return this.selected_option_count;
376
+ }
377
+ this.selected_option_count = 0;
378
+ _ref = this.form_field.options;
379
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
380
+ option = _ref[_i];
381
+ if (option.selected) {
382
+ this.selected_option_count += 1;
383
+ }
384
+ }
385
+ return this.selected_option_count;
386
+ };
387
+
388
+ AbstractChosen.prototype.choices_click = function(evt) {
389
+ evt.preventDefault();
390
+ if (!(this.results_showing || this.is_disabled)) {
391
+ return this.results_show();
392
+ }
393
+ };
394
+
395
+ AbstractChosen.prototype.keyup_checker = function(evt) {
396
+ var stroke, _ref;
397
+
398
+ stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
399
+ this.search_field_scale();
400
+ switch (stroke) {
401
+ case 8:
402
+ if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) {
403
+ return this.keydown_backstroke();
404
+ } else if (!this.pending_backstroke) {
405
+ this.result_clear_highlight();
406
+ return this.results_search();
407
+ }
408
+ break;
409
+ case 13:
410
+ evt.preventDefault();
411
+ if (this.results_showing) {
412
+ return this.result_select(evt);
413
+ }
414
+ break;
415
+ case 27:
416
+ if (this.results_showing) {
417
+ this.results_hide();
418
+ }
419
+ return true;
420
+ case 9:
421
+ case 38:
422
+ case 40:
423
+ case 16:
424
+ case 91:
425
+ case 17:
426
+ break;
427
+ default:
428
+ return this.results_search();
429
+ }
430
+ };
431
+
432
+ AbstractChosen.prototype.container_width = function() {
433
+ if (this.options.width != null) {
434
+ return this.options.width;
435
+ } else {
436
+ return "" + this.form_field.offsetWidth + "px";
437
+ }
438
+ };
439
+
440
+ AbstractChosen.prototype.include_option_in_results = function(option) {
441
+ if (this.is_multiple && (!this.display_selected_options && option.selected)) {
442
+ return false;
443
+ }
444
+ if (!this.display_disabled_options && option.disabled) {
445
+ return false;
446
+ }
447
+ if (option.empty) {
448
+ return false;
449
+ }
450
+ return true;
451
+ };
452
+
453
+ AbstractChosen.browser_is_supported = function() {
454
+ if (window.navigator.appName === "Microsoft Internet Explorer") {
455
+ return document.documentMode >= 8;
456
+ }
457
+ if (/iP(od|hone)/i.test(window.navigator.userAgent)) {
458
+ return false;
459
+ }
460
+ if (/Android/i.test(window.navigator.userAgent)) {
461
+ if (/Mobile/i.test(window.navigator.userAgent)) {
462
+ return false;
463
+ }
464
+ }
465
+ return true;
466
+ };
467
+
468
+ AbstractChosen.default_multiple_text = "Select Some Options";
469
+
470
+ AbstractChosen.default_single_text = "Select an Option";
471
+
472
+ AbstractChosen.default_no_result_text = "No results match";
473
+
474
+ return AbstractChosen;
475
+
476
+ })();
477
+
478
+ $ = jQuery;
479
+
480
+ $.fn.extend({
481
+ chosen: function(options) {
482
+ if (!AbstractChosen.browser_is_supported()) {
483
+ return this;
484
+ }
485
+ return this.each(function(input_field) {
486
+ var $this, chosen;
487
+
488
+ $this = $(this);
489
+ chosen = $this.data('chosen');
490
+ if (options === 'destroy' && chosen) {
491
+ chosen.destroy();
492
+ } else if (!chosen) {
493
+ $this.data('chosen', new Chosen(this, options));
494
+ }
495
+ });
496
+ }
497
+ });
498
+
499
+ Chosen = (function(_super) {
500
+ __extends(Chosen, _super);
501
+
502
+ function Chosen() {
503
+ _ref = Chosen.__super__.constructor.apply(this, arguments);
504
+ return _ref;
505
+ }
506
+
507
+ Chosen.prototype.setup = function() {
508
+ this.form_field_jq = $(this.form_field);
509
+ this.current_selectedIndex = this.form_field.selectedIndex;
510
+ return this.is_rtl = this.form_field_jq.hasClass("chosen-rtl");
511
+ };
512
+
513
+ Chosen.prototype.set_up_html = function() {
514
+ var container_classes, container_props;
515
+
516
+ container_classes = ["chosen-container"];
517
+ container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single"));
518
+ if (this.inherit_select_classes && this.form_field.className) {
519
+ container_classes.push(this.form_field.className);
520
+ }
521
+ if (this.is_rtl) {
522
+ container_classes.push("chosen-rtl");
523
+ }
524
+ container_props = {
525
+ 'class': container_classes.join(' '),
526
+ 'style': "width: " + (this.container_width()) + ";",
527
+ 'title': this.form_field.title
528
+ };
529
+ if (this.form_field.id.length) {
530
+ container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen";
531
+ }
532
+ this.container = $("<div />", container_props);
533
+ if (this.is_multiple) {
534
+ this.container.html('<ul class="chosen-choices"><li class="search-field"><input type="text" value="' + this.default_text + '" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chosen-drop"><ul class="chosen-results"></ul></div>');
535
+ } else {
536
+ this.container.html('<a class="chosen-single chosen-default" tabindex="-1"><span>' + this.default_text + '</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off" /></div><ul class="chosen-results"></ul></div>');
537
+ }
538
+ this.form_field_jq.hide().after(this.container);
539
+ this.dropdown = this.container.find('div.chosen-drop').first();
540
+ this.search_field = this.container.find('input').first();
541
+ this.search_results = this.container.find('ul.chosen-results').first();
542
+ this.search_field_scale();
543
+ this.search_no_results = this.container.find('li.no-results').first();
544
+ if (this.is_multiple) {
545
+ this.search_choices = this.container.find('ul.chosen-choices').first();
546
+ this.search_container = this.container.find('li.search-field').first();
547
+ } else {
548
+ this.search_container = this.container.find('div.chosen-search').first();
549
+ this.selected_item = this.container.find('.chosen-single').first();
550
+ }
551
+ this.results_build();
552
+ this.set_tab_index();
553
+ this.set_label_behavior();
554
+ return this.form_field_jq.trigger("chosen:ready", {
555
+ chosen: this
556
+ });
557
+ };
558
+
559
+ Chosen.prototype.register_observers = function() {
560
+ var _this = this;
561
+
562
+ this.container.bind('mousedown.chosen', function(evt) {
563
+ _this.container_mousedown(evt);
564
+ });
565
+ this.container.bind('mouseup.chosen', function(evt) {
566
+ _this.container_mouseup(evt);
567
+ });
568
+ this.container.bind('mouseenter.chosen', function(evt) {
569
+ _this.mouse_enter(evt);
570
+ });
571
+ this.container.bind('mouseleave.chosen', function(evt) {
572
+ _this.mouse_leave(evt);
573
+ });
574
+ this.search_results.bind('mouseup.chosen', function(evt) {
575
+ _this.search_results_mouseup(evt);
576
+ });
577
+ this.search_results.bind('mouseover.chosen', function(evt) {
578
+ _this.search_results_mouseover(evt);
579
+ });
580
+ this.search_results.bind('mouseout.chosen', function(evt) {
581
+ _this.search_results_mouseout(evt);
582
+ });
583
+ this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) {
584
+ _this.search_results_mousewheel(evt);
585
+ });
586
+ this.form_field_jq.bind("chosen:updated.chosen", function(evt) {
587
+ _this.results_update_field(evt);
588
+ });
589
+ this.form_field_jq.bind("chosen:activate.chosen", function(evt) {
590
+ _this.activate_field(evt);
591
+ });
592
+ this.form_field_jq.bind("chosen:open.chosen", function(evt) {
593
+ _this.container_mousedown(evt);
594
+ });
595
+ this.search_field.bind('blur.chosen', function(evt) {
596
+ _this.input_blur(evt);
597
+ });
598
+ this.search_field.bind('keyup.chosen', function(evt) {
599
+ _this.keyup_checker(evt);
600
+ });
601
+ this.search_field.bind('keydown.chosen', function(evt) {
602
+ _this.keydown_checker(evt);
603
+ });
604
+ this.search_field.bind('focus.chosen', function(evt) {
605
+ _this.input_focus(evt);
606
+ });
607
+ if (this.is_multiple) {
608
+ return this.search_choices.bind('click.chosen', function(evt) {
609
+ _this.choices_click(evt);
610
+ });
611
+ } else {
612
+ return this.container.bind('click.chosen', function(evt) {
613
+ evt.preventDefault();
614
+ });
615
+ }
616
+ };
617
+
618
+ Chosen.prototype.destroy = function() {
619
+ $(document).unbind("click.chosen", this.click_test_action);
620
+ if (this.search_field[0].tabIndex) {
621
+ this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex;
622
+ }
623
+ this.container.remove();
624
+ this.form_field_jq.removeData('chosen');
625
+ return this.form_field_jq.show();
626
+ };
627
+
628
+ Chosen.prototype.search_field_disabled = function() {
629
+ this.is_disabled = this.form_field_jq[0].disabled;
630
+ if (this.is_disabled) {
631
+ this.container.addClass('chosen-disabled');
632
+ this.search_field[0].disabled = true;
633
+ if (!this.is_multiple) {
634
+ this.selected_item.unbind("focus.chosen", this.activate_action);
635
+ }
636
+ return this.close_field();
637
+ } else {
638
+ this.container.removeClass('chosen-disabled');
639
+ this.search_field[0].disabled = false;
640
+ if (!this.is_multiple) {
641
+ return this.selected_item.bind("focus.chosen", this.activate_action);
642
+ }
643
+ }
644
+ };
645
+
646
+ Chosen.prototype.container_mousedown = function(evt) {
647
+ if (!this.is_disabled) {
648
+ if (evt && evt.type === "mousedown" && !this.results_showing) {
649
+ evt.preventDefault();
650
+ }
651
+ if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) {
652
+ if (!this.active_field) {
653
+ if (this.is_multiple) {
654
+ this.search_field.val("");
655
+ }
656
+ $(document).bind('click.chosen', this.click_test_action);
657
+ this.results_show();
658
+ } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) {
659
+ evt.preventDefault();
660
+ this.results_toggle();
661
+ }
662
+ return this.activate_field();
663
+ }
664
+ }
665
+ };
666
+
667
+ Chosen.prototype.container_mouseup = function(evt) {
668
+ if (evt.target.nodeName === "ABBR" && !this.is_disabled) {
669
+ return this.results_reset(evt);
670
+ }
671
+ };
672
+
673
+ Chosen.prototype.search_results_mousewheel = function(evt) {
674
+ var delta, _ref1, _ref2;
675
+
676
+ delta = -((_ref1 = evt.originalEvent) != null ? _ref1.wheelDelta : void 0) || ((_ref2 = evt.originialEvent) != null ? _ref2.detail : void 0);
677
+ if (delta != null) {
678
+ evt.preventDefault();
679
+ if (evt.type === 'DOMMouseScroll') {
680
+ delta = delta * 40;
681
+ }
682
+ return this.search_results.scrollTop(delta + this.search_results.scrollTop());
683
+ }
684
+ };
685
+
686
+ Chosen.prototype.blur_test = function(evt) {
687
+ if (!this.active_field && this.container.hasClass("chosen-container-active")) {
688
+ return this.close_field();
689
+ }
690
+ };
691
+
692
+ Chosen.prototype.close_field = function() {
693
+ $(document).unbind("click.chosen", this.click_test_action);
694
+ this.active_field = false;
695
+ this.results_hide();
696
+ this.container.removeClass("chosen-container-active");
697
+ this.clear_backstroke();
698
+ this.show_search_field_default();
699
+ return this.search_field_scale();
700
+ };
701
+
702
+ Chosen.prototype.activate_field = function() {
703
+ this.container.addClass("chosen-container-active");
704
+ this.active_field = true;
705
+ this.search_field.val(this.search_field.val());
706
+ return this.search_field.focus();
707
+ };
708
+
709
+ Chosen.prototype.test_active_click = function(evt) {
710
+ if (this.container.is($(evt.target).closest('.chosen-container'))) {
711
+ return this.active_field = true;
712
+ } else {
713
+ return this.close_field();
714
+ }
715
+ };
716
+
717
+ Chosen.prototype.results_build = function() {
718
+ this.parsing = true;
719
+ this.selected_option_count = null;
720
+ this.results_data = SelectParser.select_to_array(this.form_field);
721
+ if (this.is_multiple) {
722
+ this.search_choices.find("li.search-choice").remove();
723
+ } else if (!this.is_multiple) {
724
+ this.single_set_selected_text();
725
+ if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) {
726
+ this.search_field[0].readOnly = true;
727
+ this.container.addClass("chosen-container-single-nosearch");
728
+ } else {
729
+ this.search_field[0].readOnly = false;
730
+ this.container.removeClass("chosen-container-single-nosearch");
731
+ }
732
+ }
733
+ this.update_results_content(this.results_option_build({
734
+ first: true
735
+ }));
736
+ this.search_field_disabled();
737
+ this.show_search_field_default();
738
+ this.search_field_scale();
739
+ return this.parsing = false;
740
+ };
741
+
742
+ Chosen.prototype.result_do_highlight = function(el) {
743
+ var high_bottom, high_top, maxHeight, visible_bottom, visible_top;
744
+
745
+ if (el.length) {
746
+ this.result_clear_highlight();
747
+ this.result_highlight = el;
748
+ this.result_highlight.addClass("highlighted");
749
+ maxHeight = parseInt(this.search_results.css("maxHeight"), 10);
750
+ visible_top = this.search_results.scrollTop();
751
+ visible_bottom = maxHeight + visible_top;
752
+ high_top = this.result_highlight.position().top + this.search_results.scrollTop();
753
+ high_bottom = high_top + this.result_highlight.outerHeight();
754
+ if (high_bottom >= visible_bottom) {
755
+ return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0);
756
+ } else if (high_top < visible_top) {
757
+ return this.search_results.scrollTop(high_top);
758
+ }
759
+ }
760
+ };
761
+
762
+ Chosen.prototype.result_clear_highlight = function() {
763
+ if (this.result_highlight) {
764
+ this.result_highlight.removeClass("highlighted");
765
+ }
766
+ return this.result_highlight = null;
767
+ };
768
+
769
+ Chosen.prototype.results_show = function() {
770
+ if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
771
+ this.form_field_jq.trigger("chosen:maxselected", {
772
+ chosen: this
773
+ });
774
+ return false;
775
+ }
776
+ this.container.addClass("chosen-with-drop");
777
+ this.form_field_jq.trigger("chosen:showing_dropdown", {
778
+ chosen: this
779
+ });
780
+ this.results_showing = true;
781
+ this.search_field.focus();
782
+ this.search_field.val(this.search_field.val());
783
+ return this.winnow_results();
784
+ };
785
+
786
+ Chosen.prototype.update_results_content = function(content) {
787
+ return this.search_results.html(content);
788
+ };
789
+
790
+ Chosen.prototype.results_hide = function() {
791
+ if (this.results_showing) {
792
+ this.result_clear_highlight();
793
+ this.container.removeClass("chosen-with-drop");
794
+ this.form_field_jq.trigger("chosen:hiding_dropdown", {
795
+ chosen: this
796
+ });
797
+ }
798
+ return this.results_showing = false;
799
+ };
800
+
801
+ Chosen.prototype.set_tab_index = function(el) {
802
+ var ti;
803
+
804
+ if (this.form_field.tabIndex) {
805
+ ti = this.form_field.tabIndex;
806
+ this.form_field.tabIndex = -1;
807
+ return this.search_field[0].tabIndex = ti;
808
+ }
809
+ };
810
+
811
+ Chosen.prototype.set_label_behavior = function() {
812
+ var _this = this;
813
+
814
+ this.form_field_label = this.form_field_jq.parents("label");
815
+ if (!this.form_field_label.length && this.form_field.id.length) {
816
+ this.form_field_label = $("label[for='" + this.form_field.id + "']");
817
+ }
818
+ if (this.form_field_label.length > 0) {
819
+ return this.form_field_label.bind('click.chosen', function(evt) {
820
+ if (_this.is_multiple) {
821
+ return _this.container_mousedown(evt);
822
+ } else {
823
+ return _this.activate_field();
824
+ }
825
+ });
826
+ }
827
+ };
828
+
829
+ Chosen.prototype.show_search_field_default = function() {
830
+ if (this.is_multiple && this.choices_count() < 1 && !this.active_field) {
831
+ this.search_field.val(this.default_text);
832
+ return this.search_field.addClass("default");
833
+ } else {
834
+ this.search_field.val("");
835
+ return this.search_field.removeClass("default");
836
+ }
837
+ };
838
+
839
+ Chosen.prototype.search_results_mouseup = function(evt) {
840
+ var target;
841
+
842
+ target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
843
+ if (target.length) {
844
+ this.result_highlight = target;
845
+ this.result_select(evt);
846
+ return this.search_field.focus();
847
+ }
848
+ };
849
+
850
+ Chosen.prototype.search_results_mouseover = function(evt) {
851
+ var target;
852
+
853
+ target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
854
+ if (target) {
855
+ return this.result_do_highlight(target);
856
+ }
857
+ };
858
+
859
+ Chosen.prototype.search_results_mouseout = function(evt) {
860
+ if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) {
861
+ return this.result_clear_highlight();
862
+ }
863
+ };
864
+
865
+ Chosen.prototype.choice_build = function(item) {
866
+ var choice, close_link,
867
+ _this = this;
868
+
869
+ choice = $('<li />', {
870
+ "class": "search-choice"
871
+ }).html("<span>" + item.html + "</span>");
872
+ if (item.disabled) {
873
+ choice.addClass('search-choice-disabled');
874
+ } else {
875
+ close_link = $('<a />', {
876
+ "class": 'search-choice-close',
877
+ 'data-option-array-index': item.array_index
878
+ });
879
+ close_link.bind('click.chosen', function(evt) {
880
+ return _this.choice_destroy_link_click(evt);
881
+ });
882
+ choice.append(close_link);
883
+ }
884
+ return this.search_container.before(choice);
885
+ };
886
+
887
+ Chosen.prototype.choice_destroy_link_click = function(evt) {
888
+ evt.preventDefault();
889
+ evt.stopPropagation();
890
+ if (!this.is_disabled) {
891
+ return this.choice_destroy($(evt.target));
892
+ }
893
+ };
894
+
895
+ Chosen.prototype.choice_destroy = function(link) {
896
+ if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) {
897
+ this.show_search_field_default();
898
+ if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) {
899
+ this.results_hide();
900
+ }
901
+ link.parents('li').first().remove();
902
+ return this.search_field_scale();
903
+ }
904
+ };
905
+
906
+ Chosen.prototype.results_reset = function() {
907
+ this.form_field.options[0].selected = true;
908
+ this.selected_option_count = null;
909
+ this.single_set_selected_text();
910
+ this.show_search_field_default();
911
+ this.results_reset_cleanup();
912
+ this.form_field_jq.trigger("change");
913
+ if (this.active_field) {
914
+ return this.results_hide();
915
+ }
916
+ };
917
+
918
+ Chosen.prototype.results_reset_cleanup = function() {
919
+ this.current_selectedIndex = this.form_field.selectedIndex;
920
+ return this.selected_item.find("abbr").remove();
921
+ };
922
+
923
+ Chosen.prototype.result_select = function(evt) {
924
+ var high, item, selected_index;
925
+
926
+ if (this.result_highlight) {
927
+ high = this.result_highlight;
928
+ this.result_clear_highlight();
929
+ if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
930
+ this.form_field_jq.trigger("chosen:maxselected", {
931
+ chosen: this
932
+ });
933
+ return false;
934
+ }
935
+ if (this.is_multiple) {
936
+ high.removeClass("active-result");
937
+ } else {
938
+ if (this.result_single_selected) {
939
+ this.result_single_selected.removeClass("result-selected");
940
+ selected_index = this.result_single_selected[0].getAttribute('data-option-array-index');
941
+ this.results_data[selected_index].selected = false;
942
+ }
943
+ this.result_single_selected = high;
944
+ }
945
+ high.addClass("result-selected");
946
+ item = this.results_data[high[0].getAttribute("data-option-array-index")];
947
+ item.selected = true;
948
+ this.form_field.options[item.options_index].selected = true;
949
+ this.selected_option_count = null;
950
+ if (this.is_multiple) {
951
+ this.choice_build(item);
952
+ } else {
953
+ this.single_set_selected_text(item.text);
954
+ }
955
+ if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) {
956
+ this.results_hide();
957
+ }
958
+ this.search_field.val("");
959
+ if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) {
960
+ this.form_field_jq.trigger("change", {
961
+ 'selected': this.form_field.options[item.options_index].value
962
+ });
963
+ }
964
+ this.current_selectedIndex = this.form_field.selectedIndex;
965
+ return this.search_field_scale();
966
+ }
967
+ };
968
+
969
+ Chosen.prototype.single_set_selected_text = function(text) {
970
+ if (text == null) {
971
+ text = this.default_text;
972
+ }
973
+ if (text === this.default_text) {
974
+ this.selected_item.addClass("chosen-default");
975
+ } else {
976
+ this.single_deselect_control_build();
977
+ this.selected_item.removeClass("chosen-default");
978
+ }
979
+ return this.selected_item.find("span").text(text);
980
+ };
981
+
982
+ Chosen.prototype.result_deselect = function(pos) {
983
+ var result_data;
984
+
985
+ result_data = this.results_data[pos];
986
+ if (!this.form_field.options[result_data.options_index].disabled) {
987
+ result_data.selected = false;
988
+ this.form_field.options[result_data.options_index].selected = false;
989
+ this.selected_option_count = null;
990
+ this.result_clear_highlight();
991
+ if (this.results_showing) {
992
+ this.winnow_results();
993
+ }
994
+ this.form_field_jq.trigger("change", {
995
+ deselected: this.form_field.options[result_data.options_index].value
996
+ });
997
+ this.search_field_scale();
998
+ return true;
999
+ } else {
1000
+ return false;
1001
+ }
1002
+ };
1003
+
1004
+ Chosen.prototype.single_deselect_control_build = function() {
1005
+ if (!this.allow_single_deselect) {
1006
+ return;
1007
+ }
1008
+ if (!this.selected_item.find("abbr").length) {
1009
+ this.selected_item.find("span").first().after("<abbr class=\"search-choice-close\"></abbr>");
1010
+ }
1011
+ return this.selected_item.addClass("chosen-single-with-deselect");
1012
+ };
1013
+
1014
+ Chosen.prototype.get_search_text = function() {
1015
+ if (this.search_field.val() === this.default_text) {
1016
+ return "";
1017
+ } else {
1018
+ return $('<div/>').text($.trim(this.search_field.val())).html();
1019
+ }
1020
+ };
1021
+
1022
+ Chosen.prototype.winnow_results_set_highlight = function() {
1023
+ var do_high, selected_results;
1024
+
1025
+ selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : [];
1026
+ do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first();
1027
+ if (do_high != null) {
1028
+ return this.result_do_highlight(do_high);
1029
+ }
1030
+ };
1031
+
1032
+ Chosen.prototype.no_results = function(terms) {
1033
+ var no_results_html;
1034
+
1035
+ no_results_html = $('<li class="no-results">' + this.results_none_found + ' "<span></span>"</li>');
1036
+ no_results_html.find("span").first().html(terms);
1037
+ return this.search_results.append(no_results_html);
1038
+ };
1039
+
1040
+ Chosen.prototype.no_results_clear = function() {
1041
+ return this.search_results.find(".no-results").remove();
1042
+ };
1043
+
1044
+ Chosen.prototype.keydown_arrow = function() {
1045
+ var next_sib;
1046
+
1047
+ if (this.results_showing && this.result_highlight) {
1048
+ next_sib = this.result_highlight.nextAll("li.active-result").first();
1049
+ if (next_sib) {
1050
+ return this.result_do_highlight(next_sib);
1051
+ }
1052
+ } else {
1053
+ return this.results_show();
1054
+ }
1055
+ };
1056
+
1057
+ Chosen.prototype.keyup_arrow = function() {
1058
+ var prev_sibs;
1059
+
1060
+ if (!this.results_showing && !this.is_multiple) {
1061
+ return this.results_show();
1062
+ } else if (this.result_highlight) {
1063
+ prev_sibs = this.result_highlight.prevAll("li.active-result");
1064
+ if (prev_sibs.length) {
1065
+ return this.result_do_highlight(prev_sibs.first());
1066
+ } else {
1067
+ if (this.choices_count() > 0) {
1068
+ this.results_hide();
1069
+ }
1070
+ return this.result_clear_highlight();
1071
+ }
1072
+ }
1073
+ };
1074
+
1075
+ Chosen.prototype.keydown_backstroke = function() {
1076
+ var next_available_destroy;
1077
+
1078
+ if (this.pending_backstroke) {
1079
+ this.choice_destroy(this.pending_backstroke.find("a").first());
1080
+ return this.clear_backstroke();
1081
+ } else {
1082
+ next_available_destroy = this.search_container.siblings("li.search-choice").last();
1083
+ if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) {
1084
+ this.pending_backstroke = next_available_destroy;
1085
+ if (this.single_backstroke_delete) {
1086
+ return this.keydown_backstroke();
1087
+ } else {
1088
+ return this.pending_backstroke.addClass("search-choice-focus");
1089
+ }
1090
+ }
1091
+ }
1092
+ };
1093
+
1094
+ Chosen.prototype.clear_backstroke = function() {
1095
+ if (this.pending_backstroke) {
1096
+ this.pending_backstroke.removeClass("search-choice-focus");
1097
+ }
1098
+ return this.pending_backstroke = null;
1099
+ };
1100
+
1101
+ Chosen.prototype.keydown_checker = function(evt) {
1102
+ var stroke, _ref1;
1103
+
1104
+ stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode;
1105
+ this.search_field_scale();
1106
+ if (stroke !== 8 && this.pending_backstroke) {
1107
+ this.clear_backstroke();
1108
+ }
1109
+ switch (stroke) {
1110
+ case 8:
1111
+ this.backstroke_length = this.search_field.val().length;
1112
+ break;
1113
+ case 9:
1114
+ if (this.results_showing && !this.is_multiple) {
1115
+ this.result_select(evt);
1116
+ }
1117
+ this.mouse_on_container = false;
1118
+ break;
1119
+ case 13:
1120
+ evt.preventDefault();
1121
+ break;
1122
+ case 38:
1123
+ evt.preventDefault();
1124
+ this.keyup_arrow();
1125
+ break;
1126
+ case 40:
1127
+ evt.preventDefault();
1128
+ this.keydown_arrow();
1129
+ break;
1130
+ }
1131
+ };
1132
+
1133
+ Chosen.prototype.search_field_scale = function() {
1134
+ var div, f_width, h, style, style_block, styles, w, _i, _len;
1135
+
1136
+ if (this.is_multiple) {
1137
+ h = 0;
1138
+ w = 0;
1139
+ style_block = "position:absolute; left: -1000px; top: -1000px; display:none;";
1140
+ styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];
1141
+ for (_i = 0, _len = styles.length; _i < _len; _i++) {
1142
+ style = styles[_i];
1143
+ style_block += style + ":" + this.search_field.css(style) + ";";
1144
+ }
1145
+ div = $('<div />', {
1146
+ 'style': style_block
1147
+ });
1148
+ div.text(this.search_field.val());
1149
+ $('body').append(div);
1150
+ w = div.width() + 25;
1151
+ div.remove();
1152
+ f_width = this.container.outerWidth();
1153
+ if (w > f_width - 10) {
1154
+ w = f_width - 10;
1155
+ }
1156
+ return this.search_field.css({
1157
+ 'width': w + 'px'
1158
+ });
1159
+ }
1160
+ };
1161
+
1162
+ return Chosen;
1163
+
1164
+ })(AbstractChosen);
1165
+
1166
+ }).call(this);