diff --git a/cms/static/sass/_unit.scss b/cms/static/sass/_unit.scss index 5edce2419c..d8ca1117e9 100644 --- a/cms/static/sass/_unit.scss +++ b/cms/static/sass/_unit.scss @@ -51,6 +51,7 @@ } .components { + > li { position: relative; z-index: 10; @@ -118,6 +119,24 @@ } } + .new-component-templates { + display: none; + padding: 20px; + @include clearfix; + + .cancel-button { + @include white-button; + } + + // specific menu types + &.new-component-problem { + + .ss-icon, .editor-indicator { + display: inline-block; + } + } + } + .new-component-type, .new-component-template { @include clearfix; @@ -177,7 +196,11 @@ position: relative; top: 3px; font-size: 12px; - opacity: 0.1; + opacity: 0.3; + } + + .ss-icon, .editor-indicator { + display: none; } &:hover { @@ -214,16 +237,6 @@ } } - - .new-component-templates { - display: none; - padding: 20px; - @include clearfix; - - .cancel-button { - @include white-button; - } - } } } } diff --git a/common/lib/xmodule/xmodule/js/src/html/edit.coffee b/common/lib/xmodule/xmodule/js/src/html/edit.coffee index 2902f4d1c9..dfb197e204 100644 --- a/common/lib/xmodule/xmodule/js/src/html/edit.coffee +++ b/common/lib/xmodule/xmodule/js/src/html/edit.coffee @@ -12,6 +12,9 @@ class @HTMLEditingDescriptor $(@advanced_editor.getWrapperElement()).addClass(HTMLEditingDescriptor.isInactiveClass) +# This is a workaround for the fact that tinyMCE's baseURL property is not getting correctly set on AWS +# instances (like sandbox). It is not necessary to explicitly set baseURL when running locally. + tinyMCE.baseURL = '/static/js/vendor/tiny_mce' @tiny_mce_textarea = $(".tiny-mce", @element).tinymce({ script_url : '/static/js/vendor/tiny_mce/tiny_mce.js', theme : "advanced", diff --git a/common/lib/xmodule/xmodule/templates/discussion/default.yaml b/common/lib/xmodule/xmodule/templates/discussion/default.yaml index fa6dcbff54..d34e6378e6 100644 --- a/common/lib/xmodule/xmodule/templates/discussion/default.yaml +++ b/common/lib/xmodule/xmodule/templates/discussion/default.yaml @@ -1,6 +1,9 @@ --- metadata: display_name: Discussion Tag + for: Topic-Level Student-Visible Label + id: 6002x_group_discussion_by_this + discussion_category: Week 1 data: | children: [] diff --git a/jenkins/test.sh b/jenkins/test.sh index 3ea1b40c55..7651fcd917 100755 --- a/jenkins/test.sh +++ b/jenkins/test.sh @@ -27,7 +27,6 @@ git submodule foreach 'git reset --hard HEAD' export PYTHONIOENCODING=UTF-8 GIT_BRANCH=${GIT_BRANCH/HEAD/master} - if [ ! -d /mnt/virtualenvs/"$JOB_NAME" ]; then mkdir -p /mnt/virtualenvs/"$JOB_NAME" virtualenv /mnt/virtualenvs/"$JOB_NAME" diff --git a/lms/djangoapps/django_comment_client/utils.py b/lms/djangoapps/django_comment_client/utils.py index 1f39ebfcfd..3094367491 100644 --- a/lms/djangoapps/django_comment_client/utils.py +++ b/lms/djangoapps/django_comment_client/utils.py @@ -2,6 +2,7 @@ from collections import defaultdict import logging import time import urllib +from datetime import datetime from django.contrib.auth.models import User from django.core.urlresolvers import reverse @@ -63,22 +64,19 @@ def get_discussion_id_map(course): return a dict of the form {category: modules} """ global _DISCUSSIONINFO - if not _DISCUSSIONINFO[course.id]: - initialize_discussion_info(course) + initialize_discussion_info(course) return _DISCUSSIONINFO[course.id]['id_map'] def get_discussion_title(course, discussion_id): global _DISCUSSIONINFO - if not _DISCUSSIONINFO[course.id]: - initialize_discussion_info(course) + initialize_discussion_info(course) title = _DISCUSSIONINFO[course.id]['id_map'].get(discussion_id, {}).get('title', '(no title)') return title def get_discussion_category_map(course): global _DISCUSSIONINFO - if not _DISCUSSIONINFO[course.id]: - initialize_discussion_info(course) + initialize_discussion_info(course) return filter_unstarted_categories(_DISCUSSIONINFO[course.id]['category_map']) def filter_unstarted_categories(category_map): @@ -131,8 +129,18 @@ def sort_map_entries(category_map): def initialize_discussion_info(course): global _DISCUSSIONINFO + + # only cache in-memory discussion information for 10 minutes + # this is because we need a short-term hack fix for + # mongo-backed courseware whereby new discussion modules can be added + # without LMS service restart + if _DISCUSSIONINFO[course.id]: - return + timestamp = _DISCUSSIONINFO[course.id].get('timestamp', datetime.now()) + age = datetime.now() - timestamp + # expire every 5 minutes + if age.seconds < 300: + return course_id = course.id @@ -209,6 +217,7 @@ def initialize_discussion_info(course): _DISCUSSIONINFO[course.id]['id_map'] = discussion_id_map _DISCUSSIONINFO[course.id]['category_map'] = category_map + _DISCUSSIONINFO[course.id]['timestamp'] = datetime.now() class JsonResponse(HttpResponse): def __init__(self, data=None):