Commit ae8bc20b by Brian Jacobel

Run eslint autofixer on /lms

parent a63da43a
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['jquery', 'underscore', 'support/js/views/certificates'], define(['jquery', 'underscore', 'support/js/views/certificates'],
function ($, _, CertificatesView) { function($, _, CertificatesView) {
return function (options) { return function(options) {
options = _.extend(options, { options = _.extend(options, {
el: $('.certificates-content') el: $('.certificates-content')
}); });
......
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['backbone', 'support/js/models/certificate'], define(['backbone', 'support/js/models/certificate'],
function(Backbone, CertModel) { function(Backbone, CertModel) {
...@@ -26,5 +26,5 @@ ...@@ -26,5 +26,5 @@
return url; return url;
} }
}); });
}); });
}).call(this, define || RequireJS.define); }).call(this, define || RequireJS.define);
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['backbone', 'support/js/models/enrollment'], define(['backbone', 'support/js/models/enrollment'],
function(Backbone, EnrollmentModel) { function(Backbone, EnrollmentModel) {
...@@ -14,5 +14,5 @@ ...@@ -14,5 +14,5 @@
return this.baseUrl + this.user; return this.baseUrl + this.user;
} }
}); });
}); });
}).call(this, define || RequireJS.define); }).call(this, define || RequireJS.define);
;(function (define) { (function(define) {
'use strict'; 'use strict';
define([ define([
'underscore', 'underscore',
'support/js/views/enrollment' 'support/js/views/enrollment'
], function (_, EnrollmentView) { ], function(_, EnrollmentView) {
return function (options) { return function(options) {
options = _.extend({el: '.enrollment-content'}, options); options = _.extend({el: '.enrollment-content'}, options);
return new EnrollmentView(options).render(); return new EnrollmentView(options).render();
}; };
......
(function (define) { (function(define) {
'use strict'; 'use strict';
define(['backbone'], function (Backbone) { define(['backbone'], function(Backbone) {
return Backbone.Model.extend({ return Backbone.Model.extend({
defaults: { defaults: {
username: null, username: null,
......
(function (define) { (function(define) {
'use strict'; 'use strict';
define(['backbone', 'underscore'], function (Backbone, _) { define(['backbone', 'underscore'], function(Backbone, _) {
return Backbone.Model.extend({ return Backbone.Model.extend({
updateEnrollment: function (new_mode, reason) { updateEnrollment: function(new_mode, reason) {
return $.ajax({ return $.ajax({
url: this.url(), url: this.url(),
type: 'POST', type: 'POST',
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
old_mode: this.get('mode'), old_mode: this.get('mode'),
reason: reason reason: reason
}), }),
success: _.bind(function (response) { success: _.bind(function(response) {
this.set('manual_enrollment', response); this.set('manual_enrollment', response);
this.set('mode', new_mode); this.set('mode', new_mode);
}, this) }, this)
......
define([ define([
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'support/js/spec_helpers/enrollment_helpers', 'support/js/spec_helpers/enrollment_helpers',
'support/js/collections/enrollment', 'support/js/collections/enrollment'
], function (AjaxHelpers, EnrollmentHelpers, EnrollmentCollection) { ], function(AjaxHelpers, EnrollmentHelpers, EnrollmentCollection) {
'use strict'; 'use strict';
describe('EnrollmentCollection', function () { describe('EnrollmentCollection', function() {
var enrollmentCollection; var enrollmentCollection;
beforeEach(function () { beforeEach(function() {
enrollmentCollection = new EnrollmentCollection([EnrollmentHelpers.mockEnrollmentData], { enrollmentCollection = new EnrollmentCollection([EnrollmentHelpers.mockEnrollmentData], {
user: 'test-user', user: 'test-user',
baseUrl: '/support/enrollment/' baseUrl: '/support/enrollment/'
}); });
}); });
it('sets its URL based on the user', function () { it('sets its URL based on the user', function() {
expect(enrollmentCollection.url()).toEqual('/support/enrollment/test-user'); expect(enrollmentCollection.url()).toEqual('/support/enrollment/test-user');
}); });
}); });
......
...@@ -2,20 +2,20 @@ define([ ...@@ -2,20 +2,20 @@ define([
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'support/js/spec_helpers/enrollment_helpers', 'support/js/spec_helpers/enrollment_helpers',
'support/js/models/enrollment' 'support/js/models/enrollment'
], function (AjaxHelpers, EnrollmentHelpers, EnrollmentModel) { ], function(AjaxHelpers, EnrollmentHelpers, EnrollmentModel) {
'use strict'; 'use strict';
describe('EnrollmentModel', function () { describe('EnrollmentModel', function() {
var enrollment; var enrollment;
beforeEach(function () { beforeEach(function() {
enrollment = new EnrollmentModel(EnrollmentHelpers.mockEnrollmentData); enrollment = new EnrollmentModel(EnrollmentHelpers.mockEnrollmentData);
enrollment.url = function () { enrollment.url = function() {
return '/support/enrollment/test-user'; return '/support/enrollment/test-user';
}; };
}); });
it('can save an enrollment to the server and updates itself on success', function () { it('can save an enrollment to the server and updates itself on success', function() {
var requests = AjaxHelpers.requests(this), var requests = AjaxHelpers.requests(this),
manual_enrollment = { manual_enrollment = {
'enrolled_by': 'staff@edx.org', 'enrolled_by': 'staff@edx.org',
...@@ -33,7 +33,7 @@ define([ ...@@ -33,7 +33,7 @@ define([
expect(enrollment.get('manual_enrollment')).toEqual(manual_enrollment); expect(enrollment.get('manual_enrollment')).toEqual(manual_enrollment);
}); });
it('does not update itself on a server error', function () { it('does not update itself on a server error', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
enrollment.updateEnrollment('verified', 'Financial Assistance'); enrollment.updateEnrollment('verified', 'Financial Assistance');
AjaxHelpers.respondWithError(requests, 500); AjaxHelpers.respondWithError(requests, 500);
......
...@@ -6,91 +6,90 @@ define([ ...@@ -6,91 +6,90 @@ define([
'use strict'; 'use strict';
describe('CertificatesView', function() { describe('CertificatesView', function() {
var view = null, var view = null,
REGENERATE_SEARCH_RESULTS = [ REGENERATE_SEARCH_RESULTS = [
{ {
'username': 'student', 'username': 'student',
'status': 'notpassing', 'status': 'notpassing',
'created': '2015-08-05T17:32:25+00:00', 'created': '2015-08-05T17:32:25+00:00',
'grade': '0.0', 'grade': '0.0',
'type': 'honor', 'type': 'honor',
'course_key': 'course-v1:edX+DemoX+Demo_Course', 'course_key': 'course-v1:edX+DemoX+Demo_Course',
'download_url': null, 'download_url': null,
'modified': '2015-08-06T19:47:07+00:00', 'modified': '2015-08-06T19:47:07+00:00',
'regenerate': true 'regenerate': true
}, },
{ {
'username': 'student', 'username': 'student',
'status': 'downloadable', 'status': 'downloadable',
'created': '2015-08-05T17:53:33+00:00', 'created': '2015-08-05T17:53:33+00:00',
'grade': '1.0', 'grade': '1.0',
'type': 'verified', 'type': 'verified',
'course_key': 'edx/test/2015', 'course_key': 'edx/test/2015',
'download_url': 'http://www.example.com/certificate.pdf', 'download_url': 'http://www.example.com/certificate.pdf',
'modified': '2015-08-06T19:47:05+00:00', 'modified': '2015-08-06T19:47:05+00:00',
'regenerate': true 'regenerate': true
}
],
GENERATE_SEARCH_RESULTS = [
{
'username': 'student',
'status': '',
'created': '',
'grade': '',
'type': '',
'course_key': 'edx/test1/2016',
'download_url': null,
'modified': '',
'regenerate': false
}
],
getSearchResults = function() {
var results = [];
$('.certificates-results tr').each(function(rowIndex, rowValue) {
var columns = [];
$(rowValue).children('td').each(function(colIndex, colValue) {
columns[colIndex] = $(colValue).html();
});
if (columns.length > 0) {
results.push(columns);
} }
}); ],
GENERATE_SEARCH_RESULTS = [
{
'username': 'student',
'status': '',
'created': '',
'grade': '',
'type': '',
'course_key': 'edx/test1/2016',
'download_url': null,
'modified': '',
'regenerate': false
}
],
getSearchResults = function() {
var results = [];
return results; $('.certificates-results tr').each(function(rowIndex, rowValue) {
}, var columns = [];
$(rowValue).children('td').each(function(colIndex, colValue) {
columns[colIndex] = $(colValue).html();
});
if (columns.length > 0) {
results.push(columns);
}
});
searchFor = function(user_filter, course_filter, requests, response) { return results;
},
searchFor = function(user_filter, course_filter, requests, response) {
// Enter the search term and submit // Enter the search term and submit
var url = '/certificates/search?user=' + user_filter; var url = '/certificates/search?user=' + user_filter;
view.setUserFilter(user_filter); view.setUserFilter(user_filter);
if (course_filter) { if (course_filter) {
view.setCourseFilter(course_filter); view.setCourseFilter(course_filter);
url += '&course_id=' + course_filter; url += '&course_id=' + course_filter;
} }
view.triggerSearch(); view.triggerSearch();
// Simulate a response from the server // Simulate a response from the server
AjaxHelpers.expectJsonRequest(requests, 'GET', url); AjaxHelpers.expectJsonRequest(requests, 'GET', url);
AjaxHelpers.respondWithJson(requests, response); AjaxHelpers.respondWithJson(requests, response);
}, },
regenerateCerts = function(username, courseKey) { regenerateCerts = function(username, courseKey) {
var sel = '.btn-cert-regenerate[data-course-key="' + courseKey + '"]'; var sel = '.btn-cert-regenerate[data-course-key="' + courseKey + '"]';
$(sel).click(); $(sel).click();
}, },
generateCerts = function(username, courseKey) { generateCerts = function(username, courseKey) {
var sel = '.btn-cert-generate[data-course-key="' + courseKey + '"]'; var sel = '.btn-cert-generate[data-course-key="' + courseKey + '"]';
$(sel).click(); $(sel).click();
}; };
beforeEach(function () { beforeEach(function() {
spyOn(window.history, 'pushState'); spyOn(window.history, 'pushState');
setFixtures('<div class="certificates-content"></div>'); setFixtures('<div class="certificates-content"></div>');
view = new CertificatesView({ view = new CertificatesView({
...@@ -142,7 +141,6 @@ define([ ...@@ -142,7 +141,6 @@ define([
expect(results[0][3]).toContain('Not available'); expect(results[0][3]).toContain('Not available');
expect(results[0][4]).toEqual(GENERATE_SEARCH_RESULTS[0].grade); expect(results[0][4]).toEqual(GENERATE_SEARCH_RESULTS[0].grade);
expect(results[0][5]).toEqual(GENERATE_SEARCH_RESULTS[0].modified); expect(results[0][5]).toEqual(GENERATE_SEARCH_RESULTS[0].modified);
}); });
it('searches for certificates and displays a message when there are no results', function() { it('searches for certificates and displays a message when there are no results', function() {
...@@ -201,7 +199,7 @@ define([ ...@@ -201,7 +199,7 @@ define([
AjaxHelpers.respondWithJson(requests, ''); AjaxHelpers.respondWithJson(requests, '');
}); });
it('generate a certificate for a student', function() { it('generate a certificate for a student', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
// Trigger a search // Trigger a search
...@@ -223,6 +221,5 @@ define([ ...@@ -223,6 +221,5 @@ define([
// Respond with success // Respond with success
AjaxHelpers.respondWithJson(requests, ''); AjaxHelpers.respondWithJson(requests, '');
}); });
}); });
}); });
...@@ -4,16 +4,15 @@ define([ ...@@ -4,16 +4,15 @@ define([
'support/js/spec_helpers/enrollment_helpers', 'support/js/spec_helpers/enrollment_helpers',
'support/js/models/enrollment', 'support/js/models/enrollment',
'support/js/views/enrollment_modal' 'support/js/views/enrollment_modal'
], function (_, AjaxHelpers, EnrollmentHelpers, EnrollmentModel, EnrollmentModal) { ], function(_, AjaxHelpers, EnrollmentHelpers, EnrollmentModel, EnrollmentModal) {
'use strict'; 'use strict';
describe('EnrollmentModal', function () { describe('EnrollmentModal', function() {
var modal; var modal;
beforeEach(function () { beforeEach(function() {
var enrollment = new EnrollmentModel(EnrollmentHelpers.mockEnrollmentData); var enrollment = new EnrollmentModel(EnrollmentHelpers.mockEnrollmentData);
enrollment.url = function () { enrollment.url = function() {
return '/support/enrollment/test-user'; return '/support/enrollment/test-user';
}; };
setFixtures('<div class="enrollment-modal-wrapper is-hidden"></div>'); setFixtures('<div class="enrollment-modal-wrapper is-hidden"></div>');
...@@ -23,53 +22,53 @@ define([ ...@@ -23,53 +22,53 @@ define([
modes: ['verified', 'audit'], modes: ['verified', 'audit'],
reasons: _.reduce( reasons: _.reduce(
['Financial Assistance', 'Stampeding Buffalo', 'Angry Customer'], ['Financial Assistance', 'Stampeding Buffalo', 'Angry Customer'],
function (acc, x) { acc[x] = x; return acc; }, function(acc, x) { acc[x] = x; return acc; },
{} {}
) )
}).render(); }).render();
}); });
it('can render itself', function () { it('can render itself', function() {
expect($('.enrollment-modal h1').text()).toContain( expect($('.enrollment-modal h1').text()).toContain(
'Change enrollment for ' + EnrollmentHelpers.TEST_COURSE 'Change enrollment for ' + EnrollmentHelpers.TEST_COURSE
); );
expect($('.enrollment-change-field p').first().text()).toContain('Current enrollment mode: audit'); expect($('.enrollment-change-field p').first().text()).toContain('Current enrollment mode: audit');
_.each(['verified', 'audit'], function (mode) { _.each(['verified', 'audit'], function(mode) {
expect($('.enrollment-new-mode').html()).toContain('<option value="' + mode + '">'); expect($('.enrollment-new-mode').html()).toContain('<option value="' + mode + '">');
}); });
_.each(['', 'Financial Assistance', 'Stampeding Buffalo', 'Angry Customer'], function (reason) { _.each(['', 'Financial Assistance', 'Stampeding Buffalo', 'Angry Customer'], function(reason) {
expect($('.enrollment-reason').html()).toContain('<option value="' + reason + '">'); expect($('.enrollment-reason').html()).toContain('<option value="' + reason + '">');
}); });
}); });
it('is hidden by default', function () { it('is hidden by default', function() {
expect($('.enrollment-modal-wrapper')).toHaveClass('is-hidden'); expect($('.enrollment-modal-wrapper')).toHaveClass('is-hidden');
}); });
it('can show and hide itself', function () { it('can show and hide itself', function() {
modal.show(); modal.show();
expect($('.enrollment-modal-wrapper')).not.toHaveClass('is-hidden'); expect($('.enrollment-modal-wrapper')).not.toHaveClass('is-hidden');
modal.hide(); modal.hide();
expect($('.enrollment-modal-wrapper')).toHaveClass('is-hidden'); expect($('.enrollment-modal-wrapper')).toHaveClass('is-hidden');
}); });
it('shows errors on submit if a reason is not given', function () { it('shows errors on submit if a reason is not given', function() {
expect($('.enrollment-change-errors').css('display')).toEqual('none'); expect($('.enrollment-change-errors').css('display')).toEqual('none');
$('.enrollment-change-submit').click(); $('.enrollment-change-submit').click();
expect($('.enrollment-change-errors').css('display')).not.toEqual('none'); expect($('.enrollment-change-errors').css('display')).not.toEqual('none');
expect($('.enrollment-change-errors').text()).toContain('Please specify a reason.'); expect($('.enrollment-change-errors').text()).toContain('Please specify a reason.');
}); });
it('can does not error if a free-form reason is given', function () { it('can does not error if a free-form reason is given', function() {
AjaxHelpers.requests(this); AjaxHelpers.requests(this);
$('.enrollment-reason-other').val('For Fun'); $('.enrollment-reason-other').val('For Fun');
$('.enrollment-change-submit').click(); $('.enrollment-change-submit').click();
expect($('.enrollment-change-errors').css('display')).toEqual('none'); expect($('.enrollment-change-errors').css('display')).toEqual('none');
}); });
it('can submit an enrollment change request and hides itself on success', function () { it('can submit an enrollment change request and hides itself on success', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
$('.enrollment-new-mode').val('verified'); $('.enrollment-new-mode').val('verified');
$('.enrollment-reason').val('Financial Assistance'); $('.enrollment-reason').val('Financial Assistance');
...@@ -87,7 +86,7 @@ define([ ...@@ -87,7 +86,7 @@ define([
expect($('.enrollment-change-errors').css('display')).toEqual('none'); expect($('.enrollment-change-errors').css('display')).toEqual('none');
}); });
it('shows a message on a server error', function () { it('shows a message on a server error', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
$('.enrollment-new-mode').val('verified'); $('.enrollment-new-mode').val('verified');
$('.enrollment-reason').val('Financial Assistance'); $('.enrollment-reason').val('Financial Assistance');
...@@ -97,7 +96,7 @@ define([ ...@@ -97,7 +96,7 @@ define([
expect($('.enrollment-change-errors').text()).toContain('Something went wrong'); expect($('.enrollment-change-errors').text()).toContain('Something went wrong');
}); });
it('hides itself on cancel', function () { it('hides itself on cancel', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
modal.show(); modal.show();
$('.enrollment-change-cancel').click(); $('.enrollment-change-cancel').click();
......
...@@ -3,11 +3,11 @@ define([ ...@@ -3,11 +3,11 @@ define([
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'support/js/spec_helpers/enrollment_helpers', 'support/js/spec_helpers/enrollment_helpers',
'support/js/views/enrollment' 'support/js/views/enrollment'
], function (_, AjaxHelpers, EnrollmentHelpers, EnrollmentView) { ], function(_, AjaxHelpers, EnrollmentHelpers, EnrollmentView) {
'use strict'; 'use strict';
var enrollmentView, var enrollmentView,
createEnrollmentView = function (options) { createEnrollmentView = function(options) {
if (_.isUndefined(options)) { if (_.isUndefined(options)) {
options = {}; options = {};
} }
...@@ -15,22 +15,22 @@ define([ ...@@ -15,22 +15,22 @@ define([
el: '.enrollment-content', el: '.enrollment-content',
user: 'test-user', user: 'test-user',
enrollmentsUrl: '/support/enrollment/', enrollmentsUrl: '/support/enrollment/',
enrollmentSupportUrl: '/support/enrollment/', enrollmentSupportUrl: '/support/enrollment/'
}, options)); }, options));
}; };
beforeEach(function () { beforeEach(function() {
setFixtures('<div class="enrollment-content"></div>'); setFixtures('<div class="enrollment-content"></div>');
}); });
describe('EnrollmentView', function () { describe('EnrollmentView', function() {
it('can render itself without an initial user', function () { it('can render itself without an initial user', function() {
enrollmentView = createEnrollmentView({user: ''}).render(); enrollmentView = createEnrollmentView({user: ''}).render();
expect($('.enrollment-search input').val()).toBe(''); expect($('.enrollment-search input').val()).toBe('');
expect($('.enrollment-results').length).toBe(0); expect($('.enrollment-results').length).toBe(0);
}); });
it('renders itself when an initial user is provided', function () { it('renders itself when an initial user is provided', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
enrollmentView = createEnrollmentView().render(); enrollmentView = createEnrollmentView().render();
AjaxHelpers.expectRequest(requests, 'GET', '/support/enrollment/test-user', null); AjaxHelpers.expectRequest(requests, 'GET', '/support/enrollment/test-user', null);
...@@ -43,7 +43,7 @@ define([ ...@@ -43,7 +43,7 @@ define([
}); });
}); });
it('re-renders itself when its collection changes', function () { it('re-renders itself when its collection changes', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
enrollmentView = createEnrollmentView().render(); enrollmentView = createEnrollmentView().render();
spyOn(enrollmentView, 'render').and.callThrough(); spyOn(enrollmentView, 'render').and.callThrough();
...@@ -51,7 +51,7 @@ define([ ...@@ -51,7 +51,7 @@ define([
expect(enrollmentView.render).toHaveBeenCalled(); expect(enrollmentView.render).toHaveBeenCalled();
}); });
it('shows a modal dialog to change enrollments', function () { it('shows a modal dialog to change enrollments', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
enrollmentView = createEnrollmentView().render(); enrollmentView = createEnrollmentView().render();
AjaxHelpers.respondWithJson(requests, [EnrollmentHelpers.mockEnrollmentData]); AjaxHelpers.respondWithJson(requests, [EnrollmentHelpers.mockEnrollmentData]);
......
define([], function () { define([], function() {
'use strict'; 'use strict';
var testCourse = "course-v1:TestX+T101+2015"; var testCourse = 'course-v1:TestX+T101+2015';
return { return {
TEST_COURSE: testCourse, TEST_COURSE: testCourse,
mockEnrollmentData: { mockEnrollmentData: {
created: "2015-12-07T18:17:46.210940Z", created: '2015-12-07T18:17:46.210940Z',
mode: "audit", mode: 'audit',
is_active: true, is_active: true,
user: "test-user", user: 'test-user',
course_end: "2017-01-01T00:00:00Z", course_end: '2017-01-01T00:00:00Z',
course_start: "2015-01-01T00:00:00Z", course_start: '2015-01-01T00:00:00Z',
course_modes: [ course_modes: [
{ {
slug: "audit", slug: 'audit',
name: "Audit", name: 'Audit',
min_price: 0, min_price: 0,
suggested_prices: "", suggested_prices: '',
currency: "usd", currency: 'usd',
expiration_datetime: null, expiration_datetime: null,
description: null, description: null,
sku: "6ED7EDC" sku: '6ED7EDC'
}, },
{ {
slug: "verified", slug: 'verified',
name: "Verified Certificate", name: 'Verified Certificate',
min_price: 5, min_price: 5,
suggested_prices: "", suggested_prices: '',
currency: "usd", currency: 'usd',
expiration_datetime: null, expiration_datetime: null,
description: null, description: null,
sku: "25A5354" sku: '25A5354'
} }
], ],
enrollment_start: null, enrollment_start: null,
......
;(function (define) { (function(define) {
'use strict'; 'use strict';
define([ define([
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
'support/js/collections/certificate', 'support/js/collections/certificate',
'text!support/templates/certificates.underscore', 'text!support/templates/certificates.underscore',
'text!support/templates/certificates_results.underscore' 'text!support/templates/certificates_results.underscore'
], function (Backbone, _, gettext, CertCollection, certificatesTpl, resultsTpl) { ], function(Backbone, _, gettext, CertCollection, certificatesTpl, resultsTpl) {
return Backbone.View.extend({ return Backbone.View.extend({
events: { events: {
'submit .certificates-form': 'search', 'submit .certificates-form': 'search',
...@@ -53,11 +53,10 @@ ...@@ -53,11 +53,10 @@
}, },
search: function(event) { search: function(event) {
// Fetch the certificate collection for the given user // Fetch the certificate collection for the given user
var url = '/support/certificates?user=' + this.getUserFilter(); var url = '/support/certificates?user=' + this.getUserFilter();
//course id is optional. // course id is optional.
if (this.getCourseFilter()) { if (this.getCourseFilter()) {
url += '&course_id=' + this.getCourseFilter(); url += '&course_id=' + this.getCourseFilter();
} }
...@@ -171,13 +170,13 @@ ...@@ -171,13 +170,13 @@
}, },
setResults: function(html) { setResults: function(html) {
$(".certificates-results", this.$el).html(html); $('.certificates-results', this.$el).html(html);
}, },
disableButtons: function() { disableButtons: function() {
$('.btn-disable-on-submit') $('.btn-disable-on-submit')
.addClass("is-disabled") .addClass('is-disabled')
.attr("disabled", true); .attr('disabled', true);
}, },
enableButtons: function() { enableButtons: function() {
......
;(function (define) { (function(define) {
'use strict'; 'use strict';
define([ define([
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
'support/js/views/enrollment_modal', 'support/js/views/enrollment_modal',
'support/js/collections/enrollment', 'support/js/collections/enrollment',
'text!support/templates/enrollment.underscore' 'text!support/templates/enrollment.underscore'
], function (Backbone, _, moment, EnrollmentModal, EnrollmentCollection, enrollmentTemplate) { ], function(Backbone, _, moment, EnrollmentModal, EnrollmentCollection, enrollmentTemplate) {
return Backbone.View.extend({ return Backbone.View.extend({
ENROLLMENT_CHANGE_REASONS: { ENROLLMENT_CHANGE_REASONS: {
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
'click .change-enrollment-btn': 'changeEnrollment' 'click .change-enrollment-btn': 'changeEnrollment'
}, },
initialize: function (options) { initialize: function(options) {
var user = options.user; var user = options.user;
this.initialUser = user; this.initialUser = user;
this.enrollmentSupportUrl = options.enrollmentSupportUrl; this.enrollmentSupportUrl = options.enrollmentSupportUrl;
...@@ -33,12 +33,12 @@ ...@@ -33,12 +33,12 @@
this.enrollments.on('change', _.bind(this.render, this)); this.enrollments.on('change', _.bind(this.render, this));
}, },
render: function () { render: function() {
var user = this.enrollments.user; var user = this.enrollments.user;
this.$el.html(_.template(enrollmentTemplate)({ this.$el.html(_.template(enrollmentTemplate)({
user: user, user: user,
enrollments: this.enrollments, enrollments: this.enrollments,
formatDate: function (date) { formatDate: function(date) {
if (!date) { if (!date) {
return 'N/A'; return 'N/A';
} }
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
* Check if the URL has provided an initial search, and * Check if the URL has provided an initial search, and
* perform that search if so. * perform that search if so.
*/ */
checkInitialSearch: function () { checkInitialSearch: function() {
if (this.initialUser) { if (this.initialUser) {
delete this.initialUser; delete this.initialUser;
this.$('.enrollment-form').submit(); this.$('.enrollment-form').submit();
...@@ -66,18 +66,18 @@ ...@@ -66,18 +66,18 @@
/* /*
* Return the user's search string. * Return the user's search string.
*/ */
getSearchString: function () { getSearchString: function() {
return this.$('#enrollment-query-input').val(); return this.$('#enrollment-query-input').val();
}, },
/* /*
* Perform the search. Renders the view on success. * Perform the search. Renders the view on success.
*/ */
search: function (event) { search: function(event) {
event.preventDefault(); event.preventDefault();
this.enrollments.user = this.getSearchString(); this.enrollments.user = this.getSearchString();
this.enrollments.fetch({ this.enrollments.fetch({
success: _.bind(function () { success: _.bind(function() {
this.render(); this.render();
}, this) }, this)
}); });
...@@ -87,7 +87,7 @@ ...@@ -87,7 +87,7 @@
* Show a modal view allowing the user to change a * Show a modal view allowing the user to change a
* learner's enrollment. * learner's enrollment.
*/ */
changeEnrollment: function (event) { changeEnrollment: function(event) {
var button = $(event.currentTarget), var button = $(event.currentTarget),
course_id = button.data('course_id'), course_id = button.data('course_id'),
modes = button.data('modes').split(','), modes = button.data('modes').split(','),
......
;(function (define) { (function(define) {
'use strict'; 'use strict';
define([ define([
...@@ -6,44 +6,44 @@ ...@@ -6,44 +6,44 @@
'underscore', 'underscore',
'gettext', 'gettext',
'text!support/templates/enrollment-modal.underscore' 'text!support/templates/enrollment-modal.underscore'
], function (Backbone, _, gettext, modalTemplate) { ], function(Backbone, _, gettext, modalTemplate) {
var EnrollmentModal = Backbone.View.extend({ var EnrollmentModal = Backbone.View.extend({
events: { events: {
'click .enrollment-change-submit': 'submitEnrollmentChange', 'click .enrollment-change-submit': 'submitEnrollmentChange',
'click .enrollment-change-cancel': 'cancel' 'click .enrollment-change-cancel': 'cancel'
}, },
initialize: function (options) { initialize: function(options) {
this.enrollment = options.enrollment; this.enrollment = options.enrollment;
this.modes = options.modes; this.modes = options.modes;
this.reasons = options.reasons; this.reasons = options.reasons;
this.template = modalTemplate; this.template = modalTemplate;
}, },
render: function () { render: function() {
this.$el.html(_.template(this.template)({ this.$el.html(_.template(this.template)({
enrollment: this.enrollment, enrollment: this.enrollment,
modes: this.modes, modes: this.modes,
reasons: this.reasons, reasons: this.reasons
})); }));
return this; return this;
}, },
show: function () { show: function() {
this.$el.removeClass('is-hidden').addClass('is-shown'); this.$el.removeClass('is-hidden').addClass('is-shown');
this.render(); this.render();
}, },
hide: function () { hide: function() {
this.$el.removeClass('is-shown').addClass('is-hidden'); this.$el.removeClass('is-shown').addClass('is-hidden');
this.render(); this.render();
}, },
showErrors: function (errorMessage) { showErrors: function(errorMessage) {
this.$('.enrollment-change-errors').text(errorMessage).css('display', ''); this.$('.enrollment-change-errors').text(errorMessage).css('display', '');
}, },
submitEnrollmentChange: function (event) { submitEnrollmentChange: function(event) {
var new_mode = this.$('.enrollment-new-mode').val(), var new_mode = this.$('.enrollment-new-mode').val(),
reason = this.$('.enrollment-reason').val() || this.$('.enrollment-reason-other').val(); reason = this.$('.enrollment-reason').val() || this.$('.enrollment-reason-other').val();
event.preventDefault(); event.preventDefault();
...@@ -53,11 +53,11 @@ ...@@ -53,11 +53,11 @@
else { else {
this.enrollment.updateEnrollment(new_mode, reason).then( this.enrollment.updateEnrollment(new_mode, reason).then(
// Success callback // Success callback
_.bind(function () { _.bind(function() {
this.hide(); this.hide();
}, this), }, this),
// Error callback // Error callback
_.bind(function () { _.bind(function() {
this.showErrors(gettext( this.showErrors(gettext(
'Something went wrong changing this enrollment. Please try again.' 'Something went wrong changing this enrollment. Please try again.'
)); ));
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
} }
}, },
cancel: function (event) { cancel: function(event) {
event.preventDefault(); event.preventDefault();
this.hide(); this.hide();
} }
......
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['edx-ui-toolkit/js/pagination/paging-collection'], define(['edx-ui-toolkit/js/pagination/paging-collection'],
function(PagingCollection) { function(PagingCollection) {
var BaseCollection = PagingCollection.extend({ var BaseCollection = PagingCollection.extend({
constructor: function (models, options) { constructor: function(models, options) {
this.options = options; this.options = options;
this.url = options.url; this.url = options.url;
if (options.perPage) { if (options.perPage) {
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
this.queryParams = _.extend({}, BaseCollection.prototype.queryParams, this.queryParams); this.queryParams = _.extend({}, BaseCollection.prototype.queryParams, this.queryParams);
PagingCollection.prototype.constructor.call(this, models, options); PagingCollection.prototype.constructor.call(this, models, options);
}, },
parse: function (response, options) { parse: function(response, options) {
if (!response) { if (!response) {
response = {}; response = {};
} }
...@@ -37,11 +37,11 @@ ...@@ -37,11 +37,11 @@
// TODO: These changes has been added to backbone.paginator // TODO: These changes has been added to backbone.paginator
// remove when backbone.paginator gets a new release // remove when backbone.paginator gets a new release
sync: function (method, model, options) { sync: function(method, model, options) {
// do not send total pages and total records in request // do not send total pages and total records in request
if (method === 'read') { if (method === 'read') {
var params = _.values(_.pick(this.queryParams, ['totalPages', 'totalRecords'])); var params = _.values(_.pick(this.queryParams, ['totalPages', 'totalRecords']));
_.each(params, function (param) { _.each(params, function(param) {
delete options.data[param]; delete options.data[param];
}); });
} }
......
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['teams/js/collections/team'], function (TeamCollection) { define(['teams/js/collections/team'], function(TeamCollection) {
var MyTeamsCollection = TeamCollection.extend({ var MyTeamsCollection = TeamCollection.extend({
queryParams: { queryParams: {
username: function () { username: function() {
return this.options.username; return this.options.username;
}, },
text_search: function () { text_search: function() {
return this.searchString || ''; return this.searchString || '';
} }
}, },
constructor: function (teams, options) { constructor: function(teams, options) {
TeamCollection.prototype.constructor.call(this, teams, options); TeamCollection.prototype.constructor.call(this, teams, options);
delete this.queryParams.topic_id; delete this.queryParams.topic_id;
} }
......
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['teams/js/collections/base', 'teams/js/models/team', 'gettext'], define(['teams/js/collections/base', 'teams/js/models/team', 'gettext'],
function(BaseCollection, TeamModel, gettext) { function(BaseCollection, TeamModel, gettext) {
var TeamCollection = BaseCollection.extend({ var TeamCollection = BaseCollection.extend({
model: TeamModel, model: TeamModel,
state: { state: {
sortKey: 'last_activity_at', sortKey: 'last_activity_at',
order: null order: null
}, },
queryParams: { queryParams: {
topic_id: function () { topic_id: function() {
return this.options.topic_id; return this.options.topic_id;
}, },
expand: 'user', expand: 'user',
course_id: function () { course_id: function() {
return this.options.course_id; return this.options.course_id;
}, },
order_by: function () { order_by: function() {
return this.getSearchString() ? '' : this.state.sortKey; return this.getSearchString() ? '' : this.state.sortKey;
}, },
text_search: function () { text_search: function() {
return this.getSearchString() || ''; return this.getSearchString() || '';
} }
}, },
...@@ -36,10 +36,10 @@ ...@@ -36,10 +36,10 @@
this.registerSortableField('open_slots', gettext('open slots')); this.registerSortableField('open_slots', gettext('open slots'));
}, },
setFilterField: function (fieldName, value) { setFilterField: function(fieldName, value) {
BaseCollection.prototype.setFilterField.call(this, fieldName, value); BaseCollection.prototype.setFilterField.call(this, fieldName, value);
this.queryParams[fieldName] = function () { this.queryParams[fieldName] = function() {
return value; return value;
}; };
} }
......
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['underscore', 'gettext', 'teams/js/collections/base', 'teams/js/models/topic'], define(['underscore', 'gettext', 'teams/js/collections/base', 'teams/js/models/topic'],
function(_, gettext, BaseCollection, TopicModel) { function(_, gettext, BaseCollection, TopicModel) {
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
}, },
queryParams: { queryParams: {
course_id: function () { return this.course_id; }, course_id: function() { return this.course_id; },
text_search: function () { return this.searchString || ''; } text_search: function() { return this.searchString || ''; }
}, },
constructor: function(topics, options) { constructor: function(topics, options) {
......
/** /**
* Model for a team. * Model for a team.
*/ */
(function (define) { (function(define) {
'use strict'; 'use strict';
define(['backbone'], function (Backbone) { define(['backbone'], function(Backbone) {
var Team = Backbone.Model.extend({ var Team = Backbone.Model.extend({
defaults: { defaults: {
id: null, id: null,
......
/** /**
* Model for a team membership. * Model for a team membership.
*/ */
(function (define) { (function(define) {
'use strict'; 'use strict';
define(['backbone', 'teams/js/models/team'], function (Backbone, TeamModel) { define(['backbone', 'teams/js/models/team'], function(Backbone, TeamModel) {
var TeamMembership = Backbone.Model.extend({ var TeamMembership = Backbone.Model.extend({
defaults: { defaults: {
date_joined: '', date_joined: '',
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
user: null user: null
}, },
parse: function (response) { parse: function(response) {
response.team = new TeamModel(response.team); response.team = new TeamModel(response.team);
return response; return response;
} }
......
/** /**
* Model for a topic. * Model for a topic.
*/ */
(function (define) { (function(define) {
'use strict'; 'use strict';
define(['backbone'], function (Backbone) { define(['backbone'], function(Backbone) {
var Topic = Backbone.Model.extend({ var Topic = Backbone.Model.extend({
defaults: { defaults: {
name: '', name: '',
......
define(['backbone', 'URI', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', define(['backbone', 'URI', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'teams/js/spec_helpers/team_spec_helpers'], 'teams/js/spec_helpers/team_spec_helpers'],
function (Backbone, URI, _, AjaxHelpers, TeamSpecHelpers) { function(Backbone, URI, _, AjaxHelpers, TeamSpecHelpers) {
'use strict'; 'use strict';
describe('TopicCollection', function () { describe('TopicCollection', function() {
var topicCollection; var topicCollection;
beforeEach(function () { beforeEach(function() {
topicCollection = TeamSpecHelpers.createMockTopicCollection(); topicCollection = TeamSpecHelpers.createMockTopicCollection();
}); });
var testRequestParam = function (self, param, value) { var testRequestParam = function(self, param, value) {
var requests = AjaxHelpers.requests(self), var requests = AjaxHelpers.requests(self),
request, request,
url, url,
...@@ -20,25 +20,25 @@ define(['backbone', 'URI', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/a ...@@ -20,25 +20,25 @@ define(['backbone', 'URI', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/a
expect(params[param]).toBe(value); expect(params[param]).toBe(value);
}; };
it('sets its page size based on initial page size', function () { it('sets its page size based on initial page size', function() {
expect(topicCollection.getPageSize()).toBe(5); expect(topicCollection.getPageSize()).toBe(5);
expect(topicCollection.getTotalPages()).toBe(2); expect(topicCollection.getTotalPages()).toBe(2);
}); });
it('sorts by name', function () { it('sorts by name', function() {
testRequestParam(this, 'order_by', 'name'); testRequestParam(this, 'order_by', 'name');
}); });
it('passes a course_id to the server', function () { it('passes a course_id to the server', function() {
testRequestParam(this, 'course_id', TeamSpecHelpers.testCourseID); testRequestParam(this, 'course_id', TeamSpecHelpers.testCourseID);
}); });
it('URL encodes its course_id ', function () { it('URL encodes its course_id ', function() {
topicCollection.course_id = 'my+course+id'; topicCollection.course_id = 'my+course+id';
testRequestParam(this, 'course_id', 'my+course+id'); testRequestParam(this, 'course_id', 'my+course+id');
}); });
it('sets itself to stale on receiving a teams create or delete event', function () { it('sets itself to stale on receiving a teams create or delete event', function() {
expect(topicCollection.isStale).toBe(false); expect(topicCollection.isStale).toBe(false);
TeamSpecHelpers.triggerTeamEvent('create'); TeamSpecHelpers.triggerTeamEvent('create');
expect(topicCollection.isStale).toBe(true); expect(topicCollection.isStale).toBe(true);
......
...@@ -3,7 +3,7 @@ define(['jquery', 'backbone', 'teams/js/teams_tab_factory', 'teams/js/views/team ...@@ -3,7 +3,7 @@ define(['jquery', 'backbone', 'teams/js/teams_tab_factory', 'teams/js/views/team
function($, Backbone, TeamsTabFactory, TeamsTabView, PageHelpers, TeamSpecHelpers) { function($, Backbone, TeamsTabFactory, TeamsTabView, PageHelpers, TeamSpecHelpers) {
'use strict'; 'use strict';
describe("Teams Tab Factory", function() { describe('Teams Tab Factory', function() {
var initializeTeamsTabFactory = function() { var initializeTeamsTabFactory = function() {
TeamsTabFactory(TeamSpecHelpers.createMockContext()); TeamsTabFactory(TeamSpecHelpers.createMockContext());
}; };
......
...@@ -7,7 +7,7 @@ define([ ...@@ -7,7 +7,7 @@ define([
'teams/js/models/team', 'teams/js/models/team',
'teams/js/views/team_utils', 'teams/js/views/team_utils',
'teams/js/spec_helpers/team_spec_helpers' 'teams/js/spec_helpers/team_spec_helpers'
], function ($, _, Backbone, AjaxHelpers, TeamEditMembershipView, TeamModel, TeamUtils, TeamSpecHelpers) { ], function($, _, Backbone, AjaxHelpers, TeamEditMembershipView, TeamModel, TeamUtils, TeamSpecHelpers) {
'use strict'; 'use strict';
describe('CreateEditTeam', function() { describe('CreateEditTeam', function() {
...@@ -19,13 +19,13 @@ define([ ...@@ -19,13 +19,13 @@ define([
'profile_image': { 'profile_image': {
'has_image': true, 'has_image': true,
'image_url_medium': '/frodo-image-url' 'image_url_medium': '/frodo-image-url'
}, }
}, },
last_activity_at: "2015-08-21T18:53:01.145Z", last_activity_at: '2015-08-21T18:53:01.145Z',
date_joined: "2014-01-01T18:53:01.145Z" date_joined: '2014-01-01T18:53:01.145Z'
} }
], ],
deleteTeamMemember = function (view, confirm) { deleteTeamMemember = function(view, confirm) {
view.$('.action-remove-member').click(); view.$('.action-remove-member').click();
// Confirm delete dialog // Confirm delete dialog
if (confirm) { if (confirm) {
...@@ -35,18 +35,18 @@ define([ ...@@ -35,18 +35,18 @@ define([
$('.action-secondary').click(); $('.action-secondary').click();
} }
}, },
verifyTeamMembersView = function (view) { verifyTeamMembersView = function(view) {
expect(view.$('.team-member').length).toEqual(1); expect(view.$('.team-member').length).toEqual(1);
expect(view.$('.member-profile').attr('href')).toEqual('/u/frodo'); expect(view.$('.member-profile').attr('href')).toEqual('/u/frodo');
expect(view.$('img.image-url').attr('src')).toEqual('/frodo-image-url'); expect(view.$('img.image-url').attr('src')).toEqual('/frodo-image-url');
expect(view.$('.member-info-container .primary').text()).toBe('frodo'); expect(view.$('.member-info-container .primary').text()).toBe('frodo');
expect(view.$el.find('#last-active abbr').attr('title')).toEqual("2015-08-21T18:53:01.145Z"); expect(view.$el.find('#last-active abbr').attr('title')).toEqual('2015-08-21T18:53:01.145Z');
expect(view.$el.find('#date-joined abbr').attr('title')).toEqual("2014-01-01T18:53:01.145Z"); expect(view.$el.find('#date-joined abbr').attr('title')).toEqual('2014-01-01T18:53:01.145Z');
}, },
verifyNoMembersView = function (view){ verifyNoMembersView = function(view) {
expect(view.$el.text().trim()).toBe('This team does not have any members.'); expect(view.$el.text().trim()).toBe('This team does not have any members.');
}, },
createTeamModelData = function (membership) { createTeamModelData = function(membership) {
return { return {
id: editTeamID, id: editTeamID,
name: 'Avengers', name: 'Avengers',
...@@ -57,10 +57,10 @@ define([ ...@@ -57,10 +57,10 @@ define([
url: '/api/team/v0/teams/' + editTeamID url: '/api/team/v0/teams/' + editTeamID
}; };
}, },
createEditTeamMembersView = function (membership) { createEditTeamMembersView = function(membership) {
var teamModel = new TeamModel( var teamModel = new TeamModel(
createTeamModelData(membership), createTeamModelData(membership),
{ parse: true } {parse: true}
); );
return new TeamEditMembershipView({ return new TeamEditMembershipView({
...@@ -71,18 +71,18 @@ define([ ...@@ -71,18 +71,18 @@ define([
}).render(); }).render();
}; };
beforeEach(function () { beforeEach(function() {
setFixtures('<div id="page-prompt"></div><div class="teams-content"></div>'); setFixtures('<div id="page-prompt"></div><div class="teams-content"></div>');
spyOn(Backbone.history, 'navigate'); spyOn(Backbone.history, 'navigate');
spyOn(TeamUtils, 'showMessage'); spyOn(TeamUtils, 'showMessage');
}); });
it('can render a message when there are no members', function () { it('can render a message when there are no members', function() {
var view = createEditTeamMembersView([]); var view = createEditTeamMembersView([]);
verifyNoMembersView(view); verifyNoMembersView(view);
}); });
it('can delete a team member and update the view', function () { it('can delete a team member and update the view', function() {
var requests = AjaxHelpers.requests(this), var requests = AjaxHelpers.requests(this),
view = createEditTeamMembersView(DEFAULT_MEMBERSHIP); view = createEditTeamMembersView(DEFAULT_MEMBERSHIP);
...@@ -91,8 +91,8 @@ define([ ...@@ -91,8 +91,8 @@ define([
deleteTeamMemember(view, true); deleteTeamMemember(view, true);
AjaxHelpers.expectJsonRequest( AjaxHelpers.expectJsonRequest(
requests, requests,
'DELETE', 'DELETE',
'/api/team/v0/team_membership/av,frodo?admin=true' '/api/team/v0/team_membership/av,frodo?admin=true'
); );
AjaxHelpers.respondWithNoContent(requests); AjaxHelpers.respondWithNoContent(requests);
...@@ -108,7 +108,7 @@ define([ ...@@ -108,7 +108,7 @@ define([
verifyNoMembersView(view); verifyNoMembersView(view);
}); });
it('can show an error message if removing the user fails', function () { it('can show an error message if removing the user fails', function() {
var requests = AjaxHelpers.requests(this), var requests = AjaxHelpers.requests(this),
view = createEditTeamMembersView(DEFAULT_MEMBERSHIP); view = createEditTeamMembersView(DEFAULT_MEMBERSHIP);
...@@ -117,9 +117,9 @@ define([ ...@@ -117,9 +117,9 @@ define([
deleteTeamMemember(view, true); deleteTeamMemember(view, true);
AjaxHelpers.expectJsonRequest( AjaxHelpers.expectJsonRequest(
requests, requests,
'DELETE', 'DELETE',
'/api/team/v0/team_membership/av,frodo?admin=true' '/api/team/v0/team_membership/av,frodo?admin=true'
); );
AjaxHelpers.respondWithError(requests); AjaxHelpers.respondWithError(requests);
expect(TeamUtils.showMessage).toHaveBeenCalledWith( expect(TeamUtils.showMessage).toHaveBeenCalledWith(
...@@ -130,7 +130,7 @@ define([ ...@@ -130,7 +130,7 @@ define([
verifyTeamMembersView(view); verifyTeamMembersView(view);
}); });
it('can cancel team membership deletion', function () { it('can cancel team membership deletion', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
var view = createEditTeamMembersView(DEFAULT_MEMBERSHIP); var view = createEditTeamMembersView(DEFAULT_MEMBERSHIP);
......
...@@ -7,7 +7,7 @@ define([ ...@@ -7,7 +7,7 @@ define([
'teams/js/views/edit_team', 'teams/js/views/edit_team',
'teams/js/models/team', 'teams/js/models/team',
'teams/js/spec_helpers/team_spec_helpers' 'teams/js/spec_helpers/team_spec_helpers'
], function ($, _, Backbone, AjaxHelpers, PageHelpers, TeamEditView, TeamModel, TeamSpecHelpers) { ], function($, _, Backbone, AjaxHelpers, PageHelpers, TeamEditView, TeamModel, TeamSpecHelpers) {
'use strict'; 'use strict';
describe('CreateEditTeam', function() { describe('CreateEditTeam', function() {
...@@ -30,8 +30,8 @@ define([ ...@@ -30,8 +30,8 @@ define([
country: 'US', country: 'US',
language: 'en' language: 'en'
}, },
verifyValidation = function (requests, teamEditView, fieldsData) { verifyValidation = function(requests, teamEditView, fieldsData) {
_.each(fieldsData, function (fieldData) { _.each(fieldsData, function(fieldData) {
teamEditView.$(fieldData[0]).val(fieldData[1]); teamEditView.$(fieldData[0]).val(fieldData[1]);
}); });
...@@ -47,7 +47,7 @@ define([ ...@@ -47,7 +47,7 @@ define([
'Check the highlighted fields below and try again.' 'Check the highlighted fields below and try again.'
); );
_.each(fieldsData, function (fieldData) { _.each(fieldsData, function(fieldData) {
if (fieldData[2] === 'error') { if (fieldData[2] === 'error') {
expect(teamEditView.$(fieldData[0].split(' ')[0] + '.error').length).toBe(1); expect(teamEditView.$(fieldData[0].split(' ')[0] + '.error').length).toBe(1);
} else if (fieldData[2] === 'success') { } else if (fieldData[2] === 'success') {
...@@ -56,12 +56,11 @@ define([ ...@@ -56,12 +56,11 @@ define([
}); });
AjaxHelpers.expectNoRequests(requests); AjaxHelpers.expectNoRequests(requests);
}, },
editTeamID = 'av', editTeamID = 'av',
teamAction; teamAction;
var createEditTeamView = function () { var createEditTeamView = function() {
var testTeam = {}; var testTeam = {};
if (teamAction === 'edit') { if (teamAction === 'edit') {
testTeam = new TeamModel( testTeam = new TeamModel(
...@@ -90,7 +89,7 @@ define([ ...@@ -90,7 +89,7 @@ define([
}).render(); }).render();
}; };
beforeEach(function () { beforeEach(function() {
setFixtures('<div class="teams-content"></div>'); setFixtures('<div class="teams-content"></div>');
PageHelpers.preventBackboneChangingUrl(); PageHelpers.preventBackboneChangingUrl();
spyOn(Backbone.history, 'navigate'); spyOn(Backbone.history, 'navigate');
...@@ -106,7 +105,7 @@ define([ ...@@ -106,7 +105,7 @@ define([
], ],
teamEditView = createEditTeamView(); teamEditView = createEditTeamView();
_.each(fieldClasses, function (fieldClass) { _.each(fieldClasses, function(fieldClass) {
expect(teamEditView.$el.find(fieldClass).length).toBe(1); expect(teamEditView.$el.find(fieldClass).length).toBe(1);
}); });
...@@ -122,7 +121,7 @@ define([ ...@@ -122,7 +121,7 @@ define([
}; };
var requestMethod = function() { var requestMethod = function() {
return teamAction === 'create' ? 'POST' : 'PATCH'; return teamAction === 'create' ? 'POST' : 'PATCH';
}; };
var assertTeamCreateUpdateInfo = function(that, teamsData, teamsUrl, expectedUrl) { var assertTeamCreateUpdateInfo = function(that, teamsData, teamsUrl, expectedUrl) {
...@@ -220,54 +219,52 @@ define([ ...@@ -220,54 +219,52 @@ define([
expect(Backbone.history.navigate.calls.mostRecent().args[0]).toBe(expectedUrl); expect(Backbone.history.navigate.calls.mostRecent().args[0]).toBe(expectedUrl);
}; };
describe('NewTeam', function () { describe('NewTeam', function() {
beforeEach(function() { beforeEach(function() {
teamAction = 'create'; teamAction = 'create';
}); });
it('can render itself correctly', function () { it('can render itself correctly', function() {
assertFormRendersCorrectly(); assertFormRendersCorrectly();
}); });
it('can create a team', function () { it('can create a team', function() {
assertTeamCreateUpdateInfo( assertTeamCreateUpdateInfo(
this, createTeamData, teamsUrl, 'teams/' + TeamSpecHelpers.testTopicID + '/123' this, createTeamData, teamsUrl, 'teams/' + TeamSpecHelpers.testTopicID + '/123'
); );
}); });
it('shows validation error message when field is empty', function () { it('shows validation error message when field is empty', function() {
assertValidationMessagesWhenFieldsEmpty(this); assertValidationMessagesWhenFieldsEmpty(this);
}); });
it('shows validation error message when field value length exceeded the limit', function () { it('shows validation error message when field value length exceeded the limit', function() {
assertValidationMessagesWhenInvalidData(this); assertValidationMessagesWhenInvalidData(this);
}); });
it('shows an error message for HTTP 500', function () { it('shows an error message for HTTP 500', function() {
assertShowMessageOnError(this, createTeamData, teamsUrl, 500); assertShowMessageOnError(this, createTeamData, teamsUrl, 500);
}); });
it('shows correct error message when server returns an error', function () { it('shows correct error message when server returns an error', function() {
assertShowMessageOnError(this, createTeamData, teamsUrl, 400); assertShowMessageOnError(this, createTeamData, teamsUrl, 400);
}); });
it('changes route on cancel click', function () { it('changes route on cancel click', function() {
assertRedirectsToCorrectUrlOnCancel('topics/' + TeamSpecHelpers.testTopicID); assertRedirectsToCorrectUrlOnCancel('topics/' + TeamSpecHelpers.testTopicID);
}); });
}); });
describe('EditTeam', function () { describe('EditTeam', function() {
beforeEach(function() { beforeEach(function() {
teamAction = 'edit'; teamAction = 'edit';
}); });
it('can render itself correctly', function () { it('can render itself correctly', function() {
assertFormRendersCorrectly(); assertFormRendersCorrectly();
}); });
it('can edit a team', function () { it('can edit a team', function() {
var copyTeamsData = _.clone(editTeamData); var copyTeamsData = _.clone(editTeamData);
copyTeamsData.country = 'CA'; copyTeamsData.country = 'CA';
copyTeamsData.language = 'fr'; copyTeamsData.language = 'fr';
...@@ -278,23 +275,23 @@ define([ ...@@ -278,23 +275,23 @@ define([
); );
}); });
it('shows validation error message when field is empty', function () { it('shows validation error message when field is empty', function() {
assertValidationMessagesWhenFieldsEmpty(this); assertValidationMessagesWhenFieldsEmpty(this);
}); });
it('shows validation error message when field value length exceeded the limit', function () { it('shows validation error message when field value length exceeded the limit', function() {
assertValidationMessagesWhenInvalidData(this); assertValidationMessagesWhenInvalidData(this);
}); });
it('shows an error message for HTTP 500', function () { it('shows an error message for HTTP 500', function() {
assertShowMessageOnError(this, editTeamData, teamsUrl + editTeamID + '?expand=user', 500); assertShowMessageOnError(this, editTeamData, teamsUrl + editTeamID + '?expand=user', 500);
}); });
it('shows correct error message when server returns an error', function () { it('shows correct error message when server returns an error', function() {
assertShowMessageOnError(this, editTeamData, teamsUrl + editTeamID + '?expand=user', 400); assertShowMessageOnError(this, editTeamData, teamsUrl + editTeamID + '?expand=user', 400);
}); });
it('changes route on cancel click', function () { it('changes route on cancel click', function() {
assertRedirectsToCorrectUrlOnCancel('teams/' + TeamSpecHelpers.testTopicID + '/' + editTeamID); assertRedirectsToCorrectUrlOnCancel('teams/' + TeamSpecHelpers.testTopicID + '/' + editTeamID);
}); });
}); });
......
...@@ -8,18 +8,18 @@ define([ ...@@ -8,18 +8,18 @@ define([
'teams/js/spec_helpers/team_spec_helpers', 'teams/js/spec_helpers/team_spec_helpers',
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/page_helpers' 'common/js/spec_helpers/page_helpers'
], function ($, Backbone, _, Team, InstructorToolsView, TeamUtils, TeamSpecHelpers, AjaxHelpers, PageHelpers) { ], function($, Backbone, _, Team, InstructorToolsView, TeamUtils, TeamSpecHelpers, AjaxHelpers, PageHelpers) {
'use strict'; 'use strict';
describe('Instructor Tools', function () { describe('Instructor Tools', function() {
var view, var view,
createInstructorTools = function () { createInstructorTools = function() {
return new InstructorToolsView({ return new InstructorToolsView({
team: new Team(TeamSpecHelpers.createMockTeamData(1, 1)[0]), team: new Team(TeamSpecHelpers.createMockTeamData(1, 1)[0]),
teamEvents: TeamSpecHelpers.teamEvents teamEvents: TeamSpecHelpers.teamEvents
}); });
}, },
deleteTeam = function (view, confirm) { deleteTeam = function(view, confirm) {
view.$('.action-delete').click(); view.$('.action-delete').click();
// Confirm delete dialog // Confirm delete dialog
if (confirm) { if (confirm) {
...@@ -29,14 +29,14 @@ define([ ...@@ -29,14 +29,14 @@ define([
$('.action-secondary').click(); $('.action-secondary').click();
} }
}, },
expectSuccessMessage = function (team) { expectSuccessMessage = function(team) {
expect(TeamUtils.showMessage).toHaveBeenCalledWith( expect(TeamUtils.showMessage).toHaveBeenCalledWith(
'Team "' + team.get('name') + '" successfully deleted.', 'Team "' + team.get('name') + '" successfully deleted.',
'success' 'success'
); );
}; };
beforeEach(function () { beforeEach(function() {
setFixtures('<div id="page-prompt"></div>'); setFixtures('<div id="page-prompt"></div>');
PageHelpers.preventBackboneChangingUrl(); PageHelpers.preventBackboneChangingUrl();
spyOn(Backbone.history, 'navigate'); spyOn(Backbone.history, 'navigate');
...@@ -45,13 +45,13 @@ define([ ...@@ -45,13 +45,13 @@ define([
spyOn(view.teamEvents, 'trigger'); spyOn(view.teamEvents, 'trigger');
}); });
it('can render itself', function () { it('can render itself', function() {
expect(_.strip(view.$('.action-delete').text())).toEqual('Delete Team'); expect(_.strip(view.$('.action-delete').text())).toEqual('Delete Team');
expect(_.strip(view.$('.action-edit-members').text())).toEqual('Edit Membership'); expect(_.strip(view.$('.action-edit-members').text())).toEqual('Edit Membership');
expect(view.$el.text()).toContain('Instructor tools'); expect(view.$el.text()).toContain('Instructor tools');
}); });
it('can delete a team and shows a success message', function () { it('can delete a team and shows a success message', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
deleteTeam(view, true); deleteTeam(view, true);
AjaxHelpers.expectJsonRequest(requests, 'DELETE', view.team.url, null); AjaxHelpers.expectJsonRequest(requests, 'DELETE', view.team.url, null);
...@@ -69,24 +69,24 @@ define([ ...@@ -69,24 +69,24 @@ define([
expectSuccessMessage(view.team); expectSuccessMessage(view.team);
}); });
it('can cancel team deletion', function () { it('can cancel team deletion', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
deleteTeam(view, false); deleteTeam(view, false);
AjaxHelpers.expectNoRequests(requests); AjaxHelpers.expectNoRequests(requests);
expect(Backbone.history.navigate).not.toHaveBeenCalled(); expect(Backbone.history.navigate).not.toHaveBeenCalled();
}); });
it('shows a success message after receiving a 404', function () { it('shows a success message after receiving a 404', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
deleteTeam(view, true); deleteTeam(view, true);
AjaxHelpers.respondWithError(requests, 404); AjaxHelpers.respondWithError(requests, 404);
expectSuccessMessage(view.team); expectSuccessMessage(view.team);
}); });
it('can trigger the edit membership view', function () { it('can trigger the edit membership view', function() {
view.$('.action-edit-members').click(); view.$('.action-edit-members').click();
expect(Backbone.history.navigate).toHaveBeenCalledWith( expect(Backbone.history.navigate).toHaveBeenCalledWith(
'teams/' + view.team.get('topic_id') + "/" + view.team.id + "/edit-team/manage-members", 'teams/' + view.team.get('topic_id') + '/' + view.team.id + '/edit-team/manage-members',
{trigger: true} {trigger: true}
); );
}); });
......
...@@ -4,10 +4,10 @@ define([ ...@@ -4,10 +4,10 @@ define([
'teams/js/views/my_teams', 'teams/js/views/my_teams',
'teams/js/spec_helpers/team_spec_helpers', 'teams/js/spec_helpers/team_spec_helpers',
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers' 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers'
], function (Backbone, MyTeamsCollection, MyTeamsView, TeamSpecHelpers, AjaxHelpers) { ], function(Backbone, MyTeamsCollection, MyTeamsView, TeamSpecHelpers, AjaxHelpers) {
'use strict'; 'use strict';
describe('My Teams View', function () { describe('My Teams View', function() {
beforeEach(function () { beforeEach(function() {
setFixtures('<div class="teams-container"></div>'); setFixtures('<div class="teams-container"></div>');
}); });
...@@ -20,7 +20,7 @@ define([ ...@@ -20,7 +20,7 @@ define([
}).render(); }).render();
}; };
it('can render itself', function () { it('can render itself', function() {
var teamsData = TeamSpecHelpers.createMockTeamData(1, 5), var teamsData = TeamSpecHelpers.createMockTeamData(1, 5),
teams = TeamSpecHelpers.createMockTeams({results: teamsData}), teams = TeamSpecHelpers.createMockTeams({results: teamsData}),
myTeamsView = createMyTeamsView(teams); myTeamsView = createMyTeamsView(teams);
...@@ -31,7 +31,7 @@ define([ ...@@ -31,7 +31,7 @@ define([
expect(myTeamsView.$('.teams-paging-footer').text().trim()).toBe(''); expect(myTeamsView.$('.teams-paging-footer').text().trim()).toBe('');
}); });
it('shows a message when the user is not a member of any teams', function () { it('shows a message when the user is not a member of any teams', function() {
var teams = TeamSpecHelpers.createMockTeams({results: []}), var teams = TeamSpecHelpers.createMockTeams({results: []}),
myTeamsView = createMyTeamsView(teams); myTeamsView = createMyTeamsView(teams);
TeamSpecHelpers.verifyCards(myTeamsView, []); TeamSpecHelpers.verifyCards(myTeamsView, []);
...@@ -49,17 +49,17 @@ define([ ...@@ -49,17 +49,17 @@ define([
myTeamsView = createMyTeamsView(teams); myTeamsView = createMyTeamsView(teams);
TeamSpecHelpers.verifyCards(myTeamsView, []); TeamSpecHelpers.verifyCards(myTeamsView, []);
expect(myTeamsView.$el.text().trim()).toBe('You are not currently a member of any team.'); expect(myTeamsView.$el.text().trim()).toBe('You are not currently a member of any team.');
TeamSpecHelpers.teamEvents.trigger('teams:update', { action: 'create' }); TeamSpecHelpers.teamEvents.trigger('teams:update', {action: 'create'});
myTeamsView.render(); myTeamsView.render();
AjaxHelpers.expectRequestURL( AjaxHelpers.expectRequestURL(
requests, requests,
TeamSpecHelpers.testContext.myTeamsUrl, TeamSpecHelpers.testContext.myTeamsUrl,
{ {
expand : 'user', expand: 'user',
username : TeamSpecHelpers.testContext.userInfo.username, username: TeamSpecHelpers.testContext.userInfo.username,
course_id : TeamSpecHelpers.testContext.courseID, course_id: TeamSpecHelpers.testContext.courseID,
page : '1', page: '1',
page_size : '5', page_size: '5',
text_search: '', text_search: '',
order_by: 'last_activity_at' order_by: 'last_activity_at'
} }
......
...@@ -3,12 +3,12 @@ define(['jquery', ...@@ -3,12 +3,12 @@ define(['jquery',
'moment-with-locales', 'moment-with-locales',
'teams/js/views/team_card', 'teams/js/views/team_card',
'teams/js/models/team'], 'teams/js/models/team'],
function ($, _, moment, TeamCardView, Team) { function($, _, moment, TeamCardView, Team) {
'use strict'; 'use strict';
describe('TeamCardView', function () { describe('TeamCardView', function() {
var createTeamCardView, view; var createTeamCardView, view;
createTeamCardView = function () { createTeamCardView = function() {
var model = new Team({ var model = new Team({
id: 'test-team', id: 'test-team',
name: 'Test Team', name: 'Test Team',
...@@ -16,7 +16,7 @@ define(['jquery', ...@@ -16,7 +16,7 @@ define(['jquery',
course_id: 'test/course/id', course_id: 'test/course/id',
topic_id: 'test-topic', topic_id: 'test-topic',
description: 'A team for testing', description: 'A team for testing',
last_activity_at: "2015-08-21T18:53:01.145Z", last_activity_at: '2015-08-21T18:53:01.145Z',
country: 'us', country: 'us',
language: 'en', language: 'en',
membership: [] membership: []
...@@ -35,13 +35,13 @@ define(['jquery', ...@@ -35,13 +35,13 @@ define(['jquery',
}); });
}; };
beforeEach(function () { beforeEach(function() {
moment.locale('en'); moment.locale('en');
view = createTeamCardView(); view = createTeamCardView();
view.render(); view.render();
}); });
it('can render itself', function () { it('can render itself', function() {
expect(view.$el).toHaveClass('list-card'); expect(view.$el).toHaveClass('list-card');
expect(view.$el.find('.card-title').text()).toContain('Test Team'); expect(view.$el.find('.card-title').text()).toContain('Test Team');
expect(view.$el.find('.card-description').text()).toContain('A team for testing'); expect(view.$el.find('.card-description').text()).toContain('A team for testing');
...@@ -52,11 +52,11 @@ define(['jquery', ...@@ -52,11 +52,11 @@ define(['jquery',
expect(view.$el.find('.team-language').text()).toContain('English'); expect(view.$el.find('.team-language').text()).toContain('English');
}); });
it('navigates to the associated team page when its action button is clicked', function () { it('navigates to the associated team page when its action button is clicked', function() {
expect(view.$('.action').attr('href')).toEqual('#teams/test-topic/test-team'); expect(view.$('.action').attr('href')).toEqual('#teams/test-topic/test-team');
}); });
describe('Profile Image Thumbnails', function () { describe('Profile Image Thumbnails', function() {
/** /**
* Takes an array of objects representing team * Takes an array of objects representing team
* members, each having the keys 'username', * members, each having the keys 'username',
...@@ -66,9 +66,9 @@ define(['jquery', ...@@ -66,9 +66,9 @@ define(['jquery',
*/ */
var setMemberships, expectThumbnailsOrder; var setMemberships, expectThumbnailsOrder;
setMemberships = function (memberships) { setMemberships = function(memberships) {
view.model.set({ view.model.set({
membership: _.map(memberships, function (m) { membership: _.map(memberships, function(m) {
return { return {
user: {username: m.username, profile_image: {image_url_small: m.image_url}}, user: {username: m.username, profile_image: {image_url_small: m.image_url}},
last_activity_at: m.last_activity last_activity_at: m.last_activity
...@@ -85,58 +85,58 @@ define(['jquery', ...@@ -85,58 +85,58 @@ define(['jquery',
* rendered on the team card match, in order, the * rendered on the team card match, in order, the
* members of the provided list. * members of the provided list.
*/ */
expectThumbnailsOrder = function (members) { expectThumbnailsOrder = function(members) {
var thumbnails = view.$('.item-member-thumb img'); var thumbnails = view.$('.item-member-thumb img');
expect(thumbnails.length).toBe(members.length); expect(thumbnails.length).toBe(members.length);
thumbnails.each(function (index, imgEl) { thumbnails.each(function(index, imgEl) {
expect(thumbnails.eq(index).attr('alt')).toBe(members[index].username); expect(thumbnails.eq(index).attr('alt')).toBe(members[index].username);
expect(thumbnails.eq(index).attr('src')).toBe(members[index].image_url); expect(thumbnails.eq(index).attr('src')).toBe(members[index].image_url);
}); });
}; };
it('displays no thumbnails for an empty team', function () { it('displays no thumbnails for an empty team', function() {
view.model.set({membership: []}); view.model.set({membership: []});
view.render(); view.render();
expect(view.$('.item-member-thumb').length).toBe(0); expect(view.$('.item-member-thumb').length).toBe(0);
}); });
it('displays thumbnails for a nonempty team', function () { it('displays thumbnails for a nonempty team', function() {
var users = [ var users = [
{ {
username: 'user_1', image_url: 'user_1_image', username: 'user_1', image_url: 'user_1_image',
last_activity: new Date("2010/1/1").toString() last_activity: new Date('2010/1/1').toString()
}, { }, {
username: 'user_2', image_url: 'user_2_image', username: 'user_2', image_url: 'user_2_image',
last_activity: new Date("2011/1/1").toString() last_activity: new Date('2011/1/1').toString()
} }
]; ];
setMemberships(users); setMemberships(users);
expectThumbnailsOrder([ expectThumbnailsOrder([
{username: 'user_2', image_url: 'user_2_image'}, {username: 'user_2', image_url: 'user_2_image'},
{username: 'user_1', image_url: 'user_1_image'}, {username: 'user_1', image_url: 'user_1_image'}
]); ]);
}); });
it('displays thumbnails and an ellipsis for a team with greater than 5 members', function () { it('displays thumbnails and an ellipsis for a team with greater than 5 members', function() {
var users = [ var users = [
{ {
username: 'user_1', image_url: 'user_1_image', username: 'user_1', image_url: 'user_1_image',
last_activity: new Date("2001/1/1").toString() last_activity: new Date('2001/1/1').toString()
}, { }, {
username: 'user_2', image_url: 'user_2_image', username: 'user_2', image_url: 'user_2_image',
last_activity: new Date("2006/1/1").toString() last_activity: new Date('2006/1/1').toString()
}, { }, {
username: 'user_3', image_url: 'user_3_image', username: 'user_3', image_url: 'user_3_image',
last_activity: new Date("2003/1/1").toString() last_activity: new Date('2003/1/1').toString()
}, { }, {
username: 'user_4', image_url: 'user_4_image', username: 'user_4', image_url: 'user_4_image',
last_activity: new Date("2002/1/1").toString() last_activity: new Date('2002/1/1').toString()
}, { }, {
username: 'user_5', image_url: 'user_5_image', username: 'user_5', image_url: 'user_5_image',
last_activity: new Date("2005/1/1").toString() last_activity: new Date('2005/1/1').toString()
}, { }, {
username: 'user_6', image_url: 'user_6_image', username: 'user_6', image_url: 'user_6_image',
last_activity: new Date("2004/1/1").toString() last_activity: new Date('2004/1/1').toString()
} }
]; ];
setMemberships(users); setMemberships(users);
......
...@@ -2,7 +2,7 @@ define([ ...@@ -2,7 +2,7 @@ define([
'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'teams/js/views/team_discussion', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'teams/js/views/team_discussion',
'teams/js/spec_helpers/team_spec_helpers', 'teams/js/spec_helpers/team_spec_helpers',
'xmodule_js/common_static/common/js/spec_helpers/discussion_spec_helper' 'xmodule_js/common_static/common/js/spec_helpers/discussion_spec_helper'
], function (_, AjaxHelpers, TeamDiscussionView, TeamSpecHelpers, DiscussionSpecHelper) { ], function(_, AjaxHelpers, TeamDiscussionView, TeamSpecHelpers, DiscussionSpecHelper) {
'use strict'; 'use strict';
xdescribe('TeamDiscussionView', function() { xdescribe('TeamDiscussionView', function() {
var discussionView, createDiscussionView, createPost, expandReplies, postReply; var discussionView, createDiscussionView, createPost, expandReplies, postReply;
...@@ -38,9 +38,9 @@ define([ ...@@ -38,9 +38,9 @@ define([
}; };
createPost = function(requests, view, title, body, threadID) { createPost = function(requests, view, title, body, threadID) {
title = title || "Test title"; title = title || 'Test title';
body = body || "Test body"; body = body || 'Test body';
threadID = threadID || "999"; threadID = threadID || '999';
view.$('.new-post-button').click(); view.$('.new-post-button').click();
view.$('.js-post-title').val(title); view.$('.js-post-title').val(title);
view.$('.js-post-body textarea').val(body); view.$('.js-post-body textarea').val(body);
...@@ -83,7 +83,7 @@ define([ ...@@ -83,7 +83,7 @@ define([
{ {
courseID: TeamSpecHelpers.testCourseID, courseID: TeamSpecHelpers.testCourseID,
discussionID: TeamSpecHelpers.testTeamDiscussionID, discussionID: TeamSpecHelpers.testTeamDiscussionID,
threadID: threadID || "999" threadID: threadID || '999'
}, },
true true
) )
...@@ -104,7 +104,7 @@ define([ ...@@ -104,7 +104,7 @@ define([
'/courses/%(courseID)s/discussion/threads/%(threadID)s/reply?ajax=1', '/courses/%(courseID)s/discussion/threads/%(threadID)s/reply?ajax=1',
{ {
courseID: TeamSpecHelpers.testCourseID, courseID: TeamSpecHelpers.testCourseID,
threadID: threadID || "999" threadID: threadID || '999'
}, },
true true
), ),
...@@ -115,7 +115,7 @@ define([ ...@@ -115,7 +115,7 @@ define([
body: reply, body: reply,
comments_count: 1 comments_count: 1
}), }),
"annotated_content_info": TeamSpecHelpers.createAnnotatedContentInfo() 'annotated_content_info': TeamSpecHelpers.createAnnotatedContentInfo()
}); });
}; };
...@@ -143,8 +143,8 @@ define([ ...@@ -143,8 +143,8 @@ define([
it('can post a reply', function() { it('can post a reply', function() {
var requests = AjaxHelpers.requests(this), var requests = AjaxHelpers.requests(this),
view = createDiscussionView(requests), view = createDiscussionView(requests),
testReply = "Test reply", testReply = 'Test reply',
testThreadID = "1"; testThreadID = '1';
expandReplies(requests, view, testThreadID); expandReplies(requests, view, testThreadID);
postReply(requests, view, testReply, testThreadID); postReply(requests, view, testReply, testThreadID);
expect(view.$('.discussion-response .response-body').text().trim()).toBe(testReply); expect(view.$('.discussion-response .response-body').text().trim()).toBe(testReply);
...@@ -153,7 +153,7 @@ define([ ...@@ -153,7 +153,7 @@ define([
it('can post a reply to a new post', function() { it('can post a reply to a new post', function() {
var requests = AjaxHelpers.requests(this), var requests = AjaxHelpers.requests(this),
view = createDiscussionView(requests, []), view = createDiscussionView(requests, []),
testReply = "Test reply"; testReply = 'Test reply';
createPost(requests, view); createPost(requests, view);
expandReplies(requests, view); expandReplies(requests, view);
postReply(requests, view, testReply); postReply(requests, view, testReply);
...@@ -166,7 +166,7 @@ define([ ...@@ -166,7 +166,7 @@ define([
postTopicButton, updatedThreadElement, postTopicButton, updatedThreadElement,
updatedTitle = 'Updated title', updatedTitle = 'Updated title',
updatedBody = 'Updated body', updatedBody = 'Updated body',
testThreadID = "1"; testThreadID = '1';
expandReplies(requests, view, testThreadID); expandReplies(requests, view, testThreadID);
view.$('.action-more .icon').first().click(); view.$('.action-more .icon').first().click();
view.$('.action-edit').first().click(); view.$('.action-edit').first().click();
...@@ -189,7 +189,7 @@ define([ ...@@ -189,7 +189,7 @@ define([
); );
AjaxHelpers.respondWithJson(requests, { AjaxHelpers.respondWithJson(requests, {
content: TeamSpecHelpers.createMockPostResponse({ content: TeamSpecHelpers.createMockPostResponse({
id: "999", title: updatedTitle, body: updatedBody id: '999', title: updatedTitle, body: updatedBody
}), }),
annotated_content_info: TeamSpecHelpers.createAnnotatedContentInfo() annotated_content_info: TeamSpecHelpers.createAnnotatedContentInfo()
}); });
......
define([ define([
'backbone', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'teams/js/models/team', 'backbone', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'teams/js/models/team',
'teams/js/views/team_profile_header_actions', 'teams/js/spec_helpers/team_spec_helpers' 'teams/js/views/team_profile_header_actions', 'teams/js/spec_helpers/team_spec_helpers'
], function (Backbone, _, AjaxHelpers, TeamModel, TeamProfileHeaderActionsView, TeamSpecHelpers) { ], function(Backbone, _, AjaxHelpers, TeamModel, TeamProfileHeaderActionsView, TeamSpecHelpers) {
'use strict'; 'use strict';
describe('TeamProfileHeaderActionsView', function () { describe('TeamProfileHeaderActionsView', function() {
var createTeamsUrl, var createTeamsUrl,
createTeamModelData, createTeamModelData,
createMembershipData, createMembershipData,
...@@ -12,12 +12,12 @@ define([ ...@@ -12,12 +12,12 @@ define([
verifyErrorMessage, verifyErrorMessage,
ACCOUNTS_API_URL = '/api/user/v1/accounts/'; ACCOUNTS_API_URL = '/api/user/v1/accounts/';
createTeamsUrl = function (teamId) { createTeamsUrl = function(teamId) {
return TeamSpecHelpers.testContext.teamsUrl + teamId + '?expand=user'; return TeamSpecHelpers.testContext.teamsUrl + teamId + '?expand=user';
}; };
createTeamModelData = function (teamId, teamName, membership) { createTeamModelData = function(teamId, teamName, membership) {
return { return {
id: teamId, id: teamId,
name: teamName, name: teamName,
membership: membership, membership: membership,
...@@ -26,7 +26,7 @@ define([ ...@@ -26,7 +26,7 @@ define([
}; };
createHeaderActionsView = function(requests, maxTeamSize, currentUsername, teamModelData, showEditButton) { createHeaderActionsView = function(requests, maxTeamSize, currentUsername, teamModelData, showEditButton) {
var model = new TeamModel(teamModelData, { parse: true }), var model = new TeamModel(teamModelData, {parse: true}),
context = TeamSpecHelpers.createMockContext({ context = TeamSpecHelpers.createMockContext({
maxTeamSize: maxTeamSize, maxTeamSize: maxTeamSize,
userInfo: TeamSpecHelpers.createMockUserInfo({ userInfo: TeamSpecHelpers.createMockUserInfo({
...@@ -46,37 +46,36 @@ define([ ...@@ -46,37 +46,36 @@ define([
).render(); ).render();
}; };
createMembershipData = function (username) { createMembershipData = function(username) {
return [ return [
{ {
"user": { 'user': {
"username": username, 'username': username,
"url": ACCOUNTS_API_URL + username 'url': ACCOUNTS_API_URL + username
} }
} }
]; ];
}; };
describe('JoinButton', function () { describe('JoinButton', function() {
beforeEach(function() {
beforeEach(function () {
setFixtures( setFixtures(
'<div class="teams-content"><div class="msg-content"><div class="copy"></div></div><div class="header-action-view"></div></div>' '<div class="teams-content"><div class="msg-content"><div class="copy"></div></div><div class="header-action-view"></div></div>'
); );
}); });
verifyErrorMessage = function (requests, errorMessage, expectedMessage, joinTeam) { verifyErrorMessage = function(requests, errorMessage, expectedMessage, joinTeam) {
var view = createHeaderActionsView(requests, 1, 'ma', createTeamModelData('teamA', 'teamAlpha', [])); var view = createHeaderActionsView(requests, 1, 'ma', createTeamModelData('teamA', 'teamAlpha', []));
if (joinTeam) { if (joinTeam) {
// if we want the error to return when user try to join team, respond with no membership // if we want the error to return when user try to join team, respond with no membership
AjaxHelpers.respondWithJson(requests, {"count": 0}); AjaxHelpers.respondWithJson(requests, {'count': 0});
view.$('.action.action-primary').click(); view.$('.action.action-primary').click();
} }
AjaxHelpers.respondWithTextError(requests, 400, errorMessage); AjaxHelpers.respondWithTextError(requests, 400, errorMessage);
expect($('.msg-content .copy').text().trim()).toBe(expectedMessage); expect($('.msg-content .copy').text().trim()).toBe(expectedMessage);
}; };
it('can render itself', function () { it('can render itself', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
var teamModelData = createTeamModelData('teamA', 'teamAlpha', createMembershipData('ma')); var teamModelData = createTeamModelData('teamA', 'teamAlpha', createMembershipData('ma'));
var view = createHeaderActionsView(requests, 1, 'ma', teamModelData); var view = createHeaderActionsView(requests, 1, 'ma', teamModelData);
...@@ -84,7 +83,7 @@ define([ ...@@ -84,7 +83,7 @@ define([
expect(view.$('.join-team').length).toEqual(1); expect(view.$('.join-team').length).toEqual(1);
}); });
it('can join team successfully', function () { it('can join team successfully', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
var currentUsername = 'ma1'; var currentUsername = 'ma1';
var teamId = 'teamA'; var teamId = 'teamA';
...@@ -103,7 +102,7 @@ define([ ...@@ -103,7 +102,7 @@ define([
); );
// current user is not a member of any team so we should see the Join Team button // current user is not a member of any team so we should see the Join Team button
AjaxHelpers.respondWithJson(requests, {"count": 0}); AjaxHelpers.respondWithJson(requests, {'count': 0});
expect(view.$('.action.action-primary').length).toEqual(1); expect(view.$('.action.action-primary').length).toEqual(1);
// a post request will be sent to add current user to current team // a post request will be sent to add current user to current team
...@@ -132,7 +131,7 @@ define([ ...@@ -132,7 +131,7 @@ define([
expect(view.$('.join-team-message').length).toEqual(0); expect(view.$('.join-team-message').length).toEqual(0);
}); });
it('shows already member message', function () { it('shows already member message', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
var currentUsername = 'ma1'; var currentUsername = 'ma1';
var view = createHeaderActionsView(requests, 1, currentUsername, createTeamModelData('teamA', 'teamAlpha', [])); var view = createHeaderActionsView(requests, 1, currentUsername, createTeamModelData('teamA', 'teamAlpha', []));
...@@ -148,12 +147,12 @@ define([ ...@@ -148,12 +147,12 @@ define([
); );
// current user is a member of another team so we should see the correct message // current user is a member of another team so we should see the correct message
AjaxHelpers.respondWithJson(requests, {"count": 1}); AjaxHelpers.respondWithJson(requests, {'count': 1});
expect(view.$('.action.action-primary').length).toEqual(0); expect(view.$('.action.action-primary').length).toEqual(0);
expect(view.$('.join-team-message').text().trim()).toBe(view.alreadyMemberMessage); expect(view.$('.join-team-message').text().trim()).toBe(view.alreadyMemberMessage);
}); });
it('shows team full message', function () { it('shows team full message', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
var view = createHeaderActionsView( var view = createHeaderActionsView(
requests, requests,
...@@ -171,7 +170,7 @@ define([ ...@@ -171,7 +170,7 @@ define([
AjaxHelpers.expectNoRequests(requests); AjaxHelpers.expectNoRequests(requests);
}); });
it('shows correct error message if user fails to join team', function () { it('shows correct error message if user fails to join team', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
// verify user_message // verify user_message
...@@ -199,7 +198,7 @@ define([ ...@@ -199,7 +198,7 @@ define([
); );
}); });
it('shows correct error message if initializing the view fails', function () { it('shows correct error message if initializing the view fails', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
// verify user_message // verify user_message
...@@ -231,17 +230,17 @@ define([ ...@@ -231,17 +230,17 @@ define([
expect(view.$('.action-edit-team').length).toEqual(showEditButton ? 1 : 0); expect(view.$('.action-edit-team').length).toEqual(showEditButton ? 1 : 0);
}; };
it('renders when option showEditButton is true', function () { it('renders when option showEditButton is true', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
createAndAssertView(requests, true); createAndAssertView(requests, true);
}); });
it('does not render when option showEditButton is false', function () { it('does not render when option showEditButton is false', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
createAndAssertView(requests, false); createAndAssertView(requests, false);
}); });
it("can navigate to correct url", function () { it('can navigate to correct url', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
spyOn(Backbone.history, 'navigate'); spyOn(Backbone.history, 'navigate');
createAndAssertView(requests, true); createAndAssertView(requests, true);
......
...@@ -2,9 +2,9 @@ define([ ...@@ -2,9 +2,9 @@ define([
'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'teams/js/models/team', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'teams/js/models/team',
'teams/js/views/team_profile', 'teams/js/spec_helpers/team_spec_helpers', 'teams/js/views/team_profile', 'teams/js/spec_helpers/team_spec_helpers',
'xmodule_js/common_static/common/js/spec_helpers/discussion_spec_helper' 'xmodule_js/common_static/common/js/spec_helpers/discussion_spec_helper'
], function (_, AjaxHelpers, TeamModel, TeamProfileView, TeamSpecHelpers, DiscussionSpecHelper) { ], function(_, AjaxHelpers, TeamModel, TeamProfileView, TeamSpecHelpers, DiscussionSpecHelper) {
'use strict'; 'use strict';
describe('TeamProfileView', function () { describe('TeamProfileView', function() {
var profileView, createTeamProfileView, createTeamModelData, clickLeaveTeam, var profileView, createTeamProfileView, createTeamModelData, clickLeaveTeam,
teamModel, teamModel,
leaveTeamLinkSelector = '.leave-team-link', leaveTeamLinkSelector = '.leave-team-link',
...@@ -20,17 +20,17 @@ define([ ...@@ -20,17 +20,17 @@ define([
} }
]; ];
beforeEach(function () { beforeEach(function() {
setFixtures('<div id="page-prompt"></div>' + setFixtures('<div id="page-prompt"></div>' +
'<div class="teams-content"><div class="msg-content"><div class="copy"></div></div></div>' + '<div class="teams-content"><div class="msg-content"><div class="copy"></div></div></div>' +
'<div class="profile-view"></div>'); '<div class="profile-view"></div>');
DiscussionSpecHelper.setUnderscoreFixtures(); DiscussionSpecHelper.setUnderscoreFixtures();
}); });
createTeamModelData = function (options) { createTeamModelData = function(options) {
return { return {
id: "test-team", id: 'test-team',
name: "Test Team", name: 'Test Team',
discussion_topic_id: TeamSpecHelpers.testTeamDiscussionID, discussion_topic_id: TeamSpecHelpers.testTeamDiscussionID,
country: options.country || '', country: options.country || '',
language: options.language || '', language: options.language || '',
...@@ -40,7 +40,7 @@ define([ ...@@ -40,7 +40,7 @@ define([
}; };
createTeamProfileView = function(requests, options) { createTeamProfileView = function(requests, options) {
teamModel = new TeamModel(createTeamModelData(options), { parse: true }); teamModel = new TeamModel(createTeamModelData(options), {parse: true});
profileView = new TeamProfileView({ profileView = new TeamProfileView({
el: $('.profile-view'), el: $('.profile-view'),
teamEvents: TeamSpecHelpers.teamEvents, teamEvents: TeamSpecHelpers.teamEvents,
...@@ -95,13 +95,13 @@ define([ ...@@ -95,13 +95,13 @@ define([
}; };
describe('DiscussionsView', function() { describe('DiscussionsView', function() {
it('can render itself', function () { it('can render itself', function() {
var requests = AjaxHelpers.requests(this), var requests = AjaxHelpers.requests(this),
view = createTeamProfileView(requests, {}); view = createTeamProfileView(requests, {});
expect(view.$('.discussion-thread').length).toEqual(3); expect(view.$('.discussion-thread').length).toEqual(3);
}); });
it('shows New Post button when user joins a team', function () { it('shows New Post button when user joins a team', function() {
var requests = AjaxHelpers.requests(this), var requests = AjaxHelpers.requests(this),
view = createTeamProfileView(requests, {}); view = createTeamProfileView(requests, {});
...@@ -111,7 +111,7 @@ define([ ...@@ -111,7 +111,7 @@ define([
expect(view.$('.new-post-btn').length).toEqual(1); expect(view.$('.new-post-btn').length).toEqual(1);
}); });
it('hides New Post button when user left a team', function () { it('hides New Post button when user left a team', function() {
var requests = AjaxHelpers.requests(this), var requests = AjaxHelpers.requests(this),
view = createTeamProfileView(requests, {membership: DEFAULT_MEMBERSHIP}); view = createTeamProfileView(requests, {membership: DEFAULT_MEMBERSHIP});
...@@ -122,7 +122,6 @@ define([ ...@@ -122,7 +122,6 @@ define([
}); });
describe('TeamDetailsView', function() { describe('TeamDetailsView', function() {
var assertTeamDetails = function(view, members, memberOfTeam) { var assertTeamDetails = function(view, members, memberOfTeam) {
expect(view.$('.team-detail-header').text()).toBe('Team Details'); expect(view.$('.team-detail-header').text()).toBe('Team Details');
expect(view.$('.team-country').text()).toContain('United States'); expect(view.$('.team-country').text()).toContain('United States');
...@@ -133,7 +132,6 @@ define([ ...@@ -133,7 +132,6 @@ define([
}; };
describe('Non-Member', function() { describe('Non-Member', function() {
it('can render itself', function() { it('can render itself', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
var view = createTeamProfileView(requests, { var view = createTeamProfileView(requests, {
...@@ -156,7 +154,6 @@ define([ ...@@ -156,7 +154,6 @@ define([
}); });
describe('Member', function() { describe('Member', function() {
it('can render itself', function() { it('can render itself', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
var view = createTeamProfileView(requests, { var view = createTeamProfileView(requests, {
...@@ -172,7 +169,7 @@ define([ ...@@ -172,7 +169,7 @@ define([
// assert user profile page url. // assert user profile page url.
expect(view.$('.member-profile').attr('href')).toBe('/u/' + TeamSpecHelpers.testUser); expect(view.$('.member-profile').attr('href')).toBe('/u/' + TeamSpecHelpers.testUser);
//Verify that the leave team link is present // Verify that the leave team link is present
expect(view.$(leaveTeamLinkSelector).text()).toContain('Leave Team'); expect(view.$(leaveTeamLinkSelector).text()).toContain('Leave Team');
}); });
...@@ -198,10 +195,10 @@ define([ ...@@ -198,10 +195,10 @@ define([
assertTeamDetails(view, 1, true); assertTeamDetails(view, 1, true);
}); });
it('shows correct error messages', function () { it('shows correct error messages', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
var verifyErrorMessage = function (requests, errorMessage, expectedMessage) { var verifyErrorMessage = function(requests, errorMessage, expectedMessage) {
var view = createTeamProfileView( var view = createTeamProfileView(
requests, {country: 'US', language: 'en', membership: DEFAULT_MEMBERSHIP} requests, {country: 'US', language: 'en', membership: DEFAULT_MEMBERSHIP}
); );
......
...@@ -3,10 +3,10 @@ define([ ...@@ -3,10 +3,10 @@ define([
'teams/js/collections/team', 'teams/js/collections/team',
'teams/js/views/teams', 'teams/js/views/teams',
'teams/js/spec_helpers/team_spec_helpers' 'teams/js/spec_helpers/team_spec_helpers'
], function (Backbone, TeamCollection, TeamsView, TeamSpecHelpers) { ], function(Backbone, TeamCollection, TeamsView, TeamSpecHelpers) {
'use strict'; 'use strict';
describe('Teams View', function () { describe('Teams View', function() {
beforeEach(function () { beforeEach(function() {
setFixtures('<div class="teams-container"></div>'); setFixtures('<div class="teams-container"></div>');
}); });
...@@ -19,7 +19,7 @@ define([ ...@@ -19,7 +19,7 @@ define([
}).render(); }).render();
}; };
it('can render itself', function () { it('can render itself', function() {
var testTeamData = TeamSpecHelpers.createMockTeamData(1, 5), var testTeamData = TeamSpecHelpers.createMockTeamData(1, 5),
teamsView = createTeamsView({ teamsView = createTeamsView({
teams: TeamSpecHelpers.createMockTeams({ teams: TeamSpecHelpers.createMockTeams({
......
...@@ -57,9 +57,9 @@ define([ ...@@ -57,9 +57,9 @@ define([
}); });
afterEach(function() { afterEach(function() {
Backbone.history.stop(); Backbone.history.stop();
$(document).off('ajaxError', TeamsTabView.prototype.errorHandler); $(document).off('ajaxError', TeamsTabView.prototype.errorHandler);
} }
); );
describe('Navigation', function() { describe('Navigation', function() {
...@@ -71,7 +71,7 @@ define([ ...@@ -71,7 +71,7 @@ define([
expect(teamsTabView.$('.breadcrumbs').length).toBe(0); expect(teamsTabView.$('.breadcrumbs').length).toBe(0);
}); });
it('does not interfere with anchor links to #main', function () { it('does not interfere with anchor links to #main', function() {
var teamsTabView = createTeamsTabView(this); var teamsTabView = createTeamsTabView(this);
teamsTabView.router.navigate('#main', {trigger: true}); teamsTabView.router.navigate('#main', {trigger: true});
expect(teamsTabView.$('.wrapper-msg')).toHaveClass('is-hidden'); expect(teamsTabView.$('.wrapper-msg')).toHaveClass('is-hidden');
...@@ -193,8 +193,8 @@ define([ ...@@ -193,8 +193,8 @@ define([
describe('Discussion privileges', function() { describe('Discussion privileges', function() {
it('allows privileged access to any team', function() { it('allows privileged access to any team', function() {
var teamsTabView = createTeamsTabView(this, { var teamsTabView = createTeamsTabView(this, {
userInfo: TeamSpecHelpers.createMockUserInfo({privileged: true}) userInfo: TeamSpecHelpers.createMockUserInfo({privileged: true})
}); });
// Note: using `undefined` here to ensure that we // Note: using `undefined` here to ensure that we
// don't even look at the team when the user is // don't even look at the team when the user is
// privileged // privileged
...@@ -203,11 +203,11 @@ define([ ...@@ -203,11 +203,11 @@ define([
it('allows access to a team which an unprivileged user is a member of', function() { it('allows access to a team which an unprivileged user is a member of', function() {
var teamsTabView = createTeamsTabView(this, { var teamsTabView = createTeamsTabView(this, {
userInfo: TeamSpecHelpers.createMockUserInfo({ userInfo: TeamSpecHelpers.createMockUserInfo({
username: TeamSpecHelpers.testUser, username: TeamSpecHelpers.testUser,
privileged: false privileged: false
}) })
}); });
expect(teamsTabView.readOnlyDiscussion({ expect(teamsTabView.readOnlyDiscussion({
attributes: { attributes: {
membership: [{ membership: [{
...@@ -221,8 +221,8 @@ define([ ...@@ -221,8 +221,8 @@ define([
it('does not allow access if the user is neither privileged nor a team member', function() { it('does not allow access if the user is neither privileged nor a team member', function() {
var teamsTabView = createTeamsTabView(this, { var teamsTabView = createTeamsTabView(this, {
userInfo: TeamSpecHelpers.createMockUserInfo({privileged: false, staff: true}) userInfo: TeamSpecHelpers.createMockUserInfo({privileged: false, staff: true})
}); });
expect(teamsTabView.readOnlyDiscussion({ expect(teamsTabView.readOnlyDiscussion({
attributes: {membership: []} attributes: {membership: []}
})).toBe(true); })).toBe(true);
...@@ -267,7 +267,7 @@ define([ ...@@ -267,7 +267,7 @@ define([
// Clear the search and submit it again // Clear the search and submit it again
teamsTabView.$('.search-field').val(''); teamsTabView.$('.search-field').val('');
teamsTabView.$('.action-search').click(); teamsTabView.$('.action-search').click();
verifyTeamsRequest({ verifyTeamsRequest({
order_by: 'last_activity_at' order_by: 'last_activity_at'
}); });
......
...@@ -2,9 +2,8 @@ define(['jquery', ...@@ -2,9 +2,8 @@ define(['jquery',
'underscore', 'underscore',
'teams/js/views/topic_card', 'teams/js/views/topic_card',
'teams/js/models/topic'], 'teams/js/models/topic'],
function ($, _, TopicCardView, Topic) { function($, _, TopicCardView, Topic) {
describe('Topic card view', function() {
describe('Topic card view', function () {
var createTopicCardView = function() { var createTopicCardView = function() {
return new TopicCardView({ return new TopicCardView({
model: new Topic({ model: new Topic({
...@@ -16,11 +15,11 @@ define(['jquery', ...@@ -16,11 +15,11 @@ define(['jquery',
}); });
}; };
beforeEach(function () { beforeEach(function() {
spyOn(TopicCardView.prototype, 'action'); spyOn(TopicCardView.prototype, 'action');
}); });
it('can render itself', function () { it('can render itself', function() {
var view = createTopicCardView(); var view = createTopicCardView();
expect(view.$el).toHaveClass('square-card'); expect(view.$el).toHaveClass('square-card');
expect(view.$el.find('.card-title').text()).toContain('Renewable Energy'); expect(view.$el.find('.card-title').text()).toContain('Renewable Energy');
...@@ -29,7 +28,7 @@ define(['jquery', ...@@ -29,7 +28,7 @@ define(['jquery',
expect(view.$el.find('.action .sr').text()).toContain('View Teams in the Renewable Energy Topic'); expect(view.$el.find('.action .sr').text()).toContain('View Teams in the Renewable Energy Topic');
}); });
it('navigates when action button is clicked', function () { it('navigates when action button is clicked', function() {
var view = createTopicCardView(); var view = createTopicCardView();
view.$el.find('.action').trigger('click'); view.$el.find('.action').trigger('click');
// TODO test actual navigation once implemented // TODO test actual navigation once implemented
......
...@@ -4,9 +4,9 @@ define([ ...@@ -4,9 +4,9 @@ define([
'teams/js/views/topic_teams', 'teams/js/views/topic_teams',
'teams/js/spec_helpers/team_spec_helpers', 'teams/js/spec_helpers/team_spec_helpers',
'common/js/spec_helpers/page_helpers' 'common/js/spec_helpers/page_helpers'
], function (Backbone, _, TopicTeamsView, TeamSpecHelpers, PageHelpers) { ], function(Backbone, _, TopicTeamsView, TeamSpecHelpers, PageHelpers) {
'use strict'; 'use strict';
describe('Topic Teams View', function () { describe('Topic Teams View', function() {
var createTopicTeamsView = function(options) { var createTopicTeamsView = function(options) {
options = options || {}; options = options || {};
var myTeamsCollection = options.myTeamsCollection || TeamSpecHelpers.createMockTeams({results: []}); var myTeamsCollection = options.myTeamsCollection || TeamSpecHelpers.createMockTeams({results: []});
...@@ -38,12 +38,12 @@ define([ ...@@ -38,12 +38,12 @@ define([
} }
}; };
beforeEach(function () { beforeEach(function() {
setFixtures('<div class="teams-container"></div>'); setFixtures('<div class="teams-container"></div>');
PageHelpers.preventBackboneChangingUrl(); PageHelpers.preventBackboneChangingUrl();
}); });
it('can render itself', function () { it('can render itself', function() {
var testTeamData = TeamSpecHelpers.createMockTeamData(1, 5), var testTeamData = TeamSpecHelpers.createMockTeamData(1, 5),
teamsView = createTopicTeamsView({ teamsView = createTopicTeamsView({
teams: TeamSpecHelpers.createMockTeams({ teams: TeamSpecHelpers.createMockTeams({
...@@ -61,21 +61,21 @@ define([ ...@@ -61,21 +61,21 @@ define([
verifyActions(teamsView); verifyActions(teamsView);
}); });
it('can browse all teams', function () { it('can browse all teams', function() {
var teamsView = createTopicTeamsView(); var teamsView = createTopicTeamsView();
spyOn(Backbone.history, 'navigate'); spyOn(Backbone.history, 'navigate');
teamsView.$('.browse-teams').click(); teamsView.$('.browse-teams').click();
expect(Backbone.history.navigate.calls.mostRecent().args[0]).toBe('browse'); expect(Backbone.history.navigate.calls.mostRecent().args[0]).toBe('browse');
}); });
it('gives the search field focus when clicking on the search teams link', function () { it('gives the search field focus when clicking on the search teams link', function() {
var teamsView = createTopicTeamsView(); var teamsView = createTopicTeamsView();
spyOn($.fn, 'focus').and.callThrough(); spyOn($.fn, 'focus').and.callThrough();
teamsView.$('.search-teams').click(); teamsView.$('.search-teams').click();
expect(teamsView.$('.search-field').first().focus).toHaveBeenCalled(); expect(teamsView.$('.search-field').first().focus).toHaveBeenCalled();
}); });
it('can show the create team modal', function () { it('can show the create team modal', function() {
var teamsView = createTopicTeamsView(); var teamsView = createTopicTeamsView();
spyOn(Backbone.history, 'navigate'); spyOn(Backbone.history, 'navigate');
teamsView.$('a.create-team').click(); teamsView.$('a.create-team').click();
...@@ -84,18 +84,18 @@ define([ ...@@ -84,18 +84,18 @@ define([
); );
}); });
it('does not show actions for a user already in a team', function () { it('does not show actions for a user already in a team', function() {
var teamsView = createTopicTeamsView({myTeamsCollection: TeamSpecHelpers.createMockTeams()}); var teamsView = createTopicTeamsView({myTeamsCollection: TeamSpecHelpers.createMockTeams()});
verifyActions(teamsView, {showActions: false}); verifyActions(teamsView, {showActions: false});
}); });
it('shows actions for a privileged user already in a team', function () { it('shows actions for a privileged user already in a team', function() {
var teamsView = createTopicTeamsView({ privileged: true }); var teamsView = createTopicTeamsView({privileged: true});
verifyActions(teamsView); verifyActions(teamsView);
}); });
it('shows actions for a staff user already in a team', function () { it('shows actions for a staff user already in a team', function() {
var teamsView = createTopicTeamsView({ privileged: false, staff: true }); var teamsView = createTopicTeamsView({privileged: false, staff: true});
verifyActions(teamsView); verifyActions(teamsView);
}); });
......
define([ define([
'backbone', 'underscore', 'teams/js/collections/topic', 'teams/js/views/topics', 'backbone', 'underscore', 'teams/js/collections/topic', 'teams/js/views/topics',
'teams/js/spec_helpers/team_spec_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers' 'teams/js/spec_helpers/team_spec_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers'
], function (Backbone, _, TopicCollection, TopicsView, TeamSpecHelpers, AjaxHelpers) { ], function(Backbone, _, TopicCollection, TopicsView, TeamSpecHelpers, AjaxHelpers) {
'use strict'; 'use strict';
describe('TopicsView', function () { describe('TopicsView', function() {
var initialTopics, topicCollection, createTopicsView, triggerUpdateEvent; var initialTopics, topicCollection, createTopicsView, triggerUpdateEvent;
createTopicsView = function() { createTopicsView = function() {
...@@ -16,25 +16,25 @@ define([ ...@@ -16,25 +16,25 @@ define([
}; };
triggerUpdateEvent = function(topicsView, sendJoinAfter) { triggerUpdateEvent = function(topicsView, sendJoinAfter) {
topicsView.collection.teamEvents.trigger('teams:update', { action: 'create' }); topicsView.collection.teamEvents.trigger('teams:update', {action: 'create'});
if (sendJoinAfter) { if (sendJoinAfter) {
topicsView.collection.teamEvents.trigger('teams:update', { action: 'join' }); topicsView.collection.teamEvents.trigger('teams:update', {action: 'join'});
} }
topicsView.render(); topicsView.render();
}; };
beforeEach(function () { beforeEach(function() {
setFixtures('<div class="topics-container"></div>'); setFixtures('<div class="topics-container"></div>');
initialTopics = TeamSpecHelpers.createMockTopicData(1, 5); initialTopics = TeamSpecHelpers.createMockTopicData(1, 5);
topicCollection = TeamSpecHelpers.createMockTopicCollection(initialTopics); topicCollection = TeamSpecHelpers.createMockTopicCollection(initialTopics);
}); });
it('can render the first of many pages', function () { it('can render the first of many pages', function() {
var topicsView = createTopicsView(), var topicsView = createTopicsView(),
footerEl = topicsView.$('.topics-paging-footer'), footerEl = topicsView.$('.topics-paging-footer'),
topicCards = topicsView.$('.topic-card'); topicCards = topicsView.$('.topic-card');
expect(topicsView.$('.topics-paging-header').text()).toMatch('Showing 1-5 out of 6 total'); expect(topicsView.$('.topics-paging-header').text()).toMatch('Showing 1-5 out of 6 total');
_.each(initialTopics, function (topic, index) { _.each(initialTopics, function(topic, index) {
var currentCard = topicCards.eq(index); var currentCard = topicCards.eq(index);
expect(currentCard.text()).toMatch(topic.name); expect(currentCard.text()).toMatch(topic.name);
expect(currentCard.text()).toMatch(topic.description); expect(currentCard.text()).toMatch(topic.description);
......
...@@ -4,14 +4,14 @@ define([ ...@@ -4,14 +4,14 @@ define([
'teams/js/collections/team', 'teams/js/collections/team',
'teams/js/collections/topic', 'teams/js/collections/topic',
'teams/js/models/topic' 'teams/js/models/topic'
], function (Backbone, _, TeamCollection, TopicCollection, TopicModel) { ], function(Backbone, _, TeamCollection, TopicCollection, TopicModel) {
'use strict'; 'use strict';
var createMockPostResponse, createMockDiscussionResponse, createAnnotatedContentInfo, createMockThreadResponse, var createMockPostResponse, createMockDiscussionResponse, createAnnotatedContentInfo, createMockThreadResponse,
createMockTopicData, createMockTopicCollection, createMockTopic, createMockTopicData, createMockTopicCollection, createMockTopic,
testCourseID = 'course/1', testCourseID = 'course/1',
testUser = 'testUser', testUser = 'testUser',
testTopicID = 'test-topic-1', testTopicID = 'test-topic-1',
testTeamDiscussionID = "12345", testTeamDiscussionID = '12345',
teamEvents = _.clone(Backbone.Events), teamEvents = _.clone(Backbone.Events),
testCountries = [ testCountries = [
['', ''], ['', ''],
...@@ -26,14 +26,14 @@ define([ ...@@ -26,14 +26,14 @@ define([
['fr', 'French'] ['fr', 'French']
]; ];
var createMockTeamData = function (startIndex, stopIndex) { var createMockTeamData = function(startIndex, stopIndex) {
return _.map(_.range(startIndex, stopIndex + 1), function (i) { return _.map(_.range(startIndex, stopIndex + 1), function(i) {
var id = "id" + i; var id = 'id' + i;
return { return {
name: "team " + i, name: 'team ' + i,
id: id, id: id,
language: testLanguages[i%4][0], language: testLanguages[i % 4][0],
country: testCountries[i%4][0], country: testCountries[i % 4][0],
membership: [], membership: [],
last_activity_at: '', last_activity_at: '',
topic_id: 'topic_id' + i, topic_id: 'topic_id' + i,
...@@ -56,7 +56,7 @@ define([ ...@@ -56,7 +56,7 @@ define([
}; };
var createMockTeams = function(responseOptions, options, collectionType) { var createMockTeams = function(responseOptions, options, collectionType) {
if(_.isUndefined(collectionType)) { if (_.isUndefined(collectionType)) {
collectionType = TeamCollection; collectionType = TeamCollection;
} }
return new collectionType( return new collectionType(
...@@ -72,7 +72,7 @@ define([ ...@@ -72,7 +72,7 @@ define([
var createMockTeamMembershipsData = function(startIndex, stopIndex) { var createMockTeamMembershipsData = function(startIndex, stopIndex) {
var teams = createMockTeamData(startIndex, stopIndex); var teams = createMockTeamData(startIndex, stopIndex);
return _.map(_.range(startIndex, stopIndex + 1), function (i) { return _.map(_.range(startIndex, stopIndex + 1), function(i) {
return { return {
user: { user: {
username: testUser, username: testUser,
...@@ -81,7 +81,7 @@ define([ ...@@ -81,7 +81,7 @@ define([
image_url_small: 'test_profile_image' image_url_small: 'test_profile_image'
} }
}, },
team: teams[i-1] team: teams[i - 1]
}; };
}); });
}; };
...@@ -100,7 +100,7 @@ define([ ...@@ -100,7 +100,7 @@ define([
var verifyCards = function(view, teams) { var verifyCards = function(view, teams) {
var teamCards = view.$('.team-card'); var teamCards = view.$('.team-card');
_.each(teams, function (team, index) { _.each(teams, function(team, index) {
var currentCard = teamCards.eq(index); var currentCard = teamCards.eq(index);
expect(currentCard.text()).toMatch(team.name); expect(currentCard.text()).toMatch(team.name);
expect(currentCard.text()).toMatch(_.object(testLanguages)[team.language]); expect(currentCard.text()).toMatch(_.object(testLanguages)[team.language]);
...@@ -108,7 +108,7 @@ define([ ...@@ -108,7 +108,7 @@ define([
}); });
}; };
var triggerTeamEvent = function (action) { var triggerTeamEvent = function(action) {
teamEvents.trigger('teams:update', {action: action}); teamEvents.trigger('teams:update', {action: action});
}; };
...@@ -119,20 +119,20 @@ define([ ...@@ -119,20 +119,20 @@ define([
course_id: testCourseID, course_id: testCourseID,
commentable_id: testTeamDiscussionID, commentable_id: testTeamDiscussionID,
type: 'thread', type: 'thread',
body: "", body: '',
anonymous_to_peers: false, anonymous_to_peers: false,
unread_comments_count: 0, unread_comments_count: 0,
updated_at: '2015-07-29T18:44:56Z', updated_at: '2015-07-29T18:44:56Z',
group_name: 'Default Group', group_name: 'Default Group',
pinned: false, pinned: false,
votes: {count: 0, down_count: 0, point: 0, up_count: 0}, votes: {count: 0, down_count: 0, point: 0, up_count: 0},
user_id: "9", user_id: '9',
abuse_flaggers: [], abuse_flaggers: [],
closed: false, closed: false,
at_position_list: [], at_position_list: [],
read: false, read: false,
anonymous: false, anonymous: false,
created_at: "2015-07-29T18:44:56Z", created_at: '2015-07-29T18:44:56Z',
thread_type: 'discussion', thread_type: 'discussion',
comments_count: 0, comments_count: 0,
group_id: 1, group_id: 1,
...@@ -145,36 +145,36 @@ define([ ...@@ -145,36 +145,36 @@ define([
createMockDiscussionResponse = function(threads) { createMockDiscussionResponse = function(threads) {
if (_.isUndefined(threads)) { if (_.isUndefined(threads)) {
threads = [ threads = [
createMockPostResponse({ id: "1", title: "First Post"}), createMockPostResponse({id: '1', title: 'First Post'}),
createMockPostResponse({ id: "2", title: "Second Post"}), createMockPostResponse({id: '2', title: 'Second Post'}),
createMockPostResponse({ id: "3", title: "Third Post"}) createMockPostResponse({id: '3', title: 'Third Post'})
]; ];
} }
return { return {
"num_pages": 1, 'num_pages': 1,
"page": 1, 'page': 1,
"discussion_data": threads, 'discussion_data': threads,
"user_info": { 'user_info': {
"username": testUser, 'username': testUser,
"follower_ids": [], 'follower_ids': [],
"default_sort_key": "date", 'default_sort_key': 'date',
"downvoted_ids": [], 'downvoted_ids': [],
"subscribed_thread_ids": [], 'subscribed_thread_ids': [],
"upvoted_ids": [], 'upvoted_ids': [],
"external_id": "9", 'external_id': '9',
"id": "9", 'id': '9',
"subscribed_user_ids": [], 'subscribed_user_ids': [],
"subscribed_commentable_ids": [] 'subscribed_commentable_ids': []
}, },
"annotated_content_info": { 'annotated_content_info': {
}, },
"roles": {"Moderator": [], "Administrator": [], "Community TA": []}, 'roles': {'Moderator': [], 'Administrator': [], 'Community TA': []},
"course_settings": { 'course_settings': {
"is_cohorted": false, 'is_cohorted': false,
"allow_anonymous_to_peers": false, 'allow_anonymous_to_peers': false,
"allow_anonymous": true, 'allow_anonymous': true,
"category_map": {"subcategories": {}, "children": [], "entries": {}}, 'category_map': {'subcategories': {}, 'children': [], 'entries': {}},
"cohorts": [] 'cohorts': []
} }
}; };
}; };
...@@ -203,36 +203,36 @@ define([ ...@@ -203,36 +203,36 @@ define([
comments_count: 0, comments_count: 0,
anonymous_to_peers: false, anonymous_to_peers: false,
unread_comments_count: 0, unread_comments_count: 0,
updated_at: "2015-08-04T21:44:28Z", updated_at: '2015-08-04T21:44:28Z',
resp_skip: 0, resp_skip: 0,
id: "55c1323c56c02ce921000001", id: '55c1323c56c02ce921000001',
pinned: false, pinned: false,
votes: {"count": 0, "down_count": 0, "point": 0, "up_count": 0}, votes: {'count': 0, 'down_count': 0, 'point': 0, 'up_count': 0},
resp_limit: 25, resp_limit: 25,
abuse_flaggers: [], abuse_flaggers: [],
closed: false, closed: false,
resp_total: 1, resp_total: 1,
at_position_list: [], at_position_list: [],
type: "thread", type: 'thread',
read: true, read: true,
anonymous: false, anonymous: false,
user_id: "5", user_id: '5',
created_at: "2015-08-04T21:44:28Z", created_at: '2015-08-04T21:44:28Z',
thread_type: "discussion", thread_type: 'discussion',
context: "standalone", context: 'standalone',
endorsed: false endorsed: false
}, },
options options
); );
}; };
createMockTopicData = function (startIndex, stopIndex) { createMockTopicData = function(startIndex, stopIndex) {
return _.map(_.range(startIndex, stopIndex + 1), function (i) { return _.map(_.range(startIndex, stopIndex + 1), function(i) {
return { return {
"description": "Test description " + i, 'description': 'Test description ' + i,
"name": "Test Topic " + i, 'name': 'Test Topic ' + i,
"id": "test-topic-" + i, 'id': 'test-topic-' + i,
"team_count": 0 'team_count': 0
}; };
}); });
}; };
...@@ -273,7 +273,7 @@ define([ ...@@ -273,7 +273,7 @@ define([
return _.extend({}, testContext, options); return _.extend({}, testContext, options);
}; };
createMockTopicCollection = function (topicData) { createMockTopicCollection = function(topicData) {
topicData = topicData !== undefined ? topicData : createMockTopicData(1, 5); topicData = topicData !== undefined ? topicData : createMockTopicData(1, 5);
return new TopicCollection( return new TopicCollection(
......
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['jquery', 'teams/js/views/teams_tab'], define(['jquery', 'teams/js/views/teams_tab'],
function ($, TeamsTabView) { function($, TeamsTabView) {
return function (options) { return function(options) {
var teamsTab = new TeamsTabView({ var teamsTab = new TeamsTabView({
el: $('.teams-content'), el: $('.teams-content'),
context: options, context: options,
viewLabel: gettext("Teams") viewLabel: gettext('Teams')
}); });
teamsTab.start(); teamsTab.start();
}; };
......
...@@ -2,14 +2,14 @@ ...@@ -2,14 +2,14 @@
* Utility methods for emitting teams events. See the event spec: * Utility methods for emitting teams events. See the event spec:
* https://openedx.atlassian.net/wiki/display/AN/Teams+Feature+Event+Design * https://openedx.atlassian.net/wiki/display/AN/Teams+Feature+Event+Design
*/ */
;(function (define) { (function(define) {
'use strict'; 'use strict';
define([ define([
'logger' 'logger'
], function (Logger) { ], function(Logger) {
var TeamAnalytics = { var TeamAnalytics = {
emitPageViewed: function (page_name, topic_id, team_id) { emitPageViewed: function(page_name, topic_id, team_id) {
Logger.log('edx.team.page_viewed', { Logger.log('edx.team.page_viewed', {
page_name: page_name, page_name: page_name,
topic_id: topic_id, topic_id: topic_id,
......
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['backbone', define(['backbone',
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
'teams/js/models/team', 'teams/js/models/team',
'common/js/components/utils/view_utils', 'common/js/components/utils/view_utils',
'text!teams/templates/edit-team.underscore'], 'text!teams/templates/edit-team.underscore'],
function (Backbone, _, gettext, FieldViews, TeamModel, ViewUtils, editTeamTemplate) { function(Backbone, _, gettext, FieldViews, TeamModel, ViewUtils, editTeamTemplate) {
return Backbone.View.extend({ return Backbone.View.extend({
maxTeamNameLength: 255, maxTeamNameLength: 255,
...@@ -30,12 +30,12 @@ ...@@ -30,12 +30,12 @@
if (this.action === 'create') { if (this.action === 'create') {
this.teamModel = new TeamModel({}); this.teamModel = new TeamModel({});
this.teamModel.url = this.context.teamsUrl; this.teamModel.url = this.context.teamsUrl;
this.primaryButtonTitle = gettext("Create"); this.primaryButtonTitle = gettext('Create');
} else if(this.action === 'edit' ) { } else if (this.action === 'edit') {
this.teamModel = options.model; this.teamModel = options.model;
this.teamModel.url = this.context.teamsDetailUrl.replace('team_id', options.model.get('id')) + this.teamModel.url = this.context.teamsDetailUrl.replace('team_id', options.model.get('id')) +
'?expand=user'; '?expand=user';
this.primaryButtonTitle = gettext("Update"); this.primaryButtonTitle = gettext('Update');
} }
this.teamNameField = new FieldViews.TextFieldView({ this.teamNameField = new FieldViews.TextFieldView({
...@@ -78,7 +78,7 @@ ...@@ -78,7 +78,7 @@
}, },
render: function() { render: function() {
this.$el.html(_.template(editTeamTemplate) ({ this.$el.html(_.template(editTeamTemplate)({
primaryButtonTitle: this.primaryButtonTitle, primaryButtonTitle: this.primaryButtonTitle,
action: this.action, action: this.action,
totalMembers: _.isUndefined(this.teamModel) ? 0 : this.teamModel.get('membership').length totalMembers: _.isUndefined(this.teamModel) ? 0 : this.teamModel.get('membership').length
...@@ -99,7 +99,7 @@ ...@@ -99,7 +99,7 @@
} }
}, },
createOrUpdateTeam: function (event) { createOrUpdateTeam: function(event) {
event.preventDefault(); event.preventDefault();
var view = this, var view = this,
teamLanguage = this.teamLanguageField.fieldValue(), teamLanguage = this.teamLanguageField.fieldValue(),
...@@ -117,7 +117,7 @@ ...@@ -117,7 +117,7 @@
if (this.action === 'create') { if (this.action === 'create') {
data.course_id = this.context.courseID; data.course_id = this.context.courseID;
data.topic_id = this.topic.id; data.topic_id = this.topic.id;
} else if (this.action === 'edit' ) { } else if (this.action === 'edit') {
saveOptions.patch = true; saveOptions.patch = true;
saveOptions.contentType = 'application/merge-patch+json'; saveOptions.contentType = 'application/merge-patch+json';
} }
...@@ -140,15 +140,15 @@ ...@@ -140,15 +140,15 @@
}) })
.fail(function(data) { .fail(function(data) {
var response = JSON.parse(data.responseText); var response = JSON.parse(data.responseText);
var message = gettext("An error occurred. Please try again."); var message = gettext('An error occurred. Please try again.');
if ('user_message' in response){ if ('user_message' in response) {
message = response.user_message; message = response.user_message;
} }
view.showMessage(message, message); view.showMessage(message, message);
}); });
}, },
validateTeamData: function (data) { validateTeamData: function(data) {
var status = true, var status = true,
message = gettext('Check the highlighted fields below and try again.'); message = gettext('Check the highlighted fields below and try again.');
var srMessages = []; var srMessages = [];
...@@ -156,7 +156,7 @@ ...@@ -156,7 +156,7 @@
this.teamNameField.unhighlightField(); this.teamNameField.unhighlightField();
this.teamDescriptionField.unhighlightField(); this.teamDescriptionField.unhighlightField();
if (_.isEmpty(data.name.trim()) ) { if (_.isEmpty(data.name.trim())) {
status = false; status = false;
this.teamNameField.highlightFieldOnError(); this.teamNameField.highlightFieldOnError();
srMessages.push( srMessages.push(
...@@ -170,7 +170,7 @@ ...@@ -170,7 +170,7 @@
); );
} }
if (_.isEmpty(data.description.trim()) ) { if (_.isEmpty(data.description.trim())) {
status = false; status = false;
this.teamDescriptionField.highlightFieldOnError(); this.teamDescriptionField.highlightFieldOnError();
srMessages.push( srMessages.push(
...@@ -191,7 +191,7 @@ ...@@ -191,7 +191,7 @@
}; };
}, },
showMessage: function (message, screenReaderMessage) { showMessage: function(message, screenReaderMessage) {
this.$('.wrapper-msg').removeClass('is-hidden'); this.$('.wrapper-msg').removeClass('is-hidden');
this.$('.msg-content .copy p').text(message); this.$('.msg-content .copy p').text(message);
this.$('.wrapper-msg').focus(); this.$('.wrapper-msg').focus();
...@@ -201,12 +201,12 @@ ...@@ -201,12 +201,12 @@
} }
}, },
cancelAndGoBack: function (event) { cancelAndGoBack: function(event) {
event.preventDefault(); event.preventDefault();
var url; var url;
if (this.action === 'create') { if (this.action === 'create') {
url = 'topics/' + this.topic.id; url = 'topics/' + this.topic.id;
} else if (this.action === 'edit' ) { } else if (this.action === 'edit') {
url = 'teams/' + this.topic.id + '/' + this.teamModel.get('id'); url = 'teams/' + this.topic.id + '/' + this.teamModel.get('id');
} }
Backbone.history.navigate(url, {trigger: true}); Backbone.history.navigate(url, {trigger: true});
......
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['backbone', define(['backbone',
...@@ -11,11 +11,11 @@ ...@@ -11,11 +11,11 @@
'text!teams/templates/edit-team-member.underscore', 'text!teams/templates/edit-team-member.underscore',
'text!teams/templates/date.underscore' 'text!teams/templates/date.underscore'
], ],
function (Backbone, $, _, gettext, TeamModel, TeamUtils, ViewUtils, editTeamMemberTemplate, dateTemplate) { function(Backbone, $, _, gettext, TeamModel, TeamUtils, ViewUtils, editTeamMemberTemplate, dateTemplate) {
return Backbone.View.extend({ return Backbone.View.extend({
dateTemplate: _.template(dateTemplate), dateTemplate: _.template(dateTemplate),
teamMemberTemplate: _.template(editTeamMemberTemplate), teamMemberTemplate: _.template(editTeamMemberTemplate),
errorMessage: gettext("An error occurred while removing the member from the team. Try again."), errorMessage: gettext('An error occurred while removing the member from the team. Try again.'),
events: { events: {
'click .action-remove-member': 'removeMember' 'click .action-remove-member': 'removeMember'
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
// as the actual user to be removed from the team will be added on before calling DELETE. // as the actual user to be removed from the team will be added on before calling DELETE.
this.teamMembershipDetailUrl = options.context.teamMembershipDetailUrl.substring( this.teamMembershipDetailUrl = options.context.teamMembershipDetailUrl.substring(
0, this.options.context.teamMembershipDetailUrl.lastIndexOf('team_id') 0, this.options.context.teamMembershipDetailUrl.lastIndexOf('team_id')
) + this.model.get('id') + ","; ) + this.model.get('id') + ',';
this.teamEvents = options.teamEvents; this.teamEvents = options.teamEvents;
}, },
...@@ -50,14 +50,14 @@ ...@@ -50,14 +50,14 @@
_.each(this.model.get('membership'), function(membership) { _.each(this.model.get('membership'), function(membership) {
dateJoined = interpolate( dateJoined = interpolate(
// Translators: 'date' is a placeholder for a fuzzy, relative timestamp (see: https://github.com/rmm5t/jquery-timeago) // Translators: 'date' is a placeholder for a fuzzy, relative timestamp (see: https://github.com/rmm5t/jquery-timeago)
gettext("Joined %(date)s"), gettext('Joined %(date)s'),
{date: self.dateTemplate({date: membership.date_joined})}, {date: self.dateTemplate({date: membership.date_joined})},
true true
); );
lastActivity = interpolate( lastActivity = interpolate(
// Translators: 'date' is a placeholder for a fuzzy, relative timestamp (see: https://github.com/rmm5t/jquery-timeago) // Translators: 'date' is a placeholder for a fuzzy, relative timestamp (see: https://github.com/rmm5t/jquery-timeago)
gettext("Last Activity %(date)s"), gettext('Last Activity %(date)s'),
{date: self.dateTemplate({date: membership.last_activity_at})}, {date: self.dateTemplate({date: membership.last_activity_at})},
true true
); );
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
this.$('abbr').timeago(); this.$('abbr').timeago();
}, },
removeMember: function (event) { removeMember: function(event) {
var self = this, username = $(event.currentTarget).data('username'); var self = this, username = $(event.currentTarget).data('username');
event.preventDefault(); event.preventDefault();
...@@ -82,17 +82,17 @@ ...@@ -82,17 +82,17 @@
gettext('Remove this team member?'), gettext('Remove this team member?'),
gettext('This learner will be removed from the team, allowing another learner to take the available spot.'), gettext('This learner will be removed from the team, allowing another learner to take the available spot.'),
gettext('Remove'), gettext('Remove'),
function () { function() {
$.ajax({ $.ajax({
type: 'DELETE', type: 'DELETE',
url: self.teamMembershipDetailUrl.concat(username, '?admin=true') url: self.teamMembershipDetailUrl.concat(username, '?admin=true')
}).done(function () { }).done(function() {
self.teamEvents.trigger('teams:update', { self.teamEvents.trigger('teams:update', {
action: 'leave', action: 'leave',
team: self.model team: self.model
}); });
self.model.fetch().done(function() { self.render(); }); self.model.fetch().done(function() { self.render(); });
}).fail(function (data) { }).fail(function(data) {
TeamUtils.parseAndShowMessage(data, self.errorMessage); TeamUtils.parseAndShowMessage(data, self.errorMessage);
}); });
} }
......
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['backbone', define(['backbone',
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
'teams/js/views/team_utils', 'teams/js/views/team_utils',
'common/js/components/utils/view_utils', 'common/js/components/utils/view_utils',
'text!teams/templates/instructor-tools.underscore'], 'text!teams/templates/instructor-tools.underscore'],
function (Backbone, _, gettext, StringUtils, TeamUtils, ViewUtils, instructorToolbarTemplate) { function(Backbone, _, gettext, StringUtils, TeamUtils, ViewUtils, instructorToolbarTemplate) {
return Backbone.View.extend({ return Backbone.View.extend({
events: { events: {
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
return this; return this;
}, },
deleteTeam: function (event) { deleteTeam: function(event) {
event.preventDefault(); event.preventDefault();
ViewUtils.confirmThenRunOperation( ViewUtils.confirmThenRunOperation(
gettext('Delete this team?'), gettext('Delete this team?'),
...@@ -37,17 +37,17 @@ ...@@ -37,17 +37,17 @@
); );
}, },
editMembership: function (event) { editMembership: function(event) {
event.preventDefault(); event.preventDefault();
Backbone.history.navigate( Backbone.history.navigate(
'teams/' + this.team.get('topic_id') + '/' + this.team.id +'/edit-team/manage-members', 'teams/' + this.team.get('topic_id') + '/' + this.team.id + '/edit-team/manage-members',
{trigger: true} {trigger: true}
); );
}, },
handleDelete: function () { handleDelete: function() {
var self = this, var self = this,
postDelete = function () { postDelete = function() {
self.teamEvents.trigger('teams:update', { self.teamEvents.trigger('teams:update', {
action: 'delete', action: 'delete',
team: self.team team: self.team
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
'success' 'success'
); );
}; };
this.team.destroy().then(postDelete).fail(function (response) { this.team.destroy().then(postDelete).fail(function(response) {
// In the 404 case, this team has already been // In the 404 case, this team has already been
// deleted by someone else. Since the team was // deleted by someone else. Since the team was
// successfully deleted anyway, just show a // successfully deleted anyway, just show a
......
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['backbone', 'gettext', 'teams/js/views/teams'], define(['backbone', 'gettext', 'teams/js/views/teams'],
function (Backbone, gettext, TeamsView) { function(Backbone, gettext, TeamsView) {
var MyTeamsView = TeamsView.extend({ var MyTeamsView = TeamsView.extend({
render: function() { render: function() {
var view = this; var view = this;
......
(function (define) { (function(define) {
'use strict'; 'use strict';
define([ define([
'jquery', 'jquery',
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
'text!teams/templates/team-membership-details.underscore', 'text!teams/templates/team-membership-details.underscore',
'text!teams/templates/team-country-language.underscore', 'text!teams/templates/team-country-language.underscore',
'text!teams/templates/date.underscore' 'text!teams/templates/date.underscore'
], function ( ], function(
$, $,
Backbone, Backbone,
_, _,
...@@ -30,15 +30,15 @@ ...@@ -30,15 +30,15 @@
className: 'team-members', className: 'team-members',
template: _.template(teamMembershipDetailsTemplate), template: _.template(teamMembershipDetailsTemplate),
initialize: function (options) { initialize: function(options) {
this.maxTeamSize = options.maxTeamSize; this.maxTeamSize = options.maxTeamSize;
this.memberships = options.memberships; this.memberships = options.memberships;
}, },
render: function () { render: function() {
var allMemberships = _(this.memberships).sortBy(function (member) { var allMemberships = _(this.memberships).sortBy(function(member) {
return new Date(member.last_activity_at); return new Date(member.last_activity_at);
}).reverse(), }).reverse(),
displayableMemberships = allMemberships.slice(0, 5), displayableMemberships = allMemberships.slice(0, 5),
maxMemberCount = this.maxTeamSize; maxMemberCount = this.maxTeamSize;
this.$el.html(this.template({ this.$el.html(this.template({
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
TeamCountryLanguageView = Backbone.View.extend({ TeamCountryLanguageView = Backbone.View.extend({
template: _.template(teamCountryLanguageTemplate), template: _.template(teamCountryLanguageTemplate),
initialize: function (options) { initialize: function(options) {
this.countries = options.countries; this.countries = options.countries;
this.languages = options.languages; this.languages = options.languages;
}, },
...@@ -74,18 +74,18 @@ ...@@ -74,18 +74,18 @@
className: 'team-activity', className: 'team-activity',
template: _.template(dateTemplate), template: _.template(dateTemplate),
initialize: function (options) { initialize: function(options) {
this.date = options.date; this.date = options.date;
}, },
render: function () { render: function() {
var lastActivity = moment(this.date), var lastActivity = moment(this.date),
currentLanguage = $('html').attr('lang'); currentLanguage = $('html').attr('lang');
lastActivity.locale(currentLanguage); lastActivity.locale(currentLanguage);
this.$el.html( this.$el.html(
interpolate( interpolate(
// Translators: 'date' is a placeholder for a fuzzy, relative timestamp (see: http://momentjs.com/) // Translators: 'date' is a placeholder for a fuzzy, relative timestamp (see: http://momentjs.com/)
gettext("Last activity %(date)s"), gettext('Last activity %(date)s'),
{date: this.template({date: lastActivity.format('MMMM Do YYYY, h:mm:ss a')})}, {date: this.template({date: lastActivity.format('MMMM Do YYYY, h:mm:ss a')})},
true true
) )
...@@ -95,7 +95,7 @@ ...@@ -95,7 +95,7 @@
}); });
TeamCardView = CardView.extend({ TeamCardView = CardView.extend({
initialize: function () { initialize: function() {
CardView.prototype.initialize.apply(this, arguments); CardView.prototype.initialize.apply(this, arguments);
// TODO: show last activity detail view // TODO: show last activity detail view
this.detailViews = [ this.detailViews = [
...@@ -107,16 +107,16 @@ ...@@ -107,16 +107,16 @@
}), }),
new TeamActivityView({date: this.model.get('last_activity_at')}) new TeamActivityView({date: this.model.get('last_activity_at')})
]; ];
this.model.on('change:membership', function () { this.model.on('change:membership', function() {
this.detailViews[0].memberships = this.model.get('membership'); this.detailViews[0].memberships = this.model.get('membership');
}, this); }, this);
}, },
configuration: 'list_card', configuration: 'list_card',
cardClass: 'team-card', cardClass: 'team-card',
title: function () { return this.model.get('name'); }, title: function() { return this.model.get('name'); },
description: function () { return this.model.get('description'); }, description: function() { return this.model.get('description'); },
details: function () { return this.detailViews; }, details: function() { return this.detailViews; },
actionClass: 'action-view', actionClass: 'action-view',
actionContent: function() { actionContent: function() {
return interpolate( return interpolate(
...@@ -125,7 +125,7 @@ ...@@ -125,7 +125,7 @@
true true
); );
}, },
actionUrl: function () { actionUrl: function() {
return '#teams/' + this.model.get('topic_id') + '/' + this.model.get('id'); return '#teams/' + this.model.get('topic_id') + '/' + this.model.get('id');
} }
}); });
......
/** /**
* View that shows the discussion for a team. * View that shows the discussion for a team.
*/ */
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['backbone', 'underscore', 'gettext', 'DiscussionModuleView'], define(['backbone', 'underscore', 'gettext', 'DiscussionModuleView'],
function (Backbone, _, gettext, DiscussionModuleView) { function(Backbone, _, gettext, DiscussionModuleView) {
var TeamDiscussionView = Backbone.View.extend({ var TeamDiscussionView = Backbone.View.extend({
initialize: function () { initialize: function() {
window.$$course_id = this.$el.data("course-id"); window.$$course_id = this.$el.data('course-id');
}, },
render: function () { render: function() {
var discussionModuleView = new DiscussionModuleView({ var discussionModuleView = new DiscussionModuleView({
el: this.$el, el: this.$el,
context: 'standalone' context: 'standalone'
......
/** /**
* View for an individual team. * View for an individual team.
*/ */
;(function (define) { (function(define) {
'use strict'; 'use strict';
define([ define([
'backbone', 'backbone',
'underscore', 'underscore',
'gettext', 'gettext',
'edx-ui-toolkit/js/utils/html-utils', 'edx-ui-toolkit/js/utils/html-utils',
'teams/js/views/team_discussion', 'teams/js/views/team_discussion',
'common/js/components/utils/view_utils', 'common/js/components/utils/view_utils',
'teams/js/views/team_utils', 'teams/js/views/team_utils',
'text!teams/templates/team-profile.underscore', 'text!teams/templates/team-profile.underscore',
'text!teams/templates/team-member.underscore' 'text!teams/templates/team-member.underscore'
], ],
function (Backbone, _, gettext, HtmlUtils, TeamDiscussionView, ViewUtils, TeamUtils, function(Backbone, _, gettext, HtmlUtils, TeamDiscussionView, ViewUtils, TeamUtils,
teamTemplate, teamMemberTemplate) { teamTemplate, teamMemberTemplate) {
var TeamProfileView = Backbone.View.extend({ var TeamProfileView = Backbone.View.extend({
errorMessage: gettext("An error occurred. Try again."), errorMessage: gettext('An error occurred. Try again.'),
events: { events: {
'click .leave-team-link': 'leaveTeam' 'click .leave-team-link': 'leaveTeam'
}, },
initialize: function (options) { initialize: function(options) {
this.teamEvents = options.teamEvents; this.teamEvents = options.teamEvents;
this.context = options.context; this.context = options.context;
this.setFocusToHeaderFunc = options.setFocusToHeaderFunc; this.setFocusToHeaderFunc = options.setFocusToHeaderFunc;
...@@ -32,10 +32,10 @@ ...@@ -32,10 +32,10 @@
this.countries = TeamUtils.selectorOptionsArrayToHashWithBlank(this.context.countries); this.countries = TeamUtils.selectorOptionsArrayToHashWithBlank(this.context.countries);
this.languages = TeamUtils.selectorOptionsArrayToHashWithBlank(this.context.languages); this.languages = TeamUtils.selectorOptionsArrayToHashWithBlank(this.context.languages);
this.listenTo(this.model, "change", this.render); this.listenTo(this.model, 'change', this.render);
}, },
render: function () { render: function() {
var memberships = this.model.get('membership'), var memberships = this.model.get('membership'),
discussionTopicID = this.model.get('discussion_topic_id'), discussionTopicID = this.model.get('discussion_topic_id'),
isMember = TeamUtils.isUserMemberOfTeam(memberships, this.context.userInfo.username); isMember = TeamUtils.isUserMemberOfTeam(memberships, this.context.userInfo.username);
...@@ -84,18 +84,18 @@ ...@@ -84,18 +84,18 @@
$(event.currentTarget).select(); $(event.currentTarget).select();
}, },
leaveTeam: function (event) { leaveTeam: function(event) {
event.preventDefault(); event.preventDefault();
var view = this; var view = this;
ViewUtils.confirmThenRunOperation( ViewUtils.confirmThenRunOperation(
gettext("Leave this team?"), gettext('Leave this team?'),
gettext("If you leave, you can no longer post in this team's discussions. Your place will be available to another learner."), gettext("If you leave, you can no longer post in this team's discussions. Your place will be available to another learner."),
gettext("Confirm"), gettext('Confirm'),
function() { function() {
$.ajax({ $.ajax({
type: 'DELETE', type: 'DELETE',
url: view.context.teamMembershipDetailUrl.replace('team_id', view.model.get('id')) url: view.context.teamMembershipDetailUrl.replace('team_id', view.model.get('id'))
}).done(function (data) { }).done(function(data) {
view.model.fetch() view.model.fetch()
.done(function() { .done(function() {
view.teamEvents.trigger('teams:update', { view.teamEvents.trigger('teams:update', {
...@@ -103,7 +103,7 @@ ...@@ -103,7 +103,7 @@
team: view.model team: view.model
}); });
}); });
}).fail(function (data) { }).fail(function(data) {
TeamUtils.parseAndShowMessage(data, view.errorMessage); TeamUtils.parseAndShowMessage(data, view.errorMessage);
}); });
} }
......
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['backbone', define(['backbone',
...@@ -7,16 +7,16 @@ ...@@ -7,16 +7,16 @@
'gettext', 'gettext',
'teams/js/views/team_utils', 'teams/js/views/team_utils',
'text!teams/templates/team-profile-header-actions.underscore'], 'text!teams/templates/team-profile-header-actions.underscore'],
function (Backbone, $, _, gettext, TeamUtils, teamProfileHeaderActionsTemplate) { function(Backbone, $, _, gettext, TeamUtils, teamProfileHeaderActionsTemplate) {
return Backbone.View.extend({ return Backbone.View.extend({
errorMessage: gettext("An error occurred. Try again."), errorMessage: gettext('An error occurred. Try again.'),
alreadyMemberMessage: gettext("You already belong to another team."), alreadyMemberMessage: gettext('You already belong to another team.'),
teamFullMessage: gettext("This team is full."), teamFullMessage: gettext('This team is full.'),
events: { events: {
"click .action-primary": "joinTeam", 'click .action-primary': 'joinTeam',
"click .action-edit-team": "editTeam" 'click .action-edit-team': 'editTeam'
}, },
initialize: function(options) { initialize: function(options) {
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
this.context = options.context; this.context = options.context;
this.showEditButton = options.showEditButton; this.showEditButton = options.showEditButton;
this.topic = options.topic; this.topic = options.topic;
this.listenTo(this.model, "change", this.render); this.listenTo(this.model, 'change', this.render);
}, },
render: function() { render: function() {
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
message, message,
showJoinButton, showJoinButton,
teamHasSpace; teamHasSpace;
this.getUserTeamInfo(username, this.context.maxTeamSize).done(function (info) { this.getUserTeamInfo(username, this.context.maxTeamSize).done(function(info) {
teamHasSpace = info.teamHasSpace; teamHasSpace = info.teamHasSpace;
// if user is the member of current team then we wouldn't show anything // if user is the member of current team then we wouldn't show anything
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
return view; return view;
}, },
joinTeam: function (event) { joinTeam: function(event) {
var view = this; var view = this;
event.preventDefault(); event.preventDefault();
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
type: 'POST', type: 'POST',
url: view.context.teamMembershipsUrl, url: view.context.teamMembershipsUrl,
data: {'username': view.context.userInfo.username, 'team_id': view.model.get('id')} data: {'username': view.context.userInfo.username, 'team_id': view.model.get('id')}
}).done(function (data) { }).done(function(data) {
view.model.fetch() view.model.fetch()
.done(function() { .done(function() {
view.teamEvents.trigger('teams:update', { view.teamEvents.trigger('teams:update', {
...@@ -73,12 +73,12 @@ ...@@ -73,12 +73,12 @@
team: view.model team: view.model
}); });
}); });
}).fail(function (data) { }).fail(function(data) {
TeamUtils.parseAndShowMessage(data, view.errorMessage); TeamUtils.parseAndShowMessage(data, view.errorMessage);
}); });
}, },
getUserTeamInfo: function (username, maxTeamSize) { getUserTeamInfo: function(username, maxTeamSize) {
var deferred = $.Deferred(); var deferred = $.Deferred();
var info = { var info = {
alreadyMember: false, alreadyMember: false,
...@@ -100,12 +100,12 @@ ...@@ -100,12 +100,12 @@
type: 'GET', type: 'GET',
url: view.context.teamMembershipsUrl, url: view.context.teamMembershipsUrl,
data: {'username': username, 'course_id': view.context.courseID} data: {'username': username, 'course_id': view.context.courseID}
}).done(function (data) { }).done(function(data) {
info.alreadyMember = (data.count > 0); info.alreadyMember = (data.count > 0);
info.memberOfCurrentTeam = false; info.memberOfCurrentTeam = false;
info.teamHasSpace = teamHasSpace; info.teamHasSpace = teamHasSpace;
deferred.resolve(info); deferred.resolve(info);
}).fail(function (data) { }).fail(function(data) {
TeamUtils.parseAndShowMessage(data, view.errorMessage); TeamUtils.parseAndShowMessage(data, view.errorMessage);
deferred.reject(); deferred.reject();
}); });
...@@ -117,10 +117,10 @@ ...@@ -117,10 +117,10 @@
return deferred.promise(); return deferred.promise();
}, },
editTeam: function (event) { editTeam: function(event) {
event.preventDefault(); event.preventDefault();
Backbone.history.navigate( Backbone.history.navigate(
'teams/' + this.topic.id + '/' + this.model.get('id') +'/edit-team', 'teams/' + this.topic.id + '/' + this.model.get('id') + '/edit-team',
{trigger: true} {trigger: true}
); );
} }
......
/* Team utility methods*/ /* Team utility methods*/
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(["jquery", "underscore" define(['jquery', 'underscore'
], function ($, _) { ], function($, _) {
return { return {
/** /**
...@@ -13,13 +13,13 @@ ...@@ -13,13 +13,13 @@
* @example selectorOptionsArrayToHashWithBlank([["a", "alpha"],["b","beta"]]) * @example selectorOptionsArrayToHashWithBlank([["a", "alpha"],["b","beta"]])
* // returns {"a":"alpha", "b":"beta", "":""} * // returns {"a":"alpha", "b":"beta", "":""}
*/ */
selectorOptionsArrayToHashWithBlank: function (options) { selectorOptionsArrayToHashWithBlank: function(options) {
var map = _.object(options); var map = _.object(options);
map[""] = ""; map[''] = '';
return map; return map;
}, },
teamCapacityText: function (memberCount, maxMemberCount) { teamCapacityText: function(memberCount, maxMemberCount) {
return interpolate( return interpolate(
// Translators: The following message displays the number of members on a team. // Translators: The following message displays the number of members on a team.
ngettext( ngettext(
...@@ -40,11 +40,11 @@ ...@@ -40,11 +40,11 @@
); );
}, },
hideMessage: function () { hideMessage: function() {
$('#teams-message').addClass('.is-hidden'); $('#teams-message').addClass('.is-hidden');
}, },
showMessage: function (message, type) { showMessage: function(message, type) {
var messageElement = $('#teams-message'); var messageElement = $('#teams-message');
if (_.isUndefined(type)) { if (_.isUndefined(type)) {
type = 'warning'; type = 'warning';
...@@ -57,17 +57,16 @@ ...@@ -57,17 +57,16 @@
/** /**
* Parse `data` and show user message. If parsing fails than show `genericErrorMessage` * Parse `data` and show user message. If parsing fails than show `genericErrorMessage`
*/ */
parseAndShowMessage: function (data, genericErrorMessage, type) { parseAndShowMessage: function(data, genericErrorMessage, type) {
try { try {
var errors = JSON.parse(data.responseText); var errors = JSON.parse(data.responseText);
this.showMessage( this.showMessage(
_.isUndefined(errors.user_message) ? genericErrorMessage : errors.user_message, type _.isUndefined(errors.user_message) ? genericErrorMessage : errors.user_message, type
); );
} catch (error) { } catch (error) {
this.showMessage(genericErrorMessage, type); this.showMessage(genericErrorMessage, type);
} }
} }
}; };
}); });
}).call(this, define || RequireJS.define); }).call(this, define || RequireJS.define);
;(function (define) { (function(define) {
'use strict'; 'use strict';
define([ define([
'backbone', 'backbone',
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
'teams/js/views/team_card', 'teams/js/views/team_card',
'common/js/components/views/paginated_view', 'common/js/components/views/paginated_view',
'teams/js/views/team_utils' 'teams/js/views/team_utils'
], function (Backbone, gettext, TeamCardView, PaginatedView, TeamUtils) { ], function(Backbone, gettext, TeamCardView, PaginatedView, TeamUtils) {
var TeamsView = PaginatedView.extend({ var TeamsView = PaginatedView.extend({
type: 'teams', type: 'teams',
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
paginationLabel: gettext('Teams Pagination'), paginationLabel: gettext('Teams Pagination'),
initialize: function (options) { initialize: function(options) {
this.context = options.context; this.context = options.context;
this.itemViewClass = TeamCardView.extend({ this.itemViewClass = TeamCardView.extend({
router: options.router, router: options.router,
......
/** /**
* A custom TabbedView for Teams. * A custom TabbedView for Teams.
*/ */
;(function (define) { (function(define) {
'use strict'; 'use strict';
define([ define([
'common/js/components/views/tabbed_view', 'common/js/components/views/tabbed_view',
'teams/js/utils/team_analytics' 'teams/js/utils/team_analytics'
], function (TabbedView, TeamAnalytics) { ], function(TabbedView, TeamAnalytics) {
var TeamsTabbedView = TabbedView.extend({ var TeamsTabbedView = TabbedView.extend({
/** /**
* Overrides TabbedView.prototype.setActiveTab in order to * Overrides TabbedView.prototype.setActiveTab in order to
* log page viewed events. * log page viewed events.
*/ */
setActiveTab: function (index) { setActiveTab: function(index) {
TabbedView.prototype.setActiveTab.call(this, index); TabbedView.prototype.setActiveTab.call(this, index);
TeamAnalytics.emitPageViewed(this.getTabMeta(index).tab.url, null, null); TeamAnalytics.emitPageViewed(this.getTabMeta(index).tab.url, null, null);
} }
......
/** /**
* View for a topic card. Displays a Topic. * View for a topic card. Displays a Topic.
*/ */
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['backbone', 'underscore', 'gettext', 'js/components/card/views/card'], define(['backbone', 'underscore', 'gettext', 'js/components/card/views/card'],
function (Backbone, _, gettext, CardView) { function(Backbone, _, gettext, CardView) {
var TeamCountDetailView = Backbone.View.extend({ var TeamCountDetailView = Backbone.View.extend({
tagName: 'p', tagName: 'p',
className: 'team-count', className: 'team-count',
initialize: function () { initialize: function() {
this.render(); this.render();
}, },
render: function () { render: function() {
var team_count = this.model.get('team_count'); var team_count = this.model.get('team_count');
this.$el.html(_.escape(interpolate( this.$el.html(_.escape(interpolate(
ngettext('%(team_count)s Team', '%(team_count)s Teams', team_count), ngettext('%(team_count)s Team', '%(team_count)s Teams', team_count),
...@@ -25,26 +25,26 @@ ...@@ -25,26 +25,26 @@
}); });
var TopicCardView = CardView.extend({ var TopicCardView = CardView.extend({
initialize: function () { initialize: function() {
this.detailViews = [new TeamCountDetailView({ model: this.model })]; this.detailViews = [new TeamCountDetailView({model: this.model})];
CardView.prototype.initialize.apply(this, arguments); CardView.prototype.initialize.apply(this, arguments);
}, },
actionUrl: function () { actionUrl: function() {
return '#topics/' + this.model.get('id'); return '#topics/' + this.model.get('id');
}, },
configuration: 'square_card', configuration: 'square_card',
cardClass: 'topic-card', cardClass: 'topic-card',
pennant: gettext('Topic'), pennant: gettext('Topic'),
title: function () { return this.model.get('name'); }, title: function() { return this.model.get('name'); },
description: function () { return this.model.get('description'); }, description: function() { return this.model.get('description'); },
details: function () { return this.detailViews; }, details: function() { return this.detailViews; },
actionClass: 'action-view', actionClass: 'action-view',
actionContent: function () { actionContent: function() {
var screenReaderText = _.escape(interpolate( var screenReaderText = _.escape(interpolate(
gettext('View Teams in the %(topic_name)s Topic'), gettext('View Teams in the %(topic_name)s Topic'),
{ topic_name: this.model.get('name') }, true {topic_name: this.model.get('name')}, true
)); ));
return '<span class="sr">' + screenReaderText + '</span><span class="icon fa fa-arrow-right" aria-hidden="true"></span>'; // eslint-disable-line max-len return '<span class="sr">' + screenReaderText + '</span><span class="icon fa fa-arrow-right" aria-hidden="true"></span>'; // eslint-disable-line max-len
} }
......
;(function (define) { (function(define) {
'use strict'; 'use strict';
define([ define([
'backbone', 'backbone',
...@@ -6,36 +6,36 @@ ...@@ -6,36 +6,36 @@
'teams/js/views/teams', 'teams/js/views/teams',
'common/js/components/views/paging_header', 'common/js/components/views/paging_header',
'text!teams/templates/team-actions.underscore' 'text!teams/templates/team-actions.underscore'
], function (Backbone, gettext, TeamsView, PagingHeader, teamActionsTemplate) { ], function(Backbone, gettext, TeamsView, PagingHeader, teamActionsTemplate) {
var TopicTeamsView = TeamsView.extend({ var TopicTeamsView = TeamsView.extend({
events: { events: {
'click a.browse-teams': 'browseTeams', 'click a.browse-teams': 'browseTeams',
'click a.search-teams': 'searchTeams', 'click a.search-teams': 'searchTeams',
'click a.create-team': 'showCreateTeamForm' 'click a.create-team': 'showCreateTeamForm'
}, },
initialize: function(options) { initialize: function(options) {
this.options = _.extend({}, options); this.options = _.extend({}, options);
this.showSortControls = options.showSortControls; this.showSortControls = options.showSortControls;
this.context = options.context; this.context = options.context;
this.myTeamsCollection = options.myTeamsCollection; this.myTeamsCollection = options.myTeamsCollection;
TeamsView.prototype.initialize.call(this, options); TeamsView.prototype.initialize.call(this, options);
}, },
canUserCreateTeam: function () { canUserCreateTeam: function() {
// Note: non-staff and non-privileged users are automatically added to any team // Note: non-staff and non-privileged users are automatically added to any team
// that they create. This means that if multiple team membership is // that they create. This means that if multiple team membership is
// disabled that they cannot create a new team when they already // disabled that they cannot create a new team when they already
// belong to one. // belong to one.
return this.context.staff || this.context.privileged || this.myTeamsCollection.length === 0; return this.context.staff || this.context.privileged || this.myTeamsCollection.length === 0;
}, },
render: function() { render: function() {
var self = this; var self = this;
this.collection.refresh().done(function() { this.collection.refresh().done(function() {
TeamsView.prototype.render.call(self); TeamsView.prototype.render.call(self);
if (self.canUserCreateTeam()) { if (self.canUserCreateTeam()) {
var message = interpolate_text( var message = interpolate_text(
// Translators: this string is shown at the bottom of the teams page // Translators: this string is shown at the bottom of the teams page
// to find a team to join or else to create a new one. There are three // to find a team to join or else to create a new one. There are three
// links that need to be included in the message: // links that need to be included in the message:
...@@ -45,51 +45,51 @@ ...@@ -45,51 +45,51 @@
// Be careful to start each link with the appropriate start indicator // Be careful to start each link with the appropriate start indicator
// (e.g. {browse_span_start} for #1) and finish it with {span_end}. // (e.g. {browse_span_start} for #1) and finish it with {span_end}.
_.escape(gettext("{browse_span_start}Browse teams in other topics{span_end} or {search_span_start}search teams{span_end} in this topic. If you still can't find a team to join, {create_span_start}create a new team in this topic{span_end}.")), _.escape(gettext("{browse_span_start}Browse teams in other topics{span_end} or {search_span_start}search teams{span_end} in this topic. If you still can't find a team to join, {create_span_start}create a new team in this topic{span_end}.")),
{ {
'browse_span_start': '<a class="browse-teams" href="">', 'browse_span_start': '<a class="browse-teams" href="">',
'search_span_start': '<a class="search-teams" href="">', 'search_span_start': '<a class="search-teams" href="">',
'create_span_start': '<a class="create-team" href="">', 'create_span_start': '<a class="create-team" href="">',
'span_end': '</a>' 'span_end': '</a>'
} }
); );
self.$el.append(_.template(teamActionsTemplate)({message: message})); self.$el.append(_.template(teamActionsTemplate)({message: message}));
} }
}); });
return this; return this;
}, },
browseTeams: function (event) { browseTeams: function(event) {
event.preventDefault(); event.preventDefault();
Backbone.history.navigate('browse', {trigger: true}); Backbone.history.navigate('browse', {trigger: true});
}, },
searchTeams: function (event) { searchTeams: function(event) {
var searchField = $('.page-header-search .search-field'); var searchField = $('.page-header-search .search-field');
event.preventDefault(); event.preventDefault();
searchField.focus(); searchField.focus();
searchField.select(); searchField.select();
$('html, body').animate({ $('html, body').animate({
scrollTop: 0 scrollTop: 0
}, 500); }, 500);
}, },
showCreateTeamForm: function (event) { showCreateTeamForm: function(event) {
event.preventDefault(); event.preventDefault();
Backbone.history.navigate( Backbone.history.navigate(
'topics/' + this.model.id + '/create-team', 'topics/' + this.model.id + '/create-team',
{trigger: true} {trigger: true}
); );
}, },
createHeaderView: function () { createHeaderView: function() {
return new PagingHeader({ return new PagingHeader({
collection: this.options.collection, collection: this.options.collection,
srInfo: this.srInfo, srInfo: this.srInfo,
showSortControls: this.showSortControls showSortControls: this.showSortControls
}); });
} }
});
return TopicTeamsView;
}); });
return TopicTeamsView;
});
}).call(this, define || RequireJS.define); }).call(this, define || RequireJS.define);
;(function (define) { (function(define) {
'use strict'; 'use strict';
define([ define([
'gettext', 'gettext',
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
'teams/js/views/team_utils', 'teams/js/views/team_utils',
'common/js/components/views/paging_header', 'common/js/components/views/paging_header',
'common/js/components/views/paginated_view' 'common/js/components/views/paginated_view'
], function (gettext, TopicCardView, TeamUtils, PagingHeader, PaginatedView) { ], function(gettext, TopicCardView, TeamUtils, PagingHeader, PaginatedView) {
var TopicsView = PaginatedView.extend({ var TopicsView = PaginatedView.extend({
type: 'topics', type: 'topics',
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
text: gettext('All topics') text: gettext('All topics')
}, },
initialize: function (options) { initialize: function(options) {
this.options = _.extend({}, options); this.options = _.extend({}, options);
this.itemViewClass = TopicCardView.extend({ this.itemViewClass = TopicCardView.extend({
router: options.router, router: options.router,
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
PaginatedView.prototype.initialize.call(this); PaginatedView.prototype.initialize.call(this);
}, },
createHeaderView: function () { createHeaderView: function() {
return new PagingHeader({ return new PagingHeader({
collection: this.options.collection, collection: this.options.collection,
srInfo: this.srInfo, srInfo: this.srInfo,
......
(function () { (function() {
var output, Converter; var output, Converter;
if (typeof exports === "object" && typeof require === "function") { // we're in a CommonJS (e.g. Node.js) module if (typeof exports === 'object' && typeof require === 'function') { // we're in a CommonJS (e.g. Node.js) module
output = exports; output = exports;
Converter = require("./Markdown.Converter").Converter; Converter = require('./Markdown.Converter').Converter;
} else { } else {
output = window.Markdown; output = window.Markdown;
Converter = output.Converter; Converter = output.Converter;
} }
output.getSanitizingConverter = function () { output.getSanitizingConverter = function() {
var converter = new Converter(); var converter = new Converter();
converter.hooks.chain("postConversion", sanitizeHtml); converter.hooks.chain('postConversion', sanitizeHtml);
converter.hooks.chain("postConversion", balanceTags); converter.hooks.chain('postConversion', balanceTags);
return converter; return converter;
} };
function sanitizeHtml(html) { function sanitizeHtml(html) {
return html.replace(/<[^>]*>?/gi, sanitizeTag); return html.replace(/<[^>]*>?/gi, sanitizeTag);
...@@ -31,21 +31,20 @@ ...@@ -31,21 +31,20 @@
if (tag.match(basic_tag_whitelist) || tag.match(a_white) || tag.match(img_white)) if (tag.match(basic_tag_whitelist) || tag.match(a_white) || tag.match(img_white))
return tag; return tag;
else else
return ""; return '';
} }
/// <summary> // / <summary>
/// attempt to balance HTML tags in the html string // / attempt to balance HTML tags in the html string
/// by removing any unmatched opening or closing tags // / by removing any unmatched opening or closing tags
/// IMPORTANT: we *assume* HTML has *already* been // / IMPORTANT: we *assume* HTML has *already* been
/// sanitized and is safe/sane before balancing! // / sanitized and is safe/sane before balancing!
/// // /
/// adapted from CODESNIPPET: A8591DBA-D1D3-11DE-947C-BA5556D89593 // / adapted from CODESNIPPET: A8591DBA-D1D3-11DE-947C-BA5556D89593
/// </summary> // / </summary>
function balanceTags(html) { function balanceTags(html) {
if (html == '')
if (html == "") return '';
return "";
var re = /<\/?\w+[^>]*(\s|$|>)/g; var re = /<\/?\w+[^>]*(\s|$|>)/g;
// convert everything to lower case; this makes // convert everything to lower case; this makes
...@@ -58,7 +57,7 @@ ...@@ -58,7 +57,7 @@
return html; return html;
var tagname, tag; var tagname, tag;
var ignoredtags = "<p><img><br><li><hr>"; var ignoredtags = '<p><img><br><li><hr>';
var match; var match;
var tagpaired = []; var tagpaired = [];
var tagremove = []; var tagremove = [];
...@@ -66,10 +65,10 @@ ...@@ -66,10 +65,10 @@
// loop through matched tags in forward order // loop through matched tags in forward order
for (var ctag = 0; ctag < tagcount; ctag++) { for (var ctag = 0; ctag < tagcount; ctag++) {
tagname = tags[ctag].replace(/<\/?(\w+).*/, "$1"); tagname = tags[ctag].replace(/<\/?(\w+).*/, '$1');
// skip any already paired tags // skip any already paired tags
// and skip tags in our ignore list; assume they're self-closed // and skip tags in our ignore list; assume they're self-closed
if (tagpaired[ctag] || ignoredtags.search("<" + tagname + ">") > -1) if (tagpaired[ctag] || ignoredtags.search('<' + tagname + '>') > -1)
continue; continue;
tag = tags[ctag]; tag = tags[ctag];
...@@ -79,7 +78,7 @@ ...@@ -79,7 +78,7 @@
// this is an opening tag // this is an opening tag
// search forwards (next tags), look for closing tags // search forwards (next tags), look for closing tags
for (var ntag = ctag + 1; ntag < tagcount; ntag++) { for (var ntag = ctag + 1; ntag < tagcount; ntag++) {
if (!tagpaired[ntag] && tags[ntag] == "</" + tagname + ">") { if (!tagpaired[ntag] && tags[ntag] == '</' + tagname + '>') {
match = ntag; match = ntag;
break; break;
} }
...@@ -98,8 +97,8 @@ ...@@ -98,8 +97,8 @@
// delete all orphaned tags from the string // delete all orphaned tags from the string
var ctag = 0; var ctag = 0;
html = html.replace(re, function (match) { html = html.replace(re, function(match) {
var res = tagremove[ctag] ? "" : match; var res = tagremove[ctag] ? '' : match;
ctag++; ctag++;
return res; return res;
}); });
......
$(document).ajaxError(function (event, jXHR) { $(document).ajaxError(function(event, jXHR) {
if (jXHR.status === 403 && jXHR.responseText === 'Unauthenticated') { if (jXHR.status === 403 && jXHR.responseText === 'Unauthenticated') {
var message = gettext( var message = gettext(
'You have been logged out of your edX account. '+ 'You have been logged out of your edX account. ' +
'Click Okay to log in again now. '+ 'Click Okay to log in again now. ' +
'Click Cancel to stay on this page '+ 'Click Cancel to stay on this page ' +
'(you must log in again to save your work).' '(you must log in again to save your work).'
); );
if (window.confirm(message)) { if (window.confirm(message)) {
var currentLocation = window.location.pathname; var currentLocation = window.location.pathname;
window.location.href = '/login?next=' + encodeURIComponent(currentLocation); window.location.href = '/login?next=' + encodeURIComponent(currentLocation);
}; }
} }
}); });
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['js/api_admin/views/catalog_preview'], function (CatalogPreviewView) { define(['js/api_admin/views/catalog_preview'], function(CatalogPreviewView) {
return function (options) { return function(options) {
var view = new CatalogPreviewView({ var view = new CatalogPreviewView({
el: '.catalog-body', el: '.catalog-body',
previewUrl: options.previewUrl, previewUrl: options.previewUrl,
catalogApiUrl: options.catalogApiUrl, catalogApiUrl: options.catalogApiUrl
}); });
return view.render(); return view.render();
}; };
......
;(function(define) { (function(define) {
'use strict'; 'use strict';
define([ define([
...@@ -7,21 +7,21 @@ ...@@ -7,21 +7,21 @@
'gettext', 'gettext',
'text!../../../templates/api_admin/catalog-results.underscore', 'text!../../../templates/api_admin/catalog-results.underscore',
'text!../../../templates/api_admin/catalog-error.underscore' 'text!../../../templates/api_admin/catalog-error.underscore'
], function (Backbone, _, gettext, catalogResultsTpl, catalogErrorTpl) { ], function(Backbone, _, gettext, catalogResultsTpl, catalogErrorTpl) {
return Backbone.View.extend({ return Backbone.View.extend({
events: { events: {
'click .preview-query': 'previewQuery' 'click .preview-query': 'previewQuery'
}, },
initialize: function (options) { initialize: function(options) {
this.previewUrl = options.previewUrl; this.previewUrl = options.previewUrl;
this.catalogApiUrl = options.catalogApiUrl; this.catalogApiUrl = options.catalogApiUrl;
}, },
render: function () { render: function() {
this.$('#id_query').after( this.$('#id_query').after(
'<button class="preview-query">'+ gettext('Preview this query') + '</button>' '<button class="preview-query">' + gettext('Preview this query') + '</button>'
); );
return this; return this;
}, },
...@@ -29,8 +29,8 @@ ...@@ -29,8 +29,8 @@
/* /*
* Return the user's query, URL-encoded. * Return the user's query, URL-encoded.
*/ */
getQuery: function () { getQuery: function() {
return encodeURIComponent(this.$("#id_query").val()); return encodeURIComponent(this.$('#id_query').val());
}, },
/* /*
...@@ -38,12 +38,12 @@ ...@@ -38,12 +38,12 @@
* with the user's query. On success, displays the * with the user's query. On success, displays the
* results, and on failure, displays an error message. * results, and on failure, displays an error message.
*/ */
previewQuery: function (event) { previewQuery: function(event) {
event.preventDefault(); event.preventDefault();
$.ajax(this.previewUrl + '?q=' + this.getQuery(), { $.ajax(this.previewUrl + '?q=' + this.getQuery(), {
method: 'GET', method: 'GET',
success: _.bind(this.renderCourses, this), success: _.bind(this.renderCourses, this),
error: _.bind(function () { error: _.bind(function() {
this.$('.preview-results').html(_.template(catalogErrorTpl)({})); this.$('.preview-results').html(_.template(catalogErrorTpl)({}));
}, this) }, this)
}); });
...@@ -53,12 +53,12 @@ ...@@ -53,12 +53,12 @@
* Render a list of courses with data returned by the * Render a list of courses with data returned by the
* courses API. * courses API.
*/ */
renderCourses: function (data) { renderCourses: function(data) {
this.$('.preview-results').html(_.template(catalogResultsTpl)({ this.$('.preview-results').html(_.template(catalogResultsTpl)({
'courses': data.results, 'courses': data.results,
'catalogApiUrl': this.catalogApiUrl, 'catalogApiUrl': this.catalogApiUrl
})); }));
}, }
}); });
}); });
}).call(this, define || RequireJS.define); }).call(this, define || RequireJS.define);
;(function (define) { (function(define) {
'use strict'; 'use strict';
define([ define([
'backbone', 'backbone',
'edx-ui-toolkit/js/pagination/paging-collection', 'edx-ui-toolkit/js/pagination/paging-collection',
'js/bookmarks/models/bookmark' 'js/bookmarks/models/bookmark'
], function (Backbone, PagingCollection, BookmarkModel) { ], function(Backbone, PagingCollection, BookmarkModel) {
return PagingCollection.extend({ return PagingCollection.extend({
model: BookmarkModel, model: BookmarkModel,
queryParams: { queryParams: {
course_id: function () { return this.options.course_id; }, course_id: function() { return this.options.course_id; },
fields : function () { return 'display_name,path'; } fields: function() { return 'display_name,path'; }
}, },
url: function() { url: function() {
return this.url; return this.url;
}, },
constructor: function (models, options) { constructor: function(models, options) {
this.options = options; this.options = options;
this.url = options.url; this.url = options.url;
PagingCollection.prototype.constructor.call(this, models, options); PagingCollection.prototype.constructor.call(this, models, options);
} }
}); });
}); });
})(define || RequireJS.define); })(define || RequireJS.define);
;(function (define) { (function(define) {
'use strict'; 'use strict';
define(['backbone'], function (Backbone) { define(['backbone'], function(Backbone) {
return Backbone.Model.extend({ return Backbone.Model.extend({
idAttribute: 'id', idAttribute: 'id',
defaults: { defaults: {
...@@ -12,10 +11,9 @@ ...@@ -12,10 +11,9 @@
created: '' created: ''
}, },
blockUrl: function () { blockUrl: function() {
return '/courses/' + this.get('course_id') + '/jump_to/' + this.get('usage_id'); return '/courses/' + this.get('course_id') + '/jump_to/' + this.get('usage_id');
} }
}); });
}); });
})(define || RequireJS.define); })(define || RequireJS.define);
;(function (define, undefined) { (function(define, undefined) {
'use strict'; 'use strict';
define(['gettext', 'jquery', 'underscore', 'backbone', 'js/views/message_banner'], define(['gettext', 'jquery', 'underscore', 'backbone', 'js/views/message_banner'],
function (gettext, $, _, Backbone, MessageBannerView) { function(gettext, $, _, Backbone, MessageBannerView) {
return Backbone.View.extend({
errorMessage: gettext('An error has occurred. Please try again.'),
return Backbone.View.extend({ srAddBookmarkText: gettext('Click to add'),
errorMessage: gettext('An error has occurred. Please try again.'), srRemoveBookmarkText: gettext('Click to remove'),
srAddBookmarkText: gettext('Click to add'), events: {
srRemoveBookmarkText: gettext('Click to remove'), 'click': 'toggleBookmark'
},
events: { showBannerInterval: 5000, // time in ms
'click': 'toggleBookmark'
},
showBannerInterval: 5000, // time in ms initialize: function(options) {
this.apiUrl = options.apiUrl;
this.bookmarkId = options.bookmarkId;
this.bookmarked = options.bookmarked;
this.usageId = options.usageId;
this.setBookmarkState(this.bookmarked);
},
initialize: function (options) { toggleBookmark: function(event) {
this.apiUrl = options.apiUrl; event.preventDefault();
this.bookmarkId = options.bookmarkId;
this.bookmarked = options.bookmarked;
this.usageId = options.usageId;
this.setBookmarkState(this.bookmarked);
},
toggleBookmark: function(event) { this.$el.prop('disabled', true);
event.preventDefault();
this.$el.prop('disabled', true); if (this.$el.hasClass('bookmarked')) {
this.removeBookmark();
if (this.$el.hasClass('bookmarked')) { } else {
this.removeBookmark(); this.addBookmark();
} else { }
this.addBookmark(); },
}
},
addBookmark: function() { addBookmark: function() {
var view = this; var view = this;
$.ajax({ $.ajax({
data: {usage_id: view.usageId}, data: {usage_id: view.usageId},
type: "POST", type: 'POST',
url: view.apiUrl, url: view.apiUrl,
dataType: 'json', dataType: 'json',
success: function () { success: function() {
view.$el.trigger('bookmark:add'); view.$el.trigger('bookmark:add');
view.setBookmarkState(true); view.setBookmarkState(true);
}, },
error: function (jqXHR) { error: function(jqXHR) {
try { try {
var response = jqXHR.responseText ? JSON.parse(jqXHR.responseText) : ''; var response = jqXHR.responseText ? JSON.parse(jqXHR.responseText) : '';
var userMessage = response ? response.user_message : ''; var userMessage = response ? response.user_message : '';
view.showError(userMessage); view.showError(userMessage);
} }
catch(err) { catch (err) {
view.showError(); view.showError();
} }
}, },
complete: function () { complete: function() {
view.$el.prop('disabled', false); view.$el.prop('disabled', false);
} }
}); });
}, },
removeBookmark: function() { removeBookmark: function() {
var view = this; var view = this;
var deleteUrl = view.apiUrl + view.bookmarkId + '/'; var deleteUrl = view.apiUrl + view.bookmarkId + '/';
$.ajax({ $.ajax({
type: "DELETE", type: 'DELETE',
url: deleteUrl, url: deleteUrl,
success: function () { success: function() {
view.$el.trigger('bookmark:remove'); view.$el.trigger('bookmark:remove');
view.setBookmarkState(false); view.setBookmarkState(false);
}, },
error: function() { error: function() {
view.showError(); view.showError();
}, },
complete: function() { complete: function() {
view.$el.prop('disabled', false); view.$el.prop('disabled', false);
} }
}); });
}, },
setBookmarkState: function(bookmarked) { setBookmarkState: function(bookmarked) {
if (bookmarked) { if (bookmarked) {
this.$el.addClass('bookmarked'); this.$el.addClass('bookmarked');
this.$el.attr('aria-pressed', 'true'); this.$el.attr('aria-pressed', 'true');
this.$el.find('.bookmark-sr').text(this.srRemoveBookmarkText); this.$el.find('.bookmark-sr').text(this.srRemoveBookmarkText);
} else { } else {
this.$el.removeClass('bookmarked'); this.$el.removeClass('bookmarked');
this.$el.attr('aria-pressed', 'false'); this.$el.attr('aria-pressed', 'false');
this.$el.find('.bookmark-sr').text(this.srAddBookmarkText); this.$el.find('.bookmark-sr').text(this.srAddBookmarkText);
} }
}, },
showError: function (errorText) { showError: function(errorText) {
var errorMsg = errorText || this.errorMessage; var errorMsg = errorText || this.errorMessage;
if (!this.messageView) { if (!this.messageView) {
this.messageView = new MessageBannerView({ this.messageView = new MessageBannerView({
el: $('.message-banner'), el: $('.message-banner'),
type: 'error' type: 'error'
}); });
} }
this.messageView.showMessage(errorMsg); this.messageView.showMessage(errorMsg);
// Hide message automatically after some interval // Hide message automatically after some interval
setTimeout(_.bind(function () { setTimeout(_.bind(function() {
this.messageView.hideMessage(); this.messageView.hideMessage();
}, this), this.showBannerInterval); }, this), this.showBannerInterval);
} }
});
}); });
});
}).call(this, define || RequireJS.define); }).call(this, define || RequireJS.define);
;(function (define, undefined) { (function(define, undefined) {
'use strict'; 'use strict';
define(['gettext', 'jquery', 'underscore', 'backbone', 'js/bookmarks/views/bookmarks_list', define(['gettext', 'jquery', 'underscore', 'backbone', 'js/bookmarks/views/bookmarks_list',
'js/bookmarks/collections/bookmarks', 'js/views/message_banner'], 'js/bookmarks/collections/bookmarks', 'js/views/message_banner'],
function (gettext, $, _, Backbone, BookmarksListView, BookmarksCollection, MessageBannerView) { function(gettext, $, _, Backbone, BookmarksListView, BookmarksCollection, MessageBannerView) {
return Backbone.View.extend({
return Backbone.View.extend({ el: '.courseware-bookmarks-button',
el: '.courseware-bookmarks-button', loadingMessageElement: '#loading-message',
errorMessageElement: '#error-message',
loadingMessageElement: '#loading-message', events: {
errorMessageElement: '#error-message', 'click .bookmarks-list-button': 'toggleBookmarksListView'
},
events: { initialize: function() {
'click .bookmarks-list-button': 'toggleBookmarksListView' var bookmarksCollection = new BookmarksCollection([],
}, {
course_id: $('.courseware-results').data('courseId'),
initialize: function () { url: $('.courseware-bookmarks-button').data('bookmarksApiUrl')
var bookmarksCollection = new BookmarksCollection([], }
{
course_id: $('.courseware-results').data('courseId'),
url: $('.courseware-bookmarks-button').data('bookmarksApiUrl')
}
); );
this.bookmarksListView = new BookmarksListView( this.bookmarksListView = new BookmarksListView(
{ {
collection: bookmarksCollection, collection: bookmarksCollection,
loadingMessageView: new MessageBannerView({el: $(this.loadingMessageElement)}), loadingMessageView: new MessageBannerView({el: $(this.loadingMessageElement)}),
errorMessageView: new MessageBannerView({el: $(this.errorMessageElement)}) errorMessageView: new MessageBannerView({el: $(this.errorMessageElement)})
} }
); );
}, },
toggleBookmarksListView: function () { toggleBookmarksListView: function() {
if (this.bookmarksListView.areBookmarksVisible()) { if (this.bookmarksListView.areBookmarksVisible()) {
this.bookmarksListView.hideBookmarks(); this.bookmarksListView.hideBookmarks();
this.$('.bookmarks-list-button').attr('aria-pressed', 'false'); this.$('.bookmarks-list-button').attr('aria-pressed', 'false');
this.$('.bookmarks-list-button').removeClass('is-active').addClass('is-inactive'); this.$('.bookmarks-list-button').removeClass('is-active').addClass('is-inactive');
} else { } else {
this.bookmarksListView.showBookmarks(); this.bookmarksListView.showBookmarks();
this.$('.bookmarks-list-button').attr('aria-pressed', 'true'); this.$('.bookmarks-list-button').attr('aria-pressed', 'true');
this.$('.bookmarks-list-button').removeClass('is-inactive').addClass('is-active'); this.$('.bookmarks-list-button').removeClass('is-inactive').addClass('is-active');
}
} }
} });
}); });
});
}).call(this, define || RequireJS.define); }).call(this, define || RequireJS.define);
$(function () { $(function() {
'use strict'; 'use strict';
$('.action-share-mozillaopenbadges').click(function (event) { $('.action-share-mozillaopenbadges').click(function(event) {
$('.badges-overlay').fadeIn(); $('.badges-overlay').fadeIn();
event.preventDefault(); event.preventDefault();
}); });
$('.badges-modal .close').click(function () { $('.badges-modal .close').click(function() {
$('.badges-overlay').fadeOut(); $('.badges-overlay').fadeOut();
}); });
}); });
\ No newline at end of file
// Backbone.js Application Collection: CertificateInvalidationCollection // Backbone.js Application Collection: CertificateInvalidationCollection
/*global define, RequireJS */ /* global define, RequireJS */
;(function(define) { (function(define) {
'use strict'; 'use strict';
define( define(
...@@ -17,4 +17,4 @@ ...@@ -17,4 +17,4 @@
}); });
} }
); );
}).call(this, define || RequireJS.define); }).call(this, define || RequireJS.define);
\ No newline at end of file
// Backbone.js Application Collection: CertificateWhiteList // Backbone.js Application Collection: CertificateWhiteList
/*global define, RequireJS */ /* global define, RequireJS */
;(function(define){ (function(define) {
'use strict'; 'use strict';
define([ define([
'backbone', 'backbone',
'gettext', 'gettext',
'js/certificates/models/certificate_exception' 'js/certificates/models/certificate_exception'
], ],
function(Backbone, gettext, CertificateExceptionModel){ function(Backbone, gettext, CertificateExceptionModel) {
var CertificateWhiteList = Backbone.Collection.extend({
var CertificateWhiteList = Backbone.Collection.extend({
model: CertificateExceptionModel, model: CertificateExceptionModel,
initialize: function(attrs, options){ initialize: function(attrs, options) {
this.url = options.url; this.url = options.url;
this.generate_certificates_url = options.generate_certificates_url; this.generate_certificates_url = options.generate_certificates_url;
}, },
getModel: function(attrs){ getModel: function(attrs) {
var model = this.findWhere({user_name: attrs.user_name}); var model = this.findWhere({user_name: attrs.user_name});
if(attrs.user_name && model){ if (attrs.user_name && model) {
return model; return model;
} }
model = this.findWhere({user_email: attrs.user_email}); model = this.findWhere({user_email: attrs.user_email});
if(attrs.user_email && model){ if (attrs.user_email && model) {
return model; return model;
} }
return undefined; return undefined;
}, },
sync: function(options, appended_url){ sync: function(options, appended_url) {
var filtered = []; var filtered = [];
if(appended_url === 'new'){ if (appended_url === 'new') {
filtered = this.filter(function(model){ filtered = this.filter(function(model) {
return model.get('new'); return model.get('new');
}); });
} }
...@@ -48,8 +47,8 @@ ...@@ -48,8 +47,8 @@
); );
}, },
update: function(data){ update: function(data) {
_.each(data, function(item){ _.each(data, function(item) {
var certificate_exception_model = var certificate_exception_model =
this.getModel({user_name: item.user_name, user_email: item.user_email}); this.getModel({user_name: item.user_name, user_email: item.user_email});
certificate_exception_model.set(item); certificate_exception_model.set(item);
...@@ -60,4 +59,4 @@ ...@@ -60,4 +59,4 @@
return CertificateWhiteList; return CertificateWhiteList;
} }
); );
}).call(this, define || RequireJS.define); }).call(this, define || RequireJS.define);
\ No newline at end of file
// Backbone.js Page Object Factory: Certificate Invalidation Factory // Backbone.js Page Object Factory: Certificate Invalidation Factory
/*global define, RequireJS */ /* global define, RequireJS */
;(function(define) { (function(define) {
'use strict'; 'use strict';
define( define(
[ [
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
'js/certificates/collections/certificate_invalidation_collection' 'js/certificates/collections/certificate_invalidation_collection'
], ],
function(CertificateInvalidationView, CertificateInvalidationCollection) { function(CertificateInvalidationView, CertificateInvalidationCollection) {
return function(certificate_invalidation_collection_json, certificate_invalidation_url) { return function(certificate_invalidation_collection_json, certificate_invalidation_url) {
var certificate_invalidation_collection = new CertificateInvalidationCollection( var certificate_invalidation_collection = new CertificateInvalidationCollection(
JSON.parse(certificate_invalidation_collection_json), { JSON.parse(certificate_invalidation_collection_json), {
...@@ -25,7 +24,6 @@ ...@@ -25,7 +24,6 @@
certificate_invalidation_view.render(); certificate_invalidation_view.render();
}; };
} }
); );
}).call(this, define || RequireJS.define); }).call(this, define || RequireJS.define);
\ No newline at end of file
// Backbone.js Page Object Factory: Certificates // Backbone.js Page Object Factory: Certificates
/*global define, RequireJS */ /* global define, RequireJS */
;(function(define){ (function(define) {
'use strict'; 'use strict';
define([ define([
'jquery', 'jquery',
'js/certificates/views/certificate_whitelist', 'js/certificates/views/certificate_whitelist',
'js/certificates/models/certificate_exception', 'js/certificates/models/certificate_exception',
'js/certificates/views/certificate_whitelist_editor', 'js/certificates/views/certificate_whitelist_editor',
'js/certificates/collections/certificate_whitelist', 'js/certificates/collections/certificate_whitelist',
'js/certificates/views/certificate_bulk_whitelist' 'js/certificates/views/certificate_bulk_whitelist'
], ],
function($, CertificateWhiteListListView, CertificateExceptionModel, CertificateWhiteListEditorView , function($, CertificateWhiteListListView, CertificateExceptionModel, CertificateWhiteListEditorView,
CertificateWhiteListCollection, CertificateBulkWhiteList){ CertificateWhiteListCollection, CertificateBulkWhiteList) {
return function(certificate_white_list_json, generate_certificate_exceptions_url, return function(certificate_white_list_json, generate_certificate_exceptions_url,
certificate_exception_view_url, generate_bulk_certificate_exceptions_url, certificate_exception_view_url, generate_bulk_certificate_exceptions_url,
active_certificate){ active_certificate) {
var certificateWhiteList = new CertificateWhiteListCollection(certificate_white_list_json, { var certificateWhiteList = new CertificateWhiteListCollection(certificate_white_list_json, {
parse: true, parse: true,
canBeEmpty: true, canBeEmpty: true,
...@@ -38,8 +37,7 @@ ...@@ -38,8 +37,7 @@
new CertificateBulkWhiteList({ new CertificateBulkWhiteList({
bulk_exception_url: generate_bulk_certificate_exceptions_url bulk_exception_url: generate_bulk_certificate_exceptions_url
}).render(); }).render();
}; };
} }
); );
}).call(this, define || RequireJS.define); }).call(this, define || RequireJS.define);
\ No newline at end of file
// Backbone.js Application Model: CertificateWhitelist // Backbone.js Application Model: CertificateWhitelist
/*global define, RequireJS */ /* global define, RequireJS */
;(function(define){ (function(define) {
'use strict'; 'use strict';
define([ define([
'underscore', 'underscore',
'underscore.string', 'underscore.string',
'backbone', 'backbone',
'gettext' 'gettext'
], ],
function(_, str, Backbone, gettext){
function(_, str, Backbone, gettext) {
return Backbone.Model.extend({ return Backbone.Model.extend({
idAttribute: 'id', idAttribute: 'id',
...@@ -24,17 +23,16 @@ ...@@ -24,17 +23,16 @@
certificate_generated: '', certificate_generated: '',
notes: '' notes: ''
}, },
initialize: function (attributes, options) { initialize: function(attributes, options) {
this.url = options.url; this.url = options.url;
}, },
validate: function(attrs){ validate: function(attrs) {
if (!str.trim(attrs.user_name) && !str.trim(attrs.user_email)) { if (!str.trim(attrs.user_name) && !str.trim(attrs.user_email)) {
return gettext('Student username/email field is required and can not be empty. ' + return gettext('Student username/email field is required and can not be empty. ' +
'Kindly fill in username/email and then press "Add to Exception List" button.'); 'Kindly fill in username/email and then press "Add to Exception List" button.');
} }
} }
}); });
} }
); );
}).call(this, define || RequireJS.define); }).call(this, define || RequireJS.define);
\ No newline at end of file
// Backbone.js Application Model: CertificateInvalidation // Backbone.js Application Model: CertificateInvalidation
/*global define, RequireJS */ /* global define, RequireJS */
;(function(define) { (function(define) {
'use strict'; 'use strict';
define( define(
['underscore', 'underscore.string', 'gettext', 'backbone'], ['underscore', 'underscore.string', 'gettext', 'backbone'],
function(_, str, gettext, Backbone) { function(_, str, gettext, Backbone) {
return Backbone.Model.extend({ return Backbone.Model.extend({
idAttribute: 'id', idAttribute: 'id',
...@@ -19,7 +18,7 @@ ...@@ -19,7 +18,7 @@
notes: '' notes: ''
}, },
initialize: function (attributes, options) { initialize: function(attributes, options) {
this.url = options.url; this.url = options.url;
}, },
...@@ -33,4 +32,4 @@ ...@@ -33,4 +32,4 @@
}); });
} }
); );
}).call(this, define || RequireJS.define); }).call(this, define || RequireJS.define);
\ No newline at end of file
// Backbone Application View: CertificateBulkWhitelist View // Backbone Application View: CertificateBulkWhitelist View
/*global define, RequireJS */ /* global define, RequireJS */
;(function(define){ (function(define) {
'use strict'; 'use strict';
define([ define([
'jquery', 'jquery',
'underscore', 'underscore',
'gettext', 'gettext',
'backbone' 'backbone'
], ],
function($, _, gettext, Backbone){ function($, _, gettext, Backbone) {
var DOM_SELECTORS = { var DOM_SELECTORS = {
bulk_exception: ".bulk-white-list-exception", bulk_exception: '.bulk-white-list-exception',
upload_csv_button: ".upload-csv-button", upload_csv_button: '.upload-csv-button',
browse_file: ".browse-file", browse_file: '.browse-file',
bulk_white_list_exception_form: "form#bulk-white-list-exception-form" bulk_white_list_exception_form: 'form#bulk-white-list-exception-form'
}; };
var MESSAGE_GROUP = { var MESSAGE_GROUP = {
...@@ -36,19 +36,19 @@ ...@@ -36,19 +36,19 @@
'click .arrow': 'toggleMessageDetails' 'click .arrow': 'toggleMessageDetails'
}, },
initialize: function(options){ initialize: function(options) {
// Re-render the view when an item is added to the collection // Re-render the view when an item is added to the collection
this.bulk_exception_url = options.bulk_exception_url; this.bulk_exception_url = options.bulk_exception_url;
}, },
render: function(){ render: function() {
var template = this.loadTemplate('certificate-bulk-white-list'); var template = this.loadTemplate('certificate-bulk-white-list');
this.$el.html(template()); this.$el.html(template());
}, },
loadTemplate: function(name) { loadTemplate: function(name) {
var templateSelector = "#" + name + "-tpl", var templateSelector = '#' + name + '-tpl',
templateText = $(templateSelector).text(); templateText = $(templateSelector).text();
return _.template(templateText); return _.template(templateText);
}, },
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
var self = this; var self = this;
form.unbind('submit').submit(function(e) { form.unbind('submit').submit(function(e) {
var data = new FormData(e.currentTarget); var data = new FormData(e.currentTarget);
$.ajax({ $.ajax({
dataType: 'json', dataType: 'json',
type: 'POST', type: 'POST',
url: self.bulk_exception_url, url: self.bulk_exception_url,
...@@ -67,13 +67,13 @@ ...@@ -67,13 +67,13 @@
success: function(data_from_server) { success: function(data_from_server) {
self.display_response(data_from_server); self.display_response(data_from_server);
} }
}); });
e.preventDefault(); // avoid to execute the actual submit of the form. e.preventDefault(); // avoid to execute the actual submit of the form.
}); });
}, },
display_response: function(data_from_server) { display_response: function(data_from_server) {
$(".bulk-exception-results").removeClass('hidden').empty(); $('.bulk-exception-results').removeClass('hidden').empty();
// Display general error messages // Display general error messages
if (data_from_server.general_errors.length) { if (data_from_server.general_errors.length) {
...@@ -138,54 +138,54 @@ ...@@ -138,54 +138,54 @@
$('<div/>', { $('<div/>', {
class: 'message ' + group class: 'message ' + group
}).appendTo('.bulk-exception-results').prepend( }).appendTo('.bulk-exception-results').prepend(
"<button type='button' id= '" + group + "' class='arrow'> + </button>" + heading "<button type='button' id= '" + group + "' class='arrow'> + </button>" + heading
).append($('<ul/>', { ).append($('<ul/>', {
class: group class: group
})); }));
for(var i = 0; i < display_data.length; i++){ for (var i = 0; i < display_data.length; i++) {
$('<li/>', { $('<li/>', {
text: display_data[i] text: display_data[i]
}).appendTo('div.message > .' + group); }).appendTo('div.message > .' + group);
} }
$("div.message > ." + group).hide(); $('div.message > .' + group).hide();
} }
function get_text(qty, group) { function get_text(qty, group) {
// inner function to display appropriate heading text // inner function to display appropriate heading text
var text; var text;
switch(group) { switch (group) {
case MESSAGE_GROUP.successfully_added: case MESSAGE_GROUP.successfully_added:
text = qty > 1 ? gettext(qty + ' learners are successfully added to exception list'): text = qty > 1 ? gettext(qty + ' learners are successfully added to exception list') :
gettext(qty + ' learner is successfully added to the exception list'); gettext(qty + ' learner is successfully added to the exception list');
break; break;
case MESSAGE_GROUP.data_format_error: case MESSAGE_GROUP.data_format_error:
text = qty > 1 ? gettext(qty + ' records are not in correct format and not added to' + text = qty > 1 ? gettext(qty + ' records are not in correct format and not added to' +
' the exception list'): ' the exception list') :
gettext(qty + ' record is not in correct format and not added to the exception' + gettext(qty + ' record is not in correct format and not added to the exception' +
' list'); ' list');
break; break;
case MESSAGE_GROUP.user_not_exist: case MESSAGE_GROUP.user_not_exist:
text = qty > 1 ? gettext(qty + ' learners do not exist in LMS and not added to the' + text = qty > 1 ? gettext(qty + ' learners do not exist in LMS and not added to the' +
' exception list'): ' exception list') :
gettext(qty + ' learner does not exist in LMS and not added to the exception list'); gettext(qty + ' learner does not exist in LMS and not added to the exception list');
break; break;
case MESSAGE_GROUP.user_already_white_listed: case MESSAGE_GROUP.user_already_white_listed:
text = qty > 1 ? gettext(qty + ' learners are already white listed and not added to' + text = qty > 1 ? gettext(qty + ' learners are already white listed and not added to' +
' the exception list'): ' the exception list') :
gettext(qty + ' learner is already white listed and not added to the exception ' + gettext(qty + ' learner is already white listed and not added to the exception ' +
'list'); 'list');
break; break;
case MESSAGE_GROUP.user_not_enrolled: case MESSAGE_GROUP.user_not_enrolled:
text = qty > 1 ? gettext(qty + ' learners are not enrolled in course and not added to' + text = qty > 1 ? gettext(qty + ' learners are not enrolled in course and not added to' +
' the exception list'): ' the exception list') :
gettext(qty + ' learner is not enrolled in course and not added to the exception' + gettext(qty + ' learner is not enrolled in course and not added to the exception' +
' list'); ' list');
break; break;
} }
return text; return text;
} }
...@@ -194,11 +194,11 @@ ...@@ -194,11 +194,11 @@
toggleMessageDetails: function(event) { toggleMessageDetails: function(event) {
if (event && event.preventDefault) { event.preventDefault(); } if (event && event.preventDefault) { event.preventDefault(); }
var group = event.target.id; var group = event.target.id;
$("div.message > ." + group).slideToggle( "fast", function() { $('div.message > .' + group).slideToggle('fast', function() {
if ($(this).is(':visible')) { if ($(this).is(':visible')) {
event.target.text = ' -- '; event.target.text = ' -- ';
} else { } else {
event.target.text = ' + '; event.target.text = ' + ';
} }
}); });
}, },
...@@ -208,7 +208,7 @@ ...@@ -208,7 +208,7 @@
if (event.currentTarget.files.length === 1) { if (event.currentTarget.files.length === 1) {
this.$el.find(DOM_SELECTORS.upload_csv_button).removeAttr('disabled'); this.$el.find(DOM_SELECTORS.upload_csv_button).removeAttr('disabled');
this.$el.find(DOM_SELECTORS.browse_file).val( this.$el.find(DOM_SELECTORS.browse_file).val(
event.currentTarget.value.substring(event.currentTarget.value.lastIndexOf("\\") + 1)); event.currentTarget.value.substring(event.currentTarget.value.lastIndexOf('\\') + 1));
} }
} }
}); });
......
// Backbone Application View: CertificateInvalidationView // Backbone Application View: CertificateInvalidationView
/*global define, RequireJS */ /* global define, RequireJS */
;(function(define) { (function(define) {
'use strict'; 'use strict';
define( define(
['jquery', 'underscore', 'gettext', 'backbone', 'js/certificates/models/certificate_invalidation'], ['jquery', 'underscore', 'gettext', 'backbone', 'js/certificates/models/certificate_invalidation'],
function($, _, gettext, Backbone, CertificateInvalidationModel) { function($, _, gettext, Backbone, CertificateInvalidationModel) {
return Backbone.View.extend({ return Backbone.View.extend({
el: "#certificate-invalidation", el: '#certificate-invalidation',
messages: "div.message", messages: 'div.message',
events: { events: {
'click #invalidate-certificate': 'invalidateCertificate', 'click #invalidate-certificate': 'invalidateCertificate',
'click .re-validate-certificate': 'reValidateCertificate' 'click .re-validate-certificate': 'reValidateCertificate'
...@@ -25,15 +25,15 @@ ...@@ -25,15 +25,15 @@
}, },
loadTemplate: function(name) { loadTemplate: function(name) {
var templateSelector = "#" + name + "-tpl", var templateSelector = '#' + name + '-tpl',
templateText = $(templateSelector).text(); templateText = $(templateSelector).text();
return _.template(templateText); return _.template(templateText);
}, },
invalidateCertificate: function() { invalidateCertificate: function() {
var user = this.$("#certificate-invalidation-user").val(); var user = this.$('#certificate-invalidation-user').val();
var notes = this.$("#certificate-invalidation-notes").val(); var notes = this.$('#certificate-invalidation-notes').val();
var message = ""; var message = '';
var certificate_invalidation = new CertificateInvalidationModel( var certificate_invalidation = new CertificateInvalidationModel(
{ {
...@@ -65,14 +65,13 @@ ...@@ -65,14 +65,13 @@
var response_data = JSON.parse(response.responseText); var response_data = JSON.parse(response.responseText);
self.escapeAndShowMessage(response_data.message); self.escapeAndShowMessage(response_data.message);
} }
catch(exception) { catch (exception) {
self.escapeAndShowMessage( self.escapeAndShowMessage(
gettext("Server Error, Please refresh the page and try again.") gettext('Server Error, Please refresh the page and try again.')
); );
} }
} }
}); });
} }
else { else {
this.escapeAndShowMessage(certificate_invalidation.validationError); this.escapeAndShowMessage(certificate_invalidation.validationError);
...@@ -96,9 +95,9 @@ ...@@ -96,9 +95,9 @@
var response_data = JSON.parse(response.responseText); var response_data = JSON.parse(response.responseText);
self.escapeAndShowMessage(response_data.message); self.escapeAndShowMessage(response_data.message);
} }
catch(exception) { catch (exception) {
self.escapeAndShowMessage( self.escapeAndShowMessage(
gettext("Server Error, Please refresh the page and try again.") gettext('Server Error, Please refresh the page and try again.')
); );
} }
}, },
...@@ -119,8 +118,8 @@ ...@@ -119,8 +118,8 @@
}, },
escapeAndShowMessage: function(message) { escapeAndShowMessage: function(message) {
$(this.messages + ">p" ).remove(); $(this.messages + '>p').remove();
this.$(this.messages).removeClass('hidden').append("<p>"+ _.escape(message) + "</p>"); this.$(this.messages).removeClass('hidden').append('<p>' + _.escape(message) + '</p>');
} }
}); });
......
// Backbone Application View: CertificateWhitelist View // Backbone Application View: CertificateWhitelist View
/*global define, RequireJS */ /* global define, RequireJS */
;(function(define){ (function(define) {
'use strict'; 'use strict';
define([ define([
'jquery', 'jquery',
'underscore', 'underscore',
'gettext', 'gettext',
'backbone' 'backbone'
], ],
function($, _, gettext, Backbone){ function($, _, gettext, Backbone) {
return Backbone.View.extend({ return Backbone.View.extend({
el: "#white-listed-students", el: '#white-listed-students',
message_div: 'div.white-listed-students > div.message', message_div: 'div.white-listed-students > div.message',
generate_exception_certificates_radio: generate_exception_certificates_radio:
'input:radio[name=generate-exception-certificates-radio]:checked', 'input:radio[name=generate-exception-certificates-radio]:checked',
...@@ -23,35 +23,35 @@ ...@@ -23,35 +23,35 @@
'click .delete-exception': 'removeException' 'click .delete-exception': 'removeException'
}, },
initialize: function(options){ initialize: function(options) {
this.certificateWhiteListEditorView = options.certificateWhiteListEditorView; this.certificateWhiteListEditorView = options.certificateWhiteListEditorView;
this.active_certificate = options.active_certificate; this.active_certificate = options.active_certificate;
// Re-render the view when an item is added to the collection // Re-render the view when an item is added to the collection
this.listenTo(this.collection, 'change add remove', this.render); this.listenTo(this.collection, 'change add remove', this.render);
}, },
render: function(){ render: function() {
var template = this.loadTemplate('certificate-white-list'); var template = this.loadTemplate('certificate-white-list');
this.$el.html(template({certificates: this.collection.models})); this.$el.html(template({certificates: this.collection.models}));
if (!this.active_certificate || this.collection.isEmpty()){ if (!this.active_certificate || this.collection.isEmpty()) {
this.$("#generate-exception-certificates").attr("disabled", "disabled"); this.$('#generate-exception-certificates').attr('disabled', 'disabled');
} }
else { else {
this.$("#generate-exception-certificates").removeAttr("disabled"); this.$('#generate-exception-certificates').removeAttr('disabled');
} }
}, },
loadTemplate: function(name) { loadTemplate: function(name) {
var templateSelector = "#" + name + "-tpl", var templateSelector = '#' + name + '-tpl',
templateText = $(templateSelector).text(); templateText = $(templateSelector).text();
return _.template(templateText); return _.template(templateText);
}, },
removeException: function(event){ removeException: function(event) {
var certificate = $(event.target).data(); var certificate = $(event.target).data();
var model = this.collection.findWhere(certificate); var model = this.collection.findWhere(certificate);
var self = this; var self = this;
if(model){ if (model) {
model.destroy( model.destroy(
{ {
success: function() { success: function() {
...@@ -65,41 +65,41 @@ ...@@ -65,41 +65,41 @@
} }
); );
} }
else{ else {
this.escapeAndShowMessage( this.escapeAndShowMessage(
gettext('Could not find Certificate Exception in white list. Please refresh the page and try again') // eslint-disable-line max-len gettext('Could not find Certificate Exception in white list. Please refresh the page and try again') // eslint-disable-line max-len
); );
} }
}, },
generateExceptionCertificates: function(){ generateExceptionCertificates: function() {
this.collection.sync( this.collection.sync(
{success: this.showSuccess(this), error: this.showError(this)}, {success: this.showSuccess(this), error: this.showError(this)},
$(this.generate_exception_certificates_radio).val() $(this.generate_exception_certificates_radio).val()
); );
}, },
escapeAndShowMessage: function(message){ escapeAndShowMessage: function(message) {
$(this.message_div + ">p" ).remove(); $(this.message_div + '>p').remove();
$(this.message_div).removeClass('hidden').append("<p>"+ _.escape(message) + "</p>").focus(); $(this.message_div).removeClass('hidden').append('<p>' + _.escape(message) + '</p>').focus();
$(this.message_div).fadeOut(6000, "linear"); $(this.message_div).fadeOut(6000, 'linear');
}, },
showSuccess: function(caller_object){ showSuccess: function(caller_object) {
return function(xhr){ return function(xhr) {
caller_object.escapeAndShowMessage(xhr.message); caller_object.escapeAndShowMessage(xhr.message);
}; };
}, },
showError: function(caller_object){ showError: function(caller_object) {
return function(xhr){ return function(xhr) {
try{ try {
var response = JSON.parse(xhr.responseText); var response = JSON.parse(xhr.responseText);
caller_object.escapeAndShowMessage(response.message); caller_object.escapeAndShowMessage(response.message);
} }
catch(exception){ catch (exception) {
caller_object.escapeAndShowMessage( caller_object.escapeAndShowMessage(
gettext("Server Error, Please refresh the page and try again.") gettext('Server Error, Please refresh the page and try again.')
); );
} }
}; };
......
// Backbone Application View: CertificateWhiteList Editor View // Backbone Application View: CertificateWhiteList Editor View
/*global define, RequireJS */ /* global define, RequireJS */
;(function(define){ (function(define) {
'use strict'; 'use strict';
define([ define([
'jquery', 'jquery',
'underscore', 'underscore',
'gettext', 'gettext',
'backbone', 'backbone',
'js/certificates/models/certificate_exception' 'js/certificates/models/certificate_exception'
], ],
function($, _, gettext, Backbone, CertificateExceptionModel){ function($, _, gettext, Backbone, CertificateExceptionModel) {
return Backbone.View.extend({ return Backbone.View.extend({
el: "#certificate-white-list-editor", el: '#certificate-white-list-editor',
message_div: '.message', message_div: '.message',
events: { events: {
'click #add-exception': 'addException' 'click #add-exception': 'addException'
}, },
render: function(){ render: function() {
var template = this.loadTemplate('certificate-white-list-editor'); var template = this.loadTemplate('certificate-white-list-editor');
this.$el.html(template()); this.$el.html(template());
}, },
loadTemplate: function(name) { loadTemplate: function(name) {
var templateSelector = "#" + name + "-tpl", var templateSelector = '#' + name + '-tpl',
templateText = $(templateSelector).text(); templateText = $(templateSelector).text();
return _.template(templateText); return _.template(templateText);
}, },
addException: function(){ addException: function() {
var value = this.$("#certificate-exception").val(); var value = this.$('#certificate-exception').val();
var notes = this.$("#notes").val(); var notes = this.$('#notes').val();
var user_email = '', user_name='', model={}; var user_email = '', user_name = '', model = {};
if(this.isEmailAddress(value)){ if (this.isEmailAddress(value)) {
user_email = value; user_email = value;
model = {user_email: user_email}; model = {user_email: user_email};
} }
else{ else {
user_name = value; user_name = value;
model = {user_name: user_name}; model = {user_name: user_name};
} }
...@@ -55,15 +55,15 @@ ...@@ -55,15 +55,15 @@
url: this.collection.url url: this.collection.url
} }
); );
var message = ""; var message = '';
if(this.collection.findWhere(model)){ if (this.collection.findWhere(model)) {
message = gettext("<%= user %> already in exception list."); message = gettext('<%= user %> already in exception list.');
this.escapeAndShowMessage( this.escapeAndShowMessage(
_.template(message)({user: (user_name || user_email)}) _.template(message)({user: (user_name || user_email)})
); );
} }
else if(certificate_exception.isValid()){ else if (certificate_exception.isValid()) {
message = gettext('<%= user %> has been successfully added to the exception list. Click Generate Exception Certificate below to send the certificate.'); // eslint-disable-line max-len message = gettext('<%= user %> has been successfully added to the exception list. Click Generate Exception Certificate below to send the certificate.'); // eslint-disable-line max-len
certificate_exception.save( certificate_exception.save(
null, null,
...@@ -76,9 +76,8 @@ ...@@ -76,9 +76,8 @@
error: this.showError(this) error: this.showError(this)
} }
); );
} }
else{ else {
this.escapeAndShowMessage(certificate_exception.validationError); this.escapeAndShowMessage(certificate_exception.validationError);
} }
}, },
...@@ -88,29 +87,29 @@ ...@@ -88,29 +87,29 @@
return re.test(email); return re.test(email);
}, },
escapeAndShowMessage: function(message){ escapeAndShowMessage: function(message) {
$(this.message_div + ">p" ).remove(); $(this.message_div + '>p').remove();
this.$(this.message_div).removeClass('hidden').append("<p>"+ _.escape(message) + "</p>"); this.$(this.message_div).removeClass('hidden').append('<p>' + _.escape(message) + '</p>');
}, },
showSuccess: function(caller, add_model, message){ showSuccess: function(caller, add_model, message) {
return function(model){ return function(model) {
if(add_model){ if (add_model) {
caller.collection.add(model); caller.collection.add(model);
} }
caller.escapeAndShowMessage(message); caller.escapeAndShowMessage(message);
}; };
}, },
showError: function(caller){ showError: function(caller) {
return function(model, response){ return function(model, response) {
try{ try {
var response_data = JSON.parse(response.responseText); var response_data = JSON.parse(response.responseText);
caller.escapeAndShowMessage(response_data.message); caller.escapeAndShowMessage(response_data.message);
} }
catch(exception){ catch (exception) {
caller.escapeAndShowMessage( caller.escapeAndShowMessage(
gettext("Server Error, Please refresh the page and try again.") gettext('Server Error, Please refresh the page and try again.')
); );
} }
}; };
......
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
*/ */
var edx = edx || {}; var edx = edx || {};
(function ($, _) { (function($, _) {
'use strict'; 'use strict';
edx.commerce = edx.commerce || {}; edx.commerce = edx.commerce || {};
edx.commerce.credit = edx.commerce.credit || {}; edx.commerce.credit = edx.commerce.credit || {};
edx.commerce.credit.createCreditRequest = function (providerId, courseKey, username) { edx.commerce.credit.createCreditRequest = function(providerId, courseKey, username) {
return $.ajax({ return $.ajax({
url: '/api/credit/v1/providers/' + providerId + '/request/', url: '/api/credit/v1/providers/' + providerId + '/request/',
type: 'POST', type: 'POST',
...@@ -23,7 +23,7 @@ var edx = edx || {}; ...@@ -23,7 +23,7 @@ var edx = edx || {};
'username': username 'username': username
}), }),
context: this, context: this,
success: function (requestData) { success: function(requestData) {
var $form = $('<form>', { var $form = $('<form>', {
'class': 'hidden', 'class': 'hidden',
'action': requestData.url, 'action': requestData.url,
...@@ -31,7 +31,7 @@ var edx = edx || {}; ...@@ -31,7 +31,7 @@ var edx = edx || {};
'accept-method': 'UTF-8' 'accept-method': 'UTF-8'
}); });
_.each(requestData.parameters, function (value, key) { _.each(requestData.parameters, function(value, key) {
$('<textarea>').attr({ $('<textarea>').attr({
name: key, name: key,
value: value value: value
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment