mirror of
https://github.com/moodle/moodle.git
synced 2025-04-21 16:32:18 +02:00
MDL-77032 grade: Collapsible grade categories in Gradebook setup
This commit is contained in:
parent
12a8176926
commit
4d7900a391
14
grade/amd/build/edittree_index.min.js
vendored
14
grade/amd/build/edittree_index.min.js
vendored
@ -1,10 +1,10 @@
|
||||
define("core_grades/edittree_index",["exports","core/localstorage","core/loadingicon","core/notification","core/pending"],(function(_exports,_localstorage,_loadingicon,_notification,_pending){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}
|
||||
/**
|
||||
* Enhance the gradebook tree setup with various facilities.
|
||||
*
|
||||
* @module core_grades/edittree_index
|
||||
* @copyright 2016 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
define("core_grades/edittree_index",["jquery"],(function($){var edittree=function(){$("body").on("change",".weightoverride",edittree.toggleWeightInput),$("#menumoveafter").on("change",(function(){var form=$(this).closest("form");form.find("#bulkmoveinput").val(1),form.submit()}))};return edittree.toggleWeightInput=function(e){e.preventDefault();var node=$(this),row=node.closest("tr");$('input[name="weight_'+row.data("itemid")+'"]').prop("disabled",!node.prop("checked"))},{enhance:edittree}}));
|
||||
* Enhance the gradebook tree setup with various facilities.
|
||||
*
|
||||
* @module core_grades/edittree_index
|
||||
* @copyright 2016 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_localstorage=_interopRequireDefault(_localstorage),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending);const SELECTORS_CATEGORY_TOGGLE=".toggle-category",SELECTORS_GRADEBOOK_SETUP_TABLE=".setup-grades",SELECTORS_WEIGHT_OVERRIDE_CHECKBOX=".weightoverride",SELECTORS_BULK_MOVE_SELECT="#menumoveafter",SELECTORS_BULK_MOVE_INPUT="#bulkmoveinput",SELECTORS_GRADEBOOK_SETUP_WRAPPER=".gradetree-wrapper",SELECTORS_GRADEBOOK_SETUP_BOX=".gradetreebox",toggleWeightInput=weightOverrideCheckbox=>{const row=weightOverrideCheckbox.closest("tr"),itemId=row.dataset.itemid;row.querySelector('input[name="weight_'.concat(itemId,'"]')).disabled=!weightOverrideCheckbox.checked},submitBulkMoveForm=bulkMoveSelect=>{const form=bulkMoveSelect.closest("form");form.querySelector(SELECTORS_BULK_MOVE_INPUT).value=1,form.submit()},toggleCategory=(toggleElement,courseId,userId,storeCollapsedState)=>{const target=toggleElement.dataset.target,category=toggleElement.dataset.category,isCollapsing="true"===toggleElement.getAttribute("aria-expanded"),gradebookSetup=toggleElement.closest(SELECTORS_GRADEBOOK_SETUP_TABLE),targetRows=gradebookSetup.querySelectorAll(target),maxGradeCell=toggleElement.closest("tr").querySelector(".column-range");if(isCollapsing){if(toggleElement.setAttribute("aria-expanded","false"),toggleElement.dataset.target="[data-hidden-by='".concat(category,"']"),maxGradeCell){const relatedCategoryAggregationRow=gradebookSetup.querySelector("[data-aggregationforcategory='".concat(category,"']"));maxGradeCell.innerHTML=relatedCategoryAggregationRow.querySelector(".column-range").innerHTML}}else toggleElement.setAttribute("aria-expanded","true"),toggleElement.dataset.target=".".concat(category,"[data-hidden='false']"),maxGradeCell&&(maxGradeCell.innerHTML="");storeCollapsedState&&((category,courseId,userId,isCollapsing)=>{const currentStoredCollapsedCategories=_localstorage.default.get("core_grade_collapsedgradecategories_".concat(courseId,"_").concat(userId));let collapsedCategories=currentStoredCollapsedCategories?JSON.parse(currentStoredCollapsedCategories):[];isCollapsing?collapsedCategories.push(category):collapsedCategories=collapsedCategories.filter((cat=>cat!==category)),_localstorage.default.set("core_grade_collapsedgradecategories_".concat(courseId,"_").concat(userId),JSON.stringify(collapsedCategories))})(category,courseId,userId,isCollapsing),targetRows.forEach((row=>{isCollapsing?(row.dataset.hidden="true",row.dataset.hiddenBy=category):(row.dataset.hidden="false",row.dataset.hiddenBy="")})),updateParentCategoryRowspans(toggleElement,targetRows.length)},updateParentCategoryRowspans=(toggleElement,num)=>{const gradebookSetup=toggleElement.closest(SELECTORS_GRADEBOOK_SETUP_TABLE);toggleElement.closest("tr").classList.forEach((className=>{const parentCategoryToggleElement=gradebookSetup.querySelector('[data-target=".'.concat(className,"[data-hidden='false']\""));if(parentCategoryToggleElement){const categoryRowSpanElement=parentCategoryToggleElement.closest("tr").nextElementSibling.querySelector("[rowspan]");"true"===toggleElement.getAttribute("aria-expanded")?categoryRowSpanElement.rowSpan=categoryRowSpanElement.rowSpan+num:categoryRowSpanElement.rowSpan=categoryRowSpanElement.rowSpan-num}}))};_exports.init=(courseId,userId)=>{const pendingPromise=new _pending.default,gradebookSetupBox=document.querySelector(SELECTORS_GRADEBOOK_SETUP_BOX);(0,_loadingicon.addIconToContainer)(gradebookSetupBox).then((loader=>{setTimeout((()=>{((courseId,userId)=>{const gradebookSetup=document.querySelector(SELECTORS_GRADEBOOK_SETUP_TABLE),storedCollapsedCategories=_localstorage.default.get("core_grade_collapsedgradecategories_".concat(courseId,"_").concat(userId));storedCollapsedCategories&&JSON.parse(storedCollapsedCategories).forEach((category=>{const categoryToggleElement=gradebookSetup.querySelector("".concat(SELECTORS_CATEGORY_TOGGLE,'[data-category="').concat(category,'"'));categoryToggleElement&&toggleCategory(categoryToggleElement,courseId,userId,!1)}))})(courseId,userId),loader.remove(),document.querySelector(SELECTORS_GRADEBOOK_SETUP_WRAPPER).classList.remove("d-none"),pendingPromise.resolve()}),150)})).fail(_notification.default.exception),((courseId,userId)=>{document.addEventListener("change",(e=>{e.target.matches(SELECTORS_WEIGHT_OVERRIDE_CHECKBOX)&&toggleWeightInput(e.target),e.target.matches(SELECTORS_BULK_MOVE_SELECT)&&submitBulkMoveForm(e.target)})),document.querySelector(SELECTORS_GRADEBOOK_SETUP_TABLE).addEventListener("click",(e=>{const toggle=e.target.closest(SELECTORS_CATEGORY_TOGGLE);toggle&&toggleCategory(toggle,courseId,userId,!0)}))})(courseId,userId)}}));
|
||||
|
||||
//# sourceMappingURL=edittree_index.min.js.map
|
File diff suppressed because one or more lines are too long
@ -20,44 +20,248 @@
|
||||
* @copyright 2016 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
define([
|
||||
'jquery',
|
||||
], function($) {
|
||||
/**
|
||||
* Enhance the edittree functionality.
|
||||
*
|
||||
* @method edittree
|
||||
*/
|
||||
var edittree = function() {
|
||||
// Watch for the weight override checkboxes.
|
||||
$('body').on('change', '.weightoverride', edittree.toggleWeightInput);
|
||||
|
||||
// Watch changes to the bulk move menu and submit.
|
||||
$('#menumoveafter').on('change', function() {
|
||||
var form = $(this).closest('form'),
|
||||
bulkmove = form.find('#bulkmoveinput');
|
||||
import storage from 'core/localstorage';
|
||||
import {addIconToContainer} from 'core/loadingicon';
|
||||
import Notification from 'core/notification';
|
||||
import Pending from 'core/pending';
|
||||
|
||||
bulkmove.val(1);
|
||||
form.submit();
|
||||
const SELECTORS = {
|
||||
CATEGORY_TOGGLE: '.toggle-category',
|
||||
GRADEBOOK_SETUP_TABLE: '.setup-grades',
|
||||
WEIGHT_OVERRIDE_CHECKBOX: '.weightoverride',
|
||||
BULK_MOVE_SELECT: '#menumoveafter',
|
||||
BULK_MOVE_INPUT: '#bulkmoveinput',
|
||||
GRADEBOOK_SETUP_WRAPPER: '.gradetree-wrapper',
|
||||
GRADEBOOK_SETUP_BOX: '.gradetreebox'
|
||||
};
|
||||
|
||||
/**
|
||||
* Register related event listeners.
|
||||
*
|
||||
* @method registerListenerEvents
|
||||
* @param {int} courseId The ID of course.
|
||||
* @param {int} userId The ID of the current logged user.
|
||||
*/
|
||||
const registerListenerEvents = (courseId, userId) => {
|
||||
|
||||
document.addEventListener('change', e => {
|
||||
// Toggle the availability of the weight input field based on the changed state (checked/unchecked) of the
|
||||
// related checkbox element.
|
||||
if (e.target.matches(SELECTORS.WEIGHT_OVERRIDE_CHECKBOX)) {
|
||||
toggleWeightInput(e.target);
|
||||
}
|
||||
// Submit the bulk move form when the selected option in the bulk move select element has been changed.
|
||||
if (e.target.matches(SELECTORS.BULK_MOVE_SELECT)) {
|
||||
submitBulkMoveForm(e.target);
|
||||
}
|
||||
});
|
||||
|
||||
const gradebookSetup = document.querySelector(SELECTORS.GRADEBOOK_SETUP_TABLE);
|
||||
gradebookSetup.addEventListener('click', e => {
|
||||
const toggle = e.target.closest(SELECTORS.CATEGORY_TOGGLE);
|
||||
// Collapse or expand the grade category when the visibility toggle button is activated.
|
||||
if (toggle) {
|
||||
toggleCategory(toggle, courseId, userId, true);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Toggle the weight input field based on its checkbox.
|
||||
*
|
||||
* @method toggleWeightInput
|
||||
* @param {object} weightOverrideCheckbox The weight override checkbox element.
|
||||
*/
|
||||
const toggleWeightInput = (weightOverrideCheckbox) => {
|
||||
const row = weightOverrideCheckbox.closest('tr');
|
||||
const itemId = row.dataset.itemid;
|
||||
const weightOverrideInput = row.querySelector(`input[name="weight_${itemId}"]`);
|
||||
weightOverrideInput.disabled = !weightOverrideCheckbox.checked;
|
||||
};
|
||||
|
||||
/**
|
||||
* Submit the bulk move form.
|
||||
*
|
||||
* @method toggleWeightInput
|
||||
* @param {object} bulkMoveSelect The bulk move select element.
|
||||
*/
|
||||
const submitBulkMoveForm = (bulkMoveSelect) => {
|
||||
const form = bulkMoveSelect.closest('form');
|
||||
const bulkMoveInput = form.querySelector(SELECTORS.BULK_MOVE_INPUT);
|
||||
bulkMoveInput.value = 1;
|
||||
form.submit();
|
||||
};
|
||||
|
||||
/**
|
||||
* Method that collapses all relevant grade categories based on the locally stored state of collapsed grade categories
|
||||
* for a given user.
|
||||
*
|
||||
* @method collapseGradeCategories
|
||||
* @param {int} courseId The ID of course.
|
||||
* @param {int} userId The ID of the current logged user.
|
||||
*/
|
||||
const collapseGradeCategories = (courseId, userId) => {
|
||||
const gradebookSetup = document.querySelector(SELECTORS.GRADEBOOK_SETUP_TABLE);
|
||||
const storedCollapsedCategories = storage.get(`core_grade_collapsedgradecategories_${courseId}_${userId}`);
|
||||
|
||||
if (storedCollapsedCategories) {
|
||||
// Fetch all grade categories that are locally stored as collapsed and re-apply the collapse action.
|
||||
const collapsedCategories = JSON.parse(storedCollapsedCategories);
|
||||
|
||||
collapsedCategories.forEach((category) => {
|
||||
const categoryToggleElement =
|
||||
gradebookSetup.querySelector(`${SELECTORS.CATEGORY_TOGGLE}[data-category="${category}"`);
|
||||
if (categoryToggleElement) {
|
||||
toggleCategory(categoryToggleElement, courseId, userId, false);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Toggle the weight input field based on its checkbox.
|
||||
*
|
||||
* @method toggleWeightInput
|
||||
* @param {EventFacade} e
|
||||
* @private
|
||||
*/
|
||||
edittree.toggleWeightInput = function(e) {
|
||||
e.preventDefault();
|
||||
var node = $(this),
|
||||
row = node.closest('tr');
|
||||
/**
|
||||
* Method that updates the locally stored state of collapsed grade categories based on a performed toggle action on a
|
||||
* given grade category.
|
||||
*
|
||||
* @method updateCollapsedCategoriesStoredState
|
||||
* @param {string} category The category to be added or removed from the collapsed grade categories local storage.
|
||||
* @param {int} courseId The ID of course.
|
||||
* @param {int} userId The ID of the current logged user.
|
||||
* @param {boolean} isCollapsing Whether the category is being collapsed or not.
|
||||
*/
|
||||
const updateCollapsedCategoriesStoredState = (category, courseId, userId, isCollapsing) => {
|
||||
const currentStoredCollapsedCategories = storage.get(`core_grade_collapsedgradecategories_${courseId}_${userId}`);
|
||||
let collapsedCategories = currentStoredCollapsedCategories ?
|
||||
JSON.parse(currentStoredCollapsedCategories) : [];
|
||||
|
||||
$('input[name="weight_' + row.data('itemid') + '"]').prop('disabled', !node.prop('checked'));
|
||||
};
|
||||
if (isCollapsing) {
|
||||
collapsedCategories.push(category);
|
||||
} else {
|
||||
collapsedCategories = collapsedCategories.filter(cat => cat !== category);
|
||||
}
|
||||
storage.set(`core_grade_collapsedgradecategories_${courseId}_${userId}`, JSON.stringify(collapsedCategories));
|
||||
};
|
||||
|
||||
return /** @alias module:core_grades/edittree_index */ {
|
||||
enhance: edittree
|
||||
};
|
||||
});
|
||||
/**
|
||||
* Method that handles the grade category toggle action.
|
||||
*
|
||||
* @method toggleCategory
|
||||
* @param {object} toggleElement The category toggle node that was clicked.
|
||||
* @param {int} courseId The ID of course.
|
||||
* @param {int} userId The ID of the current logged user.
|
||||
* @param {boolean} storeCollapsedState Whether to store (local storage) the state of collapsed grade categories.
|
||||
*/
|
||||
const toggleCategory = (toggleElement, courseId, userId, storeCollapsedState) => {
|
||||
const target = toggleElement.dataset.target;
|
||||
const category = toggleElement.dataset.category;
|
||||
// Whether the toggle action is collapsing the category or not.
|
||||
const isCollapsing = toggleElement.getAttribute('aria-expanded') === "true";
|
||||
const gradebookSetup = toggleElement.closest(SELECTORS.GRADEBOOK_SETUP_TABLE);
|
||||
// Find all targeted 'children' rows of the toggled category.
|
||||
const targetRows = gradebookSetup.querySelectorAll(target);
|
||||
// Find the maximum grade cell in the grade category that is being collapsed/expanded.
|
||||
const toggleElementRow = toggleElement.closest('tr');
|
||||
const maxGradeCell = toggleElementRow.querySelector('.column-range');
|
||||
|
||||
if (isCollapsing) {
|
||||
toggleElement.setAttribute('aria-expanded', 'false');
|
||||
// Update the 'data-target' of the toggle category node to make sure that when we perform another toggle action
|
||||
// to expand this category we only target rows which have been hidden by this category toggle action.
|
||||
toggleElement.dataset.target = `[data-hidden-by='${category}']`;
|
||||
if (maxGradeCell) {
|
||||
const relatedCategoryAggregationRow = gradebookSetup.querySelector(`[data-aggregationforcategory='${category}']`);
|
||||
maxGradeCell.innerHTML = relatedCategoryAggregationRow.querySelector('.column-range').innerHTML;
|
||||
}
|
||||
} else {
|
||||
toggleElement.setAttribute('aria-expanded', 'true');
|
||||
// Update the 'data-target' of the toggle category node to make sure that when we perform another toggle action
|
||||
// to collapse this category we only target rows which are children of this category and are not currently hidden.
|
||||
toggleElement.dataset.target = `.${category}[data-hidden='false']`;
|
||||
if (maxGradeCell) {
|
||||
maxGradeCell.innerHTML = '';
|
||||
}
|
||||
}
|
||||
// If explicitly instructed, update accordingly the locally stored state of collapsed categories based on the
|
||||
// toggle action performed on the given grade category.
|
||||
if (storeCollapsedState) {
|
||||
updateCollapsedCategoriesStoredState(category, courseId, userId, isCollapsing);
|
||||
}
|
||||
|
||||
// Loop through all targeted child row elements and update the required data attributes to either hide or show
|
||||
// them depending on the toggle action (collapsing or expanding).
|
||||
targetRows.forEach((row) => {
|
||||
if (isCollapsing) {
|
||||
row.dataset.hidden = 'true';
|
||||
row.dataset.hiddenBy = category;
|
||||
} else {
|
||||
row.dataset.hidden = 'false';
|
||||
row.dataset.hiddenBy = '';
|
||||
}
|
||||
});
|
||||
|
||||
// Since the user report is presented in an HTML table, rowspans are used under each category to create a visual
|
||||
// hierarchy between categories and grading items. When expanding or collapsing a category we need to also update
|
||||
// (subtract or add) the rowspan values associated to each parent category row to preserve the correct visual
|
||||
// hierarchy in the table.
|
||||
updateParentCategoryRowspans(toggleElement, targetRows.length);
|
||||
};
|
||||
|
||||
/**
|
||||
* Method that updates the rowspan value of all 'parent' category rows of a given category node.
|
||||
*
|
||||
* @method updateParentCategoryRowspans
|
||||
* @param {object} toggleElement The category toggle node that was clicked.
|
||||
* @param {int} num The number we want to add or subtract from the rowspan value of the 'parent' category row elements.
|
||||
*/
|
||||
const updateParentCategoryRowspans = (toggleElement, num) => {
|
||||
const gradebookSetup = toggleElement.closest(SELECTORS.GRADEBOOK_SETUP_TABLE);
|
||||
// Get the row element which contains the category toggle node.
|
||||
const rowElement = toggleElement.closest('tr');
|
||||
|
||||
// Loop through the class list of the toggle category row element.
|
||||
// The list contains classes which identify all parent categories of the toggled category.
|
||||
rowElement.classList.forEach((className) => {
|
||||
// Find the toggle node of the 'parent' category that is identified by the given class name.
|
||||
const parentCategoryToggleElement = gradebookSetup.querySelector(`[data-target=".${className}[data-hidden='false']"`);
|
||||
if (parentCategoryToggleElement) {
|
||||
// Get the row element which contains the parent category toggle node.
|
||||
const categoryRowElement = parentCategoryToggleElement.closest('tr');
|
||||
// Find the rowspan element associated to this parent category.
|
||||
const categoryRowSpanElement = categoryRowElement.nextElementSibling.querySelector('[rowspan]');
|
||||
|
||||
// Depending on whether the toggle action has expanded or collapsed the category, either add or
|
||||
// subtract from the 'parent' category rowspan.
|
||||
if (toggleElement.getAttribute('aria-expanded') === "true") {
|
||||
categoryRowSpanElement.rowSpan = categoryRowSpanElement.rowSpan + num;
|
||||
} else { // The category has been collapsed.
|
||||
categoryRowSpanElement.rowSpan = categoryRowSpanElement.rowSpan - num;
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize module.
|
||||
*
|
||||
* @method init
|
||||
* @param {int} courseId The ID of course.
|
||||
* @param {int} userId The ID of the current logged user.
|
||||
*/
|
||||
export const init = (courseId, userId) => {
|
||||
const pendingPromise = new Pending();
|
||||
const gradebookSetupBox = document.querySelector(SELECTORS.GRADEBOOK_SETUP_BOX);
|
||||
// Display a loader while the relevant grade categories are being re-collapsed on page load (based on the locally
|
||||
// stored state for the given user).
|
||||
addIconToContainer(gradebookSetupBox).then((loader) => {
|
||||
setTimeout(() => {
|
||||
collapseGradeCategories(courseId, userId);
|
||||
// Once the grade categories have been re-collapsed, remove the loader and display the Gradebook setup content.
|
||||
loader.remove();
|
||||
document.querySelector(SELECTORS.GRADEBOOK_SETUP_WRAPPER).classList.remove('d-none');
|
||||
pendingPromise.resolve();
|
||||
}, 150);
|
||||
return;
|
||||
}).fail(Notification.exception);
|
||||
|
||||
registerListenerEvents(courseId, userId);
|
||||
};
|
||||
|
@ -47,7 +47,7 @@ require_login($course);
|
||||
$context = context_course::instance($course->id);
|
||||
require_capability('moodle/grade:manage', $context);
|
||||
|
||||
$PAGE->requires->js_call_amd('core_grades/edittree_index', 'enhance');
|
||||
$PAGE->requires->js_call_amd('core_grades/edittree_index', 'init', [$courseid, $USER->id]);
|
||||
|
||||
/// return tracking object
|
||||
$gpr = new grade_plugin_return(array('type'=>'edit', 'plugin'=>'tree', 'courseid'=>$courseid));
|
||||
@ -279,19 +279,15 @@ if ($weightsadjusted) {
|
||||
|
||||
$tpldata->table = html_writer::table($grade_edit_tree->table);
|
||||
|
||||
if ($moving) {
|
||||
$tpldata->cancelmovingbutton = $OUTPUT->single_button(
|
||||
new moodle_url('index.php', ['id' => $course->id]), get_string('cancel'), 'get');
|
||||
}
|
||||
|
||||
echo $OUTPUT->render_from_template('core_grades/edit_tree', $tpldata);
|
||||
|
||||
echo $OUTPUT->box_end();
|
||||
|
||||
// Print action buttons
|
||||
echo $OUTPUT->container_start('buttons mdl-align');
|
||||
|
||||
if ($moving) {
|
||||
echo $OUTPUT->single_button(new moodle_url('index.php', array('id'=>$course->id)), get_string('cancel'), 'get');
|
||||
}
|
||||
|
||||
echo $OUTPUT->container_end();
|
||||
|
||||
$PAGE->requires->js_call_amd('core_form/changechecker', 'watchFormById', ['gradetreeform']);
|
||||
|
||||
echo $OUTPUT->footer();
|
||||
|
@ -192,7 +192,19 @@ class grade_edit_tree {
|
||||
$cell->attributes['class'] = $element['type'] . ' moving column-name level' .
|
||||
($level + 1) . ' level' . ($level % 2 ? 'even' : 'odd');
|
||||
$cell->text = $object->name.' ('.get_string('move').')';
|
||||
return array(new html_table_row(array($cell)));
|
||||
|
||||
// Create a row that represents the available area to move a grade item or a category into.
|
||||
$movingarea = new html_table_row();
|
||||
// Obtain all parent category identifiers for this item and add them to its class list. This information
|
||||
// will be used when collapsing or expanding grade categories to properly show or hide this area.
|
||||
$parentcategories = array_merge($rowclasses, [$eid]);
|
||||
$movingarea->attributes = [
|
||||
'class' => implode(' ', $parentcategories),
|
||||
'data-hidden' => 'false'
|
||||
];
|
||||
$movingarea->cells[] = $cell;
|
||||
|
||||
return [$movingarea];
|
||||
}
|
||||
|
||||
if ($element['type'] == 'category') {
|
||||
@ -249,7 +261,14 @@ class grade_edit_tree {
|
||||
$cell->text = html_writer::link($aurl, html_writer::empty_tag('hr'),
|
||||
['title' => get_string('movehere'), 'class' => 'movehere']);
|
||||
|
||||
$moveto = new html_table_row(array($cell));
|
||||
// Create a row that represents the available area to move a grade item or a category into.
|
||||
$moveto = new html_table_row();
|
||||
// Obtain all parent category identifiers for this item and add them to its class list. This information
|
||||
// will be used when collapsing or expanding grade categories to properly show or hide this area.
|
||||
$parentcategories = array_merge($rowclasses, [$eid]);
|
||||
$moveto->attributes['class'] = implode(' ', $parentcategories);
|
||||
$moveto->attributes['data-hidden'] = 'false';
|
||||
$moveto->cells[] = $cell;
|
||||
}
|
||||
|
||||
$newparents = $parents;
|
||||
@ -308,6 +327,7 @@ class grade_edit_tree {
|
||||
$categoryrow->attributes['class'] = $courseclass . ' category ' . $dimmed;
|
||||
$categoryrow->attributes['data-category'] = $eid;
|
||||
$categoryrow->attributes['data-itemid'] = $category->get_grade_item()->id;
|
||||
$categoryrow->attributes['data-hidden'] = 'false';
|
||||
foreach ($rowclasses as $class) {
|
||||
$categoryrow->attributes['class'] .= ' ' . $class;
|
||||
}
|
||||
@ -326,7 +346,11 @@ class grade_edit_tree {
|
||||
}
|
||||
|
||||
$emptyrow = new html_table_row();
|
||||
$emptyrow->attributes['class'] = 'spacer';
|
||||
// Obtain all parent category identifiers for this item and add them to its class list. This information
|
||||
// will be used when collapsing or expanding grade categories to properly show or hide this area.
|
||||
$parentcategories = array_merge($rowclasses, [$eid]);
|
||||
$emptyrow->attributes['class'] = 'spacer ' . implode(' ', $parentcategories);
|
||||
$emptyrow->attributes['data-hidden'] = 'false';
|
||||
|
||||
$headercell = new html_table_cell();
|
||||
$headercell->header = true;
|
||||
@ -363,6 +387,14 @@ class grade_edit_tree {
|
||||
$gradeitemrow->id = 'grade-item-' . $eid;
|
||||
$gradeitemrow->attributes['class'] = $categoryitemclass . ' item ' . $dimmed;
|
||||
$gradeitemrow->attributes['data-itemid'] = $object->id;
|
||||
$gradeitemrow->attributes['data-hidden'] = 'false';
|
||||
// If this item is a course or category aggregation, add a data attribute that stores the identifier of
|
||||
// the related category or course. This attribute is used when collapsing a grade category to fetch the
|
||||
// max grade from the aggregation and display it in the grade category row when the category items are
|
||||
// collapsed and the aggregated max grade is not visible.
|
||||
if (!empty($categoryitemclass)) {
|
||||
$gradeitemrow->attributes['data-aggregationforcategory'] = $parent_eid;
|
||||
}
|
||||
foreach ($rowclasses as $class) {
|
||||
$gradeitemrow->attributes['class'] .= ' ' . $class;
|
||||
}
|
||||
@ -829,13 +861,19 @@ class grade_edit_tree_column_name extends grade_edit_tree_column {
|
||||
}
|
||||
|
||||
public function get_category_cell($category, $levelclass, $params) {
|
||||
global $OUTPUT;
|
||||
|
||||
if (empty($params['name']) || empty($params['level'])) {
|
||||
throw new Exception('Array key (name or level) missing from 3rd param of grade_edit_tree_column_name::get_category_cell($category, $levelclass, $params)');
|
||||
}
|
||||
$visibilitytoggle = $OUTPUT->render_from_template('core_grades/grade_category_visibility_toggle', [
|
||||
'category' => $params['eid']
|
||||
]);
|
||||
|
||||
$moveaction = isset($params['moveaction']) ? $params['moveaction'] : '';
|
||||
$categorycell = parent::get_category_cell($category, $levelclass, $params);
|
||||
$categorycell->colspan = ($this->deepest_level + 2) - $params['level'];
|
||||
$categorycell->text = html_writer::div($moveaction . $params['name'], 'font-weight-bold');
|
||||
$categorycell->text = html_writer::div($visibilitytoggle . $moveaction . $params['name'], 'font-weight-bold');
|
||||
return $categorycell;
|
||||
}
|
||||
|
||||
@ -927,7 +965,7 @@ class grade_edit_tree_column_range extends grade_edit_tree_column {
|
||||
|
||||
public function get_category_cell($category, $levelclass, $params) {
|
||||
$categorycell = parent::get_category_cell($category, $levelclass, $params);
|
||||
$categorycell->text = ' - ';
|
||||
$categorycell->text = '';
|
||||
return $categorycell;
|
||||
}
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
* showbulkmove - boolean - Whether to show the bulk move select menu.
|
||||
* table - string - HTML content of the grade items table.
|
||||
* bulkmoveoptions - array - Key-value pair array for the options of the the bulk move select menu element.
|
||||
* cancelmovingbutton - HTML content of the cancel move button.
|
||||
|
||||
Example context (json):
|
||||
{
|
||||
@ -38,33 +39,36 @@
|
||||
"showbulkmove": "true",
|
||||
"bulkmoveoptions": "{'value' : '1', 'name' : 'Test grade category'}",
|
||||
"value": "1",
|
||||
"name": "Test grade category"
|
||||
"name": "Test grade category",
|
||||
"cancelmovingbutton": "<div class='singlebutton'></div>"
|
||||
}
|
||||
}}
|
||||
|
||||
<form id="gradetreeform" method="post" action="{{actionurl}}">
|
||||
<div>
|
||||
<input type="hidden" name="sesskey" value="{{sesskey}}">
|
||||
{{#notification}}
|
||||
{{>core/notification_info}}
|
||||
{{/notification}}
|
||||
{{{table}}}
|
||||
<div id="gradetreesubmit">
|
||||
{{#showsave}}
|
||||
<input class="advanced btn btn-primary" type="submit" value="{{#cleanstr}}savechanges{{/cleanstr}}">
|
||||
{{/showsave}}
|
||||
{{#showbulkmove}}
|
||||
<div class="form-inline mt-3">
|
||||
<input type="hidden" name="bulkmove" value="0" id="bulkmoveinput">
|
||||
<label for="menumoveafter">{{#str}}moveselectedto, grades{{/str}}</label>
|
||||
<select name="moveafter" id="menumoveafter" class="ignoredirty singleselect custom-select form-control"
|
||||
data-action="toggle" data-toggle="action" data-togglegroup="category" disabled>
|
||||
{{#bulkmoveoptions}}
|
||||
<option value="{{value}}">{{{name}}}</option>
|
||||
{{/bulkmoveoptions}}
|
||||
</select>
|
||||
</div>
|
||||
{{/showbulkmove}}
|
||||
{{#notification}}
|
||||
{{>core/notification_info}}
|
||||
{{/notification}}
|
||||
<div class="gradetree-wrapper d-none">
|
||||
<form id="gradetreeform" method="post" action="{{actionurl}}" >
|
||||
<div>
|
||||
<input type="hidden" name="sesskey" value="{{sesskey}}">
|
||||
{{{table}}}
|
||||
<div id="gradetreesubmit">
|
||||
{{#showsave}}
|
||||
<input class="advanced btn btn-primary" type="submit" value="{{#cleanstr}}savechanges{{/cleanstr}}">
|
||||
{{/showsave}}
|
||||
{{#showbulkmove}}
|
||||
<div class="form-inline mt-3">
|
||||
<input type="hidden" name="bulkmove" value="0" id="bulkmoveinput">
|
||||
<label for="menumoveafter">{{#str}}moveselectedto, grades{{/str}}</label>
|
||||
<select name="moveafter" id="menumoveafter" class="ignoredirty singleselect custom-select form-control"
|
||||
data-action="toggle" data-toggle="action" data-togglegroup="category" disabled>
|
||||
{{#bulkmoveoptions}}
|
||||
<option value="{{value}}">{{{name}}}</option>
|
||||
{{/bulkmoveoptions}}
|
||||
</select>
|
||||
</div>
|
||||
{{/showbulkmove}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</form>
|
||||
{{{cancelmovingbutton}}}
|
||||
</div>
|
||||
|
34
grade/templates/grade_category_visibility_toggle.mustache
Normal file
34
grade/templates/grade_category_visibility_toggle.mustache
Normal file
@ -0,0 +1,34 @@
|
||||
{{!
|
||||
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_grades/grade_category_visibility_toggle
|
||||
|
||||
Template for the grade category visibility toggle element.
|
||||
|
||||
Context variables required for this template:
|
||||
* category - The grade category identifier
|
||||
|
||||
Example context (json):
|
||||
{
|
||||
"category": "gc2"
|
||||
}
|
||||
}}
|
||||
<a aria-expanded="true" role="button" data-category={{category}} data-target=".{{category}}[data-hidden='false']" class="btn btn-icon mr-1 toggle-category" href="#">
|
||||
<span class="collapsed text-nowrap" title="{{#str}} collapse, core {{/str}}">
|
||||
<i class="icon fa fa-chevron-down fa-fw" title="{{#str}} collapse, core {{/str}}" role="img" aria-label="{{#str}} collapse, core {{/str}}"></i>
|
||||
</span>
|
||||
<span class="expanded text-nowrap" title="{{#str}} expand, core {{/str}}">
|
||||
<i class="icon fa fa-chevron-right fa-fw" title="{{#str}} expand, core {{/str}}" role="img" aria-label="{{#str}} expand, core {{/str}}"></i>
|
||||
</span>
|
||||
</a>
|
281
grade/tests/behat/toggle_grade_categories.feature
Normal file
281
grade/tests/behat/toggle_grade_categories.feature
Normal file
@ -0,0 +1,281 @@
|
||||
@core @core_grades @javascript
|
||||
Feature: Teachers can toggle the visibility of the grade categories in the Gradebook setup page.
|
||||
In order to focus only on the information that I am interested in
|
||||
As a teacher
|
||||
I need to be able to easily toggle the visibility of grade categories in the Gradebook setup page
|
||||
|
||||
Background:
|
||||
Given the following "courses" exist:
|
||||
| fullname | shortname | category |
|
||||
| Course | C1 | 0 |
|
||||
And the following "users" exist:
|
||||
| username | firstname | lastname | email | idnumber |
|
||||
| teacher1 | Teacher 1 | 1 | teacher1@example.com | t1 |
|
||||
| teacher2 | Teacher 2 | 2 | teacher2@example.com | t2 |
|
||||
And the following "course enrolments" exist:
|
||||
| user | course | role |
|
||||
| teacher1 | C1 | editingteacher |
|
||||
| teacher2 | C1 | editingteacher |
|
||||
And the following "grade categories" exist:
|
||||
| fullname | course |
|
||||
| Category 1 | C1 |
|
||||
And the following "activities" exist:
|
||||
| activity | course | idnumber | name | intro |
|
||||
| assign | C1 | a1 | Test assignment one | Submit something! |
|
||||
And the following "activities" exist:
|
||||
| activity | course | idnumber | name | intro | gradecategory |
|
||||
| assign | C1 | a2 | Test assignment two | Submit something! | Category 1 |
|
||||
And the following "grade items" exist:
|
||||
| itemname | grademax | course | gradecategory |
|
||||
| Manual grade | 40 | C1 | Category 1 |
|
||||
And I log in as "teacher1"
|
||||
And I am on "Course" course homepage
|
||||
|
||||
Scenario: A teacher can collapse and expand grade categories in the Gradebook setup page
|
||||
Given I navigate to "Setup > Gradebook setup" in the course gradebook
|
||||
And the following should exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Course |
|
||||
| Test assignment one |
|
||||
| Category 1 |
|
||||
| Test assignment two |
|
||||
| Manual grade |
|
||||
| Category 1 total |
|
||||
| Course total |
|
||||
And "Collapse" "link" should exist in the "Course" "table_row"
|
||||
And "Collapse" "link" should exist in the "Category 1" "table_row"
|
||||
# Collapse the grade category 'Category 1'.
|
||||
When I click on "Collapse" "link" in the "Category 1" "table_row"
|
||||
Then the following should exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Course |
|
||||
| Test assignment one |
|
||||
| Category 1 |
|
||||
| Course total |
|
||||
And "Collapse" "link" should exist in the "Course" "table_row"
|
||||
And "Expand" "link" should exist in the "Category 1" "table_row"
|
||||
And the following should not exist in the "user-grades" table:
|
||||
| Test assignment two |
|
||||
| Manual grade |
|
||||
| Category 1 total |
|
||||
# Expand the grade category 'Category 1'.
|
||||
And I click on "Expand" "link" in the "Category 1" "table_row"
|
||||
And the following should exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Course |
|
||||
| Test assignment one |
|
||||
| Category 1 |
|
||||
| Test assignment two |
|
||||
| Manual grade |
|
||||
| Category 1 total |
|
||||
| Course total |
|
||||
And "Collapse" "link" should exist in the "Course" "table_row"
|
||||
And "Collapse" "link" should exist in the "Category 1" "table_row"
|
||||
# Collapse again the grade category 'Category 1'.
|
||||
And I click on "Collapse" "link" in the "Category 1" "table_row"
|
||||
# Collapse the grade category 'Course'.
|
||||
And I click on "Collapse" "link" in the "Course" "table_row"
|
||||
And the following should exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Course |
|
||||
And I should see "Course" in the "setup-grades" "table"
|
||||
And "Expand" "link" should exist in the "Course" "table_row"
|
||||
And the following should not exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Test assignment one |
|
||||
| Category 1 |
|
||||
| Test assignment two |
|
||||
| Manual grade |
|
||||
| Category 1 total |
|
||||
| Course total |
|
||||
# Expand the grade category 'Course'. 'Category 1' should be still collapsed.
|
||||
And I click on "Expand" "link" in the "Course" "table_row"
|
||||
And the following should exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Course |
|
||||
| Test assignment one |
|
||||
| Category 1 |
|
||||
| Course total |
|
||||
And "Collapse" "link" should exist in the "Course" "table_row"
|
||||
And "Expand" "link" should exist in the "Category 1" "table_row"
|
||||
And the following should not exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Test assignment two |
|
||||
| Manual grade |
|
||||
| Category 1 total |
|
||||
|
||||
Scenario: A teacher can see the aggregated max grade for a grade category even when the category is collapsed
|
||||
Given I navigate to "Setup > Gradebook setup" in the course gradebook
|
||||
And the following should exist in the "setup-grades" table:
|
||||
| Name | Max grade |
|
||||
| Course | |
|
||||
| Category 1 | |
|
||||
| Category 1 total | 140.00 |
|
||||
| Course total | 240.00 |
|
||||
# Collapse the grade category 'Category 1'. The aggregated max grade should now be displayed within the 'Category 1' row.
|
||||
When I click on "Collapse" "link" in the "Category 1" "table_row"
|
||||
Then the following should exist in the "setup-grades" table:
|
||||
| Name | Max grade |
|
||||
| Course | |
|
||||
| Category 1 | 140.00 |
|
||||
| Course total | 240.00 |
|
||||
And I should not see "Category 1 total" in the "setup-grades" "table"
|
||||
# Collapse the grade category 'Course'. The aggregated max grade should now be displayed within the 'Course' row.
|
||||
And I click on "Collapse" "link" in the "Course" "table_row"
|
||||
And "Course" row "Max grade" column of "setup-grades" table should contain "240.00"
|
||||
And I should not see "Course total" in the "setup-grades" "table"
|
||||
# Expand the grade category 'Course'. The aggregated max grade should not be displayed within the 'Course' row anymore.
|
||||
And I click on "Expand" "link" in the "Course" "table_row"
|
||||
| Name | Max grade |
|
||||
| Course | |
|
||||
| Category 1 | 140.00 |
|
||||
| Course total | 240.00 |
|
||||
|
||||
Scenario: A teacher can collapse and expand grade categories in the Gradebook setup when moving grade items
|
||||
Given I navigate to "Setup > Gradebook setup" in the course gradebook
|
||||
And I click on "Move" "link" in the "Test assignment one" "table_row"
|
||||
And the following should exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Course |
|
||||
| Test assignment one |
|
||||
| Category 1 |
|
||||
| Test assignment two |
|
||||
| Manual grade |
|
||||
| Category 1 total |
|
||||
| Course total |
|
||||
And "Collapse" "link" should exist in the "Course" "table_row"
|
||||
And "Collapse" "link" should exist in the "Category 1" "table_row"
|
||||
# Collapse the grade category 'Category 1'.
|
||||
When I click on "Collapse" "link" in the "Category 1" "table_row"
|
||||
Then the following should exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Course |
|
||||
| Test assignment one |
|
||||
| Category 1 |
|
||||
And "Collapse" "link" should exist in the "Course" "table_row"
|
||||
And "Expand" "link" should exist in the "Category 1" "table_row"
|
||||
And the following should not exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Test assignment two |
|
||||
| Manual grade |
|
||||
| Category 1 total |
|
||||
# Expand the grade category 'Category 1'.
|
||||
And I click on "Expand" "link" in the "Category 1" "table_row"
|
||||
And the following should exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Course |
|
||||
| Test assignment one |
|
||||
| Category 1 |
|
||||
| Test assignment two |
|
||||
| Manual grade |
|
||||
| Category 1 total |
|
||||
| Course total |
|
||||
And "Collapse" "link" should exist in the "Course" "table_row"
|
||||
And "Collapse" "link" should exist in the "Category 1" "table_row"
|
||||
# Collapse again the grade category 'Category 1'.
|
||||
And I click on "Collapse" "link" in the "Category 1" "table_row"
|
||||
# Collapse the grade category 'Course'.
|
||||
And I click on "Collapse" "link" in the "Course" "table_row"
|
||||
And I should see "Course" in the "setup-grades" "table"
|
||||
And "Expand" "link" should exist in the "Course" "table_row"
|
||||
And the following should not exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Test assignment one |
|
||||
| Category 1 |
|
||||
| Test assignment two |
|
||||
| Manual grade |
|
||||
| Category 1 total |
|
||||
| Course total |
|
||||
# Expand the grade category 'Course'. 'Category 1' should be still collapsed.
|
||||
And I click on "Expand" "link" in the "Course" "table_row"
|
||||
And the following should exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Course |
|
||||
| Test assignment one |
|
||||
| Category 1 |
|
||||
| Course total |
|
||||
And "Collapse" "link" should exist in the "Course" "table_row"
|
||||
And "Expand" "link" should exist in the "Category 1" "table_row"
|
||||
And the following should not exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Test assignment two |
|
||||
| Manual grade |
|
||||
| Category 1 total |
|
||||
|
||||
Scenario: Previously collapsed categories are still shown as collapsed when a teacher navigates back to Gradebook setup
|
||||
Given I navigate to "Setup > Gradebook setup" in the course gradebook
|
||||
# Collapse the grade category 'Category 1' and navigate to the course homepage.
|
||||
And I click on "Collapse" "link" in the "Category 1" "table_row"
|
||||
And I am on "Course" course homepage
|
||||
# Navigate back to Gradebook setup and confirm that the category 'Category 1' is still collapsed.
|
||||
When I navigate to "Setup > Gradebook setup" in the course gradebook
|
||||
Then the following should exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Course |
|
||||
| Test assignment one |
|
||||
| Category 1 |
|
||||
| Course total |
|
||||
And "Collapse" "link" should exist in the "Course" "table_row"
|
||||
And "Expand" "link" should exist in the "Category 1" "table_row"
|
||||
And the following should not exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Test assignment two |
|
||||
| Manual grade |
|
||||
| Category 1 total |
|
||||
|
||||
Scenario: Previously collapsed categories are still shown as collapsed when a teacher is moving grade items in Gradebook setup
|
||||
Given I navigate to "Setup > Gradebook setup" in the course gradebook
|
||||
# Collapse the grade category 'Category 1'.
|
||||
And I click on "Collapse" "link" in the "Category 1" "table_row"
|
||||
# Attempt to move a grade item and confirm that the category 'Category 1' is still collapsed.
|
||||
When I click on "Move" "link" in the "Test assignment one" "table_row"
|
||||
Then the following should exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Course |
|
||||
| Test assignment one |
|
||||
| Category 1 |
|
||||
| Course total |
|
||||
And "Collapse" "link" should exist in the "Course" "table_row"
|
||||
And "Expand" "link" should exist in the "Category 1" "table_row"
|
||||
And the following should not exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Test assignment two |
|
||||
| Manual grade |
|
||||
| Category 1 total |
|
||||
|
||||
Scenario: Grade categories are shown as collapsed only to the teacher that collapsed them
|
||||
Given I navigate to "Setup > Gradebook setup" in the course gradebook
|
||||
# Collapse the grade category 'Category 1'.
|
||||
And I click on "Collapse" "link" in the "Category 1" "table_row"
|
||||
# Log in as teacher2 and confirm that the category 'Category 1' is not collapsed.
|
||||
And I log in as "teacher2"
|
||||
And I am on "Course" course homepage
|
||||
When I navigate to "Setup > Gradebook setup" in the course gradebook
|
||||
Then the following should exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Course |
|
||||
| Test assignment one |
|
||||
| Category 1 |
|
||||
| Test assignment two |
|
||||
| Manual grade |
|
||||
| Category 1 total |
|
||||
| Course total |
|
||||
And "Collapse" "link" should exist in the "Course" "table_row"
|
||||
And "Collapse" "link" should exist in the "Category 1" "table_row"
|
||||
# Log in as teacher1 and confirm that the category 'Category 1' is still collapsed.
|
||||
And I log in as "teacher1"
|
||||
And I am on "Course" course homepage
|
||||
And I navigate to "Setup > Gradebook setup" in the course gradebook
|
||||
And the following should exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Course |
|
||||
| Test assignment one |
|
||||
| Category 1 |
|
||||
| Course total |
|
||||
And "Collapse" "link" should exist in the "Course" "table_row"
|
||||
And "Expand" "link" should exist in the "Category 1" "table_row"
|
||||
And the following should not exist in the "setup-grades" table:
|
||||
| Name |
|
||||
| Test assignment two |
|
||||
| Manual grade |
|
||||
| Category 1 total |
|
@ -2,8 +2,6 @@
|
||||
// "Gradebook setup" > "Simple view" and "Full view".
|
||||
.gradetreebox {
|
||||
margin: 20px 0 30px 0;
|
||||
padding: 10px 10px;
|
||||
background-color: $gray-100;
|
||||
|
||||
h4 {
|
||||
// Force back the base font-size to minimise width.
|
||||
@ -300,137 +298,56 @@
|
||||
}
|
||||
|
||||
// Set up grades layout.
|
||||
.path-grade-edit-tree .setup-grades {
|
||||
h4 {
|
||||
margin: 0;
|
||||
}
|
||||
.path-grade-edit-tree {
|
||||
.gradetree-wrapper {
|
||||
padding: 10px 10px;
|
||||
background-color: $gray-100;
|
||||
|
||||
.column-rowspan {
|
||||
padding: 0;
|
||||
width: 24px;
|
||||
min-width: 24px;
|
||||
max-width: 24px;
|
||||
}
|
||||
|
||||
.emptyrow {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.gradeitemdescription {
|
||||
font-weight: normal;
|
||||
padding-left: 24px;
|
||||
}
|
||||
|
||||
&.generaltable {
|
||||
|
||||
tr {
|
||||
&.spacer {
|
||||
height: 0.5rem;
|
||||
.setup-grades {
|
||||
h4 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
th {
|
||||
vertical-align: bottom;
|
||||
border: none;
|
||||
text-align: left;
|
||||
background-color: $gray-100;
|
||||
|
||||
&.rowspan {
|
||||
padding: 0;
|
||||
width: 24px;
|
||||
min-width: 24px;
|
||||
}
|
||||
.column-rowspan {
|
||||
padding: 0;
|
||||
width: 24px;
|
||||
min-width: 24px;
|
||||
max-width: 24px;
|
||||
}
|
||||
|
||||
td {
|
||||
min-width: 4.5em;
|
||||
background-color: $gray-100;
|
||||
border: none;
|
||||
vertical-align: middle;
|
||||
.emptyrow {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&.column-name {
|
||||
padding-left: 24px;
|
||||
.gradeitemdescription {
|
||||
font-weight: normal;
|
||||
padding-left: 24px;
|
||||
}
|
||||
|
||||
.small {
|
||||
font-size: 70%;
|
||||
&.generaltable {
|
||||
|
||||
tr {
|
||||
&.spacer {
|
||||
height: 0.5rem;
|
||||
}
|
||||
|
||||
.itemicon {
|
||||
font-size: 18px;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
&.column-weight {
|
||||
.weightoverride {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
&.column-actions {
|
||||
.dropdown-toggle::after {
|
||||
&[data-hidden="true"] {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
&.movehere {
|
||||
padding: 0;
|
||||
|
||||
a.movehere {
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin: 5px 0 5px 0;
|
||||
padding: 3px 0 3px 0;
|
||||
|
||||
hr {
|
||||
border-top: 2px dashed $gray-500;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
hr {
|
||||
border-top: 2px dashed $blue;
|
||||
}
|
||||
th {
|
||||
vertical-align: bottom;
|
||||
border: none;
|
||||
text-align: left;
|
||||
background-color: $gray-100;
|
||||
|
||||
&.rowspan {
|
||||
padding: 0;
|
||||
width: 24px;
|
||||
min-width: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.category {
|
||||
td {
|
||||
background-color: white;
|
||||
border-top: 1px solid $gray-300;
|
||||
border-bottom: 1px solid $gray-300;
|
||||
|
||||
&:first-child {
|
||||
border-left: 1px solid $gray-300;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-right: 1px solid $gray-300;
|
||||
}
|
||||
|
||||
&.column-name {
|
||||
font-weight: bold;
|
||||
|
||||
div {
|
||||
display: flex;
|
||||
min-height: 30px;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.item {
|
||||
td {
|
||||
background-color: white;
|
||||
border-top: 3px solid $gray-100;
|
||||
}
|
||||
|
||||
&.categoryitem,
|
||||
&.courseitem {
|
||||
td {
|
||||
min-width: 4.5em;
|
||||
background-color: $gray-100;
|
||||
@ -438,11 +355,127 @@
|
||||
vertical-align: middle;
|
||||
|
||||
&.column-name {
|
||||
padding-left: 0;
|
||||
padding-left: 38px;
|
||||
|
||||
.small {
|
||||
font-size: 70%;
|
||||
}
|
||||
|
||||
.itemicon {
|
||||
font-size: 18px;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
&:not(.column-actions) {
|
||||
font-weight: bold;
|
||||
&.column-weight {
|
||||
.weightoverride {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
&.column-actions {
|
||||
.dropdown-toggle::after {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
&.movehere {
|
||||
padding: 0;
|
||||
|
||||
a.movehere {
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin: 5px 0 5px 0;
|
||||
padding: 3px 0 3px 0;
|
||||
|
||||
hr {
|
||||
border-top: 2px dashed $gray-500;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
hr {
|
||||
border-top: 2px dashed $blue;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.category {
|
||||
td {
|
||||
background-color: white;
|
||||
border-top: 1px solid $gray-300;
|
||||
border-bottom: 1px solid $gray-300;
|
||||
|
||||
&:first-child {
|
||||
border-left: 1px solid $gray-300;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-right: 1px solid $gray-300;
|
||||
}
|
||||
|
||||
&.column-name {
|
||||
padding-left: 10px;
|
||||
font-weight: bold;
|
||||
|
||||
div {
|
||||
display: flex;
|
||||
min-height: 30px;
|
||||
align-items: center;
|
||||
|
||||
a {
|
||||
&.toggle-category {
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
font-size: 12px;
|
||||
line-height: 24px;
|
||||
margin-right: 3px;
|
||||
|
||||
&[aria-expanded="true"] .expanded,
|
||||
&[aria-expanded="false"] .collapsed {
|
||||
display: none;
|
||||
}
|
||||
|
||||
i {
|
||||
font-size: 12px;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
color: #1d2125;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.item {
|
||||
td {
|
||||
background-color: white;
|
||||
border-top: 3px solid $gray-100;
|
||||
}
|
||||
|
||||
&.categoryitem,
|
||||
&.courseitem {
|
||||
td {
|
||||
min-width: 4.5em;
|
||||
background-color: $gray-100;
|
||||
border: none;
|
||||
vertical-align: middle;
|
||||
|
||||
&.column-name {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
&:not(.column-actions) {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24461,8 +24461,6 @@ p.arrow_button {
|
||||
|
||||
.gradetreebox {
|
||||
margin: 20px 0 30px 0;
|
||||
padding: 10px 10px;
|
||||
background-color: #f8f9fa;
|
||||
}
|
||||
.gradetreebox h4 {
|
||||
font-size: 0.9375rem;
|
||||
@ -24683,108 +24681,133 @@ p.arrow_button {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.path-grade-edit-tree .setup-grades h4 {
|
||||
.path-grade-edit-tree .gradetree-wrapper {
|
||||
padding: 10px 10px;
|
||||
background-color: #f8f9fa;
|
||||
}
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades h4 {
|
||||
margin: 0;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades .column-rowspan {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades .column-rowspan {
|
||||
padding: 0;
|
||||
width: 24px;
|
||||
min-width: 24px;
|
||||
max-width: 24px;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades .emptyrow {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades .emptyrow {
|
||||
display: none;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades .gradeitemdescription {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades .gradeitemdescription {
|
||||
font-weight: normal;
|
||||
padding-left: 24px;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.spacer {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.spacer {
|
||||
height: 0.5rem;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr th {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr[data-hidden=true] {
|
||||
display: none;
|
||||
}
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr th {
|
||||
vertical-align: bottom;
|
||||
border: none;
|
||||
text-align: left;
|
||||
background-color: #f8f9fa;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr th.rowspan {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr th.rowspan {
|
||||
padding: 0;
|
||||
width: 24px;
|
||||
min-width: 24px;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td {
|
||||
min-width: 4.5em;
|
||||
background-color: #f8f9fa;
|
||||
border: none;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.column-name {
|
||||
padding-left: 24px;
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.column-name {
|
||||
padding-left: 38px;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.column-name .small {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.column-name .small {
|
||||
font-size: 70%;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.column-name .itemicon {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.column-name .itemicon {
|
||||
font-size: 18px;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.column-weight .weightoverride {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.column-weight .weightoverride {
|
||||
margin-right: 5px;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.column-actions .dropdown-toggle::after {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.column-actions .dropdown-toggle::after {
|
||||
display: none;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.movehere {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.movehere {
|
||||
padding: 0;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.movehere a.movehere {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.movehere a.movehere {
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin: 5px 0 5px 0;
|
||||
padding: 3px 0 3px 0;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.movehere a.movehere hr {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.movehere a.movehere hr {
|
||||
border-top: 2px dashed #8f959e;
|
||||
margin: 0;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.movehere a.movehere:hover hr {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.movehere a.movehere:hover hr {
|
||||
border-top: 2px dashed #0f6cbf;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.category td {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td {
|
||||
background-color: white;
|
||||
border-top: 1px solid #dee2e6;
|
||||
border-bottom: 1px solid #dee2e6;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.category td:first-child {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td:first-child {
|
||||
border-left: 1px solid #dee2e6;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.category td:last-child {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td:last-child {
|
||||
border-right: 1px solid #dee2e6;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.category td.column-name {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name {
|
||||
padding-left: 10px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.category td.column-name div {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div {
|
||||
display: flex;
|
||||
min-height: 30px;
|
||||
align-items: center;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.item td {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div a.toggle-category {
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
font-size: 12px;
|
||||
line-height: 24px;
|
||||
margin-right: 3px;
|
||||
}
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div a.toggle-category[aria-expanded=true] .expanded, .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div a.toggle-category[aria-expanded=false] .collapsed {
|
||||
display: none;
|
||||
}
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div a.toggle-category i {
|
||||
font-size: 12px;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
color: #1d2125;
|
||||
margin: 0;
|
||||
}
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item td {
|
||||
background-color: white;
|
||||
border-top: 3px solid #f8f9fa;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.item.categoryitem td, .path-grade-edit-tree .setup-grades.generaltable tr.item.courseitem td {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.categoryitem td, .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.courseitem td {
|
||||
min-width: 4.5em;
|
||||
background-color: #f8f9fa;
|
||||
border: none;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.item.categoryitem td.column-name, .path-grade-edit-tree .setup-grades.generaltable tr.item.courseitem td.column-name {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.categoryitem td.column-name, .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.courseitem td.column-name {
|
||||
padding-left: 0;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.item.categoryitem td:not(.column-actions), .path-grade-edit-tree .setup-grades.generaltable tr.item.courseitem td:not(.column-actions) {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.categoryitem td:not(.column-actions), .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.courseitem td:not(.column-actions) {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
@ -24461,8 +24461,6 @@ p.arrow_button {
|
||||
|
||||
.gradetreebox {
|
||||
margin: 20px 0 30px 0;
|
||||
padding: 10px 10px;
|
||||
background-color: #f8f9fa;
|
||||
}
|
||||
.gradetreebox h4 {
|
||||
font-size: 0.9375rem;
|
||||
@ -24683,108 +24681,133 @@ p.arrow_button {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.path-grade-edit-tree .setup-grades h4 {
|
||||
.path-grade-edit-tree .gradetree-wrapper {
|
||||
padding: 10px 10px;
|
||||
background-color: #f8f9fa;
|
||||
}
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades h4 {
|
||||
margin: 0;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades .column-rowspan {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades .column-rowspan {
|
||||
padding: 0;
|
||||
width: 24px;
|
||||
min-width: 24px;
|
||||
max-width: 24px;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades .emptyrow {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades .emptyrow {
|
||||
display: none;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades .gradeitemdescription {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades .gradeitemdescription {
|
||||
font-weight: normal;
|
||||
padding-left: 24px;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.spacer {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.spacer {
|
||||
height: 0.5rem;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr th {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr[data-hidden=true] {
|
||||
display: none;
|
||||
}
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr th {
|
||||
vertical-align: bottom;
|
||||
border: none;
|
||||
text-align: left;
|
||||
background-color: #f8f9fa;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr th.rowspan {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr th.rowspan {
|
||||
padding: 0;
|
||||
width: 24px;
|
||||
min-width: 24px;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td {
|
||||
min-width: 4.5em;
|
||||
background-color: #f8f9fa;
|
||||
border: none;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.column-name {
|
||||
padding-left: 24px;
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.column-name {
|
||||
padding-left: 38px;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.column-name .small {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.column-name .small {
|
||||
font-size: 70%;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.column-name .itemicon {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.column-name .itemicon {
|
||||
font-size: 18px;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.column-weight .weightoverride {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.column-weight .weightoverride {
|
||||
margin-right: 5px;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.column-actions .dropdown-toggle::after {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.column-actions .dropdown-toggle::after {
|
||||
display: none;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.movehere {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.movehere {
|
||||
padding: 0;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.movehere a.movehere {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.movehere a.movehere {
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin: 5px 0 5px 0;
|
||||
padding: 3px 0 3px 0;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.movehere a.movehere hr {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.movehere a.movehere hr {
|
||||
border-top: 2px dashed #8f959e;
|
||||
margin: 0;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr td.movehere a.movehere:hover hr {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.movehere a.movehere:hover hr {
|
||||
border-top: 2px dashed #0f6cbf;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.category td {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td {
|
||||
background-color: white;
|
||||
border-top: 1px solid #dee2e6;
|
||||
border-bottom: 1px solid #dee2e6;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.category td:first-child {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td:first-child {
|
||||
border-left: 1px solid #dee2e6;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.category td:last-child {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td:last-child {
|
||||
border-right: 1px solid #dee2e6;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.category td.column-name {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name {
|
||||
padding-left: 10px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.category td.column-name div {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div {
|
||||
display: flex;
|
||||
min-height: 30px;
|
||||
align-items: center;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.item td {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div a.toggle-category {
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
font-size: 12px;
|
||||
line-height: 24px;
|
||||
margin-right: 3px;
|
||||
}
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div a.toggle-category[aria-expanded=true] .expanded, .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div a.toggle-category[aria-expanded=false] .collapsed {
|
||||
display: none;
|
||||
}
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div a.toggle-category i {
|
||||
font-size: 12px;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
color: #1d2125;
|
||||
margin: 0;
|
||||
}
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item td {
|
||||
background-color: white;
|
||||
border-top: 3px solid #f8f9fa;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.item.categoryitem td, .path-grade-edit-tree .setup-grades.generaltable tr.item.courseitem td {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.categoryitem td, .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.courseitem td {
|
||||
min-width: 4.5em;
|
||||
background-color: #f8f9fa;
|
||||
border: none;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.item.categoryitem td.column-name, .path-grade-edit-tree .setup-grades.generaltable tr.item.courseitem td.column-name {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.categoryitem td.column-name, .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.courseitem td.column-name {
|
||||
padding-left: 0;
|
||||
}
|
||||
.path-grade-edit-tree .setup-grades.generaltable tr.item.categoryitem td:not(.column-actions), .path-grade-edit-tree .setup-grades.generaltable tr.item.courseitem td:not(.column-actions) {
|
||||
.path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.categoryitem td:not(.column-actions), .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.courseitem td:not(.column-actions) {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user