Merge branch 'master' into feanil/depr-43-remove-donation-button

This commit is contained in:
Feanil Patel
2020-08-04 15:09:13 -04:00
committed by GitHub
303 changed files with 4946 additions and 1235 deletions

View File

@@ -1,7 +1,8 @@
/**
*
* A library of helper functions to track ecommerce related events.
*
* See here for the full list of upsell links and how to view these events:
* https://openedx.atlassian.net/wiki/spaces/RS/pages/1675100377/How+to+find+upsell+link+click+events
*/
(function(define) {
'use strict';
@@ -10,7 +11,7 @@
var eventAttrs = {linkName: linkName};
var allowedAttrs = ['linkType', 'pageName', 'linkCategory'];
if (!window.analytics) {
if (!window.analytics || !window.analytics.trackLink) {
return;
}
@@ -31,4 +32,6 @@
return TrackECommerceEvents;
});
}).call(this, define || RequireJS.define);
}).call(this,
typeof define === 'function' && define.amd ? define : RequireJS.define
);

View File

@@ -634,6 +634,7 @@
"Date Placed": "Datum der Einreichung",
"Date added": "Datum hinzugef\u00fcgt",
"Deactivate": "Deaktivieren",
"Deactivating": "Deaktivieren",
"Deadlines": "Abgabefristen",
"December": "Dezember",
"Declined": "Abgelehnt",
@@ -642,6 +643,7 @@
"Default (Local Time Zone)": "Standard (Lokale Zeitzone)",
"Default Timed Transcript": "Standard, zeitbehaftetes Transkript",
"Delete": "L\u00f6schen",
"Delete \"<%- signatoryName %>\" from the list of signatories?": "\"<%- signatoryName %>\" von der Liste der Unterzeichner l\u00f6schen?",
"Delete File Confirmation": "Dateibest\u00e4tigung l\u00f6schen",
"Delete My Account": "Meinen Account l\u00f6schen",
"Delete Page Confirmation": "Seitenbest\u00e4tigung l\u00f6schen",
@@ -1278,6 +1280,7 @@
"Once your account is deleted, you cannot use it to take courses on the {platformName} app, {siteName}, or any other site hosted by {platformName}.": "Sobald Ihr Konto gel\u00f6scht ist, k\u00f6nnen Sie es nicht mehr verwenden, um Kurse \u00fcber die App {platformName}, {siteName} oder eine andere von {platformName} gehostete Website zu besuchen.",
"One or more rescheduling tasks failed.": "Eine oder mehrere Neuterminierungsaufgaben sind fehlgeschlagen.",
"Only ": "Nur",
"Only <%- fileTypes %> files can be uploaded. Please select a file ending in <%- (fileExtensions) %> to upload.": "Es k\u00f6nnen nur <%- fileTypes %> Dateien hochgeladen werden. Bitte w\u00e4hlen Sie eine Datei mit der Endung <%- (fileExtensions) %> zum Hochladen aus.",
"Only properly formatted .csv files will be accepted.": "Nur korrekt formatierte .csv Dateien werden hier akzeptiert.",
"Only the parent course staff of a CCX can create content groups.": "Nur die \u00fcbergeordneten Kursleiter eines CCX k\u00f6nnen Inhaltsgruppen erstellen.",
"Open": "\u00d6ffnen",
@@ -1787,6 +1790,8 @@
"The certificate for this learner has been re-validated and the system is re-running the grade for this learner.": "Das Zertifikat f\u00fcr diesen Lerner wurde erneut validiert und das System f\u00fchrt die Note f\u00fcr diesen Lerner erneut durch.",
"The cohort cannot be added": "Der Kohort kann nicht hinzugef\u00fcgt werden",
"The cohort cannot be saved": "Dieser Kohort kann nicht gespeichert werden",
"The combined length of the organization and library code fields cannot be more than <%- limit %> characters.": "Die Gesamtl\u00e4nge der Organisations- und Bibliothekscodefelder darf nicht mehr als <%- limit %> Zeichen enthalten.",
"The combined length of the organization, course number, and course run fields cannot be more than <%- limit %> characters.": "Die Gesamtl\u00e4nge der Felder \"Organisation\", \"Kursnummer\" und \"Kurslauf\" darf nicht mehr als <%- limit %> Zeichen enthalten.",
"The country or region where you live.": "Das Land oder die Stadt in der Sie leben.",
"The country that team members primarily identify with.": "Das Land mit dem sich die Teammitglieder prim\u00e4r identifizieren",
"The course end date must be later than the course start date.": "Das Datum des Kursendes kann nicht vor dem Einschreibedatum des Kurses liegen.",
@@ -1896,6 +1901,7 @@
"This feature is currently in testing. Course teams can enter highlights, but learners will not receive email messages.": "Diese Funktion befindet sich derzeit im Testslauf. Kursteams k\u00f6nnen Highlights eingeben, aber die Lernenden erhalten keine E-Mail-Benachrichtigung.",
"This feedback could not be submitted.": "Diese R\u00fcckmeldung konnte nicht \u00fcbermittelt werden.",
"This file type is not supported. Supported file type is {supportedFileFormat}.": "Dieser Dateityp wird nicht unterst\u00fctzt. Unterst\u00fctzter Dateityp ist {supportedFileFormat}.",
"This grade will be applied to all members of the team. Do you want to continue?": "Diese Benotung wird auf alle Mitglieder des Teams angewandt. Wollen Sie fortfahren?",
"This group controls access to:": "Diese Gruppe kontrolliert den Zugang zu:",
"This group no longer exists. Choose another group or do not restrict access to this unit.": "Diese Gruppe existiert nicht mehr. W\u00e4hlen Sie eine andere Gruppe oder beschr\u00e4nken Sie den Zugriff auf diese Lerneinheit nicht.",
"This image file type is not supported. Supported file types are {supportedFileFormats}.": "Dieser Bilddateityp wird nicht unterst\u00fctzt. Unterst\u00fctzte Dateitypen sind {supportedFileFormats}.",
@@ -1936,6 +1942,8 @@
"This role requires a divided discussions scheme.": "Diese Rolle erfordert ein geteiltes Diskussionsschema.",
"This section could not be loaded.": "Dieser Abschnitt konnte nicht geladen werden.",
"This short name for the assignment type (for example, HW or Midterm) appears next to assignments on a learner's Progress page.": "Diese Kurzbezeichnung f\u00fcr den Aufgabentyp (z.B. HW oder Midterm) erscheint neben den Aufgaben auf der Fortschrittsseite eines Lernenden.",
"This special exam has been released to learners. You may not convert it to another type of special exam. You may revert this subsection back to being a basic exam by selecting 'None', but you will NOT be able to configure it as a special exam in the future.": "Diese Sonderpr\u00fcfung wurde f\u00fcr die Teilnehmer ver\u00f6ffentlicht und kann nicht in eine andere Art von Sonderpr\u00fcfung umgewandelt werden. Dieser Unterabschnitt kann jedoch wieder in eine Basispr\u00fcfung umgewandelt werden, indem Sie \"None\" w\u00e4hlen. Sie k\u00f6nnen die Pr\u00fcfung in Zukunft NICHT mehr als Sonderpr\u00fcfung konfigurieren.",
"This subsection was released to learners as a special exam, but was reverted back to a basic exam. You may not configure it as a special exam now. Contact edX Support for assistance.": "Dieser Unterabschnitt wurde f\u00fcr die Teilnehmer als Sonderpr\u00fcfung ver\u00f6ffentlicht, anschlie\u00dfend aber wieder zu einer Grundpr\u00fcfung zur\u00fcckgewandelt. Die Pr\u00fcfung kann jetzt nicht mehr als Sonderpr\u00fcfung konfiguriert werden. Wenden Sie sich zur Unterst\u00fctzung an den edX-Support.",
"This team does not have any members.": "Dieses Team hat noch keine Mitglieder.",
"This team is full.": "Dieses Team ist voll.",
"This thread is closed.": "Dieses Thema ist geschlossen.",
@@ -2062,6 +2070,7 @@
"Upload Videos": "Videos hochladen",
"Upload a CSV file": "Hochladen einer CSV-Datei",
"Upload a comma separated values (.csv) file that contains the usernames or email addresses of learners who have been given exceptions. Include the username or email address in the first comma separated field. You can include an optional note describing the reason for the exception in the second comma separated field.": "Hochladen einer (.csv) Datei, in welcher die E-Mail Adressen oder der Benutzername der jeweiligen Teilnehmer, welche Sie zu der Ausnahmeliste hinzuf\u00fcgen m\u00f6chten, eingetragen sind. Bitte beachten Sie hierbei, dass die Eintr\u00e4ge durch Komma separiert werden. ",
"Upload a new PDF to \u201c<%- name %>\u201d": "Eine neue PDF zu \u201c<%- name %>\u201d hochladen ",
"Upload an image": "Ein Bild hochladen",
"Upload an image or capture one with your web or phone camera.": "Bitte laden Sie ein Bild hoch oder nehmen Sie ein Foto mit ihr webcam oder Handy.",
"Upload completed": "Hochladen fertiggestellt",

View File

@@ -562,6 +562,7 @@
"Create account using %(providerName)s.": "%(providerName)s kullanarak bir hesap olu\u015ftur.",
"Create an Account": "Bir Hesap Olu\u015ftur",
"Create an Account.": "Bir Hesap Olu\u015ftur.",
"Create an account": "Yeni hesap olu\u015ftur",
"Create an account using": "\u015eununla bir hesap olu\u015ftur",
"Create team.": "Tak\u0131m olu\u015ftur.",
"Created": "Olu\u015fturuldu",
@@ -755,6 +756,7 @@
"Error getting the number of ungraded responses": "Notland\u0131r\u0131lmam\u0131\u015f cevaplar\u0131n say\u0131s\u0131n\u0131 \u00e7ekmede hata",
"Error importing course": "Dersi i\u00e7e aktar\u0131rken hata ",
"Error listing task history for this student and problem.": "Bu \u00f6\u011frenci ve problem i\u00e7in g\u00f6rev tarih\u00e7esi listelemede hata",
"Error posting your message.": "\u0130letinizi y\u00fcklerken sorun \u00e7\u0131kt\u0131.",
"Error removing user": "Kullan\u0131c\u0131 kald\u0131r\u0131rken hata olu\u015ftu",
"Error resetting entrance exam attempts for student '{student_id}'. Make sure student identifier is correct.": "'{student_id}' \u00f6\u011frencisi i\u00e7in giri\u015f s\u0131nav\u0131 denemeleri s\u0131f\u0131rlan\u0131rken hata olu\u015ftu. \u00d6\u011frenci belirleyicinin do\u011fru oldu\u011fundan emin olun.",
"Error retrieving grading configuration.": "Notland\u0131rma konfig\u00fcrasyonunu al\u0131rken hata",
@@ -2203,6 +2205,7 @@
"delete group": "grubu sil",
"details about the failure": "ba\u015far\u0131s\u0131zl\u0131\u011fa dair ayr\u0131nt\u0131lar",
"discussion": "tart\u0131\u015fma",
"discussion posted %(time_ago)s by %(author)s": "tart\u0131\u015fma %(author)s taraf\u0131ndan %(time_ago)s \u00f6nce ba\u015flat\u0131ld\u0131",
"dragging": "s\u00fcr\u00fckleme",
"dragging out of slider": "Kayd\u0131r\u0131c\u0131n\u0131n d\u0131\u015f\u0131na s\u00fcr\u00fckleme",
"dropped in slider": "kayd\u0131r\u0131c\u0131ya b\u0131rak\u0131ld\u0131",
@@ -2240,6 +2243,7 @@
"or sign in with": "veya oturum a\u00e7\u0131n",
"pending": "beklemede",
"post anonymously": "isimsiz olarak ileti yolla",
"post anonymously to classmates": "s\u0131n\u0131f arkada\u015flar\u0131na anonim olarak ileti g\u00f6nder",
"posted %(time_ago)s by %(author)s": "%(author)s taraf\u0131ndan %(time_ago)s \u00f6nce g\u00f6nderildi",
"practice": "al\u0131\u015ft\u0131rma",
"price": "\u00fccret",

View File

@@ -11,6 +11,7 @@ import HeaderView from './program_header_view';
import SidebarView from './program_details_sidebar_view';
import pageTpl from '../../../templates/learner_dashboard/program_details_view.underscore';
import trackECommerceEvents from '../../commerce/track_ecommerce_events';
class ProgramDetailsView extends Backbone.View {
constructor(options) {
@@ -43,6 +44,13 @@ class ProgramDetailsView extends Backbone.View {
);
this.render();
const $courseUpsellButton = $('#program_dashboard_course_upsell_all_button');
trackECommerceEvents.trackUpsellClick($courseUpsellButton, 'program_dashboard_program', {
linkType: 'button',
pageName: 'program_dashboard',
linkCategory: 'green_upgrade',
});
}
static getUrl(base, programData) {

View File

@@ -3,12 +3,20 @@ import Backbone from 'backbone';
import HtmlUtils from 'edx-ui-toolkit/js/utils/html-utils';
import upgradeMessageTpl from '../../../templates/learner_dashboard/upgrade_message.underscore';
import trackECommerceEvents from '../../commerce/track_ecommerce_events';
class UpgradeMessageView extends Backbone.View {
initialize(options) {
this.messageTpl = HtmlUtils.template(upgradeMessageTpl);
this.$el = options.$el;
this.render();
const courseUpsellButtons = this.$el.find('.program_dashboard_course_upsell_button');
trackECommerceEvents.trackUpsellClick(courseUpsellButtons, 'program_dashboard_course', {
linkType: 'button',
pageName: 'program_dashboard',
linkCategory: 'green_upgrade',
});
}
render() {

View File

@@ -126,7 +126,10 @@ var edx = edx || {};
// Get or create the step container
$stepEl = $('#current-step-container');
if (!$stepEl.length) {
$stepEl = $('<div id="current-step-container"></div>').appendTo(this.el);
$stepEl = edx.HtmlUtils.append(
$(this.el),
edx.HtmlUtils.HTML('<div id="current-step-container"></div>').toString()
);
}
// Render the subview

View File

@@ -83,7 +83,10 @@
// Get or create the step container
$stepEl = $('#current-step-container');
if (!$stepEl.length) {
$stepEl = $('<div id="current-step-container"></div>').appendTo(this.el);
$stepEl = edx.HtmlUtils.append(
$(this.el),
edx.HtmlUtils.HTML('<div id="current-step-container"></div>').toString()
);
}
// Render the step subview

View File

@@ -38,7 +38,7 @@
return optionVal || default_value;
},
submitButton, resultNotification;
// xss-lint: disable=javascript-jquery-html
this.$el.html(this.template({
title: get_option_with_default('title', ''),
inputLabel: get_option_with_default('inputLabel', ''),

View File

@@ -1,15 +1,16 @@
(function(define) {
'use strict';
define([
'gettext', 'jquery', 'underscore', 'backbone', 'js/views/fields',
'gettext', 'jquery', 'underscore', 'backbone',
'edx-ui-toolkit/js/utils/html-utils', 'js/views/fields',
'text!templates/fields/field_image.underscore',
'backbone-super', 'jquery.fileupload'
], function(gettext, $, _, Backbone, FieldViews, field_image_template) {
], function(gettext, $, _, Backbone, HtmlUtils, FieldViews, FieldImageTemplate) {
var ImageFieldView = FieldViews.FieldView.extend({
fieldType: 'image',
fieldTemplate: field_image_template,
fieldTemplate: FieldImageTemplate,
uploadButtonSelector: '.upload-button-input',
titleAdd: gettext('Upload an image'),
@@ -44,7 +45,7 @@
},
render: function() {
this.$el.html(this.template({
var attributes = {
id: this.options.valueAttribute,
inputName: (this.options.inputName || 'file'),
imageUrl: _.result(this, 'imageUrl'),
@@ -54,7 +55,8 @@
removeButtonIcon: _.result(this, 'iconRemove'),
removeButtonTitle: _.result(this, 'removeButtonTitle'),
screenReaderTitle: _.result(this, 'screenReaderTitle')
}));
};
this.$el.html(HtmlUtils.HTML(this.template(attributes)).toString());
this.delegateEvents();
this.updateButtonsVisibility();
this.watchForPageUnload();
@@ -184,14 +186,14 @@
showUploadInProgressMessage: function() {
this.$('.u-field-upload-button').addClass('in-progress');
this.$('.upload-button-icon').html(this.iconProgress);
this.$('.upload-button-title').html(this.titleUploading);
HtmlUtils.setHtml(this.$('.upload-button-icon'), HtmlUtils.HTML(this.iconProgress));
HtmlUtils.setHtml(this.$('.upload-button-title'), HtmlUtils.HTML(this.titleUploading));
},
showRemovalInProgressMessage: function() {
this.$('.u-field-remove-button').css('opacity', 1);
this.$('.remove-button-icon').html(this.iconProgress);
this.$('.remove-button-title').html(this.titleRemoving);
HtmlUtils.setHtml(this.$('.remove-button-icon'), HtmlUtils.HTML(this.iconProgress));
HtmlUtils.setHtml(this.$('.remove-button-title'), HtmlUtils.HTML(this.titleRemoving));
},
setCurrentStatus: function(status) {

View File

@@ -27,7 +27,8 @@
urgency: 'high',
type: '',
hideCloseBtn: true,
isRecoveryEmailMsg: false
isRecoveryEmailMsg: false,
isLearnerPortalEnabled: false
});
},

View File

@@ -9,7 +9,7 @@
},
render: function() {
this.$el.html(this.template({
this.$el.html(this.template({ // xss-lint: disable=javascript-jquery-html
type: this.model.get('type'),
title: this.model.get('title'),
message: this.model.get('message'),

View File

@@ -99,10 +99,7 @@
}
.no-access {
// This is too low-contrast for a11y purposes. But since it only applies to pieces of the page that are
// inaccessible to users, and we have a banner explaining the parts that are inaccessible at the top,
// we're OK from an accessibility point of view.
color: #d1d2d4;
color: #767676;
}
.timeline-date-content {
@@ -115,10 +112,14 @@
align-items: center;
&.not-released {
color: #767676;
color: #b1a3a3;
}
}
.timeline-date {
color: #2d323e;
}
.timeline-title {
@include font-size(14);
@@ -134,7 +135,7 @@
}
&.not-released {
color: #d1d2d4;
color: #767676;
}
}
@@ -149,8 +150,30 @@
color: #2d323e;
text-decoration: underline;
}
&.not-released {
color: #767676;
}
}
.timeline-extra-info {
@include font-size(14);
display: flex;
flex: 100%;
line-height: 1.25;
a {
color: #2d323e;
text-decoration: underline;
}
&.not-released {
color: #767676;
}
}
.pill {
@include font-size(12);

View File

@@ -114,13 +114,15 @@
}
}
&.recovery-email-alert {
&.recovery-email-alert,
&.learner-portal-enabled-alert {
&#banner-msg {
position: relative;
top: -10px;
padding: 20px 40px;
background: $state-info-bg;
box-shadow: none;
border-top: 1px solid #579cc5;
padding: 20px 20px 20px 40px;
margin: -16px 0 10px 0;
}
.fa-close {
@@ -133,6 +135,12 @@
}
}
&.learner-portal-enabled-alert {
&#banner-msg {
margin-bottom: 10px;
}
}
&.urgency-low {
background: $notify-banner-bg-3;
box-shadow: 0 1px 2px $shadow;