diff options
Diffstat (limited to 'src/js')
-rw-r--r-- | src/js/Botleagues.coffee | 54 | ||||
-rw-r--r-- | src/js/Botleagues.js | 26 | ||||
-rw-r--r-- | src/js/BotleaguesCallback.coffee | 52 | ||||
-rw-r--r-- | src/js/BotleaguesCallback.js | 32 | ||||
-rw-r--r-- | src/js/BotleaguesFrontend.coffee | 42 | ||||
-rw-r--r-- | src/js/BotleaguesFrontend.js | 28 | ||||
-rw-r--r-- | src/js/forms.coffee | 33 | ||||
-rw-r--r-- | src/js/forms.js | 12 | ||||
-rw-r--r-- | src/js/main.coffee | 31 | ||||
-rw-r--r-- | src/js/profile.coffee | 17 |
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">×</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">×</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 |