diff --git a/index.html b/index.html
index 9566067edc..c958f51f61 100644
--- a/index.html
+++ b/index.html
@@ -159,6 +159,7 @@
+
diff --git a/js/index.js b/js/index.js
index 8f825dfbde..e5a4187290 100644
--- a/js/index.js
+++ b/js/index.js
@@ -15,63 +15,14 @@
* along with this program. If not, see .
*/
(function () {
- 'use strict';
- Whisper.Layout = new (Backbone.View.extend({
- initialize: function () {
- this.gutter = $('#gutter');
- this.contacts = $('#contacts');
- this.resize();
+ 'use strict';
- window.addEventListener('resize', this.resize.bind(this));
-
- new Whisper.ConversationListView({el: $('#contacts'), collection: Whisper.Conversations});
- Whisper.Conversations.fetch({reset: true}).then(function() {
- if (Whisper.Conversations.length) {
- Whisper.Conversations.at(0).trigger('render');
- }
- });
-
- },
- events: {
- 'click #new-message': 'new_message',
- 'click #new-group': 'new_group'
- },
-
- new_message: function (e) {
- e.preventDefault();
- $('.conversation').hide().trigger('close'); // detach any existing conversation views
- this.view = new Whisper.NewConversationView();
- //todo: less new
- },
-
- new_group: function (e) {
- e.preventDefault();
- $('.conversation').trigger('close'); // detach any existing conversation views
- new Whisper.NewGroupView();
- },
- resize: function (e) {
- var windowheight = window.innerHeight,
- form = $('.send-message-area').outerHeight(),
- gutter_offset = this.gutter.offset().top,
- contacts_offset = this.contacts.offset().top;
- if (window.innerWidth < 480) {
- this.gutter.css('height', windowheight - gutter_offset - form);
- this.contacts.css('height', windowheight - contacts_offset - form);
- } else {
- this.gutter.css('height', windowheight - gutter_offset);
- this.contacts.css('height', windowheight - contacts_offset);
- }
- $('.discussion').css('height', windowheight - gutter_offset - form);
- },
- setContent: function (content) {
- $(content).insertAfter(this.gutter);
- this.resize();
- }
- }))({el: document});
+ window.Whisper = window.Whisper || {};
if (textsecure.storage.getUnencrypted("number_id") === undefined) {
window.location = '/options.html';
} else {
+ Whisper.Layout = new Whisper.InboxView({el: document});
textsecure.storage.putUnencrypted("unreadCount", 0);
extension.navigator.setBadgeText("");
}
diff --git a/js/models/conversations.js b/js/models/conversations.js
index b831731223..f65adebc2a 100644
--- a/js/models/conversations.js
+++ b/js/models/conversations.js
@@ -59,12 +59,13 @@
sendMessage: function(message, attachments) {
return encodeAttachments(attachments).then(function(base64_attachments) {
var timestamp = Date.now();
- this.messages().add({ body: message,
- timestamp: timestamp,
- conversationId: this.id,
- conversationType: this.get('type'),
- type: 'outgoing',
- attachments: base64_attachments
+ this.messageCollection.add({
+ body : message,
+ timestamp : timestamp,
+ conversationId : this.id,
+ conversationType : this.get('type'),
+ type : 'outgoing',
+ attachments : base64_attachments
}).save();
this.save({ timestamp: timestamp,
@@ -88,7 +89,7 @@
var conversation = this;
return encodeAttachments(decrypted.message.attachments).then(function(base64_attachments) {
var timestamp = decrypted.pushMessage.timestamp.toNumber();
- var m = this.messages().add({
+ var m = this.messageCollection.add({
body: decrypted.message.body,
timestamp: timestamp,
conversationId: this.id,
@@ -103,19 +104,15 @@
}
this.save({unreadCount: this.get('unreadCount') + 1, active: true});
- return new Promise(function (resolve) { m.save().then(resolve) });
+ return new Promise(function (resolve) { m.save().then(resolve(m)) });
}.bind(this));
},
- fetch: function(options) {
+ fetchMessages: function(options) {
options = options || {};
options.conditions = {conversationId: this.id };
return this.messageCollection.fetch(options);
- },
-
- messages: function() {
- return this.messageCollection;
- },
+ }
});
Whisper.ConversationCollection = Backbone.Collection.extend({
diff --git a/js/views/conversation_view.js b/js/views/conversation_view.js
index 92ff5ec246..9f4d612392 100644
--- a/js/views/conversation_view.js
+++ b/js/views/conversation_view.js
@@ -13,10 +13,9 @@
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*/
-var Whisper = Whisper || {};
-
(function () {
'use strict';
+ window.Whisper = window.Whisper || {};
Whisper.ConversationView = Backbone.View.extend({
className: 'conversation',
@@ -31,12 +30,11 @@ var Whisper = Whisper || {};
});
this.view = new Whisper.MessageListView({
- collection: this.model.messages()
+ collection: this.model.messageCollection
});
this.$el.find('.discussion-container').append(this.view.el);
- this.model.fetch({reset: true});
- extension.onMessage('message', this.model.fetch.bind(this.model));
+ this.model.fetchMessages({reset: true});
},
events: {
@@ -60,7 +58,6 @@ var Whisper = Whisper || {};
render: function() {
Whisper.Layout.setContent(this.$el.show());
- this.view.scrollToBottom();
return this;
}
});
diff --git a/js/views/inbox_view.js b/js/views/inbox_view.js
new file mode 100644
index 0000000000..dafeed36ab
--- /dev/null
+++ b/js/views/inbox_view.js
@@ -0,0 +1,80 @@
+/* vim: ts=4:sw=4:expandtab
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see .
+ */
+(function () {
+ 'use strict';
+
+ window.Whisper = window.Whisper || {};
+
+ Whisper.InboxView = Backbone.View.extend({
+ initialize: function () {
+ this.gutter = $('#gutter');
+ this.contacts = $('#contacts');
+ this.resize();
+
+ window.addEventListener('resize', this.resize.bind(this));
+ this.conversations = new Whisper.ConversationCollection();
+
+ new Whisper.ConversationListView({el: $('#contacts'), collection: Whisper.Conversations});
+ Whisper.Conversations.fetch({reset: true}).then(function() {
+ if (Whisper.Conversations.length) {
+ Whisper.Conversations.at(0).trigger('render');
+ }
+ });
+ extension.onMessage('message', function(message) {
+ Whisper.Conversations.fetch({id: message.conversationId}).then(function() {
+ Whisper.Conversations.get(message.conversationId).fetchMessages();
+ });
+ }.bind(this));
+
+ },
+ events: {
+ 'click #new-message': 'new_message',
+ 'click #new-group': 'new_group'
+ },
+
+ new_message: function (e) {
+ e.preventDefault();
+ $('.conversation').hide().trigger('close'); // detach any existing conversation views
+ this.view = new Whisper.NewConversationView();
+ //todo: less new
+ },
+
+ new_group: function (e) {
+ e.preventDefault();
+ $('.conversation').trigger('close'); // detach any existing conversation views
+ new Whisper.NewGroupView();
+ },
+ resize: function (e) {
+ var windowheight = window.innerHeight,
+ form = $('.send-message-area').outerHeight(),
+ gutter_offset = this.gutter.offset().top,
+ contacts_offset = this.contacts.offset().top;
+ if (window.innerWidth < 480) {
+ this.gutter.css('height', windowheight - gutter_offset - form);
+ this.contacts.css('height', windowheight - contacts_offset - form);
+ } else {
+ this.gutter.css('height', windowheight - gutter_offset);
+ this.contacts.css('height', windowheight - contacts_offset);
+ }
+ $('.discussion').css('height', windowheight - gutter_offset - form);
+ },
+ setContent: function (content) {
+ $(content).insertAfter(this.gutter);
+ this.resize();
+ }
+ });
+
+})();
diff --git a/js/views/message_list_view.js b/js/views/message_list_view.js
index 18f727918f..ea8edfb763 100644
--- a/js/views/message_list_view.js
+++ b/js/views/message_list_view.js
@@ -19,6 +19,7 @@ var Whisper = Whisper || {};
var view = new this.itemView({model: model});
this.$el.prepend(view.render().el);
}, this);
+ this.scrollToBottom();
},
});
})();