admin: new page to display exercices flags
This commit is contained in:
parent
15ae32090f
commit
3f692984c7
5 changed files with 304 additions and 88 deletions
|
@ -1,3 +1,51 @@
|
|||
var alertNbLines = true;
|
||||
|
||||
function treatFlagKey(flag) {
|
||||
if (flag.values !== undefined) {
|
||||
if (flag.separator) {
|
||||
for (var i = flag.values.length - 1; i >= 0; i--) {
|
||||
if (flag.nb_lines && (flag.values[i] == undefined || !flag.values[i].length)) {
|
||||
if (alertNbLines) {
|
||||
alertNbLines = false;
|
||||
if (!confirm("Lorsque plusieurs flags sont attendus pour une même question, ceux-ci ne sont pas validés un par un. Ils ne sont validés qu'une fois tous les champs remplis correctement. (Sauf mention contraire, l'ordre n'importe pas)"))
|
||||
console.log(flag.values[9999].length); // Launch exception here to avoid form validation
|
||||
}
|
||||
}
|
||||
else if (!flag.values[i].length) {
|
||||
flag.values.splice(i, 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (flag.ignore_order)
|
||||
flag.value = flag.values.slice().sort().join(flag.separator) + flag.separator;
|
||||
else
|
||||
flag.value = flag.values.join(flag.separator) + flag.separator;
|
||||
|
||||
if (flag.values.length == 0)
|
||||
flag.values = [""];
|
||||
}
|
||||
else
|
||||
flag.value = flag.values[0];
|
||||
}
|
||||
|
||||
if (flag.found == null && flag.soluce !== undefined) {
|
||||
if (flag.value && flag.soluce) {
|
||||
if (flag.ignore_case)
|
||||
flag.value = flag.value.toLowerCase();
|
||||
if (flag.validator_regexp) {
|
||||
var re = new RegExp(flag.validator_regexp, flag.ignore_case?'ui':'u');
|
||||
var match = re.exec(flag.value);
|
||||
match.shift();
|
||||
flag.value = match.join("+");
|
||||
}
|
||||
|
||||
if (flag.soluce == b2sum(flag.value))
|
||||
flag.found = new Date();
|
||||
}
|
||||
}
|
||||
return flag.found !== undefined && flag.found !== false;
|
||||
}
|
||||
|
||||
String.prototype.capitalize = function() {
|
||||
return this
|
||||
.toLowerCase()
|
||||
|
@ -130,6 +178,45 @@ angular.module("FICApp")
|
|||
}
|
||||
});
|
||||
|
||||
angular.module("FICApp")
|
||||
.component('flagKey', {
|
||||
bindings: {
|
||||
kid: '=',
|
||||
key: '=',
|
||||
settings: '=',
|
||||
wantchoices: '=',
|
||||
},
|
||||
controller: function() {
|
||||
this.additem = function(key) {
|
||||
this.key.values.push("");
|
||||
};
|
||||
},
|
||||
template: `
|
||||
<div class="form-group">
|
||||
<label for="sol_{{ $ctrl.kid }}_0" ng-class="{'text-light': !$ctrl.key.found}">{{ $ctrl.key.label }} :</label>
|
||||
<span ng-if="$ctrl.key.found && $ctrl.key.value" ng-bind="$ctrl.key.value"></span>
|
||||
<div class="input-group" ng-repeat="v in $ctrl.key.values track by $index" ng-class="{'mt-1': !$first}" ng-if="!$ctrl.key.found">
|
||||
<input type="text" class="form-control flag" id="sol_{{ $ctrl.kid }}_{{ $index }}" autocomplete="off" name="sol_{{ $ctrl.kid }}_{{ $index }}" ng-model="$ctrl.key.values[$index]" ng-if="!$ctrl.key.choices && !$ctrl.key.multiline" placeholder="{{ $ctrl.key.help }}" title="{{ $ctrl.key.help }}">
|
||||
<textarea class="form-control flag" id="sol_{{ $ctrl.kid }}_{{ $index }}" autocomplete="off" name="sol_{{ $ctrl.kid }}_{{ $index }}" ng-model="$ctrl.key.values[$index]" ng-if="!$ctrl.key.choices && $ctrl.key.multiline" placeholder="{{ $ctrl.key.help }}" title="{{ $ctrl.key.help }}"></textarea>
|
||||
<select class="custom-select" id="sol_{{ $ctrl.kid }}" name="sol_{{ $ctrl.kid }}" ng-model="$ctrl.key.values[$index]" ng-if="$ctrl.key.choices" ng-options="l as v for (l, v) in $ctrl.key.choices"></select>
|
||||
<div class="input-group-append" ng-if="$ctrl.key.choices_cost">
|
||||
<button class="btn btn-success" type="button" ng-click="$ctrl.wantchoices($ctrl.kid)" ng-class="{disabled: $ctrl.key.wcsubmitted}" title="Cliquez pour échanger ce champ de texte par une liste de choix. L'opération vous coûtera {{ $ctrl.key.choices_cost * $ctrl.settings.wchoiceCurrentCoefficient }} points.">
|
||||
<span class="glyphicon glyphicon-tasks" aria-hidden="true"></span>
|
||||
Liste de propositions (<ng-pluralize count="$ctrl.key.choices_cost * $ctrl.settings.wchoiceCurrentCoefficient" when="{'one': '{} point', 'other': '{} points'}"></ng-pluralize>)
|
||||
</button>
|
||||
</div>
|
||||
<div class="input-group-append" ng-if="$ctrl.key.separator && !$ctrl.key.nb_lines && $last">
|
||||
<button class="btn btn-success" type="button" ng-click="$ctrl.additem(key)" title="Ajouter un élément.">
|
||||
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<small class="form-text text-muted" ng-if="!$ctrl.key.found && $ctrl.key.help2.length > 0" ng-bind="$ctrl.key.help2"></small>
|
||||
<span class="glyphicon glyphicon-ok form-control-feedback text-success" aria-hidden="true" ng-if="$ctrl.key.found" title="Flag trouvé à {{ $ctrl.key.found | date:'mediumTime'}}"></span>
|
||||
</div>
|
||||
`
|
||||
});
|
||||
|
||||
angular.module("FICApp")
|
||||
.controller("CountdownController", function($scope, $rootScope, $interval) {
|
||||
var time;
|
||||
|
|
Reference in a new issue