if (this.hideTimeout) {
clearTimeout(this.hideTimeout);
this.hideTimeout = null;
}
this.hideTimeout = setTimeout((function () {
windowing.hide(popup);
this.hideTimeout = null;
}).bind(this), notify);
}
}
}),
scroll: deferForContainer(function () {
var container = ui.container.find("#togetherjs-chat-messages")[0];
container.scrollTop = container.scrollHeight;
})
};
session.on("display-window", function (id, win) {
if (id == "togetherjs-chat") {
ui.chat.scroll();
windowing.hide("#togetherjs-chat-notifier");
}
});
ui.PeerView = util.Class({
constructor: function (peer) {
assert(peer.isSelf !== undefined, "PeerView instantiated with non-Peer object");
this.peer = peer;
this.dockClick = this.dockClick.bind(this);
},
setElement: function (el) {
var count = 0;
var classes = ["togetherjs-person", "togetherjs-person-status",
"togetherjs-person-name", "togetherjs-person-name-abbrev",
"togetherjs-person-bgcolor", "togetherjs-person-swatch",
"togetherjs-person-status", "togetherjs-person-role",
"togetherjs-person-url", "togetherjs-person-url-title",
"togetherjs-person-bordercolor"];
classes.forEach(function (cls) {
var els = el.find("." + cls);
els.addClass(this.peer.className(cls + "-"));
count += els.length;
}, this);
if (! count) {
console.warn("setElement(", el, ") doesn't contain any person items");
}
this.updateDisplay(el);
},
updateDisplay: deferForContainer(function (container) {
container = container || ui.container;
var abbrev = this.peer.name;
if (this.peer.isSelf) {
abbrev = "me";
}
container.find("." + this.peer.className("togetherjs-person-name-")).text(this.peer.name || "");
container.find("." + this.peer.className("togetherjs-person-name-abbrev-")).text(abbrev);
var avatarEl = container.find("." + this.peer.className("togetherjs-person-"));
if (this.peer.avatar) {
util.assertValidUrl(this.peer.avatar);
avatarEl.css({
backgroundImage: "url(" + this.peer.avatar + ")"
});
}
if (this.peer.idle == "inactive") {
avatarEl.addClass("togetherjs-person-inactive");
} else {
avatarEl.removeClass("togetherjs-person-inactive");
}
avatarEl.attr("title", this.peer.name);
if (this.peer.color) {
avatarEl.css({
borderColor: this.peer.color
});
avatarEl.find(".togetherjs-person-avatar-swatch").css({
borderTopColor: this.peer.color,
borderRightColor: this.peer.color
});
}
if (this.peer.color) {
var colors = container.find("." + this.peer.className("togetherjs-person-bgcolor-"));
colors.css({
backgroundColor: this.peer.color
});
colors = container.find("." + this.peer.className("togetherjs-person-bordercolor-"));
colors.css({
borderColor: this.peer.color
});
}
container.find("." + this.peer.className("togetherjs-person-role-"))
.text(this.peer.isCreator ? "Creator" : "Participant");
var urlName = this.peer.title || "";
if (this.peer.title) {
urlName += " (";
}
urlName += util.truncateCommonDomain(this.peer.url, location.href);
if (this.peer.title) {
urlName += ")";
}
container.find("." + this.peer.className("togetherjs-person-url-title-"))
.text(urlName);
var url = this.peer.url;
if (this.peer.urlHash) {
url += this.peer.urlHash;
}
container.find("." + this.peer.className("togetherjs-person-url-"))
.attr("href", url);