Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 28 additions & 2 deletions pdf/pdf.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from xblockutils.resources import ResourceLoader
from xblockutils.settings import XBlockWithSettingsMixin, ThemableXBlockMixin
from xblock.scorable import ScorableXBlockMixin, Score
from xblock.exceptions import JsonHandlerError
from .utils import _, DummyTranslationService
import pkg_resources
from mako.template import Template
Expand Down Expand Up @@ -130,8 +131,6 @@ def student_view(self, context=None):
}
self.runtime.publish(self, event_type, event_data)

self.runtime.publish(self, 'completion', {'completion': 1.0})

frag = Fragment(html)
frag.add_javascript(self.load_resource("static/js/pdf_view.js"))
##frag.add_resource_url(self.runtime.local_resource_url(self, "public/"))
Expand All @@ -145,6 +144,33 @@ def student_view(self, context=None):
})
return frag

@XBlock.json_handler
def publish_completion(self, data, dispatch): # pylint: disable=unused-argument
"""
Entry point for completion for student_view.

Parameters:
data: JSON dict:
key: "completion"
value: float in range [0.0, 1.0]

dispatch: Ignored.
Return value: JSON response (200 on success, 400 for malformed data)
"""
completion_service = self.runtime.service(self, 'completion')
if completion_service is None:
raise JsonHandlerError(500, u"No completion service found")
elif not completion_service.completion_tracking_enabled():
raise JsonHandlerError(404, u"Completion tracking is not enabled and API calls are unexpected")
if not isinstance(data['completion'], (int, float)):
message = u"Invalid completion value {}. Must be a float in range [0.0, 1.0]"
raise JsonHandlerError(400, message.format(data['completion']))
elif not 0.0 <= data['completion'] <= 1.0:
message = u"Invalid completion value {}. Must be in range [0.0, 1.0]"
raise JsonHandlerError(400, message.format(data['completion']))
self.runtime.publish(self, "completion", data)
return {"result": "ok"}

def studio_view(self, context=None):
"""
The secondary view of the XBlock, shown to teachers
Expand Down
2 changes: 1 addition & 1 deletion pdf/static/js/pdf_view.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions pdf/static/js/pdf_viewer.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,17 @@ function pdfXBlockInitView(runtime, element, json) {
$.post(handlerUrl, '{}');
});
});

var handlerUrl = runtime.handlerUrl(element, 'publish_completion');

window.onload = function() {
setTimeout(function() {
var data = {
'completion': 1.0,
};
$.post(handlerUrl, JSON.stringify(data)).complete(function() {});
}, 1000);
};
}

window.pdfXBlockInitView = pdfXBlockInitView;