diff --git a/chromesoul.html b/chromesoul.html index a4b6b9c..786bdfe 100644 --- a/chromesoul.html +++ b/chromesoul.html @@ -38,6 +38,7 @@ + diff --git a/lib/contacts.nsui.js b/lib/contacts.nsui.js new file mode 100644 index 0000000..83c484e --- /dev/null +++ b/lib/contacts.nsui.js @@ -0,0 +1,78 @@ +// +// Copyright (c) 2012 Rodolphe Breard +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// + +var ContactList = function() { + this.storage = chrome.storage.sync; + this.contacts = {}; + this.lst = document.getElementById("contact-lst"); +}; + +ContactList.prototype.addContact = function(name) { + var el = null; + + if (typeof this.contacts[name] === "undefined") { + el = document.createElement("li"); + el.innerHTML = name; + el.addEventListener("dblclick", function() { + var nel = $cs.ui.addNewTab(this.innerHTML); + + $cs.ui.hideAllTabs(); + nel.show(); + }); + this.contacts[name] = el; + this.save(); + this.lst.appendChild(el); + } +}; + +ContactList.prototype.save = function() { + var i, data = {"contact_list": []}; + + for (i in this.contacts) { + if (this.contacts.hasOwnProperty(i)) { + data.contact_list.push(i); + } + } + data.contact_list.sort(); + this.storage.set(data, function() {}); +}; + +ContactList.prototype.restore = function() { + this.storage.get("contact_list", (function(elem) { + return function(items) { + elem.contacts = {}; + elem.lst.innerHTML = ""; + if (typeof items.contact_list !== "undefined") { + for (i = items.contact_list.length - 1; i >= 0; --i) { + elem.addContact(items.contact_list[i]); + } + } + }; + })(this)); +}; + +ContactList.prototype.init = function() { + var add_btn = document.getElementById("add-contact"); + + this.restore(); + this.save(); + add_btn.addEventListener("keyup", function(event) { + if (event.keyCode == 13 && this.value != "") { + $cs.contacts.addContact(this.value); + this.value = ""; + } + }); +}; diff --git a/lib/nsui.js b/lib/nsui.js index 68bf69b..b569cf2 100644 --- a/lib/nsui.js +++ b/lib/nsui.js @@ -80,7 +80,7 @@ Nsui.prototype.getNextTab = function(current_name) { return prev; } -Nsui.prototype.addContentToTab = function(tab_name, content) { +Nsui.prototype.addNewTab = function(tab_name) { var tab = this.getTabByName(tab_name); if (tab === null) { @@ -89,13 +89,19 @@ Nsui.prototype.addContentToTab = function(tab_name, content) { if (!tab.isCurrent()) { tab.setActive(); } + + return tab; +}; + +Nsui.prototype.addContentToTab = function(tab_name, content) { + var tab = this.addNewTab(tab_name); tab.appendText(this.formatMessage(content)); }; Nsui.prototype.formatMessage = function(msg) { var fmt = ""; - if (msg.login !== null) { + if (typeof msg.login !== "undefined" && msg.login !== null) { fmt += '' + msg.login + ': '; } else { fmt += '' + document.getElementById('login').value + ': '; diff --git a/lib/tab.nsui.js b/lib/tab.nsui.js index 52ff30a..4474a9b 100644 --- a/lib/tab.nsui.js +++ b/lib/tab.nsui.js @@ -78,6 +78,7 @@ Tab.prototype.initBodyElement = function() { if (typeof $cs.client !== "undefined") { $cs.client.sendMessage(elem.name, msg); + $cs.ui.addContentToTab(elem.name, {"message": msg}); } else { console.error("chromesoul client not found"); } diff --git a/start.js b/start.js index 7590464..e053fc9 100644 --- a/start.js +++ b/start.js @@ -2,6 +2,7 @@ var chromesoul = (function() { var chromesoul = { "opts": new OptionsManager(), "ui": new Nsui(), + "contacts": new ContactList(), "client": new NsClient() }; @@ -11,6 +12,7 @@ var chromesoul = (function() { $cs.opts.init(); $cs.ui.init(); $cs.client.init(); +$cs.contacts.init(); $cs.ui.setReconnect(function() { $cs.client.disconnect();