diff --git a/swad_HTML.c b/swad_HTML.c
index a1b15c8d..20bbd974 100644
--- a/swad_HTML.c
+++ b/swad_HTML.c
@@ -1366,7 +1366,8 @@ void HTM_INPUT_LONG (const char *Name,long Min,long Max,long Value,
void HTM_INPUT_FLOAT (const char *Name,double Min,double Max,
double Step, // Use 0 for "any"
- double Value,bool Disabled,
+ double Value,
+ HTM_SubmitOnChange_t SubmitOnChange,bool Disabled,
const char *fmt,...)
{
va_list ap;
@@ -1404,6 +1405,9 @@ void HTM_INPUT_FLOAT (const char *Name,double Min,double Max,
}
}
+ if (SubmitOnChange == HTM_SUBMIT_ON_CHANGE)
+ HTM_Txt (" onchange=\"this.form.submit();return false;\"");
+
HTM_Txt (" />");
}
diff --git a/swad_HTML.h b/swad_HTML.h
index 1739d865..47dbfeb1 100644
--- a/swad_HTML.h
+++ b/swad_HTML.h
@@ -171,7 +171,10 @@ void HTM_INPUT_PASSWORD (const char *Name,const char *PlaceHolder,
void HTM_INPUT_LONG (const char *Name,long Min,long Max,long Value,
HTM_SubmitOnChange_t SubmitOnChange,bool Disabled,
const char *fmt,...);
-void HTM_INPUT_FLOAT (const char *Name,double Min,double Max,double Step,double Value,bool Disabled,
+void HTM_INPUT_FLOAT (const char *Name,double Min,double Max,
+ double Step, // Use 0 for "any"
+ double Value,
+ HTM_SubmitOnChange_t SubmitOnChange,bool Disabled,
const char *fmt,...);
void HTM_INPUT_RADIO (const char *Name,HTM_SubmitOnClick_t SubmitOnClick,
const char *fmt,...);
diff --git a/swad_center_config.c b/swad_center_config.c
index 15202e5a..7e617312 100644
--- a/swad_center_config.c
+++ b/swad_center_config.c
@@ -358,7 +358,8 @@ static void CtrCfg_Latitude (void)
-90.0, // South Pole
90.0, // North Pole
0.0, // step="any"
- Gbl.Hierarchy.Ctr.Coord.Latitude,false,
+ Gbl.Hierarchy.Ctr.Coord.Latitude,
+ HTM_SUBMIT_ON_CHANGE,false,
"class=\"INPUT_COORD INPUT_%s\""
" required=\"required\"",
The_GetSuffix ());
@@ -385,7 +386,8 @@ static void CtrCfg_Longitude (void)
-180.0, // West
180.0, // East
0.0, // step="any"
- Gbl.Hierarchy.Ctr.Coord.Longitude,false,
+ Gbl.Hierarchy.Ctr.Coord.Longitude,
+ HTM_SUBMIT_ON_CHANGE,false,
"class=\"INPUT_COORD INPUT_%s\""
" required=\"required\"",
The_GetSuffix ());
@@ -412,7 +414,8 @@ static void CtrCfg_Altitude (void)
-413.0, // Dead Sea shore
8848.0, // Mount Everest
0.0, // step="any"
- Gbl.Hierarchy.Ctr.Coord.Altitude,false,
+ Gbl.Hierarchy.Ctr.Coord.Altitude,
+ HTM_SUBMIT_ON_CHANGE,false,
"class=\"INPUT_COORD INPUT_%s\""
" required=\"required\"",
The_GetSuffix ());
diff --git a/swad_changelog.h b/swad_changelog.h
index 45791a8c..6be33fcc 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -629,10 +629,11 @@ TODO: Emilce Barrera Mesa: Podr
TODO: Emilce Barrera Mesa: Mis estudiantes presentan muchas dificultades a la hora de poner la foto porque la plataforma es muy exigente respecto al fondo de la imagen.
*/
-#define Log_PLATFORM_VERSION "SWAD 22.104.1 (2023-05-04)"
+#define Log_PLATFORM_VERSION "SWAD 22.104.2 (2023-05-04)"
#define CSS_FILE "swad22.103.css"
#define JS_FILE "swad22.49.js"
/*
+ Version 22.104.2: May 04, 2023 Rubrics in project. Changes in input numbers. (338022 lines)
Version 22.104.1: May 04, 2023 Rubrics in project. Code refactoring in file browsers. (338014 lines)
Version 22.104: May 03, 2023 Rubrics in project. Not finished. (338000 lines)
3 changes necessary in database:
diff --git a/swad_exam.c b/swad_exam.c
index 655802be..98187817 100644
--- a/swad_exam.c
+++ b/swad_exam.c
@@ -1372,7 +1372,8 @@ void Exa_PutFormEditionExam (struct Exa_Exams *Exams,
HTM_TD_End ();
HTM_TD_Begin ("class=\"LM\"");
- HTM_INPUT_FLOAT ("MaxGrade",0.0,DBL_MAX,0.01,Exams->Exam.MaxGrade,false,
+ HTM_INPUT_FLOAT ("MaxGrade",0.0,DBL_MAX,0.01,Exams->Exam.MaxGrade,
+ HTM_DONT_SUBMIT_ON_CHANGE,false,
" class=\"INPUT_%s\" required=\"required\"",
The_GetSuffix ());
HTM_TD_End ();
diff --git a/swad_game.c b/swad_game.c
index 4a12732b..ab83b818 100644
--- a/swad_game.c
+++ b/swad_game.c
@@ -1367,7 +1367,8 @@ static void Gam_PutFormsEditionGame (struct Gam_Games *Games,
HTM_TD_End ();
HTM_TD_Begin ("class=\"LM\"");
- HTM_INPUT_FLOAT ("MaxGrade",0.0,DBL_MAX,0.01,Games->Game.MaxGrade,false,
+ HTM_INPUT_FLOAT ("MaxGrade",0.0,DBL_MAX,0.01,Games->Game.MaxGrade,
+ HTM_DONT_SUBMIT_ON_CHANGE,false,
" class=\"INPUT_%s\" required=\"required\"",
The_GetSuffix ());
HTM_TD_End ();
diff --git a/swad_rubric.c b/swad_rubric.c
index 79983875..32453fb5 100644
--- a/swad_rubric.c
+++ b/swad_rubric.c
@@ -463,7 +463,7 @@ void Rub_ShowRubricInProject (struct Prj_Projects *Projects,
HTM_TR_Begin (NULL);
/***** Rubric title *****/
- HTM_TD_Begin ("class=\"LT ASG_TITLE_%s %s\"",
+ HTM_TD_Begin ("colspan=\"8\" class=\"LT ASG_TITLE_%s %s\"",
The_GetSuffix (),The_GetColorRows ());
HTM_TxtColonNBSP (WhichRubricTxt);
HTM_Txt (Rubric->Title);
@@ -476,7 +476,7 @@ void Rub_ShowRubricInProject (struct Prj_Projects *Projects,
HTM_TR_Begin (NULL);
/***** Text of the rubric *****/
- HTM_TD_Begin ("class=\"LT PAR DAT_%s %s\"",
+ HTM_TD_Begin ("colspan=\"8\" class=\"LT PAR DAT_%s %s\"",
The_GetSuffix (),The_GetColorRows ());
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
Rubric->Txt,Cns_MAX_BYTES_TEXT,false); // Convert from HTML to rigorous HTML
@@ -487,16 +487,8 @@ void Rub_ShowRubricInProject (struct Prj_Projects *Projects,
/***** End 2nd row of this rubric *****/
HTM_TR_End ();
- /***** Begin 4rd row of this rubric *****/
- HTM_TR_Begin (NULL);
-
- /***** Write criteria of this rubric *****/
- HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ());
- RubCri_ListCriteriaInProject (Projects,Rubric->RubCod,ICanFill);
- HTM_TD_End ();
-
- /***** End 3rd row of this rubric *****/
- HTM_TR_End ();
+ /***** Write criteria of this rubric *****/
+ RubCri_ListCriteriaInProject (Projects,Rubric->RubCod,ICanFill);
/***** Change color for next rubric *****/
The_ChangeRowColor ();
diff --git a/swad_rubric_criteria.c b/swad_rubric_criteria.c
index 55365db2..cdd1f0db 100644
--- a/swad_rubric_criteria.c
+++ b/swad_rubric_criteria.c
@@ -42,6 +42,7 @@
#include "swad_global.h"
#include "swad_parameter.h"
#include "swad_parameter_code.h"
+#include "swad_project.h"
#include "swad_project_database.h"
#include "swad_resource_database.h"
#include "swad_rubric.h"
@@ -218,7 +219,8 @@ static void RubCri_PutFormNewCriterion (struct Rub_Rubrics *Rubrics,
HTM_TD_Begin ("class=\"RT\"");
HTM_INPUT_FLOAT (RubCri_ParValues[ValueRange],
0.0,DBL_MAX,RubCri_SCORE_STEP,
- Rubrics->Criterion.Values[ValueRange],false,
+ Rubrics->Criterion.Values[ValueRange],
+ HTM_DONT_SUBMIT_ON_CHANGE,false,
" class=\"INPUT_FLOAT INPUT_%s\" required=\"required\"",
The_GetSuffix ());
HTM_TD_End ();
@@ -230,7 +232,8 @@ static void RubCri_PutFormNewCriterion (struct Rub_Rubrics *Rubrics,
RubCri_WEIGHT_MIN,
RubCri_WEIGHT_MAX,
RubCri_WEIGHT_STEP,
- Rubrics->Criterion.Weight,false,
+ Rubrics->Criterion.Weight,
+ HTM_DONT_SUBMIT_ON_CHANGE,false,
" class=\"INPUT_FLOAT INPUT_%s\" required=\"required\"",
The_GetSuffix ());
HTM_TD_End ();
@@ -777,7 +780,8 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
RubCri_PutParsOneCriterion (Rubrics);
HTM_INPUT_FLOAT (RubCri_ParValues[ValueRange],
0.0,DBL_MAX,RubCri_SCORE_STEP,
- Rubrics->Criterion.Values[ValueRange],false,
+ Rubrics->Criterion.Values[ValueRange],
+ HTM_SUBMIT_ON_CHANGE,false,
" class=\"INPUT_FLOAT INPUT_%s\""
" required=\"required\"",
The_GetSuffix ());
@@ -793,7 +797,8 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
RubCri_WEIGHT_MIN,
RubCri_WEIGHT_MAX,
RubCri_WEIGHT_STEP,
- Rubrics->Criterion.Weight,false,
+ Rubrics->Criterion.Weight,
+ HTM_SUBMIT_ON_CHANGE,false,
" class=\"INPUT_FLOAT INPUT_%s\""
" required=\"required\"",
The_GetSuffix ());
@@ -827,111 +832,106 @@ static void RubCri_ListOneOrMoreCriteriaInProject (struct Prj_Projects *Projects
char *Anchor;
double Score = 0.0;
- /***** Begin table *****/
- HTM_TABLE_BeginWideMarginPadding (5);
+ /***** Write the heading *****/
+ RubCri_PutTableHeadingForCriteria (RubCri_DONT_PUT_COLUMN_FOR_ICONS,
+ RubCri_PUT_COLUMNS_FOR_SCORE);
- /***** Write the heading *****/
- RubCri_PutTableHeadingForCriteria (RubCri_DONT_PUT_COLUMN_FOR_ICONS,
- RubCri_PUT_COLUMNS_FOR_SCORE);
+ /***** Write rows *****/
+ for (NumCriterion = 0, The_ResetRowColor ();
+ NumCriterion < NumCriteria;
+ NumCriterion++, The_ChangeRowColor ())
+ {
+ /***** Create criterion of questions *****/
+ RubCri_ResetCriterion (&Criterion);
- /***** Write rows *****/
- for (NumCriterion = 0, The_ResetRowColor ();
- NumCriterion < NumCriteria;
- NumCriterion++, The_ChangeRowColor ())
- {
- /***** Create criterion of questions *****/
- RubCri_ResetCriterion (&Criterion);
+ /***** Get criterion data *****/
+ RubCri_GetCriterionDataFromRow (mysql_res,&Criterion);
- /***** Get criterion data *****/
- RubCri_GetCriterionDataFromRow (mysql_res,&Criterion);
+ /***** Build anchor string *****/
+ Frm_SetAnchorStr (Criterion.CriCod,&Anchor);
- /***** Build anchor string *****/
- Frm_SetAnchorStr (Criterion.CriCod,&Anchor);
+ /***** Begin row *****/
+ HTM_TR_Begin (NULL);
- /***** Begin row *****/
- HTM_TR_Begin (NULL);
+ /***** Index *****/
+ HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ());
+ Lay_WriteIndex (Criterion.CriInd,"BIG_INDEX");
+ HTM_TD_End ();
- /***** Index *****/
- HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ());
- Lay_WriteIndex (Criterion.CriInd,"BIG_INDEX");
+ /***** Title *****/
+ HTM_TD_Begin ("class=\"LT DAT_%s %s\"",
+ The_GetSuffix (),
+ The_GetColorRows ());
+ HTM_ARTICLE_Begin (Anchor);
+ HTM_Txt (Criterion.Title);
+ HTM_ARTICLE_End ();
+ HTM_TD_End ();
+
+ /***** Link to resource *****/
+ HTM_TD_Begin ("class=\"LT DAT_%s %s\"",
+ The_GetSuffix (),
+ The_GetColorRows ());
+ Rsc_WriteLinkName (&Criterion.Link,Frm_DONT_PUT_FORM_TO_GO);
+ HTM_TD_End ();
+
+ /***** Minimum and maximum values of criterion *****/
+ for (ValueRange = (RubCri_ValueRange_t) 0;
+ ValueRange <= (RubCri_ValueRange_t) (RubCri_NUM_VALUES - 1);
+ ValueRange++)
+ {
+ HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
+ The_GetSuffix (),
+ The_GetColorRows ());
+ HTM_Double (Criterion.Values[ValueRange]);
HTM_TD_End ();
+ }
- /***** Title *****/
- HTM_TD_Begin ("class=\"LT DAT_%s %s\"",
- The_GetSuffix (),
- The_GetColorRows ());
- HTM_ARTICLE_Begin (Anchor);
- HTM_Txt (Criterion.Title);
- HTM_ARTICLE_End ();
- HTM_TD_End ();
+ /***** Criterion weight *****/
+ HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
+ The_GetSuffix (),
+ The_GetColorRows ());
+ HTM_Double (Criterion.Weight);
+ HTM_TD_End ();
- /***** Link to resource *****/
- HTM_TD_Begin ("class=\"LT DAT_%s %s\"",
- The_GetSuffix (),
- The_GetColorRows ());
- Rsc_WriteLinkName (&Criterion.Link,Frm_DONT_PUT_FORM_TO_GO);
- HTM_TD_End ();
+ /***** Criterion score *****/
+ HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
+ The_GetSuffix (),
+ The_GetColorRows ());
+ /* Get score from database */
+ Score = Prj_DB_GetScore (Projects->Prj.PrjCod,
+ Criterion.CriCod);
- /***** Minimum and maximum values of criterion *****/
- for (ValueRange = (RubCri_ValueRange_t) 0;
- ValueRange <= (RubCri_ValueRange_t) (RubCri_NUM_VALUES - 1);
- ValueRange++)
+ /* Show score */
+ if (ICanFill)
{
- HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
- The_GetSuffix (),
- The_GetColorRows ());
- HTM_Double (Criterion.Values[ValueRange]);
- HTM_TD_End ();
+ Frm_BeginFormAnchor (ActChgPrjSco,Anchor);
+ Prj_PutCurrentPars (Projects);
+ ParCod_PutPar (ParCod_Cri,Criterion.CriCod);
+ HTM_INPUT_FLOAT ("Score",
+ Criterion.Values[RubCri_MIN],
+ Criterion.Values[RubCri_MAX],
+ RubCri_SCORE_STEP,
+ Score,
+ HTM_SUBMIT_ON_CHANGE,false,
+ " class=\"INPUT_FLOAT INPUT_%s\""
+ " required=\"required\"",
+ The_GetSuffix ());
+ Frm_EndForm ();
}
+ else
+ HTM_Double (Score);
+ HTM_TD_End ();
- /***** Criterion weight *****/
- HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
- The_GetSuffix (),
- The_GetColorRows ());
- HTM_Double (Criterion.Weight);
- HTM_TD_End ();
+ /***** Criterion score x weight *****/
+ HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
+ The_GetSuffix (),
+ The_GetColorRows ());
+ HTM_Double (Criterion.Weight);
+ HTM_TD_End ();
- /***** Criterion score *****/
- HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
- The_GetSuffix (),
- The_GetColorRows ());
- /* Get score from database */
- Score = Prj_DB_GetScore (Projects->Prj.PrjCod,
- Criterion.CriCod);
-
- /* Show score */
- if (ICanFill)
- {
- Frm_BeginFormAnchor (ActChgPrjSco,Anchor);
- Prj_PutCurrentPars (Projects);
- ParCod_PutPar (ParCod_Cri,Criterion.CriCod);
- HTM_INPUT_FLOAT ("Score",
- Criterion.Values[RubCri_MIN],
- Criterion.Values[RubCri_MAX],
- RubCri_SCORE_STEP,
- Score,false,
- " class=\"INPUT_FLOAT INPUT_%s\""
- " required=\"required\"",
- The_GetSuffix ());
- Frm_EndForm ();
- }
- else
- HTM_Double (Score);
- HTM_TD_End ();
-
- /***** Criterion score x weight *****/
- HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
- The_GetSuffix (),
- The_GetColorRows ());
- HTM_Double (Criterion.Weight);
- HTM_TD_End ();
-
- /***** End row *****/
- HTM_TR_End ();
- }
-
- /***** End table *****/
- HTM_TABLE_End ();
+ /***** End row *****/
+ HTM_TR_End ();
+ }
}
/*****************************************************************************/