diff --git a/cms/djangoapps/contentstore/features/transcripts.py b/cms/djangoapps/contentstore/features/transcripts.py index 8047252417..fa8a52d257 100644 --- a/cms/djangoapps/contentstore/features/transcripts.py +++ b/cms/djangoapps/contentstore/features/transcripts.py @@ -59,6 +59,7 @@ def clear_fields(_step): $('{selector}') .prop('disabled', false) .removeClass('is-disabled') + .attr('aria-disabled', false) .val('') .trigger('input'); """.format(selector=SELECTORS['url_inputs']) diff --git a/cms/static/js/factories/index.js b/cms/static/js/factories/index.js index 15ee2ec501..c908c84a64 100644 --- a/cms/static/js/factories/index.js +++ b/cms/static/js/factories/index.js @@ -33,8 +33,9 @@ define(['jquery.form', 'js/index'], function() { $('#request-coursecreator-submit').click(function(event){ $(this) .toggleClass('is-disabled is-submitting') + .attr('aria-disabled', $(this).hasClass('is-disabled')) .find('.label') - .text('Submitting Your Request'); + .text('Submitting Your Request'); }); }; }); diff --git a/cms/static/js/factories/manage_users.js b/cms/static/js/factories/manage_users.js index 42272a859d..5886f5eab9 100644 --- a/cms/static/js/factories/manage_users.js +++ b/cms/static/js/factories/manage_users.js @@ -87,14 +87,14 @@ define(['jquery', 'underscore', 'gettext', 'js/views/feedback_prompt'], function $cancelButton = $createUserForm.find('.action-cancel'); $cancelButton.bind('click', function(event) { event.preventDefault(); - $('.create-user-button').toggleClass('is-disabled'); + $('.create-user-button').toggleClass('is-disabled').attr('aria-disabled', $('.create-user-button').hasClass('is-disabled')); $createUserFormWrapper.toggleClass('is-shown'); $('#user-email-input').val(''); }); $('.create-user-button').bind('click', function(event) { event.preventDefault(); - $('.create-user-button').toggleClass('is-disabled'); + $('.create-user-button').toggleClass('is-disabled').attr('aria-disabled', $('.create-user-button').hasClass('is-disabled')); $createUserFormWrapper.toggleClass('is-shown'); $createUserForm.find('#user-email-input').focus(); }); diff --git a/cms/static/js/index.js b/cms/static/js/index.js index c984310197..e54be1c991 100644 --- a/cms/static/js/index.js +++ b/cms/static/js/index.js @@ -44,13 +44,13 @@ define(["domReady", "jquery", "underscore", "js/utils/cancel_on_escape", "js/vie CreateCourseUtils.createCourse(course_info, function (errorMessage) { $('.wrap-error').addClass('is-shown'); $('#course_creation_error').html('
' + errorMessage + '
'); - $('.new-course-save').addClass('is-disabled'); + $('.new-course-save').addClass('is-disabled').attr('aria-disabled', true); }); }; var cancelNewCourse = function (e) { e.preventDefault(); - $('.new-course-button').removeClass('is-disabled'); + $('.new-course-button').removeClass('is-disabled').attr('aria-disabled', false); $('.wrapper-create-course').removeClass('is-shown'); // Clear out existing fields and errors _.each( @@ -66,8 +66,8 @@ define(["domReady", "jquery", "underscore", "js/utils/cancel_on_escape", "js/vie var addNewCourse = function (e) { e.preventDefault(); - $('.new-course-button').addClass('is-disabled'); - $('.new-course-save').addClass('is-disabled'); + $('.new-course-button').addClass('is-disabled').attr('aria-disabled', true); + $('.new-course-save').addClass('is-disabled').attr('aria-disabled', true); var $newCourse = $('.wrapper-create-course').addClass('is-shown'); var $cancelButton = $newCourse.find('.new-course-cancel'); var $courseName = $('.new-course-name'); diff --git a/cms/static/js/views/course_info_handout.js b/cms/static/js/views/course_info_handout.js index e6b02374e3..646e326b03 100644 --- a/cms/static/js/views/course_info_handout.js +++ b/cms/static/js/views/course_info_handout.js @@ -52,7 +52,7 @@ define(["js/views/baseview", "codemirror", "js/views/feedback_notification", "js onSave: function(event) { $('#handout_error').removeClass('is-shown'); - $('.save-button').removeClass('is-disabled'); + $('.save-button').removeClass('is-disabled').attr('aria-disabled', false); if ($('.CodeMirror-lines').find('.cm-error').length == 0){ this.model.set('data', this.$codeMirror.getValue()); var saving = new NotificationView.Mini({ @@ -73,21 +73,21 @@ define(["js/views/baseview", "codemirror", "js/views/feedback_notification", "js }); }else{ $('#handout_error').addClass('is-shown'); - $('.save-button').addClass('is-disabled'); + $('.save-button').addClass('is-disabled').attr('aria-disabled', true); event.preventDefault(); } }, onCancel: function(event) { $('#handout_error').removeClass('is-shown'); - $('.save-button').removeClass('is-disabled'); + $('.save-button').removeClass('is-disabled').attr('aria-disabled', false); this.$form.hide(); this.closeEditor(); }, closeEditor: function() { $('#handout_error').removeClass('is-shown'); - $('.save-button').removeClass('is-disabled'); + $('.save-button').removeClass('is-disabled').attr('aria-disabled', false); this.$form.hide(); ModalUtils.hideModalCover(); this.$form.find('.CodeMirror').remove(); diff --git a/cms/static/js/views/course_info_helper.js b/cms/static/js/views/course_info_helper.js index c9e74c531c..8f0b67e90a 100644 --- a/cms/static/js/views/course_info_helper.js +++ b/cms/static/js/views/course_info_helper.js @@ -10,7 +10,7 @@ define(["codemirror", 'js/utils/handle_iframe_binding', "utility"], autoCloseTags: true }); $codeMirror.on('change', function () { - $('.save-button').removeClass('is-disabled'); + $('.save-button').removeClass('is-disabled').attr('aria-disabled', false); }); $codeMirror.setValue(content); $codeMirror.clearHistory(); diff --git a/cms/static/js/views/course_rerun.js b/cms/static/js/views/course_rerun.js index bfa6370d1b..37dccbb650 100644 --- a/cms/static/js/views/course_rerun.js +++ b/cms/static/js/views/course_rerun.js @@ -44,12 +44,12 @@ define(["domReady", "jquery", "underscore", "js/views/utils/create_course_utils" CreateCourseUtils.createCourse(course_info, function (errorMessage) { $('.wrapper-error').addClass('is-shown').removeClass('is-hidden'); $('#course_rerun_error').html('' + errorMessage + '
'); - $('.rerun-course-save').addClass('is-disabled').removeClass('is-processing').html(gettext('Create Re-run')); + $('.rerun-course-save').addClass('is-disabled').attr('aria-disabled', true).removeClass('is-processing').html(gettext('Create Re-run')); $('.action-cancel').removeClass('is-hidden'); }); // Go into creating re-run state - $('.rerun-course-save').addClass('is-disabled').addClass('is-processing').html( + $('.rerun-course-save').addClass('is-disabled').attr('aria-disabled', true).addClass('is-processing').html( '' + gettext('Processing Re-run Request') ); $('.action-cancel').addClass('is-hidden'); diff --git a/cms/static/js/views/metadata.js b/cms/static/js/views/metadata.js index 1bc80fe91b..872509808b 100644 --- a/cms/static/js/views/metadata.js +++ b/cms/static/js/views/metadata.js @@ -104,7 +104,8 @@ function(BaseView, _, MetadataModel, AbstractEditor, FileUpload, UploadDialog, V if (this.model.get('non_editable')) { this.$el.find('#' + this.uniqueId) .prop('readonly', true) - .addClass('is-disabled'); + .addClass('is-disabled') + .attr('aria-disabled', true); } }, @@ -298,7 +299,7 @@ function(BaseView, _, MetadataModel, AbstractEditor, FileUpload, UploadDialog, V // change event var list = this.model.get('value') || []; this.setValueInEditor(list.concat([''])); - this.$el.find('.create-setting').addClass('is-disabled'); + this.$el.find('.create-setting').addClass('is-disabled').attr('aria-disabled', true); }, removeEntry: function(event) { @@ -306,17 +307,17 @@ function(BaseView, _, MetadataModel, AbstractEditor, FileUpload, UploadDialog, V var entry = $(event.currentTarget).siblings().val(); this.setValueInEditor(_.without(this.model.get('value'), entry)); this.updateModel(); - this.$el.find('.create-setting').removeClass('is-disabled'); + this.$el.find('.create-setting').removeClass('is-disabled').attr('aria-disabled', false); }, enableAdd: function() { - this.$el.find('.create-setting').removeClass('is-disabled'); + this.$el.find('.create-setting').removeClass('is-disabled').attr('aria-disabled', false); }, clear: function() { AbstractEditor.prototype.clear.apply(this, arguments); if (_.isNull(this.model.getValue())) { - this.$el.find('.create-setting').removeClass('is-disabled'); + this.$el.find('.create-setting').removeClass('is-disabled').attr('aria-disabled', false); } } }); @@ -469,7 +470,7 @@ function(BaseView, _, MetadataModel, AbstractEditor, FileUpload, UploadDialog, V var dict = $.extend(true, {}, this.model.get('value')) || {}; dict[''] = ''; this.setValueInEditor(dict); - this.$el.find('.create-setting').addClass('is-disabled'); + this.$el.find('.create-setting').addClass('is-disabled').attr('aria-disabled', true); }, removeEntry: function(event) { @@ -477,17 +478,17 @@ function(BaseView, _, MetadataModel, AbstractEditor, FileUpload, UploadDialog, V var entry = $(event.currentTarget).siblings('.input-key').val(); this.setValueInEditor(_.omit(this.model.get('value'), entry)); this.updateModel(); - this.$el.find('.create-setting').removeClass('is-disabled'); + this.$el.find('.create-setting').removeClass('is-disabled').attr('aria-disabled', false); }, enableAdd: function() { - this.$el.find('.create-setting').removeClass('is-disabled'); + this.$el.find('.create-setting').removeClass('is-disabled').attr('aria-disabled', false); }, clear: function() { AbstractEditor.prototype.clear.apply(this, arguments); if (_.isNull(this.model.getValue())) { - this.$el.find('.create-setting').removeClass('is-disabled'); + this.$el.find('.create-setting').removeClass('is-disabled').attr('aria-disabled', false); } } }); diff --git a/cms/static/js/views/pages/container_subviews.js b/cms/static/js/views/pages/container_subviews.js index 1957633f3b..51f4f8ddeb 100644 --- a/cms/static/js/views/pages/container_subviews.js +++ b/cms/static/js/views/pages/container_subviews.js @@ -61,16 +61,16 @@ define(["jquery", "underscore", "gettext", "js/views/baseview", "js/views/utils/ var previewAction = this.$el.find('.button-preview'), viewLiveAction = this.$el.find('.button-view'); if (this.model.get('published')) { - viewLiveAction.removeClass(disabledCss); + viewLiveAction.removeClass(disabledCss).attr('aria-disabled', false); } else { - viewLiveAction.addClass(disabledCss); + viewLiveAction.addClass(disabledCss).attr('aria-disabled', true); } if (this.model.get('has_changes') || !this.model.get('published')) { - previewAction.removeClass(disabledCss); + previewAction.removeClass(disabledCss).attr('aria-disabled', false); } else { - previewAction.addClass(disabledCss); + previewAction.addClass(disabledCss).attr('aria-disabled', true); } } }); diff --git a/cms/static/js/views/paging_footer.js b/cms/static/js/views/paging_footer.js index 7a81929e7a..1d64fa464f 100644 --- a/cms/static/js/views/paging_footer.js +++ b/cms/static/js/views/paging_footer.js @@ -27,8 +27,8 @@ define(["underscore", "js/views/baseview"], function(_, BaseView) { current_page: collection.currentPage, total_pages: collection.totalPages })); - this.$(".previous-page-link").toggleClass("is-disabled", currentPage === 0); - this.$(".next-page-link").toggleClass("is-disabled", currentPage === lastPage); + this.$(".previous-page-link").toggleClass("is-disabled", currentPage === 0).attr('aria-disabled', currentPage === 0);; + this.$(".next-page-link").toggleClass("is-disabled", currentPage === lastPage).attr('aria-disabled', currentPage === lastPage); return this; }, diff --git a/cms/static/js/views/paging_header.js b/cms/static/js/views/paging_header.js index 049ae78263..c05ecc1dbc 100644 --- a/cms/static/js/views/paging_header.js +++ b/cms/static/js/views/paging_header.js @@ -25,8 +25,8 @@ define(["underscore", "gettext", "js/views/baseview"], function(_, gettext, Base this.$el.html(this.template({ messageHtml: messageHtml })); - this.$(".previous-page-link").toggleClass("is-disabled", currentPage === 0); - this.$(".next-page-link").toggleClass("is-disabled", currentPage === lastPage); + this.$(".previous-page-link").toggleClass("is-disabled", currentPage === 0).attr('aria-disabled', currentPage === 0); + this.$(".next-page-link").toggleClass("is-disabled", currentPage === lastPage).attr('aria-disabled', currentPage === lastPage); return this; }, diff --git a/cms/static/js/views/utils/view_utils.js b/cms/static/js/views/utils/view_utils.js index 27d969f523..ad564a4b66 100644 --- a/cms/static/js/views/utils/view_utils.js +++ b/cms/static/js/views/utils/view_utils.js @@ -88,9 +88,9 @@ define(["jquery", "underscore", "gettext", "js/views/feedback_notification", "js * a JQuery promise. */ disableElementWhileRunning = function(element, operation) { - element.addClass("is-disabled"); + element.addClass("is-disabled").attr('aria-disabled', true); return operation().always(function() { - element.removeClass("is-disabled"); + element.removeClass("is-disabled").attr('aria-disabled', false); }); }; diff --git a/cms/static/js/views/video/transcripts/metadata_videolist.js b/cms/static/js/views/video/transcripts/metadata_videolist.js index f03cb43297..88bf36db2c 100644 --- a/cms/static/js/views/video/transcripts/metadata_videolist.js +++ b/cms/static/js/views/video/transcripts/metadata_videolist.js @@ -279,7 +279,7 @@ function($, Backbone, _, AbstractEditor, Utils, MessageManager) { // Enable inputs. $inputs - .prop('disabled', false) + .prop('disabled', false).attr('aria-disabled', false) .removeClass('is-disabled'); } else { @@ -288,7 +288,7 @@ function($, Backbone, _, AbstractEditor, Utils, MessageManager) { // the current input. $inputs .not($el) - .prop('disabled', true) + .prop('disabled', true).attr('aria-disabled', true) .addClass('is-disabled'); // If error occurs in the main video input, just close video diff --git a/cms/static/js/views/video/translations_editor.js b/cms/static/js/views/video/translations_editor.js index e700b40fc6..6b8dfd97af 100644 --- a/cms/static/js/views/video/translations_editor.js +++ b/cms/static/js/views/video/translations_editor.js @@ -133,7 +133,7 @@ function($, _, AbstractEditor, FileUpload, UploadDialog) { var dict = $.extend(true, {}, this.model.get('value')); dict[''] = ''; this.setValueInEditor(dict); - this.$el.find('.create-setting').addClass('is-disabled'); + this.$el.find('.create-setting').addClass('is-disabled').attr('aria-disabled', true); }, removeEntry: function(event) { @@ -142,7 +142,7 @@ function($, _, AbstractEditor, FileUpload, UploadDialog) { var entry = $(event.currentTarget).data('lang'); this.setValueInEditor(_.omit(this.model.get('value'), entry)); this.updateModel(); - this.$el.find('.create-setting').removeClass('is-disabled'); + this.$el.find('.create-setting').removeClass('is-disabled').attr('aria-disabled', false); }, upload: function (event) { @@ -173,13 +173,13 @@ function($, _, AbstractEditor, FileUpload, UploadDialog) { }, enableAdd: function() { - this.$el.find('.create-setting').removeClass('is-disabled'); + this.$el.find('.create-setting').removeClass('is-disabled').attr('aria-disabled', false); }, clear: function() { AbstractEditor.prototype.clear.apply(this, arguments); if (_.isNull(this.model.getValue())) { - this.$el.find('.create-setting').removeClass('is-disabled'); + this.$el.find('.create-setting').removeClass('is-disabled').attr('aria-disabled', false); } }, diff --git a/cms/templates/container.html b/cms/templates/container.html index b24cffe2ea..55b06f6370 100644 --- a/cms/templates/container.html +++ b/cms/templates/container.html @@ -72,12 +72,12 @@ templates = ["basic-modal", "modal-button", "edit-xblock-modal",${_("Click to download a CSV of anonymized student IDs:")}
- + %if settings.FEATURES.get('ENABLE_S3_GRADE_DOWNLOADS'): diff --git a/lms/templates/login.html b/lms/templates/login.html index 85e487c978..94bb947c04 100644 --- a/lms/templates/login.html +++ b/lms/templates/login.html @@ -101,6 +101,7 @@ if(enable) { $submitButton. removeClass('is-disabled'). + attr('aria-disabled', false). removeProp('disabled'). html("${_('Log into My {platform_name} Account').format(platform_name=platform_name)} + ${_('Access My Courses')}"); } diff --git a/lms/templates/register-shib.html b/lms/templates/register-shib.html index f0bc8efe15..bffcc88771 100644 --- a/lms/templates/register-shib.html +++ b/lms/templates/register-shib.html @@ -71,12 +71,14 @@ if(enable) { $submitButton. removeClass('is-disabled'). + attr('aria-disabled', false). removeProp('disabled'). text("${_('Update my {platform_name} Account').format(platform_name=settings.PLATFORM_NAME)}"); } else { $submitButton. addClass('is-disabled'). + attr('aria-disabled', true). prop('disabled', true). text("${_(u'Processing your account information …')}"); } diff --git a/lms/templates/register.html b/lms/templates/register.html index ebaf8f73da..f614ad002a 100644 --- a/lms/templates/register.html +++ b/lms/templates/register.html @@ -80,6 +80,7 @@ if(enable) { $submitButton. removeClass('is-disabled'). + attr('aria-disabled', false). removeProp('disabled'). html("${_('Create My {platform_name} Account').format(platform_name=platform_name)}"); } diff --git a/lms/templates/verify_student/face_photo_step.underscore b/lms/templates/verify_student/face_photo_step.underscore index 4d3a626609..405fd5dc35 100644 --- a/lms/templates/verify_student/face_photo_step.underscore +++ b/lms/templates/verify_student/face_photo_step.underscore @@ -45,7 +45,7 @@ <% if ( nextStepTitle ) { %>