Skip to content
This repository was archived by the owner on Mar 12, 2021. It is now read-only.

Commit 7cc1ef5

Browse files
authored
Merge pull request #2 from ExtensionEngine/vkaracic/KF-725
KF-725: Remove page reload from done xblock.
2 parents cde5e37 + d6c3544 commit 7cc1ef5

3 files changed

Lines changed: 44 additions & 12 deletions

File tree

done/done.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
""" Show a toggle which lets students mark things as done."""
22

3+
import json
34
import pkg_resources
45
import uuid
6+
57
from django.template import Context, Template
68
from xblock.core import XBlock
79
from xblock.fields import Scope, String, Boolean, DateTime, Float
@@ -18,7 +20,6 @@ class DoneXBlock(XBlock):
1820
"""
1921
Show a toggle which lets students mark things as done.
2022
"""
21-
2223
done = Boolean(
2324
scope=Scope.user_state,
2425
help="Is the student done?",
@@ -76,9 +77,15 @@ def toggle_button(self, data, suffix=''):
7677
# is finished for XBlocks.
7778
self.runtime.publish(self, "edx.done.toggled", {'done': self.done, 'helpful': self.helpful})
7879

79-
8080
return {'state': {'done': self.done, 'helpful': self.helpful}}
8181

82+
@XBlock.handler
83+
def get_state(self, *args, **kwargs):
84+
return Response(body=json.dumps({
85+
'state': self.done,
86+
'helpful': self.helpful,
87+
}))
88+
8289
def student_view(self, context=None): # pylint: disable=unused-argument
8390
"""
8491
The primary view of the DoneXBlock, shown to students

done/static/js/src/done.js

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,25 @@ function update_knob(element, data) {
1616
}
1717
}
1818

19+
function addCheckIcon($element) {
20+
var icon = '<i class="fa fa-check-circle"></i>';
21+
$element.empty()
22+
.append(icon);
23+
}
24+
25+
1926
function DoneXBlock(runtime, element, data) {
20-
$('.done_onoffswitch-checkbox', element).prop("checked", data.state);
27+
// Updating the xblock state every time it's initialized.
28+
$.ajax({
29+
url: runtime.handlerUrl(element, 'get_state'),
30+
method: 'GET',
31+
success: function (data) {
32+
$('.done_onoffswitch-checkbox', element).prop("checked", data.state);
33+
if (data.helpful != null) {
34+
$('.done-radio input[value="' + data.helpful + '"]', element).prop('checked', true);
35+
}
36+
}
37+
});
2138

2239
if (data.align != "right") {
2340
$('.done_right_spacer', element).addClass("done_grow");
@@ -32,22 +49,30 @@ function DoneXBlock(runtime, element, data) {
3249
$(function ($) {
3350
$('.done_onoffswitch', element).addClass("done_animated");
3451
$('.done_onoffswitch-checkbox', element).change(function(){
35-
var checked = $('.done_onoffswitch-checkbox', element).prop("checked");
52+
var isChecked = $('.done_onoffswitch-checkbox', element).prop("checked");
3653
$.ajax({
37-
type: "POST",
38-
url: handlerUrl,
39-
data: JSON.stringify({'done':checked})
54+
type: "POST",
55+
url: handlerUrl,
56+
data: JSON.stringify({'done':isChecked}),
57+
success: function() {
58+
var $element = $('.menu-item.active .accordion-nav .icon-container');
59+
isChecked ? addCheckIcon($element) : $element.empty();
60+
}
4061
});
41-
Logger.log("edx.done.toggled", {'done': checked});
62+
Logger.log("edx.done.toggled", {'done': isChecked});
4263
update_knob(element, data);
4364
});
4465
$('.done-radio input[type=radio]').on('change', function(event) {
45-
var checked = event.target.checked;
46-
if(checked) {
66+
var isChecked = event.target.checked;
67+
if(isChecked) {
4768
$.ajax({
4869
type: "POST",
4970
url: handlerUrl,
50-
data: JSON.stringify({'helpful': event.target.value})
71+
data: JSON.stringify({'helpful': event.target.value}),
72+
success: function() {
73+
var $element = $('.accordion-unit.active .icon-container');
74+
addCheckIcon($element);
75+
}
5176
});
5277
}
5378
});

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def package_data(pkg, root):
1616

1717
setup(
1818
name='done-xblock',
19-
version='FT-1.0',
19+
version='FT-1.1',
2020
description='done XBlock', # TODO: write a better description.
2121
packages=[
2222
'done',

0 commit comments

Comments
 (0)