Commit 494577e589c5accf2541322d8c2a0cc6b2c4c408
1 parent
f270ea9a
Exists in
master
and in
5 other branches
Corrigindo tratamento do formulário quando um campo muda de linha
Showing
1 changed file
with
34 additions
and
5 deletions
Show diff stats
src/lib3270/html.c
... | ... | @@ -110,6 +110,8 @@ |
110 | 110 | } mode; |
111 | 111 | |
112 | 112 | char * text; |
113 | + char * input; | |
114 | + char * block; | |
113 | 115 | int maxlength; |
114 | 116 | unsigned short fg; |
115 | 117 | unsigned short bg; |
... | ... | @@ -187,6 +189,8 @@ |
187 | 189 | |
188 | 190 | snprintf(name,29,"F%04d",addr); |
189 | 191 | |
192 | + info->block = info->text+strlen(info->text); | |
193 | + | |
190 | 194 | append_string(info,"<input type=\""); |
191 | 195 | append_string(info,mode == HTML_MODE_INPUT_TEXT ? "text" : "password" ); |
192 | 196 | append_string(info,"\" name=\""); |
... | ... | @@ -194,6 +198,7 @@ |
194 | 198 | append_string(info,"\" value=\""); |
195 | 199 | info->mode = mode; |
196 | 200 | info->maxlength = 0; |
201 | + info->input = info->text+strlen(info->text); | |
197 | 202 | |
198 | 203 | } |
199 | 204 | |
... | ... | @@ -201,12 +206,25 @@ |
201 | 206 | { |
202 | 207 | char buffer[80]; |
203 | 208 | char *ptr; |
209 | + char *mark; | |
204 | 210 | |
205 | 211 | if(info->mode == HTML_MODE_TEXT) |
206 | 212 | return; |
207 | 213 | |
208 | - for(ptr = info->text+(strlen(info->text)-1);ptr > info->text && *ptr == ' ';ptr--); | |
209 | - *(++ptr) = 0; | |
214 | + if(info->maxlength < 1) | |
215 | + { | |
216 | + *info->block = 0; | |
217 | + info->mode = HTML_MODE_TEXT; | |
218 | + info->maxlength = 0; | |
219 | + return; | |
220 | + } | |
221 | + | |
222 | + for(ptr=mark=info->input;*ptr;ptr++) | |
223 | + { | |
224 | + if(*ptr != ' ') | |
225 | + mark=ptr+1; | |
226 | + } | |
227 | + *mark = 0; | |
210 | 228 | |
211 | 229 | snprintf(buffer,80,"\" maxlength=\"%d\" class=\"IW%03d\"",info->maxlength,info->maxlength); |
212 | 230 | append_string(info,buffer); |
... | ... | @@ -373,14 +391,25 @@ |
373 | 391 | |
374 | 392 | if(info.mode != HTML_MODE_TEXT) |
375 | 393 | { |
376 | - #warning Incluir o tratamento correto | |
394 | + enum HTML_MODE mode = info.mode; | |
395 | + | |
377 | 396 | close_input(&info); |
378 | - } | |
379 | 397 | |
380 | - if(cr || (option && LIB3270_HTML_OPTION_ALL)) | |
398 | + if(cr) | |
399 | + append_element(&info,HTML_ELEMENT_LINE_BREAK); | |
400 | + | |
401 | + open_input(&info,baddr,mode); | |
402 | + | |
403 | + } | |
404 | + else if(cr) | |
405 | + { | |
381 | 406 | append_element(&info,HTML_ELEMENT_LINE_BREAK); |
407 | + } | |
382 | 408 | } |
383 | 409 | |
410 | + if(info.mode != HTML_MODE_TEXT) | |
411 | + close_input(&info); | |
412 | + | |
384 | 413 | if(info.fg != 0xFF) |
385 | 414 | append_string(&info,element_text[HTML_ELEMENT_END_COLOR]); |
386 | 415 | ... | ... |