// Product autocompletion
image_html = function(item){
return "";
}
format_product_autocomplete = function(item){
var html = "";
var product = item.data['product'];
if(item.data['variant']==undefined){
if(product['images'].length!=0){
html = image_html(product);
}
html += "
" + product['name'] + "
";
if (product['master']) {
html += "<%= ::I18n.t(:sku) %>: " + product['master']['sku'] + "";
}
html += "<%= ::I18n.t(:on_hand) %>: " + product['count_on_hand'] + "";
}else{
// variant
var variant = item.data['variant'];
var name = item.data.product['name'];
if(variant['images'].length!=0){
html = image_html(variant);
}else{
if(product['images'].length!=0){
html = image_html(product);
}
}
name += " - " + $.map(variant['option_values'], function(option_value){
return option_value["option_type"]["presentation"] + ": " + option_value['presentation'];
}).join(", ")
html += "" + name + "
";
html += "<%= ::I18n.t(:sku) %>: " + variant['sku'] + "";
html += "<%= ::I18n.t(:on_hand) %>: " + variant['count_on_hand'] + "";
}
return html
}
prep_product_autocomplete_data = function(data){
return $.map(eval(data), function(row) {
var product = row['product'];
if(product['variants'].length>0 && ['expand_variants']){
//variants
return $.map(product['variants'], function(variant){
var name = product['name'];
name += " - " + $.map(variant['option_values'], function(option_value){
return option_value["option_type"]["presentation"] + ": " + option_value['presentation'];
}).join(", ");
return {
data: {product: product, variant: variant},
value: name,
result: name
}
});
}else{
return {
data: {product: product},
value: product['name'],
result: product['name']
}
}
});
}
$.fn.product_autocomplete = function(){
return this.each(function() {
$(this).autocomplete({
source: function(request, response) {
$.get(Spree.routes.product_search + '?' + jQuery.param({ q: $('.product_autocomplete').val(), authenticity_token: encodeURIComponent($('meta[name=csrf-token]').attr("content"))}), function(data) {
result = prep_product_autocomplete_data(data)
response(result);
});
},
minLength: 4,
focus: function(event, ui) {
$('.product_autocomplete').val(ui.item.label);
return false;
},
select: function(event, ui) {
$('.product_autocomplete').val(ui.item.label);
product = ui.item.data;
if (product['variant'] == undefined) {
// product
$('#add_variant_id').val(product['product']['master']['id']);
} else {
// variant
$('#add_variant_id').val(product['variant']['id']);
}
return false;
}
}).data("autocomplete")._renderItem = function(ul, item) {
$(ul).addClass('ac_results');
html = format_product_autocomplete(item);
return $("")
.data("item.autocomplete", item)
.append("" + html + "")
.appendTo(ul);
}
$(this).data("autocomplete")._resizeMenu = function() {
var ul = this.menu.element;
ul.outerWidth(this.element.outerWidth());
}
});
}