76 lines
2.8 KiB
JavaScript
76 lines
2.8 KiB
JavaScript
/**
|
|
* Client-side logic to support XBlock authoring.
|
|
*/
|
|
(function($) {
|
|
'use strict';
|
|
|
|
function VisibilityEditorView(runtime, element) {
|
|
this.getGroupAccess = function() {
|
|
var groupAccess = {},
|
|
checkboxValues,
|
|
partitionId,
|
|
groupId,
|
|
|
|
// This constant MUST match the group ID
|
|
// defined by VerificationPartitionScheme on the backend!
|
|
ALLOW_GROUP_ID = 1;
|
|
|
|
if (element.find('.visibility-level-all').prop('checked')) {
|
|
return {};
|
|
}
|
|
|
|
// Cohort partitions (user is allowed to select more than one)
|
|
element.find('.field-visibility-content-group input:checked').each(function(index, input) {
|
|
checkboxValues = $(input).val().split('-');
|
|
partitionId = parseInt(checkboxValues[0], 10);
|
|
groupId = parseInt(checkboxValues[1], 10);
|
|
|
|
if (groupAccess.hasOwnProperty(partitionId)) {
|
|
groupAccess[partitionId].push(groupId);
|
|
} else {
|
|
groupAccess[partitionId] = [groupId];
|
|
}
|
|
});
|
|
|
|
// Verification partitions (user can select exactly one)
|
|
if (element.find('#verification-access-checkbox').prop('checked')) {
|
|
partitionId = parseInt($('#verification-access-dropdown').val(), 10);
|
|
groupAccess[partitionId] = [ALLOW_GROUP_ID];
|
|
}
|
|
|
|
return groupAccess;
|
|
};
|
|
|
|
// When selecting "all students and staff", uncheck the specific groups
|
|
element.find('.field-visibility-level input').change(function(event) {
|
|
if ($(event.target).hasClass('visibility-level-all')) {
|
|
element.find('.field-visibility-content-group input, .field-visibility-verification input')
|
|
.prop('checked', false);
|
|
}
|
|
});
|
|
|
|
// When selecting a specific group, deselect "all students and staff" and
|
|
// select "specific content groups" instead.`
|
|
element.find('.field-visibility-content-group input, .field-visibility-verification input')
|
|
.change(function() {
|
|
element.find('.visibility-level-all').prop('checked', false);
|
|
element.find('.visibility-level-specific').prop('checked', true);
|
|
});
|
|
}
|
|
|
|
VisibilityEditorView.prototype.collectFieldData = function collectFieldData() {
|
|
return {
|
|
metadata: {
|
|
'group_access': this.getGroupAccess()
|
|
}
|
|
};
|
|
};
|
|
|
|
function initializeVisibilityEditor(runtime, element) {
|
|
return new VisibilityEditorView(runtime, element);
|
|
}
|
|
|
|
// XBlock initialization functions must be global
|
|
window.VisibilityEditorInit = initializeVisibilityEditor;
|
|
})($);
|