Compare commits

...

24 Commits

Author SHA1 Message Date
Hykilpikonna 6343a10fbc [O] Dynamic radar min value 2019-11-09 23:47:30 -05:00
Hykilpikonna 14beb802b0 [+] Display weight percentage for pie too 2019-11-09 23:29:11 -05:00
Hykilpikonna be71c4ea0b [O] Use the same text style for pie graph 2019-11-09 23:28:46 -05:00
Hykilpikonna 4bd34d46be [O] Separate textStyle to GraphUtils 2019-11-09 23:27:44 -05:00
Hykilpikonna 670ac48516 [O] Use more descriptive title for radar too 2019-11-09 23:23:52 -05:00
Hykilpikonna 4ce7c625ea [O] Use more descriptive title for pie graph 2019-11-09 23:20:22 -05:00
Hykilpikonna 551930f47a [O] Make the center empty 2019-11-09 23:08:05 -05:00
Hykilpikonna 04ca753466 [S] Adjust opacity of the pie areas 2019-11-09 22:58:06 -05:00
Hykilpikonna 4169d5235a [S] Add drop shadow 2019-11-09 22:57:03 -05:00
Hykilpikonna c417698bf2 [S] Adjust y position of pie graph 2019-11-09 22:53:22 -05:00
Hykilpikonna b6bf6373f2 [S] Reduce radius 2019-11-09 22:53:10 -05:00
Hykilpikonna f4326cf9e1 [O] Better label alignment 2019-11-09 22:53:01 -05:00
Hykilpikonna cca9d5a240 [O] Adjust to correct color after sorting 2019-11-09 22:52:52 -05:00
Hykilpikonna 0af3cee18b [O] Sort pie chart data 2019-11-09 22:51:06 -05:00
Hykilpikonna 8d122f0100 [+] Show type name 2019-11-09 22:45:55 -05:00
Hykilpikonna 62373485f5 [O] Use percentage as weight 2019-11-09 22:45:40 -05:00
Hykilpikonna 472d83e9fb [S] Adjust height 2019-11-09 22:44:22 -05:00
Hykilpikonna 34231dc480 [+] Generate pie data 2019-11-09 22:38:36 -05:00
Hykilpikonna 3f6c9c1204 [O] Round weight to 2 digits 2019-11-09 22:38:22 -05:00
Hykilpikonna d0e627bd83 [O] Change title 2019-11-09 22:33:56 -05:00
Hykilpikonna 6e4074b050 [+] Add a type-pie to course-page 2019-11-09 22:30:45 -05:00
Hykilpikonna 963df01b6f [+] Create pie graph component 2019-11-09 22:29:19 -05:00
Hykilpikonna c807d4aecb [-] Remove unused css section 2019-11-09 22:28:40 -05:00
Hykilpikonna e2c9d05a7e [M] Rename type-radar directory too 2019-11-09 22:26:13 -05:00
10 changed files with 119 additions and 47 deletions
+1 -1
View File
@@ -256,7 +256,7 @@ export default class Course
? this.grading.weightingMap[type] : scoreMax / totalScoreMax;
// Return
return {name: type, id: typeAssignments[0].typeId, weight: weight,
return {name: type, id: typeAssignments[0].typeId, weight: +(weight * 100).toFixed(2),
scoreMax: scoreMax, score: score, percent: +(score / scoreMax * 100).toFixed(2)}
})
}
+17
View File
@@ -70,4 +70,21 @@ export default class GraphUtils
]
}
}
/**
* Text style for pie graphs or radar graphs
*/
static pieTextStyle()
{
return {
fontSize: 14,
textShadowColor: '#cfcfcf',
textShadowBlur: 2,
textShadowOffsetX: 1,
textShadowOffsetY: 1,
backgroundColor: '#f6f6f6',
borderRadius: 3,
padding: [3, 5]
}
}
}
+6
View File
@@ -18,3 +18,9 @@
// https://stackoverflow.com/questions/17572619/inset-box-shadow-only-on-one-side
box-shadow: inset 0 7px 9px -7px rgba(0,0,0,0.1);
}
.type-graph
{
padding-top: 23px;
height: 420px !important;
}
+10 -5
View File
@@ -17,12 +17,16 @@
<el-row>
<el-col :span="12">
<el-card class="large overall-line-card vertical-center" body-style="padding: 0">
<CourseTypeRadar :course="course"></CourseTypeRadar>
<el-card class="large overall-line-card vertical-center type-graph"
body-style="padding: 0">
<TypeRadar :course="course"></TypeRadar>
</el-card>
</el-col>
<el-col :span="12">
Hi
<el-card class="large overall-line-card vertical-center type-graph"
body-style="padding: 0">
<TypePie :course="course"></TypePie>
</el-card>
</el-col>
</el-row>
@@ -40,10 +44,11 @@
import AssignmentEntry from '@/pages/overall/overall-course/assignment-entry/assignment-entry.vue';
import AssignmentTypeHead from '@/pages/course/assignment-type-head/assignment-type-head.vue';
import Course, {Assignment} from '@/logic/course';
import TypeRadar from '@/pages/course/course-type-radar/type-radar';
import TypeRadar from '@/pages/course/type-radar/type-radar';
import TypePie from '@/pages/course/type-pie/type-pie';
@Component({
components: {CourseTypeRadar: TypeRadar, AssignmentEntry, CourseHead, CourseScatter, AssignmentTypeHead}
components: {TypeRadar, TypePie, AssignmentEntry, CourseHead, CourseScatter, AssignmentTypeHead}
})
export default class CoursePage extends Vue
{
@@ -5,12 +5,4 @@
</template>
<script src="./course-scatter.ts" lang="ts"></script>
<style lang="scss" scoped>
#overall-bar
{
.graph
{
margin-top: 50px;
}
}
</style>
<style lang="scss" scoped></style>
@@ -1,16 +0,0 @@
<template>
<div id="course-scatter">
<ve-radar height="450px" class="graph" :extend="{a: this.course.name}" :after-config="afterConfig"></ve-radar>
</div>
</template>
<script src="./type-radar.ts" lang="ts"></script>
<style lang="scss" scoped>
#overall-bar
{
.graph
{
margin-top: 50px;
}
}
</style>
+60
View File
@@ -0,0 +1,60 @@
import {Component, Prop, Vue} from 'vue-property-decorator';
import Constants from '@/constants';
import {FormatUtils} from '@/logic/utils/format-utils';
import moment from 'moment';
import Course, {Assignment} from '@/logic/course';
import GraphUtils from '@/logic/utils/graph-utils';
@Component
export default class TypePie extends Vue
{
@Prop({required: true}) course: Course;
/**
* Override options
*
* @param options Original options (Unused)
*/
afterConfig(options: any)
{
return this.chartSettings;
}
/**
* Generate settings
*/
get chartSettings()
{
// Create settings
let settings =
{
...GraphUtils.getBaseSettings('Assignment Type Weight',
'How much each type of assignment affect your average'),
tooltip: {},
// Data
series:
{
type: 'pie',
avoidLabelOverlap: false,
radius: ['40%', '60%'],
center: ['50%', '55%'],
label: GraphUtils.pieTextStyle(),
data: this.course.assignmentTypes.map((t, i) => {return {
value: t.weight,
name: `${t.name}\n${t.weight}%`,
itemStyle:
{
color: Constants.THEME.colors[i],
opacity: 0.8,
shadowColor: 'rgba(0,0,0,0.22)',
shadowBlur: 10
}
}}).sort((a, b) => a.value - b.value)
}
};
return settings;
}
}
+8
View File
@@ -0,0 +1,8 @@
<template>
<div id="type-pie">
<ve-pie height="420px" class="graph" :extend="{a: this.course.name}" :after-config="afterConfig"></ve-pie>
</div>
</template>
<script src="./type-pie.ts" lang="ts"></script>
<style lang="scss" scoped></style>
@@ -25,11 +25,13 @@ export default class TypeRadar extends Vue
*/
get chartSettings()
{
let min = this.course.assignmentTypes.reduce((min, t) => Math.min(min, t.percent), 100);
// Create settings
let settings =
{
...GraphUtils.getBaseSettings('Type Radar',
'Assignment type grades for ' + this.course.name),
...GraphUtils.getBaseSettings('Assignment Type Radar',
'How are you doing for different types of assignment'),
// Radar settings
radar:
@@ -37,18 +39,7 @@ export default class TypeRadar extends Vue
// shape: 'circle',
name:
{
textStyle:
{
fontSize: 14,
textShadowColor: '#cfcfcf',
textShadowBlur: 2,
textShadowOffsetX: 1,
textShadowOffsetY: 1,
color: '#fff',
backgroundColor: '#f6f6f6',
borderRadius: 3,
padding: [3, 5]
}
textStyle: GraphUtils.pieTextStyle()
},
splitArea:
{
@@ -68,10 +59,11 @@ export default class TypeRadar extends Vue
indicator: this.course.assignmentTypes.map((t, i) => {return {
name: `${t.name}\n${t.percent}%`,
max: 100,
min: min - 30,
color: Constants.THEME.colors[i]
}}),
radius: '60%',
center: ['50%', '60%']
center: ['50%', '55%']
},
tooltip: {},
@@ -90,7 +82,7 @@ export default class TypeRadar extends Vue
color:
{
type: 'radial',
x: 0.5, y: 0.6, r: 0.5,
x: 0.5, y: 0.55, r: 0.5,
colorStops:
[
{offset: 0, color: '#ffa0a0'},
@@ -0,0 +1,8 @@
<template>
<div id="type-radar">
<ve-radar height="420px" class="graph" :extend="{a: this.course.name}" :after-config="afterConfig"></ve-radar>
</div>
</template>
<script src="./type-radar.ts" lang="ts"></script>
<style lang="scss" scoped></style>