delete datetext functions, implement dateutils
This commit is contained in:
@@ -5,17 +5,23 @@
|
||||
'js/discovery/views/search_form', 'js/discovery/views/courses_listing',
|
||||
'js/discovery/views/filter_bar', 'js/discovery/views/refine_sidebar'],
|
||||
function(Backbone, SearchState, Filters, SearchForm, CoursesListing, FilterBar, RefineSidebar) {
|
||||
return function(meanings, searchQuery) {
|
||||
return function(meanings, searchQuery, userLanguage, userTimezone) {
|
||||
var dispatcher = _.extend({}, Backbone.Events);
|
||||
var search = new SearchState();
|
||||
var filters = new Filters();
|
||||
var listing = new CoursesListing({model: search.discovery});
|
||||
var form = new SearchForm();
|
||||
var filterBar = new FilterBar({collection: filters});
|
||||
var refineSidebar = new RefineSidebar({
|
||||
collection: search.discovery.facetOptions,
|
||||
meanings: meanings
|
||||
});
|
||||
var listing;
|
||||
var courseListingModel = search.discovery;
|
||||
courseListingModel.userPreferences = {
|
||||
userLanguage: userLanguage,
|
||||
userTimezone: userTimezone
|
||||
};
|
||||
listing = new CoursesListing({model: courseListingModel});
|
||||
|
||||
dispatcher.listenTo(form, 'search', function(query) {
|
||||
filters.reset();
|
||||
|
||||
@@ -4,24 +4,19 @@
|
||||
'underscore',
|
||||
'backbone',
|
||||
'gettext',
|
||||
'date'
|
||||
], function($, _, Backbone, gettext, Date) {
|
||||
'edx-ui-toolkit/js/utils/date-utils'
|
||||
], function($, _, Backbone, gettext, DateUtils) {
|
||||
'use strict';
|
||||
|
||||
function formatDate(date) {
|
||||
return dateUTC(date).toString('MMM dd, yyyy');
|
||||
}
|
||||
|
||||
// Return a date object using UTC time instead of local time
|
||||
function dateUTC(date) {
|
||||
return new Date(
|
||||
date.getUTCFullYear(),
|
||||
date.getUTCMonth(),
|
||||
date.getUTCDate(),
|
||||
date.getUTCHours(),
|
||||
date.getUTCMinutes(),
|
||||
date.getUTCSeconds()
|
||||
);
|
||||
function formatDate(date, userLanguage, userTimezone) {
|
||||
var context;
|
||||
context = {
|
||||
datetime: date,
|
||||
language: userLanguage,
|
||||
timezone: userTimezone,
|
||||
format: DateUtils.dateFormatEnum.shortDate
|
||||
};
|
||||
return DateUtils.localize(context);
|
||||
}
|
||||
|
||||
return Backbone.View.extend({
|
||||
@@ -36,8 +31,26 @@
|
||||
|
||||
render: function() {
|
||||
var data = _.clone(this.model.attributes);
|
||||
data.start = formatDate(new Date(data.start));
|
||||
data.enrollment_start = formatDate(new Date(data.enrollment_start));
|
||||
var userLanguage = '',
|
||||
userTimezone = '';
|
||||
if (this.model.userPreferences !== undefined) {
|
||||
userLanguage = this.model.userPreferences.userLanguage;
|
||||
userTimezone = this.model.userPreferences.userTimezone;
|
||||
}
|
||||
if (data.advertised_start !== undefined) {
|
||||
data.start = data.advertised_start;
|
||||
} else {
|
||||
data.start = formatDate(
|
||||
new Date(data.start),
|
||||
userLanguage,
|
||||
userTimezone
|
||||
);
|
||||
}
|
||||
data.enrollment_start = formatDate(
|
||||
new Date(data.enrollment_start),
|
||||
userLanguage,
|
||||
userTimezone
|
||||
);
|
||||
this.$el.html(this.tpl(data));
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -31,12 +31,15 @@
|
||||
},
|
||||
|
||||
renderItems: function() {
|
||||
/* eslint no-param-reassign: [2, { "props": true }] */
|
||||
var latest = this.model.latest();
|
||||
var items = latest.map(function(result) {
|
||||
result.userPreferences = this.model.userPreferences;
|
||||
var item = new CourseCardView({model: result});
|
||||
return item.render().el;
|
||||
}, this);
|
||||
this.$list.append(items);
|
||||
/* eslint no-param-reassign: [2, { "props": false }] */
|
||||
},
|
||||
|
||||
attachScrollHandler: function() {
|
||||
|
||||
@@ -4,14 +4,15 @@
|
||||
(function(define) {
|
||||
'use strict';
|
||||
define([
|
||||
'backbone'
|
||||
'backbone',
|
||||
'edx-ui-toolkit/js/utils/date-utils'
|
||||
],
|
||||
function(Backbone) {
|
||||
function(Backbone, DateUtils) {
|
||||
return Backbone.Model.extend({
|
||||
initialize: function(data) {
|
||||
if (data) {
|
||||
this.context = data;
|
||||
this.setActiveRunMode(this.getRunMode(data.run_modes));
|
||||
this.setActiveRunMode(this.getRunMode(data.run_modes), data.user_preferences);
|
||||
}
|
||||
},
|
||||
|
||||
@@ -31,7 +32,7 @@
|
||||
var enrolled_mode = _.findWhere(runModes, {is_enrolled: true}),
|
||||
openEnrollmentRunModes = this.getEnrollableRunModes(),
|
||||
desiredRunMode;
|
||||
// We populate our model by looking at the run modes.
|
||||
// We populate our model by looking at the run modes.
|
||||
if (enrolled_mode) {
|
||||
// If the learner is already enrolled in a run mode, return that one.
|
||||
desiredRunMode = enrolled_mode;
|
||||
@@ -64,15 +65,44 @@
|
||||
});
|
||||
},
|
||||
|
||||
setActiveRunMode: function(runMode) {
|
||||
formatDate: function(date, userPreferences) {
|
||||
var context,
|
||||
userTimezone = '',
|
||||
userLanguage = '';
|
||||
if (userPreferences !== undefined) {
|
||||
userTimezone = userPreferences.time_zone;
|
||||
userLanguage = userPreferences['pref-lang'];
|
||||
}
|
||||
context = {
|
||||
datetime: date,
|
||||
timezone: userTimezone,
|
||||
language: userLanguage,
|
||||
format: DateUtils.dateFormatEnum.shortDate
|
||||
};
|
||||
return DateUtils.localize(context);
|
||||
},
|
||||
|
||||
setActiveRunMode: function(runMode, userPreferences) {
|
||||
var startDateString;
|
||||
if (runMode) {
|
||||
if (runMode.advertised_start !== undefined && runMode.advertised_start !== 'None') {
|
||||
startDateString = runMode.advertised_start;
|
||||
} else {
|
||||
startDateString = this.formatDate(
|
||||
runMode.start_date,
|
||||
userPreferences
|
||||
);
|
||||
}
|
||||
this.set({
|
||||
certificate_url: runMode.certificate_url,
|
||||
course_image_url: runMode.course_image_url || '',
|
||||
course_key: runMode.course_key,
|
||||
course_url: runMode.course_url || '',
|
||||
display_name: this.context.display_name,
|
||||
end_date: runMode.end_date,
|
||||
end_date: this.formatDate(
|
||||
runMode.end_date,
|
||||
userPreferences
|
||||
),
|
||||
enrollable_run_modes: this.getEnrollableRunModes(),
|
||||
is_course_ended: runMode.is_course_ended,
|
||||
is_enrolled: runMode.is_enrolled,
|
||||
@@ -81,13 +111,12 @@
|
||||
marketing_url: runMode.marketing_url,
|
||||
mode_slug: runMode.mode_slug,
|
||||
run_key: runMode.run_key,
|
||||
start_date: runMode.start_date,
|
||||
start_date: startDateString,
|
||||
upcoming_run_modes: this.getUpcomingRunModes(),
|
||||
upgrade_url: runMode.upgrade_url
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
setUnselected: function() {
|
||||
// Called to reset the model back to the unselected state.
|
||||
var unselectedMode = this.getUnselectedRunMode(this.get('enrollable_run_modes'));
|
||||
|
||||
@@ -33,7 +33,8 @@
|
||||
this.options = options;
|
||||
this.programModel = new Backbone.Model(this.options.programData);
|
||||
this.courseCardCollection = new CourseCardCollection(
|
||||
this.programModel.get('course_codes')
|
||||
this.programModel.get('course_codes'),
|
||||
this.options.userPreferences
|
||||
);
|
||||
this.render();
|
||||
},
|
||||
|
||||
@@ -47,7 +47,7 @@ define([
|
||||
expect(this.view.$el.find('.course-name')).toContainHtml(data.org);
|
||||
expect(this.view.$el.find('.course-name')).toContainHtml(data.content.number);
|
||||
expect(this.view.$el.find('.course-name')).toContainHtml(data.content.display_name);
|
||||
expect(this.view.$el.find('.course-date')).toContainHtml('Jan 01, 1970');
|
||||
expect(this.view.$el.find('.course-date').text().trim()).toEqual('Starts: Jan 1, 1970');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -30,8 +30,9 @@ define([
|
||||
context.run_modes[0].marketing_url
|
||||
);
|
||||
expect(view.$('.course-details .course-text .course-key').html()).toEqual(context.key);
|
||||
expect(view.$('.course-details .course-text .run-period').html())
|
||||
.toEqual(context.run_modes[0].start_date + ' - ' + context.run_modes[0].end_date);
|
||||
expect(view.$('.course-details .course-text .run-period').html()).toEqual(
|
||||
context.run_modes[0].start_date + ' - ' + context.run_modes[0].end_date
|
||||
);
|
||||
};
|
||||
|
||||
beforeEach(function() {
|
||||
@@ -92,6 +93,15 @@ define([
|
||||
validateCourseInfoDisplay();
|
||||
});
|
||||
|
||||
it('should show the course advertised start date', function() {
|
||||
var advertisedStart = 'This is an advertised start';
|
||||
context.run_modes[0].advertised_start = advertisedStart;
|
||||
setupView(context, false);
|
||||
expect(view.$('.course-details .course-text .run-period').html()).toEqual(
|
||||
advertisedStart + ' - ' + context.run_modes[0].end_date
|
||||
);
|
||||
});
|
||||
|
||||
it('should only show certificate status section if a certificate has been earned', function() {
|
||||
var certUrl = 'sample-certificate';
|
||||
|
||||
|
||||
@@ -75,7 +75,6 @@ var edx = edx || {};
|
||||
'payment-confirmation-step': {
|
||||
courseKey: el.data('course-key'),
|
||||
courseName: el.data('course-name'),
|
||||
courseStartDate: el.data('course-start-date'),
|
||||
coursewareUrl: el.data('courseware-url'),
|
||||
platformName: el.data('platform-name'),
|
||||
requirements: el.data('requirements')
|
||||
@@ -94,7 +93,6 @@ var edx = edx || {};
|
||||
},
|
||||
'enrollment-confirmation-step': {
|
||||
courseName: el.data('course-name'),
|
||||
courseStartDate: el.data('course-start-date'),
|
||||
coursewareUrl: el.data('courseware-url'),
|
||||
platformName: el.data('platform-name')
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ var edx = edx || {};
|
||||
defaultContext: function() {
|
||||
return {
|
||||
courseName: '',
|
||||
courseStartDate: '',
|
||||
coursewareUrl: '',
|
||||
platformName: ''
|
||||
};
|
||||
|
||||
@@ -16,7 +16,6 @@ var edx = edx || {};
|
||||
return {
|
||||
courseKey: '',
|
||||
courseName: '',
|
||||
courseStartDate: '',
|
||||
coursewareUrl: '',
|
||||
platformName: '',
|
||||
requirements: []
|
||||
|
||||
Reference in New Issue
Block a user