diff options
Diffstat (limited to 'public/js/user.js')
| -rw-r--r-- | public/js/user.js | 335 |
1 files changed, 335 insertions, 0 deletions
diff --git a/public/js/user.js b/public/js/user.js new file mode 100644 index 0000000..22943b5 --- /dev/null +++ b/public/js/user.js @@ -0,0 +1,335 @@ +var Users = + { + userlist: {}, + hovering: true, + current: false, + allCount: 0, + userListIndex: [], + currentIdx: -1, + all: function () + { + $('#userViewContainer').hide() + $('#userEditContainer').hide() + $('#partyEditContainer').hide() + $('#userListContainer').fadeOut(200) + $.get(URL.user.all,{},Users.allCallback) + }, + allCallback: function (json) + { + var partyUserList = []; + var guestHosts = []; + var editable = []; + var firstletter = "A"; + Users.allCount = 0; + Users.userListIndex = []; + json.forEach(function(user){ + // 0 id 1 group 2 name 3 email 4 blurb +// if (fields[1] !== currentHost) +// { +// currentHost = fields[1] +// partyUserList += "<li class='hostlist'>invited by "+Auth.hosts[fields[1]]+"</li>" +// } + + var a = user.name.substr(0,1) + var li = "li id='r-"+Users.allCount+"'" + var userRow = ""; + var editSpan = ""; + + if (firstletter !== a) + { + firstletter = a + li += " class='br'" + } + + if (Auth.isHost || user.id === Auth.userID) + { + editSpan += "<span class='edit' id='edit-"+user.id+"'>edit</span>"; + editable.push(user.id); + } + + switch (user.access) { + case 2: // host + userRow = "<"+li+"><span class='view' id='user-"+user.id+"'>"+user.name+" *</span>" + editSpan + "</li>"; + break; + case 1: // guest host + userRow = "<"+li+"><span class='view' id='user-"+user.id+"'>"+user.name+" *</span>" + editSpan + "</li>"; + guestHosts.push(userRow); + Users.userListIndex.unshift('user-'+user.id); + Users.allCount += 1; + + break; + default: // guest + userRow = "<"+li+"><span class='view' id='user-"+user.id+"'>"+user.name+"</span>" + editSpan + "</li>"; + } + + partyUserList.push(userRow); + Users.userlist['user-'+user.id] = user; + Users.userListIndex.push('user-'+user.id); + Users.allCount += 1; + }) + $('#partyLocation').html(""); + + var guestHostHeader = "<li class='hostlist'>Guest Hosts</li>"; + var guestListHeader = "<li class='br'></li><li class='hostlist'>Guest List</li>"; + for (var i in guestHosts) { + guestHosts[i] = guestHosts[i].replace("class='br'","").replace("*",""); + } + + $('#userList').html(guestHostHeader + guestHosts.join("") + guestListHeader + partyUserList.join("")); + $('#user-add').hide(); + $('#party-edit').hide(); + $('#userListContainer').fadeIn(200); +// $('#userViewContainer').html('<span id="userViewHelper">Here\'s a tip! Use the up and down arrow keys to browse this list.</span>').fadeIn(500) + $('#userViewContainer').html('<span id="userViewHelper"></span>'); + for (id in Users.userlist) + { + $('#'+id).hover(Users.limousein, Users.limouseout) + $('#'+id).click(Users.liclick) + } + for (i in editable) + { + $('#edit-'+editable[i]).bind("click",Users.editClick) + } + Users.hovering = true + }, + limouseout: function () + { + if (Users.hovering) + $("#"+this.id).removeClass("selected") + }, + limousein: function () + { + if (Users.hovering) + { + $("#"+this.id).addClass("selected") + Users.view(this.id) + } + }, + liclick: function () + { + if (! Users.hovering && Users.current === this.id) + { + Nav.selectClass(Users.userlist, false) + Users.current = false + Users.hovering = true + } + else + { + Nav.selectClass(Users.userlist, this.id) + Users.view(this.id) + Users.hovering = false + } + }, + viewIdx: function (idx) + { + var id = Users.userListIndex[idx] + + if (isScrolledIntoView("#r-"+idx)) + { + var offset = $("#r-"+idx)[0].offsetTop+5 + if (offset > 300) + $("body").scrollTop( offset ) + } + else + { + // get element at x,y + var element = document.elementFromPoint(30,180); + if (element.tagName === "UL") + element = document.elementFromPoint(30,190); + if (element.tagName === "UL") + element = document.elementFromPoint(30,200); + if (element.tagName === "SPAN") + id = element.id + } + Users.hovering = false + Users.view(id) + Nav.selectClass(Users.userlist, id) + }, + view: function (id) + { + var user = Users.userlist[id] + var userRec = ''; + // 0 id 1 group 2 name 3 email 4 blurb + var blurb = parse_blurb( user.blurb ) + userRec += "<h2>" + user.name + "</h2>" + userRec += "<h3>" + ( ! user.emailhidden ? "<a href='mailto:"+user.email+"'>"+user.email+"</a>" : "" ) + "</h3>" + userRec += "<p>" + blurb + "</p>" + $('#userViewContainer').html(userRec) + $('#userEditContainer').hide() + $('#partyEditContainer').hide() + $('#userViewContainer').show() + Users.currentIdx = $("#"+id).parent().attr("id").substr(2) + }, + addClick: function () + { + warn("NEW USER FORM") + var id = "NEW" + $('#user-id').val(id) + $('#user-name').val("") + $('#user-email').val("") + $('#user-emailhidden').attr('checked', false) + $('#user-blurb').val("") + $('#userViewContainer').hide() + $('#userEditContainer').show() + $('#user-name').focus() + $('#userEditContainer h2').html("Add a new guest") + if (Auth.isHost) + { + $('#user-password-block').show() + $('#user-isstaff-block').show() + } + Nav.selectClass(Users.userlist, "") + Users.hovering = false + Main.saveFunction = Users.editSave + }, + editClick: function () + { + $(window).unbind("keydown") + var id = this.id.split("-")[1] + Users.hovering = false + $('#userViewContainer').fadeOut(200) + $('#userEditContainer').hide() + $.post(URL.user.view, {id:id}, Users.editClickCallback) + }, + editClickCallback: function (raw) + { + var lines = raw.split("\n") + if (lines.shift() !== API_MAGIC) + { + warn("bad api: user edit") + return + } + var user = lines.shift().split('\t') + warn ("editing user "+user[0]) + var hidemail = user.emailhidden === '1' ? true : false + + // 0 id 1 name 2 email 3 access 4 emailhidden 5 hostid 6 blurb + var blurb = user.blurb + $('#user-id').val(user.id) + $('#user-name').val(user.name) + $('#user-email').val(user.email) + $('#user-emailhidden').attr('checked', hidemail) + $('#user-access option').attr("selected", false); + $('#user-access option[value="'+parseInt(user.access)+'"]').attr("selected", true); + $('#user-host option').attr("selected", false); + $('#user-host option[value="'+parseInt(user.host_id)+'"]').attr("selected", true); + $('#user-blurb').val(blurb) + $('#userViewContainer').hide() + if (user.id === Auth.userID) + { + $('#userEditContainer h2').html("Editing your profile") + $('#user-password-block').show() + $('#user-isstaff-block').hide() + } + else + { + $('#user-password-block').hide() + $('#user-isstaff-block').hide() + $('#user-invitedby-block').hide() + $('#userEditContainer h2').html("Editing "+user.name) + } + if (Auth.isHost) + { + $('#user-password-block').show() + $('#user-isstaff-block').show() + $('#user-invitedby-block').show() + $('#user-delete').show() + var ishost = user.access === '1' ? true : false + $('#user-ishost').attr('checked', ishost) + } + $('#user-password1').val('') + $('#user-password2').val('') + $('#userEditContainer').fadeIn(300) + Main.saveFunction = Users.editSave + }, + editSave: function () + { + if (Main.saving) + return + Main.saving = true + var hidemail = $('#user-emailhidden').attr("checked") === true ? 1 : 0 + warn("attempting save") + var id = $('#user-id').val() + var data = + { + id: id, + partyid: Party.currentID, + hostid: $('#user-host').val(), + name: $('#user-name').val(), + email: $('#user-email').val(), + emailhidden: hidemail, + blurb: $('#user-blurb').val(), + } + if (Auth.isHost) + { + var access = $('#user-access').val() + data['access'] = access + } + if (Auth.isHost || id === Auth.userID) + { + var pw1 = $('#user-password1').val() + var pw2 = $('#user-password2').val() + if (pw1 && pw2) + { + warn("setting password?! "+pw1) + if (pw1 === pw2) + data['password'] = pw1 + else + warn("passwords don't match!") + } + } + $.post(URL.user.edit, data, Users.editSaveCallback) + }, + editSaveCallback: function (raw) + { + var lines = raw.split("\n") + if (lines.shift() !== API_MAGIC) + { + warn("bad api: user edit") + return + } + var result = lines.shift().split("\t") + if (result[0] === "ERROR") + { + warn("save error: "+result[1]) + return + } + var fields = lines.shift().split("\t") + var rowID = "user-"+fields[0] + if (result[0] === "OK") + { + warn("user saved") + Users.userlist[rowID] = fields + Users.view(rowID) + Nav.selectClass(Users.userlist, rowID) + } + else if (result[0] === "NEW") + { + warn("user created") + // $("#userList").append("<li id='"+rowID+"'>"+fields[1]+"</li>") + Party.view( Party.currentID ) + } + Main.saving = false + }, + deleteClick: function () + { + var id = $('#user-id').val() + var name = $('#user-name').val() + var r = confirm("ARE YOU SURE YOU WANT TO DELETE " + name + "?") + if (r) + $.post(URL.user.destroy, {'id':id}, Users.deleteClickCallback) + }, + deleteClickCallback: function () + { + var id = $('#user-id').val() + var name = $('#user-name').val() + Users.userlist['user-'+id] = [] + warn("DELETED "+id+ " "+name) + $('#userViewContainer').hide() + $('#userViewContainer h2').html('') + $('#userViewContainer b').html('') + $('#userViewContainer p').html('') + $('#userEditContainer').hide() + Party.view( Party.currentID ) + }, + }; |
