2015-09-07 23:53:43 +02:00
|
|
|
/*
|
|
|
|
* vim: ts=4:sw=4:expandtab
|
2014-11-13 23:36:09 +01:00
|
|
|
*/
|
2014-09-01 02:58:36 +02:00
|
|
|
(function () {
|
2015-03-06 00:38:39 +01:00
|
|
|
'use strict';
|
2015-03-06 00:44:53 +01:00
|
|
|
window.Whisper = window.Whisper || {};
|
2014-09-01 02:58:36 +02:00
|
|
|
|
2015-03-06 00:38:39 +01:00
|
|
|
Whisper.NewConversationView = Whisper.View.extend({
|
|
|
|
className: 'new-conversation',
|
|
|
|
template: $('#new-conversation').html(),
|
2015-06-04 22:29:01 +02:00
|
|
|
initialize: function(options) {
|
2015-03-06 00:38:39 +01:00
|
|
|
this.render();
|
2015-09-04 22:11:21 +02:00
|
|
|
this.$group_update = this.$('.group-info-input');
|
2015-03-28 02:47:58 +01:00
|
|
|
this.$create = this.$('.create');
|
2015-01-29 05:22:41 +01:00
|
|
|
|
2015-03-06 00:38:39 +01:00
|
|
|
// Group avatar file input
|
2015-06-04 22:29:01 +02:00
|
|
|
this.appWindow = options.appWindow;
|
2015-03-06 00:38:39 +01:00
|
|
|
this.avatarInput = new Whisper.FileInputView({
|
2015-06-04 22:29:01 +02:00
|
|
|
el: this.$('.group-avatar'),
|
|
|
|
window: this.appWindow.contentWindow
|
2015-03-06 00:38:39 +01:00
|
|
|
});
|
2015-02-06 07:42:16 +01:00
|
|
|
|
2015-03-13 00:14:21 +01:00
|
|
|
this.recipients_view = new Whisper.RecipientsInputView();
|
2015-09-04 22:11:21 +02:00
|
|
|
this.recipients_view.$el.insertAfter(this.$('.group-info-input'));
|
2015-07-09 00:53:58 +02:00
|
|
|
this.$input = this.$('input.search');
|
|
|
|
|
2015-03-13 00:14:21 +01:00
|
|
|
this.listenTo(this.getRecipients(), 'add', this.updateControls);
|
|
|
|
this.listenTo(this.getRecipients(), 'remove', this.updateControls);
|
2015-03-06 00:38:39 +01:00
|
|
|
},
|
2014-09-01 02:58:36 +02:00
|
|
|
|
2015-09-04 22:11:21 +02:00
|
|
|
render_attributes: function() {
|
|
|
|
return {
|
|
|
|
avatar: { url: '/images/group_default.png', color: 'gray' }
|
|
|
|
};
|
|
|
|
},
|
|
|
|
|
2015-03-06 00:38:39 +01:00
|
|
|
events: {
|
2015-03-09 22:21:06 +01:00
|
|
|
'click .create': 'create',
|
|
|
|
'click .back': 'goBack',
|
|
|
|
'keyup': 'keyup'
|
|
|
|
},
|
|
|
|
|
|
|
|
keyup: function(e) {
|
|
|
|
if (e.keyCode === 27) {
|
|
|
|
this.goBack();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
goBack: function() {
|
|
|
|
this.trigger('back');
|
2015-03-06 00:38:39 +01:00
|
|
|
},
|
2015-01-29 05:22:41 +01:00
|
|
|
|
2015-03-13 00:14:21 +01:00
|
|
|
getRecipients: function() {
|
|
|
|
return this.recipients_view.recipients;
|
2015-03-06 00:38:39 +01:00
|
|
|
},
|
2015-02-06 07:42:16 +01:00
|
|
|
|
2015-03-06 00:38:39 +01:00
|
|
|
updateControls: function() {
|
2015-03-13 00:14:21 +01:00
|
|
|
if (this.getRecipients().length > 0) {
|
|
|
|
this.$create.show();
|
2015-03-06 00:38:39 +01:00
|
|
|
} else {
|
2015-03-13 00:14:21 +01:00
|
|
|
this.$create.hide();
|
2015-03-06 00:38:39 +01:00
|
|
|
}
|
2015-03-13 00:14:21 +01:00
|
|
|
if (this.getRecipients().length > 1) {
|
2015-03-06 00:38:39 +01:00
|
|
|
this.$group_update.slideDown();
|
|
|
|
} else {
|
|
|
|
this.$group_update.slideUp();
|
|
|
|
}
|
|
|
|
this.$input.focus();
|
|
|
|
},
|
2015-02-06 07:42:16 +01:00
|
|
|
|
2015-03-06 00:38:39 +01:00
|
|
|
create: function() {
|
2015-03-28 02:47:58 +01:00
|
|
|
var errors = this.recipients_view.$('.error');
|
2015-03-06 00:38:39 +01:00
|
|
|
if (errors.length) {
|
2015-02-08 05:51:52 +01:00
|
|
|
|
2015-03-06 00:38:39 +01:00
|
|
|
// TODO: css animation or error notification
|
|
|
|
errors.removeClass('error');
|
2016-02-18 02:08:50 +01:00
|
|
|
setTimeout(function() {
|
|
|
|
errors.addClass('error');
|
|
|
|
}, 300);
|
2015-02-08 05:51:52 +01:00
|
|
|
|
2015-03-06 00:38:39 +01:00
|
|
|
return;
|
2015-02-06 07:42:16 +01:00
|
|
|
}
|
2015-03-13 00:14:21 +01:00
|
|
|
if (this.getRecipients().length > 1) {
|
2015-03-06 00:38:39 +01:00
|
|
|
this.createGroup();
|
|
|
|
} else {
|
2015-08-27 21:38:51 +02:00
|
|
|
var id = this.getRecipients().at(0).id;
|
|
|
|
ConversationController.findOrCreatePrivateById(id).then(function(conversation) {
|
|
|
|
conversation.save('active_at', Date.now());
|
2015-09-21 19:21:33 +02:00
|
|
|
this.trigger('open', conversation);
|
2015-08-27 21:38:51 +02:00
|
|
|
}.bind(this));
|
2015-03-06 00:38:39 +01:00
|
|
|
}
|
|
|
|
},
|
2015-02-06 07:42:16 +01:00
|
|
|
|
2015-03-06 00:38:39 +01:00
|
|
|
createGroup: function() {
|
2015-09-04 22:11:21 +02:00
|
|
|
var name = this.$('.group-info-input .name').val();
|
2015-03-06 00:38:39 +01:00
|
|
|
if (!name.trim().length) {
|
|
|
|
return;
|
|
|
|
}
|
2015-02-09 10:39:12 +01:00
|
|
|
|
2015-06-04 20:55:23 +02:00
|
|
|
return this.avatarInput.getThumbnail().then(function(avatarFile) {
|
2015-03-24 01:33:46 +01:00
|
|
|
var members = this.getRecipients().pluck('id');
|
2015-09-15 22:57:49 +02:00
|
|
|
members.push(textsecure.storage.user.getNumber());
|
2015-05-06 22:11:12 +02:00
|
|
|
textsecure.storage.groups.createNewGroup(members).then(function(group) {
|
|
|
|
return group.id;
|
|
|
|
}).then(function(groupId) {
|
2015-09-22 04:12:06 +02:00
|
|
|
var now = Date.now();
|
|
|
|
var group = ConversationController.create({
|
2015-05-06 22:11:12 +02:00
|
|
|
id: groupId,
|
|
|
|
groupId: groupId,
|
|
|
|
type: 'group',
|
|
|
|
name: name,
|
|
|
|
avatar: avatarFile,
|
2015-08-27 02:11:01 +02:00
|
|
|
members: members,
|
2015-09-22 04:12:06 +02:00
|
|
|
active_at: now,
|
|
|
|
});
|
2015-05-06 22:11:12 +02:00
|
|
|
group.save().then(function() {
|
2015-09-21 19:21:33 +02:00
|
|
|
this.trigger('open', group);
|
2015-05-06 22:11:12 +02:00
|
|
|
}.bind(this));
|
2015-09-22 04:12:06 +02:00
|
|
|
group.updateGroup();
|
2015-01-29 05:22:41 +01:00
|
|
|
}.bind(this));
|
|
|
|
}.bind(this));
|
2015-03-06 00:38:39 +01:00
|
|
|
},
|
2015-01-26 08:44:53 +01:00
|
|
|
|
2015-03-06 00:38:39 +01:00
|
|
|
reset: function() {
|
2015-08-27 00:13:14 +02:00
|
|
|
this.delegateEvents();
|
2015-08-27 02:11:01 +02:00
|
|
|
this.avatarInput.delegateEvents();
|
2015-03-13 00:14:21 +01:00
|
|
|
this.$create.hide();
|
2015-09-04 22:11:21 +02:00
|
|
|
this.$('.group-info-input .name').val('');
|
2015-03-06 00:38:39 +01:00
|
|
|
this.$group_update.hide();
|
2015-03-13 00:14:21 +01:00
|
|
|
this.recipients_view.reset();
|
2015-03-06 00:38:39 +01:00
|
|
|
},
|
|
|
|
});
|
2014-09-01 02:58:36 +02:00
|
|
|
|
|
|
|
})();
|