diff --git a/.pylintrc b/.pylintrc
index 4357885133..d1cdbb4780 100644
--- a/.pylintrc
+++ b/.pylintrc
@@ -33,7 +33,11 @@ load-plugins=
# can either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once).
-disable=E1102,W0142
+disable=
+# W0141: Used builtin function 'map'
+# W0142: Used * or ** magic
+# R0903: Too few public methods (1/2)
+ W0141,W0142,R0903
[REPORTS]
@@ -97,7 +101,7 @@ bad-functions=map,filter,apply,input
module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
# Regular expression which should only match correct module level names
-const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__)|log)$
+const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__)|log|urlpatterns)$
# Regular expression which should only match correct class names
class-rgx=[A-Z_][a-zA-Z0-9]+$
@@ -106,7 +110,7 @@ class-rgx=[A-Z_][a-zA-Z0-9]+$
function-rgx=[a-z_][a-z0-9_]{2,30}$
# Regular expression which should only match correct method names
-method-rgx=[a-z_][a-z0-9_]{2,30}$
+method-rgx=([a-z_][a-z0-9_]{2,60}|setUp|set[Uu]pClass|tearDown|tear[Dd]ownClass|assert[A-Z]\w*)$
# Regular expression which should only match correct instance attribute names
attr-rgx=[a-z_][a-z0-9_]{2,30}$
diff --git a/cms/djangoapps/contentstore/tests/test_contentstore.py b/cms/djangoapps/contentstore/tests/test_contentstore.py
index 99ef1169b1..9d533dffed 100644
--- a/cms/djangoapps/contentstore/tests/test_contentstore.py
+++ b/cms/djangoapps/contentstore/tests/test_contentstore.py
@@ -112,7 +112,7 @@ class ContentStoreToyCourseTest(ModuleStoreTestCase):
self.assertTrue(sequential.location.url() in chapter.definition['children'])
self.client.post(reverse('delete_item'),
- json.dumps({'id': sequential.location.url(), 'delete_children':'true'}),
+ json.dumps({'id': sequential.location.url(), 'delete_children':'true', 'delete_all_versions':'true'}),
"application/json")
found = False
diff --git a/cms/djangoapps/contentstore/views.py b/cms/djangoapps/contentstore/views.py
index 25ae65f33c..62c8f8da97 100644
--- a/cms/djangoapps/contentstore/views.py
+++ b/cms/djangoapps/contentstore/views.py
@@ -639,15 +639,15 @@ def delete_item(request):
modulestore('direct').delete_item(item.location)
# cdodge: we need to remove our parent's pointer to us so that it is no longer dangling
+ if delete_all_versions:
+ parent_locs = modulestore('direct').get_parent_locations(item_loc, None)
- parent_locs = modulestore('direct').get_parent_locations(item_loc, None)
-
- for parent_loc in parent_locs:
- parent = modulestore('direct').get_item(parent_loc)
- item_url = item_loc.url()
- if item_url in parent.definition["children"]:
- parent.definition["children"].remove(item_url)
- modulestore('direct').update_children(parent.location, parent.definition["children"])
+ for parent_loc in parent_locs:
+ parent = modulestore('direct').get_item(parent_loc)
+ item_url = item_loc.url()
+ if item_url in parent.definition["children"]:
+ parent.definition["children"].remove(item_url)
+ modulestore('direct').update_children(parent.location, parent.definition["children"])
return HttpResponse()
@@ -1589,4 +1589,4 @@ def get_location_and_verify_access(request, org, course, name):
if not has_access(request.user, location):
raise PermissionDenied()
- return location
\ No newline at end of file
+ return location
diff --git a/cms/static/sass/_checklists.scss b/cms/static/sass/_checklists.scss
index ca5424967e..a672fa6990 100644
--- a/cms/static/sass/_checklists.scss
+++ b/cms/static/sass/_checklists.scss
@@ -21,6 +21,32 @@ body.course.checklists {
margin-bottom: 0;
}
+ // visual status
+ .viz-checklist-status {
+ @include text-hide();
+ @include size(100%,($baseline/4));
+ position: relative;
+ display: block;
+ margin: 0;
+ background: $gray-l4;
+
+ .viz-checklist-status-value {
+ @include transition(width 2s ease-in-out .25s);
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 0%;
+ height: ($baseline/4);
+ background: $green;
+
+ .int {
+ @include text-sr();
+ }
+ }
+ }
+ // 0% of checklist completed
+
+ // header/title
header {
@include clearfix();
@include box-shadow(inset 0 -1px 1px $shadow-l1);
@@ -127,6 +153,13 @@ body.course.checklists {
// state - completed
&.is-completed {
+ .viz-checklist-status {
+
+ .viz-checklist-status-value {
+ width: 100%;
+ }
+ }
+
header {
.checklist-title, .icon-confirm {
@@ -273,10 +306,20 @@ body.course.checklists {
color: $gray-l2;
}
+ .task-actions {
+
+ .action-primary {
+ @include grey-button;
+ @include font-size(12);
+ font-weight: 600;
+ text-align: center;
+ }
+ }
+
&:hover {
- background: $blue-l5;
- border-bottom-color: $blue-l4;
- border-top-color: $blue-l4;
+ background: $gray-l5;
+ border-bottom-color: $gray-l4;
+ border-top-color: $gray-l4;
.task-details {
opacity:1.0;
diff --git a/cms/templates/ux-checklists.html b/cms/templates/ux-checklists.html
index 3f7a947111..833bbe000f 100644
--- a/cms/templates/ux-checklists.html
+++ b/cms/templates/ux-checklists.html
@@ -14,11 +14,17 @@
+
+
Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.Test Checklist Progress Visualization
+
+