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 | ... | ... |