diff --git a/css/swad19.145.5.css b/css/swad19.146.css similarity index 98% rename from css/swad19.145.5.css rename to css/swad19.146.css index ca9f32e0..9777dfa4 100644 --- a/css/swad19.145.5.css +++ b/css/swad19.146.css @@ -333,7 +333,7 @@ a:hover /* Default ==> underlined */ } #current_day { - color:#606060; + color:#404040; margin:2px 0 -2px 0; font-size:20pt; font-weight:bold; @@ -341,12 +341,12 @@ a:hover /* Default ==> underlined */ } .CURRENT_DAY { - color:#606060; + color:#404040; } #current_time { border-radius:0 0 2px 2px; - color:#606060; + color:#404040; font-size:12pt; font-weight:bold; } @@ -1118,14 +1118,14 @@ a:hover /* Default ==> underlined */ .MENU_TXT_PINK {color:#63474e;} /****************** Title of current action in main block ********************/ -.TITLE_ACTION_WHITE {color:#606060; font-size:20pt;} +.TITLE_ACTION_WHITE {color:#404040; font-size:20pt;} .TITLE_ACTION_GREY {color:#606060; font-size:20pt;} .TITLE_ACTION_PURPLE {color:#573c4d; font-size:20pt;} .TITLE_ACTION_BLUE {color:#4D88A1; font-size:20pt;} .TITLE_ACTION_YELLOW {color:#7c4d2a; font-size:20pt;} .TITLE_ACTION_PINK {color:#63474e; font-size:20pt;} -.SUBTITLE_ACTION_WHITE {color:#606060; font-size:12pt;} +.SUBTITLE_ACTION_WHITE {color:#404040; font-size:12pt;} .SUBTITLE_ACTION_GREY {color:#606060; font-size:12pt;} .SUBTITLE_ACTION_PURPLE {color:#573c4d; font-size:12pt;} .SUBTITLE_ACTION_BLUE {color:#4D88A1; font-size:12pt;} @@ -1987,7 +1987,7 @@ a:hover img.CENTRE_PHOTO_SHOW } .FRAME_TITLE_BIG { - color:#606060; + color:#404040; font-size:22pt; } .FRAME_TITLE_SMALL @@ -2383,9 +2383,9 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} .T2 {color:#202020; font-size:13pt;} .T3 {color:#202020; font-size:12pt;} -.DAT {color:#606060; font-size:13pt;} -.DAT_NOBR {color:#606060; font-size:13pt; white-space:nowrap;} -.DAT_BOLD {color:#606060; font-size:13pt; font-weight:bold;} +.DAT {color:#404040; font-size:13pt;} +.DAT_NOBR {color:#404040; font-size:13pt; white-space:nowrap;} +.DAT_BOLD {color:#404040; font-size:13pt; font-weight:bold;} .DAT_GREEN {color:darkgreen; font-size:13pt;} .DAT_RED {color:darkred; font-size:13pt;} .DAT_LIGHT {color:#A0A0A0; font-size:13pt;} @@ -2402,9 +2402,9 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} border-width:1px; } -.DAT_SMALL {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#606060; font-size:12pt;} +.DAT_SMALL {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#404040; font-size:12pt;} .DAT_SMALL_LIGHT {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#A0A0A0; font-size:12pt;} -.DAT_SMALL_NOBR {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#606060; font-size:12pt; white-space:nowrap;} +.DAT_SMALL_NOBR {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#404040; font-size:12pt; white-space:nowrap;} .DAT_SMALL_N {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:black; font-size:12pt;} .DAT_SMALL_NOBR_N {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:black; font-size:12pt; white-space:nowrap;} @@ -2531,13 +2531,13 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} /******************************** Class photo ********************************/ .CLASSPHOTO_TITLE { - color:#606060; + color:#404040; font-family:Georgia,"DejaVu LGC Serif","Bitstream Vera Serif",serif; font-size:13pt; } .CLASSPHOTO { - color:#606060; + color:#404040; font-size:10pt; line-height:110%; white-space:nowrap; @@ -2738,6 +2738,14 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} } /********************************** Matches **********************************/ +.MCH_BG + { + background-image:url("/swad/icon/bg.jpg"); + background-size:cover; + background-repeat:no-repeat; + height:100%; + background-color:white; + } .MCH_CONT { box-sizing:border-box; @@ -2745,38 +2753,52 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} margin:2%; width:96%; } -.MCH_LEFT +.MCH_LEFT_TCH { box-sizing:border-box; float:left; - width:25%; + width:20%; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } -.MCH_RIGHT +.MCH_LEFT_STD + { + box-sizing:border-box; + float:left; + width:40%; + white-space:nowrap; + overflow:hidden; + text-overflow:ellipsis; + } +.MCH_RIGHT_TCH { box-sizing:border-box; display:table; float:left; - width:75%; + width:80%; + } +.MCH_RIGHT_STD + { + box-sizing:border-box; + display:table; + float:left; + width:60%; } .MCH_TOP { box-sizing:border-box; width:100%; - height:48px; - color:#808080; - font-size:14pt; + height:64px; + color:#404040; + font-size:16pt; font-weight:bold; - text-align:center; text-overflow:ellipsis; } .MCH_BOTTOM { box-sizing:border-box; width:100%; - padding:0 12px; } .MCH_REFRESHABLE_TEACHER @@ -2789,15 +2811,15 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} } .MCH_NUM_QST { - color:#808080; - font-size:28pt; + color:#404040; + font-size:32pt; font-weight:bold; text-align:center; vertical-align:top; } .MCH_TIME_QST { - color:#808080; + color:#404040; font-size:16pt; font-weight:bold; text-align:center; @@ -2812,7 +2834,7 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} { text-align:center; padding:8pt 0; - color:#808080; + color:#404040; font-size:16pt; } @@ -2852,7 +2874,7 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} { box-sizing:border-box; display:inline-block; - font-size:28pt; + font-size:32pt; font-weight:bold; padding:2px; text-align:center; @@ -2899,7 +2921,7 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} { color:#202020; font-size:24pt; - padding-bottom:12pt; + padding-bottom:24pt; } .MCH_TCH_ANS { @@ -2910,12 +2932,13 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} .MCH_WAIT_CONT { box-sizing:border-box; + margin-top:5%; text-align:center; } .MCH_WAIT_IMG { box-sizing:border-box; - width:25%; + width:100px; } .MCH_SCO_SCO @@ -2973,7 +2996,7 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} { box-sizing:border-box; width:64px; - margin:8px; + margin:0 16px; padding:8px; border-radius:2px; border-width:1px; @@ -2984,6 +3007,29 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} line-height:normal; white-space:nowrap; } + +.MCH_NUM_COL_OFF + { + display:table-cell; + box-sizing:border-box; + padding:6px; + text-align:center; + vertical-align:middle; + border:solid 1px; + border-color:transparent; + } +.MCH_NUM_COL_ON + { + display:table-cell; + box-sizing:border-box; + padding:6px; + text-align:center; + vertical-align:middle; + border:solid 1px; + border-color:#404040; + background-color:rgba(0,0,0,0.1); + } + .MCH_STD_CELL { text-align:center; @@ -3020,14 +3066,14 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} .MCH_RESULT { padding:10px 0; - color:#606060; + color:#404040; font-size:16pt; text-align:left; vertical-align:top; } .MCH_RES_TR { - height:24px; + height:10px; } .MCH_RES_CORRECT { @@ -3042,7 +3088,6 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} .MCH_RES_VOID { width:1%; - background:white; } .BT_A {background-color:#e21c3d; border-color:#a9152d;} /* red */ @@ -3172,7 +3217,7 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} { font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; font-size:11pt; - color:#606060; + color:#404040; } .LOG_R { diff --git a/icon/Spin-1s-200px.gif b/icon/Spin-1s-200px.gif new file mode 100644 index 00000000..5663e9a4 Binary files /dev/null and b/icon/Spin-1s-200px.gif differ diff --git a/icon/bg.jpg b/icon/bg.jpg new file mode 100644 index 00000000..483d8282 Binary files /dev/null and b/icon/bg.jpg differ diff --git a/swad_HTML.c b/swad_HTML.c index 10e12a90..26b197c7 100644 --- a/swad_HTML.c +++ b/swad_HTML.c @@ -1336,7 +1336,7 @@ void HTM_INPUT_RADIO (const char *Name,bool SubmitOnClick, HTM_Txt (" />"); } -void HTM_INPUT_CHECKBOX (const char *Name,bool SubmitOnChange, +void HTM_INPUT_CHECKBOX (const char *Name,HTM_SubmitOnChange_t SubmitOnChange, const char *fmt,...) { va_list ap; @@ -1362,7 +1362,7 @@ void HTM_INPUT_CHECKBOX (const char *Name,bool SubmitOnChange, } } - if (SubmitOnChange) + if (SubmitOnChange == HTM_SUBMIT_ON_CHANGE) HTM_TxtF (" onchange=\"document.getElementById('%s').submit();return false;\"", Gbl.Form.Id); diff --git a/swad_HTML.h b/swad_HTML.h index 023773b2..8fc36092 100644 --- a/swad_HTML.h +++ b/swad_HTML.h @@ -44,6 +44,12 @@ typedef enum HTM_Type_STRING, } HTM_Type_t; +typedef enum + { + HTM_DONT_SUBMIT_ON_CHANGE, + HTM_SUBMIT_ON_CHANGE, + } HTM_SubmitOnChange_t; + /*****************************************************************************/ /****************************** Public prototypes ****************************/ /*****************************************************************************/ @@ -138,7 +144,7 @@ void HTM_INPUT_FLOAT (const char *Name,double Min,double Max,double Step,double const char *fmt,...); void HTM_INPUT_RADIO (const char *Name,bool SubmitOnClick, const char *fmt,...); -void HTM_INPUT_CHECKBOX (const char *Name,bool SubmitOnChange, +void HTM_INPUT_CHECKBOX (const char *Name,HTM_SubmitOnChange_t SubmitOnChange, const char *fmt,...); void HTM_BUTTON_OnMouseDown_Begin (const char *Title,const char *Class); diff --git a/swad_assignment.c b/swad_assignment.c index 9a29630b..66896c91 100644 --- a/swad_assignment.c +++ b/swad_assignment.c @@ -1270,7 +1270,7 @@ static void Asg_ShowLstGrpsToEditAssignment (long AsgCod) HTM_TD_Begin ("colspan=\"7\" class=\"DAT LM\""); HTM_LABEL_Begin (NULL); - HTM_INPUT_CHECKBOX ("WholeCrs",false, + HTM_INPUT_CHECKBOX ("WholeCrs",HTM_DONT_SUBMIT_ON_CHANGE, "id=\"WholeCrs\" value=\"Y\"%s" " onclick=\"uncheckChildren(this,'GrpCods')\"", Asg_CheckIfAsgIsAssociatedToGrps (AsgCod) ? "" : " checked=\"checked\""); diff --git a/swad_attendance.c b/swad_attendance.c index d5282786..6f3e7009 100644 --- a/swad_attendance.c +++ b/swad_attendance.c @@ -1178,7 +1178,7 @@ static void Att_ShowLstGrpsToEditAttEvent (long AttCod) HTM_TD_Begin ("colspan=\"7\" class=\"DAT LM\""); HTM_LABEL_Begin (NULL); - HTM_INPUT_CHECKBOX ("WholeCrs",false, + HTM_INPUT_CHECKBOX ("WholeCrs",HTM_DONT_SUBMIT_ON_CHANGE, "id=\"WholeCrs\" value=\"Y\"%s" " onclick=\"uncheckChildren(this,'GrpCods')\"", Att_CheckIfAttEventIsAssociatedToGrps (AttCod) ? "" : " checked=\"checked\""); @@ -2049,7 +2049,7 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr, /***** Checkbox to select user *****/ HTM_TD_Begin ("class=\"CT COLOR%u\"",Gbl.RowEvenOdd); - HTM_INPUT_CHECKBOX ("UsrCodStd",false, + HTM_INPUT_CHECKBOX ("UsrCodStd",HTM_DONT_SUBMIT_ON_CHANGE, "id=\"Std%u\" value=\"%s\"%s%s", NumUsr,UsrDat->EncryptedUsrCod, Present ? " checked=\"checked\"" : "", @@ -3045,7 +3045,7 @@ static void Att_ListEventsToSelect (void) HTM_TR_Begin (NULL); HTM_TD_Begin ("class=\"DAT CT COLOR%u\"",Gbl.RowEvenOdd); - HTM_INPUT_CHECKBOX ("AttCods",false, + HTM_INPUT_CHECKBOX ("AttCods",HTM_DONT_SUBMIT_ON_CHANGE, "id=\"Att%u\" value=\"%ld\"%s", NumAttEvent,Gbl.AttEvents.Lst[NumAttEvent].AttCod, Gbl.AttEvents.Lst[NumAttEvent].Selected ? " checked=\"checked\"" : ""); diff --git a/swad_changelog.h b/swad_changelog.h index c3d67b29..6b9ddb0d 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -497,8 +497,8 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - * En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 19.145.6 (2020-03-11)" -#define CSS_FILE "swad19.145.5.css" +#define Log_PLATFORM_VERSION "SWAD 19.146 (2020-03-12)" +#define CSS_FILE "swad19.146.css" #define JS_FILE "swad19.91.1.js" /* * @@ -523,7 +523,15 @@ Param // TODO: Miguel Damas: al principio de los exámenes tendría que poner cuánto resta cada pregunta // TODO: Si el alumno ha marcado "Permitir que los profesores...", entonces pedir confirmación al pulsar el botón azul, para evitar que se envíe por error antes de tiempo // TODO: Oresti Baños: cambiar ojos por candados en descriptores para prohibir/permitir y dejar los ojos para poder elegir descriptores +// TODO: Instalar la última versión de MathJax de https://www.jsdelivr.com/package/npm/mathjax y comprobar que funciona bien con pandoc + Version 19.146: Mar 12, 2020 Background and changes in layout of matches. (282484 lines) + Copy the following background image to icon public directory: +sudo cp icon/bg.jpg /var/www/html/swad/icon/ + Copy the following icon to icon public directory: +sudo cp icon/Spin-1s-200px.gif /var/www/html/swad/icon/ + + Version 19.145.7: Mar 11, 2020 Code refactoring related to HTML. (282418 lines) Version 19.145.6: Mar 11, 2020 By default, teachers are allowed to see test exams. Suggested by Miguel Damas Hermoso. (282391 lines) Version 19.145.5: Mar 10, 2020 Changed icon to comment in timeline. (282390 lines) 1 change necessary in database: diff --git a/swad_cookie.c b/swad_cookie.c index b18454ef..d9521dcb 100644 --- a/swad_cookie.c +++ b/swad_cookie.c @@ -81,7 +81,7 @@ void Coo_EditMyPrefsOnCookies (void) "DAT"); /* Check box */ HTM_LABEL_Begin (NULL); - HTM_INPUT_CHECKBOX ("cookies",true, + HTM_INPUT_CHECKBOX ("cookies",HTM_SUBMIT_ON_CHANGE, "value=\"Y\"%s", Gbl.Usrs.Me.UsrDat.Prefs.AcceptThirdPartyCookies ? " checked=\"checked\"" : ""); HTM_Txt (Txt_Accept_third_party_cookies_to_view_multimedia_content_from_other_websites); diff --git a/swad_group.c b/swad_group.c index 1f9cc271..2ea1b816 100644 --- a/swad_group.c +++ b/swad_group.c @@ -453,7 +453,7 @@ static void Grp_PutCheckboxAllGrps (Grp_WhichGroups_t GroupsSelectableByStdsOrNE HTM_DIV_Begin ("class=\"CONTEXT_OPT\""); HTM_LABEL_Begin ("class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]); - HTM_INPUT_CHECKBOX ("AllGroups",false, + HTM_INPUT_CHECKBOX ("AllGroups",HTM_DONT_SUBMIT_ON_CHANGE, "value=\"Y\"%s", ICanSelUnselGroup ? (Gbl.Usrs.ClassPhoto.AllGroups ? " checked=\"checked\"" " onclick=\"togglecheckChildren(this,'GrpCods')\"" : @@ -1713,7 +1713,7 @@ void Grp_ListGrpsToEditAsgAttSvyMch (struct GroupType *GrpTyp,long Cod, HTM_TD_Begin ("class=\"LM LIGHT_BLUE\""); else HTM_TD_Begin ("class=\"LM\""); - HTM_INPUT_CHECKBOX ("GrpCods",false, + HTM_INPUT_CHECKBOX ("GrpCods",HTM_DONT_SUBMIT_ON_CHANGE, "id=\"Grp%ld\" value=\"%ld\"%s%s" " onclick=\"uncheckParent(this,'WholeCrs')\"", Grp->GrpCod,Grp->GrpCod, @@ -2029,7 +2029,7 @@ static bool Grp_ListGrpsForChangeMySelection (struct GroupType *GrpTyp, } else /* Put a checkbox item */ - HTM_INPUT_CHECKBOX (StrGrpCod,false, + HTM_INPUT_CHECKBOX (StrGrpCod,HTM_DONT_SUBMIT_ON_CHANGE, "id=\"Grp%ld\" value=\"%ld\"%s%s", Grp->GrpCod,Grp->GrpCod, IBelongToThisGroup ? " checked=\"checked\"" : "", @@ -2129,7 +2129,7 @@ static void Grp_ListGrpsToAddOrRemUsrs (struct GroupType *GrpTyp,long UsrCod) snprintf (StrGrpCod,sizeof (StrGrpCod), "GrpCod%ld", GrpTyp->GrpTypCod); - HTM_INPUT_CHECKBOX (StrGrpCod,false, + HTM_INPUT_CHECKBOX (StrGrpCod,HTM_DONT_SUBMIT_ON_CHANGE, "id=\"Grp%ld\" value=\"%ld\"%s", Grp->GrpCod,Grp->GrpCod, UsrBelongsToThisGroup ? " checked=\"checked\"" : ""); // I can not register @@ -2227,7 +2227,7 @@ static void Grp_ListGrpsForMultipleSelection (struct GroupType *GrpTyp, HTM_TD_Begin ("class=\"LM LIGHT_BLUE\""); else HTM_TD_Begin ("class=\"LM\""); - HTM_INPUT_CHECKBOX ("GrpCods",false, + HTM_INPUT_CHECKBOX ("GrpCods",HTM_DONT_SUBMIT_ON_CHANGE, "id=\"Grp%ld\" value=\"%ld\"%s%s", Grp->GrpCod,Grp->GrpCod, Checked ? " checked=\"checked\"" : "", @@ -2267,12 +2267,12 @@ static void Grp_ListGrpsForMultipleSelection (struct GroupType *GrpTyp, HTM_TR_Begin (NULL); HTM_TD_Begin ("class=\"LM\""); - HTM_INPUT_CHECKBOX ("GrpCods",false, + HTM_INPUT_CHECKBOX ("GrpCods",HTM_DONT_SUBMIT_ON_CHANGE, "id=\"Grp%ld\" value=\"%ld\"%s" " onclick=\"checkParent(this,'AllGroups')\"", -GrpTyp->GrpTypCod,-GrpTyp->GrpTypCod, ICanSelUnselGroup ? (Checked ? " checked=\"checked\"" : "") : - " disabled=\"disabled\""); + " disabled=\"disabled\""); HTM_TD_End (); /* Column closed/open */ diff --git a/swad_indicator.c b/swad_indicator.c index 1e188cca..5909b4c9 100644 --- a/swad_indicator.c +++ b/swad_indicator.c @@ -656,7 +656,7 @@ static void Ind_ShowNumCoursesWithIndicators (unsigned NumCrssWithIndicatorYes[1 if (PutForm) { HTM_TD_Begin ("class=\"%s\"",Class); - HTM_INPUT_CHECKBOX ("Indicators",true, + HTM_INPUT_CHECKBOX ("Indicators",HTM_SUBMIT_ON_CHANGE, "id=\"Indicators%u\" value=\"%u\"%s", Ind,Ind, Gbl.Stat.IndicatorsSelected[Ind] ? " checked=\"checked\"" : ""); diff --git a/swad_layout.c b/swad_layout.c index 5adf5ab2..0744724c 100644 --- a/swad_layout.c +++ b/swad_layout.c @@ -274,8 +274,24 @@ void Lay_WriteStartOfPage (void) break; case Act_BRW_NEW_TAB: case Act_BRW_2ND_TAB: - HTM_Txt ("\n"); - Gbl.Layout.WritingHTMLStart = false; + HTM_Txt ("\n"); + Gbl.Layout.WritingHTMLStart = false; Gbl.Layout.HTMLStartWritten = Gbl.Layout.DivsEndWritten = true; return; @@ -1258,10 +1274,12 @@ void Lay_PutContextualCheckbox (Act_Action_t NextAction, HTM_LABEL_Begin (NULL); /****** Checkbox *****/ - HTM_INPUT_CHECKBOX (CheckboxName,true, + HTM_INPUT_CHECKBOX (CheckboxName,HTM_SUBMIT_ON_CHANGE, "value=\"Y\"%s%s", - Checked ? " checked=\"checked\"" : "", - Disabled ? " disabled=\"disabled\"" : ""); + Checked ? " checked=\"checked\"" : + "", + Disabled ? " disabled=\"disabled\"" : + ""); /***** Text *****/ if (Text) diff --git a/swad_match.c b/swad_match.c index a2ae0a33..6f8ab6f6 100644 --- a/swad_match.c +++ b/swad_match.c @@ -184,7 +184,9 @@ static void Mch_PutMatchControlButtons (const struct Match *Match); static void Mch_ShowFormColumns (const struct Match *Match); static void Mch_PutParamNumCols (unsigned NumCols); -static void Mch_ShowMatchTitle (const struct Match *Match); +static void Mch_ShowMatchTitleTch (const struct Match *Match); +static void Mch_ShowMatchTitleStd (const struct Match *Match); + static void Mch_PutCheckboxResult (const struct Match *Match); static void Mch_PutIfAnswered (const struct Match *Match,bool Answered); static void Mch_PutIconToRemoveMyAnswer (const struct Match *Match); @@ -221,9 +223,7 @@ static void Mch_RemoveMyAnswerToMatchQuestion (const struct Match *Match); static double Mch_ComputeScore (unsigned NumQsts); -static unsigned Mch_GetNumUsrsWhoHaveChosenAns (long MchCod,unsigned QstInd,unsigned AnsInd); static unsigned Mch_GetNumUsrsWhoHaveAnswerMch (long MchCod); -static void Mch_DrawBarNumUsrs (unsigned NumRespondersAns,unsigned NumRespondersQst,bool Correct); static long Mch_GetCurrentMchCod (void); @@ -1305,7 +1305,7 @@ static void Mch_ShowLstGrpsToCreateMatch (void) HTM_TD_Begin ("colspan=\"7\" class=\"DAT LM\""); HTM_LABEL_Begin (NULL); - HTM_INPUT_CHECKBOX ("WholeCrs",true, + HTM_INPUT_CHECKBOX ("WholeCrs",HTM_SUBMIT_ON_CHANGE, "id=\"WholeCrs\" value=\"Y\" checked=\"checked\"" " onclick=\"uncheckChildren(this,'GrpCods')\""); HTM_TxtF ("%s %s",Txt_The_whole_course,Gbl.Hierarchy.Crs.ShrtName); @@ -1656,7 +1656,7 @@ static void Mch_UpdateMatchStatusInDB (const struct Match *Match) /***** Update end time only if match is currently being played *****/ if (Match->Status.Playing) // Match is being played { - if (asprintf (&MchSubQuery,"mch_matches.EndTime=NOW(),") < 0) // Background + if (asprintf (&MchSubQuery,"mch_matches.EndTime=NOW(),") < 0) Lay_NotEnoughMemoryExit (); } else // Match is paused, not being played @@ -2189,7 +2189,7 @@ bool Mch_CheckIfICanPlayThisMatchBasedOnGrps (const struct Match *Match) static void Mch_ShowLeftColumnTch (struct Match *Match) { /***** Start left container *****/ - HTM_DIV_Begin ("class=\"MCH_LEFT\""); + HTM_DIV_Begin ("class=\"MCH_LEFT_TCH\""); /***** Refreshable part *****/ HTM_DIV_Begin ("id=\"match_left\" class=\"MCH_REFRESHABLE_TEACHER\""); @@ -2244,7 +2244,7 @@ static void Mch_WriteElapsedTimeInMch (struct Match *Match) { struct Time Time; - HTM_DIV_Begin ("class=\"MCH_TOP\""); + HTM_DIV_Begin ("class=\"MCH_TOP CT\""); /***** Get elapsed time in match *****/ Mch_GetElapsedTimeInMatch (Match,&Time); @@ -2463,10 +2463,10 @@ static void Mch_PutFormCountdown (struct Match *Match,long Seconds,const char *C static void Mch_ShowRightColumnTch (const struct Match *Match) { /***** Start right container *****/ - HTM_DIV_Begin ("class=\"MCH_RIGHT\""); + HTM_DIV_Begin ("class=\"MCH_RIGHT_TCH\""); /***** Top row: match title *****/ - Mch_ShowMatchTitle (Match); + Mch_ShowMatchTitleTch (Match); /***** Bottom row: current question and possible answers *****/ if (Match->Status.Showing == Mch_END) // Match over @@ -2488,10 +2488,10 @@ static void Mch_ShowLeftColumnStd (const struct Match *Match, bool Answered = UsrAnswer->NumOpt >= 0; /***** Start left container *****/ - HTM_DIV_Begin ("class=\"MCH_LEFT\""); + HTM_DIV_Begin ("class=\"MCH_LEFT_STD\""); /***** Top *****/ - HTM_DIV_Begin ("class=\"MCH_TOP\""); + HTM_DIV_Begin ("class=\"MCH_TOP CT\""); HTM_DIV_End (); /***** Write number of question *****/ @@ -2529,10 +2529,10 @@ static void Mch_ShowRightColumnStd (struct Match *Match, extern const char *Txt_Please_wait_; /***** Start right container *****/ - HTM_DIV_Begin ("class=\"MCH_RIGHT\""); + HTM_DIV_Begin ("class=\"MCH_RIGHT_STD\""); /***** Top row *****/ - Mch_ShowMatchTitle (Match); + Mch_ShowMatchTitleStd (Match); /***** Bottom row *****/ if (Match->Status.Playing) // Match is being played @@ -2690,8 +2690,8 @@ static void Mch_ShowFormColumns (const struct Match *Match) { /* Begin container for this option */ HTM_DIV_Begin ("class=\"%s\"", - (Match->Status.NumCols == NumCols) ? "PREF_ON" : - "PREF_OFF"); + (Match->Status.NumCols == NumCols) ? "MCH_NUM_COL_ON" : + "MCH_NUM_COL_OFF"); /* Begin form */ Frm_StartForm (ActChgNumColMch); @@ -2837,10 +2837,18 @@ static void Mch_PutIconToRemoveMyAnswer (const struct Match *Match) /***************************** Show match title ******************************/ /*****************************************************************************/ -static void Mch_ShowMatchTitle (const struct Match *Match) +static void Mch_ShowMatchTitleTch (const struct Match *Match) { /***** Match title *****/ - HTM_DIV_Begin ("class=\"MCH_TOP\""); + HTM_DIV_Begin ("class=\"MCH_TOP LT\""); + HTM_Txt (Match->Title); + HTM_DIV_End (); + } + +static void Mch_ShowMatchTitleStd (const struct Match *Match) + { + /***** Match title *****/ + HTM_DIV_Begin ("class=\"MCH_TOP CT\""); HTM_Txt (Match->Title); HTM_DIV_End (); } @@ -3327,7 +3335,7 @@ static void Mch_PutBigButtonClose (void) static void Mch_ShowWaitImage (const char *Txt) { HTM_DIV_Begin ("class=\"MCH_WAIT_CONT\""); - Ico_PutIcon ("wait.gif",Txt,"MCH_WAIT_IMG"); + Ico_PutIcon ("Spin-1s-200px.gif",Txt,"MCH_WAIT_IMG"); HTM_DIV_End (); } @@ -3806,22 +3814,6 @@ static double Mch_ComputeScore (unsigned NumQsts) return TotalScore; } -/*****************************************************************************/ -/*** Get number of users who selected this answer and draw proportional bar **/ -/*****************************************************************************/ - -void Mch_GetAndDrawBarNumUsrsWhoHaveChosenAns (long MchCod,unsigned QstInd,unsigned AnsInd, - unsigned NumRespondersQst,bool Correct) - { - unsigned NumRespondersAns; - - /***** Get number of users who selected this answer *****/ - NumRespondersAns = Mch_GetNumUsrsWhoHaveChosenAns (MchCod,QstInd,AnsInd); - - /***** Show stats of this answer *****/ - Mch_DrawBarNumUsrs (NumRespondersAns,NumRespondersQst,Correct); - } - /*****************************************************************************/ /********** Get number of users who answered a question in a match ***********/ /*****************************************************************************/ @@ -3841,7 +3833,7 @@ unsigned Mch_GetNumUsrsWhoAnsweredQst (long MchCod,unsigned QstInd) /*** Get number of users who have chosen a given answer of a game question ***/ /*****************************************************************************/ -static unsigned Mch_GetNumUsrsWhoHaveChosenAns (long MchCod,unsigned QstInd,unsigned AnsInd) +unsigned Mch_GetNumUsrsWhoHaveChosenAns (long MchCod,unsigned QstInd,unsigned AnsInd) { /***** Get number of users who have chosen an answer of a question from database *****/ @@ -3871,10 +3863,9 @@ static unsigned Mch_GetNumUsrsWhoHaveAnswerMch (long MchCod) /***************** Draw a bar with the percentage of answers *****************/ /*****************************************************************************/ -// #define Mch_MAX_BAR_WIDTH 400 #define Mch_MAX_BAR_WIDTH 100 -static void Mch_DrawBarNumUsrs (unsigned NumRespondersAns,unsigned NumRespondersQst,bool Correct) +void Mch_DrawBarNumUsrs (unsigned NumRespondersAns,unsigned NumRespondersQst,bool Correct) { extern const char *Txt_of_PART_OF_A_TOTAL; unsigned i; @@ -3905,14 +3896,13 @@ static void Mch_DrawBarNumUsrs (unsigned NumRespondersAns,unsigned NumResponders HTM_TABLE_End (); /***** Write the number of users *****/ - if (NumRespondersQst) + if (NumRespondersAns && NumRespondersQst) HTM_TxtF ("%u (%u%% %s %u)", - NumRespondersAns, - (unsigned) ((((double) NumRespondersAns * 100.0) / (double) NumRespondersQst) + 0.5), - Txt_of_PART_OF_A_TOTAL,NumRespondersQst); + NumRespondersAns, + (unsigned) ((((double) NumRespondersAns * 100.0) / (double) NumRespondersQst) + 0.5), + Txt_of_PART_OF_A_TOTAL,NumRespondersQst); else - HTM_TxtF ("0 (0%% %s %u)", - Txt_of_PART_OF_A_TOTAL,NumRespondersQst); + HTM_NBSP (); /***** End container *****/ HTM_DIV_End (); diff --git a/swad_match.h b/swad_match.h index d9f70a5a..2205d662 100644 --- a/swad_match.h +++ b/swad_match.h @@ -130,9 +130,9 @@ void Mch_GetQstAnsFromDB (long MchCod,long UsrCod,unsigned QstInd, struct Mch_UsrAnswer *UsrAnswer); void Mch_ReceiveQuestionAnswer (void); -void Mch_GetAndDrawBarNumUsrsWhoHaveChosenAns (long MchCod,unsigned QstInd,unsigned AnsInd, - unsigned NumRespondersQst,bool Correct); unsigned Mch_GetNumUsrsWhoAnsweredQst (long MchCod,unsigned QstInd); +unsigned Mch_GetNumUsrsWhoHaveChosenAns (long MchCod,unsigned QstInd,unsigned AnsInd); +void Mch_DrawBarNumUsrs (unsigned NumRespondersAns,unsigned NumRespondersQst,bool Correct); void Mch_SetCurrentMchCod (long MchCod); diff --git a/swad_match_result.c b/swad_match_result.c index 944ec917..dd38e19e 100644 --- a/swad_match_result.c +++ b/swad_match_result.c @@ -548,10 +548,11 @@ static void McR_ListGamesToSelect (void) HTM_TR_Begin (NULL); HTM_TD_Begin ("class=\"DAT CT COLOR%u\"",Gbl.RowEvenOdd); - HTM_INPUT_CHECKBOX ("GamCod",false, + HTM_INPUT_CHECKBOX ("GamCod",HTM_DONT_SUBMIT_ON_CHANGE, "id=\"Gam%u\" value=\"%ld\"%s", NumGame,Gbl.Games.Lst[NumGame].GamCod, - Gbl.Games.Lst[NumGame].Selected ? " checked=\"checked\"" : ""); + Gbl.Games.Lst[NumGame].Selected ? " checked=\"checked\"" : + ""); HTM_TD_End (); HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd); diff --git a/swad_message.c b/swad_message.c index 35ac22d7..4510f279 100644 --- a/swad_message.c +++ b/swad_message.c @@ -2705,9 +2705,10 @@ static void Msg_ShowFormToShowOnlyUnreadMessages (void) /***** Put checkbox to select whether to show only unread (received) messages *****/ HTM_LABEL_Begin ("class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]); - HTM_INPUT_CHECKBOX ("OnlyUnreadMsgs",false, + HTM_INPUT_CHECKBOX ("OnlyUnreadMsgs",HTM_DONT_SUBMIT_ON_CHANGE, "value=\"Y\"%s", - Gbl.Msg.ShowOnlyUnreadMsgs ? " checked=\"checked\"" : ""); + Gbl.Msg.ShowOnlyUnreadMsgs ? " checked=\"checked\"" : + ""); HTM_Txt (Txt_only_unread_messages); HTM_LABEL_End (); } diff --git a/swad_notification.c b/swad_notification.c index f16e533c..d9990e83 100644 --- a/swad_notification.c +++ b/swad_notification.c @@ -1928,17 +1928,19 @@ void Ntf_PutFormChangeNotifSentByEMail (void) HTM_TD_End (); HTM_TD_Begin ("class=\"CM\""); - HTM_INPUT_CHECKBOX (Ntf_ParamNotifMeAboutNotifyEvents[NotifyEvent],false, + HTM_INPUT_CHECKBOX (Ntf_ParamNotifMeAboutNotifyEvents[NotifyEvent],HTM_DONT_SUBMIT_ON_CHANGE, "value=\"Y\"%s", (Gbl.Usrs.Me.UsrDat.NtfEvents.CreateNotif & - (1 << NotifyEvent)) ? " checked=\"checked\"" : ""); + (1 << NotifyEvent)) ? " checked=\"checked\"" : + ""); HTM_TD_End (); HTM_TD_Begin ("class=\"CM\""); - HTM_INPUT_CHECKBOX (Ntf_ParamEmailMeAboutNotifyEvents[NotifyEvent],false, + HTM_INPUT_CHECKBOX (Ntf_ParamEmailMeAboutNotifyEvents[NotifyEvent],HTM_DONT_SUBMIT_ON_CHANGE, "value=\"Y\"%s", (Gbl.Usrs.Me.UsrDat.NtfEvents.SendEmail & - (1 << NotifyEvent)) ? " checked=\"checked\"" : ""); + (1 << NotifyEvent)) ? " checked=\"checked\"" : + ""); HTM_TD_End (); HTM_TR_End (); diff --git a/swad_password.c b/swad_password.c index 0d75e237..adce83b6 100644 --- a/swad_password.c +++ b/swad_password.c @@ -852,7 +852,7 @@ void Pwd_AskForConfirmationOnDangerousAction (void) /***** Checkbox *****/ HTM_LABEL_Begin ("class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]); - HTM_INPUT_CHECKBOX ("Consent",false, + HTM_INPUT_CHECKBOX ("Consent",HTM_DONT_SUBMIT_ON_CHANGE, "value=\"Y\""); HTM_Txt (Txt_I_understand_that_this_action_can_not_be_undone); HTM_LABEL_End (); diff --git a/swad_project.c b/swad_project.c index e181752f..b69d25d4 100644 --- a/swad_project.c +++ b/swad_project.c @@ -3917,9 +3917,10 @@ void Prj_ShowFormConfig (void) /* Data */ HTM_TD_Begin ("class=\"LT\""); - HTM_INPUT_CHECKBOX ("Editable",false, + HTM_INPUT_CHECKBOX ("Editable",HTM_DONT_SUBMIT_ON_CHANGE, "id=\"Editable\" value=\"Y\"%s", - Gbl.Prjs.Config.Editable ? " checked=\"checked\"" : ""); + Gbl.Prjs.Config.Editable ? " checked=\"checked\"" : + ""); HTM_Txt (Txt_Editable_by_non_editing_teachers); HTM_TD_End (); diff --git a/swad_role.c b/swad_role.c index f9b11c8d..01568678 100644 --- a/swad_role.c +++ b/swad_role.c @@ -541,7 +541,7 @@ void Rol_ChangeMyRole (void) /*****************************************************************************/ void Rol_WriteSelectorRoles (unsigned RolesAllowed,unsigned RolesSelected, - bool Disabled,bool SendOnChange) + bool Disabled,HTM_SubmitOnChange_t SubmitOnChange) { extern const char *Txt_ROLES_PLURAL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; Rol_Role_t Role; @@ -552,11 +552,13 @@ void Rol_WriteSelectorRoles (unsigned RolesAllowed,unsigned RolesSelected, if ((RolesAllowed & (1 << Role))) { HTM_LABEL_Begin (NULL); - HTM_INPUT_CHECKBOX ("Role",SendOnChange, + HTM_INPUT_CHECKBOX ("Role",SubmitOnChange, "id=\"Role\" value=\"%u\"%s%s", (unsigned) Role, - (RolesSelected & (1 << Role)) ? " checked=\"checked\"" : "", - Disabled ? " disabled=\"disabled\"" : ""); + (RolesSelected & (1 << Role)) ? " checked=\"checked\"" : + "", + Disabled ? " disabled=\"disabled\"" : + ""); HTM_Txt (Txt_ROLES_PLURAL_abc[Role][Usr_SEX_UNKNOWN]); HTM_LABEL_End (); HTM_BR (); diff --git a/swad_role.h b/swad_role.h index 64c0da21..6923bfe1 100644 --- a/swad_role.h +++ b/swad_role.h @@ -27,6 +27,7 @@ /********************************** Headers **********************************/ /*****************************************************************************/ +#include "swad_HTML.h" #include "swad_user.h" /*****************************************************************************/ @@ -56,7 +57,7 @@ void Rol_PutFormToChangeMyRole (const char *ClassSelect); void Rol_ChangeMyRole (void); void Rol_WriteSelectorRoles (unsigned RolesAllowed,unsigned RolesSelected, - bool Disabled,bool SendOnChange); + bool Disabled,HTM_SubmitOnChange_t SubmitOnChange); void Rol_PutHiddenParamRoles (unsigned Roles); unsigned Rol_GetSelectedRoles (void); diff --git a/swad_survey.c b/swad_survey.c index 954bf53d..36e11989 100644 --- a/swad_survey.c +++ b/swad_survey.c @@ -2063,9 +2063,10 @@ static void Svy_ShowLstGrpsToEditSurvey (long SvyCod) HTM_TD_Begin ("colspan=\"7\" class=\"DAT LM\""); HTM_LABEL_Begin (NULL); - HTM_INPUT_CHECKBOX ("WholeCrs",false, + HTM_INPUT_CHECKBOX ("WholeCrs",HTM_DONT_SUBMIT_ON_CHANGE, "id=\"WholeCrs\" value=\"Y\"%s onclick=\"uncheckChildren(this,'GrpCods')\"", - Svy_CheckIfSvyIsAssociatedToGrps (SvyCod) ? "" : " checked=\"checked\""); + Svy_CheckIfSvyIsAssociatedToGrps (SvyCod) ? "" : + " checked=\"checked\""); HTM_TxtF ("%s %s",Txt_The_whole_course,Gbl.Hierarchy.Crs.ShrtName); HTM_LABEL_End (); HTM_TD_End (); @@ -3429,7 +3430,7 @@ static void Svy_WriteAnswersOfAQst (struct Survey *Svy, NumAns, (unsigned) SvyQst->QstCod,NumAnswers); else // SvyQst->AnswerType == Svy_ANS_MULTIPLE_CHOICE - HTM_INPUT_CHECKBOX (StrAns,false, + HTM_INPUT_CHECKBOX (StrAns,HTM_DONT_SUBMIT_ON_CHANGE, "id=\"Ans%010u_%010u\" value=\"%u\"", (unsigned) SvyQst->QstCod,NumAns,NumAns, NumAns); diff --git a/swad_test.c b/swad_test.c index b7d3f4bc..7de65745 100644 --- a/swad_test.c +++ b/swad_test.c @@ -398,7 +398,7 @@ void Tst_ShowNewTest (void) /***** Test result will be saved? *****/ HTM_DIV_Begin ("class=\"CM\""); HTM_LABEL_Begin ("class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]); - HTM_INPUT_CHECKBOX ("AllowTchs",false, // Don't submit on change + HTM_INPUT_CHECKBOX ("AllowTchs",HTM_DONT_SUBMIT_ON_CHANGE, "value=\"Y\"%s", Gbl.Test.AllowTeachers ? " checked=\"checked\"" : ""); @@ -1665,9 +1665,10 @@ static void Tst_ShowFormSelTags (unsigned long NumRows,MYSQL_RES *mysql_res, HTM_TD_Begin ("class=\"LM\""); HTM_LABEL_Begin ("class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]); - HTM_INPUT_CHECKBOX ("AllTags",false, + HTM_INPUT_CHECKBOX ("AllTags",HTM_DONT_SUBMIT_ON_CHANGE, "value=\"Y\"%s onclick=\"togglecheckChildren(this,'ChkTag');\"", - Gbl.Test.Tags.All ? " checked=\"checked\"" : ""); + Gbl.Test.Tags.All ? " checked=\"checked\"" : + ""); HTM_TxtF (" %s",Txt_All_tags); HTM_LABEL_End (); HTM_TD_End (); @@ -1710,10 +1711,11 @@ static void Tst_ShowFormSelTags (unsigned long NumRows,MYSQL_RES *mysql_res, HTM_TD_Begin ("class=\"LM\""); HTM_LABEL_Begin ("class=\"DAT\""); - HTM_INPUT_CHECKBOX ("ChkTag",false, + HTM_INPUT_CHECKBOX ("ChkTag",HTM_DONT_SUBMIT_ON_CHANGE, "value=\"%s\"%s onclick=\"checkParent(this,'AllTags');\"", row[1], - Checked ? " checked=\"checked\"" : ""); + Checked ? " checked=\"checked\"" : + ""); HTM_TxtF (" %s",row[1]); HTM_LABEL_End (); HTM_TD_End (); @@ -2256,9 +2258,10 @@ static void Tst_ShowFormAnswerTypes (void) HTM_TD_Begin ("class=\"LM\""); HTM_LABEL_Begin ("class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]); - HTM_INPUT_CHECKBOX ("AllAnsTypes",false, + HTM_INPUT_CHECKBOX ("AllAnsTypes",HTM_DONT_SUBMIT_ON_CHANGE, "value=\"Y\"%s onclick=\"togglecheckChildren(this,'AnswerType');\"", - Gbl.Test.AllAnsTypes ? " checked=\"checked\"" : ""); + Gbl.Test.AllAnsTypes ? " checked=\"checked\"" : + ""); HTM_TxtF (" %s",Txt_All_types_of_answers); HTM_LABEL_End (); HTM_TD_End (); @@ -2285,10 +2288,11 @@ static void Tst_ShowFormAnswerTypes (void) } HTM_TD_Begin ("class=\"LM\""); HTM_LABEL_Begin ("class=\"DAT\""); - HTM_INPUT_CHECKBOX ("AnswerType",false, + HTM_INPUT_CHECKBOX ("AnswerType",HTM_DONT_SUBMIT_ON_CHANGE, "value=\"%u\"%s onclick=\"checkParent(this,'AllAnsTypes');\"", (unsigned) AnsType, - Checked ? " checked=\"checked\"" : ""); + Checked ? " checked=\"checked\"" : + ""); HTM_TxtF (" %s",Txt_TST_STR_ANSWER_TYPES[AnsType]); HTM_LABEL_End (); HTM_TD_End (); @@ -2873,9 +2877,10 @@ static void Tst_ListOneOrMoreQuestionsForEdition (unsigned long NumRows, if (NumRows == 1) Par_PutHiddenParamChar ("OnlyThisQst",'Y'); // If editing only one question, don't edit others Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Gbl.Test.SelectedOrder); - HTM_INPUT_CHECKBOX ("Shuffle",true, + HTM_INPUT_CHECKBOX ("Shuffle",HTM_SUBMIT_ON_CHANGE, "value=\"Y\"%s", - row[3][0] == 'Y' ? " checked=\"checked\"" : ""); + row[3][0] == 'Y' ? " checked=\"checked\"" : + ""); Frm_EndForm (); } HTM_TD_End (); @@ -3038,7 +3043,7 @@ static void Tst_ListOneOrMoreQuestionsForSelection (unsigned long NumRows, HTM_TD_Begin ("class=\"BT%u\"",Gbl.RowEvenOdd); /* Write checkbox to select the question */ - HTM_INPUT_CHECKBOX ("QstCods",false, + HTM_INPUT_CHECKBOX ("QstCods",HTM_DONT_SUBMIT_ON_CHANGE, "value=\"%ld\"", Gbl.Test.QstCod); @@ -3077,9 +3082,10 @@ static void Tst_ListOneOrMoreQuestionsForSelection (unsigned long NumRows, /* Write if shuffle is enabled (row[3]) */ HTM_TD_Begin ("class=\"DAT_SMALL CT COLOR%u\"",Gbl.RowEvenOdd); - HTM_INPUT_CHECKBOX ("Shuffle",false, + HTM_INPUT_CHECKBOX ("Shuffle",HTM_DONT_SUBMIT_ON_CHANGE, "value=\"Y\"%s disabled=\"disabled\"", - row[3][0] == 'Y' ? " checked=\"checked\"" : ""); + row[3][0] == 'Y' ? " checked=\"checked\"" : + ""); HTM_TD_End (); /* Write stem (row[4]) */ @@ -3671,7 +3677,7 @@ static void Tst_WriteChoiceAnsViewTest (unsigned NumQst,long QstCod,bool Shuffle Index, NumQst,Gbl.Test.Answer.NumOptions); else // Gbl.Test.AnswerType == Tst_ANS_MULTIPLE_CHOICE - HTM_INPUT_CHECKBOX (StrAns,false, + HTM_INPUT_CHECKBOX (StrAns,HTM_DONT_SUBMIT_ON_CHANGE, "id=\"Ans%06u_%u\" value=\"%u\"", NumQst,NumOpt, Index); @@ -4059,11 +4065,12 @@ void Tst_WriteChoiceAnsViewMatch (long MchCod,unsigned QstInd,long QstCod, bool RowIsOpen = false; MYSQL_RES *mysql_res; MYSQL_ROW row; - unsigned NumAnswerersQst; + unsigned NumRespondersQst; + unsigned NumRespondersAns; unsigned Indexes[Tst_MAX_OPTIONS_PER_QUESTION]; // Indexes of all answers of this question /***** Get number of users who have answered this question from database *****/ - NumAnswerersQst = Mch_GetNumUsrsWhoAnsweredQst (MchCod,QstInd); + NumRespondersQst = Mch_GetNumUsrsWhoAnsweredQst (MchCod,QstInd); /***** Get answers of a question from database *****/ Gbl.Test.Answer.NumOptions = Tst_GetAnswersQst (QstCod,&mysql_res,false); @@ -4109,7 +4116,7 @@ void Tst_WriteChoiceAnsViewMatch (long MchCod,unsigned QstInd,long QstCod, Mch_GetIndexes (MchCod,QstInd,Indexes); /***** Begin table *****/ - HTM_TABLE_BeginWidePadding (10); + HTM_TABLE_BeginWidePadding (0); /***** Show options distributed in columns *****/ for (NumOpt = 0; @@ -4141,11 +4148,19 @@ void Tst_WriteChoiceAnsViewMatch (long MchCod,unsigned QstInd,long QstCod, /* Show result (number of users who answered? */ if (ShowResult) - /* Get number of users who selected this answer - and draw proportional bar */ - Mch_GetAndDrawBarNumUsrsWhoHaveChosenAns (MchCod,QstInd,Indexes[NumOpt], - NumAnswerersQst, - Gbl.Test.Answer.Options[Indexes[NumOpt]].Correct); + { + /* Get number of users who selected this answer */ + NumRespondersAns = Mch_GetNumUsrsWhoHaveChosenAns (MchCod,QstInd,Indexes[NumOpt]); + + /* Draw proportional bar for this answer */ + Mch_DrawBarNumUsrs (NumRespondersAns,NumRespondersQst, + Gbl.Test.Answer.Options[Indexes[NumOpt]].Correct); + } + else + /* Draw empty bar for this answer + in order to show the same layout that the one shown with results */ + Mch_DrawBarNumUsrs (0,0, + false); // Not used when length of bar is 0 HTM_TD_End (); @@ -5246,11 +5261,12 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1], HTM_TD_Begin ("class=\"LT\""); HTM_LABEL_Begin ("class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]); - HTM_INPUT_CHECKBOX ("Shuffle",false, + HTM_INPUT_CHECKBOX ("Shuffle",HTM_DONT_SUBMIT_ON_CHANGE, "value=\"Y\"%s%s", Gbl.Test.Shuffle ? " checked=\"checked\"" : "", Gbl.Test.AnswerType != Tst_ANS_UNIQUE_CHOICE && - Gbl.Test.AnswerType != Tst_ANS_MULTIPLE_CHOICE ? " disabled=\"disabled\"" : ""); + Gbl.Test.AnswerType != Tst_ANS_MULTIPLE_CHOICE ? " disabled=\"disabled\"" : + ""); HTM_Txt (Txt_Shuffle); HTM_LABEL_End (); HTM_TD_End (); @@ -5294,11 +5310,12 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1], Gbl.Test.AnswerType == Tst_ANS_UNIQUE_CHOICE ? "" : " disabled=\"disabled\""); /* Checkbox for multiple choice answers */ - HTM_INPUT_CHECKBOX ("AnsMulti",false, + HTM_INPUT_CHECKBOX ("AnsMulti",HTM_DONT_SUBMIT_ON_CHANGE, "value=\"%u\"%s%s", NumOpt, Gbl.Test.Answer.Options[NumOpt].Correct ? " checked=\"checked\"" : "", - Gbl.Test.AnswerType == Tst_ANS_MULTIPLE_CHOICE ? "" : " disabled=\"disabled\""); + Gbl.Test.AnswerType == Tst_ANS_MULTIPLE_CHOICE ? "" : + " disabled=\"disabled\""); HTM_TD_End (); diff --git a/swad_test_visibility.c b/swad_test_visibility.c index f5d36465..3f2171a4 100644 --- a/swad_test_visibility.c +++ b/swad_test_visibility.c @@ -129,7 +129,7 @@ void TsV_PutVisibilityCheckboxes (unsigned SelectedVisibility) { ItemVisible = (SelectedVisibility & (1 << Visibility)) != 0; HTM_LABEL_Begin ("class=\"DAT\""); - HTM_INPUT_CHECKBOX ("Visibility",false, + HTM_INPUT_CHECKBOX ("Visibility",HTM_DONT_SUBMIT_ON_CHANGE, "value=\"%u\"%s", (unsigned) Visibility, ItemVisible ? " checked=\"checked\"" : diff --git a/swad_user.c b/swad_user.c index 2e4a172b..93c8aedf 100644 --- a/swad_user.c +++ b/swad_user.c @@ -6492,7 +6492,7 @@ static void Usr_PutCheckboxToSelectAllUsers (Rol_Role_t Role, if (Usr_NameSelUnsel[Role] && Usr_ParamUsrCod[Role]) { Usr_BuildParamName (&ParamName,Usr_ParamUsrCod[Role],SelectedUsrs->ParamSuffix); - HTM_INPUT_CHECKBOX (Usr_NameSelUnsel[Role],false, + HTM_INPUT_CHECKBOX (Usr_NameSelUnsel[Role],HTM_DONT_SUBMIT_ON_CHANGE, "value=\"\" onclick=\"togglecheckChildren(this,'%s')\"", ParamName); free (ParamName); @@ -6569,10 +6569,11 @@ static void Usr_PutCheckboxToSelectUser (Rol_Role_t Role, /***** Check box *****/ Usr_BuildParamName (&ParamName,Usr_ParamUsrCod[Role],SelectedUsrs->ParamSuffix); - HTM_INPUT_CHECKBOX (ParamName,false, + HTM_INPUT_CHECKBOX (ParamName,HTM_DONT_SUBMIT_ON_CHANGE, "value=\"%s\"%s onclick=\"checkParent(this,'%s')\"", EncryptedUsrCod, - CheckboxChecked ? " checked=\"checked\"" : "", + CheckboxChecked ? " checked=\"checked\"" : + "", Usr_NameSelUnsel[Role]); free (ParamName); } @@ -6593,9 +6594,10 @@ static void Usr_PutCheckboxListWithPhotos (void) /***** Put checkbox to select whether list users with photos *****/ HTM_LABEL_Begin ("class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]); - HTM_INPUT_CHECKBOX ("WithPhotos",true, + HTM_INPUT_CHECKBOX ("WithPhotos",HTM_SUBMIT_ON_CHANGE, "value=\"Y\"%s", - Gbl.Usrs.Listing.WithPhotos ? " checked=\"checked\"" : ""); + Gbl.Usrs.Listing.WithPhotos ? " checked=\"checked\"" : + ""); HTM_Txt (Txt_Display_photos); HTM_LABEL_End (); }