create a new team

TNL-1899
This commit is contained in:
muhammad-ammar
2015-07-16 05:02:02 +05:00
parent 56da28526e
commit 69450fce47
28 changed files with 1216 additions and 93 deletions

View File

@@ -533,6 +533,8 @@
'lms/include/teams/js/spec/topics_spec.js',
'lms/include/teams/js/spec/teams_spec.js',
'lms/include/teams/js/spec/teams_tab_spec.js',
'lms/include/teams/js/spec/team_actions_spec.js',
'lms/include/teams/js/spec/edit_team_spec.js',
'lms/include/js/spec/components/header/header_spec.js',
'lms/include/js/spec/components/tabbed/tabbed_view_spec.js',
'lms/include/js/spec/components/card/card_spec.js',

View File

@@ -49,7 +49,8 @@ define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers
var selector = '.u-field-value > select';
var fieldData = FieldViewsSpecHelpers.createFieldData(AccountSettingsFieldViews.DropdownFieldView, {
valueAttribute: 'language',
options: FieldViewsSpecHelpers.SELECT_OPTIONS
options: FieldViewsSpecHelpers.SELECT_OPTIONS,
persistChanges: true
});
var view = new AccountSettingsFieldViews.LanguagePreferenceFieldView(fieldData).render();
@@ -92,7 +93,8 @@ define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers
var selector = '.u-field-value > select';
var fieldData = FieldViewsSpecHelpers.createFieldData(AccountSettingsFieldViews.DropdownFieldView, {
valueAttribute: 'language_proficiencies',
options: FieldViewsSpecHelpers.SELECT_OPTIONS
options: FieldViewsSpecHelpers.SELECT_OPTIONS,
persistChanges: true
});
fieldData.model.set({'language_proficiencies': [{'code': FieldViewsSpecHelpers.SELECT_OPTIONS[0][0]}]});

View File

@@ -101,7 +101,8 @@ define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers
placeholderValue: "Tell other edX learners a little about yourself: where you live, " +
"what your interests are, why you're taking courses on edX, or what you hope to learn.",
valueAttribute: "bio",
helpMessage: ''
helpMessage: '',
messagePosition: 'header'
})
];

View File

@@ -126,6 +126,37 @@ define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers
expectMessageContains(view, "Do not reset this!");
};
var verifyPersistence = function (fieldClass, requests) {
var fieldData = createFieldData(fieldClass, {
title: 'Username',
valueAttribute: 'username',
helpMessage: 'The username that you use to sign in to edX.',
validValue: 'My Name',
persistChanges: false,
messagePosition: 'header'
});
var view = new fieldClass(fieldData).render();
var valueInputSelector;
switch (fieldClass) {
case FieldViews.TextFieldView:
valueInputSelector = '.u-field-value > input';
break;
case FieldViews.DropdownFieldView:
valueInputSelector = '.u-field-value > select';
_.extend(fieldData, {validValue: SELECT_OPTIONS[0][0]});
break;
case FieldViews.TextareaFieldView:
valueInputSelector = '.u-field-value > textarea';
break;
}
view.$(valueInputSelector).val(fieldData.validValue).change();
expect(view.fieldValue()).toBe(fieldData.validValue);
expectMessageContains(view, view.helpMessage);
expect(requests.length).toBe(0);
};
var verifyEditableField = function (view, data, requests) {
var request_data = {};
var url = view.model.url;
@@ -230,6 +261,7 @@ define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers
verifySuccessMessageReset: verifySuccessMessageReset,
verifyEditableField: verifyEditableField,
verifyTextField: verifyTextField,
verifyDropDownField: verifyDropDownField
verifyDropDownField: verifyDropDownField,
verifyPersistence: verifyPersistence
};
});

View File

@@ -72,7 +72,8 @@ define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers
var fieldData = FieldViewsSpecHelpers.createFieldData(fieldViewClass, {
title: 'Preferred Language',
valueAttribute: 'language',
helpMessage: 'Your preferred language.'
helpMessage: 'Your preferred language.',
persistChanges: true
});
var view = new fieldViewClass(fieldData);
@@ -110,7 +111,8 @@ define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers
var fieldData = FieldViewsSpecHelpers.createFieldData(FieldViews.TextFieldView, {
title: 'Full Name',
valueAttribute: 'name',
helpMessage: 'How are you?'
helpMessage: 'How are you?',
persistChanges: true
});
var view = new FieldViews.TextFieldView(fieldData).render();
@@ -134,7 +136,8 @@ define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers
title: 'Full Name',
valueAttribute: 'name',
helpMessage: 'edX full name',
editable: 'never'
editable: 'never',
persistChanges: true
});
var view = new FieldViews.DropdownFieldView(fieldData).render();
@@ -154,7 +157,8 @@ define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers
var fieldData = FieldViewsSpecHelpers.createFieldData(FieldViews.DropdownFieldView, {
title: 'Full Name',
valueAttribute: 'name',
helpMessage: 'edX full name'
helpMessage: 'edX full name',
persistChanges: true
});
var view = new FieldViews.DropdownFieldView(fieldData).render();
@@ -178,7 +182,8 @@ define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers
title: 'Full Name',
valueAttribute: 'name',
helpMessage: 'edX full name',
editable: 'toggle'
editable: 'toggle',
persistChanges: true
});
var view = new FieldViews.DropdownFieldView(fieldData).render();
@@ -205,7 +210,8 @@ define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers
valueAttribute: 'drop-down',
helpMessage: 'edX drop down',
editable: editable,
required:true
required:true,
persistChanges: true
});
var view = new FieldViews.DropdownFieldView(fieldData).render();
@@ -230,7 +236,9 @@ define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers
helpMessage: 'Wicked is good',
placeholderValue: "Tell other edX learners a little about yourself: where you live, " +
"what your interests are, why youre taking courses on edX, or what you hope to learn.",
editable: 'never'
editable: 'never',
persistChanges: true,
messagePosition: 'header'
});
// set bio to empty to see the placeholder.
@@ -259,8 +267,9 @@ define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers
helpMessage: 'Wicked is good',
placeholderValue: "Tell other edX learners a little about yourself: where you live, " +
"what your interests are, why youre taking courses on edX, or what you hope to learn.",
editable: 'toggle'
editable: 'toggle',
persistChanges: true,
messagePosition: 'header'
});
fieldData.model.set({'bio': ''});
@@ -300,5 +309,30 @@ define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers
FieldViewsSpecHelpers.expectTitleAndMessageToContain(view, fieldData.title, fieldData.helpMessage, false);
expect(view.$('.u-field-value > a .u-field-link-title-' + view.options.valueAttribute).text().trim()).toBe(fieldData.linkTitle);
});
it("correctly renders LinkFieldView", function() {
var fieldData = FieldViewsSpecHelpers.createFieldData(FieldViews.LinkFieldView, {
title: 'Title',
linkTitle: 'Link title',
helpMessage: 'Click the link.',
valueAttribute: 'password-reset'
});
var view = new FieldViews.LinkFieldView(fieldData).render();
FieldViewsSpecHelpers.expectTitleAndMessageToContain(view, fieldData.title, fieldData.helpMessage, false);
expect(view.$('.u-field-value > a .u-field-link-title-' + view.options.valueAttribute).text().trim()).toBe(fieldData.linkTitle);
});
it("can't persist changes if persistChanges is off", function() {
requests = AjaxHelpers.requests(this);
var fieldClasses = [
FieldViews.TextFieldView,
FieldViews.DropdownFieldView,
FieldViews.TextareaFieldView
];
for (var i = 0; i < fieldClasses.length; i++) {
FieldViewsSpecHelpers.verifyPersistence(fieldClasses[i], requests);
}
});
});
});

View File

@@ -39,7 +39,8 @@
model: userAccountModel,
title: gettext('Full Name'),
valueAttribute: 'name',
helpMessage: gettext('The name that appears on your certificates. Other learners never see your full name.')
helpMessage: gettext('The name that appears on your certificates. Other learners never see your full name.'),
persistChanges: true
})
},
{
@@ -49,7 +50,8 @@
valueAttribute: 'email',
helpMessage: interpolate_text(
gettext('The email address you use to sign in. Communications from {platform_name} and your courses are sent to this address.'), {platform_name: platformName}
)
),
persistChanges: true
})
},
{
@@ -74,7 +76,8 @@
helpMessage: interpolate_text(
gettext('The language used throughout this site. This site is currently available in a limited number of languages.'), {platform_name: platformName}
),
options: fieldsData.language.options
options: fieldsData.language.options,
persistChanges: true
})
},
{
@@ -83,7 +86,8 @@
required: true,
title: gettext('Country or Region'),
valueAttribute: 'country',
options: fieldsData['country']['options']
options: fieldsData['country']['options'],
persistChanges: true
})
}
]
@@ -96,7 +100,8 @@
model: userAccountModel,
title: gettext('Education Completed'),
valueAttribute: 'level_of_education',
options: fieldsData.level_of_education.options
options: fieldsData.level_of_education.options,
persistChanges: true
})
},
{
@@ -104,7 +109,8 @@
model: userAccountModel,
title: gettext('Gender'),
valueAttribute: 'gender',
options: fieldsData.gender.options
options: fieldsData.gender.options,
persistChanges: true
})
},
{
@@ -112,7 +118,8 @@
model: userAccountModel,
title: gettext('Year of Birth'),
valueAttribute: 'year_of_birth',
options: fieldsData['year_of_birth']['options']
options: fieldsData['year_of_birth']['options'],
persistChanges: true
})
},
{
@@ -120,7 +127,8 @@
model: userAccountModel,
title: gettext('Preferred Language'),
valueAttribute: 'language_proficiencies',
options: fieldsData.preferred_language.options
options: fieldsData.preferred_language.options,
persistChanges: true
})
}
]

View File

@@ -99,12 +99,13 @@
},
saveValue: function () {
var attributes = {},
value = this.fieldValue() ? [{'code': this.fieldValue()}] : [];
attributes[this.options.valueAttribute] = value;
this.saveAttributes(attributes);
if (this.persistChanges === true) {
var attributes = {},
value = this.fieldValue() ? [{'code': this.fieldValue()}] : [];
attributes[this.options.valueAttribute] = value;
this.saveAttributes(attributes);
}
}
});
AccountSettingsFieldViews.AuthFieldView = FieldViews.LinkFieldView.extend({

View File

@@ -54,7 +54,8 @@
['all_users', gettext('Full Profile')]
],
helpMessage: '',
accountSettingsPageUrl: options.account_settings_page_url
accountSettingsPageUrl: options.account_settings_page_url,
persistChanges: true
});
var profileImageFieldView = new LearnerProfileFieldsView.ProfileImageFieldView({
@@ -87,7 +88,8 @@
placeholderValue: gettext('Add Country'),
valueAttribute: "country",
options: options.country_options,
helpMessage: ''
helpMessage: '',
persistChanges: true
}),
new AccountSettingsFieldViews.LanguageProficienciesFieldView({
model: accountSettingsModel,
@@ -100,7 +102,8 @@
placeholderValue: gettext('Add language'),
valueAttribute: "language_proficiencies",
options: options.language_options,
helpMessage: ''
helpMessage: '',
persistChanges: true
})
];
@@ -112,7 +115,9 @@
title: gettext('About me'),
placeholderValue: gettext("Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn."),
valueAttribute: "bio",
helpMessage: ''
helpMessage: '',
persistChanges: true,
messagePosition: 'header'
})
];

View File

@@ -1,8 +1,22 @@
;(function (define, undefined) {
'use strict';
define([
'gettext', 'jquery', 'underscore', 'backbone', 'backbone-super', 'jquery.fileupload'
], function (gettext, $, _, Backbone) {
'gettext', 'jquery', 'underscore', 'backbone',
'text!templates/fields/field_readonly.underscore',
'text!templates/fields/field_dropdown.underscore',
'text!templates/fields/field_link.underscore',
'text!templates/fields/field_text.underscore',
'text!templates/fields/field_textarea.underscore',
'text!templates/fields/field_image.underscore',
'backbone-super', 'jquery.fileupload'
], function (gettext, $, _, Backbone,
field_readonly_template,
field_dropdown_template,
field_link_template,
field_text_template,
field_textarea_template,
field_image_template
) {
var messageRevertDelay = 6000;
var FieldViews = {};
@@ -36,7 +50,7 @@
initialize: function () {
this.template = _.template($(this.templateSelector).text());
this.template = _.template(this.fieldTemplate || '');
this.helpMessage = this.options.helpMessage || '';
this.showMessages = _.isUndefined(this.options.showMessages) ? true : this.options.showMessages;
@@ -142,6 +156,7 @@
FieldViews.EditableFieldView = FieldViews.FieldView.extend({
initialize: function (options) {
this.persistChanges = _.isUndefined(options.persistChanges) ? false : options.persistChanges;
_.bindAll(this, 'saveAttributes', 'saveSucceeded', 'showDisplayMode', 'showEditMode',
'startEditing', 'finishEditing'
);
@@ -158,20 +173,22 @@
},
saveAttributes: function (attributes, options) {
var view = this;
var defaultOptions = {
contentType: 'application/merge-patch+json',
patch: true,
wait: true,
success: function () {
view.saveSucceeded();
},
error: function (model, xhr) {
view.showErrorMessage(xhr);
}
};
this.showInProgressMessage();
this.model.save(attributes, _.extend(defaultOptions, options));
if (this.persistChanges === true) {
var view = this;
var defaultOptions = {
contentType: 'application/merge-patch+json',
patch: true,
wait: true,
success: function () {
view.saveSucceeded();
},
error: function (model, xhr) {
view.showErrorMessage(xhr);
}
};
this.showInProgressMessage();
this.model.save(attributes, _.extend(defaultOptions, options));
}
},
saveSucceeded: function () {
@@ -210,6 +227,7 @@
},
finishEditing: function() {
if (this.persistChanges === false) {return;}
if (this.fieldValue() !== this.modelValue()) {
this.saveValue();
} else {
@@ -219,6 +237,14 @@
this.showDisplayMode(true);
}
}
},
highlightFieldOnError: function () {
this.$el.addClass('error');
},
unhighlightField: function () {
this.$el.removeClass('error');
}
});
@@ -226,7 +252,7 @@
fieldType: 'readonly',
templateSelector: '#field_readonly-tpl',
fieldTemplate: field_readonly_template,
initialize: function (options) {
this._super(options);
@@ -259,7 +285,7 @@
fieldType: 'text',
templateSelector: '#field_text-tpl',
fieldTemplate: field_text_template,
events: {
'change input': 'saveValue'
@@ -302,7 +328,7 @@
fieldType: 'dropdown',
templateSelector: '#field_dropdown-tpl',
fieldTemplate: field_dropdown_template,
events: {
'click': 'startEditing',
@@ -421,7 +447,7 @@
fieldType: 'textarea',
templateSelector: '#field_textarea-tpl',
fieldTemplate: field_textarea_template,
events: {
'click .wrapper-u-field': 'startEditing',
@@ -451,6 +477,7 @@
mode: this.mode,
value: value,
message: this.helpMessage,
messagePosition: this.options.messagePosition || 'footer',
placeholderValue: this.options.placeholderValue
}));
this.delegateEvents();
@@ -472,6 +499,7 @@
},
adjustTextareaHeight: function() {
if (this.persistChanges === false) {return;}
var textarea = this.$('textarea');
textarea.css('height', 'auto').css('height', textarea.prop('scrollHeight') + 10);
},
@@ -520,7 +548,7 @@
fieldType: 'link',
templateSelector: '#field_link-tpl',
fieldTemplate: field_link_template,
events: {
'click a': 'linkClicked'
@@ -553,7 +581,7 @@
fieldType: 'image',
templateSelector: '#field_image-tpl',
fieldTemplate: field_image_template,
uploadButtonSelector: '.upload-button-input',
titleAdd: gettext("Upload an image"),

View File

@@ -51,6 +51,20 @@
text-align: center;
}
// Below divider rules are moved here from _instructor_2.scss
// UI: visual dividers
.divider-lv0 {
border-top: ($baseline/5) solid $gray-l4;
}
.divider-lv1 {
border-top: ($baseline/10) solid $gray-l4;
}
.divider-lv2 {
border-top: ($baseline/20) solid $gray-l4;
}
// for verify_student/make_payment_step.underscore
.payment-buttons {

View File

@@ -120,19 +120,6 @@
}
}
}
// UI: visual dividers
.divider-lv0 {
border-top: ($baseline/5) solid $gray-l4;
}
.divider-lv1 {
border-top: ($baseline/10) solid $gray-l4;
}
.divider-lv2 {
border-top: ($baseline/20) solid $gray-l4;
}
}
// instructor dashboard 2

View File

@@ -472,4 +472,160 @@
padding-left: 2%;
}
}
.team-actions {
@extend %ui-well;
margin: 20px 1.2%;
color: $gray;
text-align: center;
.title {
@extend %t-title6;
@extend %t-strong;
margin-bottom: ($baseline/2);
text-align: inherit;
color: inherit;
}
.copy {
text-align: inherit;
color: inherit;
}
}
}
.teams-content {
.teams-main {
.team-edit-fields {
@include clearfix();
.team-required-fields {
@include float(left);
width: 55%;
border-right: 2px solid $gray-l4;;
.u-field.u-field-name {
padding-bottom: $baseline;
.u-field-value {
display: block;
width: 90%;
input {
border-radius: ($baseline/5);
height: ($baseline*2);
}
}
.u-field-message {
@include padding-left(0);
padding-top: ($baseline/4);
width: 100%;
}
}
.u-field.u-field-description {
.u-field-value {
display: block;
width: 100%;
textarea {
height: ($baseline*5);
width: 90%;
border-radius: ($baseline/5)
}
}
.u-field-message {
display: block;
@extend %t-copy-sub1;
@include padding-left(0);
margin-top: ($baseline/4);
color: $gray-l1;
width: 90%;
}
}
.u-field-title {
padding-bottom: ($baseline/4);
color: $base-font-color;
width: 40%;
}
}
.team-optional-fields {
@include float(left);
@include margin-left($baseline);
width: 40%;
.u-field.u-field-optional_description {
margin-bottom: ($baseline/2);
.u-field-title {
color: $base-font-color;
font-weight: $font-semibold;
margin-bottom: ($baseline/5);
width: 100%;
}
.u-field-value {
display: none;
}
}
.u-field.u-field-language {
margin-bottom: ($baseline/5);
}
.u-field-value-display {
display: none;
}
.u-field-value {
width: 90%;
}
.u-field-title {
display: block;
color: $base-font-color;
width: 35%;
}
.u-field-message {
@include padding-left(0);
width: 95%;
}
}
}
.u-field {
padding: 0;
}
.u-field.error {
input, textarea {
border-color: $error-red;
}
.u-field-message-help, .u-field-description-message {
color: $error-red !important;
}
}
.create-team.wrapper-msg {
margin: 0 0 $baseline 0;
}
}
}
.form-instructions {
margin: ($baseline/2) 0 $baseline 0;
}
.create-team.form-actions {
margin-top: $baseline;
}