mirror of
https://github.com/acanas/swad-core.git
synced 2024-09-22 00:00:40 +02:00
Version 16.107
This commit is contained in:
parent
780b55c17e
commit
ea97a58cae
|
@ -183,18 +183,21 @@
|
||||||
|
|
||||||
// TODO: Draw future dates in attendance, surveys, assignments in blue?
|
// TODO: Draw future dates in attendance, surveys, assignments in blue?
|
||||||
// TODO: Fix bug in generate a test: after entering a number of questions with empty tags and type of answers, number of questions is not remembered
|
// TODO: Fix bug in generate a test: after entering a number of questions with empty tags and type of answers, number of questions is not remembered
|
||||||
|
// TODO: Fix big when editing a test question with images: when "Change image" is selected but no image is uploades, other images (for example in answers) are lost
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 16.106.20 (2016-12-26)"
|
#define Log_PLATFORM_VERSION "SWAD 16.107 (2016-12-26)"
|
||||||
#define CSS_FILE "swad16.106.5.css"
|
#define CSS_FILE "swad16.106.5.css"
|
||||||
#define JS_FILE "swad16.101.js"
|
#define JS_FILE "swad16.101.js"
|
||||||
|
|
||||||
// Number of lines (includes comments but not blank lines) has been got with the following command:
|
// Number of lines (includes comments but not blank lines) has been got with the following command:
|
||||||
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
|
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
|
||||||
/*
|
/*
|
||||||
|
Version 16.107: Dec 26, 2016 Changes in behaviour of labels in forms.
|
||||||
|
Code refactoring in tests. (211510 lines)
|
||||||
Version 16.106.20:Dec 26, 2016 Changes in warning about next time to take a test. (211486 lines)
|
Version 16.106.20:Dec 26, 2016 Changes in warning about next time to take a test. (211486 lines)
|
||||||
Version 16.106.19:Dec 26, 2016 Changes in login form (autofocus). (211494 lines)
|
Version 16.106.19:Dec 26, 2016 Changes in login form (autofocus). (211494 lines)
|
||||||
Version 16.106.18:Dec 25, 2016 Changes in behaviour of labels in forms. (211496 lines)
|
Version 16.106.18:Dec 25, 2016 Changes in behaviour of labels in forms. (211496 lines)
|
||||||
|
|
189
swad_test.c
189
swad_test.c
|
@ -172,6 +172,8 @@ static void Tst_ShowFormEditTags (void);
|
||||||
static void Tst_PutIconEnable (long TagCod,const char *TagTxt);
|
static void Tst_PutIconEnable (long TagCod,const char *TagTxt);
|
||||||
static void Tst_PutIconDisable (long TagCod,const char *TagTxt);
|
static void Tst_PutIconDisable (long TagCod,const char *TagTxt);
|
||||||
static void Tst_ShowFormConfigTst (void);
|
static void Tst_ShowFormConfigTst (void);
|
||||||
|
static void Tst_PutInputFieldNumQst (const char *Field,const char *Label,
|
||||||
|
unsigned Value);
|
||||||
static void Tst_GetConfigTstFromDB (void);
|
static void Tst_GetConfigTstFromDB (void);
|
||||||
static Tst_Pluggable_t Tst_GetPluggableFromForm (void);
|
static Tst_Pluggable_t Tst_GetPluggableFromForm (void);
|
||||||
static Tst_Feedback_t Tst_GetFeedbackTypeFromForm (void);
|
static Tst_Feedback_t Tst_GetFeedbackTypeFromForm (void);
|
||||||
|
@ -214,6 +216,8 @@ static bool Tst_GetCreateXMLFromForm (void);
|
||||||
static int Tst_CountNumTagsInList (void);
|
static int Tst_CountNumTagsInList (void);
|
||||||
static int Tst_CountNumAnswerTypesInList (void);
|
static int Tst_CountNumAnswerTypesInList (void);
|
||||||
static void Tst_PutFormEditOneQst (char *Stem,char *Feedback);
|
static void Tst_PutFormEditOneQst (char *Stem,char *Feedback);
|
||||||
|
static void Tst_PutFloatInputField (const char *Label,const char *Field,
|
||||||
|
double Value);
|
||||||
|
|
||||||
static void Tst_FreeTextChoiceAnswers (void);
|
static void Tst_FreeTextChoiceAnswers (void);
|
||||||
static void Tst_FreeTextChoiceAnswer (unsigned NumOpt);
|
static void Tst_FreeTextChoiceAnswer (unsigned NumOpt);
|
||||||
|
@ -1830,18 +1834,21 @@ static void Tst_ShowFormConfigTst (void)
|
||||||
"<td class=\"%s RIGHT_TOP\">"
|
"<td class=\"%s RIGHT_TOP\">"
|
||||||
"%s:"
|
"%s:"
|
||||||
"</td>"
|
"</td>"
|
||||||
"<td class=\"LEFT_TOP\">",
|
"<td class=\"LEFT_BOTTOM\">",
|
||||||
The_ClassForm[Gbl.Prefs.Theme],
|
The_ClassForm[Gbl.Prefs.Theme],
|
||||||
Txt_Plugins);
|
Txt_Plugins);
|
||||||
for (Pluggable = Tst_PLUGGABLE_NO;
|
for (Pluggable = Tst_PLUGGABLE_NO;
|
||||||
Pluggable <= Tst_PLUGGABLE_YES;
|
Pluggable <= Tst_PLUGGABLE_YES;
|
||||||
Pluggable++)
|
Pluggable++)
|
||||||
{
|
{
|
||||||
fprintf (Gbl.F.Out,"<input type=\"radio\" name=\"Pluggable\" value=\"%u\"",
|
fprintf (Gbl.F.Out,"<label class=\"DAT\">"
|
||||||
|
"<input type=\"radio\" name=\"Pluggable\" value=\"%u\"",
|
||||||
(unsigned) Pluggable);
|
(unsigned) Pluggable);
|
||||||
if (Pluggable == Gbl.Test.Config.Pluggable)
|
if (Pluggable == Gbl.Test.Config.Pluggable)
|
||||||
fprintf (Gbl.F.Out," checked=\"checked\"");
|
fprintf (Gbl.F.Out," checked=\"checked\"");
|
||||||
fprintf (Gbl.F.Out," /><span class=\"DAT\">%s</span><br />",
|
fprintf (Gbl.F.Out," />"
|
||||||
|
"%s"
|
||||||
|
"</label><br />",
|
||||||
Txt_TST_PLUGGABLE[Pluggable]);
|
Txt_TST_PLUGGABLE[Pluggable]);
|
||||||
}
|
}
|
||||||
fprintf (Gbl.F.Out,"</td>"
|
fprintf (Gbl.F.Out,"</td>"
|
||||||
|
@ -1852,60 +1859,30 @@ static void Tst_ShowFormConfigTst (void)
|
||||||
"<td class=\"%s RIGHT_TOP\">"
|
"<td class=\"%s RIGHT_TOP\">"
|
||||||
"%s:"
|
"%s:"
|
||||||
"</td>"
|
"</td>"
|
||||||
"<td class=\"LEFT_TOP\">"
|
"<td class=\"LEFT_BOTTOM\">"
|
||||||
"<table style=\"border-spacing:2px;\">",
|
"<table style=\"border-spacing:2px;\">",
|
||||||
The_ClassForm[Gbl.Prefs.Theme],
|
The_ClassForm[Gbl.Prefs.Theme],
|
||||||
Txt_No_of_questions);
|
Txt_No_of_questions);
|
||||||
|
Tst_PutInputFieldNumQst ("NumQstMin",Txt_minimum,
|
||||||
/* Minimum number of questions in a test */
|
Gbl.Test.Config.Min); // Minimum number of questions
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
Tst_PutInputFieldNumQst ("NumQstDef",Txt_default,
|
||||||
"<td class=\"DAT RIGHT_MIDDLE\">"
|
Gbl.Test.Config.Def); // Default number of questions
|
||||||
"%s"
|
Tst_PutInputFieldNumQst ("NumQstMax",Txt_maximum,
|
||||||
"</td>"
|
Gbl.Test.Config.Max); // Maximum number of questions
|
||||||
"<td class=\"LEFT_MIDDLE\">"
|
fprintf (Gbl.F.Out,"</table>"
|
||||||
"<input type=\"text\" name=\"NumQstMin\""
|
|
||||||
" size=\"3\" maxlength=\"3\" value=\"%u\""
|
|
||||||
" required=\"required\" />"
|
|
||||||
"</td>"
|
"</td>"
|
||||||
"</tr>",
|
"</tr>");
|
||||||
Txt_minimum,Gbl.Test.Config.Min);
|
|
||||||
|
|
||||||
/* Default number of questions in a test */
|
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
|
||||||
"<td class=\"DAT RIGHT_MIDDLE\">"
|
|
||||||
"%s"
|
|
||||||
"</td>"
|
|
||||||
"<td class=\"LEFT_MIDDLE\">"
|
|
||||||
"<input type=\"text\" name=\"NumQstDef\""
|
|
||||||
" size=\"3\" maxlength=\"3\" value=\"%u\""
|
|
||||||
" required=\"required\" />"
|
|
||||||
"</td>"
|
|
||||||
"</tr>",
|
|
||||||
Txt_default,Gbl.Test.Config.Def);
|
|
||||||
|
|
||||||
/* Maximum number of questions in a test */
|
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
|
||||||
"<td class=\"DAT RIGHT_MIDDLE\">"
|
|
||||||
"%s"
|
|
||||||
"</td>"
|
|
||||||
"<td class=\"LEFT_MIDDLE\">"
|
|
||||||
"<input type=\"text\" name=\"NumQstMax\""
|
|
||||||
" size=\"3\" maxlength=\"3\" value=\"%u\""
|
|
||||||
" required=\"required\" />"
|
|
||||||
"</td>"
|
|
||||||
"</tr>"
|
|
||||||
"</table>"
|
|
||||||
"</td>"
|
|
||||||
"</tr>",
|
|
||||||
Txt_maximum,Gbl.Test.Config.Max);
|
|
||||||
|
|
||||||
/***** Minimum time between consecutive tests, per question *****/
|
/***** Minimum time between consecutive tests, per question *****/
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
"<td class=\"%s RIGHT_MIDDLE\">"
|
"<td class=\"RIGHT_TOP\">"
|
||||||
|
"<label for=\"MinTimeNxtTstPerQst\" class=\"%s\">"
|
||||||
"%s:"
|
"%s:"
|
||||||
|
"</label>"
|
||||||
"</td>"
|
"</td>"
|
||||||
"<td class=\"LEFT_MIDDLE\">"
|
"<td class=\"LEFT_BOTTOM\">"
|
||||||
"<input type=\"text\" name=\"MinTimeNxtTstPerQst\""
|
"<input type=\"text\""
|
||||||
|
" id=\"MinTimeNxtTstPerQst\" name=\"MinTimeNxtTstPerQst\""
|
||||||
" size=\"7\" maxlength=\"7\" value=\"%lu\""
|
" size=\"7\" maxlength=\"7\" value=\"%lu\""
|
||||||
" required=\"required\" />"
|
" required=\"required\" />"
|
||||||
"</td>"
|
"</td>"
|
||||||
|
@ -1919,17 +1896,20 @@ static void Tst_ShowFormConfigTst (void)
|
||||||
"<td class=\"%s RIGHT_TOP\">"
|
"<td class=\"%s RIGHT_TOP\">"
|
||||||
"%s:"
|
"%s:"
|
||||||
"</td>"
|
"</td>"
|
||||||
"<td class=\"LEFT_TOP\">",
|
"<td class=\"LEFT_BOTTOM\">",
|
||||||
The_ClassForm[Gbl.Prefs.Theme],Txt_Feedback_to_students);
|
The_ClassForm[Gbl.Prefs.Theme],Txt_Feedback_to_students);
|
||||||
for (FeedbTyp = (Tst_Feedback_t) 0;
|
for (FeedbTyp = (Tst_Feedback_t) 0;
|
||||||
FeedbTyp < Tst_NUM_TYPES_FEEDBACK;
|
FeedbTyp < Tst_NUM_TYPES_FEEDBACK;
|
||||||
FeedbTyp++)
|
FeedbTyp++)
|
||||||
{
|
{
|
||||||
fprintf (Gbl.F.Out,"<input type=\"radio\" name=\"Feedback\" value=\"%u\"",
|
fprintf (Gbl.F.Out,"<label class=\"DAT\">"
|
||||||
|
"<input type=\"radio\" name=\"Feedback\" value=\"%u\"",
|
||||||
(unsigned) FeedbTyp);
|
(unsigned) FeedbTyp);
|
||||||
if (FeedbTyp == Gbl.Test.Config.FeedbackType)
|
if (FeedbTyp == Gbl.Test.Config.FeedbackType)
|
||||||
fprintf (Gbl.F.Out," checked=\"checked\"");
|
fprintf (Gbl.F.Out," checked=\"checked\"");
|
||||||
fprintf (Gbl.F.Out," /><span class=\"DAT\">%s</span><br />",
|
fprintf (Gbl.F.Out," />"
|
||||||
|
"%s"
|
||||||
|
"</label><br />",
|
||||||
Txt_TST_STR_FEEDBACK[FeedbTyp]);
|
Txt_TST_STR_FEEDBACK[FeedbTyp]);
|
||||||
}
|
}
|
||||||
fprintf (Gbl.F.Out,"</td>"
|
fprintf (Gbl.F.Out,"</td>"
|
||||||
|
@ -1950,6 +1930,29 @@ static void Tst_ShowFormConfigTst (void)
|
||||||
/*************** Get configuration of test for current course ****************/
|
/*************** Get configuration of test for current course ****************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void Tst_PutInputFieldNumQst (const char *Field,const char *Label,
|
||||||
|
unsigned Value)
|
||||||
|
{
|
||||||
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
|
"<td class=\"RIGHT_MIDDLE\">"
|
||||||
|
"<label for=\"%s\" class=\"DAT\">%s</label>"
|
||||||
|
"</td>"
|
||||||
|
"<td class=\"LEFT_MIDDLE\">"
|
||||||
|
"<input type=\"text\""
|
||||||
|
" id=\"%s\" name=\"%s\""
|
||||||
|
" size=\"3\" maxlength=\"3\" value=\"%u\""
|
||||||
|
" required=\"required\" />"
|
||||||
|
"</td>"
|
||||||
|
"</tr>",
|
||||||
|
Field,Label,
|
||||||
|
Field,Field,
|
||||||
|
Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*************** Get configuration of test for current course ****************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Tst_GetConfigTstFromDB (void)
|
static void Tst_GetConfigTstFromDB (void)
|
||||||
{
|
{
|
||||||
char Query[512];
|
char Query[512];
|
||||||
|
@ -3394,20 +3397,29 @@ static void Tst_WriteChoiceAnsViewTest (unsigned NumQst,long QstCod,bool Shuffle
|
||||||
Par_PutHiddenParamUnsigned (ParamName,Index);
|
Par_PutHiddenParamUnsigned (ParamName,Index);
|
||||||
fprintf (Gbl.F.Out,"<input type=\"");
|
fprintf (Gbl.F.Out,"<input type=\"");
|
||||||
if (Gbl.Test.AnswerType == Tst_ANS_UNIQUE_CHOICE)
|
if (Gbl.Test.AnswerType == Tst_ANS_UNIQUE_CHOICE)
|
||||||
fprintf (Gbl.F.Out,"radio\" onclick=\"selectUnselectRadio(this,this.form.Ans%06u,%u);\"",
|
fprintf (Gbl.F.Out,"radio\""
|
||||||
|
" onclick=\"selectUnselectRadio(this,this.form.Ans%06u,%u);\"",
|
||||||
NumQst,Gbl.Test.Answer.NumOptions);
|
NumQst,Gbl.Test.Answer.NumOptions);
|
||||||
else // Gbl.Test.AnswerType == Tst_ANS_MULTIPLE_CHOICE
|
else // Gbl.Test.AnswerType == Tst_ANS_MULTIPLE_CHOICE
|
||||||
fprintf (Gbl.F.Out,"checkbox\"");
|
fprintf (Gbl.F.Out,"checkbox\"");
|
||||||
fprintf (Gbl.F.Out," name=\"Ans%06u\" value=\"%u\" /> </td>",
|
fprintf (Gbl.F.Out," id=\"Ans%06u_%u\" name=\"Ans%06u\" value=\"%u\" />"
|
||||||
NumQst,Index);
|
|
||||||
fprintf (Gbl.F.Out,"<td class=\"TEST LEFT_TOP\">"
|
|
||||||
"%c) "
|
|
||||||
"</td>",
|
"</td>",
|
||||||
'a' + (char) NumOpt);
|
NumQst,NumOpt,
|
||||||
|
NumQst,Index);
|
||||||
|
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">"
|
||||||
|
"<label for=\"Ans%06u_%u\" class=\"TEST\">"
|
||||||
|
"%c) "
|
||||||
|
"</label>"
|
||||||
|
"</td>",
|
||||||
|
NumQst,NumOpt,
|
||||||
|
'a' + (char) NumOpt);
|
||||||
|
|
||||||
/***** Write the option text *****/
|
/***** Write the option text *****/
|
||||||
fprintf (Gbl.F.Out,"<td class=\"TEST_EXA LEFT_TOP\">"
|
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">"
|
||||||
"%s",
|
"<label for=\"Ans%06u_%u\" class=\"TEST_EXA\">"
|
||||||
|
"%s"
|
||||||
|
"</label>",
|
||||||
|
NumQst,NumOpt,
|
||||||
Gbl.Test.Answer.Options[NumOpt].Text);
|
Gbl.Test.Answer.Options[NumOpt].Text);
|
||||||
Img_ShowImage (&Gbl.Test.Answer.Options[NumOpt].Image,
|
Img_ShowImage (&Gbl.Test.Answer.Options[NumOpt].Image,
|
||||||
"TEST_IMG_SHOW_ANS_CONTAINER",
|
"TEST_IMG_SHOW_ANS_CONTAINER",
|
||||||
|
@ -4618,14 +4630,13 @@ static void Tst_PutFormEditOneQst (char *Stem,char *Feedback)
|
||||||
/***** Answers *****/
|
/***** Answers *****/
|
||||||
/* Integer answer */
|
/* Integer answer */
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
"<td class=\"RIGHT_TOP\">"
|
"<td class=\"RIGHT_TOP %s\">"
|
||||||
"<label for=\"AnsInt\" class=\"%s\">"
|
|
||||||
"%s:"
|
"%s:"
|
||||||
"</label>"
|
|
||||||
"</td>"
|
"</td>"
|
||||||
"<td class=\"%s LEFT_TOP\">"
|
"<td class=\"LEFT_TOP\">"
|
||||||
"%s: "
|
"<label class=\"%s\">"
|
||||||
"<input type=\"text\" id=\"AnsInt\" name=\"AnsInt\""
|
"%s: "
|
||||||
|
"<input type=\"text\" name=\"AnsInt\""
|
||||||
" size=\"11\" maxlength=\"11\" value=\"%ld\"",
|
" size=\"11\" maxlength=\"11\" value=\"%ld\"",
|
||||||
The_ClassForm[Gbl.Prefs.Theme],Txt_Answers,
|
The_ClassForm[Gbl.Prefs.Theme],Txt_Answers,
|
||||||
The_ClassForm[Gbl.Prefs.Theme],Txt_Integer_number,
|
The_ClassForm[Gbl.Prefs.Theme],Txt_Integer_number,
|
||||||
|
@ -4633,30 +4644,19 @@ static void Tst_PutFormEditOneQst (char *Stem,char *Feedback)
|
||||||
if (Gbl.Test.AnswerType != Tst_ANS_INT)
|
if (Gbl.Test.AnswerType != Tst_ANS_INT)
|
||||||
fprintf (Gbl.F.Out," disabled=\"disabled\"");
|
fprintf (Gbl.F.Out," disabled=\"disabled\"");
|
||||||
fprintf (Gbl.F.Out," required=\"required\" />"
|
fprintf (Gbl.F.Out," required=\"required\" />"
|
||||||
|
"</label>"
|
||||||
"</td>"
|
"</td>"
|
||||||
"</tr>");
|
"</tr>");
|
||||||
|
|
||||||
/* Floating point answer */
|
/* Floating point answer */
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
"<td></td>"
|
"<td></td>"
|
||||||
"<td class=\"%s LEFT_TOP\">"
|
"<td class=\"LEFT_TOP\">");
|
||||||
"%s "
|
Tst_PutFloatInputField (Txt_Real_number_between_A_and_B_1,"AnsFloatMin",
|
||||||
"<input type=\"text\" name=\"AnsFloatMin\""
|
Gbl.Test.Answer.FloatingPoint[0]);
|
||||||
" size=\"11\" maxlength=\"%u\" value=\"%lg\"",
|
Tst_PutFloatInputField (Txt_Real_number_between_A_and_B_2,"AnsFloatMax",
|
||||||
The_ClassForm[Gbl.Prefs.Theme],Txt_Real_number_between_A_and_B_1,
|
Gbl.Test.Answer.FloatingPoint[1]);
|
||||||
Tst_MAX_BYTES_FLOAT_ANSWER,Gbl.Test.Answer.FloatingPoint[0]);
|
fprintf (Gbl.F.Out,"</td>"
|
||||||
if (Gbl.Test.AnswerType != Tst_ANS_FLOAT)
|
|
||||||
fprintf (Gbl.F.Out," disabled=\"disabled\"");
|
|
||||||
fprintf (Gbl.F.Out," required=\"required\" />"
|
|
||||||
" %s "
|
|
||||||
"<input type=\"text\" name=\"AnsFloatMax\""
|
|
||||||
" size=\"11\" maxlength=\"%u\" value=\"%lg\"",
|
|
||||||
Txt_Real_number_between_A_and_B_2,
|
|
||||||
Tst_MAX_BYTES_FLOAT_ANSWER,Gbl.Test.Answer.FloatingPoint[1]);
|
|
||||||
if (Gbl.Test.AnswerType != Tst_ANS_FLOAT)
|
|
||||||
fprintf (Gbl.F.Out," disabled=\"disabled\"");
|
|
||||||
fprintf (Gbl.F.Out," required=\"required\" />"
|
|
||||||
"</td>"
|
|
||||||
"</tr>");
|
"</tr>");
|
||||||
|
|
||||||
/* T/F answer */
|
/* T/F answer */
|
||||||
|
@ -4851,6 +4851,29 @@ static void Tst_PutFormEditOneQst (char *Stem,char *Feedback)
|
||||||
Lay_EndRoundFrame ();
|
Lay_EndRoundFrame ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********************* Put input field for floating answer *******************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void Tst_PutFloatInputField (const char *Label,const char *Field,
|
||||||
|
double Value)
|
||||||
|
{
|
||||||
|
extern const char *The_ClassForm[The_NUM_THEMES];
|
||||||
|
|
||||||
|
fprintf (Gbl.F.Out,"<label class=\"%s\">%s "
|
||||||
|
"<input type=\"text\" name=\"%s\""
|
||||||
|
" size=\"11\" maxlength=\"%u\""
|
||||||
|
" value=\"%lg\"",
|
||||||
|
The_ClassForm[Gbl.Prefs.Theme],Label,
|
||||||
|
Field,
|
||||||
|
Tst_MAX_BYTES_FLOAT_ANSWER,
|
||||||
|
Value);
|
||||||
|
if (Gbl.Test.AnswerType != Tst_ANS_FLOAT)
|
||||||
|
fprintf (Gbl.F.Out," disabled=\"disabled\"");
|
||||||
|
fprintf (Gbl.F.Out," required=\"required\" />"
|
||||||
|
"</label>");
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/********************* Initialize a new question to zero *********************/
|
/********************* Initialize a new question to zero *********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
18
swad_text.c
18
swad_text.c
|
@ -29927,23 +29927,23 @@ const char *Txt_Real_number_between_A_and_B_1 =
|
||||||
|
|
||||||
const char *Txt_Real_number_between_A_and_B_2 =
|
const char *Txt_Real_number_between_A_and_B_2 =
|
||||||
#if L==1
|
#if L==1
|
||||||
"y"; // Necessita traduccio
|
" i";
|
||||||
#elif L==2
|
#elif L==2
|
||||||
"und";
|
" und";
|
||||||
#elif L==3
|
#elif L==3
|
||||||
"and";
|
" and";
|
||||||
#elif L==4
|
#elif L==4
|
||||||
"y";
|
" y";
|
||||||
#elif L==5
|
#elif L==5
|
||||||
"et";
|
" et";
|
||||||
#elif L==6
|
#elif L==6
|
||||||
"y"; // Okoteve traducción
|
" y"; // Okoteve traducción
|
||||||
#elif L==7
|
#elif L==7
|
||||||
"e";
|
" e";
|
||||||
#elif L==8
|
#elif L==8
|
||||||
"i";
|
" i";
|
||||||
#elif L==9
|
#elif L==9
|
||||||
"e";
|
" e";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char *Txt_Recommended_aspect_ratio =
|
const char *Txt_Recommended_aspect_ratio =
|
||||||
|
|
Loading…
Reference in New Issue
Block a user