Version 23.53.6: Dec 19, 2023 Responsive design in questions.

This commit is contained in:
acanas 2023-12-20 00:03:58 +01:00
parent 812d6d22d1
commit 1df78e9f15
12 changed files with 200 additions and 197 deletions

View File

@ -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;
}
}

View File

@ -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 ();
}

View File

@ -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);

View File

@ -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);

View File

@ -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)

View File

@ -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 &prime;",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 &prime;",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 &Prime;",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 &Prime;",Second);
HTM_SELECT_End ();
}
/***** End table *****/
HTM_TR_End ();
HTM_TABLE_End ();
HTM_DIV_End ();
/***** Free strings for onchange functions *****/
free (FuncsYearMonth);

View File

@ -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
}

View File

@ -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);

View File

@ -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);

View File

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

View File

@ -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 ("&nbsp;%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 ("&nbsp;%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 ("&nbsp;%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 ("&nbsp;%s",row[1]);
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TR_End ();
}
HTM_TABLE_End ();
HTM_TD_End ();