1 namespace('kivi', function(k){
2 k.part_picker = function($real, options) {
8 var real_id = $real.attr('id');
9 var $dummy = $('#' + real_id + '_name');
10 var $type = $('#' + real_id + '_type');
11 var $column = $('#' + real_id + '_column');
12 var open_dialog = function(){
16 action: 'Part/part_picker_search',
18 'filter.all:substr::ilike': function(){ return $dummy.val() },
19 'filter.type': function(){ return $type.val() },
20 'column': function(){ return $column.val() },
27 var ajax_data = function(term) {
30 type: function() { return $type.val() },
31 column: function() { return $column.val()===undefined ? '' : $column.val() },
32 current: function() { return $real.val() },
37 var set_item = function (item) {
40 // autocomplete ui has name, ajax items have description
41 $dummy.val(item.name ? item.name : item.description);
49 source: function(req, rsp) {
51 url: 'controller.pl?action=Part/ajax_autocomplete',
53 data: ajax_data(req.term),
54 success: function (data){ rsp(data) }
57 select: function(event, ui) {
61 /* In case users are impatient and want to skip ahead:
62 * Capture <enter> key events and check if it's a unique hit.
63 * If it is, go ahead and assume it was selected. If it wasn't don't do
64 * anything so that autocompletion kicks in. For <tab> don't prevent
65 * propagation. It would be nice to catch it, but javascript is too stupid
66 * to fire a tab event later on, so we'd have to reimplement the "find
67 * next active element in tabindex order and focus it".
69 $dummy.keypress(function(event){
70 if (event.keyCode == 13 || event.keyCode == 9) { // enter or tab or tab
71 // if string is empty assume they want to delete
72 if ($dummy.val() == '') {
77 url: 'controller.pl?action=Part/ajax_autocomplete',
79 data: ajax_data($dummy.val()),
80 success: function (data){
81 if (data.length == 1) {
83 if (event.keyCode == 13)
84 $('#update_button').click();
86 if (event.keyCode == 13)
93 if (event.keyCode == 13)
98 $dummy.blur(function(){
99 if ($dummy.val() == '')
103 // now add a picker div after the original input
104 var pcont = $('<span>').addClass('position-absolute');
105 var picker = $('<div>');
107 pcont.append(picker);
108 picker.addClass('icon16 CRM--Schnellsuche').click(open_dialog);
113 $('input.part_autocomplete').each(function(i,real){
114 kivi.part_picker($(real));