diff options
Diffstat (limited to 'public')
| -rw-r--r-- | public/css/screen.css | 1 | ||||
| -rw-r--r-- | public/js/auth.js | 88 | ||||
| -rw-r--r-- | public/js/main.js | 65 | ||||
| -rw-r--r-- | public/js/nav.js | 99 | ||||
| -rw-r--r-- | public/js/party.js | 182 | ||||
| -rw-r--r-- | public/js/protocols_site.js | 919 | ||||
| -rw-r--r-- | public/js/user.js | 335 | ||||
| -rw-r--r-- | public/js/util.js | 137 | ||||
| -rw-r--r-- | public/js/vendor/base64.js (renamed from public/js/base64.js) | 0 | ||||
| -rw-r--r-- | public/js/vendor/jquery-1.4.4.min.js (renamed from public/js/jquery-1.4.4.min.js) | 0 | ||||
| -rw-r--r-- | public/protocols/index.html | 11 |
11 files changed, 915 insertions, 922 deletions
diff --git a/public/css/screen.css b/public/css/screen.css index e403029..458078b 100644 --- a/public/css/screen.css +++ b/public/css/screen.css @@ -373,6 +373,7 @@ button:active { #userViewContainer { position: fixed; top: 160px; left: 320px; width: 350px; + background-color: rgba(255,255,255,0.92); float: left; } /* line 218, ../src/screen.sass */ diff --git a/public/js/auth.js b/public/js/auth.js new file mode 100644 index 0000000..e16c2d2 --- /dev/null +++ b/public/js/auth.js @@ -0,0 +1,88 @@ +var Auth = + { + name: '', + userID: 1, + isHost: false, + loginPrompt: false, + hosts: {}, + init: function () { + $.post(URL.auth.login, {}, Auth.loginCallback) + }, + unload: function () { + if (Auth.loginPrompt) { + Auth.loginPrompt = false + $('#login').fadeOut(1000, function(){ Main.load()} ) + } + else { + Main.load() + } + }, + load: function () { + $('#login').fadeIn(1000) + $('#login-email').focus() + $('#login-email').keydown(Main.kp) + $('#login-password').keydown(Main.kp) + $('#login-go').click( Auth.login ) + Auth.loginPrompt = true + Main.saveFunction = Auth.login + Main.saving = false + }, + login: function () { + if (Main.saving) + return + Main.saving = true + warn("attempting login") + var data = { + username: $('#login-email').val(), + password: $('#login-password').val(), + } + $('#login-password').val(''), + $.post(URL.auth.login, data, Auth.loginCallback) + }, + loginCallback: function (json) { + Main.saving = false + + if (! json || json.error) { + if (! Auth.loginPrompt) + Auth.load() + else + warn("bad login!") + return + } + + // 0 id 1 name 2 firstname 3 email 4 access + var user = Auth.user = json.user + + var name = user.name.split(' ')[0] || user.email.split('@')[0] + warn( "Logged in! Hello "+name ) + Auth.userID = user.id + Auth.isHost = user.access == 2 ? true : false; + Auth.name = user.name + Auth.firstName = name + + $('#profile-edit').html(Auth.firstName + "!") + $('#logout').click( Auth.logout ) + + var hostSelect = "" + Auth.hosts = {} + json.hosts.forEach(function(host){ + if (host.id === Auth.userID) + hostSelect += "<option value='"+host.id+"' selected='1'>"+host.name+"</option>" + else + hostSelect += "<option value='"+host.id+"'>"+host.name+"</option>" + Auth.hosts[ host.id ] = host.name + }) + + $("#user-host").html(hostSelect) + + Auth.unload() + }, + logout: function () + { + warn("logging out") + $('#login-email').val(''), + $.get(URL.auth.logout,{}, function(){ + Main.unload() + }) + }, + }; diff --git a/public/js/main.js b/public/js/main.js new file mode 100644 index 0000000..cabfab6 --- /dev/null +++ b/public/js/main.js @@ -0,0 +1,65 @@ +var Main = + { + saveFunction: false, + saving: false, + kp: function (e) + { + var evt = window.event ? window.event : e + var key = evt.keyCode ? evt.keyCode : e.which + if (key === 13) + Main.saveFunction() + }, + init: function () + { + warn("init site") + Auth.init() + }, + unload: function () + { + $('header').fadeOut(500) + $('section').fadeOut(500) + $('footer').fadeOut(500) + $('#bg').fadeIn(500) + Auth.init() + }, + load: function () + { + warn("loading site") + $('#bg').fadeOut(500) + $('header').show() + $('#welcome').fadeIn(500) + $('#nav_about').click( Nav.aboutClick ) + $('#nav_users').click( Nav.usersClick ) + $('#nav_patrons').click( Nav.patronsClick ) + $('#nav_reunions').click( Nav.reunionClick ) + if (Auth.isHost) + { + $('#nav_parties').show() + $('#nav_parties').click( Nav.partiesClick ) + $('#user-add').click( Users.addClick ) + $('#user-delete').click( Users.deleteClick ) + $('#party-add').click( Party.addClick ) + $('#party-edit').click( Party.editClick ) + } + else + { + $('#nav_parties').hide() + $('#user-add').hide() + $('#user-delete').hide() + $('#party-add').hide() + $('#party-edit').hide() + } + $('#user-save').click( Users.editSave ) + $('#user-name').keydown(Main.kp) + $('#user-email').keydown(Main.kp) + $('#user-password2').keydown(Main.kp) + $('#party-location').keydown(Main.kp) + $('#party-day').keydown(Main.kp) + $('#party-year').keydown(Main.kp) + $('#party-save').click( Party.editSave ) + Nav.selectClass(Nav.navIDs, "nav_about") + $('#aboutMode').show() + warn("done!") + }, + }; +Main.init(); diff --git a/public/js/nav.js b/public/js/nav.js new file mode 100644 index 0000000..1dba482 --- /dev/null +++ b/public/js/nav.js @@ -0,0 +1,99 @@ +var Nav = + { + navIDs: {"nav_about":0,"nav_parties":0,"nav_users":0,"nav_patrons":0,"nav_reunions":0}, + aboutClick: function() + { + this.blur() + $('#aboutMode').show() + $('#patronMode').hide() + $('#partiesMode').hide() + $('#reunionMode').hide() + Nav.selectClass(Nav.navIDs, "nav_about") + $(window).unbind("keydown") + }, + partiesClick: function() + { + this.blur() + $('#aboutMode').hide() + $('#patronMode').hide() + $('#partiesMode').show() + $('#reunionMode').hide() + Nav.selectClass(Nav.navIDs, "nav_parties") + $('#userViewContainer').css("left", 520) + Party.list() + $(window).unbind("keydown") + }, + usersClick: function() + { + this.blur() + $('#aboutMode').hide() + $('#patronMode').hide() + $('#partiesMode').show() + $('#reunionMode').hide() + $('#userListContainer').hide() + $('#partyListContainer').hide() + Nav.selectClass(Nav.navIDs, "nav_users") + $('#userViewContainer').css("left", 320) + Users.all() + $(window).unbind("keydown") + $(window).bind("keydown", Nav.keydown) + }, + patronsClick: function() + { + this.blur() + $('#aboutMode').hide() + $('#partiesMode').hide() + $('#patronMode').show() + $('#reunionMode').hide() + Nav.selectClass(Nav.navIDs, "nav_patrons") + $(window).unbind("keydown") + }, + reunionClick: function() + { + this.blur() + $('#aboutMode').hide() + $('#patronMode').hide() + $('#partiesMode').hide() + $('#reunionMode').show() + Nav.selectClass(Nav.navIDs, "nav_reunions") + $(window).unbind("keydown") + }, + selectClass: function (ids, selected) + { + for (var id in ids) + { + $("#"+id).removeClass("selected") + } + if (selected) + $("#"+selected).addClass("selected") + }, + keydown: function (e) + { + kc = event.keyCode + if (kc === 38) // up + { + // select previous name or last + newIdx = parseInt(Users.currentIdx) - 1 + if (newIdx < 0) + { + newIdx = Users.allCount - 1 + scrollToBottom("body") + } + Users.viewIdx(newIdx) + return false + } + if (kc === 40) // down + { + // select next name or first + newIdx = parseInt(Users.currentIdx) + 1 + if (newIdx === Users.allCount) + { + newIdx = 0 + scrollToTop("body") + } + Users.viewIdx(newIdx) + return false + } + return true + }, + }; diff --git a/public/js/party.js b/public/js/party.js new file mode 100644 index 0000000..b4984f9 --- /dev/null +++ b/public/js/party.js @@ -0,0 +1,182 @@ +var Party = + { + parties: {}, + currentID: -1, + partyData: '', + liclick: function () + { + Nav.selectClass(Party.parties, this.id) + var id = this.id.split("-")[1] + warn("viewing party "+id) + Party.view(id) + }, + list: function() + { + $('#partyListContainer').fadeOut(200) + $('#partyEditContainer').hide() + $('#userListContainer').hide() + $('#userEditContainer').hide() + $('#userViewContainer').hide() + $.get(URL.party.list,{},Party.listCallback) + }, + listCallback: function (parties) + { + warn("got party list") + var partyList = "" + if (Party.currentID != -1) { + var firstPartyID = Party.currentID + } + parties.forEach(function(party){ + if (! firstPartyID) { + firstPartyID = party.id + } + partyList += "<li id='party-"+party.id+"'>"+party.date+"</li>" + Party.parties["party-"+party.id] = party + }) + + $('#partyList').html(partyList) + $('#partyListContainer').fadeIn(200) + for (id in Party.parties) { + $('#'+id).click(Party.liclick).data('party', Party.parties[id]) + } + Nav.selectClass(Party.parties, "party-"+firstPartyID) + if (firstPartyID) + Party.view(firstPartyID) + }, + view: function(id) + { + $('#userViewContainer').hide() + $('#userEditContainer').hide() + $('#partyEditContainer').hide() + $('#userListContainer').fadeOut(200) + Party.partyData = $(this).data('party') + $.get(URL.party.view, {'id':id}, Party.viewCallback) + }, + viewCallback: function (users) + { + var partyUserList = "" + var partyLocationTag = "" + var editable = [] + var currentHost = -1 + + users.forEach(function(user){ + var fields = lines[i].split('\t') + + // 0 id 1 group 2 name 3 email 4 blurb + partyUserList += "<li><span class='view' id='user-"+ user.id +"'>"+ user.name +"</span>" + if (Auth.isHost || user.id === Auth.userID) { + partyUserList += "<span class='edit' id='edit-"+user.id+"'>edit</span>" + editable.push(user.id) + } + partyUserList += "</li>" + Users.userlist['user-'+user.id] = user + }) + + partyLocationTag = Party.partyData.location + Party.currentID = Party.partyData.id + Party.partyData = partyData + $('#partyLocation').html(partyLocationTag) + $('#userList').html(partyUserList) + if (Auth.isHost) { + $('#user-add').show() + $('#party-edit').show() + } + $('#userListContainer').fadeIn(200) + $('#userViewContainer').show() + for (id in Users.userlist) { + $('#'+id).hover(Users.limousein, Users.limouseout).click(Users.liclick).data('user', Users.userlist[id]) + } + for (i in editable) { + $('#edit-'+editable[i]).bind("click",Users.editClick).data('user', Users.userlist[editable[i]]) + } + Users.hovering = true + }, + addClick: function () + { + warn("NEW PARTY FORM") + var id = "NEW" + var today = new Date() + $('#party-id').val(id) + $('#party-day').val(today.getDate()) + $('#party-year').val(today.getFullYear()) + $('#party-month option').attr("selected", false); + $('#party-month option[value="'+today.getMonth()+'"]').attr("selected", true); + $('#party-location').val("") + $('#partyEditContainer h2').html("New party") + $('#userListContainer').hide() + $('#userViewContainer').hide() + $('#userEditContainer').hide() + $('#partyEditContainer').show() + $('#party-location').focus() + Main.saveFunction = Party.editSave + Nav.selectClass(Party.parties, "") + }, + editClick: function () + { + var id = Party.currentID + // 0 id 1 date 2 location + var party = Party.partyData + var date = party[1].split("-") + $('#party-id').val(id) + $('#party-day').val(date[0]) + $('#party-year').val(date[2]) + $('#party-month option').attr("selected", false); + $('#party-month option[value="'+months[date[1]]+'"]').attr("selected", true); + $('#party-location').val(party[2]) + $('#partyEditContainer h2').html("Edit party") + $('#userListContainer').hide() + $('#userViewContainer').hide() + $('#userEditContainer').hide() + $('#partyEditContainer').show() + Main.saveFunction = Party.editSave + }, + editSave: function () + { + if (Main.saving) + return + Main.saving = true + warn("attempting save") + var data = + { + id: $('#party-id').val(), + userid: Auth.userID, + hostid: Auth.userID, + location: $('#party-location').val(), + month: $('#party-month').val(), + day: $('#party-day').val(), + year: $('#party-year').val(), + } + $('#partyEditContainer').fadeOut(200) + $.post(URL.party.edit, data, Party.editSaveCallback) + }, + editSaveCallback: function (raw) + { + var lines = raw.split("\n") + if (lines.shift() !== API_MAGIC) + { + warn("bad api: party save") + 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 = "party-"+fields[0] + if (result[0] === "OK") + { warn("party saved") } + else if (result[0] === "NEW") + { + warn("party created") + $("#partyList").append("<li id='"+rowID+"'>"+fields[1]+"</li>") + } + // Party.parties[rowID] = fields + // Party.view(fields[0]) + // Nav.selectClass(Party.parties, rowID) + Main.saving = false + Party.currentID = fields[0] + Party.list() + }, + }; diff --git a/public/js/protocols_site.js b/public/js/protocols_site.js deleted file mode 100644 index 5d3d95c..0000000 --- a/public/js/protocols_site.js +++ /dev/null @@ -1,919 +0,0 @@ -var API_MAGIC = "#(@)PROTOCOLS" -var URLregexp = /^(https?:\/\/)(www.)?([-A-Z0-9.]+)(\/)?([-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])*/ig; -var months = { Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5, Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11 } -function isScrolledIntoView (elem) - { - return true; - var docViewTop = $(window).scrollTop(); - var docViewBottom = docViewTop + $(window).height(); - var elemTop = $(elem).offset().top; - var elemBottom = elemTop + $(elem).height(); - return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom)); - } -function scrollToTop (div) - { $(div).scrollTop( 0 ) } -function scrollToBottom (div) - { $(div).scrollTop( $(div)[0].scrollHeight ) } -function warn(s) - { -// return - console.log(s) - var h = document.getElementById('msg').innerHTML - h = s + '<br/>' + h - document.getElementById('msg').innerHTML = h - } -var image_extensions = ["jpg","gif","png","jpeg","JPEG","JPG","GIF","PNG"] -function is_image(s) - { - for (i in image_extensions) - { - if (s.indexOf(image_extensions[i]) !== -1) - return true - } - return false - } -var domain_extensions = [".com",".net",".org",".uk",".fr",".de",".ch",".info",".nu",".mu",".io","facebook.com","twitter.com"] -function has_domain(s) - { - for (var i in domain_extensions) - { - if (s.indexOf(domain_extensions[i]) !== -1) - return true - } - return false - } -function parse_blurb(s) - { - // s = linkify(s+"\n") - var parsed_lines = [] - var lines = s.split("\n") - for (i in lines) - { - var parsed_words = [] - var words = lines[i].split(" ") - for (j in words) - { - if (words[j].indexOf("http") !== -1) - { - if (is_image(words[j])) - parsed_words.push('<img src="'+words[j]+'"/>') - else - parsed_words.push(linkify(words[j])) - } - else if (words[j].indexOf("www") === 0 || has_domain(words[j])) - { - parsed_words.push(linkify("http://"+words[j])) - } - else - parsed_words.push(words[j]) - } - parsed_lines.push( parsed_words.join(" ") ) - } - // return s.replace(/\n/g, '<br/>') - return parsed_lines.join("<br/>") - } -function linkify(s) - { - var link = ''; - var punctuation = ''; - var end = s.length-1; - - // strip the terminal punctuation mark if it's a period or comma - if (s.indexOf(".", end) === end || s.indexOf(",", end) === end) - { - punctuation = s.substr(end, 1); - s = s.substr(0, end); - } - if (s.indexOf("twitter.com") !== -1) - { - var partz = s.split("/"); - var uname = ''; - if (partz[partz.length-1].length) - uname = partz[partz.length-1]; - else if (parts[-2].length) - uname = partz[partz.length-2]; - link = '<a href="https://twitter.com/' + uname + '" target="_blank">@' + uname + '</a>'; - } - else - { - // link = s.replace(URLregexp,"<a href='$1$2$3$4$5' target='_blank'>[$3]</a>"); - var match = URLregexp.exec(s); - if (match && match.length == 6) - { - var url = match[0] || ""; - var http = match[1] || ""; - var www = match[2] || ""; - var domain = match[3] || ""; - var slash = match[4] || ""; - var uri = match[5] ? match[5].replace(/\/?index.html$/, "") : ""; - link = '<a href="' + url + '" target="_blank">[' + domain + ']</a>'; - } - else - { - link = s.replace(URLregexp,"<a href='$1$2$3$4$5' target='_blank'>[$3]</a>"); - } - } - return link + punctuation; - } -var URL = - { - auth: - { - login: "/login", - logout: "/logout", - }, - party: - { - list: "/api/party/list", - view: "/api/party/view", - edit: "/api/party/edit", - }, - user: - { - all: "/api/user/all", - view: "/api/user/view", - edit: "/api/user/edit", - destroy: "/api/user/destroy", - }, - }; -var Party = - { - parties: {}, - currentID: -1, - partyData: '', - liclick: function () - { - Nav.selectClass(Party.parties, this.id) - var id = this.id.split("-")[1] - warn("viewing party "+id) - Party.view(id) - }, - list: function() - { - $('#partyListContainer').fadeOut(200) - $('#partyEditContainer').hide() - $('#userListContainer').hide() - $('#userEditContainer').hide() - $('#userViewContainer').hide() - $.get(URL.party.list,{},Party.listCallback) - }, - listCallback: function (parties) - { - warn("got party list") - var partyList = "" - if (Party.currentID != -1) { - var firstPartyID = Party.currentID - } - parties.forEach(function(party){ - if (! firstPartyID) { - firstPartyID = party.id - } - partyList += "<li id='party-"+party.id+"'>"+party.date+"</li>" - Party.parties["party-"+party.id] = party - }) - - $('#partyList').html(partyList) - $('#partyListContainer').fadeIn(200) - for (id in Party.parties) { - $('#'+id).click(Party.liclick).data('party', Party.parties[id]) - } - Nav.selectClass(Party.parties, "party-"+firstPartyID) - if (firstPartyID) - Party.view(firstPartyID) - }, - view: function(id) - { - $('#userViewContainer').hide() - $('#userEditContainer').hide() - $('#partyEditContainer').hide() - $('#userListContainer').fadeOut(200) - Party.partyData = $(this).data('party') - $.get(URL.party.view, {'id':id}, Party.viewCallback) - }, - viewCallback: function (users) - { - var partyUserList = "" - var partyLocationTag = "" - var editable = [] - var currentHost = -1 - - users.forEach(function(user){ - var fields = lines[i].split('\t') - - // 0 id 1 group 2 name 3 email 4 blurb - partyUserList += "<li><span class='view' id='user-"+ user.id +"'>"+ user.name +"</span>" - if (Auth.isHost || user.id === Auth.userID) { - partyUserList += "<span class='edit' id='edit-"+user.id+"'>edit</span>" - editable.push(user.id) - } - partyUserList += "</li>" - Users.userlist['user-'+user.id] = user - }) - - partyLocationTag = Party.partyData.location - Party.currentID = Party.partyData.id - Party.partyData = partyData - $('#partyLocation').html(partyLocationTag) - $('#userList').html(partyUserList) - if (Auth.isHost) { - $('#user-add').show() - $('#party-edit').show() - } - $('#userListContainer').fadeIn(200) - $('#userViewContainer').show() - for (id in Users.userlist) { - $('#'+id).hover(Users.limousein, Users.limouseout).click(Users.liclick).data('user', Users.userlist[id]) - } - for (i in editable) { - $('#edit-'+editable[i]).bind("click",Users.editClick).data('user', Users.userlist[editable[i]]) - } - Users.hovering = true - }, - addClick: function () - { - warn("NEW PARTY FORM") - var id = "NEW" - var today = new Date() - $('#party-id').val(id) - $('#party-day').val(today.getDate()) - $('#party-year').val(today.getFullYear()) - $('#party-month option').attr("selected", false); - $('#party-month option[value="'+today.getMonth()+'"]').attr("selected", true); - $('#party-location').val("") - $('#partyEditContainer h2').html("New party") - $('#userListContainer').hide() - $('#userViewContainer').hide() - $('#userEditContainer').hide() - $('#partyEditContainer').show() - $('#party-location').focus() - Main.saveFunction = Party.editSave - Nav.selectClass(Party.parties, "") - }, - editClick: function () - { - var id = Party.currentID - // 0 id 1 date 2 location - var party = Party.partyData - var date = party[1].split("-") - $('#party-id').val(id) - $('#party-day').val(date[0]) - $('#party-year').val(date[2]) - $('#party-month option').attr("selected", false); - $('#party-month option[value="'+months[date[1]]+'"]').attr("selected", true); - $('#party-location').val(party[2]) - $('#partyEditContainer h2').html("Edit party") - $('#userListContainer').hide() - $('#userViewContainer').hide() - $('#userEditContainer').hide() - $('#partyEditContainer').show() - Main.saveFunction = Party.editSave - }, - editSave: function () - { - if (Main.saving) - return - Main.saving = true - warn("attempting save") - var data = - { - id: $('#party-id').val(), - userid: Auth.userID, - hostid: Auth.userID, - location: $('#party-location').val(), - month: $('#party-month').val(), - day: $('#party-day').val(), - year: $('#party-year').val(), - } - $('#partyEditContainer').fadeOut(200) - $.post(URL.party.edit, data, Party.editSaveCallback) - }, - editSaveCallback: function (raw) - { - var lines = raw.split("\n") - if (lines.shift() !== API_MAGIC) - { - warn("bad api: party save") - 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 = "party-"+fields[0] - if (result[0] === "OK") - { warn("party saved") } - else if (result[0] === "NEW") - { - warn("party created") - $("#partyList").append("<li id='"+rowID+"'>"+fields[1]+"</li>") - } - // Party.parties[rowID] = fields - // Party.view(fields[0]) - // Nav.selectClass(Party.parties, rowID) - Main.saving = false - Party.currentID = fields[0] - Party.list() - }, - }; -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 (raw) - { - warn ("got all users") - var lines = raw.split("\n") - if (lines.shift() !== API_MAGIC) - { - warn("bad api: user all") - return - } - var partyUserList = []; - var guestHosts = []; - var editable = []; - var firstletter = "A"; - Users.allCount = 0; - Users.userListIndex = []; - for (i in lines) - { - if (! lines[i]) - continue - var fields = lines[i].split('\t') - // 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 = fields[2].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 || fields[0] === Auth.userID) - { - editSpan += "<span class='edit' id='edit-"+fields[0]+"'>edit</span>"; - editable.push(fields[0]); - } - - switch (fields[1]) { - case '2': // host - userRow = "<"+li+"><span class='view' id='user-"+fields[0]+"'>"+fields[2]+" *</span>" + editSpan + "</li>"; - break; - case '1': // guest host - userRow = "<"+li+"><span class='view' id='user-"+fields[0]+"'>"+fields[2]+" *</span>" + editSpan + "</li>"; - guestHosts.push(userRow); - Users.userListIndex.unshift('user-'+fields[0]); - Users.allCount += 1; - - break; - default: // guest - userRow = "<"+li+"><span class='view' id='user-"+fields[0]+"'>"+fields[2]+"</span>" + editSpan + "</li>"; - } - - partyUserList.push(userRow); - Users.userlist['user-'+fields[0]] = fields; - Users.userListIndex.push('user-'+fields[0]); - 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("*",""); - // console.log(guestHosts); - // guestHosts[guestHosts.length-1] = guestHosts[guestHosts.length-1].replace("<li", "<li class='br'"); - - $('#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( atob ( user[4] ) ) - userRec += "<h2>" + user[2] + "</h2>" - userRec += "<h3>" + ( user[3] ? "<a href='mailto:"+user[3]+"'>"+user[3]+"</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[4] === '1' ? true : false - - // 0 id 1 name 2 email 3 access 4 emailhidden 5 hostid 6 blurb - var blurb = atob ( user[6] ) - $('#user-id').val(user[0]) - $('#user-name').val(user[1]) - $('#user-email').val(user[2]) - $('#user-emailhidden').attr('checked', hidemail) - $('#user-access option').attr("selected", false); - $('#user-access option[value="'+parseInt(user[3])+'"]').attr("selected", true); - $('#user-host option').attr("selected", false); - $('#user-host option[value="'+parseInt(user[5])+'"]').attr("selected", true); - $('#user-blurb').val(blurb) - $('#userViewContainer').hide() - if (user[0] === 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[1]) - } - if (Auth.isHost) - { - $('#user-password-block').show() - $('#user-isstaff-block').show() - $('#user-invitedby-block').show() - $('#user-delete').show() - var ishost = user[3] === '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 ) - }, - }; -var Nav = - { - navIDs: {"nav_about":0,"nav_parties":0,"nav_users":0,"nav_patrons":0,"nav_reunions":0}, - aboutClick: function() - { - this.blur() - $('#aboutMode').show() - $('#patronMode').hide() - $('#partiesMode').hide() - $('#reunionMode').hide() - Nav.selectClass(Nav.navIDs, "nav_about") - $(window).unbind("keydown") - }, - partiesClick: function() - { - this.blur() - $('#aboutMode').hide() - $('#patronMode').hide() - $('#partiesMode').show() - $('#reunionMode').hide() - Nav.selectClass(Nav.navIDs, "nav_parties") - $('#userViewContainer').css("left", 520) - Party.list() - $(window).unbind("keydown") - }, - usersClick: function() - { - this.blur() - $('#aboutMode').hide() - $('#patronMode').hide() - $('#partiesMode').show() - $('#reunionMode').hide() - $('#userListContainer').hide() - $('#partyListContainer').hide() - Nav.selectClass(Nav.navIDs, "nav_users") - $('#userViewContainer').css("left", 320) - Users.all() - $(window).unbind("keydown") - $(window).bind("keydown", Nav.keydown) - }, - patronsClick: function() - { - this.blur() - $('#aboutMode').hide() - $('#partiesMode').hide() - $('#patronMode').show() - $('#reunionMode').hide() - Nav.selectClass(Nav.navIDs, "nav_patrons") - $(window).unbind("keydown") - }, - reunionClick: function() - { - this.blur() - $('#aboutMode').hide() - $('#patronMode').hide() - $('#partiesMode').hide() - $('#reunionMode').show() - Nav.selectClass(Nav.navIDs, "nav_reunions") - $(window).unbind("keydown") - }, - selectClass: function (ids, selected) - { - for (var id in ids) - { - $("#"+id).removeClass("selected") - } - if (selected) - $("#"+selected).addClass("selected") - }, - keydown: function (e) - { - kc = event.keyCode - if (kc === 38) // up - { - // select previous name or last - newIdx = parseInt(Users.currentIdx) - 1 - if (newIdx < 0) - { - newIdx = Users.allCount - 1 - scrollToBottom("body") - } - Users.viewIdx(newIdx) - return false - } - if (kc === 40) // down - { - // select next name or first - newIdx = parseInt(Users.currentIdx) + 1 - if (newIdx === Users.allCount) - { - newIdx = 0 - scrollToTop("body") - } - Users.viewIdx(newIdx) - return false - } - return true - }, - }; -var Auth = - { - name: '', - userID: 1, - isHost: false, - loginPrompt: false, - hosts: {}, - init: function () { - $.post(URL.auth.login, {}, Auth.loginCallback) - }, - unload: function () { - if (Auth.loginPrompt) { - Auth.loginPrompt = false - $('#login').fadeOut(1000, function(){ Main.load()} ) - } - else { - Main.load() - } - }, - load: function () { - $('#login').fadeIn(1000) - $('#login-email').focus() - $('#login-email').keydown(Main.kp) - $('#login-password').keydown(Main.kp) - $('#login-go').click( Auth.login ) - Auth.loginPrompt = true - Main.saveFunction = Auth.login - Main.saving = false - }, - login: function () { - if (Main.saving) - return - Main.saving = true - warn("attempting login") - var data = { - username: $('#login-email').val(), - password: $('#login-password').val(), - } - $('#login-password').val(''), - $.post(URL.auth.login, data, Auth.loginCallback) - }, - loginCallback: function (json) { - Main.saving = false - - if (! json || json.error) { - if (! Auth.loginPrompt) - Auth.load() - else - warn("bad login!") - return - } - - // 0 id 1 name 2 firstname 3 email 4 access - var user = Auth.user = json.user - -console.log(user) - - var name = user.name.split(' ')[0] || user.email.split('@')[0] - warn( "Logged in! Hello "+name ) - Auth.userID = user.id - Auth.isHost = user.access == 2 ? true : false; - Auth.name = user.name - Auth.firstName = name - - $('#profile-edit').html(Auth.firstName + "!") - $('#logout').click( Auth.logout ) - - var hostSelect = "" - Auth.hosts = {} - json.hosts.forEach(function(host){ - if (host.id === Auth.userID) - hostSelect += "<option value='"+host.id+"' selected='1'>"+host.name+"</option>" - else - hostSelect += "<option value='"+host.id+"'>"+host.name+"</option>" - Auth.hosts[ host.id ] = host.name - }) - - $("#user-host").html(hostSelect) - - Auth.unload() - }, - logout: function () - { - warn("logging out") - document.cookie = 'sid.protocols=LOGGEDOUT; expires=Mon, 1 Jan 2001 12:00:00 UTC; path=/' - Main.unload() - }, - }; -var Main = - { - saveFunction: false, - saving: false, - kp: function (e) - { - var evt = window.event ? window.event : e - var key = evt.keyCode ? evt.keyCode : e.which - if (key === 13) - Main.saveFunction() - }, - init: function () - { - warn("init site") - Auth.init() - }, - unload: function () - { - $('header').fadeOut(500) - $('section').fadeOut(500) - $('footer').fadeOut(500) - $('#bg').fadeIn(500) - Auth.init() - }, - load: function () - { - warn("loading site") - $('#bg').fadeOut(500) - $('header').show() - $('#welcome').fadeIn(500) - $('#nav_about').click( Nav.aboutClick ) - $('#nav_users').click( Nav.usersClick ) - $('#nav_patrons').click( Nav.patronsClick ) - $('#nav_reunions').click( Nav.reunionClick ) - if (Auth.isHost) - { - $('#nav_parties').show() - $('#nav_parties').click( Nav.partiesClick ) - $('#user-add').click( Users.addClick ) - $('#user-delete').click( Users.deleteClick ) - $('#party-add').click( Party.addClick ) - $('#party-edit').click( Party.editClick ) - } - else - { - $('#nav_parties').hide() - $('#user-add').hide() - $('#user-delete').hide() - $('#party-add').hide() - $('#party-edit').hide() - } - $('#user-save').click( Users.editSave ) - $('#user-name').keydown(Main.kp) - $('#user-email').keydown(Main.kp) - $('#user-password2').keydown(Main.kp) - $('#party-location').keydown(Main.kp) - $('#party-day').keydown(Main.kp) - $('#party-year').keydown(Main.kp) - $('#party-save').click( Party.editSave ) - Nav.selectClass(Nav.navIDs, "nav_about") - $('#aboutMode').show() - warn("done!") - }, - }; -Main.init(); 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 ) + }, + }; diff --git a/public/js/util.js b/public/js/util.js new file mode 100644 index 0000000..7b2520e --- /dev/null +++ b/public/js/util.js @@ -0,0 +1,137 @@ +var URLregexp = /^(https?:\/\/)(www.)?([-A-Z0-9.]+)(\/)?([-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])*/ig; +var months = { Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5, Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11 } +function isScrolledIntoView (elem) + { + return true; + var docViewTop = $(window).scrollTop(); + var docViewBottom = docViewTop + $(window).height(); + var elemTop = $(elem).offset().top; + var elemBottom = elemTop + $(elem).height(); + return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom)); + } +function scrollToTop (div) + { $(div).scrollTop( 0 ) } +function scrollToBottom (div) + { $(div).scrollTop( $(div)[0].scrollHeight ) } +function warn(s) + { +// return + console.log(s) + var h = document.getElementById('msg').innerHTML + h = s + '<br/>' + h + document.getElementById('msg').innerHTML = h + } +var image_extensions = ["jpg","gif","png","jpeg","JPEG","JPG","GIF","PNG"] +function is_image(s) + { + for (i in image_extensions) + { + if (s.indexOf(image_extensions[i]) !== -1) + return true + } + return false + } +var domain_extensions = [".com",".net",".org",".uk",".fr",".de",".ch",".info",".nu",".mu",".io","facebook.com","twitter.com"] +function has_domain(s) + { + for (var i in domain_extensions) + { + if (s.indexOf(domain_extensions[i]) !== -1) + return true + } + return false + } +function parse_blurb(s) + { + // s = linkify(s+"\n") + var parsed_lines = [] + var lines = s.split("\n") + for (i in lines) + { + var parsed_words = [] + var words = lines[i].split(" ") + for (j in words) + { + if (words[j].indexOf("http") !== -1) + { + if (is_image(words[j])) + parsed_words.push('<img src="'+words[j]+'"/>') + else + parsed_words.push(linkify(words[j])) + } + else if (words[j].indexOf("www") === 0 || has_domain(words[j])) + { + parsed_words.push(linkify("http://"+words[j])) + } + else + parsed_words.push(words[j]) + } + parsed_lines.push( parsed_words.join(" ") ) + } + // return s.replace(/\n/g, '<br/>') + return parsed_lines.join("<br/>") + } +function linkify(s) + { + var link = ''; + var punctuation = ''; + var end = s.length-1; + + // strip the terminal punctuation mark if it's a period or comma + if (s.indexOf(".", end) === end || s.indexOf(",", end) === end) + { + punctuation = s.substr(end, 1); + s = s.substr(0, end); + } + if (s.indexOf("twitter.com") !== -1) + { + var partz = s.split("/"); + var uname = ''; + if (partz[partz.length-1].length) + uname = partz[partz.length-1]; + else if (parts[-2].length) + uname = partz[partz.length-2]; + link = '<a href="https://twitter.com/' + uname + '" target="_blank">@' + uname + '</a>'; + } + else + { + // link = s.replace(URLregexp,"<a href='$1$2$3$4$5' target='_blank'>[$3]</a>"); + var match = URLregexp.exec(s); + if (match && match.length == 6) + { + var url = match[0] || ""; + var http = match[1] || ""; + var www = match[2] || ""; + var domain = match[3] || ""; + var slash = match[4] || ""; + var uri = match[5] ? match[5].replace(/\/?index.html$/, "") : ""; + link = '<a href="' + url + '" target="_blank">[' + domain + ']</a>'; + } + else + { + link = s.replace(URLregexp,"<a href='$1$2$3$4$5' target='_blank'>[$3]</a>"); + } + } + return link + punctuation; + } +var URL = + { + auth: + { + login: "/login", + logout: "/logout", + }, + party: + { + list: "/api/party/list", + view: "/api/party/view", + edit: "/api/party/edit", + }, + user: + { + all: "/api/user/all", + view: "/api/user/view", + edit: "/api/user/edit", + destroy: "/api/user/destroy", + }, + }; diff --git a/public/js/base64.js b/public/js/vendor/base64.js index 2530e71..2530e71 100644 --- a/public/js/base64.js +++ b/public/js/vendor/base64.js diff --git a/public/js/jquery-1.4.4.min.js b/public/js/vendor/jquery-1.4.4.min.js index 8f3ca2e..8f3ca2e 100644 --- a/public/js/jquery-1.4.4.min.js +++ b/public/js/vendor/jquery-1.4.4.min.js diff --git a/public/protocols/index.html b/public/protocols/index.html index 62a5ebf..2c04d3f 100644 --- a/public/protocols/index.html +++ b/public/protocols/index.html @@ -224,8 +224,13 @@ Illustration by <a href="http://mollycrabapple.com/" target="_blank">Molly Craba </section> </body> -<script type="text/javascript" src="/js/jquery-1.4.4.min.js"></script> -<script type="text/javascript" src="/js/base64.js"></script> -<script type="text/javascript" src="/js/protocols_site.js"></script> +<script type="text/javascript" src="/js/vendor/jquery-1.4.4.min.js"></script> +<script type="text/javascript" src="/js/vendor/base64.js"></script> +<script type="text/javascript" src="/js/util.js"></script> +<script type="text/javascript" src="/js/party.js"></script> +<script type="text/javascript" src="/js/user.js"></script> +<script type="text/javascript" src="/js/nav.js"></script> +<script type="text/javascript" src="/js/auth.js"></script> +<script type="text/javascript" src="/js/main.js"></script> </html> |
