diff --git a/css/swad19.38.1.css b/css/swad19.39.css similarity index 100% rename from css/swad19.38.1.css rename to css/swad19.39.css diff --git a/js/swad19.35.js b/js/swad19.39.js similarity index 98% rename from js/swad19.35.js rename to js/swad19.39.js index 8ce74ede3..ab88c7351 100644 --- a/js/swad19.35.js +++ b/js/swad19.39.js @@ -4,7 +4,7 @@ SWAD (Shared Workspace At a Distance), is a web platform developed at the University of Granada (Spain), and used to support university teaching. - Copyright (C) 1999-2019 Antonio Ca�as-Vargas + Copyright (C) 1999-2019 Antonio Cañas-Vargas University of Granada (SPAIN) (acanas@ugr.es) This program is free software: you can redistribute it and/or modify @@ -28,6 +28,41 @@ var Gbl_HTMLContent; // Global variable used to call SWAD via AJAX var ActionAJAX; +/*****************************************************************************/ +/************************** Handle match keystrokes **************************/ +/*****************************************************************************/ + +function handleMatchKeys(event) { + switch (event.key) { + case 'PageUp': + case 'ArrowLeft': + case 'ArrowUp': + submitForm('backward'); + break; + case ' ': // Space + submitForm('play_pause'); + break; + case 'PageDown': + case 'ArrowRight': + case 'ArrowDown': + submitForm('forward'); + break; + } +} + +/*****************************************************************************/ +/************************ Submit a form given its id *************************/ +/*****************************************************************************/ + +function submitForm(FormId) { + var Form = document.getElementById(FormId); + + if (Form) + Form.submit(); + + return false; +} + /*****************************************************************************/ /*************** Write a date-time in client local time **********************/ /*****************************************************************************/ diff --git a/swad_action.c b/swad_action.c index 5ae35df05..52d123141 100644 --- a/swad_action.c +++ b/swad_action.c @@ -614,8 +614,7 @@ Assessment: 464. ActNewMch Create a new match showing first question in a new browser tab 465. ActResMch Resume an unfinished match showing current question in a new browser tab 466. ActBckMch Go back when playing a match - 467. ActPlyMch Play current match (go from pause to play) - 468. ActPauMch Pause current match (go from play to pause) + 467. ActPlyPauMch Play/pause current match 469. ActFwdMch Go forward when playing a match 471. ActChgVisResMchQst Change visibility of question results when playing a match 470. ActRefMchTch Refresh current question when playing a match (as teacher) @@ -2163,8 +2162,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActNewMch */{1671,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Mch_CreateNewMatchTch ,Mch_ResumeMatch ,NULL}, /* ActResMch */{1785,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Mch_GetMatchBeingPlayed ,Mch_ResumeMatch ,NULL}, /* ActBckMch */{1790,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Mch_GetMatchBeingPlayed ,Mch_BackMatch ,NULL}, - /* ActPlyMch */{1789,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Mch_GetMatchBeingPlayed ,Mch_PlayMatch ,NULL}, - /* ActPauMch */{1791,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Mch_GetMatchBeingPlayed ,Mch_PauseMatch ,NULL}, + /* ActPlyPauMch */{1789,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Mch_GetMatchBeingPlayed ,Mch_PlayMatch ,NULL}, /* ActFwdMch */{1672,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Mch_GetMatchBeingPlayed ,Mch_ForwardMatch ,NULL}, /* ActChgVisResMchQst*/{1794,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Mch_GetMatchBeingPlayed ,Mch_ToggleVisibilResultsMchQst ,NULL}, /* ActRefMchTch */{1788,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_AJAX_RFRESH,Mch_GetMatchBeingPlayed ,Mch_RefreshMatchTch ,NULL}, @@ -5019,9 +5017,9 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un -1, // #1786 (obsolete action) ActCreMyAcc, // #1787 ActRefMchTch, // #1788 - ActPlyMch, // #1789 + ActPlyPauMch, // #1789 ActBckMch, // #1790 - ActPauMch, // #1791 + -1, // #1791 (obsolete action) -1, // #1792 (obsolete action) -1, // #1793 (obsolete action) ActChgVisResMchQst, // #1794 diff --git a/swad_action.h b/swad_action.h index ca433a423..7e3c0d0c6 100644 --- a/swad_action.h +++ b/swad_action.h @@ -64,7 +64,7 @@ typedef enum typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action -#define Act_NUM_ACTIONS (1 + 4 + 64 + 38 + 12 + 42 + 36 + 19 + 110 + 177 + 437 + 176 + 169 + 16 + 68) +#define Act_NUM_ACTIONS (1 + 4 + 64 + 38 + 12 + 42 + 36 + 19 + 110 + 176 + 437 + 176 + 169 + 16 + 68) #define Act_MAX_ACTION_COD 1801 @@ -613,67 +613,66 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to #define ActNewMch (ActChgCrsTT1stDay + 120) #define ActResMch (ActChgCrsTT1stDay + 121) #define ActBckMch (ActChgCrsTT1stDay + 122) -#define ActPlyMch (ActChgCrsTT1stDay + 123) -#define ActPauMch (ActChgCrsTT1stDay + 124) -#define ActFwdMch (ActChgCrsTT1stDay + 125) -#define ActChgVisResMchQst (ActChgCrsTT1stDay + 126) -#define ActRefMchTch (ActChgCrsTT1stDay + 127) +#define ActPlyPauMch (ActChgCrsTT1stDay + 123) +#define ActFwdMch (ActChgCrsTT1stDay + 124) +#define ActChgVisResMchQst (ActChgCrsTT1stDay + 125) +#define ActRefMchTch (ActChgCrsTT1stDay + 126) -#define ActJoiMch (ActChgCrsTT1stDay + 128) -#define ActAnsMchQstStd (ActChgCrsTT1stDay + 129) -#define ActRefMchStd (ActChgCrsTT1stDay + 130) +#define ActJoiMch (ActChgCrsTT1stDay + 127) +#define ActAnsMchQstStd (ActChgCrsTT1stDay + 128) +#define ActRefMchStd (ActChgCrsTT1stDay + 129) -#define ActReqSeeMyMchRes (ActChgCrsTT1stDay + 131) -#define ActSeeMyMchRes (ActChgCrsTT1stDay + 132) -#define ActSeeOneMchResMe (ActChgCrsTT1stDay + 133) +#define ActReqSeeMyMchRes (ActChgCrsTT1stDay + 130) +#define ActSeeMyMchRes (ActChgCrsTT1stDay + 131) +#define ActSeeOneMchResMe (ActChgCrsTT1stDay + 132) -#define ActReqSeeUsrMchRes (ActChgCrsTT1stDay + 134) -#define ActSeeUsrMchRes (ActChgCrsTT1stDay + 135) -#define ActSeeOneMchResOth (ActChgCrsTT1stDay + 136) -#define ActChgVisResMchUsr (ActChgCrsTT1stDay + 137) +#define ActReqSeeUsrMchRes (ActChgCrsTT1stDay + 133) +#define ActSeeUsrMchRes (ActChgCrsTT1stDay + 134) +#define ActSeeOneMchResOth (ActChgCrsTT1stDay + 135) +#define ActChgVisResMchUsr (ActChgCrsTT1stDay + 136) -#define ActFrmNewGam (ActChgCrsTT1stDay + 138) -#define ActEdiOneGam (ActChgCrsTT1stDay + 139) -#define ActNewGam (ActChgCrsTT1stDay + 140) -#define ActChgGam (ActChgCrsTT1stDay + 141) -#define ActReqRemGam (ActChgCrsTT1stDay + 142) -#define ActRemGam (ActChgCrsTT1stDay + 143) -#define ActHidGam (ActChgCrsTT1stDay + 144) -#define ActShoGam (ActChgCrsTT1stDay + 145) -#define ActAddOneGamQst (ActChgCrsTT1stDay + 146) -#define ActGamLstTstQst (ActChgCrsTT1stDay + 147) -#define ActAddTstQstToGam (ActChgCrsTT1stDay + 148) -#define ActReqRemGamQst (ActChgCrsTT1stDay + 149) -#define ActRemGamQst (ActChgCrsTT1stDay + 150) -#define ActUp_GamQst (ActChgCrsTT1stDay + 151) -#define ActDwnGamQst (ActChgCrsTT1stDay + 152) +#define ActFrmNewGam (ActChgCrsTT1stDay + 137) +#define ActEdiOneGam (ActChgCrsTT1stDay + 138) +#define ActNewGam (ActChgCrsTT1stDay + 139) +#define ActChgGam (ActChgCrsTT1stDay + 140) +#define ActReqRemGam (ActChgCrsTT1stDay + 141) +#define ActRemGam (ActChgCrsTT1stDay + 142) +#define ActHidGam (ActChgCrsTT1stDay + 143) +#define ActShoGam (ActChgCrsTT1stDay + 144) +#define ActAddOneGamQst (ActChgCrsTT1stDay + 145) +#define ActGamLstTstQst (ActChgCrsTT1stDay + 146) +#define ActAddTstQstToGam (ActChgCrsTT1stDay + 147) +#define ActReqRemGamQst (ActChgCrsTT1stDay + 148) +#define ActRemGamQst (ActChgCrsTT1stDay + 149) +#define ActUp_GamQst (ActChgCrsTT1stDay + 150) +#define ActDwnGamQst (ActChgCrsTT1stDay + 151) -#define ActSeeSvy (ActChgCrsTT1stDay + 153) -#define ActAnsSvy (ActChgCrsTT1stDay + 154) -#define ActFrmNewSvy (ActChgCrsTT1stDay + 155) -#define ActEdiOneSvy (ActChgCrsTT1stDay + 156) -#define ActNewSvy (ActChgCrsTT1stDay + 157) -#define ActChgSvy (ActChgCrsTT1stDay + 158) -#define ActReqRemSvy (ActChgCrsTT1stDay + 159) -#define ActRemSvy (ActChgCrsTT1stDay + 160) -#define ActReqRstSvy (ActChgCrsTT1stDay + 161) -#define ActRstSvy (ActChgCrsTT1stDay + 162) -#define ActHidSvy (ActChgCrsTT1stDay + 163) -#define ActShoSvy (ActChgCrsTT1stDay + 164) -#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 165) -#define ActRcvSvyQst (ActChgCrsTT1stDay + 166) -#define ActReqRemSvyQst (ActChgCrsTT1stDay + 167) -#define ActRemSvyQst (ActChgCrsTT1stDay + 168) +#define ActSeeSvy (ActChgCrsTT1stDay + 152) +#define ActAnsSvy (ActChgCrsTT1stDay + 153) +#define ActFrmNewSvy (ActChgCrsTT1stDay + 154) +#define ActEdiOneSvy (ActChgCrsTT1stDay + 155) +#define ActNewSvy (ActChgCrsTT1stDay + 156) +#define ActChgSvy (ActChgCrsTT1stDay + 157) +#define ActReqRemSvy (ActChgCrsTT1stDay + 158) +#define ActRemSvy (ActChgCrsTT1stDay + 159) +#define ActReqRstSvy (ActChgCrsTT1stDay + 160) +#define ActRstSvy (ActChgCrsTT1stDay + 161) +#define ActHidSvy (ActChgCrsTT1stDay + 162) +#define ActShoSvy (ActChgCrsTT1stDay + 163) +#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 164) +#define ActRcvSvyQst (ActChgCrsTT1stDay + 165) +#define ActReqRemSvyQst (ActChgCrsTT1stDay + 166) +#define ActRemSvyQst (ActChgCrsTT1stDay + 167) -#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 169) -#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 170) -#define ActEdiExaAnn (ActChgCrsTT1stDay + 171) -#define ActRcvExaAnn (ActChgCrsTT1stDay + 172) -#define ActPrnExaAnn (ActChgCrsTT1stDay + 173) -#define ActReqRemExaAnn (ActChgCrsTT1stDay + 174) -#define ActRemExaAnn (ActChgCrsTT1stDay + 175) -#define ActHidExaAnn (ActChgCrsTT1stDay + 176) -#define ActShoExaAnn (ActChgCrsTT1stDay + 177) +#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 168) +#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 169) +#define ActEdiExaAnn (ActChgCrsTT1stDay + 170) +#define ActRcvExaAnn (ActChgCrsTT1stDay + 171) +#define ActPrnExaAnn (ActChgCrsTT1stDay + 172) +#define ActReqRemExaAnn (ActChgCrsTT1stDay + 173) +#define ActRemExaAnn (ActChgCrsTT1stDay + 174) +#define ActHidExaAnn (ActChgCrsTT1stDay + 175) +#define ActShoExaAnn (ActChgCrsTT1stDay + 176) /*****************************************************************************/ /******************************** Files tab **********************************/ diff --git a/swad_changelog.h b/swad_changelog.h index 9c1d4203a..267c04189 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -487,13 +487,19 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - * En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 19.38.1 (2019-10-17)" -#define CSS_FILE "swad19.38.1.css" -#define JS_FILE "swad19.35.js" +#define Log_PLATFORM_VERSION "SWAD 19.39 (2019-10-17)" +#define CSS_FILE "swad19.39.css" +#define JS_FILE "swad19.39.js" /* // TODO: Perico: poner un candado de bloqueo de creación/edición de proyectos (por ejemplo en asignaturas obsoletas) // TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.) + Version 19.39: Oct 17, 2019 Keyboard/presenter is allowed for playing matches. (245657 lines) + 2 changes necessary in database: +UPDATE actions SET Obsolete='Y' WHERE ActCod=1791; +UPDATE actions SET Txt='Lugar/pausar partida' WHERE ActCod='1789' AND Language='es'; + + Version 19.38.2: Oct 17, 2019 Some CSS styles converted to CSS classes. (? lines) Version 19.38.1: Oct 17, 2019 Some CSS styles converted to CSS classes. (245636 lines) Version 19.38: Oct 17, 2019 Filter to select faulty/faltless projects. (245624 lines) Version 19.37: Oct 16, 2019 New filter to select faulty/faltless projects. Not yet filtered. (245543 lines) diff --git a/swad_firewall.c b/swad_firewall.c index 40707ad0d..b47bf0e99 100644 --- a/swad_firewall.c +++ b/swad_firewall.c @@ -44,7 +44,7 @@ extern struct Globals Gbl; should be large enough to prevent an IP from being banned due to automatic refresh when the user is viewing the last clicks. */ #define Fw_CHECK_INTERVAL ((time_t)(10UL)) // Check clicks in the last 10 seconds -#define Fw_MAX_CLICKS_IN_INTERVAL 50 // Maximum of 50 clicks allowed in 10 seconds +#define Fw_MAX_CLICKS_IN_INTERVAL 100 // Maximum of 100 clicks allowed in 10 seconds #define Fw_TIME_BANNED ((time_t)(60UL*60UL)) // Ban IP for 1 hour diff --git a/swad_layout.c b/swad_layout.c index 52dcd53ec..bd799cf13 100644 --- a/swad_layout.c +++ b/swad_layout.c @@ -703,8 +703,7 @@ static void Lay_WriteScriptInit (void) case ActNewMch: case ActResMch: case ActBckMch: - case ActPlyMch: - case ActPauMch: + case ActPlyPauMch: case ActFwdMch: case ActChgVisResMchQst: RefreshMatchTch = true; @@ -763,6 +762,7 @@ static void Lay_WriteScriptParamsAJAX (void) fprintf (Gbl.F.Out,"