admin: Refactor exercice page to include regexp validator
This commit is contained in:
parent
5eaf1926c1
commit
06dcd0c2b7
@ -8,12 +8,14 @@ const indextpl = `<!DOCTYPE html>
|
||||
<link href="/css/bootstrap.min.css" type="text/css" rel="stylesheet">
|
||||
<link href="/css/glyphicon.css" type="text/css" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
samp.cksum {
|
||||
.cksum {
|
||||
overflow-x: hidden;
|
||||
text-overflow: ellipsis;
|
||||
max-width: 20vw;
|
||||
max-width: 100%;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
word-wrap: normal;
|
||||
white-space: nowrap;
|
||||
}
|
||||
</style>
|
||||
<base href="{{.urlbase}}">
|
||||
|
@ -6,21 +6,23 @@
|
||||
<link href="/css/bootstrap.min.css" type="text/css" rel="stylesheet">
|
||||
<link href="/css/glyphicon.css" type="text/css" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
samp.cksum {
|
||||
.cksum {
|
||||
overflow-x: hidden;
|
||||
text-overflow: ellipsis;
|
||||
max-width: 20vw;
|
||||
max-width: 100%;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
word-wrap: normal;
|
||||
white-space: nowrap;
|
||||
}
|
||||
</style>
|
||||
<base href="/">
|
||||
<base href="/admin/">
|
||||
<script src="/js/d3.v3.min.js"></script>
|
||||
</head>
|
||||
<body class="bg-light text-dark">
|
||||
<nav class="navbar sticky-top navbar-expand-lg navbar-dark bg-dark text-light" style="margin-bottom: 5px;">
|
||||
<a class="navbar-brand" href="/">
|
||||
<img alt="FIC" src="/img/fic.png" style="height: 30px">
|
||||
<a class="navbar-brand" href="/admin/">
|
||||
<img alt="FIC" src="/admin/img/fic.png" style="height: 30px">
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#adminMenu" aria-controls="adminMenu" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
@ -28,15 +30,15 @@
|
||||
|
||||
<div class="collapse navbar-collapse" id="adminMenu">
|
||||
<ul class="navbar-nav mr-auto">
|
||||
<li class="nav-item"><a class="nav-link" href="/teams">Équipes</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/pki">PKI</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/themes">Thèmes</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/exercices">Exercices</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/files">Fichiers</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/public/0">Public</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/events">Événements</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/claims">Tâches</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/settings">Paramètres</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/admin/teams">Équipes</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/admin/pki">PKI</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/admin/themes">Thèmes</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/admin/exercices">Exercices</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/admin/files">Fichiers</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/admin/public/0">Public</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/admin/events">Événements</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/admin/claims">Tâches</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/admin/settings">Paramètres</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@ -72,9 +74,9 @@
|
||||
<script src="/js/popper.min.js"></script>
|
||||
<script src="/js/bootstrap.min.js"></script>
|
||||
<script src="/js/angular.min.js"></script>
|
||||
<script src="/js/angular-resource.min.js"></script>
|
||||
<script src="/admin/js/angular-resource.min.js"></script>
|
||||
<script src="/js/angular-route.min.js"></script>
|
||||
<script src="/js/angular-sanitize.min.js"></script>
|
||||
<script src="/js/app.js"></script>
|
||||
<script src="/admin/js/app.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,6 +1,8 @@
|
||||
<h2>{{exercice.title}}</h2>
|
||||
|
||||
<form ng-submit="saveExercice()">
|
||||
<div class="row mb-5">
|
||||
|
||||
<form class="col-md-8" ng-submit="saveExercice()">
|
||||
<div class="form-group row" ng-repeat="field in fields">
|
||||
<label for="{{ field }}" class="col-sm-1 col-form-label-sm">{{ field | capitalize }}</label>
|
||||
<div class="col-sm-11">
|
||||
@ -8,7 +10,7 @@
|
||||
<input type="text" class="form-control form-control-sm" id="{{ field }}" ng-model="exercice[field]" ng-show="field == 'gain'" integer>
|
||||
<input type="text" class="form-control form-control-sm" id="{{ field }}" ng-model="exercice[field]" ng-show="field == 'coefficient'" float>
|
||||
<textarea class="form-control form-control-sm" id="{{field}}" ng-model="exercice[field]" ng-show="field == 'statement' || field == 'overview'"></textarea>
|
||||
<select class="form-control form-control-sm" id="{{field}}" ng-model="exercice[field]" ng-options="ex.id as ex.title for ex in exercices" ng-show="field == 'depend'">
|
||||
<select class="form-control form-control-sm" id="{{field}}" ng-model="exercice[field]" ng-options="ex.id as ex.title group by ex.path.split('/')[0] for ex in exercices" ng-show="field == 'depend'">
|
||||
<option value="">Aucune</option>
|
||||
</select>
|
||||
</div>
|
||||
@ -20,7 +22,33 @@
|
||||
<div class="text-right" ng-show="!exercice.id">
|
||||
<button type="submit" class="btn btn-primary"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Create exercice</button>
|
||||
</div>
|
||||
</form>
|
||||
</form>
|
||||
|
||||
<div class="col-md-4" ng-controller="ExerciceFilesController" ng-show="exercice.id">
|
||||
<div class="card border-secondary">
|
||||
<div class="card-header bg-secondary text-light">
|
||||
<button ng-click="addFile()" class="float-right btn btn-sm btn-primary ml-2"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span></button>
|
||||
<button ng-click="syncFiles()" class="float-right btn btn-sm btn-light ml-2"><span class="glyphicon glyphicon-refresh" aria-hidden="true"></span></button>
|
||||
<h4 class="m-0">Téléchargements</h4>
|
||||
</div>
|
||||
<div class="list-group">
|
||||
<form ng-submit="saveFile()" class="list-group-item bg-light text-dark" ng-repeat="file in files">
|
||||
<div class="row form-group">
|
||||
<input type="text" ng-model="file.name" class="col form-control form-control-sm" placeholder="Nom de fichier">
|
||||
<a href="{{file.path}}" class="btn btn-sm btn-secondary col-auto"><span class="glyphicon glyphicon-download" aria-hidden="true"></span></a>
|
||||
<button type="submit" class="btn btn-sm btn-success col-auto"><span class="glyphicon glyphicon-ok" aria-hidden="true"></span></button><br>
|
||||
<button ng-click="deleteFile()" class="btn btn-sm btn-danger col-auto"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></button>
|
||||
</div>
|
||||
<div class="cksum">
|
||||
Taille : <span title="{{ file.size }} octets">{{ file.size | size }}</span> ‐
|
||||
BLAKE2b : <samp title="{{ file.checksum | cksum }}">{{ file.checksum | cksum }}</samp>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
@ -58,28 +86,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4" ng-controller="ExerciceFilesController">
|
||||
<div class="card border-secondary">
|
||||
<div class="card-header bg-secondary text-light">
|
||||
<button ng-click="addFile()" class="float-right btn btn-sm btn-primary ml-2"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span></button>
|
||||
<button ng-click="syncFiles()" class="float-right btn btn-sm btn-light ml-2"><span class="glyphicon glyphicon-refresh" aria-hidden="true"></span></button>
|
||||
<h4 class="m-0">Téléchargements</h4>
|
||||
</div>
|
||||
<div class="list-group">
|
||||
<form ng-submit="saveFile()" class="list-group-item bg-light text-dark" ng-repeat="file in files">
|
||||
<div class="row form-group">
|
||||
<input type="text" ng-model="file.name" class="col form-control form-control-sm" placeholder="Nom de fichier">
|
||||
<a href="{{file.path}}" class="btn btn-sm btn-secondary col-auto"><span class="glyphicon glyphicon-download" aria-hidden="true"></span></a>
|
||||
<button type="submit" class="btn btn-sm btn-success col-auto"><span class="glyphicon glyphicon-ok" aria-hidden="true"></span></button><br>
|
||||
<button ng-click="deleteFile()" class="btn btn-sm btn-danger col-auto"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></button>
|
||||
</div>
|
||||
Taille : <span title="{{ file.size }} octets">{{ file.size | size }}</span><br>
|
||||
BLAKE2b sum : <samp class="cksum">{{ file.checksum | cksum }}</samp>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4" ng-controller="ExerciceFlagsController">
|
||||
<div class="card border-success">
|
||||
<div class="card-header bg-success text-light">
|
||||
@ -89,29 +95,36 @@
|
||||
</div>
|
||||
<div class="list-group">
|
||||
<form ng-submit="saveFlag()" class="list-group-item form-horizontal bg-light text-dark" ng-repeat="flag in flags">
|
||||
<div class="form-group row" id="flag-{{flag.id}}">
|
||||
<input type="text" id="klabel{{flag.id}}" ng-model="flag.label" class="col form-control" placeholder="Intitulé">
|
||||
<div class="row" id="flag-{{flag.id}}">
|
||||
<input type="text" id="klabel{{flag.id}}" ng-model="flag.label" class="col form-control form-control-sm" placeholder="Intitulé" title="Intitulé">
|
||||
<div class="col-auto" ng-show="flag.id">
|
||||
<button ng-click="deleteFlag()" class="btn btn-danger"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></button>
|
||||
<button ng-click="deleteFlag()" class="btn btn-sm btn-danger"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<input type="text" id="khelp{{flag.id}}" ng-model="flag.help" class="col form-control" placeholder="Indication de formatage">
|
||||
<div class="row">
|
||||
<input type="text" id="khelp{{flag.id}}" ng-model="flag.help" class="col form-control form-control-sm" placeholder="Indication de formatage" title="Indication de formatage">
|
||||
<div class="col-auto">
|
||||
<button type="submit" class="btn btn-success"><span class="glyphicon glyphicon-ok" aria-hidden="true"></span></button>
|
||||
<button type="submit" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-ok" aria-hidden="true"></span></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row" ng-show="flag.id">
|
||||
<input type="text" id="kvalue{{flag.id}}" ng-model="flag.value" class="col form-control" placeholder="Condensat">
|
||||
<div class="row">
|
||||
<input type="text" id="kvalue{{flag.id}}" ng-model="flag.value" class="col form-control form-control-sm" placeholder="Condensat" ng-if="flag.id" title="Condensat">
|
||||
<input type="text" id="kflag{{flag.id}}" ng-model="flag.flag" class="col form-control form-control-sm" placeholder="Chaîne brute à valider" ng-if="!flag.id" title="Chaîne brute à valider">
|
||||
<div class="col-auto custom-control custom-checkbox ml-1">
|
||||
<input type="checkbox" class="custom-control-input" id="kicase{{flag.id}}" ng-model="flag.ignorecase">
|
||||
<label class="custom-control-label" for="kicase{{flag.id}}">Ignore case</label>
|
||||
</div>
|
||||
<div class="form-group row" ng-show="!flag.id">
|
||||
<input type="text" id="kvalue{{flag.id}}" ng-model="flag.flag" class="col form-control" placeholder="Chaîne à valider">
|
||||
</div>
|
||||
<div class="row">
|
||||
<input type="text" id="kvre{{flag.id}}" ng-model="flag.validator_regexp" class="col form-control form-control-sm" placeholder="Regexp selecting validation string" title="Regexp selecting validation string">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-success mt-2" ng-controller="ExerciceMCQFlagsController">
|
||||
<div class="col-md-4" ng-controller="ExerciceFlagsController">
|
||||
<div class="card border-success" ng-controller="ExerciceMCQFlagsController">
|
||||
<div class="card-header bg-success text-light">
|
||||
<button ng-click="addQuiz()" class="float-right btn btn-sm btn-primary ml-2"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span></button>
|
||||
<h4>Quizz</h4>
|
||||
|
Loading…
x
Reference in New Issue
Block a user