/** * 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; })($);