class UserIcon extends View { constructor(element) { super(element); this.onUserUpdateBound = this.onUserUpdate.bind(this); if (this.element.hasAttribute("user-id")) { TimeCards.dataManager.addDataListener("user", { user_id: parseInt(this.element.getAttribute("user-id")) }, this.onUserUpdateBound); } else { TimeCards.dataManager.addDataListener("user", { is_session_user: true }, this.onUserUpdateBound); } } setUser(userId) { TimeCards.dataManager.removeDataListener("user", this.onUserUpdateBound); TimeCards.dataManager.addDataListener("user", { user_id: userId }, this.onUserUpdateBound); } build(element) { this.initialsLabel = document.createElement("span"); this.initialsLabel.className = "initials-label"; element.appendChild(this.initialsLabel); return element; } onUserUpdate(userId, user) { if (user) { var initials = user.full_name.substring(0, 1); var words = user.full_name.split(" "); if (words.length > 1) { initials += words[words.length - 1].substring(0, 1); } initials = initials.toUpperCase(); this.initialsLabel.innerText = initials; var userColor = this.getNameColor(user.full_name); this.initialsLabel.style.borderColor = userColor; this.element.style.boxShadow = "inset 0 0 0 0.14em " + userColor; } else { TimeCards.dataManager.removeDataListener("user", this.onUserUpdateBound); } } getNameColor(name) { var hash = 0; do { name += "_"; hash = this.hashCode(name); } while (("" + hash).length < 10 || hash < 0); var hashString = ""; hashString = ("" + hash).substring(1, 10); var r = hashString.substring(0, 3) / 1000 * 225; var g = hashString.substring(3, 6) / 1000 * 225; var b = hashString.substring(6, 9) / 1000 * 225; return "rgb(" + r + ", " + g + ", " + b + ")"; } /** * Returns a hash code from a string * @param {String} str The string to hash. * @return {Number} A 32bit integer * @see http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/ */ hashCode(str) { let hash = 0; for (let i = 0, len = str.length; i < len; i++) { let chr = str.charCodeAt(i); hash = (hash << 5) - hash + chr; hash |= 0; // Convert to 32bit integer } return hash; } } UIKit.registerViewType(UserIcon, "user-icon");