diff --git a/common/lib/xmodule/xmodule/discussion_module.py b/common/lib/xmodule/xmodule/discussion_module.py index 500297bf2a..c029d95098 100644 --- a/common/lib/xmodule/xmodule/discussion_module.py +++ b/common/lib/xmodule/xmodule/discussion_module.py @@ -3,11 +3,6 @@ from lxml import etree from xmodule.x_module import XModule from xmodule.raw_module import RawDescriptor -import comment_client -import dateutil -from dateutil.tz import tzlocal -from datehelper import time_ago_in_words - import json class DiscussionModule(XModule): diff --git a/lms/djangoapps/django_comment_client/forum/views.py b/lms/djangoapps/django_comment_client/forum/views.py index d76337e8da..ec9302214c 100644 --- a/lms/djangoapps/django_comment_client/forum/views.py +++ b/lms/djangoapps/django_comment_client/forum/views.py @@ -9,9 +9,6 @@ from django.contrib.auth.models import User from mitxmako.shortcuts import render_to_response, render_to_string from courseware.courses import get_course_with_access -from dateutil.tz import tzlocal -from datehelper import time_ago_in_words - from urllib import urlencode from django_comment_client.permissions import check_permissions_by_view from django_comment_client.utils import merge_dict, extract, strip_none diff --git a/lms/djangoapps/django_comment_client/mustache_helpers.py b/lms/djangoapps/django_comment_client/mustache_helpers.py index 48a38be29b..b3b5daaa01 100644 --- a/lms/djangoapps/django_comment_client/mustache_helpers.py +++ b/lms/djangoapps/django_comment_client/mustache_helpers.py @@ -1,5 +1,7 @@ -from django.core.urlresolvers import reverse +import django.core.urlresolvers as urlresolvers import urllib +import sys +import inspect def pluralize(content, text): num, word = text.split(' ') @@ -9,10 +11,10 @@ def pluralize(content, text): return num + ' ' + word def url_for_user(content, user_id): - return reverse('django_comment_client.forum.views.user_profile', args=[content['course_id'], user_id]) + return urlresolvers.reverse('django_comment_client.forum.views.user_profile', args=[content['course_id'], user_id]) -def url_for_tags(content, tags): # assume that tags is in the format u'a, b, c' - return reverse('django_comment_client.forum.views.forum_form_discussion', args=[content['course_id']]) + '?' + urllib.urlencode({'tags': tags}) +def url_for_tags(content, tags): # assume that attribute 'tags' is in the format u'a, b, c' + return urlresolvers.reverse('django_comment_client.forum.views.forum_form_discussion', args=[content['course_id']]) + '?' + urllib.urlencode({'tags': tags}) def close_thread_text(content): if content.get('closed'): @@ -20,9 +22,7 @@ def close_thread_text(content): else: return 'Close thread' -mustache_helpers = { - 'pluralize': pluralize, - 'url_for_tags': url_for_tags, - 'url_for_user': url_for_user, - 'close_thread_text': close_thread_text, -} +current_module = sys.modules[__name__] +all_functions = inspect.getmembers(current_module, inspect.isfunction) + +mustache_helpers = {k: v for k, v in all_functions if not k.startswith('_')} diff --git a/lms/djangoapps/django_comment_client/tests.py b/lms/djangoapps/django_comment_client/tests.py index 2f62c2f301..d9d3a21946 100644 --- a/lms/djangoapps/django_comment_client/tests.py +++ b/lms/djangoapps/django_comment_client/tests.py @@ -1,25 +1,132 @@ from django.contrib.auth.models import User from django.utils import unittest -from student.models import CourseEnrollment +from student.models import CourseEnrollment, \ + replicate_enrollment_save, \ + replicate_enrollment_delete, \ + update_user_information, \ + replicate_user_save from django.db.models.signals import m2m_changed, pre_delete, pre_save, post_delete, post_save from django.dispatch.dispatcher import _make_id import string import random -from .permissions import has_permission, assign_default_role +from .permissions import has_permission from .models import Role, Permission +# code adapted from https://github.com/justquick/django-activity-stream/issues/88 +class NoSignalTestCase(unittest.TestCase): + def _receiver_in_lookup_keys(self, receiver, lookup_keys): + """ + Evaluate if the receiver is in the provided lookup_keys; instantly terminates when found. + """ + for key in lookup_keys: + if (receiver[0][0] == key[0] or key[0] is None) and receiver[0][1] == key[1]: + return True + return False -class PermissionsTestCase(unittest.TestCase): + def _find_allowed_receivers(self, receivers, lookup_keys): + """ + Searches the receivers, keeping any that have a lookup_key in the lookup_keys list + """ + kept_receivers = [] + for receiver in receivers: + if self._receiver_in_lookup_keys(receiver, lookup_keys): + kept_receivers.append(receiver) + return kept_receivers + + def _create_lookup_keys(self, sender_receivers_tuple_list): + """ + Creates a signal lookup keys from the provided array of tuples. + """ + lookup_keys = [] + + for keep in sender_receivers_tuple_list: + receiver = keep[0] + sender = keep[1] + lookup_key = (_make_id(receiver) if receiver else receiver, _make_id(sender)) + lookup_keys.append(lookup_key) + return lookup_keys + + def _remove_disallowed_receivers(self, receivers, lookup_keys): + """ + Searches the receivers, discarding any that have a lookup_key in the lookup_keys list + """ + kept_receivers = [] + for receiver in receivers: + if not self._receiver_in_lookup_keys(receiver, lookup_keys): + kept_receivers.append(receiver) + return kept_receivers + + def setUp(self, sender_receivers_to_keep=None, sender_receivers_to_discard=None): + """ + Turns off signals from other apps + + The `sender_receivers_to_keep` can be set to an array of tuples (reciever, sender,), preserving matching signals. + The `sender_receivers_to_discard` can be set to an array of tuples (reciever, sender,), discarding matching signals. + with both, you can set the `receiver` to None if you want to target all signals for a model + """ + self.m2m_changed_receivers = m2m_changed.receivers + self.pre_delete_receivers = pre_delete.receivers + self.pre_save_receivers = pre_save.receivers + self.post_delete_receivers = post_delete.receivers + self.post_save_receivers = post_save.receivers + + new_m2m_changed_receivers = [] + new_pre_delete_receivers = [] + new_pre_save_receivers = [] + new_post_delete_receivers = [] + new_post_save_receivers = [] + + if sender_receivers_to_keep: + lookup_keys = self._create_lookup_keys(sender_receivers_to_keep) + new_m2m_changed_receivers = self._find_allowed_receivers(self.m2m_changed_receivers, lookup_keys) + new_pre_delete_receivers = self._find_allowed_receivers(self.pre_delete_receivers, lookup_keys) + new_pre_save_receivers = self._find_allowed_receivers(self.pre_save_receivers, lookup_keys) + new_post_delete_receivers = self._find_allowed_receivers(self.post_delete_receivers, lookup_keys) + new_post_save_receivers = self._find_allowed_receivers(self.post_save_receivers, lookup_keys) + + if sender_receivers_to_discard: + lookup_keys = self._create_lookup_keys(sender_receivers_to_discard) + + new_m2m_changed_receivers = self._remove_disallowed_receivers(new_m2m_changed_receivers or self.m2m_changed_receivers, lookup_keys) + new_pre_delete_receivers = self._remove_disallowed_receivers(new_pre_delete_receivers or self.pre_delete_receivers, lookup_keys) + new_pre_save_receivers = self._remove_disallowed_receivers(new_pre_save_receivers or self.pre_save_receivers, lookup_keys) + new_post_delete_receivers = self._remove_disallowed_receivers(new_post_delete_receivers or self.post_delete_receivers, lookup_keys) + new_post_save_receivers = self._remove_disallowed_receivers(new_post_save_receivers or self.post_save_receivers, lookup_keys) + + m2m_changed.receivers = new_m2m_changed_receivers + pre_delete.receivers = new_pre_delete_receivers + pre_save.receivers = new_pre_save_receivers + post_delete.receivers = new_post_delete_receivers + post_save.receivers = new_post_save_receivers + super(NoSignalTestCase, self).setUp() + + def tearDown(self): + """ + Restores the signals that were turned off. + """ + super(NoSignalTestCase, self).tearDown() + m2m_changed.receivers = self.m2m_changed_receivers + pre_delete.receivers = self.pre_delete_receivers + pre_save.receivers = self.pre_save_receivers + post_delete.receivers = self.post_delete_receivers + post_save.receivers = self.post_save_receivers + + +class PermissionsTestCase(NoSignalTestCase): def random_str(self, length=15, chars=string.ascii_uppercase + string.digits): return ''.join(random.choice(chars) for x in range(length)) def setUp(self): - sender_receivers_to_keep = [ - (assign_default_role, CourseEnrollment), + + sender_receivers_to_discard = [ + (replicate_enrollment_save, CourseEnrollment), + (replicate_enrollment_delete, CourseEnrollment), + (update_user_information, User), + (replicate_user_save, User), ] - super(PermissionsTestCase, self).setUp(sender_receivers_to_keep=sender_receivers_to_keep) + super(PermissionsTestCase, self).setUp(sender_receivers_to_discard=sender_receivers_to_discard) self.course_id = "MITx/6.002x/2012_Fall" @@ -32,20 +139,24 @@ class PermissionsTestCase(unittest.TestCase): password="123456", email="staff@edx.org") self.moderator.is_staff = True self.moderator.save() + self.student_enrollment = CourseEnrollment.objects.create(user=self.student, course_id=self.course_id) + self.moderator_enrollment = CourseEnrollment.objects.create(user=self.moderator, course_id=self.course_id) def tearDown(self): + self.student_enrollment.delete() + self.moderator_enrollment.delete() self.student.delete() self.moderator.delete() + super(PermissionsTestCase, self).tearDown() def testDefaultRoles(self): - self.assertTrue(student_role in self.student.roles.all()) - self.assertTrue(moderator_role in self.moderator.roles.all()) + self.assertTrue(self.student_role in self.student.roles.all()) + self.assertTrue(self.moderator_role in self.moderator.roles.all()) def testPermission(self): name = self.random_str() - Permission.register(name) - add_permission(moderator_role, name) - self.assertTrue(has_permission(self.moderator, name)) + self.moderator_role.add_permission(name) + self.assertTrue(has_permission(self.moderator, name, self.course_id)) - add_permission(self.student, name) - self.assertTrue(has_permission(self.student, name)) + self.student_role.add_permission(name) + self.assertTrue(has_permission(self.student, name, self.course_id)) diff --git a/lms/lib/datehelper/README.md b/lms/lib/datehelper/README.md deleted file mode 100644 index f32a29e621..0000000000 --- a/lms/lib/datehelper/README.md +++ /dev/null @@ -1,4 +0,0 @@ -datehelper -========== - -This Python module contains some useful date-related methods inspired by rails. \ No newline at end of file diff --git a/lms/lib/datehelper/__init__.py b/lms/lib/datehelper/__init__.py deleted file mode 100644 index 64e8e08c05..0000000000 --- a/lms/lib/datehelper/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from time_ago_in_words import * diff --git a/lms/lib/datehelper/time_ago_in_words.py b/lms/lib/datehelper/time_ago_in_words.py deleted file mode 100644 index 7c2072682e..0000000000 --- a/lms/lib/datehelper/time_ago_in_words.py +++ /dev/null @@ -1,151 +0,0 @@ -from datetime import datetime, timedelta -from dateutil.tz import tzlocal -import calendar - -# only used for testing -def _timedelta(**kwargs): - kwargs['days'] = kwargs.get('days', 0) - if kwargs.get('years', False): - # not really a good solution since ignoring leap years - # but this is only for test anyways - kwargs['days'] += kwargs['years'] * 365 - del kwargs['years'] - if kwargs.get('months', False): - kwargs['days'] += kwargs['months'] * 30 - del kwargs['months'] - return timedelta(**kwargs) - -def time_ago_in_words(from_time, include_seconds=False): - return distance_of_time_in_words(from_time, datetime.now(tzlocal()), include_seconds=False) - -distance_of_time_in_words_to_now = time_ago_in_words - -def _time_in_words(before_text, unit): - if before_text: - before_text += ' ' - def time_in_words_generator(count): - if count <= 1: - if before_text == 'less than ': - if unit == 'hour': - count = 'an' - else: - count = 'a' - return '{0}{1} {2}'.format(before_text, count, unit) - else: - return '{0}{1} {2}s'.format(before_text, count, unit) - return time_in_words_generator - -def distance_of_time_in_words(from_time, to_time=0, include_seconds=False, options = {}): - """Return a rough description of the time interval between from_time and to_time. - This is a direct translation from rails in ActionView::Helpers::DateHelper. - Reference: - http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-distance_of_time_in_words - - >>> from_time = datetime.now(tzlocal()) - >>> distance_of_time_in_words(from_time, from_time + _timedelta(minutes=50)) - 'about 1 hour' - >>> distance_of_time_in_words(from_time, from_time + _timedelta(seconds=15)) - 'less than a minute' - >>> distance_of_time_in_words(from_time, from_time + _timedelta(seconds=15), True) - 'less than 20 seconds' - >>> distance_of_time_in_words(from_time, from_time + _timedelta(years=3)) - 'about 3 years' - >>> distance_of_time_in_words(from_time, from_time + _timedelta(hours=60)) - '3 days' - >>> distance_of_time_in_words(from_time, from_time + _timedelta(seconds=45), True) - 'less than a minute' - >>> distance_of_time_in_words(from_time, from_time + _timedelta(seconds=-45), True) - 'less than a minute' - >>> distance_of_time_in_words(from_time, from_time + _timedelta(seconds=76)) - '1 minute' - >>> distance_of_time_in_words(from_time, from_time + _timedelta(years=1, days=3)) - 'about 1 year' - >>> distance_of_time_in_words(from_time, from_time + _timedelta(years=3, months=6)) - 'over 3 years' - >>> distance_of_time_in_words(from_time, from_time + _timedelta(years=4, days=9, minutes=30, seconds=5)) - 'about 4 years' - >>> to_time = from_time + _timedelta(years=6, days=19) - >>> distance_of_time_in_words(from_time, to_time, True) - 'about 6 years' - >>> distance_of_time_in_words(to_time, from_time, True) - 'about 6 years' - >>> distance_of_time_in_words(from_time, from_time) - 'less than a minute' - """ - - if isinstance(from_time, int): - from_time = datetime.fromtimestamp(time.time()+from_time) - if isinstance(to_time, int): - to_time = datetime.fromtimestamp(time.time()+to_time) - - distance_in_minutes = int(round(abs((to_time - from_time).total_seconds()) / 60)) - distance_in_seconds = int(round(abs((to_time - from_time).total_seconds()))) - - less_than_x_minutes = _time_in_words('less than', 'minute') - less_than_x_seconds = _time_in_words('less than', 'second') - half_a_minute = 'half a minute' - x_minutes = _time_in_words('', 'minute') - about_x_hours = _time_in_words('about', 'hour') - x_days = _time_in_words('', 'day') - about_x_months = _time_in_words('about', 'month') - x_months = _time_in_words('', 'month') - about_x_years = _time_in_words('about', 'year') - over_x_years = _time_in_words('over', 'year') - almost_x_years = _time_in_words('almost', 'year') - - if 0 <= distance_in_minutes <= 1: - if not include_seconds: - if distance_in_minutes == 0: - return less_than_x_minutes(1) - else: - return x_minutes(distance_in_minutes) - else: - if 0 <= distance_in_seconds <= 4: - return less_than_x_seconds(5) - elif 5 <= distance_in_seconds <= 9: - return less_than_x_seconds(10) - elif 10 <= distance_in_seconds <= 19: - return less_than_x_seconds(20) - elif 20 <= distance_in_seconds <= 39: - return half_a_minute - elif 40 <= distance_in_seconds <= 59: - return less_than_x_minutes(1) - else: - return x_minutes(1) - elif 2 <= distance_in_minutes <= 44: - return x_minutes(distance_in_minutes) - elif 45 <= distance_in_minutes <= 89: - return about_x_hours(1) - elif 90 <= distance_in_minutes <= 1439: - return about_x_hours(int(round(float(distance_in_minutes) / 60.0))) - elif 1440 <= distance_in_minutes <= 2519: - return x_days(1) - elif 2520 <= distance_in_minutes <= 43199: - return x_days(int(round(float(distance_in_minutes) / 1440.0))) - elif 43200 <= distance_in_minutes <= 86399: - return about_x_months(1) - elif 86400 <= distance_in_minutes <= 525599: - return x_months(int(round(float(distance_in_minutes) / 43200.0))) - else: - fyear = from_time.year - if from_time.month >= 3: - fyear += 1 - tyear = to_time.year - if to_time.month < 3: - tyear -= 1 - leap_years = 0 if fyear > tyear else len([x for x in range(fyear, tyear + 1) if calendar.isleap(x)]) - minute_offset_for_leap_year = leap_years * 1440 - # Discount the leap year days when calculating year distance. - # e.g. if there are 20 leap year days between 2 dates having the same day - # and month then the based on 365 days calculation - # the distance in years will come out to over 80 years when in written - # english it would read better as about 80 years. - minutes_with_offset = distance_in_minutes - minute_offset_for_leap_year - remainder = (minutes_with_offset % 525600) - distance_in_years = (minutes_with_offset / 525600) - if remainder < 131400: - return about_x_years(distance_in_years) - elif remainder < 394200: - return over_x_years(distance_in_years) - else: - return almost_x_years(distance_in_years + 1) diff --git a/lms/static/coffee/src/backbone_discussion/content.coffee b/lms/static/coffee/src/backbone_discussion/content.coffee new file mode 100644 index 0000000000..afd7bd6ff0 --- /dev/null +++ b/lms/static/coffee/src/backbone_discussion/content.coffee @@ -0,0 +1,7 @@ +$ -> + class Content extends Backbone.Model + + class Thread extends Content + + window.Content = Content + window.Thread = Thread diff --git a/lms/static/coffee/src/backbone_discussion/discussion.coffee b/lms/static/coffee/src/backbone_discussion/discussion.coffee new file mode 100644 index 0000000000..d67da04e0e --- /dev/null +++ b/lms/static/coffee/src/backbone_discussion/discussion.coffee @@ -0,0 +1,31 @@ +$ -> + + class Discussion extends Backbone.Collection + model: Thread + initialize: -> + this.bind "add", (item) => + item.collection = this + + class DiscussionModuleView extends Backbone.View + + class DiscussionView extends Backbone.View + + $: (selector) -> + @$local.find(selector) + + initialize: -> + @$local = @$el.children(".local") + + events: + "submit .search-wrapper>.discussion-search-form": "search" + "click .discussion-search-link": "search" + "click .discussion-sort-link": "sort" + "click .discussion-paginator>.discussion-page-link": "page" + + $(".discussion-module").each (index, elem) -> + view = new DiscussionModuleView(el: elem) + + $("section.discussion").each (index, elem) -> + discussionData = DiscussionUtil.getDiscussionData(elem) + discussion = new Discussion(discussionData) + view = new DiscussionView(el: elem, model: discussion) diff --git a/lms/static/coffee/src/old_discussion/discussion_module.coffee b/lms/static/coffee/src/backbone_discussion/discussion_module.coffee similarity index 100% rename from lms/static/coffee/src/old_discussion/discussion_module.coffee rename to lms/static/coffee/src/backbone_discussion/discussion_module.coffee diff --git a/lms/static/css/course/old/print.css b/lms/static/coffee/src/backbone_discussion/main.coffee similarity index 100% rename from lms/static/css/course/old/print.css rename to lms/static/coffee/src/backbone_discussion/main.coffee diff --git a/lms/static/coffee/src/old_discussion/templates.coffee b/lms/static/coffee/src/backbone_discussion/templates.coffee similarity index 100% rename from lms/static/coffee/src/old_discussion/templates.coffee rename to lms/static/coffee/src/backbone_discussion/templates.coffee diff --git a/lms/static/coffee/src/old_discussion/user_profile.coffee b/lms/static/coffee/src/backbone_discussion/user_profile.coffee similarity index 100% rename from lms/static/coffee/src/old_discussion/user_profile.coffee rename to lms/static/coffee/src/backbone_discussion/user_profile.coffee diff --git a/lms/static/coffee/src/backbone_discussion/utils.coffee b/lms/static/coffee/src/backbone_discussion/utils.coffee new file mode 100644 index 0000000000..09bac7a335 --- /dev/null +++ b/lms/static/coffee/src/backbone_discussion/utils.coffee @@ -0,0 +1,7 @@ +class @DiscussionUtil + @getDiscussionData: (id) -> + if id instanceof $ + id = id.attr("_id") + else if typeof id == "object" + id = $(id).attr("_id") + return $$discussion_data[id] diff --git a/lms/static/coffee/src/discussion/content.coffee b/lms/static/coffee/src/discussion/content.coffee index afd7bd6ff0..7ae24bd68a 100644 --- a/lms/static/coffee/src/discussion/content.coffee +++ b/lms/static/coffee/src/discussion/content.coffee @@ -1,7 +1,411 @@ -$ -> - class Content extends Backbone.Model +if not @Discussion? + @Discussion = {} - class Thread extends Content +Discussion = @Discussion - window.Content = Content - window.Thread = Thread +initializeVote = (content) -> + $content = $(content) + $local = Discussion.generateLocal($content.children(".discussion-content")) + id = $content.attr("_id") + if Discussion.isUpvoted id + $local(".discussion-vote-up").addClass("voted") + else if Discussion.isDownvoted id + $local(".discussion-vote-down").addClass("voted") + +initializeFollowThread = (thread) -> + $thread = $(thread) + id = $thread.attr("_id") + $thread.children(".discussion-content") + .find(".follow-wrapper") + .append(Discussion.subscriptionLink('thread', id)) + +@Discussion = $.extend @Discussion, + + bindContentEvents: (content) -> + + $content = $(content) + $discussionContent = $content.children(".discussion-content") + $local = Discussion.generateLocal($discussionContent) + + id = $content.attr("_id") + + handleReply = (elem) -> + $replyView = $local(".discussion-reply-new") + if $replyView.length + $replyView.show() + else + thread_id = $discussionContent.parents(".thread").attr("_id") + view = + id: id + showWatchCheckbox: not Discussion.isSubscribed(thread_id, "thread") + $discussionContent.append Mustache.render Discussion.replyTemplate, view + Discussion.makeWmdEditor $content, $local, "reply-body" + $local(".discussion-submit-post").click -> handleSubmitReply(this) + $local(".discussion-cancel-post").click -> handleCancelReply(this) + $local(".discussion-reply").hide() + $local(".discussion-edit").hide() + + handleCancelReply = (elem) -> + $replyView = $local(".discussion-reply-new") + if $replyView.length + $replyView.hide() + $local(".discussion-reply").show() + $local(".discussion-edit").show() + + handleSubmitReply = (elem) -> + if $content.hasClass("thread") + url = Discussion.urlFor('create_comment', id) + else if $content.hasClass("comment") + url = Discussion.urlFor('create_sub_comment', id) + else + return + + body = Discussion.getWmdContent $content, $local, "reply-body" + + anonymous = false || $local(".discussion-post-anonymously").is(":checked") + autowatch = false || $local(".discussion-auto-watch").is(":checked") + + Discussion.safeAjax + $elem: $(elem) + url: url + type: "POST" + dataType: 'json' + data: + body: body + anonymous: anonymous + autowatch: autowatch + error: Discussion.formErrorHandler($local(".discussion-errors")) + success: (response, textStatus) -> + Discussion.clearFormErrors($local(".discussion-errors")) + $comment = $(response.html) + $content.children(".comments").prepend($comment) + Discussion.setWmdContent $content, $local, "reply-body", "" + Discussion.setContentInfo response.content['id'], 'can_reply', true + Discussion.setContentInfo response.content['id'], 'editable', true + Discussion.extendContentInfo response.content['id'], response['annotated_content_info'] + Discussion.initializeContent($comment) + Discussion.bindContentEvents($comment) + $local(".discussion-reply-new").hide() + $local(".discussion-reply").show() + $local(".discussion-edit").show() + $discussionContent.attr("status", "normal") + + handleVote = (elem, value) -> + contentType = if $content.hasClass("thread") then "thread" else "comment" + url = Discussion.urlFor("#{value}vote_#{contentType}", id) + Discussion.safeAjax + $elem: $local(".discussion-vote") + url: url + type: "POST" + dataType: "json" + success: (response, textStatus) -> + if textStatus == "success" + $local(".discussion-vote").removeClass("voted") + $local(".discussion-vote-#{value}").addClass("voted") + $local(".discussion-votes-point").html response.votes.point + + handleUnvote = (elem, value) -> + contentType = if $content.hasClass("thread") then "thread" else "comment" + url = Discussion.urlFor("undo_vote_for_#{contentType}", id) + Discussion.safeAjax + $elem: $local(".discussion-vote") + url: url + type: "POST" + dataType: "json" + success: (response, textStatus) -> + if textStatus == "success" + $local(".discussion-vote").removeClass("voted") + $local(".discussion-votes-point").html response.votes.point + + handleCancelEdit = (elem) -> + $local(".discussion-content-edit").hide() + $local(".discussion-content-wrapper").show() + + handleEditThread = (elem) -> + $local(".discussion-content-wrapper").hide() + $editView = $local(".discussion-content-edit") + if $editView.length + $editView.show() + else + view = { + id: id + title: $local(".thread-raw-title").html() + body: $local(".thread-raw-body").html() + tags: $local(".thread-raw-tags").html() + } + $discussionContent.append Mustache.render Discussion.editThreadTemplate, view + Discussion.makeWmdEditor $content, $local, "thread-body-edit" + $local(".thread-tags-edit").tagsInput Discussion.tagsInputOptions() + $local(".discussion-submit-update").unbind("click").click -> handleSubmitEditThread(this) + $local(".discussion-cancel-update").unbind("click").click -> handleCancelEdit(this) + + handleSubmitEditThread = (elem) -> + url = Discussion.urlFor('update_thread', id) + title = $local(".thread-title-edit").val() + body = Discussion.getWmdContent $content, $local, "thread-body-edit" + tags = $local(".thread-tags-edit").val() + Discussion.safeAjax + $elem: $(elem) + url: url + type: "POST" + dataType: 'json' + data: {title: title, body: body, tags: tags}, + error: Discussion.formErrorHandler($local(".discussion-update-errors")) + success: (response, textStatus) -> + Discussion.clearFormErrors($local(".discussion-update-errors")) + $discussionContent.replaceWith(response.html) + Discussion.extendContentInfo response.content['id'], response['annotated_content_info'] + Discussion.initializeContent($content) + Discussion.bindContentEvents($content) + + handleEditComment = (elem) -> + $local(".discussion-content-wrapper").hide() + $editView = $local(".discussion-content-edit") + if $editView.length + $editView.show() + else + view = { id: id, body: $local(".comment-raw-body").html() } + $discussionContent.append Mustache.render Discussion.editCommentTemplate, view + Discussion.makeWmdEditor $content, $local, "comment-body-edit" + $local(".discussion-submit-update").unbind("click").click -> handleSubmitEditComment(this) + $local(".discussion-cancel-update").unbind("click").click -> handleCancelEdit(this) + + handleSubmitEditComment= (elem) -> + url = Discussion.urlFor('update_comment', id) + body = Discussion.getWmdContent $content, $local, "comment-body-edit" + Discussion.safeAjax + $elem: $(elem) + url: url + type: "POST" + dataType: "json" + data: {body: body} + error: Discussion.formErrorHandler($local(".discussion-update-errors")) + success: (response, textStatus) -> + Discussion.clearFormErrors($local(".discussion-update-errors")) + $discussionContent.replaceWith(response.html) + Discussion.extendContentInfo response.content['id'], response['annotated_content_info'] + Discussion.initializeContent($content) + Discussion.bindContentEvents($content) + + handleEndorse = (elem, endorsed) -> + url = Discussion.urlFor('endorse_comment', id) + Discussion.safeAjax + $elem: $(elem) + url: url + type: "POST" + dataType: "json" + data: {endorsed: endorsed} + success: (response, textStatus) -> + if textStatus == "success" + if endorsed + $(content).addClass("endorsed") + else + $(content).removeClass("endorsed") + + $(elem).unbind('click').click -> + handleEndorse(elem, !endorsed) + + handleOpenClose = (elem, text) -> + url = Discussion.urlFor('openclose_thread', id) + closed = undefined + if text.match(/Close/) + closed = true + else if text.match(/[Oo]pen/) + closed = false + else + console.log "Unexpected text " + text + "for open/close thread." + + Discussion.safeAjax + $elem: $(elem) + url: url + type: "POST" + dataType: "json" + data: {closed: closed} + success: (response, textStatus) => + if textStatus == "success" + if closed + $(content).addClass("closed") + $(elem).text "Re-open Thread" + else + $(content).removeClass("closed") + $(elem).text "Close Thread" + error: (response, textStatus, e) -> + console.log e + + handleDelete = (elem) -> + if $content.hasClass("thread") + url = Discussion.urlFor('delete_thread', id) + c = confirm "Are you sure to delete thread \"" + $content.find("a.thread-title").text() + "\"?" + else + url = Discussion.urlFor('delete_comment', id) + c = confirm "Are you sure to delete this comment? " + if c != true + return + Discussion.safeAjax + $elem: $(elem) + url: url + type: "POST" + dataType: "json" + data: {} + success: (response, textStatus) => + if textStatus == "success" + $(content).remove() + error: (response, textStatus, e) -> + console.log e + + handleHideSingleThread = (elem) -> + $threadTitle = $local(".thread-title") + $hideComments = $local(".discussion-hide-comments") + $hideComments.removeClass("discussion-hide-comments") + .addClass("discussion-show-comments") + $content.children(".comments").hide() + $threadTitle.unbind('click').click handleShowSingleThread + $hideComments.unbind('click').click handleShowSingleThread + prevHtml = $hideComments.html() + $hideComments.html prevHtml.replace "Hide", "Show" + + handleShowSingleThread = -> + $threadTitle = $local(".thread-title") + $showComments = $local(".discussion-show-comments") + + if not $showComments.hasClass("first-time") and (not $showComments.length or not $threadTitle.length) + return + + rebindHideEvents = -> + $threadTitle.unbind('click').click handleHideSingleThread + $showComments.unbind('click').click handleHideSingleThread + $showComments.removeClass("discussion-show-comments") + .addClass("discussion-hide-comments") + prevHtml = $showComments.html() + $showComments.html prevHtml.replace "Show", "Hide" + + + if not $showComments.hasClass("first-time") and $content.children(".comments").length + $content.children(".comments").show() + rebindHideEvents() + else + discussion_id = $threadTitle.parents(".discussion").attr("_id") + url = Discussion.urlFor('retrieve_single_thread', discussion_id, id) + Discussion.safeAjax + $elem: $.merge($threadTitle, $showComments) + url: url + type: "GET" + dataType: 'json' + success: (response, textStatus) -> + Discussion.bulkExtendContentInfo response['annotated_content_info'] + $content.append(response['html']) + $content.find(".comment").each (index, comment) -> + Discussion.initializeContent(comment) + Discussion.bindContentEvents(comment) + $showComments.removeClass("first-time") + rebindHideEvents() + + Discussion.bindLocalEvents $local, + + "click .thread-title": -> + handleShowSingleThread(this) + + "click .discussion-show-comments": -> + handleShowSingleThread(this) + + "click .discussion-hide-comments": -> + handleHideSingleThread(this) + + "click .discussion-reply-thread": -> + handleShowSingleThread($local(".thread-title")) + handleReply(this) + + "click .discussion-reply-comment": -> + handleReply(this) + + "click .discussion-cancel-reply": -> + handleCancelReply(this) + + "click .discussion-vote-up": -> + $elem = $(this) + if $elem.hasClass("voted") + handleUnvote($elem) + else + handleVote($elem, "up") + + "click .discussion-vote-down": -> + $elem = $(this) + if $elem.hasClass("voted") + handleUnvote($elem) + else + handleVote($elem, "down") + + "click .admin-endorse": -> + handleEndorse(this, not $content.hasClass("endorsed")) + + "click .admin-openclose": -> + handleOpenClose(this, $(this).text()) + + "click .admin-edit": -> + if $content.hasClass("thread") + handleEditThread(this) + else + handleEditComment(this) + + "click .admin-delete": -> + handleDelete(this) + + initializeContent: (content) -> + + unescapeHighlightTag = (text) -> + text.replace(/\<\;highlight\>\;/g, "") + .replace(/\<\;\/highlight\>\;/g, "") + + stripHighlight = (text, type) -> + text.replace(/\&(amp\;)?lt\;highlight\&(amp\;)?gt\;/g, "") + .replace(/\&(amp\;)?lt\;\/highlight\&(amp\;)?gt\;/g, "") + + + stripLatexHighlight = (text) -> + Discussion.processEachMathAndCode text, stripHighlight + + markdownWithHighlight = (text) -> + converter = Markdown.getMathCompatibleConverter() + unescapeHighlightTag stripLatexHighlight converter.makeHtml text + + $content = $(content) + initializeVote $content + if $content.hasClass("thread") + initializeFollowThread $content + $local = Discussion.generateLocal($content.children(".discussion-content")) + + $local("span.timeago").timeago() + + $contentTitle = $local(".thread-title") + + if $contentTitle.length + $contentTitle.html unescapeHighlightTag stripLatexHighlight $contentTitle.html() + + $contentBody = $local(".content-body") + + $contentBody.html Discussion.postMathJaxProcessor markdownWithHighlight $contentBody.html() + + MathJax.Hub.Queue ["Typeset", MathJax.Hub, $contentBody.attr("id")] + id = $content.attr("_id") + + if $content.hasClass("thread") + discussion_id = $content.attr("_discussion_id") + permalink = Discussion.urlFor("permanent_link_thread", discussion_id, id) + else + thread_id = $content.parents(".thread").attr("_id") + discussion_id = $content.parents(".thread").attr("_discussion_id") + permalink = Discussion.urlFor("permanent_link_comment", discussion_id, thread_id, id) + $local(".discussion-permanent-link").attr "href", permalink + + if not Discussion.getContentInfo id, 'editable' + $local(".admin-edit").remove() + if not Discussion.getContentInfo id, 'can_reply' + $local(".discussion-reply").remove() + if not Discussion.getContentInfo id, 'can_endorse' + $local(".admin-endorse").remove() + if not Discussion.getContentInfo id, 'can_delete' + $local(".admin-delete").remove() + if not Discussion.getContentInfo id, 'can_openclose' + $local(".admin-openclose").remove() + #if not Discussion.getContentInfo id, 'can_vote' + # $local(".discussion-vote").css "visibility", "hidden" diff --git a/lms/static/coffee/src/discussion/discussion.coffee b/lms/static/coffee/src/discussion/discussion.coffee index d67da04e0e..8e98ac3110 100644 --- a/lms/static/coffee/src/discussion/discussion.coffee +++ b/lms/static/coffee/src/discussion/discussion.coffee @@ -1,31 +1,190 @@ -$ -> - - class Discussion extends Backbone.Collection - model: Thread - initialize: -> - this.bind "add", (item) => - item.collection = this +if not @Discussion? + @Discussion = {} - class DiscussionModuleView extends Backbone.View +Discussion = @Discussion - class DiscussionView extends Backbone.View +initializeFollowDiscussion = (discussion) -> + $discussion = $(discussion) + id = $following.attr("_id") + $local = Discussion.generateLocal() + $discussion.children(".discussion-non-content") + .find(".discussion-title-wrapper") + .append(Discussion.subscriptionLink('discussion', id)) - $: (selector) -> - @$local.find(selector) +@Discussion = $.extend @Discussion, - initialize: -> - @$local = @$el.children(".local") + initializeDiscussion: (discussion) -> + $discussion = $(discussion) + $discussion.find(".thread").each (index, thread) -> + Discussion.initializeContent(thread) + Discussion.bindContentEvents(thread) + $discussion.find(".comment").each (index, comment) -> + Discussion.initializeContent(comment) + Discussion.bindContentEvents(comment) - events: - "submit .search-wrapper>.discussion-search-form": "search" - "click .discussion-search-link": "search" - "click .discussion-sort-link": "sort" - "click .discussion-paginator>.discussion-page-link": "page" - - $(".discussion-module").each (index, elem) -> - view = new DiscussionModuleView(el: elem) + #initializeFollowDiscussion(discussion) TODO move this somewhere else - $("section.discussion").each (index, elem) -> - discussionData = DiscussionUtil.getDiscussionData(elem) - discussion = new Discussion(discussionData) - view = new DiscussionView(el: elem, model: discussion) + bindDiscussionEvents: (discussion) -> + + $discussion = $(discussion) + $discussionNonContent = $discussion.children(".discussion-non-content") + $local = Discussion.generateLocal($discussion.children(".discussion-local")) + + id = $discussion.attr("_id") + + handleSubmitNewPost = (elem) -> + title = $local(".new-post-title").val() + body = Discussion.getWmdContent $discussion, $local, "new-post-body" + tags = $local(".new-post-tags").val() + url = Discussion.urlFor('create_thread', id) + Discussion.safeAjax + $elem: $(elem) + url: url + type: "POST" + dataType: 'json' + data: + title: title + body: body + tags: tags + error: Discussion.formErrorHandler($local(".new-post-form-errors")) + success: (response, textStatus) -> + Discussion.clearFormErrors($local(".new-post-form-errors")) + $thread = $(response.html) + $discussion.children(".threads").prepend($thread) + $local(".new-post-title").val("") + Discussion.setWmdContent $discussion, $local, "new-post-body", "" + $local(".new-post-tags").val("") + if $discussion.hasClass("inline-discussion") + $local(".new-post-form").addClass("collapsed") + else if $discussion.hasClass("forum-discussion") + $local(".new-post-form").hide() + + handleCancelNewPost = (elem) -> + if $discussion.hasClass("inline-discussion") + $local(".new-post-form").addClass("collapsed") + else if $discussion.hasClass("forum-discussion") + $local(".new-post-form").hide() + + handleSimilarPost = (elem) -> + $title = $local(".new-post-title") + $wrapper = $local(".new-post-similar-posts-wrapper") + $similarPosts = $local(".new-post-similar-posts") + prevText = $title.attr("prev-text") + text = $title.val() + if text == prevText + if $local(".similar-post").length + $wrapper.show() + else if $.trim(text).length + Discussion.safeAjax + $elem: $(elem) + url: Discussion.urlFor 'search_similar_threads', id + type: "GET" + dateType: 'json' + data: + text: $local(".new-post-title").val() + success: (response, textStatus) -> + $similarPosts.empty() + console.log response + if $.type(response) == "array" and response.length + $wrapper.show() + for thread in response + #singleThreadUrl = Discussion.urlFor 'retrieve_single_thread + $similarPost = $("").addClass("similar-post") + .html(thread["title"]) + .attr("href", "javascript:void(0)") #TODO + .appendTo($similarPosts) + else + $wrapper.hide() + else + $wrapper.hide() + $title.attr("prev-text", text) + + initializeNewPost = -> + view = { discussion_id: id } + $discussionNonContent = $discussion.children(".discussion-non-content") + + if not $local(".wmd-panel").length + $discussionNonContent.append Mustache.render Discussion.newPostTemplate, view + $newPostBody = $local(".new-post-body") + Discussion.makeWmdEditor $discussion, $local, "new-post-body" + + $input = Discussion.getWmdInput($discussion, $local, "new-post-body") + $input.attr("placeholder", "post a new topic...") + if $discussion.hasClass("inline-discussion") + $input.bind 'focus', (e) -> + $local(".new-post-form").removeClass('collapsed') + else if $discussion.hasClass("forum-discussion") + $local(".new-post-form").removeClass('collapsed') + + $local(".new-post-tags").tagsInput Discussion.tagsInputOptions() + + $local(".new-post-title").blur -> + handleSimilarPost(this) + + $local(".hide-similar-posts").click -> + $local(".new-post-similar-posts-wrapper").hide() + + $local(".discussion-submit-post").click -> + handleSubmitNewPost(this) + $local(".discussion-cancel-post").click -> + handleCancelNewPost(this) + + $local(".new-post-form").show() + + handleAjaxReloadDiscussion = (elem, url) -> + if not url then return + $elem = $(elem) + $discussion = $elem.parents("section.discussion") + Discussion.safeAjax + $elem: $elem + url: url + type: "GET" + dataType: 'html' + success: (data, textStatus) -> + $data = $(data) + $parent = $discussion.parent() + $discussion.replaceWith($data) + $discussion = $parent.children(".discussion") + Discussion.initializeDiscussion($discussion) + Discussion.bindDiscussionEvents($discussion) + + handleAjaxSearch = (elem) -> + $elem = $(elem) + url = URI($elem.attr("action")).addSearch({text: $local(".search-input").val()}) + handleAjaxReloadDiscussion($elem, url) + + handleAjaxSort = (elem) -> + $elem = $(elem) + url = $elem.attr("sort-url") + handleAjaxReloadDiscussion($elem, url) + + handleAjaxPage = (elem) -> + $elem = $(elem) + url = $elem.attr("page-url") + handleAjaxReloadDiscussion($elem, url) + + if $discussion.hasClass("inline-discussion") + initializeNewPost() + + if $discussion.hasClass("forum-discussion") + $discussionSidebar = $(".discussion-sidebar") + if $discussionSidebar.length + $sidebarLocal = Discussion.generateLocal($discussionSidebar) + Discussion.bindLocalEvents $sidebarLocal, + "click .sidebar-new-post-button": (event) -> + initializeNewPost() + + Discussion.bindLocalEvents $local, + + "submit .search-wrapper>.discussion-search-form": (event) -> + event.preventDefault() + handleAjaxSearch(this) + + "click .discussion-search-link": -> + handleAjaxSearch($local(".search-wrapper>.discussion-search-form")) + + "click .discussion-sort-link": -> + handleAjaxSort(this) + + $discussion.children(".discussion-paginator").find(".discussion-page-link").unbind('click').click -> + handleAjaxPage(this) diff --git a/lms/static/coffee/src/discussion/main.coffee b/lms/static/coffee/src/discussion/main.coffee index e69de29bb2..f9b11b72e3 100644 --- a/lms/static/coffee/src/discussion/main.coffee +++ b/lms/static/coffee/src/discussion/main.coffee @@ -0,0 +1,23 @@ +$ -> + + #toggle = -> + # $('.course-wrapper').toggleClass('closed') + + #Discussion = window.Discussion + #if $('#accordion').length + # active = $('#accordion ul:has(li.active)').index('#accordion ul') + # $('#accordion').bind('accordionchange', @log).accordion + # active: if active >= 0 then active else 1 + # header: 'h3' + # autoHeight: false + # $('#open_close_accordion a').click toggle + # $('#accordion').show() + + #$(".discussion-module").each (index, elem) -> + # Discussion.initializeDiscussionModule(elem) + + #$("section.discussion").each (index, discussion) -> + # Discussion.initializeDiscussion(discussion) + # Discussion.bindDiscussionEvents(discussion) + + #Discussion.initializeUserProfile($(".discussion-sidebar>.user-profile")) diff --git a/lms/static/coffee/src/discussion/utils.coffee b/lms/static/coffee/src/discussion/utils.coffee index 09bac7a335..c034b79675 100644 --- a/lms/static/coffee/src/discussion/utils.coffee +++ b/lms/static/coffee/src/discussion/utils.coffee @@ -1,7 +1,244 @@ -class @DiscussionUtil - @getDiscussionData: (id) -> - if id instanceof $ - id = id.attr("_id") - else if typeof id == "object" - id = $(id).attr("_id") - return $$discussion_data[id] +if not @Discussion? + @Discussion = {} + +Discussion = @Discussion + +wmdEditors = {} + +@Discussion = $.extend @Discussion, + + generateLocal: (elem) -> + (selector) -> $(elem).find(selector) + + generateDiscussionLink: (cls, txt, handler) -> + $("").addClass("discussion-link") + .attr("href", "javascript:void(0)") + .addClass(cls).html(txt) + .click -> handler(this) + + urlFor: (name, param, param1, param2) -> + { + follow_discussion : "/courses/#{$$course_id}/discussion/#{param}/follow" + unfollow_discussion : "/courses/#{$$course_id}/discussion/#{param}/unfollow" + create_thread : "/courses/#{$$course_id}/discussion/#{param}/threads/create" + search_similar_threads : "/courses/#{$$course_id}/discussion/#{param}/threads/search_similar" + update_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/update" + create_comment : "/courses/#{$$course_id}/discussion/threads/#{param}/reply" + delete_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/delete" + upvote_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/upvote" + downvote_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/downvote" + undo_vote_for_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/unvote" + follow_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/follow" + unfollow_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/unfollow" + update_comment : "/courses/#{$$course_id}/discussion/comments/#{param}/update" + endorse_comment : "/courses/#{$$course_id}/discussion/comments/#{param}/endorse" + create_sub_comment : "/courses/#{$$course_id}/discussion/comments/#{param}/reply" + delete_comment : "/courses/#{$$course_id}/discussion/comments/#{param}/delete" + upvote_comment : "/courses/#{$$course_id}/discussion/comments/#{param}/upvote" + downvote_comment : "/courses/#{$$course_id}/discussion/comments/#{param}/downvote" + undo_vote_for_comment : "/courses/#{$$course_id}/discussion/comments/#{param}/unvote" + upload : "/courses/#{$$course_id}/discussion/upload" + search : "/courses/#{$$course_id}/discussion/forum/search" + tags_autocomplete : "/courses/#{$$course_id}/discussion/threads/tags/autocomplete" + retrieve_discussion : "/courses/#{$$course_id}/discussion/forum/#{param}/inline" + retrieve_single_thread : "/courses/#{$$course_id}/discussion/forum/#{param}/threads/#{param1}" + update_moderator_status : "/courses/#{$$course_id}/discussion/users/#{param}/update_moderator_status" + openclose_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/close" + permanent_link_thread : "/courses/#{$$course_id}/discussion/forum/#{param}/threads/#{param1}" + permanent_link_comment : "/courses/#{$$course_id}/discussion/forum/#{param}/threads/#{param1}##{param2}" + }[name] + + safeAjax: (params) -> + $elem = params.$elem + if $elem.attr("disabled") + return + $elem.attr("disabled", "disabled") + $.ajax(params).always -> + $elem.removeAttr("disabled") + + handleAnchorAndReload: (response) -> + #window.location = window.location.pathname + "#" + response['id'] + window.location.reload() + + bindLocalEvents: ($local, eventsHandler) -> + for eventSelector, handler of eventsHandler + [event, selector] = eventSelector.split(' ') + $local(selector).unbind(event)[event] handler + + tagsInputOptions: -> + autocomplete_url: Discussion.urlFor('tags_autocomplete') + autocomplete: + remoteDataType: 'json' + interactive: true + height: '30px' + width: '100%' + defaultText: "Tag your post: press enter after each tag" + removeWithBackspace: true + + isSubscribed: (id, type) -> + $$user_info? and ( + if type == "thread" + id in $$user_info.subscribed_thread_ids + else if type == "commentable" or type == "discussion" + id in $$user_info.subscribed_commentable_ids + else + id in $$user_info.subscribed_user_ids + ) + + isUpvoted: (id) -> + $$user_info? and (id in $$user_info.upvoted_ids) + + isDownvoted: (id) -> + $$user_info? and (id in $$user_info.downvoted_ids) + + formErrorHandler: (errorsField) -> + (xhr, textStatus, error) -> + response = JSON.parse(xhr.responseText) + if response.errors? and response.errors.length > 0 + errorsField.empty() + for error in response.errors + errorsField.append($("
  • ").addClass("new-post-form-error").html(error)) + + clearFormErrors: (errorsField) -> + errorsField.empty() + + postMathJaxProcessor: (text) -> + RE_INLINEMATH = /^\$([^\$]*)\$/g + RE_DISPLAYMATH = /^\$\$([^\$]*)\$\$/g + Discussion.processEachMathAndCode text, (s, type) -> + if type == 'display' + s.replace RE_DISPLAYMATH, ($0, $1) -> + "\\[" + $1 + "\\]" + else if type == 'inline' + s.replace RE_INLINEMATH, ($0, $1) -> + "\\(" + $1 + "\\)" + else + s + + makeWmdEditor: ($content, $local, cls_identifier) -> + elem = $local(".#{cls_identifier}") + id = $content.attr("_id") + appended_id = "-#{cls_identifier}-#{id}" + imageUploadUrl = Discussion.urlFor('upload') + editor = Markdown.makeWmdEditor elem, appended_id, imageUploadUrl, Discussion.postMathJaxProcessor + wmdEditors["#{cls_identifier}-#{id}"] = editor + editor + + getWmdEditor: ($content, $local, cls_identifier) -> + id = $content.attr("_id") + wmdEditors["#{cls_identifier}-#{id}"] + + getWmdInput: ($content, $local, cls_identifier) -> + id = $content.attr("_id") + $local("#wmd-input-#{cls_identifier}-#{id}") + + getWmdContent: ($content, $local, cls_identifier) -> + Discussion.getWmdInput($content, $local, cls_identifier).val() + + setWmdContent: ($content, $local, cls_identifier, text) -> + Discussion.getWmdInput($content, $local, cls_identifier).val(text) + Discussion.getWmdEditor($content, $local, cls_identifier).refreshPreview() + + getContentInfo: (id, attr) -> + if not window.$$annotated_content_info? + window.$$annotated_content_info = {} + (window.$$annotated_content_info[id] || {})[attr] + + setContentInfo: (id, attr, value) -> + if not window.$$annotated_content_info? + window.$$annotated_content_info = {} + window.$$annotated_content_info[id] ||= {} + window.$$annotated_content_info[id][attr] = value + + extendContentInfo: (id, newInfo) -> + if not window.$$annotated_content_info? + window.$$annotated_content_info = {} + window.$$annotated_content_info[id] = newInfo + bulkExtendContentInfo: (newInfos) -> + if not window.$$annotated_content_info? + window.$$annotated_content_info = {} + window.$$annotated_content_info = $.extend window.$$annotated_content_info, newInfos + + subscriptionLink: (type, id) -> + followLink = -> + Discussion.generateDiscussionLink("discussion-follow-#{type}", "Follow", handleFollow) + + unfollowLink = -> + Discussion.generateDiscussionLink("discussion-unfollow-#{type}", "Unfollow", handleUnfollow) + + handleFollow = (elem) -> + Discussion.safeAjax + $elem: $(elem) + url: Discussion.urlFor("follow_#{type}", id) + type: "POST" + success: (response, textStatus) -> + if textStatus == "success" + $(elem).replaceWith unfollowLink() + dataType: 'json' + + handleUnfollow = (elem) -> + Discussion.safeAjax + $elem: $(elem) + url: Discussion.urlFor("unfollow_#{type}", id) + type: "POST" + success: (response, textStatus) -> + if textStatus == "success" + $(elem).replaceWith followLink() + dataType: 'json' + + if Discussion.isSubscribed(id, type) + unfollowLink() + else + followLink() + + processEachMathAndCode: (text, processor) -> + + codeArchive = [] + + RE_DISPLAYMATH = /^([^\$]*?)\$\$([^\$]*?)\$\$(.*)$/m + RE_INLINEMATH = /^([^\$]*?)\$([^\$]+?)\$(.*)$/m + + ESCAPED_DOLLAR = '@@ESCAPED_D@@' + ESCAPED_BACKSLASH = '@@ESCAPED_B@@' + + processedText = "" + + $div = $("
    ").html(text) + + $div.find("code").each (index, code) -> + codeArchive.push $(code).html() + $(code).html(codeArchive.length - 1) + + text = $div.html() + text = text.replace /\\\$/g, ESCAPED_DOLLAR + + while true + if RE_INLINEMATH.test(text) + text = text.replace RE_INLINEMATH, ($0, $1, $2, $3) -> + processedText += $1 + processor("$" + $2 + "$", 'inline') + $3 + else if RE_DISPLAYMATH.test(text) + text = text.replace RE_DISPLAYMATH, ($0, $1, $2, $3) -> + processedText += $1 + processor("$$" + $2 + "$$", 'display') + $3 + else + processedText += text + break + + text = processedText + text = text.replace(new RegExp(ESCAPED_DOLLAR, 'g'), '\\$') + + text = text.replace /\\\\\\\\/g, ESCAPED_BACKSLASH + text = text.replace /\\begin\{([a-z]*\*?)\}([\s\S]*?)\\end\{\1\}/img, ($0, $1, $2) -> + processor("\\begin{#{$1}}" + $2 + "\\end{#{$1}}") + text = text.replace(new RegExp(ESCAPED_BACKSLASH, 'g'), '\\\\\\\\') + + $div = $("
    ").html(text) + cnt = 0 + $div.find("code").each (index, code) -> + $(code).html(processor(codeArchive[cnt], 'code')) + cnt += 1 + + text = $div.html() + + text diff --git a/lms/static/coffee/src/old_discussion/content.coffee b/lms/static/coffee/src/old_discussion/content.coffee deleted file mode 100644 index 9924e540a2..0000000000 --- a/lms/static/coffee/src/old_discussion/content.coffee +++ /dev/null @@ -1,409 +0,0 @@ -if not @Discussion? - @Discussion = {} - -Discussion = @Discussion - -initializeVote = (content) -> - $content = $(content) - $local = Discussion.generateLocal($content.children(".discussion-content")) - id = $content.attr("_id") - if Discussion.isUpvoted id - $local(".discussion-vote-up").addClass("voted") - else if Discussion.isDownvoted id - $local(".discussion-vote-down").addClass("voted") - -initializeFollowThread = (thread) -> - $thread = $(thread) - id = $thread.attr("_id") - $thread.children(".discussion-content") - .find(".follow-wrapper") - .append(Discussion.subscriptionLink('thread', id)) - -@Discussion = $.extend @Discussion, - - bindContentEvents: (content) -> - - $content = $(content) - $discussionContent = $content.children(".discussion-content") - $local = Discussion.generateLocal($discussionContent) - - id = $content.attr("_id") - - handleReply = (elem) -> - $replyView = $local(".discussion-reply-new") - if $replyView.length - $replyView.show() - else - thread_id = $discussionContent.parents(".thread").attr("_id") - view = - id: id - showWatchCheckbox: not Discussion.isSubscribed(thread_id, "thread") - $discussionContent.append Mustache.render Discussion.replyTemplate, view - Discussion.makeWmdEditor $content, $local, "reply-body" - $local(".discussion-submit-post").click -> handleSubmitReply(this) - $local(".discussion-cancel-post").click -> handleCancelReply(this) - $local(".discussion-reply").hide() - $local(".discussion-edit").hide() - - handleCancelReply = (elem) -> - $replyView = $local(".discussion-reply-new") - if $replyView.length - $replyView.hide() - $local(".discussion-reply").show() - $local(".discussion-edit").show() - - handleSubmitReply = (elem) -> - if $content.hasClass("thread") - url = Discussion.urlFor('create_comment', id) - else if $content.hasClass("comment") - url = Discussion.urlFor('create_sub_comment', id) - else - return - - body = Discussion.getWmdContent $content, $local, "reply-body" - - anonymous = false || $local(".discussion-post-anonymously").is(":checked") - autowatch = false || $local(".discussion-auto-watch").is(":checked") - - Discussion.safeAjax - $elem: $(elem) - url: url - type: "POST" - dataType: 'json' - data: - body: body - anonymous: anonymous - autowatch: autowatch - error: Discussion.formErrorHandler($local(".discussion-errors")) - success: (response, textStatus) -> - Discussion.clearFormErrors($local(".discussion-errors")) - $comment = $(response.html) - $content.children(".comments").prepend($comment) - Discussion.setWmdContent $content, $local, "reply-body", "" - Discussion.setContentInfo response.content['id'], 'can_reply', true - Discussion.setContentInfo response.content['id'], 'editable', true - Discussion.extendContentInfo response.content['id'], response['annotated_content_info'] - Discussion.initializeContent($comment) - Discussion.bindContentEvents($comment) - $local(".discussion-reply-new").hide() - $local(".discussion-reply").show() - $local(".discussion-edit").show() - $discussionContent.attr("status", "normal") - - handleVote = (elem, value) -> - contentType = if $content.hasClass("thread") then "thread" else "comment" - url = Discussion.urlFor("#{value}vote_#{contentType}", id) - Discussion.safeAjax - $elem: $local(".discussion-vote") - url: url - type: "POST" - dataType: "json" - success: (response, textStatus) -> - if textStatus == "success" - $local(".discussion-vote").removeClass("voted") - $local(".discussion-vote-#{value}").addClass("voted") - $local(".discussion-votes-point").html response.votes.point - - handleUnvote = (elem, value) -> - contentType = if $content.hasClass("thread") then "thread" else "comment" - url = Discussion.urlFor("undo_vote_for_#{contentType}", id) - Discussion.safeAjax - $elem: $local(".discussion-vote") - url: url - type: "POST" - dataType: "json" - success: (response, textStatus) -> - if textStatus == "success" - $local(".discussion-vote").removeClass("voted") - $local(".discussion-votes-point").html response.votes.point - - handleCancelEdit = (elem) -> - $local(".discussion-content-edit").hide() - $local(".discussion-content-wrapper").show() - - handleEditThread = (elem) -> - $local(".discussion-content-wrapper").hide() - $editView = $local(".discussion-content-edit") - if $editView.length - $editView.show() - else - view = { - id: id - title: $local(".thread-raw-title").html() - body: $local(".thread-raw-body").html() - tags: $local(".thread-raw-tags").html() - } - $discussionContent.append Mustache.render Discussion.editThreadTemplate, view - Discussion.makeWmdEditor $content, $local, "thread-body-edit" - $local(".thread-tags-edit").tagsInput Discussion.tagsInputOptions() - $local(".discussion-submit-update").unbind("click").click -> handleSubmitEditThread(this) - $local(".discussion-cancel-update").unbind("click").click -> handleCancelEdit(this) - - handleSubmitEditThread = (elem) -> - url = Discussion.urlFor('update_thread', id) - title = $local(".thread-title-edit").val() - body = Discussion.getWmdContent $content, $local, "thread-body-edit" - tags = $local(".thread-tags-edit").val() - Discussion.safeAjax - $elem: $(elem) - url: url - type: "POST" - dataType: 'json' - data: {title: title, body: body, tags: tags}, - error: Discussion.formErrorHandler($local(".discussion-update-errors")) - success: (response, textStatus) -> - Discussion.clearFormErrors($local(".discussion-update-errors")) - $discussionContent.replaceWith(response.html) - Discussion.extendContentInfo response.content['id'], response['annotated_content_info'] - Discussion.initializeContent($content) - Discussion.bindContentEvents($content) - - handleEditComment = (elem) -> - $local(".discussion-content-wrapper").hide() - $editView = $local(".discussion-content-edit") - if $editView.length - $editView.show() - else - view = { id: id, body: $local(".comment-raw-body").html() } - $discussionContent.append Mustache.render Discussion.editCommentTemplate, view - Discussion.makeWmdEditor $content, $local, "comment-body-edit" - $local(".discussion-submit-update").unbind("click").click -> handleSubmitEditComment(this) - $local(".discussion-cancel-update").unbind("click").click -> handleCancelEdit(this) - - handleSubmitEditComment= (elem) -> - url = Discussion.urlFor('update_comment', id) - body = Discussion.getWmdContent $content, $local, "comment-body-edit" - Discussion.safeAjax - $elem: $(elem) - url: url - type: "POST" - dataType: "json" - data: {body: body} - error: Discussion.formErrorHandler($local(".discussion-update-errors")) - success: (response, textStatus) -> - Discussion.clearFormErrors($local(".discussion-update-errors")) - $discussionContent.replaceWith(response.html) - Discussion.extendContentInfo response.content['id'], response['annotated_content_info'] - Discussion.initializeContent($content) - Discussion.bindContentEvents($content) - - handleEndorse = (elem, endorsed) -> - url = Discussion.urlFor('endorse_comment', id) - Discussion.safeAjax - $elem: $(elem) - url: url - type: "POST" - dataType: "json" - data: {endorsed: endorsed} - success: (response, textStatus) -> - if textStatus == "success" - if endorsed - $(content).addClass("endorsed") - else - $(content).removeClass("endorsed") - - $(elem).unbind('click').click -> - handleEndorse(elem, !endorsed) - - handleOpenClose = (elem, text) -> - url = Discussion.urlFor('openclose_thread', id) - closed = undefined - if text.match(/Close/) - closed = true - else if text.match(/[Oo]pen/) - closed = false - else - console.log "Unexpected text " + text + "for open/close thread." - - Discussion.safeAjax - $elem: $(elem) - url: url - type: "POST" - dataType: "json" - data: {closed: closed} - success: (response, textStatus) => - if textStatus == "success" - if closed - $(content).addClass("closed") - $(elem).text "Re-open Thread" - else - $(content).removeClass("closed") - $(elem).text "Close Thread" - error: (response, textStatus, e) -> - console.log e - - handleDelete = (elem) -> - if $content.hasClass("thread") - url = Discussion.urlFor('delete_thread', id) - c = confirm "Are you sure to delete thread \"" + $content.find("a.thread-title").text() + "\"?" - else - url = Discussion.urlFor('delete_comment', id) - c = confirm "Are you sure to delete this comment? " - if c != true - return - Discussion.safeAjax - $elem: $(elem) - url: url - type: "POST" - dataType: "json" - data: {} - success: (response, textStatus) => - if textStatus == "success" - $(content).remove() - error: (response, textStatus, e) -> - console.log e - - handleHideSingleThread = (elem) -> - $threadTitle = $local(".thread-title") - $hideComments = $local(".discussion-hide-comments") - $hideComments.removeClass("discussion-hide-comments") - .addClass("discussion-show-comments") - $content.children(".comments").hide() - $threadTitle.unbind('click').click handleShowSingleThread - $hideComments.unbind('click').click handleShowSingleThread - prevHtml = $hideComments.html() - $hideComments.html prevHtml.replace "Hide", "Show" - - handleShowSingleThread = -> - $threadTitle = $local(".thread-title") - $showComments = $local(".discussion-show-comments") - - if not $showComments.hasClass("first-time") and (not $showComments.length or not $threadTitle.length) - return - - rebindHideEvents = -> - $threadTitle.unbind('click').click handleHideSingleThread - $showComments.unbind('click').click handleHideSingleThread - $showComments.removeClass("discussion-show-comments") - .addClass("discussion-hide-comments") - prevHtml = $showComments.html() - $showComments.html prevHtml.replace "Show", "Hide" - - - if not $showComments.hasClass("first-time") and $content.children(".comments").length - $content.children(".comments").show() - rebindHideEvents() - else - discussion_id = $threadTitle.parents(".discussion").attr("_id") - url = Discussion.urlFor('retrieve_single_thread', discussion_id, id) - Discussion.safeAjax - $elem: $.merge($threadTitle, $showComments) - url: url - type: "GET" - dataType: 'json' - success: (response, textStatus) -> - Discussion.bulkExtendContentInfo response['annotated_content_info'] - $content.append(response['html']) - $content.find(".comment").each (index, comment) -> - Discussion.initializeContent(comment) - Discussion.bindContentEvents(comment) - $showComments.removeClass("first-time") - rebindHideEvents() - - Discussion.bindLocalEvents $local, - - "click .thread-title": -> - handleShowSingleThread(this) - - "click .discussion-show-comments": -> - handleShowSingleThread(this) - - "click .discussion-hide-comments": -> - handleHideSingleThread(this) - - "click .discussion-reply-thread": -> - handleShowSingleThread($local(".thread-title")) - handleReply(this) - - "click .discussion-reply-comment": -> - handleReply(this) - - "click .discussion-cancel-reply": -> - handleCancelReply(this) - - "click .discussion-vote-up": -> - $elem = $(this) - if $elem.hasClass("voted") - handleUnvote($elem) - else - handleVote($elem, "up") - - "click .discussion-vote-down": -> - $elem = $(this) - if $elem.hasClass("voted") - handleUnvote($elem) - else - handleVote($elem, "down") - - "click .admin-endorse": -> - handleEndorse(this, not $content.hasClass("endorsed")) - - "click .admin-openclose": -> - handleOpenClose(this, $(this).text()) - - "click .admin-edit": -> - if $content.hasClass("thread") - handleEditThread(this) - else - handleEditComment(this) - - "click .admin-delete": -> - handleDelete(this) - - initializeContent: (content) -> - - unescapeHighlightTag = (text) -> - text.replace(/\<\;highlight\>\;/g, "") - .replace(/\<\;\/highlight\>\;/g, "") - - stripHighlight = (text, type) -> - text.replace(/\&(amp\;)?lt\;highlight\&(amp\;)?gt\;/g, "") - .replace(/\&(amp\;)?lt\;\/highlight\&(amp\;)?gt\;/g, "") - - - stripLatexHighlight = (text) -> - Discussion.processEachMathAndCode text, stripHighlight - - markdownWithHighlight = (text) -> - converter = Markdown.getMathCompatibleConverter() - unescapeHighlightTag stripLatexHighlight converter.makeHtml text - - $content = $(content) - initializeVote $content - if $content.hasClass("thread") - initializeFollowThread $content - $local = Discussion.generateLocal($content.children(".discussion-content")) - - $contentTitle = $local(".thread-title") - - if $contentTitle.length - $contentTitle.html unescapeHighlightTag stripLatexHighlight $contentTitle.html() - - $contentBody = $local(".content-body") - - $contentBody.html Discussion.postMathJaxProcessor markdownWithHighlight $contentBody.html() - - MathJax.Hub.Queue ["Typeset", MathJax.Hub, $contentBody.attr("id")] - id = $content.attr("_id") - - if $content.hasClass("thread") - discussion_id = $content.attr("_discussion_id") - permalink = Discussion.urlFor("permanent_link_thread", discussion_id, id) - else - thread_id = $content.parents(".thread").attr("_id") - discussion_id = $content.parents(".thread").attr("_discussion_id") - permalink = Discussion.urlFor("permanent_link_comment", discussion_id, thread_id, id) - $local(".discussion-permanent-link").attr "href", permalink - - if not Discussion.getContentInfo id, 'editable' - $local(".admin-edit").remove() - if not Discussion.getContentInfo id, 'can_reply' - $local(".discussion-reply").remove() - if not Discussion.getContentInfo id, 'can_endorse' - $local(".admin-endorse").remove() - if not Discussion.getContentInfo id, 'can_delete' - $local(".admin-delete").remove() - if not Discussion.getContentInfo id, 'can_openclose' - $local(".admin-openclose").remove() - #if not Discussion.getContentInfo id, 'can_vote' - # $local(".discussion-vote").css "visibility", "hidden" diff --git a/lms/static/coffee/src/old_discussion/discussion.coffee b/lms/static/coffee/src/old_discussion/discussion.coffee deleted file mode 100644 index 8e98ac3110..0000000000 --- a/lms/static/coffee/src/old_discussion/discussion.coffee +++ /dev/null @@ -1,190 +0,0 @@ -if not @Discussion? - @Discussion = {} - -Discussion = @Discussion - -initializeFollowDiscussion = (discussion) -> - $discussion = $(discussion) - id = $following.attr("_id") - $local = Discussion.generateLocal() - $discussion.children(".discussion-non-content") - .find(".discussion-title-wrapper") - .append(Discussion.subscriptionLink('discussion', id)) - -@Discussion = $.extend @Discussion, - - initializeDiscussion: (discussion) -> - $discussion = $(discussion) - $discussion.find(".thread").each (index, thread) -> - Discussion.initializeContent(thread) - Discussion.bindContentEvents(thread) - $discussion.find(".comment").each (index, comment) -> - Discussion.initializeContent(comment) - Discussion.bindContentEvents(comment) - - #initializeFollowDiscussion(discussion) TODO move this somewhere else - - bindDiscussionEvents: (discussion) -> - - $discussion = $(discussion) - $discussionNonContent = $discussion.children(".discussion-non-content") - $local = Discussion.generateLocal($discussion.children(".discussion-local")) - - id = $discussion.attr("_id") - - handleSubmitNewPost = (elem) -> - title = $local(".new-post-title").val() - body = Discussion.getWmdContent $discussion, $local, "new-post-body" - tags = $local(".new-post-tags").val() - url = Discussion.urlFor('create_thread', id) - Discussion.safeAjax - $elem: $(elem) - url: url - type: "POST" - dataType: 'json' - data: - title: title - body: body - tags: tags - error: Discussion.formErrorHandler($local(".new-post-form-errors")) - success: (response, textStatus) -> - Discussion.clearFormErrors($local(".new-post-form-errors")) - $thread = $(response.html) - $discussion.children(".threads").prepend($thread) - $local(".new-post-title").val("") - Discussion.setWmdContent $discussion, $local, "new-post-body", "" - $local(".new-post-tags").val("") - if $discussion.hasClass("inline-discussion") - $local(".new-post-form").addClass("collapsed") - else if $discussion.hasClass("forum-discussion") - $local(".new-post-form").hide() - - handleCancelNewPost = (elem) -> - if $discussion.hasClass("inline-discussion") - $local(".new-post-form").addClass("collapsed") - else if $discussion.hasClass("forum-discussion") - $local(".new-post-form").hide() - - handleSimilarPost = (elem) -> - $title = $local(".new-post-title") - $wrapper = $local(".new-post-similar-posts-wrapper") - $similarPosts = $local(".new-post-similar-posts") - prevText = $title.attr("prev-text") - text = $title.val() - if text == prevText - if $local(".similar-post").length - $wrapper.show() - else if $.trim(text).length - Discussion.safeAjax - $elem: $(elem) - url: Discussion.urlFor 'search_similar_threads', id - type: "GET" - dateType: 'json' - data: - text: $local(".new-post-title").val() - success: (response, textStatus) -> - $similarPosts.empty() - console.log response - if $.type(response) == "array" and response.length - $wrapper.show() - for thread in response - #singleThreadUrl = Discussion.urlFor 'retrieve_single_thread - $similarPost = $("").addClass("similar-post") - .html(thread["title"]) - .attr("href", "javascript:void(0)") #TODO - .appendTo($similarPosts) - else - $wrapper.hide() - else - $wrapper.hide() - $title.attr("prev-text", text) - - initializeNewPost = -> - view = { discussion_id: id } - $discussionNonContent = $discussion.children(".discussion-non-content") - - if not $local(".wmd-panel").length - $discussionNonContent.append Mustache.render Discussion.newPostTemplate, view - $newPostBody = $local(".new-post-body") - Discussion.makeWmdEditor $discussion, $local, "new-post-body" - - $input = Discussion.getWmdInput($discussion, $local, "new-post-body") - $input.attr("placeholder", "post a new topic...") - if $discussion.hasClass("inline-discussion") - $input.bind 'focus', (e) -> - $local(".new-post-form").removeClass('collapsed') - else if $discussion.hasClass("forum-discussion") - $local(".new-post-form").removeClass('collapsed') - - $local(".new-post-tags").tagsInput Discussion.tagsInputOptions() - - $local(".new-post-title").blur -> - handleSimilarPost(this) - - $local(".hide-similar-posts").click -> - $local(".new-post-similar-posts-wrapper").hide() - - $local(".discussion-submit-post").click -> - handleSubmitNewPost(this) - $local(".discussion-cancel-post").click -> - handleCancelNewPost(this) - - $local(".new-post-form").show() - - handleAjaxReloadDiscussion = (elem, url) -> - if not url then return - $elem = $(elem) - $discussion = $elem.parents("section.discussion") - Discussion.safeAjax - $elem: $elem - url: url - type: "GET" - dataType: 'html' - success: (data, textStatus) -> - $data = $(data) - $parent = $discussion.parent() - $discussion.replaceWith($data) - $discussion = $parent.children(".discussion") - Discussion.initializeDiscussion($discussion) - Discussion.bindDiscussionEvents($discussion) - - handleAjaxSearch = (elem) -> - $elem = $(elem) - url = URI($elem.attr("action")).addSearch({text: $local(".search-input").val()}) - handleAjaxReloadDiscussion($elem, url) - - handleAjaxSort = (elem) -> - $elem = $(elem) - url = $elem.attr("sort-url") - handleAjaxReloadDiscussion($elem, url) - - handleAjaxPage = (elem) -> - $elem = $(elem) - url = $elem.attr("page-url") - handleAjaxReloadDiscussion($elem, url) - - if $discussion.hasClass("inline-discussion") - initializeNewPost() - - if $discussion.hasClass("forum-discussion") - $discussionSidebar = $(".discussion-sidebar") - if $discussionSidebar.length - $sidebarLocal = Discussion.generateLocal($discussionSidebar) - Discussion.bindLocalEvents $sidebarLocal, - "click .sidebar-new-post-button": (event) -> - initializeNewPost() - - Discussion.bindLocalEvents $local, - - "submit .search-wrapper>.discussion-search-form": (event) -> - event.preventDefault() - handleAjaxSearch(this) - - "click .discussion-search-link": -> - handleAjaxSearch($local(".search-wrapper>.discussion-search-form")) - - "click .discussion-sort-link": -> - handleAjaxSort(this) - - $discussion.children(".discussion-paginator").find(".discussion-page-link").unbind('click').click -> - handleAjaxPage(this) diff --git a/lms/static/coffee/src/old_discussion/main.coffee b/lms/static/coffee/src/old_discussion/main.coffee deleted file mode 100644 index f9b11b72e3..0000000000 --- a/lms/static/coffee/src/old_discussion/main.coffee +++ /dev/null @@ -1,23 +0,0 @@ -$ -> - - #toggle = -> - # $('.course-wrapper').toggleClass('closed') - - #Discussion = window.Discussion - #if $('#accordion').length - # active = $('#accordion ul:has(li.active)').index('#accordion ul') - # $('#accordion').bind('accordionchange', @log).accordion - # active: if active >= 0 then active else 1 - # header: 'h3' - # autoHeight: false - # $('#open_close_accordion a').click toggle - # $('#accordion').show() - - #$(".discussion-module").each (index, elem) -> - # Discussion.initializeDiscussionModule(elem) - - #$("section.discussion").each (index, discussion) -> - # Discussion.initializeDiscussion(discussion) - # Discussion.bindDiscussionEvents(discussion) - - #Discussion.initializeUserProfile($(".discussion-sidebar>.user-profile")) diff --git a/lms/static/coffee/src/old_discussion/utils.coffee b/lms/static/coffee/src/old_discussion/utils.coffee deleted file mode 100644 index c034b79675..0000000000 --- a/lms/static/coffee/src/old_discussion/utils.coffee +++ /dev/null @@ -1,244 +0,0 @@ -if not @Discussion? - @Discussion = {} - -Discussion = @Discussion - -wmdEditors = {} - -@Discussion = $.extend @Discussion, - - generateLocal: (elem) -> - (selector) -> $(elem).find(selector) - - generateDiscussionLink: (cls, txt, handler) -> - $("").addClass("discussion-link") - .attr("href", "javascript:void(0)") - .addClass(cls).html(txt) - .click -> handler(this) - - urlFor: (name, param, param1, param2) -> - { - follow_discussion : "/courses/#{$$course_id}/discussion/#{param}/follow" - unfollow_discussion : "/courses/#{$$course_id}/discussion/#{param}/unfollow" - create_thread : "/courses/#{$$course_id}/discussion/#{param}/threads/create" - search_similar_threads : "/courses/#{$$course_id}/discussion/#{param}/threads/search_similar" - update_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/update" - create_comment : "/courses/#{$$course_id}/discussion/threads/#{param}/reply" - delete_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/delete" - upvote_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/upvote" - downvote_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/downvote" - undo_vote_for_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/unvote" - follow_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/follow" - unfollow_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/unfollow" - update_comment : "/courses/#{$$course_id}/discussion/comments/#{param}/update" - endorse_comment : "/courses/#{$$course_id}/discussion/comments/#{param}/endorse" - create_sub_comment : "/courses/#{$$course_id}/discussion/comments/#{param}/reply" - delete_comment : "/courses/#{$$course_id}/discussion/comments/#{param}/delete" - upvote_comment : "/courses/#{$$course_id}/discussion/comments/#{param}/upvote" - downvote_comment : "/courses/#{$$course_id}/discussion/comments/#{param}/downvote" - undo_vote_for_comment : "/courses/#{$$course_id}/discussion/comments/#{param}/unvote" - upload : "/courses/#{$$course_id}/discussion/upload" - search : "/courses/#{$$course_id}/discussion/forum/search" - tags_autocomplete : "/courses/#{$$course_id}/discussion/threads/tags/autocomplete" - retrieve_discussion : "/courses/#{$$course_id}/discussion/forum/#{param}/inline" - retrieve_single_thread : "/courses/#{$$course_id}/discussion/forum/#{param}/threads/#{param1}" - update_moderator_status : "/courses/#{$$course_id}/discussion/users/#{param}/update_moderator_status" - openclose_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/close" - permanent_link_thread : "/courses/#{$$course_id}/discussion/forum/#{param}/threads/#{param1}" - permanent_link_comment : "/courses/#{$$course_id}/discussion/forum/#{param}/threads/#{param1}##{param2}" - }[name] - - safeAjax: (params) -> - $elem = params.$elem - if $elem.attr("disabled") - return - $elem.attr("disabled", "disabled") - $.ajax(params).always -> - $elem.removeAttr("disabled") - - handleAnchorAndReload: (response) -> - #window.location = window.location.pathname + "#" + response['id'] - window.location.reload() - - bindLocalEvents: ($local, eventsHandler) -> - for eventSelector, handler of eventsHandler - [event, selector] = eventSelector.split(' ') - $local(selector).unbind(event)[event] handler - - tagsInputOptions: -> - autocomplete_url: Discussion.urlFor('tags_autocomplete') - autocomplete: - remoteDataType: 'json' - interactive: true - height: '30px' - width: '100%' - defaultText: "Tag your post: press enter after each tag" - removeWithBackspace: true - - isSubscribed: (id, type) -> - $$user_info? and ( - if type == "thread" - id in $$user_info.subscribed_thread_ids - else if type == "commentable" or type == "discussion" - id in $$user_info.subscribed_commentable_ids - else - id in $$user_info.subscribed_user_ids - ) - - isUpvoted: (id) -> - $$user_info? and (id in $$user_info.upvoted_ids) - - isDownvoted: (id) -> - $$user_info? and (id in $$user_info.downvoted_ids) - - formErrorHandler: (errorsField) -> - (xhr, textStatus, error) -> - response = JSON.parse(xhr.responseText) - if response.errors? and response.errors.length > 0 - errorsField.empty() - for error in response.errors - errorsField.append($("
  • ").addClass("new-post-form-error").html(error)) - - clearFormErrors: (errorsField) -> - errorsField.empty() - - postMathJaxProcessor: (text) -> - RE_INLINEMATH = /^\$([^\$]*)\$/g - RE_DISPLAYMATH = /^\$\$([^\$]*)\$\$/g - Discussion.processEachMathAndCode text, (s, type) -> - if type == 'display' - s.replace RE_DISPLAYMATH, ($0, $1) -> - "\\[" + $1 + "\\]" - else if type == 'inline' - s.replace RE_INLINEMATH, ($0, $1) -> - "\\(" + $1 + "\\)" - else - s - - makeWmdEditor: ($content, $local, cls_identifier) -> - elem = $local(".#{cls_identifier}") - id = $content.attr("_id") - appended_id = "-#{cls_identifier}-#{id}" - imageUploadUrl = Discussion.urlFor('upload') - editor = Markdown.makeWmdEditor elem, appended_id, imageUploadUrl, Discussion.postMathJaxProcessor - wmdEditors["#{cls_identifier}-#{id}"] = editor - editor - - getWmdEditor: ($content, $local, cls_identifier) -> - id = $content.attr("_id") - wmdEditors["#{cls_identifier}-#{id}"] - - getWmdInput: ($content, $local, cls_identifier) -> - id = $content.attr("_id") - $local("#wmd-input-#{cls_identifier}-#{id}") - - getWmdContent: ($content, $local, cls_identifier) -> - Discussion.getWmdInput($content, $local, cls_identifier).val() - - setWmdContent: ($content, $local, cls_identifier, text) -> - Discussion.getWmdInput($content, $local, cls_identifier).val(text) - Discussion.getWmdEditor($content, $local, cls_identifier).refreshPreview() - - getContentInfo: (id, attr) -> - if not window.$$annotated_content_info? - window.$$annotated_content_info = {} - (window.$$annotated_content_info[id] || {})[attr] - - setContentInfo: (id, attr, value) -> - if not window.$$annotated_content_info? - window.$$annotated_content_info = {} - window.$$annotated_content_info[id] ||= {} - window.$$annotated_content_info[id][attr] = value - - extendContentInfo: (id, newInfo) -> - if not window.$$annotated_content_info? - window.$$annotated_content_info = {} - window.$$annotated_content_info[id] = newInfo - bulkExtendContentInfo: (newInfos) -> - if not window.$$annotated_content_info? - window.$$annotated_content_info = {} - window.$$annotated_content_info = $.extend window.$$annotated_content_info, newInfos - - subscriptionLink: (type, id) -> - followLink = -> - Discussion.generateDiscussionLink("discussion-follow-#{type}", "Follow", handleFollow) - - unfollowLink = -> - Discussion.generateDiscussionLink("discussion-unfollow-#{type}", "Unfollow", handleUnfollow) - - handleFollow = (elem) -> - Discussion.safeAjax - $elem: $(elem) - url: Discussion.urlFor("follow_#{type}", id) - type: "POST" - success: (response, textStatus) -> - if textStatus == "success" - $(elem).replaceWith unfollowLink() - dataType: 'json' - - handleUnfollow = (elem) -> - Discussion.safeAjax - $elem: $(elem) - url: Discussion.urlFor("unfollow_#{type}", id) - type: "POST" - success: (response, textStatus) -> - if textStatus == "success" - $(elem).replaceWith followLink() - dataType: 'json' - - if Discussion.isSubscribed(id, type) - unfollowLink() - else - followLink() - - processEachMathAndCode: (text, processor) -> - - codeArchive = [] - - RE_DISPLAYMATH = /^([^\$]*?)\$\$([^\$]*?)\$\$(.*)$/m - RE_INLINEMATH = /^([^\$]*?)\$([^\$]+?)\$(.*)$/m - - ESCAPED_DOLLAR = '@@ESCAPED_D@@' - ESCAPED_BACKSLASH = '@@ESCAPED_B@@' - - processedText = "" - - $div = $("
    ").html(text) - - $div.find("code").each (index, code) -> - codeArchive.push $(code).html() - $(code).html(codeArchive.length - 1) - - text = $div.html() - text = text.replace /\\\$/g, ESCAPED_DOLLAR - - while true - if RE_INLINEMATH.test(text) - text = text.replace RE_INLINEMATH, ($0, $1, $2, $3) -> - processedText += $1 + processor("$" + $2 + "$", 'inline') - $3 - else if RE_DISPLAYMATH.test(text) - text = text.replace RE_DISPLAYMATH, ($0, $1, $2, $3) -> - processedText += $1 + processor("$$" + $2 + "$$", 'display') - $3 - else - processedText += text - break - - text = processedText - text = text.replace(new RegExp(ESCAPED_DOLLAR, 'g'), '\\$') - - text = text.replace /\\\\\\\\/g, ESCAPED_BACKSLASH - text = text.replace /\\begin\{([a-z]*\*?)\}([\s\S]*?)\\end\{\1\}/img, ($0, $1, $2) -> - processor("\\begin{#{$1}}" + $2 + "\\end{#{$1}}") - text = text.replace(new RegExp(ESCAPED_BACKSLASH, 'g'), '\\\\\\\\') - - $div = $("
    ").html(text) - cnt = 0 - $div.find("code").each (index, code) -> - $(code).html(processor(codeArchive[cnt], 'code')) - cnt += 1 - - text = $div.html() - - text diff --git a/lms/static/css/course.css b/lms/static/css/course.css deleted file mode 100644 index 16328fceb9..0000000000 --- a/lms/static/css/course.css +++ /dev/null @@ -1,3450 +0,0 @@ -@charset "UTF-8"; -/* HTML5 Boilerplate */ -article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { - display: block; } - -audio, canvas, video { - display: inline-block; - *display: inline; - *zoom: 1; } - -audio:not([controls]) { - display: none; } - -[hidden] { - display: none; } - -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; } - -html, button, input, select, textarea { - font-family: sans-serif; - color: #222; } - -body { - margin: 0; - font-size: 1em; - line-height: 1.4; } - -::-moz-selection { - background: #fe57a1; - color: #fff; - text-shadow: none; } - -::selection { - background: #fe57a1; - color: #fff; - text-shadow: none; } - -a { - color: #00e; } - -a:visited { - color: #551a8b; } - -a:hover { - color: #06e; } - -a:focus { - outline: thin dotted; } - -a:hover, a:active { - outline: 0; } - -abbr[title] { - border-bottom: 1px dotted; } - -b, strong { - font-weight: bold; } - -blockquote { - margin: 1em 40px; } - -dfn { - font-style: italic; } - -hr { - display: block; - height: 1px; - border: 0; - border-top: 1px solid #ccc; - margin: 1em 0; - padding: 0; } - -ins { - background: #ff9; - color: #000; - text-decoration: none; } - -mark { - background: #ff0; - color: #000; - font-style: italic; - font-weight: bold; } - -pre, code, kbd, samp { - font-family: monospace, serif; - _font-family: 'courier new', monospace; - font-size: 1em; } - -pre { - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; } - -q { - quotes: none; } - -q:before, q:after { - content: ""; - content: none; } - -small { - font-size: 85%; } - -sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -ul, ol { - margin: 1em 0; - padding: 0 0 0 40px; } - -dd { - margin: 0 0 0 40px; } - -nav ul, nav ol { - list-style: none; - list-style-image: none; - margin: 0; - padding: 0; } - -img { - border: 0; - -ms-interpolation-mode: bicubic; - vertical-align: middle; } - -svg:not(:root) { - overflow: hidden; } - -figure { - margin: 0; } - -form { - margin: 0; } - -fieldset { - border: 0; - margin: 0; - padding: 0; } - -label { - cursor: pointer; } - -legend { - border: 0; - *margin-left: -7px; - padding: 0; - white-space: normal; } - -button, input, select, textarea { - font-size: 100%; - margin: 0; - vertical-align: baseline; - *vertical-align: middle; } - -button, input { - line-height: normal; } - -button, input[type="button"], input[type="reset"], input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; - *overflow: visible; } - -button[disabled], input[disabled] { - cursor: default; } - -input[type="checkbox"], input[type="radio"] { - box-sizing: border-box; - padding: 0; - *width: 13px; - *height: 13px; } - -input[type="search"] { - -webkit-appearance: textfield; - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; - box-sizing: content-box; } - -input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; } - -button::-moz-focus-inner, input::-moz-focus-inner { - border: 0; - padding: 0; } - -textarea { - overflow: auto; - vertical-align: top; - resize: vertical; } - -input:invalid, textarea:invalid { - background-color: #f0dddd; } - -table { - border-collapse: collapse; - border-spacing: 0; } - -td { - vertical-align: top; } - -.chromeframe { - margin: 0.2em 0; - background: #ccc; - color: black; - padding: 0.2em 0; } - -.ir { - display: block; - border: 0; - text-indent: -999em; - overflow: hidden; - background-color: transparent; - background-repeat: no-repeat; - text-align: left; - direction: ltr; - *line-height: 0; } - -.ir br { - display: none; } - -.hidden { - display: none !important; - visibility: hidden; } - -.visuallyhidden { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; } - -.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { - clip: auto; - height: auto; - margin: 0; - overflow: visible; - position: static; - width: auto; } - -.invisible { - visibility: hidden; } - -.clearfix:before, .topbar:before, nav.sequence-nav:before, div.course-wrapper section.course-content .problem-set:before, div.course-wrapper section.course-content section.problems-wrapper:before, div.course-wrapper section.course-content div#seq_content:before, div.course-wrapper section.course-content ol.vert-mod > li:before, section.course-content nav.sequence-bottom ul:before, section.course-content div.video article.video-wrapper section.video-controls:before, section.course-content div.video article.video-wrapper section.video-controls div.slider:before, section.tool-wrapper:before, section.tool-wrapper div#controlls-container:before, section.tool-wrapper div#controlls-container div.graph-controls div.music-wrapper:before, section.tool-wrapper div#controlls-container div.graph-controls div.inputs-wrapper:before, section.tool-wrapper div#controlls-container div.schematic-sliders div.top-sliders:before, section.problem-set:before, section.problems-wrapper:before, .clearfix:after, .topbar:after, nav.sequence-nav:after, div.course-wrapper section.course-content .problem-set:after, div.course-wrapper section.course-content section.problems-wrapper:after, div.course-wrapper section.course-content div#seq_content:after, div.course-wrapper section.course-content ol.vert-mod > li:after, section.course-content nav.sequence-bottom ul:after, section.course-content div.video article.video-wrapper section.video-controls:after, section.course-content div.video article.video-wrapper section.video-controls div.slider:after, section.tool-wrapper:after, section.tool-wrapper div#controlls-container:after, section.tool-wrapper div#controlls-container div.graph-controls div.music-wrapper:after, section.tool-wrapper div#controlls-container div.graph-controls div.inputs-wrapper:after, section.tool-wrapper div#controlls-container div.schematic-sliders div.top-sliders:after, section.problem-set:after, section.problems-wrapper:after { - content: ""; - display: table; } - -.clearfix:after, .topbar:after, nav.sequence-nav:after, div.course-wrapper section.course-content .problem-set:after, div.course-wrapper section.course-content section.problems-wrapper:after, div.course-wrapper section.course-content div#seq_content:after, div.course-wrapper section.course-content ol.vert-mod > li:after, section.course-content nav.sequence-bottom ul:after, section.course-content div.video article.video-wrapper section.video-controls:after, section.course-content div.video article.video-wrapper section.video-controls div.slider:after, section.tool-wrapper:after, section.tool-wrapper div#controlls-container:after, section.tool-wrapper div#controlls-container div.graph-controls div.music-wrapper:after, section.tool-wrapper div#controlls-container div.graph-controls div.inputs-wrapper:after, section.tool-wrapper div#controlls-container div.schematic-sliders div.top-sliders:after, section.problem-set:after, section.problems-wrapper:after { - clear: both; } - -.clearfix, .topbar, nav.sequence-nav, div.course-wrapper section.course-content .problem-set, div.course-wrapper section.course-content section.problems-wrapper, div.course-wrapper section.course-content div#seq_content, div.course-wrapper section.course-content ol.vert-mod > li, section.course-content nav.sequence-bottom ul, section.course-content div.video article.video-wrapper section.video-controls, section.course-content div.video article.video-wrapper section.video-controls div.slider, section.tool-wrapper, section.tool-wrapper div#controlls-container, section.tool-wrapper div#controlls-container div.graph-controls div.music-wrapper, section.tool-wrapper div#controlls-container div.graph-controls div.inputs-wrapper, section.tool-wrapper div#controlls-container div.schematic-sliders div.top-sliders, section.problem-set, section.problems-wrapper { - *zoom: 1; } - -@media print { - * { - background: transparent !important; - color: black !important; - box-shadow: none !important; - text-shadow: none !important; - filter: none !important; - -ms-filter: none !important; } - - a, a:visited { - text-decoration: underline; } - - a[href]:after { - content: " (" attr(href) ")"; } - - abbr[title]:after { - content: " (" attr(title) ")"; } - - .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { - content: ""; } - - pre, blockquote { - border: 1px solid #999; - page-break-inside: avoid; } - - thead { - display: table-header-group; } - - tr, img { - page-break-inside: avoid; } - - img { - max-width: 100% !important; } - - @page { - margin: 0.5cm; } - - p, h2, h3 { - orphans: 3; - widows: 3; } - - h2, h3 { - page-break-after: avoid; } } -/* Generated by Font Squirrel (http://www.fontsquirrel.com) on January 25, 2012 05:06:34 PM America/New_York */ -@font-face { - font-family: 'Open Sans'; - src: url("../fonts/OpenSans-Light-webfont.eot"); - src: url("../fonts/OpenSans-Light-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-Light-webfont.woff") format("woff"), url("../fonts/OpenSans-Light-webfont.ttf") format("truetype"), url("../fonts/OpenSans-Light-webfont.svg#OpenSansLight") format("svg"); - font-weight: 300; - font-style: normal; } - -@font-face { - font-family: 'Open Sans'; - src: url("../fonts/OpenSans-LightItalic-webfont.eot"); - src: url("../fonts/OpenSans-LightItalic-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-LightItalic-webfont.woff") format("woff"), url("../fonts/OpenSans-LightItalic-webfont.ttf") format("truetype"), url("../fonts/OpenSans-LightItalic-webfont.svg#OpenSansLightItalic") format("svg"); - font-weight: 300; - font-style: italic; } - -@font-face { - font-family: 'Open Sans'; - src: url("../fonts/OpenSans-Regular-webfont.eot"); - src: url("../fonts/OpenSans-Regular-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-Regular-webfont.woff") format("woff"), url("../fonts/OpenSans-Regular-webfont.ttf") format("truetype"), url("../fonts/OpenSans-Regular-webfont.svg#OpenSansRegular") format("svg"); - font-weight: 400; - font-style: normal; } - -@font-face { - font-family: 'Open Sans'; - src: url("../fonts/OpenSans-Italic-webfont.eot"); - src: url("../fonts/OpenSans-Italic-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-Italic-webfont.woff") format("woff"), url("../fonts/OpenSans-Italic-webfont.ttf") format("truetype"), url("../fonts/OpenSans-Italic-webfont.svg#OpenSansItalic") format("svg"); - font-weight: 400; - font-style: italic; } - -@font-face { - font-family: 'Open Sans'; - src: url("../fonts/OpenSans-Bold-webfont.eot"); - src: url("../fonts/OpenSans-Bold-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-Bold-webfont.woff") format("woff"), url("../fonts/OpenSans-Bold-webfont.ttf") format("truetype"), url("../fonts/OpenSans-Bold-webfont.svg#OpenSansBold") format("svg"); - font-weight: 700; - font-style: normal; } - -@font-face { - font-family: 'Open Sans'; - src: url("../fonts/OpenSans-BoldItalic-webfont.eot"); - src: url("../fonts/OpenSans-BoldItalic-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-BoldItalic-webfont.woff") format("woff"), url("../fonts/OpenSans-BoldItalic-webfont.ttf") format("truetype"), url("../fonts/OpenSans-BoldItalic-webfont.svg#OpenSansBoldItalic") format("svg"); - font-weight: 700; - font-style: italic; } - -@font-face { - font-family: 'Open Sans'; - src: url("../fonts/OpenSans-ExtraBold-webfont.eot"); - src: url("../fonts/OpenSans-ExtraBold-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-ExtraBold-webfont.woff") format("woff"), url("../fonts/OpenSans-ExtraBold-webfont.ttf") format("truetype"), url("../fonts/OpenSans-ExtraBold-webfont.svg#OpenSansExtrabold") format("svg"); - font-weight: 800; - font-style: normal; } - -@font-face { - font-family: 'Open Sans'; - src: url("../fonts/OpenSans-ExtraBoldItalic-webfont.eot"); - src: url("../fonts/OpenSans-ExtraBoldItalic-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-ExtraBoldItalic-webfont.woff") format("woff"), url("../fonts/OpenSans-ExtraBoldItalic-webfont.ttf") format("truetype"), url("../fonts/OpenSans-ExtraBoldItalic-webfont.svg#OpenSansExtraboldItalic") format("svg"); - font-weight: 800; - font-style: italic; } - -html, body { - background: #fafafa; - font-family: "Open Sans", Verdana, Geneva, sans-serif; - font-size: 1em; - line-height: 1em; } - -h1, h2, h3, h4, h5, h6 { - color: #3c3c3c; - font: normal 1.2em/1.2em Georgia, Cambria, "Times New Roman", Times, serif; - margin: 0px; } - -h1 { - color: #3c3c3c; - font: normal 2em/1.4em "Open Sans", Verdana, Geneva, sans-serif; - letter-spacing: 1px; - margin-bottom: 30px; - text-align: center; } - -h2 { - color: #a0a0a0; - font: normal 1.2em/1.2em Georgia, Cambria, "Times New Roman", Times, serif; - letter-spacing: 1px; - margin-bottom: 15px; - text-transform: uppercase; - -webkit-font-smoothing: antialiased; } - -p + h2, ul + h2, ol + h2 { - margin-top: 40px; } - -p { - color: #3c3c3c; - font: normal 1em/1.6em Georgia, Cambria, "Times New Roman", Times, serif; - margin: 0px; } - -span { - font: normal 1em/1.6em "Open Sans", Verdana, Geneva, sans-serif; } - -p + p, ul + p, ol + p { - margin-top: 20px; } - -p a:link, p a:visited { - color: #1d9dd9; - font: normal 1em/1em Georgia, Cambria, "Times New Roman", Times, serif; - text-decoration: none; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.1s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.1s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.1s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.1s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.1s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(linear, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(linear, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(linear, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(linear, false, false, false, false, false, false, false, false); - transition-timing-function: compact(linear, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); } - p a:link:hover, p a:visited:hover { - color: #1d9dd9; - text-decoration: underline; } - -a:link, a:visited { - color: #1d9dd9; - font: normal 1em/1em "Open Sans", Verdana, Geneva, sans-serif; - text-decoration: none; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.1s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.1s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.1s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.1s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.1s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(linear, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(linear, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(linear, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(linear, false, false, false, false, false, false, false, false); - transition-timing-function: compact(linear, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); } - a:link:hover, a:visited:hover { - text-decoration: underline; } - -.content-wrapper { - background: white; - margin: 0 auto 0; - width: 100%; } - -.container { - zoom: 1; - margin: 0 auto 0; - padding: 0px 30px; - max-width: 1180px; - min-width: 760px; } - .container:before, .container:after { - content: ""; - display: table; } - .container:after { - clear: both; } - -span.edx { - text-transform: none; - font: inherit; } - -.static-container { - zoom: 1; - margin: 0 auto 0; - max-width: 1200px; - padding: 60px 0px 120px; - width: 100%; } - .static-container:before, .static-container:after { - content: ""; - display: table; } - .static-container:after { - clear: both; } - .static-container .inner-wrapper { - margin: 0 auto 0; - width: 83.051%; } - .static-container ol, .static-container ul { - list-style: disc; } - .static-container ol li, .static-container ul li { - color: #3c3c3c; - font: normal 1em/1.4em Georgia, Cambria, "Times New Roman", Times, serif; - margin: 0px; } - .static-container h1 { - margin-bottom: 30px; } - .static-container h1 + hr { - margin-bottom: 60px; } - .static-container p + h2, .static-container ul + h2, .static-container ol + h2 { - margin-top: 40px; } - .static-container ul + p, .static-container ol + p { - margin-top: 20px; } - -.faded-hr-divider, .horizontal-divider { - background-image: compact(linear, compact(180deg, rgba(200, 200, 200, 0) 0%, #c8c8c8 50%, rgba(200, 200, 200, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, rgba(200, 200, 200, 0) 0%, #c8c8c8 50%, rgba(200, 200, 200, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, rgba(200, 200, 200, 0) 0%, #c8c8c8 50%, rgba(200, 200, 200, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, rgba(200, 200, 200, 0) 0%, #c8c8c8 50%, rgba(200, 200, 200, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, rgba(200, 200, 200, 0) 0%, #c8c8c8 50%, rgba(200, 200, 200, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - height: 1px; - width: 100%; } - -.faded-hr-divider-medium { - background-image: compact(linear, compact(180deg, rgba(240, 240, 240, 0) 0%, #f0f0f0 50%, rgba(240, 240, 240, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, rgba(240, 240, 240, 0) 0%, #f0f0f0 50%, rgba(240, 240, 240, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, rgba(240, 240, 240, 0) 0%, #f0f0f0 50%, rgba(240, 240, 240, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, rgba(240, 240, 240, 0) 0%, #f0f0f0 50%, rgba(240, 240, 240, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, rgba(240, 240, 240, 0) 0%, #f0f0f0 50%, rgba(240, 240, 240, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - height: 1px; - width: 100%; } - -.faded-hr-divider-light, .horizontal-divider::after { - background-image: compact(linear, compact(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 50%, rgba(255, 255, 255, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 50%, rgba(255, 255, 255, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 50%, rgba(255, 255, 255, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 50%, rgba(255, 255, 255, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 50%, rgba(255, 255, 255, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - height: 1px; - width: 100%; } - -.faded-vertical-divider, .vertical-divider { - background-image: compact(linear, compact(90deg, rgba(200, 200, 200, 0) 0%, #c8c8c8 50%, rgba(200, 200, 200, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(90deg, rgba(200, 200, 200, 0) 0%, #c8c8c8 50%, rgba(200, 200, 200, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(90deg, rgba(200, 200, 200, 0) 0%, #c8c8c8 50%, rgba(200, 200, 200, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(90deg, rgba(200, 200, 200, 0) 0%, #c8c8c8 50%, rgba(200, 200, 200, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(90deg, rgba(200, 200, 200, 0) 0%, #c8c8c8 50%, rgba(200, 200, 200, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - height: 100%; - width: 1px; } - -.faded-vertical-divider-light, .vertical-divider::after { - background-image: compact(linear, compact(90deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.6) 50%, rgba(255, 255, 255, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(90deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.6) 50%, rgba(255, 255, 255, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(90deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.6) 50%, rgba(255, 255, 255, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(90deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.6) 50%, rgba(255, 255, 255, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(90deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.6) 50%, rgba(255, 255, 255, 0), false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - height: 100%; - width: 1px; } - -.vertical-divider { - position: relative; } - .vertical-divider::after { - content: ""; - display: block; - position: absolute; - left: 1px; } - -.horizontal-divider { - border: none; - position: relative; } - .horizontal-divider::after { - content: ""; - display: block; - position: absolute; - top: 1px; } - -.fade-right-hr-divider { - background-image: compact(linear, compact(180deg, rgba(200, 200, 200, 0) 0%, #c8c8c8, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, rgba(200, 200, 200, 0) 0%, #c8c8c8, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, rgba(200, 200, 200, 0) 0%, #c8c8c8, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, rgba(200, 200, 200, 0) 0%, #c8c8c8, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, rgba(200, 200, 200, 0) 0%, #c8c8c8, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - border: none; } - -.fade-left-hr-divider { - background-image: compact(linear, compact(180deg, #c8c8c8 0%, rgba(200, 200, 200, 0), false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, #c8c8c8 0%, rgba(200, 200, 200, 0), false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, #c8c8c8 0%, rgba(200, 200, 200, 0), false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, #c8c8c8 0%, rgba(200, 200, 200, 0), false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(180deg, #c8c8c8 0%, rgba(200, 200, 200, 0), false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - border: none; } - -.error-message-colors { - background: #fd5757; - border: 1px solid #ca1111; - color: #8f0e0e; } - -.success-message-colors { - background: #139f3a; - border: 1px solid #064112; - color: white; } - -.animation-home-header-pop-up { - -webkit-animation: compact(home-header-pop-up 1.15s ease-in-out, false, false, false, false, false, false, false, false); - -moz-animation: compact(home-header-pop-up 1.15s ease-in-out, false, false, false, false, false, false, false, false); - animation: compact(home-header-pop-up 1.15s ease-in-out, false, false, false, false, false, false, false, false); - -webkit-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -moz-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -webkit-animation-delay: compact(1s, false, false, false, false, false, false, false, false); - -moz-animation-delay: compact(1s, false, false, false, false, false, false, false, false); - animation-delay: compact(1s, false, false, false, false, false, false, false, false); } - -@-webkit-keyframes home-header-pop-up { - 0% { - opacity: 0; - top: 300px; } - - 45% { - opacity: 1; } - - 65% { - top: -40px; } - - 85% { - top: 10px; } - - 100% { - top: 0px; } } - -@-moz-keyframes home-header-pop-up { - 0% { - opacity: 0; - top: 300px; } - - 45% { - opacity: 1; } - - 65% { - top: -40px; } - - 85% { - top: 10px; } - - 100% { - top: 0px; } } - -@keyframes home-header-pop-up { - 0% { - opacity: 0; - top: 300px; } - - 45% { - opacity: 1; } - - 65% { - top: -40px; } - - 85% { - top: 10px; } - - 100% { - top: 0px; } } - -.animation-title-appear { - -webkit-animation: compact(title-appear 4.65s ease-out, false, false, false, false, false, false, false, false); - -moz-animation: compact(title-appear 4.65s ease-out, false, false, false, false, false, false, false, false); - animation: compact(title-appear 4.65s ease-out, false, false, false, false, false, false, false, false); - -webkit-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -moz-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -webkit-animation-delay: compact(1s, false, false, false, false, false, false, false, false); - -moz-animation-delay: compact(1s, false, false, false, false, false, false, false, false); - animation-delay: compact(1s, false, false, false, false, false, false, false, false); } - -@-webkit-keyframes title-appear { - 0% { - opacity: 0; - top: 60px; - -webkit-transform: scale(0.9); - -moz-transform: scale(0.9); - -ms-transform: scale(0.9); - -o-transform: scale(0.9); - transform: scale(0.9); } - - 20% { - opacity: 1; } - - 27% { - top: 40px; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - 90% { - opacity: 1; - top: 40px; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - 100% { - top: 0px; } } - -@-moz-keyframes title-appear { - 0% { - opacity: 0; - top: 60px; - -webkit-transform: scale(0.9); - -moz-transform: scale(0.9); - -ms-transform: scale(0.9); - -o-transform: scale(0.9); - transform: scale(0.9); } - - 20% { - opacity: 1; } - - 27% { - top: 40px; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - 90% { - opacity: 1; - top: 40px; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - 100% { - top: 0px; } } - -@keyframes title-appear { - 0% { - opacity: 0; - top: 60px; - -webkit-transform: scale(0.9); - -moz-transform: scale(0.9); - -ms-transform: scale(0.9); - -o-transform: scale(0.9); - transform: scale(0.9); } - - 20% { - opacity: 1; } - - 27% { - top: 40px; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - 90% { - opacity: 1; - top: 40px; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - 100% { - top: 0px; } } - -.animation-home-appear { - -webkit-animation: compact(home-appear 4.25s ease-out, false, false, false, false, false, false, false, false); - -moz-animation: compact(home-appear 4.25s ease-out, false, false, false, false, false, false, false, false); - animation: compact(home-appear 4.25s ease-out, false, false, false, false, false, false, false, false); - -webkit-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -moz-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -webkit-animation-delay: compact(1s, false, false, false, false, false, false, false, false); - -moz-animation-delay: compact(1s, false, false, false, false, false, false, false, false); - animation-delay: compact(1s, false, false, false, false, false, false, false, false); } - -@-webkit-keyframes home-appear { - 0% { - opacity: 0; - top: 60px; - -webkit-transform: scale(0.9); - -moz-transform: scale(0.9); - -ms-transform: scale(0.9); - -o-transform: scale(0.9); - transform: scale(0.9); } - - 20% { - opacity: 1; } - - 30% { - top: 40px; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - 80% { - opacity: 1; - top: 40px; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - 100% { - opacity: 0; - top: 60px; - -webkit-transform: scale(0.7); - -moz-transform: scale(0.7); - -ms-transform: scale(0.7); - -o-transform: scale(0.7); - transform: scale(0.7); } } - -@-moz-keyframes home-appear { - 0% { - opacity: 0; - top: 60px; - -webkit-transform: scale(0.9); - -moz-transform: scale(0.9); - -ms-transform: scale(0.9); - -o-transform: scale(0.9); - transform: scale(0.9); } - - 20% { - opacity: 1; } - - 30% { - top: 40px; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - 80% { - opacity: 1; - top: 40px; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - 100% { - opacity: 0; - top: 60px; - -webkit-transform: scale(0.7); - -moz-transform: scale(0.7); - -ms-transform: scale(0.7); - -o-transform: scale(0.7); - transform: scale(0.7); } } - -@keyframes home-appear { - 0% { - opacity: 0; - top: 60px; - -webkit-transform: scale(0.9); - -moz-transform: scale(0.9); - -ms-transform: scale(0.9); - -o-transform: scale(0.9); - transform: scale(0.9); } - - 20% { - opacity: 1; } - - 30% { - top: 40px; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - 80% { - opacity: 1; - top: 40px; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - 100% { - opacity: 0; - top: 60px; - -webkit-transform: scale(0.7); - -moz-transform: scale(0.7); - -ms-transform: scale(0.7); - -o-transform: scale(0.7); - transform: scale(0.7); } } - -.animation-edx-appear { - -webkit-animation: compact(edx-appear 1.25s ease-in, false, false, false, false, false, false, false, false); - -moz-animation: compact(edx-appear 1.25s ease-in, false, false, false, false, false, false, false, false); - animation: compact(edx-appear 1.25s ease-in, false, false, false, false, false, false, false, false); - -webkit-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -moz-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -webkit-animation-delay: compact(2.15s, false, false, false, false, false, false, false, false); - -moz-animation-delay: compact(2.15s, false, false, false, false, false, false, false, false); - animation-delay: compact(2.15s, false, false, false, false, false, false, false, false); } - -@-webkit-keyframes edx-appear { - 0% { - opacity: 0; } - - 100% { - opacity: 1; } } - -@-moz-keyframes edx-appear { - 0% { - opacity: 0; } - - 100% { - opacity: 1; } } - -@keyframes edx-appear { - 0% { - opacity: 0; } - - 100% { - opacity: 1; } } - -.animation-mit-slide { - -webkit-animation: compact(mit-slide 1.15s ease-out, false, false, false, false, false, false, false, false); - -moz-animation: compact(mit-slide 1.15s ease-out, false, false, false, false, false, false, false, false); - animation: compact(mit-slide 1.15s ease-out, false, false, false, false, false, false, false, false); - -webkit-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -moz-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -webkit-animation-delay: compact(2s, false, false, false, false, false, false, false, false); - -moz-animation-delay: compact(2s, false, false, false, false, false, false, false, false); - animation-delay: compact(2s, false, false, false, false, false, false, false, false); } - -@-webkit-keyframes mit-slide { - 0% { - left: 80px; } - - 100% { - left: 0px; } } - -@-moz-keyframes mit-slide { - 0% { - left: 80px; } - - 100% { - left: 0px; } } - -@keyframes mit-slide { - 0% { - left: 80px; } - - 100% { - left: 0px; } } - -.animation-harvard-slide { - -webkit-animation: compact(harvard-slide 1.15s ease-out, false, false, false, false, false, false, false, false); - -moz-animation: compact(harvard-slide 1.15s ease-out, false, false, false, false, false, false, false, false); - animation: compact(harvard-slide 1.15s ease-out, false, false, false, false, false, false, false, false); - -webkit-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -moz-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -webkit-animation-delay: compact(2s, false, false, false, false, false, false, false, false); - -moz-animation-delay: compact(2s, false, false, false, false, false, false, false, false); - animation-delay: compact(2s, false, false, false, false, false, false, false, false); } - -@-webkit-keyframes harvard-slide { - 0% { - right: 80px; } - - 100% { - right: 0px; } } - -@-moz-keyframes harvard-slide { - 0% { - right: 80px; } - - 100% { - right: 0px; } } - -@keyframes harvard-slide { - 0% { - right: 80px; } - - 100% { - right: 0px; } } - -.animation-divider-left-slide { - -webkit-animation: compact(divider-left-slide 1.1s ease-out, false, false, false, false, false, false, false, false); - -moz-animation: compact(divider-left-slide 1.1s ease-out, false, false, false, false, false, false, false, false); - animation: compact(divider-left-slide 1.1s ease-out, false, false, false, false, false, false, false, false); - -webkit-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -moz-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -webkit-animation-delay: compact(2s, false, false, false, false, false, false, false, false); - -moz-animation-delay: compact(2s, false, false, false, false, false, false, false, false); - animation-delay: compact(2s, false, false, false, false, false, false, false, false); } - -@-webkit-keyframes divider-left-slide { - 0% { - left: 340px; } - - 100% { - left: 200px; } } - -@-moz-keyframes divider-left-slide { - 0% { - left: 340px; } - - 100% { - left: 200px; } } - -@keyframes divider-left-slide { - 0% { - left: 340px; } - - 100% { - left: 200px; } } - -.animation-divider-right-slide { - -webkit-animation: compact(divider-right-slide 1.1s ease-out, false, false, false, false, false, false, false, false); - -moz-animation: compact(divider-right-slide 1.1s ease-out, false, false, false, false, false, false, false, false); - animation: compact(divider-right-slide 1.1s ease-out, false, false, false, false, false, false, false, false); - -webkit-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -moz-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -webkit-animation-delay: compact(2s, false, false, false, false, false, false, false, false); - -moz-animation-delay: compact(2s, false, false, false, false, false, false, false, false); - animation-delay: compact(2s, false, false, false, false, false, false, false, false); } - -@-webkit-keyframes divider-right-slide { - 0% { - left: 340px; } - - 100% { - left: 480px; } } - -@-moz-keyframes divider-right-slide { - 0% { - left: 340px; } - - 100% { - left: 480px; } } - -@keyframes divider-right-slide { - 0% { - left: 340px; } - - 100% { - left: 480px; } } - -.animation-video-appear { - -webkit-animation: compact(video-appear 1.25s ease-out, false, false, false, false, false, false, false, false); - -moz-animation: compact(video-appear 1.25s ease-out, false, false, false, false, false, false, false, false); - animation: compact(video-appear 1.25s ease-out, false, false, false, false, false, false, false, false); - -webkit-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -moz-animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - animation-fill-mode: compact(both, false, false, false, false, false, false, false, false); - -webkit-animation-delay: compact(4.4s, false, false, false, false, false, false, false, false); - -moz-animation-delay: compact(4.4s, false, false, false, false, false, false, false, false); - animation-delay: compact(4.4s, false, false, false, false, false, false, false, false); } - -@-webkit-keyframes video-appear { - 0% { - bottom: -270px; - opacity: 0.9; } - - 80% { - opacity: 1; } - - 100% { - bottom: 0px; } } - -@-moz-keyframes video-appear { - 0% { - bottom: -270px; - opacity: 0.9; } - - 80% { - opacity: 1; } - - 100% { - bottom: 0px; } } - -@keyframes video-appear { - 0% { - bottom: -270px; - opacity: 0.9; } - - 80% { - opacity: 1; } - - 100% { - bottom: 0px; } } - -nav.course-material { - background: #d2d2d2; - zoom: 1; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-box-shadow: compact(inset 0 1px 5px 0 rgba(0, 0, 0, 0.05), false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 5px 0 rgba(0, 0, 0, 0.05), false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 5px 0 rgba(0, 0, 0, 0.05), false, false, false, false, false, false, false, false); - border-bottom: 1px solid #bebebe; - margin: 0px auto 0px; - padding: 0px; - width: 100%; } - nav.course-material:before, nav.course-material:after { - content: ""; - display: table; } - nav.course-material:after { - clear: both; } - nav.course-material .inner-wrapper { - margin: 0 auto; - max-width: 1200px; - width: 100%; } - nav.course-material ol.course-tabs { - -webkit-border-top-left-radius: 4px; - -moz-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - -ms-border-top-left-radius: 4px; - -o-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - -moz-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - -ms-border-top-right-radius: 4px; - -o-border-top-right-radius: 4px; - border-top-right-radius: 4px; - zoom: 1; - padding: 10px 0 0 0; } - nav.course-material ol.course-tabs:before, nav.course-material ol.course-tabs:after { - content: ""; - display: table; } - nav.course-material ol.course-tabs:after { - clear: both; } - nav.course-material ol.course-tabs li { - float: left; - list-style: none; } - nav.course-material ol.course-tabs li a { - color: #a0a0a0; - display: block; - text-align: center; - padding: 5px 13px; - text-decoration: none; - text-shadow: 0 1px rgba(255, 255, 255, 0.4); } - nav.course-material ol.course-tabs li a:hover { - color: #3c3c3c; } - nav.course-material ol.course-tabs li a.active, nav.course-material nav.sequence-nav ol.course-tabs li a.seq_video_active, nav.sequence-nav nav.course-material ol.course-tabs li a.seq_video_active, nav.course-material nav.sequence-nav ol.course-tabs li a.seq_other_active, nav.sequence-nav nav.course-material ol.course-tabs li a.seq_other_active, nav.course-material nav.sequence-nav ol.course-tabs li a.seq_vertical_active, nav.sequence-nav nav.course-material ol.course-tabs li a.seq_vertical_active, nav.course-material nav.sequence-nav ol.course-tabs li a.seq_problem_active, nav.sequence-nav nav.course-material ol.course-tabs li a.seq_problem_active { - background: white; - border: 1px solid #c8c8c8; - border-bottom: 0px; - -webkit-border-top-left-radius: 4px; - -moz-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - -ms-border-top-left-radius: 4px; - -o-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - -moz-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - -ms-border-top-right-radius: 4px; - -o-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-box-shadow: compact(0 2px 0 0 white, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(0 2px 0 0 white, false, false, false, false, false, false, false, false); - box-shadow: compact(0 2px 0 0 white, false, false, false, false, false, false, false, false); - color: #3c3c3c; } - -.course-content { - margin-top: 30px; } - .course-content .courseware { - background: #f0f0f0; - height: 600px; } - -.clearfix:after, .topbar:after, nav.sequence-nav:after, div.course-wrapper section.course-content .problem-set:after, div.course-wrapper section.course-content section.problems-wrapper:after, div.course-wrapper section.course-content div#seq_content:after, div.course-wrapper section.course-content ol.vert-mod > li:after, section.course-content nav.sequence-bottom ul:after, section.course-content div.video article.video-wrapper section.video-controls:after, section.course-content div.video article.video-wrapper section.video-controls div.slider:after, section.tool-wrapper:after, section.tool-wrapper div#controlls-container:after, section.tool-wrapper div#controlls-container div.graph-controls div.music-wrapper:after, section.tool-wrapper div#controlls-container div.graph-controls div.inputs-wrapper:after, section.tool-wrapper div#controlls-container div.schematic-sliders div.top-sliders:after, section.problem-set:after, section.problems-wrapper:after { - clear: both; - content: "."; - display: block; - height: 0; - visibility: hidden; } - -.wrapper { - margin: 0 auto; - max-width: 1400px; - min-width: 810px; - text-align: left; - width: 100%; } - .wrapper div.table-wrapper, .wrapper div.course-wrapper { - display: table; - width: 100%; - overflow: hidden; } - @media screen and (min-width: 1400px) { - .wrapper div.table-wrapper, .wrapper div.course-wrapper { - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; } } - -h1.top-header, div.course-wrapper section.course-content ol.vert-mod > li header { - background: #f3f3f3; - border-bottom: 1px solid #e3e3e3; - margin: -lh() -lh() lh(); - padding: lh(); } - -.button { - border: 1px solid #6f6f6f; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: compact(inset 0 1px 0 #a2a2a2, 0 0 3px #cccccc, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 #a2a2a2, 0 0 3px #cccccc, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 #a2a2a2, 0 0 3px #cccccc, false, false, false, false, false, false, false); - color: #fff; - cursor: pointer; - font: bold 14px "Open Sans", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; - background-color: #959595; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(100%, compact(#959595, #7b7b7b, false, false, false, false, false, false, false, false))); - background-image: -webkit-linear-gradient(top, compact(#959595, #7b7b7b, false, false, false, false, false, false, false, false)); - background-image: -moz-linear-gradient(top, compact(#959595, #7b7b7b, false, false, false, false, false, false, false, false)); - background-image: -ms-linear-gradient(top, compact(#959595, #7b7b7b, false, false, false, false, false, false, false, false)); - background-image: -o-linear-gradient(top, compact(#959595, #7b7b7b, false, false, false, false, false, false, false, false)); - background-image: linear-gradient(top, compact(#959595, #7b7b7b, false, false, false, false, false, false, false, false)); - padding: 4px 8px; - text-decoration: none; - text-shadow: none; - -webkit-font-smoothing: antialiased; } - .button:hover, .button:focus { - border: 1px solid #555555; - -webkit-box-shadow: compact(inset 0 1px 0 #bbbbbb, 0 0 3px #cccccc, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 #bbbbbb, 0 0 3px #cccccc, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 #bbbbbb, 0 0 3px #cccccc, false, false, false, false, false, false, false); - background-color: #a2a2a2; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(100%, compact(#a2a2a2, #7b7b7b, false, false, false, false, false, false, false, false))); - background-image: -webkit-linear-gradient(top, compact(#a2a2a2, #7b7b7b, false, false, false, false, false, false, false, false)); - background-image: -moz-linear-gradient(top, compact(#a2a2a2, #7b7b7b, false, false, false, false, false, false, false, false)); - background-image: -ms-linear-gradient(top, compact(#a2a2a2, #7b7b7b, false, false, false, false, false, false, false, false)); - background-image: -o-linear-gradient(top, compact(#a2a2a2, #7b7b7b, false, false, false, false, false, false, false, false)); - background-image: linear-gradient(top, compact(#a2a2a2, #7b7b7b, false, false, false, false, false, false, false, false)); } - -.light-button, a.light-button { - border: 1px solid #ccc; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: compact(inset 0 1px 0 white, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 white, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 white, false, false, false, false, false, false, false, false); - color: #666; - cursor: pointer; - font: normal 14px "Open Sans", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; - background-color: white; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(100%, compact(white, #eeeeee, false, false, false, false, false, false, false, false))); - background-image: -webkit-linear-gradient(top, compact(white, #eeeeee, false, false, false, false, false, false, false, false)); - background-image: -moz-linear-gradient(top, compact(white, #eeeeee, false, false, false, false, false, false, false, false)); - background-image: -ms-linear-gradient(top, compact(white, #eeeeee, false, false, false, false, false, false, false, false)); - background-image: -o-linear-gradient(top, compact(white, #eeeeee, false, false, false, false, false, false, false, false)); - background-image: linear-gradient(top, compact(white, #eeeeee, false, false, false, false, false, false, false, false)); - padding: 4px 8px; - text-decoration: none; - -webkit-font-smoothing: antialiased; } - .light-button:hover, .light-button:focus, a.light-button:hover, a.light-button:focus { - border: 1px solid #ccc; - background-color: white; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(100%, compact(white, #e6e6e6, false, false, false, false, false, false, false, false))); - background-image: -webkit-linear-gradient(top, compact(white, #e6e6e6, false, false, false, false, false, false, false, false)); - background-image: -moz-linear-gradient(top, compact(white, #e6e6e6, false, false, false, false, false, false, false, false)); - background-image: -ms-linear-gradient(top, compact(white, #e6e6e6, false, false, false, false, false, false, false, false)); - background-image: -o-linear-gradient(top, compact(white, #e6e6e6, false, false, false, false, false, false, false, false)); - background-image: linear-gradient(top, compact(white, #e6e6e6, false, false, false, false, false, false, false, false)); - text-decoration: none; } - -.action-link a { - color: #993333; } - .action-link a:hover { - color: #4d1919; - text-decoration: none; } - -.content, div.course-wrapper section.course-content { - -webkit-box-shadow: compact(inset 0 0 2px 3px #f3f3f3, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 0 2px 3px #f3f3f3, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 0 2px 3px #f3f3f3, false, false, false, false, false, false, false, false); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - display: table-cell; - padding: lh(); - vertical-align: top; - width: 76.518%; - overflow: hidden; } - @media print { - .content, div.course-wrapper section.course-content { - -webkit-box-shadow: compact(none, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(none, false, false, false, false, false, false, false, false); - box-shadow: compact(none, false, false, false, false, false, false, false, false); } } - -.sidebar, section.course-index { - background: #e3e3e3; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - -ms-border-radius: 4px 0 0 4px; - -o-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; - border-right: 1px solid #d3d3d3; - -webkit-box-shadow: compact(inset 0 0 0 1px #f6f6f6, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 0 0 1px #f6f6f6, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 0 0 1px #f6f6f6, false, false, false, false, false, false, false, false); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - display: table-cell; - font-family: "Open Sans", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; - position: relative; - text-shadow: 0 1px 0 #f1f1f1; - vertical-align: top; - width: 23.482%; } - .sidebar h1, section.course-index h1, .sidebar h2, section.course-index h2 { - font-size: 18px; - font-weight: bold; - letter-spacing: 0; - text-transform: none; } - .sidebar a, section.course-index a { - border: none; - font-style: normal; } - .sidebar .bottom-border, section.course-index .bottom-border { - border-bottom: 1px solid #d3d3d3; - -webkit-box-shadow: compact(0 1px 0 #eeeeee, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(0 1px 0 #eeeeee, false, false, false, false, false, false, false, false); - box-shadow: compact(0 1px 0 #eeeeee, false, false, false, false, false, false, false, false); } - @media print { - .sidebar, section.course-index { - display: none; } } - .sidebar h3, section.course-index h3 { - background: none; - border: none; - color: #000; - font-weight: normal; - margin: 0; - overflow: hidden; } - .sidebar h3 a, section.course-index h3 a { - color: #4d4d4d; - display: block; - font-size: 14px; - padding: 7px 7px 7px 30px; - text-decoration: none; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); } - .sidebar h3 span.ui-icon, section.course-index h3 span.ui-icon { - background-image: url(../images/ui-icons_454545_256x240.png); } - .sidebar h3.active, section.course-index h3.active, .sidebar section.course-index div#accordion h3.ui-accordion-header.ui-state-active, section.course-index div#accordion .sidebar h3.ui-accordion-header.ui-state-active, section.course-index div#accordion h3.ui-accordion-header.ui-state-active { - background: none; - background-image: compact(linear, compact(-90deg, #f5f5f5, #e1e1e1, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, #f5f5f5, #e1e1e1, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, #f5f5f5, #e1e1e1, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, #f5f5f5, #e1e1e1, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, #f5f5f5, #e1e1e1, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - border-bottom: 1px solid #d3d3d3; - -webkit-box-shadow: compact(inset 0 1px 0 0 #eeeeee, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 0 #eeeeee, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 0 #eeeeee, false, false, false, false, false, false, false, false); - color: #000; - font-weight: bold; } - .sidebar h3.active a, section.course-index h3.active a, .sidebar section.course-index div#accordion h3.ui-accordion-header.ui-state-active a, section.course-index div#accordion .sidebar h3.ui-accordion-header.ui-state-active a, section.course-index div#accordion h3.ui-accordion-header.ui-state-active a { - color: #000; } - .sidebar header#open_close_accordion, section.course-index header#open_close_accordion { - border-bottom: 1px solid #d3d3d3; - -webkit-box-shadow: compact(0 1px 0 #eeeeee, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(0 1px 0 #eeeeee, false, false, false, false, false, false, false, false); - box-shadow: compact(0 1px 0 #eeeeee, false, false, false, false, false, false, false, false); - padding: lh(0.5) lh(); - position: relative; } - .sidebar header#open_close_accordion h2, section.course-index header#open_close_accordion h2 { - margin: 0; - padding-right: 20px; } - .sidebar header#open_close_accordion a, section.course-index header#open_close_accordion a { - background: #eeeeee url("../images/slide-left-icon.png") center center no-repeat; - border: 1px solid #D3D3D3; - -webkit-border-radius: 3px 0 0 3px; - -moz-border-radius: 3px 0 0 3px; - -ms-border-radius: 3px 0 0 3px; - -o-border-radius: 3px 0 0 3px; - border-radius: 3px 0 0 3px; - height: 16px; - padding: 8px; - position: absolute; - right: -1px; - text-indent: -9999px; - top: 6px; - width: 16px; } - .sidebar header#open_close_accordion a:hover, section.course-index header#open_close_accordion a:hover { - background-color: white; } - .sidebar a.button, section.course-index a.button { - text-decoration: none; } - -.topbar, nav.sequence-nav { - background: #f6efd4; - border-bottom: 1px solid #eddfaa; - border-top: 1px solid #fff; - font-size: 12px; - line-height: 46px; - text-shadow: 0 1px 0 #fff; } - @media print { - .topbar, nav.sequence-nav { - display: none; } } - .topbar a, nav.sequence-nav a { - line-height: 46px; - border-bottom: 0; - color: #292309; } - .topbar a:hover, nav.sequence-nav a:hover { - color: #7e691a; - text-decoration: none; } - .topbar a.block-link, nav.sequence-nav a.block-link, .topbar nav.sequence-nav ol a, nav.sequence-nav ol .topbar a, nav.sequence-nav ol a { - border-left: 1px solid #e4d080; - -webkit-box-shadow: compact(inset 1px 0 0 #faf7e9, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 1px 0 0 #faf7e9, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 1px 0 0 #faf7e9, false, false, false, false, false, false, false, false); - display: block; - text-transform: uppercase; } - .topbar a.block-link:hover, nav.sequence-nav a.block-link:hover, .topbar nav.sequence-nav ol a:hover, nav.sequence-nav ol .topbar a:hover, nav.sequence-nav ol a:hover { - background: none; } - -.tran, section.course-index { - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); } - -p.ie-warning { - background: yellow; - display: block !important; - line-height: 1.3em; - margin-bottom: 0; - padding: lh(); - text-align: left; } - -html { - height: 100%; - max-height: 100%; } - -body.courseware { - height: 100%; - max-height: 100%; } - body.courseware .container { - margin-bottom: 40px; - margin-top: 20px; } - body.courseware footer.fixed-bottom { - Position: static; } - -div.course-wrapper ul, div.course-wrapper ol { - list-style: none; } -div.course-wrapper section.course-content { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - -ms-border-radius: 0 4px 4px 0; - -o-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; } - div.course-wrapper section.course-content h1 { - margin: 0 0 22.652px; } - div.course-wrapper section.course-content p { - margin-bottom: 22.652px; } - div.course-wrapper section.course-content p:empty { - display: none; - margin-bottom: 0; } - div.course-wrapper section.course-content ul li { - margin-bottom: 11.326px; } - div.course-wrapper section.course-content .problem-set, div.course-wrapper section.course-content section.problems-wrapper, div.course-wrapper section.course-content div#seq_content, div.course-wrapper section.course-content ol.vert-mod > li, div.course-wrapper section.course-content section.problems-wrapper, div.course-wrapper section.course-content div#seq_content { - position: relative; } - div.course-wrapper section.course-content .problem-set h2, div.course-wrapper section.course-content section.problems-wrapper h2, div.course-wrapper section.course-content div#seq_content h2, div.course-wrapper section.course-content ol.vert-mod > li h2, div.course-wrapper section.course-content section.problems-wrapper h2, div.course-wrapper section.course-content div#seq_content h2 { - margin-top: 0; - margin-bottom: 15px; - width: 20.109%; - padding-right: 2.717%; - border-right: 1px dashed #ddd; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - display: table-cell; - vertical-align: top; } - div.course-wrapper section.course-content .problem-set h2.problem-header section.staff, div.course-wrapper section.course-content section.problems-wrapper h2.problem-header section.staff, div.course-wrapper section.course-content div#seq_content h2.problem-header section.staff, div.course-wrapper section.course-content ol.vert-mod > li h2.problem-header section.staff, div.course-wrapper section.course-content section.problems-wrapper h2.problem-header section.staff, div.course-wrapper section.course-content div#seq_content h2.problem-header section.staff { - margin-top: 30px; - font-size: 80%; } - @media screen and (max-width:1120px) { - div.course-wrapper section.course-content .problem-set h2, div.course-wrapper section.course-content section.problems-wrapper h2, div.course-wrapper section.course-content div#seq_content h2, div.course-wrapper section.course-content ol.vert-mod > li h2, div.course-wrapper section.course-content section.problems-wrapper h2, div.course-wrapper section.course-content div#seq_content h2 { - display: block; - width: auto; - border-right: 0; } } - @media print { - div.course-wrapper section.course-content .problem-set h2, div.course-wrapper section.course-content section.problems-wrapper h2, div.course-wrapper section.course-content div#seq_content h2, div.course-wrapper section.course-content ol.vert-mod > li h2, div.course-wrapper section.course-content section.problems-wrapper h2, div.course-wrapper section.course-content div#seq_content h2 { - display: block; - width: auto; - border-right: 0; } } - div.course-wrapper section.course-content .problem-set section.problem, div.course-wrapper section.course-content section.problems-wrapper section.problem, div.course-wrapper section.course-content div#seq_content section.problem, div.course-wrapper section.course-content ol.vert-mod > li section.problem, div.course-wrapper section.course-content section.problems-wrapper section.problem, div.course-wrapper section.course-content div#seq_content section.problem { - display: table-cell; - width: 77.174%; - padding-left: 2.717%; } - @media screen and (max-width:1120px) { - div.course-wrapper section.course-content .problem-set section.problem, div.course-wrapper section.course-content section.problems-wrapper section.problem, div.course-wrapper section.course-content div#seq_content section.problem, div.course-wrapper section.course-content ol.vert-mod > li section.problem, div.course-wrapper section.course-content section.problems-wrapper section.problem, div.course-wrapper section.course-content div#seq_content section.problem { - display: block; - width: auto; - padding: 0; } } - @media print { - div.course-wrapper section.course-content .problem-set section.problem, div.course-wrapper section.course-content section.problems-wrapper section.problem, div.course-wrapper section.course-content div#seq_content section.problem, div.course-wrapper section.course-content ol.vert-mod > li section.problem, div.course-wrapper section.course-content section.problems-wrapper section.problem, div.course-wrapper section.course-content div#seq_content section.problem { - display: block; - width: auto; - padding: 0; } - div.course-wrapper section.course-content .problem-set section.problem canvas, div.course-wrapper section.course-content section.problems-wrapper section.problem canvas, div.course-wrapper section.course-content div#seq_content section.problem canvas, div.course-wrapper section.course-content ol.vert-mod > li section.problem canvas, div.course-wrapper section.course-content section.problems-wrapper section.problem canvas, div.course-wrapper section.course-content div#seq_content section.problem canvas, div.course-wrapper section.course-content .problem-set section.problem img, div.course-wrapper section.course-content section.problems-wrapper section.problem img, div.course-wrapper section.course-content div#seq_content section.problem img, div.course-wrapper section.course-content ol.vert-mod > li section.problem img, div.course-wrapper section.course-content section.problems-wrapper section.problem img, div.course-wrapper section.course-content div#seq_content section.problem img { - page-break-inside: avoid; } } - div.course-wrapper section.course-content .problem-set section.problem span.unanswered, div.course-wrapper section.course-content section.problems-wrapper section.problem span.unanswered, div.course-wrapper section.course-content div#seq_content section.problem span.unanswered, div.course-wrapper section.course-content ol.vert-mod > li section.problem span.unanswered, div.course-wrapper section.course-content section.problems-wrapper section.problem span.unanswered, div.course-wrapper section.course-content div#seq_content section.problem span.unanswered, div.course-wrapper section.course-content .problem-set section.problem span.ui-icon-bullet, div.course-wrapper section.course-content section.problems-wrapper section.problem span.ui-icon-bullet, div.course-wrapper section.course-content div#seq_content section.problem span.ui-icon-bullet, div.course-wrapper section.course-content ol.vert-mod > li section.problem span.ui-icon-bullet, div.course-wrapper section.course-content section.problems-wrapper section.problem span.ui-icon-bullet, div.course-wrapper section.course-content div#seq_content section.problem span.ui-icon-bullet { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - background: url("../images/unanswered-icon.png") center center no-repeat; - height: 14px; - position: relative; - top: 4px; - width: 14px; } - div.course-wrapper section.course-content .problem-set section.problem span.correct, div.course-wrapper section.course-content section.problems-wrapper section.problem span.correct, div.course-wrapper section.course-content div#seq_content section.problem span.correct, div.course-wrapper section.course-content ol.vert-mod > li section.problem span.correct, div.course-wrapper section.course-content section.problems-wrapper section.problem span.correct, div.course-wrapper section.course-content div#seq_content section.problem span.correct, div.course-wrapper section.course-content .problem-set section.problem span.ui-icon-check, div.course-wrapper section.course-content section.problems-wrapper section.problem span.ui-icon-check, div.course-wrapper section.course-content div#seq_content section.problem span.ui-icon-check, div.course-wrapper section.course-content ol.vert-mod > li section.problem span.ui-icon-check, div.course-wrapper section.course-content section.problems-wrapper section.problem span.ui-icon-check, div.course-wrapper section.course-content div#seq_content section.problem span.ui-icon-check { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - background: url("../images/correct-icon.png") center center no-repeat; - height: 20px; - position: relative; - top: 6px; - width: 25px; } - div.course-wrapper section.course-content .problem-set section.problem span.incorrect, div.course-wrapper section.course-content section.problems-wrapper section.problem span.incorrect, div.course-wrapper section.course-content div#seq_content section.problem span.incorrect, div.course-wrapper section.course-content ol.vert-mod > li section.problem span.incorrect, div.course-wrapper section.course-content section.problems-wrapper section.problem span.incorrect, div.course-wrapper section.course-content div#seq_content section.problem span.incorrect, div.course-wrapper section.course-content .problem-set section.problem span.ui-icon-close, div.course-wrapper section.course-content section.problems-wrapper section.problem span.ui-icon-close, div.course-wrapper section.course-content div#seq_content section.problem span.ui-icon-close, div.course-wrapper section.course-content ol.vert-mod > li section.problem span.ui-icon-close, div.course-wrapper section.course-content section.problems-wrapper section.problem span.ui-icon-close, div.course-wrapper section.course-content div#seq_content section.problem span.ui-icon-close { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - background: url("../images/incorrect-icon.png") center center no-repeat; - height: 20px; - width: 20px; - position: relative; - top: 6px; } - div.course-wrapper section.course-content .problem-set div > span, div.course-wrapper section.course-content section.problems-wrapper div > span, div.course-wrapper section.course-content div#seq_content div > span, div.course-wrapper section.course-content ol.vert-mod > li div > span, div.course-wrapper section.course-content section.problems-wrapper div > span, div.course-wrapper section.course-content div#seq_content div > span { - display: block; - margin-bottom: 11.326px; } - div.course-wrapper section.course-content .problem-set div > span[answer], div.course-wrapper section.course-content section.problems-wrapper div > span[answer], div.course-wrapper section.course-content div#seq_content div > span[answer], div.course-wrapper section.course-content ol.vert-mod > li div > span[answer], div.course-wrapper section.course-content section.problems-wrapper div > span[answer], div.course-wrapper section.course-content div#seq_content div > span[answer] { - border-top: 1px solid #ededed; - border-bottom: 1px solid #ededed; - background: #f3f3f3; - margin: 0 -22.652px; - padding: 11.326px 22.652px; } - div.course-wrapper section.course-content .problem-set input[type="text"], div.course-wrapper section.course-content section.problems-wrapper input[type="text"], div.course-wrapper section.course-content div#seq_content input[type="text"], div.course-wrapper section.course-content ol.vert-mod > li input[type="text"], div.course-wrapper section.course-content section.problems-wrapper input[type="text"], div.course-wrapper section.course-content div#seq_content input[type="text"] { - display: inline-block; - width: 50%; } - div.course-wrapper section.course-content .problem-set center, div.course-wrapper section.course-content section.problems-wrapper center, div.course-wrapper section.course-content div#seq_content center, div.course-wrapper section.course-content ol.vert-mod > li center, div.course-wrapper section.course-content section.problems-wrapper center, div.course-wrapper section.course-content div#seq_content center { - display: block; - margin: 22.652px 0; - border: 1px solid #ccc; - padding: 22.652px; } - div.course-wrapper section.course-content .problem-set section.action, div.course-wrapper section.course-content section.problems-wrapper section.action, div.course-wrapper section.course-content div#seq_content section.action, div.course-wrapper section.course-content ol.vert-mod > li section.action, div.course-wrapper section.course-content section.problems-wrapper section.action, div.course-wrapper section.course-content div#seq_content section.action { - margin-top: 22.652px; } - div.course-wrapper section.course-content .problem-set section.action input[type="button"], div.course-wrapper section.course-content section.problems-wrapper section.action input[type="button"], div.course-wrapper section.course-content div#seq_content section.action input[type="button"], div.course-wrapper section.course-content ol.vert-mod > li section.action input[type="button"], div.course-wrapper section.course-content section.problems-wrapper section.action input[type="button"], div.course-wrapper section.course-content div#seq_content section.action input[type="button"] { - padding: 9.061px 22.652px; - text-shadow: 0 -1px 0 #666666; } - div.course-wrapper section.course-content section.problems-wrapper { - display: table; - width: 100%; } - @media screen and (max-width:1120px) { - div.course-wrapper section.course-content section.problems-wrapper { - display: block; - width: auto; } } - div.course-wrapper section.course-content div#seq_content h1 { - background: none; - margin-bottom: 22.652px; - padding-bottom: 0; - border-bottom: none; } - div.course-wrapper section.course-content ol.vert-mod > li { - border-bottom: 1px solid #ddd; - margin-bottom: 15px; - padding: 0 0 15px; } - div.course-wrapper section.course-content ol.vert-mod > li header { - -webkit-border-radius: 0 4px 0 0; - -moz-border-radius: 0 4px 0 0; - -ms-border-radius: 0 4px 0 0; - -o-border-radius: 0 4px 0 0; - border-radius: 0 4px 0 0; - margin-bottom: -16px; } - div.course-wrapper section.course-content ol.vert-mod > li header h1 { - margin: 0; } - div.course-wrapper section.course-content ol.vert-mod > li header h2 { - float: right; - margin-right: 0; - margin-top: 8px; - text-align: right; - padding-right: 0; - border-right: 0; } - div.course-wrapper section.course-content ol.vert-mod > li:last-child { - border-bottom: none; - margin-bottom: 0; - padding-bottom: 0; } - div.course-wrapper section.course-content ol.vert-mod > li .histogram { - width: 200px; - height: 150px; } - div.course-wrapper section.course-content ol.vert-mod > li ul { - list-style: disc outside none; - padding-left: 1em; } - div.course-wrapper section.course-content ol.vert-mod > li nav.sequence-bottom ul { - list-style: none; - padding: 0; } - div.course-wrapper section.course-content section.tutorials h2 { - margin-bottom: 22.652px; } - div.course-wrapper section.course-content section.tutorials ul { - margin: 0; - zoom: 1; } - div.course-wrapper section.course-content section.tutorials ul:before, div.course-wrapper section.course-content section.tutorials ul:after { - content: ""; - display: table; } - div.course-wrapper section.course-content section.tutorials ul:after { - clear: both; } - div.course-wrapper section.course-content section.tutorials ul li { - width: 31.522%; - float: left; - margin-right: 2.717%; - margin-bottom: 22.652px; } - div.course-wrapper section.course-content section.tutorials ul li:nth-child(3n) { - margin-right: 0; } - div.course-wrapper section.course-content section.tutorials ul li:nth-child(3n+1) { - clear: both; } - div.course-wrapper section.course-content section.tutorials ul li a { - font-weight: bold; } - div.course-wrapper section.course-content div.staff_info { - zoom: 1; - white-space: pre-wrap; - border-top: 1px solid #ccc; - padding-top: 22.652px; - margin-top: 22.652px; - line-height: 22.652px; - font-family: Consolas, "Lucida Console", Monaco, "Courier New", Courier, monospace; } - div.course-wrapper section.course-content div.staff_info:before, div.course-wrapper section.course-content div.staff_info:after { - content: ""; - display: table; } - div.course-wrapper section.course-content div.staff_info:after { - clear: both; } - div.course-wrapper section.course-content div.ui-slider { - border: 1px solid #aaa; - background: #ddd; - -webkit-box-shadow: compact(inset 0 1px 0 #eeeeee, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 #eeeeee, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 #eeeeee, false, false, false, false, false, false, false, false); - -webkit-border-radius: 0; - -moz-border-radius: 0; - -ms-border-radius: 0; - -o-border-radius: 0; - border-radius: 0; } - div.course-wrapper section.course-content div.ui-slider a.ui-slider-handle { - -webkit-box-shadow: compact(inset 0 1px 0 #bf4040, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 #bf4040, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 #bf4040, false, false, false, false, false, false, false, false); - background: #993333 url(../images/slider-bars.png) center center no-repeat; - border: 1px solid #4d1919; - cursor: pointer; } - div.course-wrapper section.course-content div.ui-slider a.ui-slider-handle:hover, div.course-wrapper section.course-content div.ui-slider a.ui-slider-handle:focus { - background-color: #bf4040; - outline: none; } - div.course-wrapper section.course-content div.ui-tabs { - border: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - -ms-border-radius: 0; - -o-border-radius: 0; - border-radius: 0; - margin: 0; - padding: 0; } - div.course-wrapper section.course-content div.ui-tabs .ui-tabs-nav { - background: none; - border: 0; - margin-bottom: 11.326px; } - div.course-wrapper section.course-content div.ui-tabs .ui-tabs-panel { - -webkit-border-radius: 0; - -moz-border-radius: 0; - -ms-border-radius: 0; - -o-border-radius: 0; - border-radius: 0; - padding: 0; } -div.course-wrapper.closed section.course-index { - width: 3.077%; - overflow: hidden; } - div.course-wrapper.closed section.course-index header#open_close_accordion { - padding: 0; - min-height: 47px; } - div.course-wrapper.closed section.course-index header#open_close_accordion a { - background-image: url("../images/slide-right-icon.png"); } - div.course-wrapper.closed section.course-index header#open_close_accordion h2 { - visibility: hidden; - width: 10px; } - div.course-wrapper.closed section.course-index div#accordion { - visibility: hidden; - width: 10px; - padding: 0; } - div.course-wrapper.closed section.course-index div#accordion nav { - white-space: pre; - overflow: hidden; } - div.course-wrapper.closed section.course-index div#accordion nav ul { - overflow: hidden; - white-space: nowrap; } -div.course-wrapper.closed section.course-content { - width: 97.773%; } - -nav.sequence-nav { - border-bottom: 1px solid #e4d080; - margin-bottom: 22.652px; - position: relative; - -webkit-border-top-right-radius: 4px; - -moz-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - -ms-border-top-right-radius: 4px; - -o-border-top-right-radius: 4px; - border-top-right-radius: 4px; } - nav.sequence-nav ol { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - display: table; - height: 100%; - padding-right: 8.696%; - width: 100%; } - nav.sequence-nav ol li { - border-left: 1px solid #e4d080; - display: table-cell; - min-width: 20px; } - nav.sequence-nav ol li:first-child { - border-left: none; } - nav.sequence-nav ol li .inactive, nav.sequence-nav ol li a.seq_video_inactive, nav.sequence-nav ol li a.seq_other_inactive, nav.sequence-nav ol li a.seq_vertical_inactive, nav.sequence-nav ol li a.seq_problem_inactive { - background-repeat: no-repeat; } - nav.sequence-nav ol li .inactive:hover, nav.sequence-nav ol li a.seq_video_inactive:hover, nav.sequence-nav ol li a.seq_other_inactive:hover, nav.sequence-nav ol li a.seq_vertical_inactive:hover, nav.sequence-nav ol li a.seq_problem_inactive:hover { - background-color: #f9f4e1; } - nav.sequence-nav ol li .visited, nav.sequence-nav ol li a.seq_video_visited, nav.sequence-nav ol li a.seq_other_visited, nav.sequence-nav ol li a.seq_vertical_visited, nav.sequence-nav ol li a.seq_problem_visited { - background-color: #DCCDA2; - background-repeat: no-repeat; - -webkit-box-shadow: compact(inset 0 0 3px #ceb97d, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 0 3px #ceb97d, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 0 3px #ceb97d, false, false, false, false, false, false, false, false); } - nav.sequence-nav ol li .visited:hover, nav.sequence-nav ol li a.seq_video_visited:hover, nav.sequence-nav ol li a.seq_other_visited:hover, nav.sequence-nav ol li a.seq_vertical_visited:hover, nav.sequence-nav ol li a.seq_problem_visited:hover { - background-color: #f6efd4; - background-position: center center; } - nav.sequence-nav ol li .active, nav.sequence-nav ol li a.seq_video_active, nav.sequence-nav ol li a.seq_other_active, nav.sequence-nav ol li a.seq_vertical_active, nav.sequence-nav ol li a.seq_problem_active, nav.sequence-nav ol li section.course-index div#accordion h3.ui-accordion-header.ui-state-active, section.course-index div#accordion nav.sequence-nav ol li h3.ui-accordion-header.ui-state-active { - background-color: #fff; - background-repeat: no-repeat; - -webkit-box-shadow: compact(0 1px 0 white, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(0 1px 0 white, false, false, false, false, false, false, false, false); - box-shadow: compact(0 1px 0 white, false, false, false, false, false, false, false, false); } - nav.sequence-nav ol li .active:hover, nav.sequence-nav ol li a.seq_video_active:hover, nav.sequence-nav ol li a.seq_other_active:hover, nav.sequence-nav ol li a.seq_vertical_active:hover, nav.sequence-nav ol li a.seq_problem_active:hover, nav.sequence-nav ol li section.course-index div#accordion h3.ui-accordion-header.ui-state-active:hover, section.course-index div#accordion nav.sequence-nav ol li h3.ui-accordion-header.ui-state-active:hover { - background-color: #fff; - background-position: center; } - nav.sequence-nav ol li a { - background-position: center center; - border: none; - cursor: pointer; - display: block; - height: 17px; - padding: 15px 0 14px; - position: relative; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.4s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.4s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.4s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.4s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.4s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); - width: 100%; } - nav.sequence-nav ol li a.progress, nav.sequence-nav ol li a.progress-none, nav.sequence-nav ol li a.progress-some, nav.sequence-nav ol li a.progress-done { - border-bottom-style: solid; - border-bottom-width: 4px; } - nav.sequence-nav ol li a.progress-none { - border-bottom-color: red; } - nav.sequence-nav ol li a.progress-some { - border-bottom-color: yellow; } - nav.sequence-nav ol li a.progress-done { - border-bottom-color: green; } - nav.sequence-nav ol li a.seq_video_inactive { - background-image: url("../images/sequence-nav/video-icon-normal.png"); - background-position: center; } - nav.sequence-nav ol li a.seq_video_visited { - background-image: url("../images/sequence-nav/video-icon-visited.png"); - background-position: center; } - nav.sequence-nav ol li a.seq_video_active { - background-image: url("../images/sequence-nav/video-icon-current.png"); - background-position: center; } - nav.sequence-nav ol li a.seq_other_inactive { - background-image: url("../images/sequence-nav/document-icon-normal.png"); - background-position: center; } - nav.sequence-nav ol li a.seq_other_visited { - background-image: url("../images/sequence-nav/document-icon-visited.png"); - background-position: center; } - nav.sequence-nav ol li a.seq_other_active { - background-image: url("../images/sequence-nav/document-icon-current.png"); - background-position: center; } - nav.sequence-nav ol li a.seq_vertical_inactive, nav.sequence-nav ol li a.seq_problem_inactive { - background-image: url("../images/sequence-nav/list-icon-normal.png"); - background-position: center; } - nav.sequence-nav ol li a.seq_vertical_visited, nav.sequence-nav ol li a.seq_problem_visited { - background-image: url("../images/sequence-nav/list-icon-visited.png"); - background-position: center; } - nav.sequence-nav ol li a.seq_vertical_active, nav.sequence-nav ol li a.seq_problem_active { - background-image: url("../images/sequence-nav/list-icon-current.png"); - background-position: center; } - nav.sequence-nav ol li a p { - background: #333; - color: #fff; - display: none; - line-height: 22.652px; - left: 0px; - opacity: 0; - padding: 6px; - position: absolute; - top: 48px; - text-shadow: 0 -1px 0 black; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.1s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.1s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.1s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.1s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.1s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(cubic-bezier(0.77, 0, 0.175, 1), false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(cubic-bezier(0.77, 0, 0.175, 1), false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(cubic-bezier(0.77, 0, 0.175, 1), false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(cubic-bezier(0.77, 0, 0.175, 1), false, false, false, false, false, false, false, false); - transition-timing-function: compact(cubic-bezier(0.77, 0, 0.175, 1), false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); - white-space: pre; - z-index: 99; } - nav.sequence-nav ol li a p:empty { - background: none; } - nav.sequence-nav ol li a p:empty::after { - display: none; } - nav.sequence-nav ol li a p::after { - background: #333; - content: " "; - display: block; - height: 10px; - left: 18px; - position: absolute; - top: -5px; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); - width: 10px; } - nav.sequence-nav ol li a:hover p { - display: block; - margin-top: 4px; - opacity: 1; } - nav.sequence-nav ul { - list-style: none; - height: 100%; - position: absolute; - right: 0; - top: 0; - width: 8.696%; } - nav.sequence-nav ul li { - float: left; - width: 50%; } - nav.sequence-nav ul li.prev a, nav.sequence-nav ul li.next a { - background-color: #f2e7bf; - background-position: center center; - background-repeat: no-repeat; - border-left: 1px solid #e4d080; - -webkit-box-shadow: compact(inset 1px 0 0 #faf7e9, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 1px 0 0 #faf7e9, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 1px 0 0 #faf7e9, false, false, false, false, false, false, false, false); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - cursor: pointer; - display: block; - text-indent: -9999px; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); } - nav.sequence-nav ul li.prev a:hover, nav.sequence-nav ul li.next a:hover { - opacity: .5; } - nav.sequence-nav ul li.prev a.disabled, nav.sequence-nav ul li.next a.disabled { - cursor: normal; - opacity: .4; } - nav.sequence-nav ul li.prev a { - background-image: url("../images/sequence-nav/previous-icon.png"); } - nav.sequence-nav ul li.prev a:hover { - background-color: #f6efd4; } - nav.sequence-nav ul li.next a { - background-image: url("../images/sequence-nav/next-icon.png"); } - nav.sequence-nav ul li.next a:hover { - background-color: #f6efd4; } - body.touch-based-device nav.sequence-nav ol li a:hover p { - display: none; } - -section.course-content { - position: relative; } - section.course-content ol.vert-mod nav.sequence-nav { - margin-top: -15px; - -webkit-border-radius: 0; - -moz-border-radius: 0; - -ms-border-radius: 0; - -o-border-radius: 0; - border-radius: 0; } - section.course-content nav.sequence-bottom { - margin: 45.304px 0 0; - text-align: center; } - section.course-content nav.sequence-bottom ul { - background-color: #f2e7bf; - background-color: #f2e7bf; - border: 1px solid #e4d080; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: compact(inset 0 0 0 1px #faf7e9, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 0 0 1px #faf7e9, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 0 0 1px #faf7e9, false, false, false, false, false, false, false, false); - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; } - section.course-content nav.sequence-bottom ul li { - float: left; } - section.course-content nav.sequence-bottom ul li.prev, section.course-content nav.sequence-bottom ul li.next { - margin-bottom: 0; } - section.course-content nav.sequence-bottom ul li.prev a, section.course-content nav.sequence-bottom ul li.next a { - background-position: center center; - background-repeat: no-repeat; - border-bottom: none; - display: block; - padding: 11.326px 4px; - text-indent: -9999px; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - transition-timing-function: compact(cubic-bezier(0.455, 0.03, 0.515, 0.955), false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); - width: 45px; } - section.course-content nav.sequence-bottom ul li.prev a:hover, section.course-content nav.sequence-bottom ul li.next a:hover { - background-color: #f6efd4; - color: #7e691a; - opacity: .5; - text-decoration: none; } - section.course-content nav.sequence-bottom ul li.prev a.disabled, section.course-content nav.sequence-bottom ul li.next a.disabled { - background-color: #fffffe; - opacity: .4; } - section.course-content nav.sequence-bottom ul li.prev a { - background-image: url("../images/sequence-nav/previous-icon.png"); - border-right: 1px solid #e4d080; } - section.course-content nav.sequence-bottom ul li.prev a:hover { - background-color: none; } - section.course-content nav.sequence-bottom ul li.next a { - background-image: url("../images/sequence-nav/next-icon.png"); } - section.course-content nav.sequence-bottom ul li.next a:hover { - background-color: none; } - -section.course-index header { - max-height: 47px; } - section.course-index header h2 { - white-space: nowrap; } -section.course-index div#accordion h3 { - -webkit-box-shadow: compact(inset 0 1px 0 0 #eeeeee, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 0 #eeeeee, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 0 #eeeeee, false, false, false, false, false, false, false, false); - border-top: 1px solid #d3d3d3; - overflow: hidden; - margin: 0; } - section.course-index div#accordion h3:first-child { - border: none; } - section.course-index div#accordion h3:hover { - background-image: compact(linear, compact(-90deg, #f5f5f5, #e1e1e1, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, #f5f5f5, #e1e1e1, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, #f5f5f5, #e1e1e1, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, #f5f5f5, #e1e1e1, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, #f5f5f5, #e1e1e1, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); } - section.course-index div#accordion h3.ui-accordion-header { - color: #000; } - section.course-index div#accordion h3.ui-accordion-header a { - font-size: 14px; - color: #4d4d4d; } - section.course-index div#accordion h3.ui-accordion-header.ui-state-active { - background-image: compact(linear, compact(-90deg, #f5f5f5, #e1e1e1, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, #f5f5f5, #e1e1e1, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, #f5f5f5, #e1e1e1, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, #f5f5f5, #e1e1e1, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, #f5f5f5, #e1e1e1, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - border-bottom: 1px solid #d3d3d3; } -section.course-index div#accordion ul.ui-accordion-content { - -webkit-border-radius: 0; - -moz-border-radius: 0; - -ms-border-radius: 0; - -o-border-radius: 0; - border-radius: 0; - -webkit-box-shadow: compact(inset -1px 0 0 #e6e6e6, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset -1px 0 0 #e6e6e6, false, false, false, false, false, false, false, false); - box-shadow: compact(inset -1px 0 0 #e6e6e6, false, false, false, false, false, false, false, false); - background: #dadada; - border: none; - font-size: 12px; - margin: 0; - padding: 1em 1.5em; } - section.course-index div#accordion ul.ui-accordion-content li { - margin-bottom: 11.326px; } - section.course-index div#accordion ul.ui-accordion-content li a { - border: 1px solid transparent; - background: transparent; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; - position: relative; - padding: 5px 36px 5px 10px; - text-decoration: none; - display: block; - color: #666; } - section.course-index div#accordion ul.ui-accordion-content li a p { - font-weight: bold; - margin-bottom: 0; } - section.course-index div#accordion ul.ui-accordion-content li a p span.subtitle { - color: #666; - font-weight: normal; - display: block; } - section.course-index div#accordion ul.ui-accordion-content li a:after { - background: transparent; - border-top: 1px solid #b4b4b4; - border-right: 1px solid #b4b4b4; - content: ""; - display: block; - height: 12px; - margin-top: -6px; - opacity: 0; - position: absolute; - top: 50%; - right: 30px; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); - width: 12px; } - section.course-index div#accordion ul.ui-accordion-content li a:hover { - background-image: compact(linear, compact(-90deg, rgba(245, 245, 245, 0.4), rgba(230, 230, 230, 0.4), false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, rgba(245, 245, 245, 0.4), rgba(230, 230, 230, 0.4), false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, rgba(245, 245, 245, 0.4), rgba(230, 230, 230, 0.4), false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, rgba(245, 245, 245, 0.4), rgba(230, 230, 230, 0.4), false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, rgba(245, 245, 245, 0.4), rgba(230, 230, 230, 0.4), false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - border-color: #c8c8c8; } - section.course-index div#accordion ul.ui-accordion-content li a:hover:after { - opacity: 1; - right: 15px; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.2s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(linear, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(linear, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(linear, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(linear, false, false, false, false, false, false, false, false); - transition-timing-function: compact(linear, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); } - section.course-index div#accordion ul.ui-accordion-content li a:hover > a p { - color: #333; } - section.course-index div#accordion ul.ui-accordion-content li a:active { - -webkit-box-shadow: compact(inset 0 1px 14px 0 rgba(0, 0, 0, 0.1), false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 14px 0 rgba(0, 0, 0, 0.1), false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 14px 0 rgba(0, 0, 0, 0.1), false, false, false, false, false, false, false, false); } - section.course-index div#accordion ul.ui-accordion-content li a:active:after { - opacity: 1; - right: 15px; } - section.course-index div#accordion ul.ui-accordion-content li.active { - font-weight: bold; } - section.course-index div#accordion ul.ui-accordion-content li.active > a { - background: #f0f0f0; - background-image: compact(linear, compact(-90deg, #f5f5f5, #e6e6e6, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, #f5f5f5, #e6e6e6, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, #f5f5f5, #e6e6e6, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, #f5f5f5, #e6e6e6, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - background-image: compact(linear, compact(-90deg, #f5f5f5, #e6e6e6, false, false, false, false, false, false, false, false), false, false, false, false, false, false, false, false, false); - border-color: #c8c8c8; } - section.course-index div#accordion ul.ui-accordion-content li.active > a:after { - opacity: 1; - right: 15px; } - section.course-index div#accordion ul.ui-accordion-content li.active > a p { - color: #333; } - section.course-index div#accordion ul.ui-accordion-content li.active span.subtitle { - font-weight: normal; } - -@-moz-document url-prefix() { - a.add-fullscreen { - display: none !important; } } - -section.course-content .dullify, section.course-content div.video article.video-wrapper section.video-controls ul.vcr, section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls { - opacity: .4; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); } - section.course-content .dullify:hover, section.course-content div.video article.video-wrapper section.video-controls ul.vcr:hover, section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls:hover { - opacity: 1; } -section.course-content div.video { - zoom: 1; - background: #f3f3f3; - border-bottom: 1px solid #e1e1e1; - border-top: 1px solid #e1e1e1; - display: block; - margin: 0 -22.652px; - padding: 6px 22.652px; } - section.course-content div.video:before, section.course-content div.video:after { - content: ""; - display: table; } - section.course-content div.video:after { - clear: both; } - section.course-content div.video article.video-wrapper { - float: left; - margin-right: 2.717%; - width: 65.761%; } - section.course-content div.video article.video-wrapper section.video-player { - height: 0; - overflow: hidden; - padding-bottom: 56.25%; - padding-top: 30px; - position: relative; } - section.course-content div.video article.video-wrapper section.video-player object, section.course-content div.video article.video-wrapper section.video-player iframe { - border: none; - height: 100%; - left: 0; - position: absolute; - top: 0; - width: 100%; } - section.course-content div.video article.video-wrapper section.video-controls { - background: #333; - border: 1px solid #000; - border-top: 0; - color: #ccc; - position: relative; } - section.course-content div.video article.video-wrapper section.video-controls:hover ul, section.course-content div.video article.video-wrapper section.video-controls:hover div { - opacity: 1; } - section.course-content div.video article.video-wrapper section.video-controls div.slider { - background: #c2c2c2; - border: none; - border-bottom: 1px solid #000; - -webkit-border-radius: 0; - -moz-border-radius: 0; - -ms-border-radius: 0; - -o-border-radius: 0; - border-radius: 0; - border-top: 1px solid #000; - -webkit-box-shadow: compact(inset 0 1px 0 #eeeeee, 0 1px 0 #555555, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 #eeeeee, 0 1px 0 #555555, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 #eeeeee, 0 1px 0 #555555, false, false, false, false, false, false, false); - height: 7px; - -webkit-transition-property: compact(height, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(height, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(height, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -o-transition-property: compact(height, 2s, ease-in-out, false, false, false, false, false, false, false, false); - transition-property: compact(height, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); } - section.course-content div.video article.video-wrapper section.video-controls div.slider div.ui-widget-header { - background: #777; - -webkit-box-shadow: compact(inset 0 1px 0 #999999, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 #999999, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 #999999, false, false, false, false, false, false, false, false); } - section.course-content div.video article.video-wrapper section.video-controls div.slider .ui-tooltip.qtip .ui-tooltip-content { - background: #993333; - border: 1px solid #4d1919; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - -ms-border-radius: 2px; - -o-border-radius: 2px; - border-radius: 2px; - -webkit-box-shadow: compact(inset 0 1px 0 #bf4040, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 #bf4040, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 #bf4040, false, false, false, false, false, false, false, false); - color: #fff; - font: bold 12px "Open Sans", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; - margin-bottom: 6px; - margin-right: 0; - overflow: visible; - padding: 4px; - text-align: center; - text-shadow: 0 -1px 0 #732626; - -webkit-font-smoothing: antialiased; } - section.course-content div.video article.video-wrapper section.video-controls div.slider .ui-tooltip.qtip .ui-tooltip-content::after { - background: #993333; - border-bottom: 1px solid #4d1919; - border-right: 1px solid #4d1919; - bottom: -5px; - content: " "; - display: block; - height: 7px; - left: 50%; - margin-left: -3px; - position: absolute; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); - width: 7px; } - section.course-content div.video article.video-wrapper section.video-controls div.slider a.ui-slider-handle { - background: #993333 url(../images/slider-handle.png) center center no-repeat; - -webkit-background-size: compact(50%, false, false, false, false, false, false, false, false); - -moz-background-size: compact(50%, false, false, false, false, false, false, false, false); - -ms-background-size: compact(50%, false, false, false, false, false, false, false, false); - -o-background-size: compact(50%, false, false, false, false, false, false, false, false); - background-size: compact(50%, false, false, false, false, false, false, false, false); - border: 1px solid #4d1919; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - -ms-border-radius: 15px; - -o-border-radius: 15px; - border-radius: 15px; - -webkit-box-shadow: compact(inset 0 1px 0 #bf4040, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 #bf4040, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 #bf4040, false, false, false, false, false, false, false, false); - cursor: pointer; - height: 15px; - margin-left: -7px; - top: -4px; - -webkit-transition-property: compact(height, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(height, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(height, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -o-transition-property: compact(height, 2s, ease-in-out, false, false, false, false, false, false, false, false); - transition-property: compact(height, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(width, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(width, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(width, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(width, 2s, ease-in-out, false, false, false, false, false, false, false, false); - transition-duration: compact(width, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); - width: 15px; } - section.course-content div.video article.video-wrapper section.video-controls div.slider a.ui-slider-handle:focus, section.course-content div.video article.video-wrapper section.video-controls div.slider a.ui-slider-handle:hover { - background-color: #bf4040; - outline: none; } - section.course-content div.video article.video-wrapper section.video-controls ul.vcr { - float: left; - list-style: none; - margin-right: 22.652px; - padding: 0; } - section.course-content div.video article.video-wrapper section.video-controls ul.vcr li { - float: left; - margin-bottom: 0; } - section.course-content div.video article.video-wrapper section.video-controls ul.vcr li a { - border-bottom: none; - border-right: 1px solid #000; - -webkit-box-shadow: compact(1px 0 0 #555555, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(1px 0 0 #555555, false, false, false, false, false, false, false, false); - box-shadow: compact(1px 0 0 #555555, false, false, false, false, false, false, false, false); - cursor: pointer; - display: block; - line-height: 46px; - padding: 0 16.989px; - text-indent: -9999px; - -webkit-transition-property: compact(background-color, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(background-color, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(background-color, false, false, false, false, false, false, false, false); - -o-transition-property: compact(background-color, false, false, false, false, false, false, false, false); - transition-property: compact(background-color, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(opacity, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(opacity, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(opacity, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(opacity, false, false, false, false, false, false, false, false); - transition-duration: compact(opacity, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); - width: 14px; - background: url("../images/vcr.png") 15px 15px no-repeat; } - section.course-content div.video article.video-wrapper section.video-controls ul.vcr li a:empty { - height: 46px; - background: url("../images/vcr.png") 15px 15px no-repeat; } - section.course-content div.video article.video-wrapper section.video-controls ul.vcr li a.play { - background-position: 17px -114px; } - section.course-content div.video article.video-wrapper section.video-controls ul.vcr li a.play:hover { - background-color: #444; } - section.course-content div.video article.video-wrapper section.video-controls ul.vcr li a.pause { - background-position: 16px -50px; } - section.course-content div.video article.video-wrapper section.video-controls ul.vcr li a.pause:hover { - background-color: #444; } - section.course-content div.video article.video-wrapper section.video-controls ul.vcr li div.vidtime { - padding-left: 16.989px; - font-weight: bold; - line-height: 46px; - padding-left: 16.989px; - -webkit-font-smoothing: antialiased; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls { - float: right; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds { - float: left; - position: relative; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds.open > a { - background: url("../images/open-arrow.png") 10px center no-repeat; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds.open ol.video_speeds { - display: block; - opacity: 1; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds > a { - background: url("../images/closed-arrow.png") 10px center no-repeat; - border-left: 1px solid #000; - border-right: 1px solid #000; - -webkit-box-shadow: compact(1px 0 0 #555555, inset 1px 0 0 #555555, false, false, false, false, false, false, false); - -moz-box-shadow: compact(1px 0 0 #555555, inset 1px 0 0 #555555, false, false, false, false, false, false, false); - box-shadow: compact(1px 0 0 #555555, inset 1px 0 0 #555555, false, false, false, false, false, false, false); - zoom: 1; - color: #fff; - cursor: pointer; - display: block; - line-height: 46px; - margin-right: 0; - padding-left: 15px; - position: relative; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); - -webkit-font-smoothing: antialiased; - width: 110px; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds > a:before, section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds > a:after { - content: ""; - display: table; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds > a:after { - clear: both; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds > a h3 { - color: #999; - float: left; - font-size: 12px; - font-weight: normal; - letter-spacing: 1px; - padding: 0 5.663px 0 11.326px; - text-transform: uppercase; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds > a p.active { - float: left; - font-weight: bold; - margin-bottom: 0; - padding: 0 11.326px 0 0; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds > a:hover, section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds > a:active, section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds > a:focus { - opacity: 1; - background-color: #444; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds ol.video_speeds { - -webkit-box-shadow: compact(inset 1px 0 0 #555555, 0 3px 0 #444444, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 1px 0 0 #555555, 0 3px 0 #444444, false, false, false, false, false, false, false); - box-shadow: compact(inset 1px 0 0 #555555, 0 3px 0 #444444, false, false, false, false, false, false, false); - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); - background-color: #444; - border: 1px solid #000; - bottom: 46px; - display: none; - opacity: 0; - position: absolute; - width: 125px; - z-index: 10; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds ol.video_speeds li { - -webkit-box-shadow: compact(0 1px 0 #555555, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(0 1px 0 #555555, false, false, false, false, false, false, false, false); - box-shadow: compact(0 1px 0 #555555, false, false, false, false, false, false, false, false); - border-bottom: 1px solid #000; - color: #fff; - cursor: pointer; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds ol.video_speeds li a { - border: 0; - color: #fff; - display: block; - padding: 11.326px; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds ol.video_speeds li a:hover { - background-color: #666; - color: #aaa; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds ol.video_speeds li.active { - font-weight: bold; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.speeds ol.video_speeds li:last-child { - -webkit-box-shadow: compact(none, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(none, false, false, false, false, false, false, false, false); - box-shadow: compact(none, false, false, false, false, false, false, false, false); - border-bottom: 0; - margin-top: 0; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.volume { - float: left; - position: relative; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.volume.open .volume-slider-container { - display: block; - opacity: 1; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.volume.muted > a { - background: url("../images/mute.png") 10px center no-repeat; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.volume > a { - background: url("../images/volume.png") 10px center no-repeat; - border-right: 1px solid #000; - -webkit-box-shadow: compact(1px 0 0 #555555, inset 1px 0 0 #555555, false, false, false, false, false, false, false); - -moz-box-shadow: compact(1px 0 0 #555555, inset 1px 0 0 #555555, false, false, false, false, false, false, false); - box-shadow: compact(1px 0 0 #555555, inset 1px 0 0 #555555, false, false, false, false, false, false, false); - zoom: 1; - color: #fff; - cursor: pointer; - display: block; - height: 46px; - margin-right: 0; - padding-left: 15px; - position: relative; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); - -webkit-font-smoothing: antialiased; - width: 30px; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.volume > a:before, section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.volume > a:after { - content: ""; - display: table; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.volume > a:after { - clear: both; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.volume > a:hover, section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.volume > a:active, section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.volume > a:focus { - background-color: #444; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.volume .volume-slider-container { - -webkit-box-shadow: compact(inset 1px 0 0 #555555, 0 3px 0 #444444, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 1px 0 0 #555555, 0 3px 0 #444444, false, false, false, false, false, false, false); - box-shadow: compact(inset 1px 0 0 #555555, 0 3px 0 #444444, false, false, false, false, false, false, false); - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); - background-color: #444; - border: 1px solid #000; - bottom: 46px; - display: none; - opacity: 0; - position: absolute; - width: 45px; - height: 125px; - margin-left: -1px; - z-index: 10; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.volume .volume-slider-container .volume-slider { - height: 100px; - border: 0; - width: 5px; - margin: 14px auto; - background: #666; - border: 1px solid #000; - -webkit-box-shadow: compact(0 1px 0 #333333, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(0 1px 0 #333333, false, false, false, false, false, false, false, false); - box-shadow: compact(0 1px 0 #333333, false, false, false, false, false, false, false, false); } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.volume .volume-slider-container .volume-slider a.ui-slider-handle { - background: #993333 url(../images/slider-handle.png) center center no-repeat; - -webkit-background-size: compact(50%, false, false, false, false, false, false, false, false); - -moz-background-size: compact(50%, false, false, false, false, false, false, false, false); - -ms-background-size: compact(50%, false, false, false, false, false, false, false, false); - -o-background-size: compact(50%, false, false, false, false, false, false, false, false); - background-size: compact(50%, false, false, false, false, false, false, false, false); - border: 1px solid #4d1919; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - -ms-border-radius: 15px; - -o-border-radius: 15px; - border-radius: 15px; - -webkit-box-shadow: compact(inset 0 1px 0 #bf4040, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 #bf4040, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 #bf4040, false, false, false, false, false, false, false, false); - cursor: pointer; - height: 15px; - left: -6px; - -webkit-transition-property: compact(height, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(height, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(height, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -o-transition-property: compact(height, 2s, ease-in-out, false, false, false, false, false, false, false, false); - transition-property: compact(height, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(width, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(width, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(width, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(width, 2s, ease-in-out, false, false, false, false, false, false, false, false); - transition-duration: compact(width, 2s, ease-in-out, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); - width: 15px; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls div.volume .volume-slider-container .volume-slider .ui-slider-range { - background: #ddd; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls a.add-fullscreen { - background: url(../images/fullscreen.png) center no-repeat; - border-right: 1px solid #000; - -webkit-box-shadow: compact(1px 0 0 #555555, inset 1px 0 0 #555555, false, false, false, false, false, false, false); - -moz-box-shadow: compact(1px 0 0 #555555, inset 1px 0 0 #555555, false, false, false, false, false, false, false); - box-shadow: compact(1px 0 0 #555555, inset 1px 0 0 #555555, false, false, false, false, false, false, false); - color: #797979; - display: block; - float: left; - line-height: 46px; - margin-left: 0; - padding: 0 11.326px; - text-indent: -9999px; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); - width: 30px; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls a.add-fullscreen:hover { - background-color: #444; - color: #fff; - text-decoration: none; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls a.hide-subtitles { - background: url("../images/cc.png") center no-repeat; - color: #797979; - display: block; - float: left; - font-weight: 800; - line-height: 46px; - margin-left: 0; - opacity: 1; - padding: 0 11.326px; - position: relative; - text-indent: -9999px; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); - -webkit-font-smoothing: antialiased; - width: 30px; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls a.hide-subtitles:hover { - background-color: #444; - color: #fff; - text-decoration: none; } - section.course-content div.video article.video-wrapper section.video-controls div.secondary-controls a.hide-subtitles.off { - opacity: .7; } - section.course-content div.video article.video-wrapper:hover section.video-controls ul, section.course-content div.video article.video-wrapper:hover section.video-controls div { - opacity: 1; } - section.course-content div.video article.video-wrapper:hover section.video-controls div.slider { - height: 14px; - margin-top: -7px; } - section.course-content div.video article.video-wrapper:hover section.video-controls div.slider a.ui-slider-handle { - -webkit-border-radius: 20px; - -moz-border-radius: 20px; - -ms-border-radius: 20px; - -o-border-radius: 20px; - border-radius: 20px; - height: 20px; - margin-left: -10px; - top: -4px; - width: 20px; } - section.course-content div.video ol.subtitles { - float: left; - max-height: 460px; - overflow: auto; - width: 31.522%; } - section.course-content div.video ol.subtitles li { - border: 0; - color: #666; - cursor: pointer; - margin-bottom: 8px; - padding: 0; } - section.course-content div.video ol.subtitles li.current { - color: #333; - font-weight: 700; } - section.course-content div.video ol.subtitles li:hover { - color: #993333; } - section.course-content div.video ol.subtitles li:empty { - margin-bottom: 0px; } - section.course-content div.video.closed article.video-wrapper { - width: 100%; } - section.course-content div.video.closed ol.subtitles { - width: 0px; } - section.course-content div.video.fullscreen { - background: rgba(0, 0, 0, 0.95); - border: 0; - bottom: 0; - height: 100%; - left: 0; - margin: 0; - max-height: 100%; - overflow: hidden; - padding: 0; - position: fixed; - top: 0; - width: 100%; - z-index: 999; } - section.course-content div.video.fullscreen.closed ol.subtitles { - right: -31.984%; - width: auto; } - section.course-content div.video.fullscreen a.exit { - color: #aaa; - display: none; - font-style: 12px; - left: 20px; - letter-spacing: 1px; - position: absolute; - text-transform: uppercase; - top: 20px; } - section.course-content div.video.fullscreen a.exit::after { - content: "✖"; - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - padding-left: 6px; } - section.course-content div.video.fullscreen a.exit:hover { - color: #993333; } - section.course-content div.video.fullscreen div.tc-wrapper article.video-wrapper { - width: 100%; } - section.course-content div.video.fullscreen div.tc-wrapper object, section.course-content div.video.fullscreen div.tc-wrapper iframe { - bottom: 0; - height: 100%; - left: 0; - overflow: hidden; - position: fixed; - top: 0; } - section.course-content div.video.fullscreen div.tc-wrapper section.video-controls { - bottom: 0; - left: 0; - position: absolute; - width: 100%; - z-index: 9999; } - section.course-content div.video.fullscreen ol.subtitles { - background: rgba(0, 0, 0, 0.8); - bottom: 0; - height: 100%; - max-height: 100%; - max-width: 23.482%; - padding: 22.652px; - position: fixed; - right: 0; - top: 0; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); } - section.course-content div.video.fullscreen ol.subtitles li { - color: #aaa; } - section.course-content div.video.fullscreen ol.subtitles li.current { - color: #fff; } - -div.course-wrapper.closed section.course-content div.video ol.subtitles { - max-height: 577px; } - -section.tool-wrapper { - background: #073642; - border-bottom: 1px solid #000203; - border-top: 1px solid #000203; - -webkit-box-shadow: compact(inset 0 0 0 4px #084150, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 0 0 4px #084150, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 0 0 4px #084150, false, false, false, false, false, false, false, false); - color: #839496; - display: table; - margin: 22.652px -22.652px 0; } - section.tool-wrapper div#graph-container { - background: none; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - display: table-cell; - padding: 22.652px; - vertical-align: top; - width: 51.359%; } - section.tool-wrapper div#graph-container .ui-widget-content { - background: none; - border: none; - -webkit-border-radius: 0; - -moz-border-radius: 0; - -ms-border-radius: 0; - -o-border-radius: 0; - border-radius: 0; } - section.tool-wrapper div#graph-container canvas { - width: 100%; } - section.tool-wrapper div#graph-container ul.ui-tabs-nav { - background: #062e39; - border-bottom: 1px solid #03181d; - -webkit-border-radius: 0; - -moz-border-radius: 0; - -ms-border-radius: 0; - -o-border-radius: 0; - border-radius: 0; - margin: -22.652px -22.652px 0; - padding: 0; - position: relative; - width: 110%; } - section.tool-wrapper div#graph-container ul.ui-tabs-nav li { - background: none; - border: none; - -webkit-border-radius: 0; - -moz-border-radius: 0; - -ms-border-radius: 0; - -o-border-radius: 0; - border-radius: 0; - color: #fff; - margin-bottom: 0; } - section.tool-wrapper div#graph-container ul.ui-tabs-nav li.ui-tabs-selected { - background-color: #073642; - border-left: 1px solid #03181d; - border-right: 1px solid #03181d; } - section.tool-wrapper div#graph-container ul.ui-tabs-nav li.ui-tabs-selected:first-child { - border-left: none; } - section.tool-wrapper div#graph-container ul.ui-tabs-nav li.ui-tabs-selected a { - color: #eee8d5; } - section.tool-wrapper div#graph-container ul.ui-tabs-nav li a { - border: none; - color: #839496; - font: bold 12px "Open Sans", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; - letter-spacing: 1px; - text-transform: uppercase; } - section.tool-wrapper div#graph-container ul.ui-tabs-nav li a:hover { - color: #eee8d5; } - section.tool-wrapper div#controlls-container { - background: #062e39; - border-right: 1px solid #001317; - -webkit-box-shadow: compact(1px 0 0 #004355, inset 0 0 0 4px #06323d, false, false, false, false, false, false, false); - -moz-box-shadow: compact(1px 0 0 #004355, inset 0 0 0 4px #06323d, false, false, false, false, false, false, false); - box-shadow: compact(1px 0 0 #004355, inset 0 0 0 4px #06323d, false, false, false, false, false, false, false); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - display: table-cell; - padding: 22.652px; - vertical-align: top; - width: 48.641%; } - section.tool-wrapper div#controlls-container div.graph-controls div.music-wrapper { - border-bottom: 1px solid #021014; - -webkit-box-shadow: compact(0 1px 0 #083e4b, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(0 1px 0 #083e4b, false, false, false, false, false, false, false, false); - box-shadow: compact(0 1px 0 #083e4b, false, false, false, false, false, false, false, false); - margin-bottom: 22.652px; - padding: 0 0 22.652px; } - section.tool-wrapper div#controlls-container div.graph-controls div.music-wrapper input#playButton { - border-color: #001317; - border: 1px solid #3d5962; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: compact(inset 0 1px 0 0 #939da0, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 0 #939da0, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 0 #939da0, false, false, false, false, false, false, false, false); - color: white; - display: inline; - font-size: 11px; - font-weight: bold; - background-color: #637c84; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(100%, compact(#637c84, #43626b, false, false, false, false, false, false, false, false))); - background-image: -webkit-linear-gradient(top, compact(#637c84, #43626b, false, false, false, false, false, false, false, false)); - background-image: -moz-linear-gradient(top, compact(#637c84, #43626b, false, false, false, false, false, false, false, false)); - background-image: -ms-linear-gradient(top, compact(#637c84, #43626b, false, false, false, false, false, false, false, false)); - background-image: -o-linear-gradient(top, compact(#637c84, #43626b, false, false, false, false, false, false, false, false)); - background-image: linear-gradient(top, compact(#637c84, #43626b, false, false, false, false, false, false, false, false)); - padding: 6px 18px 7px; - text-shadow: 0 1px 0 #31505a; - -webkit-background-clip: padding-box; - display: block; - float: right; - font: bold 14px "Open Sans", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; } - section.tool-wrapper div#controlls-container div.graph-controls div.music-wrapper input#playButton:hover { - -webkit-box-shadow: compact(inset 0 1px 0 0 #778589, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 0 #778589, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 0 #778589, false, false, false, false, false, false, false, false); - cursor: pointer; - background-color: #5c6c71; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(100%, compact(#5c6c71, #3e5961, false, false, false, false, false, false, false, false))); - background-image: -webkit-linear-gradient(top, compact(#5c6c71, #3e5961, false, false, false, false, false, false, false, false)); - background-image: -moz-linear-gradient(top, compact(#5c6c71, #3e5961, false, false, false, false, false, false, false, false)); - background-image: -ms-linear-gradient(top, compact(#5c6c71, #3e5961, false, false, false, false, false, false, false, false)); - background-image: -o-linear-gradient(top, compact(#5c6c71, #3e5961, false, false, false, false, false, false, false, false)); - background-image: linear-gradient(top, compact(#5c6c71, #3e5961, false, false, false, false, false, false, false, false)); } - section.tool-wrapper div#controlls-container div.graph-controls div.music-wrapper input#playButton:active { - border: 1px solid #3d5962; - -webkit-box-shadow: compact(inset 0 0 8px 4px #395057, inset 0 0 8px 4px #395057, 0 1px 1px 0 #eeeeee, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 0 8px 4px #395057, inset 0 0 8px 4px #395057, 0 1px 1px 0 #eeeeee, false, false, false, false, false, false); - box-shadow: compact(inset 0 0 8px 4px #395057, inset 0 0 8px 4px #395057, 0 1px 1px 0 #eeeeee, false, false, false, false, false, false); } - section.tool-wrapper div#controlls-container div.graph-controls div.music-wrapper input#playButton:active { - -webkit-box-shadow: compact(none, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(none, false, false, false, false, false, false, false, false); - box-shadow: compact(none, false, false, false, false, false, false, false, false); } - section.tool-wrapper div#controlls-container div.graph-controls div.music-wrapper input#playButton[value="Stop"] { - border: 1px solid #030d15; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: compact(inset 0 1px 0 0 #215f8a, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 0 #215f8a, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 0 #215f8a, false, false, false, false, false, false, false, false); - color: white; - display: inline; - font-size: 11px; - font-weight: bold; - background-color: #0f3550; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(100%, compact(#0f3550, #041623, false, false, false, false, false, false, false, false))); - background-image: -webkit-linear-gradient(top, compact(#0f3550, #041623, false, false, false, false, false, false, false, false)); - background-image: -moz-linear-gradient(top, compact(#0f3550, #041623, false, false, false, false, false, false, false, false)); - background-image: -ms-linear-gradient(top, compact(#0f3550, #041623, false, false, false, false, false, false, false, false)); - background-image: -o-linear-gradient(top, compact(#0f3550, #041623, false, false, false, false, false, false, false, false)); - background-image: linear-gradient(top, compact(#0f3550, #041623, false, false, false, false, false, false, false, false)); - padding: 6px 18px 7px; - text-shadow: 0 1px 0 #000203; - -webkit-background-clip: padding-box; - font: bold 14px "Open Sans", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; } - section.tool-wrapper div#controlls-container div.graph-controls div.music-wrapper input#playButton[value="Stop"]:hover { - -webkit-box-shadow: compact(inset 0 1px 0 0 #174362, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 0 #174362, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 0 #174362, false, false, false, false, false, false, false, false); - cursor: pointer; - background-color: #0c2739; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(100%, compact(#0c2739, #030d15, false, false, false, false, false, false, false, false))); - background-image: -webkit-linear-gradient(top, compact(#0c2739, #030d15, false, false, false, false, false, false, false, false)); - background-image: -moz-linear-gradient(top, compact(#0c2739, #030d15, false, false, false, false, false, false, false, false)); - background-image: -ms-linear-gradient(top, compact(#0c2739, #030d15, false, false, false, false, false, false, false, false)); - background-image: -o-linear-gradient(top, compact(#0c2739, #030d15, false, false, false, false, false, false, false, false)); - background-image: linear-gradient(top, compact(#0c2739, #030d15, false, false, false, false, false, false, false, false)); } - section.tool-wrapper div#controlls-container div.graph-controls div.music-wrapper input#playButton[value="Stop"]:active { - border: 1px solid #030d15; - -webkit-box-shadow: compact(inset 0 0 8px 4px #010507, inset 0 0 8px 4px #010507, 0 1px 1px 0 #eeeeee, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 0 8px 4px #010507, inset 0 0 8px 4px #010507, 0 1px 1px 0 #eeeeee, false, false, false, false, false, false); - box-shadow: compact(inset 0 0 8px 4px #010507, inset 0 0 8px 4px #010507, 0 1px 1px 0 #eeeeee, false, false, false, false, false, false); } - section.tool-wrapper div#controlls-container div.graph-controls div.music-wrapper input#playButton[value="Stop"]:active { - -webkit-box-shadow: compact(none, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(none, false, false, false, false, false, false, false, false); - box-shadow: compact(none, false, false, false, false, false, false, false, false); } - section.tool-wrapper div#controlls-container div.graph-controls div.inputs-wrapper { - border-bottom: 1px solid #021014; - -webkit-box-shadow: compact(0 1px 0 #083e4b, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(0 1px 0 #083e4b, false, false, false, false, false, false, false, false); - box-shadow: compact(0 1px 0 #083e4b, false, false, false, false, false, false, false, false); - zoom: 1; - margin-bottom: 22.652px; - margin-bottom: 22.652px; - padding: 0 0 22.652px; } - section.tool-wrapper div#controlls-container div.graph-controls div.inputs-wrapper:before, section.tool-wrapper div#controlls-container div.graph-controls div.inputs-wrapper:after { - content: ""; - display: table; } - section.tool-wrapper div#controlls-container div.graph-controls div.inputs-wrapper:after { - clear: both; } - section.tool-wrapper div#controlls-container div.graph-controls p { - font-weight: bold; - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - margin: 0; - text-shadow: 0 -1px 0 #021014; - -webkit-font-smoothing: antialiased; } - section.tool-wrapper div#controlls-container div.graph-controls ul { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - margin-bottom: 0; } - section.tool-wrapper div#controlls-container div.graph-controls ul li { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - margin-bottom: 0; } - section.tool-wrapper div#controlls-container div.graph-controls ul li input { - margin-right: 5px; } - section.tool-wrapper div#controlls-container div.graph-controls div#graph-listen { - display: block; - float: left; - margin-bottom: 0; - margin-right: 20px; - margin-top: 8px; - text-align: right; } - section.tool-wrapper div#controlls-container label { - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - -ms-border-radius: 2px; - -o-border-radius: 2px; - border-radius: 2px; - color: #fff; - font-weight: bold; - padding: 3px; - -webkit-font-smoothing: antialiased; } - section.tool-wrapper div#controlls-container label[for="vinCheckbox"], section.tool-wrapper div#controlls-container label[for="vinRadioButton"] { - color: #409fbf; } - section.tool-wrapper div#controlls-container label[for="voutCheckbox"], section.tool-wrapper div#controlls-container label[for="voutRadioButton"] { - color: #e1a600; } - section.tool-wrapper div#controlls-container label[for="vrCheckbox"], section.tool-wrapper div#controlls-container label[for="vrRadioButton"] { - color: #49c944; } - section.tool-wrapper div#controlls-container label[for="vcCheckbox"], section.tool-wrapper div#controlls-container label[for="vcRadioButton"] { - color: #e1a600; } - section.tool-wrapper div#controlls-container label[for="vlCheckbox"], section.tool-wrapper div#controlls-container label[for="vlRadioButton"] { - color: #a26784; } - section.tool-wrapper div#controlls-container div.schematic-sliders div.top-sliders { - border-bottom: 1px solid #021014; - -webkit-box-shadow: compact(0 1px 0 #083e4b, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(0 1px 0 #083e4b, false, false, false, false, false, false, false, false); - box-shadow: compact(0 1px 0 #083e4b, false, false, false, false, false, false, false, false); - margin-bottom: 22.652px; - padding: 0 0 22.652px; } - section.tool-wrapper div#controlls-container div.schematic-sliders div.top-sliders select#musicTypeSelect { - font: 16px "Open Sans", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - margin-bottom: 0; } - section.tool-wrapper div#controlls-container div.schematic-sliders div.top-sliders p { - font-weight: bold; - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - margin: 0 11.326px 22.652px 0; - text-shadow: 0 -1px 0 #021014; - -webkit-font-smoothing: antialiased; } - section.tool-wrapper div#controlls-container div.schematic-sliders div.slider-label { - font-weight: bold; - margin-bottom: 11.326px; - text-shadow: 0 -1px 0 #021014; - -webkit-font-smoothing: antialiased; } - section.tool-wrapper div#controlls-container div.schematic-sliders div.slider { - margin-bottom: 22.652px; } - section.tool-wrapper div#controlls-container div.schematic-sliders div.slider.ui-slider-horizontal { - background: #00232c; - border: 1px solid #000b0d; - -webkit-box-shadow: compact(none, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(none, false, false, false, false, false, false, false, false); - box-shadow: compact(none, false, false, false, false, false, false, false, false); - height: 0.4em; } - section.tool-wrapper div#controlls-container div.schematic-sliders div.slider .ui-slider-handle { - background: #637c84 url("../images/amplifier-slider-handle.png") center no-repeat; - border: 1px solid #000b0d; - -webkit-box-shadow: compact(inset 0 1px 0 #8ba1a8, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 #8ba1a8, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 #8ba1a8, false, false, false, false, false, false, false, false); - margin-top: -0.3em; } - section.tool-wrapper div#controlls-container div.schematic-sliders div.slider .ui-slider-handle:hover, section.tool-wrapper div#controlls-container div.schematic-sliders div.slider .ui-slider-handle:active { - background-color: #6e8992; } - -section.problem-set, div.course-wrapper section.course-content section.problems-wrapper, section.problems-wrapper { - position: relative; } - section.problem-set h2, div.course-wrapper section.course-content section.problems-wrapper h2, section.problems-wrapper h2 { - margin-top: 0; - margin-bottom: 15px; - width: 20.109%; - padding-right: 2.717%; - border-right: 1px dashed #ddd; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - display: table-cell; - vertical-align: top; } - section.problem-set h2.problem-header section.staff, div.course-wrapper section.course-content section.problems-wrapper h2.problem-header section.staff, section.problems-wrapper h2.problem-header section.staff { - margin-top: 30px; - font-size: 80%; } - @media screen and (max-width:1120px) { - section.problem-set h2, div.course-wrapper section.course-content section.problems-wrapper h2, section.problems-wrapper h2 { - display: block; - width: auto; - border-right: 0; } } - @media print { - section.problem-set h2, div.course-wrapper section.course-content section.problems-wrapper h2, section.problems-wrapper h2 { - display: block; - width: auto; - border-right: 0; } } - section.problem-set section.problem, div.course-wrapper section.course-content section.problems-wrapper section.problem, section.problems-wrapper section.problem { - display: table-cell; - width: 77.174%; - padding-left: 2.717%; } - @media screen and (max-width:1120px) { - section.problem-set section.problem, div.course-wrapper section.course-content section.problems-wrapper section.problem, section.problems-wrapper section.problem { - display: block; - width: auto; - padding: 0; } } - @media print { - section.problem-set section.problem, div.course-wrapper section.course-content section.problems-wrapper section.problem, section.problems-wrapper section.problem { - display: block; - width: auto; - padding: 0; } - section.problem-set section.problem canvas, div.course-wrapper section.course-content section.problems-wrapper section.problem canvas, section.problems-wrapper section.problem canvas, section.problem-set section.problem img, div.course-wrapper section.course-content section.problems-wrapper section.problem img, section.problems-wrapper section.problem img { - page-break-inside: avoid; } } - section.problem-set section.problem div p.status, div.course-wrapper section.course-content section.problems-wrapper section.problem div p.status, section.problems-wrapper section.problem div p.status { - text-indent: -9999px; - margin: -1px 0 0 10px; } - section.problem-set section.problem div.unanswered p.status, div.course-wrapper section.course-content section.problems-wrapper section.problem div.unanswered p.status, section.problems-wrapper section.problem div.unanswered p.status { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - background: url("../images/unanswered-icon.png") center center no-repeat; - height: 14px; - width: 14px; } - section.problem-set section.problem div.correct p.status, div.course-wrapper section.course-content section.problems-wrapper section.problem div.correct p.status, section.problems-wrapper section.problem div.correct p.status, section.problem-set section.problem div.ui-icon-check p.status, div.course-wrapper section.course-content section.problems-wrapper section.problem div.ui-icon-check p.status, section.problems-wrapper section.problem div.ui-icon-check p.status { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - background: url("../images/correct-icon.png") center center no-repeat; - height: 20px; - width: 25px; } - section.problem-set section.problem div.correct input, div.course-wrapper section.course-content section.problems-wrapper section.problem div.correct input, section.problems-wrapper section.problem div.correct input, section.problem-set section.problem div.ui-icon-check input, div.course-wrapper section.course-content section.problems-wrapper section.problem div.ui-icon-check input, section.problems-wrapper section.problem div.ui-icon-check input { - border-color: green; } - section.problem-set section.problem div.incorrect p.status, div.course-wrapper section.course-content section.problems-wrapper section.problem div.incorrect p.status, section.problems-wrapper section.problem div.incorrect p.status, section.problem-set section.problem div.ui-icon-close p.status, div.course-wrapper section.course-content section.problems-wrapper section.problem div.ui-icon-close p.status, section.problems-wrapper section.problem div.ui-icon-close p.status { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - background: url("../images/incorrect-icon.png") center center no-repeat; - height: 20px; - width: 20px; - text-indent: -9999px; } - section.problem-set section.problem div.incorrect input, div.course-wrapper section.course-content section.problems-wrapper section.problem div.incorrect input, section.problems-wrapper section.problem div.incorrect input, section.problem-set section.problem div.ui-icon-close input, div.course-wrapper section.course-content section.problems-wrapper section.problem div.ui-icon-close input, section.problems-wrapper section.problem div.ui-icon-close input { - border-color: red; } - section.problem-set section.problem div > span, div.course-wrapper section.course-content section.problems-wrapper section.problem div > span, section.problems-wrapper section.problem div > span { - display: block; - margin-bottom: 11.326px; } - section.problem-set section.problem div p.answer, div.course-wrapper section.course-content section.problems-wrapper section.problem div p.answer, section.problems-wrapper section.problem div p.answer { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - margin-bottom: 0; - margin-left: 10px; } - section.problem-set section.problem div p.answer:before, div.course-wrapper section.course-content section.problems-wrapper section.problem div p.answer:before, section.problems-wrapper section.problem div p.answer:before { - content: "Answer: "; - font-weight: bold; - display: inline; } - section.problem-set section.problem div p.answer:empty:before, div.course-wrapper section.course-content section.problems-wrapper section.problem div p.answer:empty:before, section.problems-wrapper section.problem div p.answer:empty:before { - display: none; } - section.problem-set section.problem div div.equation, div.course-wrapper section.course-content section.problems-wrapper section.problem div div.equation, section.problems-wrapper section.problem div div.equation { - clear: both; - padding: 6px; - background: #eee; } - section.problem-set section.problem div div.equation span, div.course-wrapper section.course-content section.problems-wrapper section.problem div div.equation span, section.problems-wrapper section.problem div div.equation span { - margin-bottom: 0; } - section.problem-set section.problem div span.unanswered, div.course-wrapper section.course-content section.problems-wrapper section.problem div span.unanswered, section.problems-wrapper section.problem div span.unanswered, section.problem-set section.problem div span.ui-icon-bullet, div.course-wrapper section.course-content section.problems-wrapper section.problem div span.ui-icon-bullet, section.problems-wrapper section.problem div span.ui-icon-bullet { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - background: url("../images/unanswered-icon.png") center center no-repeat; - height: 14px; - position: relative; - top: 4px; - width: 14px; } - section.problem-set section.problem div span.correct, div.course-wrapper section.course-content section.problems-wrapper section.problem div span.correct, section.problems-wrapper section.problem div span.correct, section.problem-set section.problem div span.ui-icon-check, div.course-wrapper section.course-content section.problems-wrapper section.problem div span.ui-icon-check, section.problems-wrapper section.problem div span.ui-icon-check { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - background: url("../images/correct-icon.png") center center no-repeat; - height: 20px; - position: relative; - top: 6px; - width: 25px; } - section.problem-set section.problem div span.incorrect, div.course-wrapper section.course-content section.problems-wrapper section.problem div span.incorrect, section.problems-wrapper section.problem div span.incorrect, section.problem-set section.problem div span.ui-icon-close, div.course-wrapper section.course-content section.problems-wrapper section.problem div span.ui-icon-close, section.problems-wrapper section.problem div span.ui-icon-close { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - background: url("../images/incorrect-icon.png") center center no-repeat; - height: 20px; - width: 20px; - position: relative; - top: 6px; } - section.problem-set section.problem ul, div.course-wrapper section.course-content section.problems-wrapper section.problem ul, section.problems-wrapper section.problem ul { - list-style: disc outside none; - margin-bottom: 22.652px; - margin-left: .75em; - margin-left: .75rem; } - section.problem-set section.problem ol, div.course-wrapper section.course-content section.problems-wrapper section.problem ol, section.problems-wrapper section.problem ol { - list-style: decimal outside none; - margin-bottom: 22.652px; - margin-left: .75em; - margin-left: .75rem; } - section.problem-set section.problem dl, div.course-wrapper section.course-content section.problems-wrapper section.problem dl, section.problems-wrapper section.problem dl { - line-height: 1.4em; } - section.problem-set section.problem dl dt, div.course-wrapper section.course-content section.problems-wrapper section.problem dl dt, section.problems-wrapper section.problem dl dt { - font-weight: bold; } - section.problem-set section.problem dl dd, div.course-wrapper section.course-content section.problems-wrapper section.problem dl dd, section.problems-wrapper section.problem dl dd { - margin-bottom: 0; } - section.problem-set section.problem dd, div.course-wrapper section.course-content section.problems-wrapper section.problem dd, section.problems-wrapper section.problem dd { - margin-left: .5em; - margin-left: .5rem; } - section.problem-set section.problem li, div.course-wrapper section.course-content section.problems-wrapper section.problem li, section.problems-wrapper section.problem li { - line-height: 1.4em; - margin-bottom: 11.326px; } - section.problem-set section.problem li:last-child, div.course-wrapper section.course-content section.problems-wrapper section.problem li:last-child, section.problems-wrapper section.problem li:last-child { - margin-bottom: 0; } - section.problem-set section.problem p, div.course-wrapper section.course-content section.problems-wrapper section.problem p, section.problems-wrapper section.problem p { - margin-bottom: 22.652px; } - section.problem-set section.problem table, div.course-wrapper section.course-content section.problems-wrapper section.problem table, section.problems-wrapper section.problem table { - margin-bottom: 22.652px; - width: 100%; - border-collapse: collapse; } - section.problem-set section.problem table th, div.course-wrapper section.course-content section.problems-wrapper section.problem table th, section.problems-wrapper section.problem table th { - font-weight: bold; - text-align: left; } - section.problem-set section.problem table caption, div.course-wrapper section.course-content section.problems-wrapper section.problem table caption, section.problems-wrapper section.problem table caption, section.problem-set section.problem table th, div.course-wrapper section.course-content section.problems-wrapper section.problem table th, section.problems-wrapper section.problem table th, section.problem-set section.problem table td, div.course-wrapper section.course-content section.problems-wrapper section.problem table td, section.problems-wrapper section.problem table td { - padding: .25em .75em .25em 0; - padding: .25rem .75rem .25rem 0; } - section.problem-set section.problem table caption, div.course-wrapper section.course-content section.problems-wrapper section.problem table caption, section.problems-wrapper section.problem table caption { - background: #f1f1f1; - margin-bottom: .75em; - margin-bottom: .75rem; - padding: .75em 0; - padding: .75rem 0; } - section.problem-set section.problem table tr, div.course-wrapper section.course-content section.problems-wrapper section.problem table tr, section.problems-wrapper section.problem table tr, section.problem-set section.problem table td, div.course-wrapper section.course-content section.problems-wrapper section.problem table td, section.problems-wrapper section.problem table td, section.problem-set section.problem table th, div.course-wrapper section.course-content section.problems-wrapper section.problem table th, section.problems-wrapper section.problem table th { - vertical-align: middle; } - section.problem-set section.problem hr, div.course-wrapper section.course-content section.problems-wrapper section.problem hr, section.problems-wrapper section.problem hr { - background: #ddd; - border: none; - clear: both; - color: #ddd; - float: none; - height: 1px; - margin: 0 0 .75rem; - width: 100%; } - section.problem-set section.problem .hidden, div.course-wrapper section.course-content section.problems-wrapper section.problem .hidden, section.problems-wrapper section.problem .hidden { - display: none; - visibility: hidden; } - section.problem-set section.problem input[type="email"], div.course-wrapper section.course-content section.problems-wrapper section.problem input[type="email"], section.problems-wrapper section.problem input[type="email"], section.problem-set section.problem input[type="number"], div.course-wrapper section.course-content section.problems-wrapper section.problem input[type="number"], section.problems-wrapper section.problem input[type="number"], section.problem-set section.problem input[type="password"], div.course-wrapper section.course-content section.problems-wrapper section.problem input[type="password"], section.problems-wrapper section.problem input[type="password"], section.problem-set section.problem input[type="search"], div.course-wrapper section.course-content section.problems-wrapper section.problem input[type="search"], section.problems-wrapper section.problem input[type="search"], section.problem-set section.problem input[type="tel"], div.course-wrapper section.course-content section.problems-wrapper section.problem input[type="tel"], section.problems-wrapper section.problem input[type="tel"], section.problem-set section.problem input[type="text"], div.course-wrapper section.course-content section.problems-wrapper section.problem input[type="text"], section.problems-wrapper section.problem input[type="text"], section.problem-set section.problem input[type="url"], div.course-wrapper section.course-content section.problems-wrapper section.problem input[type="url"], section.problems-wrapper section.problem input[type="url"], section.problem-set section.problem input[type="color"], div.course-wrapper section.course-content section.problems-wrapper section.problem input[type="color"], section.problems-wrapper section.problem input[type="color"], section.problem-set section.problem input[type="date"], div.course-wrapper section.course-content section.problems-wrapper section.problem input[type="date"], section.problems-wrapper section.problem input[type="date"], section.problem-set section.problem input[type="datetime"], div.course-wrapper section.course-content section.problems-wrapper section.problem input[type="datetime"], section.problems-wrapper section.problem input[type="datetime"], section.problem-set section.problem input[type="datetime-local"], div.course-wrapper section.course-content section.problems-wrapper section.problem input[type="datetime-local"], section.problems-wrapper section.problem input[type="datetime-local"], section.problem-set section.problem input[type="month"], div.course-wrapper section.course-content section.problems-wrapper section.problem input[type="month"], section.problems-wrapper section.problem input[type="month"], section.problem-set section.problem input[type="time"], div.course-wrapper section.course-content section.problems-wrapper section.problem input[type="time"], section.problems-wrapper section.problem input[type="time"], section.problem-set section.problem input[type="week"], div.course-wrapper section.course-content section.problems-wrapper section.problem input[type="week"], section.problems-wrapper section.problem input[type="week"] { - display: inline; - width: auto; } - section.problem-set section.problem center, div.course-wrapper section.course-content section.problems-wrapper section.problem center, section.problems-wrapper section.problem center { - display: block; - margin: 22.652px 0; - border: 1px solid #ccc; - padding: 22.652px; } - section.problem-set section.action, div.course-wrapper section.course-content section.problems-wrapper section.action, section.problems-wrapper section.action { - margin-top: 11.326px; } - section.problem-set section.action input[type="button"], div.course-wrapper section.course-content section.problems-wrapper section.action input[type="button"], section.problems-wrapper section.action input[type="button"] { - padding: 9.061px 22.652px; - text-shadow: 0 -1px 0 #666666; } - -section.problems-wrapper { - display: table; - width: 100%; } - @media screen and (max-width:1120px) { - section.problems-wrapper { - display: block; - width: auto; } } diff --git a/lms/static/css/course/old/marketing-ie.css b/lms/static/css/course/old/marketing-ie.css deleted file mode 100644 index 18d829fdeb..0000000000 --- a/lms/static/css/course/old/marketing-ie.css +++ /dev/null @@ -1,10 +0,0 @@ -body { - margin: 0; - padding: 0; } - -.wrapper, .subpage, section.copyright, section.tos, section.privacy-policy, section.honor-code, header.announcement div, section.index-content, footer { - margin: 0; - overflow: hidden; } - -div#enroll form { - display: none; } diff --git a/lms/static/css/course/old/marketing.css b/lms/static/css/course/old/marketing.css deleted file mode 100644 index 5e2e01d8d3..0000000000 --- a/lms/static/css/course/old/marketing.css +++ /dev/null @@ -1,1017 +0,0 @@ -/* -html5doctor.com Reset Stylesheet -v1.6.1 -Last Updated: 2010-09-17 -Author: Richard Clark - http://richclarkdesign.com -Twitter: @rich_clark -*/ -html, body, div, span, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -abbr, address, cite, code, -del, dfn, em, img, ins, kbd, q, samp, -small, strong, var, -b, i, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, figcaption, figure, -footer, header, hgroup, menu, nav, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - outline: 0; - font-size: 100%; - vertical-align: baseline; - background: transparent; } - -body { - line-height: 1; } - -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; } - -nav ul { - list-style: none; } - -blockquote, q { - quotes: none; } - -blockquote:before, blockquote:after, -q:before, q:after { - content: ''; - content: none; } - -a { - margin: 0; - padding: 0; - font-size: 100%; - vertical-align: baseline; - background: transparent; } - -/* change colours to suit your needs */ -ins { - background-color: #ff9; - color: #000; - text-decoration: none; } - -/* change colours to suit your needs */ -mark { - background-color: #ff9; - color: #000; - font-style: italic; - font-weight: bold; } - -del { - text-decoration: line-through; } - -abbr[title], dfn[title] { - border-bottom: 1px dotted; - cursor: help; } - -table { - border-collapse: collapse; - border-spacing: 0; } - -/* change border colour to suit your needs */ -hr { - display: block; - height: 1px; - border: 0; - border-top: 1px solid #cccccc; - margin: 1em 0; - padding: 0; } - -input, select { - vertical-align: middle; } - -/* Generated by Font Squirrel (http://www.fontsquirrel.com) on January 25, 2012 05:06:34 PM America/New_York */ -@font-face { - font-family: 'Open Sans'; - src: url("../fonts/OpenSans-Regular-webfont.eot"); - src: url("../fonts/OpenSans-Regular-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-Regular-webfont.woff") format("woff"), url("../fonts/OpenSans-Regular-webfont.ttf") format("truetype"), url("../fonts/OpenSans-Regular-webfont.svg#OpenSansRegular") format("svg"); - font-weight: 600; - font-style: normal; } - -@font-face { - font-family: 'Open Sans'; - src: url("../fonts/OpenSans-Italic-webfont.eot"); - src: url("../fonts/OpenSans-Italic-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-Italic-webfont.woff") format("woff"), url("../fonts/OpenSans-Italic-webfont.ttf") format("truetype"), url("../fonts/OpenSans-Italic-webfont.svg#OpenSansItalic") format("svg"); - font-weight: 400; - font-style: italic; } - -@font-face { - font-family: 'Open Sans'; - src: url("../fonts/OpenSans-Bold-webfont.eot"); - src: url("../fonts/OpenSans-Bold-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-Bold-webfont.woff") format("woff"), url("../fonts/OpenSans-Bold-webfont.ttf") format("truetype"), url("../fonts/OpenSans-Bold-webfont.svg#OpenSansBold") format("svg"); - font-weight: 700; - font-style: normal; } - -@font-face { - font-family: 'Open Sans'; - src: url("../fonts/OpenSans-BoldItalic-webfont.eot"); - src: url("../fonts/OpenSans-BoldItalic-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-BoldItalic-webfont.woff") format("woff"), url("../fonts/OpenSans-BoldItalic-webfont.ttf") format("truetype"), url("../fonts/OpenSans-BoldItalic-webfont.svg#OpenSansBoldItalic") format("svg"); - font-weight: 700; - font-style: italic; } - -@font-face { - font-family: 'Open Sans'; - src: url("../fonts/OpenSans-ExtraBold-webfont.eot"); - src: url("../fonts/OpenSans-ExtraBold-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-ExtraBold-webfont.woff") format("woff"), url("../fonts/OpenSans-ExtraBold-webfont.ttf") format("truetype"), url("../fonts/OpenSans-ExtraBold-webfont.svg#OpenSansExtrabold") format("svg"); - font-weight: 800; - font-style: normal; } - -@font-face { - font-family: 'Open Sans'; - src: url("../fonts/OpenSans-ExtraBoldItalic-webfont.eot"); - src: url("../fonts/OpenSans-ExtraBoldItalic-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-ExtraBoldItalic-webfont.woff") format("woff"), url("../fonts/OpenSans-ExtraBoldItalic-webfont.ttf") format("truetype"), url("../fonts/OpenSans-ExtraBoldItalic-webfont.svg#OpenSansExtraboldItalic") format("svg"); - font-weight: 800; - font-style: italic; } - -.wrapper, .subpage, section.copyright, section.tos, section.privacy-policy, section.honor-code, header.announcement div, footer, section.index-content { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - margin: 0 auto; - max-width: 1400px; - padding: 25.888px; - width: 100%; } - -.subpage > div, section.copyright > div, section.tos > div, section.privacy-policy > div, section.honor-code > div { - padding-left: 34.171%; } - @media screen and (max-width: 940px) { - .subpage > div, section.copyright > div, section.tos > div, section.privacy-policy > div, section.honor-code > div { - padding-left: 0; } } - .subpage > div p, section.copyright > div p, section.tos > div p, section.privacy-policy > div p, section.honor-code > div p { - margin-bottom: 25.888px; - line-height: 25.888px; } - .subpage > div h1, section.copyright > div h1, section.tos > div h1, section.privacy-policy > div h1, section.honor-code > div h1 { - margin-bottom: 12.944px; } - .subpage > div h2, section.copyright > div h2, section.tos > div h2, section.privacy-policy > div h2, section.honor-code > div h2 { - font: 18px "Open Sans", Helvetica, Arial, sans-serif; - color: #000; - margin-bottom: 12.944px; } - .subpage > div ul, section.copyright > div ul, section.tos > div ul, section.privacy-policy > div ul, section.honor-code > div ul { - list-style: disc outside none; } - .subpage > div ul li, section.copyright > div ul li, section.tos > div ul li, section.privacy-policy > div ul li, section.honor-code > div ul li { - list-style: disc outside none; - line-height: 25.888px; } - .subpage > div dl, section.copyright > div dl, section.tos > div dl, section.privacy-policy > div dl, section.honor-code > div dl { - margin-bottom: 25.888px; } - .subpage > div dl dd, section.copyright > div dl dd, section.tos > div dl dd, section.privacy-policy > div dl dd, section.honor-code > div dl dd { - margin-bottom: 12.944px; } - -.clearfix:after, .subpage:after, section.copyright:after, section.tos:after, section.privacy-policy:after, section.honor-code:after, header.announcement div section:after, footer:after, section.index-content:after, section.index-content section:after, section.index-content section.about section:after, div.leanModal_box#enroll ol:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; } - -.button, header.announcement div section.course section a, section.index-content section.course a, section.index-content section.staff a, section.index-content section.about-course section.cta a.enroll { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); - background-color: #993333; - border: 1px solid #732626; - color: #fff; - margin: 25.888px 0 12.944px; - padding: 6.472px 12.944px; - text-decoration: none; - font-style: normal; - -webkit-box-shadow: compact(inset 0 1px 0 #b83d3d, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 #b83d3d, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 #b83d3d, false, false, false, false, false, false, false, false); - -webkit-font-smoothing: antialiased; } - .button:hover, header.announcement div section.course section a:hover, section.index-content section.course a:hover, section.index-content section.staff a:hover, section.index-content section.about-course section.cta a.enroll:hover { - background-color: #732626; - border-color: #4d1919; } - .button span, header.announcement div section.course section a span, section.index-content section.course a span, section.index-content section.staff a span, section.index-content section.about-course section.cta a.enroll span { - font-family: Garamond, Baskerville, "Baskerville Old Face", "Hoefler Text", "Times New Roman", serif; - font-style: italic; } - -p.ie-warning { - display: block !important; - line-height: 1.3em; - background: yellow; - margin-bottom: 25.888px; - padding: 25.888px; } - -body { - background-color: #fff; - color: #444; - font: 16px Georgia, serif; } - body :focus { - outline-color: #ccc; } - body h1 { - font: 800 24px "Open Sans", Helvetica, Arial, sans-serif; } - body li { - margin-bottom: 25.888px; } - body em { - font-style: italic; } - body a { - color: #993333; - font-style: italic; - text-decoration: none; } - body a:hover, body a:focus { - color: #732626; } - body input[type="email"], body input[type="number"], body input[type="password"], body input[type="search"], body input[type="tel"], body input[type="text"], body input[type="url"], body input[type="color"], body input[type="date"], body input[type="datetime"], body input[type="datetime-local"], body input[type="month"], body input[type="time"], body input[type="week"], body textarea { - -webkit-box-shadow: compact(0 -1px 0 white, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(0 -1px 0 white, false, false, false, false, false, false, false, false); - box-shadow: compact(0 -1px 0 white, false, false, false, false, false, false, false, false); - background-color: #eeeeee; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(100%, compact(#eeeeee, white, false, false, false, false, false, false, false, false))); - background-image: -webkit-linear-gradient(top, compact(#eeeeee, white, false, false, false, false, false, false, false, false)); - background-image: -moz-linear-gradient(top, compact(#eeeeee, white, false, false, false, false, false, false, false, false)); - background-image: -ms-linear-gradient(top, compact(#eeeeee, white, false, false, false, false, false, false, false, false)); - background-image: -o-linear-gradient(top, compact(#eeeeee, white, false, false, false, false, false, false, false, false)); - background-image: linear-gradient(top, compact(#eeeeee, white, false, false, false, false, false, false, false, false)); - border: 1px solid #999; - font: 16px Georgia, serif; - padding: 4px; - width: 100%; } - body input[type="email"]:focus, body input[type="number"]:focus, body input[type="password"]:focus, body input[type="search"]:focus, body input[type="tel"]:focus, body input[type="text"]:focus, body input[type="url"]:focus, body input[type="color"]:focus, body input[type="date"]:focus, body input[type="datetime"]:focus, body input[type="datetime-local"]:focus, body input[type="month"]:focus, body input[type="time"]:focus, body input[type="week"]:focus, body textarea:focus { - border-color: #993333; } - -header.announcement { - -webkit-background-size: compact(cover, false, false, false, false, false, false, false, false); - -moz-background-size: compact(cover, false, false, false, false, false, false, false, false); - -ms-background-size: compact(cover, false, false, false, false, false, false, false, false); - -o-background-size: compact(cover, false, false, false, false, false, false, false, false); - background-size: compact(cover, false, false, false, false, false, false, false, false); - background: #333; - border-bottom: 1px solid #000; - color: #fff; - -webkit-font-smoothing: antialiased; } - header.announcement.home { - background: #e3e3e3 url("../images/marketing/shot-5-medium.jpg"); } - @media screen and (min-width: 1200px) { - header.announcement.home { - background: #e3e3e3 url("../images/marketing/shot-5-large.jpg"); } } - header.announcement.home div { - padding: 258.88px 25.888px 77.664px; } - @media screen and (max-width:780px) { - header.announcement.home div { - padding: 64.72px 25.888px 51.776px; } } - header.announcement.home div nav h1 { - margin-right: 0; } - header.announcement.home div nav a.login { - display: none; } - header.announcement.course { - background: #e3e3e3 url("../images/marketing/course-bg-small.jpg"); } - @media screen and (min-width: 1200px) { - header.announcement.course { - background: #e3e3e3 url("../images/marketing/course-bg-large.jpg"); } } - @media screen and (max-width: 1199px) and (min-width: 700px) { - header.announcement.course { - background: #e3e3e3 url("../images/marketing/course-bg-medium.jpg"); } } - header.announcement.course div { - padding: 103.552px 25.888px 51.776px; } - @media screen and (max-width:780px) { - header.announcement.course div { - padding: 64.72px 25.888px 51.776px; } } - header.announcement div { - position: relative; } - header.announcement div nav { - position: absolute; - top: 0; - right: 25.888px; - -webkit-border-radius: 0 0 3px 3px; - -moz-border-radius: 0 0 3px 3px; - -ms-border-radius: 0 0 3px 3px; - -o-border-radius: 0 0 3px 3px; - border-radius: 0 0 3px 3px; - background: #333; - background: rgba(0, 0, 0, 0.7); - padding: 12.944px 25.888px; } - header.announcement div nav h1 { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - margin-right: 12.944px; } - header.announcement div nav h1 a { - font: italic 800 18px "Open Sans", Helvetica, Arial, sans-serif; - color: #fff; - text-decoration: none; } - header.announcement div nav h1 a:hover, header.announcement div nav h1 a:focus { - color: #999; } - header.announcement div nav a.login { - text-decoration: none; - color: #fff; - font-size: 12px; - font-style: normal; - font-family: "Open Sans", Helvetica, Arial, sans-serif; } - header.announcement div nav a.login:hover, header.announcement div nav a.login:focus { - color: #999; } - header.announcement div section { - background: #993333; - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - margin-left: 34.171%; - padding: 25.888px 38.832px; } - @media screen and (max-width: 780px) { - header.announcement div section { - margin-left: 0; } } - header.announcement div section h1 { - font-family: "Open Sans"; - font-size: 30px; - font-weight: 800; - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - line-height: 1.2em; - margin: 0 25.888px 0 0; } - header.announcement div section h2 { - font-family: "Open Sans"; - font-size: 24px; - font-weight: 400; - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - line-height: 1.2em; } - header.announcement div section.course section { - float: left; - margin-left: 0; - margin-right: 3.817%; - padding: 0; - width: 48.092%; } - @media screen and (max-width: 780px) { - header.announcement div section.course section { - float: none; - width: 100%; - margin-right: 0; } } - header.announcement div section.course section a { - background-color: #4d1919; - border-color: #260d0d; - -webkit-box-shadow: compact(inset 0 1px 0 #732626, 0 1px 0 #ac3939, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 #732626, 0 1px 0 #ac3939, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 #732626, 0 1px 0 #ac3939, false, false, false, false, false, false, false); - display: block; - padding: 12.944px 25.888px; - text-align: center; } - header.announcement div section.course section a:hover { - background-color: #732626; - border-color: #4d1919; } - header.announcement div section.course p { - width: 48.092%; - line-height: 25.888px; - float: left; } - @media screen and (max-width: 780px) { - header.announcement div section.course p { - float: none; - width: 100%; } } - -footer { - padding-top: 0; } - footer div.footer-wrapper { - border-top: 1px solid #e5e5e5; - padding: 25.888px 0; - background: url("../images/marketing/mit-logo.png") right center no-repeat; } - @media screen and (max-width: 780px) { - footer div.footer-wrapper { - background-position: left bottom; - padding-bottom: 77.664px; } } - footer div.footer-wrapper a { - color: #888; - text-decoration: none; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); } - footer div.footer-wrapper a:hover, footer div.footer-wrapper a:focus { - color: #666; } - footer div.footer-wrapper p { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - margin-right: 25.888px; } - footer div.footer-wrapper ul { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; } - @media screen and (max-width: 780px) { - footer div.footer-wrapper ul { - margin-top: 25.888px; } } - footer div.footer-wrapper ul li { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - margin-bottom: 0; } - footer div.footer-wrapper ul li:after { - content: ' |'; - display: inline; - color: #ccc; } - footer div.footer-wrapper ul li:last-child:after { - content: none; } - footer div.footer-wrapper ul.social { - float: right; - margin-right: 60px; - position: relative; - top: -5px; } - @media screen and (max-width: 780px) { - footer div.footer-wrapper ul.social { - float: none; } } - footer div.footer-wrapper ul.social li { - float: left; - margin-right: 12.944px; } - footer div.footer-wrapper ul.social li:after { - content: none; - display: none; } - footer div.footer-wrapper ul.social li a { - display: block; - height: 29px; - width: 28px; - text-indent: -9999px; } - footer div.footer-wrapper ul.social li a:hover { - opacity: .8; } - footer div.footer-wrapper ul.social li.twitter a { - background: url("../images/marketing/twitter.png") 0 0 no-repeat; } - footer div.footer-wrapper ul.social li.facebook a { - background: url("../images/marketing/facebook.png") 0 0 no-repeat; } - footer div.footer-wrapper ul.social li.linkedin a { - background: url("../images/marketing/linkedin.png") 0 0 no-repeat; } - -section.index-content section { - float: left; } - @media screen and (max-width: 780px) { - section.index-content section { - float: none; - width: auto; - margin-right: 0; } } - section.index-content section h1 { - font-size: 800 24px "Open Sans"; - margin-bottom: 25.888px; } - section.index-content section p { - line-height: 25.888px; - margin-bottom: 25.888px; } - section.index-content section ul { - margin: 0; } - section.index-content section.about { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - border-right: 1px solid #e5e5e5; - margin-right: 2.513%; - padding-right: 1.256%; - width: 65.829%; } - @media screen and (max-width: 780px) { - section.index-content section.about { - width: 100%; - border-right: 0; - margin-right: 0; - padding-right: 0; } } - section.index-content section.about section { - margin-bottom: 25.888px; } - section.index-content section.about section p { - width: 48.092%; - float: left; } - @media screen and (max-width: 780px) { - section.index-content section.about section p { - float: none; - width: auto; } } - section.index-content section.about section p:nth-child(odd) { - margin-right: 3.817%; } - @media screen and (max-width: 780px) { - section.index-content section.about section p:nth-child(odd) { - margin-right: 0; } } - section.index-content section.about section.intro section { - margin-bottom: 0; } - section.index-content section.about section.intro section.intro-text { - margin-right: 3.817%; - width: 48.092%; } - @media screen and (max-width: 780px) { - section.index-content section.about section.intro section.intro-text { - margin-right: 0; - width: auto; } } - section.index-content section.about section.intro section.intro-text p { - margin-right: 0; - width: auto; - float: none; } - section.index-content section.about section.intro section.intro-video { - width: 48.092%; } - @media screen and (max-width: 780px) { - section.index-content section.about section.intro section.intro-video { - width: auto; } } - section.index-content section.about section.intro section.intro-video a { - display: block; - width: 100%; } - section.index-content section.about section.intro section.intro-video a img { - width: 100%; } - section.index-content section.about section.intro section.intro-video a span { - display: none; } - section.index-content section.about section.features { - border-top: 1px solid #E5E5E5; - padding-top: 25.888px; - margin-bottom: 0; } - section.index-content section.about section.features h2 { - text-transform: uppercase; - letter-spacing: 1px; - color: #888; - margin-bottom: 25.888px; - font-weight: normal; - font-size: 14px; } - section.index-content section.about section.features h2 span { - text-transform: none; } - section.index-content section.about section.features p { - width: auto; - clear: both; } - section.index-content section.about section.features p strong { - font-family: "Open sans"; - font-weight: 800; } - section.index-content section.about section.features p a { - color: #993333; - text-decoration: none; - -webkit-transition-property: compact(all, false, false, false, false, false, false, false, false); - -moz-transition-property: compact(all, false, false, false, false, false, false, false, false); - -ms-transition-property: compact(all, false, false, false, false, false, false, false, false); - -o-transition-property: compact(all, false, false, false, false, false, false, false, false); - transition-property: compact(all, false, false, false, false, false, false, false, false); - -webkit-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -moz-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -ms-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -o-transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - transition-duration: compact(0.15s, false, false, false, false, false, false, false, false); - -webkit-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -moz-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -ms-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -o-transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - transition-timing-function: compact(ease-out, false, false, false, false, false, false, false, false); - -webkit-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -moz-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -ms-transition-delay: compact(0, false, false, false, false, false, false, false, false); - -o-transition-delay: compact(0, false, false, false, false, false, false, false, false); - transition-delay: compact(0, false, false, false, false, false, false, false, false); } - section.index-content section.about section.features p a:hover, section.index-content section.about section.features p a:focus { - color: #602020; } - section.index-content section.about section.features ul { - margin-bottom: 0; } - section.index-content section.about section.features ul li { - line-height: 25.888px; - width: 48.092%; - float: left; - margin-bottom: 12.944px; } - @media screen and (max-width: 780px) { - section.index-content section.about section.features ul li { - width: auto; - float: none; } } - section.index-content section.about section.features ul li:nth-child(odd) { - margin-right: 3.817%; } - @media screen and (max-width: 780px) { - section.index-content section.about section.features ul li:nth-child(odd) { - margin-right: 0; } } - section.index-content section.course, section.index-content section.staff { - width: 31.658%; } - @media screen and (max-width: 780px) { - section.index-content section.course, section.index-content section.staff { - width: auto; } } - section.index-content section.course h1, section.index-content section.staff h1 { - color: #888; - font: normal 16px Georgia, serif; - font-size: 14px; - letter-spacing: 1px; - margin-bottom: 25.888px; - text-transform: uppercase; } - section.index-content section.course h2, section.index-content section.staff h2 { - font: 800 24px "Open Sans", Helvetica, Arial, sans-serif; } - section.index-content section.course h3, section.index-content section.staff h3 { - font: 400 18px "Open Sans", Helvetica, Arial, sans-serif; } - section.index-content section.course a span.arrow, section.index-content section.staff a span.arrow { - color: rgba(255, 255, 255, 0.6); - font-style: normal; - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - padding-left: 10px; } - section.index-content section.course ul, section.index-content section.staff ul { - list-style: none; } - section.index-content section.course ul li img, section.index-content section.staff ul li img { - float: left; - margin-right: 12.944px; } - section.index-content section.course h2 { - padding-top: 129.44px; - background: url("../images/marketing/circuits-bg.jpg") 0 0 no-repeat; - -webkit-background-size: compact(contain, false, false, false, false, false, false, false, false); - -moz-background-size: compact(contain, false, false, false, false, false, false, false, false); - -ms-background-size: compact(contain, false, false, false, false, false, false, false, false); - -o-background-size: compact(contain, false, false, false, false, false, false, false, false); - background-size: compact(contain, false, false, false, false, false, false, false, false); } - @media screen and (max-width: 998px) and (min-width: 781px) { - section.index-content section.course h2 { - background: url("../images/marketing/circuits-medium-bg.jpg") 0 0 no-repeat; } } - @media screen and (max-width: 780px) { - section.index-content section.course h2 { - padding-top: 129.44px; - background: url("../images/marketing/circuits-bg.jpg") 0 0 no-repeat; } } - @media screen and (min-width: 500px) and (max-width: 781px) { - section.index-content section.course h2 { - padding-top: 207.104px; } } - section.index-content section.course div.announcement p.announcement-button a { - margin-top: 0; } - section.index-content section.course div.announcement img { - max-width: 100%; - margin-bottom: 25.888px; } - section.index-content section.about-course { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - border-right: 1px solid #e5e5e5; - margin-right: 2.513%; - padding-right: 1.256%; - width: 65.829%; } - @media screen and (max-width: 780px) { - section.index-content section.about-course { - width: auto; - border-right: 0; - margin-right: 0; - padding-right: 0; } } - section.index-content section.about-course section { - width: 48.092%; } - @media screen and (max-width: 780px) { - section.index-content section.about-course section { - width: auto; } } - section.index-content section.about-course section.about-info { - margin-right: 3.817%; } - @media screen and (max-width: 780px) { - section.index-content section.about-course section.about-info { - margin-right: 0; } } - section.index-content section.about-course section.requirements { - clear: both; - width: 100%; - border-top: 1px solid #E5E5E5; - padding-top: 25.888px; - margin-bottom: 0; } - section.index-content section.about-course section.requirements p { - float: left; - width: 48.092%; - margin-right: 3.817%; } - @media screen and (max-width: 780px) { - section.index-content section.about-course section.requirements p { - margin-right: 0; - float: none; - width: auto; } } - section.index-content section.about-course section.requirements p:nth-child(odd) { - margin-right: 0; } - section.index-content section.about-course section.cta { - width: 100%; - text-align: center; } - section.index-content section.about-course section.cta a.enroll { - padding: 12.944px 51.776px; - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: baseline; - zoom: 1; - *display: inline; - *vertical-align: auto; - text-align: center; - font: 800 18px "Open Sans", Helvetica, Arial, sans-serif; } - section.index-content section.staff h1 { - margin-top: 25.888px; } - -#lean_overlay { - background: #000; - display: none; - height: 100%; - left: 0px; - position: fixed; - top: 0px; - width: 100%; - z-index: 100; } - -div.leanModal_box { - background: #fff; - border: none; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: compact(0 0 6px black, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(0 0 6px black, false, false, false, false, false, false, false, false); - box-shadow: compact(0 0 6px black, false, false, false, false, false, false, false, false); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - display: none; - padding: 51.776px; - text-align: left; } - div.leanModal_box a.modal_close { - color: #aaa; - display: block; - font-style: normal; - height: 14px; - position: absolute; - right: 12px; - top: 12px; - width: 14px; - z-index: 2; } - div.leanModal_box a.modal_close:hover { - color: #993333; - text-decoration: none; } - div.leanModal_box h1 { - border-bottom: 1px solid #eee; - font-size: 24px; - margin-bottom: 25.888px; - margin-top: 0; - padding-bottom: 25.888px; - text-align: left; } - div.leanModal_box#enroll { - max-width: 600px; } - div.leanModal_box#enroll ol { - padding-top: 25.888px; } - div.leanModal_box#enroll ol li.terms, div.leanModal_box#enroll ol li.honor-code { - float: none; - width: auto; } - div.leanModal_box#enroll ol li div.tip { - display: none; } - div.leanModal_box#enroll ol li:hover div.tip { - background: #333; - color: #fff; - display: block; - font-size: 16px; - line-height: 25.888px; - margin: 0 0 0 -10px; - padding: 10px; - position: absolute; - -webkit-font-smoothing: antialiased; - width: 500px; } - div.leanModal_box form { - text-align: left; } - div.leanModal_box form div#register_error, div.leanModal_box form div#login_error, div.leanModal_box form div#pwd_error { - background-color: #333333; - border: black; - color: #fff; - font-family: "Open sans"; - font-weight: bold; - letter-spacing: 1px; - margin: -25.888px -25.888px 25.888px; - padding: 12.944px; - text-shadow: 0 1px 0 #1a1a1a; - -webkit-font-smoothing: antialiased; } - div.leanModal_box form div#register_error:empty, div.leanModal_box form div#login_error:empty, div.leanModal_box form div#pwd_error:empty { - padding: 0; } - div.leanModal_box form ol { - list-style: none; - margin-bottom: 25.888px; } - div.leanModal_box form ol li { - margin-bottom: 12.944px; } - div.leanModal_box form ol li.terms, div.leanModal_box form ol li.remember { - border-top: 1px solid #eee; - clear: both; - float: none; - padding-top: 25.888px; - width: auto; } - div.leanModal_box form ol li.honor-code { - float: none; - width: auto; } - div.leanModal_box form ol li label { - display: block; - font-weight: bold; } - div.leanModal_box form ol li input[type="email"], div.leanModal_box form ol li input[type="number"], div.leanModal_box form ol li input[type="password"], div.leanModal_box form ol li input[type="search"], div.leanModal_box form ol li input[type="tel"], div.leanModal_box form ol li input[type="text"], div.leanModal_box form ol li input[type="url"], div.leanModal_box form ol li input[type="color"], div.leanModal_box form ol li input[type="date"], div.leanModal_box form ol li input[type="datetime"], div.leanModal_box form ol li input[type="datetime-local"], div.leanModal_box form ol li input[type="month"], div.leanModal_box form ol li input[type="time"], div.leanModal_box form ol li input[type="week"], div.leanModal_box form ol li textarea { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100%; } - div.leanModal_box form ol li input[type="checkbox"] { - margin-right: 10px; } - div.leanModal_box form ol li ul { - list-style: disc outside none; - margin: 12.944px 0 25.888px 25.888px; } - div.leanModal_box form ol li ul li { - color: #666; - float: none; - font-size: 14px; - list-style: disc outside none; - margin-bottom: 12.944px; } - div.leanModal_box form input[type="button"], div.leanModal_box form input[type="submit"] { - border: 1px solid #691b1b; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: compact(inset 0 1px 0 0 #bc5c5c, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 0 #bc5c5c, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 0 #bc5c5c, false, false, false, false, false, false, false, false); - color: white; - display: inline; - font-size: 11px; - font-weight: bold; - background-color: #993333; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(100%, compact(#993333, #761e1e, false, false, false, false, false, false, false, false))); - background-image: -webkit-linear-gradient(top, compact(#993333, #761e1e, false, false, false, false, false, false, false, false)); - background-image: -moz-linear-gradient(top, compact(#993333, #761e1e, false, false, false, false, false, false, false, false)); - background-image: -ms-linear-gradient(top, compact(#993333, #761e1e, false, false, false, false, false, false, false, false)); - background-image: -o-linear-gradient(top, compact(#993333, #761e1e, false, false, false, false, false, false, false, false)); - background-image: linear-gradient(top, compact(#993333, #761e1e, false, false, false, false, false, false, false, false)); - padding: 6px 18px 7px; - text-shadow: 0 1px 0 #5d1414; - -webkit-background-clip: padding-box; - font-size: 18px; - padding: 12.944px; } - div.leanModal_box form input[type="button"]:hover, div.leanModal_box form input[type="submit"]:hover { - -webkit-box-shadow: compact(inset 0 1px 0 0 #a44141, false, false, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 1px 0 0 #a44141, false, false, false, false, false, false, false, false); - box-shadow: compact(inset 0 1px 0 0 #a44141, false, false, false, false, false, false, false, false); - cursor: pointer; - background-color: #823030; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(100%, compact(#823030, #691c1c, false, false, false, false, false, false, false, false))); - background-image: -webkit-linear-gradient(top, compact(#823030, #691c1c, false, false, false, false, false, false, false, false)); - background-image: -moz-linear-gradient(top, compact(#823030, #691c1c, false, false, false, false, false, false, false, false)); - background-image: -ms-linear-gradient(top, compact(#823030, #691c1c, false, false, false, false, false, false, false, false)); - background-image: -o-linear-gradient(top, compact(#823030, #691c1c, false, false, false, false, false, false, false, false)); - background-image: linear-gradient(top, compact(#823030, #691c1c, false, false, false, false, false, false, false, false)); } - div.leanModal_box form input[type="button"]:active, div.leanModal_box form input[type="submit"]:active { - border: 1px solid #691b1b; - -webkit-box-shadow: compact(inset 0 0 8px 4px #5c1919, inset 0 0 8px 4px #5c1919, 0 1px 1px 0 #eeeeee, false, false, false, false, false, false); - -moz-box-shadow: compact(inset 0 0 8px 4px #5c1919, inset 0 0 8px 4px #5c1919, 0 1px 1px 0 #eeeeee, false, false, false, false, false, false); - box-shadow: compact(inset 0 0 8px 4px #5c1919, inset 0 0 8px 4px #5c1919, 0 1px 1px 0 #eeeeee, false, false, false, false, false, false); } - -div#login { - min-width: 400px; } - div#login header { - border-bottom: 1px solid #ddd; - margin-bottom: 25.888px; - padding-bottom: 25.888px; } - div#login header h1 { - border-bottom: 0; - padding-bottom: 0; - margin-bottom: 6.472px; } - div#login ol li { - float: none; - width: auto; } - -div.lost-password { - margin-top: 25.888px; - text-align: left; } - div.lost-password a { - color: #999; } - div.lost-password a:hover { - color: #444; } - -div#pwd_reset p { - margin-bottom: 25.888px; } -div#pwd_reset input[type="email"] { - margin-bottom: 25.888px; } - -div#apply_name_change, -div#change_email, -div#unenroll, -div#deactivate-account { - max-width: 700px; } - div#apply_name_change ul, - div#change_email ul, - div#unenroll ul, - div#deactivate-account ul { - list-style: none; } - div#apply_name_change ul li, - div#change_email ul li, - div#unenroll ul li, - div#deactivate-account ul li { - margin-bottom: 12.944px; } - div#apply_name_change ul li textarea, div#apply_name_change ul li input[type="email"], div#apply_name_change ul li input[type="number"], div#apply_name_change ul li input[type="password"], div#apply_name_change ul li input[type="search"], div#apply_name_change ul li input[type="tel"], div#apply_name_change ul li input[type="text"], div#apply_name_change ul li input[type="url"], div#apply_name_change ul li input[type="color"], div#apply_name_change ul li input[type="date"], div#apply_name_change ul li input[type="datetime"], div#apply_name_change ul li input[type="datetime-local"], div#apply_name_change ul li input[type="month"], div#apply_name_change ul li input[type="time"], div#apply_name_change ul li input[type="week"], - div#change_email ul li textarea, - div#change_email ul li input[type="email"], - div#change_email ul li input[type="number"], - div#change_email ul li input[type="password"], - div#change_email ul li input[type="search"], - div#change_email ul li input[type="tel"], - div#change_email ul li input[type="text"], - div#change_email ul li input[type="url"], - div#change_email ul li input[type="color"], - div#change_email ul li input[type="date"], - div#change_email ul li input[type="datetime"], - div#change_email ul li input[type="datetime-local"], - div#change_email ul li input[type="month"], - div#change_email ul li input[type="time"], - div#change_email ul li input[type="week"], - div#unenroll ul li textarea, - div#unenroll ul li input[type="email"], - div#unenroll ul li input[type="number"], - div#unenroll ul li input[type="password"], - div#unenroll ul li input[type="search"], - div#unenroll ul li input[type="tel"], - div#unenroll ul li input[type="text"], - div#unenroll ul li input[type="url"], - div#unenroll ul li input[type="color"], - div#unenroll ul li input[type="date"], - div#unenroll ul li input[type="datetime"], - div#unenroll ul li input[type="datetime-local"], - div#unenroll ul li input[type="month"], - div#unenroll ul li input[type="time"], - div#unenroll ul li input[type="week"], - div#deactivate-account ul li textarea, - div#deactivate-account ul li input[type="email"], - div#deactivate-account ul li input[type="number"], - div#deactivate-account ul li input[type="password"], - div#deactivate-account ul li input[type="search"], - div#deactivate-account ul li input[type="tel"], - div#deactivate-account ul li input[type="text"], - div#deactivate-account ul li input[type="url"], - div#deactivate-account ul li input[type="color"], - div#deactivate-account ul li input[type="date"], - div#deactivate-account ul li input[type="datetime"], - div#deactivate-account ul li input[type="datetime-local"], - div#deactivate-account ul li input[type="month"], - div#deactivate-account ul li input[type="time"], - div#deactivate-account ul li input[type="week"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - display: block; - width: 100%; } - div#apply_name_change ul li textarea, - div#change_email ul li textarea, - div#unenroll ul li textarea, - div#deactivate-account ul li textarea { - height: 60px; } - div#apply_name_change ul li input[type="submit"], - div#change_email ul li input[type="submit"], - div#unenroll ul li input[type="submit"], - div#deactivate-account ul li input[type="submit"] { - white-space: normal; } - -div#feedback_div form ol li { - float: none; - width: 100%; } - div#feedback_div form ol li textarea#feedback_message { - height: 100px; } diff --git a/lms/static/css/vendor/indicator.gif b/lms/static/css/vendor/indicator.gif new file mode 100755 index 0000000000..085ccaecaf Binary files /dev/null and b/lms/static/css/vendor/indicator.gif differ diff --git a/lms/static/js/jquery.timeago.js b/lms/static/js/jquery.timeago.js new file mode 100644 index 0000000000..2e8d29f536 --- /dev/null +++ b/lms/static/js/jquery.timeago.js @@ -0,0 +1,152 @@ +/** + * Timeago is a jQuery plugin that makes it easy to support automatically + * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago"). + * + * @name timeago + * @version 0.11.4 + * @requires jQuery v1.2.3+ + * @author Ryan McGeary + * @license MIT License - http://www.opensource.org/licenses/mit-license.php + * + * For usage and examples, visit: + * http://timeago.yarp.com/ + * + * Copyright (c) 2008-2012, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org) + */ +(function($) { + $.timeago = function(timestamp) { + if (timestamp instanceof Date) { + return inWords(timestamp); + } else if (typeof timestamp === "string") { + return inWords($.timeago.parse(timestamp)); + } else if (typeof timestamp === "number") { + return inWords(new Date(timestamp)); + } else { + return inWords($.timeago.datetime(timestamp)); + } + }; + var $t = $.timeago; + + $.extend($.timeago, { + settings: { + refreshMillis: 60000, + allowFuture: false, + strings: { + prefixAgo: null, + prefixFromNow: null, + suffixAgo: "ago", + suffixFromNow: "from now", + seconds: "less than a minute", + minute: "about a minute", + minutes: "%d minutes", + hour: "about an hour", + hours: "about %d hours", + day: "a day", + days: "%d days", + month: "about a month", + months: "%d months", + year: "about a year", + years: "%d years", + wordSeparator: " ", + numbers: [] + } + }, + inWords: function(distanceMillis) { + var $l = this.settings.strings; + var prefix = $l.prefixAgo; + var suffix = $l.suffixAgo; + if (this.settings.allowFuture) { + if (distanceMillis < 0) { + prefix = $l.prefixFromNow; + suffix = $l.suffixFromNow; + } + } + + var seconds = Math.abs(distanceMillis) / 1000; + var minutes = seconds / 60; + var hours = minutes / 60; + var days = hours / 24; + var years = days / 365; + + function substitute(stringOrFunction, number) { + var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction; + var value = ($l.numbers && $l.numbers[number]) || number; + return string.replace(/%d/i, value); + } + + var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) || + seconds < 90 && substitute($l.minute, 1) || + minutes < 45 && substitute($l.minutes, Math.round(minutes)) || + minutes < 90 && substitute($l.hour, 1) || + hours < 24 && substitute($l.hours, Math.round(hours)) || + hours < 42 && substitute($l.day, 1) || + days < 30 && substitute($l.days, Math.round(days)) || + days < 45 && substitute($l.month, 1) || + days < 365 && substitute($l.months, Math.round(days / 30)) || + years < 1.5 && substitute($l.year, 1) || + substitute($l.years, Math.round(years)); + + var separator = $l.wordSeparator === undefined ? " " : $l.wordSeparator; + return $.trim([prefix, words, suffix].join(separator)); + }, + parse: function(iso8601) { + var s = $.trim(iso8601); + s = s.replace(/\.\d+/,""); // remove milliseconds + s = s.replace(/-/,"/").replace(/-/,"/"); + s = s.replace(/T/," ").replace(/Z/," UTC"); + s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400 + return new Date(s); + }, + datetime: function(elem) { + var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title"); + return $t.parse(iso8601); + }, + isTime: function(elem) { + // jQuery's `is()` doesn't play well with HTML5 in IE + return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time"); + } + }); + + $.fn.timeago = function() { + var self = this; + self.each(refresh); + + var $s = $t.settings; + if ($s.refreshMillis > 0) { + setInterval(function() { self.each(refresh); }, $s.refreshMillis); + } + return self; + }; + + function refresh() { + var data = prepareData(this); + if (!isNaN(data.datetime)) { + $(this).text(inWords(data.datetime)); + } + return this; + } + + function prepareData(element) { + element = $(element); + if (!element.data("timeago")) { + element.data("timeago", { datetime: $t.datetime(element) }); + var text = $.trim(element.text()); + if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) { + element.attr("title", text); + } + } + return element.data("timeago"); + } + + function inWords(date) { + return $t.inWords(distance(date)); + } + + function distance(date) { + return (new Date().getTime() - date.getTime()); + } + + // fix for IE6 suckage + document.createElement("abbr"); + document.createElement("time"); +}(jQuery)); diff --git a/lms/templates/discussion/_content.html b/lms/templates/discussion/_content.html deleted file mode 100644 index 1489f5997c..0000000000 --- a/lms/templates/discussion/_content.html +++ /dev/null @@ -1,71 +0,0 @@ -<%! from django_comment_client.helpers import url_for_tags, url_for_user %> -<%! from datehelper import time_ago_in_words %> -<%! from dateutil.parser import parse %> -<%! from django_comment_client.helpers import close_thread_text, \ - url_for_tags, \ - url_for_user, \ - pluralize -%> - -
    -
    -
    - -
    ${content['votes']['point']}
    - -
    -
    - - % if content['type'] == "thread": - ${(content.get('highlighted_title') or content['title']) | h} - - % endif -
    - -
    ${(content.get('highlighted_body') or content['body']) | h}
    - - % if content['type'] == "thread": -
    - % for tag in content['tags']: - ${tag | h} - % endfor -
    - - % endif -
    -
    - ${time_ago_in_words(parse(content['updated_at']))} ago by - % if content['anonymous']: - anonymous - % else: - ${content['username']} - % endif -
    -
    - % if content.get('comments_count', -1) >= 0: - % if discussion_type == 'user': - Show all comments (${content['comments_count']} total) - % else: - Show ${content['comments_count']} ${pluralize('comment', content['comments_count'])} - % endif - % endif -
    - -
    -
    -
    -
    -
    diff --git a/lms/templates/discussion/_content.mustache b/lms/templates/discussion/_content.mustache index cdad862dac..8f3a284510 100644 --- a/lms/templates/discussion/_content.mustache +++ b/lms/templates/discussion/_content.mustache @@ -32,7 +32,7 @@ {{/thread}}
    - {{content.updated_at}} ago by + sometime by {{#content.anonymous}} anonymous {{/content.anonymous}} diff --git a/lms/templates/discussion/_js_dependencies.html b/lms/templates/discussion/_js_dependencies.html index 55dc378de8..b6e65f43c6 100644 --- a/lms/templates/discussion/_js_dependencies.html +++ b/lms/templates/discussion/_js_dependencies.html @@ -8,6 +8,7 @@ + diff --git a/requirements.txt b/requirements.txt index 781a756cd7..f1d635399f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -42,7 +42,7 @@ django-ses django-storages django-threaded-multihost django-sekizai<0.7 -git+git://github.com/benjaoming/django-wiki.git@97f8413 -git+git://github.com/dementrock/pystache_custom.git +-e git://github.com/benjaoming/django-wiki.git@c145596#egg=django-wiki +-e git://github.com/dementrock/pystache_custom.git#egg=pystache_custom networkx -r repo-requirements.txt