diff --git a/swad_changelog.h b/swad_changelog.h
index 5391b93b2..61ac3ddf9 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -103,11 +103,12 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
-#define Log_PLATFORM_VERSION "SWAD 14.117.13 (2015/07/22)"
+#define Log_PLATFORM_VERSION "SWAD 14.117.14 (2015/07/22)"
// Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/*
+ Version 14.117.14:Jul 22, 2015 Checking "alt" and "title" in all images. (185203 lines)
Version 14.117.13:Jul 22, 2015 Checking "alt" and "title" in all images.
Removed unused function about mail domains. (185153 lines)
Version 14.117.12:Jul 22, 2015 Checking "alt" and "title" in all images. (185213 lines)
diff --git a/swad_network.c b/swad_network.c
index 90cd3f91a..6488ecdcb 100644
--- a/swad_network.c
+++ b/swad_network.c
@@ -202,11 +202,13 @@ static void Net_ShowAWebOrSocialNet (const char *URL,
" style=\"display:inline;\">"
""
""
+ " alt=\"%s\" title=\"%s\""
+ " style=\"width:16px; height:16px; margin:0 1px;\" />"
""
"",
URL,Title,
- Gbl.Prefs.IconsURL,Icon,Title);
+ Gbl.Prefs.IconsURL,Icon,
+ Title,Title);
}
/*****************************************************************************/
@@ -259,14 +261,16 @@ void Net_ShowFormMyWebsAndSocialNets (void)
fprintf (Gbl.F.Out,"
"
""
""
+ " alt=\"%s\" title=\"%s\""
+ " style=\"width:16px; height:16px;"
+ " margin-right:10px; vertical-align:middle;\" />"
"%s: | "
"",
ClassForm,
Gbl.Prefs.IconsURL,Net_WebsAndSocialNetworksDB[NumURL],
Net_TitleWebsAndSocialNetworks[NumURL],
Net_TitleWebsAndSocialNetworks[NumURL],
+ Net_TitleWebsAndSocialNetworks[NumURL],
Net_COL2_WIDTH);
Act_FormStart (ActChgMyNet);
Par_PutHiddenParamUnsigned ("Web",(unsigned) NumURL);
@@ -475,8 +479,9 @@ void Net_ShowWebAndSocialNetworksStats (void)
fprintf (Gbl.F.Out," |
"
""
""
+ " alt=\"%s\" title=\"%s\""
+ " style=\"width:16px; height:16px;"
+ " margin:0 2px; vertical-align:middle;\" />"
"%s | "
""
"%u"
@@ -488,6 +493,7 @@ void Net_ShowWebAndSocialNetworksStats (void)
Gbl.Prefs.IconsURL,Net_WebsAndSocialNetworksDB[Web],
Net_TitleWebsAndSocialNetworks[Web],
Net_TitleWebsAndSocialNetworks[Web],
+ Net_TitleWebsAndSocialNetworks[Web],
NumUsrs,
NumUsrsTotalInPlatform ? 100.0 * (float) NumUsrs / (float) NumUsrsTotalInPlatform :
0.0);
diff --git a/swad_notice.c b/swad_notice.c
index 15a7bf03e..f832f6bc2 100644
--- a/swad_notice.c
+++ b/swad_notice.c
@@ -404,7 +404,8 @@ void Not_ShowNotices (Not_Listing_t TypeNoticesListing)
RSS_WriteRSSLink (Gbl.F.Out,Gbl.CurrentCrs.Crs.CrsCod);
fprintf (Gbl.F.Out,"\" target=\"_blank\">"
""
+ " alt=\"RSS\" title=\"RSS\""
+ " class=\"ICON16x16\" />"
""
"",
Gbl.Prefs.IconsURL);
@@ -520,19 +521,22 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
case Not_ACTIVE_NOTICE:
fprintf (Gbl.F.Out,""
""
+ " alt=\"%s\" title=\"%s\" class=\"ICON16x16\" />"
"",
Txt_NOTICE_Active_SINGULAR,
Gbl.Prefs.IconsURL,
+ Txt_NOTICE_Active_SINGULAR,
Txt_NOTICE_Active_SINGULAR);
break;
case Not_OBSOLETE_NOTICE:
fprintf (Gbl.F.Out,""
""
+ " alt=\"%s\" title=\"%s\""
+ " class=\"ICON16x16\" />"
"",
Txt_NOTICE_Obsolete_SINGULAR,
Gbl.Prefs.IconsURL,
+ Txt_NOTICE_Obsolete_SINGULAR,
Txt_NOTICE_Obsolete_SINGULAR);
break;
}
@@ -568,9 +572,11 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
Not_PutHiddenParamNotCod (NotCod);
Act_LinkFormSubmit (Txt_See_full_notice,The_ClassFormul[Gbl.Prefs.Theme]);
fprintf (Gbl.F.Out,""
+ " alt=\"%s\" title=\"%s\""
+ " class=\"ICON32x32\" />"
"",
Gbl.Prefs.IconsURL,
+ Txt_See_full_notice,
Txt_See_full_notice);
Act_FormEnd ();
fprintf (Gbl.F.Out,"");
@@ -597,11 +603,12 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
Not_PutHiddenParamNotCod (NotCod);
Act_LinkFormSubmit (Txt_Remove_notice,The_ClassFormul[Gbl.Prefs.Theme]);
fprintf (Gbl.F.Out,""
+ " alt=\"%s\" title=\"%s\""
+ " class=\"ICON16x16\" />"
" %s",
Gbl.Prefs.IconsURL,
Txt_Remove_notice,
- Txt_Remove);
+ Txt_Remove,Txt_Remove_notice);
Act_FormEnd ();
fprintf (Gbl.F.Out,"");
diff --git a/swad_notification.c b/swad_notification.c
index dbbc0c492..616829368 100644
--- a/swad_notification.c
+++ b/swad_notification.c
@@ -441,10 +441,12 @@ void Ntf_ShowMyNotifications (void)
Act_FormEnd ();
}
else
- fprintf (Gbl.F.Out,"",
Gbl.Prefs.IconsURL,
Ntf_Icons[NotifyEvent],
+ Txt_NOTIFY_EVENTS_SINGULAR[NotifyEvent],
Txt_NOTIFY_EVENTS_SINGULAR[NotifyEvent]);
fprintf (Gbl.F.Out," | ");
@@ -1803,6 +1805,7 @@ void Ntf_WriteNumberOfNewNtfs (void)
extern const char *Txt_See_notifications;
extern const char *Txt_notification;
extern const char *Txt_notifications;
+ extern const char *Txt_Notifications;
extern const char *Txt_NOTIF_new_SINGULAR;
extern const char *Txt_NOTIF_new_PLURAL;
unsigned NumUnseenNtfs;
@@ -1831,14 +1834,17 @@ void Ntf_WriteNumberOfNewNtfs (void)
/***** Icon *****/
fprintf (Gbl.F.Out,"
"
" ",
- Gbl.Prefs.PathTheme);
+ Gbl.Prefs.PathTheme,
+ Txt_Notifications,
+ Txt_Notifications);
/***** Number of new notifications *****/
if (NumNewNtfs == 1)
fprintf (Gbl.F.Out,"1 %s",
- Txt_NOTIF_new_SINGULAR);
+ Txt_NOTIF_new_SINGULAR);
else
fprintf (Gbl.F.Out,"%u %s",
NumNewNtfs,
diff --git a/swad_photo.c b/swad_photo.c
index 062d4e9ec..f73db36bd 100644
--- a/swad_photo.c
+++ b/swad_photo.c
@@ -422,6 +422,7 @@ void Pho_ReceivePhotoAndDetectFaces (bool ItsMe,const struct UsrData *UsrDat)
extern const char *Txt_X_faces_marked_in_red_have_been_detected_;
extern const char *Txt_X_faces_have_been_detected_in_front_position_1_Z_;
extern const char *Txt_X_faces_have_been_detected_in_front_position_Y_Z_;
+ extern const char *Txt_Faces_detected;
char PathPhotosPriv[PATH_MAX+1];
char PathPhotosPubl[PATH_MAX+1];
char PathPhotosTmpPubl[PATH_MAX+1];
@@ -634,9 +635,13 @@ void Pho_ReceivePhotoAndDetectFaces (bool ItsMe,const struct UsrData *UsrDat)
sprintf (FileNamePhotoMap,"%s/%s/%s/%s_map.jpg",
Cfg_PATH_SWAD_PUBLIC,Cfg_FOLDER_PHOTO,Cfg_FOLDER_PHOTO_TMP,Gbl.UniqueNameEncrypted);
fprintf (Gbl.F.Out,""
- "
"
+ "
"
"
",
- Cfg_HTTPS_URL_SWAD_PUBLIC,Cfg_FOLDER_PHOTO,Cfg_FOLDER_PHOTO_TMP,Gbl.UniqueNameEncrypted);
+ Cfg_HTTPS_URL_SWAD_PUBLIC,Cfg_FOLDER_PHOTO,Cfg_FOLDER_PHOTO_TMP,
+ Gbl.UniqueNameEncrypted,
+ Txt_Faces_detected,Txt_Faces_detected);
}
/*****************************************************************************/
@@ -726,11 +731,14 @@ static void Pho_UpdatePhoto2 (void)
fprintf (Gbl.F.Out,""
""
" %s"
" | ",
Cfg_HTTPS_URL_SWAD_PUBLIC,Cfg_FOLDER_PHOTO,Cfg_FOLDER_PHOTO_TMP,
Gbl.Usrs.FileNamePhoto,NumPhoto + 1,
+ Txt_PHOTO_PROCESSING_CAPTIONS[NumPhoto],
+ Txt_PHOTO_PROCESSING_CAPTIONS[NumPhoto],
Pho_PHOTO_REAL_WIDTH,Pho_PHOTO_REAL_HEIGHT,
Txt_PHOTO_PROCESSING_CAPTIONS[NumPhoto]);
fprintf (Gbl.F.Out,"
"
@@ -1021,10 +1029,10 @@ void Pho_ShowUsrPhoto (const struct UsrData *UsrDat,const char *PhotoURL,
fprintf (Gbl.F.Out,"%s",PhotoURL);
else
fprintf (Gbl.F.Out,"%s/usr_bl.jpg",Gbl.Prefs.IconsURL);
- fprintf (Gbl.F.Out,"\" class=\"%s\"",ClassPhoto);
- if (SpecialFullName[0] &&
- Act_Actions[Gbl.CurrentAct].BrowserWindow == Act_MAIN_WINDOW) // Only in main window
- fprintf (Gbl.F.Out," title=\"%s\"",SpecialFullName);
+ fprintf (Gbl.F.Out,"\" alt=\"%s\" title=\"%s\""
+ " class=\"%s\"",
+ SpecialFullName,SpecialFullName,
+ ClassPhoto);
/***** Image zoom *****/
if (PutZoomCode)
@@ -2216,7 +2224,9 @@ static void Pho_ShowDegreeAvgPhotoAndStat (struct Degree *Deg,Pho_AvgPhotoSeeOrP
fprintf (Gbl.F.Out,"%s/usr_bl.jpg\""
" style=\"width:%upx; height:%upx;\"",
Gbl.Prefs.IconsURL,PhotoWidth,PhotoHeight);
- fprintf (Gbl.F.Out," alt=\"%s\" />",Deg->FullName);
+ fprintf (Gbl.F.Out," alt=\"%s\" title=\"%s\" />",
+ Deg->ShortName,
+ Deg->FullName);
if (SeeOrPrint == Pho_DEGREES_PRINT)
fprintf (Gbl.F.Out,"");
fprintf (Gbl.F.Out,"
%s
%d %s
%d %s
(%d%%)",
diff --git a/swad_text.c b/swad_text.c
index bc0261e95..1b758502b 100644
--- a/swad_text.c
+++ b/swad_text.c
@@ -10794,6 +10794,27 @@ const char *Txt_X_faces_marked_in_red_have_been_detected_ = // Warning: it is ve
" but the background behind the heads is too dark."; // Necessita de tradução
#endif
+const char *Txt_Faces_detected =
+#if L==0
+ "Rostros detectados"; // Necessita traduccio
+#elif L==1
+ "Faces detected"; // Need Übersetzung
+#elif L==2
+ "Faces detected";
+#elif L==3
+ "Rostros detectados";
+#elif L==4
+ "Faces detected"; // Besoin de traduction
+#elif L==5
+ "Rostros detectados"; // Okoteve traducción
+#elif L==6
+ "Faces detected"; // Bisogno di traduzione
+#elif L==7
+ "Faces detected"; // Potrzebujesz tlumaczenie
+#elif L==8
+ "Faces detected"; // Necessita de tradução
+#endif
+
const char *Txt_Failed_email_confirmation_key =
#if L==0
"Error en la clave de confirmación de correo."; // Necessita traduccio