MDL-71691 core_course: section styling

This commit is contained in:
Bas Brands
2021-12-08 13:14:05 +01:00
parent c3dbe5a977
commit cdb651d46a
21 changed files with 547 additions and 264 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+30 -1
View File
@@ -79,7 +79,8 @@ define(
TOGGLE: '.toggle-display,.dropdown-toggle',
SECTIONLI: 'li.section',
SECTIONACTIONMENU: '.section_action_menu',
ADDSECTIONS: '.changenumsections [data-add-sections]'
ADDSECTIONS: '.changenumsections [data-add-sections]',
SECTIONBADGES: '[data-region="sectionbadges"]',
};
Y.use('moodle-course-coursebase', function() {
@@ -581,9 +582,11 @@ define(
if (action === 'hide' || action === 'show') {
if (action === 'hide') {
sectionElement.addClass('hidden');
setSectionBadge(sectionElement[0], 'hiddenfromstudents', true);
replaceActionItem(actionItem, 'i/show',
'showfromothers', 'format_' + courseformat, 'show');
} else {
setSectionBadge(sectionElement[0], 'hiddenfromstudents', false);
sectionElement.removeClass('hidden');
replaceActionItem(actionItem, 'i/hide',
'hidefromothers', 'format_' + courseformat, 'hide');
@@ -613,11 +616,13 @@ define(
replaceActionItem(actionItem, 'i/marked',
'highlightoff', 'core', 'removemarker');
courseeditor.dispatch('legacySectionAction', action, sectionid);
setSectionBadge(sectionElement[0], 'highlighted', true);
} else if (action === 'removemarker') {
sectionElement.removeClass('current');
replaceActionItem(actionItem, 'i/marker',
'highlight', 'core', 'setmarker');
courseeditor.dispatch('legacySectionAction', action, sectionid);
setSectionBadge(sectionElement[0], 'highlighted', false);
}
};
@@ -722,6 +727,30 @@ define(
return true;
};
/**
* Sets the section badge in the section header.
*
* @param {JQuery} sectionElement section element we perform action on
* @param {String} badgetype the type of badge this is for
* @param {bool} add true to add, false to remove
*/
var setSectionBadge = function(sectionElement, badgetype, add) {
const sectionbadges = sectionElement.querySelector(SELECTOR.SECTIONBADGES);
if (!sectionbadges) {
return;
}
if (add) {
templates.render('core_courseformat/local/content/section/badges', {[badgetype]: 1})
.then(function(html, js) {
templates.prependNodeContents(sectionbadges, html, js);
return true;
}).catch(notification.exception);
} else {
const badge = sectionbadges.querySelector('[data-type="' + badgetype + '"]');
badge.remove();
}
};
// Register a function to be executed after D&D of an activity.
Y.use('moodle-course-coursebase', function() {
M.course.coursebase.register_module({
@@ -26,6 +26,7 @@ namespace core_courseformat\output\local\content;
use core_courseformat\base as course_format;
use completion_info;
use context_course;
use renderable;
use templatable;
use section_info;
@@ -119,11 +120,13 @@ class section implements renderable, templatable {
* @return stdClass data context for a mustache template
*/
public function export_for_template(\renderer_base $output): stdClass {
global $USER;
$format = $this->format;
$course = $format->get_course();
$thissection = $this->thissection;
$singlesection = $format->get_section_number();
$context = context_course::instance($course->id);
$summary = new $this->summaryclass($format, $thissection);
$availability = new $this->availabilityclass($format, $thissection);
@@ -135,6 +138,7 @@ class section implements renderable, templatable {
'insertafter' => false,
'summary' => $summary->export_for_template($output),
'availability' => $availability->export_for_template($output),
'restrictionlock' => !empty($thissection->availableinfo),
];
// Check if it is a stealth sections (orphaned).
@@ -188,6 +192,15 @@ class section implements renderable, templatable {
// When a section is displayed alone the title goes over the section, not inside it.
$header = new $this->headerclass($format, $thissection);
if (!$thissection->visible) {
$data->ishidden = true;
$data->notavailable = true;
if (has_capability('moodle/course:viewhiddensections', $context, $USER)) {
$data->hiddenfromstudents = true;
$data->notavailable = false;
}
}
if ($thissection->section == $singlesection) {
if (empty($this->hidetitle)) {
$data->singleheader = $header->export_for_template($output);
@@ -216,11 +229,13 @@ class section implements renderable, templatable {
$data->cmlist = $cmlist->export_for_template($output);
}
if (!$thissection->visible) {
$data->ishidden = true;
$data->hasavailability = false;
if (isset($data->availability->hasavailability)) {
$data->hasavailability = $data->availability->hasavailability;
}
if ($format->is_section_current($thissection)) {
$data->iscurrent = true;
$data->highlighted = true;
$data->currentlink = get_accesshide(
get_string('currentsection', 'format_'.$format->get_format())
);
@@ -229,4 +244,3 @@ class section implements renderable, templatable {
return $data;
}
}
@@ -103,13 +103,7 @@ class availability implements renderable, templatable {
$info = [];
if (!$section->visible) {
if ($canviewhidden) {
$info[] = $this->availability_info(get_string('hiddenfromstudents'), 'ishidden');
} else {
// We are here because of the setting "Hidden sections are shown as not available".
// Student can not see the section contents but can see its name.
$info[] = $this->availability_info(get_string('notavailable'), 'ishidden');
}
$info = [];
} else if (!$section->uservisible) {
if ($section->availableinfo) {
// Note: We only get to this function if availableinfo is non-empty,
@@ -79,7 +79,8 @@ class controlmenu implements renderable, templatable {
// Convert control array into an action_menu.
$menu = new action_menu();
$menu->set_menu_trigger(get_string('edit'));
$icon = $output->pix_icon('i/menu', get_string('edit'));
$menu->set_menu_trigger($icon, 'btn btn-icon d-flex align-items-center justify-content-center');
$menu->attributes['class'] .= ' section-actions';
foreach ($controls as $value) {
$url = empty($value['url']) ? '' : $value['url'];
@@ -73,31 +73,30 @@ class header implements renderable, templatable {
'id' => $section->id,
];
$data->title = $output->section_title_without_link($section, $course);
$coursedisplay = $course->coursedisplay ?? COURSE_DISPLAY_SINGLEPAGE;
$data->headerdisplaymultipage = false;
if ($coursedisplay == COURSE_DISPLAY_MULTIPAGE) {
$data->headerdisplaymultipage = true;
$data->title = $output->section_title($section, $course);
}
if ($section->section > $format->get_last_section_number()) {
// Stealth sections (orphaned) has special title.
$data->title = get_string('orphanedactivitiesinsectionno', '', $section->section);
} else if ($section->section && ($section->section == $format->get_section_number())) {
// Regular section title.
$data->title = $output->section_title_without_link($section, $course);
$data->issinglesection = true;
} else if ($section->uservisible) {
// Regular section title.
$data->title = $output->section_title($section, $course);
} else {
// Regular section title without link.
$data->title = $output->section_title_without_link($section, $course);
}
if (!$section->visible) {
$data->ishidden = true;
}
$coursedisplay = $course->coursedisplay ?? COURSE_DISPLAY_SINGLEPAGE;
if ($course->id == SITEID) {
$data->sitehome = true;
}
$data->editing = $format->show_editor();
if (!$format->show_editor() && $coursedisplay == COURSE_DISPLAY_MULTIPAGE && empty($data->issinglesection)) {
if ($section->uservisible) {
$data->url = course_get_url($course, $section->section);
@@ -80,7 +80,7 @@
}
}}
<li id="section-{{num}}"
class="section main {{#onlysummary}} section-summary {{/onlysummary}} clearfix
class="section course-section main {{#onlysummary}} section-summary {{/onlysummary}} clearfix
{{#ishidden}} hidden {{/ishidden}} {{#iscurrent}} current {{/iscurrent}}
{{#isstealth}} orphaned {{/isstealth}}"
data-sectionid="{{num}}"
@@ -89,39 +89,51 @@
data-id="{{id}}"
data-number="{{num}}"
>
{{#singleheader}} {{> core_courseformat/local/content/section/header }} {{/singleheader}}
<div class="left side">{{#iscurrent}} {{{currentlink}}} {{/iscurrent}}</div>
<div class="right side">
{{#collapsemenu}}
<div class="course-section-header d-flex"
data-for="section_title"
data-id="{{id}}"
data-number="{{num}}"
>
{{#singleheader}} {{> core_courseformat/local/content/section/header }} {{/singleheader}}
{{#header}} {{> core_courseformat/local/content/section/header }} {{/header}}
{{#restrictionlock}}
<div class="align-self-center ml-2">
{{#pix}}t/unlock, core{{/pix}}
</div>
{{/restrictionlock}}
<div data-region="sectionbadges" class="sectionbadges d-flex align-items-center">
{{> core_courseformat/local/content/section/badges }}
</div>
{{#collapsemenu}}
<div class="flex-fill d-flex justify-content-end mr-2 align-self-center">
<a
id="collapsesections"
class="section-collapsemenu"
href="#"
aria-expanded="true"
role="button"
data-toggle="toggleall"
>
<span class="collapseall">{{#str}}collapseall{{/str}}</span>
<span class="expandall">{{#str}}expandall{{/str}}</span>
</a>
</div>
{{/collapsemenu}}
{{#controlmenu}}
</div>
{{/collapsemenu}}
{{#controlmenu}}
{{> core_courseformat/local/content/section/controlmenu }}
{{/controlmenu}}
{{/controlmenu}}
</div>
{{#header}} {{> core_courseformat/local/content/section/header }} {{/header}}
<div id="coursecontentcollapse{{num}}"
class="content {{^iscoursedisplaymultipage}}
{{^sitehome}}course-content-item-content collapse {{#contentexpanded}}show{{/contentexpanded}}{{/sitehome}}
{{/iscoursedisplaymultipage}}">
{{#availability}}
{{> core_courseformat/local/content/section/availability }}
{{/availability}}
<div class="summary">
{{#summary}}
{{> core_courseformat/local/content/section/summary }}
{{/summary}}
<div class="{{#hasavailability}}description small{{/hasavailability}} my-3">
{{#summary}}
{{> core_courseformat/local/content/section/summary }}
{{/summary}}
{{#availability}}
{{> core_courseformat/local/content/section/availability }}
{{/availability}}
</div>
{{#cmsummary}} {{> core_courseformat/local/content/section/cmsummary }} {{/cmsummary}}
{{#cmlist}} {{> core_courseformat/local/content/section/cmlist }} {{/cmlist}}
@@ -25,10 +25,7 @@
{
"info": [
{
"classes": "",
"text": "Not available unless: <ul><li>It is on or after <strong>8 June 2012</strong></li></ul>",
"ishidden": 0,
"isstealth": 0,
"isrestricted": 1,
"isfullinfo": 1
}
@@ -36,15 +33,15 @@
"hasavailability": true
}
}}
<div class="section_availability">
<div class="section_availability course-description-item">
{{#hasavailability}}
{{#info}}
<div class="availabilityinfo {{classes}}">
{{^isrestricted}}
<span class="badge badge-info">{{{text}}}</span>
<span class="badge badge-pill badge-warning">{{{text}}}</span>
{{/isrestricted}}
{{#isrestricted}}
<span class="badge badge-info">{{#str}}restricted, core{{/str}}</span> {{{text}}}
{{#pix}}t/unlock, core{{/pix}}</span> {{{text}}}
{{/isrestricted}}
</div>
{{/info}}
@@ -0,0 +1,39 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_courseformat/local/content/section/badges
Convenience mustache to displays if an activity is in hidden or stealth mode.
Format plugins are free to implement an alternative inplace editable for activities.
Example context (json):
{
"highlighted" : "1",
"hiddenfromstudents" : "1",
"notavailable" : "0"
}
}}
{{#highlighted}}
<span class="badge badge-pill badge-primary order-1" data-type="highlighted">{{#str}}highlighted{{/str}}</span>
{{/highlighted}}
{{#hiddenfromstudents}}
<span class="badge badge-pill badge-warning order-2" data-type="hiddenfromstudents">{{#str}}hiddenfromstudents{{/str}}</span>
{{/hiddenfromstudents}}
{{#notavailable}}
<span class="badge badge-pill badge-secondary order-3">{{#str}}notavailable{{/str}}</span>
{{/notavailable}}
@@ -26,7 +26,7 @@
}
}}
{{#hasmenu}}
<div class="section_action_menu" data-sectionid="{{id}}">
<div class="section_action_menu ml-auto" data-sectionid="{{id}}">
{{{menu}}}
</div>
{{/hasmenu}}
@@ -25,54 +25,42 @@
"name": "Section title",
"title": "<a href=\"http://moodle/course/view.php?id=5#section-0\">Section title</a>",
"url": "#",
"iscoursedisplaymultipage": true
"headerdisplaymultipage": true,
"editing": 0
}
}}
{{#iscoursedisplaymultipage}}
<h3 class="sectionid-{{id}}-title sectionname flex-fill"
data-for="section_title" data-id="{{id}}" data-number="{{num}}">
{{#url}}
<a href="{{{url}}}" class="{{#ishidden}} dimmed_text {{/ishidden}}">{{name}}</a>
{{/url}}
{{^url}}
<span>{{{title}}}</span>
{{/url}}
{{#headerdisplaymultipage}}
<h3 class="sectionid-{{id}}-title sectionname">
{{{title}}}
</h3>
{{/iscoursedisplaymultipage}}
{{^iscoursedisplaymultipage}}
{{/headerdisplaymultipage}}
{{^headerdisplaymultipage}}
{{#sitehome}}
<h2 class="sectionid-{{id}}-title sectionname flex-fill"
data-for="section_title" data-id="{{id}}" data-number="{{num}}">
{{#url}}
<a href="{{{url}}}" class="{{#ishidden}} dimmed_text {{/ishidden}}">{{name}}</a>
{{/url}}
{{^url}}
<span>{{{title}}}</span>
{{/url}}
<h2 class="sectionid-{{id}}-title sectionname">
{{{title}}}
</h2>
{{/sitehome}}
{{^sitehome}}
<div class="d-flex">
<div class="d-flex align-items-center position-relative">
<a role="button" data-toggle="collapse"
href="#coursecontentcollapse{{num}}"
id="collapssesection{{num}}"
aria-expanded="{{#contentexpanded}}true{{/contentexpanded}}{{^contentexpanded}}false{{/contentexpanded}}"
aria-controls="coursecontentcollapse{{num}}"
class="btn btn-icon mr-1 icons-collapse-expand {{^contentexpanded}}collapsed{{/contentexpanded}}"
class="btn btn-icon mr-1 icons-collapse-expand {{^editing}}stretched-link {{/editing}}{{^contentexpanded}}collapsed{{/contentexpanded}}"
aria-label="{{name}}">
<span class="expanded-icon icon-no-margin p-2" data-toggle="tooltip" title="{{#str}} collapse, core {{/str}}">
<span class="expanded-icon icon-no-margin p-2" title="{{#str}} collapse, core {{/str}}">
{{#pix}} t/expandedchevron, core {{/pix}}
</span>
<span class="collapsed-icon icon-no-margin p-2" data-toggle="tooltip" title="{{#str}} expand, core {{/str}}">
{{#pix}} t/collapsedchevron, core {{/pix}}
</span>
<span class="collapsed-icon icon-no-margin p-2" title="{{#str}} expand, core {{/str}}">
{{#pix}} t/collapsedchevron, core {{/pix}}
</span>
</a>
<h3 class="sectionid-{{id}}-title sectionname course-content-item {{^visible}}dimmed{{/visible}} flex-fill"
id="coursecontentsection{{num}}" data-for="section_title" data-id="{{id}}" data-number="{{num}}"
data-action="togglecoursecontentsection">
<h3 class="sectionid-{{id}}-title sectionname course-content-item d-flex align-self-stretch align-items-center mb-0"
id="coursecontentsection{{num}}" data-for="section_title" data-id="{{id}}" data-number="{{num}}">
{{{title}}}
</h3>
</div>
{{/sitehome}}
{{/iscoursedisplaymultipage}}
{{/headerdisplaymultipage}}
@@ -25,7 +25,9 @@
}
}}
{{#summarytext}}
<div class="summarytext">
{{{summarytext}}}
</div>
<div class="course-description-item summarytext">
<div class="description-inner">
{{{summarytext}}}
</div>
</div>
{{/summarytext}}
@@ -79,12 +79,12 @@
tabindex="-1"
>
<span class="collapsed-icon icon-no-margin mr-1"
data-toggle="tooltip" title="{{#str}} expand, core {{/str}}">
title="{{#str}} expand, core {{/str}}">
{{#pix}} t/collapsedchevron, core {{/pix}}
<span class="sr-only">{{#str}} expand, core {{/str}}</span>
</span>
<span class="expanded-icon icon-no-margin mr-1"
data-toggle="tooltip" title="{{#str}} collapse, core {{/str}}">
title="{{#str}} collapse, core {{/str}}">
{{#pix}} t/expandedchevron, core {{/pix}}
<span class="sr-only">{{#str}} collapse, core {{/str}}</span>
</span>
+1 -1
View File
@@ -435,7 +435,7 @@ class format_topics extends core_courseformat\base {
$renderer = $PAGE->get_renderer('format_topics');
if (!($section instanceof section_info)) {
$modinfo = $this->get_modinfo();
$modinfo = course_modinfo::instance($this->courseid);
$section = $modinfo->get_section_info($section->section);
}
$elementclass = $this->get_output_classname('content\\section\\availability');
+1 -1
View File
@@ -536,7 +536,7 @@ class format_weeks extends core_courseformat\base {
$renderer = $PAGE->get_renderer('format_weeks');
if (!($section instanceof section_info)) {
$modinfo = $this->get_modinfo();
$modinfo = course_modinfo::instance($this->courseid);
$section = $modinfo->get_section_info($section->section);
}
$elementclass = $this->get_output_classname('content\\section\\availability');
+131 -157
View File
@@ -2853,9 +2853,9 @@
}
},
"array-back": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/array-back/-/array-back-5.0.0.tgz",
"integrity": "sha512-kgVWwJReZWmVuWOQKEOohXKJX+nD02JAZ54D1RRWlv8L0NebauKAaFxACKzB74RTclt1+WNz5KHaLRDAPZbDEw==",
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.0.tgz",
"integrity": "sha512-mixVv03GOOn/ubHE4STQ+uevX42ETdk0JoMVEjNkSOCT7WgERh7C8/+NyhWYNpE3BN69pxFyJIBcF7CxWz/+4A==",
"dev": true
},
"array-each": {
@@ -3878,12 +3878,12 @@
}
},
"command-line-args": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.1.1.tgz",
"integrity": "sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.0.tgz",
"integrity": "sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==",
"dev": true,
"requires": {
"array-back": "^3.0.1",
"array-back": "^3.1.0",
"find-replace": "^3.0.0",
"lodash.camelcase": "^4.3.0",
"typical": "^4.0.0"
@@ -4528,23 +4528,10 @@
"walk-back": "^5.0.0"
},
"dependencies": {
"handlebars": {
"version": "4.7.7",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
"integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
"dev": true,
"requires": {
"minimist": "^1.2.5",
"neo-async": "^2.6.0",
"source-map": "^0.6.1",
"uglify-js": "^3.1.4",
"wordwrap": "^1.0.0"
}
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"array-back": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/array-back/-/array-back-5.0.0.tgz",
"integrity": "sha512-kgVWwJReZWmVuWOQKEOohXKJX+nD02JAZ54D1RRWlv8L0NebauKAaFxACKzB74RTclt1+WNz5KHaLRDAPZbDEw==",
"dev": true
},
"reduce-flatten": {
@@ -4552,18 +4539,6 @@
"resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-3.0.1.tgz",
"integrity": "sha512-bYo+97BmUUOzg09XwfkwALt4PQH1M5L0wzKerBt6WLm3Fhdd43mMS89HiT1B9pJIqko/6lWx3OnV4J9f2Kqp5Q==",
"dev": true
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
},
"wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
"integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
"dev": true
}
}
},
@@ -5291,6 +5266,14 @@
"requires": {
"array-back": "^5.0.0",
"glob": "^7.1.6"
},
"dependencies": {
"array-back": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/array-back/-/array-back-5.0.0.tgz",
"integrity": "sha512-kgVWwJReZWmVuWOQKEOohXKJX+nD02JAZ54D1RRWlv8L0NebauKAaFxACKzB74RTclt1+WNz5KHaLRDAPZbDEw==",
"dev": true
}
}
},
"file-type": {
@@ -5605,6 +5588,37 @@
"minimatch": "0.3"
}
},
"handlebars": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-2.0.0.tgz",
"integrity": "sha1-bp1/hRSjRn+l6fgswVjs/B1ax28=",
"dev": true,
"requires": {
"optimist": "~0.3",
"uglify-js": "~2.3"
},
"dependencies": {
"async": {
"version": "0.2.10",
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
"integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
"dev": true,
"optional": true
},
"uglify-js": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.3.6.tgz",
"integrity": "sha1-+gmEdwtCi3qbKoBY9GNV0U/vIRo=",
"dev": true,
"optional": true,
"requires": {
"async": "~0.2.6",
"optimist": "~0.3.5",
"source-map": "~0.1.7"
}
}
}
},
"jshint": {
"version": "2.5.11",
"resolved": "https://registry.npmjs.org/jshint/-/jshint-2.5.11.tgz",
@@ -5639,12 +5653,6 @@
"integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
"dev": true
},
"mime": {
"version": "1.2.11",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
"integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=",
"dev": true
},
"minimatch": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
@@ -5656,10 +5664,11 @@
}
},
"source-map": {
"version": "0.1.34",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz",
"integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=",
"version": "0.1.43",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
"integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
"dev": true,
"optional": true,
"requires": {
"amdefine": ">=0.0.4"
}
@@ -5687,6 +5696,15 @@
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
"integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
"dev": true
},
"source-map": {
"version": "0.1.34",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz",
"integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=",
"dev": true,
"requires": {
"amdefine": ">=0.0.4"
}
}
}
},
@@ -6344,43 +6362,23 @@
}
},
"handlebars": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-2.0.0.tgz",
"integrity": "sha1-bp1/hRSjRn+l6fgswVjs/B1ax28=",
"version": "4.7.7",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
"integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
"dev": true,
"requires": {
"optimist": "~0.3",
"uglify-js": "~2.3"
"minimist": "^1.2.5",
"neo-async": "^2.6.0",
"source-map": "^0.6.1",
"uglify-js": "^3.1.4",
"wordwrap": "^1.0.0"
},
"dependencies": {
"async": {
"version": "0.2.10",
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
"integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
"dev": true,
"optional": true
},
"source-map": {
"version": "0.1.43",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
"integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
"dev": true,
"optional": true,
"requires": {
"amdefine": ">=0.0.4"
}
},
"uglify-js": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.3.6.tgz",
"integrity": "sha1-+gmEdwtCi3qbKoBY9GNV0U/vIRo=",
"dev": true,
"optional": true,
"requires": {
"async": "~0.2.6",
"optimist": "~0.3.5",
"source-map": "~0.1.7"
}
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
}
},
@@ -7188,43 +7186,18 @@
"path-is-absolute": "^1.0.0"
}
},
"handlebars": {
"version": "4.7.7",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
"integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
"dev": true,
"requires": {
"minimist": "^1.2.5",
"neo-async": "^2.6.0",
"source-map": "^0.6.1",
"uglify-js": "^3.1.4",
"wordwrap": "^1.0.0"
}
},
"has-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
"integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
"dev": true
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
},
"resolve": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
"integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
"dev": true
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
},
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -7233,12 +7206,6 @@
"requires": {
"has-flag": "^1.0.0"
}
},
"wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
"integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
"dev": true
}
}
},
@@ -7338,49 +7305,49 @@
}
},
"jsdoc-api": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-7.0.1.tgz",
"integrity": "sha512-SttT7mAvl/L9liIoOoa647ksFlD+fyNP2Vy80MBRi6akOmJQ4ryQjMBOPfg1veKfwVp/8f3My8Bb2JnVGL9wVg==",
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-7.1.0.tgz",
"integrity": "sha512-yjIiZa6LFOgd0dyFW/R+3unnVUhhbU1CeBhisgjBPRHkar83rkgDtTMRdgQotSvt+pGlmknZqfwR5AQuMh9/6w==",
"dev": true,
"requires": {
"array-back": "^5.0.0",
"array-back": "^6.2.0",
"cache-point": "^2.0.0",
"collect-all": "^1.0.4",
"file-set": "^4.0.2",
"fs-then-native": "^2.0.0",
"jsdoc": "^3.6.6",
"jsdoc": "^3.6.7",
"object-to-spawn-args": "^2.0.1",
"temp-path": "^1.0.0",
"walk-back": "^5.0.0"
"walk-back": "^5.1.0"
}
},
"jsdoc-parse": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/jsdoc-parse/-/jsdoc-parse-6.0.0.tgz",
"integrity": "sha512-35DhfCHL1bq5r0TvolhyyGhhoem700IfEvviL8I1t99Qxa3aSmWbBEpnvvouA7TyXlwxcQfSg75ryXW8Ppq7FA==",
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/jsdoc-parse/-/jsdoc-parse-6.0.1.tgz",
"integrity": "sha512-ij3Az5y2dp+ajMxYnEJH7kjKK5v6+yZ3Cg/KtRdoT15pIm6qTk/W8q72QdNLZ9jQm/U2/ifENFXXTOe6xIxGeA==",
"dev": true,
"requires": {
"array-back": "^5.0.0",
"array-back": "^6.1.1",
"lodash.omit": "^4.5.0",
"lodash.pick": "^4.4.0",
"reduce-extract": "^1.0.0",
"sort-array": "^4.1.3",
"sort-array": "^4.1.4",
"test-value": "^3.0.0"
}
},
"jsdoc-to-markdown": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-7.0.1.tgz",
"integrity": "sha512-wN6WAHAPiCyAU7m/+F3FbEEV40CGVWMae49SBPIvfy7kDq/2fBrOw86vdbnLdmjt6u/tHnoxHNrHWYbYFN+4UA==",
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-7.1.0.tgz",
"integrity": "sha512-LJAiwrUaOpPqOmllqnVVqfBZh6KI/rHHfSwL7DerTpjLQWHfpndz/JUNlF5ngYjbL4aHNf7uJ1TuXl6xGfq5rg==",
"dev": true,
"requires": {
"array-back": "^5.0.0",
"array-back": "^6.2.0",
"command-line-tool": "^0.8.0",
"config-master": "^3.1.0",
"dmd": "^6.0.0",
"jsdoc-api": "^7.0.0",
"jsdoc-parse": "^6.0.0",
"walk-back": "^5.0.0"
"jsdoc-api": "^7.1.0",
"jsdoc-parse": "^6.0.1",
"walk-back": "^5.1.0"
}
},
"jsdoc-type-pratt-parser": {
@@ -7396,9 +7363,9 @@
"dev": true
},
"jshint": {
"version": "2.13.0",
"resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.0.tgz",
"integrity": "sha512-Nd+md9wIeyfDK+RGrbOBzwLONSTdihGMtyGYU/t7zYcN2EgUa4iuY3VK2oxtPYrW5ycTj18iC+UbhNTxe4C66g==",
"version": "2.13.1",
"resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.1.tgz",
"integrity": "sha512-vymzfR3OysF5P774x6zYv0bD4EpH6NWRxpq54wO9mA9RuY49yb1teKSICkLx2Ryx+mfzlVVNNbTBtsRtg78t7g==",
"dev": true,
"requires": {
"cli": "~1.0.0",
@@ -7411,12 +7378,6 @@
"strip-json-comments": "1.0.x"
},
"dependencies": {
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
"strip-json-comments": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
@@ -7690,13 +7651,6 @@
"ctype": "0.5.3"
}
},
"mime": {
"version": "1.2.11",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
"integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=",
"dev": true,
"optional": true
},
"mime-types": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz",
@@ -8196,9 +8150,9 @@
}
},
"mime": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
"integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==",
"version": "1.2.11",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
"integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=",
"dev": true
},
"mime-db": {
@@ -8243,6 +8197,12 @@
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
},
"minimist-options": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.0.2.tgz",
@@ -8279,9 +8239,9 @@
}
},
"mkdirp2": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp2/-/mkdirp2-1.0.4.tgz",
"integrity": "sha512-Q2PKB4ZR4UPtjLl76JfzlgSCUZhSV1AXQgAZa1qt5RiaALFjP/CDrGvFBrOz7Ck6McPcwMAxTsJvWOUjOU8XMw==",
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/mkdirp2/-/mkdirp2-1.0.5.tgz",
"integrity": "sha512-xOE9xbICroUDmG1ye2h4bZ8WBie9EGmACaco8K8cx6RlkJJrxGIqjGqztAI+NMhexXBcdGbSEzI6N3EJPevxZw==",
"dev": true
},
"ms": {
@@ -8316,9 +8276,9 @@
"dev": true
},
"neo-async": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
"integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
"nice-try": {
@@ -8723,6 +8683,14 @@
"dev": true,
"requires": {
"wordwrap": "~0.0.2"
},
"dependencies": {
"wordwrap": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
"integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
"dev": true
}
}
},
"optionator": {
@@ -10098,6 +10066,12 @@
"typical": "^6.0.1"
},
"dependencies": {
"array-back": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/array-back/-/array-back-5.0.0.tgz",
"integrity": "sha512-kgVWwJReZWmVuWOQKEOohXKJX+nD02JAZ54D1RRWlv8L0NebauKAaFxACKzB74RTclt1+WNz5KHaLRDAPZbDEw==",
"dev": true
},
"typical": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/typical/-/typical-6.0.1.tgz",
@@ -11364,9 +11338,9 @@
}
},
"walk-back": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/walk-back/-/walk-back-5.0.0.tgz",
"integrity": "sha512-ASerU3aOj9ok+uMNiW0A6/SEwNOxhPmiprbHmPFw1faz7Qmoy9wD3sbmL5HYG+IBxT5c/4cX9O2kSpNv8OAM9A==",
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/walk-back/-/walk-back-5.1.0.tgz",
"integrity": "sha512-Uhxps5yZcVNbLEAnb+xaEEMdgTXl9qAQDzKYejG2AZ7qPwRQ81lozY9ECDbjLPNWm7YsO1IK5rsP1KoQzXAcGA==",
"dev": true
},
"walkdir": {
@@ -11448,9 +11422,9 @@
"dev": true
},
"wordwrap": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
"integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
"integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
"dev": true
},
"wordwrapjs": {
+2 -2
View File
@@ -35,8 +35,8 @@
"hugo-bin": "^0.50.2",
"hugo-lunr-indexer": "^1.1.3",
"jsdoc": "^3.6.7",
"jsdoc-to-markdown": "^7.0.1",
"jshint": "^2.13.0",
"jsdoc-to-markdown": "^7.1.0",
"jshint": "^2.13.1",
"node-sass": "^4.14.1",
"npm-run-all": "^4.1.5",
"semver": "7.3.2",
+107 -1
View File
@@ -469,7 +469,7 @@ body:not(.editing) .sitetopic ul.section {
}
.course-content li {
&.section {
&.section:not(.course-section) {
@include media-breakpoint-down(sm) {
ul {
padding-left: 0;
@@ -1331,3 +1331,109 @@ span.editinstructions {
}
}
}
// These are the new styles for the renewed course UI in isssue MDL-71691
// once the old course renderers are removed in MDL-72656, all css related
// to activities and sections above this commend needs to be reviewed an
// possibly removed.
.course-section {
list-style: none;
padding-left: 0;
border-bottom: $border-width solid $border-color;
&:last-child {
border-bottom: 0;
}
.sectionbadges .badge {
margin-left: 0.5rem;
}
.course-section-header.draggable {
cursor: move;
}
.section_action_menu {
.dropdown-toggle::after {
display: none;
}
}
.inplaceeditable {
display: flex;
align-items: center;
}
&.section-summary {
padding-left: 1rem;
padding-right: 1rem;
margin-bottom: 0.5rem;
margin-top: 0.5rem;
@if $enable-rounded {
@include border-radius($border-radius-lg);
}
}
.section-summary-activities .activity-count {
color: $text-muted;
font-size: $font-size-sm;
margin: 3px;
white-space: nowrap;
display: inline-block;
}
}
$activity-iconcontainer-width: 50px;
$activity-iconcontainer-height: 50px;
.activity-item .activityiconcontainer {
width: $activity-iconcontainer-width;
height: $activity-iconcontainer-height;
display: inline-flex;
justify-content: center;
align-items: center;
background-color: $gray-100;
border-radius: 4px;
padding: 0.7rem;
.activityicon {
margin: 0;
height: 24px;
width: 24px;
}
}
.description .course-description-item {
background-color: $gray-100;
padding-left: map-get($spacers, 3);
padding-right: map-get($spacers, 3);
.description-inner {
padding-bottom: map-get($spacers, 2);
padding-top: map-get($spacers, 2);
border-bottom: $border-width solid $border-color;
p:last-child {
padding-bottom: 0;
margin-bottom: 0;
}
}
&:first-child {
margin-top: map-get($spacers, 3);
padding-top: map-get($spacers, 3);
.description-inner {
padding-top: 0;
}
}
&:last-child {
padding-bottom: map-get($spacers, 3);
.description-inner {
padding-bottom: 0;
border-bottom: 0;
}
}
}
+72 -8
View File
@@ -13994,24 +13994,24 @@ body:not(.editing) .sitetopic ul.section {
display: none; }
@media (max-width: 767.98px) {
.course-content li.section ul {
.course-content li.section:not(.course-section) ul {
padding-left: 0; } }
.course-content li.section ul {
.course-content li.section:not(.course-section) ul {
list-style: disc; }
.course-content li.section ul ul {
.course-content li.section:not(.course-section) ul ul {
list-style: circle; }
.course-content li.section ul ul ul {
.course-content li.section:not(.course-section) ul ul ul {
list-style: square; }
.course-content li.section li.activity ul {
.course-content li.section:not(.course-section) li.activity ul {
list-style: disc; }
.course-content li.section li.activity ul ul {
.course-content li.section:not(.course-section) li.activity ul ul {
list-style: circle; }
.course-content li.section li.activity ul ul ul {
.course-content li.section:not(.course-section) li.activity ul ul ul {
list-style: square; }
.course-content li.section .right > .icon:first-child {
.course-content li.section:not(.course-section) .right > .icon:first-child {
/* Remove the spacer icon. */
display: none; }
@@ -14648,6 +14648,70 @@ span.editinstructions {
.section-collapsemenu.collapsed .expandall {
display: block; }
.course-section {
list-style: none;
padding-left: 0;
border-bottom: 1px solid #dee2e6; }
.course-section:last-child {
border-bottom: 0; }
.course-section .sectionbadges .badge {
margin-left: 0.5rem; }
.course-section .course-section-header.draggable {
cursor: move; }
.course-section .section_action_menu .dropdown-toggle::after {
display: none; }
.course-section .inplaceeditable {
display: flex;
align-items: center; }
.course-section.section-summary {
padding-left: 1rem;
padding-right: 1rem;
margin-bottom: 0.5rem;
margin-top: 0.5rem;
border-radius: 0.3rem; }
.course-section .section-summary-activities .activity-count {
color: #6a737b;
font-size: 0.8203125rem;
margin: 3px;
white-space: nowrap;
display: inline-block; }
.activity-item .activityiconcontainer {
width: 50px;
height: 50px;
display: inline-flex;
justify-content: center;
align-items: center;
background-color: #f8f9fa;
border-radius: 4px;
padding: 0.7rem; }
.activity-item .activityiconcontainer .activityicon {
margin: 0;
height: 24px;
width: 24px; }
.description .course-description-item {
background-color: #f8f9fa;
padding-left: 1rem;
padding-right: 1rem; }
.description .course-description-item .description-inner {
padding-bottom: 0.5rem;
padding-top: 0.5rem;
border-bottom: 1px solid #dee2e6; }
.description .course-description-item .description-inner p:last-child {
padding-bottom: 0;
margin-bottom: 0; }
.description .course-description-item:first-child {
margin-top: 1rem;
padding-top: 1rem; }
.description .course-description-item:first-child .description-inner {
padding-top: 0; }
.description .course-description-item:last-child {
padding-bottom: 1rem; }
.description .course-description-item:last-child .description-inner {
padding-bottom: 0;
border-bottom: 0; }
/* Anchor link offset fix. This makes hash links scroll 60px down to account for the fixed header. */
:target {
scroll-margin-top: 70px; }
+72 -8
View File
@@ -13994,24 +13994,24 @@ body:not(.editing) .sitetopic ul.section {
display: none; }
@media (max-width: 767.98px) {
.course-content li.section ul {
.course-content li.section:not(.course-section) ul {
padding-left: 0; } }
.course-content li.section ul {
.course-content li.section:not(.course-section) ul {
list-style: disc; }
.course-content li.section ul ul {
.course-content li.section:not(.course-section) ul ul {
list-style: circle; }
.course-content li.section ul ul ul {
.course-content li.section:not(.course-section) ul ul ul {
list-style: square; }
.course-content li.section li.activity ul {
.course-content li.section:not(.course-section) li.activity ul {
list-style: disc; }
.course-content li.section li.activity ul ul {
.course-content li.section:not(.course-section) li.activity ul ul {
list-style: circle; }
.course-content li.section li.activity ul ul ul {
.course-content li.section:not(.course-section) li.activity ul ul ul {
list-style: square; }
.course-content li.section .right > .icon:first-child {
.course-content li.section:not(.course-section) .right > .icon:first-child {
/* Remove the spacer icon. */
display: none; }
@@ -14648,6 +14648,70 @@ span.editinstructions {
.section-collapsemenu.collapsed .expandall {
display: block; }
.course-section {
list-style: none;
padding-left: 0;
border-bottom: 1px solid #dee2e6; }
.course-section:last-child {
border-bottom: 0; }
.course-section .sectionbadges .badge {
margin-left: 0.5rem; }
.course-section .course-section-header.draggable {
cursor: move; }
.course-section .section_action_menu .dropdown-toggle::after {
display: none; }
.course-section .inplaceeditable {
display: flex;
align-items: center; }
.course-section.section-summary {
padding-left: 1rem;
padding-right: 1rem;
margin-bottom: 0.5rem;
margin-top: 0.5rem;
border-radius: 0.3rem; }
.course-section .section-summary-activities .activity-count {
color: #6a737b;
font-size: 0.8203125rem;
margin: 3px;
white-space: nowrap;
display: inline-block; }
.activity-item .activityiconcontainer {
width: 50px;
height: 50px;
display: inline-flex;
justify-content: center;
align-items: center;
background-color: #f8f9fa;
border-radius: 4px;
padding: 0.7rem; }
.activity-item .activityiconcontainer .activityicon {
margin: 0;
height: 24px;
width: 24px; }
.description .course-description-item {
background-color: #f8f9fa;
padding-left: 1rem;
padding-right: 1rem; }
.description .course-description-item .description-inner {
padding-bottom: 0.5rem;
padding-top: 0.5rem;
border-bottom: 1px solid #dee2e6; }
.description .course-description-item .description-inner p:last-child {
padding-bottom: 0;
margin-bottom: 0; }
.description .course-description-item:first-child {
margin-top: 1rem;
padding-top: 1rem; }
.description .course-description-item:first-child .description-inner {
padding-top: 0; }
.description .course-description-item:last-child {
padding-bottom: 1rem; }
.description .course-description-item:last-child .description-inner {
padding-bottom: 0;
border-bottom: 0; }
/* Anchor link offset fix. This makes hash links scroll 60px down to account for the fixed header. */
:target {
scroll-margin-top: 60px; }