diff --git a/background.html b/background.html index 30017728..18a72e18 100644 --- a/background.html +++ b/background.html @@ -25,8 +25,9 @@ - + + diff --git a/conversation.html b/conversation.html index 284a8313..c8f3cfb3 100644 --- a/conversation.html +++ b/conversation.html @@ -12,11 +12,13 @@ + - - diff --git a/js/background.js b/js/background.js index af872969..7e90dfb9 100644 --- a/js/background.js +++ b/js/background.js @@ -223,13 +223,12 @@ }); }; - extension.on('log', console.log.bind(console)); + var windowMap = Whisper.windowMap = new Whisper.Bimap('windowId', 'modelId'); - chrome.runtime.onConnect.addListener(function (port) { - if (port.name === 'panel_presence') { - port.onDisconnect.addListener(function (message) { - closeConversation(message.sender.tab.windowId); - }); + // make sure panels are cleaned up on close + chrome.windows.onRemoved.addListener(function (windowId) { + if (windowMap.windowId[windowId]) { + closeConversation(windowId); } }); diff --git a/js/bimap.js b/js/bimap.js new file mode 100644 index 00000000..88691f30 --- /dev/null +++ b/js/bimap.js @@ -0,0 +1,75 @@ +/*global $, Whisper, Backbone, textsecure, extension*/ +/* 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 . + */ + + +// A bidirectional hash that allows constant-time lookup for +// key -> value and value -> key +(function () { + 'use strict'; + + window.Whisper = window.Whisper || {}; + + function Bimap (map1, map2) { + if (typeof map1 !== 'string' || typeof map2 !== 'string') { + throw 'Expected two map name strings as arguments'; + } + + this.bijection = {}; + this.bijection[map1] = map2; + this.bijection[map2] = map1; + + // makes accessing the maps clearer + this[map1] = {}; + this[map2] = {}; + + this[map1 + 'From'] = function (key) { return this[map2][key]; }; + this[map2 + 'From'] = function (key) { return this[map1][key]; }; + } + + Bimap.prototype.add = function (obj) { + if (typeof obj !== 'object') { + throw 'Expected an object as an argument'; + } + + var keys = Object.keys(obj); + var map1 = keys[0]; + var map2 = keys[1]; + + if (this.bijection[map1] !== map2) { + throw 'Expected the argument\'s keys to correspond to the Bimap\'s two map names'; + } + + this[map1][obj[map1]] = obj[map2]; + this[map2][obj[map2]] = obj[map1]; + }; + + Bimap.prototype.remove = function remove (map, key) { + var bijection = this.bijection[map]; + var correspondingKey = this[map][key]; + + // delete from the bijection + delete this[bijection][correspondingKey]; + + // delete from the specified map + delete this[map][key]; + + return correspondingKey; + }; + + // export + Whisper.Bimap = Bimap; +})(); diff --git a/js/conversation_panel.js b/js/conversation_panel.js index afbf7ed6..f1f81171 100644 --- a/js/conversation_panel.js +++ b/js/conversation_panel.js @@ -26,32 +26,16 @@ }); }; - var windowId, windowMap = JSON.parse(localStorage.getItem('idPairs')); - - window.addEventListener('storage', function (e) { - if (e.key = 'idPairs') { - windowMap = JSON.parse(e.newValue); - - if (windowId) { - var conversationId = windowMap[windowId]; - - if (conversationId) { - loadConversation(conversationId); - } - } - } - }); + var bg = chrome.extension.getBackgroundPage(); chrome.windows.getCurrent(function (windowInfo) { - window.document.title = windowId = windowInfo.id; + var windowId = window.document.title = windowInfo.id; - var conversationId = windowMap[windowId]; + // close the panel if background.html is refreshed + bg.addEventListener('beforeunload', function () { + chrome.windows.remove(windowId); + }); - if (typeof conversationId !== 'undefined') { - loadConversation(conversationId); - } + loadConversation(bg.Whisper.windowMap.modelIdFrom(windowId)); }); - - // lets background.js know when a panel disconnects - var port = chrome.runtime.connect({name: "panel_presence"}); }()); diff --git a/js/panel_controller.js b/js/panel_controller.js index 9b29ebe2..1c6a7b64 100644 --- a/js/panel_controller.js +++ b/js/panel_controller.js @@ -15,39 +15,22 @@ * along with this program. If not, see . */ +// This script should only be included in background.html +// Whisper.windowMap is defined in background.js (function () { 'use strict'; window.Whisper = window.Whisper || {}; - // TODO: RJS - // resetting for now, but super fragile: - // 1. if this file is included in conversation.html we're doomed. - // 2. if index.html is refreshed, duplicates can be opened - // 2.5. ...and refreshing conversation windows will fuck up. - if (!localStorage.getItem('activeConversations')) { - localStorage.setItem('activeConversations', '{}'); - } + var windowMap = Whisper.windowMap; - if (!localStorage.getItem('idPairs')) { - localStorage.setItem('idPairs', '{}'); - } - - // TODO: RJS - // How do we normally export from modules like this? - // Is it necessary to have n copies of each of these scripts..? - // (n Whisper objects, etc in existence) Using localStorage for - // sync feels like a hack... - // window.openConversation = function openConversation (modelId) { - var activeConversations = JSON.parse(localStorage.getItem('activeConversations')); - var windowId = activeConversations[modelId]; + + var windowId = windowMap.windowIdFrom(modelId); // prevent multiple copies of the same conversation from being opened if (!windowId) { - localStorage.setItem('activeConversations', JSON.stringify(activeConversations)); - - // open the window + // open the panel chrome.windows.create({ url: 'conversation.html', type: 'panel', @@ -58,40 +41,26 @@ var idPairs = JSON.parse(localStorage.getItem('idPairs')); var newWindowId = windowInfo.id; - // TODO: RJS - // should we make a class for bijection? - // bit sketchy that we have to keep these two hashes synced... - activeConversations[modelId] = newWindowId; - idPairs[newWindowId] = modelId; - - localStorage.setItem('activeConversations', JSON.stringify(activeConversations)); - localStorage.setItem('idPairs', JSON.stringify(idPairs)); + windowMap.add({ + windowId: windowInfo.id, + modelId: modelId + }); }); } else { - try { - chrome.windows.update(windowId, { focused: true }, function () { - if (chrome.runtime.lastError) { - window.closeConversation(windowId); - } else { - // Tab exists - } - }); - } catch (err) { - // TODO: RJS - // - should check the err type - // - should open a new panel here - } + // focus the panel + chrome.windows.update(windowId, { focused: true }, function () { + if (chrome.runtime.lastError) { + // panel isn't actually open... + window.closeConversation(windowId); + + // ...and so we try again. + openConversation(modelId); + } + }); } }; window.closeConversation = function closeConversation (windowId) { - var activeConversations = JSON.parse(localStorage.getItem('activeConversations')); - var idPairs = JSON.parse(localStorage.getItem('idPairs')); - - delete activeConversations[idPairs[windowId]]; - delete idPairs[windowId]; - - localStorage.setItem('activeConversations', JSON.stringify(activeConversations)); - localStorage.setItem('idPairs', JSON.stringify(idPairs)); + windowMap.remove('windowId', windowId); }; -}()); +})(); diff --git a/js/views/conversation_list_item_view.js b/js/views/conversation_list_item_view.js index e221d282..5cd8d0ca 100644 --- a/js/views/conversation_list_item_view.js +++ b/js/views/conversation_list_item_view.js @@ -19,6 +19,8 @@ var Whisper = Whisper || {}; (function () { 'use strict'; + var bg = chrome.extension.getBackgroundPage(); + // list of conversations, showing user/group and last message sent Whisper.ConversationListItemView = Backbone.View.extend({ tagName: 'div', @@ -45,7 +47,7 @@ var Whisper = Whisper || {}; this.view = new Whisper.ConversationView({ model: this.model }); } - openConversation(modelId); + bg.openConversation(modelId); this.model.collection.trigger('selected', this.view); }, diff --git a/js/views/conversation_view.js b/js/views/conversation_view.js index ef8b1b3b..3216a9e9 100644 --- a/js/views/conversation_view.js +++ b/js/views/conversation_view.js @@ -38,7 +38,7 @@ collection: this.model.messageCollection }); $('#header').after(this.view.el); -//new ...({el: $(#conversation-container)}) + this.model.fetchMessages({reset: true}); }, @@ -46,7 +46,9 @@ 'submit .send': 'sendMessage', 'close': 'remove', 'click .destroy': 'destroyMessages', - 'click .new-group-update': 'newGroupUpdate' + 'click .new-group-update': 'newGroupUpdate', + 'click .settings-btn': 'toggleSettings', + 'click .go-back': 'toggleSettings' }, newGroupUpdate: function() { @@ -83,20 +85,13 @@ } }, - /*addAll: function() { - this.collection.each(this.addOne); + toggleSettings: function (e) { + $('body').toggleClass('settings-open'); + console.log('toggling'); + debugger; }, - addOne: function(model) { - var view = new Whisper.Message({model: model}); - view.render(); - $(this.el).append(view.el); - model.bind('remove', view.remove); - },*/ render: function() { - //this.$el.empty(); - //this.addAll(); - this.delegateEvents(); this.view.delegateEvents(); this.view.scrollToBottom(); diff --git a/stylesheets/manifest.css b/stylesheets/manifest.css index d1921055..7577a0ee 100644 --- a/stylesheets/manifest.css +++ b/stylesheets/manifest.css @@ -51,6 +51,7 @@ button { font-size: 12px; } .message-list { + margin-bottom: 52px; padding: 0; list-style: none; font-size: 16px; @@ -207,4 +208,12 @@ button { .index .message-list { display: none; } +.settings { + height: 100%; + width: 100%; + background: red; + display: none; } + .settings-open .settings { + display: block; } + /*# sourceMappingURL=manifest.css.map */ diff --git a/stylesheets/manifest.css.map b/stylesheets/manifest.css.map index 067760d5..14ecc971 100644 --- a/stylesheets/manifest.css.map +++ b/stylesheets/manifest.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "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", +"mappings": "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", "sources": ["view/_conversation.scss","_variables.scss"], "names": [], "file": "manifest.css" diff --git a/stylesheets/view/_conversation.scss b/stylesheets/view/_conversation.scss index 20ea696d..1739584c 100644 --- a/stylesheets/view/_conversation.scss +++ b/stylesheets/view/_conversation.scss @@ -62,6 +62,7 @@ button { } .message-list { + margin-bottom: 36px + 16px; padding: 0; list-style: none; font-size: 16px; @@ -300,3 +301,14 @@ button { } } + +.settings { + height: 100%; + width: 100%; + background: red; + display: none; + + .settings-open & { + display: block; + } +} \ No newline at end of file