Commit 7e29adad by Dennis Jen

Added roster activity date range.

* Updated section note colors to be accessible
* Do not parse engagement date range
parent 4062835c
...@@ -83,18 +83,24 @@ define(function (require) { ...@@ -83,18 +83,24 @@ define(function (require) {
}, },
parse: function (response) { parse: function (response) {
var parsedEngagementRanges = _.mapObject(response.engagement_ranges, function (metricRanges) { var parsedEngagementRanges = _.mapObject(response.engagement_ranges, function (metricRanges, key) {
return _.mapObject(metricRanges, function (range) { // do not parse the date_range field (it's not a metric range)
// range is either null or a two-element array if (key === 'date_range') {
if (_.isNull(range)) { return metricRanges;
return null; } else {
} return _.mapObject(metricRanges, function (range) {
return [ // range is either null or a two-element array
_.isNull(range[0]) ? -Infinity : range[0], if (_.isNull(range)) {
_.isNull(range[1]) ? Infinity : range[1] return null;
]; }
}); return [
_.isNull(range[0]) ? -Infinity : range[0],
_.isNull(range[1]) ? Infinity : range[1]
];
});
}
}); });
return _.extend(response, { engagement_ranges: parsedEngagementRanges }); return _.extend(response, { engagement_ranges: parsedEngagementRanges });
}, },
......
...@@ -78,6 +78,19 @@ define(function (require) { ...@@ -78,6 +78,19 @@ define(function (require) {
expect(courseMetadata.get('engagement_ranges').problems_attempted.above_average).toEqual(null); expect(courseMetadata.get('engagement_ranges').problems_attempted.above_average).toEqual(null);
}); });
it('does not parse engagement date range', function () {
var courseMetadata = new CourseMetadataModel({
engagement_ranges: {
date_range: {
start: '2015-12-03',
end: '2016-06-01'
}
}
}, {parse: true});
expect(courseMetadata.get('engagement_ranges').date_range.start).toEqual('2015-12-03');
expect(courseMetadata.get('engagement_ranges').date_range.end).toEqual('2016-06-01');
});
describe('inMetricRange', function () { describe('inMetricRange', function () {
it('returns true when value is in range', function () { it('returns true when value is in range', function () {
var courseMetadata = new CourseMetadataModel(); var courseMetadata = new CourseMetadataModel();
......
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-8">
<div class="learners-active-filters"></div> <div class="learners-active-filters"></div>
</div> </div>
<div class="col-md-4">
<div class="activity-date-range small"></div>
</div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4 col-md-push-8"> <div class="col-md-4 col-md-push-8">
......
define(function (require) {
'use strict';
var _ = require('underscore'),
Marionette = require('marionette'),
Utils = require('utils/utils');
return Marionette.ItemView.extend({
template: _.template(gettext('Activity between <%- startDate %> - <%- endDate %>')),
templateHelpers: function() {
var dateRange = this.model.get('engagement_ranges').date_range,
// Translators: 'n/a' means 'not available'
naText = gettext('n/a');
return {
startDate: _(dateRange).has('start') ? Utils.formatDate(dateRange.start) : naText,
endDate: _(dateRange).has('end') ? Utils.formatDate(dateRange.end) : naText,
};
},
});
});
...@@ -11,6 +11,7 @@ define(function (require) { ...@@ -11,6 +11,7 @@ define(function (require) {
var _ = require('underscore'), var _ = require('underscore'),
Marionette = require('marionette'), Marionette = require('marionette'),
ActiveDateRangeView = require('learners/roster/views/activity-date-range'),
ActiveFiltersView = require('learners/roster/views/active-filters'), ActiveFiltersView = require('learners/roster/views/active-filters'),
LearnerResultsView = require('learners/roster/views/results'), LearnerResultsView = require('learners/roster/views/results'),
LearnerUtils = require('learners/common/utils'), LearnerUtils = require('learners/common/utils'),
...@@ -35,6 +36,7 @@ define(function (require) { ...@@ -35,6 +36,7 @@ define(function (require) {
regions: { regions: {
activeFilters: '.learners-active-filters', activeFilters: '.learners-active-filters',
activityDateRange: '.activity-date-range',
controls: '.learners-table-controls', controls: '.learners-table-controls',
results: '.learners-results' results: '.learners-results'
}, },
...@@ -57,6 +59,9 @@ define(function (require) { ...@@ -57,6 +59,9 @@ define(function (require) {
this.showChildView('activeFilters', new ActiveFiltersView({ this.showChildView('activeFilters', new ActiveFiltersView({
collection: this.options.collection collection: this.options.collection
})); }));
this.showChildView('activityDateRange', new ActiveDateRangeView({
model: this.options.courseMetadata
}));
this.showChildView('controls', new RosterControlsView({ this.showChildView('controls', new RosterControlsView({
collection: this.options.collection, collection: this.options.collection,
courseMetadata: this.options.courseMetadata, courseMetadata: this.options.courseMetadata,
......
...@@ -760,6 +760,29 @@ define(function (require) { ...@@ -760,6 +760,29 @@ define(function (require) {
}); });
describe('activity date range', function () {
it('renders dates', function () {
var rosterView = getRosterView({
courseMetadata: {
engagement_ranges: {
date_range: {
start: '2016-01-12',
end: '2016-03-30'
}
}
}
});
rosterView.$('.activity-date-range')
.toContainText('Activity between January 12, 2016 - March 30, 2016');
});
it('renders n/a when no date range available', function () {
var rosterView = getRosterView();
rosterView.$('.activity-date-range').toContainText('Activity between n/a - n/a');
});
});
describe('active filters', function () { describe('active filters', function () {
var expectActiveFilters, var expectActiveFilters,
expectNoActiveFilters; expectNoActiveFilters;
......
...@@ -158,6 +158,10 @@ hr.has-emphasis { ...@@ -158,6 +158,10 @@ hr.has-emphasis {
} }
} }
.section-heading-note {
color: $edx-gray-d2;
}
// CASE: larger than small screen breakpoint // CASE: larger than small screen breakpoint
@media (min-width: $screen-sm-min) { @media (min-width: $screen-sm-min) {
...@@ -177,10 +181,8 @@ hr.has-emphasis { ...@@ -177,10 +181,8 @@ hr.has-emphasis {
margin-top: $font-size-base; margin-top: $font-size-base;
} }
.section-heading-note {
color: $edx-gray;
}
} }
} }
.section-nav { .section-nav {
......
...@@ -832,6 +832,20 @@ table.dataTable thead th.sorting_desc:after { ...@@ -832,6 +832,20 @@ table.dataTable thead th.sorting_desc:after {
} }
} }
.activity-date-range {
color: $edx-gray-d2;
// padding keeps the element from shifting when active filters are selected
padding-top: $padding-large-vertical * 1.5;
padding-bottom: $padding-large-vertical * 1.5;
@media (min-width: $screen-sm-min) {
float: right;
}
}
} }
// styles for the learner details summary // styles for the learner details summary
......
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