Commit a6455099 by Sef Kloninger

Merge branch 'release' into edx-west/release-candidate-20130729

Conflicts:
	lms/djangoapps/courseware/tests/test_views.py
parents f02505d5 d2eca92f
...@@ -71,8 +71,13 @@ body.index { ...@@ -71,8 +71,13 @@ body.index {
color: $white; color: $white;
} }
.wrapper-text-welcome, .logo {
display: inline-block;
}
.logo { .logo {
font-weight: 600; font-weight: 600;
margin-left: ($baseline/2);
} }
.tagline { .tagline {
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<section class="content content-header"> <section class="content content-header">
<header> <header>
## "edX Studio" should not be translated ## "edX Studio" should not be translated
<h1>${_('Welcome to')}<span class="logo">edX Studio</span></h1> <h1><span class="wrapper-text-welcome">${_('Welcome to')}</span><span class="logo">edX Studio</span></h1>
<p class="tagline">${_("Studio helps manage your courses online, so you can focus on teaching them")}</p> <p class="tagline">${_("Studio helps manage your courses online, so you can focus on teaching them")}</p>
</header> </header>
</section> </section>
......
...@@ -6,8 +6,10 @@ from django.http import Http404 ...@@ -6,8 +6,10 @@ from django.http import Http404
from django.test.utils import override_settings from django.test.utils import override_settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.test.client import RequestFactory from django.test.client import RequestFactory
from django.core.urlresolvers import reverse
from student.models import CourseEnrollment from student.models import CourseEnrollment
from student.tests.factories import AdminFactory
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
import courseware.views as views import courseware.views as views
...@@ -86,6 +88,15 @@ class ViewsTestCase(TestCase): ...@@ -86,6 +88,15 @@ class ViewsTestCase(TestCase):
self.assertRaises(Http404, views.redirect_to_course_position, self.assertRaises(Http404, views.redirect_to_course_position,
mock_module) mock_module)
def test_registered_for_course(self):
self.assertFalse(views.registered_for_course('Basketweaving', None))
mock_user = MagicMock()
mock_user.is_authenticated.return_value = False
self.assertFalse(views.registered_for_course('dummy', mock_user))
mock_course = MagicMock()
mock_course.id = self.course_id
self.assertTrue(views.registered_for_course(mock_course, self.user))
def test_jump_to_invalid(self): def test_jump_to_invalid(self):
request = self.request_factory.get(self.chapter_url) request = self.request_factory.get(self.chapter_url)
self.assertRaisesRegexp(Http404, 'Invalid location', views.jump_to, self.assertRaisesRegexp(Http404, 'Invalid location', views.jump_to,
...@@ -116,3 +127,26 @@ class ViewsTestCase(TestCase): ...@@ -116,3 +127,26 @@ class ViewsTestCase(TestCase):
else: else:
self.assertNotContains(result, "Classes End") self.assertNotContains(result, "Classes End")
def test_submission_history_xss(self):
# log into a staff account
admin = AdminFactory()
self.client.login(username=admin.username, password='test')
# try it with an existing user and a malicious location
url = reverse('submission_history', kwargs={
'course_id': self.course_id,
'student_username': 'dummy',
'location': '<script>alert("hello");</script>'
})
response = self.client.get(url)
self.assertFalse('<script>' in response.content)
# try it with a malicious user and a non-existent location
url = reverse('submission_history', kwargs={
'course_id': self.course_id,
'student_username': '<script>alert("hello");</script>',
'location': 'dummy'
})
response = self.client.get(url)
self.assertFalse('<script>' in response.content)
...@@ -14,6 +14,7 @@ from django.shortcuts import redirect ...@@ -14,6 +14,7 @@ from django.shortcuts import redirect
from mitxmako.shortcuts import render_to_response, render_to_string from mitxmako.shortcuts import render_to_response, render_to_string
from django_future.csrf import ensure_csrf_cookie from django_future.csrf import ensure_csrf_cookie
from django.views.decorators.cache import cache_control from django.views.decorators.cache import cache_control
from markupsafe import escape
from courseware import grades from courseware import grades
from courseware.access import has_access from courseware.access import has_access
...@@ -699,19 +700,16 @@ def submission_history(request, course_id, student_username, location): ...@@ -699,19 +700,16 @@ def submission_history(request, course_id, student_username, location):
module_state_key=location, module_state_key=location,
student_id=student.id) student_id=student.id)
except User.DoesNotExist: except User.DoesNotExist:
return HttpResponse("User {0} does not exist.".format(student_username)) return HttpResponse(escape("User {0} does not exist.".format(student_username)))
except StudentModule.DoesNotExist: except StudentModule.DoesNotExist:
return HttpResponse("{0} has never accessed problem {1}" return HttpResponse(escape("{0} has never accessed problem {1}".format(student_username, location)))
.format(student_username, location))
history_entries = StudentModuleHistory.objects \ history_entries = StudentModuleHistory.objects.filter(student_module=student_module).order_by('-id')
.filter(student_module=student_module).order_by('-id')
# If no history records exist, let's force a save to get history started. # If no history records exist, let's force a save to get history started.
if not history_entries: if not history_entries:
student_module.save() student_module.save()
history_entries = StudentModuleHistory.objects \ history_entries = StudentModuleHistory.objects.filter(student_module=student_module).order_by('-id')
.filter(student_module=student_module).order_by('-id')
context = { context = {
'history_entries': history_entries, 'history_entries': history_entries,
......
...@@ -2,70 +2,141 @@ ...@@ -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/) // 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
.view-partial-mktgregister {
background: transparent; // 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 {
// dimensions needed for course about page on marketing site
.wrapper-view {
overflow: hidden;
} }
// button elements - not a better place to put these, sadly &.disabled, &[disabled] {
.btn { cursor: default;
@include box-sizing('border-box'); pointer-events: none;
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 { .m-btn-pill {
@extend .btn; border-radius: ($baseline/5);
@include linear-gradient($m-blue-s1 5%, $m-blue-d1 95%); }
// no hover state conventions to follow from marketing :/ .m-btn-rounded {
&:hover, &:active { 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
} }
} }
}
.btn-secondary { // primary button
@extend .btn; .m-btn-primary {
@include linear-gradient($m-gray 5%, $m-gray-d1 95%); @extend .m-btn-base;
box-shadow: 0 2px 1px 0 $action-primary-shadow;
background: $action-primary-bg;
color: $action-primary-fg;
// no hover state conventions to follow from marketing :/ &:hover, &:active {
&: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;
} }
} }
.btn-tertiary { &.disabled, &[disabled] {
@extend .btn; box-shadow: none;
background: $m-blue-l1; background: $action-primary-disabled-bg; // needed for IE currently
color: $m-blue; }
}
// no hover state conventions to follow from marketing :/ // secondary button
&:hover, &:active { .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 {
// dimensions needed for course about page on marketing site
.wrapper-view {
overflow: hidden;
}
// nav list // nav list
.list-actions { .list-actions {
list-style: none; list-style: none;
...@@ -78,31 +149,37 @@ ...@@ -78,31 +149,37 @@
} }
.action { .action {
font-size: 16px;
font-weight: 500;
// register or access courseware // register or access courseware
&.action-register, &.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 // already registered but course not started or registration is closed
&.is-registered, &.registration-closed { &.is-registered, &.registration-closed {
@extend .btn-secondary; @extend .m-btn-secondary;
pointer-events: none !important; pointer-events: none !important;
display: block;
} }
// coming soon // coming soon
&.coming-soon { &.coming-soon {
@extend .btn-tertiary; @extend .m-btn-secondary;
pointer-events: none !important; pointer-events: none !important;
outline: none; 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-login .introduction header h1,
.view-register .introduction header h1 { .view-register .introduction header h1 {
@include login_register_h1_style; @include login_register_h1_style;
...@@ -110,4 +187,4 @@ ...@@ -110,4 +187,4 @@
footer .references { footer .references {
@include footer_references_style; @include footer_references_style;
} }
\ No newline at end of file
@function em($pxval, $base: 16) { // mixins - font sizing
@return #{$pxval / $base}em; @mixin font-size($sizeValue: 16){
font-size: $sizeValue + px;
font-size: ($sizeValue/10) + rem;
} }
// Line-height // mixins - line height
@function lh($amount: 1) { @mixin line-height($fontSize: auto){
@return $body-line-height * $amount; line-height: ($fontSize*1.48) + px;
line-height: (($fontSize/10)*1.48) + rem;
} }
// image-replacement hidden text // image-replacement hidden text
...@@ -31,6 +34,15 @@ ...@@ -31,6 +34,15 @@
display: block; 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 // Theme Mixin Styles
......
...@@ -39,23 +39,36 @@ $outer-border-color: rgb(170, 170, 170); ...@@ -39,23 +39,36 @@ $outer-border-color: rgb(170, 170, 170);
$light-gray: #ddd; $light-gray: #ddd;
$dark-gray: #333; $dark-gray: #333;
// edx.org-related // edx.org marketing site variables
$m-gray-l1: rgb(203,203,203); $m-gray: #8A8C8F;
$m-gray-l2: rgb(246,246,246); $m-gray-l1: #97999B;
$m-gray: rgb(153,153,153); $m-gray-l2: #A4A6A8;
$m-gray-d1: rgb(102,102,102); $m-gray-l3: #B1B2B4;
$m-gray-d2: rgb(51,51,51); $m-gray-l4: #F5F5F5;
$m-gray-a1: rgb(80,80,80); $m-gray-d1: #7D7F83;
$m-blue: rgb(65, 116, 170); $m-gray-d2: #707276;
// $m-blue: rgb(85, 151, 221); (used in marketing redesign) $m-gray-d3: #646668;
$m-blue-l1: rgb(85, 151, 221); $m-gray-d4: #050505;
$m-blue-d1: shade($m-blue,15%);
$m-blue-s1: saturate($m-blue,15%); $m-blue: #1AA1DE;
$m-pink: rgb(204,51,102); $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); $m-base-font-size: em(15);
$base-font-color: rgb(60,60,60); $base-font-color: rgb(60,60,60);
$baseFontColor: rgb(60,60,60); $baseFontColor: rgb(60,60,60);
$lighter-base-font-color: rgb(100,100,100); $lighter-base-font-color: rgb(100,100,100);
...@@ -74,10 +87,57 @@ $courseware-footer-border: none; ...@@ -74,10 +87,57 @@ $courseware-footer-border: none;
$courseware-footer-shadow: none; $courseware-footer-shadow: none;
$courseware-footer-margin: 0px; $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-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-color: transparent;
$button-bg-hover-color: #fff; $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-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-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)); $faded-hr-image-3: linear-gradient(180deg, rgba(200,200,200, 1) 0%, rgba(200,200,200, 0));
...@@ -104,7 +164,7 @@ $border-color-3: rgb(100,100,100); ...@@ -104,7 +164,7 @@ $border-color-3: rgb(100,100,100);
$border-color-4: rgb(252,252,252); $border-color-4: rgb(252,252,252);
$link-color: $blue; $link-color: $blue;
$link-color-d1: $m-blue; $link-color-d1: $m-blue-d2;
$link-hover: $pink; $link-hover: $pink;
$site-status-color: $pink; $site-status-color: $pink;
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
font-weight: 600; font-weight: 600;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0 !important; letter-spacing: 0 !important;
color: saturate($link-color-d1,15%); color: $m-gray-d2;
} }
.heading-5 { .heading-5 {
...@@ -390,7 +390,7 @@ ...@@ -390,7 +390,7 @@
@include clearfix(); @include clearfix();
button[type="submit"] { button[type="submit"] {
@extend .button-primary; @extend .m-btn-primary;
&:disabled, &.is-disabled { &:disabled, &.is-disabled {
opacity: 0.3; opacity: 0.3;
...@@ -431,7 +431,6 @@ ...@@ -431,7 +431,6 @@
margin: 0 0 ($baseline/4) 0; margin: 0 0 ($baseline/4) 0;
font-size: em(14); font-size: em(14);
font-weight: 600; font-weight: 600;
color: $m-gray-d2 !important;
} }
.message-copy { .message-copy {
......
...@@ -278,26 +278,8 @@ header.global { ...@@ -278,26 +278,8 @@ header.global {
li { li {
display: inline-block; display: inline-block;
a { .cta {
border-radius: 0; @extend .m-btn-primary;
@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;
}
} }
} }
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
%elif allow_registration: %elif allow_registration:
<a class="action action-register register" href="#">Register for <strong>${course.number}</strong></a> <a class="action action-register register" href="#">Register for <strong>${course.number}</strong></a>
%else: %else:
<div class="action registration-closed">Registration Is Closed</div> <div class="action registration-closed is-disabled">Registration Is Closed</div>
%endif %endif
</li> </li>
</ul> </ul>
......
<% import json %> <% import json %>
<h3>${username} > ${course_id} > ${location}</h3> <h3>${username | h} > ${course_id | h} > ${location | h}</h3>
% for i, entry in enumerate(history_entries): % for i, entry in enumerate(history_entries):
<hr/> <hr/>
......
...@@ -27,15 +27,7 @@ ...@@ -27,15 +27,7 @@
<!-- repeated button styles needed for IE (copied from _shame.scss) --> <!-- repeated button styles needed for IE (copied from _shame.scss) -->
<style type="text/css" media="screen"> <style type="text/css" media="screen">
.text-sr{border:0;clip:rect(1px 1px 1px 1px);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.m-btn,.m-btn-base,.m-btn-primary,.view-partial-mktgregister .action.action-register,.view-partial-mktgregister .action.access-courseware,.m-btn-secondary,.view-partial-mktgregister .action.is-registered,.view-partial-mktgregister .action.registration-closed,.view-partial-mktgregister .action.coming-soon{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:color 0.25s ease-in-out,background 0.25s ease-in-out,box-shadow 0.25s ease-in-out;-moz-transition:color 0.25s ease-in-out,background 0.25s ease-in-out,box-shadow 0.25s ease-in-out;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}.m-btn.disabled,.disabled.m-btn-base,.disabled.m-btn-primary,.view-partial-mktgregister .disabled.action.action-register,.view-partial-mktgregister .disabled.action.access-courseware,.disabled.m-btn-secondary,.view-partial-mktgregister .disabled.action.is-registered,.view-partial-mktgregister .disabled.action.registration-closed,.view-partial-mktgregister .disabled.action.coming-soon,.m-btn[disabled],[disabled].m-btn-base,[disabled].m-btn-primary,.view-partial-mktgregister [disabled].action.action-register,.view-partial-mktgregister [disabled].action.access-courseware,[disabled].m-btn-secondary,.view-partial-mktgregister [disabled].action.is-registered,.view-partial-mktgregister [disabled].action.registration-closed,.view-partial-mktgregister [disabled].action.coming-soon{cursor:default;pointer-events:none}.m-btn-pill{border-radius:4px}.m-btn-rounded{border-radius:10px}.m-btn-edged,.m-btn-base,.m-btn-primary,.view-partial-mktgregister .action.action-register,.view-partial-mktgregister .action.access-courseware,.m-btn-secondary,.view-partial-mktgregister .action.is-registered,.view-partial-mktgregister .action.registration-closed,.view-partial-mktgregister .action.coming-soon{border-radius:2px}.m-btn-base,.m-btn-primary,.view-partial-mktgregister .action.action-register,.view-partial-mktgregister .action.access-courseware,.m-btn-secondary,.view-partial-mktgregister .action.is-registered,.view-partial-mktgregister .action.registration-closed,.view-partial-mktgregister .action.coming-soon{border:none;padding:10px 20px;text-align:center;text-shadow:none;font-weight:500;letter-spacing:0}.m-btn-base.disabled,.disabled.m-btn-primary,.view-partial-mktgregister .disabled.action.action-register,.view-partial-mktgregister .disabled.action.access-courseware,.disabled.m-btn-secondary,.view-partial-mktgregister .disabled.action.is-registered,.view-partial-mktgregister .disabled.action.registration-closed,.view-partial-mktgregister .disabled.action.coming-soon,.m-btn-base[disabled],[disabled].m-btn-primary,.view-partial-mktgregister [disabled].action.action-register,.view-partial-mktgregister [disabled].action.access-courseware,[disabled].m-btn-secondary,.view-partial-mktgregister [disabled].action.is-registered,.view-partial-mktgregister [disabled].action.registration-closed,.view-partial-mktgregister [disabled].action.coming-soon,.m-btn-base.is-disabled,.is-disabled.m-btn-primary,.view-partial-mktgregister .is-disabled.action.action-register,.view-partial-mktgregister .is-disabled.action.access-courseware,.is-disabled.m-btn-secondary,.view-partial-mktgregister .is-disabled.action.is-registered,.view-partial-mktgregister .is-disabled.action.registration-closed,.view-partial-mktgregister .is-disabled.action.coming-soon{background:#646668}.m-btn-base.disabled:hover,.disabled.m-btn-primary:hover,.view-partial-mktgregister .disabled.action.action-register:hover,.view-partial-mktgregister .disabled.action.access-courseware:hover,.disabled.m-btn-secondary:hover,.view-partial-mktgregister .disabled.action.is-registered:hover,.view-partial-mktgregister .disabled.action.registration-closed:hover,.view-partial-mktgregister .disabled.action.coming-soon:hover,.m-btn-base[disabled]:hover,[disabled].m-btn-primary:hover,.view-partial-mktgregister [disabled].action.action-register:hover,.view-partial-mktgregister [disabled].action.access-courseware:hover,[disabled].m-btn-secondary:hover,.view-partial-mktgregister [disabled].action.is-registered:hover,.view-partial-mktgregister [disabled].action.registration-closed:hover,.view-partial-mktgregister [disabled].action.coming-soon:hover,.m-btn-base.is-disabled:hover,.is-disabled.m-btn-primary:hover,.view-partial-mktgregister .is-disabled.action.action-register:hover,.view-partial-mktgregister .is-disabled.action.access-courseware:hover,.is-disabled.m-btn-secondary:hover,.view-partial-mktgregister .is-disabled.action.is-registered:hover,.view-partial-mktgregister .is-disabled.action.registration-closed:hover,.view-partial-mktgregister .is-disabled.action.coming-soon:hover{background:#646668 !important}.m-btn-primary,.view-partial-mktgregister .action.action-register,.view-partial-mktgregister .action.access-courseware{box-shadow:0 2px 1px 0 #0a4a67;background:#126f9a;color:#fff}.m-btn-primary:hover,.view-partial-mktgregister .action.action-register:hover,.view-partial-mktgregister .action.access-courseware:hover,.m-btn-primary:active,.view-partial-mktgregister .action.action-register:active,.view-partial-mktgregister .action.access-courseware:active{background:#1790c7}.m-btn-primary.current,.view-partial-mktgregister .current.action.action-register,.view-partial-mktgregister .current.action.access-courseware,.m-btn-primary.active,.view-partial-mktgregister .active.action.action-register,.view-partial-mktgregister .active.action.access-courseware{box-shadow:inset 0 2px 1px 1px #1580b0;background:#1aa1de;color:#126f9a}.m-btn-primary.current:hover,.view-partial-mktgregister .current.action.action-register:hover,.view-partial-mktgregister .current.action.access-courseware:hover,.m-btn-primary.current:active,.view-partial-mktgregister .current.action.action-register:active,.view-partial-mktgregister .current.action.access-courseware:active,.m-btn-primary.active:hover,.view-partial-mktgregister .active.action.action-register:hover,.view-partial-mktgregister .active.action.access-courseware:hover,.m-btn-primary.active:active,.view-partial-mktgregister .active.action.action-register:active,.view-partial-mktgregister .active.action.access-courseware:active{box-shadow:inset 0 2px 1px 1px #126f9a;color:#0a4a67}.m-btn-primary.disabled,.view-partial-mktgregister .disabled.action.action-register,.view-partial-mktgregister .disabled.action.access-courseware,.m-btn-primary[disabled],.view-partial-mktgregister [disabled].action.action-register,.view-partial-mktgregister [disabled].action.access-courseware{box-shadow:none;background:#646668}.m-btn-secondary,.view-partial-mktgregister .action.is-registered,.view-partial-mktgregister .action.registration-closed,.view-partial-mktgregister .action.coming-soon{box-shadow:0 2px 1px 0 #8c204f;background:#b52a67;color:#fff}.m-btn-secondary:hover,.view-partial-mktgregister .action.is-registered:hover,.view-partial-mktgregister .action.registration-closed:hover,.view-partial-mktgregister .action.coming-soon:hover,.m-btn-secondary:active,.view-partial-mktgregister .action.is-registered:active,.view-partial-mktgregister .action.registration-closed:active,.view-partial-mktgregister .action.coming-soon:active{background:#d7548e}.m-btn-secondary.current,.view-partial-mktgregister .current.action.is-registered,.view-partial-mktgregister .current.action.registration-closed,.view-partial-mktgregister .current.action.coming-soon,.m-btn-secondary.active,.view-partial-mktgregister .active.action.is-registered,.view-partial-mktgregister .active.action.registration-closed,.view-partial-mktgregister .active.action.coming-soon{box-shadow:inset 0 2px 1px 1px #a0255b;background:#d33f80;color:#a0255b}.m-btn-secondary.current:hover,.view-partial-mktgregister .current.action.is-registered:hover,.view-partial-mktgregister .current.action.registration-closed:hover,.view-partial-mktgregister .current.action.coming-soon:hover,.m-btn-secondary.current:active,.view-partial-mktgregister .current.action.is-registered:active,.view-partial-mktgregister .current.action.registration-closed:active,.view-partial-mktgregister .current.action.coming-soon:active,.m-btn-secondary.active:hover,.view-partial-mktgregister .active.action.is-registered:hover,.view-partial-mktgregister .active.action.registration-closed:hover,.view-partial-mktgregister .active.action.coming-soon:hover,.m-btn-secondary.active:active,.view-partial-mktgregister .active.action.is-registered:active,.view-partial-mktgregister .active.action.registration-closed:active,.view-partial-mktgregister .active.action.coming-soon:active{box-shadow:inset 0 2px 1px 1px #8c204f;color:#771c44}.m-btn-secondary.disabled,.view-partial-mktgregister .disabled.action.is-registered,.view-partial-mktgregister .disabled.action.registration-closed,.view-partial-mktgregister .disabled.action.coming-soon,.m-btn-secondary[disabled],.view-partial-mktgregister [disabled].action.is-registered,.view-partial-mktgregister [disabled].action.registration-closed,.view-partial-mktgregister [disabled].action.coming-soon{box-shadow:none;background:#646668}.view-register .form-actions button[type="submit"],.view-login .form-actions button[type="submit"],.view-passwordreset .form-actions button[type="submit"]{text-transform:none;vertical-align:middle;font-weight:600 !important;letter-spacing:0 !important}.view-partial-mktgregister .wrapper-view{overflow:hidden}.view-partial-mktgregister .list-actions{list-style:none;margin:0;padding:0}.view-partial-mktgregister .list-actions .item{margin:0}.view-partial-mktgregister .action{font-size:16px;font-weight:500}.view-partial-mktgregister .action.action-register,.view-partial-mktgregister .action.access-courseware{display:block}.view-partial-mktgregister .action.is-registered,.view-partial-mktgregister .action.registration-closed{pointer-events:none !important;display:block}.view-partial-mktgregister .action.coming-soon{pointer-events:none !important;outline:none;display:block}
.view-partial-mktgregister{background:transparent}.view-partial-mktgregister .wrapper-view{overflow:hidden}.view-partial-mktgregister .btn,.view-partial-mktgregister .btn-primary,.view-partial-mktgregister .action.action-register,.view-partial-mktgregister .action.access-courseware,.view-partial-mktgregister .btn-secondary,.view-partial-mktgregister .action.is-registered,.view-partial-mktgregister .action.registration-closed,.view-partial-mktgregister .btn-tertiary,.view-partial-mktgregister .action.coming-soon{-webkit-box-sizing:"border-box";-moz-box-sizing:"border-box";box-sizing:"border-box";display:block;padding:10px;text-transform:lowercase;color:#fff;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}.view-partial-mktgregister .btn strong,.view-partial-mktgregister .btn-primary strong,.view-partial-mktgregister .action.action-register strong,.view-partial-mktgregister .action.access-courseware strong,.view-partial-mktgregister .btn-secondary strong,.view-partial-mktgregister .action.is-registered strong,.view-partial-mktgregister .action.registration-closed strong,.view-partial-mktgregister .btn-tertiary strong,.view-partial-mktgregister .action.coming-soon strong{font-weight:400;text-transform:none}.view-partial-mktgregister .btn-primary,.view-partial-mktgregister .action.action-register,.view-partial-mktgregister .action.access-courseware{background-color:#4697ec;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(5%, #4697ec),color-stop(95%, #4880bb));background-image:-webkit-linear-gradient(#4697ec 5%,#4880bb 95%);background-image:linear-gradient(#4697ec 5%,#4880bb 95%)}.view-partial-mktgregister .btn-secondary,.view-partial-mktgregister .action.is-registered,.view-partial-mktgregister .action.registration-closed{background-color:#999;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(5%, #999),color-stop(95%, #666));background-image:-webkit-linear-gradient(#999 5%,#666 95%);background-image:linear-gradient(#999 5%,#666 95%)}.view-partial-mktgregister .btn-tertiary,.view-partial-mktgregister .action.coming-soon{background:#e6f5fc;color:#5597dd}.view-partial-mktgregister .list-actions{list-style:none;margin:0;padding:0}.view-partial-mktgregister .list-actions .item{margin:0}.view-partial-mktgregister .action.is-registered,.view-partial-mktgregister .action.registration-closed{pointer-events:none !important}.view-partial-mktgregister .action.coming-soon{pointer-events:none !important;outline:none}
</style> </style>
</head> </head>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment