]> wagnertech.de Git - mfinanz.git/blobdiff - js/kivi.Part.js
kivi.Part.js: KEY konstanten aus Picker verschoben.
[mfinanz.git] / js / kivi.Part.js
index 06f9591fdfe292ce9724c309baac366af4e1483c..083e31e91fa93b7bceb5c4d0d4f0a2d888fb3e46 100644 (file)
@@ -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();
   });
 });