6c11a226e0537ad9f8ce9bc9bc06d008d74fbc2c
[mkwsxb-moved-to-github.git] / mkwsxb / mkwsxb.py
1 """Embed widgets from MKWS, the MasterKey Widget Set"""
2
3 import pkg_resources
4 import random
5
6 from xblock.core import XBlock
7 from xblock.fields import Integer, Scope, String, Any, Boolean, Dict
8 from xblock.fragment import Fragment
9
10 class MKWSXB(XBlock):
11     """Embed widgets from MKWS, the MasterKey Widget Set"""
12
13     # Fields
14     query = String(
15       help="Search query",
16       default="water",
17       scope=Scope.content
18     )
19
20     def resource_string(self, path):
21         """Helper for accessing resources."""
22         data = pkg_resources.resource_string(__name__, path)
23         return data.decode("utf8")
24
25     def student_view(self, context=None):
26         """The primary view of the MKWS XBlock, shown to students when viewing courses."""
27         html = self.resource_string("static/html/mkwsxb.html")
28         frag = Fragment(html.format(query=self.query, team=random.randint(0, 100000)))
29         frag.add_javascript_url("//mkws.indexdata.com/mkws-complete.js")
30         frag.add_javascript_url("//example.indexdata.com/mkws-widget-ru.js")
31         frag.add_css(self.resource_string("static/css/mkws-widget-ru.css"))
32         frag.add_javascript(self.resource_string("static/js/src/mkwsxb.js"))
33         frag.initialize_js('MKWSXB')
34         return frag;
35
36     def studio_view(self, context=None):
37         """Studio configuration view."""
38         html = self.resource_string("static/html/settings.html")
39         frag = Fragment(html.format(query=self.query))
40         frag.add_javascript(self.resource_string("static/js/src/settings.js"))
41         frag.initialize_js('MKWSXBSettings')
42         return frag
43
44     @XBlock.json_handler
45     def update_settings(self, data, suffix=''):
46         """Studio configuration callback."""
47         self.query = data['query']
48         return {"result": "success"}
49
50     @staticmethod
51     def workbench_scenarios():
52         """A canned scenario for display in the workbench."""
53         return [
54             ("MKWSXB",
55              """<vertical_demo>
56                 <mkwsxb/>
57                 </vertical_demo>
58              """),
59         ]