diff --git a/cms/djangoapps/contentstore/views.py b/cms/djangoapps/contentstore/views.py
index 14f96e312a..f70164138d 100644
--- a/cms/djangoapps/contentstore/views.py
+++ b/cms/djangoapps/contentstore/views.py
@@ -261,7 +261,6 @@ def edit_unit(request, location):
break
lms_link = get_lms_link_for_item(item.location)
- preview_lms_link = get_lms_link_for_item(item.location, preview=True)
component_templates = defaultdict(list)
diff --git a/cms/static/js/base.js b/cms/static/js/base.js
index 41c1ee3cdb..7e55d2b8d8 100644
--- a/cms/static/js/base.js
+++ b/cms/static/js/base.js
@@ -80,64 +80,6 @@ $(document).ready(function() {
$('.import .file-input').click();
});
- // making the unit list draggable. Note: sortable didn't work b/c it considered
- // drop points which the user hovered over as destinations and proactively changed
- // the dom; so, if the user subsequently dropped at an illegal spot, the reversion
- // point was the last dom change.
- $('.unit').draggable({
- axis: 'y',
- handle: '.drag-handle',
- zIndex: 999,
- start: initiateHesitate,
- drag: checkHoverState,
- stop: removeHesitate,
- revert: "invalid"
- });
-
- // Subsection reordering
- $('.id-holder').draggable({
- axis: 'y',
- handle: '.section-item .drag-handle',
- zIndex: 999,
- start: initiateHesitate,
- drag: checkHoverState,
- stop: removeHesitate,
- revert: "invalid"
- });
-
- // Section reordering
- $('.courseware-section').draggable({
- axis: 'y',
- handle: 'header .drag-handle',
- stack: '.courseware-section',
- revert: "invalid"
- });
-
-
- $('.sortable-unit-list').droppable({
- accept : '.unit',
- greedy: true,
- tolerance: "pointer",
- hoverClass: "dropover",
- drop: onUnitReordered
- });
- $('.subsection-list > ol').droppable({
- // why don't we have a more useful class for subsections than id-holder?
- accept : '.id-holder', // '.unit, .id-holder',
- tolerance: "pointer",
- hoverClass: "dropover",
- drop: onSubsectionReordered,
- greedy: true
- });
-
- // Section reordering
- $('.courseware-overview').droppable({
- accept : '.courseware-section',
- tolerance: "pointer",
- drop: onSectionReordered,
- greedy: true
- });
-
$('.new-course-button').bind('click', addNewCourse);
// section name editing
@@ -279,136 +221,6 @@ function removePolicyMetadata(e) {
saveSubsection()
}
-CMS.HesitateEvent.toggleXpandHesitation = null;
-function initiateHesitate(event, ui) {
- CMS.HesitateEvent.toggleXpandHesitation = new CMS.HesitateEvent(expandSection, 'dragLeave', true);
- $('.collapsed').on('dragEnter', CMS.HesitateEvent.toggleXpandHesitation, CMS.HesitateEvent.toggleXpandHesitation.trigger);
- $('.collapsed').each(function() {
- this.proportions = {width : this.offsetWidth, height : this.offsetHeight };
- // reset b/c these were holding values from aborts
- this.isover = false;
- });
-}
-function checkHoverState(event, ui) {
- // copied from jquery.ui.droppable.js $.ui.ddmanager.drag & other ui.intersect
- var draggable = $(this).data("ui-draggable"),
- x1 = (draggable.positionAbs || draggable.position.absolute).left + (draggable.helperProportions.width / 2),
- y1 = (draggable.positionAbs || draggable.position.absolute).top + (draggable.helperProportions.height / 2);
- $('.collapsed').each(function() {
- // don't expand the thing being carried
- if (ui.helper.is(this)) {
- return;
- }
-
- $.extend(this, {offset : $(this).offset()});
-
- var droppable = this,
- l = droppable.offset.left,
- r = l + droppable.proportions.width,
- t = droppable.offset.top,
- b = t + droppable.proportions.height;
-
- if (l === r) {
- // probably wrong values b/c invisible at the time of caching
- droppable.proportions = { width : droppable.offsetWidth, height : droppable.offsetHeight };
- r = l + droppable.proportions.width;
- b = t + droppable.proportions.height;
- }
- // equivalent to the intersects test
- var intersects = (l < x1 && // Right Half
- x1 < r && // Left Half
- t < y1 && // Bottom Half
- y1 < b ), // Top Half
-
- c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
-
- if(!c) {
- return;
- }
-
- this[c] = true;
- this[c === "isout" ? "isover" : "isout"] = false;
- $(this).trigger(c === "isover" ? "dragEnter" : "dragLeave");
- });
-}
-function removeHesitate(event, ui) {
- $('.collapsed').off('dragEnter', CMS.HesitateEvent.toggleXpandHesitation.trigger);
- CMS.HesitateEvent.toggleXpandHesitation = null;
-}
-
-function expandSection(event) {
- $(event.delegateTarget).removeClass('collapsed', 400);
- // don't descend to icon's on children (which aren't under first child) only to this element's icon
- $(event.delegateTarget).children().first().find('.expand-collapse-icon').removeClass('expand', 400).addClass('collapse');
-}
-
-function onUnitReordered(event, ui) {
- // a unit's been dropped on this subsection,
- // figure out where it came from and where it slots in.
- _handleReorder(event, ui, 'subsection-id', 'li:.leaf');
-}
-
-function onSubsectionReordered(event, ui) {
- // a subsection has been dropped on this section,
- // figure out where it came from and where it slots in.
- _handleReorder(event, ui, 'section-id', 'li:.branch');
-}
-
-function onSectionReordered(event, ui) {
- // a section moved w/in the overall (cannot change course via this, so no parentage change possible, just order)
- _handleReorder(event, ui, 'course-id', '.courseware-section');
-}
-
-function _handleReorder(event, ui, parentIdField, childrenSelector) {
- // figure out where it came from and where it slots in.
- var subsection_id = $(event.target).data(parentIdField);
- var _els = $(event.target).children(childrenSelector);
- var children = _els.map(function(idx, el) { return $(el).data('id'); }).get();
- // if new to this parent, figure out which parent to remove it from and do so
- if (!_.contains(children, ui.draggable.data('id'))) {
- var old_parent = ui.draggable.parent();
- var old_children = old_parent.children(childrenSelector).map(function(idx, el) { return $(el).data('id'); }).get();
- old_children = _.without(old_children, ui.draggable.data('id'));
- $.ajax({
- url: "/save_item",
- type: "POST",
- dataType: "json",
- contentType: "application/json",
- data:JSON.stringify({ 'id' : old_parent.data(parentIdField), 'children' : old_children})
- });
- }
- else {
- // staying in same parent
- // remove so that the replacement in the right place doesn't double it
- children = _.without(children, ui.draggable.data('id'));
- }
- // add to this parent (figure out where)
- for (var i = 0; i < _els.length; i++) {
- if (!ui.draggable.is(_els[i]) && ui.offset.top < $(_els[i]).offset().top) {
- // insert at i in children and _els
- ui.draggable.insertBefore($(_els[i]));
- // TODO figure out correct way to have it remove the style: top:n; setting (and similar line below)
- ui.draggable.attr("style", "position:relative;");
- children.splice(i, 0, ui.draggable.data('id'));
- break;
- }
- }
- // see if it goes at end (the above loop didn't insert it)
- if (!_.contains(children, ui.draggable.data('id'))) {
- $(event.target).append(ui.draggable);
- ui.draggable.attr("style", "position:relative;"); // STYLE hack too
- children.push(ui.draggable.data('id'));
- }
- $.ajax({
- url: "/save_item",
- type: "POST",
- dataType: "json",
- contentType: "application/json",
- data:JSON.stringify({ 'id' : subsection_id, 'children' : children})
- });
-
-}
-
function getEdxTimeFromDateTimeVals(date_val, time_val, format) {
var edxTimeStr = null;
diff --git a/cms/static/js/views/overview.js b/cms/static/js/views/overview.js
new file mode 100644
index 0000000000..8cbae177a8
--- /dev/null
+++ b/cms/static/js/views/overview.js
@@ -0,0 +1,231 @@
+$(document).ready(function() {
+ // making the unit list draggable. Note: sortable didn't work b/c it considered
+ // drop points which the user hovered over as destinations and proactively changed
+ // the dom; so, if the user subsequently dropped at an illegal spot, the reversion
+ // point was the last dom change.
+ $('.unit').draggable({
+ axis: 'y',
+ handle: '.drag-handle',
+ zIndex: 999,
+ start: initiateHesitate,
+ // left 2nd arg in as inert selector b/c i was uncertain whether we'd try to get the shove up/down
+ // to work in the future
+ drag: generateCheckHoverState('.collapsed', ''),
+ stop: removeHesitate,
+ revert: "invalid"
+ });
+
+ // Subsection reordering
+ $('.id-holder').draggable({
+ axis: 'y',
+ handle: '.section-item .drag-handle',
+ zIndex: 999,
+ start: initiateHesitate,
+ drag: generateCheckHoverState('.courseware-section.collapsed', ''),
+ stop: removeHesitate,
+ revert: "invalid"
+ });
+
+ // Section reordering
+ $('.courseware-section').draggable({
+ axis: 'y',
+ handle: 'header .drag-handle',
+ stack: '.courseware-section',
+ revert: "invalid"
+ });
+
+
+ $('.sortable-unit-list').droppable({
+ accept : '.unit',
+ greedy: true,
+ tolerance: "pointer",
+ hoverClass: "dropover",
+ drop: onUnitReordered
+ });
+ $('.subsection-list > ol').droppable({
+ // why don't we have a more useful class for subsections than id-holder?
+ accept : '.id-holder', // '.unit, .id-holder',
+ tolerance: "pointer",
+ hoverClass: "dropover",
+ drop: onSubsectionReordered,
+ greedy: true
+ });
+
+ // Section reordering
+ $('.courseware-overview').droppable({
+ accept : '.courseware-section',
+ tolerance: "pointer",
+ drop: onSectionReordered,
+ greedy: true
+ });
+
+});
+
+CMS.HesitateEvent.toggleXpandHesitation = null;
+function initiateHesitate(event, ui) {
+ CMS.HesitateEvent.toggleXpandHesitation = new CMS.HesitateEvent(expandSection, 'dragLeave', true);
+ $('.collapsed').on('dragEnter', CMS.HesitateEvent.toggleXpandHesitation, CMS.HesitateEvent.toggleXpandHesitation.trigger);
+ $('.collapsed, .unit, .id-holder').each(function() {
+ this.proportions = {width : this.offsetWidth, height : this.offsetHeight };
+ // reset b/c these were holding values from aborts
+ this.isover = false;
+ });
+}
+
+function computeIntersection(droppable, uiHelper, y) {
+ /*
+ * Test whether y falls within the bounds of the droppable on the Y axis
+ */
+ // NOTE: this only judges y axis intersection b/c that's all we're doing right now
+ // don't expand the thing being carried
+ if (uiHelper.is(droppable)) {
+ return null;
+ }
+
+ $.extend(droppable, {offset : $(droppable).offset()});
+
+ var t = droppable.offset.top,
+ b = t + droppable.proportions.height;
+
+ if (t === b) {
+ // probably wrong values b/c invisible at the time of caching
+ droppable.proportions = { width : droppable.offsetWidth, height : droppable.offsetHeight };
+ b = t + droppable.proportions.height;
+ }
+ // equivalent to the intersects test
+ return (t < y && // Bottom Half
+ y < b ); // Top Half
+}
+
+// NOTE: selectorsToShove is not currently being used but I left this code as it did work but not well
+function generateCheckHoverState(selectorsToOpen, selectorsToShove) {
+ return function(event, ui) {
+ // copied from jquery.ui.droppable.js $.ui.ddmanager.drag & other ui.intersect
+ var draggable = $(this).data("ui-draggable"),
+ centerY = (draggable.positionAbs || draggable.position.absolute).top + (draggable.helperProportions.height / 2);
+ $(selectorsToOpen).each(function() {
+ var intersects = computeIntersection(this, ui.helper, centerY),
+ c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
+
+ if(!c) {
+ return;
+ }
+
+ this[c] = true;
+ this[c === "isout" ? "isover" : "isout"] = false;
+ $(this).trigger(c === "isover" ? "dragEnter" : "dragLeave");
+ });
+
+ $(selectorsToShove).each(function() {
+ var intersectsBottom = computeIntersection(this, ui.helper, (draggable.positionAbs || draggable.position.absolute).top);
+
+ if ($(this).hasClass('ui-dragging-pushup')) {
+ if (!intersectsBottom) {
+ console.log('not up', $(this).data('id'));
+ $(this).removeClass('ui-dragging-pushup');
+ }
+ }
+ else if (intersectsBottom) {
+ console.log('up', $(this).data('id'));
+ $(this).addClass('ui-dragging-pushup');
+ }
+
+ var intersectsTop = computeIntersection(this, ui.helper,
+ (draggable.positionAbs || draggable.position.absolute).top + draggable.helperProportions.height);
+
+ if ($(this).hasClass('ui-dragging-pushdown')) {
+ if (!intersectsTop) {
+ console.log('not down', $(this).data('id'));
+ $(this).removeClass('ui-dragging-pushdown');
+ }
+ }
+ else if (intersectsTop) {
+ console.log('down', $(this).data('id'));
+ $(this).addClass('ui-dragging-pushdown');
+ }
+
+ });
+ }
+}
+
+function removeHesitate(event, ui) {
+ $('.collapsed').off('dragEnter', CMS.HesitateEvent.toggleXpandHesitation.trigger);
+ $('.ui-dragging-pushdown').removeClass('ui-dragging-pushdown');
+ $('.ui-dragging-pushup').removeClass('ui-dragging-pushup');
+ CMS.HesitateEvent.toggleXpandHesitation = null;
+}
+
+function expandSection(event) {
+ $(event.delegateTarget).removeClass('collapsed', 400);
+ // don't descend to icon's on children (which aren't under first child) only to this element's icon
+ $(event.delegateTarget).children().first().find('.expand-collapse-icon').removeClass('expand', 400).addClass('collapse');
+}
+
+function onUnitReordered(event, ui) {
+ // a unit's been dropped on this subsection,
+ // figure out where it came from and where it slots in.
+ _handleReorder(event, ui, 'subsection-id', 'li:.leaf');
+}
+
+function onSubsectionReordered(event, ui) {
+ // a subsection has been dropped on this section,
+ // figure out where it came from and where it slots in.
+ _handleReorder(event, ui, 'section-id', 'li:.branch');
+}
+
+function onSectionReordered(event, ui) {
+ // a section moved w/in the overall (cannot change course via this, so no parentage change possible, just order)
+ _handleReorder(event, ui, 'course-id', '.courseware-section');
+}
+
+function _handleReorder(event, ui, parentIdField, childrenSelector) {
+ // figure out where it came from and where it slots in.
+ var subsection_id = $(event.target).data(parentIdField);
+ var _els = $(event.target).children(childrenSelector);
+ var children = _els.map(function(idx, el) { return $(el).data('id'); }).get();
+ // if new to this parent, figure out which parent to remove it from and do so
+ if (!_.contains(children, ui.draggable.data('id'))) {
+ var old_parent = ui.draggable.parent();
+ var old_children = old_parent.children(childrenSelector).map(function(idx, el) { return $(el).data('id'); }).get();
+ old_children = _.without(old_children, ui.draggable.data('id'));
+ $.ajax({
+ url: "/save_item",
+ type: "POST",
+ dataType: "json",
+ contentType: "application/json",
+ data:JSON.stringify({ 'id' : old_parent.data(parentIdField), 'children' : old_children})
+ });
+ }
+ else {
+ // staying in same parent
+ // remove so that the replacement in the right place doesn't double it
+ children = _.without(children, ui.draggable.data('id'));
+ }
+ // add to this parent (figure out where)
+ for (var i = 0; i < _els.length; i++) {
+ if (!ui.draggable.is(_els[i]) && ui.offset.top < $(_els[i]).offset().top) {
+ // insert at i in children and _els
+ ui.draggable.insertBefore($(_els[i]));
+ // TODO figure out correct way to have it remove the style: top:n; setting (and similar line below)
+ ui.draggable.attr("style", "position:relative;");
+ children.splice(i, 0, ui.draggable.data('id'));
+ break;
+ }
+ }
+ // see if it goes at end (the above loop didn't insert it)
+ if (!_.contains(children, ui.draggable.data('id'))) {
+ $(event.target).append(ui.draggable);
+ ui.draggable.attr("style", "position:relative;"); // STYLE hack too
+ children.push(ui.draggable.data('id'));
+ }
+ $.ajax({
+ url: "/save_item",
+ type: "POST",
+ dataType: "json",
+ contentType: "application/json",
+ data:JSON.stringify({ 'id' : subsection_id, 'children' : children})
+ });
+
+}
+
+
diff --git a/cms/static/sass/_courseware.scss b/cms/static/sass/_courseware.scss
index 4ea110f4c8..f2bd25c601 100644
--- a/cms/static/sass/_courseware.scss
+++ b/cms/static/sass/_courseware.scss
@@ -1,90 +1,90 @@
input.courseware-unit-search-input {
- float: left;
- width: 260px;
- background-color: #fff;
+ float: left;
+ width: 260px;
+ background-color: #fff;
}
.branch {
- .section-item {
- @include clearfix();
+ .section-item {
+ @include clearfix();
- .details {
- display: block;
- float: left;
- margin-bottom: 0;
- width: 650px;
- }
+ .details {
+ display: block;
+ float: left;
+ margin-bottom: 0;
+ width: 650px;
+ }
- .gradable-status {
- float: right;
- position: relative;
- top: -4px;
- right: 50px;
- width: 145px;
+ .gradable-status {
+ float: right;
+ position: relative;
+ top: -4px;
+ right: 50px;
+ width: 145px;
- .status-label {
- position: absolute;
- top: 2px;
- right: -5px;
- display: none;
- width: 110px;
- padding: 5px 40px 5px 10px;
- @include border-radius(3px);
- color: $lightGrey;
- text-align: right;
- font-size: 12px;
- font-weight: bold;
- line-height: 16px;
- }
+ .status-label {
+ position: absolute;
+ top: 2px;
+ right: -5px;
+ display: none;
+ width: 110px;
+ padding: 5px 40px 5px 10px;
+ @include border-radius(3px);
+ color: $lightGrey;
+ text-align: right;
+ font-size: 12px;
+ font-weight: bold;
+ line-height: 16px;
+ }
- .menu-toggle {
- z-index: 10;
- position: absolute;
- top: 0;
- right: 5px;
- padding: 5px;
- color: $mediumGrey;
+ .menu-toggle {
+ z-index: 10;
+ position: absolute;
+ top: 0;
+ right: 5px;
+ padding: 5px;
+ color: $mediumGrey;
- &:hover, &.is-active {
- color: $blue;
- }
- }
+ &:hover, &.is-active {
+ color: $blue;
+ }
+ }
- .menu {
- z-index: 1;
- display: none;
- opacity: 0.0;
- position: absolute;
- top: -1px;
- left: 5px;
- margin: 0;
- padding: 8px 12px;
- background: $white;
- border: 1px solid $mediumGrey;
- font-size: 12px;
- @include border-radius(4px);
- @include box-shadow(0 1px 2px rgba(0, 0, 0, .2));
- @include transition(opacity .15s);
+ .menu {
+ z-index: 1;
+ display: none;
+ opacity: 0.0;
+ position: absolute;
+ top: -1px;
+ left: 5px;
+ margin: 0;
+ padding: 8px 12px;
+ background: $white;
+ border: 1px solid $mediumGrey;
+ font-size: 12px;
+ @include border-radius(4px);
+ @include box-shadow(0 1px 2px rgba(0, 0, 0, .2));
+ @include transition(opacity .15s);
- li {
- width: 115px;
- margin-bottom: 3px;
- padding-bottom: 3px;
- border-bottom: 1px solid $lightGrey;
+ li {
+ width: 115px;
+ margin-bottom: 3px;
+ padding-bottom: 3px;
+ border-bottom: 1px solid $lightGrey;
- &:last-child {
- margin-bottom: 0;
- padding-bottom: 0;
- border: none;
+ &:last-child {
+ margin-bottom: 0;
+ padding-bottom: 0;
+ border: none;
- a {
- color: $darkGrey;
- }
- }
- }
+ a {
+ color: $darkGrey;
+ }
+ }
+ }
a {
color: $blue;
@@ -127,262 +127,262 @@ input.courseware-unit-search-input {
.courseware-section {
- position: relative;
- background: #fff;
- border-radius: 3px;
- border: 1px solid $mediumGrey;
- margin-top: 15px;
- padding-bottom: 12px;
- @include box-shadow(0 1px 1px rgba(0, 0, 0, 0.1));
+ position: relative;
+ background: #fff;
+ border-radius: 3px;
+ border: 1px solid $mediumGrey;
+ margin-top: 15px;
+ padding-bottom: 12px;
+ @include box-shadow(0 1px 1px rgba(0, 0, 0, 0.1));
- &:first-child {
- margin-top: 0;
- }
+ &:first-child {
+ margin-top: 0;
+ }
- &.collapsed {
- padding-bottom: 0;
- }
+ &.collapsed {
+ padding-bottom: 0;
+ }
- label {
- float: left;
- line-height: 29px;
- }
+ label {
+ float: left;
+ line-height: 29px;
+ }
- .datepair {
- float: left;
- margin-left: 10px;
- }
+ .datepair {
+ float: left;
+ margin-left: 10px;
+ }
- .section-published-date {
- position: absolute;
- top: 19px;
- right: 90px;
- padding: 4px 10px;
- border-radius: 3px;
- background: $lightGrey;
- text-align: right;
+ .section-published-date {
+ position: absolute;
+ top: 19px;
+ right: 90px;
+ padding: 4px 10px;
+ border-radius: 3px;
+ background: $lightGrey;
+ text-align: right;
- .published-status {
- font-size: 12px;
- margin-right: 15px;
+ .published-status {
+ font-size: 12px;
+ margin-right: 15px;
- strong {
- font-weight: bold;
- }
- }
+ strong {
+ font-weight: bold;
+ }
+ }
- .schedule-button {
- @include blue-button;
- }
+ .schedule-button {
+ @include blue-button;
+ }
- .edit-button {
- @include blue-button;
- }
+ .edit-button {
+ @include blue-button;
+ }
- .schedule-button,
- .edit-button {
- font-size: 11px;
- padding: 3px 15px 5px;
- }
- }
+ .schedule-button,
+ .edit-button {
+ font-size: 11px;
+ padding: 3px 15px 5px;
+ }
+ }
- .datepair .date,
- .datepair .time {
- padding-left: 0;
- padding-right: 0;
- border: none;
- background: none;
- @include box-shadow(none);
- font-size: 13px;
- font-weight: bold;
- color: $blue;
- cursor: pointer;
- }
+ .datepair .date,
+ .datepair .time {
+ padding-left: 0;
+ padding-right: 0;
+ border: none;
+ background: none;
+ @include box-shadow(none);
+ font-size: 13px;
+ font-weight: bold;
+ color: $blue;
+ cursor: pointer;
+ }
- .datepair .date {
- width: 80px;
- }
+ .datepair .date {
+ width: 80px;
+ }
- .datepair .time {
- width: 65px;
- }
+ .datepair .time {
+ width: 65px;
+ }
- &.collapsed .subsection-list,
- .collapsed .subsection-list,
- .collapsed > ol {
- display: none !important;
- }
+ &.collapsed .subsection-list,
+ .collapsed .subsection-list,
+ .collapsed > ol {
+ display: none !important;
+ }
- header {
- min-height: 75px;
- @include clearfix();
+ header {
+ min-height: 75px;
+ @include clearfix();
- .item-details, .section-published-date {
+ .item-details, .section-published-date {
- }
+ }
- .item-details {
- display: inline-block;
- padding: 20px 0 10px 0;
- @include clearfix();
+ .item-details {
+ display: inline-block;
+ padding: 20px 0 10px 0;
+ @include clearfix();
- .section-name {
- float: left;
- margin-right: 10px;
- width: 350px;
- font-size: 19px;
- font-weight: bold;
- color: $blue;
- }
+ .section-name {
+ float: left;
+ margin-right: 10px;
+ width: 350px;
+ font-size: 19px;
+ font-weight: bold;
+ color: $blue;
+ }
- .section-name-span {
- cursor: pointer;
- @include transition(color .15s);
+ .section-name-span {
+ cursor: pointer;
+ @include transition(color .15s);
- &:hover {
- color: $orange;
- }
- }
+ &:hover {
+ color: $orange;
+ }
+ }
- .section-name-edit {
- position: relative;
- width: 400px;
- background: $white;
+ .section-name-edit {
+ position: relative;
+ width: 400px;
+ background: $white;
- input {
- font-size: 16px;
- }
-
- .save-button {
- @include blue-button;
- padding: 7px 20px 7px;
- margin-right: 5px;
- }
+ input {
+ font-size: 16px;
+ }
+
+ .save-button {
+ @include blue-button;
+ padding: 7px 20px 7px;
+ margin-right: 5px;
+ }
- .cancel-button {
- @include white-button;
- padding: 7px 20px 7px;
- }
- }
+ .cancel-button {
+ @include white-button;
+ padding: 7px 20px 7px;
+ }
+ }
- .section-published-date {
- float: right;
- width: 265px;
- margin-right: 220px;
- @include border-radius(3px);
- background: $lightGrey;
+ .section-published-date {
+ float: right;
+ width: 265px;
+ margin-right: 220px;
+ @include border-radius(3px);
+ background: $lightGrey;
- .published-status {
- font-size: 12px;
- margin-right: 15px;
+ .published-status {
+ font-size: 12px;
+ margin-right: 15px;
- strong {
- font-weight: bold;
- }
- }
+ strong {
+ font-weight: bold;
+ }
+ }
- .schedule-button {
- @include blue-button;
- }
+ .schedule-button {
+ @include blue-button;
+ }
- .edit-button {
- @include blue-button;
- }
+ .edit-button {
+ @include blue-button;
+ }
- .schedule-button,
- .edit-button {
- font-size: 11px;
- padding: 3px 15px 5px;
-
- }
- }
+ .schedule-button,
+ .edit-button {
+ font-size: 11px;
+ padding: 3px 15px 5px;
+
+ }
+ }
- .gradable-status {
- position: absolute;
- top: 20px;
- right: 70px;
- width: 145px;
+ .gradable-status {
+ position: absolute;
+ top: 20px;
+ right: 70px;
+ width: 145px;
- .status-label {
- position: absolute;
- top: 0;
- right: 2px;
- display: none;
- width: 100px;
- padding: 10px 35px 10px 10px;
- @include border-radius(3px);
- background: $lightGrey;
- color: $lightGrey;
- text-align: right;
- font-size: 12px;
- font-weight: bold;
- line-height: 16px;
- }
+ .status-label {
+ position: absolute;
+ top: 0;
+ right: 2px;
+ display: none;
+ width: 100px;
+ padding: 10px 35px 10px 10px;
+ @include border-radius(3px);
+ background: $lightGrey;
+ color: $lightGrey;
+ text-align: right;
+ font-size: 12px;
+ font-weight: bold;
+ line-height: 16px;
+ }
- .menu-toggle {
- z-index: 10;
- position: absolute;
- top: 2px;
- right: 5px;
- padding: 5px;
- color: $lightGrey;
+ .menu-toggle {
+ z-index: 10;
+ position: absolute;
+ top: 2px;
+ right: 5px;
+ padding: 5px;
+ color: $lightGrey;
- &:hover, &.is-active {
- color: $blue;
- }
- }
+ &:hover, &.is-active {
+ color: $blue;
+ }
+ }
- .menu {
- z-index: 1;
- display: none;
- opacity: 0.0;
- position: absolute;
- top: -1px;
- left: 2px;
- margin: 0;
- padding: 8px 12px;
- background: $white;
- border: 1px solid $mediumGrey;
- font-size: 12px;
- @include border-radius(4px);
- @include box-shadow(0 1px 2px rgba(0, 0, 0, .2));
- @include transition(opacity .15s);
- @include transition(display .15s);
+ .menu {
+ z-index: 1;
+ display: none;
+ opacity: 0.0;
+ position: absolute;
+ top: -1px;
+ left: 2px;
+ margin: 0;
+ padding: 8px 12px;
+ background: $white;
+ border: 1px solid $mediumGrey;
+ font-size: 12px;
+ @include border-radius(4px);
+ @include box-shadow(0 1px 2px rgba(0, 0, 0, .2));
+ @include transition(opacity .15s);
+ @include transition(display .15s);
- li {
- width: 115px;
- margin-bottom: 3px;
- padding-bottom: 3px;
- border-bottom: 1px solid $lightGrey;
+ li {
+ width: 115px;
+ margin-bottom: 3px;
+ padding-bottom: 3px;
+ border-bottom: 1px solid $lightGrey;
- &:last-child {
- margin-bottom: 0;
- padding-bottom: 0;
- border: none;
+ &:last-child {
+ margin-bottom: 0;
+ padding-bottom: 0;
+ border: none;
- a {
- color: $darkGrey;
- }
- }
- }
+ a {
+ color: $darkGrey;
+ }
+ }
+ }
- a {
+ a {
- &.is-selected {
- font-weight: bold;
- }
- }
- }
+ &.is-selected {
+ font-weight: bold;
+ }
+ }
+ }
- // dropdown state
- &.is-active {
+ // dropdown state
+ &.is-active {
- .menu {
- z-index: 1000;
- display: block;
- opacity: 1.0;
- }
+ .menu {
+ z-index: 1000;
+ display: block;
+ opacity: 1.0;
+ }
.menu-toggle {
@@ -408,256 +408,272 @@ input.courseware-unit-search-input {
}
}
- .item-actions {
- margin-top: 21px;
- margin-right: 12px;
+ .item-actions {
+ margin-top: 21px;
+ margin-right: 12px;
- .edit-button,
- .delete-button {
- margin-top: -3px;
- }
- }
+ .edit-button,
+ .delete-button {
+ margin-top: -3px;
+ }
+ }
- .expand-collapse-icon {
- float: left;
- margin: 29px 6px 16px 16px;
- @include transition(none);
+ .expand-collapse-icon {
+ float: left;
+ margin: 29px 6px 16px 16px;
+ @include transition(none);
- &.expand {
- background-position: 0 0;
- }
+ &.expand {
+ background-position: 0 0;
+ }
- &.collapsed {
-
- }
- }
+ &.collapsed {
+
+ }
+ }
- .drag-handle {
- margin-left: 11px;
- }
- }
+ .drag-handle {
+ margin-left: 11px;
+ }
+ }
- h3 {
- font-size: 19px;
- font-weight: 700;
- color: $blue;
- }
+ h3 {
+ font-size: 19px;
+ font-weight: 700;
+ color: $blue;
+ }
- .section-name-span {
- cursor: pointer;
- @include transition(color .15s);
+ .section-name-span {
+ cursor: pointer;
+ @include transition(color .15s);
- &:hover {
- color: $orange;
- }
- }
+ &:hover {
+ color: $orange;
+ }
+ }
- .section-name-form {
- margin-bottom: 15px;
- }
+ .section-name-form {
+ margin-bottom: 15px;
+ }
- .section-name-edit {
- input {
- font-size: 16px;
- }
-
- .save-button {
- @include blue-button;
- padding: 7px 20px 7px;
- margin-right: 5px;
- }
+ .section-name-edit {
+ input {
+ font-size: 16px;
+ }
+
+ .save-button {
+ @include blue-button;
+ padding: 7px 20px 7px;
+ margin-right: 5px;
+ }
- .cancel-button {
- @include white-button;
- padding: 7px 20px 7px;
- }
- }
+ .cancel-button {
+ @include white-button;
+ padding: 7px 20px 7px;
+ }
+ }
- h4 {
- font-size: 12px;
- color: #878e9d;
+ h4 {
+ font-size: 12px;
+ color: #878e9d;
- strong {
- font-weight: bold;
- }
- }
+ strong {
+ font-weight: bold;
+ }
+ }
- .list-header {
- @include linear-gradient(top, transparent, rgba(0, 0, 0, .1));
- background-color: #ced2db;
- border-radius: 3px 3px 0 0;
- }
+ .list-header {
+ @include linear-gradient(top, transparent, rgba(0, 0, 0, .1));
+ background-color: #ced2db;
+ border-radius: 3px 3px 0 0;
+ }
- .subsection-list {
- margin: 0 12px;
+ .subsection-list {
+ margin: 0 12px;
- > ol {
- @include tree-view;
- border-top-width: 0;
- }
- }
+ > ol {
+ @include tree-view;
+ border-top-width: 0;
+ }
+ }
- &.new-section {
- header {
- height: auto;
- @include clearfix();
- }
+ &.new-section {
+ header {
+ height: auto;
+ @include clearfix();
+ }
- .expand-collapse-icon {
- visibility: hidden;
- }
- }
+ .expand-collapse-icon {
+ visibility: hidden;
+ }
+ }
}
.toggle-button-sections {
- display: none;
- position: relative;
- float: right;
- margin-top: 10px;
+ display: none;
+ position: relative;
+ float: right;
+ margin-top: 10px;
- font-size: 13px;
- color: $darkGrey;
+ font-size: 13px;
+ color: $darkGrey;
- &.is-shown {
- display: block;
- }
+ &.is-shown {
+ display: block;
+ }
- .ss-icon {
- @include border-radius(20px);
- position: relative;
- top: -1px;
- display: inline-block;
- margin-right: 2px;
- line-height: 5px;
- font-size: 11px;
- }
+ .ss-icon {
+ @include border-radius(20px);
+ position: relative;
+ top: -1px;
+ display: inline-block;
+ margin-right: 2px;
+ line-height: 5px;
+ font-size: 11px;
+ }
- .label {
- display: inline-block;
- }
+ .label {
+ display: inline-block;
+ }
}
.new-section-name,
.new-subsection-name-input {
- width: 515px;
+ width: 515px;
}
.new-section-name-save,
.new-subsection-name-save {
- @include blue-button;
- padding: 4px 20px 7px;
- margin: 0 5px;
- color: #fff !important;
+ @include blue-button;
+ padding: 4px 20px 7px;
+ margin: 0 5px;
+ color: #fff !important;
}
.new-section-name-cancel,
.new-subsection-name-cancel {
- @include white-button;
- padding: 4px 20px 7px;
- color: #8891a1 !important;
+ @include white-button;
+ padding: 4px 20px 7px;
+ color: #8891a1 !important;
}
.dummy-calendar {
- display: none;
- position: absolute;
- top: 55px;
- left: 110px;
- z-index: 9999;
- border: 1px solid #3C3C3C;
- @include box-shadow(0 1px 15px rgba(0, 0, 0, .2));
+ display: none;
+ position: absolute;
+ top: 55px;
+ left: 110px;
+ z-index: 9999;
+ border: 1px solid #3C3C3C;
+ @include box-shadow(0 1px 15px rgba(0, 0, 0, .2));
}
.unit-name-input {
- padding: 20px 40px;
+ padding: 20px 40px;
- label {
- display: block;
- }
+ label {
+ display: block;
+ }
- input {
- width: 100%;
- font-size: 20px;
- }
+ input {
+ width: 100%;
+ font-size: 20px;
+ }
}
.preview {
- background: url(../img/preview.jpg) center top no-repeat;
+ background: url(../img/preview.jpg) center top no-repeat;
}
.edit-subsection-publish-settings {
- display: none;
- position: fixed;
- top: 100px;
- left: 50%;
- z-index: 99999;
- width: 600px;
- margin-left: -300px;
- background: #fff;
- text-align: center;
+ display: none;
+ position: fixed;
+ top: 100px;
+ left: 50%;
+ z-index: 99999;
+ width: 600px;
+ margin-left: -300px;
+ background: #fff;
+ text-align: center;
- .settings {
- padding: 40px;
- }
+ .settings {
+ padding: 40px;
+ }
- h3 {
- font-size: 34px;
- font-weight: 300;
- }
+ h3 {
+ font-size: 34px;
+ font-weight: 300;
+ }
- .picker {
- margin: 30px 0 65px;
- }
+ .picker {
+ margin: 30px 0 65px;
+ }
- .description {
- margin-top: 30px;
- font-size: 14px;
- line-height: 20px;
- }
+ .description {
+ margin-top: 30px;
+ font-size: 14px;
+ line-height: 20px;
+ }
- strong {
- font-weight: 700;
- }
+ strong {
+ font-weight: 700;
+ }
- .start-date,
- .start-time {
- font-size: 19px;
- }
+ .start-date,
+ .start-time {
+ font-size: 19px;
+ }
- .save-button {
- @include blue-button;
- margin-right: 10px;
- }
+ .save-button {
+ @include blue-button;
+ margin-right: 10px;
+ }
- .cancel-button {
- @include white-button;
- }
+ .cancel-button {
+ @include white-button;
+ }
- .save-button,
- .cancel-button {
- font-size: 16px;
- }
+ .save-button,
+ .cancel-button {
+ font-size: 16px;
+ }
}
.collapse-all-button {
- float: right;
- margin-top: 10px;
- font-size: 13px;
- color: $darkGrey;
+ float: right;
+ margin-top: 10px;
+ font-size: 13px;
+ color: $darkGrey;
}
// sort/drag and drop
.ui-droppable {
- min-height: 20px;
+ @include transition (padding 0.5s ease-in-out 0s);
+ min-height: 20px;
+ padding: 0;
- &.dropover {
- padding-top: 10px;
- padding-bottom: 10px;
- }
+ &.dropover {
+ padding: 15px 0;
+ }
+}
+
+.ui-draggable-dragging {
+ @include box-shadow(0 1px 2px rgba(0, 0, 0, .3));
+ border: 1px solid $darkGrey;
+ opacity : 0.2;
+ &:hover {
+ opacity : 1.0;
+ .section-item {
+ background: $yellow !important;
+ }
+ }
+
+ // hiding unit button - temporary fix until this semantically corrected
+ .new-unit-item {
+ display: none;
+ }
}
ol.ui-droppable .branch:first-child .section-item {
- border-top: none;
+ border-top: none;
}
-
-
diff --git a/cms/static/sass/_unit.scss b/cms/static/sass/_unit.scss
index d8ca1117e9..bdc76c811c 100644
--- a/cms/static/sass/_unit.scss
+++ b/cms/static/sass/_unit.scss
@@ -305,6 +305,7 @@
.wrapper-component-editor {
z-index: 9999;
position: relative;
+ background: $lightBluishGrey2;
}
.component-editor {
diff --git a/cms/templates/overview.html b/cms/templates/overview.html
index a20531200e..20ddcead01 100644
--- a/cms/templates/overview.html
+++ b/cms/templates/overview.html
@@ -18,6 +18,7 @@
+