Add autocompletion to city and tankstelle elements
[infodrom.org/service.infodrom.org] / src / InfoCon / sprit / list.wml
1 #include <infocon.style>
2
3 <future>
4 <page func=InfoCon title="Tankbuch">
5 <script type="text/javascript" src="<root_prefix>jquery.autocomplete.min.js"></script>
6 <calendar_init -5>
7 <popups>
8 <style type="text/css">
9 div#details {
10     width: 270px;
11 }
12 div.bar {
13     background-color: #98c5e5;
14     border-bottom: 1px solid #AAA;
15     font-size: 14px;
16     font-weight: bold;
17 }
18 div.year {
19     float: left;
20 }
21 table.spritlog tbody td {
22     border-bottom: 1px solid #CCC;
23 }
24 table.spritlog thead th {
25     border-bottom: 1px solid #AAA;
26 }
27 table.spritlog tfoot th {
28     border-top: 1px solid #AAA;
29 }
30 table.spritlog tbody tr:hover {
31     background-color: yellow;
32 }
33 </style>
34
35 <div id="details" class="popup" style="margin-top: 5px;display:none;">
36 <div class="popup_title">Bearbeiten</div>
37 <div class="popup_body">
38 <input type="hidden" id="id" name="id" value="">
39 <input type="hidden" id="machine" name="machine">
40 <label for="date">Datum</label>
41 <input type="text" id="date" name="date" size="8">
42 <img class="calendar" src="<root_prefix>pix/calendar.gif" onclick="event.cancelBubble=true;popcalendar('date');">
43
44 <label for="city">Ort</label>
45 <input type="text" id="city" name="city" size="30">
46 <label for="tankstelle">Tankstelle</label>
47 <input type="text" id="tankstelle" name="tankstelle" size="30">
48
49 <label for="price_liter">Preis pro Liter</label>
50 <input type="text" id="price_liter" name="price_liter" size="30">
51
52 <label for="liter">Liter / Preis</label>
53 <input type="text" id="liter" name="liter" size="13">
54 <input type="text" id="price" name="price" size="13">
55
56 <label for="km">Tageskilometer / Gesamt</label>
57 <input type="text" id="km" name="km" size="13">
58 <input type="text" id="km_total" name="km_total" size="13">
59
60 <div style="margin-top: 8px; text-align: center;">
61 <input type="submit" onclick="return log_save()" value="Speichern">
62 &nbsp;&nbsp;&nbsp;
63 <input type="submit" onclick="$('#details').hide();return false" value="Abbrechen">
64 </div>
65  </div>
66 </div>
67
68 <?php
69   $log = new SpritLog();
70   $list = $log->distinctYears();
71   foreach ($list as $row) {
72     echo '<div class="bar">';
73     printf('<div year="%d" class="year">%d</div>', $row->year, $row->year);
74     printf('<div style="float:right;">&euro; %.2f&nbsp;&nbsp;%d km</div>', $row->sum, $row->km);
75     echo '<div style="clear:both;"></div></div>';
76     printf('<div id="list_%d" style="display:none;"></div>', $row->year);
77   }
78   if (count($list)) {
79     $out = <<<EOT
80 <script type="text/javascript">
81 $(function(){
82     load_year({$list[0]->year});
83     $('div.bar').click(toggle_year);
84 });
85 </script>
86 EOT;
87 echo $out;
88   }
89 ?>
90 <div style="height:10px;"></div>
91 </page>
92 <protect><script text="text/javascript">
93 $(function(){
94     $('#city').autocomplete({
95         deferRequestBy: 500,
96         lookup: function(query, done){
97             $.invoke('SpritLog/SuggestCity', {query: query}, function(data){
98                 done(data);
99             });
100         }
101     });
102     $('#tankstelle').autocomplete({
103         minChars: 0,
104         deferRequestBy: 500,
105         lookup: function(query, done){
106             $.invoke('SpritLog/SuggestTankstelle', {query: query, city: $('#city').val()}, function(data){
107                 done(data);
108             });
109         }
110     });
111 });
112 var sprit_machine = <?=intval($_POST['machine'])?>;
113 function log_new()
114 {
115     $('#details input').not('input[type="submit"]').val('');
116     $('input#machine').val(sprit_machine);
117     if ($('#details').css('left') == '0px')
118       $('#details').css('left', ($(window).width()-280)+'px').css('top', '30px');
119     $('#details').show();
120     $('#date').focus();
121     return false;
122 }
123
124 function log_save()
125 {
126     $.invoke('SpritLog/Add', $('#details input').serialize(), function(data){
127         load_year(data.year);
128         $('#details').hide();
129     });
130
131     return false;
132 }
133
134 function toggle_year(event)
135 {
136     var year = $(this).find('div.year').attr('year');
137
138     if ($('div#list_'+year).is(':visible'))
139         $('div#list_'+year).hide();
140     else
141         load_year(year);
142 }
143
144 function load_year(year)
145 {
146     $('div#list_'+year).show();
147     $.invoke('SpritLog/List', {year: year});
148 }
149 </script></protect>