Files
edx-platform/cms/static/js/index.js
Kyle McCormick f0239b724e fix: show creation rights notice on studio "courses" tab
There was a JS bug that made it so the course creation rights
notice (the thing that invites new studio users to request
access to create content) disappeared if the user selected
the "Courses" or "Libraries" tab.

This is because it was incorrectly comparing the #courses-tab
URL frament against the string "courses" instead of "courses-tab".

TNL-8718
2021-09-14 13:31:08 -04:00

211 lines
8.9 KiB
JavaScript

define(['domReady', 'jquery', 'underscore', 'js/utils/cancel_on_escape', 'js/views/utils/create_course_utils',
'js/views/utils/create_library_utils', 'common/js/components/utils/view_utils'],
function(domReady, $, _, CancelOnEscape, CreateCourseUtilsFactory, CreateLibraryUtilsFactory, ViewUtils) {
'use strict';
var CreateCourseUtils = new CreateCourseUtilsFactory({
name: '.new-course-name',
org: '.new-course-org',
number: '.new-course-number',
run: '.new-course-run',
save: '.new-course-save',
errorWrapper: '.create-course .wrap-error',
errorMessage: '#course_creation_error',
tipError: '.create-course span.tip-error',
error: '.create-course .error',
allowUnicode: '.allow-unicode-course-id'
}, {
shown: 'is-shown',
showing: 'is-showing',
hiding: 'is-hiding',
disabled: 'is-disabled',
error: 'error'
});
var CreateLibraryUtils = new CreateLibraryUtilsFactory({
name: '.new-library-name',
org: '.new-library-org',
number: '.new-library-number',
save: '.new-library-save',
errorWrapper: '.create-library .wrap-error',
errorMessage: '#library_creation_error',
tipError: '.create-library span.tip-error',
error: '.create-library .error',
allowUnicode: '.allow-unicode-library-id'
}, {
shown: 'is-shown',
showing: 'is-showing',
hiding: 'is-hiding',
disabled: 'is-disabled',
error: 'error'
});
var saveNewCourse = function(e) {
e.preventDefault();
if (CreateCourseUtils.hasInvalidRequiredFields()) {
return;
}
var $newCourseForm = $(this).closest('#create-course-form');
var display_name = $newCourseForm.find('.new-course-name').val();
var org = $newCourseForm.find('.new-course-org').val();
var number = $newCourseForm.find('.new-course-number').val();
var run = $newCourseForm.find('.new-course-run').val();
var course_info = {
org: org,
number: number,
display_name: display_name,
run: run
};
analytics.track('Created a Course', course_info);
CreateCourseUtils.create(course_info, function(errorMessage) {
var msg = edx.HtmlUtils.joinHtml(edx.HtmlUtils.HTML('<p>'), errorMessage, edx.HtmlUtils.HTML('</p>'));
$('.create-course .wrap-error').addClass('is-shown');
edx.HtmlUtils.setHtml($('#course_creation_error'), msg);
$('.new-course-save').addClass('is-disabled').attr('aria-disabled', true);
});
};
var rtlTextDirection = function() {
var Selectors = {
new_course_run: '#new-course-run'
};
if ($('body').hasClass('rtl')) {
$(Selectors.new_course_run).addClass('course-run-text-direction placeholder-text-direction');
$(Selectors.new_course_run).on('input', function() {
if (this.value === '') {
$(Selectors.new_course_run).addClass('placeholder-text-direction');
} else {
$(Selectors.new_course_run).removeClass('placeholder-text-direction');
}
});
}
};
var makeCancelHandler = function(addType) {
return function(e) {
e.preventDefault();
$('.new-' + addType + '-button').removeClass('is-disabled').attr('aria-disabled', false);
$('.wrapper-create-' + addType).removeClass('is-shown');
// Clear out existing fields and errors
$('#create-' + addType + '-form input[type=text]').val('');
$('#' + addType + '_creation_error').html('');
$('.create-' + addType + ' .wrap-error').removeClass('is-shown');
$('.new-' + addType + '-save').off('click');
};
};
var addNewCourse = function(e) {
var $newCourse,
$cancelButton,
$courseName;
e.preventDefault();
$('.new-course-button').addClass('is-disabled').attr('aria-disabled', true);
$('.new-course-save').addClass('is-disabled').attr('aria-disabled', true);
$newCourse = $('.wrapper-create-course').addClass('is-shown');
$cancelButton = $newCourse.find('.new-course-cancel');
$courseName = $('.new-course-name');
$courseName.focus().select();
$('.new-course-save').on('click', saveNewCourse);
$cancelButton.bind('click', makeCancelHandler('course'));
CancelOnEscape($cancelButton);
CreateCourseUtils.setupOrgAutocomplete();
CreateCourseUtils.configureHandlers();
rtlTextDirection();
};
var saveNewLibrary = function(e) {
e.preventDefault();
if (CreateLibraryUtils.hasInvalidRequiredFields()) {
return;
}
var $newLibraryForm = $(this).closest('#create-library-form');
var display_name = $newLibraryForm.find('.new-library-name').val();
var org = $newLibraryForm.find('.new-library-org').val();
var number = $newLibraryForm.find('.new-library-number').val();
var lib_info = {
org: org,
number: number,
display_name: display_name
};
analytics.track('Created a Library', lib_info);
CreateLibraryUtils.create(lib_info, function(errorMessage) {
var msg = edx.HtmlUtils.joinHtml(edx.HtmlUtils.HTML('<p>'), errorMessage, edx.HtmlUtils.HTML('</p>'));
$('.create-library .wrap-error').addClass('is-shown');
edx.HtmlUtils.setHtml($('#library_creation_error'), msg);
$('.new-library-save').addClass('is-disabled').attr('aria-disabled', true);
});
};
var addNewLibrary = function(e) {
e.preventDefault();
$('.new-library-button').addClass('is-disabled').attr('aria-disabled', true);
$('.new-library-save').addClass('is-disabled').attr('aria-disabled', true);
var $newLibrary = $('.wrapper-create-library').addClass('is-shown');
var $cancelButton = $newLibrary.find('.new-library-cancel');
var $libraryName = $('.new-library-name');
$libraryName.focus().select();
$('.new-library-save').on('click', saveNewLibrary);
$cancelButton.bind('click', makeCancelHandler('library'));
CancelOnEscape($cancelButton);
CreateLibraryUtils.configureHandlers();
};
var showTab = function(tab) {
return function(e) {
e.preventDefault();
window.location.hash = tab;
$('.courses-tab').toggleClass('active', tab === 'courses-tab');
$('.archived-courses-tab').toggleClass('active', tab === 'archived-courses-tab');
$('.libraries-tab').toggleClass('active', tab === 'libraries-tab');
// Also toggle this course-related notice shown below the course tab, if it is present:
$('.wrapper-creationrights').toggleClass('is-hidden', tab !== 'courses-tab');
};
};
var onReady = function() {
var courseTabHref = $('#course-index-tabs .courses-tab a').attr('href');
var libraryTabHref = $('#course-index-tabs .libraries-tab a').attr('href');
var ArchivedTabHref = $('#course-index-tabs .archived-courses-tab a').attr('href');
$('.new-course-button').bind('click', addNewCourse);
$('.new-library-button').bind('click', addNewLibrary);
$('.dismiss-button').bind('click', ViewUtils.deleteNotificationHandler(function() {
ViewUtils.reload();
}));
$('.action-reload').bind('click', ViewUtils.reload);
if (courseTabHref === '#') {
$('#course-index-tabs .courses-tab').bind('click', showTab('courses-tab'));
}
if (libraryTabHref === '#') {
$('#course-index-tabs .libraries-tab').bind('click', showTab('libraries-tab'));
}
if (ArchivedTabHref === '#') {
$('#course-index-tabs .archived-courses-tab').bind('click', showTab('archived-courses-tab'));
}
if (window.location.hash) {
$(window.location.hash.replace('#', '.')).first('a').trigger('click');
}
};
domReady(onReady);
return {
onReady: onReady
};
});