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 (); + } } /*****************************************************************************/