Mercurial > summit-idp
view static-files/index.js @ 55:0a9c62c25938
Added Attendees.currentUser, replaced Attendees.value with Attendees.all.
author | Atul Varma <avarma@mozilla.com> |
---|---|
date | Sun, 27 Jun 2010 11:21:52 -0700 |
parents | d5efcc6476d9 |
children | bd71f612d3b1 |
line wrap: on
line source
// ----------------------------------------------------------------------- // UserInterface object // ----------------------------------------------------------------------- // // This manages the user interface logic. ( function(window) { var UserInterface = window.UserInterface = {}; function updateUI() { $(".screen").hide(); $("#" + Config.value.state).show(); switch (Config.value.state) { case "login": break; case "wait-for-verify": break; case "logged-in": $(".login-email").text(Config.value.email); break; } } function normalizeUserInfo(userInfo) { if (!(userInfo.interests && jQuery.isArray(userInfo.interests))) userInfo.interests = []; } function fillUserInfo() { var userInfo = Attendees.currentUser; if (!userInfo) userInfo = {}; normalizeUserInfo(userInfo); // Fill out the form. $(".usr").each( function() { var prop = this.id.match(/usr_(.+)/)[1]; $(this).val(userInfo[prop] || ""); }); $("#usr_interests input").each( function() { var label = $.trim($(this.parentNode).text()); this.checked = (userInfo.interests.indexOf(label) != -1); }); // Build list of all attendees. var everyone = $("#everyone-info .attendees"); everyone.empty(); for (userID in Attendees.all) { var person = Attendees.all[userID]; normalizeUserInfo(person); var elem = $("#templates .attendee").clone(); elem.find(".name").text(person.name || "Anonymous Human"); var profileImageURL = person.profileImageURL; if (!profileImageURL && person.twitterScreenName) profileImageURL = ("http://api.twitter.com/1/users/" + "profile_image/" + person.twitterScreenName + ".xml?size=normal"); if (profileImageURL) elem.find(".headshot img").attr("src", profileImageURL); if (person.websiteURL) { var websiteLink = document.createElement("a"); websiteLink.href = person.websiteURL; websiteLink.target = "_blank"; elem.find(".name").wrapInner(websiteLink); } if (person.twitterScreenName) { var twitterLink = document.createElement("a"); twitterLink.href = "http://twitter.com/" + person.twitterScreenName; twitterLink.target = "_blank"; twitterLink.textContent = "@" + person.twitterScreenName; elem.find(".twitter").append(twitterLink); } else elem.find(".twitter").remove(); if (person.bugzillaEmail) { var bugzillaLink = document.createElement("a"); bugzillaLink.href = ("https://hg.mozilla.org/users/" + "avarma_mozilla.com/" + "bugzilla-dashboard/raw-file/v2/" + "index.html#username=" + encodeURI(person.bugzillaEmail)); bugzillaLink.target = "_blank"; elem.find(".bugzilla").wrapInner(bugzillaLink); } else elem.find(".bugzilla").remove(); if (person.interests.length > 0) { var interests = elem.find(".interests ul"); person.interests.forEach( function(interest) { var item = document.createElement("li"); item.textContent = interest; interests.append(item); }); } else elem.find(".interests").remove(); if (person.bio) { var converter = new Showdown.converter(); var text = converter.makeHtml(person.bio); elem.find(".bio").html(text); } else elem.find(".bio").remove(); everyone.append(elem); } } Attendees.observers.push(fillUserInfo); Config.observers.push(updateUI); function initUI() { $("#logged-in").tabs(); $(".start-over").submit( function(event) { event.preventDefault(); Config.wipe(); }); $("#login form").submit( function(event) { event.preventDefault(); $("#login .error").hide(); Ajax.postJSON( "api/challenge/request", {email: $(this).find("#email").val() }, function(success, data) { if (success) { Config.setValue({state: "wait-for-verify"}); } else { $("#login .error").slideDown(); } }); }); $("#logged-in form").submit( function(event) { event.preventDefault(); $("#logged-in .success").hide(); $("#logged-in .error").hide(); var contents = {}; $(".usr").each( function() { var prop = this.id.match(/usr_(.+)/)[1]; contents[prop] = this.value; }); contents.interests = []; $("#usr_interests input").each( function() { if (this.checked) contents.interests.push($.trim($(this.parentNode).text())); }); Ajax.postJSON( "api/profile", {token: Config.value.token, contents: contents}, function(success, data) { if (success) { $("#logged-in .success").slideDown(); // Do a full round-trip to refresh our cached information // about ourselves. Not efficient at all, but it'll work // for now. Attendees.refresh(); } else { $("#logged-in .error").slideDown(); } }); }); var verify = window.location.hash.match(/#verify=(.+)/); if (verify && Config.value.state != "logged-in") { verify = verify[1]; Config.setValue({state: "wait-for-verify"}); Ajax.postJSON( "api/challenge/respond", {token: verify}, function(success, data) { window.location.hash = ""; updateUI(); if (success) { Config.setValue({state: "logged-in", token: data.token, userID: data.user_id, email: data.email}); } else { $("#wait-for-verify .error").slideDown(); } }); } else updateUI(); } $(window).ready(initUI); } )(window);