Improve public screen page

This commit is contained in:
nemunaire 2017-12-17 20:44:23 +01:00
commit 11a3fc9a49
7 changed files with 220 additions and 99 deletions

View file

@ -384,6 +384,7 @@ angular.module("FICApp")
$scope.types = {
"welcome": "Messages de bienvenue",
"countdown": "Compte à rebours",
"message": "Message",
"panel": "Boîte",
"exercice": "Exercice",
@ -391,16 +392,18 @@ angular.module("FICApp")
"rank": "Classement",
};
$scope.welcome_types = {
"init": "Accueil des équipes",
"teams": "Accueil des équipes",
"public": "Accueil du public",
"countdown": "Compte à rebours lancement",
};
$scope.panel_types = {
"panel-default": "Default",
"panel-info": "Info",
"panel-success": "Success",
"panel-warning": "Warning",
"panel-danger": "Danger",
$scope.colors = {
"primary": "Primaire",
"secondary": "Secondaire",
"info": "Info",
"success": "Success",
"warning": "Warning",
"danger": "Danger",
"light": "Clair",
"dark": "Foncé",
};
$scope.rank_types = {
"general": "Classement général",
@ -415,6 +418,50 @@ angular.module("FICApp")
$scope.someUpdt = true;
$scope.scenes = [];
};
$scope.presetScene = function(scene) {
$scope.someUpdt = true;
if (scene == "registration")
$scope.scenes = [
{
type: "welcome",
params: { kind: "teams" },
},
{
type: "welcome",
params: { kind: "public", notitle: true },
},
];
else if (scene == "welcome")
$scope.scenes = [
{
type: "welcome",
params: { kind: "public" },
},
];
else if (scene == "start")
$scope.scenes = [
{
type: "welcome",
params: { kind: "public" },
},
{
type: "countdown",
params: { color: "success", end: null, lead: "Go, go, go !", title: "Le challenge forensic va bientôt commencer !" },
},
];
else if (scene == "summary") {
$scope.scenes = [
{
type: "table",
params: { kind: "levels", themes: $scope.themes.map(function(z, i) { return z.id; }), total: true },
},
{
type: "rank",
params: { limit: 5, which: "general" },
},
];
}
};
$scope.saveScenes = function() {
$scope.someUpdt = false;
var prms = Scene.update($scope.scenes);

View file

@ -1,133 +1,175 @@
<form ng-submit="saveScenes()" class="form-horizontal">
<h2>Interface publique<a ng-click="clearScene()" class="pull-right btn btn-danger"><span class="glyphicon glyphicon-remove-sign" aria-hidden="true"></span> Vider la scène</a><a ng-click="addScene()" class="pull-right btn btn-primary" style="margin-right: 10px"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Ajouter un élément</a><button type="submit" style="margin-right: 10px" class="pull-right btn btn-success"><span class="glyphicon glyphicon-save" aria-hidden="true"></span> Publier cette scène</button>
<h2>
Interface publique
<div class="float-right dropdown">
<button class="btn btn-secondary dropdown-toggle mr-sm-2" type="button" data-toggle="dropdown">
Charger scène
</button>
<div class="dropdown-menu">
<a class="dropdown-item" ng-click="presetScene('registration')">Enregistrement équipes</a>
<a class="dropdown-item" ng-click="presetScene('welcome')">Accueil public</a>
<a class="dropdown-item" ng-click="presetScene('start')">Lancement</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" ng-click="presetScene('summary')">Résumé</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" ng-click="clearScene()">Scène vide</a>
</div>
</div>
<button ng-click="addScene()" class="float-right btn btn-primary mr-sm-2"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Ajouter un élément</button>
<button type="submit" class="float-right btn btn-success mr-sm-2"><span class="glyphicon glyphicon-save" aria-hidden="true"></span> Publier cette scène</button>
</h2>
<div style="clear:both"></div>
<div class="alert alert-info" ng-if="!scenes.length">
<strong ng-if="!someUpdt">Aucun contenu n'est actuellement affiché.</strong>
<strong ng-if="someUpdt">Aucun contenu à afficher.</strong>
</div>
<div class="well" ng-repeat="scene in scenes">
<div class="form-group">
<div class="col-sm-offset-2 col-sm-6">
<div class="checkbox">
<label>
<input type="checkbox" ng-model="scene.params.hide"> Masquer temporairement
<div class="card" ng-repeat="scene in scenes">
<div class="card-body">
<div class="form-group row">
<label for="type" class="col-sm-2 col-form-label col-form-label-sm">Type de scène</label>
<div class="col-sm-6">
<select class="custom-select custom-select-sm" id="type" ng-model="scene.type" ng-options="k as v for (k, v) in types"></select>
</div>
<div class="col-sm-4 form-inline">
<div class="form-check mb-2 mr-sm-2 mb-sm-0">
<label class="custom-control custom-checkbox">
<input class="custom-control-input" type="checkbox" ng-model="scene.params.hide">
<span class="custom-control-indicator"></span>
<span class="custom-control-description">Masquer</span>
</label>
</div>
</div>
<div class="col-sm-2">
<a ng-click="upScene(scene)" class="pull-right btn btn-default"><span class="glyphicon glyphicon-chevron-up" aria-hidden="true"></span> Up</a>
<a ng-click="downScene(scene)" class="pull-right btn btn-default"><span class="glyphicon glyphicon-chevron-down" aria-hidden="true"></span> Down</a>
</div>
<div class="col-sm-2">
<a ng-click="delScene(scene)" class="pull-right btn btn-warning"><span class="glyphicon glyphicon-minus" aria-hidden="true"></span> Supprimer</a>
<button ng-click="upScene(scene)" class="btn btn-sm btn-light mb-2 mr-sm-2 mb-sm-0"><span class="glyphicon glyphicon-chevron-up" aria-hidden="true"></span></button>
<button ng-click="downScene(scene)" class="btn btn-sm btn-light mb-2 mr-sm-2 mb-sm-0"><span class="glyphicon glyphicon-chevron-down" aria-hidden="true"></span></button>
<button ng-click="delScene(scene)" class="btn btn-sm btn-warning mb-2 mr-sm-2 mb-sm-0"><span class="glyphicon glyphicon-minus" aria-hidden="true"></span> Supprimer</button>
</div>
</div>
<div class="form-group">
<label for="type" class="col-sm-2 control-label">Type de scène</label>
<div class="form-group row" ng-if="scene.type == 'welcome'">
<label for="wtype" class="col-sm-2 col-form-label col-form-label-sm">Sorte</label>
<div class="col-sm-10">
<select class="form-control" id="type" ng-model="scene.type" ng-options="k as v for (k, v) in types"></select>
<select class="custom-select custom-select-sm" id="wtype" ng-model="scene.params.kind" ng-options="k as v for (k, v) in welcome_types"></select>
</div>
</div>
<div class="form-group" ng-if="scene.type == 'welcome'">
<label for="wtype" class="col-sm-2 control-label">Sorte</label>
<div class="form-group row" ng-if="scene.type == 'panel' || scene.type == 'countdown'">
<label for="ptype" class="col-sm-2 col-form-label col-form-label-sm">Couleur du cadre</label>
<div class="col-sm-10">
<select class="form-control" id="wtype" ng-model="scene.params.kind" ng-options="k as v for (k, v) in welcome_types"></select>
<select class="custom-select custom-select-sm" id="ptype" ng-model="scene.params.color" ng-options="k as v for (k, v) in colors"></select>
</div>
</div>
<div class="form-group" ng-if="scene.type == 'panel'">
<label for="ptype" class="col-sm-2 control-label">Type de cadre</label>
<div class="form-group row" ng-if="scene.type == 'message' || scene.type == 'panel' || scene.type == 'countdown'">
<label for="mtitle" class="col-sm-2 col-form-label col-form-label-sm">Titre</label>
<div class="col-sm-10">
<select class="form-control" id="ptype" ng-model="scene.params.kind" ng-options="k as v for (k, v) in panel_types"></select>
<input type="text" id="mtitle" ng-model="scene.params.title" class="form-control form-control-sm">
</div>
</div>
<div class="form-group" ng-if="scene.type == 'message' || scene.type == 'panel'">
<label for="mtitle" class="col-sm-2 control-label">Titre</label>
<div class="form-group row" ng-if="scene.type == 'message' || scene.type == 'panel' || scene.type == 'countdown'">
<label for="mlead" class="col-sm-2 col-form-label col-form-label-sm" ng-if="scene.type != 'countdown'">Lead</label>
<label for="mlead" class="col-sm-2 col-form-label col-form-label-sm" ng-if="scene.type == 'countdown'">Message final</label>
<div class="col-sm-10">
<input type="text" id="mtitle" ng-model="scene.params.title" class="form-control">
<input type="text" id="mlead" ng-model="scene.params.lead" class="form-control form-control-sm">
</div>
</div>
<div class="form-group" ng-if="scene.type == 'message'">
<label for="mlead" class="col-sm-2 control-label">Lead</label>
<div class="form-group row" ng-if="scene.type == 'message' || scene.type == 'panel'">
<label for="mcnt" class="col-sm-2 col-form-label col-form-label-sm">Contenu HTML</label>
<div class="col-sm-10">
<input type="text" id="mlead" ng-model="scene.params.lead" class="form-control">
<textarea class="form-control form-control-sm" id="mcnt" ng-model="scene.params.html"></textarea>
</div>
</div>
<div class="form-group" ng-if="scene.type == 'message' || scene.type == 'panel'">
<label for="mcnt" class="col-sm-2 control-label">Contenu HTML</label>
<div class="form-group row" ng-if="scene.type == 'exercice'">
<label for="eex" class="col-sm-2 col-form-label col-form-label-sm">Exercice</label>
<div class="col-sm-10">
<textarea class="form-control" id="mcnt" ng-model="scene.params.html"></textarea>
</div>
</div>
<div class="form-group" ng-if="scene.type == 'exercice'">
<label for="eex" class="col-sm-2 control-label">Exercice</label>
<div class="col-sm-10">
<select class="form-control" id="eex" ng-model="scene.params.exercice" ng-options="ex.id as ex.title for ex in exercices">
<select class="custom-select custom-select-sm" id="eex" ng-model="scene.params.exercice" ng-options="ex.id as ex.title for ex in exercices">
</select>
</div>
</div>
<div class="form-group" ng-if="scene.type == 'rank'">
<label for="rtype" class="col-sm-2 control-label">Sorte</label>
<div class="form-group row" ng-if="scene.type == 'countdown'">
<label for="cend" class="col-sm-2 col-form-label col-form-label-sm">Date de fin</label>
<div class="col-sm-10">
<select class="form-control" id="rtype" ng-model="scene.params.which" ng-options="k as v for (k, v) in rank_types"></select>
<input type="text" id="cend" ng-model="scene.params.end" class="form-control form-control-sm">
</div>
</div>
<div class="form-group" ng-if="scene.type == 'rank'">
<label for="rlimit" class="col-sm-2 control-label">Nombre d'éléments</label>
<div class="form-group row" ng-if="scene.type == 'rank'">
<label for="rtype" class="col-sm-2 col-form-label col-form-label-sm">Sorte</label>
<div class="col-sm-10">
<input type="text" id="rlimit" ng-model="scene.params.limit" class="form-control" integer>
<select class="custom-select custom-select-sm" id="rtype" ng-model="scene.params.which" ng-options="k as v for (k, v) in rank_types"></select>
</div>
</div>
<div class="form-group" ng-if="scene.type == 'rank'">
<label for="begin" class="col-sm-2 control-label">Début du classement (à partir de 0)</label>
<div class="form-group row" ng-if="scene.type == 'rank'">
<label for="rlimit" class="col-sm-2 col-form-label col-form-label-sm">Nombre d'éléments</label>
<div class="col-sm-10">
<input type="text" id="rbegin" ng-model="scene.params.begin" class="form-control" integer>
<input type="text" id="rlimit" ng-model="scene.params.limit" class="form-control form-control-sm" integer>
</div>
</div>
<div class="form-group" ng-if="scene.type == 'table'">
<label for="ttable" class="col-sm-2 control-label">Quelle table ?</label>
<div class="form-group row" ng-if="scene.type == 'rank'">
<label for="begin" class="col-sm-2 col-form-label col-form-label-sm">Début du classement (à partir de 0)</label>
<div class="col-sm-10">
<select class="form-control" id="ttable" ng-model="scene.params.kind" ng-options="k as v for (k, v) in table_types">
<input type="text" id="rbegin" ng-model="scene.params.begin" class="form-control form-control-sm" integer>
</div>
</div>
<div class="form-group row" ng-if="scene.type == 'table'">
<label for="ttable" class="col-sm-2 col-form-label col-form-label-sm">Quelle table ?</label>
<div class="col-sm-10">
<select class="custom-select custom-select-sm" id="ttable" ng-model="scene.params.kind" ng-options="k as v for (k, v) in table_types">
</select>
</div>
</div>
<div class="form-group" ng-if="scene.type == 'table'">
<label for="ttheme" class="col-sm-2 control-label">Thèmes à afficher</label>
<div class="form-group row" ng-if="scene.type == 'table'">
<label for="ttheme" class="col-sm-2 col-form-label col-form-label-sm">Thèmes à afficher</label>
<div class="col-sm-10">
<select class="form-control" id="ttheme" multiple="1" ng-model="scene.params.themes" ng-options="th.id as th.name for th in themes">
<select class="custom-select custom-select-sm" id="ttheme" multiple="1" ng-model="scene.params.themes" ng-options="th.id as th.name for th in themes">
</select>
</div>
</div>
<div class="form-group" ng-if="scene.type == 'table' && scene.params.kind == 'teams'">
<label for="tteams" class="col-sm-2 control-label">Équipes à afficher</label>
<div class="form-group row" ng-if="scene.type == 'table' && scene.params.kind == 'teams'">
<label for="tteams" class="col-sm-2 col-form-label col-form-label-sm">Équipes à afficher</label>
<div class="col-sm-10">
<select class="form-control" id="tteams" multiple="1" ng-model="scene.params.teams" ng-options="t.id as (t.rank + 'e - ' + t.name) for t in teams">
<select class="custom-select custom-select-sm" id="tteams" multiple="1" ng-model="scene.params.teams" ng-options="t.id as (t.rank + 'e - ' + t.name) for t in teams">
</select>
</div>
</div>
<div class="form-group" ng-if="scene.type == 'table'">
<div class="col-sm-offset-2 col-sm-6">
<div class="checkbox">
<label>
<input type="checkbox" ng-model="scene.params.total"> Ligne de total
<div class="form-group row" ng-if="scene.type == 'table'">
<div class="col-sm-2"></div>
<div class="col-sm-10">
<div class="form-check">
<label class="custom-control custom-checkbox">
<input class="custom-control-input" type="checkbox" ng-model="scene.params.total">
<span class="custom-control-indicator"></span>
<span class="custom-control-description">Ligne de total</span>
</label>
</div>
</div>
</div>
<div class="form-group row" ng-if="scene.type == 'welcome'">
<div class="col-sm-2"></div>
<div class="col-sm-10">
<div class="form-check">
<label class="custom-control custom-checkbox">
<input class="custom-control-input" type="checkbox" ng-model="scene.params.notitle">
<span class="custom-control-indicator"></span>
<span class="custom-control-description">Masquer le titre</span>
</label>
</div>
</div>
</div>
</div>
</div>
</form>