X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/5aec18fed79986d088e3a7ed05a9166c48d05b39..fc876a1da1f510feb6317bc1333008882ba53f70:/js/kivi.Part.js diff --git a/js/kivi.Part.js b/js/kivi.Part.js index 06f9591fd..083e31e91 100644 --- a/js/kivi.Part.js +++ b/js/kivi.Part.js @@ -263,32 +263,40 @@ namespace('kivi.Part', function(ns) { $.post("controller.pl", { action: 'Part/warehouse_changed', warehouse_id: function(){ return $('#part_warehouse_id').val() } }, kivi.eval_json_result); } + var KEY = { + TAB: 9, + ENTER: 13, + SHIFT: 16, + CTRL: 17, + ALT: 18, + ESCAPE: 27, + PAGE_UP: 33, + PAGE_DOWN: 34, + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40, + }; + ns.Picker = function($real, options) { // short circuit in case someone double inits us if ($real.data("part_picker")) return $real.data("part_picker"); - var KEY = { - ESCAPE: 27, - ENTER: 13, - TAB: 9, - LEFT: 37, - RIGHT: 39, - PAGE_UP: 33, - PAGE_DOWN: 34, - SHIFT: 16, - CTRL: 17, - ALT: 18, - }; var CLASSES = { PICKED: 'partpicker-picked', UNDEFINED: 'partpicker-undefined', FAT_SET_ITEM: 'partpicker_fat_set_item', - } + }; var o = $.extend({ limit: 20, delay: 50, fat_set_item: $real.hasClass(CLASSES.FAT_SET_ITEM), + action: { + on_enter_match_none: function(){ }, + on_enter_match_one: function(){ $('#update_button').click(); }, + on_enter_match_many: function(){ open_dialog(); } + } }, options); var STATES = { PICKED: CLASSES.PICKED, @@ -300,6 +308,7 @@ namespace('kivi.Part', function(ns) { var $classification_id = $('#' + real_id + '_classification_id'); var $unit = $('#' + real_id + '_unit'); var $convertible_unit = $('#' + real_id + '_convertible_unit'); + var autocomplete_open = false; var state = STATES.PICKED; var last_real = $real.val(); var last_dummy = $dummy.val(); @@ -352,15 +361,15 @@ namespace('kivi.Part', function(ns) { $real.val(''); $dummy.val(''); } - state = STATES.PICKED; - last_real = $real.val(); + state = STATES.PICKED; + last_real = $real.val(); last_dummy = $dummy.val(); $real.trigger('change'); if (o.fat_set_item && item.id) { $.ajax({ url: 'controller.pl?action=Part/show.json', - data: { id: item.id }, + data: { 'part.id': item.id }, success: function(rsp) { $real.trigger('set_item:PartPicker', rsp); }, @@ -436,7 +445,7 @@ namespace('kivi.Part', function(ns) { if (callbacks && callbacks.match_many) callbacks.match_many(data); } else { state = STATES.UNDEFINED; - if (callbacks &&callbacks.match_none) callbacks.match_none(); + if (callbacks && callbacks.match_none) callbacks.match_none(); } annotate_state(); } @@ -458,6 +467,12 @@ namespace('kivi.Part', function(ns) { search: function(event, ui) { if ((event.which == KEY.SHIFT) || (event.which == KEY.CTRL) || (event.which == KEY.ALT)) event.preventDefault(); + }, + open: function() { + autocomplete_open = true; + }, + close: function() { + autocomplete_open = false; } }); /* In case users are impatient and want to skip ahead: @@ -487,11 +502,16 @@ namespace('kivi.Part', function(ns) { } if (event.which == KEY.ENTER) { handle_changed_text({ - match_one: function(){$('#update_button').click();}, - match_many: function(){open_dialog();} + match_one: o.action.on_enter_match_one, + match_many: o.action.on_enter_match_many }); return false; } + } else if (event.which == KEY.DOWN && !autocomplete_open) { + var old_options = $dummy.autocomplete('option'); + $dummy.autocomplete('option', 'minLength', 0); + $dummy.autocomplete('search', $dummy.val()); + $dummy.autocomplete('option', 'minLength', old_options.minLength); } else if ((event.which != KEY.SHIFT) && (event.which != KEY.CTRL) && (event.which != KEY.ALT)) { state = STATES.UNDEFINED; } @@ -553,6 +573,16 @@ namespace('kivi.Part', function(ns) { return pp; }; + ns.reinit_widgets = function() { + kivi.run_once_for('input.part_autocomplete', 'part_picker', function(elt) { + kivi.Part.Picker($(elt)); + }); + } + + ns.init = function() { + ns.reinit_widgets(); + } + $(function(){ // assortment @@ -595,8 +625,6 @@ namespace('kivi.Part', function(ns) { $('#part_warehouse_id').change(kivi.Part.reload_bin_selection); - $('input.part_autocomplete').each(function(i,real){ - kivi.Part.Picker($(real)); - }); + ns.init(); }); });