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