Files
edx-platform/lms/static/js/edxnotes/views/note_item.js

73 lines
2.2 KiB
JavaScript

;(function (define, undefined) {
'use strict';
define([
'jquery', 'underscore','backbone', 'js/edxnotes/utils/template',
'js/edxnotes/utils/logger'
], function ($, _, Backbone, templateUtils, NotesLogger) {
var NoteItemView = Backbone.View.extend({
tagName: 'article',
className: 'note',
id: function () {
return 'note-' + _.uniqueId();
},
events: {
'click .note-excerpt-more-link': 'moreHandler',
'click .reference-unit-link': 'unitLinkHandler',
},
initialize: function (options) {
this.template = templateUtils.loadTemplate('note-item');
this.logger = NotesLogger.getLogger('note_item', options.debug);
this.listenTo(this.model, 'change:is_expanded', this.render);
},
render: function () {
var context = this.getContext();
this.$el.html(this.template(context));
return this;
},
getContext: function () {
return $.extend({}, this.model.toJSON(), {
message: this.model.getQuote(),
text: this.model.getText()
});
},
toggleNote: function () {
var value = !this.model.get('is_expanded');
this.model.set('is_expanded', value);
},
moreHandler: function (event) {
event.preventDefault();
this.toggleNote();
},
unitLinkHandler: function (event) {
var REQUEST_TIMEOUT = 2000;
event.preventDefault();
this.logger.emit('edx.student_notes.used_unit_link', {
'note_id': this.model.get('id'),
'component_usage_id': this.model.get('usage_id')
}, REQUEST_TIMEOUT).always(_.bind(function () {
this.redirectTo(event.target.href);
}, this));
},
redirectTo: function (uri) {
window.location = uri;
},
remove: function () {
this.logger.destroy();
Backbone.View.prototype.remove.call(this);
return this;
}
});
return NoteItemView;
});
}).call(this, define || RequireJS.define);