Added progress circles
This commit is contained in:
parent
11e5f99ba4
commit
0cf5619117
3 changed files with 60 additions and 34 deletions
|
@ -69,6 +69,11 @@ export default {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 0.2,
|
default: 0.2,
|
||||||
},
|
},
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -81,44 +86,40 @@ export default {
|
||||||
},
|
},
|
||||||
fraction(){
|
fraction(){
|
||||||
if(this.max - this.min == 0){
|
if(this.max - this.min == 0){
|
||||||
return 1;
|
return 0;
|
||||||
// 0 size is always full :)
|
// 0 size is always empty :)
|
||||||
} else {
|
} else {
|
||||||
return (this.value - this.min)/(this.max - this.min);
|
return (this.value - this.min)/(this.max - this.min);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
center() {
|
radius() {
|
||||||
const x = (1+this.stroke)*50;
|
return 50 - (50*this.stroke);
|
||||||
const y = x;
|
|
||||||
return { 'x' : x, 'y' : y };
|
|
||||||
},
|
},
|
||||||
size() {
|
arcpath() {
|
||||||
const w = (1+this.stroke)*100;
|
let fraction = 0;
|
||||||
const h = w;
|
const r = 50 - (50*this.stroke);
|
||||||
return { 'h' : h, 'w' : w };
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
arcpath(cx, cy, r) {
|
|
||||||
let fraction = 1;
|
|
||||||
if(this.max - this.min != 0){
|
if(this.max - this.min != 0){
|
||||||
fraction = (this.value - this.min)/(this.max - this.min);
|
fraction = (this.value - this.min)/(this.max - this.min);
|
||||||
}
|
}
|
||||||
|
|
||||||
const Δ = fraction * 2*π;
|
const Δ = fraction * 2*π;
|
||||||
return svgarcpath([cx,cy],[r,r],[0,Δ],270);
|
return svgarcpath([50,50],[r,r],[0,Δ], 1.5*π);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
methods: {
|
||||||
|
},
|
||||||
template: `
|
template: `
|
||||||
<span class='r-progress-circle'><svg
|
<svg width="1em" height="1em" viewBox="0 0 100 100">
|
||||||
:width="(1+stroke)+'em'"
|
<title>{{title}}</title>
|
||||||
:height="(1+stroke)+'em'"
|
<circle v-if="fraction >= 1.0" cx="50" cy="50" :r="radius"
|
||||||
:viewbox="'0 0 '+ size.w + ' '+size.h">
|
:style="'opacity: 1; stroke-width: '+ (stroke*100)+'; stroke: currentcolor; fill: none;'"/>
|
||||||
<circle :cx="center.x" :cy="center.y" :r="50"
|
<g v-else>
|
||||||
|
<circle cx="50" cy="50" :r="radius"
|
||||||
:style="'opacity: ' + bgopacity + ';stroke-width: '+ (stroke*100)+'; stroke: currentcolor; fill: none;'"/>
|
:style="'opacity: ' + bgopacity + ';stroke-width: '+ (stroke*100)+'; stroke: currentcolor; fill: none;'"/>
|
||||||
<path :d="arcpath(center.x,center.y,50)"
|
<path :d="arcpath"
|
||||||
:style="'stroke-width: ' + (stroke*100) +'; stroke: currentcolor; fill: none;'"/>
|
:style="'stroke-width: ' + (stroke*100) +'; stroke: currentcolor; fill: none;'"/>
|
||||||
</svg></span>
|
</g>
|
||||||
|
</svg>
|
||||||
`,
|
`,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -630,6 +631,7 @@ export default {
|
||||||
:max='value.course.completion.count'
|
:max='value.course.completion.count'
|
||||||
:min='0'
|
:min='0'
|
||||||
:class="'r-course-result r-completion-'+value.completion"
|
:class="'r-course-result r-completion-'+value.completion"
|
||||||
|
:title="text['completion_'+value.completion]"
|
||||||
></r-progress-circle>
|
></r-progress-circle>
|
||||||
<i v-else v-b-popover.top
|
<i v-else v-b-popover.top
|
||||||
:class="'r-course-result fa fa-'+completion_icon(value.completion)+
|
:class="'r-course-result fa fa-'+completion_icon(value.completion)+
|
||||||
|
@ -853,8 +855,12 @@ export default {
|
||||||
<template v-for='cgroup in value.conditions'>
|
<template v-for='cgroup in value.conditions'>
|
||||||
<tr>
|
<tr>
|
||||||
<th colspan='2'>{{cgroup.title}}</th>
|
<th colspan='2'>{{cgroup.title}}</th>
|
||||||
<th><i :class="'fa fa-'+completion_icon(cgroup.status)+' r-completion-'+cgroup.status"
|
<th><r-progress-circle
|
||||||
:title="text['completion_'+cgroup.status]"></i></th>
|
:value='cgroup.progress'
|
||||||
|
:max='cgroup.count'
|
||||||
|
:class="'r-completion-'+cgroup.status"
|
||||||
|
:title="text['completion_'+cgroup.status]"
|
||||||
|
></r-progress-circle></th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr v-for='ci in cgroup.items'>
|
<tr v-for='ci in cgroup.items'>
|
||||||
<td><span v-if='guestmode'>{{ci.title}}</span>
|
<td><span v-if='guestmode'>{{ci.title}}</span>
|
||||||
|
|
|
@ -113,7 +113,9 @@ class corecompletioninfo {
|
||||||
"type" => new \external_value(PARAM_TEXT, 'completion type name'),
|
"type" => new \external_value(PARAM_TEXT, 'completion type name'),
|
||||||
"aggregation" => new \external_value(PARAM_TEXT, 'completion aggregation for this type ["all","any"]'),
|
"aggregation" => new \external_value(PARAM_TEXT, 'completion aggregation for this type ["all","any"]'),
|
||||||
"completed" => new \external_value(PARAM_BOOL, 'current completion value for this type'),
|
"completed" => new \external_value(PARAM_BOOL, 'current completion value for this type'),
|
||||||
"status" => new \external_value(PARAM_TEXT, 'extended completion status ["incomplete","progress","complete", "complete-pass","complete-fail"]')
|
"status" => new \external_value(PARAM_TEXT, 'extended completion status ["incomplete","progress","complete", "complete-pass","complete-fail"]'),
|
||||||
|
"progress" => new \external_value(PARAM_INT, 'completed sub-conditions'),
|
||||||
|
"count" => new \external_value(PARAM_INT, 'total number of sub-conditions'),
|
||||||
], 'completion type',$value);
|
], 'completion type',$value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,9 +249,14 @@ class corecompletioninfo {
|
||||||
"items" => [],
|
"items" => [],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
$progress = 0;
|
||||||
foreach($completions as $completion){
|
foreach($completions as $completion){
|
||||||
$criteria = $completion->get_criteria();
|
$criteria = $completion->get_criteria();
|
||||||
|
|
||||||
|
if($completion->is_complete()) {
|
||||||
|
$progress += 1; // Add a point to the progress counter
|
||||||
|
}
|
||||||
|
|
||||||
$iinfo = [
|
$iinfo = [
|
||||||
"id" => $criteria->id,
|
"id" => $criteria->id,
|
||||||
"title" => $criteria->get_title_detailed(),
|
"title" => $criteria->get_title_detailed(),
|
||||||
|
@ -293,6 +300,20 @@ class corecompletioninfo {
|
||||||
// finally add the item to the items list
|
// finally add the item to the items list
|
||||||
$cinfo["items"][] = $iinfo;
|
$cinfo["items"][] = $iinfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set the count and progress stats based on the Type's aggregation style
|
||||||
|
if($typeaggregation == COMPLETION_AGGREGATION_ALL){
|
||||||
|
// Count and Progress amount to the sum of items
|
||||||
|
$cinfo["count"] = count($cinfo["items"]);
|
||||||
|
$cinfo["progress"] = $progress;
|
||||||
|
}
|
||||||
|
else { //$typeaggregation == COMPLETION_AGGREGATION_ANY
|
||||||
|
// Count and progress are either 1 or 0, since any of the items
|
||||||
|
// complete's the type
|
||||||
|
$cinfo["count"] = (count($cinfo["items"]) > 0)?1:0;
|
||||||
|
$cinfo["progress"] = ($progress>0)?1:0;
|
||||||
|
}
|
||||||
|
|
||||||
$info['conditions'][] = $cinfo;
|
$info['conditions'][] = $cinfo;
|
||||||
$info['pending'] = $anypending;
|
$info['pending'] = $anypending;
|
||||||
}
|
}
|
||||||
|
|
|
@ -674,26 +674,25 @@ a.t-item-course-config {
|
||||||
}
|
}
|
||||||
|
|
||||||
.r-item-start.completion-incomplete i,
|
.r-item-start.completion-incomplete i,
|
||||||
i.r-completion-incomplete {
|
.r-completion-incomplete {
|
||||||
color: #7f7f7f;
|
color: #7f7f7f;
|
||||||
}
|
}
|
||||||
i.r-completion-progress {
|
.r-completion-progress {
|
||||||
color: rgb(139, 107, 0);
|
color: rgb(139, 107, 0);
|
||||||
}
|
}
|
||||||
i.r-completion-completed, i.r-completion-complete-pass {
|
.r-completion-completed, .r-completion-complete-pass {
|
||||||
color: rgb(0, 126, 0);
|
color: rgb(0, 126, 0);
|
||||||
}
|
}
|
||||||
i.r-completion-good {
|
.r-completion-good {
|
||||||
color: #398;
|
color: #398;
|
||||||
}
|
}
|
||||||
i.r-completion-excellent, i.r-completion-complete {
|
.r-completion-excellent, .r-completion-complete {
|
||||||
color: rgb(0, 103, 255);
|
color: rgb(0, 103, 255);
|
||||||
}
|
}
|
||||||
i.r-completion-pending {
|
.r-completion-pending {
|
||||||
color: #7f7f7f;
|
color: #7f7f7f;
|
||||||
}
|
}
|
||||||
|
.r-completion-failed, .r-completion-complete-fail {
|
||||||
i.r-completion-failed, i.r-completion-complete-fail {
|
|
||||||
color: #933;
|
color: #933;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue