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
54974a51
Commit
54974a51
authored
Jun 06, 2014
by
lduarte1991
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Annotation Tools: Added CommonAnnotatorMixin
parent
9c0d14ea
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
57 additions
and
112 deletions
+57
-112
common/lib/xmodule/xmodule/annotator_mixin.py
+44
-0
common/lib/xmodule/xmodule/imageannotation_module.py
+4
-38
common/lib/xmodule/xmodule/textannotation_module.py
+4
-37
common/lib/xmodule/xmodule/videoannotation_module.py
+5
-37
No files found.
common/lib/xmodule/xmodule/annotator_mixin.py
View file @
54974a51
...
...
@@ -6,7 +6,10 @@ from lxml import etree
from
urlparse
import
urlparse
from
os.path
import
splitext
,
basename
from
HTMLParser
import
HTMLParser
from
xblock.core
import
Scope
,
String
# Make '_' a no-op so we can scrape strings
_
=
lambda
text
:
text
def
get_instructions
(
xmltree
):
""" Removes <instructions> from the xmltree and returns them as a string, otherwise None. """
...
...
@@ -53,3 +56,43 @@ def html_to_text(html):
htmlstripper
=
MLStripper
()
htmlstripper
.
feed
(
html
)
return
htmlstripper
.
get_data
()
class
CommonAnnotatorMixin
(
object
):
annotation_storage_url
=
String
(
help
=
_
(
"Location of Annotation backend"
),
scope
=
Scope
.
settings
,
default
=
"http://your_annotation_storage.com"
,
display_name
=
_
(
"Url for Annotation Storage"
)
)
annotation_token_secret
=
String
(
help
=
_
(
"Secret string for annotation storage"
),
scope
=
Scope
.
settings
,
default
=
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
,
display_name
=
_
(
"Secret Token String for Annotation"
)
)
default_tab
=
String
(
display_name
=
_
(
"Default Annotations Tab"
),
help
=
_
(
"Select which tab will be the default in the annotations table: myNotes, Instructor, or Public."
),
scope
=
Scope
.
settings
,
default
=
"myNotes"
,
)
# currently only supports one instructor, will build functionality for multiple later
instructor_email
=
String
(
display_name
=
_
(
"Email for 'Instructor' Annotations"
),
help
=
_
(
"Email of the user that will be attached to all annotations that will be found in 'Instructor' tab."
),
scope
=
Scope
.
settings
,
default
=
""
,
)
annotation_mode
=
String
(
display_name
=
_
(
"Mode for Annotation Tool"
),
help
=
_
(
"Type in number corresponding to following modes: 'instructor' or 'everyone'"
),
scope
=
Scope
.
settings
,
default
=
"everyone"
,
)
extra_context
=
{
'annotation_storage'
:
annotation_storage_url
,
'default_tab'
:
default_tab
,
'instructor_email'
:
instructor_email
,
'annotation_mode'
:
annotation_mode
,
}
\ No newline at end of file
common/lib/xmodule/xmodule/imageannotation_module.py
View file @
54974a51
...
...
@@ -7,7 +7,7 @@ from pkg_resources import resource_string
from
xmodule.x_module
import
XModule
from
xmodule.raw_module
import
RawDescriptor
from
xblock.core
import
Scope
,
String
from
xmodule.annotator_mixin
import
get_instructions
,
html_to_text
from
xmodule.annotator_mixin
import
CommonAnnotatorMixin
,
get_instructions
,
html_to_text
from
xmodule.annotator_token
import
retrieve_token
from
xblock.fragment
import
Fragment
...
...
@@ -51,40 +51,9 @@ class AnnotatableFields(object):
scope
=
Scope
.
settings
,
default
=
'professor:green,teachingAssistant:blue'
,
)
annotation_storage_url
=
String
(
help
=
_
(
"Location of Annotation backend"
),
scope
=
Scope
.
settings
,
default
=
"http://your_annotation_storage.com"
,
display_name
=
_
(
"Url for Annotation Storage"
)
)
annotation_token_secret
=
String
(
help
=
_
(
"Secret string for annotation storage"
),
scope
=
Scope
.
settings
,
default
=
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
,
display_name
=
_
(
"Secret Token String for Annotation"
)
)
default_tab
=
String
(
display_name
=
_
(
"Default Annotations Tab"
),
help
=
_
(
"Select which tab will be the default in the annotations table: myNotes, Instructor, or Public."
),
scope
=
Scope
.
settings
,
default
=
"myNotes"
,
)
# currently only supports one instructor, will build functionality for multiple later
instructor_email
=
String
(
display_name
=
_
(
"Email for 'Instructor' Annotations"
),
help
=
_
(
"Email of the user that will be attached to all annotations that will be found in 'Instructor' tab."
),
scope
=
Scope
.
settings
,
default
=
""
,
)
annotation_mode
=
String
(
display_name
=
_
(
"Mode for Annotation Tool"
),
help
=
_
(
"Type in number corresponding to following modes: 'instructor' or 'everyone'"
),
scope
=
Scope
.
settings
,
default
=
"everyone"
,
)
class
ImageAnnotationModule
(
AnnotatableFields
,
XModule
):
class
ImageAnnotationModule
(
AnnotatableFields
,
CommonAnnotatorMixin
,
XModule
):
'''Image Annotation Module'''
js
=
{
'coffee'
:
[
...
...
@@ -119,15 +88,12 @@ class ImageAnnotationModule(AnnotatableFields, XModule):
context
=
{
'display_name'
:
self
.
display_name_with_default
,
'instructions_html'
:
self
.
instructions
,
'annotation_storage'
:
self
.
annotation_storage_url
,
'token'
:
retrieve_token
(
self
.
user
,
self
.
annotation_token_secret
),
'tag'
:
self
.
instructor_tags
,
'openseadragonjson'
:
self
.
openseadragonjson
,
'default_tab'
:
self
.
default_tab
,
'instructor_email'
:
self
.
instructor_email
,
'annotation_mode'
:
self
.
annotation_mode
,
}
context
.
update
(
self
.
extra_context
)
print
context
fragment
=
Fragment
(
self
.
system
.
render_template
(
'imageannotation.html'
,
context
))
fragment
.
add_javascript_url
(
"/static/js/vendor/tinymce/js/tinymce/tinymce.full.min.js"
)
fragment
.
add_javascript_url
(
"/static/js/vendor/tinymce/js/tinymce/jquery.tinymce.min.js"
)
...
...
common/lib/xmodule/xmodule/textannotation_module.py
View file @
54974a51
...
...
@@ -6,7 +6,7 @@ from pkg_resources import resource_string
from
xmodule.x_module
import
XModule
from
xmodule.raw_module
import
RawDescriptor
from
xblock.core
import
Scope
,
String
from
xmodule.annotator_mixin
import
get_instructions
from
xmodule.annotator_mixin
import
CommonAnnotatorMixin
,
get_instructions
from
xmodule.annotator_token
import
retrieve_token
from
xblock.fragment
import
Fragment
import
textwrap
...
...
@@ -47,46 +47,15 @@ class AnnotatableFields(object):
scope
=
Scope
.
settings
,
default
=
'None'
,
)
annotation_storage_url
=
String
(
help
=
_
(
"Location of Annotation backend"
),
scope
=
Scope
.
settings
,
default
=
"http://your_annotation_storage.com"
,
display_name
=
_
(
"Url for Annotation Storage"
),
)
annotation_token_secret
=
String
(
help
=
_
(
"Secret string for annotation storage"
),
scope
=
Scope
.
settings
,
default
=
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
,
display_name
=
_
(
"Secret Token String for Annotation"
),
)
diacritics
=
String
(
display_name
=
_
(
"Diacritic Marks"
),
help
=
_
(
"Add diacritic marks to be added to a text using the comma-separated form, i.e. markname;urltomark;baseline,markname2;urltomark2;baseline2"
),
scope
=
Scope
.
settings
,
default
=
''
,
)
default_tab
=
String
(
display_name
=
_
(
"Default Annotations Tab"
),
help
=
_
(
"Select which tab will be the default in the annotations table: myNotes, Instructor, or Public."
),
scope
=
Scope
.
settings
,
default
=
"myNotes"
,
)
# currently only supports one instructor, will build functionality for multiple later
instructor_email
=
String
(
display_name
=
_
(
"Email for 'Instructor' Annotations"
),
help
=
_
(
"Email of the user that will be attached to all annotations that will be found in 'Instructor' tab."
),
scope
=
Scope
.
settings
,
default
=
""
,
)
annotation_mode
=
String
(
display_name
=
_
(
"Mode for Annotation Tool"
),
help
=
_
(
"Type in number corresponding to following modes: 'instructor' or 'everyone'"
),
scope
=
Scope
.
settings
,
default
=
"everyone"
,
)
class
TextAnnotationModule
(
AnnotatableFields
,
XModule
):
class
TextAnnotationModule
(
AnnotatableFields
,
CommonAnnotatorMixin
,
XModule
):
''' Text Annotation Module '''
js
=
{
'coffee'
:
[],
'js'
:
[]}
...
...
@@ -117,13 +86,11 @@ class TextAnnotationModule(AnnotatableFields, XModule):
'source'
:
self
.
source
,
'instructions_html'
:
self
.
instructions
,
'content_html'
:
self
.
content
,
'annotation_storage'
:
self
.
annotation_storage_url
,
'token'
:
retrieve_token
(
self
.
user_email
,
self
.
annotation_token_secret
),
'diacritic_marks'
:
self
.
diacritics
,
'default_tab'
:
self
.
default_tab
,
'instructor_email'
:
self
.
instructor_email
,
'annotation_mode'
:
self
.
annotation_mode
,
}
context
.
update
(
self
.
extra_context
)
print
context
fragment
=
Fragment
(
self
.
system
.
render_template
(
'textannotation.html'
,
context
))
fragment
.
add_javascript_url
(
"/static/js/vendor/tinymce/js/tinymce/tinymce.full.min.js"
)
fragment
.
add_javascript_url
(
"/static/js/vendor/tinymce/js/tinymce/jquery.tinymce.min.js"
)
...
...
common/lib/xmodule/xmodule/videoannotation_module.py
View file @
54974a51
...
...
@@ -7,7 +7,7 @@ from pkg_resources import resource_string
from
xmodule.x_module
import
XModule
from
xmodule.raw_module
import
RawDescriptor
from
xblock.core
import
Scope
,
String
from
xmodule.annotator_mixin
import
get_instructions
,
get_extension
from
xmodule.annotator_mixin
import
CommonAnnotatorMixin
,
get_instructions
,
get_extension
from
xmodule.annotator_token
import
retrieve_token
from
xblock.fragment
import
Fragment
...
...
@@ -45,39 +45,9 @@ class AnnotatableFields(object):
scope
=
Scope
.
settings
,
default
=
""
)
annotation_storage_url
=
String
(
help
=
_
(
"Location of Annotation backend"
),
scope
=
Scope
.
settings
,
default
=
"http://your_annotation_storage.com"
,
display_name
=
_
(
"Url for Annotation Storage"
),
)
annotation_token_secret
=
String
(
help
=
_
(
"Secret string for annotation storage"
),
scope
=
Scope
.
settings
,
default
=
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
,
display_name
=
_
(
"Secret Token String for Annotation"
)
)
default_tab
=
String
(
display_name
=
_
(
"Default Annotations Tab"
),
help
=
_
(
"Select which tab will be the default in the annotations table: myNotes, Instructor, or Public."
),
scope
=
Scope
.
settings
,
default
=
"myNotes"
,
)
# currently only supports one instructor, will build functionality for multiple later
instructor_email
=
String
(
display_name
=
_
(
"Email for 'Instructor' Annotations"
),
help
=
_
(
"Email of the user that will be attached to all annotations that will be found in 'Instructor' tab."
),
scope
=
Scope
.
settings
,
default
=
""
,
)
annotation_mode
=
String
(
display_name
=
_
(
"Mode for Annotation Tool"
),
help
=
_
(
"Type in number corresponding to following modes: 'instructor' or 'everyone'"
),
scope
=
Scope
.
settings
,
default
=
"everyone"
,
)
class
VideoAnnotationModule
(
AnnotatableFields
,
XModule
):
class
VideoAnnotationModule
(
AnnotatableFields
,
CommonAnnotatorMixin
,
XModule
):
'''Video Annotation Module'''
js
=
{
'coffee'
:
[
...
...
@@ -123,12 +93,10 @@ class VideoAnnotationModule(AnnotatableFields, XModule):
'typeSource'
:
extension
,
'poster'
:
self
.
poster_url
,
'content_html'
:
self
.
content
,
'annotation_storage'
:
self
.
annotation_storage_url
,
'token'
:
retrieve_token
(
self
.
user_email
,
self
.
annotation_token_secret
),
'default_tab'
:
self
.
default_tab
,
'instructor_email'
:
self
.
instructor_email
,
'annotation_mode'
:
self
.
annotation_mode
,
}
context
.
update
(
self
.
extra_context
)
print
context
fragment
=
Fragment
(
self
.
system
.
render_template
(
'videoannotation.html'
,
context
))
fragment
.
add_javascript_url
(
"/static/js/vendor/tinymce/js/tinymce/tinymce.full.min.js"
)
fragment
.
add_javascript_url
(
"/static/js/vendor/tinymce/js/tinymce/jquery.tinymce.min.js"
)
...
...
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