From daef7ca9bd94cc1ed9901c45b4bed1dd9f4c71dc Mon Sep 17 00:00:00 2001 From: Rodolphe Breard Date: Sun, 21 Oct 2012 19:46:47 +0200 Subject: [PATCH] supporting options --- manifest.json | 3 ++ options.html | 16 +++++++++ options.js | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 options.html create mode 100644 options.js diff --git a/manifest.json b/manifest.json index ec436a4..50b32f1 100644 --- a/manifest.json +++ b/manifest.json @@ -3,6 +3,7 @@ "version": "0.1.1", "manifest_version": 2, "description": "A minimalist NetSoul client.", + "options_page": "options.html", "app": { "background": { "scripts": ["third-party/md5-min.js", @@ -12,6 +13,8 @@ } }, "permissions": [ + "background", + "storage", {"socket": ["tcp-connect:ns-server.epita.fr:4242"]} ] } diff --git a/options.html b/options.html new file mode 100644 index 0000000..0c5f7dd --- /dev/null +++ b/options.html @@ -0,0 +1,16 @@ + + + + + Chromesoul options + + +
+ Login:
+ Password (socks):
+ +
+
+ + + diff --git a/options.js b/options.js new file mode 100644 index 0000000..8c6bea5 --- /dev/null +++ b/options.js @@ -0,0 +1,90 @@ +// +// 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 OptionsManager = function() { + this.storage = chrome.storage.sync; + this.status = null; + this.save_btn = null; + this.opts = null; +}; + +OptionsManager.prototype.init = function() { + var saveOpts = function(elem) { + return function() { + elem.save(); + }; + }; + + this.status = document.getElementById("status"); + this.save_btn = document.getElementById("save"); + this.opts = document.getElementsByClassName("opt"); + + this.restore(); + + if (this.save !== null) { + this.save_btn.addEventListener("click", saveOpts(this)); + } +}; + +OptionsManager.prototype.save = function() { + var i = 0, + data = {}, + notif = function(elem) { + return function () { + if (elem !== null) { + elem.innerHTML = "Options saved."; + setTimeout(function() { + elem.innerHTML = ""; + }, 3000); + } + }; + }; + + if (this.opts !== null) { + for (i = this.opts.length - 1; i >= 0; --i) { + data[this.opts[i].id] = this.encrypt(this.opts[i].value); + } + this.storage.set(data, notif(this.status)); + } +}; + +OptionsManager.prototype.restore = function() { + var i, + el, + rst = function(elem) { + return function(items) { + for (i in items) { + el = document.getElementById(i); + if (el !== null) { + el.value = elem.decrypt(items[i]); + } + } + }; + }; + + this.storage.get(null, rst(this)); +}; + +OptionsManager.prototype.encrypt = function(value) { + return value; +}; + +OptionsManager.prototype.decrypt = function(value) { + return value; +}; + +var opt_mgr = new OptionsManager(); +opt_mgr.init();