From 1df78e9f1506e15a8e0f4f1700bd81cbf4b9fd82 Mon Sep 17 00:00:00 2001 From: acanas Date: Wed, 20 Dec 2023 00:03:58 +0100 Subject: [PATCH] Version 23.53.6: Dec 19, 2023 Responsive design in questions. --- css/{swad23.53.5.css => swad23.53.6.css} | 20 ++- js/{swad23.53.3.js => swad23.53.6.js} | 0 swad_HTML.c | 9 +- swad_HTML.h | 1 + swad_assignment.c | 2 +- swad_changelog.h | 7 +- swad_date.c | 214 +++++++++++------------ swad_layout.c | 12 +- swad_project.c | 2 +- swad_question.c | 8 +- swad_statistic.c | 2 +- swad_tag.c | 120 ++++++------- 12 files changed, 200 insertions(+), 197 deletions(-) rename css/{swad23.53.5.css => swad23.53.6.css} (99%) rename js/{swad23.53.3.js => swad23.53.6.js} (100%) diff --git a/css/swad23.53.5.css b/css/swad23.53.6.css similarity index 99% rename from css/swad23.53.5.css rename to css/swad23.53.6.css index 621682d68..93ce7d9fd 100644 --- a/css/swad23.53.5.css +++ b/css/swad23.53.6.css @@ -2674,9 +2674,13 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} } /****************************** Date range form ******************************/ -.DATE_RANGE +.DATE_FORM_YMD, .DATE_FORM_HMS, .DATE_FORM_TODAY { - float:left; /* To display something after the table in the same line */ + display: inline-block; + } +.DATE_FORM_MONTH + { + width: 60px; } /*********************************** Lists ***********************************/ @@ -3082,21 +3086,21 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} .REC_C1_BOT { box-sizing:border-box; - width:120px; - max-width:120px; + width:80px; + max-width:80px; overflow:hidden; } .REC_C2_BOT { box-sizing:border-box; - width:148px; - max-width:148px; + width:188px; + max-width:188px; overflow:hidden; } .REC_C2_BOT_INPUT { box-sizing:border-box; - width:144px; + width:184px; } } @media only screen and (min-width: 480px) and (max-width: 600px) @@ -5207,7 +5211,7 @@ button.PAG_DARK:hover, .PAG_CUR_DARK {background-color:#707070;} { display: block; overflow-x: auto; - width: 280px; + width: 260px; margin: 0 auto; } } diff --git a/js/swad23.53.3.js b/js/swad23.53.6.js similarity index 100% rename from js/swad23.53.3.js rename to js/swad23.53.6.js diff --git a/swad_HTML.c b/swad_HTML.c index 382ae78e1..3c1405008 100644 --- a/swad_HTML.c +++ b/swad_HTML.c @@ -1922,10 +1922,15 @@ void HTM_TxtF (const char *fmt,...) void HTM_SPTxt (const char *Txt) { - HTM_Txt (" "); + HTM_SP (); HTM_Txt (Txt); } +void HTM_SP (void) + { + HTM_Txt (" "); + } + void HTM_Txt (const char *Txt) { if (Txt) @@ -2068,7 +2073,7 @@ void HTM_TD_Txt_Right (const char *Txt) void HTM_TD_TxtColon (const char *Txt) { - HTM_TD_Begin ("class=\"RT FORM_IN_%s\"",The_GetSuffix ()); + HTM_TD_Begin ("class=\"REC_C1_BOT RT FORM_IN_%s\"",The_GetSuffix ()); HTM_TxtColon (Txt); HTM_TD_End (); } diff --git a/swad_HTML.h b/swad_HTML.h index ee119b31a..3257d8525 100644 --- a/swad_HTML.h +++ b/swad_HTML.h @@ -223,6 +223,7 @@ void HTM_BR (void); void HTM_TxtF (const char *fmt,...); void HTM_SPTxt (const char *Txt); +void HTM_SP (void); void HTM_Txt (const char *Txt); void HTM_TxtColon (const char *Txt); void HTM_TxtSemicolon (const char *Txt); diff --git a/swad_assignment.c b/swad_assignment.c index 4dfc5ccf8..939e27ca0 100644 --- a/swad_assignment.c +++ b/swad_assignment.c @@ -154,7 +154,7 @@ void Asg_ShowAllAssignments (struct Asg_Assignments *Assignments) Assignments->CurrentPage = (unsigned) Pagination.CurrentPage; /***** Begin box *****/ - Box_BoxBegin ("100%",Txt_Assignments, + Box_BoxBegin (NULL,Txt_Assignments, Asg_PutIconsListAssignments,Assignments, Hlp_ASSESSMENT_Assignments,Box_NOT_CLOSABLE); diff --git a/swad_changelog.h b/swad_changelog.h index 9d8cb717f..90af071f3 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -633,10 +633,11 @@ Me sale este error, no s "can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod') */ -#define Log_PLATFORM_VERSION "SWAD 23.53.5 (2023-12-19)" -#define CSS_FILE "swad23.53.5.css" -#define JS_FILE "swad23.53.3.js" +#define Log_PLATFORM_VERSION "SWAD 23.53.6 (2023-12-19)" +#define CSS_FILE "swad23.53.6.css" +#define JS_FILE "swad23.53.6.js" /* + Version 23.53.6: Dec 19, 2023 Responsive design in questions. (335874 lines) Version 23.53.5: Dec 19, 2023 Responsive design in calls for exams. (335874 lines) Version 23.53.4: Dec 18, 2023 Responsive design in projects. (335869 lines) Version 23.53.3: Dec 18, 2023 Responsive design in assignments. (335868 lines) diff --git a/swad_date.c b/swad_date.c index f8f1ae9f5..2a56bab05 100644 --- a/swad_date.c +++ b/swad_date.c @@ -622,10 +622,10 @@ void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (const Dat_SetHMS HTM_TR_Begin (NULL); /* Label */ - Frm_LabelColumn ("RM","",Txt_START_END_TIME[Dat_STR_TIME]); + Frm_LabelColumn ("REC_C1_BOT RT","",Txt_START_END_TIME[Dat_STR_TIME]); /* Data (date-time) */ - HTM_TD_Begin ("class=\"LM\""); + HTM_TD_Begin ("class=\"REC_C2_BOT LT\""); Dat_WriteFormClientLocalDateTimeFromTimeUTC ("Start", Dat_STR_TIME, Dat_Time.Range.TimeUTC[Dat_STR_TIME], @@ -636,11 +636,13 @@ void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (const Dat_SetHMS HTM_DONT_SUBMIT_ON_CHANGE); /* "Yesterday" and "Today" buttons */ - HTM_NBSP (); - HTM_INPUT_BUTTON ("Yesterday",Txt_Yesterday, - "onclick=\"setDateToYesterday('Start','End');\""); - HTM_INPUT_BUTTON ("Today",Txt_Today, - "onclick=\"setDateToToday('Start','End');\""); + HTM_DIV_Begin ("class=\"DATE_FORM_TODAY\""); + // HTM_SP (); + HTM_INPUT_BUTTON ("Yesterday",Txt_Yesterday, + "onclick=\"setDateToYesterday('Start','End');\""); + HTM_INPUT_BUTTON ("Today",Txt_Today, + "onclick=\"setDateToToday('Start','End');\""); + HTM_DIV_End (); HTM_TD_End (); HTM_TR_End (); @@ -649,10 +651,10 @@ void Dat_PutFormStartEndClientLocalDateTimesWithYesterdayToday (const Dat_SetHMS HTM_TR_Begin (NULL); /* Label */ - Frm_LabelColumn ("RM","",Txt_START_END_TIME[Dat_END_TIME]); + Frm_LabelColumn ("REC_C1_BOT RT","",Txt_START_END_TIME[Dat_END_TIME]); /* Data (date-time) */ - HTM_TD_Begin ("class=\"LM\""); + HTM_TD_Begin ("class=\"REC_C2_BOT LT\""); Dat_WriteFormClientLocalDateTimeFromTimeUTC ("End", Dat_END_TIME, Dat_Time.Range.TimeUTC[Dat_END_TIME], @@ -752,118 +754,108 @@ void Dat_WriteFormClientLocalDateTimeFromTimeUTC (const char *Id, Id) < 0) Err_NotEnoughMemoryExit (); - /***** Begin table *****/ - HTM_TABLE_Begin ("DATE_RANGE"); - HTM_TR_Begin (NULL); + /***** Year, month, day *****/ + HTM_DIV_Begin ("class=\"DATE_FORM_YMD\""); - /***** Year *****/ - HTM_TD_Begin ("class=\"RM\""); - HTM_SELECT_Begin (SubmitOnChange,FuncsYearMonth, - "id=\"%sYear\" name=\"%sYear\"" - " class=\"INPUT_%s\"", - Id,Dat_ParName[StartEndTime], - The_GetSuffix ()); - for (Year = FirstYear; - Year <= LastYear; - Year++) - HTM_OPTION (HTM_Type_UNSIGNED,&Year, - HTM_OPTION_UNSELECTED, - HTM_OPTION_ENABLED, - "%u",Year); - HTM_SELECT_End (); - HTM_TD_End (); + /* Year */ + HTM_SELECT_Begin (SubmitOnChange,FuncsYearMonth, + "id=\"%sYear\" name=\"%sYear\"" + " class=\"INPUT_%s\"", + Id,Dat_ParName[StartEndTime], + The_GetSuffix ()); + for (Year = FirstYear; + Year <= LastYear; + Year++) + HTM_OPTION (HTM_Type_UNSIGNED,&Year, + HTM_OPTION_UNSELECTED, + HTM_OPTION_ENABLED, + "%u",Year); + HTM_SELECT_End (); - /***** Month *****/ - HTM_TD_Begin ("class=\"CM\""); - HTM_SELECT_Begin (SubmitOnChange,FuncsYearMonth, - "id=\"%sMonth\" name=\"%sMonth\"" - " class=\"INPUT_%s\"", - Id,Dat_ParName[StartEndTime], - The_GetSuffix ()); - for (Month = 1; - Month <= 12; - Month++) - HTM_OPTION (HTM_Type_UNSIGNED,&Month, - HTM_OPTION_UNSELECTED, - HTM_OPTION_ENABLED, - "%s",Txt_MONTHS_SMALL[Month - 1]); - HTM_SELECT_End (); - HTM_TD_End (); + /* Month */ + HTM_SELECT_Begin (SubmitOnChange,FuncsYearMonth, + "id=\"%sMonth\" name=\"%sMonth\"" + " class=\"DATE_FORM_MONTH INPUT_%s\"", + Id,Dat_ParName[StartEndTime], + The_GetSuffix ()); + for (Month = 1; + Month <= 12; + Month++) + HTM_OPTION (HTM_Type_UNSIGNED,&Month, + HTM_OPTION_UNSELECTED, + HTM_OPTION_ENABLED, + "%s",Txt_MONTHS_SMALL[Month - 1]); + HTM_SELECT_End (); - /***** Day *****/ - HTM_TD_Begin ("class=\"LM\""); - HTM_SELECT_Begin (SubmitOnChange,FuncDayHMS, - "id=\"%sDay\" name=\"%sDay\"" - " class=\"INPUT_%s\"", - Id,Dat_ParName[StartEndTime], - The_GetSuffix ()); - for (Day = 1; - Day <= 31; - Day++) - HTM_OPTION (HTM_Type_UNSIGNED,&Day, - HTM_OPTION_UNSELECTED, - HTM_OPTION_ENABLED, - "%u",Day); - HTM_SELECT_End (); - HTM_TD_End (); + /* Day */ + HTM_SELECT_Begin (SubmitOnChange,FuncDayHMS, + "id=\"%sDay\" name=\"%sDay\"" + " class=\"INPUT_%s\"", + Id,Dat_ParName[StartEndTime], + The_GetSuffix ()); + for (Day = 1; + Day <= 31; + Day++) + HTM_OPTION (HTM_Type_UNSIGNED,&Day, + HTM_OPTION_UNSELECTED, + HTM_OPTION_ENABLED, + "%u",Day); + HTM_SELECT_End (); - /***** Hour *****/ - HTM_TD_Begin ("class=\"RM\""); - HTM_SELECT_Begin (SubmitOnChange,FuncDayHMS, - "id=\"%sHour\" name=\"%sHour\"" - " class=\"INPUT_%s\"", - Id,Dat_ParName[StartEndTime], - The_GetSuffix ()); - for (Hour = 0; - Hour <= 23; - Hour++) - HTM_OPTION (HTM_Type_UNSIGNED,&Hour, - HTM_OPTION_UNSELECTED, - HTM_OPTION_ENABLED, - "%02u h",Hour); - HTM_SELECT_End (); - HTM_TD_End (); + HTM_DIV_End (); - /***** Minute *****/ - HTM_TD_Begin ("class=\"CM\""); - HTM_SELECT_Begin (SubmitOnChange,FuncDayHMS, - "id=\"%sMinute\" name=\"%sMinute\"" - " class=\"INPUT_%s\"", - Id,Dat_ParName[StartEndTime], - The_GetSuffix ()); - for (Minute = 0; - Minute < 60; - Minute += MinutesIInterval[FormSeconds]) - HTM_OPTION (HTM_Type_UNSIGNED,&Minute, - HTM_OPTION_UNSELECTED, - HTM_OPTION_ENABLED, - "%02u ′",Minute); - HTM_SELECT_End (); - HTM_TD_End (); + /***** Hour, minute, second *****/ + HTM_DIV_Begin ("class=\"DATE_FORM_HMS\""); - /***** Second *****/ + /* Hour */ + HTM_SELECT_Begin (SubmitOnChange,FuncDayHMS, + "id=\"%sHour\" name=\"%sHour\"" + " class=\"INPUT_%s\"", + Id,Dat_ParName[StartEndTime], + The_GetSuffix ()); + for (Hour = 0; + Hour <= 23; + Hour++) + HTM_OPTION (HTM_Type_UNSIGNED,&Hour, + HTM_OPTION_UNSELECTED, + HTM_OPTION_ENABLED, + "%02u h",Hour); + HTM_SELECT_End (); + + /* Minute */ + HTM_SELECT_Begin (SubmitOnChange,FuncDayHMS, + "id=\"%sMinute\" name=\"%sMinute\"" + " class=\"INPUT_%s\"", + Id,Dat_ParName[StartEndTime], + The_GetSuffix ()); + for (Minute = 0; + Minute < 60; + Minute += MinutesIInterval[FormSeconds]) + HTM_OPTION (HTM_Type_UNSIGNED,&Minute, + HTM_OPTION_UNSELECTED, + HTM_OPTION_ENABLED, + "%02u ′",Minute); + HTM_SELECT_End (); + + /* Second */ if (FormSeconds == Dat_FORM_SECONDS_ON) { - HTM_TD_Begin ("class=\"LM\""); - HTM_SELECT_Begin (SubmitOnChange,FuncDayHMS, - "id=\"%sSecond\" name=\"%sSecond\"" - " class=\"INPUT_%s\"", - Id,Dat_ParName[StartEndTime], - The_GetSuffix ()); - for (Second = 0; - Second <= 59; - Second++) - HTM_OPTION (HTM_Type_UNSIGNED,&Second, - HTM_OPTION_UNSELECTED, - HTM_OPTION_ENABLED, - "%02u ″",Second); - HTM_SELECT_End (); - HTM_TD_End (); + HTM_SELECT_Begin (SubmitOnChange,FuncDayHMS, + "id=\"%sSecond\" name=\"%sSecond\"" + " class=\"INPUT_%s\"", + Id,Dat_ParName[StartEndTime], + The_GetSuffix ()); + for (Second = 0; + Second <= 59; + Second++) + HTM_OPTION (HTM_Type_UNSIGNED,&Second, + HTM_OPTION_UNSELECTED, + HTM_OPTION_ENABLED, + "%02u ″",Second); + HTM_SELECT_End (); } - /***** End table *****/ - HTM_TR_End (); - HTM_TABLE_End (); + HTM_DIV_End (); /***** Free strings for onchange functions *****/ free (FuncsYearMonth); diff --git a/swad_layout.c b/swad_layout.c index dd0ff6d5f..713ea88ef 100644 --- a/swad_layout.c +++ b/swad_layout.c @@ -1234,8 +1234,8 @@ void Lay_PutContextualLinkIconText (Act_Action_t NextAction,const char *Anchor, const char *Text,const char *OnSubmit) { /***** Separator *****/ - HTM_Txt (" "); // This space is necessary to enable - // jumping to the next line on narrow screens + HTM_SP (); // This space is necessary to enable + // jumping to the next line on narrow screens /***** Begin form *****/ Frm_BeginFormAnchor (NextAction,Anchor); @@ -1258,8 +1258,8 @@ void Lay_PutContextualLinkIconText (Act_Action_t NextAction,const char *Anchor, Frm_EndForm (); /***** Separator *****/ - HTM_Txt (" "); // This space is necessary to enable - // jumping to the next line on narrow screens + HTM_SP (); // This space is necessary to enable + // jumping to the next line on narrow screens } /*****************************************************************************/ @@ -1274,7 +1274,7 @@ void Lay_PutContextualCheckbox (Act_Action_t NextAction, { /***** Separator *****/ if (Text) - HTM_Txt (" "); // This space is necessary to enable + HTM_SP (); // This space is necessary to enable // jumping to the next line on narrow screens /***** Begin form *****/ @@ -1316,7 +1316,7 @@ void Lay_PutContextualCheckbox (Act_Action_t NextAction, /***** Separator *****/ if (Text) - HTM_Txt (" "); // This space is necessary to enable + HTM_SP (); // This space is necessary to enable // jumping to the next line on narrow screens } diff --git a/swad_project.c b/swad_project.c index 24a6b53e7..a113e21a8 100644 --- a/swad_project.c +++ b/swad_project.c @@ -528,7 +528,7 @@ static void Prj_ShowPrjsInCurrentPage (void *Projects) ((struct Prj_Projects *) Projects)->CurrentPage = (unsigned) Pagination.CurrentPage; /***** Begin box *****/ - Box_BoxBegin ("100%",Txt_Projects, + Box_BoxBegin (NULL,Txt_Projects, Prj_PutIconsListProjects,Projects, Hlp_ASSESSMENT_Projects,Box_NOT_CLOSABLE); diff --git a/swad_question.c b/swad_question.c index 36691a379..edee9d26b 100644 --- a/swad_question.c +++ b/swad_question.c @@ -198,11 +198,11 @@ void Qst_ShowFormRequestEditQsts (struct Qst_Questions *Questions) /***** Warning message *****/ Ale_ShowAlert (Ale_INFO,Txt_No_questions); + /***** Free structure that stores the query result *****/ + DB_FreeMySQLResult (&mysql_res); + /***** End box *****/ Box_BoxEnd (); - - /* Free structure that stores the query result */ - DB_FreeMySQLResult (&mysql_res); } /*****************************************************************************/ @@ -225,7 +225,7 @@ void Qst_ShowFormAnswerTypes (const struct Qst_AnswerTypes *AnswerTypes) HTM_TD_TxtColon (Txt_Types_of_answers); /***** Select all types of answers *****/ - HTM_TD_Begin ("class=\"LT\""); + HTM_TD_Begin ("class=\"REC_C2_BOT LT\""); HTM_TABLE_BeginPadding (2); HTM_TR_Begin (NULL); diff --git a/swad_statistic.c b/swad_statistic.c index 9759addc5..429257abe 100644 --- a/swad_statistic.c +++ b/swad_statistic.c @@ -387,7 +387,7 @@ static void Sta_PutFormCrsHits (struct Sta_Stats *Stats) HTM_LABEL_End (); /* Separator */ - HTM_Txt (" "); + HTM_SP (); /* Number of rows per page */ // To use getElementById in Firefox, it's necessary to have the id attribute diff --git a/swad_tag.c b/swad_tag.c index 088421e67..942def436 100644 --- a/swad_tag.c +++ b/swad_tag.c @@ -297,76 +297,76 @@ void Tag_ShowFormSelTags (const struct Tag_Tags *Tags, HTM_TD_TxtColon (Txt_Tags); /***** Select all tags *****/ - HTM_TD_Begin ("class=\"LT\""); + HTM_TD_Begin ("class=\"REC_C2_BOT LT\""); - HTM_TABLE_BeginPadding (2); + HTM_TABLE_BeginPadding (2); - HTM_TR_Begin (NULL); - - if (!ShowOnlyEnabledTags) - HTM_TD_Empty (1); - - HTM_TD_Begin ("class=\"LM\""); - HTM_LABEL_Begin ("class=\"FORM_IN_%s\"", - The_GetSuffix ()); - HTM_INPUT_CHECKBOX ("AllTags",HTM_DONT_SUBMIT_ON_CHANGE, - "value=\"Y\"%s onclick=\"togglecheckChildren(this,'ChkTag');\"", - Tags->All ? " checked=\"checked\"" : - ""); - HTM_TxtF (" %s",Txt_All_tags); - HTM_LABEL_End (); - HTM_TD_End (); - - HTM_TR_End (); - - /***** Select tags one by one *****/ - for (NumTag = 1; - NumTag <= Tags->Num; - NumTag++) - { - row = mysql_fetch_row (mysql_res); HTM_TR_Begin (NULL); if (!ShowOnlyEnabledTags) - { - TagHidden = (row[2][0] == 'Y'); - HTM_TD_Begin ("class=\"LM\""); - if (TagHidden) - Ico_PutIconOff ("eye-slash.svg",Ico_RED ,Txt_Tag_not_allowed); - else - Ico_PutIconOff ("eye.svg" ,Ico_GREEN,Txt_Tag_allowed ); - HTM_TD_End (); - } + HTM_TD_Empty (1); - Checked = false; - if (Tags->List) - { - Ptr = Tags->List; - while (*Ptr) - { - Par_GetNextStrUntilSeparParMult (&Ptr,TagText,Tag_MAX_BYTES_TAG); - if (!strcmp (row[1],TagText)) - { - Checked = true; - break; - } - } - } - - HTM_TD_Begin ("class=\"LM\""); - HTM_LABEL_Begin ("class=\"DAT_%s\"", - The_GetSuffix ()); - HTM_INPUT_CHECKBOX ("ChkTag",HTM_DONT_SUBMIT_ON_CHANGE, - "value=\"%s\"%s onclick=\"checkParent(this,'AllTags');\"", - row[1], - Checked ? " checked=\"checked\"" : - ""); - HTM_TxtF (" %s",row[1]); + HTM_TD_Begin ("class=\"LT\""); + HTM_LABEL_Begin ("class=\"FORM_IN_%s\"", + The_GetSuffix ()); + HTM_INPUT_CHECKBOX ("AllTags",HTM_DONT_SUBMIT_ON_CHANGE, + "value=\"Y\"%s onclick=\"togglecheckChildren(this,'ChkTag');\"", + Tags->All ? " checked=\"checked\"" : + ""); + HTM_TxtF (" %s",Txt_All_tags); HTM_LABEL_End (); HTM_TD_End (); HTM_TR_End (); - } + + /***** Select tags one by one *****/ + for (NumTag = 1; + NumTag <= Tags->Num; + NumTag++) + { + row = mysql_fetch_row (mysql_res); + HTM_TR_Begin (NULL); + + if (!ShowOnlyEnabledTags) + { + TagHidden = (row[2][0] == 'Y'); + HTM_TD_Begin ("class=\"LT\""); + if (TagHidden) + Ico_PutIconOff ("eye-slash.svg",Ico_RED ,Txt_Tag_not_allowed); + else + Ico_PutIconOff ("eye.svg" ,Ico_GREEN,Txt_Tag_allowed ); + HTM_TD_End (); + } + + Checked = false; + if (Tags->List) + { + Ptr = Tags->List; + while (*Ptr) + { + Par_GetNextStrUntilSeparParMult (&Ptr,TagText,Tag_MAX_BYTES_TAG); + if (!strcmp (row[1],TagText)) + { + Checked = true; + break; + } + } + } + + HTM_TD_Begin ("class=\"LT\""); + HTM_LABEL_Begin ("class=\"DAT_%s\"", + The_GetSuffix ()); + HTM_INPUT_CHECKBOX ("ChkTag",HTM_DONT_SUBMIT_ON_CHANGE, + "value=\"%s\"%s onclick=\"checkParent(this,'AllTags');\"", + row[1], + Checked ? " checked=\"checked\"" : + ""); + HTM_TxtF (" %s",row[1]); + HTM_LABEL_End (); + HTM_TD_End (); + + HTM_TR_End (); + } HTM_TABLE_End (); HTM_TD_End ();