adding an avatar manager
This commit is contained in:
parent
3d4a8a3052
commit
de8a0b2e37
5 changed files with 57 additions and 22 deletions
|
@ -23,6 +23,7 @@
|
||||||
<div id="config-pannel">
|
<div id="config-pannel">
|
||||||
Login: <input type="text" id="login" class="opt" value=""><br>
|
Login: <input type="text" id="login" class="opt" value=""><br>
|
||||||
Password (socks): <input type="password" id="pwd_socks" class="opt" value=""><br>
|
Password (socks): <input type="password" id="pwd_socks" class="opt" value=""><br>
|
||||||
|
Enable notifications: <input type="checkbox" id="enable_notif" class="opt" checked="checked"><br>
|
||||||
Enable messages: <input type="checkbox" id="enable_msg" class="opt" checked="checked"><br>
|
Enable messages: <input type="checkbox" id="enable_msg" class="opt" checked="checked"><br>
|
||||||
<button id="save">Save</button> <span id="status"></span>
|
<button id="save">Save</button> <span id="status"></span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -35,6 +36,7 @@
|
||||||
<script type="text/javascript" src="third-party/md5-min.js"></script>
|
<script type="text/javascript" src="third-party/md5-min.js"></script>
|
||||||
<script type="text/javascript" src="third-party/ab-str.js"></script>
|
<script type="text/javascript" src="third-party/ab-str.js"></script>
|
||||||
<script type="text/javascript" src="lib/ns_client.js"></script>
|
<script type="text/javascript" src="lib/ns_client.js"></script>
|
||||||
|
<script type="text/javascript" src="lib/avatars.js"></script>
|
||||||
<script type="text/javascript" src="lib/options.js"></script>
|
<script type="text/javascript" src="lib/options.js"></script>
|
||||||
<script type="text/javascript" src="lib/tab.nsui.js"></script>
|
<script type="text/javascript" src="lib/tab.nsui.js"></script>
|
||||||
<script type="text/javascript" src="lib/contacts.nsui.js"></script>
|
<script type="text/javascript" src="lib/contacts.nsui.js"></script>
|
||||||
|
|
48
lib/avatars.js
Normal file
48
lib/avatars.js
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
//
|
||||||
|
// 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 AvatarManager = function() {
|
||||||
|
this.avatars = {};
|
||||||
|
};
|
||||||
|
|
||||||
|
AvatarManager.prototype.getContactPic = function(name, callback) {
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
|
||||||
|
xhr.open("GET", "http://www.epitech.eu/intra/photos/" + name + ".jpg", true);
|
||||||
|
xhr.responseType = "blob";
|
||||||
|
xhr.onload = (function(elem) {
|
||||||
|
return function(e) {
|
||||||
|
if (e.target.status === 200) {
|
||||||
|
elem.avatars[name] = window.webkitURL.createObjectURL(this.response);
|
||||||
|
} else {
|
||||||
|
elem.avatars[name] = "img/default-avatar.jpg";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof callback !== "undefined") {
|
||||||
|
callback(elem.avatars[name]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
})(this);
|
||||||
|
xhr.send();
|
||||||
|
}
|
||||||
|
|
||||||
|
AvatarManager.prototype.get = function(name, callback) {
|
||||||
|
if (typeof this.avatars[name] === "undefined") {
|
||||||
|
this.getContactPic(name, callback);
|
||||||
|
} else {
|
||||||
|
callback(this.avatars[name]);
|
||||||
|
}
|
||||||
|
};
|
|
@ -38,25 +38,6 @@ ContactList.prototype.insertContact = function(elem) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
ContactList.prototype.getContactPic = function(elem, infos) {
|
|
||||||
var xhr = new XMLHttpRequest();
|
|
||||||
|
|
||||||
xhr.open("GET", "http://www.epitech.eu/intra/photos/" + infos.name + ".jpg", true);
|
|
||||||
xhr.responseType = "blob";
|
|
||||||
xhr.onload = (function(el) {
|
|
||||||
return function(e) {
|
|
||||||
if (e.target.status === 200) {
|
|
||||||
infos.avatar = window.webkitURL.createObjectURL(this.response);
|
|
||||||
} else {
|
|
||||||
infos.avatar= "img/default-avatar.jpg";
|
|
||||||
}
|
|
||||||
|
|
||||||
elem.style.backgroundImage = "url('" + infos.avatar + "')";
|
|
||||||
};
|
|
||||||
})(this);
|
|
||||||
xhr.send();
|
|
||||||
}
|
|
||||||
|
|
||||||
ContactList.prototype.addContact = function(name) {
|
ContactList.prototype.addContact = function(name) {
|
||||||
var infos = {}, li = null, login = null, close = null;
|
var infos = {}, li = null, login = null, close = null;
|
||||||
|
|
||||||
|
@ -68,7 +49,9 @@ ContactList.prototype.addContact = function(name) {
|
||||||
};
|
};
|
||||||
|
|
||||||
li = document.createElement("li");
|
li = document.createElement("li");
|
||||||
this.getContactPic(li, infos);
|
$cs.avatars.get(infos.name, function(url) {
|
||||||
|
li.style.backgroundImage = "url('" + url + "')";
|
||||||
|
});
|
||||||
login = document.createElement("span");
|
login = document.createElement("span");
|
||||||
close = document.createElement("span");
|
close = document.createElement("span");
|
||||||
close.classList.add("remove");
|
close.classList.add("remove");
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "Chromesoul",
|
"name": "Chromesoul",
|
||||||
"version": "0.4.2",
|
"version": "0.4.3",
|
||||||
"minimum_chrome_version": "24",
|
"minimum_chrome_version": "24",
|
||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"offline_enabled": false,
|
"offline_enabled": false,
|
||||||
|
@ -17,6 +17,7 @@
|
||||||
"http://www.epitech.eu/intra/photos/",
|
"http://www.epitech.eu/intra/photos/",
|
||||||
"background",
|
"background",
|
||||||
"storage",
|
"storage",
|
||||||
|
"notifications",
|
||||||
{"socket": ["tcp-connect:ns-server.epita.fr:4242"]}
|
{"socket": ["tcp-connect:ns-server.epita.fr:4242"]}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
3
start.js
3
start.js
|
@ -3,7 +3,8 @@ var chromesoul = (function() {
|
||||||
"opts": new OptionsManager(),
|
"opts": new OptionsManager(),
|
||||||
"ui": new Nsui(),
|
"ui": new Nsui(),
|
||||||
"contacts": new ContactList(),
|
"contacts": new ContactList(),
|
||||||
"client": new NsClient()
|
"client": new NsClient(),
|
||||||
|
"avatars": new AvatarManager()
|
||||||
};
|
};
|
||||||
|
|
||||||
return (window.chromesoul = window.$cs = chromesoul);
|
return (window.chromesoul = window.$cs = chromesoul);
|
||||||
|
|
Reference in a new issue