Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
P
pissirSmartHome
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Alfredo Chissotti
pissirSmartHome
Commits
84633312
Commit
84633312
authored
2 years ago
by
Alfredo Chissotti
Browse files
Options
Downloads
Patches
Plain Diff
commenti per scenari e qualche fix
parent
7b3a1c4e
No related branches found
No related tags found
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
webapp/css/style.css
+3
-14
3 additions, 14 deletions
webapp/css/style.css
webapp/index.html
+19
-23
19 additions, 23 deletions
webapp/index.html
webapp/js/scenari.js
+287
-168
287 additions, 168 deletions
webapp/js/scenari.js
webapp/js/toggles.js
+3
-3
3 additions, 3 deletions
webapp/js/toggles.js
with
312 additions
and
208 deletions
webapp/css/style.css
+
3
−
14
View file @
84633312
...
...
@@ -47,18 +47,7 @@
.more-margin-top
{
border-top
:
20px
solid
transparent
;
}
/* center on the screen below any other element */
.center-on-screen
{
position
:
relative
;
top
:
50%
;
left
:
50%
;
transform
:
translate
(
-50%
,
-50%
);
}
/* set to the right of the screen, below any other element */
.right-on-screen
{
position
:
relative
;
top
:
50%
;
right
:
50%
;
/* transform: translate(-50%, -50%); */
/* left: 0; */
.end-10px
{
right
:
10px
;
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
webapp/index.html
+
19
−
23
View file @
84633312
...
...
@@ -38,7 +38,6 @@
<span>
Luci
</span>
</button>
<button
class=
"btn-12 btn btn-dark"
>
<span>
Scenari
</span>
</button>
<button
class=
"btn-12 btn btn-dark"
>
...
...
@@ -114,31 +113,22 @@
</tr> -->
</tbody>
</table>
<!-- <div> -->
<!-- class="d-flex justify-content-around" -->
<span
class=
"invisible"
>
<span
id=
"termina-registrazione-launcher"
data-bs-toggle=
"modal"
data-bs-target=
"#termina-registrazione-modal"
></span>
<span
id=
"registra-modal-launcer"
data-bs-toggle=
"modal"
data-bs-target=
"#scenari-modal"
></span>
</span>
<!-- TODO center button -->
<button
id=
"scenari-registra"
type=
"button"
class=
"btn btn-info center-on-screen"
>
Registra
</button>
<!-- TODO set to the right -->
<div
class=
"right-on-screen"
>
<span>
Antifurto:
</span>
<!-- change btn-danger to btn-success when ON -->
<button
type=
"button"
class=
"btn btn-danger"
id=
"scenari-stato-antifurto"
>
OFF
<div
class=
"position-relative"
>
<button
id=
"scenari-registra"
type=
"button"
class=
"btn btn-info position-absolute top-0 start-50 translate-middle-x"
>
Registra
</button>
<span
id=
"lancia-antifurto-modal"
data-bs-toggle=
"modal"
data-bs-target=
"#antifurto-modal"
></span>
<div
class=
"position-absolute top-0 end-10px"
>
<span>
Antifurto:
</span>
<button
type=
"button"
class=
"btn btn-danger"
id=
"scenari-stato-antifurto"
>
OFF
</button>
</div>
</div>
<!-- </div> -->
</div>
<!-- antifurto -->
<!--
TODO
antifurto -->
<div
id=
"antifurtoContainer"
class=
"invisible"
>
<div
class=
"switch-container no-box-sizing"
>
<div
class=
"toggle-button no-box-sizing"
>
...
...
@@ -192,6 +182,11 @@
</div>
</div>
<!-- scenari modal -->
<span
class=
"invisible"
>
<span
id=
"termina-registrazione-launcher"
data-bs-toggle=
"modal"
data-bs-target=
"#termina-registrazione-modal"
></span>
<span
id=
"registra-modal-launcer"
data-bs-toggle=
"modal"
data-bs-target=
"#scenari-modal"
></span>
</span>
<div
class=
"modal fade"
id=
"scenari-modal"
tabindex=
"-1"
aria-hidden=
"true"
>
<div
class=
"modal-dialog modal-dialog-centered"
>
<div
class=
"modal-content"
>
...
...
@@ -281,6 +276,7 @@
</div>
</div>
<!-- antifurto modal -->
<span
id=
"lancia-antifurto-modal"
data-bs-toggle=
"modal"
data-bs-target=
"#antifurto-modal"
></span>
<div
class=
"modal fade"
id=
"antifurto-modal"
tabindex=
"-1"
aria-hidden=
"true"
>
<div
class=
"modal-dialog modal-dialog-centered"
>
<div
class=
"modal-content"
>
...
...
This diff is collapsed.
Click to expand it.
webapp/js/scenari.js
+
287
−
168
View file @
84633312
...
...
@@ -6,24 +6,37 @@ import { scenariToggleListener } from "./toggles.js";
// JSON templeate for scenario
const
scenarioTemplate
=
{
"
nome
"
:
""
,
"
data
"
:
""
"
data
"
:
""
,
"
id
"
:
""
};
class
Scenari
{
static
scenariContainer
;
/**
* this is the select element where to add all the scenarios
*/
static
addNameHere
;
static
initialized
=
false
;
/**
* contains the toggle that is currently active
*/
static
scenarioAttivoToggle
=
null
;
/**
* counts how many scenarios are available
*/
static
index
=
0
;
constructor
()
{
Scenari
.
scenariContainer
=
document
.
getElementById
(
'
scenariContainer
'
);
Scenari
.
addNameHere
=
document
.
getElementById
(
'
p
'
);
Scenari
.
init
();
Scenari
.
antifurtoListener
();
Scenari
.
antifurto
ModalLauncher
Listener
();
Scenari
.
anyModalListener
();
}
/**
* sets up the listener for the button in the top of the page
* i'm also leaving here what I haven't yet implemented
*/
static
init
()
{
const
scenariBtn
=
document
.
getElementById
(
'
mainButtonContainer
'
).
children
[
1
];
scenariBtn
.
addEventListener
(
'
click
'
,
()
=>
{
...
...
@@ -41,9 +54,11 @@ class Scenari {
// TODO choose how to register the scenario
},
false
);
}
static
antifurtoListener
()
{
// for the antitheft button, before opening a modal, change the text of it then open it
/**
* used for the antitheft button (ON/OFF): before opening the connected modal, change its text then open it
* @see Scenari.antifurtoModalSubmitListener
*/
static
antifurtoModalLauncherListener
()
{
const
antifurtoBtn
=
document
.
getElementById
(
'
scenari-stato-antifurto
'
);
const
okBtn
=
document
.
getElementById
(
'
attiva-antifurto-btn
'
);
const
modalBody
=
document
.
querySelector
(
'
#antifurto-modal .modal-body
'
);
...
...
@@ -65,10 +80,10 @@ class Scenari {
// the antitheft is off
children
[
0
].
innerText
=
"
Stai per abilitare l'antifurto.
"
;
okBtn
.
innerText
=
'
Attiva
'
;
// TODO activate the antitheft in the server
}
// launch the modal
modalLauncher
.
click
();
// related: Scenari.antifurtoModalSubmitListener();
},
false
);
// TODO get antifurto status from server and set it correctly
...
...
@@ -81,8 +96,12 @@ class Scenari {
//
// }, false);
}
static
antifurtoModal
()
{
/**
* listens to the submit button in the modal for the antitheft and activates/deactivates the antitheft
* this modal is shown when the user clicks on the antitheft button
* @see Scenari.antifurtoModalLauncherListener
*/
static
antifurtoModalSubmitListener
()
{
const
antifurtoOkBtn
=
document
.
getElementById
(
'
attiva-antifurto-btn
'
);
const
closeBtn
=
document
.
querySelector
(
'
#antifurto-modal .btn.btn-danger
'
);
const
antifurtoBtn
=
document
.
getElementById
(
'
scenari-stato-antifurto
'
);
...
...
@@ -91,24 +110,50 @@ class Scenari {
closeBtn
.
click
();
// switch the antitheft status button
const
isActivatingAntitheft
=
antifurtoBtn
.
innerText
===
'
OFF
'
;
Scenari
.
toggleAntifurto
(
isActivatingAntitheft
);
// TODO set the status of the antitheft in the server
// eventualmente impostare antifurto nella classe Antifurto
// Scenari.toggleAntifurto(isActivatingAntitheft);
if
(
isActivatingAntitheft
)
Scenari
.
activateRandomScenario
();
else
Scenari
.
deactivateActiveScenario
();
Scenari
.
deactivateActiveScenario
();
//cannot use toggleScenario because I don't have the scenarioID
// TODO set the status of the antitheft in the server
// TODO eventualmente impostare antifurto nella classe Antifurto
},
false
);
}
/**
* sets up various listeners for the modals
* @see Scenari.attivaScenarioModal
* @see Scenari.registraModal
* @see Scenari.antifurtoModalSubmitListener
*/
static
anyModalListener
()
{
//
Scenari.anteprimaModal();
Scenari
.
anteprimaModal
();
Scenari
.
attivaScenarioModal
();
Scenari
.
registraModal
();
Scenari
.
antifurtoModal
();
Scenari
.
antifurtoModal
SubmitListener
();
}
/**
* listens for the submit of the anteprima modal
*/
static
anteprimaModal
()
{
const
anterprimaModal
=
document
.
getElementById
(
'
anteprima-modal
'
);
const
okBtn
=
anterprimaModal
.
querySelector
(
'
#anteprima-scenari-btn
'
);
const
modalBody
=
anterprimaModal
.
querySelector
(
'
.modal-body
'
);
const
closeBtn
=
anterprimaModal
.
querySelector
(
'
.btn.btn-danger
'
);
okBtn
.
addEventListener
(
'
click
'
,
()
=>
{
//activate the scenario
// close the modal
closeBtn
.
click
();
// get the scenario from the modal body
const
scenarioID
=
modalBody
.
querySelector
(
'
.invisible
'
).
innerText
;
// find the scenario's row on the page
// const scenarioRow = scenarioTable.querySelector(`#${scenarioName}`);
// const toggle = scenarioTable.querySelector(`#${scenarioName} .toggle-button`);
Scenari
.
toggleScenario
(
scenarioID
,
okBtn
.
innerText
===
'
Attiva
'
);
},
false
);
}
/**
* listenes for the submit button in the modal for activating/deactivating a scenario when chosen from the toggles
* @see scenariToggleListener
*/
static
attivaScenarioModal
()
{
const
modalBtn
=
document
.
getElementById
(
'
attiva-scenari-btn
'
);
const
closeBtn
=
document
.
querySelector
(
'
#attiva-scenari-modal .btn.btn-danger
'
);
...
...
@@ -118,32 +163,21 @@ class Scenari {
// close the modal by clicking on the close button
closeBtn
.
click
();
// I have to get to the toggle and activate it from the value of the select
const
toggle
=
document
.
querySelector
(
`#
${
Scenari
.
addNameHere
.
value
}
.toggle-button`
);
const
scenarioID
=
Scenari
.
addNameHere
.
value
;
const
toggle
=
document
.
querySelector
(
`#
${
scenarioID
}
.toggle-button`
);
// has the user chosen to activate the scenario?
const
isActivatingNewScenario
=
toggle
!==
Scenari
.
scenarioAttivoToggle
;
if
(
isActivatingNewScenario
)
{
Scenari
.
activateToggleByPreview
(
toggle
);
// TODO activate the new scenario in the server
// set the antitheft status for the on-screen button
antifurtoBtn
.
innerText
=
'
ON
'
;
antifurtoBtn
.
classList
.
remove
(
'
btn-danger
'
);
antifurtoBtn
.
classList
.
add
(
'
btn-success
'
);
}
else
{
//here toggle and Scenari.scenarioAttivoToggle are the same
toggle
.
classList
.
remove
(
'
active
'
);
Scenari
.
scenarioAttivoToggle
=
null
;
// TODO deactivate the scenario in the server
// set the antitheft status for the on-screen button
antifurtoBtn
.
innerText
=
'
OFF
'
;
antifurtoBtn
.
classList
.
remove
(
'
btn-success
'
);
antifurtoBtn
.
classList
.
add
(
'
btn-danger
'
);
}
// const isActivatingNewScenario = ;
// Scenari.toggleToggle(toggle,isActivatingNewScenario);
// Scenari.toggleAntifurto(isActivatingNewScenario);
Scenari
.
toggleScenario
(
scenarioID
,
toggle
!==
Scenari
.
scenarioAttivoToggle
);
},
false
);
}
/**
* this is for the button "registra"/"termina" and the related modals
* @see Scenari.registraBtnListener
* @see Scenari.submitRecordModalListener
* @see Scenari.endRecordingListener
*/
static
registraModal
()
{
const
scenariModal
=
document
.
getElementById
(
'
scenari-modal
'
);
...
...
@@ -173,7 +207,15 @@ class Scenari {
Scenari
.
submitRecordModalListener
(
okBtn
,
registraBtn
,
closeScenariModalBtn
,
endRecordingModalLauncher
);
Scenari
.
endRecordingListener
(
endRecordingForm
,
modalBody
,
htmlForModalBody
,
closeRecordingBtn
,
campoNome
);
}
/**
* listens for the actual "registra"/"termina" button on the page and edits the related modal accordingly
* @param {*} registraBtn the button on the page
* @param {*} okBtn the submit button in the modal
* @param {*} modalBody the body of the modal which is to be changed
* @param {*} htmlForModalBody a string containing the html to be inserted in the modal body
* @param {*} modalLauncher the button which launches the modal
* @see Scenari.registraModal
*/
static
registraBtnListener
(
registraBtn
,
okBtn
,
modalBody
,
htmlForModalBody
,
modalLauncher
)
{
registraBtn
.
addEventListener
(
'
click
'
,
()
=>
{
const
isAboutToRecord
=
registraBtn
.
innerText
===
'
Registra
'
;
...
...
@@ -189,9 +231,17 @@ class Scenari {
}
// launch the modal
modalLauncher
.
click
();
// related: Scenari.submitRecordModalListener
},
false
);
}
/**
* listens for the submit of the modal which is launched when the user clicks on the "registra"/"termina" button
* @param {*} okBtn the submit button in the modal
* @param {*} registraBtn the button on the page (to understand if the user is about to record or not)
* @param {*} closeScenariModalBtn the button used to close the modal
* @param {*} endRecordingModalLauncher the button which launches the next modal (used if the user has finished recording)
* @see Scenari.registraModal
*/
static
submitRecordModalListener
(
okBtn
,
registraBtn
,
closeScenariModalBtn
,
endRecordingModalLauncher
)
{
okBtn
.
addEventListener
(
'
click
'
,
()
=>
{
const
isAboutToRecord
=
registraBtn
.
innerText
===
'
Registra
'
;
...
...
@@ -201,15 +251,30 @@ class Scenari {
closeScenariModalBtn
.
click
();
// get the current time
// const timeBegin = new Date();
// TODO send a note to the server to start/stop recording
// if the user ended the recording, show another modal to ask for the name of the scenario
if
(
!
isAboutToRecord
)
{
// TODO send a note to the server to stop recording
endRecordingModalLauncher
.
click
();
// related: Scenari.endRecordingListener
}
else
{
// TODO send a note to the server to start recording
Scenari
.
deactivateActiveScenario
();
Scenari
.
correctlySetAntifurto
();
}
},
false
);
}
/**
* listens for the submit of the modal which is launched when the user is done recording a scenario
* @param {*} endRecordingForm the form used to submit the name of the scenario
* @param {*} modalBody the body of the modal which is to be changed
* @param {*} htmlForModalBody a string containing the html to be inserted in the modal body
* @param {*} closeRecordingBtn the button used to close the modal
* @param {*} campoNome the input field used to insert the name of the scenario by the user
* @see Scenari.registraModal
* @see Scenari.mostraNuovoScenario
*/
static
endRecordingListener
(
endRecordingForm
,
modalBody
,
htmlForModalBody
,
closeRecordingBtn
,
campoNome
)
{
endRecordingForm
.
addEventListener
(
'
submit
'
,
event
=>
{
event
.
preventDefault
();
...
...
@@ -219,162 +284,219 @@ class Scenari {
closeRecordingBtn
.
click
();
const
name
=
campoNome
.
value
;
const
timeEnd
=
new
Date
();
const
scenario
=
Object
.
assign
({},
scenarioTemplate
);
scenario
.
nome
=
name
;
scenario
.
data
=
timeEnd
.
toLocaleDateString
();
// assign at scenario.data the string YYYY/MM/DD from timeEnd
const
scenario
=
Scenari
.
createScenarioFromName
(
name
)
Scenari
.
mostraNuovoScenario
(
scenario
);
// clear the field for the next use
campoNome
.
value
=
''
;
// TODO send a note to the server to save the scenario
},
false
);
}
/**
* takes care of launching a modal to preview the actions of the chosen scenario; it also listens for the submit of the launched modal
* @param {*} anteprimaBtn the button used to launch the modal
* @param {*} scenario the JSON scenario to be previewed
* @param {*} name the name of the scenario (used to find its row in the table as it's the same name as the row's id)
* @see Scenari.correctlySetToggle
*/
static
anteprimaListener
(
anteprimaBtn
,
scenario
)
{
//HERE fixing now
const
scenarioID
=
scenario
.
id
;
const
anterprimaModal
=
document
.
getElementById
(
'
anteprima-modal
'
);
const
modalBody
=
anterprimaModal
.
querySelector
(
'
.modal-body
'
);
const
modalLauncher
=
document
.
getElementById
(
'
anteprima-modal-launcher
'
);
const
okBtn
=
anterprimaModal
.
querySelector
(
'
#anteprima-scenari-btn
'
);
const
scenarioTable
=
document
.
getElementById
(
'
table-row-scenari
'
);
anteprimaBtn
.
addEventListener
(
'
click
'
,
()
=>
{
// TODO get the scenario's data from the server
static
toggleAntifurto
(
activating
)
{
const
antifurtoBtn
=
document
.
getElementById
(
'
scenari-stato-antifurto
'
);
if
(
activating
)
{
antifurtoBtn
.
innerText
=
'
ON
'
;
antifurtoBtn
.
classList
.
remove
(
'
btn-danger
'
);
antifurtoBtn
.
classList
.
add
(
'
btn-success
'
);
}
else
{
antifurtoBtn
.
innerText
=
'
OFF
'
;
antifurtoBtn
.
classList
.
remove
(
'
btn-success
'
);
antifurtoBtn
.
classList
.
add
(
'
btn-danger
'
);
}
}
static
activateRandomScenario
()
{
const
table
=
document
.
getElementById
(
'
table-row-scenari
'
);
// enable a random scenario
const
randomScenario
=
table
.
children
[
Math
.
floor
(
Math
.
random
()
*
table
.
children
.
length
)];
const
toggle
=
randomScenario
.
querySelector
(
'
.toggle-button
'
);
Scenari
.
activateToggleByPreview
(
toggle
);
// TODO activate the scenario in the server
}
static
deactivateActiveScenario
()
{
Scenari
.
scenarioAttivoToggle
.
classList
.
remove
(
'
active
'
);
Scenari
.
scenarioAttivoToggle
=
null
;
// TODO deactivate the scenario in the server
// show the scenario in the modal (choose how to display it)
modalBody
.
innerHTML
=
`
<p>
${
scenario
.
nome
}
</p>
<p>
${
scenario
.
data
}
</p>
<span class='invisible'>
${
scenarioID
}
</span>`
;
//FIXME remove this test (be sure to keep the last span as is)
// if the scenario is already active, change the okBtn text
// to find if it's active, find the relative toggle
// and check if it's active
// const scenarioRow = scenarioTable.querySelector(`#${name}`);
const
toggle
=
scenarioTable
.
querySelector
(
`#
${
scenarioID
}
.toggle-button`
);
okBtn
.
innerText
=
toggle
.
classList
.
contains
(
'
active
'
)
?
'
Disattiva
'
:
'
Attiva
'
;
// launch the modal
modalLauncher
.
click
();
},
false
);
}
// utilility functions
/**
* fills the table with the scenarios available for the user in the server
* @see Scenari.mostraNuovoScenario
*/
static
fillTable
()
{
// TODO get all scenari from server
//FIXME remove this test
const
natale
=
Object
.
assign
({},
scenarioTemplate
);
natale
.
nome
=
'
Natale
'
;
natale
.
data
=
new
Date
(
2018
,
11
,
25
).
toLocaleDateString
();
const
festaRepublica
=
Object
.
assign
({},
scenarioTemplate
);
festaRepublica
.
nome
=
'
Festa della Repubblica
'
;
festaRepublica
.
data
=
new
Date
(
2018
,
6
,
2
).
toLocaleDateString
();
const
natale
=
Scenari
.
createScenarioFromName
(
'
Natale
'
);
const
festaRepublica
=
Scenari
.
createScenarioFromName
(
'
Festa della Repubblica
'
);
var
scenari
=
[
natale
,
festaRepublica
];
// const scenario = Object.assign({}, scenarioTemplate);
for
(
const
scenario
of
scenari
)
{
Scenari
.
mostraNuovoScenario
(
scenario
)
}
}
/**
* displays the given scenario on the screen (below every other one) and hooks up the listeners; then it increments the index
* @param {*} scenario the JSON scenario to be displayed
* @see Scenari.createScenarioRow
* @see Scenari.anteprimaListener
* @see scenariToggleListener
*/
static
mostraNuovoScenario
(
scenario
)
{
const
{
row
,
name
}
=
Scenari
.
createScenarioRow
(
scenario
);
const
row
=
Scenari
.
createScenarioRow
(
scenario
);
const
scenarioID
=
scenario
.
id
;
const
tableBody
=
document
.
getElementById
(
'
table-row-scenari
'
);
tableBody
.
appendChild
(
row
);
const
anteprimaBtn
=
row
.
querySelector
(
'
.badge.rounded-pill
'
);
Scenari
.
anteprimaListener
(
anteprimaBtn
,
scenario
,
name
);
Scenari
.
anteprimaListener
(
anteprimaBtn
,
scenario
);
// add the name of the scenario as option in the select of the modal
const
option
Name
=
document
.
createElement
(
'
option
'
);
option
Name
.
value
=
name
;
option
Name
.
innerText
=
scenario
.
nome
;
Scenari
.
addNameHere
.
appendChild
(
option
Name
);
const
option
=
document
.
createElement
(
'
option
'
);
option
.
value
=
scenarioID
;
option
.
innerText
=
scenario
.
nome
;
Scenari
.
addNameHere
.
appendChild
(
option
);
const
toggle
=
row
.
querySelector
(
'
.toggle-button
'
);
scenariToggleListener
(
toggle
,
name
);
scenariToggleListener
(
toggle
,
scenarioID
);
Scenari
.
index
++
;
// Scenari.index++;
}
static
anteprimaListener
(
anteprimaBtn
,
scenario
,
name
)
{
const
anterprimaModal
=
document
.
getElementById
(
'
anteprima-modal
'
);
const
modalBody
=
anterprimaModal
.
querySelector
(
'
.modal-body
'
);
const
modalLauncher
=
document
.
getElementById
(
'
anteprima-modal-launcher
'
);
const
okBtn
=
document
.
getElementById
(
'
anteprima-scenari-btn
'
);
const
scenarioTable
=
document
.
getElementById
(
'
table-row-scenari
'
);
anteprimaBtn
.
addEventListener
(
'
click
'
,
()
=>
{
// TODO get the scenario from the server
// TODO show the scenario in the modal
modalBody
.
innerHTML
=
`<p>
${
scenario
.
nome
}
</p>
<p>
${
scenario
.
data
}
</p>
<span class='invisible'>
${
name
}
</span>`
;
//FIXME remove this test
// if the scenario is already active, change the okBtn text
// to find if it's active, find the relative toggle
// and check if it's active
// const scenarioRow = scenarioTable.querySelector(`#${name}`);
const
toggle
=
scenarioTable
.
querySelector
(
`#
${
name
}
.toggle-button`
);
okBtn
.
innerText
=
toggle
.
classList
.
contains
(
'
active
'
)
?
'
Disattiva
'
:
'
Attiva
'
;
// launch the modal
modalLauncher
.
click
();
},
false
);
const
closeBtn
=
anterprimaModal
.
querySelector
(
'
.btn.btn-danger
'
);
okBtn
.
addEventListener
(
'
click
'
,
()
=>
{
// close the modal
closeBtn
.
click
();
// get the scenario from the modal body
const
scenarioName
=
modalBody
.
querySelector
(
'
.invisible
'
).
innerText
;
// find the scenario's row on the page
// const scenarioRow = scenarioTable.querySelector(`#${scenarioName}`);
const
toggle
=
scenarioTable
.
querySelector
(
`#
${
scenarioName
}
.toggle-button`
);
Scenari
.
activateToggleByPreview
(
toggle
,
okBtn
.
innerText
===
'
Attiva
'
);
},
false
);
}
/**
* creates a table entry for the given scenario and returns it
* @param {*} scenario the JSON scenario to be displayed
* @returns {HTMLTableRowElement} the row containing the given scenario
*/
static
createScenarioRow
(
scenario
)
{
const
row
=
document
.
createElement
(
'
tr
'
);
const
name
=
'
scenario-
'
+
Scenari
.
index
;
row
.
id
=
name
row
.
innerHTML
=
`<th scope="row">
${
scenario
.
nome
.
trim
()}
</th>
<td>
<span>
${
scenario
.
data
}
</span>
</td>
<td>
<h5>
<span class="badge rounded-pill bg-secondary">anteprima</span>
</h5>
</td>
<td>
<div class="switch-container no-box-sizing">
<div class="toggle-button no-box-sizing">
<div class="inner-circle no-box-sizing"></div>
</div>
</div>
<span id="launch-modal-
${
name
}
" data-bs-toggle="modal" data-bs-target="#attiva-scenari-modal"></span>
</td>`
;
return
{
row
,
name
};
row
.
id
=
scenario
.
id
;
row
.
innerHTML
=
`
<th scope="row">
${
scenario
.
nome
.
trim
()}
</th>
<td>
<span>
${
scenario
.
data
}
</span>
</td>
<td>
<h5>
<span class="badge rounded-pill bg-secondary">anteprima</span>
</h5>
</td>
<td>
<div class="switch-container no-box-sizing">
<div id="toggle-
${
scenario
.
id
}
" class="toggle-button no-box-sizing">
<div class="inner-circle no-box-sizing"></div>
</div>
</div>
<span id="launch-modal-
${
scenario
.
id
}
" data-bs-toggle="modal" data-bs-target="#attiva-scenari-modal"></span>
</td>`
;
// the span is used by the toggle to launch the modal
return
row
;
}
static
activateToggleByPreview
(
toggle
,
activating
)
{
/**
* changes the antifurto button to the given state
* @param {*} activating true if the antitheft is being activated, false otherwise
*/
static
correctlySetAntifurto
(
activating
)
{
const
antifurtoBtn
=
document
.
getElementById
(
'
scenari-stato-antifurto
'
);
if
(
activating
)
{
if
(
antifurtoBtn
.
innerText
===
'
ON
'
)
return
;
antifurtoBtn
.
innerText
=
'
ON
'
;
antifurtoBtn
.
classList
.
remove
(
'
btn-danger
'
);
antifurtoBtn
.
classList
.
add
(
'
btn-success
'
);
}
else
{
if
(
antifurtoBtn
.
innerText
===
'
OFF
'
)
return
;
antifurtoBtn
.
innerText
=
'
OFF
'
;
antifurtoBtn
.
classList
.
remove
(
'
btn-success
'
);
antifurtoBtn
.
classList
.
add
(
'
btn-danger
'
);
}
}
/**
* turns off the active scenario if there is one; useful if you don't have the scenarioID
*/
static
deactivateActiveScenario
()
{
if
(
Scenari
.
scenarioAttivoToggle
==
null
)
return
;
// Scenari.scenarioAttivoToggle.classList.remove('active');
// Scenari.scenarioAttivoToggle = null;
// // TODO deactivate the scenario in the server
const
toggleID
=
Scenari
.
scenarioAttivoToggle
.
id
;
const
scenarioID
=
toggleID
.
substring
(
toggleID
.
indexOf
(
'
-
'
)
+
1
);
Scenari
.
toggleScenario
(
scenarioID
,
false
);
}
/**
* activates/deactivates the scenario with the given name
* @param {*} scenarioID the ID of the scenario to be activated/deactivated
* @param {*} activating true if the scenario should be activated, false otherwise
*/
static
toggleScenario
(
scenarioID
,
activating
)
{
// find the scenario's row on the page
const
scenarioRow
=
document
.
getElementById
(
`
${
scenarioID
}
`
);
const
toggle
=
scenarioRow
.
querySelector
(
'
.toggle-button
'
);
Scenari
.
correctlySetToggle
(
toggle
);
Scenari
.
correctlySetAntifurto
(
activating
);
// if (activating) {
// // TODO activate the scenario in the server
// } else {
// // TODO deactivate the scenario in the server
// }
}
/**
* takes care of activating or deactivating the scenario's toggle based on the given boolean
* @param {*} toggle the toggle to be activated or deactivated
* @param {*} activating true if the toggle should be activated, false otherwise
* @see Scenari.correctlySetAntifurto
*/
static
correctlySetToggle
(
toggle
)
{
const
isActivatingNewScenario
=
toggle
!==
Scenari
.
scenarioAttivoToggle
;
Scenari
.
scenarioAttivoToggle
?.
classList
.
remove
(
'
active
'
);
activating
?
toggle
.
classList
.
add
(
'
active
'
)
:
toggle
.
classList
.
remove
(
'
active
'
);
Scenari
.
scenarioAttivoToggle
=
toggle
;
// also toggle the antitheft button
Scenari
.
toggleAntifurto
(
activating
)
if
(
isActivatingNewScenario
)
{
toggle
.
classList
.
add
(
'
active
'
);
Scenari
.
scenarioAttivoToggle
=
toggle
;
}
else
{
toggle
.
classList
.
remove
(
'
active
'
);
Scenari
.
scenarioAttivoToggle
=
null
;
}
}
// toggle the visibility of the scenari container
/**
* activates a random scenario from the ones available
*/
static
activateRandomScenario
()
{
if
(
Scenari
.
index
===
0
)
return
;
//TODO show alert?
const
randomIndex
=
Math
.
floor
(
Math
.
random
()
*
Scenari
.
index
);
const
scenarioID
=
`scenario-
${
randomIndex
}
`
;
// const table = document.getElementById('table-row-scenari');
// // enable a random scenario
// const randomScenario = table.children[Math.floor(Math.random() * table.children.length)];
// const scenarioID = randomScenario.id;
Scenari
.
toggleScenario
(
scenarioID
,
true
);
}
/**
* creates the scenario and updates index
* @param {*} scenarioName the string of the scenario to create
* @returns {JSON} the JSON scenario
*/
static
createScenarioFromName
(
scenarioName
)
{
const
scenario
=
Object
.
assign
({},
scenarioTemplate
);
scenario
.
nome
=
scenarioName
;
scenario
.
data
=
new
Date
().
toLocaleDateString
();
// assign at scenario.data the string YYYY/MM/DD from the current date
scenario
.
id
=
`scenario-
${
Scenari
.
index
}
`
;
Scenari
.
index
++
;
return
scenario
;
}
/**
* toggle the visibility of the scenari container
* @param {*} visible true if the container should be shown, false otherwise
*/
static
toggleContainer
(
visible
)
{
if
(
visible
)
{
Scenari
.
scenariContainer
.
classList
.
remove
(
'
invisible
'
);
...
...
@@ -382,9 +504,6 @@ class Scenari {
Scenari
.
scenariContainer
.
classList
.
add
(
'
invisible
'
);
}
}
}
export
default
Scenari
;
\ No newline at end of file
This diff is collapsed.
Click to expand it.
webapp/js/toggles.js
+
3
−
3
View file @
84633312
...
...
@@ -15,11 +15,11 @@ function setToggleMovement2(toggle) {
},
false
);
}
function
scenariToggleListener
(
toggle
,
name
)
{
function
scenariToggleListener
(
toggle
,
scenarioID
)
{
toggle
.
addEventListener
(
'
click
'
,
event
=>
{
event
.
preventDefault
// select the option from the dropdown
Scenari
.
addNameHere
.
value
=
name
;
Scenari
.
addNameHere
.
value
=
scenarioID
;
// change text of the modal based on toggle state
const
modalBody
=
document
.
getElementById
(
'
attiva-scenari-modal
'
).
querySelector
(
'
.modal-body
'
);
const
children
=
modalBody
.
children
;
...
...
@@ -44,7 +44,7 @@ function scenariToggleListener(toggle, name) {
okBtn
.
innerText
=
"
Attiva
"
;
}
// launch the modal
const
modalLauncher
=
document
.
getElementById
(
'
launch-modal-
'
+
name
);
const
modalLauncher
=
document
.
getElementById
(
'
launch-modal-
'
+
scenarioID
);
modalLauncher
.
click
();
},
false
);
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment