summaryrefslogtreecommitdiff
path: root/public/js/user.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/js/user.js')
-rw-r--r--public/js/user.js335
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 )
+ },
+ };