aboutsummaryrefslogtreecommitdiff
path: root/src/js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js')
-rw-r--r--src/js/Botleagues.coffee54
-rw-r--r--src/js/Botleagues.js26
-rw-r--r--src/js/BotleaguesCallback.coffee52
-rw-r--r--src/js/BotleaguesCallback.js32
-rw-r--r--src/js/BotleaguesFrontend.coffee42
-rw-r--r--src/js/BotleaguesFrontend.js28
-rw-r--r--src/js/forms.coffee33
-rw-r--r--src/js/forms.js12
-rw-r--r--src/js/main.coffee31
-rw-r--r--src/js/profile.coffee17
10 files changed, 229 insertions, 98 deletions
diff --git a/src/js/Botleagues.coffee b/src/js/Botleagues.coffee
new file mode 100644
index 0000000..06ace76
--- /dev/null
+++ b/src/js/Botleagues.coffee
@@ -0,0 +1,54 @@
+$.cookie.json = true
+
+@Botleagues =
+
+ url: 'https://api.local.botleagues.camilstaps.nl'
+
+ cookie_login_email: 'botleagues_login_email'
+ cookie_login_user_id: 'botleagues_login_user_id'
+ cookie_login_token: 'botleagues_login_token'
+ cookie_login_valid_till: 'botleagues_login_valid_till'
+
+ request: (user_options) ->
+ callback = user_options.callback
+
+ options =
+ method: 'GET'
+ dataType: 'json'
+ complete: (data) ->
+ callback data.responseJSON
+
+ url = Botleagues.url + '/' + user_options.endpoint
+ delete user_options.callback
+ delete user_options.endpoint
+
+ for key, option of user_options
+ options[key] = option
+
+ jQuery.ajax url, options
+
+ return
+
+ login: (email, password) ->
+ Botleagues.request
+ endpoint: 'user_token'
+ method: 'POST'
+ callback: BotleaguesCallback.login
+ headers:
+ 'Authorization': 'Basic ' + btoa(email + ':' + password)
+
+ $.cookie Botleagues.cookie_login_email, email
+
+ return
+
+ logout: ->
+ Botleagues.clearLoginCookies()
+ window.location = '/'
+ return
+
+ clearLoginCookies: ->
+ $.removeCookie Botleagues.cookie_login_email
+ $.removeCookie Botleagues.cookie_login_user_id
+ $.removeCookie Botleagues.cookie_login_token
+ $.removeCookie Botleagues.cookie_login_valid_till
+ return \ No newline at end of file
diff --git a/src/js/Botleagues.js b/src/js/Botleagues.js
deleted file mode 100644
index f9d34b7..0000000
--- a/src/js/Botleagues.js
+++ /dev/null
@@ -1,26 +0,0 @@
-function Botleagues(){}
-
-Botleagues.url = 'https://api.local.botleagues.camilstaps.nl';
-
-Botleagues.request = function(user_options, callback) {
- var options = {
- endpoint: null,
- method: 'GET',
- dataType: 'json',
- complete: function(data) {
- callback(data.responseJSON);
- }
- };
- for (var name in user_options) {
- options[name] = user_options[name];
- }
-
- var url = Botleagues.url + '/' + options['endpoint'];
- delete options['endpoint'];
-
- jQuery.ajax(url, options);
-};
-
-Botleagues.redirect = function(user_options) {
- window.location = Botleagues.url + '/' + user_options['endpoint'];
-}; \ No newline at end of file
diff --git a/src/js/BotleaguesCallback.coffee b/src/js/BotleaguesCallback.coffee
new file mode 100644
index 0000000..a02ee59
--- /dev/null
+++ b/src/js/BotleaguesCallback.coffee
@@ -0,0 +1,52 @@
+@BotleaguesCallback =
+
+ register: (data) ->
+ $ 'form.form-register .form-group'
+ .removeClass 'has-feedback has-success has-warning has-error'
+ .find '.form-control-feedback'
+ .remove()
+
+ if data.error?
+ BotleaguesFrontend.error
+ message: data.error
+ prepend_to: $ 'form.form-register'
+
+ for key, msgs of data.errors
+ error_msg = msgs.join '; '
+
+ $('#register-' + key)
+ .attr 'title', error_msg
+ .parent()
+ .addClass 'has-feedback has-error'
+ .append(
+ $ '<span>'
+ .addClass 'glyphicon glyphicon-remove form-control-feedback'
+ .attr 'aria-hidden', true
+ )
+ .find 'label'
+ .append(
+ $ '<span>'
+ .addClass 'pull-right text-danger'
+ .text error_msg
+ )
+
+ return
+
+ login: (data) ->
+ if data.user_token?
+ BotleaguesFrontend.success
+ message: 'Login successful! Refreshing the page...'
+
+ $.cookie Botleagues.cookie_login_user_id, data.user_token.userId
+ $.cookie Botleagues.cookie_login_token, data.user_token.token
+ $.cookie Botleagues.cookie_login_valid_till, (new Date()).getTime() + Date.parse(data.user_token.valid_till) - Date.parse(data.user_token.updated_at)
+
+ window.setTimeout (-> window.location = 'profile'), 1000
+
+ else
+ BotleaguesFrontend.error
+ message: if data.error? then data.error else "Could not login."
+
+ $.removeCookie Botleagues.cookie_login_email
+
+ return \ No newline at end of file
diff --git a/src/js/BotleaguesCallback.js b/src/js/BotleaguesCallback.js
deleted file mode 100644
index f162e7c..0000000
--- a/src/js/BotleaguesCallback.js
+++ /dev/null
@@ -1,32 +0,0 @@
-function BotleaguesCallback(){}
-
-BotleaguesCallback.register = function(data) {
- $('form.form-register .form-group')
- .removeClass('has-feedback has-success has-warning, has-error')
- .find('.form-control-feedback').remove();
-
- if (typeof data.error !== 'undefined') {
- BotleaguesFrontend.error({message: data.error, prepend_to: $('form.form-register')});
- if (typeof data.errors !== 'undefined') {
- for (var key in data.errors) {
- var error_msg = data.errors[key].join('; ');
-
- $('#register-' + key)
- .attr('title', error_msg)
- .parent()
- .addClass('has-feedback has-error')
- .append(
- $('<span>')
- .addClass('glyphicon glyphicon-remove form-control-feedback')
- .attr('aria-hidden', true)
- )
- .find('label')
- .append(
- $('<span>')
- .addClass('pull-right text-danger')
- .text(error_msg)
- );
- }
- }
- }
-}; \ No newline at end of file
diff --git a/src/js/BotleaguesFrontend.coffee b/src/js/BotleaguesFrontend.coffee
new file mode 100644
index 0000000..5c2d116
--- /dev/null
+++ b/src/js/BotleaguesFrontend.coffee
@@ -0,0 +1,42 @@
+@BotleaguesFrontend =
+
+ message: (user_options) ->
+ options =
+ dismissable: true
+ prepend_to: $ '#messages'
+ type: 'info'
+
+ for key, option of user_options
+ options[key] = option
+
+ html = '<div class="alert alert-' + options.type + '">'
+ if options.dismissable
+ html += '<a href="#" class="close" data-dismiss="alert">&times;</a>'
+ html += options.message
+ html += '</div>'
+
+ html = $ html
+ html
+ .hide()
+ .prependTo options.prepend_to
+ .slideDown()
+ .delay 3000
+ .fadeOut()
+ .queue html.remove
+
+ return
+
+ error: (user_options) ->
+ user_options.type = 'danger'
+ BotleaguesFrontend.message user_options
+
+ danger: (user_options) ->
+ BotleaguesFrontend.error user_options
+
+ success: (user_options) ->
+ user_options.type = 'success'
+ BotleaguesFrontend.message user_options
+
+ warning: (user_options) ->
+ user_options.type = 'warning'
+ BotleaguesFrontend.message user_options \ No newline at end of file
diff --git a/src/js/BotleaguesFrontend.js b/src/js/BotleaguesFrontend.js
deleted file mode 100644
index e9ab570..0000000
--- a/src/js/BotleaguesFrontend.js
+++ /dev/null
@@ -1,28 +0,0 @@
-function BotleaguesFrontend(){}
-
-BotleaguesFrontend.error = function(user_options) {
- options = {
- dismissable: true,
- prepend_to: $('#messages'),
- type: 'danger'
- };
- for (var key in user_options) {
- options[key] = user_options[key];
- }
-
- var html = '<div class="alert alert-' + options.type + '">';
- if (options.dismissable === true)
- html += '<a href="#" class="close" data-dismiss="alert">&times;</a>';
- html += options.message;
- html += '</div>';
-
- html = $(html);
-
- html.prependTo(options.prepend_to).delay(3000).fadeOut().queue(html.remove);
-};
-
-BotleaguesFrontend.login = function() {
- Botleagues.redirect({
- endpoint: 'user/login?redirect=http://local.botleagues.camilstaps.nl/'
- });
-}; \ No newline at end of file
diff --git a/src/js/forms.coffee b/src/js/forms.coffee
new file mode 100644
index 0000000..fe237c2
--- /dev/null
+++ b/src/js/forms.coffee
@@ -0,0 +1,33 @@
+# Request API for registering
+$ 'form.form-register'
+ .submit ->
+ Botleagues.request
+ endpoint: 'user'
+ method: 'POST'
+ data:
+ email:
+ $ this
+ .find 'input[name="email"]'
+ .val()
+ password:
+ $ this
+ .find 'input[name="password"]'
+ .val()
+ callback: BotleaguesCallback.register
+
+ false
+
+# Show login form on click
+$ '.btn-botleagues-login'
+ .focus ->
+ $ '#login-block'
+ .slideDown()
+ $ '#login-email'
+ .focus()
+ false
+
+# Request API for logging in
+$ '#login-form'
+ .submit ->
+ Botleagues.login ($ '#login-email').val(), ($ '#login-password').val()
+ false \ No newline at end of file
diff --git a/src/js/forms.js b/src/js/forms.js
deleted file mode 100644
index 24f0f43..0000000
--- a/src/js/forms.js
+++ /dev/null
@@ -1,12 +0,0 @@
-$('form.form-register').submit(function(){
- Botleagues.request({
- endpoint: 'user',
- method: 'POST',
- data: {
- email: $(this).find('input[name="email"]').val(),
- password: $(this).find('input[name="password"]').val()
- }
- }, BotleaguesCallback.register);
-
- event.preventDefault();
-}); \ No newline at end of file
diff --git a/src/js/main.coffee b/src/js/main.coffee
new file mode 100644
index 0000000..5d21ede
--- /dev/null
+++ b/src/js/main.coffee
@@ -0,0 +1,31 @@
+$ ->
+ # Show extra links if user is logged in
+ email = $.cookie Botleagues.cookie_login_email
+ setupLoginMenu() if email? && $.cookie(Botleagues.cookie_login_valid_till) > (new Date()).getTime()
+ return
+
+# Show extra links if user is logged in
+setupLoginMenu = ->
+ $ '#nav .login-link'
+ .remove()
+
+ extra_links =
+ 'Leagues': '/leagues'
+ 'My Bots': '/profile/bots'
+ 'Profile': '/profile'
+ 'Logout': '/logout'
+
+ for title, link of extra_links
+ li = $ '<li>'
+ .append(
+ $ '<a>'
+ .attr 'role', 'presentation'
+ .attr 'title', title
+ .attr 'href', link
+ .text title
+ )
+ if link == selected_page
+ li.addClass 'active'
+ li.appendTo ($ '#nav')
+
+ return \ No newline at end of file
diff --git a/src/js/profile.coffee b/src/js/profile.coffee
new file mode 100644
index 0000000..7942088
--- /dev/null
+++ b/src/js/profile.coffee
@@ -0,0 +1,17 @@
+$ ->
+ # Show email address in page when logged in
+ setupGreeter()
+ return
+
+# Show email address in page when logged in
+setupGreeter = ->
+ $ '.jumbotron .lead'
+ .append (' ' + $.cookie Botleagues.cookie_login_email)
+ $ '.header h3'
+ .append(
+ $ '<span>'
+ .attr 'id', 'banner-email'
+ .addClass 'text-muted'
+ .text(' / ' + $.cookie Botleagues.cookie_login_email)
+ )
+ return \ No newline at end of file