Commit 494577e589c5accf2541322d8c2a0cc6b2c4c408

Authored by perry.werneck@gmail.com
1 parent f270ea9a

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