fix merge conflict with _variables.scss
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
import json
|
||||
import logging
|
||||
import re
|
||||
import sys
|
||||
from functools import partial
|
||||
|
||||
@@ -13,7 +12,6 @@ from django.http import Http404
|
||||
from django.http import HttpResponse
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
|
||||
import pyparsing
|
||||
from requests.auth import HTTPBasicAuth
|
||||
from statsd import statsd
|
||||
|
||||
@@ -599,14 +597,14 @@ def _check_files_limits(files):
|
||||
|
||||
# Check number of files submitted
|
||||
if len(inputfiles) > settings.MAX_FILEUPLOADS_PER_INPUT:
|
||||
msg = 'Submission aborted! Maximum %d files may be submitted at once' %\
|
||||
msg = 'Submission aborted! Maximum %d files may be submitted at once' % \
|
||||
settings.MAX_FILEUPLOADS_PER_INPUT
|
||||
return msg
|
||||
|
||||
# Check file sizes
|
||||
for inputfile in inputfiles:
|
||||
if inputfile.size > settings.STUDENT_FILEUPLOAD_MAX_SIZE: # Bytes
|
||||
msg = 'Submission aborted! Your file "%s" is too large (max size: %d MB)' %\
|
||||
if inputfile.size > settings.STUDENT_FILEUPLOAD_MAX_SIZE: # Bytes
|
||||
msg = 'Submission aborted! Your file "%s" is too large (max size: %d MB)' % \
|
||||
(inputfile.name, settings.STUDENT_FILEUPLOAD_MAX_SIZE / (1000 ** 2))
|
||||
return msg
|
||||
|
||||
|
||||
@@ -221,7 +221,7 @@ class TestTOC(TestCase):
|
||||
'format': '', 'due': None, 'active': False},
|
||||
{'url_name': 'video_123456789012', 'display_name': 'Test Video', 'graded': True,
|
||||
'format': '', 'due': None, 'active': False},
|
||||
{'url_name': 'video_4f66f493ac8f', 'display_name': 'Video Title', 'graded': True,
|
||||
{'url_name': 'video_4f66f493ac8f', 'display_name': 'Video', 'graded': True,
|
||||
'format': '', 'due': None, 'active': False}],
|
||||
'url_name': 'Overview', 'display_name': u'Overview'},
|
||||
{'active': False, 'sections':
|
||||
@@ -230,7 +230,6 @@ class TestTOC(TestCase):
|
||||
'url_name': 'secret:magic', 'display_name': 'secret:magic'}])
|
||||
|
||||
actual = render.toc_for_course(self.portal_user, request, self.toy_course, chapter, None, model_data_cache)
|
||||
print actual
|
||||
assert reduce(lambda x, y: x and (y in actual), expected, True)
|
||||
|
||||
def test_toc_toy_from_section(self):
|
||||
@@ -249,7 +248,7 @@ class TestTOC(TestCase):
|
||||
'format': '', 'due': None, 'active': True},
|
||||
{'url_name': 'video_123456789012', 'display_name': 'Test Video', 'graded': True,
|
||||
'format': '', 'due': None, 'active': False},
|
||||
{'url_name': 'video_4f66f493ac8f', 'display_name': 'Video Title', 'graded': True,
|
||||
{'url_name': 'video_4f66f493ac8f', 'display_name': 'Video', 'graded': True,
|
||||
'format': '', 'due': None, 'active': False}],
|
||||
'url_name': 'Overview', 'display_name': u'Overview'},
|
||||
{'active': False, 'sections':
|
||||
|
||||
@@ -122,6 +122,11 @@ class UserViewSetTest(UserApiTestCase):
|
||||
def test_list_unauthorized(self):
|
||||
self.assertHttpForbidden(self.client.get(self.LIST_URI))
|
||||
|
||||
@override_settings(DEBUG=True)
|
||||
@override_settings(EDX_API_KEY=None)
|
||||
def test_debug_auth(self):
|
||||
self.assertHttpOK(self.client.get(self.LIST_URI))
|
||||
|
||||
def test_get_list_empty(self):
|
||||
User.objects.all().delete()
|
||||
result = self.get_json(self.LIST_URI)
|
||||
@@ -220,6 +225,11 @@ class UserPreferenceViewSetTest(UserApiTestCase):
|
||||
def test_list_unauthorized(self):
|
||||
self.assertHttpForbidden(self.client.get(self.LIST_URI))
|
||||
|
||||
@override_settings(DEBUG=True)
|
||||
@override_settings(EDX_API_KEY=None)
|
||||
def test_debug_auth(self):
|
||||
self.assertHttpOK(self.client.get(self.LIST_URI))
|
||||
|
||||
def test_get_list_empty(self):
|
||||
UserPreference.objects.all().delete()
|
||||
result = self.get_json(self.LIST_URI)
|
||||
@@ -252,6 +262,26 @@ class UserPreferenceViewSetTest(UserApiTestCase):
|
||||
self.assertPrefIsValid(pref)
|
||||
self.assertEqual(pref["key"], "key0")
|
||||
|
||||
def test_get_list_filter_user_empty(self):
|
||||
def test_id(user_id):
|
||||
result = self.get_json(self.LIST_URI, data={"user": user_id})
|
||||
self.assertEqual(result["count"], 0)
|
||||
self.assertEqual(result["results"], [])
|
||||
test_id(self.users[2].id)
|
||||
# TODO: If the given id does not match a user, then the filter is a no-op
|
||||
# test_id(42)
|
||||
# test_id("asdf")
|
||||
|
||||
def test_get_list_filter_user_nonempty(self):
|
||||
user_id = self.users[0].id
|
||||
result = self.get_json(self.LIST_URI, data={"user": user_id})
|
||||
self.assertEqual(result["count"], 2)
|
||||
prefs = result["results"]
|
||||
self.assertEqual(len(prefs), 2)
|
||||
for pref in prefs:
|
||||
self.assertPrefIsValid(pref)
|
||||
self.assertEqual(pref["user"]["id"], user_id)
|
||||
|
||||
def test_get_list_pagination(self):
|
||||
first_page = self.get_json(self.LIST_URI, data={"page_size": 2})
|
||||
self.assertEqual(first_page["count"], 3)
|
||||
|
||||
@@ -12,11 +12,16 @@ class ApiKeyHeaderPermission(permissions.BasePermission):
|
||||
"""
|
||||
Check for permissions by matching the configured API key and header
|
||||
|
||||
settings.EDX_API_KEY must be set, and the X-Edx-Api-Key HTTP header must
|
||||
be present in the request and match the setting.
|
||||
If settings.DEBUG is True and settings.EDX_API_KEY is not set or None,
|
||||
then allow the request. Otherwise, allow the request if and only if
|
||||
settings.EDX_API_KEY is set and the X-Edx-Api-Key HTTP header is
|
||||
present in the request and matches the setting.
|
||||
"""
|
||||
api_key = getattr(settings, "EDX_API_KEY", None)
|
||||
return api_key is not None and request.META.get("HTTP_X_EDX_API_KEY") == api_key
|
||||
return (
|
||||
(settings.DEBUG and api_key is None) or
|
||||
(api_key is not None and request.META.get("HTTP_X_EDX_API_KEY") == api_key)
|
||||
)
|
||||
|
||||
|
||||
class UserViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
@@ -31,7 +36,7 @@ class UserPreferenceViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
permission_classes = (ApiKeyHeaderPermission,)
|
||||
queryset = UserPreference.objects.all()
|
||||
filter_backends = (filters.DjangoFilterBackend,)
|
||||
filter_fields = ("key",)
|
||||
filter_fields = ("key", "user")
|
||||
serializer_class = UserPreferenceSerializer
|
||||
paginate_by = 10
|
||||
paginate_by_param = "page_size"
|
||||
|
||||
@@ -178,6 +178,10 @@ for name, value in ENV_TOKENS.get("CODE_JAIL", {}).items():
|
||||
|
||||
COURSES_WITH_UNSAFE_CODE = ENV_TOKENS.get("COURSES_WITH_UNSAFE_CODE", [])
|
||||
|
||||
# automatic log in for load testing
|
||||
MITX_FEATURES['AUTOMATIC_AUTH_FOR_LOAD_TESTING'] = ENV_TOKENS.get('AUTOMATIC_AUTH_FOR_LOAD_TESTING')
|
||||
MITX_FEATURES['MAX_AUTO_AUTH_USERS'] = ENV_TOKENS.get('MAX_AUTO_AUTH_USERS')
|
||||
|
||||
############################## SECURE AUTH ITEMS ###############
|
||||
# Secret things: passwords, access keys, etc.
|
||||
|
||||
|
||||
@@ -37,7 +37,6 @@ PLATFORM_NAME = "edX"
|
||||
COURSEWARE_ENABLED = True
|
||||
ENABLE_JASMINE = False
|
||||
|
||||
GENERATE_RANDOM_USER_CREDENTIALS = False
|
||||
PERFSTATS = False
|
||||
|
||||
DISCUSSION_SETTINGS = {
|
||||
@@ -145,6 +144,9 @@ MITX_FEATURES = {
|
||||
# Allow use of the hint managment instructor view.
|
||||
'ENABLE_HINTER_INSTRUCTOR_VIEW': False,
|
||||
|
||||
# for load testing
|
||||
'AUTOMATIC_AUTH_FOR_LOAD_TESTING': False,
|
||||
|
||||
# Toggle to enable chat availability (configured on a per-course
|
||||
# basis in Studio)
|
||||
'ENABLE_CHAT': False
|
||||
@@ -218,7 +220,6 @@ TEMPLATE_CONTEXT_PROCESSORS = (
|
||||
'django.contrib.messages.context_processors.messages',
|
||||
#'django.core.context_processors.i18n',
|
||||
'django.contrib.auth.context_processors.auth', # this is required for admin
|
||||
'django.core.context_processors.csrf', # necessary for csrf protection
|
||||
|
||||
# Added for django-wiki
|
||||
'django.core.context_processors.media',
|
||||
@@ -231,6 +232,10 @@ TEMPLATE_CONTEXT_PROCESSORS = (
|
||||
'mitxmako.shortcuts.marketing_link_context_processor',
|
||||
)
|
||||
|
||||
# add csrf support unless disabled for load testing
|
||||
if not MITX_FEATURES.get('AUTOMATIC_AUTH_FOR_LOAD_TESTING'):
|
||||
TEMPLATE_CONTEXT_PROCESSORS += ('django.core.context_processors.csrf',) # necessary for csrf protection
|
||||
|
||||
STUDENT_FILEUPLOAD_MAX_SIZE = 4 * 1000 * 1000 # 4 MB
|
||||
MAX_FILEUPLOADS_PER_INPUT = 20
|
||||
|
||||
@@ -469,7 +474,6 @@ MIDDLEWARE_CLASSES = (
|
||||
'django_comment_client.middleware.AjaxExceptionMiddleware',
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
|
||||
# Instead of AuthenticationMiddleware, we use a cached backed version
|
||||
#'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
@@ -488,6 +492,10 @@ MIDDLEWARE_CLASSES = (
|
||||
'codejail.django_integration.ConfigureCodeJailMiddleware',
|
||||
)
|
||||
|
||||
# add in csrf middleware unless disabled for load testing
|
||||
if not MITX_FEATURES.get('AUTOMATIC_AUTH_FOR_LOAD_TESTING'):
|
||||
MIDDLEWARE_CLASSES = MIDDLEWARE_CLASSES + ('django.middleware.csrf.CsrfViewMiddleware',)
|
||||
|
||||
############################### Pipeline #######################################
|
||||
|
||||
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
|
||||
|
||||
@@ -257,7 +257,7 @@ if SEGMENT_IO_LMS_KEY:
|
||||
|
||||
|
||||
########################## USER API ########################
|
||||
EDX_API_KEY = ''
|
||||
EDX_API_KEY = None
|
||||
|
||||
#####################################################################
|
||||
# Lastly, see if the developer has any local overrides.
|
||||
|
||||
@@ -2,70 +2,141 @@
|
||||
// shame file - used for any bad-form/orphaned scss that knowingly violate edX FED architecture/standards (see - http://csswizardry.com/2013/04/shame-css/)
|
||||
// ====================
|
||||
|
||||
// marketing site - registration iframe band-aid (poor form enough to isolate out)
|
||||
// edx.org marketing site - 7/2013 visual button revamp
|
||||
|
||||
// extends btn
|
||||
.m-btn {
|
||||
@include box-sizing(border-box);
|
||||
@include transition(color 0.25s ease-in-out, background 0.25s ease-in-out, box-shadow 0.25s ease-in-out);
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover, &:active {
|
||||
|
||||
}
|
||||
|
||||
&.disabled, &[disabled] {
|
||||
cursor: default;
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
|
||||
.m-btn-pill {
|
||||
border-radius: ($baseline/5);
|
||||
}
|
||||
|
||||
.m-btn-rounded {
|
||||
border-radius: ($baseline/2);
|
||||
}
|
||||
|
||||
.m-btn-edged {
|
||||
border-radius: ($baseline/10);
|
||||
}
|
||||
|
||||
// primary button
|
||||
.m-btn-base {
|
||||
@extend .m-btn;
|
||||
@extend .m-btn-edged;
|
||||
border: none;
|
||||
padding:($baseline/2) ($baseline);
|
||||
text-align: center;
|
||||
text-shadow: none;
|
||||
font-weight: 500;
|
||||
letter-spacing: 0;
|
||||
|
||||
&.disabled, &[disabled], &.is-disabled {
|
||||
background: $action-primary-disabled-bg;
|
||||
|
||||
&:hover {
|
||||
background: $action-primary-disabled-bg !important; // needed for IE currently
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// primary button
|
||||
.m-btn-primary {
|
||||
@extend .m-btn-base;
|
||||
box-shadow: 0 2px 1px 0 $action-primary-shadow;
|
||||
background: $action-primary-bg;
|
||||
color: $action-primary-fg;
|
||||
|
||||
&:hover, &:active {
|
||||
background: $action-primary-focused-bg;
|
||||
}
|
||||
|
||||
&.current, &.active {
|
||||
box-shadow: inset 0 2px 1px 1px $action-primary-active-shadow;
|
||||
background: $action-primary-active-bg;
|
||||
color: $action-primary-active-fg;
|
||||
|
||||
&:hover, &:active {
|
||||
box-shadow: inset 0 2px 1px 1px $action-primary-active-focused-shadow;
|
||||
color: $action-primary-active-focused-fg;
|
||||
}
|
||||
}
|
||||
|
||||
&.disabled, &[disabled] {
|
||||
box-shadow: none;
|
||||
background: $action-primary-disabled-bg; // needed for IE currently
|
||||
}
|
||||
}
|
||||
|
||||
// secondary button
|
||||
.m-btn-secondary {
|
||||
@extend .m-btn-base;
|
||||
box-shadow: 0 2px 1px 0 $action-secondary-shadow;
|
||||
background: $action-secondary-bg;
|
||||
color: $action-secondary-fg;
|
||||
|
||||
&:hover, &:active {
|
||||
background: $action-secondary-focused-bg;
|
||||
}
|
||||
|
||||
&.current, &.active {
|
||||
box-shadow: inset 0 2px 1px 1px $action-secondary-active-shadow;
|
||||
background: $action-secondary-active-bg;
|
||||
color: $action-secondary-active-fg;
|
||||
|
||||
&:hover, &:active {
|
||||
box-shadow: inset 0 2px 1px 1px $action-secondary-active-focused-shadow;
|
||||
color: $action-secondary-active-focused-fg;
|
||||
}
|
||||
}
|
||||
|
||||
&.disabled, &[disabled] {
|
||||
box-shadow: none;
|
||||
background: $action-secondary-disabled-bg; // needed for IE currently
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ====================
|
||||
|
||||
// edx.org marketing site - needed, but bad overrides with importants
|
||||
.view-register, .view-login, .view-passwordreset {
|
||||
|
||||
.form-actions button[type="submit"] {
|
||||
text-transform: none;
|
||||
vertical-align: middle;
|
||||
font-weight: 600 !important;
|
||||
letter-spacing: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// ====================
|
||||
|
||||
// edx.org marketing site - registration iframe band-aid (poor form enough to isolate out)
|
||||
.view-partial-mktgregister {
|
||||
background: transparent;
|
||||
|
||||
// dimensions needed for course about page on marketing site
|
||||
.wrapper-view {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
// button elements - not a better place to put these, sadly
|
||||
.btn {
|
||||
@include box-sizing('border-box');
|
||||
display: block;
|
||||
padding: $baseline/2;
|
||||
text-transform: lowercase;
|
||||
color: $white;
|
||||
letter-spacing: 0.1rem;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
border: none !important;
|
||||
text-decoration: none;
|
||||
text-shadow: none;
|
||||
letter-spacing: 0.1rem;
|
||||
font-size: 17px;
|
||||
font-weight: 300;
|
||||
box-shadow: 0 !important;
|
||||
|
||||
strong {
|
||||
font-weight: 400;
|
||||
text-transform: none;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
@extend .btn;
|
||||
@include linear-gradient($m-blue-s1 5%, $m-blue-d1 95%);
|
||||
|
||||
// no hover state conventions to follow from marketing :/
|
||||
&:hover, &:active {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
@extend .btn;
|
||||
@include linear-gradient($m-gray 5%, $m-gray-d1 95%);
|
||||
|
||||
// no hover state conventions to follow from marketing :/
|
||||
&:hover, &:active {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.btn-tertiary {
|
||||
@extend .btn;
|
||||
background: $m-blue-l1;
|
||||
color: $m-blue;
|
||||
|
||||
// no hover state conventions to follow from marketing :/
|
||||
&:hover, &:active {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// nav list
|
||||
.list-actions {
|
||||
list-style: none;
|
||||
@@ -78,31 +149,37 @@
|
||||
}
|
||||
|
||||
.action {
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
|
||||
// register or access courseware
|
||||
&.action-register, &.access-courseware {
|
||||
@extend .btn-primary;
|
||||
@extend .m-btn-primary;
|
||||
display: block;
|
||||
}
|
||||
|
||||
// already registered but course not started or registration is closed
|
||||
&.is-registered, &.registration-closed {
|
||||
@extend .btn-secondary;
|
||||
@extend .m-btn-secondary;
|
||||
pointer-events: none !important;
|
||||
display: block;
|
||||
}
|
||||
|
||||
// coming soon
|
||||
&.coming-soon {
|
||||
@extend .btn-tertiary;
|
||||
@extend .m-btn-secondary;
|
||||
pointer-events: none !important;
|
||||
outline: none;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------
|
||||
// The Following is to enable themes to
|
||||
// display H1s on login and register pages
|
||||
//--------------------------------------
|
||||
|
||||
// ====================
|
||||
|
||||
|
||||
// The Following is to enable themes to display H1s on login and register pages
|
||||
.view-login .introduction header h1,
|
||||
.view-register .introduction header h1 {
|
||||
@include login_register_h1_style;
|
||||
@@ -110,4 +187,4 @@
|
||||
|
||||
footer .references {
|
||||
@include footer_references_style;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
@function em($pxval, $base: 16) {
|
||||
@return #{$pxval / $base}em;
|
||||
// mixins - font sizing
|
||||
@mixin font-size($sizeValue: 16){
|
||||
font-size: $sizeValue + px;
|
||||
font-size: ($sizeValue/10) + rem;
|
||||
}
|
||||
|
||||
// Line-height
|
||||
@function lh($amount: 1) {
|
||||
@return $body-line-height * $amount;
|
||||
// mixins - line height
|
||||
@mixin line-height($fontSize: auto){
|
||||
line-height: ($fontSize*1.48) + px;
|
||||
line-height: (($fontSize/10)*1.48) + rem;
|
||||
}
|
||||
|
||||
// image-replacement hidden text
|
||||
@@ -31,6 +34,15 @@
|
||||
display: block;
|
||||
}
|
||||
|
||||
@function em($pxval, $base: 16) {
|
||||
@return #{$pxval / $base}em;
|
||||
}
|
||||
|
||||
// Line-height
|
||||
@function lh($amount: 1) {
|
||||
@return $body-line-height * $amount;
|
||||
}
|
||||
|
||||
|
||||
//-----------------
|
||||
// Theme Mixin Styles
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
// lms - utilities - variables
|
||||
// ====================
|
||||
|
||||
$baseline: 20px;
|
||||
|
||||
// grid
|
||||
$gw-column: 80px;
|
||||
$gw-gutter: 20px;
|
||||
|
||||
@@ -13,9 +9,6 @@ $fg-max-columns: 12;
|
||||
$fg-max-width: 1400px;
|
||||
$fg-min-width: 810px;
|
||||
|
||||
// ====================
|
||||
|
||||
// fonts
|
||||
$sans-serif: 'Open Sans', $verdana;
|
||||
$monospace: Monaco, 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
|
||||
$body-font-family: $sans-serif;
|
||||
@@ -29,115 +22,12 @@ $base-font-color: rgb(60,60,60);
|
||||
$lighter-base-font-color: rgb(100,100,100);
|
||||
$very-light-text: #fff;
|
||||
|
||||
// ====================
|
||||
|
||||
// colors - new reorganized colors
|
||||
|
||||
$black: rgb(0,0,0);
|
||||
$black-t0: rgba(0,0,0,0.125);
|
||||
$black-t1: rgba(0,0,0,0.25);
|
||||
$black-t2: rgba(0,0,0,0.50);
|
||||
$black-t3: rgba(0,0,0,0.75);
|
||||
|
||||
$white: rgb(255,255,255);
|
||||
$white-t0: rgba(255,255,255,0.125);
|
||||
$white-t1: rgba(255,255,255,0.25);
|
||||
$white-t2: rgba(255,255,255,0.50);
|
||||
$white-t3: rgba(255,255,255,0.75);
|
||||
|
||||
$gray: rgb(127,127,127);
|
||||
$gray-l1: tint($gray,20%);
|
||||
$gray-l2: tint($gray,40%);
|
||||
$gray-l3: tint($gray,60%);
|
||||
$gray-l4: tint($gray,80%);
|
||||
$gray-l5: tint($gray,90%);
|
||||
$gray-l6: tint($gray,95%);
|
||||
$gray-d1: shade($gray,20%);
|
||||
$gray-d2: shade($gray,40%);
|
||||
$gray-d3: shade($gray,60%);
|
||||
$gray-d4: shade($gray,80%);
|
||||
|
||||
//new blue
|
||||
$pink: rgb(183,37,103);
|
||||
$pink-l1: tint($pink,20%);
|
||||
$pink-l2: tint($pink,40%);
|
||||
$pink-l3: tint($pink,60%);
|
||||
$pink-l4: tint($pink,80%);
|
||||
$pink-l5: tint($pink,90%);
|
||||
$pink-d1: shade($pink,20%);
|
||||
$pink-d2: shade($pink,40%);
|
||||
$pink-d3: shade($pink,60%);
|
||||
$pink-d4: shade($pink,80%);
|
||||
$pink-s1: saturate($pink,15%);
|
||||
$pink-s2: saturate($pink,30%);
|
||||
$pink-s3: saturate($pink,45%);
|
||||
$pink-u1: desaturate($pink,15%);
|
||||
$pink-u2: desaturate($pink,30%);
|
||||
$pink-u3: desaturate($pink,45%);
|
||||
|
||||
$black: rgb(0,0,0);
|
||||
$blue: rgb(29,157,217);
|
||||
$pink: rgb(182,37,104);
|
||||
$yellow: rgb(255, 252, 221);
|
||||
$red: rgb(178, 6, 16);
|
||||
$red-l1: tint($red,20%);
|
||||
$red-l2: tint($red,40%);
|
||||
$red-l3: tint($red,60%);
|
||||
$red-l4: tint($red,80%);
|
||||
$red-l5: tint($red,90%);
|
||||
$red-d1: shade($red,20%);
|
||||
$red-d2: shade($red,40%);
|
||||
$red-d3: shade($red,60%);
|
||||
$red-d4: shade($red,80%);
|
||||
$red-s1: saturate($red,15%);
|
||||
$red-s2: saturate($red,30%);
|
||||
$red-s3: saturate($red,45%);
|
||||
$red-u1: desaturate($red,15%);
|
||||
$red-u2: desaturate($red,30%);
|
||||
$red-u3: desaturate($red,45%);
|
||||
|
||||
$green: rgb(37, 184, 90);
|
||||
$green-l1: tint($green,20%);
|
||||
$green-l2: tint($green,40%);
|
||||
$green-l3: tint($green,60%);
|
||||
$green-l4: tint($green,80%);
|
||||
$green-l5: tint($green,90%);
|
||||
$green-d1: shade($green,20%);
|
||||
$green-d2: shade($green,40%);
|
||||
$green-d3: shade($green,60%);
|
||||
$green-d4: shade($green,80%);
|
||||
$green-s1: saturate($green,15%);
|
||||
$green-s2: saturate($green,30%);
|
||||
$green-s3: saturate($green,45%);
|
||||
$green-u1: desaturate($green,15%);
|
||||
$green-u2: desaturate($green,30%);
|
||||
$green-u3: desaturate($green,45%);
|
||||
|
||||
//new yellow
|
||||
|
||||
$orange: rgb(237, 189, 60);
|
||||
$orange-l1: tint($orange,20%);
|
||||
$orange-l2: tint($orange,40%);
|
||||
$orange-l3: tint($orange,60%);
|
||||
$orange-l4: tint($orange,80%);
|
||||
$orange-l5: tint($orange,90%);
|
||||
$orange-d1: shade($orange,20%);
|
||||
$orange-d2: shade($orange,40%);
|
||||
$orange-d3: shade($orange,60%);
|
||||
$orange-d4: shade($orange,80%);
|
||||
$orange-s1: saturate($orange,15%);
|
||||
$orange-s2: saturate($orange,30%);
|
||||
$orange-s3: saturate($orange,45%);
|
||||
$orange-u1: desaturate($orange,15%);
|
||||
$orange-u2: desaturate($orange,30%);
|
||||
$orange-u3: desaturate($orange,45%);
|
||||
|
||||
$shadow: rgba(0,0,0,0.2);
|
||||
$shadow-l1: rgba(0,0,0,0.1);
|
||||
$shadow-l2: rgba(0,0,0,0.05);
|
||||
$shadow-d1: rgba(0,0,0,0.4);
|
||||
|
||||
// ====================
|
||||
|
||||
// colors - old variables
|
||||
$blue: rgb(29,157,217); //old blue
|
||||
$yellow: rgb(255, 252, 221); //old yellow
|
||||
$error-red: rgb(253, 87, 87);
|
||||
$light-gray: rgb(221, 221, 221);
|
||||
$dark-gray: rgb(51, 51, 51);
|
||||
@@ -149,23 +39,36 @@ $outer-border-color: rgb(170, 170, 170);
|
||||
$light-gray: #ddd;
|
||||
$dark-gray: #333;
|
||||
|
||||
// edx.org-related
|
||||
$m-gray-l1: rgb(203,203,203);
|
||||
$m-gray-l2: rgb(246,246,246);
|
||||
$m-gray: rgb(153,153,153);
|
||||
$m-gray-d1: rgb(102,102,102);
|
||||
$m-gray-d2: rgb(51,51,51);
|
||||
$m-gray-a1: rgb(80,80,80);
|
||||
$m-blue: rgb(65, 116, 170);
|
||||
// $m-blue: rgb(85, 151, 221); (used in marketing redesign)
|
||||
$m-blue-l1: rgb(85, 151, 221);
|
||||
$m-blue-d1: shade($m-blue,15%);
|
||||
$m-blue-s1: saturate($m-blue,15%);
|
||||
$m-pink: rgb(204,51,102);
|
||||
// edx.org marketing site variables
|
||||
$m-gray: #8A8C8F;
|
||||
$m-gray-l1: #97999B;
|
||||
$m-gray-l2: #A4A6A8;
|
||||
$m-gray-l3: #B1B2B4;
|
||||
$m-gray-l4: #F5F5F5;
|
||||
$m-gray-d1: #7D7F83;
|
||||
$m-gray-d2: #707276;
|
||||
$m-gray-d3: #646668;
|
||||
$m-gray-d4: #050505;
|
||||
|
||||
$m-blue: #1AA1DE;
|
||||
$m-blue-l1: #2BACE6;
|
||||
$m-blue-l2: #42B5E9;
|
||||
$m-blue-l3: #59BEEC;
|
||||
$m-blue-d1: #1790C7;
|
||||
$m-blue-d2: #1580B0;
|
||||
$m-blue-d3: #126F9A;
|
||||
$m-blue-d4: #0A4A67;
|
||||
|
||||
$m-pink: #B52A67;
|
||||
$m-pink-l1: #CA2F73;
|
||||
$m-pink-l2: #D33F80;
|
||||
$m-pink-l3: #D7548E;
|
||||
$m-pink-d1: #A0255B;
|
||||
$m-pink-d2: #8C204F;
|
||||
$m-pink-d3: #771C44;
|
||||
|
||||
$m-base-font-size: em(15);
|
||||
|
||||
|
||||
$base-font-color: rgb(60,60,60);
|
||||
$baseFontColor: rgb(60,60,60);
|
||||
$lighter-base-font-color: rgb(100,100,100);
|
||||
@@ -184,10 +87,57 @@ $courseware-footer-border: none;
|
||||
$courseware-footer-shadow: none;
|
||||
$courseware-footer-margin: 0px;
|
||||
|
||||
|
||||
// actions
|
||||
$button-bg-image: linear-gradient(#fff 0%, rgb(250,250,250) 50%, rgb(237,237,237) 50%, rgb(220,220,220) 100%);
|
||||
$button-bg-color: transparent;
|
||||
$button-bg-hover-color: #fff;
|
||||
|
||||
// actions - primary
|
||||
$action-primary-bg: $m-blue-d3;
|
||||
$action-primary-fg: $white;
|
||||
$action-primary-shadow: $m-blue-d4;
|
||||
|
||||
// focused - hover/active pseudo states
|
||||
$action-primary-focused-bg: $m-blue-d1;
|
||||
$action-primary-focused-fg: $white;
|
||||
|
||||
// current or active navigation item
|
||||
$action-primary-active-bg: $m-blue;
|
||||
$action-primary-active-fg: $m-blue-d3;
|
||||
$action-primary-active-shadow: $m-blue-d2;
|
||||
$action-primary-active-focused-fg: $m-blue-d4;
|
||||
$action-primary-active-focused-shadow: $m-blue-d3;
|
||||
|
||||
// disabled
|
||||
$action-primary-disabled-bg: $m-gray-d3;
|
||||
$action-prmary-disabled-fg: $white;
|
||||
|
||||
|
||||
|
||||
// actions - secondary
|
||||
$action-secondary-bg: $m-pink;
|
||||
$action-secondary-fg: $white;
|
||||
$action-secondary-shadow: $m-pink-d2;
|
||||
|
||||
// focused - hover/active pseudo states
|
||||
$action-secondary-focused-bg: $m-pink-l3;
|
||||
$action-secondary-focused-fg: $white;
|
||||
|
||||
// current or active navigation item
|
||||
$action-secondary-active-bg: $m-pink-l2;
|
||||
$action-secondary-active-fg: $m-pink-d1;
|
||||
$action-secondary-active-shadow: $m-pink-d1;
|
||||
$action-secondary-active-focused-fg: $m-pink-d3;
|
||||
$action-secondary-active-focused-shadow: $m-pink-d2;
|
||||
|
||||
// disabled
|
||||
$action-secondary-disabled-bg: $m-gray-d3;
|
||||
$action-secondary-disabled-fg: $white;
|
||||
|
||||
|
||||
|
||||
|
||||
$faded-hr-image-1: linear-gradient(180deg, rgba(200,200,200, 0) 0%, rgba(200,200,200, 1) 50%, rgba(200,200,200, 0));
|
||||
$faded-hr-image-2: linear-gradient(180deg, rgba(200,200,200, 0) 0%, rgba(200,200,200, 1));
|
||||
$faded-hr-image-3: linear-gradient(180deg, rgba(200,200,200, 1) 0%, rgba(200,200,200, 0));
|
||||
@@ -214,7 +164,7 @@ $border-color-3: rgb(100,100,100);
|
||||
$border-color-4: rgb(252,252,252);
|
||||
|
||||
$link-color: $blue;
|
||||
$link-color-d1: $m-blue;
|
||||
$link-color-d1: $m-blue-d2;
|
||||
$link-hover: $pink;
|
||||
$site-status-color: $pink;
|
||||
|
||||
@@ -245,4 +195,4 @@ $homepage-bg-image: '../images/homepage-bg.jpg';
|
||||
$login-banner-image: url(../images/bg-banner-login.png);
|
||||
$register-banner-image: url(../images/bg-banner-register.png);
|
||||
|
||||
$video-thumb-url: '../images/courses/video-thumb.jpg';
|
||||
$video-thumb-url: '../images/courses/video-thumb.jpg';
|
||||
@@ -37,7 +37,7 @@
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0 !important;
|
||||
color: saturate($link-color-d1,15%);
|
||||
color: $m-gray-d2;
|
||||
}
|
||||
|
||||
.heading-5 {
|
||||
@@ -390,7 +390,7 @@
|
||||
@include clearfix();
|
||||
|
||||
button[type="submit"] {
|
||||
@extend .button-primary;
|
||||
@extend .m-btn-primary;
|
||||
|
||||
&:disabled, &.is-disabled {
|
||||
opacity: 0.3;
|
||||
@@ -431,7 +431,6 @@
|
||||
margin: 0 0 ($baseline/4) 0;
|
||||
font-size: em(14);
|
||||
font-weight: 600;
|
||||
color: $m-gray-d2 !important;
|
||||
}
|
||||
|
||||
.message-copy {
|
||||
|
||||
@@ -278,26 +278,8 @@ header.global {
|
||||
li {
|
||||
display: inline-block;
|
||||
|
||||
a {
|
||||
border-radius: 0;
|
||||
@include linear-gradient(saturate($link-color-d1,15%) 5%, shade($link-color-d1,15%) 95%);
|
||||
display: inline-block;
|
||||
padding: $baseline/2 $baseline*2.5;
|
||||
text-transform: lowercase;
|
||||
color: $very-light-text;
|
||||
letter-spacing: 0.1rem;
|
||||
font-weight: 300;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
border: none !important;
|
||||
text-shadow: none;
|
||||
letter-spacing: 0.1rem;
|
||||
font-size: 14px;
|
||||
box-shadow: none !important;
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
.cta {
|
||||
@extend .m-btn-primary;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
%elif allow_registration:
|
||||
<a class="action action-register register" href="#">Register for <strong>${course.number}</strong></a>
|
||||
%else:
|
||||
<div class="action registration-closed">Registration Is Closed</div>
|
||||
<div class="action registration-closed is-disabled">Registration Is Closed</div>
|
||||
%endif
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -69,7 +69,7 @@
|
||||
$submitButton.
|
||||
removeClass('is-disabled').
|
||||
removeProp('disabled').
|
||||
html('Create my ${settings.PLATFORM_NAME} Account');
|
||||
html('Create My ${settings.PLATFORM_NAME} Account');
|
||||
}
|
||||
else {
|
||||
$submitButton.
|
||||
@@ -141,32 +141,32 @@
|
||||
</div>
|
||||
|
||||
<ol class="list-input">
|
||||
|
||||
|
||||
% if ask_for_email:
|
||||
|
||||
<li class="field required text" id="field-email">
|
||||
<label for="email">E-mail</label>
|
||||
<input class="" id="email" type="email" name="email" value="" placeholder="example: username@domain.com" />
|
||||
</li>
|
||||
|
||||
|
||||
% endif
|
||||
|
||||
|
||||
<li class="field required text" id="field-username">
|
||||
<label for="username">Public Username</label>
|
||||
<input id="username" type="text" name="username" value="${extauth_username}" placeholder="example: JaneDoe" required aria-required="true" />
|
||||
<span class="tip tip-input">Will be shown in any discussions or forums you participate in</span>
|
||||
</li>
|
||||
|
||||
|
||||
% if ask_for_fullname:
|
||||
|
||||
|
||||
<li class="field required text" id="field-name">
|
||||
<label for="name">Full Name</label>
|
||||
<input id="name" type="text" name="name" value="" placeholder="example: Jane Doe" />
|
||||
<span class="tip tip-input">Needed for any certificates you may earn <strong>(cannot be changed later)</strong></span>
|
||||
</li>
|
||||
|
||||
|
||||
% endif
|
||||
|
||||
|
||||
</ol>
|
||||
|
||||
% endif
|
||||
@@ -282,7 +282,7 @@
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
% endif
|
||||
|
||||
## TODO: Use a %block tag or something to allow themes to
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<ul class="sequence-nav-buttons">
|
||||
<li class="prev"><a href="#">Previous</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<div class="sequence-list-wrapper">
|
||||
<ol id="sequence-list">
|
||||
% for idx, item in enumerate(items):
|
||||
@@ -16,7 +16,7 @@
|
||||
data-id="${item['id']}"
|
||||
data-element="${idx+1}"
|
||||
href="javascript:void(0);">
|
||||
<p class="sr">${item['title']}, ${item['type']}</p>
|
||||
<p>${item['title']}<span class="sr">, ${item['type']}</span></p>
|
||||
</a>
|
||||
</li>
|
||||
% endfor
|
||||
|
||||
@@ -441,6 +441,12 @@ if settings.MITX_FEATURES.get('ENABLE_HINTER_INSTRUCTOR_VIEW'):
|
||||
'instructor.hint_manager.hint_manager', name="hint_manager"),
|
||||
)
|
||||
|
||||
# enable automatic login
|
||||
if settings.MITX_FEATURES.get('AUTOMATIC_AUTH_FOR_LOAD_TESTING'):
|
||||
urlpatterns += (
|
||||
url(r'^auto_auth$', 'student.views.auto_auth'),
|
||||
)
|
||||
|
||||
urlpatterns = patterns(*urlpatterns)
|
||||
|
||||
if settings.DEBUG:
|
||||
|
||||
Reference in New Issue
Block a user