Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
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
edx
edx-platform
Commits
acfbe14e
Commit
acfbe14e
authored
Apr 09, 2013
by
Vasyl Nakvasiuk
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
word cloud done
parent
dac9b5c0
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
75 additions
and
60 deletions
+75
-60
common/lib/xmodule/xmodule/js/src/word_cloud/word_cloud_main.js
+4
-5
common/lib/xmodule/xmodule/word_cloud_module.py
+70
-54
common/test/data/word_cloud/sequential/Problem_Demos.xml
+1
-1
No files found.
common/lib/xmodule/xmodule/js/src/word_cloud/word_cloud_main.js
View file @
acfbe14e
...
@@ -29,16 +29,15 @@ WordCloudMain.prototype = {
...
@@ -29,16 +29,15 @@ WordCloudMain.prototype = {
console
.
log
(
'Bad response!'
);
console
.
log
(
'Bad response!'
);
return
;
return
;
}
}
console
.
log
(
'success! response = '
);
_this
.
showWordCloud
(
response
);
console
.
log
(
response
);
_this
.
showWordCloud
();
}
}
);
);
},
// End-of: 'submitAnswer': function (answer, answerEl) {
},
// End-of: 'submitAnswer': function (answer, answerEl) {
'showWordCloud'
:
function
(){
'showWordCloud'
:
function
(
response
){
console
.
log
(
'Show word cloud.'
);
console
.
log
(
'Show word cloud with next:'
);
console
.
log
(
response
);
inputSection
=
this
.
wordCloudEl
.
find
(
'#input-cloud-section'
);
inputSection
=
this
.
wordCloudEl
.
find
(
'#input-cloud-section'
);
resultSection
=
this
.
wordCloudEl
.
find
(
'#result-cloud-section'
);
resultSection
=
this
.
wordCloudEl
.
find
(
'#result-cloud-section'
);
...
...
common/lib/xmodule/xmodule/word_cloud_module.py
View file @
acfbe14e
...
@@ -11,6 +11,7 @@ Stunent can change his answer.
...
@@ -11,6 +11,7 @@ Stunent can change his answer.
import
cgi
import
cgi
import
json
import
json
import
logging
import
logging
import
re
from
copy
import
deepcopy
from
copy
import
deepcopy
from
collections
import
OrderedDict
from
collections
import
OrderedDict
...
@@ -29,14 +30,14 @@ log = logging.getLogger(__name__)
...
@@ -29,14 +30,14 @@ log = logging.getLogger(__name__)
class
WordCloudFields
(
object
):
class
WordCloudFields
(
object
):
# Name of poll to use in links to this poll
# Name of poll to use in links to this poll
display_name
=
String
(
help
=
"Display name for this module"
,
scope
=
Scope
.
settings
)
display_name
=
String
(
help
=
"Display name for this module"
,
scope
=
Scope
.
settings
)
num_inputs
=
Integer
(
help
=
"Number of inputs"
,
scope
=
Scope
.
settings
)
num_inputs
=
Integer
(
help
=
"Number of inputs"
,
scope
=
Scope
.
settings
,
default
=
5
)
num_top_words
=
Integer
(
help
=
"Number of inputs"
,
scope
=
Scope
.
settings
,
default
=
250
)
submitted
=
Boolean
(
help
=
"Whether this student has posted words to the cloud"
,
scope
=
Scope
.
student_state
,
default
=
False
)
submitted
=
Boolean
(
help
=
"Whether this student has posted words to the cloud"
,
scope
=
Scope
.
student_state
,
default
=
False
)
student_words
=
List
(
help
=
"Student answer"
,
scope
=
Scope
.
student_state
,
default
=
[])
student_words
=
List
(
help
=
"Student answer"
,
scope
=
Scope
.
student_state
,
default
=
[])
all_words
=
Object
(
help
=
"All possible words from other students"
,
scope
=
Scope
.
content
)
all_words
=
Object
(
help
=
"All possible words from other students"
,
scope
=
Scope
.
content
)
top_words
=
Object
(
help
=
"Top N words for word cloud"
,
scope
=
Scope
.
content
)
top_words
=
Object
(
help
=
"Top N words for word cloud"
,
scope
=
Scope
.
content
)
top_low_border
=
Integer
(
help
=
"Number to distinguish top from all words"
,
scope
=
Scope
.
content
)
class
WordCloudModule
(
WordCloudFields
,
XModule
):
class
WordCloudModule
(
WordCloudFields
,
XModule
):
"""WordCloud Module"""
"""WordCloud Module"""
...
@@ -49,7 +50,37 @@ class WordCloudModule(WordCloudFields, XModule):
...
@@ -49,7 +50,37 @@ class WordCloudModule(WordCloudFields, XModule):
css
=
{
'scss'
:
[
resource_string
(
__name__
,
'css/word_cloud/display.scss'
)]}
css
=
{
'scss'
:
[
resource_string
(
__name__
,
'css/word_cloud/display.scss'
)]}
js_module_name
=
"WordCloud"
js_module_name
=
"WordCloud"
number_of_top_words
=
250
def
get_state_json
(
self
):
if
self
.
submitted
:
return
json
.
dumps
({
'status'
:
'success'
,
'student_words'
:
self
.
student_words
,
'top_words'
:
self
.
prepare_words
(
self
.
top_words
)
})
else
:
return
json
.
dumps
({})
def
good_word
(
self
,
word
):
return
word
.
strip
()
.
lower
()
# TODO: use or remove
# real_words = re.findall('\w+', word)
# if real_words:
# return real_words[0].lower()
def
prepare_words
(
self
,
words
):
"""Convert words dictionary more handy for client."""
return
[{
'text'
:
word
,
'size'
:
count
}
for
word
,
count
in
words
.
iteritems
()]
def
top_dict
(
self
,
dict_obj
,
amount
):
return
dict
(
sorted
(
dict_obj
.
iteritems
(),
key
=
lambda
x
:
x
[
1
],
reverse
=
True
)[:
amount
]
)
def
handle_ajax
(
self
,
dispatch
,
get
):
def
handle_ajax
(
self
,
dispatch
,
get
):
"""Ajax handler.
"""Ajax handler.
...
@@ -62,68 +93,53 @@ class WordCloudModule(WordCloudFields, XModule):
...
@@ -62,68 +93,53 @@ class WordCloudModule(WordCloudFields, XModule):
json string
json string
"""
"""
if
dispatch
==
'submit'
:
if
dispatch
==
'submit'
:
student_words_from_client
=
json
.
loads
(
get
.
lists
()[
0
][
0
])[
'data'
]
if
self
.
submitted
:
return
json
.
dumps
({
'status'
:
'fail'
,
'error'
:
'You have already post your data.'
})
# Student words from client.
raw_student_words
=
json
.
loads
(
get
.
lists
()[
0
][
0
])[
'data'
]
student_words
=
filter
(
None
,
map
(
self
.
good_word
,
raw_student_words
))
if
not
student_words
:
return
json
.
dumps
({
'status'
:
'fail'
,
'error'
:
'Empty students words.'
})
self
.
student_words
=
student_words
# self.all_words[word] -= 1
# FIXME: fix this, when xblock will support mutable types.
# FIXME: fix this, when xblock will support mutable types.
# Now we use this hack.
# Now we use this hack.
# speed issues
# speed issues
temp_all_words
=
self
.
all_words
temp_all_words
=
self
.
all_words
temp_top_words
=
self
.
top_words
# if self.submitted:
# for word in self.student_words:
# temp_all_words[word] -= 1
# if word in temp_top_words:
# temp_top_words -= 1
# else:
# self.submitted = True
# self.student_words = student_words_from_client
self
.
submitted
=
True
# question_words = {}
# Save in all_words.
for
word
in
self
.
student_words
:
if
word
in
temp_all_words
:
temp_all_words
[
word
]
+=
1
else
:
temp_all_words
[
word
]
=
1
# for word in self.student_words:
# Update top_words
# temp_all_words[word] += 1
self
.
top_words
=
self
.
top_dict
(
temp_all_words
,
int
(
self
.
num_top_words
))
# if word in temp_top_words:
self
.
all_words
=
temp_all_words
# temp_top_words += 1
# else:
# if temp_all_words[word] > top_low_border:
# question_words[word] = temp_all_words[word]
return
self
.
get_state_json
()
# self.all_words = temp_all_words
# self.top_words = self.update_top_words(question_words, temp_top_words)
# return json.dumps({'student_words': self.student_words,
# 'top_words': self.top_words,
# })
return
json
.
dumps
({
'student_words'
:
[
'aa'
,
'bb'
],
'top_words'
:
[
'aa'
,
'bb'
,
'RRR'
],
'status'
:
'success'
})
elif
dispatch
==
'get_state'
:
elif
dispatch
==
'get_state'
:
return
json
.
dumps
({
'student_answers'
:
self
.
student_answers
,
return
self
.
get_state_json
()
'top_words'
:
self
.
top_words
,
else
:
'status'
:
'success'
return
json
.
dumps
({
})
'status'
:
'fail'
,
else
:
# return error message
'error'
:
'Unknown Command!'
return
json
.
dumps
({
'error'
:
'Unknown Command!'
})
})
def
update_top_words
(
question_words
,
top_words
):
for
word
,
number
in
question_words
:
for
top_word
,
top_number
in
top_words
[:]:
if
top_number
<
number
:
del
top_words
[
top_word
]
top_words
[
word
]
-
number
break
return
top_words
def
get_html
(
self
):
def
get_html
(
self
):
"""Renders parameters to template."""
"""Renders parameters to template."""
...
@@ -131,7 +147,7 @@ class WordCloudModule(WordCloudFields, XModule):
...
@@ -131,7 +147,7 @@ class WordCloudModule(WordCloudFields, XModule):
'element_id'
:
self
.
location
.
html_id
(),
'element_id'
:
self
.
location
.
html_id
(),
'element_class'
:
self
.
location
.
category
,
'element_class'
:
self
.
location
.
category
,
'ajax_url'
:
self
.
system
.
ajax_url
,
'ajax_url'
:
self
.
system
.
ajax_url
,
'configuration_json'
:
json
.
dumps
({}
),
'configuration_json'
:
self
.
get_state_json
(
),
'num_inputs'
:
int
(
self
.
num_inputs
),
'num_inputs'
:
int
(
self
.
num_inputs
),
}
}
self
.
content
=
self
.
system
.
render_template
(
'word_cloud.html'
,
params
)
self
.
content
=
self
.
system
.
render_template
(
'word_cloud.html'
,
params
)
...
...
common/test/data/word_cloud/sequential/Problem_Demos.xml
View file @
acfbe14e
<sequential>
<sequential>
<vertical>
<vertical>
<word_cloud
display_name=
"cloud"
num_inputs=
"5"
/>
<word_cloud
display_name=
"cloud"
num_inputs=
"5"
num_top_words=
"250"
/>
</vertical>
</vertical>
</sequential>
</sequential>
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