From badb078a9e181e1fb2918f98391d0f1189c4bce0 Mon Sep 17 00:00:00 2001 From: Ihsan Ullah Date: Sat, 5 Aug 2023 21:38:15 +0500 Subject: [PATCH 1/3] score in bold if more than one score and score is primary i.e. index == 0 --- src/apps/api/serializers/leaderboards.py | 1 + src/apps/api/views/competitions.py | 1 - .../riot/competitions/detail/leaderboards.tag | 22 ++++++++++++++++--- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/apps/api/serializers/leaderboards.py b/src/apps/api/serializers/leaderboards.py index 74aede7f5..9e2fef623 100644 --- a/src/apps/api/serializers/leaderboards.py +++ b/src/apps/api/serializers/leaderboards.py @@ -25,6 +25,7 @@ class Meta: 'index', 'hidden', 'precision', + 'index' ) def validate(self, attrs): diff --git a/src/apps/api/views/competitions.py b/src/apps/api/views/competitions.py index 4dc0e4b30..4cce61f1a 100644 --- a/src/apps/api/views/competitions.py +++ b/src/apps/api/views/competitions.py @@ -619,7 +619,6 @@ def get_leaderboard(self, request, pk): # put detailed results in its submission for k, v in submissions_keys.items(): response['submissions'][v]['detailed_results'] = submission_detailed_results[k] - print(f"\n{response['submissions']}\n") for task in query['tasks']: # This can be used to rendered variable columns on each task diff --git a/src/static/riot/competitions/detail/leaderboards.tag b/src/static/riot/competitions/detail/leaderboards.tag index 7176cc213..dce50fe6a 100644 --- a/src/static/riot/competitions/detail/leaderboards.tag +++ b/src/static/riot/competitions/detail/leaderboards.tag @@ -63,7 +63,7 @@ - {get_score(column, submission)} + {get_score(column, submission)} @@ -81,6 +81,22 @@ self.competition_id = null self.enable_detailed_results = false + + self.bold_class = function(column, submission){ + // Return `text-bold` if submission has + // more than one scores and score index == 0 + // otherwise return empty string + return_class = '' // default class value + if(column.task_id != -1){ // factsheet check + if(submission.scores.length > 1){ // score length check + let column_index = _.get(column, 'index') + if(column_index === 0){ // column index check + return_class = 'text-bold' + } + } + } + return return_class + } self.get_score = function(column, submission) { if(column.task_id === -1){ return _.get(submission, 'fact_sheet_answers[' + column.key + ']', 'n/a') @@ -106,7 +122,6 @@ self.filter_columns = () => { let search_key = self.refs.leaderboardFilter.value.toLowerCase() self.filtered_tasks = JSON.parse(JSON.stringify(self.selected_leaderboard.tasks)) - console.log(self.filtered_tasks) if(search_key){ self.filtered_columns = [] for (const column of self.columns){ @@ -162,7 +177,6 @@ }) task.colWidth += 1 } - console.log(task) } self.filter_columns() $('#leaderboardTable').tablesort() @@ -220,5 +234,7 @@ top: 50% left: 50% transform: translate(-50%, -50%) + .text-bold + font-weight: bold From e31937d522f69f668962fa03537cb64f5c265787 Mon Sep 17 00:00:00 2001 From: Ihsan Ullah Date: Thu, 10 Aug 2023 14:59:57 +0500 Subject: [PATCH 2/3] primary col bold fixed, hidden scores not returned in api anymore --- src/apps/api/serializers/leaderboards.py | 5 +++++ src/apps/api/views/competitions.py | 18 +++++++++++++++++- .../riot/competitions/detail/leaderboards.tag | 4 ++-- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/apps/api/serializers/leaderboards.py b/src/apps/api/serializers/leaderboards.py index 9e2fef623..eec2fe952 100644 --- a/src/apps/api/serializers/leaderboards.py +++ b/src/apps/api/serializers/leaderboards.py @@ -124,6 +124,7 @@ class LeaderboardPhaseSerializer(serializers.ModelSerializer): submissions = serializers.SerializerMethodField(read_only=True) columns = serializers.SerializerMethodField() tasks = PhaseTaskInstanceSerializer(source='task_instances', many=True) + primary_index = serializers.SerializerMethodField() def get_columns(self, instance): columns = Column.objects.filter(leaderboard=instance.leaderboard, hidden=False) @@ -132,6 +133,9 @@ def get_columns(self, instance): else: return ColumnSerializer(columns, many=len(columns) >= 1).data + def get_primary_index(self, instance): + return instance.leaderboard.primary_index + class Meta: model = Phase fields = ( @@ -141,6 +145,7 @@ class Meta: 'tasks', 'leaderboard', 'columns', + 'primary_index', ) depth = 1 diff --git a/src/apps/api/views/competitions.py b/src/apps/api/views/competitions.py index 4cce61f1a..e4f0695c2 100644 --- a/src/apps/api/views/competitions.py +++ b/src/apps/api/views/competitions.py @@ -553,6 +553,7 @@ def get_leaderboard(self, request, pk): 'submissions': [], 'tasks': [], 'fact_sheet_keys': fact_sheet_keys or None, + 'primary_index': query['leaderboard']['primary_index'] } columns = [col for col in query['columns']] submissions_keys = {} @@ -600,21 +601,36 @@ def get_leaderboard(self, request, pk): }) for score in submission['scores']: + # to check if a column is found + # this is useful because of `hidden` field + # if a column is hidden it will not be shown here so + # we will not return that score to the front-end + column_found = False # default precision is set to 2 precision = 2 + # default hidden is set to false + hidden = False # loop over columns to find a column with the same index # replace default precision with column precision for col in columns: if col["index"] == score["index"]: precision = col["precision"] + hidden = col["hidden"] + column_found = True break tempScore = score tempScore['task_id'] = submission['task'] # round the score to 'precision' decimal points tempScore['score'] = str(round(float(tempScore["score"]), precision)) - response['submissions'][submissions_keys[submission_key]]['scores'].append(tempScore) + + # only add scores to the scores list + # if this column is found + # and + # column is not hidden + if column_found and not hidden: + response['submissions'][submissions_keys[submission_key]]['scores'].append(tempScore) # put detailed results in its submission for k, v in submissions_keys.items(): diff --git a/src/static/riot/competitions/detail/leaderboards.tag b/src/static/riot/competitions/detail/leaderboards.tag index dce50fe6a..6e27641c0 100644 --- a/src/static/riot/competitions/detail/leaderboards.tag +++ b/src/static/riot/competitions/detail/leaderboards.tag @@ -84,13 +84,13 @@ self.bold_class = function(column, submission){ // Return `text-bold` if submission has - // more than one scores and score index == 0 + // more than one scores and score index == leaderbaord.primary_index // otherwise return empty string return_class = '' // default class value if(column.task_id != -1){ // factsheet check if(submission.scores.length > 1){ // score length check let column_index = _.get(column, 'index') - if(column_index === 0){ // column index check + if(column_index === self.selected_leaderboard.primary_index){ // column index check return_class = 'text-bold' } } From 05650ff1b6dd39d9eece88ff53b549e255bc1ee8 Mon Sep 17 00:00:00 2001 From: Ihsan Ullah Date: Thu, 10 Aug 2023 19:53:57 +0500 Subject: [PATCH 3/3] index was repeated --- src/apps/api/serializers/leaderboards.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/apps/api/serializers/leaderboards.py b/src/apps/api/serializers/leaderboards.py index eec2fe952..2ab509898 100644 --- a/src/apps/api/serializers/leaderboards.py +++ b/src/apps/api/serializers/leaderboards.py @@ -25,7 +25,6 @@ class Meta: 'index', 'hidden', 'precision', - 'index' ) def validate(self, attrs):