2018-12-05 04:03:21 +00:00
< h2 >
{{exercice.title}}
< button type = "button" ng-click = "syncExo()" ng-class = "{'disabled': inSync}" class = "float-right btn btn-sm btn-light" > < span class = "glyphicon glyphicon-refresh" aria-hidden = "true" > < / span > Synchroniser< / button >
< / h2 >
2016-12-26 00:23:31 +00:00
2018-11-18 17:48:23 +00:00
< 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" >
2018-12-02 16:53:26 +00:00
< input type = "text" class = "form-control form-control-sm" id = "{{ field }}" ng-model = "exercice[field]" ng-if = "field != 'statement' && field != 'issue' && field != 'issuekind' && field != 'overview' && field != 'finished' && field != 'depend' && field != 'gain' && field != 'coefficient'" >
2018-11-21 00:19:13 +00:00
< input type = "text" class = "form-control form-control-sm" id = "{{ field }}" ng-model = "exercice[field]" ng-if = "field == 'gain'" integer >
< input type = "text" class = "form-control form-control-sm" id = "{{ field }}" ng-model = "exercice[field]" ng-if = "field == 'coefficient'" float >
2018-12-02 16:53:26 +00:00
< textarea class = "form-control form-control-sm" id = "{{field}}" ng-model = "exercice[field]" ng-if = "field == 'statement' || field == 'overview' || field == 'finished' || field == 'issue'" > < / textarea >
2018-11-21 00:19:13 +00:00
< 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-if = "field == 'depend'" >
2018-11-18 17:48:23 +00:00
< option value = "" > Aucune< / option >
< / select >
2018-11-21 01:20:37 +00:00
< select class = "form-control form-control-sm" id = "{{field}}" ng-model = "exercice[field]" ng-options = "v for v in ['primary', 'secondary', 'success', 'danger', 'warning', 'info', 'light', 'dark']" ng-if = "field == 'issuekind'" > < / select >
2018-11-18 17:48:23 +00:00
< / div >
< / div >
< div class = "text-right" ng-show = "exercice.id" >
< button type = "submit" class = "btn btn-primary" > < span class = "glyphicon glyphicon-save" aria-hidden = "true" > < / span > Save< / button >
2018-11-18 20:34:08 +00:00
< button type = "button" class = "btn btn-danger" ng-click = "deleteExercice()" > < span class = "glyphicon glyphicon-remove" aria-hidden = "true" > < / span > Delete< / button >
2018-11-18 17:48:23 +00:00
< / div >
< 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 >
2018-12-05 06:31:49 +00:00
< div class = "col-md-4 accordion" ng-show = "exercice.id" id = "accordionExercice" >
2018-11-18 21:44:23 +00:00
< div class = "card border-secondary" ng-controller = "ExerciceFilesController" >
2018-12-05 06:31:49 +00:00
< div class = "card-header bg-secondary text-light" type = "button" data-toggle = "collapse" data-target = "#collapseFiles" aria-expanded = "true" aria-controls = "collapseFiles" >
< h4 class = "m-0" > < small class = "glyphicon glyphicon-chevron-right" aria-hidden = "true" > < / small > Téléchargements< / h4 >
2018-11-18 17:48:23 +00:00
< / div >
2018-12-05 06:31:49 +00:00
< div class = "collapse" id = "collapseFiles" aria-labelledby = "headingFiles" data-parent = "#accordionExercice" >
< div class = "list-group" >
< div class = "btn-toolbar bg-secondary justify-content-end" role = "toolbar" >
< div class = "btn-group" role = "group" >
< button type = "button" ng-click = "syncFiles()" class = "btn btn-sm btn-light" > < span class = "glyphicon glyphicon-refresh" aria-hidden = "true" > < / span > Synchroniser< / button >
< button type = "button" ng-click = "addFile()" class = "btn btn-sm btn-info" > < span class = "glyphicon glyphicon-plus" aria-hidden = "true" > < / span > Ajouter< / button >
< / div >
2018-11-21 00:35:10 +00:00
< / div >
2018-12-05 06:31:49 +00:00
< 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 type = "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 >
2018-11-18 20:27:35 +00:00
< / div >
2018-11-18 17:48:23 +00:00
< / div >
2016-12-26 00:23:31 +00:00
< / div >
2018-12-05 06:31:49 +00:00
< div class = "card border-info" ng-controller = "ExerciceHintsController" >
< div class = "card-header bg-info text-light" type = "button" data-toggle = "collapse" data-target = "#collapseHints" aria-expanded = "true" aria-controls = "collapseHints" >
< h4 class = "m-0" > < small class = "glyphicon glyphicon-chevron-right" aria-hidden = "true" > < / small > Indices< / h4 >
2016-12-26 00:23:31 +00:00
< / div >
2018-12-05 06:31:49 +00:00
< div class = "collapse" id = "collapseHints" aria-labelledby = "headingHints" data-parent = "#accordionExercice" >
< div class = "list-group" >
< div class = "btn-toolbar bg-info justify-content-end" role = "toolbar" >
< div class = "btn-group" role = "group" >
< button type = "button" ng-click = "syncHints()" class = "btn btn-sm btn-light" > < span class = "glyphicon glyphicon-refresh" aria-hidden = "true" > < / span > Synchroniser< / button >
< button type = "button" ng-click = "addHint()" class = "btn btn-sm btn-primary" > < span class = "glyphicon glyphicon-plus" aria-hidden = "true" > < / span > Ajouter< / button >
< / div >
2018-11-21 00:35:10 +00:00
< / div >
2018-12-05 06:31:49 +00:00
< form ng-submit = "saveHint()" class = "list-group-item form-horizontal bg-light text-dark" ng-repeat = "hint in hints" >
< input type = "text" id = "htitle{{hint.id}}" ng-model = "hint.title" class = "form-control form-control-sm" placeholder = "Titre" >
< textarea class = "form-control form-control-sm" id = "hcnt{{hint.id}}" ng-model = "hint.content" ng-if = "!hint.file" > < / textarea >
< p ng-if = "hint.file" >
Fichier : < samp > {{ hint.file }}< / samp > < br >
Hash : < samp class = "cksum" > {{ hint.content }}< / samp > < br >
< / p >
< div class = "row" >
< div class = "col-8 input-group input-group-sm mb-3" >
< div class = "input-group-prepend" >
< span class = "input-group-text" id = "inputGroup-sizing-sm" > Coût< / span >
< / div >
< input type = "text" id = "hcost{{hint.id}}" ng-model = "hint.cost" class = "form-control" integer >
< / div >
< div class = "col-4" >
< button type = "submit" class = "btn btn-sm btn-success" > < span class = "glyphicon glyphicon-ok" aria-hidden = "true" > < / span > < / button >
< button type = "button" ng-click = "deleteHint()" class = "btn btn-sm btn-danger" ng-show = "hint.id" > < span class = "glyphicon glyphicon-remove" aria-hidden = "true" > < / span > < / button >
2018-01-07 23:17:46 +00:00
< / div >
< / div >
2018-12-05 06:31:49 +00:00
< / form >
< / div >
2016-12-26 00:23:31 +00:00
< / div >
< / div >
2018-12-05 06:31:49 +00:00
< div class = "card border-success" ng-controller = "ExerciceFlagsController" >
< div class = "card-header bg-success text-light" type = "button" data-toggle = "collapse" data-target = "#collapseFlags" aria-expanded = "true" aria-controls = "collapseFlags" >
< h4 class = "m-0" > < small class = "glyphicon glyphicon-chevron-right" aria-hidden = "true" > < / small > Drapeaux< / h4 >
2016-12-26 00:23:31 +00:00
< / div >
2018-12-05 06:31:49 +00:00
< div class = "collapse" id = "collapseFlags" aria-labelledby = "headingFlags" data-parent = "#accordionExercice" >
< div class = "list-group" >
< div class = "btn-toolbar bg-success justify-content-end" role = "toolbar" >
< div class = "btn-group" role = "group" >
< button type = "button" ng-click = "syncFlags()" class = "btn btn-sm btn-light" > < span class = "glyphicon glyphicon-refresh" aria-hidden = "true" > < / span > Synchroniser< / button >
< button type = "button" ng-click = "addFlag()" class = "btn btn-sm btn-primary" > < span class = "glyphicon glyphicon-plus" aria-hidden = "true" > < / span > Ajouter< / button >
2016-12-27 20:08:36 +00:00
< / div >
2016-12-26 00:23:31 +00:00
< / div >
2018-12-05 06:31:49 +00:00
< form ng-submit = "saveFlag()" class = "list-group-item form-horizontal bg-light text-dark" ng-repeat = "flag in flags" >
< 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 type = "button" ng-click = "deleteFlag()" class = "btn btn-sm btn-danger" > < span class = "glyphicon glyphicon-remove" aria-hidden = "true" > < / span > < / button >
< / div >
2016-12-27 20:08:36 +00:00
< / div >
2018-12-05 06:31:49 +00:00
< 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-sm btn-success" > < span class = "glyphicon glyphicon-ok" aria-hidden = "true" > < / span > < / button >
< / div >
2018-11-18 17:48:23 +00:00
< / div >
2018-12-05 06:31:49 +00:00
< 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 >
< 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 >
2016-12-26 00:23:31 +00:00
< / div >
< / div >
2018-06-24 16:12:26 +00:00
2018-12-05 06:31:49 +00:00
< div class = "card border-success" ng-controller = "ExerciceMCQFlagsController" >
< div class = "card-header bg-success text-light" type = "button" data-toggle = "collapse" data-target = "#collapseQuizz" aria-expanded = "true" aria-controls = "collapseQuizz" >
< h4 class = "m-0" > < small class = "glyphicon glyphicon-chevron-right" aria-hidden = "true" > < / small > Quizz< / h4 >
2018-06-24 16:12:26 +00:00
< / div >
2018-12-05 06:31:49 +00:00
< div class = "collapse" id = "collapseQuizz" aria-labelledby = "headingQuizz" data-parent = "#accordionExercice" >
< div class = "list-group" >
< div class = "btn-toolbar bg-success justify-content-end" role = "toolbar" >
< div class = "btn-group" role = "group" >
< button type = "button" ng-click = "addQuiz()" class = "btn btn-sm btn-primary" > < span class = "glyphicon glyphicon-plus" aria-hidden = "true" > < / span > Ajouter< / button >
2018-06-24 16:12:26 +00:00
< / div >
< / div >
2018-12-05 06:31:49 +00:00
< form ng-submit = "saveQuiz()" class = "list-group-item form-horizontal bg-light text-dark" ng-repeat = "(qk,q) in quiz" >
< div class = "form-group row" id = "quiz-{{q.id}}" >
< input type = "text" id = "qlabel{{q.id}}" ng-model = "q.title" class = "col form-control" placeholder = "Intitulé" >
< div class = "col-auto" ng-show = "q.id" >
< button type = "button" ng-click = "deleteQuiz()" class = "btn btn-danger" > < span class = "glyphicon glyphicon-remove" aria-hidden = "true" > < / span > < / button >
< / div >
2018-06-24 16:12:26 +00:00
< / div >
2018-12-05 06:31:49 +00:00
< div class = "form-group row" ng-repeat = "(ck,choice) in q.entries" >
< div class = "col form-check" >
< label class = "custom-control custom-checkbox" >
< input class = "custom-control-input" type = "checkbox" ng-model = "choice.response" >
< span class = "custom-control-label" >
< input type = "text" id = "kchoice{{q.id}}-{{choice.id}}" ng-model = "choice.label" class = "form-control form-control-sm" placeholder = "Intitulé" >
< / span >
< / label >
< / div >
< div class = "col-auto" >
< button type = "button" ng-click = "deleteChoice()" class = "btn btn-sm btn-danger" > < span class = "glyphicon glyphicon-trash" aria-hidden = "true" > < / span > < / button >
< / div >
2018-06-24 16:12:26 +00:00
< / div >
2018-12-05 06:31:49 +00:00
< div class = "form-group row" >
< div class = "col-auto" >
< button type = "button" ng-click = "addChoice()" class = "btn btn-primary" > < span class = "glyphicon glyphicon-plus" aria-hidden = "true" > < / span > Ajouter un choix< / button >
< / div >
< div class = "col-auto" >
< button type = "submit" class = "btn btn-success" > < span class = "glyphicon glyphicon-ok" aria-hidden = "true" > < / span > < / button >
< / div >
2018-06-24 16:12:26 +00:00
< / div >
2018-12-05 06:31:49 +00:00
< / form >
< / div >
2018-06-24 16:12:26 +00:00
< / div >
< / div >
2018-11-18 20:27:35 +00:00
2018-12-05 06:31:49 +00:00
< div class = "card border-warning" ng-controller = "ExerciceTagsController" >
< div class = "card-header bg-warning text-light" type = "button" data-toggle = "collapse" data-target = "#collapseTags" aria-expanded = "true" aria-controls = "collapseTags" >
< h4 class = "m-0" > < small class = "glyphicon glyphicon-chevron-right" aria-hidden = "true" > < / small > Tags< / h4 >
2018-11-18 21:44:23 +00:00
< / div >
2018-12-05 06:31:49 +00:00
< div class = "collapse" id = "collapseTags" aria-labelledby = "headingTags" data-parent = "#accordionExercice" >
< div class = "list-group" >
< div class = "btn-toolbar bg-warning justify-content-end" role = "toolbar" >
< div class = "btn-group" role = "group" >
< button type = "button" ng-click = "addTag()" class = "btn btn-sm btn-primary" > < span class = "glyphicon glyphicon-plus" aria-hidden = "true" > < / span > Ajouter< / button >
< button type = "button" ng-click = "saveTags()" class = "btn btn-sm btn-success" > < span class = "glyphicon glyphicon-ok" aria-hidden = "true" > < / span > Sauvegarder< / button >
< / div >
2018-11-21 00:35:10 +00:00
< / div >
2018-12-05 06:31:49 +00:00
< form ng-submit = "saveTags()" class = "list-group-item bg-light text-dark" >
< div class = "row form-group" ng-repeat = "(k, tag) in tags track by $index" >
< input type = "text" ng-model = "tags[k]" class = "col form-control form-control-sm" placeholder = "#tag" >
< button type = "button" ng-click = "deleteTag()" class = "btn btn-sm btn-danger col-auto" > < span class = "glyphicon glyphicon-remove" aria-hidden = "true" > < / span > < / button >
< / div >
< / form >
2018-11-21 00:35:10 +00:00
< / div >
2018-11-18 21:44:23 +00:00
< / div >
< / div >
2016-12-26 00:23:31 +00:00
< / div >
< / div >