diff --git a/swad_HTML.c b/swad_HTML.c
index 1908aa2e..8e6c3067 100644
--- a/swad_HTML.c
+++ b/swad_HTML.c
@@ -1957,6 +1957,12 @@ void HTM_TxtColonNBSP (const char *Txt)
HTM_NBSP ();
}
+void HTM_NBSPTxt (const char *Txt)
+ {
+ HTM_NBSP ();
+ HTM_Txt (Txt);
+ }
+
void HTM_NBSP (void)
{
HTM_Txt (" ");
diff --git a/swad_HTML.h b/swad_HTML.h
index 3257d852..1a8d5539 100644
--- a/swad_HTML.h
+++ b/swad_HTML.h
@@ -228,6 +228,7 @@ void HTM_Txt (const char *Txt);
void HTM_TxtColon (const char *Txt);
void HTM_TxtSemicolon (const char *Txt);
void HTM_TxtColonNBSP (const char *Txt);
+void HTM_NBSPTxt (const char *Txt);
void HTM_NBSP (void);
void HTM_Colon (void);
void HTM_Semicolon (void);
diff --git a/swad_MFU.c b/swad_MFU.c
index 33de2e7f..ff59c8c4 100644
--- a/swad_MFU.c
+++ b/swad_MFU.c
@@ -326,7 +326,7 @@ static void MFU_PutIconAndText (Act_Action_t Action,
"class=\"ICO_%s_%s\"",
Ico_GetPreffix (Color[Gbl.Prefs.IconSet]),
The_GetSuffix ());
- HTM_TxtF (" %s",MenuStr);
+ HTM_NBSPTxt (MenuStr);
}
/*****************************************************************************/
diff --git a/swad_account.c b/swad_account.c
index 24bd4b68..1f593a36 100644
--- a/swad_account.c
+++ b/swad_account.c
@@ -299,7 +299,8 @@ static void Acc_WriteRowEmptyAccount (unsigned NumUsr,const char *ID,struct Usr_
HTM_TD_Begin ("class=\"LT DAT_STRONG_%s %s\"",
The_GetSuffix (),
The_GetColorRows ());
- HTM_TxtF ("%s: %s",Txt_ID,ID);
+ HTM_TxtColon (Txt_ID);
+ HTM_NBSPTxt (ID);
HTM_BR ();
HTM_TxtColonNBSP (Txt_Name);
if (UsrDat->FullName[0])
diff --git a/swad_action_list.c b/swad_action_list.c
index d1c6aa37..6bc0f4b4 100644
--- a/swad_action_list.c
+++ b/swad_action_list.c
@@ -1812,7 +1812,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
// TabPrf ******************************************************************
// Actions in menu:
[ActFrmRolSes ] = { 843, 0,TabPrf,ActFrmRolSes ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Usr_WriteFormLogout ,"power-off" },
- [ActMyCrs ] = { 987, 1,TabPrf,ActMyCrs ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Crs_ReqSelectOneOfMyCourses ,"sitemap" },
+ [ActMyCrs ] = { 987, 1,TabPrf,ActMyCrs ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Hie_ReqSelectOneNodeFromMyHierarchy ,"sitemap" },
[ActSeeMyTT ] = { 408, 2,TabPrf,ActSeeMyTT ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tmt_ShowClassTimeTable ,"clock" },
[ActSeeMyAgd ] = {1602, 3,TabPrf,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Agd_GetParsAndShowMyAgenda ,"calendar" },
[ActFrmMyAcc ] = { 36, 4,TabPrf,ActFrmMyAcc ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Acc_ShowFormMyAccount ,"at" },
diff --git a/swad_assignment.c b/swad_assignment.c
index 44c0c18d..7b1c29be 100644
--- a/swad_assignment.c
+++ b/swad_assignment.c
@@ -1333,7 +1333,8 @@ static void Asg_ShowLstGrpsToEditAssignment (long AsgCod)
"AsgCod",
AsgCod) ? "" :
" checked=\"checked\"");
- HTM_TxtF ("%s %s",Txt_The_whole_course,
+ HTM_TxtF ("%s %s",
+ Txt_The_whole_course,
Gbl.Hierarchy.Node[Hie_CRS].ShrtName);
HTM_LABEL_End ();
HTM_TD_End ();
@@ -1598,7 +1599,7 @@ static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Asg_Assignment *As
row = mysql_fetch_row (mysql_res);
/* Write group type name and group name */
- HTM_TxtF ("%s %s",row[0],row[1]);
+ HTM_TxtF ("%s %s",row[0],row[1]);
if (NumGrps >= 2)
{
@@ -1610,8 +1611,8 @@ static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Asg_Assignment *As
}
}
else
- HTM_TxtF ("%s %s",Txt_The_whole_course,
- Gbl.Hierarchy.Node[Hie_CRS].ShrtName);
+ HTM_TxtF ("%s %s",
+ Txt_The_whole_course,Gbl.Hierarchy.Node[Hie_CRS].ShrtName);
HTM_DIV_End ();
diff --git a/swad_attendance.c b/swad_attendance.c
index c9a152b8..a3614825 100644
--- a/swad_attendance.c
+++ b/swad_attendance.c
@@ -1108,7 +1108,8 @@ static void Att_ShowLstGrpsToEditEvent (long AttCod)
"AttCod",
AttCod) ? "" :
" checked=\"checked\"");
- HTM_TxtF ("%s %s",Txt_The_whole_course,
+ HTM_TxtF ("%s %s",
+ Txt_The_whole_course,
Gbl.Hierarchy.Node[Hie_CRS].ShrtName);
HTM_LABEL_End ();
HTM_TD_End ();
@@ -1314,7 +1315,7 @@ static void Att_GetAndWriteNamesOfGrpsAssociatedToEvent (struct Att_Event *Event
row = mysql_fetch_row (mysql_res);
/* Write group type name (row[0]) and group name (row[1]) */
- HTM_TxtF ("%s %s",row[0],row[1]);
+ HTM_TxtF ("%s %s",row[0],row[1]);
/* Write the name of the room (row[2]) */
if (row[2]) // May be NULL because of LEFT JOIN
@@ -1333,8 +1334,8 @@ static void Att_GetAndWriteNamesOfGrpsAssociatedToEvent (struct Att_Event *Event
}
}
else
- HTM_TxtF ("%s %s",Txt_The_whole_course,
- Gbl.Hierarchy.Node[Hie_CRS].ShrtName);
+ HTM_TxtF ("% %s",
+ Txt_The_whole_course,Gbl.Hierarchy.Node[Hie_CRS].ShrtName);
/***** End container *****/
HTM_DIV_End ();
@@ -1755,7 +1756,7 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr,
The_GetColorRows ());
HTM_Txt (UsrDat->Surname1);
if (UsrDat->Surname2[0])
- HTM_TxtF (" %s",UsrDat->Surname2);
+ HTM_SPTxt (UsrDat->Surname2);
HTM_TxtF (", %s",UsrDat->FrstName);
HTM_TD_End ();
@@ -2929,7 +2930,7 @@ static void Att_WriteRowUsrSeveralAttEvents (const struct Att_Events *Events,
The_GetColorRows ());
HTM_Txt (UsrDat->Surname1);
if (UsrDat->Surname2[0])
- HTM_TxtF (" %s",UsrDat->Surname2);
+ HTM_SPTxt (UsrDat->Surname2);
HTM_TxtF (", %s",UsrDat->FrstName);
HTM_TD_End ();
@@ -3108,7 +3109,7 @@ static void Att_ListAttEventsForAStd (struct Att_Events *Events,
The_GetSuffix ());
HTM_Txt (UsrDat->Surname1);
if (UsrDat->Surname2[0])
- HTM_TxtF (" %s",UsrDat->Surname2);
+ HTM_SPTxt (UsrDat->Surname2);
HTM_TxtF (", %s",UsrDat->FrstName);
HTM_TD_End ();
diff --git a/swad_center.c b/swad_center.c
index 47a11e54..3e1745cc 100644
--- a/swad_center.c
+++ b/swad_center.c
@@ -199,7 +199,7 @@ void Ctr_DrawCenterLogoAndNameWithLink (struct Hie_Node *Ctr,Act_Action_t Action
/***** Center logo and name *****/
Lgo_DrawLogo (Hie_CTR,Ctr,IconClass);
- HTM_TxtF (" %s",Ctr->FullName);
+ HTM_NBSPTxt (Ctr->FullName);
/***** End link *****/
HTM_BUTTON_End ();
diff --git a/swad_changelog.h b/swad_changelog.h
index 300f4ee5..87dbbe3d 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -633,11 +633,12 @@ 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.59.5 (2024-01-26)"
+#define Log_PLATFORM_VERSION "SWAD 23.60 (2024-01-26)"
#define CSS_FILE "swad23.58.1.css"
#define JS_FILE "swad23.53.6.js"
/*
- Version 23.59.5: Jan 26, 2024 Responsive design in forums and messages. (? lines)
+ Version 23.60: Jan 26, 2024 Code refactoring in my courses. (335725 lines)
+ Version 23.59.5: Jan 26, 2024 Responsive design in forums and messages. (335698 lines)
Version 23.59.4: Jan 24, 2024 Responsive design in list of users. (335701 lines)
Version 23.59.3: Jan 24, 2024 Responsive design in course hits. (335698 lines)
Version 23.59.2: Jan 24, 2024 Responsive design in global hits. (335672 lines)
diff --git a/swad_chat.c b/swad_chat.c
index 3f687c36..62b25e59 100644
--- a/swad_chat.c
+++ b/swad_chat.c
@@ -324,7 +324,7 @@ static void Cht_WriteLinkToChat2 (const char *RoomCode,const char *RoomFullName)
HTM_STRONG_Begin ();
/* Room name and users */
- HTM_TxtF (" %s",RoomFullName);
+ HTM_NBSPTxt (RoomFullName);
if (NumUsrsInRoom > 1)
HTM_TxtF (" [%d %s]",NumUsrsInRoom,Txt_connected_PLURAL);
else if (NumUsrsInRoom == 1)
diff --git a/swad_country.c b/swad_country.c
index 28645a41..7aff9a07 100644
--- a/swad_country.c
+++ b/swad_country.c
@@ -498,8 +498,6 @@ void Cty_DrawCountryMapAndNameWithLink (struct Hie_Node *Cty,Act_Action_t Action
const char *ClassContainer,
const char *ClassMap)
{
- char CountryName[Cty_MAX_BYTES_NAME + 1];
-
/***** Begin form *****/
Frm_BeginFormGoTo (Action);
ParCod_PutPar (ParCod_Cty,Cty->HieCod);
@@ -516,9 +514,7 @@ void Cty_DrawCountryMapAndNameWithLink (struct Hie_Node *Cty,Act_Action_t Action
Cty_DrawCountryMap (Cty,ClassMap);
/***** Write country name *****/
- Str_Copy (CountryName,Cty->FullName,sizeof (CountryName) - 1);
- HTM_TxtF (" %s ",CountryName);
- HTM_TxtF ("(%s)",Cty->ShrtName);
+ HTM_TxtF (" %s (%s)",Cty->FullName,Cty->ShrtName);
/***** End link *****/
HTM_BUTTON_End ();
diff --git a/swad_course.c b/swad_course.c
index 056494d5..0725450f 100644
--- a/swad_course.c
+++ b/swad_course.c
@@ -90,15 +90,6 @@ static struct Hie_Node *Crs_EditingCrs = NULL; // Static variable to keep the co
/**************************** Private prototypes *****************************/
/*****************************************************************************/
-static void Crs_WriteListMyCoursesToSelectOne (void);
-static void Crs_WriteNodes (struct Hie_Node Hie[Hie_NUM_LEVELS],
- Lay_LastItem_t IsLastItemInLevel[1 + 6],
- Hie_Level_t Level);
-static void Crs_WriteRowMyCourses (Hie_Level_t Level,
- const struct Hie_Node Hie[Hie_NUM_LEVELS],
- Lay_Highlight_t Highlight,
- Lay_LastItem_t IsLastItemInLevel[1 + 6]);
-
static void Crs_GetListCrssInCurrentDeg (void);
static void Crs_ListCourses (void);
static void Crs_PutIconsListCourses (__attribute__((unused)) void *Args);
@@ -124,8 +115,6 @@ static void Crs_EmptyCourseCompletely (long CrsCod);
static void Crs_PutButtonToGoToCrs (void);
static void Crs_PutButtonToRegisterInCrs (void);
-static void Crs_PutIconToSearchCourses (__attribute__((unused)) void *Args);
-
static void Crs_WriteRowCrsData (unsigned NumCrs,MYSQL_ROW row,bool WriteColumnAccepted);
static void Crs_EditingCourseConstructor (void);
@@ -149,132 +138,6 @@ void Crs_ShowIntroduction (void)
Hlp_ShowHelpWhatWouldYouLikeToDo ();
}
-/*****************************************************************************/
-/************************ Write menu with my courses *************************/
-/*****************************************************************************/
-
-static void Crs_WriteListMyCoursesToSelectOne (void)
- {
- extern const char *Hlp_PROFILE_Courses;
- extern const char *Txt_My_courses;
- struct Hie_Node Hie[Hie_NUM_LEVELS];
- Lay_LastItem_t IsLastItemInLevel[1 + 6];
-
- /***** Begin box *****/
- Box_BoxBegin (NULL,Txt_My_courses,
- Crs_PutIconToSearchCourses,NULL,
- Hlp_PROFILE_Courses,Box_NOT_CLOSABLE);
-
- /***** Begin list *****/
- HTM_UL_Begin ("class=\"LIST_TREE\"");
-
- /***** Write nodes recursively *****/
- Crs_WriteNodes (Hie,IsLastItemInLevel,Hie_SYS);
-
- /***** End list *****/
- HTM_UL_End ();
-
- /***** End box *****/
- Box_BoxEnd ();
- }
-
-static void Crs_WriteNodes (struct Hie_Node Hie[Hie_NUM_LEVELS],
- Lay_LastItem_t IsLastItemInLevel[1 + 6],
- Hie_Level_t Level)
- {
- extern unsigned (*Hie_GetMyNodesFromDB[Hie_NUM_LEVELS]) (MYSQL_RES **mysql_res,
- long PrtCod);
- extern bool (*Hie_GetDataByCod[Hie_NUM_LEVELS]) (struct Hie_Node *Node);
- extern const char *Txt_HIERARCHY_SINGUL_Abc[Hie_NUM_LEVELS];
- Lay_Highlight_t Highlight; // Highlight because degree, course, etc. is selected
- MYSQL_RES *mysql_res;
- MYSQL_ROW row;
- unsigned NumNode;
- unsigned NumNodes;
-
- if (Level > Hie_SYS)
- NumNodes = Hie_GetMyNodesFromDB[Level] (&mysql_res,Hie[Level - 1].HieCod);
- else
- NumNodes = 1;
-
- for (NumNode = 0;
- NumNode < NumNodes;
- NumNode++)
- {
- if (Level > Hie_SYS)
- {
- /***** Get next node *****/
- row = mysql_fetch_row (mysql_res);
- Hie[Level].HieCod = Str_ConvertStrCodToLongCod (row[0]);
-
- /***** Get data of this node *****/
- if (!Hie_GetDataByCod[Level] (&Hie[Level]))
- Err_WrongCountrExit ();
- }
- else
- {
- Hie[Level].HieCod = -1L;
- Str_Copy (Hie[Level].ShrtName,Txt_HIERARCHY_SINGUL_Abc[Level],
- sizeof (Hie[Level].ShrtName) - 1);
- }
-
- /***** Write link to node *****/
- if (Level < Hie_CRS)
- Highlight = (Gbl.Hierarchy.Node[Level + 1].HieCod <= 0 &&
- Gbl.Hierarchy.Node[Level].HieCod == Hie[Level].HieCod) ? Lay_HIGHLIGHT :
- Lay_NO_HIGHLIGHT;
- else
- Highlight = (Gbl.Hierarchy.Node[Level].HieCod == Hie[Level].HieCod) ? Lay_HIGHLIGHT :
- Lay_NO_HIGHLIGHT;
-
- IsLastItemInLevel[Level] = (NumNode == NumNodes - 1) ? Lay_LAST_ITEM :
- Lay_NO_LAST_ITEM;
- Crs_WriteRowMyCourses (Level,Hie,Highlight,IsLastItemInLevel);
-
- /***** Write subnodes recursively ******/
- if (Level < Hie_CRS)
- Crs_WriteNodes (Hie,IsLastItemInLevel,Level + 1);
- }
-
- if (Level > Hie_SYS)
- /* Free structure that stores the query result */
- DB_FreeMySQLResult (&mysql_res);
- }
-
-static void Crs_WriteRowMyCourses (Hie_Level_t Level,
- const struct Hie_Node Hie[Hie_NUM_LEVELS],
- Lay_Highlight_t Highlight,
- Lay_LastItem_t IsLastItemInLevel[1 + 6])
- {
- extern ParCod_Param_t Hie_ParCod[Hie_NUM_LEVELS];
- extern const char *Lay_HighlightClass[Lay_NUM_HIGHLIGHT];
- static Act_Action_t Actions[Hie_NUM_LEVELS] =
- {
- [Hie_SYS] = ActSeeSysInf,
- [Hie_CTY] = ActSeeCtyInf,
- [Hie_INS] = ActSeeInsInf,
- [Hie_CTR] = ActSeeCtrInf,
- [Hie_DEG] = ActSeeDegInf,
- [Hie_CRS] = ActSeeCrsInf,
- };
-
- HTM_LI_Begin (Lay_HighlightClass[Highlight]);
- Lay_IndentDependingOnLevel (Level,IsLastItemInLevel,
- Lay_HORIZONTAL_LINE_AT_RIGHT);
- Frm_BeginForm (ActMyCrs);
- ParCod_PutPar (Hie_ParCod[Level],Hie[Level].HieCod);
- HTM_BUTTON_Submit_Begin (Act_GetActionText (Actions[Level]),
- "class=\"BT_LINK FORM_IN_%s\"",
- The_GetSuffix ());
- Lgo_DrawLogo (Level,&Hie[Level],"ICO16x16");
- HTM_DIV_Begin ("class=\"MY_CRS_TXT\"");
- HTM_TxtF (" %s",Hie[Level].ShrtName);
- HTM_DIV_End ();
- HTM_BUTTON_End ();
- Frm_EndForm ();
- HTM_LI_End ();
- }
-
/*****************************************************************************/
/********************* Get number of courses with users **********************/
/*****************************************************************************/
@@ -1754,71 +1617,6 @@ static void Crs_PutButtonToRegisterInCrs (void)
Frm_EndForm ();
}
-/*****************************************************************************/
-/************************* Select one of my courses **************************/
-/*****************************************************************************/
-
-void Crs_ReqSelectOneOfMyCourses (void)
- {
- /***** Fill the list with the courses I belong to, if not filled *****/
- Hie_GetMyHierarchy (Hie_CRS);
-
- /***** Select one of my courses *****/
- if (Gbl.Usrs.Me.Hierarchy[Hie_CRS].Num)
- /* Show my courses */
- Crs_WriteListMyCoursesToSelectOne ();
- else // I am not enroled in any course
- /* Show help to enrol me */
- Hlp_ShowHelpWhatWouldYouLikeToDo ();
- }
-
-/*****************************************************************************/
-/******************* Put an icon (form) to search courses ********************/
-/*****************************************************************************/
-
-static void Crs_PutIconToSearchCourses (__attribute__((unused)) void *Args)
- {
- Lay_PutContextualLinkOnlyIcon (ActReqSch,NULL,
- Sch_PutLinkToSearchCoursesPars,NULL,
- "search.svg",Ico_BLACK);
- }
-
-/*****************************************************************************/
-/********** Put an icon (form) to select my courses in breadcrumb ************/
-/*****************************************************************************/
-
-void Crs_PutIconToSelectMyCoursesInBreadcrumb (void)
- {
- extern const char *Hie_Icons[Hie_NUM_LEVELS];
- extern const char *Txt_My_courses;
-
- if (Gbl.Usrs.Me.Logged) // I am logged
- {
- /***** Begin form *****/
- Frm_BeginForm (ActMyCrs);
-
- /***** Put icon with link *****/
- HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,Hie_Icons[Hie_SYS],Txt_My_courses,
- "class=\"BC_ICO BC_ICO_%s ICO_HIGHLIGHT\"",
- The_GetSuffix ());
-
- /***** End form *****/
- Frm_EndForm ();
- }
- }
-
-/*****************************************************************************/
-/****************** Put an icon (form) to select my courses ******************/
-/*****************************************************************************/
-
-void Crs_PutIconToSelectMyCourses (__attribute__((unused)) void *Args)
- {
- if (Gbl.Usrs.Me.Logged) // I am logged
- Lay_PutContextualLinkOnlyIcon (ActMyCrs,NULL,
- NULL,NULL,
- "sitemap.svg",Ico_BLACK);
- }
-
/*****************************************************************************/
/************************** Write courses of a user **************************/
/*****************************************************************************/
diff --git a/swad_course.h b/swad_course.h
index 8c395486..8d626efa 100644
--- a/swad_course.h
+++ b/swad_course.h
@@ -79,11 +79,6 @@ void Crs_RenameCourse (struct Hie_Node *Crs,Nam_ShrtOrFullName_t ShrtOrFull);
void Crs_ChangeCrsStatus (void);
void Crs_ContEditAfterChgCrs (void);
-void Crs_PutIconToSelectMyCoursesInBreadcrumb (void);
-void Crs_PutIconToSelectMyCourses (__attribute__((unused)) void *Args);
-
-void Crs_ReqSelectOneOfMyCourses (void);
-
void Crs_GetAndWriteCrssOfAUsr (const struct Usr_Data *UsrDat,Rol_Role_t Role);
void Crs_ListCrssFound (MYSQL_RES **mysql_res,unsigned NumCrss);
diff --git a/swad_degree.c b/swad_degree.c
index 68b1fa68..47c38235 100644
--- a/swad_degree.c
+++ b/swad_degree.c
@@ -205,7 +205,7 @@ void Deg_DrawDegreeLogoAndNameWithLink (struct Hie_Node *Deg,Act_Action_t Action
/***** Degree logo and name *****/
Lgo_DrawLogo (Hie_DEG,Deg,IconClass);
- HTM_TxtF (" %s",Deg->FullName);
+ HTM_NBSPTxt (Deg->FullName);
/***** End link *****/
HTM_BUTTON_End ();
diff --git a/swad_exam_result.c b/swad_exam_result.c
index d4b40d31..3df95c03 100644
--- a/swad_exam_result.c
+++ b/swad_exam_result.c
@@ -1527,11 +1527,14 @@ void ExaRes_ShowExamResultUser (struct Usr_Data *UsrDat)
/***** User's data *****/
HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ());
ID_WriteUsrIDs (UsrDat,NULL);
- HTM_TxtF (" %s",UsrDat->Surname1);
+ HTM_NBSPTxt (UsrDat->Surname1);
if (UsrDat->Surname2[0])
- HTM_TxtF (" %s",UsrDat->Surname2);
+ HTM_SPTxt (UsrDat->Surname2);
if (UsrDat->FrstName[0])
- HTM_TxtF (", %s",UsrDat->FrstName);
+ {
+ HTM_Comma ();
+ HTM_SPTxt (UsrDat->FrstName);
+ }
HTM_BR ();
Pho_ShowUsrPhotoIfAllowed (UsrDat,
ClassPhoto[Gbl.Prefs.PhotoShape],Pho_ZOOM);
diff --git a/swad_exam_session.c b/swad_exam_session.c
index 14c3834c..8b80c26a 100644
--- a/swad_exam_session.c
+++ b/swad_exam_session.c
@@ -574,7 +574,7 @@ static void ExaSes_GetAndWriteNamesOfGrpsAssociatedToSession (const struct ExaSe
row = mysql_fetch_row (mysql_res);
/* Write group type name (row[0]) and group name (row[1]) */
- HTM_TxtF ("%s %s",row[0],row[1]);
+ HTM_TxtF ("%s %s",row[0],row[1]);
if (NumGrps >= 2)
{
@@ -587,8 +587,8 @@ static void ExaSes_GetAndWriteNamesOfGrpsAssociatedToSession (const struct ExaSe
}
}
else
- HTM_TxtF ("%s %s",Txt_The_whole_course,
- Gbl.Hierarchy.Node[Hie_CRS].ShrtName);
+ HTM_TxtF ("%s %s",
+ Txt_The_whole_course,Gbl.Hierarchy.Node[Hie_CRS].ShrtName);
HTM_DIV_End ();
@@ -1016,7 +1016,8 @@ static void ExaSes_ShowLstGrpsToCreateSession (long SesCod)
"SesCod",
SesCod) ? "" :
" checked=\"checked\"");
- HTM_TxtF ("%s %s",Txt_The_whole_course,
+ HTM_TxtF ("%s %s",
+ Txt_The_whole_course,
Gbl.Hierarchy.Node[Hie_CRS].ShrtName);
HTM_LABEL_End ();
HTM_TD_End ();
diff --git a/swad_forum.c b/swad_forum.c
index 6c69ad45..0490d2b4 100644
--- a/swad_forum.c
+++ b/swad_forum.c
@@ -1825,7 +1825,7 @@ static void For_WriteLinkToForum (const struct For_Forums *Forums,
default:
break;
}
- HTM_TxtF (" %s",ForumName);
+ HTM_NBSPTxt (ForumName);
/***** Write total number of threads and posts in this forum *****/
if (NumThrs)
diff --git a/swad_group.c b/swad_group.c
index a8f321ca..b2a51aa9 100644
--- a/swad_group.c
+++ b/swad_group.c
@@ -169,7 +169,7 @@ void Grp_WriteNamesOfSelectedGrps (void)
{
GrpDat.GrpCod = GrpCod;
Grp_GetGroupDataByCod (&GrpDat);
- HTM_TxtF ("%s %s",GrpDat.GrpTypName,GrpDat.GrpName);
+ HTM_TxtF ("%s %s",GrpDat.GrpTypName,GrpDat.GrpName);
}
else // GrpCod < 0 ==> students not belonging to any group of type (-GrpCod)
{
@@ -433,7 +433,7 @@ static void Grp_PutCheckboxAllGrps (Grp_WhichGroups_t GroupsSelectableByStdsOrNE
" onclick=\"togglecheckChildren(this,'GrpCods')\"" :
" onclick=\"togglecheckChildren(this,'GrpCods')\"") :
" disabled=\"disabled\"");
- HTM_TxtF (" %s",Txt_All_groups);
+ HTM_NBSPTxt (Txt_All_groups);
HTM_LABEL_End ();
HTM_DIV_End ();
}
diff --git a/swad_hierarchy.c b/swad_hierarchy.c
index 840fe665..3abde014 100644
--- a/swad_hierarchy.c
+++ b/swad_hierarchy.c
@@ -43,6 +43,7 @@
#include "swad_form.h"
#include "swad_global.h"
#include "swad_group_database.h"
+#include "swad_help.h"
#include "swad_hierarchy.h"
#include "swad_hierarchy_database.h"
#include "swad_hierarchy_type.h"
@@ -130,6 +131,17 @@ static void Hie_ShowHierarchyRow (const char *Text1,const char *Text2,
int NumNodes[Hie_NUM_LEVELS]);
static void Hie_ShowHierarchyCell (const char *ClassTxt,int Num);
+//--------------------------- My hierarchy ------------------------------------
+static void Hie_WriteListMyHierarchyToSelectNode (void);
+static void Hie_PutIconToSearchCourses (__attribute__((unused)) void *Args);
+static void Hie_WriteMyHierarchyNodes (struct Hie_Node Hie[Hie_NUM_LEVELS],
+ Lay_LastItem_t IsLastItemInLevel[1 + 6],
+ Hie_Level_t Level);
+static void Hie_WriteRowMyHierarchy (Hie_Level_t Level,
+ const struct Hie_Node Hie[Hie_NUM_LEVELS],
+ Lay_Highlight_t Highlight,
+ Lay_LastItem_t IsLastItemInLevel[1 + 6]);
+
/*****************************************************************************/
/********** List pending institutions, centers, degrees and courses **********/
/*****************************************************************************/
@@ -1157,7 +1169,8 @@ static void Hie_GetAndShowHierarchyWithNodes (Hie_Level_t HavingNodesOfLevel)
HavingNodesOfLevel);// Grand child
/***** Write number of elements with courses *****/
- Hie_ShowHierarchyRow (Txt_With_,Txt_HIERARCHY_PLURAL_abc[HavingNodesOfLevel],"DAT",NumNodes);
+ Hie_ShowHierarchyRow (Txt_With_,Txt_HIERARCHY_PLURAL_abc[HavingNodesOfLevel],
+ "DAT",NumNodes);
}
/*****************************************************************************/
@@ -1457,3 +1470,202 @@ static void Hie_ShowHierarchyCell (const char *ClassTxt,int Num)
HTM_Hyphen ();
HTM_TD_End ();
}
+
+/*****************************************************************************/
+/********** Put an icon (form) to select my courses in breadcrumb ************/
+/*****************************************************************************/
+
+void Hie_PutIconToSelectMyHierarchyInBreadcrumb (void)
+ {
+ extern const char *Txt_My_courses;
+
+ if (Gbl.Usrs.Me.Logged) // I am logged
+ {
+ /***** Begin form *****/
+ Frm_BeginForm (ActMyCrs);
+
+ /***** Put icon with link *****/
+ HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,Hie_Icons[Hie_SYS],Txt_My_courses,
+ "class=\"BC_ICO BC_ICO_%s ICO_HIGHLIGHT\"",
+ The_GetSuffix ());
+
+ /***** End form *****/
+ Frm_EndForm ();
+ }
+ }
+
+/*****************************************************************************/
+/***************** Put an icon (form) to select my hierarchy *****************/
+/*****************************************************************************/
+
+void Hie_PutIconToSelectMyHierarchy (__attribute__((unused)) void *Args)
+ {
+ if (Gbl.Usrs.Me.Logged) // I am logged
+ Lay_PutContextualLinkOnlyIcon (ActMyCrs,NULL,
+ NULL,NULL,
+ "sitemap.svg",Ico_BLACK);
+ }
+
+/*****************************************************************************/
+/****************** Select one node from my hierarchy ************************/
+/*****************************************************************************/
+
+void Hie_ReqSelectOneNodeFromMyHierarchy (void)
+ {
+ /***** Fill the list with the courses I belong to, if not filled *****/
+ Hie_GetMyHierarchy (Hie_CRS);
+
+ /***** Select one of my courses *****/
+ if (Gbl.Usrs.Me.Hierarchy[Hie_CRS].Num)
+ /* Show my courses */
+ Hie_WriteListMyHierarchyToSelectNode ();
+ else // I am not enroled in any course
+ /* Show help to enrol me */
+ Hlp_ShowHelpWhatWouldYouLikeToDo ();
+ }
+
+/*****************************************************************************/
+/************************ Write menu with my courses *************************/
+/*****************************************************************************/
+
+static void Hie_WriteListMyHierarchyToSelectNode (void)
+ {
+ extern const char *Hlp_PROFILE_Courses;
+ extern const char *Txt_My_courses;
+ struct Hie_Node Hie[Hie_NUM_LEVELS];
+ Lay_LastItem_t IsLastItemInLevel[1 + 6];
+
+ /***** Begin box *****/
+ Box_BoxBegin (NULL,Txt_My_courses,
+ Hie_PutIconToSearchCourses,NULL,
+ Hlp_PROFILE_Courses,Box_NOT_CLOSABLE);
+
+ /***** Begin list *****/
+ HTM_UL_Begin ("class=\"LIST_TREE\"");
+
+ /***** Write nodes recursively *****/
+ Hie_WriteMyHierarchyNodes (Hie,IsLastItemInLevel,Hie_SYS);
+
+ /***** End list *****/
+ HTM_UL_End ();
+
+ /***** End box *****/
+ Box_BoxEnd ();
+ }
+
+/*****************************************************************************/
+/******************* Put an icon (form) to search courses ********************/
+/*****************************************************************************/
+
+static void Hie_PutIconToSearchCourses (__attribute__((unused)) void *Args)
+ {
+ Lay_PutContextualLinkOnlyIcon (ActReqSch,NULL,
+ Sch_PutLinkToSearchCoursesPars,NULL,
+ "search.svg",Ico_BLACK);
+ }
+
+/*****************************************************************************/
+/****************** Write my hierarchy nodes recursively *********************/
+/*****************************************************************************/
+
+static void Hie_WriteMyHierarchyNodes (struct Hie_Node Hie[Hie_NUM_LEVELS],
+ Lay_LastItem_t IsLastItemInLevel[1 + 6],
+ Hie_Level_t Level)
+ {
+ extern const char *Txt_HIERARCHY_SINGUL_Abc[Hie_NUM_LEVELS];
+ Lay_Highlight_t Highlight; // Highlight because degree, course, etc. is selected
+ MYSQL_RES *mysql_res;
+ MYSQL_ROW row;
+ unsigned NumNode;
+ unsigned NumNodes;
+
+ if (Level > Hie_SYS)
+ NumNodes = Hie_GetMyNodesFromDB[Level] (&mysql_res,Hie[Level - 1].HieCod);
+ else
+ NumNodes = 1;
+
+ for (NumNode = 0;
+ NumNode < NumNodes;
+ NumNode++)
+ {
+ if (Level > Hie_SYS)
+ {
+ /***** Get next node *****/
+ row = mysql_fetch_row (mysql_res);
+ Hie[Level].HieCod = Str_ConvertStrCodToLongCod (row[0]);
+
+ /***** Get data of this node *****/
+ if (!Hie_GetDataByCod[Level] (&Hie[Level]))
+ Err_WrongCountrExit ();
+ }
+ else
+ {
+ Hie[Level].HieCod = -1L;
+ Str_Copy (Hie[Level].ShrtName,Txt_HIERARCHY_SINGUL_Abc[Level],
+ sizeof (Hie[Level].ShrtName) - 1);
+ }
+
+ /***** Write link to node *****/
+ if (Level < Hie_CRS)
+ Highlight = (Gbl.Hierarchy.Node[Level + 1].HieCod <= 0 &&
+ Gbl.Hierarchy.Node[Level].HieCod == Hie[Level].HieCod) ? Lay_HIGHLIGHT :
+ Lay_NO_HIGHLIGHT;
+ else
+ Highlight = (Gbl.Hierarchy.Node[Level].HieCod == Hie[Level].HieCod) ? Lay_HIGHLIGHT :
+ Lay_NO_HIGHLIGHT;
+
+ IsLastItemInLevel[Level] = (NumNode == NumNodes - 1) ? Lay_LAST_ITEM :
+ Lay_NO_LAST_ITEM;
+ Hie_WriteRowMyHierarchy (Level,Hie,Highlight,IsLastItemInLevel);
+
+ /***** Write subnodes recursively ******/
+ if (Level < Hie_CRS)
+ Hie_WriteMyHierarchyNodes (Hie,IsLastItemInLevel,Level + 1);
+ }
+
+ if (Level > Hie_SYS)
+ /* Free structure that stores the query result */
+ DB_FreeMySQLResult (&mysql_res);
+ }
+
+/*****************************************************************************/
+/************************ Write a row in my hierarchy ************************/
+/*****************************************************************************/
+
+static void Hie_WriteRowMyHierarchy (Hie_Level_t Level,
+ const struct Hie_Node Hie[Hie_NUM_LEVELS],
+ Lay_Highlight_t Highlight,
+ Lay_LastItem_t IsLastItemInLevel[1 + 6])
+ {
+ extern const char *Lay_HighlightClass[Lay_NUM_HIGHLIGHT];
+ static Act_Action_t Actions[Hie_NUM_LEVELS] =
+ {
+ [Hie_SYS] = ActSeeSysInf,
+ [Hie_CTY] = ActSeeCtyInf,
+ [Hie_INS] = ActSeeInsInf,
+ [Hie_CTR] = ActSeeCtrInf,
+ [Hie_DEG] = ActSeeDegInf,
+ [Hie_CRS] = ActSeeCrsInf,
+ };
+
+ HTM_LI_Begin (Lay_HighlightClass[Highlight]);
+ Lay_IndentDependingOnLevel (Level,IsLastItemInLevel,
+ Lay_HORIZONTAL_LINE_AT_RIGHT);
+ Frm_BeginForm (ActMyCrs);
+ ParCod_PutPar (Hie_ParCod[Level],Hie[Level].HieCod);
+ HTM_BUTTON_Submit_Begin (Act_GetActionText (Actions[Level]),
+ "class=\"BT_LINK FORM_IN_%s\"",
+ The_GetSuffix ());
+
+ /* Node logo */
+ Lgo_DrawLogo (Level,&Hie[Level],"ICO16x16");
+
+ /* Node name */
+ HTM_DIV_Begin ("class=\"MY_CRS_TXT\"");
+ HTM_NBSPTxt (Hie[Level].ShrtName);
+ HTM_DIV_End ();
+
+ HTM_BUTTON_End ();
+ Frm_EndForm ();
+ HTM_LI_End ();
+ }
diff --git a/swad_hierarchy.h b/swad_hierarchy.h
index 566862c9..e74be314 100644
--- a/swad_hierarchy.h
+++ b/swad_hierarchy.h
@@ -93,4 +93,10 @@ unsigned Hie_GetCachedNumUsrsWhoClaimToBelongTo (Hie_Level_t Level,
unsigned Hie_GetNumUsrsWhoClaimToBelongTo (Hie_Level_t Level,
struct Hie_Node *Node);
+//--------------------------- My hierarchy ------------------------------------
+void Hie_PutIconToSelectMyHierarchyInBreadcrumb (void);
+void Hie_PutIconToSelectMyHierarchy (__attribute__((unused)) void *Args);
+
+void Hie_ReqSelectOneNodeFromMyHierarchy (void);
+
#endif
diff --git a/swad_holiday.c b/swad_holiday.c
index d5cca9ff..2550d2d7 100644
--- a/swad_holiday.c
+++ b/swad_holiday.c
@@ -163,9 +163,7 @@ void Hld_SeeAllHolidays (void)
Frm_EndForm ();
HTM_TH_End ();
}
- HTM_TH_Begin (HTM_HEAD_LEFT);
- HTM_TxtF (" %s ",Txt_End_date);
- HTM_TH_End ();
+ HTM_TH (Txt_End_date,HTM_HEAD_LEFT);
HTM_TH (Txt_Holiday,HTM_HEAD_LEFT);
HTM_TR_End ();
@@ -184,12 +182,10 @@ void Hld_SeeAllHolidays (void)
Dat_ConvDateToDateStr (&Holidays.Lst[NumHld].StartDate,StrDate);
HTM_TD_Begin ("class=\"LM DAT_%s\"",The_GetSuffix ());
- HTM_NBSP ();
HTM_Txt (StrDate);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LM DAT_%s\"",The_GetSuffix ());
- HTM_NBSP ();
switch (Holidays.Lst[NumHld].HldTyp)
{
case Hld_HOLIDAY:
@@ -202,7 +198,7 @@ void Hld_SeeAllHolidays (void)
HTM_TD_End ();
HTM_TD_Begin ("class=\"LM DAT_%s\"",The_GetSuffix ());
- HTM_TxtF (" %s",Holidays.Lst[NumHld].Name);
+ HTM_Txt (Holidays.Lst[NumHld].Name);
HTM_TD_End ();
HTM_TR_End ();
diff --git a/swad_icon.c b/swad_icon.c
index 61a04b12..bd5f747a 100644
--- a/swad_icon.c
+++ b/swad_icon.c
@@ -459,7 +459,7 @@ void Ico_PutIconTextLink (const char *Icon,Ico_Color_t Color,const char *Text)
/***** Print icon and optional text *****/
HTM_DIV_Begin ("class=\"CONTEXT_OPT ICO_HIGHLIGHT\"");
Ico_PutIcon (Icon,Color,Text,"CONTEXT_ICOx16");
- HTM_TxtF (" %s",Text);
+ HTM_NBSPTxt (Text);
HTM_DIV_End ();
}
diff --git a/swad_institution.c b/swad_institution.c
index fa698d4c..61b7a604 100644
--- a/swad_institution.c
+++ b/swad_institution.c
@@ -244,7 +244,7 @@ void Ins_DrawInstitLogoAndNameWithLink (struct Hie_Node *Ins,Act_Action_t Action
/***** Institution logo and name *****/
Lgo_DrawLogo (Hie_INS,Ins,IconClass);
- HTM_TxtF (" %s",Ins->FullName);
+ HTM_NBSPTxt (Ins->FullName);
/***** End link *****/
HTM_BUTTON_End ();
diff --git a/swad_layout.c b/swad_layout.c
index 713ea88e..e720c2ea 100644
--- a/swad_layout.c
+++ b/swad_layout.c
@@ -1112,7 +1112,7 @@ static void Lay_WritePageTopHeading (void)
static void Lay_WriteBreadcrumb (void)
{
HTM_Txt ("");
@@ -1303,7 +1303,7 @@ void Lay_PutContextualCheckbox (Act_Action_t NextAction,
/***** Text *****/
if (Text)
if (Text[0])
- HTM_TxtF (" %s",Text);
+ HTM_NBSPTxt (Text);
/***** End label *****/
HTM_LABEL_End ();
diff --git a/swad_mark.c b/swad_mark.c
index b636bffa..18544248 100644
--- a/swad_mark.c
+++ b/swad_mark.c
@@ -106,7 +106,8 @@ void Mrk_GetAndWriteNumRowsHeaderAndFooter (void)
ActChgNumRowHeaCrs); // Course zone
Brw_PutImplicitParsFileBrowser (&Gbl.FileBrowser.FilFolLnk);
HTM_LABEL_Begin (NULL);
- HTM_TxtF (" %s: ",Txt_TABLE_Header);
+ // HTM_TxtF (" %s: ",Txt_TABLE_Header);
+ HTM_TxtColon (Txt_TABLE_Header);
snprintf (StrHeadOrFoot,sizeof (StrHeadOrFoot),"%u",Marks.Header);
HTM_INPUT_TEXT (Mrk_HeadOrFootStr[Brw_HEADER],Cns_MAX_DECIMAL_DIGITS_UINT,StrHeadOrFoot,
HTM_SUBMIT_ON_CHANGE,
@@ -124,7 +125,8 @@ void Mrk_GetAndWriteNumRowsHeaderAndFooter (void)
ActChgNumRowFooCrs); // Course zone
Brw_PutImplicitParsFileBrowser (&Gbl.FileBrowser.FilFolLnk);
HTM_LABEL_Begin (NULL);
- HTM_TxtF (" %s: ",Txt_TABLE_Footer);
+ // HTM_TxtF (" %s: ",Txt_TABLE_Footer);
+ HTM_TxtColon (Txt_TABLE_Footer);
snprintf (StrHeadOrFoot,sizeof (StrHeadOrFoot),"%u",Marks.Footer);
HTM_INPUT_TEXT (Mrk_HeadOrFootStr[Brw_FOOTER],Cns_MAX_DECIMAL_DIGITS_UINT,StrHeadOrFoot,
HTM_SUBMIT_ON_CHANGE,
diff --git a/swad_match.c b/swad_match.c
index c5b741a8..3035767a 100644
--- a/swad_match.c
+++ b/swad_match.c
@@ -703,7 +703,7 @@ static void Mch_GetAndWriteNamesOfGrpsAssociatedToMatch (const struct Gam_Games
row = mysql_fetch_row (mysql_res);
/* Write group type name and group name */
- HTM_TxtF ("%s %s",row[0],row[1]);
+ HTM_TxtF ("%s %s",row[0],row[1]);
if (NumGrps >= 2)
{
@@ -716,8 +716,8 @@ static void Mch_GetAndWriteNamesOfGrpsAssociatedToMatch (const struct Gam_Games
}
}
else
- HTM_TxtF ("%s %s",Txt_The_whole_course,
- Gbl.Hierarchy.Node[Hie_CRS].ShrtName);
+ HTM_TxtF ("%s %s",
+ Txt_The_whole_course,Gbl.Hierarchy.Node[Hie_CRS].ShrtName);
HTM_DIV_End ();
@@ -1270,7 +1270,8 @@ static void Mch_ShowLstGrpsToEditMatch (long MchCod)
"MchCod",
MchCod) ? "" :
" checked=\"checked\"");
- HTM_TxtF ("%s %s",Txt_The_whole_course,
+ HTM_TxtF ("%s %s",
+ Txt_The_whole_course,
Gbl.Hierarchy.Node[Hie_CRS].ShrtName);
HTM_LABEL_End ();
HTM_TD_End ();
@@ -2613,7 +2614,7 @@ static void Mch_PutCheckboxResult (const struct Mch_Match *Match)
HTM_TxtF ("",
Match->Status.ShowQstResults ? "fas fa-toggle-on" :
"fas fa-toggle-off");
- HTM_TxtF (" %s",Txt_View_results);
+ HTM_NBSPTxt (Txt_View_results);
HTM_BUTTON_End ();
/***** End form *****/
@@ -2650,7 +2651,7 @@ static void Mch_PutIfAnswered (const struct Mch_Match *Match,bool Answered)
" onmousedown=\"this.form.submit();return false;\"",
The_GetSuffix ());
HTM_TxtF ("","fas fa-check-circle");
- HTM_TxtF (" %s",Txt_MATCH_QUESTION_Answered);
+ HTM_NBSPTxt (Txt_MATCH_QUESTION_Answered);
HTM_BUTTON_End ();
/* End form */
@@ -2666,8 +2667,8 @@ static void Mch_PutIfAnswered (const struct Mch_Match *Match,bool Answered)
"fas fa-exclamation-circle",
Answered ? Txt_MATCH_QUESTION_Answered :
Txt_MATCH_QUESTION_Unanswered);
- HTM_TxtF (" %s",Answered ? Txt_MATCH_QUESTION_Answered :
- Txt_MATCH_QUESTION_Unanswered);
+ HTM_NBSPTxt (Answered ? Txt_MATCH_QUESTION_Answered :
+ Txt_MATCH_QUESTION_Unanswered);
HTM_DIV_End ();
}
diff --git a/swad_match_result.c b/swad_match_result.c
index 25d73248..8ada7bb8 100644
--- a/swad_match_result.c
+++ b/swad_match_result.c
@@ -1125,11 +1125,14 @@ void MchRes_ShowOneMchResult (void)
HTM_TD_Begin ("class=\"LB DAT_%s\"",
The_GetSuffix ());
ID_WriteUsrIDs (UsrDat,NULL);
- HTM_TxtF (" %s",UsrDat->Surname1);
+ HTM_SPTxt (UsrDat->Surname1);
if (UsrDat->Surname2[0])
- HTM_TxtF (" %s",UsrDat->Surname2);
+ HTM_SPTxt (UsrDat->Surname2);
if (UsrDat->FrstName[0])
- HTM_TxtF (", %s",UsrDat->FrstName);
+ {
+ HTM_Comma ();
+ HTM_SPTxt (UsrDat->FrstName);
+ }
HTM_BR ();
Pho_ShowUsrPhotoIfAllowed (UsrDat,
ClassPhoto[Gbl.Prefs.PhotoShape],Pho_ZOOM);
diff --git a/swad_network.c b/swad_network.c
index 091e9057..928d768d 100644
--- a/swad_network.c
+++ b/swad_network.c
@@ -381,7 +381,7 @@ void Net_ShowWebAndSocialNetworksStats (void)
The_GetSuffix ());
Ico_PutIcon (Net_WebsAndSocialNetworksIcons[Web],Ico_BLACK,
Net_WebsAndSocialNetworksTitle[Web],"ICOx16");
- HTM_TxtF (" %s",Net_WebsAndSocialNetworksTitle[Web]);
+ HTM_NBSPTxt (Net_WebsAndSocialNetworksTitle[Web]);
HTM_TD_End ();
HTM_TD_Unsigned (NumUsrs);
diff --git a/swad_notification.c b/swad_notification.c
index a168f044..dc204db2 100644
--- a/swad_notification.c
+++ b/swad_notification.c
@@ -1778,8 +1778,8 @@ void Ntf_WriteNumberOfNewNtfs (void)
"class=\"ICO16x16 NOTIF_ICO_%s\"",The_GetSuffix ());
HTM_TxtF (" %u",NumNewNtfs);
HTM_SPAN_Begin ("id=\"notif_new\"");
- HTM_TxtF (" %s",NumNewNtfs == 1 ? Txt_NOTIF_new_SINGULAR :
- Txt_NOTIF_new_PLURAL);
+ HTM_NBSPTxt (NumNewNtfs == 1 ? Txt_NOTIF_new_SINGULAR :
+ Txt_NOTIF_new_PLURAL);
HTM_SPAN_End ();
}
diff --git a/swad_project.c b/swad_project.c
index 8e436d06..6c31f968 100644
--- a/swad_project.c
+++ b/swad_project.c
@@ -2719,8 +2719,9 @@ static void Prj_ShowTableAllProjectsMembersWithARole (const struct Prj_Project *
HTM_LI_Begin (NULL);
HTM_Txt (Gbl.Usrs.Other.UsrDat.Surname1);
if (Gbl.Usrs.Other.UsrDat.Surname2[0])
- HTM_TxtF (" %s",Gbl.Usrs.Other.UsrDat.Surname2);
- HTM_TxtF (", %s",Gbl.Usrs.Other.UsrDat.FrstName);
+ HTM_SPTxt (Gbl.Usrs.Other.UsrDat.Surname2);
+ HTM_Comma ();
+ HTM_SPTxt (Gbl.Usrs.Other.UsrDat.FrstName);
HTM_LI_End ();
}
}
diff --git a/swad_question.c b/swad_question.c
index edee9d26..2f2eda0c 100644
--- a/swad_question.c
+++ b/swad_question.c
@@ -237,7 +237,7 @@ void Qst_ShowFormAnswerTypes (const struct Qst_AnswerTypes *AnswerTypes)
"value=\"Y\"%s onclick=\"togglecheckChildren(this,'AnswerType');\"",
AnswerTypes->All ? " checked=\"checked\"" :
"");
- HTM_TxtF (" %s",Txt_All_types_of_answers);
+ HTM_NBSPTxt (Txt_All_types_of_answers);
HTM_LABEL_End ();
HTM_TD_End ();
@@ -262,14 +262,14 @@ void Qst_ShowFormAnswerTypes (const struct Qst_AnswerTypes *AnswerTypes)
}
}
HTM_TD_Begin ("class=\"LM\"");
- HTM_LABEL_Begin ("class=\"DAT_%s\"",
- The_GetSuffix ());
+ HTM_LABEL_Begin ("class=\"DAT_%s\"",The_GetSuffix ());
HTM_INPUT_CHECKBOX ("AnswerType",HTM_DONT_SUBMIT_ON_CHANGE,
- "value=\"%u\"%s onclick=\"checkParent(this,'AllAnsTypes');\"",
+ "value=\"%u\"%s"
+ " onclick=\"checkParent(this,'AllAnsTypes');\"",
(unsigned) AnsType,
Checked ? " checked=\"checked\"" :
"");
- HTM_TxtF (" %s",Txt_TST_STR_ANSWER_TYPES[AnsType]);
+ HTM_NBSPTxt (Txt_TST_STR_ANSWER_TYPES[AnsType]);
HTM_LABEL_End ();
HTM_TD_End ();
@@ -1220,18 +1220,17 @@ void Qst_ListOneOrMoreQstsForSelectionForGame (struct Gam_Games *Games,
}
/*****************************************************************************/
-/************** Select all questions to add them to set/game *****************/
+/********* Checkbox to select all questions to add them to set/game **********/
/*****************************************************************************/
void Qst_PutCheckboxToSelectAllQuestions (void)
{
extern const char *Txt_All_questions;
- /***** Checkbox to select all listed questions *****/
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
HTM_INPUT_CHECKBOX ("AllQsts",HTM_DONT_SUBMIT_ON_CHANGE,
"value=\"Y\" onclick=\"togglecheckChildren(this,'QstCods');\"");
- HTM_TxtF (" %s",Txt_All_questions);
+ HTM_NBSPTxt (Txt_All_questions);
HTM_LABEL_End ();
}
diff --git a/swad_search.c b/swad_search.c
index 6258e850..a762e6ce 100644
--- a/swad_search.c
+++ b/swad_search.c
@@ -156,7 +156,7 @@ static void Sch_PutFormToSearchWithWhatToSearchAndScope (Hie_Level_t DefaultScop
/***** Begin box *****/
Box_BoxBegin (NULL,Txt_Search,
- Crs_PutIconToSelectMyCourses,NULL,
+ Hie_PutIconToSelectMyHierarchy,NULL,
Hlp_START_Search,Box_NOT_CLOSABLE);
/***** Begin form *****/
diff --git a/swad_statistic.c b/swad_statistic.c
index 24913567..130ac2c1 100644
--- a/swad_statistic.c
+++ b/swad_statistic.c
@@ -365,7 +365,8 @@ static void Sta_PutFormCrsHits (struct Sta_Stats *Stats)
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",
The_GetSuffix ());
- HTM_TxtF (" %s ",Txt_distributed_by);
+ HTM_Txt (Txt_distributed_by);
+ HTM_NBSP ();
HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,NULL,
"id=\"GroupedBy\" name=\"GroupedBy\""
" class=\"INPUT_%s\"",
@@ -573,7 +574,8 @@ static void Sta_PutFormGblHits (struct Sta_Stats *Stats)
/***** Type of statistic *****/
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",
The_GetSuffix ());
- HTM_TxtF (" %s ",Txt_distributed_by);
+ HTM_Txt (Txt_distributed_by);
+ HTM_NBSP ();
if (Stats->ClicksGroupedBy < Sta_CLICKS_GBL_PER_DAY ||
Stats->ClicksGroupedBy > Sta_CLICKS_GBL_PER_COURSE)
diff --git a/swad_survey.c b/swad_survey.c
index 38b480a0..9b8887df 100644
--- a/swad_survey.c
+++ b/swad_survey.c
@@ -594,7 +594,8 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys,
HidVis_GroupClass[Surveys->Svy.Status.HiddenOrVisible],
The_GetSuffix ());
HTM_TxtColonNBSP (Txt_Scope);
- HTM_TxtF ("%s %s",Txt_HIERARCHY_SINGUL_Abc[Surveys->Svy.Level],
+ HTM_TxtF ("%s %s",
+ Txt_HIERARCHY_SINGUL_Abc[Surveys->Svy.Level],
Gbl.Hierarchy.Node[Surveys->Svy.Level].ShrtName);
HTM_DIV_End ();
@@ -1846,7 +1847,9 @@ static void Svy_ShowLstGrpsToEditSurvey (long SvyCod)
"SvyCod",
SvyCod) ? "" :
" checked=\"checked\"");
- HTM_TxtF ("%s %s",Txt_The_whole_course,Gbl.Hierarchy.Node[Hie_CRS].ShrtName);
+ HTM_TxtF ("%s %s",
+ Txt_The_whole_course,
+ Gbl.Hierarchy.Node[Hie_CRS].ShrtName);
HTM_LABEL_End ();
HTM_TD_End ();
@@ -2096,7 +2099,7 @@ static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Svy_Survey *Svy)
row = mysql_fetch_row (mysql_res);
/* Write group type name and group name */
- HTM_TxtF ("%s %s",row[0],row[1]);
+ HTM_TxtF ("%s %s",row[0],row[1]);
if (NumGrps >= 2)
{
@@ -2109,8 +2112,8 @@ static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Svy_Survey *Svy)
}
}
else
- HTM_TxtF ("%s %s",Txt_The_whole_course,
- Gbl.Hierarchy.Node[Hie_CRS].ShrtName);
+ HTM_TxtF ("%s %s",
+ Txt_The_whole_course,Gbl.Hierarchy.Node[Hie_CRS].ShrtName);
HTM_DIV_End ();
@@ -3030,7 +3033,7 @@ static void Svy_DrawBarNumUsrs (unsigned NumUsrs,unsigned MaxUsrs)
"class=\"LT\" style=\"width:%upx; height:20px;\"",BarWidth);
/***** Write the number of users *****/
- HTM_TxtF (" %s",Title);
+ HTM_NBSPTxt (Title);
/***** Free string with the number of users *****/
free (Title);
diff --git a/swad_tag.c b/swad_tag.c
index 942def43..827158b1 100644
--- a/swad_tag.c
+++ b/swad_tag.c
@@ -313,7 +313,7 @@ void Tag_ShowFormSelTags (const struct Tag_Tags *Tags,
"value=\"Y\"%s onclick=\"togglecheckChildren(this,'ChkTag');\"",
Tags->All ? " checked=\"checked\"" :
"");
- HTM_TxtF (" %s",Txt_All_tags);
+ HTM_NBSPTxt (Txt_All_tags);
HTM_LABEL_End ();
HTM_TD_End ();
@@ -361,7 +361,7 @@ void Tag_ShowFormSelTags (const struct Tag_Tags *Tags,
row[1],
Checked ? " checked=\"checked\"" :
"");
- HTM_TxtF (" %s",row[1]);
+ HTM_NBSPTxt (row[1]);
HTM_LABEL_End ();
HTM_TD_End ();
diff --git a/swad_test_print.c b/swad_test_print.c
index 6251cb67..9f4a9df0 100644
--- a/swad_test_print.c
+++ b/swad_test_print.c
@@ -529,7 +529,7 @@ static void TstPrn_PutCheckBoxAllowTeachers (bool AllowTeachers)
"value=\"Y\"%s",
AllowTeachers ? " checked=\"checked\"" : // Teachers can see test exam
"");
- HTM_TxtF (" %s",Txt_Allow_teachers_to_consult_this_test);
+ HTM_NBSPTxt (Txt_Allow_teachers_to_consult_this_test);
HTM_LABEL_End ();
HTM_DIV_End ();
}
@@ -2260,9 +2260,9 @@ void TstPrn_ShowOnePrint (void)
HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ());
ID_WriteUsrIDs (&Gbl.Usrs.Other.UsrDat,NULL);
- HTM_TxtF (" %s",Gbl.Usrs.Other.UsrDat.Surname1);
+ HTM_SPTxt (Gbl.Usrs.Other.UsrDat.Surname1);
if (Gbl.Usrs.Other.UsrDat.Surname2[0])
- HTM_TxtF (" %s",Gbl.Usrs.Other.UsrDat.Surname2);
+ HTM_SPTxt (Gbl.Usrs.Other.UsrDat.Surname2);
if (Gbl.Usrs.Other.UsrDat.FrstName[0])
HTM_TxtF (", %s",Gbl.Usrs.Other.UsrDat.FrstName);
HTM_BR ();
diff --git a/swad_timeline_note.c b/swad_timeline_note.c
index ee92315b..69e3604b 100644
--- a/swad_timeline_note.c
+++ b/swad_timeline_note.c
@@ -498,19 +498,19 @@ static void TmlNot_WriteLocationInHierarchy (const struct TmlNot_Note *Not,
case TmlNot_INS_DOC_PUB_FILE:
case TmlNot_INS_SHA_PUB_FILE:
/* Write location (institution) in hierarchy */
- HTM_TxtF ("%s: %s",
+ HTM_TxtF ("%s: %s",
Txt_HIERARCHY_SINGUL_Abc[Hie_INS],Hie[Hie_INS].ShrtName);
break;
case TmlNot_CTR_DOC_PUB_FILE:
case TmlNot_CTR_SHA_PUB_FILE:
/* Write location (center) in hierarchy */
- HTM_TxtF ("%s: %s",
+ HTM_TxtF ("%s: %s",
Txt_HIERARCHY_SINGUL_Abc[Hie_CTR],Hie[Hie_CTR].ShrtName);
break;
case TmlNot_DEG_DOC_PUB_FILE:
case TmlNot_DEG_SHA_PUB_FILE:
/* Write location (degree) in hierarchy */
- HTM_TxtF ("%s: %s",
+ HTM_TxtF ("%s: %s",
Txt_HIERARCHY_SINGUL_Abc[Hie_DEG],Hie[Hie_DEG].ShrtName);
break;
case TmlNot_CRS_DOC_PUB_FILE:
@@ -518,12 +518,12 @@ static void TmlNot_WriteLocationInHierarchy (const struct TmlNot_Note *Not,
case TmlNot_CALL_FOR_EXAM:
case TmlNot_NOTICE:
/* Write location (course) in hierarchy */
- HTM_TxtF ("%s: %s",
+ HTM_TxtF ("%s: %s",
Txt_HIERARCHY_SINGUL_Abc[Hie_CRS],Hie[Hie_CRS].ShrtName);
break;
case TmlNot_FORUM_POST:
/* Write forum name */
- HTM_TxtF ("%s: %s",Txt_Forum,ForumName);
+ HTM_TxtF ("%s: %s",Txt_Forum,ForumName);
break;
default:
break;
@@ -692,7 +692,7 @@ static void TmlNot_PutFormGoToAction (const struct TmlNot_Note *Not,
/* Icon and text */
Ico_PutIcon (Tml_Icons[Not->Type],Ico_BLACK,
Txt_TIMELINE_NOTE[Not->Type],"CONTEXT_ICOx16");
- HTM_TxtF (" %s",Txt_TIMELINE_NOTE[Not->Type]);
+ HTM_NBSPTxt (Txt_TIMELINE_NOTE[Not->Type]);
/* End button */
HTM_BUTTON_End ();
diff --git a/swad_user.c b/swad_user.c
index 57914683..a101e83b 100644
--- a/swad_user.c
+++ b/swad_user.c
@@ -715,7 +715,7 @@ void Usr_WriteFirstNameBRSurnames (const struct Usr_Data *UsrDat)
/***** Write surname2 if exists *****/
if (UsrDat->Surname2[0])
- HTM_TxtF (" %s",UsrDat->Surname2);
+ HTM_SPTxt (UsrDat->Surname2);
}
/*****************************************************************************/
@@ -3671,7 +3671,7 @@ static void Set_FormToSelectUsrListType (void (*FuncPars) (void *Args),void *Arg
"");
Ico_PutIcon (Usr_IconsClassPhotoOrList[ListType],Ico_BLACK,
Txt_USR_LIST_TYPES[ListType],"ICO20x20");
- HTM_TxtF (" %s",Txt_USR_LIST_TYPES[ListType]);
+ HTM_NBSPTxt (Txt_USR_LIST_TYPES[ListType]);
HTM_BUTTON_End ();
/***** End form *****/
@@ -4450,7 +4450,7 @@ void Usr_ListAllDataStds (void)
if (Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) // If current course tiene groups of este type
{
HTM_TH_Span_Begin (HTM_HEAD_LEFT,1,1,"BG_HIGHLIGHT");
- HTM_TxtF ("%s %s",
+ HTM_TxtF ("%s %s",
Txt_Group,
Gbl.Crs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypName);
HTM_TH_End ();
@@ -6453,7 +6453,7 @@ void Usr_ShowTableCellWithUsrData (struct Usr_Data *UsrDat,unsigned NumRows)
HTM_BR ();
HTM_Txt (UsrDat->Surname1);
if (UsrDat->Surname2[0])
- HTM_TxtF (" %s",UsrDat->Surname2);
+ HTM_SPTxt (UsrDat->Surname2);
if (UsrDat->FrstName[0])
{
HTM_Comma ();
diff --git a/swad_zip.c b/swad_zip.c
index 0da7549f..d6916416 100644
--- a/swad_zip.c
+++ b/swad_zip.c
@@ -540,7 +540,9 @@ static void ZIP_ShowLinkToDownloadZIP (const char *FileName,const char *URL,
URL,FileName);
HTM_IMG (CfG_URL_ICON_FILEXT_PUBLIC "32x32","zip32x32.gif",Txt_ZIP_file,
"class=\"ICO40x40\"");
- HTM_TxtF (" %s ",FileName);
+ HTM_NBSP ();
+ HTM_Txt (FileName);
+ HTM_NBSP ();
Ico_PutIcon ("download.svg",Ico_BLACK,Txt_Download,"ICO40x40");
HTM_A_End ();
HTM_TD_End ();