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,6 +110,8 @@ | ||
110 | } mode; | 110 | } mode; |
111 | 111 | ||
112 | char * text; | 112 | char * text; |
113 | + char * input; | ||
114 | + char * block; | ||
113 | int maxlength; | 115 | int maxlength; |
114 | unsigned short fg; | 116 | unsigned short fg; |
115 | unsigned short bg; | 117 | unsigned short bg; |
@@ -187,6 +189,8 @@ | @@ -187,6 +189,8 @@ | ||
187 | 189 | ||
188 | snprintf(name,29,"F%04d",addr); | 190 | snprintf(name,29,"F%04d",addr); |
189 | 191 | ||
192 | + info->block = info->text+strlen(info->text); | ||
193 | + | ||
190 | append_string(info,"<input type=\""); | 194 | append_string(info,"<input type=\""); |
191 | append_string(info,mode == HTML_MODE_INPUT_TEXT ? "text" : "password" ); | 195 | append_string(info,mode == HTML_MODE_INPUT_TEXT ? "text" : "password" ); |
192 | append_string(info,"\" name=\""); | 196 | append_string(info,"\" name=\""); |
@@ -194,6 +198,7 @@ | @@ -194,6 +198,7 @@ | ||
194 | append_string(info,"\" value=\""); | 198 | append_string(info,"\" value=\""); |
195 | info->mode = mode; | 199 | info->mode = mode; |
196 | info->maxlength = 0; | 200 | info->maxlength = 0; |
201 | + info->input = info->text+strlen(info->text); | ||
197 | 202 | ||
198 | } | 203 | } |
199 | 204 | ||
@@ -201,12 +206,25 @@ | @@ -201,12 +206,25 @@ | ||
201 | { | 206 | { |
202 | char buffer[80]; | 207 | char buffer[80]; |
203 | char *ptr; | 208 | char *ptr; |
209 | + char *mark; | ||
204 | 210 | ||
205 | if(info->mode == HTML_MODE_TEXT) | 211 | if(info->mode == HTML_MODE_TEXT) |
206 | return; | 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 | snprintf(buffer,80,"\" maxlength=\"%d\" class=\"IW%03d\"",info->maxlength,info->maxlength); | 229 | snprintf(buffer,80,"\" maxlength=\"%d\" class=\"IW%03d\"",info->maxlength,info->maxlength); |
212 | append_string(info,buffer); | 230 | append_string(info,buffer); |
@@ -373,14 +391,25 @@ | @@ -373,14 +391,25 @@ | ||
373 | 391 | ||
374 | if(info.mode != HTML_MODE_TEXT) | 392 | if(info.mode != HTML_MODE_TEXT) |
375 | { | 393 | { |
376 | - #warning Incluir o tratamento correto | 394 | + enum HTML_MODE mode = info.mode; |
395 | + | ||
377 | close_input(&info); | 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 | append_element(&info,HTML_ELEMENT_LINE_BREAK); | 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 | if(info.fg != 0xFF) | 413 | if(info.fg != 0xFF) |
385 | append_string(&info,element_text[HTML_ELEMENT_END_COLOR]); | 414 | append_string(&info,element_text[HTML_ELEMENT_END_COLOR]); |
386 | 415 |