bedf10056b
Also: - All the necessary wire-up to update things in real time. If you have a safety number page up via a group member view as well as via a 1:1 conversation with that contact, they'll both be updated as the underlying model changes. Similarly, the overall group will update in real-time as members change. - A bit of special-casing for yourself in a group conversation - you're shown as 'me' and are not clickable, where normally that would take you to the Safety Number screen for that contact. You are also not included in the trust calculations for a given group. FREEBIE
40 lines
1.1 KiB
JavaScript
40 lines
1.1 KiB
JavaScript
/*
|
|
* vim: ts=4:sw=4:expandtab
|
|
*/
|
|
(function () {
|
|
'use strict';
|
|
window.Whisper = window.Whisper || {};
|
|
|
|
/*
|
|
* Generic list view that watches a given collection, wraps its members in
|
|
* a given child view and adds the child view elements to its own element.
|
|
*/
|
|
Whisper.ListView = Backbone.View.extend({
|
|
tagName: 'ul',
|
|
itemView: Backbone.View,
|
|
initialize: function(options) {
|
|
this.options = options || {};
|
|
this.listenTo(this.collection, 'add', this.addOne);
|
|
this.listenTo(this.collection, 'reset', this.addAll);
|
|
},
|
|
|
|
addOne: function(model) {
|
|
if (this.itemView) {
|
|
var options = Object.assign({}, this.options.toInclude, {model: model});
|
|
var view = new this.itemView(options);
|
|
this.$el.append(view.render().el);
|
|
this.$el.trigger('add');
|
|
}
|
|
},
|
|
|
|
addAll: function() {
|
|
this.$el.html('');
|
|
this.collection.each(this.addOne, this);
|
|
},
|
|
|
|
render: function() {
|
|
this.addAll();
|
|
return this;
|
|
}
|
|
});
|
|
})();
|