frontend: rely on angular base path
This commit is contained in:
parent
a35aa7be70
commit
921644deb4
@ -170,7 +170,7 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
$interval.cancel(refreshSettingsInterval);
|
$interval.cancel(refreshSettingsInterval);
|
||||||
refreshSettingsInterval = $interval(refreshSettings, Math.floor(Math.random() * 24000) + 32000);
|
refreshSettingsInterval = $interval(refreshSettings, Math.floor(Math.random() * 24000) + 32000);
|
||||||
|
|
||||||
$http.get("/settings.json").then(function(response) {
|
$http.get("settings.json").then(function(response) {
|
||||||
var time = $rootScope.recvTime(response);
|
var time = $rootScope.recvTime(response);
|
||||||
response.data.start = new Date(response.data.start);
|
response.data.start = new Date(response.data.start);
|
||||||
response.data.end = new Date(response.data.end);
|
response.data.end = new Date(response.data.end);
|
||||||
@ -197,7 +197,7 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
$interval.cancel(refreshThemesInterval);
|
$interval.cancel(refreshThemesInterval);
|
||||||
refreshThemesInterval = $interval(refreshThemes, Math.floor(Math.random() * 24000) + 32000);
|
refreshThemesInterval = $interval(refreshThemes, Math.floor(Math.random() * 24000) + 32000);
|
||||||
|
|
||||||
$http.get("/themes.json").then(function(response) {
|
$http.get("themes.json").then(function(response) {
|
||||||
$scope.themes = response.data;
|
$scope.themes = response.data;
|
||||||
$scope.max_gain = 0;
|
$scope.max_gain = 0;
|
||||||
$scope.max_solved = 0;
|
$scope.max_solved = 0;
|
||||||
@ -228,7 +228,7 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
$interval.cancel(refreshTeamsInterval);
|
$interval.cancel(refreshTeamsInterval);
|
||||||
refreshTeamsInterval = $interval($rootScope.refreshTeams, Math.floor(Math.random() * 24000) + 32000);
|
refreshTeamsInterval = $interval($rootScope.refreshTeams, Math.floor(Math.random() * 24000) + 32000);
|
||||||
|
|
||||||
$http.get("/teams.json").then(function(response) {
|
$http.get("teams.json").then(function(response) {
|
||||||
var teams = response.data;
|
var teams = response.data;
|
||||||
$scope.teams_count = Object.keys(teams).length
|
$scope.teams_count = Object.keys(teams).length
|
||||||
$scope.teams = teams;
|
$scope.teams = teams;
|
||||||
@ -260,7 +260,7 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$http.get("/events.json").then(function(response) {
|
$http.get("events.json").then(function(response) {
|
||||||
if (eventsLastRefresh != undefined && eventsLastRefresh == response.headers()["last-modified"])
|
if (eventsLastRefresh != undefined && eventsLastRefresh == response.headers()["last-modified"])
|
||||||
return;
|
return;
|
||||||
eventsLastRefresh = response.headers()["last-modified"];
|
eventsLastRefresh = response.headers()["last-modified"];
|
||||||
@ -301,7 +301,7 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
if ((kind & $rootScope.notify_field) == kind) {
|
if ((kind & $rootScope.notify_field) == kind) {
|
||||||
var notification = new Notification("Challenge forensic", {body: event.txt.replace(/&#(\d+);/g, function(match, dec) {return String.fromCharCode(dec);}).replace(/(<([^>]+)>)/ig,""), badge: "/img/icon-" + event.kind + ".ico", icon: "/img/icon-" + event.kind + ".ico"});
|
var notification = new Notification("Challenge forensic", {body: event.txt.replace(/&#(\d+);/g, function(match, dec) {return String.fromCharCode(dec);}).replace(/(<([^>]+)>)/ig,""), badge: "/img/icon-" + event.kind + ".ico", icon: "/img/icon-" + event.kind + ".ico"});
|
||||||
notification.onclick = function(ev) {
|
notification.onclick = function(ev) {
|
||||||
$location.url("/edit");
|
$location.url("edit");
|
||||||
};
|
};
|
||||||
setTimeout(notification.close.bind(notification), 4000);
|
setTimeout(notification.close.bind(notification), 4000);
|
||||||
}
|
}
|
||||||
@ -318,11 +318,11 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
$interval.cancel(refreshMyInterval);
|
$interval.cancel(refreshMyInterval);
|
||||||
refreshMyInterval = $interval(refreshMy, Math.floor(Math.random() * 24000) + 24000);
|
refreshMyInterval = $interval(refreshMy, Math.floor(Math.random() * 24000) + 24000);
|
||||||
|
|
||||||
$http.get("/my.json").then(function(response) {
|
$http.get("my.json").then(function(response) {
|
||||||
$rootScope.recvMy(response.data);
|
$rootScope.recvMy(response.data);
|
||||||
}, function(response) {
|
}, function(response) {
|
||||||
if (!$scope.my && response.status == 404) {
|
if (!$scope.my && response.status == 404) {
|
||||||
$location.url("/register");
|
$location.url("register");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -458,9 +458,9 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
$scope.hsubmit = function(hint) {
|
$scope.hsubmit = function(hint) {
|
||||||
hint.submitted = true;
|
hint.submitted = true;
|
||||||
$scope.hinterror = null;
|
$scope.hinterror = null;
|
||||||
$http({ url: "/openhint/" + $rootScope.current_exercice, method: "POST", data: { id: hint.id } }).then(function(response) {
|
$http({ url: "openhint/" + $rootScope.current_exercice, method: "POST", data: { id: hint.id } }).then(function(response) {
|
||||||
var checkDiffHint = function() {
|
var checkDiffHint = function() {
|
||||||
$http.get("/my.json").then(function(response) {
|
$http.get("my.json").then(function(response) {
|
||||||
var my = response.data;
|
var my = response.data;
|
||||||
angular.forEach(my.exercices[$rootScope.current_exercice].hints, function(h,hid){
|
angular.forEach(my.exercices[$rootScope.current_exercice].hints, function(h,hid){
|
||||||
if (hint.id == h.id) {
|
if (hint.id == h.id) {
|
||||||
@ -554,7 +554,7 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$http({ url: "/submit/" + $rootScope.current_exercice, method: "POST", data: resp }).then(function(response) {
|
$http({ url: "submit/" + $rootScope.current_exercice, method: "POST", data: resp }).then(function(response) {
|
||||||
$scope.messageClass = {"text-success": true};
|
$scope.messageClass = {"text-success": true};
|
||||||
$scope.message = response.data.errmsg;
|
$scope.message = response.data.errmsg;
|
||||||
$scope.sberr = null;
|
$scope.sberr = null;
|
||||||
@ -564,7 +564,7 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
});
|
});
|
||||||
|
|
||||||
var checkDiff = function() {
|
var checkDiff = function() {
|
||||||
$http.get("/my.json").then(function(response) {
|
$http.get("my.json").then(function(response) {
|
||||||
var my = response.data;
|
var my = response.data;
|
||||||
if ($scope.my.exercices[$rootScope.current_exercice].tries != my.exercices[$rootScope.current_exercice].tries || $scope.my.exercices[$rootScope.current_exercice].solved_time != my.exercices[$rootScope.current_exercice].solved_time) {
|
if ($scope.my.exercices[$rootScope.current_exercice].tries != my.exercices[$rootScope.current_exercice].tries || $scope.my.exercices[$rootScope.current_exercice].solved_time != my.exercices[$rootScope.current_exercice].solved_time) {
|
||||||
$scope.my.exercices[$rootScope.current_exercice].submitted = false;
|
$scope.my.exercices[$rootScope.current_exercice].submitted = false;
|
||||||
@ -592,9 +592,9 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
|
|
||||||
$scope.wantchoices = function(kid) {
|
$scope.wantchoices = function(kid) {
|
||||||
$scope.my.exercices[$rootScope.current_exercice].flags[kid].wcsubmitted = true;
|
$scope.my.exercices[$rootScope.current_exercice].flags[kid].wcsubmitted = true;
|
||||||
$http({ url: "/wantchoices/" + $rootScope.current_exercice, method: "POST", data: { id: Math.floor(kid) } }).then(function(response) {
|
$http({ url: "wantchoices/" + $rootScope.current_exercice, method: "POST", data: { id: Math.floor(kid) } }).then(function(response) {
|
||||||
var checkDiffWC = function() {
|
var checkDiffWC = function() {
|
||||||
$http.get("/my.json").then(function(response) {
|
$http.get("my.json").then(function(response) {
|
||||||
var my = response.data;
|
var my = response.data;
|
||||||
if (my.exercices[$rootScope.current_exercice].flags[kid].choices)
|
if (my.exercices[$rootScope.current_exercice].flags[kid].choices)
|
||||||
$rootScope.recvMy(my);
|
$rootScope.recvMy(my);
|
||||||
@ -650,7 +650,7 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
localStorage.notification = $rootScope.notify_field;
|
localStorage.notification = $rootScope.notify_field;
|
||||||
else
|
else
|
||||||
delete localStorage.notification;
|
delete localStorage.notification;
|
||||||
$location.url("/");
|
$location.url(".");
|
||||||
}
|
}
|
||||||
|
|
||||||
var cbt;
|
var cbt;
|
||||||
@ -674,7 +674,7 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
}
|
}
|
||||||
|
|
||||||
$http({
|
$http({
|
||||||
url: "/submit/name",
|
url: "submit/name",
|
||||||
method: "POST",
|
method: "POST",
|
||||||
data: {newName: $scope.my.newName}
|
data: {newName: $scope.my.newName}
|
||||||
}).then(function(response) {
|
}).then(function(response) {
|
||||||
@ -682,7 +682,7 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
$rootScope.message = response.data.errmsg;
|
$rootScope.message = response.data.errmsg;
|
||||||
|
|
||||||
var checkDiff = function() {
|
var checkDiff = function() {
|
||||||
$http.get("/my.json").then(function(response) {
|
$http.get("my.json").then(function(response) {
|
||||||
if ($scope.my.name != response.data.name) {
|
if ($scope.my.name != response.data.name) {
|
||||||
$scope.my.newName = undefined;
|
$scope.my.newName = undefined;
|
||||||
$rootScope.message = "";
|
$rootScope.message = "";
|
||||||
@ -749,7 +749,7 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
}
|
}
|
||||||
|
|
||||||
$http({
|
$http({
|
||||||
url: "/registration",
|
url: "registration",
|
||||||
method: "POST",
|
method: "POST",
|
||||||
data: $scope.form
|
data: $scope.form
|
||||||
}).then(function(response) {
|
}).then(function(response) {
|
||||||
@ -757,7 +757,7 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
$scope.message = response.data.errmsg;
|
$scope.message = response.data.errmsg;
|
||||||
|
|
||||||
$interval(function(){
|
$interval(function(){
|
||||||
$http.get("/my.json").then(function(response) {
|
$http.get("my.json").then(function(response) {
|
||||||
$rootScope.refresh();
|
$rootScope.refresh();
|
||||||
});
|
});
|
||||||
}, 1500);
|
}, 1500);
|
||||||
@ -773,7 +773,7 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
|
|
||||||
$scope.$watch("my", function(my){
|
$scope.$watch("my", function(my){
|
||||||
if (my)
|
if (my)
|
||||||
$location.url("/");
|
$location.url(".");
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.controller("TagController", function($scope, $rootScope, $routeParams, $location) {
|
.controller("TagController", function($scope, $rootScope, $routeParams, $location) {
|
||||||
@ -797,7 +797,7 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
})
|
})
|
||||||
|
|
||||||
$scope.goDefi = function() {
|
$scope.goDefi = function() {
|
||||||
$location.url("/" + this.ex.theme.urlid + "/" + this.ex.exercice.urlid);
|
$location.url(this.ex.theme.urlid + "/" + this.ex.exercice.urlid);
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
@ -835,7 +835,7 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"])
|
|||||||
$rootScope.authors = "";
|
$rootScope.authors = "";
|
||||||
|
|
||||||
$scope.goTheme = function() {
|
$scope.goTheme = function() {
|
||||||
$location.url("/" + this.theme.urlid);
|
$location.url(this.theme.urlid);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<ol class="breadcrumb">
|
<ol class="breadcrumb">
|
||||||
<li ng-repeat="(k,exercice) in themes[current_theme].exercices" class="breadcrumb-item" ng-class="{active: k == current_exercice, disabled: !my.exercices[k]}">
|
<li ng-repeat="(k,exercice) in themes[current_theme].exercices" class="breadcrumb-item" ng-class="{active: k == current_exercice, disabled: !my.exercices[k]}">
|
||||||
<a ng-if="(k != current_exercice && !my.exercices[k])">{{ exercice.title }}</a>
|
<a ng-if="(k != current_exercice && !my.exercices[k])">{{ exercice.title }}</a>
|
||||||
<a ng-href="/{{ themes[current_theme].urlid }}/{{ themes[current_theme].exercices[k].urlid }}" ng-if="(k != current_exercice && my.exercices[k])" ng-class="{'text-success': my.exercices[k].solved}">
|
<a ng-href="{{ themes[current_theme].urlid }}/{{ themes[current_theme].exercices[k].urlid }}" ng-if="(k != current_exercice && my.exercices[k])" ng-class="{'text-success': my.exercices[k].solved}">
|
||||||
{{ exercice.title }}
|
{{ exercice.title }}
|
||||||
<span class="glyphicon glyphicon-gift" aria-hidden="true" ng-if="themes[current_theme].exercices[k].curcoeff > 1.0"></span>
|
<span class="glyphicon glyphicon-gift" aria-hidden="true" ng-if="themes[current_theme].exercices[k].curcoeff > 1.0"></span>
|
||||||
<span class="glyphicon glyphicon-ok text-success" aria-hidden="true" ng-if="(my.team_id && my.exercices[k].solved)"></span>
|
<span class="glyphicon glyphicon-ok text-success" aria-hidden="true" ng-if="(my.team_id && my.exercices[k].solved)"></span>
|
||||||
@ -25,7 +25,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="jumbotron niceborder text-indent mt-3" ng-if="(my.exercices[current_exercice])">
|
<div class="jumbotron niceborder text-indent mt-3" ng-if="(my.exercices[current_exercice])">
|
||||||
<h3 class="display-4">{{ themes[current_theme].exercices[current_exercice].title }}</h3>
|
<h3 class="display-4">{{ themes[current_theme].exercices[current_exercice].title }}</h3>
|
||||||
<a ng-href="/tags/{{tag}}" class="badge badge-pill badge-secondary mr-2 mb-2" ng-repeat="tag in themes[current_theme].exercices[current_exercice].tags">#{{ tag }}</a>
|
<a ng-href="tags/{{tag}}" class="badge badge-pill badge-secondary mr-2 mb-2" ng-repeat="tag in themes[current_theme].exercices[current_exercice].tags">#{{ tag }}</a>
|
||||||
<p class="lead text-justify" ng-bind-html="my.exercices[current_exercice].statement"></p>
|
<p class="lead text-justify" ng-bind-html="my.exercices[current_exercice].statement"></p>
|
||||||
<div class="alert alert-{{my.exercices[current_exercice].issuekind}}" ng-if="my.exercices[current_exercice].issue" ng-bind-html="my.exercices[current_exercice].issue"></div>
|
<div class="alert alert-{{my.exercices[current_exercice].issuekind}}" ng-if="my.exercices[current_exercice].issue" ng-bind-html="my.exercices[current_exercice].issue"></div>
|
||||||
<hr class="my-3">
|
<hr class="my-3">
|
||||||
@ -129,7 +129,7 @@
|
|||||||
<hr ng-if="my.exercices[current_exercice].finished">
|
<hr ng-if="my.exercices[current_exercice].finished">
|
||||||
<p class="card-text" ng-if="my.exercices[current_exercice].finished" ng-bind-html="my.exercices[current_exercice].finished"></p>
|
<p class="card-text" ng-if="my.exercices[current_exercice].finished" ng-bind-html="my.exercices[current_exercice].finished"></p>
|
||||||
<hr ng-if="my.exercices[current_exercice].finished && themes[current_theme].exercices[current_exercice].next">
|
<hr ng-if="my.exercices[current_exercice].finished && themes[current_theme].exercices[current_exercice].next">
|
||||||
<a href="/{{ themes[current_theme].urlid }}/{{ themes[current_theme].exercices[themes[current_theme].exercices[current_exercice].next].urlid }}" class="btn btn-success" ng-if="themes[current_theme].exercices[current_exercice].next">Passer au défi suivant</a>
|
<a href="{{ themes[current_theme].urlid }}/{{ themes[current_theme].exercices[themes[current_theme].exercices[current_exercice].next].urlid }}" class="btn btn-success" ng-if="themes[current_theme].exercices[current_exercice].next">Passer au défi suivant</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -2,13 +2,13 @@
|
|||||||
<strong>Attention :</strong> puisqu'il s'agit de captures effectuées dans le but de découvrir si des actes malveillants ont été commis sur différents systèmes d'information, les contenus qui sont téléchargeables <em>peuvent</em> contenir du contenu malveillant !
|
<strong>Attention :</strong> puisqu'il s'agit de captures effectuées dans le but de découvrir si des actes malveillants ont été commis sur différents systèmes d'information, les contenus qui sont téléchargeables <em>peuvent</em> contenir du contenu malveillant !
|
||||||
</div>
|
</div>
|
||||||
<div class="alert text-justify" ng-if="(my.team_id)" style="background-color: #4eaee6;">
|
<div class="alert text-justify" ng-if="(my.team_id)" style="background-color: #4eaee6;">
|
||||||
<strong>Félicitations <span ng-repeat="member in my.members"><span ng-if="$last && !$first"> et </span><span ng-if="$middle">, </span>{{ member.firstname | capitalize }} {{ member.lastname | capitalize }}</span> !</strong> vous êtes maintenant connecté à l'espace de votre équipe <em>{{ teams[my.team_id].name }}</em>. Vous pouvez changer ce nom dès maintenant en vous rendant sur la page de <a href="/edit">votre équipe</a>.
|
<strong>Félicitations <span ng-repeat="member in my.members"><span ng-if="$last && !$first"> et </span><span ng-if="$middle">, </span>{{ member.firstname | capitalize }} {{ member.lastname | capitalize }}</span> !</strong> vous êtes maintenant connecté à l'espace de votre équipe <em>{{ teams[my.team_id].name }}</em>. Vous pouvez changer ce nom dès maintenant en vous rendant sur la page de <a href="edit">votre équipe</a>.
|
||||||
</div>
|
</div>
|
||||||
<div class="alert alert-warning text-justify" ng-if="(my.team_id && !my.members.length)">
|
<div class="alert alert-warning text-justify" ng-if="(my.team_id && !my.members.length)">
|
||||||
<strong>Les membres de votre équipes ne sont pas encore enregistrés.</strong> Passez voir l'équipe serveur pour corriger cela.
|
<strong>Les membres de votre équipes ne sont pas encore enregistrés.</strong> Passez voir l'équipe serveur pour corriger cela.
|
||||||
</div>
|
</div>
|
||||||
<div class="alert alert-warning text-justify" ng-if="!my && settings.allowRegistration">
|
<div class="alert alert-warning text-justify" ng-if="!my && settings.allowRegistration">
|
||||||
<strong>Votre équipe n'est pas encore enregistrée.</strong> Rendez-vous sur <a href="/register">cette page</a> pour procéder à votre inscription.
|
<strong>Votre équipe n'est pas encore enregistrée.</strong> Rendez-vous sur <a href="register">cette page</a> pour procéder à votre inscription.
|
||||||
</div>
|
</div>
|
||||||
<div class="alert alert-danger text-justify" ng-if="!my && !settings.allowRegistration">
|
<div class="alert alert-danger text-justify" ng-if="!my && !settings.allowRegistration">
|
||||||
<strong>Il semblerait qu'il y ait eu un problème lors de l'attribution de votre certificat.</strong> Veuillez vous signaler auprès de notre équipe afin de corriger ce problème.
|
<strong>Il semblerait qu'il y ait eu un problème lors de l'attribution de votre certificat.</strong> Veuillez vous signaler auprès de notre équipe afin de corriger ce problème.
|
||||||
@ -19,7 +19,7 @@
|
|||||||
<div class="card-img-top theme-card" ng-show="theme.image" style="background-image: url({{ theme.image }})"></div>
|
<div class="card-img-top theme-card" ng-show="theme.image" style="background-image: url({{ theme.image }})"></div>
|
||||||
<div class="card-body text-indent">
|
<div class="card-body text-indent">
|
||||||
<h5 class="card-title">
|
<h5 class="card-title">
|
||||||
<a ng-href="/{{ theme.urlid }}">{{ theme.name }}</a>
|
<a ng-href="{{ theme.urlid }}">{{ theme.name }}</a>
|
||||||
</h5>
|
</h5>
|
||||||
<p class="card-text text-justify" ng-bind-html="theme.headline"></p>
|
<p class="card-text text-justify" ng-bind-html="theme.headline"></p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -3,12 +3,12 @@
|
|||||||
<div class="card-img-top theme-card" ng-show="ex.theme.image" style="background-image: url({{ ex.theme.image }})"></div>
|
<div class="card-img-top theme-card" ng-show="ex.theme.image" style="background-image: url({{ ex.theme.image }})"></div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h6 class="card-title">
|
<h6 class="card-title">
|
||||||
<a ng-href="/{{ex.theme.urlid}}">{{ex.theme.name}}</a> >
|
<a ng-href="{{ex.theme.urlid}}">{{ex.theme.name}}</a> >
|
||||||
<a ng-href="/{{ex.theme.urlid}}/{{ex.exercice.urlid}}">{{ex.exercice.title}}</a>
|
<a ng-href="{{ex.theme.urlid}}/{{ex.exercice.urlid}}">{{ex.exercice.title}}</a>
|
||||||
<span class="glyphicon glyphicon-gift" aria-hidden="true" ng-if="ex.exercice.curcoeff > 1.0" title="Un bonus est actuellement appliqué lors de la résolution de ce défi"></span>
|
<span class="glyphicon glyphicon-gift" aria-hidden="true" ng-if="ex.exercice.curcoeff > 1.0" title="Un bonus est actuellement appliqué lors de la résolution de ce défi"></span>
|
||||||
</h6>
|
</h6>
|
||||||
<div class="clearfix mb-2">
|
<div class="clearfix mb-2">
|
||||||
<a ng-href="/tags/{{tag}}" class="badge badge-pill badge-secondary mr-2 float-right" ng-repeat="tag in themes[ex.tid].exercices[ex.eid].tags">#{{ tag }}</a>
|
<a ng-href="tags/{{tag}}" class="badge badge-pill badge-secondary mr-2 float-right" ng-repeat="tag in themes[ex.tid].exercices[ex.eid].tags">#{{ tag }}</a>
|
||||||
</div>
|
</div>
|
||||||
<p class="card-text text-justify text-indent" ng-bind-html="ex.exercice.headline"></p>
|
<p class="card-text text-justify text-indent" ng-bind-html="ex.exercice.headline"></p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -7,14 +7,14 @@
|
|||||||
<div class="card niceborder" ng-repeat="(k,exercice) in themes[current_theme].exercices">
|
<div class="card niceborder" ng-repeat="(k,exercice) in themes[current_theme].exercices">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title clearfix">
|
<h5 class="card-title clearfix">
|
||||||
<a ng-href="/{{ themes[current_theme].urlid }}/{{ themes[current_theme].exercices[k].urlid }}" ng-if="my.exercices[k]">
|
<a ng-href="{{ themes[current_theme].urlid }}/{{ themes[current_theme].exercices[k].urlid }}" ng-if="my.exercices[k]">
|
||||||
{{ exercice.title }}
|
{{ exercice.title }}
|
||||||
</a>
|
</a>
|
||||||
<span ng-if="!my.exercices[k]">
|
<span ng-if="!my.exercices[k]">
|
||||||
<span class="glyphicon glyphicon-lock" aria-hidden="true" title="Vous n'avez pas encore accès à ce défi"></span>
|
<span class="glyphicon glyphicon-lock" aria-hidden="true" title="Vous n'avez pas encore accès à ce défi"></span>
|
||||||
{{ exercice.title }}
|
{{ exercice.title }}
|
||||||
</span>
|
</span>
|
||||||
<a ng-href="/tags/{{tag}}" class="badge badge-pill badge-secondary ml-1 float-right" ng-repeat="tag in themes[current_theme].exercices[k].tags">#{{tag}}</a>
|
<a ng-href="tags/{{tag}}" class="badge badge-pill badge-secondary ml-1 float-right" ng-repeat="tag in themes[current_theme].exercices[k].tags">#{{tag}}</a>
|
||||||
<span class="glyphicon glyphicon-ok" aria-hidden="true" ng-if="(my.team_id && my.exercices[k].solved)"></span>
|
<span class="glyphicon glyphicon-ok" aria-hidden="true" ng-if="(my.team_id && my.exercices[k].solved)"></span>
|
||||||
<span class="glyphicon glyphicon-gift" aria-hidden="true" ng-if="themes[current_theme].exercices[k].curcoeff > 1.0" title="Un bonus est actuellement appliqué lors de la résolution de ce défi"></span>
|
<span class="glyphicon glyphicon-gift" aria-hidden="true" ng-if="themes[current_theme].exercices[k].curcoeff > 1.0" title="Un bonus est actuellement appliqué lors de la résolution de ce défi"></span>
|
||||||
</h5>
|
</h5>
|
||||||
|
Loading…
Reference in New Issue
Block a user