|
|
@@ -24,6 +24,28 @@ var
|
|
|
|
|
|
;
|
|
|
|
|
|
+/**
|
|
|
+ * @return {Element!}
|
|
|
+**/
|
|
|
+function createTypingDisplay() {
|
|
|
+ var dom = document.createElement("span")
|
|
|
+ ,dot1 = document.createElement("span")
|
|
|
+ ,dot2 = document.createElement("span")
|
|
|
+ ,dot3 = document.createElement("span");
|
|
|
+
|
|
|
+ dom.className = R.klass.typing.container;
|
|
|
+ dot1.className = R.klass.typing.dot1;
|
|
|
+ dot2.className = R.klass.typing.dot2;
|
|
|
+ dot3.className = R.klass.typing.dot3;
|
|
|
+
|
|
|
+ dot1.textContent = dot2.textContent = dot3.textContent = '.';
|
|
|
+
|
|
|
+ dom.appendChild(dot1);
|
|
|
+ dom.appendChild(dot2);
|
|
|
+ dom.appendChild(dot3);
|
|
|
+ return dom;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* @param {SlackChan|SlackGroup} chan
|
|
|
* @return {Element}
|
|
|
@@ -43,7 +65,14 @@ function createChanListItem(chan) {
|
|
|
if (SELECTED_ROOM === chan)
|
|
|
dom.classList.add(R.klass.selected);
|
|
|
link.textContent = chan.name;
|
|
|
+ dom.appendChild(createTypingDisplay());
|
|
|
dom.appendChild(link);
|
|
|
+ if (UNREAD_CHANS[chan.id]) {
|
|
|
+ if (UNREAD_CHANS[chan.id].hl)
|
|
|
+ dom.classList.add(R.klass.unreadHi);
|
|
|
+ if (UNREAD_CHANS[chan.id].unread)
|
|
|
+ dom.classList.add(R.klass.unread);
|
|
|
+ }
|
|
|
return dom;
|
|
|
}
|
|
|
|
|
|
@@ -59,12 +88,20 @@ function createImsListItem(ims) {
|
|
|
link.href = '#' +ims.id;
|
|
|
dom.className = R.klass.chatList.entry + " " +R.klass.chatList.typeDirect;
|
|
|
link.textContent = ims.user.name;
|
|
|
+ dom.appendChild(createTypingDisplay());
|
|
|
dom.appendChild(link);
|
|
|
|
|
|
if (!ims.user.presence)
|
|
|
dom.classList.add(R.klass.presenceAway);
|
|
|
if (SELECTED_ROOM === ims)
|
|
|
dom.classList.add(R.klass.selected);
|
|
|
+
|
|
|
+ if (UNREAD_CHANS[ims.id]) {
|
|
|
+ if (UNREAD_CHANS[ims.id].hl)
|
|
|
+ dom.classList.add(R.klass.unreadHi);
|
|
|
+ if (UNREAD_CHANS[ims.id].unread)
|
|
|
+ dom.classList.add(R.klass.unread);
|
|
|
+ }
|
|
|
return dom;
|
|
|
}
|
|
|
|