Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
crowdsourcehinter
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
crowdsourcehinter
Commits
2176a98e
Commit
2176a98e
authored
May 08, 2015
by
solashirai
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
studio view/hint creation added
parent
e597f911
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
85 additions
and
9 deletions
+85
-9
crowdsourcehinter/crowdsourcehinter.py
+26
-5
crowdsourcehinter/static/html/crowdsourcehinterstudio.html
+27
-4
crowdsourcehinter/static/js/src/crowdsourcehinter_studio.js
+32
-0
No files found.
crowdsourcehinter/crowdsourcehinter.py
View file @
2176a98e
...
...
@@ -53,6 +53,9 @@ class CrowdsourceHinter(XBlock):
# This String represents the xblock element for which the hinter is running. It is necessary to manually
# set this value in the XML file under the format "hinting_element": "i4x://edX/DemoX/problem/Text_Input" .
# Setting the element in the XML file is critical for the hinter to work.
#
# TODO: probably should change the name from Element (problem_element? hinting_element?). Trying to
# just change the name didn't seem to operate properly, check carefully what is changed
Element
=
String
(
default
=
""
,
scope
=
Scope
.
content
)
def
studio_view
(
self
,
context
=
None
):
...
...
@@ -62,13 +65,28 @@ class CrowdsourceHinter(XBlock):
work.
"""
html
=
self
.
resource_string
(
"static/html/crowdsourcehinterstudio.html"
)
frag
=
Fragment
(
html
.
format
(
self
=
self
))
frag
=
Fragment
(
html
.
format
(
initial_hints
=
self
.
initial_hints
,
generic_hints
=
self
.
generic_hints
,
Element
=
self
.
Element
))
frag
.
add_javascript_url
(
'//cdnjs.cloudflare.com/ajax/libs/mustache.js/0.8.1/mustache.min.js'
)
frag
.
add_css
(
self
.
resource_string
(
"static/css/crowdsourcehinter.css"
))
frag
.
add_javascript
(
self
.
resource_string
(
"static/js/src/crowdsourcehinter.js"
))
frag
.
initialize_js
(
'CrowdsourceHinter'
)
frag
.
add_javascript
(
self
.
resource_string
(
"static/js/src/crowdsourcehinter_studio.js"
))
frag
.
initialize_js
(
'CrowdsourceHinterStudio'
,
{
'initial'
:
str
(
self
.
initial_hints
),
'generic'
:
str
(
self
.
generic_hints
),
'element'
:
str
(
self
.
Element
)})
return
frag
@XBlock.json_handler
def
set_initial_settings
(
self
,
data
,
suffix
=
''
):
"""
Set intial hints, generic hints, and problem element from the studio view.
"""
self
.
initial_hints
=
ast
.
literal_eval
(
str
(
data
[
'initial_hints'
]))
self
.
generic_hints
=
ast
.
literal_eval
(
str
(
data
[
'generic_hints'
]))
self
.
Element
=
str
(
data
[
'element'
])
print
data
[
'generic_hints'
]
print
str
(
self
.
generic_hints
)
print
data
[
'initial_hints'
]
print
str
(
self
.
initial_hints
)
print
str
(
data
[
'element'
])
print
ast
.
literal_eval
(
str
(
data
[
'initial_hints'
]))
return
def
resource_string
(
self
,
path
):
"""
This function is used to get the path of static resources.
...
...
@@ -113,6 +131,7 @@ class CrowdsourceHinter(XBlock):
"""
# populate hint_database with hints from initial_hints if there are no hints in hint_database.
# this probably will occur only on the very first run of a unit containing this block.
print
self
.
hint_database
if
not
bool
(
self
.
hint_database
):
self
.
hint_database
=
copy
.
copy
(
self
.
initial_hints
)
answer
=
str
(
data
[
"submittedanswer"
])
...
...
@@ -123,7 +142,9 @@ class CrowdsourceHinter(XBlock):
# the string returned by the event problem_graded is very messy and is different
# for each problem, but after all of the numbers/letters there is an equal sign, after which the
# student's input is shown. I use the function below to remove everything before the first equal
# sign and only take the student's actual input. This is not very clean.
# sign and only take the student's actual input.
#
# TODO: figure out better way to directly get text of student's answer
if
"="
in
answer
:
if
found_equal_sign
==
0
:
found_equal_sign
=
1
...
...
crowdsourcehinter/static/html/crowdsourcehinterstudio.html
View file @
2176a98e
<script
type=
'x-tmpl/mustache'
id=
'show_settings_UX'
>
<
p
>
Generic
Hints
:
<
input
type
=
"text"
class
=
"csh_generic_hints"
value
=
"{{generic}}"
>
<
/p
>
<
p
>
Initial
Hints
:
<
input
type
=
"text"
class
=
"csh_initial_hints"
value
=
"{{initial}}"
>
<
/p
>
<
p
>
Problem
Element
:
<
input
type
=
"text"
class
=
"csh_hinting_element"
value
=
"{{hinting_element}}"
>
<
/p
>
<
p
>
<
input
type
=
"button"
class
=
"csh_apply_settings"
value
=
"Apply Settings"
>
<
/p
>
</script>
<div
class=
"crowdsourcehinter_block"
>
<p
id=
"hint_purge"
>
The following hints have been reported by students. Select "dismiss" to return the hint for usage in the course, and select "remove" to remove it permanently from the course.
</p>
<div
class=
"crowdsourcehinter_edit_block"
>
<p>
Generic Hints:
<input
type=
"text"
class=
"csh_generic_hints"
value =
"{{generic}}"
>
</p>
<p>
Initial Hints:
<input
type=
"text"
class=
"csh_initial_hints"
value =
"{{initial}}"
>
</p>
<p>
Problem Element:
<input
type=
"text"
class=
"csh_hinting_element"
value =
"{{hinting_element}}"
>
</p>
<p>
<input
type=
"button"
class=
"csh_apply_settings"
value=
"Apply Settings"
>
</p>
</div>
crowdsourcehinter/static/js/src/crowdsourcehinter_studio.js
0 → 100644
View file @
2176a98e
function
CrowdsourceHinterStudio
(
runtime
,
element
,
data
){
/**
//:TODO for self, figure out why Mustache isn't working (anonymous funciton (what?) Mustache Not Defined (why?))
//Initialize html with current generic hints, initial hints, and problem element
//var showSettingsUX = $(Mustache.render($('#show_settings_UX').html(), {generic: data.generic, initial: data.initial, problem_element: data.problem_element}));
//$('.crowdsourcehinter_edit_block', element).append(showSettingsUX);
**/
//set text area values to be what is currently in the hinter. to be replaced by above code.
$
(
'.csh_initial_hints'
,
element
).
val
(
data
.
initial
);
$
(
'.csh_generic_hints'
,
element
).
val
(
data
.
generic
);
$
(
'.csh_hinting_element'
,
element
).
val
(
data
.
element
);
/**
* Apply settings for initial hints, generic hints, and the element for which the hinter is
* working.
*/
function
apply_settings
(){
return
function
(
apply_settings_button
){
var
initial
=
unescape
(
$
(
'.csh_initial_hints'
).
val
());
var
generic
=
unescape
(
$
(
'.csh_generic_hints'
).
val
());
var
hinting_element
=
unescape
(
$
(
'.csh_hinting_element'
).
val
());
$
.
ajax
({
type
:
"POST"
,
url
:
runtime
.
handlerUrl
(
element
,
'set_initial_settings'
),
data
:
JSON
.
stringify
({
"initial_hints"
:
initial
,
"generic_hints"
:
generic
,
"element"
:
hinting_element
}),
success
:
function
(){
console
.
log
(
"success"
);
}
});
}}
$
(
element
).
on
(
'click'
,
'.csh_apply_settings'
,
apply_settings
(
$
(
this
)));
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment