Bulk Insert

This commit is contained in:
Dan Elbert 2016-01-18 18:29:25 -06:00
parent e677b657e2
commit 2e862b25cf
12 changed files with 1984 additions and 6 deletions

View File

@ -17,4 +17,5 @@
//= require cocoon //= require cocoon
//= require typeahead //= require typeahead
//= require autosize //= require autosize
//= require chosen.jquery
//= require_tree . //= require_tree .

View File

@ -61,7 +61,6 @@
function ingredientNameChange($typeahead, ingredientSearchEngine) { function ingredientNameChange($typeahead, ingredientSearchEngine) {
var $container = $typeahead.closest(".nested-fields"); var $container = $typeahead.closest(".nested-fields");
var $ingredientId = $container.find("input.ingredient_id"); var $ingredientId = $container.find("input.ingredient_id");
var $customDensity = $container.find("input.custom_density");
var $group = $container.find("div.typeahead-group"); var $group = $container.find("div.typeahead-group");
var id = $ingredientId.val(); var id = $ingredientId.val();
@ -72,13 +71,37 @@
if (found && found[0] && found[0].name != value) { if (found && found[0] && found[0].name != value) {
// User has chosen something custom // User has chosen something custom
$ingredientId.val(''); $ingredientId.val('');
$customDensity.val('').prop('disabled', false);
$group.removeClass("has-success"); $group.removeClass("has-success");
} }
} }
} }
function addIngredient(quantity, units, name, ingredient_id) {
$("#ingredient-list").one("cocoon:before-insert", function(e, $container) {
var $ingredientId = $container.find("input.ingredient_id");
var $name = $container.find("input.custom_name");
var $quantity = $container.find("input.quantity");
var $units = $container.find("input.units");
$ingredientId.typeahead("val", name);
$name.val(name);
$units.val(units);
$quantity.val(quantity);
});
$("#addIngredientButton").trigger("click");
}
function addStep(step) {
$("#step-list").one("cocoon:before-insert", function(e, $container) {
var $step = $container.find("textarea.step");
$step.val(step);
});
$("#addStepButton").trigger("click");
}
$(document).on("ready page:load", function() { $(document).on("ready page:load", function() {
var ingredientSearchEngine = new Bloodhound({ var ingredientSearchEngine = new Bloodhound({
@ -192,6 +215,155 @@
$("#modal_form_container").replaceWith($(data.form_html)); $("#modal_form_container").replaceWith($(data.form_html));
}); });
var $bulkIngredientsModal = $("#bulk_ingredients_modal");
var $ingredientBulkInput = $("#ingredient_bulk_input");
var $ingredientBulkList = $("#ingredient_bulk_parsed_list");
autosize($ingredientBulkInput);
$bulkIngredientsModal
.on('show.bs.modal', function (event) {
$ingredientBulkInput.val('');
$ingredientBulkList.empty();
autosize.update($ingredientBulkInput);
});
$ingredientBulkInput.on('keyup', function() {
var data = $ingredientBulkInput.val();
$ingredientBulkList.empty();
var parsed = [];
var x;
var lines = data.replace("\r", "").split("\n");
var regex = /^(?:([\d\/.]+)\s+)?(?:([\w-]+)(?:\s+of)?\s+)?(\w[\w ,\-\(\)\/]*)$/i;
var magicFunc = function(str) {
if (str == "-") {
return "";
} else {
return str;
}
};
for (x = 0; x < lines.length; x++) {
var line = lines[x].trim();
if (line.length == 0) { continue; }
var match = line.match(regex);
if (match) {
parsed.push({quantity: magicFunc(match[1]), units: magicFunc(match[2]), name: magicFunc(match[3])});
} else {
parsed.push(null);
}
}
$bulkIngredientsModal.data("bulkData", parsed);
for (x = 0; x < parsed.length; x++) {
var item = parsed[x];
if (item != null) {
$ingredientBulkList.append(
$("<tr />")
.append($("<td />").addClass("quantity").text(item.quantity))
.append($("<td />").addClass("units").text(item.units))
.append($("<td />").addClass("name").text(item.name))
);
} else {
$ingredientBulkList.append(
$("<tr />")
.append($("<td />").attr("colspan", "3").text("<Cannot Parse>"))
);
}
}
});
$("#bulkIngredientAddSubmit").on("click", function() {
var parsed = $bulkIngredientsModal.data("bulkData");
var x;
if (parsed && parsed.length) {
for (x = 0; x < parsed.length; x++) {
var item = parsed[x];
if (item) {
addIngredient(item.quantity, item.units, item.name, item.ingredient_id)
}
}
}
$bulkIngredientsModal.modal('hide')
});
// ===========================================
// ===========================================
var $bulkStepsModal = $("#bulk_steps_modal");
var $stepBulkInput = $("#step_bulk_input");
var $stepBulkList = $("#step_bulk_parsed_list");
autosize($stepBulkInput);
$bulkStepsModal
.on('show.bs.modal', function (event) {
$stepBulkInput.val('');
$stepBulkList.empty();
autosize.update($stepBulkInput);
});
$stepBulkInput.on('keyup', function() {
var data = $stepBulkInput.val();
$stepBulkList.empty();
var parsed = [];
var x;
var lines = data.replace("\r", "").split("\n\n");
for (x = 0; x < lines.length; x++) {
var line = lines[x].trim().replace(/^\d+\./, "").trim();
if (line.length == 0) { continue; }
parsed.push(line);
}
$bulkStepsModal.data("bulkData", parsed);
for (x = 0; x < parsed.length; x++) {
var item = parsed[x];
if (item != null) {
$stepBulkList.append(
$("<tr />")
.append($("<td />").addClass("step").text(x + 1))
.append($("<td />").addClass("direction").text(item))
);
} else {
$stepBulkList.append(
$("<tr />")
.append($("<td />").attr("colspan", "2").text("<Cannot Parse>"))
);
}
}
});
$("#bulkStepAddSubmit").on("click", function() {
var parsed = $bulkStepsModal.data("bulkData");
var x;
if (parsed && parsed.length) {
for (x = 0; x < parsed.length; x++) {
var item = parsed[x];
if (item) {
addStep(item);
}
}
}
$bulkStepsModal.modal('hide')
});
}); });

View File

@ -11,6 +11,7 @@
* file per style scope. * file per style scope.
* *
*= require flash_messages *= require flash_messages
*= require chosen
*/ */
@import "bootstrap-sprockets"; @import "bootstrap-sprockets";

View File

@ -47,23 +47,25 @@
<h3>Ingredients</h3> <h3>Ingredients</h3>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#bulk_ingredients_modal">Bulk Add</button>
<div id="ingredient-list"> <div id="ingredient-list">
<%= f.fields_for :recipe_ingredients do |ri_form| %> <%= f.fields_for :recipe_ingredients do |ri_form| %>
<%= render partial: 'recipes/editor/ingredient', locals: { f: ri_form } %> <%= render partial: 'recipes/editor/ingredient', locals: { f: ri_form } %>
<% end %> <% end %>
</div> </div>
<%= link_to_add_association 'Add Ingredient', f, :recipe_ingredients, partial: 'recipes/editor/ingredient', :'data-association-insertion-node' => '#ingredient-list', :'data-association-insertion-method' => 'append', class: 'btn btn-primary' %> <%= link_to_add_association 'Add Ingredient', f, :recipe_ingredients, partial: 'recipes/editor/ingredient', :'data-association-insertion-node' => '#ingredient-list', :'data-association-insertion-method' => 'append', class: 'btn btn-primary', id: 'addIngredientButton' %>
<h3>Steps</h3> <h3>Steps</h3>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#bulk_steps_modal">Bulk Add</button>
<div id="step-list"> <div id="step-list">
<%= f.fields_for :recipe_steps do |rs_form| %> <%= f.fields_for :recipe_steps do |rs_form| %>
<%= render partial: 'recipes/editor/step', locals: { f: rs_form } %> <%= render partial: 'recipes/editor/step', locals: { f: rs_form } %>
<% end %> <% end %>
</div> </div>
<%= link_to_add_association 'Add Step', f, :recipe_steps, partial: 'recipes/editor/step', :'data-association-insertion-node' => '#step-list', :'data-association-insertion-method' => 'append', class: 'btn btn-primary' %> <%= link_to_add_association 'Add Step', f, :recipe_steps, partial: 'recipes/editor/step', :'data-association-insertion-node' => '#step-list', :'data-association-insertion-method' => 'append', class: 'btn btn-primary', id: 'addStepButton' %>
<br/><br/> <br/><br/>
<div class="actions"> <div class="actions">
@ -71,6 +73,8 @@
</div> </div>
<% end %> <% end %>
<%= render partial: 'recipes/editor/bulk_ingredient_dialog' %>
<%= render partial: 'recipes/editor/bulk_step_dialog' %>
<div class="modal fade" id="convert_modal" tabindex="-1" role="dialog"> <div class="modal fade" id="convert_modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">

View File

@ -0,0 +1,47 @@
<div class="modal fade" id="bulk_ingredients_modal" tabindex="-1" role="dialog">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">Add Ingredients</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-xs-6">
<div class="form-group">
<label for="ingredient_bulk_input" class="control-label">Raw Input</label>
<textarea id="ingredient_bulk_input" class="form-control"></textarea>
</div>
</div>
<div class="col-xs-6">
<table class="table">
<thead>
<tr>
<th>Quantity</th>
<th>Unit</th>
<th>Name</th>
</tr>
</thead>
<tbody id="ingredient_bulk_parsed_list">
</tbody>
</table>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" id="bulkIngredientAddSubmit">Add</button>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,46 @@
<div class="modal fade" id="bulk_steps_modal" tabindex="-1" role="dialog">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">Add Steps</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-xs-6">
<div class="form-group">
<label for="step_bulk_input" class="control-label">Raw Input</label>
<textarea id="step_bulk_input" class="form-control"></textarea>
</div>
</div>
<div class="col-xs-6">
<table class="table">
<thead>
<tr>
<th>#</th>
<th>Direction</th>
</tr>
</thead>
<tbody id="step_bulk_parsed_list">
</tbody>
</table>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" id="bulkStepAddSubmit">Add</button>
</div>
</div>
</div>
</div>

View File

@ -20,14 +20,14 @@
</div> </div>
</div> </div>
<div class="col-xs-6 col-sm-6 col-md-3"> <div class="col-xs-6 col-sm-6 col-md-2">
<div class="form-group form-group-sm"> <div class="form-group form-group-sm">
<%= f.label :quantity, class: "control-label" %> <%= f.label :quantity, class: "control-label" %>
<%= f.text_field :quantity, class: 'form-control quantity' %> <%= f.text_field :quantity, class: 'form-control quantity' %>
</div> </div>
</div> </div>
<div class="col-xs-6 col-sm-6 col-md-2"> <div class="col-xs-6 col-sm-6 col-md-3">
<div class="form-group form-group-sm"> <div class="form-group form-group-sm">
<%= f.label :units, class: "control-label" %> <%= f.label :units, class: "control-label" %>
<%= f.text_field :units, class: 'form-control units' %> <%= f.text_field :units, class: 'form-control units' %>

BIN
vendor/assets/images/chosen-sprite.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 738 B

1257
vendor/assets/javascripts/chosen.jquery.js vendored Normal file

File diff suppressed because it is too large Load Diff

450
vendor/assets/stylesheets/chosen.css vendored Normal file
View File

@ -0,0 +1,450 @@
/*!
Chosen, a Select Box Enhancer for jQuery and Prototype
by Patrick Filler for Harvest, http://getharvest.com
Version 1.4.2
Full source at https://github.com/harvesthq/chosen
Copyright (c) 2011-2015 Harvest http://getharvest.com
MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
This file is generated by `grunt build`, do not edit it by hand.
*/
/* @group Base */
.chosen-container {
position: relative;
display: inline-block;
vertical-align: middle;
font-size: 13px;
zoom: 1;
*display: inline;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.chosen-container * {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.chosen-container .chosen-drop {
position: absolute;
top: 100%;
left: -9999px;
z-index: 1010;
width: 100%;
border: 1px solid #aaa;
border-top: 0;
background: #fff;
box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
}
.chosen-container.chosen-with-drop .chosen-drop {
left: 0;
}
.chosen-container a {
cursor: pointer;
}
.chosen-container .search-choice .group-name, .chosen-container .chosen-single .group-name {
margin-right: 4px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
font-weight: normal;
color: #999999;
}
.chosen-container .search-choice .group-name:after, .chosen-container .chosen-single .group-name:after {
content: ":";
padding-left: 2px;
vertical-align: top;
}
/* @end */
/* @group Single Chosen */
.chosen-container-single .chosen-single {
position: relative;
display: block;
overflow: hidden;
padding: 0 0 0 8px;
height: 25px;
border: 1px solid #aaa;
border-radius: 5px;
background-color: #fff;
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4));
background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
background-clip: padding-box;
box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1);
color: #444;
text-decoration: none;
white-space: nowrap;
line-height: 24px;
}
.chosen-container-single .chosen-default {
color: #999;
}
.chosen-container-single .chosen-single span {
display: block;
overflow: hidden;
margin-right: 26px;
text-overflow: ellipsis;
white-space: nowrap;
}
.chosen-container-single .chosen-single-with-deselect span {
margin-right: 38px;
}
.chosen-container-single .chosen-single abbr {
position: absolute;
top: 6px;
right: 26px;
display: block;
width: 12px;
height: 12px;
background: url('chosen-sprite.png') -42px 1px no-repeat;
font-size: 1px;
}
.chosen-container-single .chosen-single abbr:hover {
background-position: -42px -10px;
}
.chosen-container-single.chosen-disabled .chosen-single abbr:hover {
background-position: -42px -10px;
}
.chosen-container-single .chosen-single div {
position: absolute;
top: 0;
right: 0;
display: block;
width: 18px;
height: 100%;
}
.chosen-container-single .chosen-single div b {
display: block;
width: 100%;
height: 100%;
background: url('chosen-sprite.png') no-repeat 0px 2px;
}
.chosen-container-single .chosen-search {
position: relative;
z-index: 1010;
margin: 0;
padding: 3px 4px;
white-space: nowrap;
}
.chosen-container-single .chosen-search input[type="text"] {
margin: 1px 0;
padding: 4px 20px 4px 5px;
width: 100%;
height: auto;
outline: 0;
border: 1px solid #aaa;
background: white url('chosen-sprite.png') no-repeat 100% -20px;
background: url('chosen-sprite.png') no-repeat 100% -20px;
font-size: 1em;
font-family: sans-serif;
line-height: normal;
border-radius: 0;
}
.chosen-container-single .chosen-drop {
margin-top: -1px;
border-radius: 0 0 4px 4px;
background-clip: padding-box;
}
.chosen-container-single.chosen-container-single-nosearch .chosen-search {
position: absolute;
left: -9999px;
}
/* @end */
/* @group Results */
.chosen-container .chosen-results {
color: #444;
position: relative;
overflow-x: hidden;
overflow-y: auto;
margin: 0 4px 4px 0;
padding: 0 0 0 4px;
max-height: 240px;
-webkit-overflow-scrolling: touch;
}
.chosen-container .chosen-results li {
display: none;
margin: 0;
padding: 5px 6px;
list-style: none;
line-height: 15px;
word-wrap: break-word;
-webkit-touch-callout: none;
}
.chosen-container .chosen-results li.active-result {
display: list-item;
cursor: pointer;
}
.chosen-container .chosen-results li.disabled-result {
display: list-item;
color: #ccc;
cursor: default;
}
.chosen-container .chosen-results li.highlighted {
background-color: #3875d7;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc));
background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%);
background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%);
background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%);
background-image: linear-gradient(#3875d7 20%, #2a62bc 90%);
color: #fff;
}
.chosen-container .chosen-results li.no-results {
color: #777;
display: list-item;
background: #f4f4f4;
}
.chosen-container .chosen-results li.group-result {
display: list-item;
font-weight: bold;
cursor: default;
}
.chosen-container .chosen-results li.group-option {
padding-left: 15px;
}
.chosen-container .chosen-results li em {
font-style: normal;
text-decoration: underline;
}
/* @end */
/* @group Multi Chosen */
.chosen-container-multi .chosen-choices {
position: relative;
overflow: hidden;
margin: 0;
padding: 0 5px;
width: 100%;
height: auto !important;
height: 1%;
border: 1px solid #aaa;
background-color: #fff;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
background-image: -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
background-image: -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
background-image: -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
background-image: linear-gradient(#eeeeee 1%, #ffffff 15%);
cursor: text;
}
.chosen-container-multi .chosen-choices li {
float: left;
list-style: none;
}
.chosen-container-multi .chosen-choices li.search-field {
margin: 0;
padding: 0;
white-space: nowrap;
}
.chosen-container-multi .chosen-choices li.search-field input[type="text"] {
margin: 1px 0;
padding: 0;
height: 25px;
outline: 0;
border: 0 !important;
background: transparent !important;
box-shadow: none;
color: #999;
font-size: 100%;
font-family: sans-serif;
line-height: normal;
border-radius: 0;
}
.chosen-container-multi .chosen-choices li.search-choice {
position: relative;
margin: 3px 5px 3px 0;
padding: 3px 20px 3px 5px;
border: 1px solid #aaa;
max-width: 100%;
border-radius: 3px;
background-color: #eeeeee;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-size: 100% 19px;
background-repeat: repeat-x;
background-clip: padding-box;
box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);
color: #333;
line-height: 13px;
cursor: default;
}
.chosen-container-multi .chosen-choices li.search-choice span {
word-wrap: break-word;
}
.chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
position: absolute;
top: 4px;
right: 3px;
display: block;
width: 12px;
height: 12px;
background: url('chosen-sprite.png') -42px 1px no-repeat;
font-size: 1px;
}
.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {
background-position: -42px -10px;
}
.chosen-container-multi .chosen-choices li.search-choice-disabled {
padding-right: 5px;
border: 1px solid #ccc;
background-color: #e4e4e4;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
color: #666;
}
.chosen-container-multi .chosen-choices li.search-choice-focus {
background: #d4d4d4;
}
.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close {
background-position: -42px -10px;
}
.chosen-container-multi .chosen-results {
margin: 0;
padding: 0;
}
.chosen-container-multi .chosen-drop .result-selected {
display: list-item;
color: #ccc;
cursor: default;
}
/* @end */
/* @group Active */
.chosen-container-active .chosen-single {
border: 1px solid #5897fb;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
}
.chosen-container-active.chosen-with-drop .chosen-single {
border: 1px solid #aaa;
-moz-border-radius-bottomright: 0;
border-bottom-right-radius: 0;
-moz-border-radius-bottomleft: 0;
border-bottom-left-radius: 0;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff));
background-image: -webkit-linear-gradient(#eeeeee 20%, #ffffff 80%);
background-image: -moz-linear-gradient(#eeeeee 20%, #ffffff 80%);
background-image: -o-linear-gradient(#eeeeee 20%, #ffffff 80%);
background-image: linear-gradient(#eeeeee 20%, #ffffff 80%);
box-shadow: 0 1px 0 #fff inset;
}
.chosen-container-active.chosen-with-drop .chosen-single div {
border-left: none;
background: transparent;
}
.chosen-container-active.chosen-with-drop .chosen-single div b {
background-position: -18px 2px;
}
.chosen-container-active .chosen-choices {
border: 1px solid #5897fb;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
}
.chosen-container-active .chosen-choices li.search-field input[type="text"] {
color: #222 !important;
}
/* @end */
/* @group Disabled Support */
.chosen-disabled {
opacity: 0.5 !important;
cursor: default;
}
.chosen-disabled .chosen-single {
cursor: default;
}
.chosen-disabled .chosen-choices .search-choice .search-choice-close {
cursor: default;
}
/* @end */
/* @group Right to Left */
.chosen-rtl {
text-align: right;
}
.chosen-rtl .chosen-single {
overflow: visible;
padding: 0 8px 0 0;
}
.chosen-rtl .chosen-single span {
margin-right: 0;
margin-left: 26px;
direction: rtl;
}
.chosen-rtl .chosen-single-with-deselect span {
margin-left: 38px;
}
.chosen-rtl .chosen-single div {
right: auto;
left: 3px;
}
.chosen-rtl .chosen-single abbr {
right: auto;
left: 26px;
}
.chosen-rtl .chosen-choices li {
float: right;
}
.chosen-rtl .chosen-choices li.search-field input[type="text"] {
direction: rtl;
}
.chosen-rtl .chosen-choices li.search-choice {
margin: 3px 5px 3px 0;
padding: 3px 5px 3px 19px;
}
.chosen-rtl .chosen-choices li.search-choice .search-choice-close {
right: auto;
left: 4px;
}
.chosen-rtl.chosen-container-single-nosearch .chosen-search,
.chosen-rtl .chosen-drop {
left: 9999px;
}
.chosen-rtl.chosen-container-single .chosen-results {
margin: 0 0 4px 4px;
padding: 0 4px 0 0;
}
.chosen-rtl .chosen-results li.group-option {
padding-right: 15px;
padding-left: 0;
}
.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div {
border-right: none;
}
.chosen-rtl .chosen-search input[type="text"] {
padding: 4px 5px 4px 20px;
background: white url('chosen-sprite.png') no-repeat -30px -20px;
background: url('chosen-sprite.png') no-repeat -30px -20px;
direction: rtl;
}
.chosen-rtl.chosen-container-single .chosen-single div b {
background-position: 6px 2px;
}
.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b {
background-position: -12px 2px;
}
/* @end */
/* @group Retina compatibility */
@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi), only screen and (min-resolution: 1.5dppx) {
.chosen-rtl .chosen-search input[type="text"],
.chosen-container-single .chosen-single abbr,
.chosen-container-single .chosen-single div b,
.chosen-container-single .chosen-search input[type="text"],
.chosen-container-multi .chosen-choices .search-choice .search-choice-close,
.chosen-container .chosen-results-scroll-down span,
.chosen-container .chosen-results-scroll-up span {
background-image: url('chosen-sprite@2x.png') !important;
background-size: 52px 37px !important;
background-repeat: no-repeat !important;
}
}
/* @end */