Add autocompletion to city and tankstelle elements
authorJoey Schulze <joey@infodrom.org>
Mon, 10 Jul 2017 20:44:48 +0000 (22:44 +0200)
committerJoey Schulze <joey@infodrom.org>
Mon, 10 Jul 2017 20:48:29 +0000 (22:48 +0200)
class/spritlog.class.php
src/InfoCon/sprit/list.wml

index e0b8f70..451edc4 100644 (file)
@@ -82,6 +82,29 @@ class SpritLog extends DatabaseTable {
 
     $d = explode('-', $data['date']);
     return array('status' => $ok, 'year' => $d[0]);
+  }
+
+  public function ajaxSuggestCity(Array $data)
+  {
+    $data['query'] .= '%';
+    $sql = sprintf("SELECT DISTINCT city FROM sprit_log WHERE lower(city) LIKE %s ORDER BY city",
+                  $this->quote(strtolower($data['query'])));
+    $list = array();
+    foreach ($this->fetchObjectList($sql) as $row)
+      $list[] = array('value' => $row->city, 'data' => $row->city);
+    return array('suggestions' => $list);
+  }
 
+  public function ajaxSuggestTankstelle(Array $data)
+  {
+    $data['query'] .= '%';
+    $sql = sprintf("SELECT DISTINCT tankstelle FROM sprit_log WHERE city = %s AND lower(tankstelle) LIKE %s ORDER BY tankstelle",
+                  $this->quote($data['city']),
+                  $this->quote(strtolower($data['query'])));
+    $list = array();
+    foreach ($this->fetchObjectList($sql) as $row)
+      $list[] = array('value' => $row->tankstelle, 'data' => $row->tankstelle);
+    return array('suggestions' => $list);
   }
+
 }
index 8580a12..e857fa5 100644 (file)
@@ -2,6 +2,7 @@
 
 <future>
 <page func=InfoCon title="Tankbuch">
+<script type="text/javascript" src="<root_prefix>jquery.autocomplete.min.js"></script>
 <calendar_init -5>
 <popups>
 <style type="text/css">
@@ -89,6 +90,25 @@ echo $out;
 <div style="height:10px;"></div>
 </page>
 <protect><script text="text/javascript">
+$(function(){
+    $('#city').autocomplete({
+       deferRequestBy: 500,
+       lookup: function(query, done){
+           $.invoke('SpritLog/SuggestCity', {query: query}, function(data){
+               done(data);
+           });
+       }
+    });
+    $('#tankstelle').autocomplete({
+       minChars: 0,
+       deferRequestBy: 500,
+       lookup: function(query, done){
+           $.invoke('SpritLog/SuggestTankstelle', {query: query, city: $('#city').val()}, function(data){
+               done(data);
+           });
+       }
+    });
+});
 var sprit_machine = <?=intval($_POST['machine'])?>;
 function log_new()
 {
@@ -97,6 +117,7 @@ function log_new()
     if ($('#details').css('left') == '0px')
       $('#details').css('left', ($(window).width()-280)+'px').css('top', '30px');
     $('#details').show();
+    $('#date').focus();
     return false;
 }