Annotation Tool: PR #3969
Text Annotation Tool: Added Instructor Filter and Clear Search Video Annotation Tool: Added Instructor Filter Image Annotation Tool: Added Instructor Filter Image Annotation Tool: Annotation Mode for AB Testing Annotation Tools PR Fixes - forgot to overwrite the previous line Annotation Tools: PR Fixes - Fixed camel case for variable name - Fixed indentation in imageannotation.html - Changed all mentions of Instructor Username to Email - Turned annotation_mode into phrase - Fixed indentation in imageannotation.html - Added comments in imageannotation.html - Changing annotation_mode in OSDA Annotator Tools: OpaqueKeys update for Notes Annotation Tools: Added CommonAnnotatorMixin Annotator Tool: Fixed delete bug and factored out settings Removed print context Conflicts: common/lib/xmodule/xmodule/imageannotation_module.py common/lib/xmodule/xmodule/textannotation_module.py common/lib/xmodule/xmodule/videoannotation_module.py lms/djangoapps/notes/views.py
This commit is contained in:
committed by
David Baumgold
parent
643a7bfa95
commit
fecb2e1682
@@ -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,37 @@ 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",
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -62,7 +62,7 @@ class AnnotatableFields(object):
|
||||
)
|
||||
|
||||
|
||||
class ImageAnnotationModule(AnnotatableFields, XModule):
|
||||
class ImageAnnotationModule(AnnotatableFields, CommonAnnotatorMixin, XModule):
|
||||
'''Image Annotation Module'''
|
||||
js = {
|
||||
'coffee': [
|
||||
@@ -97,12 +97,14 @@ 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,
|
||||
'annotation_storage': self.annotation_storage_url,
|
||||
'default_tab': self.default_tab,
|
||||
'instructor_email': self.instructor_email,
|
||||
'annotation_mode': self.annotation_mode,
|
||||
}
|
||||
|
||||
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")
|
||||
|
||||
@@ -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,11 +47,17 @@ class AnnotatableFields(object):
|
||||
scope=Scope.settings,
|
||||
default='None',
|
||||
)
|
||||
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='',
|
||||
)
|
||||
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"))
|
||||
|
||||
|
||||
class TextAnnotationModule(AnnotatableFields, XModule):
|
||||
class TextAnnotationModule(AnnotatableFields, CommonAnnotatorMixin, XModule):
|
||||
''' Text Annotation Module '''
|
||||
js = {'coffee': [],
|
||||
'js': []}
|
||||
@@ -82,8 +88,12 @@ 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,
|
||||
'annotation_storage': self.annotation_storage_url,
|
||||
'default_tab': self.default_tab,
|
||||
'instructor_email': self.instructor_email,
|
||||
'annotation_mode': self.annotation_mode,
|
||||
}
|
||||
fragment = Fragment(self.system.render_template('textannotation.html', context))
|
||||
fragment.add_javascript_url("/static/js/vendor/tinymce/js/tinymce/tinymce.full.min.js")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -32,14 +32,24 @@ class AnnotatableFields(object):
|
||||
display_name=_("Display Name"),
|
||||
help=_("Display name for this module"),
|
||||
scope=Scope.settings,
|
||||
default='Video Annotation',
|
||||
default=_('Video Annotation'),
|
||||
)
|
||||
sourceurl = String(
|
||||
help=_("The external source URL for the video."),
|
||||
display_name=_("Source URL"),
|
||||
scope=Scope.settings, default="http://video-js.zencoder.com/oceans-clip.mp4"
|
||||
)
|
||||
poster_url = String(
|
||||
help=_("Poster Image URL"),
|
||||
display_name=_("Poster URL"),
|
||||
scope=Scope.settings,
|
||||
default=""
|
||||
)
|
||||
sourceurl = String(help=_("The external source URL for the video."), display_name=_("Source URL"), scope=Scope.settings, default="http://video-js.zencoder.com/oceans-clip.mp4")
|
||||
poster_url = String(help=_("Poster Image URL"), display_name=_("Poster URL"), 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"))
|
||||
|
||||
class VideoAnnotationModule(AnnotatableFields, XModule):
|
||||
|
||||
class VideoAnnotationModule(AnnotatableFields, CommonAnnotatorMixin, XModule):
|
||||
'''Video Annotation Module'''
|
||||
js = {
|
||||
'coffee': [
|
||||
@@ -85,8 +95,11 @@ 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),
|
||||
'annotation_storage': self.annotation_storage_url,
|
||||
'default_tab': self.default_tab,
|
||||
'instructor_email': self.instructor_email,
|
||||
'annotation_mode': self.annotation_mode,
|
||||
}
|
||||
fragment = Fragment(self.system.render_template('videoannotation.html', context))
|
||||
fragment.add_javascript_url("/static/js/vendor/tinymce/js/tinymce/tinymce.full.min.js")
|
||||
|
||||
Reference in New Issue
Block a user