delete datetext functions, implement dateutils

This commit is contained in:
Gregory Martin
2016-11-30 11:30:21 -05:00
parent ef55cc4f5f
commit b0bf19a741
31 changed files with 143 additions and 524 deletions

View File

@@ -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();

View File

@@ -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;
}

View File

@@ -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() {

View File

@@ -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'));

View File

@@ -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();
},

View File

@@ -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');
});
});
});

View File

@@ -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';

View File

@@ -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')
}

View File

@@ -23,7 +23,6 @@ var edx = edx || {};
defaultContext: function() {
return {
courseName: '',
courseStartDate: '',
coursewareUrl: '',
platformName: ''
};

View File

@@ -16,7 +16,6 @@ var edx = edx || {};
return {
courseKey: '',
courseName: '',
courseStartDate: '',
coursewareUrl: '',
platformName: '',
requirements: []